<?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>217212</bug_id>
          
          <creation_ts>2020-10-02 04:16:34 -0700</creation_ts>
          <short_desc>Cocoa: Make WebGLLayer not dependent on  GraphicsContextGLOpenGL</short_desc>
          <delta_ts>2021-08-30 06:32:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>macOS 10.15</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=229606</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>217211</blocked>
    
    <blocked>217581</blocked>
    
    <blocked>217213</blocked>
    
    <blocked>217697</blocked>
    
    <blocked>218100</blocked>
    
    <blocked>218177</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kbr</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>msatbentley</cc>
    
    <cc>noam</cc>
    
    <cc>reon90</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1694026</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-02 04:16:34 -0700</bug_when>
    <thetext>Cocoa: Make WebGLLayer surface swap polymorphic to GraphicsContextGL

This is needed so remote WebGL can work

Currently

- (void)prepareForDisplay
{
    if (!_context)
        return;

    // To avoid running any OpenGL code in `display`, this method should be called
    // at the end of the rendering task. We will flush all painting commands
    // leaving the buffers ready to composite.

#if USE(OPENGL)
    _context-&gt;prepareTexture();
    if (_drawingBuffer) {
        std::swap(_contentsBuffer, _drawingBuffer);
        [self bindFramebufferToNextAvailableSurface];
    }
#elif USE(ANGLE)
    if (!_context-&gt;makeContextCurrent()) {
        // Context is likely being torn down.
        return;
    }
    _context-&gt;prepareTexture();
    if (_drawingBuffer) {
        if (_latchedPbuffer) {
            WTF::Optional&lt;ScopedRestoreTextureBinding&gt; restoreBinding;
            // We don&apos;t need to restore GL_TEXTURE_RECTANGLE because it&apos;s not accessible from user code.
            if (WebCore::GraphicsContextGL::IOSurfaceTextureTarget() != WebCore::GraphicsContextGL::TEXTURE_RECTANGLE_ARB)
                restoreBinding.emplace(WebCore::GraphicsContextGL::IOSurfaceTextureTargetQuery(), WebCore::GraphicsContextGL::IOSurfaceTextureTarget());
            GCGLenum texture = _context-&gt;platformTexture();
            gl::BindTexture(WebCore::GraphicsContextGL::IOSurfaceTextureTarget(), texture);
            if (!EGL_ReleaseTexImage(_eglDisplay, _latchedPbuffer, EGL_BACK_BUFFER)) {
                // FIXME: report error.
                notImplemented();
            }
            _latchedPbuffer = nullptr;
        }

        std::swap(_contentsBuffer, _drawingBuffer);
        std::swap(_contentsPbuffer, _drawingPbuffer);
        [self bindFramebufferToNextAvailableSurface];
    }
#endif
    [self setNeedsDisplay];
    _preparedForDisplay = YES;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694027</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-02 04:16:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/69876022&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696844</commentid>
    <comment_count>2</comment_count>
      <attachid>411113</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-12 07:47:47 -0700</bug_when>
    <thetext>Created attachment 411113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696878</commentid>
    <comment_count>3</comment_count>
      <attachid>411113</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 09:32:03 -0700</bug_when>
    <thetext>Comment on attachment 411113
Patch

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

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h:91
&gt; +#if PLATFORM(COCOA)

If this is really not universal, please use a more specific define. Please try to keep PLATFORM usage to a minimum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696880</commentid>
    <comment_count>4</comment_count>
      <attachid>411113</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-12 09:35:04 -0700</bug_when>
    <thetext>Comment on attachment 411113
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h:91
&gt;&gt; +#if PLATFORM(COCOA)
&gt; 
&gt; If this is really not universal, please use a more specific define. Please try to keep PLATFORM usage to a minimum.

It&apos;s universal to COCOA. This patch is about implementation of Cocoa-specific GraphicsContextGLOpenGL.
Unfortunately the setup is what it is before this patch, and this patch does not yet address the fundamental problem with the ifdefs.
This patch does work towards eventually being able to remove the ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696902</commentid>
    <comment_count>5</comment_count>
      <attachid>411127</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-12 10:23:22 -0700</bug_when>
    <thetext>Created attachment 411127
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696904</commentid>
    <comment_count>6</comment_count>
      <attachid>411127</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 10:27:21 -0700</bug_when>
    <thetext>Comment on attachment 411127
Patch

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

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h:93
&gt; +#if PLATFORM(COCOA)
&gt; +    , private WebGLLayerClient
&gt; +#endif

Looks like you kept this PLATFORM(COCOA). Please you use a more specific #define rather here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696920</commentid>
    <comment_count>7</comment_count>
      <attachid>411127</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-12 10:41:16 -0700</bug_when>
    <thetext>Comment on attachment 411127
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h:93
&gt;&gt; +#endif
&gt; 
&gt; Looks like you kept this PLATFORM(COCOA). Please you use a more specific #define rather here.

Would you be able to suggest a define that would be more appropriate and still work with other code defined inside PLATFORM(COCOA) ifdefs and be implemented in the file GraphicsContextGLOpenGLCocoa.mm ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696948</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 11:07:19 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #7)
&gt; Comment on attachment 411127 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411127&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h:93
&gt; &gt;&gt; +#endif
&gt; &gt; 
&gt; &gt; Looks like you kept this PLATFORM(COCOA). Please you use a more specific #define rather here.
&gt; 
&gt; Would you be able to suggest a define that would be more appropriate and
&gt; still work with other code defined inside PLATFORM(COCOA) ifdefs and be
&gt; implemented in the file GraphicsContextGLOpenGLCocoa.mm ?

Sure. Maybe USE(CA) in this case? One day maybe we will have a better PlatformLayer abstraction than what we have right now :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696952</commentid>
    <comment_count>9</comment_count>
      <attachid>411127</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-12 11:32:27 -0700</bug_when>
    <thetext>Comment on attachment 411127
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h:93
&gt;&gt;&gt;&gt; +#endif
&gt;&gt;&gt; 
&gt;&gt;&gt; Looks like you kept this PLATFORM(COCOA). Please you use a more specific #define rather here.
&gt;&gt; 
&gt;&gt; Would you be able to suggest a define that would be more appropriate and still work with other code defined inside PLATFORM(COCOA) ifdefs and be implemented in the file GraphicsContextGLOpenGLCocoa.mm ?
&gt; 
&gt; Sure. Maybe USE(CA) in this case? One day maybe we will have a better PlatformLayer abstraction than what we have right now :(.

But do I rename the file GraphicsContextGLOpenGLCocoa.mm to GraphicsContextGLOpenGLCA.mm ? Do I rename the existing ifdef PLATFORM(COCOA) to PLATFORM(CA) ? None of that existing code will make sense if part of it is CA and part of it is COCOA ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696954</commentid>
    <comment_count>10</comment_count>
      <attachid>411127</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-12 11:38:09 -0700</bug_when>
    <thetext>Comment on attachment 411127
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h:93
&gt;&gt;&gt;&gt;&gt; +#endif
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Looks like you kept this PLATFORM(COCOA). Please you use a more specific #define rather here.
&gt;&gt;&gt; 
&gt;&gt;&gt; Would you be able to suggest a define that would be more appropriate and still work with other code defined inside PLATFORM(COCOA) ifdefs and be implemented in the file GraphicsContextGLOpenGLCocoa.mm ?
&gt;&gt; 
&gt;&gt; Sure. Maybe USE(CA) in this case? One day maybe we will have a better PlatformLayer abstraction than what we have right now :(.
&gt; 
&gt; But do I rename the file GraphicsContextGLOpenGLCocoa.mm to GraphicsContextGLOpenGLCA.mm ? Do I rename the existing ifdef PLATFORM(COCOA) to PLATFORM(CA) ? None of that existing code will make sense if part of it is CA and part of it is COCOA ?

Up to you to rename existing things. This stuff is already a mess of different conflicting defines. If you really feel strongly about keeping this COCOA, I guess that&apos;s ok too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696960</commentid>
    <comment_count>11</comment_count>
      <attachid>411127</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-12 11:41:18 -0700</bug_when>
    <thetext>Comment on attachment 411127
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h:93
&gt;&gt;&gt;&gt;&gt;&gt; +#endif
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Looks like you kept this PLATFORM(COCOA). Please you use a more specific #define rather here.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Would you be able to suggest a define that would be more appropriate and still work with other code defined inside PLATFORM(COCOA) ifdefs and be implemented in the file GraphicsContextGLOpenGLCocoa.mm ?
&gt;&gt;&gt; 
&gt;&gt;&gt; Sure. Maybe USE(CA) in this case? One day maybe we will have a better PlatformLayer abstraction than what we have right now :(.
&gt;&gt; 
&gt;&gt; But do I rename the file GraphicsContextGLOpenGLCocoa.mm to GraphicsContextGLOpenGLCA.mm ? Do I rename the existing ifdef PLATFORM(COCOA) to PLATFORM(CA) ? None of that existing code will make sense if part of it is CA and part of it is COCOA ?
&gt; 
&gt; Up to you to rename existing things. This stuff is already a mess of different conflicting defines. If you really feel strongly about keeping this COCOA, I guess that&apos;s ok too.

Thanks. I&apos;ll keep the COCOA in this patch. Renaming COCOA-&gt;CA should be done in a different patch, targeting specifically that goal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697008</commentid>
    <comment_count>12</comment_count>
      <attachid>411127</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-10-12 14:02:38 -0700</bug_when>
    <thetext>Comment on attachment 411127
Patch

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

&gt; Source/WebCore/ChangeLog:18
&gt; +        Move the back buffer ownership to the GraphicsContextGLOpenGL.

Nice.

&gt; Source/WebCore/ChangeLog:21
&gt; +        Make the front buffer ownership explicit in WebGLLayer.
&gt; +        Move the EGL bindings ownerships of all buffers to
&gt; +        GraphicsContextGLOpenGL.

Nicer!

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.h:34
&gt; +    void* handle { nullptr }; // Client specific metadata handle (such as EGLSurface).

Will a WebGLLayer that is getting remote buffers need a handle? If not, it might be ok if this is specific to EGL.

&gt; Source/WebCore/platform/graphics/cocoa/WebGLLayer.h:63
&gt; +- (WebCore::WebGLLayerBuffer) recycleBuffer;

Nit: We don&apos;t put a space between the return type and the name.

&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContextGLOpenGL.h:93
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +#endif
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; Looks like you kept this PLATFORM(COCOA). Please you use a more specific #define rather here.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Would you be able to suggest a define that would be more appropriate and still work with other code defined inside PLATFORM(COCOA) ifdefs and be implemented in the file GraphicsContextGLOpenGLCocoa.mm ?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Sure. Maybe USE(CA) in this case? One day maybe we will have a better PlatformLayer abstraction than what we have right now :(.
&gt;&gt;&gt; 
&gt;&gt;&gt; But do I rename the file GraphicsContextGLOpenGLCocoa.mm to GraphicsContextGLOpenGLCA.mm ? Do I rename the existing ifdef PLATFORM(COCOA) to PLATFORM(CA) ? None of that existing code will make sense if part of it is CA and part of it is COCOA ?
&gt;&gt; 
&gt;&gt; Up to you to rename existing things. This stuff is already a mess of different conflicting defines. If you really feel strongly about keeping this COCOA, I guess that&apos;s ok too.
&gt; 
&gt; Thanks. I&apos;ll keep the COCOA in this patch. Renaming COCOA-&gt;CA should be done in a different patch, targeting specifically that goal.

I think it is ok to leave the files named Cocoa.

I wonder if we could make WebGLLayerClient an unconditional inheritance though, and have an empty implementation for other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697175</commentid>
    <comment_count>13</comment_count>
      <attachid>411198</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-12 22:43:34 -0700</bug_when>
    <thetext>Created attachment 411198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697176</commentid>
    <comment_count>14</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-12 22:50:20 -0700</bug_when>
    <thetext>&gt; I wonder if we could make WebGLLayerClient an unconditional inheritance though, and have an empty implementation for other ports.

I don&apos;t think the ifdef is a special. There are multiple as severe existing ifdefs, they don&apos;t just stand out because mental adaptation to having ifdefs for member functions but not for base classes.

Adding empty WebGLLayerClient for other ports makes little sense, since it only rises questions of &quot;why do we have WebGLLayerClient when we don&apos;t even have a thing called WebGLLayer nor we make this object a client of anything&quot;.

The solution to the ifdef problem is to work on the inheritance tree so that the cocoa specific code can have normal final cocoa-specific class where the client inheritance is business as usual. This is a preliminary work to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697177</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-12 23:15:18 -0700</bug_when>
    <thetext>kkinnunen@apple.com does not have committer permissions according to https://svn.webkit.org/repository/webkit/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

Rejecting attachment 411198 from commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697178</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-12 23:20:05 -0700</bug_when>
    <thetext>kkinnunen@apple.com does not have reviewer permissions according to https://svn.webkit.org/repository/webkit/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

Rejecting attachment 411198 from commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697185</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-13 00:17:02 -0700</bug_when>
    <thetext>Committed r268386: &lt;https://trac.webkit.org/changeset/268386&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411198.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700896</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-10-22 17:15:16 -0700</bug_when>
    <thetext>*** Bug 218100 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701181</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-10-23 18:28:07 -0700</bug_when>
    <thetext>Great fix for this Kimmo!

This fixes real resource leaks that have been identified in Bug 218100 and Bug 217581. Could this please be merged back to the Safari 14 release branch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701203</commentid>
    <comment_count>20</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-23 21:04:05 -0700</bug_when>
    <thetext>*** Bug 218100 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716372</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-12-22 14:19:40 -0800</bug_when>
    <thetext>*** Bug 219780 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720881</commentid>
    <comment_count>22</comment_count>
    <who name="">reon90</who>
    <bug_when>2021-01-20 07:22:45 -0800</bug_when>
    <thetext>Could you answer what version of Safari contains such fix?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411113</attachid>
            <date>2020-10-12 07:47:47 -0700</date>
            <delta_ts>2020-10-12 10:23:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217212-20201012174745.patch</filename>
            <type>text/plain</type>
            <size>41711</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4MTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmUwYzNjNDVmYzZlN2Vi
YjI3ODk1YjRlMDQ5N2QwYjgzN2UzNTBlZi4uYWJkZGNhYzc3NjMxZjhiNDY1ZmVmOTE0ZThhMmI4
OGEwMzFjNjZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIwLTEwLTEyICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29jb2E6IE1ha2Ug
V2ViR0xMYXllciBub3QgZGVwZW5kZW50IG9uICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MjEyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS82OTg3NjAyMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTExheWVyIHdhcyBuZWVkbGVzc2x5IHVzaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLgorICAgICAgICBUaGlzIGlzIHByb2JsZW1hdGljIGJlY2F1
c2UgV2ViR0xMYXllciBzaG91bGQgd29yayB3aXRoCisgICAgICAgIHVwY29taW5nIHJlbW90ZSBH
cmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUaGUgcHJlcGFyZSBj
YWxsZ3JhcGggd2FzOgorICAgICAgICAgICAgR0NHTE9wZW5HTCAtPiBXZWJHTExheWVyIC0+IEdD
R0xPcGVuR0wKKyAgICAgICAgUmVmYWN0b3IgaXQgdG8gYmU6CisgICAgICAgICAgICBHQ0dMT3Bl
bkdMIC0+IFdlYkdMTGF5ZXIKKworICAgICAgICBNb3ZlIHRoZSBiYWNrIGJ1ZmZlciBvd25lcnNo
aXAgdG8gdGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorICAgICAgICBNYWtlIHRoZSBmcm9u
dCBidWZmZXIgb3duZXJzaGlwIGV4cGxpY2l0IGluIFdlYkdMTGF5ZXIuCisgICAgICAgIE1vdmUg
dGhlIEVHTCBiaW5kaW5ncyBvd25lcnNoaXBzIG9mIGFsbCBidWZmZXJzIHRvCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgIE1ha2UgdGhlIFdlYkdMTGF5ZXIgbm90
IHVzZSBFR0wgb3IgT3BlbkdMLCBpdCBkb2VzIG5vdAorICAgICAgICBuZWVkIGFuZCBjYW5ub3Qg
dXNlIGl0IGFzIG5vdCBhbGwgb2YgaXRzIGNsaWVudHMgdXNlIE9wZW5HTAorICAgICAgICAoaS5l
LiB0aGUgYWJvdmUgbWVudGlvbmVkIHJlbW90ZSB1c2UtY2FzZSkuCisKKyAgICAgICAgSW1wcm92
ZXMgdGhlIG1lbW9yeSB1c2FnZSBieSBub3QgYWxsb2NhdGluZyBmcm9udCBidWZmZXJzCisgICAg
ICAgIHVubGVzcyBuZWVkZWQuIEluIGNhc2UgdGhlIGNhbnZhcyBkb2VzIG5vdCBwcmVzZW50LCB3
aWxsCisgICAgICAgIG5vdCBhbGxvY2F0ZSBmcm9udCBidWZmZXJzIGF0IGFsbC4KKworICAgICAg
ICBJbXByb3ZlcyBlcnJvciBoYW5kbGluZyBvZiB0aGUgYWxsb2NhdGlvbnMgYW5kIEVHTCBiaW5k
aW5ncy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGls
aXRpZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSZXN0b3JlVGV4dHVyZUJp
bmRpbmc6OlNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmc6On5TY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRpZERpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1dlYkdMTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9X
ZWJHTExheWVyLm1tOgorICAgICAgICAoLVtXZWJHTExheWVyIGluaXRXaXRoQ2xpZW50OmRldmlj
ZVBpeGVsUmF0aW86XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUltYWdlU25hcHNob3RX
aXRoQ29sb3JTcGFjZTpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciByZWN5Y2xlQnVmZmVyXSk6
CisgICAgICAgICgtW1dlYkdMTGF5ZXIgcHJlcGFyZUZvckRpc3BsYXlXaXRoQ29udGVudHM6XSk6
CisgICAgICAgICgtW1dlYkdMTGF5ZXIgZGlzcGxheV0pOgorICAgICAgICAoLVtXZWJHTExheWVy
IGRldGFjaENsaWVudF0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdM
TGF5ZXJDbGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViR0xMYXllci5oLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNsaWVu
dDo6fldlYkdMTGF5ZXJDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKToKKwogMjAyMC0xMC0wOCAg
S2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1hYzogUmVt
b3ZlIE9wZW5HTCBhbmQgT3BlbkdMIEVTIGJhY2tlbmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY3M2NlY2E1YWE1
MGRiZDM1ZDU0Mzc1M2E2NjY3MGRhNzUzZGUwYzMuLjI1YmIyNjE2MGZjODkxN2U3YzA0MDZlNGY4
ZjJhOTVjNzg3NGMyZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMTAtMTIgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBDb2NvYTogTWFr
ZSBXZWJHTExheWVyIG5vdCBkZXBlbmRlbnQgb24gIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyMTIKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5ODc2MDIyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVzaW9ucyBvZiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oLiBUaGUKKyAgICAgICAgZmlsZSBpcyBub3cgdXNpbmcg
bm9uLXB1YmxpYyBoZWFkZXJzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToK
KwogMjAyMC0xMC0wOCAgRGF2aWQgUXVlc2FkYSAgPGRhdmlkX3F1ZXNhZGFAYXBwbGUuY29tPgog
CiAgICAgICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24uX3Nob3VsZFJlbGF4VGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nIHNob3VsZCBiZSBhdmFpbGFibGUgb24gaU9TCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzBiNTZlNjA1MmZj
Zjg3YzRhYjYyNzJjZDQyZThhMDQwZjc1ZDM1YS4uZmEyNzQwMjY4ZTQyYTBmOGIwZDhkM2UyMWVk
NWExZGI3ZjNmNmQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMjIxNiw2ICsyMjE2LDggQEAKIAkJN0FGOUIyMDYxOENGQjJE
RjAwQzY0QkVGIC8qIFZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdBRjlCMjAwMThDRkIyREYwMEM2NEJFRiAvKiBWVFRSZWdpb25M
aXN0LmggKi87IH07CiAJCTdBRjlCMjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDkx
OENGQjVGMjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi87IH07CiAJCTdBRjlCMjBGMThDRkI1
RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJl
Z2lvbkxpc3QuaCAqLzsgfTsKKwkJN0JCMzRBMTUyNTM0NTc5MTAwMDI5RDA4IC8qIFdlYkdMTGF5
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCQjM0QTEzMjUzNDU3OTEwMDAyOUQwOCAvKiBXZWJHTExheWVyQ2xpZW50LmggKi87IH07CisJ
CTdCQjM0QTE3MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIz
NEExNjI1MzQ1Q0IyMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5o
ICovOyB9OwogCQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNTVkdHcmFwaGljc0VsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0
QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oICovOyB9OwogCQk3
QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMjlDNkQyNDkzQzhGODAwMjY4MjA0IC8q
IENvbG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QzE4NDNGRTFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTg0M0ZDMUM4QjcyODMwMDJF
Qjk3MyAvKiBBdXRvZmlsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xMDA2NCw2ICsxMDA2Niw4IEBACiAJCTdBRjlCMjA5MThDRkI1RjIwMEM2
NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1ZUVFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5QjIwQTE4Q0ZC
NUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTVlRUUmVnaW9uTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCQjM0QTEzMjUzNDU3OTEwMDAyOUQwOCAvKiBXZWJH
TExheWVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMTGF5
ZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JCMzRBMTYyNTM0NUNC
MjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxMUYzRDI0RkFEMzYwMDA1QkVGMTAg
LyogU2V0dGluZ3MuY3BwLmVyYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZXR0aW5ncy5jcHAuZXJiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzAxMUYzRTI0RkFEMzYwMDA1QkVGMTAgLyogSW50ZXJuYWxTZXR0
aW5nc0dlbmVyYXRlZC5jcHAuZXJiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3Bw
LmVyYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMTFGM0YyNEZBRDM2MDAwNUJF
RjEwIC8qIEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuaWRsLmVyYiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJbnRlcm5hbFNl
dHRpbmdzR2VuZXJhdGVkLmlkbC5lcmI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTg3OCw2ICsyMTg4Miw3IEBACiAJCQkJNkUyN0YyNDMyMjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVu
c2lvbnNHTEFOR0xFLmNwcCAqLywKIAkJCQk2RTI3RjI0NDIyOUM5RjhEMDBGMUY2MzIgLyogRXh0
ZW5zaW9uc0dMQU5HTEUuaCAqLywKIAkJCQk2RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgKi8sCisJCQkJN0JCMzRBMTYyNTM0NUNCMjAwMDI5RDA4
IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCAqLywKIAkJCQk2RTI5MDg2MTIy
OURCOTUwMDAwOTg2RTIgLyogVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcCAqLywKIAkJCQk2RTI5
MDg2MzIyOURCOTcwMDAwOTg2RTIgLyogVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmggKi8sCiAJCQkp
OwpAQCAtMjY0MjgsNiArMjY0MzMsNyBAQAogCQkJCUNENUQyNzc1MUU4MzE4RTAwMEQ4MEEzRCAv
KiBXZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24ubW0gKi8sCiAJCQkJNDlGRkJGM0QxMUM5M0VF
MzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCAqLywKIAkJCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcx
MTggLyogV2ViR0xMYXllci5tbSAqLywKKwkJCQk3QkIzNEExMzI1MzQ1NzkxMDAwMjlEMDggLyog
V2ViR0xMYXllckNsaWVudC5oICovLAogCQkJCTMxODQzNkRCMjFCOURBQTAwMEVEMzgzRSAvKiBX
ZWJHUFVMYXllci5oICovLAogCQkJCTMxODQzNkREMjFCOURBQTAwMEVEMzgzRSAvKiBXZWJHUFVM
YXllci5tbSAqLywKIAkJCSk7CkBAIC0zMTcwNCw2ICszMTcxMCw3IEBACiAJCQkJQTg3MURFMkEw
QTE1MkFDODAwQjEyQTY4IC8qIEhUTUxJRnJhbWVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEVBN0QyRDBBMTkzODU1MDBBOEVGNUYgLyogSFRNTEltYWdlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThFQTdEMkIwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUxvYWRlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0JCMzRBMTcyNTM0NUNCMjAwMDI5RDA4IC8qIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTM2OUNDMDk3
Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
MzVEMkQ3ODFGNUYxRkJEMDAxNDFERUQgLyogSFRNTElucHV0RWxlbWVudEVudHJpZXNBUEkuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3QkM4NDlCMTIzNzBBNEIwMDBDNjE2MSAvKiBIVE1MSW5wdXRT
dHJlYW0uaCBpbiBIZWFkZXJzICovLApAQCAtMzE4NjEsNiArMzE4NjgsNyBAQAogCQkJCTcyMUI0
OTc0MjUxMkJBM0IwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAvKiBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
N0JCMzRBMTUyNTM0NTc5MTAwMDI5RDA4IC8qIFdlYkdMTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQjAyNDA3NTg3RTAwQUFFMDQ1IC8qIElt
YWdlQnVmZmVyQ0dCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
R0xBTkdMRS5jcHAKaW5kZXggNTU1NTZkNDYwMTdjYzExMjMzMTlhYzI5MTkwYjBkYmUzMzI0NGFj
NS4uZDQ3MWM0MjJjYzQ3MjhiZmVjZjMwZTkxZjY5MjdmMTRlMTcyNmRjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTIwOSwxMiArMjA5LDExIEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAg
QVNTRVJUKG1fdGV4dHVyZSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIWFsbG9j
YXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKHNpemUpKSB7CisgICAgaWYgKCFyZXNoYXBlRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoKSkgewogICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBV
bmFibGUgdG8gYWxsb2NhdGUgYmFja2luZyBzdG9yZSBvZiBzaXplICVkIHggJWQiLCB3aWR0aCwg
aGVpZ2h0KTsKICAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0gICAgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxh
eWVyKCk7CiAgICAgaWYgKG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSkgewogICAgICAg
ICAvLyBUaGUgY29udGV4dCByZXF1aXJlcyB0aGUgdXNlIG9mIGFuIGludGVybWVkaWF0ZSB0ZXh0
dXJlIGluIG9yZGVyIHRvIGltcGxlbWVudAogICAgICAgICAvLyBwcmVzZXJ2ZURyYXdpbmdCdWZm
ZXI6dHJ1ZSB3aXRob3V0IGFudGlhbGlhc2luZy4KQEAgLTUyMCw2ICs1MTksMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgICAgICByZXR1cm47
CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBwcmVwYXJlVGV4dHVyZUltcGwoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkK
K3sKKyAgICBBU1NFUlQoIW1fbGF5ZXJDb21wb3NpdGVkKTsKIAogICAgIGlmIChjb250ZXh0QXR0
cmlidXRlcygpLmFudGlhbGlhcykKICAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vz
c2FyeSgpOwpAQCAtNTU1LDcgKzU2MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnByZXBhcmVUZXh0dXJlKCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBnbDo6QmluZEZy
YW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CiAgICAgfQot
ICAgIGdsOjpGbHVzaCgpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4
dEdMQU5HTEVVdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTk5Y2Q4YWVmZjc3MzcyOWQ0YTg2OGIz
YmIzMTg3ODFjM2ZmMTNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oCkBAIC0w
LDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0Uo
QU5HTEUpCisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworI2RlZmluZSBFR0xfRUdMX1BST1RPVFlQRVMgMAorLy8gU2tpcCB0aGUg
aW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5v
dy4KKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdMRV9l
eHBsaWNpdF9jb250ZXh0X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNpbXBv
cnQgPEFOR0xFL2VnbC5oPiAgLy8gTk9MSU5UCisjaW1wb3J0IDxBTkdMRS9lZ2xleHQuaD4KKyNp
bXBvcnQgPEFOR0xFL2VnbGV4dF9hbmdsZS5oPgorI2ltcG9ydCA8QU5HTEUvZW50cnlfcG9pbnRz
X2VnbC5oPgorI2ltcG9ydCA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbF9leHQuaD4KKyNpbXBvcnQg
PEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+CisjaW1wb3J0IDxBTkdMRS9l
bnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorI2ltcG9ydCA8QU5HTEUvZ2wyZXh0Lmg+
CisjaW1wb3J0IDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyk7CitwdWJsaWM6CisgICAgU2NvcGVk
UmVzdG9yZVRleHR1cmVCaW5kaW5nKEdDR0xlbnVtIGJpbmRpbmdQb2ludFF1ZXJ5LCBHQ0dMZW51
bSBiaW5kaW5nUG9pbnQsIGJvb2wgY29uZGl0aW9uID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChiaW5kaW5nUG9pbnQgIT0gc3RhdGljX2Nhc3Q8R0NHTGVudW0+KDB1KSk7CisgICAgICAg
IGlmIChjb25kaXRpb24pIHsKKyAgICAgICAgICAgIG1fYmluZGluZ1BvaW50ID0gYmluZGluZ1Bv
aW50OworICAgICAgICAgICAgZ2w6OkdldEludGVnZXJ2KGJpbmRpbmdQb2ludFF1ZXJ5LCByZWlu
dGVycHJldF9jYXN0PEdMaW50Kj4oJm1fYmluZGluZ1ZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB+U2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nKCkKKyAgICB7CisgICAgICAgIGlm
IChtX2JpbmRpbmdQb2ludCkKKyAgICAgICAgICAgIGdsOjpCaW5kVGV4dHVyZShtX2JpbmRpbmdQ
b2ludCwgbV9iaW5kaW5nVmFsdWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHTGVudW0gbV9i
aW5kaW5nUG9pbnQgeyAwIH07CisgICAgR0x1aW50IG1fYmluZGluZ1ZhbHVlIHsgMHUgfTsKK307
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5t
bQppbmRleCA5NWVkMDk2Yzc3NzRiMGI1Zjg3Y2M0MmMwYmVmMGUwNGQ4MDdmMzM3Li5iMWQwZDY4
YzFjYmVkYmVhZjVmZjlkMzNlYzBhNGJjNjk0OWQyOWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29jb2EubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmgiCiAKICNpbXBvcnQgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisj
aW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIKICNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKICNp
bXBvcnQgIkxvZ2dpbmcuaCIKQEAgLTQwLDIxICs0MSw2IEBACiAjaW1wb3J0IDx3dGYvQmxvY2tP
YmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jZGVmaW5l
IEVHTF9FR0xfUFJPVE9UWVBFUyAwCi0vLyBTa2lwIHRoZSBpbmNsdXNpb24gb2YgQU5HTEUncyBl
eHBsaWNpdCBjb250ZXh0IGVudHJ5IHBvaW50cyBmb3Igbm93LgotI2RlZmluZSBHTF9BTkdMRV9l
eHBsaWNpdF9jb250ZXh0Ci0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHRfZ2xlczEK
LXR5cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0OwotI2ltcG9ydCA8QU5HTEUvZWdsLmg+Ci0jaW1w
b3J0IDxBTkdMRS9lZ2xleHQuaD4KLSNpbXBvcnQgPEFOR0xFL2VnbGV4dF9hbmdsZS5oPgotI2lt
cG9ydCA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbC5oPgotI2ltcG9ydCA8QU5HTEUvZW50cnlfcG9p
bnRzX2VnbF9leHQuaD4KLSNpbXBvcnQgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRv
Z2VuLmg+Ci0jaW1wb3J0IDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgot
I2ltcG9ydCA8QU5HTEUvZ2wyZXh0Lmg+Ci0jaW1wb3J0IDxBTkdMRS9nbDJleHRfYW5nbGUuaD4K
LQogI2lmIFBMQVRGT1JNKE1BQykKICNpbXBvcnQgIlNjcmVlblByb3BlcnRpZXMuaCIKICNpbXBv
cnQgPE9wZW5HTC9DR0xSZW5kZXJlcnMuaD4KQEAgLTM0OCwxMSArMzM0LDEwIEBAIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgYXR0CiAKICAgICAvLyBDcmVhdGUgdGhlIFdlYkdMTGF5ZXIKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgbV93ZWJHTExheWVyID0gYWRvcHROUyhb
W1dlYkdMTGF5ZXIgYWxsb2NdIGluaXRXaXRoR3JhcGhpY3NDb250ZXh0R0w6dGhpc10pOworICAg
ICAgICBtX3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhD
bGllbnQ6dGhpcyBkZXZpY2VQaXhlbFJhdGlvOmF0dHJzLmRldmljZVBpeGVsUmF0aW9dKTsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0TmFtZTpAIldlYkdMIExheWVy
Il07CiAjZW5kaWYKLSAgICAgICAgW21fd2ViR0xMYXllciBzZXRFR0xEaXNwbGF5Om1fZGlzcGxh
eU9iaiBjb25maWc6bV9jb25maWdPYmpdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
IAogICAgIC8vIENyZWF0ZSB0aGUgdGV4dHVyZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGZy
YW1lYnVmZmVyLgpAQCAtNDI0LDEwICs0MDksMTcgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgICAgIGlmIChtX3ByZXNlcnZlRHJhd2lu
Z0J1ZmZlckZCTykKICAgICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fcHJl
c2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKIAotICAgICAgICBbbV93ZWJHTExheWVyIHJlbGVhc2VH
TFJlc291cmNlc107CisgICAgICAgIGlmIChtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyKQorICAgICAg
ICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1
ZmZlcik7CisgICAgICAgIGF1dG8gcmVjeWNsZWRCdWZmZXIgPSBbbV93ZWJHTExheWVyIHJlY3lj
bGVCdWZmZXJdOworICAgICAgICBpZiAocmVjeWNsZWRCdWZmZXIuaGFuZGxlKQorICAgICAgICAg
ICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgcmVjeWNsZWRCdWZmZXIuaGFuZGxl
KTsKKyAgICAgICAgYXV0byBjb250ZW50c0hhbmRsZSA9IFttX3dlYkdMTGF5ZXIgZGV0YWNoQ2xp
ZW50XTsKKyAgICAgICAgaWYgKGNvbnRlbnRzSGFuZGxlKQorICAgICAgICAgICAgRUdMX0Rlc3Ry
b3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgY29udGVudHNIYW5kbGUpOworCiAgICAgICAgIEVHTF9N
YWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwg
RUdMX05PX0NPTlRFWFQpOwogICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5T2Jq
LCBtX2NvbnRleHRPYmopOwotICAgICAgICBbbV93ZWJHTExheWVyIHNldENvbnRleHQ6bnVsbHB0
cl07CiAgICAgfQogCiAgICAgTE9HKFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wgKCVwKS4iLCB0aGlzKTsKQEAgLTQ3Niw2ICs0NjgsMTAgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKICAgICBpZiAoIW1fY29u
dGV4dE9iaikKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIElmIHRoZXJlIGlzIG5vIGRy
YXdpbmcgYnVmZmVyLCB3ZSBmYWlsZWQgdG8gYWxsb2NhdGUgb25lIGR1cmluZyBwcmVwYXJpbmcg
Zm9yIGRpc3BsYXkuCisgICAgLy8gVGhlIGV4Y2VwdGlvbiBpcyB0aGUgY2FzZSB3aGVuIHRoZSBj
b250ZXh0IGlzIHVzZWQgYmVmb3JlIHJlc2hhcGluZy4KKyAgICBpZiAoIW1fZGlzcGxheUJ1ZmZl
ckJhY2tpbmcgJiYgIWdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gQU5HTEUgaGFzIGFuIGVhcmx5IG91dCBmb3IgY2Fz
ZSB3aGVyZSBub3RoaW5nIGNoYW5nZXMuIENhbGxpbmcgTWFrZUN1cnJlbnQKICAgICAvLyBpcyBp
bXBvcnRhbnQgdG8gc2V0IHZvbGF0aWxlIHBsYXRmb3JtIGNvbnRleHQuIFNlZSBJbml0aWFsaXpl
RUdMRGlzcGxheSgpLgogICAgIGlmICghRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdM
X05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopKQpAQCAtNTcxLDE2ICs1
NjcsNjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4dCgp
CiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVJT1N1
cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSBzaXplKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKIHsKLSAgICBMT0coV2ViR0wsICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUgYXQg
JWQgeCAlZC4gKCVwKSIsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdGhpcyk7Ci0gICAg
cmV0dXJuIFttX3dlYkdMTGF5ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6
ZTpzaXplIHVzaW5nQWxwaGE6Y29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYV07CisgICAgQVNTRVJU
KCFnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSk7CisgICAgLy8gUmVzZXQg
dGhlIGN1cnJlbnQgYmFja2J1ZmZlciBub3cgYmVmb3JlIGFsbG9jYXRpbmcgYSBuZXcgb25lIGlu
IG9yZGVyIHRvIHNsaWdodGx5IHJlZHVjZSBtZW1vcnkgcHJlc3N1cmUuCisgICAgaWYgKG1fZGlz
cGxheUJ1ZmZlckJhY2tpbmcpIHsKKyAgICAgICAgbV9kaXNwbGF5QnVmZmVyQmFja2luZy5yZXNl
dCgpOworICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlC
dWZmZXJQYnVmZmVyKTsKKyAgICAgICAgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciA9IEVHTF9OT19T
VVJGQUNFOworICAgIH0KKyAgICAvLyBSZXNldCB0aGUgZnV0dXJlIHJlY3ljbGVkIGJ1ZmZlciBu
b3csIGJlY2F1c2UgaXQgbW9zdCBsaWtlbHkgd2lsbCBub3QgYmUgcmV1c2FibGUgYXQgdGhlIHRp
bWUgaXQgd2lsbCBiZSByZXVzZWQuCisgICAgYXV0byByZWN5Y2xlZEJ1ZmZlciA9IFttX3dlYkdM
TGF5ZXIgcmVjeWNsZUJ1ZmZlcl07CisgICAgaWYgKHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkKKyAg
ICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgcmVjeWNsZWRCdWZmZXIuaGFu
ZGxlKTsKKyAgICByZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlLnJlc2V0KCk7CisKKyAgICBhdXRvIGJh
Y2tpbmcgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVy
U2l6ZSgpLCBXZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpKTsKKyAgICBpZiAoIWJhY2tpbmcp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJhY2tpbmctPm1pZ3JhdGVDb2xvclNwYWNl
VG9Qcm9wZXJ0aWVzKCk7CisKKyAgICBjb25zdCBib29sIHVzaW5nQWxwaGEgPSBjb250ZXh0QXR0
cmlidXRlcygpLmFscGhhOworICAgIGNvbnN0IGF1dG8gc2l6ZSA9IGdldEludGVybmFsRnJhbWVi
dWZmZXJTaXplKCk7CisgICAgY29uc3QgRUdMaW50IHN1cmZhY2VBdHRyaWJ1dGVzW10gPSB7Cisg
ICAgICAgIEVHTF9XSURUSCwgc2l6ZS53aWR0aCgpLAorICAgICAgICBFR0xfSEVJR0hULCBzaXpl
LmhlaWdodCgpLAorICAgICAgICBFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFLCAwLAorICAgICAg
ICBFR0xfVEVYVFVSRV9UQVJHRVQsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpF
R0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0KCksCisgICAgICAgIEVHTF9URVhUVVJFX0lOVEVSTkFM
X0ZPUk1BVF9BTkdMRSwgdXNpbmdBbHBoYSA/IEdMX0JHUkFfRVhUIDogR0xfUkdCLAorICAgICAg
ICBFR0xfVEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEsCisgICAgICAgIEVHTF9URVhU
VVJFX1RZUEVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsCisgICAgICAgIC8vIE9ubHkgaGFzIGFu
IGVmZmVjdCBvbiB0aGUgaU9TIFNpbXVsYXRvci4KKyAgICAgICAgRUdMX0lPU1VSRkFDRV9VU0FH
RV9ISU5UX0FOR0xFLCBFR0xfSU9TVVJGQUNFX1dSSVRFX0hJTlRfQU5HTEUsCisgICAgICAgIEVH
TF9OT05FLCBFR0xfTk9ORQorICAgIH07CisgICAgRUdMU3VyZmFjZSBwYnVmZmVyID0gRUdMX0Ny
ZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKG1fZGlzcGxheU9iaiwgRUdMX0lPU1VSRkFDRV9B
TkdMRSwgYmFja2luZy0+c3VyZmFjZSgpLCBtX2NvbmZpZ09iaiwgc3VyZmFjZUF0dHJpYnV0ZXMp
OworICAgIGlmICghcGJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBi
aW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoV1RGTW92ZShiYWNraW5nKSwgcGJ1ZmZlcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJh
Y2tpbmdTdG9yZUZyb21MYXllcigpCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
RGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywg
dm9pZCogcGJ1ZmZlcikKIHsKLSAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkuICglcCki
LCB0aGlzKTsKLSAgICBbbV93ZWJHTExheWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJs
ZVN1cmZhY2VdOworICAgIEdDR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBJT1N1cmZhY2VUZXh0dXJl
VGFyZ2V0KCk7CisgICAgU2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nIHJlc3RvcmVCaW5kaW5n
KElPU3VyZmFjZVRleHR1cmVUYXJnZXRRdWVyeSgpLCB0ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlVGFy
Z2V0ICE9IFRFWFRVUkVfUkVDVEFOR0xFX0FSQik7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1
cmVUYXJnZXQsIG1fdGV4dHVyZSk7CisgICAgaWYgKCFFR0xfQmluZFRleEltYWdlKG1fZGlzcGxh
eU9iaiwgcGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKSkgeworICAgICAgICBFR0xfRGVzdHJveVN1
cmZhY2UobV9kaXNwbGF5T2JqLCBwYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAvLyBOb3RlOiB0aGUgaW1hZ2UgYmluZGluZyB3aWxsIGFsd2F5cyBiZSB1bmJvdW5k
IGJ5IGRlc3Ryb3lpbmcgdGhlIHN1cmZhY2UuCisgICAgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciA9
IHBidWZmZXI7CisgICAgbV9kaXNwbGF5QnVmZmVyQmFja2luZyA9IFdURk1vdmUoYmFja2luZyk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
R0xFUzJDb21wbGlhbnQoKSBjb25zdApAQCAtNjM3LDcgKzY3NywzMyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxh
eUlEKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlRm9yRGlzcGxheSgp
CiB7Ci0gICAgW21fd2ViR0xMYXllciBwcmVwYXJlRm9yRGlzcGxheV07CisgICAgaWYgKG1fbGF5
ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOworCisgICAg
Ly8gVGhlIElPU3VyZmFjZSB3aWxsIGJlIHVzZWQgZnJvbSBvdGhlciBncmFwaGljcyBzdWJzeXN0
ZW0sIHNvIGZsdXNoIEdMIGNvbW1hbmRzLgorICAgIGdsOjpGbHVzaCgpOworCisgICAgYXV0byBy
ZWN5Y2xlZEJ1ZmZlciA9IFttX3dlYkdMTGF5ZXIgcmVjeWNsZUJ1ZmZlcl07CisgICAgW21fd2Vi
R0xMYXllciBwcmVwYXJlRm9yRGlzcGxheVdpdGhDb250ZW50czoge1dURk1vdmUobV9kaXNwbGF5
QnVmZmVyQmFja2luZyksIG1fZGlzcGxheUJ1ZmZlclBidWZmZXJ9XTsKKyAgICBtX2Rpc3BsYXlC
dWZmZXJQYnVmZmVyID0gRUdMX05PX1NVUkZBQ0U7CisKKyAgICBpZiAocmVjeWNsZWRCdWZmZXIu
c3VyZmFjZSAmJiByZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlLT5zaXplKCkgPT0gZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKSkgeworICAgICAgICBpZiAoYmluZERpc3BsYXlCdWZmZXJCYWNraW5n
KFdURk1vdmUocmVjeWNsZWRCdWZmZXIuc3VyZmFjZSksIHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlY3ljbGVkQnVmZmVyLnN1cmZhY2Uu
cmVzZXQoKTsKKyAgICBpZiAocmVjeWNsZWRCdWZmZXIuaGFuZGxlKQorICAgICAgICBFR0xfRGVz
dHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpOworICAgIC8v
IEVycm9yIHdpbGwgYmUgaGFuZGxlZCBieSBuZXh0IGNhbGwgdG8gbWFrZUNvbnRleHRDdXJyZW50
KCkgd2hpY2ggd2lsbCBub3RpY2UgbGFjayBvZiBkaXNwbGF5IGJ1ZmZlci4KKyAgICByZXNoYXBl
RGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGlkRGlzcGxheSgpCit7CisgICAgbWFya0xheWVyQ29tcG9zaXRlZCgpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVy
LmgKaW5kZXggNGQ5ZjM3YTY5NDlhYTkzNzYzNmE2ZmNhNzdjOTgyMjc0NTA2ZTQwYy4uZTc4NmZh
OGVhOTNmYzhiYTQ1YzA3ZjRmYmNiY2VjM2Y2M2I3MzU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaApAQCAtMjAsMzUgKzIw
LDU3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbXBvcnQgIklPU3VyZmFjZS5oIgotI2lt
cG9ydCAiSW50U2l6ZS5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1w
b3J0IDx3dGYvTmFrZWRQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhp
Y3NMYXllcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOworY2xhc3MgV2ViR0xMYXll
ckNsaWVudDsKK3N0cnVjdCBXZWJHTExheWVyQnVmZmVyIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6SU9TdXJmYWNlPiBzdXJmYWNlOyAvLyBUaGUgYWN0dWFsIGNvbnRlbnRzLgorICAg
IHZvaWQqIGhhbmRsZSB7IG51bGxwdHIgfTsgLy8gQ2xpZW50IHNwZWNpZmljIG1ldGFkYXRhIGhh
bmRsZSAoc3VjaCBhcyBFR0xTdXJmYWNlKS4KK307CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0JFR0lOCiAKKy8vIEEgbGF5ZXIgY2xhc3MgaW1wbGVtZW50aW5nIGZyb250IGJ1
ZmZlciBtYW5hZ2VtZW50IG9mIGEgMy1idWZmZXJpbmcgc3dhcAorLy8gY2hhaW4gb2YgSU9TdXJm
YWNlcy4KKy8vIFRoZSBsYXllciB3aWxsIG93biB0aGUgSU9TdXJmYWNlcyBpdCB1c2VzIGZvciBk
aXNwbGF5LgorLy8gVGhlIGNsaWVudCBtYXkgYXR0YWNoIG1ldGFkYXRhIHRvIGVhY2ggSU9TdXJm
YWNlIGFuZCB3aWxsIHJlY2VpdmUgdGhlIG1ldGFkYXRhCisvLyBiYWNrIG9uY2UgdGhlIElPU3Vy
ZmFjZSBoYXMgYmVlbiBkaXNwbGF5ZWQuIEhvd2V2ZXIsIHRoZSBjbGllbnQgbWF5IG5vdCBuZWNj
ZXNzYXJpbHkKKy8vIGJlIGFibGUgdG8gb2J0YWluIHRoZSBJT1N1cmZhY2UgaXRzZWxmIGZvciBy
ZXVzZS4KKy8vIEV4YW1wbGUgdXNlIG9mIHRoZSBtZXRhZGF0YSBpcyB0byB1c2UgRUdMU3VyZmFj
ZSBiaW5kaW5nIGFzIHRoZSBtZXRhZGF0YS4gVGhpcyB3YXkKKy8vIHdoZW4gdGhlIFdlYkdMTGF5
ZXIgaXMgZG9uZSB3aXRoIHRoZSBJT1N1cmZhY2UgZGlzcGxheSwgdGhlIGNsaWVudCBjYW4gY29u
dGludWUgdXNpbmcKKy8vIHRoZSBleGlzdGluZyBiaW5kaW5nIG9idGFpbmVkIHRocm91Z2ggdGhl
IGJ1ZmZlciByZWN5Y2xlIGxvZ2ljLgogQGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FMYXllcgog
Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgTmFrZWRQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w+IGNvbnRleHQ7Ci0KLS0gKGlkKWluaXRXaXRoR3JhcGhpY3NDb250ZXh0R0w6KE5h
a2VkUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiljb250ZXh0OworLSAoaWQp
aW5pdFdpdGhDbGllbnQ6KE5ha2VkUHRyPFdlYkNvcmU6OldlYkdMTGF5ZXJDbGllbnQ+KWNsaWVu
dCBkZXZpY2VQaXhlbFJhdGlvOihmbG9hdClkZXZpY2VQaXhlbFJhdGlvOwogCiAtIChDR0ltYWdl
UmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29sb3JTcGFjZVJlZiljb2xv
clNwYWNlOwogCi0tICh2b2lkKXByZXBhcmVGb3JEaXNwbGF5OworLy8gUmV0dXJucyB0aGUgbWV0
YWRhdGEgaGFuZGxlIG9mIGxhc3QgdW51c2VkIGNvbnRlbnRzIGJ1ZmZlci4KKy8vIENsaWVudCBt
YXkgcmVjaWV2ZSBiYWNrIGFsc28gdGhlIG93bmVyc2hpcCBvZiB0aGUgY29udGVudHMgc3VyZmFj
ZSwgaW4gY2FzZSBpdCBpcyBhdmFpbGFibGUgYXQgdGhlCisvLyB0aW1lIG9mIHRoZSBjYWxsLgor
Ly8gUmV0dXJucyBlaXRoZXI6CisvLyAtIEVtcHR5IGJ1ZmZlciBpZiBubyBidWZmZXIgaGFzIGJl
ZW4gc3VibWl0dGVkLgorLy8gLSBCdWZmZXIgd2l0aCBlbXB0eSBzdXJmYWNlIGFuZCBub24tZW1w
dHkgbWV0YWRhdGEgaGFuZGxlIGlmIHRoZSByZWN5Y2xlZCBidWZmZXIgd2FzIGF2YWlsYWJsZQor
Ly8gICBidXQgdGhlIHN1cmZhY2UgaXMgc3RpbGwgaW4gdXNlLgorLy8gLSBTdXJmYWNlIGFuZCBo
YW5kbGUuCistIChXZWJDb3JlOjpXZWJHTExheWVyQnVmZmVyKSByZWN5Y2xlQnVmZmVyOworCisv
LyBQcmVwYXJlcyB0aGUgbGF5ZXIgZm9yIGRpc3BsYXkgd2l0aCBhIGNvbnRlbnRzIGJ1ZmZlci4K
Ky8vIENsaWVudCB0cmFuc2ZlcnMgdGhlIG93bmVyc2hpcCBvZiB0aGUgSU9TdXJmYWNlIHN1cmZh
Y2UgaW4gdGhlIGBidWZmZXJgLgorLSAodm9pZClwcmVwYXJlRm9yRGlzcGxheVdpdGhDb250ZW50
czooV2ViQ29yZTo6V2ViR0xMYXllckJ1ZmZlcilidWZmZXI7CiAKLS0gKGJvb2wpYWxsb2NhdGVJ
T1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTooV2ViQ29yZTo6SW50U2l6ZSlzaXplIHVzaW5n
QWxwaGE6KEJPT0wpdXNpbmdBbHBoYTsKLS0gKHZvaWQpYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZh
aWxhYmxlU3VyZmFjZTsKLS0gKHZvaWQpc2V0RUdMRGlzcGxheToodm9pZCopZWdsRGlzcGxheSBj
b25maWc6KHZvaWQqKWVnbENvbmZpZzsKLS0gKHZvaWQpcmVsZWFzZUdMUmVzb3VyY2VzOworLy8g
RGV0YWNoZXMgdGhlIGNsaWVudCBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBjb250ZW50cyBidWZm
ZXIgbWV0YWRhdGEgaGFuZGxlLgorLy8gVGhlIGlmIG11bHRpcGxlIGJ1ZmZlcnMgaGF2ZSBiZWVu
IHN1Ym1pdHRlZCwgcmVjeWNsZUJ1ZmZlciBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlIGNh
bGxpbmcKKy8vIHRoaXMuCisvLyBUaGUgY2xpZW50IHdpbGwgbm90IHJlY2VpdmUgYFdlYkdMTGF5
ZXJDbGllbnRgIG5vdGlmaWNhdGlvbnMgYWZ0ZXIgY2FsbGluZyB0aGlzLgorLSAodm9pZCopZGV0
YWNoQ2xpZW50OwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCmluZGV4IGNjZmY4ZjA2ZGY1YzY5ZjgxNTA5NDEx
ODQwNmIyOWE3YmQ0MDc0ZTQuLjA5ZjA5ZDY5YWExYjA4OGFjMzE0ZjY1YzZhNmM4NTA0NDhiZDcw
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkdMTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViR0xMYXllci5tbQpAQCAtMjgsNzQgKzI4LDI3IEBACiAjaWYgRU5BQkxFKFdFQkdMKQogI2lt
cG9ydCAiV2ViR0xMYXllci5oIgogCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIu
aCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oIgotI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKICNpbXBvcnQgIlBsYXRmb3Jt
Q0FMYXllci5oIgorI2ltcG9ydCAiV2ViR0xMYXllckNsaWVudC5oIgogI2ltcG9ydCA8cGFsL3Nw
aS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi0jZGVmaW5lIEVHTF9FR0xfUFJPVE9UWVBFUyAwCi0j
aW1wb3J0IDxBTkdMRS9lZ2wuaD4KLSNpbXBvcnQgPEFOR0xFL2VnbGV4dC5oPgotI2ltcG9ydCA8
QU5HTEUvZWdsZXh0X2FuZ2xlLmg+Ci0jaW1wb3J0IDxBTkdMRS9lbnRyeV9wb2ludHNfZWdsLmg+
Ci0jaW1wb3J0IDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5oPgotLy8gU2tp
cCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMg
Zm9yIG5vdy4KLSNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAotI2ltcG9ydCA8QU5H
TEUvZ2wyZXh0Lmg+Ci0jaW1wb3J0IDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KLQotbmFtZXNwYWNl
IHsKLSAgICBjbGFzcyBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgewotICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcpOwotICAgIHB1Ymxp
YzoKLSAgICAgICAgU2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nKEdMZW51bSBiaW5kaW5nUG9p
bnRRdWVyeSwgR0xlbnVtIGJpbmRpbmdQb2ludCkKLSAgICAgICAgICAgIDogbV9iaW5kaW5nUG9p
bnQoYmluZGluZ1BvaW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6R2V0SW50ZWdlcnYo
YmluZGluZ1BvaW50UXVlcnksICZtX2JpbmRpbmdWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB+U2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Z2w6OkJpbmRUZXh0dXJlKG1fYmluZGluZ1BvaW50LCBtX2JpbmRpbmdWYWx1ZSk7Ci0gICAgICAg
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEdMaW50IG1fYmluZGluZ1BvaW50IHsgMCB9Owot
ICAgICAgICBHTGludCBtX2JpbmRpbmdWYWx1ZSB7IDAgfTsKLSAgICB9OwotfQotCiBAaW1wbGVt
ZW50YXRpb24gV2ViR0xMYXllciB7Ci0gICAgZmxvYXQgX2RldmljZVBpeGVsUmF0aW87Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gX2NvbnRlbnRzQnVmZmVyOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9kcmF3aW5nQnVmZmVyOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9zcGFyZUJ1ZmZlcjsKLSAgICBX
ZWJDb3JlOjpJbnRTaXplIF9idWZmZXJTaXplOwotICAgIEJPT0wgX3VzaW5nQWxwaGE7Ci0gICAg
dm9pZCogX2VnbERpc3BsYXk7Ci0gICAgdm9pZCogX2VnbENvbmZpZzsKLSAgICB2b2lkKiBfY29u
dGVudHNQYnVmZmVyOwotICAgIHZvaWQqIF9kcmF3aW5nUGJ1ZmZlcjsKLSAgICB2b2lkKiBfc3Bh
cmVQYnVmZmVyOwotICAgIHZvaWQqIF9sYXRjaGVkUGJ1ZmZlcjsKKyAgICBOYWtlZFB0cjxXZWJD
b3JlOjpXZWJHTExheWVyQ2xpZW50PiBfY2xpZW50OworICAgIFdlYkNvcmU6OldlYkdMTGF5ZXJC
dWZmZXIgX2NvbnRlbnRzQnVmZmVyOworICAgIFdlYkNvcmU6OldlYkdMTGF5ZXJCdWZmZXIgX3Nw
YXJlQnVmZmVyOworCiAgICAgQk9PTCBfcHJlcGFyZWRGb3JEaXNwbGF5OwogfQogCi0tIChpZClp
bml0V2l0aEdyYXBoaWNzQ29udGV4dEdMOihOYWtlZFB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTD4pY29udGV4dAorLSAoaWQpaW5pdFdpdGhDbGllbnQ6KE5ha2VkUHRyPFdlYkNv
cmU6OldlYkdMTGF5ZXJDbGllbnQ+KWNsaWVudCBkZXZpY2VQaXhlbFJhdGlvOihmbG9hdClkZXZp
Y2VQaXhlbFJhdGlvCiB7Ci0gICAgX2NvbnRleHQgPSBjb250ZXh0OworICAgIF9jbGllbnQgPSBj
bGllbnQ7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBj
b250ZXh0LT5jb250ZXh0QXR0cmlidXRlcygpOwotICAgIF9kZXZpY2VQaXhlbFJhdGlvID0gYXR0
cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvOwotICAgIHNlbGYuY29udGVudHNPcGFxdWUgPSAhYXR0
cmlidXRlcy5hbHBoYTsKICAgICBzZWxmLnRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RJZGVudGl0
eTsKLSAgICBzZWxmLmNvbnRlbnRzU2NhbGUgPSBfZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICBzZWxm
LmNvbnRlbnRzU2NhbGUgPSBkZXZpY2VQaXhlbFJhdGlvOwogICAgIHJldHVybiBzZWxmOwogfQog
CkBAIC0xMTcsNjYgKzcwLDM5IEBAIG5hbWVzcGFjZSB7CiAKIC0gKENHSW1hZ2VSZWYpY29weUlt
YWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3BhY2UKIHsK
LSAgICBpZiAoIV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyBGSVhN
RTogaW1wbGVtZW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3
Mzc3CisgICAgLy8gV2hlbiBpbXBsZW1lbnRpbmcsIHJlbWVtYmVyIHRvIHVzZSBzZWxmLmNvbnRl
bnRzU2NhbGUuCiAgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi0tICh2b2lkKXByZXBhcmVGb3JEaXNwbGF5CistIChXZWJDb3JlOjpXZWJHTExh
eWVyQnVmZmVyKSByZWN5Y2xlQnVmZmVyCiB7Ci0gICAgaWYgKCFfY29udGV4dCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gVG8gYXZvaWQgcnVubmluZyBhbnkgT3BlbkdMIGNvZGUgaW4gYGRp
c3BsYXlgLCB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkCi0gICAgLy8gYXQgdGhlIGVuZCBv
ZiB0aGUgcmVuZGVyaW5nIHRhc2suIFdlIHdpbGwgZmx1c2ggYWxsIHBhaW50aW5nIGNvbW1hbmRz
Ci0gICAgLy8gbGVhdmluZyB0aGUgYnVmZmVycyByZWFkeSB0byBjb21wb3NpdGUuCi0KLSAgICBp
ZiAoIV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgewotICAgICAgICAvLyBDb250ZXh0
IGlzIGxpa2VseSBiZWluZyB0b3JuIGRvd24uCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoX3Nw
YXJlQnVmZmVyLnN1cmZhY2UpIHsKKyAgICAgICAgaWYgKF9zcGFyZUJ1ZmZlci5zdXJmYWNlLT5p
c0luVXNlKCkpCisgICAgICAgICAgICBfc3BhcmVCdWZmZXIuc3VyZmFjZS5yZXNldCgpOworICAg
ICAgICByZXR1cm4gV1RGTW92ZShfc3BhcmVCdWZmZXIpOwogICAgIH0KLSAgICBfY29udGV4dC0+
cHJlcGFyZVRleHR1cmUoKTsKLSAgICBpZiAoX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgaWYg
KF9sYXRjaGVkUGJ1ZmZlcikgewotICAgICAgICAgICAgV1RGOjpPcHRpb25hbDxTY29wZWRSZXN0
b3JlVGV4dHVyZUJpbmRpbmc+IHJlc3RvcmVCaW5kaW5nOwotICAgICAgICAgICAgR0NHTGVudW0g
dGV4dHVyZVRhcmdldCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJT1N1cmZh
Y2VUZXh0dXJlVGFyZ2V0KCk7Ci0gICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlc3Rv
cmUgR0xfVEVYVFVSRV9SRUNUQU5HTEUgYmVjYXVzZSBpdCdzIG5vdCBhY2Nlc3NpYmxlIGZyb20g
dXNlciBjb2RlLgotICAgICAgICAgICAgaWYgKHRleHR1cmVUYXJnZXQgIT0gV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQikKLSAgICAgICAgICAgICAgICBy
ZXN0b3JlQmluZGluZy5lbXBsYWNlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJ
T1N1cmZhY2VUZXh0dXJlVGFyZ2V0UXVlcnkoKSwgdGV4dHVyZVRhcmdldCk7Ci0gICAgICAgICAg
ICBHQ0dMZW51bSB0ZXh0dXJlID0gX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOwotICAgICAg
ICAgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIHRleHR1cmUpOwotICAgICAgICAg
ICAgaWYgKCFFR0xfUmVsZWFzZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZmZXIs
IEVHTF9CQUNLX0JVRkZFUikpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVwb3J0IGVy
cm9yLgotICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBfbGF0Y2hlZFBidWZmZXIgPSBudWxscHRyOwotICAgICAgICB9CisgICAgcmV0
dXJuIHsgfTsKK30KIAotICAgICAgICBzdGQ6OnN3YXAoX2NvbnRlbnRzQnVmZmVyLCBfZHJhd2lu
Z0J1ZmZlcik7Ci0gICAgICAgIHN0ZDo6c3dhcChfY29udGVudHNQYnVmZmVyLCBfZHJhd2luZ1Bi
dWZmZXIpOwotICAgICAgICBbc2VsZiBiaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJm
YWNlXTsKLSAgICB9CistICh2b2lkKXByZXBhcmVGb3JEaXNwbGF5V2l0aENvbnRlbnRzOihXZWJD
b3JlOjpXZWJHTExheWVyQnVmZmVyKSBidWZmZXIKK3sKKyAgICBBU1NFUlQoIV9zcGFyZUJ1ZmZl
ci5zdXJmYWNlKTsKKyAgICBfc3BhcmVCdWZmZXIgPSBXVEZNb3ZlKF9jb250ZW50c0J1ZmZlcik7
CisgICAgX2NvbnRlbnRzQnVmZmVyID0gV1RGTW92ZShidWZmZXIpOwogICAgIFtzZWxmIHNldE5l
ZWRzRGlzcGxheV07CiAgICAgX3ByZXBhcmVkRm9yRGlzcGxheSA9IFlFUzsKIH0KIAogLSAodm9p
ZClkaXNwbGF5CiB7Ci0gICAgaWYgKCFfY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gQXQgdGhpcyBwb2ludCB3ZSd2ZSBwYWludGVkIGludG8gdGhlIF9kcmF3aW5nQnVmZmVyIGFu
ZCBzd2FwcGVkIGl0IHdpdGggdGhlIG9sZCBfY29udGVudHNCdWZmZXIsCi0gICAgLy8gc28gYWxs
IHdlIG5lZWQgdG8gZG8gaGVyZSBpcyB0aWNrbGUgdGhlIENBTGF5ZXIgdG8gbGV0IGl0IGtub3cg
aXQgaGFzIG5ldyBjb250ZW50cy4KLSAgICAvLyBUaGlzIGF2b2lkcyBydW5uaW5nIGFueSBPcGVu
R0wgY29kZSBpbiB0aGlzIG1ldGhvZC4KLQotICAgIGlmIChfY29udGVudHNCdWZmZXIgJiYgX3By
ZXBhcmVkRm9yRGlzcGxheSkgewotICAgICAgICBzZWxmLmNvbnRlbnRzID0gX2NvbnRlbnRzQnVm
ZmVyLT5hc0xheWVyQ29udGVudHMoKTsKKyAgICBpZiAoX2NvbnRlbnRzQnVmZmVyLnN1cmZhY2Ug
JiYgX3ByZXBhcmVkRm9yRGlzcGxheSkgeworICAgICAgICBzZWxmLmNvbnRlbnRzID0gX2NvbnRl
bnRzQnVmZmVyLnN1cmZhY2UtPmFzTGF5ZXJDb250ZW50cygpOwogICAgICAgICBbc2VsZiByZWxv
YWRWYWx1ZUZvcktleVBhdGg6QCJjb250ZW50cyJdOwogICAgIH0KLQotICAgIF9jb250ZXh0LT5t
YXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAgaWYgKF9jbGllbnQpCisgICAgICAgIF9jbGllbnQt
PmRpZERpc3BsYXkoKTsKICAgICBhdXRvIGxheWVyID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpwbGF0Zm9ybUNBTGF5ZXJGb3JMYXllcigoX19icmlkZ2Ugdm9pZCopc2VsZik7CiAgICAgaWYg
KGxheWVyICYmIGxheWVyLT5vd25lcigpKQogICAgICAgICBsYXllci0+b3duZXIoKS0+cGxhdGZv
cm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KGxheWVyLmdldCgpKTsKQEAgLTE4NCw5NiArMTEwLDE0
IEBAIG5hbWVzcGFjZSB7CiAgICAgX3ByZXBhcmVkRm9yRGlzcGxheSA9IE5POwogfQogCi0tICh2
b2lkKXNldEVHTERpc3BsYXk6KHZvaWQqKWRpc3BsYXkgY29uZmlnOih2b2lkKiljb25maWcKLXsK
LSAgICBfZWdsRGlzcGxheSA9IGRpc3BsYXk7Ci0gICAgX2VnbENvbmZpZyA9IGNvbmZpZzsKLX0K
LQotLSAodm9pZClyZWxlYXNlR0xSZXNvdXJjZXMKKy0gKHZvaWQqKSBkZXRhY2hDbGllbnQKIHsK
LSAgICBpZiAoIV9jb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpICYmIF9sYXRjaGVkUGJ1ZmZlcikgewotICAgICAgICBFR0xf
UmVsZWFzZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JV
RkZFUik7Ci0gICAgICAgIF9sYXRjaGVkUGJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAg
RUdMX0Rlc3Ryb3lTdXJmYWNlKF9lZ2xEaXNwbGF5LCBfY29udGVudHNQYnVmZmVyKTsKLSAgICBF
R0xfRGVzdHJveVN1cmZhY2UoX2VnbERpc3BsYXksIF9kcmF3aW5nUGJ1ZmZlcik7Ci0gICAgRUdM
X0Rlc3Ryb3lTdXJmYWNlKF9lZ2xEaXNwbGF5LCBfc3BhcmVQYnVmZmVyKTsKKyAgICBBU1NFUlQo
IV9zcGFyZUJ1ZmZlci5zdXJmYWNlKTsKKyAgICBfY2xpZW50ID0gbmlsOworICAgIHZvaWQqIHJl
c3VsdCA9IF9jb250ZW50c0J1ZmZlci5oYW5kbGU7CisgICAgX2NvbnRlbnRzQnVmZmVyLmhhbmRs
ZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KLQotLSAoYm9vbClhbGxvY2F0ZUlP
U3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOihXZWJDb3JlOjpJbnRTaXplKXNpemUgdXNpbmdB
bHBoYTooQk9PTCl1c2luZ0FscGhhCi17Ci0gICAgX2J1ZmZlclNpemUgPSBzaXplOwotICAgIF91
c2luZ0FscGhhID0gdXNpbmdBbHBoYTsKLSAgICBfY29udGVudHNCdWZmZXIgPSBXZWJDb3JlOjpJ
T1N1cmZhY2U6OmNyZWF0ZShzaXplLCBXZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpKTsKLSAg
ICBfZHJhd2luZ0J1ZmZlciA9IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlKHNpemUsIFdlYkNv
cmU6OnNSR0JDb2xvclNwYWNlUmVmKCkpOwotICAgIF9zcGFyZUJ1ZmZlciA9IFdlYkNvcmU6OklP
U3VyZmFjZTo6Y3JlYXRlKHNpemUsIFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKCkpOwotCi0g
ICAgaWYgKCFfY29udGVudHNCdWZmZXIgfHwgIV9kcmF3aW5nQnVmZmVyIHx8ICFfc3BhcmVCdWZm
ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIF9jb250ZW50c0J1ZmZlci0+bWlncmF0
ZUNvbG9yU3BhY2VUb1Byb3BlcnRpZXMoKTsKLSAgICBfZHJhd2luZ0J1ZmZlci0+bWlncmF0ZUNv
bG9yU3BhY2VUb1Byb3BlcnRpZXMoKTsKLSAgICBfc3BhcmVCdWZmZXItPm1pZ3JhdGVDb2xvclNw
YWNlVG9Qcm9wZXJ0aWVzKCk7Ci0gICAgY29uc3QgRUdMaW50IHN1cmZhY2VBdHRyaWJ1dGVzW10g
PSB7Ci0gICAgICAgIEVHTF9XSURUSCwgc2l6ZS53aWR0aCgpLAotICAgICAgICBFR0xfSEVJR0hU
LCBzaXplLmhlaWdodCgpLAotICAgICAgICBFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFLCAwLAot
ICAgICAgICBFR0xfVEVYVFVSRV9UQVJHRVQsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0KCksCi0gICAgICAgIEVHTF9URVhUVVJFX0lO
VEVSTkFMX0ZPUk1BVF9BTkdMRSwgdXNpbmdBbHBoYSA/IEdMX0JHUkFfRVhUIDogR0xfUkdCLAot
ICAgICAgICBFR0xfVEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEsCi0gICAgICAgIEVH
TF9URVhUVVJFX1RZUEVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsCi0gICAgICAgIC8vIE9ubHkg
aGFzIGFuIGVmZmVjdCBvbiB0aGUgaU9TIFNpbXVsYXRvci4KLSAgICAgICAgRUdMX0lPU1VSRkFD
RV9VU0FHRV9ISU5UX0FOR0xFLCBFR0xfSU9TVVJGQUNFX1dSSVRFX0hJTlRfQU5HTEUsCi0gICAg
ICAgIEVHTF9OT05FLCBFR0xfTk9ORQotICAgIH07Ci0KLSAgICBfY29udGVudHNQYnVmZmVyID0g
RUdMX0NyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKF9lZ2xEaXNwbGF5LCBFR0xfSU9TVVJG
QUNFX0FOR0xFLCBfY29udGVudHNCdWZmZXItPnN1cmZhY2UoKSwgX2VnbENvbmZpZywgc3VyZmFj
ZUF0dHJpYnV0ZXMpOwotICAgIF9kcmF3aW5nUGJ1ZmZlciA9IEVHTF9DcmVhdGVQYnVmZmVyRnJv
bUNsaWVudEJ1ZmZlcihfZWdsRGlzcGxheSwgRUdMX0lPU1VSRkFDRV9BTkdMRSwgX2RyYXdpbmdC
dWZmZXItPnN1cmZhY2UoKSwgX2VnbENvbmZpZywgc3VyZmFjZUF0dHJpYnV0ZXMpOwotICAgIF9z
cGFyZVBidWZmZXIgPSBFR0xfQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIoX2VnbERpc3Bs
YXksIEVHTF9JT1NVUkZBQ0VfQU5HTEUsIF9zcGFyZUJ1ZmZlci0+c3VyZmFjZSgpLCBfZWdsQ29u
ZmlnLCBzdXJmYWNlQXR0cmlidXRlcyk7Ci0KLSAgICBpZiAoIV9jb250ZW50c1BidWZmZXIgfHwg
IV9kcmF3aW5nUGJ1ZmZlciB8fCAhX3NwYXJlUGJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS0gKHZvaWQpYmluZEZyYW1lYnVmZmVyVG9OZXh0
QXZhaWxhYmxlU3VyZmFjZQotewotICAgIFdURjo6T3B0aW9uYWw8U2NvcGVkUmVzdG9yZVRleHR1
cmVCaW5kaW5nPiByZXN0b3JlQmluZGluZzsKLSAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0g
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OklPU3VyZmFjZVRleHR1cmVUYXJnZXQo
KTsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlc3RvcmUgR0xfVEVYVFVSRV9SRUNUQU5HTEUg
YmVjYXVzZSBpdCdzIG5vdCBhY2Nlc3NpYmxlIGZyb20gdXNlciBjb2RlLgotICAgIGlmICh0ZXh0
dXJlVGFyZ2V0ICE9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1JFQ1RBTkdM
RV9BUkIpCi0gICAgICAgIHJlc3RvcmVCaW5kaW5nLmVtcGxhY2UoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OklPU3VyZmFjZVRleHR1cmVUYXJnZXRRdWVyeSgpLCB0ZXh0dXJlVGFy
Z2V0KTsKLQotICAgIEdDR0xlbnVtIHRleHR1cmUgPSBfY29udGV4dC0+cGxhdGZvcm1UZXh0dXJl
KCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIHRleHR1cmUpOwotCi0gICAg
aWYgKF9sYXRjaGVkUGJ1ZmZlcikgewotICAgICAgICBpZiAoIUVHTF9SZWxlYXNlVGV4SW1hZ2Uo
X2VnbERpc3BsYXksIF9sYXRjaGVkUGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IHJlcG9ydCBlcnJvci4KLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgX2xhdGNoZWRQYnVmZmVyID0gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICBpZiAoX2RyYXdpbmdCdWZmZXIgJiYgX2RyYXdpbmdCdWZmZXItPmlzSW5Vc2UoKSkg
ewotICAgICAgICBzdGQ6OnN3YXAoX2RyYXdpbmdCdWZmZXIsIF9zcGFyZUJ1ZmZlcik7Ci0gICAg
ICAgIHN0ZDo6c3dhcChfZHJhd2luZ1BidWZmZXIsIF9zcGFyZVBidWZmZXIpOwotICAgIH0KLQot
ICAgIC8vIExpbmsgdGhlIElPU3VyZmFjZSB0byB0aGUgdGV4dHVyZSB2aWEgdGhlIHByZXZpb3Vz
bHktY3JlYXRlZCBwYnVmZmVyLgotICAgIGlmICghRUdMX0JpbmRUZXhJbWFnZShfZWdsRGlzcGxh
eSwgX2RyYXdpbmdQYnVmZmVyLCBFR0xfQkFDS19CVUZGRVIpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiByZXBvcnQgZXJyb3IuCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotICAgIF9s
YXRjaGVkUGJ1ZmZlciA9IF9kcmF3aW5nUGJ1ZmZlcjsKLX0KLQogQGVuZAogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViR0xMYXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvV2ViR0xMYXllckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyNjAzY2JlZjI5MjQ0
OGFmMWIzYjkzYWNlYTdlZDQ5OTMxN2U3YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyQ2xpZW50LmgKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdlYkdMTGF5ZXJDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYkdMTGF5ZXJDbGllbnQoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRGlzcGxheSgpID0gMDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmgKaW5kZXggZjg1ODJjNjE3YjA3NjhhMDUzNDI0YWU5N2I3YzljNjYyY2Uw
MzBiYi4uMjUyMTlmOGY1MzFjYWRhM2FiZjVkMGU0MjE1MzM1YzEzNDcwZmUxOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTM1LDYgKzM1LDExIEBACiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgogCisjaWYgUExB
VEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViR0xMYXll
ckNsaWVudC5oIgorI2VuZGlmCisKICNpZiBVU0UoQ0EpCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxh
eWVyLmgiCiAjZW5kaWYKQEAgLTU0LDcgKzU5LDYgQEAKICNpZiBQTEFURk9STShDT0NPQSkKIE9C
SkNfQ0xBU1MgQ0FMYXllcjsKIE9CSkNfQ0xBU1MgV2ViR0xMYXllcjsKLXR5cGVkZWYgc3RydWN0
IF9fSU9TdXJmYWNlKiBJT1N1cmZhY2VSZWY7CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAK
ICNpZiBVU0UoTklDT1NJQSkKQEAgLTgzLDcgKzg3LDExIEBAIHR5cGVkZWYgV1RGOjpIYXNoTWFw
PENTdHJpbmcsIHVpbnQ2NF90PiBTaGFkZXJOYW1lSGFzaDsKIAogY2xhc3MgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xQcml2YXRlOwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCA6IHB1
YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCA6
IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgcHJp
dmF0ZSBXZWJHTExheWVyQ2xpZW50CisjZW5kaWYKK3sKIHB1YmxpYzoKICAgICBjbGFzcyBDbGll
bnQgewogICAgIHB1YmxpYzoKQEAgLTU0Myw4ICs1NTEsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3Rv
cmUoSW50U2l6ZSk7Ci0gICAgdm9pZCB1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3Rv
cmVGcm9tTGF5ZXIoKTsKKyAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpOwor
ICAgIGJvb2wgYmluZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+IGJhY2tpbmcsIHZvaWQqIHBidWZmZXIpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lk
IHVwZGF0ZUNHTENvbnRleHQoKTsKICNlbmRpZgpAQCAtNjgxLDExICs2ODksMTQgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAgICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJik7CisgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZUltcGwoKTsKICAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0KCkpOwogICAgIHZvaWQgYXR0YWNo
RGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0NHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5j
aWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBib29sIGFsbG93T2ZmbGluZVJlbmRlcmVycygpIGNvbnN0OworICAgIC8vIFdlYkdMTGF5
ZXJDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgZGlkRGlzcGxheSgpIG92ZXJyaWRlOwogI2Vu
ZGlmCiAKICAgICBpbnQgbV9jdXJyZW50V2lkdGggeyAwIH07CkBAIC04OTAsNiArOTAxLDEyIEBA
IHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIC8vIEJhY2tpbmcg
c3RvcmUgZm9yIHRoZSB0aGUgYnVmZmVyIHdoaWNoIGlzIGV2ZW50dWFsbHkgdXNlZCBmb3IgZGlz
cGxheS4KKyAgICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9PSBmYWxzZSwgdGhpcyBp
cyB0aGUgZHJhd2luZyBidWZmZXIgYmFja2luZyBzdG9yZS4KKyAgICAvLyBXaGVuIHByZXNlcnZl
RHJhd2luZ0J1ZmZlciA9PSB0cnVlLCB0aGlzIGlzIGJsaXR0ZWQgdG8gZHVyaW5nIGRpc3BsYXkg
cHJlcGFyZS4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX2Rpc3BsYXlCdWZmZXJC
YWNraW5nOworICAgIHZvaWQqIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIgeyBudWxscHRyIH07CisK
ICAgICBib29sIG1faGFzU3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQVSB7IGZhbHNlIH07CiAj
ZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCmlu
ZGV4IGI1OGJiMDJjZTdmOGFkM2NlOWJhZmExNjE1Zjc0ZjI2NzY1YWNhZWEuLjIwYmYyZjRmOTg0
Y2M3ZjJiYjczYzZkYTU1OWYwODAwYTMzYTE0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEJhc2UuY3BwCkBAIC0xNjQsNyArMTY0LDYgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAg
Zm9yY2VDb250ZXh0TG9zdCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgdXBk
YXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCk7CiAgICAgOjpnbEZy
YW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhULCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1fdGV4dHVyZSwgMCk7CiAjZW5k
aWYgLy8gIVVTRShPUEVOR0xfRVMpKQogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMjYwYTBlMmFjYjRiZTllYTdiM2QwZjNhYmNmZDA2
MDJmNTE0NzJiNS4uMDJiYjY1MmQ4MDZlYTI4MGQzZmE4ODI2NWUyZWZlMjBiZGM1MzkyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE3NCw3
ICsxNzQsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GdWxsc2NyZWVuTWFu
YWdlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxBdHRhY2htZW50RWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSW1hZ2VFbGVtZW50
Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCmluZGV4IGYxNDI1YWUxYmUyYTI3MGZkZmZjNjE3ZjFmMzdiZTI5Yjg4NWE2MGMuLmEx
NzI5ZjVjNjIwNWQxNmQ3ZmE5OThhNjUzNmE4NGM4ZmE0ODA0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC03MSw3ICs3
MSw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411127</attachid>
            <date>2020-10-12 10:23:22 -0700</date>
            <delta_ts>2020-10-12 22:43:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217212-20201012202320.patch</filename>
            <type>text/plain</type>
            <size>41897</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVhNTMxNTM4MDYwZTg0
MzczNjdlZDc3NmFkNzJmOTM4NjU0YTZhZC4uYWQwMTFmMjQwN2RjZTRjN2JjYWI3ZGQ2NmZhY2Y2
YzZiMWYxMzlmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIwLTEwLTEyICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29jb2E6IE1ha2Ug
V2ViR0xMYXllciBub3QgZGVwZW5kZW50IG9uICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MjEyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS82OTg3NjAyMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTExheWVyIHdhcyBuZWVkbGVzc2x5IHVzaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLgorICAgICAgICBUaGlzIGlzIHByb2JsZW1hdGljIGJlY2F1
c2UgV2ViR0xMYXllciBzaG91bGQgd29yayB3aXRoCisgICAgICAgIHVwY29taW5nIHJlbW90ZSBH
cmFwaGljc0NvbnRleHRHTCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUaGUgcHJlcGFyZSBj
YWxsZ3JhcGggd2FzOgorICAgICAgICAgICAgR0NHTE9wZW5HTCAtPiBXZWJHTExheWVyIC0+IEdD
R0xPcGVuR0wKKyAgICAgICAgUmVmYWN0b3IgaXQgdG8gYmU6CisgICAgICAgICAgICBHQ0dMT3Bl
bkdMIC0+IFdlYkdMTGF5ZXIKKworICAgICAgICBNb3ZlIHRoZSBiYWNrIGJ1ZmZlciBvd25lcnNo
aXAgdG8gdGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorICAgICAgICBNYWtlIHRoZSBmcm9u
dCBidWZmZXIgb3duZXJzaGlwIGV4cGxpY2l0IGluIFdlYkdMTGF5ZXIuCisgICAgICAgIE1vdmUg
dGhlIEVHTCBiaW5kaW5ncyBvd25lcnNoaXBzIG9mIGFsbCBidWZmZXJzIHRvCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLgorCisgICAgICAgIE1ha2UgdGhlIFdlYkdMTGF5ZXIgbm90
IHVzZSBFR0wgb3IgT3BlbkdMLCBpdCBkb2VzIG5vdAorICAgICAgICBuZWVkIGFuZCBjYW5ub3Qg
dXNlIGl0IGFzIG5vdCBhbGwgb2YgaXRzIGNsaWVudHMgdXNlIE9wZW5HTAorICAgICAgICAoaS5l
LiB0aGUgYWJvdmUgbWVudGlvbmVkIHJlbW90ZSB1c2UtY2FzZSkuCisKKyAgICAgICAgSW1wcm92
ZXMgdGhlIG1lbW9yeSB1c2FnZSBieSBub3QgYWxsb2NhdGluZyBmcm9udCBidWZmZXJzCisgICAg
ICAgIHVubGVzcyBuZWVkZWQuIEluIGNhc2UgdGhlIGNhbnZhcyBkb2VzIG5vdCBwcmVzZW50LCB3
aWxsCisgICAgICAgIG5vdCBhbGxvY2F0ZSBmcm9udCBidWZmZXJzIGF0IGFsbC4KKworICAgICAg
ICBJbXByb3ZlcyBlcnJvciBoYW5kbGluZyBvZiB0aGUgYWxsb2NhdGlvbnMgYW5kIEVHTCBiaW5k
aW5ncy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZUltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGls
aXRpZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSZXN0b3JlVGV4dHVyZUJp
bmRpbmc6OlNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmc6On5TY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRE
aXNwbGF5QnVmZmVyQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRpZERpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1dlYkdMTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9X
ZWJHTExheWVyLm1tOgorICAgICAgICAoLVtXZWJHTExheWVyIGluaXRXaXRoQ2xpZW50OmRldmlj
ZVBpeGVsUmF0aW86XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUltYWdlU25hcHNob3RX
aXRoQ29sb3JTcGFjZTpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciByZWN5Y2xlQnVmZmVyXSk6
CisgICAgICAgICgtW1dlYkdMTGF5ZXIgcHJlcGFyZUZvckRpc3BsYXlXaXRoQ29udGVudHM6XSk6
CisgICAgICAgICgtW1dlYkdMTGF5ZXIgZGlzcGxheV0pOgorICAgICAgICAoLVtXZWJHTExheWVy
IGRldGFjaENsaWVudF0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdM
TGF5ZXJDbGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViR0xMYXllci5oLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNsaWVu
dDo6fldlYkdMTGF5ZXJDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKToKKwogMjAyMC0xMC0xMiAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDIERp
c3BsYXldIEludHJvZHVjZSBCb3hNb2RlbEJveCwgYW5kIGNsYXJpZnkgc29tZSBuYW1pbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggMzFlZTY4MTIwNTgyZGY1YTk4MmU0MWJhMTRlMGM0MmIzOTgzZDQ2ZS4uM2ZlMGIx
ZmM5ZTg3ZWUxOTA5MmNhMjMwYjkzMTM1YjM5MWI1ZjJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAyMC0xMC0xMiAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgor
CisgICAgICAgIENvY29hOiBNYWtlIFdlYkdMTGF5ZXIgbm90IGRlcGVuZGVudCBvbiAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNzIxMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjk4NzYwMjI+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCB1bm5l
ZWRlZCBpbmNsdXNpb25zIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmguIFRoZQorICAgICAg
ICBmaWxlIGlzIG5vdyB1c2luZyBub24tcHVibGljIGhlYWRlcnMuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tOgorCiAyMDIwLTEwLTEyICBMdW1pbmcgWWluICA8bHVtaW5nX3lp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBXb3JrYXJvdW5kIGZvciBNQUNfT1NfWF9W
RVJTSU9OX01BSk9SIGluY29ycmVjdGx5IGluY2x1ZGluZyBtaW5vciB2ZXJzaW9uIHdoZW4gYnVp
bGRpbmcgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggZmZlZDgzNjBiNTZkMTEyNzQ5YWZkMGFmNTg2OWM2ZDhlYzI4ZjVkMy4uOTY3
MmMwNjMwMWUwYWQ2MDdhODE1NzQ3ZDI0NGM5MTk2ZWI3NmMwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjIxNSw2ICsyMjE1
LDggQEAKIAkJN0FGOUIyMDYxOENGQjJERjAwQzY0QkVGIC8qIFZUVFJlZ2lvbkxpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRjlCMjAwMThDRkIy
REYwMEM2NEJFRiAvKiBWVFRSZWdpb25MaXN0LmggKi87IH07CiAJCTdBRjlCMjBEMThDRkI1RjQw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmgg
Ki87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRjlCMjBCMThD
RkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKKwkJN0JCMzRBMTUyNTM0
NTc5MTAwMDI5RDA4IC8qIFdlYkdMTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTEzMjUzNDU3OTEwMDAyOUQwOCAvKiBXZWJH
TExheWVyQ2xpZW50LmggKi87IH07CisJCTdCQjM0QTE3MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEExNjI1MzQ1Q0IyMDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xBTkdMRVV0aWxpdGllcy5oICovOyB9OwogCQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBG
MkMgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBo
aWNzRWxlbWVudC5oICovOyB9OwogCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JU
eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mw
MjlDNkQyNDkzQzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzE4NDNGRTFDOEI3MjgzMDAyRUI5NzMg
LyogQXV0b2ZpbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDMTg0M0ZDMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDA2Miw2ICsxMDA2NCw4IEBA
CiAJCTdBRjlCMjA5MThDRkI1RjIwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QUY5QjIwQTE4Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVlRUUmVnaW9uTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBCMThDRkI1RjMwMEM2NEJF
RiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNWVFRSZWdpb25MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCQjM0QTEz
MjUzNDU3OTEwMDAyOUQwOCAvKiBXZWJHTExheWVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkdMTGF5ZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0JCMzRBMTYyNTM0NUNCMjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5H
TEVVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzAxMUYzRDI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3MuY3BwLmVyYiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTZXR0aW5n
cy5jcHAuZXJiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxMUYzRTI0RkFEMzYw
MDA1QkVGMTAgLyogSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5jcHAuZXJiICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEludGVy
bmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwLmVyYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MwMTFGM0YyNEZBRDM2MDAwNUJFRjEwIC8qIEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQu
aWRsLmVyYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmlkbC5lcmI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTg3Myw2ICsyMTg3Nyw3IEBACiAJCQkJNkUyN0YyNDMy
MjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmNwcCAqLywKIAkJCQk2RTI3RjI0
NDIyOUM5RjhEMDBGMUY2MzIgLyogRXh0ZW5zaW9uc0dMQU5HTEUuaCAqLywKIAkJCQk2RTI3RjI0
MjIyOThDRTRCMDBGMUY2MzIgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgKi8sCisJCQkJ
N0JCMzRBMTYyNTM0NUNCMjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRp
ZXMuaCAqLywKIAkJCQk2RTI5MDg2MTIyOURCOTUwMDAwOTg2RTIgLyogVGVtcG9yYXJ5QU5HTEVT
ZXR0aW5nLmNwcCAqLywKIAkJCQk2RTI5MDg2MzIyOURCOTcwMDAwOTg2RTIgLyogVGVtcG9yYXJ5
QU5HTEVTZXR0aW5nLmggKi8sCiAJCQkpOwpAQCAtMjY0MjMsNiArMjY0MjgsNyBAQAogCQkJCUNE
NUQyNzc1MUU4MzE4RTAwMEQ4MEEzRCAvKiBXZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24ubW0g
Ki8sCiAJCQkJNDlGRkJGM0QxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCAqLywKIAkJ
CQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAqLywKKwkJCQk3QkIz
NEExMzI1MzQ1NzkxMDAwMjlEMDggLyogV2ViR0xMYXllckNsaWVudC5oICovLAogCQkJCTMxODQz
NkRCMjFCOURBQTAwMEVEMzgzRSAvKiBXZWJHUFVMYXllci5oICovLAogCQkJCTMxODQzNkREMjFC
OURBQTAwMEVEMzgzRSAvKiBXZWJHUFVMYXllci5tbSAqLywKIAkJCSk7CkBAIC0zMTYwNiw2ICsz
MTYxMiw3IEBACiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBo
aWNzQ29udGV4dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3MDIzQTk2OTczMDA4RkM0
N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQjM0QTE3MjUz
NDVDQjIwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEwNDJEMzY1MDAwOUQ0
NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOUE3
Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMzQ2MDUsNiArMzQ2MTIsNyBAQAogCQkJCTZFQkYwRTU1MTJBODky
OTgwMERCMTcwOSAvKiBXZWJHTEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5
Q0YxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ5RkZCRjNGMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3QkIzNEExNTI1MzQ1NzkxMDAwMjlEMDggLyogV2ViR0xMYXllckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNGMUQ1QkIxMkQ1MzJDNDAwODMyQkVDIC8qIFdlYkdMTG9zZUNv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUQ1MTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RDcxMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwCmluZGV4IDU1NTU2ZDQ2MDE3Y2MxMTIzMzE5YWMyOTE5MGIwZGJlMzMyNDRhYzUu
LmQ0NzFjNDIyY2M0NzI4YmZlY2YzMGU5MWY2OTI3ZjE0ZTE3MjZkYzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBo
aWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC0yMDksMTIgKzIwOSwxMSBAQCBib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIEFT
U0VSVChtX3RleHR1cmUpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFhbGxvY2F0
ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShzaXplKSkgeworICAgIGlmICghcmVzaGFwZURpc3BsYXlC
dWZmZXJCYWNraW5nKCkpIHsKICAgICAgICAgUkVMRUFTRV9MT0coV2ViR0wsICJGYXRhbDogVW5h
YmxlIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUgb2Ygc2l6ZSAlZCB4ICVkIiwgd2lkdGgsIGhl
aWdodCk7CiAgICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQotICAgIHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXll
cigpOwogICAgIGlmIChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUpIHsKICAgICAgICAg
Ly8gVGhlIGNvbnRleHQgcmVxdWlyZXMgdGhlIHVzZSBvZiBhbiBpbnRlcm1lZGlhdGUgdGV4dHVy
ZSBpbiBvcmRlciB0byBpbXBsZW1lbnQKICAgICAgICAgLy8gcHJlc2VydmVEcmF3aW5nQnVmZmVy
OnRydWUgd2l0aG91dCBhbnRpYWxpYXNpbmcuCkBAIC01MjAsNiArNTE5LDEyIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcHJlcGFyZVRleHR1cmVJbXBsKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlSW1wbCgpCit7
CisgICAgQVNTRVJUKCFtX2xheWVyQ29tcG9zaXRlZCk7CiAKICAgICBpZiAoY29udGV4dEF0dHJp
YnV0ZXMoKS5hbnRpYWxpYXMpCiAgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkoKTsKQEAgLTU1NSw3ICs1NjAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
cmVwYXJlVGV4dHVyZSgpCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwogICAgIH0KLSAg
ICBnbDo6Rmx1c2goKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRH
TEFOR0xFVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU5OWNkOGFlZmY3NzM3MjlkNGE4NjhiM2Ji
MzE4NzgxYzNmZjEzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaApAQCAtMCww
ICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKEFO
R0xFKQorCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKKyNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZUEVTIDAKKy8vIFNraXAgdGhlIGlu
Y2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRzIGZvciBub3cu
CisjZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKKyNkZWZpbmUgR0xfQU5HTEVfZXhw
bGljaXRfY29udGV4dF9nbGVzMQordHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7CisjaW1wb3J0
IDxBTkdMRS9lZ2wuaD4gIC8vIE5PTElOVAorI2ltcG9ydCA8QU5HTEUvZWdsZXh0Lmg+CisjaW1w
b3J0IDxBTkdMRS9lZ2xleHRfYW5nbGUuaD4KKyNpbXBvcnQgPEFOR0xFL2VudHJ5X3BvaW50c19l
Z2wuaD4KKyNpbXBvcnQgPEFOR0xFL2VudHJ5X3BvaW50c19lZ2xfZXh0Lmg+CisjaW1wb3J0IDxB
TkdMRS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5oPgorI2ltcG9ydCA8QU5HTEUvZW50
cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KKyNpbXBvcnQgPEFOR0xFL2dsMmV4dC5oPgor
I2ltcG9ydCA8QU5HTEUvZ2wyZXh0X2FuZ2xlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcpOworcHVibGljOgorICAgIFNjb3BlZFJl
c3RvcmVUZXh0dXJlQmluZGluZyhHQ0dMZW51bSBiaW5kaW5nUG9pbnRRdWVyeSwgR0NHTGVudW0g
YmluZGluZ1BvaW50LCBib29sIGNvbmRpdGlvbiA9IHRydWUpCisgICAgeworICAgICAgICBBU1NF
UlQoYmluZGluZ1BvaW50ICE9IHN0YXRpY19jYXN0PEdDR0xlbnVtPigwdSkpOworICAgICAgICBp
ZiAoY29uZGl0aW9uKSB7CisgICAgICAgICAgICBtX2JpbmRpbmdQb2ludCA9IGJpbmRpbmdQb2lu
dDsKKyAgICAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihiaW5kaW5nUG9pbnRRdWVyeSwgcmVpbnRl
cnByZXRfY2FzdDxHTGludCo+KCZtX2JpbmRpbmdWYWx1ZSkpOworICAgICAgICB9CisgICAgfQor
CisgICAgflNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZygpCisgICAgeworICAgICAgICBpZiAo
bV9iaW5kaW5nUG9pbnQpCisgICAgICAgICAgICBnbDo6QmluZFRleHR1cmUobV9iaW5kaW5nUG9p
bnQsIG1fYmluZGluZ1ZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR0xlbnVtIG1fYmlu
ZGluZ1BvaW50IHsgMCB9OworICAgIEdMdWludCBtX2JpbmRpbmdWYWx1ZSB7IDB1IH07Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0K
aW5kZXggOTVlZDA5NmM3Nzc0YjBiNWY4N2NjNDJjMGJlZjBlMDRkODA3ZjMzNy4uZmZlNzA3ZDVk
ODg1ZTFiNjQxNTcyODlmYjg5MWNkYTIxZTM2MjQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvY29hLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5oIgogCiAjaW1wb3J0ICJFeHRlbnNpb25zR0xBTkdMRS5oIgorI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oIgogI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1w
b3J0ICJMb2dnaW5nLmgiCkBAIC00MCwyMSArNDEsNiBAQAogI2ltcG9ydCA8d3RmL0Jsb2NrT2Jq
Q0V4Y2VwdGlvbnMuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2RlZmluZSBF
R0xfRUdMX1BST1RPVFlQRVMgMAotLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhw
bGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KLSNkZWZpbmUgR0xfQU5HTEVfZXhw
bGljaXRfY29udGV4dAotI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0X2dsZXMxCi10
eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKLSNpbXBvcnQgPEFOR0xFL2VnbC5oPgotI2ltcG9y
dCA8QU5HTEUvZWdsZXh0Lmg+Ci0jaW1wb3J0IDxBTkdMRS9lZ2xleHRfYW5nbGUuaD4KLSNpbXBv
cnQgPEFOR0xFL2VudHJ5X3BvaW50c19lZ2wuaD4KLSNpbXBvcnQgPEFOR0xFL2VudHJ5X3BvaW50
c19lZ2xfZXh0Lmg+Ci0jaW1wb3J0IDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dl
bi5oPgotI2ltcG9ydCA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KLSNp
bXBvcnQgPEFOR0xFL2dsMmV4dC5oPgotI2ltcG9ydCA8QU5HTEUvZ2wyZXh0X2FuZ2xlLmg+Ci0K
ICNpZiBQTEFURk9STShNQUMpCiAjaW1wb3J0ICJTY3JlZW5Qcm9wZXJ0aWVzLmgiCiAjaW1wb3J0
IDxPcGVuR0wvQ0dMUmVuZGVyZXJzLmg+CkBAIC0zNDgsMTEgKzMzNCwxMCBAQCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzIGF0dAogCiAgICAgLy8gQ3JlYXRlIHRoZSBXZWJHTExheWVyCiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgICAgIG1fd2ViR0xMYXllciA9IGFkb3B0TlMoW1tX
ZWJHTExheWVyIGFsbG9jXSBpbml0V2l0aEdyYXBoaWNzQ29udGV4dEdMOnRoaXNdKTsKKyAgICAg
ICAgbV93ZWJHTExheWVyID0gYWRvcHROUyhbW1dlYkdMTGF5ZXIgYWxsb2NdIGluaXRXaXRoQ2xp
ZW50OnRoaXMgZGV2aWNlUGl4ZWxSYXRpbzphdHRycy5kZXZpY2VQaXhlbFJhdGlvXSk7CiAjaWZu
ZGVmIE5ERUJVRwogICAgICAgICBbbV93ZWJHTExheWVyIHNldE5hbWU6QCJXZWJHTCBMYXllciJd
OwogI2VuZGlmCi0gICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0RUdMRGlzcGxheTptX2Rpc3BsYXlP
YmogY29uZmlnOm1fY29uZmlnT2JqXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAK
ICAgICAvLyBDcmVhdGUgdGhlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBmcmFt
ZWJ1ZmZlci4KQEAgLTQyNCwxMCArNDA5LDE5IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogICAgICAgICBpZiAobV9wcmVzZXJ2ZURyYXdpbmdC
dWZmZXJGQk8pCiAgICAgICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX3ByZXNl
cnZlRHJhd2luZ0J1ZmZlckZCTyk7CiAKLSAgICAgICAgW21fd2ViR0xMYXllciByZWxlYXNlR0xS
ZXNvdXJjZXNdOworICAgICAgICBpZiAobV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikgeworICAgICAg
ICAgICAgRUdMX1JlbGVhc2VUZXhJbWFnZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBi
dWZmZXIsIEVHTF9CQUNLX0JVRkZFUik7CisgICAgICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2Uo
bV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyKTsKKyAgICAgICAgfQorICAgICAg
ICBhdXRvIHJlY3ljbGVkQnVmZmVyID0gW21fd2ViR0xMYXllciByZWN5Y2xlQnVmZmVyXTsKKyAg
ICAgICAgaWYgKHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkKKyAgICAgICAgICAgIEVHTF9EZXN0cm95
U3VyZmFjZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVkQnVmZmVyLmhhbmRsZSk7CisgICAgICAgIGF1
dG8gY29udGVudHNIYW5kbGUgPSBbbV93ZWJHTExheWVyIGRldGFjaENsaWVudF07CisgICAgICAg
IGlmIChjb250ZW50c0hhbmRsZSkKKyAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rp
c3BsYXlPYmosIGNvbnRlbnRzSGFuZGxlKTsKKwogICAgICAgICBFR0xfTWFrZUN1cnJlbnQobV9k
aXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhU
KTsKICAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb250ZXh0T2Jq
KTsKLSAgICAgICAgW21fd2ViR0xMYXllciBzZXRDb250ZXh0Om51bGxwdHJdOwogICAgIH0KIAog
ICAgIExPRyhXZWJHTCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMICglcCku
IiwgdGhpcyk7CkBAIC00NzYsNiArNDcwLDEwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7CiAgICAgaWYgKCFtX2NvbnRleHRPYmopCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBkcmF3aW5nIGJ1ZmZlciwg
d2UgZmFpbGVkIHRvIGFsbG9jYXRlIG9uZSBkdXJpbmcgcHJlcGFyaW5nIGZvciBkaXNwbGF5Lgor
ICAgIC8vIFRoZSBleGNlcHRpb24gaXMgdGhlIGNhc2Ugd2hlbiB0aGUgY29udGV4dCBpcyB1c2Vk
IGJlZm9yZSByZXNoYXBpbmcuCisgICAgaWYgKCFtX2Rpc3BsYXlCdWZmZXJCYWNraW5nICYmICFn
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIC8vIEFOR0xFIGhhcyBhbiBlYXJseSBvdXQgZm9yIGNhc2Ugd2hlcmUgbm90aGlu
ZyBjaGFuZ2VzLiBDYWxsaW5nIE1ha2VDdXJyZW50CiAgICAgLy8gaXMgaW1wb3J0YW50IHRvIHNl
dCB2b2xhdGlsZSBwbGF0Zm9ybSBjb250ZXh0LiBTZWUgSW5pdGlhbGl6ZUVHTERpc3BsYXkoKS4K
ICAgICBpZiAoIUVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBF
R0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKSkKQEAgLTU3MSwxNiArNTY5LDYwIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVwZGF0ZUNHTENvbnRleHQoKQogfQogI2VuZGlmCiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0
b3JlKEludFNpemUgc2l6ZSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVE
aXNwbGF5QnVmZmVyQmFja2luZygpCiB7Ci0gICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlIGF0ICVkIHggJWQuICglcCki
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHRoaXMpOwotICAgIHJldHVybiBbbV93ZWJH
TExheWVyIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNpemU6c2l6ZSB1c2luZ0Fs
cGhhOmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFdOworICAgIEFTU0VSVCghZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKS5pc0VtcHR5KCkpOworICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IGJh
Y2tidWZmZXIgbm93IGJlZm9yZSBhbGxvY2F0aW5nIGEgbmV3IG9uZSBpbiBvcmRlciB0byBzbGln
aHRseSByZWR1Y2UgbWVtb3J5IHByZXNzdXJlLgorICAgIGlmIChtX2Rpc3BsYXlCdWZmZXJCYWNr
aW5nKSB7CisgICAgICAgIG1fZGlzcGxheUJ1ZmZlckJhY2tpbmcucmVzZXQoKTsKKyAgICAgICAg
RUdMX1JlbGVhc2VUZXhJbWFnZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIs
IEVHTF9CQUNLX0JVRkZFUik7CisgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlP
YmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpOworICAgICAgICBtX2Rpc3BsYXlCdWZmZXJQYnVm
ZmVyID0gRUdMX05PX1NVUkZBQ0U7CisgICAgfQorICAgIC8vIFJlc2V0IHRoZSBmdXR1cmUgcmVj
eWNsZWQgYnVmZmVyIG5vdywgYmVjYXVzZSBpdCBtb3N0IGxpa2VseSB3aWxsIG5vdCBiZSByZXVz
YWJsZSBhdCB0aGUgdGltZSBpdCB3aWxsIGJlIHJldXNlZC4KKyAgICBhdXRvIHJlY3ljbGVkQnVm
ZmVyID0gW21fd2ViR0xMYXllciByZWN5Y2xlQnVmZmVyXTsKKyAgICBpZiAocmVjeWNsZWRCdWZm
ZXIuaGFuZGxlKQorICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCByZWN5
Y2xlZEJ1ZmZlci5oYW5kbGUpOworICAgIHJlY3ljbGVkQnVmZmVyLnN1cmZhY2UucmVzZXQoKTsK
KworICAgIGF1dG8gYmFja2luZyA9IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlKGdldEludGVy
bmFsRnJhbWVidWZmZXJTaXplKCksIFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKCkpOworICAg
IGlmICghYmFja2luZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYmFja2luZy0+bWln
cmF0ZUNvbG9yU3BhY2VUb1Byb3BlcnRpZXMoKTsKKworICAgIGNvbnN0IGJvb2wgdXNpbmdBbHBo
YSA9IGNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGE7CisgICAgY29uc3QgYXV0byBzaXplID0gZ2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKKyAgICBjb25zdCBFR0xpbnQgc3VyZmFjZUF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX1dJRFRILCBzaXplLndpZHRoKCksCisgICAgICAgIEVH
TF9IRUlHSFQsIHNpemUuaGVpZ2h0KCksCisgICAgICAgIEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5H
TEUsIDAsCisgICAgICAgIEVHTF9URVhUVVJFX1RBUkdFVCwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkVHTElPU3VyZmFjZVRleHR1cmVUYXJnZXQoKSwKKyAgICAgICAgRUdMX1RF
WFRVUkVfSU5URVJOQUxfRk9STUFUX0FOR0xFLCB1c2luZ0FscGhhID8gR0xfQkdSQV9FWFQgOiBH
TF9SR0IsCisgICAgICAgIEVHTF9URVhUVVJFX0ZPUk1BVCwgRUdMX1RFWFRVUkVfUkdCQSwKKyAg
ICAgICAgRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSwgR0xfVU5TSUdORURfQllURSwKKyAgICAgICAg
Ly8gT25seSBoYXMgYW4gZWZmZWN0IG9uIHRoZSBpT1MgU2ltdWxhdG9yLgorICAgICAgICBFR0xf
SU9TVVJGQUNFX1VTQUdFX0hJTlRfQU5HTEUsIEVHTF9JT1NVUkZBQ0VfV1JJVEVfSElOVF9BTkdM
RSwKKyAgICAgICAgRUdMX05PTkUsIEVHTF9OT05FCisgICAgfTsKKyAgICBFR0xTdXJmYWNlIHBi
dWZmZXIgPSBFR0xfQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIobV9kaXNwbGF5T2JqLCBF
R0xfSU9TVVJGQUNFX0FOR0xFLCBiYWNraW5nLT5zdXJmYWNlKCksIG1fY29uZmlnT2JqLCBzdXJm
YWNlQXR0cmlidXRlcyk7CisgICAgaWYgKCFwYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhXVEZNb3ZlKGJhY2tpbmcpLCBw
YnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlRnJhbWVi
dWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKQogewotICAgIExPRyhXZWJHTCwgIkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9t
TGF5ZXIoKS4gKCVwKSIsIHRoaXMpOwotICAgIFttX3dlYkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVy
VG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07CisgICAgR0NHTGVudW0gdGV4dHVyZVRhcmdldCA9IElP
U3VyZmFjZVRleHR1cmVUYXJnZXQoKTsKKyAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcg
cmVzdG9yZUJpbmRpbmcoSU9TdXJmYWNlVGV4dHVyZVRhcmdldFF1ZXJ5KCksIHRleHR1cmVUYXJn
ZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKKyAgICBnbDo6Qmlu
ZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKKyAgICBpZiAoIUVHTF9CaW5kVGV4
SW1hZ2UobV9kaXNwbGF5T2JqLCBwYnVmZmVyLCBFR0xfQkFDS19CVUZGRVIpKSB7CisgICAgICAg
IEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIHBidWZmZXIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIgPSBwYnVmZmVyOwor
ICAgIG1fZGlzcGxheUJ1ZmZlckJhY2tpbmcgPSBXVEZNb3ZlKGJhY2tpbmcpOworICAgIHJldHVy
biB0cnVlOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0dMRVMyQ29tcGxp
YW50KCkgY29uc3QKQEAgLTYzNyw3ICs2NzksMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZUZvckRpc3BsYXkoKQogewotICAgIFtt
X3dlYkdMTGF5ZXIgcHJlcGFyZUZvckRpc3BsYXldOworICAgIGlmIChtX2xheWVyQ29tcG9zaXRl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBwcmVwYXJlVGV4dHVyZUltcGwoKTsKKworICAgIC8vIFRoZSBJT1N1
cmZhY2Ugd2lsbCBiZSB1c2VkIGZyb20gb3RoZXIgZ3JhcGhpY3Mgc3Vic3lzdGVtLCBzbyBmbHVz
aCBHTCBjb21tYW5kcy4KKyAgICBnbDo6Rmx1c2goKTsKKworICAgIGF1dG8gcmVjeWNsZWRCdWZm
ZXIgPSBbbV93ZWJHTExheWVyIHJlY3ljbGVCdWZmZXJdOworCisgICAgRUdMX1JlbGVhc2VUZXhJ
bWFnZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIsIEVHTF9CQUNLX0JVRkZF
Uik7CisgICAgW21fd2ViR0xMYXllciBwcmVwYXJlRm9yRGlzcGxheVdpdGhDb250ZW50czoge1dU
Rk1vdmUobV9kaXNwbGF5QnVmZmVyQmFja2luZyksIG1fZGlzcGxheUJ1ZmZlclBidWZmZXJ9XTsK
KyAgICBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyID0gRUdMX05PX1NVUkZBQ0U7CisKKyAgICBpZiAo
cmVjeWNsZWRCdWZmZXIuc3VyZmFjZSAmJiByZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlLT5zaXplKCkg
PT0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSkgeworICAgICAgICBpZiAoYmluZERpc3Bs
YXlCdWZmZXJCYWNraW5nKFdURk1vdmUocmVjeWNsZWRCdWZmZXIuc3VyZmFjZSksIHJlY3ljbGVk
QnVmZmVyLmhhbmRsZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlY3ljbGVk
QnVmZmVyLnN1cmZhY2UucmVzZXQoKTsKKyAgICBpZiAocmVjeWNsZWRCdWZmZXIuaGFuZGxlKQor
ICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCByZWN5Y2xlZEJ1ZmZlci5o
YW5kbGUpOworICAgIC8vIEVycm9yIHdpbGwgYmUgaGFuZGxlZCBieSBuZXh0IGNhbGwgdG8gbWFr
ZUNvbnRleHRDdXJyZW50KCkgd2hpY2ggd2lsbCBub3RpY2UgbGFjayBvZiBkaXNwbGF5IGJ1ZmZl
ci4KKyAgICByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGlkRGlzcGxheSgpCit7CisgICAgbWFya0xheWVyQ29tcG9zaXRl
ZCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJHTExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJHTExheWVyLmgKaW5kZXggNGQ5ZjM3YTY5NDlhYTkzNzYzNmE2ZmNhNzdjOTgyMjc0
NTA2ZTQwYy4uZTc4NmZhOGVhOTNmYzhiYTQ1YzA3ZjRmYmNiY2VjM2Y2M2I3MzU0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIu
aApAQCAtMjAsMzUgKzIwLDU3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbXBvcnQgIklP
U3VyZmFjZS5oIgotI2ltcG9ydCAiSW50U2l6ZS5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFy
dHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvTmFrZWRQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgR3JhcGhpY3NMYXllcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwor
Y2xhc3MgV2ViR0xMYXllckNsaWVudDsKK3N0cnVjdCBXZWJHTExheWVyQnVmZmVyIHsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBzdXJmYWNlOyAvLyBUaGUgYWN0dWFs
IGNvbnRlbnRzLgorICAgIHZvaWQqIGhhbmRsZSB7IG51bGxwdHIgfTsgLy8gQ2xpZW50IHNwZWNp
ZmljIG1ldGFkYXRhIGhhbmRsZSAoc3VjaCBhcyBFR0xTdXJmYWNlKS4KK307CiB9CiAKIEFMTE9X
X0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAKKy8vIEEgbGF5ZXIgY2xhc3MgaW1wbGVt
ZW50aW5nIGZyb250IGJ1ZmZlciBtYW5hZ2VtZW50IG9mIGEgMy1idWZmZXJpbmcgc3dhcAorLy8g
Y2hhaW4gb2YgSU9TdXJmYWNlcy4KKy8vIFRoZSBsYXllciB3aWxsIG93biB0aGUgSU9TdXJmYWNl
cyBpdCB1c2VzIGZvciBkaXNwbGF5LgorLy8gVGhlIGNsaWVudCBtYXkgYXR0YWNoIG1ldGFkYXRh
IHRvIGVhY2ggSU9TdXJmYWNlIGFuZCB3aWxsIHJlY2VpdmUgdGhlIG1ldGFkYXRhCisvLyBiYWNr
IG9uY2UgdGhlIElPU3VyZmFjZSBoYXMgYmVlbiBkaXNwbGF5ZWQuIEhvd2V2ZXIsIHRoZSBjbGll
bnQgbWF5IG5vdCBuZWNjZXNzYXJpbHkKKy8vIGJlIGFibGUgdG8gb2J0YWluIHRoZSBJT1N1cmZh
Y2UgaXRzZWxmIGZvciByZXVzZS4KKy8vIEV4YW1wbGUgdXNlIG9mIHRoZSBtZXRhZGF0YSBpcyB0
byB1c2UgRUdMU3VyZmFjZSBiaW5kaW5nIGFzIHRoZSBtZXRhZGF0YS4gVGhpcyB3YXkKKy8vIHdo
ZW4gdGhlIFdlYkdMTGF5ZXIgaXMgZG9uZSB3aXRoIHRoZSBJT1N1cmZhY2UgZGlzcGxheSwgdGhl
IGNsaWVudCBjYW4gY29udGludWUgdXNpbmcKKy8vIHRoZSBleGlzdGluZyBiaW5kaW5nIG9idGFp
bmVkIHRocm91Z2ggdGhlIGJ1ZmZlciByZWN5Y2xlIGxvZ2ljLgogQGludGVyZmFjZSBXZWJHTExh
eWVyIDogQ0FMYXllcgogCi1AcHJvcGVydHkgKG5vbmF0b21pYykgTmFrZWRQdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNvbnRleHQ7Ci0KLS0gKGlkKWluaXRXaXRoR3JhcGhp
Y3NDb250ZXh0R0w6KE5ha2VkUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPilj
b250ZXh0OworLSAoaWQpaW5pdFdpdGhDbGllbnQ6KE5ha2VkUHRyPFdlYkNvcmU6OldlYkdMTGF5
ZXJDbGllbnQ+KWNsaWVudCBkZXZpY2VQaXhlbFJhdGlvOihmbG9hdClkZXZpY2VQaXhlbFJhdGlv
OwogCiAtIChDR0ltYWdlUmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29s
b3JTcGFjZVJlZiljb2xvclNwYWNlOwogCi0tICh2b2lkKXByZXBhcmVGb3JEaXNwbGF5OworLy8g
UmV0dXJucyB0aGUgbWV0YWRhdGEgaGFuZGxlIG9mIGxhc3QgdW51c2VkIGNvbnRlbnRzIGJ1ZmZl
ci4KKy8vIENsaWVudCBtYXkgcmVjaWV2ZSBiYWNrIGFsc28gdGhlIG93bmVyc2hpcCBvZiB0aGUg
Y29udGVudHMgc3VyZmFjZSwgaW4gY2FzZSBpdCBpcyBhdmFpbGFibGUgYXQgdGhlCisvLyB0aW1l
IG9mIHRoZSBjYWxsLgorLy8gUmV0dXJucyBlaXRoZXI6CisvLyAtIEVtcHR5IGJ1ZmZlciBpZiBu
byBidWZmZXIgaGFzIGJlZW4gc3VibWl0dGVkLgorLy8gLSBCdWZmZXIgd2l0aCBlbXB0eSBzdXJm
YWNlIGFuZCBub24tZW1wdHkgbWV0YWRhdGEgaGFuZGxlIGlmIHRoZSByZWN5Y2xlZCBidWZmZXIg
d2FzIGF2YWlsYWJsZQorLy8gICBidXQgdGhlIHN1cmZhY2UgaXMgc3RpbGwgaW4gdXNlLgorLy8g
LSBTdXJmYWNlIGFuZCBoYW5kbGUuCistIChXZWJDb3JlOjpXZWJHTExheWVyQnVmZmVyKSByZWN5
Y2xlQnVmZmVyOworCisvLyBQcmVwYXJlcyB0aGUgbGF5ZXIgZm9yIGRpc3BsYXkgd2l0aCBhIGNv
bnRlbnRzIGJ1ZmZlci4KKy8vIENsaWVudCB0cmFuc2ZlcnMgdGhlIG93bmVyc2hpcCBvZiB0aGUg
SU9TdXJmYWNlIHN1cmZhY2UgaW4gdGhlIGBidWZmZXJgLgorLSAodm9pZClwcmVwYXJlRm9yRGlz
cGxheVdpdGhDb250ZW50czooV2ViQ29yZTo6V2ViR0xMYXllckJ1ZmZlcilidWZmZXI7CiAKLS0g
KGJvb2wpYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTooV2ViQ29yZTo6SW50
U2l6ZSlzaXplIHVzaW5nQWxwaGE6KEJPT0wpdXNpbmdBbHBoYTsKLS0gKHZvaWQpYmluZEZyYW1l
YnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZTsKLS0gKHZvaWQpc2V0RUdMRGlzcGxheToodm9p
ZCopZWdsRGlzcGxheSBjb25maWc6KHZvaWQqKWVnbENvbmZpZzsKLS0gKHZvaWQpcmVsZWFzZUdM
UmVzb3VyY2VzOworLy8gRGV0YWNoZXMgdGhlIGNsaWVudCBhbmQgcmV0dXJucyB0aGUgY3VycmVu
dCBjb250ZW50cyBidWZmZXIgbWV0YWRhdGEgaGFuZGxlLgorLy8gVGhlIGlmIG11bHRpcGxlIGJ1
ZmZlcnMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCwgcmVjeWNsZUJ1ZmZlciBtdXN0IGhhdmUgYmVlbiBj
YWxsZWQgYmVmb3JlIGNhbGxpbmcKKy8vIHRoaXMuCisvLyBUaGUgY2xpZW50IHdpbGwgbm90IHJl
Y2VpdmUgYFdlYkdMTGF5ZXJDbGllbnRgIG5vdGlmaWNhdGlvbnMgYWZ0ZXIgY2FsbGluZyB0aGlz
LgorLSAodm9pZCopZGV0YWNoQ2xpZW50OwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCmluZGV4IGNjZmY4ZjA2
ZGY1YzY5ZjgxNTA5NDExODQwNmIyOWE3YmQ0MDc0ZTQuLjA5ZjA5ZDY5YWExYjA4OGFjMzE0ZjY1
YzZhNmM4NTA0NDhiZDcwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQpAQCAtMjgsNzQgKzI4LDI3IEBACiAjaWYgRU5B
QkxFKFdFQkdMKQogI2ltcG9ydCAiV2ViR0xMYXllci5oIgogCi0jaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHRDRy5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbXBvcnQg
IkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgotI2ltcG9ydCAi
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgotI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgorI2ltcG9ydCAiV2ViR0xMYXllckNsaWVudC5oIgog
I2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDx3dGYvRmFz
dE1hbGxvYy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi0jZGVmaW5lIEVHTF9FR0xf
UFJPVE9UWVBFUyAwCi0jaW1wb3J0IDxBTkdMRS9lZ2wuaD4KLSNpbXBvcnQgPEFOR0xFL2VnbGV4
dC5oPgotI2ltcG9ydCA8QU5HTEUvZWdsZXh0X2FuZ2xlLmg+Ci0jaW1wb3J0IDxBTkdMRS9lbnRy
eV9wb2ludHNfZWdsLmg+Ci0jaW1wb3J0IDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0
b2dlbi5oPgotLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4
dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KLSNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4
dAotI2ltcG9ydCA8QU5HTEUvZ2wyZXh0Lmg+Ci0jaW1wb3J0IDxBTkdMRS9nbDJleHRfYW5nbGUu
aD4KLQotbmFtZXNwYWNlIHsKLSAgICBjbGFzcyBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcg
ewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRp
bmcpOwotICAgIHB1YmxpYzoKLSAgICAgICAgU2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nKEdM
ZW51bSBiaW5kaW5nUG9pbnRRdWVyeSwgR0xlbnVtIGJpbmRpbmdQb2ludCkKLSAgICAgICAgICAg
IDogbV9iaW5kaW5nUG9pbnQoYmluZGluZ1BvaW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6R2V0SW50ZWdlcnYoYmluZGluZ1BvaW50UXVlcnksICZtX2JpbmRpbmdWYWx1ZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB+U2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKG1fYmluZGluZ1BvaW50LCBtX2JpbmRpbmdW
YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEdMaW50IG1fYmluZGlu
Z1BvaW50IHsgMCB9OwotICAgICAgICBHTGludCBtX2JpbmRpbmdWYWx1ZSB7IDAgfTsKLSAgICB9
OwotfQotCiBAaW1wbGVtZW50YXRpb24gV2ViR0xMYXllciB7Ci0gICAgZmxvYXQgX2RldmljZVBp
eGVsUmF0aW87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gX2NvbnRl
bnRzQnVmZmVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9kcmF3
aW5nQnVmZmVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9zcGFy
ZUJ1ZmZlcjsKLSAgICBXZWJDb3JlOjpJbnRTaXplIF9idWZmZXJTaXplOwotICAgIEJPT0wgX3Vz
aW5nQWxwaGE7Ci0gICAgdm9pZCogX2VnbERpc3BsYXk7Ci0gICAgdm9pZCogX2VnbENvbmZpZzsK
LSAgICB2b2lkKiBfY29udGVudHNQYnVmZmVyOwotICAgIHZvaWQqIF9kcmF3aW5nUGJ1ZmZlcjsK
LSAgICB2b2lkKiBfc3BhcmVQYnVmZmVyOwotICAgIHZvaWQqIF9sYXRjaGVkUGJ1ZmZlcjsKKyAg
ICBOYWtlZFB0cjxXZWJDb3JlOjpXZWJHTExheWVyQ2xpZW50PiBfY2xpZW50OworICAgIFdlYkNv
cmU6OldlYkdMTGF5ZXJCdWZmZXIgX2NvbnRlbnRzQnVmZmVyOworICAgIFdlYkNvcmU6OldlYkdM
TGF5ZXJCdWZmZXIgX3NwYXJlQnVmZmVyOworCiAgICAgQk9PTCBfcHJlcGFyZWRGb3JEaXNwbGF5
OwogfQogCi0tIChpZClpbml0V2l0aEdyYXBoaWNzQ29udGV4dEdMOihOYWtlZFB0cjxXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4pY29udGV4dAorLSAoaWQpaW5pdFdpdGhDbGllbnQ6
KE5ha2VkUHRyPFdlYkNvcmU6OldlYkdMTGF5ZXJDbGllbnQ+KWNsaWVudCBkZXZpY2VQaXhlbFJh
dGlvOihmbG9hdClkZXZpY2VQaXhlbFJhdGlvCiB7Ci0gICAgX2NvbnRleHQgPSBjb250ZXh0Owor
ICAgIF9jbGllbnQgPSBjbGllbnQ7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBhdXRv
IGF0dHJpYnV0ZXMgPSBjb250ZXh0LT5jb250ZXh0QXR0cmlidXRlcygpOwotICAgIF9kZXZpY2VQ
aXhlbFJhdGlvID0gYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvOwotICAgIHNlbGYuY29udGVu
dHNPcGFxdWUgPSAhYXR0cmlidXRlcy5hbHBoYTsKICAgICBzZWxmLnRyYW5zZm9ybSA9IENBVHJh
bnNmb3JtM0RJZGVudGl0eTsKLSAgICBzZWxmLmNvbnRlbnRzU2NhbGUgPSBfZGV2aWNlUGl4ZWxS
YXRpbzsKKyAgICBzZWxmLmNvbnRlbnRzU2NhbGUgPSBkZXZpY2VQaXhlbFJhdGlvOwogICAgIHJl
dHVybiBzZWxmOwogfQogCkBAIC0xMTcsNjYgKzcwLDM5IEBAIG5hbWVzcGFjZSB7CiAKIC0gKENH
SW1hZ2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVm
KWNvbG9yU3BhY2UKIHsKLSAgICBpZiAoIV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE3Mzc3CisgICAgLy8gV2hlbiBpbXBsZW1lbnRpbmcsIHJlbWVtYmVyIHRv
IHVzZSBzZWxmLmNvbnRlbnRzU2NhbGUuCiAgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi0tICh2b2lkKXByZXBhcmVGb3JEaXNwbGF5CistIChX
ZWJDb3JlOjpXZWJHTExheWVyQnVmZmVyKSByZWN5Y2xlQnVmZmVyCiB7Ci0gICAgaWYgKCFfY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVG8gYXZvaWQgcnVubmluZyBhbnkgT3Bl
bkdMIGNvZGUgaW4gYGRpc3BsYXlgLCB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkCi0gICAg
Ly8gYXQgdGhlIGVuZCBvZiB0aGUgcmVuZGVyaW5nIHRhc2suIFdlIHdpbGwgZmx1c2ggYWxsIHBh
aW50aW5nIGNvbW1hbmRzCi0gICAgLy8gbGVhdmluZyB0aGUgYnVmZmVycyByZWFkeSB0byBjb21w
b3NpdGUuCi0KLSAgICBpZiAoIV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgewotICAg
ICAgICAvLyBDb250ZXh0IGlzIGxpa2VseSBiZWluZyB0b3JuIGRvd24uCi0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoX3NwYXJlQnVmZmVyLnN1cmZhY2UpIHsKKyAgICAgICAgaWYgKF9zcGFyZUJ1
ZmZlci5zdXJmYWNlLT5pc0luVXNlKCkpCisgICAgICAgICAgICBfc3BhcmVCdWZmZXIuc3VyZmFj
ZS5yZXNldCgpOworICAgICAgICByZXR1cm4gV1RGTW92ZShfc3BhcmVCdWZmZXIpOwogICAgIH0K
LSAgICBfY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKLSAgICBpZiAoX2RyYXdpbmdCdWZmZXIp
IHsKLSAgICAgICAgaWYgKF9sYXRjaGVkUGJ1ZmZlcikgewotICAgICAgICAgICAgV1RGOjpPcHRp
b25hbDxTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmc+IHJlc3RvcmVCaW5kaW5nOwotICAgICAg
ICAgICAgR0NHTGVudW0gdGV4dHVyZVRhcmdldCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0KCk7Ci0gICAgICAgICAgICAvLyBXZSBkb24n
dCBuZWVkIHRvIHJlc3RvcmUgR0xfVEVYVFVSRV9SRUNUQU5HTEUgYmVjYXVzZSBpdCdzIG5vdCBh
Y2Nlc3NpYmxlIGZyb20gdXNlciBjb2RlLgotICAgICAgICAgICAgaWYgKHRleHR1cmVUYXJnZXQg
IT0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQikKLSAg
ICAgICAgICAgICAgICByZXN0b3JlQmluZGluZy5lbXBsYWNlKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0UXVlcnkoKSwgdGV4dHVyZVRhcmdl
dCk7Ci0gICAgICAgICAgICBHQ0dMZW51bSB0ZXh0dXJlID0gX2NvbnRleHQtPnBsYXRmb3JtVGV4
dHVyZSgpOwotICAgICAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIHRleHR1
cmUpOwotICAgICAgICAgICAgaWYgKCFFR0xfUmVsZWFzZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBf
bGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogcmVwb3J0IGVycm9yLgotICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBfbGF0Y2hlZFBidWZmZXIgPSBudWxscHRyOwotICAg
ICAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KIAotICAgICAgICBzdGQ6OnN3YXAoX2NvbnRlbnRz
QnVmZmVyLCBfZHJhd2luZ0J1ZmZlcik7Ci0gICAgICAgIHN0ZDo6c3dhcChfY29udGVudHNQYnVm
ZmVyLCBfZHJhd2luZ1BidWZmZXIpOwotICAgICAgICBbc2VsZiBiaW5kRnJhbWVidWZmZXJUb05l
eHRBdmFpbGFibGVTdXJmYWNlXTsKLSAgICB9CistICh2b2lkKXByZXBhcmVGb3JEaXNwbGF5V2l0
aENvbnRlbnRzOihXZWJDb3JlOjpXZWJHTExheWVyQnVmZmVyKSBidWZmZXIKK3sKKyAgICBBU1NF
UlQoIV9zcGFyZUJ1ZmZlci5zdXJmYWNlKTsKKyAgICBfc3BhcmVCdWZmZXIgPSBXVEZNb3ZlKF9j
b250ZW50c0J1ZmZlcik7CisgICAgX2NvbnRlbnRzQnVmZmVyID0gV1RGTW92ZShidWZmZXIpOwog
ICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheV07CiAgICAgX3ByZXBhcmVkRm9yRGlzcGxheSA9IFlF
UzsKIH0KIAogLSAodm9pZClkaXNwbGF5CiB7Ci0gICAgaWYgKCFfY29udGV4dCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSd2ZSBwYWludGVkIGludG8gdGhlIF9k
cmF3aW5nQnVmZmVyIGFuZCBzd2FwcGVkIGl0IHdpdGggdGhlIG9sZCBfY29udGVudHNCdWZmZXIs
Ci0gICAgLy8gc28gYWxsIHdlIG5lZWQgdG8gZG8gaGVyZSBpcyB0aWNrbGUgdGhlIENBTGF5ZXIg
dG8gbGV0IGl0IGtub3cgaXQgaGFzIG5ldyBjb250ZW50cy4KLSAgICAvLyBUaGlzIGF2b2lkcyBy
dW5uaW5nIGFueSBPcGVuR0wgY29kZSBpbiB0aGlzIG1ldGhvZC4KLQotICAgIGlmIChfY29udGVu
dHNCdWZmZXIgJiYgX3ByZXBhcmVkRm9yRGlzcGxheSkgewotICAgICAgICBzZWxmLmNvbnRlbnRz
ID0gX2NvbnRlbnRzQnVmZmVyLT5hc0xheWVyQ29udGVudHMoKTsKKyAgICBpZiAoX2NvbnRlbnRz
QnVmZmVyLnN1cmZhY2UgJiYgX3ByZXBhcmVkRm9yRGlzcGxheSkgeworICAgICAgICBzZWxmLmNv
bnRlbnRzID0gX2NvbnRlbnRzQnVmZmVyLnN1cmZhY2UtPmFzTGF5ZXJDb250ZW50cygpOwogICAg
ICAgICBbc2VsZiByZWxvYWRWYWx1ZUZvcktleVBhdGg6QCJjb250ZW50cyJdOwogICAgIH0KLQot
ICAgIF9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAgaWYgKF9jbGllbnQpCisg
ICAgICAgIF9jbGllbnQtPmRpZERpc3BsYXkoKTsKICAgICBhdXRvIGxheWVyID0gV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXJGb3JMYXllcigoX19icmlkZ2Ugdm9pZCop
c2VsZik7CiAgICAgaWYgKGxheWVyICYmIGxheWVyLT5vd25lcigpKQogICAgICAgICBsYXllci0+
b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KGxheWVyLmdldCgpKTsKQEAg
LTE4NCw5NiArMTEwLDE0IEBAIG5hbWVzcGFjZSB7CiAgICAgX3ByZXBhcmVkRm9yRGlzcGxheSA9
IE5POwogfQogCi0tICh2b2lkKXNldEVHTERpc3BsYXk6KHZvaWQqKWRpc3BsYXkgY29uZmlnOih2
b2lkKiljb25maWcKLXsKLSAgICBfZWdsRGlzcGxheSA9IGRpc3BsYXk7Ci0gICAgX2VnbENvbmZp
ZyA9IGNvbmZpZzsKLX0KLQotLSAodm9pZClyZWxlYXNlR0xSZXNvdXJjZXMKKy0gKHZvaWQqKSBk
ZXRhY2hDbGllbnQKIHsKLSAgICBpZiAoIV9jb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpICYmIF9sYXRjaGVkUGJ1ZmZlcikg
ewotICAgICAgICBFR0xfUmVsZWFzZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZm
ZXIsIEVHTF9CQUNLX0JVRkZFUik7Ci0gICAgICAgIF9sYXRjaGVkUGJ1ZmZlciA9IG51bGxwdHI7
Ci0gICAgfQotCi0gICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKF9lZ2xEaXNwbGF5LCBfY29udGVudHNQ
YnVmZmVyKTsKLSAgICBFR0xfRGVzdHJveVN1cmZhY2UoX2VnbERpc3BsYXksIF9kcmF3aW5nUGJ1
ZmZlcik7Ci0gICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKF9lZ2xEaXNwbGF5LCBfc3BhcmVQYnVmZmVy
KTsKKyAgICBBU1NFUlQoIV9zcGFyZUJ1ZmZlci5zdXJmYWNlKTsKKyAgICBfY2xpZW50ID0gbmls
OworICAgIHZvaWQqIHJlc3VsdCA9IF9jb250ZW50c0J1ZmZlci5oYW5kbGU7CisgICAgX2NvbnRl
bnRzQnVmZmVyLmhhbmRsZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KLQotLSAo
Ym9vbClhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOihXZWJDb3JlOjpJbnRT
aXplKXNpemUgdXNpbmdBbHBoYTooQk9PTCl1c2luZ0FscGhhCi17Ci0gICAgX2J1ZmZlclNpemUg
PSBzaXplOwotICAgIF91c2luZ0FscGhhID0gdXNpbmdBbHBoYTsKLSAgICBfY29udGVudHNCdWZm
ZXIgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShzaXplLCBXZWJDb3JlOjpzUkdCQ29sb3JT
cGFjZVJlZigpKTsKLSAgICBfZHJhd2luZ0J1ZmZlciA9IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3Jl
YXRlKHNpemUsIFdlYkNvcmU6OnNSR0JDb2xvclNwYWNlUmVmKCkpOwotICAgIF9zcGFyZUJ1ZmZl
ciA9IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlKHNpemUsIFdlYkNvcmU6OnNSR0JDb2xvclNw
YWNlUmVmKCkpOwotCi0gICAgaWYgKCFfY29udGVudHNCdWZmZXIgfHwgIV9kcmF3aW5nQnVmZmVy
IHx8ICFfc3BhcmVCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIF9jb250ZW50
c0J1ZmZlci0+bWlncmF0ZUNvbG9yU3BhY2VUb1Byb3BlcnRpZXMoKTsKLSAgICBfZHJhd2luZ0J1
ZmZlci0+bWlncmF0ZUNvbG9yU3BhY2VUb1Byb3BlcnRpZXMoKTsKLSAgICBfc3BhcmVCdWZmZXIt
Pm1pZ3JhdGVDb2xvclNwYWNlVG9Qcm9wZXJ0aWVzKCk7Ci0gICAgY29uc3QgRUdMaW50IHN1cmZh
Y2VBdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgIEVHTF9XSURUSCwgc2l6ZS53aWR0aCgpLAotICAg
ICAgICBFR0xfSEVJR0hULCBzaXplLmhlaWdodCgpLAotICAgICAgICBFR0xfSU9TVVJGQUNFX1BM
QU5FX0FOR0xFLCAwLAotICAgICAgICBFR0xfVEVYVFVSRV9UQVJHRVQsIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0KCksCi0gICAgICAg
IEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSwgdXNpbmdBbHBoYSA/IEdMX0JHUkFf
RVhUIDogR0xfUkdCLAotICAgICAgICBFR0xfVEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JH
QkEsCi0gICAgICAgIEVHTF9URVhUVVJFX1RZUEVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsCi0g
ICAgICAgIC8vIE9ubHkgaGFzIGFuIGVmZmVjdCBvbiB0aGUgaU9TIFNpbXVsYXRvci4KLSAgICAg
ICAgRUdMX0lPU1VSRkFDRV9VU0FHRV9ISU5UX0FOR0xFLCBFR0xfSU9TVVJGQUNFX1dSSVRFX0hJ
TlRfQU5HTEUsCi0gICAgICAgIEVHTF9OT05FLCBFR0xfTk9ORQotICAgIH07Ci0KLSAgICBfY29u
dGVudHNQYnVmZmVyID0gRUdMX0NyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKF9lZ2xEaXNw
bGF5LCBFR0xfSU9TVVJGQUNFX0FOR0xFLCBfY29udGVudHNCdWZmZXItPnN1cmZhY2UoKSwgX2Vn
bENvbmZpZywgc3VyZmFjZUF0dHJpYnV0ZXMpOwotICAgIF9kcmF3aW5nUGJ1ZmZlciA9IEVHTF9D
cmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihfZWdsRGlzcGxheSwgRUdMX0lPU1VSRkFDRV9B
TkdMRSwgX2RyYXdpbmdCdWZmZXItPnN1cmZhY2UoKSwgX2VnbENvbmZpZywgc3VyZmFjZUF0dHJp
YnV0ZXMpOwotICAgIF9zcGFyZVBidWZmZXIgPSBFR0xfQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRC
dWZmZXIoX2VnbERpc3BsYXksIEVHTF9JT1NVUkZBQ0VfQU5HTEUsIF9zcGFyZUJ1ZmZlci0+c3Vy
ZmFjZSgpLCBfZWdsQ29uZmlnLCBzdXJmYWNlQXR0cmlidXRlcyk7Ci0KLSAgICBpZiAoIV9jb250
ZW50c1BidWZmZXIgfHwgIV9kcmF3aW5nUGJ1ZmZlciB8fCAhX3NwYXJlUGJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS0gKHZvaWQpYmluZEZy
YW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZQotewotICAgIFdURjo6T3B0aW9uYWw8U2Nv
cGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nPiByZXN0b3JlQmluZGluZzsKLSAgICBHQ0dMZW51bSB0
ZXh0dXJlVGFyZ2V0ID0gV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OklPU3VyZmFj
ZVRleHR1cmVUYXJnZXQoKTsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlc3RvcmUgR0xfVEVY
VFVSRV9SRUNUQU5HTEUgYmVjYXVzZSBpdCdzIG5vdCBhY2Nlc3NpYmxlIGZyb20gdXNlciBjb2Rl
LgotICAgIGlmICh0ZXh0dXJlVGFyZ2V0ICE9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFX1JFQ1RBTkdMRV9BUkIpCi0gICAgICAgIHJlc3RvcmVCaW5kaW5nLmVtcGxhY2UoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OklPU3VyZmFjZVRleHR1cmVUYXJnZXRRdWVy
eSgpLCB0ZXh0dXJlVGFyZ2V0KTsKLQotICAgIEdDR0xlbnVtIHRleHR1cmUgPSBfY29udGV4dC0+
cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIHRl
eHR1cmUpOwotCi0gICAgaWYgKF9sYXRjaGVkUGJ1ZmZlcikgewotICAgICAgICBpZiAoIUVHTF9S
ZWxlYXNlVGV4SW1hZ2UoX2VnbERpc3BsYXksIF9sYXRjaGVkUGJ1ZmZlciwgRUdMX0JBQ0tfQlVG
RkVSKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHJlcG9ydCBlcnJvci4KLSAgICAgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgX2xhdGNoZWRQYnVmZmVyID0g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoX2RyYXdpbmdCdWZmZXIgJiYgX2RyYXdpbmdCdWZm
ZXItPmlzSW5Vc2UoKSkgewotICAgICAgICBzdGQ6OnN3YXAoX2RyYXdpbmdCdWZmZXIsIF9zcGFy
ZUJ1ZmZlcik7Ci0gICAgICAgIHN0ZDo6c3dhcChfZHJhd2luZ1BidWZmZXIsIF9zcGFyZVBidWZm
ZXIpOwotICAgIH0KLQotICAgIC8vIExpbmsgdGhlIElPU3VyZmFjZSB0byB0aGUgdGV4dHVyZSB2
aWEgdGhlIHByZXZpb3VzbHktY3JlYXRlZCBwYnVmZmVyLgotICAgIGlmICghRUdMX0JpbmRUZXhJ
bWFnZShfZWdsRGlzcGxheSwgX2RyYXdpbmdQYnVmZmVyLCBFR0xfQkFDS19CVUZGRVIpKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IuCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgfQotICAgIF9sYXRjaGVkUGJ1ZmZlciA9IF9kcmF3aW5nUGJ1ZmZlcjsKLX0KLQogQGVu
ZAogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllckNsaWVudC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllckNsaWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjcyNjAzY2JlZjI5MjQ0OGFmMWIzYjkzYWNlYTdlZDQ5OTMxN2U3YmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyQ2xp
ZW50LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFdlYkdMTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYkdMTGF5ZXJDbGll
bnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzcGxheSgpID0gMDsKK307CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggZjg1ODJjNjE3YjA3NjhhMDUzNDI0
YWU5N2I3YzljNjYyY2UwMzBiYi4uMjUyMTlmOGY1MzFjYWRhM2FiZjVkMGU0MjE1MzM1YzEzNDcw
ZmUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTM1LDYgKzM1LDEx
IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJh
eS5oPgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5j
bHVkZSAiV2ViR0xMYXllckNsaWVudC5oIgorI2VuZGlmCisKICNpZiBVU0UoQ0EpCiAjaW5jbHVk
ZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjZW5kaWYKQEAgLTU0LDcgKzU5LDYgQEAKICNpZiBQTEFU
Rk9STShDT0NPQSkKIE9CSkNfQ0xBU1MgQ0FMYXllcjsKIE9CSkNfQ0xBU1MgV2ViR0xMYXllcjsK
LXR5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlKiBJT1N1cmZhY2VSZWY7CiAjZW5kaWYgLy8gUExB
VEZPUk0oQ09DT0EpCiAKICNpZiBVU0UoTklDT1NJQSkKQEAgLTgzLDcgKzg3LDExIEBAIHR5cGVk
ZWYgV1RGOjpIYXNoTWFwPENTdHJpbmcsIHVpbnQ2NF90PiBTaGFkZXJOYW1lSGFzaDsKIAogY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlOwogCi1jbGFzcyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7CitjbGFzcyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTAorI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgICwgcHJpdmF0ZSBXZWJHTExheWVyQ2xpZW50CisjZW5kaWYKK3sKIHB1YmxpYzoK
ICAgICBjbGFzcyBDbGllbnQgewogICAgIHB1YmxpYzoKQEAgLTU0Myw4ICs1NTEsOCBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgYWxsb2NhdGVJT1N1
cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSk7Ci0gICAgdm9pZCB1cGRhdGVGcmFtZWJ1ZmZlclRl
eHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKTsKKyAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVm
ZmVyQmFja2luZygpOworICAgIGJvb2wgYmluZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5p
cXVlX3B0cjxJT1N1cmZhY2U+IGJhY2tpbmcsIHZvaWQqIHBidWZmZXIpOwogI2lmIFBMQVRGT1JN
KE1BQykKICAgICB2b2lkIHVwZGF0ZUNHTENvbnRleHQoKTsKICNlbmRpZgpAQCAtNjgxLDExICs2
ODksMTQgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJ
bnRTaXplJik7CisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZUltcGwoKTsKICAgICB2b2lkIHJlc29s
dmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0KCkpOwog
ICAgIHZvaWQgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0NHTHVpbnQgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBib29sIGFsbG93T2ZmbGluZVJlbmRlcmVycygpIGNvbnN0Owor
ICAgIC8vIFdlYkdMTGF5ZXJDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgZGlkRGlzcGxheSgp
IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICBpbnQgbV9jdXJyZW50V2lkdGggeyAwIH07CkBAIC04
OTAsNiArOTAxLDEyIEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIC8vIEJhY2tpbmcgc3RvcmUgZm9yIHRoZSB0aGUgYnVmZmVyIHdoaWNoIGlzIGV2ZW50dWFs
bHkgdXNlZCBmb3IgZGlzcGxheS4KKyAgICAvLyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9
PSBmYWxzZSwgdGhpcyBpcyB0aGUgZHJhd2luZyBidWZmZXIgYmFja2luZyBzdG9yZS4KKyAgICAv
LyBXaGVuIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9PSB0cnVlLCB0aGlzIGlzIGJsaXR0ZWQgdG8g
ZHVyaW5nIGRpc3BsYXkgcHJlcGFyZS4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBt
X2Rpc3BsYXlCdWZmZXJCYWNraW5nOworICAgIHZvaWQqIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIg
eyBudWxscHRyIH07CisKICAgICBib29sIG1faGFzU3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQ
VSB7IGZhbHNlIH07CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTEJhc2UuY3BwCmluZGV4IGI1OGJiMDJjZTdmOGFkM2NlOWJhZmExNjE1Zjc0ZjI2NzY1YWNh
ZWEuLjIwYmYyZjRmOTg0Y2M3ZjJiYjczYzZkYTU1OWYwODAwYTMzYTE0OWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCkBAIC0xNjQsNyArMTY0LDYgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKICAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9Ci0gICAgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVy
KCk7CiAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1fdGV4
dHVyZSwgMCk7CiAjZW5kaWYgLy8gIVVTRShPUEVOR0xfRVMpKQogI2Vsc2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZmZlYTMyYzJkMjRlZDhi
OWJiYTZkMDM2ZTAxOTM0N2M5ZTI2YWU4Ni4uODMwY2E2ZDY5NjNmMjkwMjc3ZDkxOGU1NDQyOGU1
NTc0ZmJmODJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKQEAgLTE3NSw3ICsxNzUsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJU
eXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GdWxsc2NyZWVuTWFuYWdlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxBdHRhY2htZW50RWxlbWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MSW1hZ2VFbGVtZW50Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGYxNDI1YWUxYmUyYTI3MGZkZmZjNjE3ZjFmMzdi
ZTI5Yjg4NWE2MGMuLmExNzI5ZjVjNjIwNWQxNmQ3ZmE5OThhNjUzNmE4NGM4ZmE0ODA0NTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCkBAIC03MSw3ICs3MSw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5o
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411198</attachid>
            <date>2020-10-12 22:43:34 -0700</date>
            <delta_ts>2020-10-13 00:17:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217212-20201013084332.patch</filename>
            <type>text/plain</type>
            <size>41892</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVhNTMxNTM4MDYwZTg0
MzczNjdlZDc3NmFkNzJmOTM4NjU0YTZhZC4uOTJlYzE4Y2I3YTI0NDBlYWVhNTY2N2Q0ZWU1Nzk3
OGU3NjMxOTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDIwLTEwLTEyICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29jb2E6IE1ha2Ug
V2ViR0xMYXllciBub3QgZGVwZW5kZW50IG9uICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MjEyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS82OTg3NjAyMj4KKworICAgICAgICBSZXZpZXdlZCBieSBEZWFu
IEphY2tzb24uCisKKyAgICAgICAgV2ViR0xMYXllciB3YXMgbmVlZGxlc3NseSB1c2luZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTC4KKyAgICAgICAgVGhpcyBpcyBwcm9ibGVtYXRpYyBiZWNhdXNl
IFdlYkdMTGF5ZXIgc2hvdWxkIHdvcmsgd2l0aAorICAgICAgICB1cGNvbWluZyByZW1vdGUgR3Jh
cGhpY3NDb250ZXh0R0wgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGhlIHByZXBhcmUgY2Fs
bGdyYXBoIHdhczoKKyAgICAgICAgICAgIEdDR0xPcGVuR0wgLT4gV2ViR0xMYXllciAtPiBHQ0dM
T3BlbkdMCisgICAgICAgIFJlZmFjdG9yIGl0IHRvIGJlOgorICAgICAgICAgICAgR0NHTE9wZW5H
TCAtPiBXZWJHTExheWVyCisKKyAgICAgICAgTW92ZSB0aGUgYmFjayBidWZmZXIgb3duZXJzaGlw
IHRvIHRoZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KKyAgICAgICAgTWFrZSB0aGUgZnJvbnQg
YnVmZmVyIG93bmVyc2hpcCBleHBsaWNpdCBpbiBXZWJHTExheWVyLgorICAgICAgICBNb3ZlIHRo
ZSBFR0wgYmluZGluZ3Mgb3duZXJzaGlwcyBvZiBhbGwgYnVmZmVycyB0bworICAgICAgICBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTC4KKworICAgICAgICBNYWtlIHRoZSBXZWJHTExheWVyIG5vdCB1
c2UgRUdMIG9yIE9wZW5HTCwgaXQgZG9lcyBub3QKKyAgICAgICAgbmVlZCBhbmQgY2Fubm90IHVz
ZSBpdCBhcyBub3QgYWxsIG9mIGl0cyBjbGllbnRzIHVzZSBPcGVuR0wKKyAgICAgICAgKGkuZS4g
dGhlIGFib3ZlIG1lbnRpb25lZCByZW1vdGUgdXNlLWNhc2UpLgorCisgICAgICAgIEltcHJvdmVz
IHRoZSBtZW1vcnkgdXNhZ2UgYnkgbm90IGFsbG9jYXRpbmcgZnJvbnQgYnVmZmVycworICAgICAg
ICB1bmxlc3MgbmVlZGVkLiBJbiBjYXNlIHRoZSBjYW52YXMgZG9lcyBub3QgcHJlc2VudCwgd2ls
bAorICAgICAgICBub3QgYWxsb2NhdGUgZnJvbnQgYnVmZmVycyBhdCBhbGwuCisKKyAgICAgICAg
SW1wcm92ZXMgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIGFsbG9jYXRpb25zIGFuZCBFR0wgYmluZGlu
Z3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhIHJlZmFjdG9yLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0
aWVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUmVzdG9yZVRleHR1cmVCaW5k
aW5nOjpTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nv
cGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nOjp+U2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNr
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRGlz
cGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnByZXBhcmVGb3JEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaWREaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
R0xMYXllci5tbToKKyAgICAgICAgKC1bV2ViR0xMYXllciBpbml0V2l0aENsaWVudDpkZXZpY2VQ
aXhlbFJhdGlvOl0pOgorICAgICAgICAoLVtXZWJHTExheWVyIGNvcHlJbWFnZVNuYXBzaG90V2l0
aENvbG9yU3BhY2U6XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgcmVjeWNsZUJ1ZmZlcl0pOgor
ICAgICAgICAoLVtXZWJHTExheWVyIHByZXBhcmVGb3JEaXNwbGF5V2l0aENvbnRlbnRzOl0pOgor
ICAgICAgICAoLVtXZWJHTExheWVyIGRpc3BsYXldKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBk
ZXRhY2hDbGllbnRdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExh
eWVyQ2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1dlYkdMTGF5ZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDbGllbnQ6
On5XZWJHTExheWVyQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyk6CisKIDIwMjAtMTAtMTIgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQyBEaXNw
bGF5XSBJbnRyb2R1Y2UgQm94TW9kZWxCb3gsIGFuZCBjbGFyaWZ5IHNvbWUgbmFtaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDMxZWU2ODEyMDU4MmRmNWE5ODJlNDFiYTE0ZTBjNDJiMzk4M2Q0NmUuLmY5NWI3NTky
ODkxMDNiOWUwNjVlYWE5NjZjNDM0ZWJhODFmMzVhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMjAtMTAtMTIgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDb2NvYTogTWFrZSBXZWJHTExheWVyIG5vdCBkZXBlbmRlbnQgb24gIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTcyMTIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5ODc2MDIyPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKworICAgICAgICBSZW1vdmVkIHVubmVlZGVk
IGluY2x1c2lvbnMgb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaC4gVGhlCisgICAgICAgIGZp
bGUgaXMgbm93IHVzaW5nIG5vbi1wdWJsaWMgaGVhZGVycy4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW06CisKIDIwMjAtMTAtMTIgIEx1bWluZyBZaW4gIDxsdW1pbmdfeWluQGFw
cGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIFdvcmthcm91bmQgZm9yIE1BQ19PU19YX1ZFUlNJ
T05fTUFKT1IgaW5jb3JyZWN0bHkgaW5jbHVkaW5nIG1pbm9yIHZlcnNpb24gd2hlbiBidWlsZGlu
ZyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBmZmVkODM2MGI1NmQxMTI3NDlhZmQwYWY1ODY5YzZkOGVjMjhmNWQzLi45NjcyYzA2
MzAxZTBhZDYwN2E4MTU3NDdkMjQ0YzkxOTZlYjc2YzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjE1LDYgKzIyMTUsOCBA
QAogCQk3QUY5QjIwNjE4Q0ZCMkRGMDBDNjRCRUYgLyogVlRUUmVnaW9uTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMDAxOENGQjJERjAw
QzY0QkVGIC8qIFZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJN0FGOUIyMEQxOENGQjVGNDAwQzY0
QkVGIC8qIEpTVlRUUmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCAqLzsg
fTsKIAkJN0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEIxOENGQjVG
MzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovOyB9OworCQk3QkIzNEExNTI1MzQ1Nzkx
MDAwMjlEMDggLyogV2ViR0xMYXllckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCMzRBMTMyNTM0NTc5MTAwMDI5RDA4IC8qIFdlYkdMTGF5
ZXJDbGllbnQuaCAqLzsgfTsKKwkJN0JCMzRBMTcyNTM0NUNCMjAwMDI5RDA4IC8qIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFVXRpbGl0aWVzLmggKi87IH07CiAJCTdCRTc0MjczODFGQTkwNkZCQjRGMEYyQyAv
KiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTUwQzRDMDJCRUQ4OTM2RjgxOEUyRjk5IC8qIEpTU1ZHR3JhcGhpY3NF
bGVtZW50LmggKi87IH07CiAJCTdDMDI5QzZFMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAyOUM2
RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTg0M0ZFMUM4QjcyODMwMDJFQjk3MyAvKiBB
dXRvZmlsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MxODQzRkMxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwMDYyLDYgKzEwMDY0LDggQEAKIAkJ
N0FGOUIyMDkxOENGQjVGMjAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdBRjlCMjBBMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8q
IEpTVlRUUmVnaW9uTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZU
VFJlZ2lvbkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JCMzRBMTMyNTM0
NTc5MTAwMDI5RDA4IC8qIFdlYkdMTGF5ZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViR0xMYXllckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QkIzNEExNjI1MzQ1Q0IyMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0
aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDEx
RjNEMjRGQUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5ncy5jcHAuZXJiICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdzLmNw
cC5lcmI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDExRjNFMjRGQUQzNjAwMDVC
RUYxMCAvKiBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcC5lcmIgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSW50ZXJuYWxT
ZXR0aW5nc0dlbmVyYXRlZC5jcHAuZXJiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzAxMUYzRjI0RkFEMzYwMDA1QkVGMTAgLyogSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5pZGwu
ZXJiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuaWRsLmVyYjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIxODczLDYgKzIxODc3LDcgQEAKIAkJCQk2RTI3RjI0MzIyOUM5
Rjg0MDBGMUY2MzIgLyogRXh0ZW5zaW9uc0dMQU5HTEUuY3BwICovLAogCQkJCTZFMjdGMjQ0MjI5
QzlGOEQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5oICovLAogCQkJCTZFMjdGMjQyMjI5
OENFNEIwMEYxRjYzMiAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCAqLywKKwkJCQk3QkIz
NEExNjI1MzQ1Q0IyMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5o
ICovLAogCQkJCTZFMjkwODYxMjI5REI5NTAwMDA5ODZFMiAvKiBUZW1wb3JhcnlBTkdMRVNldHRp
bmcuY3BwICovLAogCQkJCTZFMjkwODYzMjI5REI5NzAwMDA5ODZFMiAvKiBUZW1wb3JhcnlBTkdM
RVNldHRpbmcuaCAqLywKIAkJCSk7CkBAIC0yNjQyMyw2ICsyNjQyOCw3IEBACiAJCQkJQ0Q1RDI3
NzUxRTgzMThFMDAwRDgwQTNEIC8qIFdlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5tbSAqLywK
IAkJCQk0OUZGQkYzRDExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5oICovLAogCQkJCTQ5
RkZCRjNFMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tICovLAorCQkJCTdCQjM0QTEz
MjUzNDU3OTEwMDAyOUQwOCAvKiBXZWJHTExheWVyQ2xpZW50LmggKi8sCiAJCQkJMzE4NDM2REIy
MUI5REFBMDAwRUQzODNFIC8qIFdlYkdQVUxheWVyLmggKi8sCiAJCQkJMzE4NDM2REQyMUI5REFB
MDAwRUQzODNFIC8qIFdlYkdQVUxheWVyLm1tICovLAogCQkJKTsKQEAgLTMxNjA2LDYgKzMxNjEy
LDcgQEAKIAkJCQlCMkEwMTVBOTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzQ5MDdFNDEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3ND
b250ZXh0Q0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxM0RFODcwMjNBOTY5NzMwMDhGQzQ3QiAv
KiBHcmFwaGljc0NvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JCMzRBMTcyNTM0NUNC
MjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdDMzMwQTAyMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAv
KiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5QTcyODgy
M0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNDYwNSw2ICszNDYxMiw3IEBACiAJCQkJNkVCRjBFNTUxMkE4OTI5ODAw
REIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlDRjEw
NDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlGRkJGM0YxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCQjM0QTE1MjUzNDU3OTEwMDAyOUQwOCAvKiBXZWJHTExheWVyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5M0YxRDVCQjEyRDUzMkM0MDA4MzJCRUMgLyogV2ViR0xMb3NlQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RDUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdM
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlENzEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdM
RS5jcHAKaW5kZXggNTU1NTZkNDYwMTdjYzExMjMzMTlhYzI5MTkwYjBkYmUzMzI0NGFjNS4uZDQ3
MWM0MjJjYzQ3MjhiZmVjZjMwZTkxZjY5MjdmMTRlMTcyNmRjNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHAKQEAgLTIwOSwxMiArMjA5LDExIEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgQVNTRVJU
KG1fdGV4dHVyZSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIWFsbG9jYXRlSU9T
dXJmYWNlQmFja2luZ1N0b3JlKHNpemUpKSB7CisgICAgaWYgKCFyZXNoYXBlRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoKSkgewogICAgICAgICBSRUxFQVNFX0xPRyhXZWJHTCwgIkZhdGFsOiBVbmFibGUg
dG8gYWxsb2NhdGUgYmFja2luZyBzdG9yZSBvZiBzaXplICVkIHggJWQiLCB3aWR0aCwgaGVpZ2h0
KTsKICAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0gICAgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCk7
CiAgICAgaWYgKG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSkgewogICAgICAgICAvLyBU
aGUgY29udGV4dCByZXF1aXJlcyB0aGUgdXNlIG9mIGFuIGludGVybWVkaWF0ZSB0ZXh0dXJlIGlu
IG9yZGVyIHRvIGltcGxlbWVudAogICAgICAgICAvLyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6dHJ1
ZSB3aXRob3V0IGFudGlhbGlhc2luZy4KQEAgLTUyMCw2ICs1MTksMTIgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBwcmVwYXJlVGV4dHVyZUltcGwoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmVJbXBsKCkKK3sKKyAg
ICBBU1NFUlQoIW1fbGF5ZXJDb21wb3NpdGVkKTsKIAogICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cygpLmFudGlhbGlhcykKICAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgp
OwpAQCAtNTU1LDcgKzU2MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBh
cmVUZXh0dXJlKCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CiAgICAgfQotICAgIGds
OjpGbHVzaCgpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEVVdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTk5Y2Q4YWVmZjc3MzcyOWQ0YTg2OGIzYmIzMTg3
ODFjM2ZmMTNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oCkBAIC0wLDAgKzEs
NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoQU5HTEUp
CisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworI2RlZmluZSBFR0xfRUdMX1BST1RPVFlQRVMgMAorLy8gU2tpcCB0aGUgaW5jbHVz
aW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KKyNk
ZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNp
dF9jb250ZXh0X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNpbXBvcnQgPEFO
R0xFL2VnbC5oPiAgLy8gTk9MSU5UCisjaW1wb3J0IDxBTkdMRS9lZ2xleHQuaD4KKyNpbXBvcnQg
PEFOR0xFL2VnbGV4dF9hbmdsZS5oPgorI2ltcG9ydCA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbC5o
PgorI2ltcG9ydCA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbF9leHQuaD4KKyNpbXBvcnQgPEFOR0xF
L2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+CisjaW1wb3J0IDxBTkdMRS9lbnRyeV9w
b2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorI2ltcG9ydCA8QU5HTEUvZ2wyZXh0Lmg+CisjaW1w
b3J0IDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyk7CitwdWJsaWM6CisgICAgU2NvcGVkUmVzdG9y
ZVRleHR1cmVCaW5kaW5nKEdDR0xlbnVtIGJpbmRpbmdQb2ludFF1ZXJ5LCBHQ0dMZW51bSBiaW5k
aW5nUG9pbnQsIGJvb2wgY29uZGl0aW9uID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChi
aW5kaW5nUG9pbnQgIT0gc3RhdGljX2Nhc3Q8R0NHTGVudW0+KDB1KSk7CisgICAgICAgIGlmIChj
b25kaXRpb24pIHsKKyAgICAgICAgICAgIG1fYmluZGluZ1BvaW50ID0gYmluZGluZ1BvaW50Owor
ICAgICAgICAgICAgZ2w6OkdldEludGVnZXJ2KGJpbmRpbmdQb2ludFF1ZXJ5LCByZWludGVycHJl
dF9jYXN0PEdMaW50Kj4oJm1fYmluZGluZ1ZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB+U2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChtX2Jp
bmRpbmdQb2ludCkKKyAgICAgICAgICAgIGdsOjpCaW5kVGV4dHVyZShtX2JpbmRpbmdQb2ludCwg
bV9iaW5kaW5nVmFsdWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHTGVudW0gbV9iaW5kaW5n
UG9pbnQgeyAwIH07CisgICAgR0x1aW50IG1fYmluZGluZ1ZhbHVlIHsgMHUgfTsKK307CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQppbmRl
eCA5NWVkMDk2Yzc3NzRiMGI1Zjg3Y2M0MmMwYmVmMGUwNGQ4MDdmMzM3Li5mZmU3MDdkNWQ4ODVl
MWI2NDE1NzI4OWZiODkxY2RhMjFlMzYyNDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29jb2EubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmgiCiAKICNpbXBvcnQgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjaW1wb3J0
ICJHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXIuaCIKICNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKICNpbXBvcnQg
IkxvZ2dpbmcuaCIKQEAgLTQwLDIxICs0MSw2IEBACiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhj
ZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jZGVmaW5lIEVHTF9F
R0xfUFJPVE9UWVBFUyAwCi0vLyBTa2lwIHRoZSBpbmNsdXNpb24gb2YgQU5HTEUncyBleHBsaWNp
dCBjb250ZXh0IGVudHJ5IHBvaW50cyBmb3Igbm93LgotI2RlZmluZSBHTF9BTkdMRV9leHBsaWNp
dF9jb250ZXh0Ci0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHRfZ2xlczEKLXR5cGVk
ZWYgdm9pZCogR0xlZ2xDb250ZXh0OwotI2ltcG9ydCA8QU5HTEUvZWdsLmg+Ci0jaW1wb3J0IDxB
TkdMRS9lZ2xleHQuaD4KLSNpbXBvcnQgPEFOR0xFL2VnbGV4dF9hbmdsZS5oPgotI2ltcG9ydCA8
QU5HTEUvZW50cnlfcG9pbnRzX2VnbC5oPgotI2ltcG9ydCA8QU5HTEUvZW50cnlfcG9pbnRzX2Vn
bF9leHQuaD4KLSNpbXBvcnQgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+
Ci0jaW1wb3J0IDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgotI2ltcG9y
dCA8QU5HTEUvZ2wyZXh0Lmg+Ci0jaW1wb3J0IDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KLQogI2lm
IFBMQVRGT1JNKE1BQykKICNpbXBvcnQgIlNjcmVlblByb3BlcnRpZXMuaCIKICNpbXBvcnQgPE9w
ZW5HTC9DR0xSZW5kZXJlcnMuaD4KQEAgLTM0OCwxMSArMzM0LDEwIEBAIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgYXR0CiAKICAgICAvLyBDcmVhdGUgdGhlIFdlYkdMTGF5ZXIKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgbV93ZWJHTExheWVyID0gYWRvcHROUyhbW1dlYkdM
TGF5ZXIgYWxsb2NdIGluaXRXaXRoR3JhcGhpY3NDb250ZXh0R0w6dGhpc10pOworICAgICAgICBt
X3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhDbGllbnQ6
dGhpcyBkZXZpY2VQaXhlbFJhdGlvOmF0dHJzLmRldmljZVBpeGVsUmF0aW9dKTsKICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0TmFtZTpAIldlYkdMIExheWVyIl07CiAj
ZW5kaWYKLSAgICAgICAgW21fd2ViR0xMYXllciBzZXRFR0xEaXNwbGF5Om1fZGlzcGxheU9iaiBj
b25maWc6bV9jb25maWdPYmpdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAogICAg
IC8vIENyZWF0ZSB0aGUgdGV4dHVyZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGZyYW1lYnVm
ZmVyLgpAQCAtNDI0LDEwICs0MDksMTkgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgICAgIGlmIChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZl
ckZCTykKICAgICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVE
cmF3aW5nQnVmZmVyRkJPKTsKIAotICAgICAgICBbbV93ZWJHTExheWVyIHJlbGVhc2VHTFJlc291
cmNlc107CisgICAgICAgIGlmIChtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyKSB7CisgICAgICAgICAg
ICBFR0xfUmVsZWFzZVRleEltYWdlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZl
ciwgRUdMX0JBQ0tfQlVGRkVSKTsKKyAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rp
c3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpOworICAgICAgICB9CisgICAgICAgIGF1
dG8gcmVjeWNsZWRCdWZmZXIgPSBbbV93ZWJHTExheWVyIHJlY3ljbGVCdWZmZXJdOworICAgICAg
ICBpZiAocmVjeWNsZWRCdWZmZXIuaGFuZGxlKQorICAgICAgICAgICAgRUdMX0Rlc3Ryb3lTdXJm
YWNlKG1fZGlzcGxheU9iaiwgcmVjeWNsZWRCdWZmZXIuaGFuZGxlKTsKKyAgICAgICAgYXV0byBj
b250ZW50c0hhbmRsZSA9IFttX3dlYkdMTGF5ZXIgZGV0YWNoQ2xpZW50XTsKKyAgICAgICAgaWYg
KGNvbnRlbnRzSGFuZGxlKQorICAgICAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxh
eU9iaiwgY29udGVudHNIYW5kbGUpOworCiAgICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3Bs
YXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwog
ICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOwot
ICAgICAgICBbbV93ZWJHTExheWVyIHNldENvbnRleHQ6bnVsbHB0cl07CiAgICAgfQogCiAgICAg
TE9HKFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0
aGlzKTsKQEAgLTQ3Niw2ICs0NzAsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKICAgICBpZiAoIW1fY29udGV4dE9iaikKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIElmIHRoZXJlIGlzIG5vIGRyYXdpbmcgYnVmZmVyLCB3ZSBm
YWlsZWQgdG8gYWxsb2NhdGUgb25lIGR1cmluZyBwcmVwYXJpbmcgZm9yIGRpc3BsYXkuCisgICAg
Ly8gVGhlIGV4Y2VwdGlvbiBpcyB0aGUgY2FzZSB3aGVuIHRoZSBjb250ZXh0IGlzIHVzZWQgYmVm
b3JlIHJlc2hhcGluZy4KKyAgICBpZiAoIW1fZGlzcGxheUJ1ZmZlckJhY2tpbmcgJiYgIWdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgLy8gQU5HTEUgaGFzIGFuIGVhcmx5IG91dCBmb3IgY2FzZSB3aGVyZSBub3RoaW5nIGNo
YW5nZXMuIENhbGxpbmcgTWFrZUN1cnJlbnQKICAgICAvLyBpcyBpbXBvcnRhbnQgdG8gc2V0IHZv
bGF0aWxlIHBsYXRmb3JtIGNvbnRleHQuIFNlZSBJbml0aWFsaXplRUdMRGlzcGxheSgpLgogICAg
IGlmICghRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9O
T19TVVJGQUNFLCBtX2NvbnRleHRPYmopKQpAQCAtNTcxLDE2ICs1NjksNjAgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4dCgpCiB9CiAjZW5kaWYKIAotYm9v
bCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUo
SW50U2l6ZSBzaXplKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZURpc3Bs
YXlCdWZmZXJCYWNraW5nKCkKIHsKLSAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUgYXQgJWQgeCAlZC4gKCVwKSIsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdGhpcyk7Ci0gICAgcmV0dXJuIFttX3dlYkdMTGF5
ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTpzaXplIHVzaW5nQWxwaGE6
Y29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYV07CisgICAgQVNTRVJUKCFnZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSgpLmlzRW1wdHkoKSk7CisgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgYmFja2J1
ZmZlciBub3cgYmVmb3JlIGFsbG9jYXRpbmcgYSBuZXcgb25lIGluIG9yZGVyIHRvIHNsaWdodGx5
IHJlZHVjZSBtZW1vcnkgcHJlc3N1cmUuCisgICAgaWYgKG1fZGlzcGxheUJ1ZmZlckJhY2tpbmcp
IHsKKyAgICAgICAgbV9kaXNwbGF5QnVmZmVyQmFja2luZy5yZXNldCgpOworICAgICAgICBFR0xf
UmVsZWFzZVRleEltYWdlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciwgRUdM
X0JBQ0tfQlVGRkVSKTsKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwg
bV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcik7CisgICAgICAgIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIg
PSBFR0xfTk9fU1VSRkFDRTsKKyAgICB9CisgICAgLy8gUmVzZXQgdGhlIGZ1dHVyZSByZWN5Y2xl
ZCBidWZmZXIgbm93LCBiZWNhdXNlIGl0IG1vc3QgbGlrZWx5IHdpbGwgbm90IGJlIHJldXNhYmxl
IGF0IHRoZSB0aW1lIGl0IHdpbGwgYmUgcmV1c2VkLgorICAgIGF1dG8gcmVjeWNsZWRCdWZmZXIg
PSBbbV93ZWJHTExheWVyIHJlY3ljbGVCdWZmZXJdOworICAgIGlmIChyZWN5Y2xlZEJ1ZmZlci5o
YW5kbGUpCisgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVk
QnVmZmVyLmhhbmRsZSk7CisgICAgcmVjeWNsZWRCdWZmZXIuc3VyZmFjZS5yZXNldCgpOworCisg
ICAgYXV0byBiYWNraW5nID0gV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGUoZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKSwgV2ViQ29yZTo6c1JHQkNvbG9yU3BhY2VSZWYoKSk7CisgICAgaWYg
KCFiYWNraW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBiYWNraW5nLT5taWdyYXRl
Q29sb3JTcGFjZVRvUHJvcGVydGllcygpOworCisgICAgY29uc3QgYm9vbCB1c2luZ0FscGhhID0g
Y29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYTsKKyAgICBjb25zdCBhdXRvIHNpemUgPSBnZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpOworICAgIGNvbnN0IEVHTGludCBzdXJmYWNlQXR0cmlidXRl
c1tdID0geworICAgICAgICBFR0xfV0lEVEgsIHNpemUud2lkdGgoKSwKKyAgICAgICAgRUdMX0hF
SUdIVCwgc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgRUdMX0lPU1VSRkFDRV9QTEFORV9BTkdMRSwg
MCwKKyAgICAgICAgRUdMX1RFWFRVUkVfVEFSR0VULCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6RUdMSU9TdXJmYWNlVGV4dHVyZVRhcmdldCgpLAorICAgICAgICBFR0xfVEVYVFVS
RV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUsIHVzaW5nQWxwaGEgPyBHTF9CR1JBX0VYVCA6IEdMX1JH
QiwKKyAgICAgICAgRUdMX1RFWFRVUkVfRk9STUFULCBFR0xfVEVYVFVSRV9SR0JBLAorICAgICAg
ICBFR0xfVEVYVFVSRV9UWVBFX0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLAorICAgICAgICAvLyBP
bmx5IGhhcyBhbiBlZmZlY3Qgb24gdGhlIGlPUyBTaW11bGF0b3IuCisgICAgICAgIEVHTF9JT1NV
UkZBQ0VfVVNBR0VfSElOVF9BTkdMRSwgRUdMX0lPU1VSRkFDRV9XUklURV9ISU5UX0FOR0xFLAor
ICAgICAgICBFR0xfTk9ORSwgRUdMX05PTkUKKyAgICB9OworICAgIEVHTFN1cmZhY2UgcGJ1ZmZl
ciA9IEVHTF9DcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihtX2Rpc3BsYXlPYmosIEVHTF9J
T1NVUkZBQ0VfQU5HTEUsIGJhY2tpbmctPnN1cmZhY2UoKSwgbV9jb25maWdPYmosIHN1cmZhY2VB
dHRyaWJ1dGVzKTsKKyAgICBpZiAoIXBidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gYmluZERpc3BsYXlCdWZmZXJCYWNraW5nKFdURk1vdmUoYmFja2luZyksIHBidWZm
ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZl
clRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
IGJhY2tpbmcsIHZvaWQqIHBidWZmZXIpCiB7Ci0gICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXll
cigpLiAoJXApIiwgdGhpcyk7Ci0gICAgW21fd2ViR0xMYXllciBiaW5kRnJhbWVidWZmZXJUb05l
eHRBdmFpbGFibGVTdXJmYWNlXTsKKyAgICBHQ0dMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gSU9TdXJm
YWNlVGV4dHVyZVRhcmdldCgpOworICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyByZXN0
b3JlQmluZGluZyhJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0UXVlcnkoKSwgdGV4dHVyZVRhcmdldCwg
dGV4dHVyZVRhcmdldCAhPSBURVhUVVJFX1JFQ1RBTkdMRV9BUkIpOworICAgIGdsOjpCaW5kVGV4
dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGlmICghRUdMX0JpbmRUZXhJbWFn
ZShtX2Rpc3BsYXlPYmosIHBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKKyAgICAgICAgRUdM
X0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgcGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciA9IHBidWZmZXI7CisgICAg
bV9kaXNwbGF5QnVmZmVyQmFja2luZyA9IFdURk1vdmUoYmFja2luZyk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdApAQCAtNjM3LDcgKzY3OSwzNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlRm9yRGlzcGxheSgpCiB7Ci0gICAgW21fd2Vi
R0xMYXllciBwcmVwYXJlRm9yRGlzcGxheV07CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHByZXBhcmVUZXh0dXJlSW1wbCgpOworCisgICAgLy8gVGhlIElPU3VyZmFj
ZSB3aWxsIGJlIHVzZWQgZnJvbSBvdGhlciBncmFwaGljcyBzdWJzeXN0ZW0sIHNvIGZsdXNoIEdM
IGNvbW1hbmRzLgorICAgIGdsOjpGbHVzaCgpOworCisgICAgYXV0byByZWN5Y2xlZEJ1ZmZlciA9
IFttX3dlYkdMTGF5ZXIgcmVjeWNsZUJ1ZmZlcl07CisKKyAgICBFR0xfUmVsZWFzZVRleEltYWdl
KG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKTsK
KyAgICBbbV93ZWJHTExheWVyIHByZXBhcmVGb3JEaXNwbGF5V2l0aENvbnRlbnRzOiB7V1RGTW92
ZShtX2Rpc3BsYXlCdWZmZXJCYWNraW5nKSwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcn1dOworICAg
IG1fZGlzcGxheUJ1ZmZlclBidWZmZXIgPSBFR0xfTk9fU1VSRkFDRTsKKworICAgIGlmIChyZWN5
Y2xlZEJ1ZmZlci5zdXJmYWNlICYmIHJlY3ljbGVkQnVmZmVyLnN1cmZhY2UtPnNpemUoKSA9PSBn
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpKSB7CisgICAgICAgIGlmIChiaW5kRGlzcGxheUJ1
ZmZlckJhY2tpbmcoV1RGTW92ZShyZWN5Y2xlZEJ1ZmZlci5zdXJmYWNlKSwgcmVjeWNsZWRCdWZm
ZXIuaGFuZGxlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVjeWNsZWRCdWZm
ZXIuc3VyZmFjZS5yZXNldCgpOworICAgIGlmIChyZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpCisgICAg
ICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVkQnVmZmVyLmhhbmRs
ZSk7CisgICAgLy8gRXJyb3Igd2lsbCBiZSBoYW5kbGVkIGJ5IG5leHQgY2FsbCB0byBtYWtlQ29u
dGV4dEN1cnJlbnQoKSB3aGljaCB3aWxsIG5vdGljZSBsYWNrIG9mIGRpc3BsYXkgYnVmZmVyLgor
ICAgIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaWREaXNwbGF5KCkKK3sKKyAgICBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1dlYkdMTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkdMTGF5ZXIuaAppbmRleCA0ZDlmMzdhNjk0OWFhOTM3NjM2YTZmY2E3N2M5ODIyNzQ1MDZl
NDBjLi5kMmU0ZmNlYmJlNjU3NTliOTNmZTY5MmFkNGMwZmEyZTFiMTYzMDBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oCkBA
IC0yMCwzNSArMjAsNTcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2ltcG9ydCAiSU9TdXJm
YWNlLmgiCi0jaW1wb3J0ICJJbnRTaXplLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNv
cmUuaD4KICNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBHcmFwaGljc0xheWVyOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CitjbGFz
cyBXZWJHTExheWVyQ2xpZW50Oworc3RydWN0IFdlYkdMTGF5ZXJCdWZmZXIgeworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IHN1cmZhY2U7IC8vIFRoZSBhY3R1YWwgY29u
dGVudHMuCisgICAgdm9pZCogaGFuZGxlIHsgbnVsbHB0ciB9OyAvLyBDbGllbnQgc3BlY2lmaWMg
bWV0YWRhdGEgaGFuZGxlIChzdWNoIGFzIEVHTFN1cmZhY2UpLgorfTsKIH0KIAogQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KIAorLy8gQSBsYXllciBjbGFzcyBpbXBsZW1lbnRp
bmcgZnJvbnQgYnVmZmVyIG1hbmFnZW1lbnQgb2YgYSAzLWJ1ZmZlcmluZyBzd2FwCisvLyBjaGFp
biBvZiBJT1N1cmZhY2VzLgorLy8gVGhlIGxheWVyIHdpbGwgb3duIHRoZSBJT1N1cmZhY2VzIGl0
IHVzZXMgZm9yIGRpc3BsYXkuCisvLyBUaGUgY2xpZW50IG1heSBhdHRhY2ggbWV0YWRhdGEgdG8g
ZWFjaCBJT1N1cmZhY2UgYW5kIHdpbGwgcmVjZWl2ZSB0aGUgbWV0YWRhdGEKKy8vIGJhY2sgb25j
ZSB0aGUgSU9TdXJmYWNlIGhhcyBiZWVuIGRpc3BsYXllZC4gSG93ZXZlciwgdGhlIGNsaWVudCBt
YXkgbm90IG5lY2Nlc3NhcmlseQorLy8gYmUgYWJsZSB0byBvYnRhaW4gdGhlIElPU3VyZmFjZSBp
dHNlbGYgZm9yIHJldXNlLgorLy8gRXhhbXBsZSB1c2Ugb2YgdGhlIG1ldGFkYXRhIGlzIHRvIHVz
ZSBFR0xTdXJmYWNlIGJpbmRpbmcgYXMgdGhlIG1ldGFkYXRhLiBUaGlzIHdheQorLy8gd2hlbiB0
aGUgV2ViR0xMYXllciBpcyBkb25lIHdpdGggdGhlIElPU3VyZmFjZSBkaXNwbGF5LCB0aGUgY2xp
ZW50IGNhbiBjb250aW51ZSB1c2luZworLy8gdGhlIGV4aXN0aW5nIGJpbmRpbmcgb2J0YWluZWQg
dGhyb3VnaCB0aGUgYnVmZmVyIHJlY3ljbGUgbG9naWMuCiBAaW50ZXJmYWNlIFdlYkdMTGF5ZXIg
OiBDQUxheWVyCiAKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBOYWtlZFB0cjxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTD4gY29udGV4dDsKLQotLSAoaWQpaW5pdFdpdGhHcmFwaGljc0Nv
bnRleHRHTDooTmFrZWRQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+KWNvbnRl
eHQ7CistIChpZClpbml0V2l0aENsaWVudDooTmFrZWRQdHI8V2ViQ29yZTo6V2ViR0xMYXllckNs
aWVudD4pY2xpZW50IGRldmljZVBpeGVsUmF0aW86KGZsb2F0KWRldmljZVBpeGVsUmF0aW87CiAK
IC0gKENHSW1hZ2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNw
YWNlUmVmKWNvbG9yU3BhY2U7CiAKLS0gKHZvaWQpcHJlcGFyZUZvckRpc3BsYXk7CisvLyBSZXR1
cm5zIHRoZSBtZXRhZGF0YSBoYW5kbGUgb2YgbGFzdCB1bnVzZWQgY29udGVudHMgYnVmZmVyLgor
Ly8gQ2xpZW50IG1heSByZWNpZXZlIGJhY2sgYWxzbyB0aGUgb3duZXJzaGlwIG9mIHRoZSBjb250
ZW50cyBzdXJmYWNlLCBpbiBjYXNlIGl0IGlzIGF2YWlsYWJsZSBhdCB0aGUKKy8vIHRpbWUgb2Yg
dGhlIGNhbGwuCisvLyBSZXR1cm5zIGVpdGhlcjoKKy8vIC0gRW1wdHkgYnVmZmVyIGlmIG5vIGJ1
ZmZlciBoYXMgYmVlbiBzdWJtaXR0ZWQuCisvLyAtIEJ1ZmZlciB3aXRoIGVtcHR5IHN1cmZhY2Ug
YW5kIG5vbi1lbXB0eSBtZXRhZGF0YSBoYW5kbGUgaWYgdGhlIHJlY3ljbGVkIGJ1ZmZlciB3YXMg
YXZhaWxhYmxlCisvLyAgIGJ1dCB0aGUgc3VyZmFjZSBpcyBzdGlsbCBpbiB1c2UuCisvLyAtIFN1
cmZhY2UgYW5kIGhhbmRsZS4KKy0gKFdlYkNvcmU6OldlYkdMTGF5ZXJCdWZmZXIpcmVjeWNsZUJ1
ZmZlcjsKKworLy8gUHJlcGFyZXMgdGhlIGxheWVyIGZvciBkaXNwbGF5IHdpdGggYSBjb250ZW50
cyBidWZmZXIuCisvLyBDbGllbnQgdHJhbnNmZXJzIHRoZSBvd25lcnNoaXAgb2YgdGhlIElPU3Vy
ZmFjZSBzdXJmYWNlIGluIHRoZSBgYnVmZmVyYC4KKy0gKHZvaWQpcHJlcGFyZUZvckRpc3BsYXlX
aXRoQ29udGVudHM6KFdlYkNvcmU6OldlYkdMTGF5ZXJCdWZmZXIpYnVmZmVyOwogCi0tIChib29s
KWFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNpemU6KFdlYkNvcmU6OkludFNpemUp
c2l6ZSB1c2luZ0FscGhhOihCT09MKXVzaW5nQWxwaGE7Ci0tICh2b2lkKWJpbmRGcmFtZWJ1ZmZl
clRvTmV4dEF2YWlsYWJsZVN1cmZhY2U7Ci0tICh2b2lkKXNldEVHTERpc3BsYXk6KHZvaWQqKWVn
bERpc3BsYXkgY29uZmlnOih2b2lkKillZ2xDb25maWc7Ci0tICh2b2lkKXJlbGVhc2VHTFJlc291
cmNlczsKKy8vIERldGFjaGVzIHRoZSBjbGllbnQgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgY29u
dGVudHMgYnVmZmVyIG1ldGFkYXRhIGhhbmRsZS4KKy8vIFRoZSBpZiBtdWx0aXBsZSBidWZmZXJz
IGhhdmUgYmVlbiBzdWJtaXR0ZWQsIHJlY3ljbGVCdWZmZXIgbXVzdCBoYXZlIGJlZW4gY2FsbGVk
IGJlZm9yZSBjYWxsaW5nCisvLyB0aGlzLgorLy8gVGhlIGNsaWVudCB3aWxsIG5vdCByZWNlaXZl
IGBXZWJHTExheWVyQ2xpZW50YCBub3RpZmljYXRpb25zIGFmdGVyIGNhbGxpbmcgdGhpcy4KKy0g
KHZvaWQqKWRldGFjaENsaWVudDsKIAogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQppbmRleCBjY2ZmOGYwNmRmNWM2
OWY4MTUwOTQxMTg0MDZiMjlhN2JkNDA3NGU0Li4wOWYwOWQ2OWFhMWIwODhhYzMxNGY2NWM2YTZj
ODUwNDQ4YmQ3MDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJHTExheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KQEAgLTI4LDc0ICsyOCwyNyBAQAogI2lmIEVOQUJMRShX
RUJHTCkKICNpbXBvcnQgIldlYkdMTGF5ZXIuaCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW1wb3J0ICJHcmFw
aGljc0xheWVyLmgiCiAjaW1wb3J0ICJHcmFwaGljc0xheWVyQ0EuaCIKLSNpbXBvcnQgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCiAjaW1wb3J0
ICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKyNpbXBvcnQgIldlYkdMTGF5ZXJDbGllbnQuaCIKICNpbXBv
cnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgotI2ltcG9ydCA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2RlZmluZSBFR0xfRUdMX1BST1RP
VFlQRVMgMAotI2ltcG9ydCA8QU5HTEUvZWdsLmg+Ci0jaW1wb3J0IDxBTkdMRS9lZ2xleHQuaD4K
LSNpbXBvcnQgPEFOR0xFL2VnbGV4dF9hbmdsZS5oPgotI2ltcG9ydCA8QU5HTEUvZW50cnlfcG9p
bnRzX2VnbC5oPgotI2ltcG9ydCA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4u
aD4KLS8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50
cnkgcG9pbnRzIGZvciBub3cuCi0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKLSNp
bXBvcnQgPEFOR0xFL2dsMmV4dC5oPgotI2ltcG9ydCA8QU5HTEUvZ2wyZXh0X2FuZ2xlLmg+Ci0K
LW5hbWVzcGFjZSB7Ci0gICAgY2xhc3MgU2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nIHsKLSAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nKTsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZyhHTGVudW0g
YmluZGluZ1BvaW50UXVlcnksIEdMZW51bSBiaW5kaW5nUG9pbnQpCi0gICAgICAgICAgICA6IG1f
YmluZGluZ1BvaW50KGJpbmRpbmdQb2ludCkKLSAgICAgICAgewotICAgICAgICAgICAgZ2w6Okdl
dEludGVnZXJ2KGJpbmRpbmdQb2ludFF1ZXJ5LCAmbV9iaW5kaW5nVmFsdWUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgflNjb3BlZFJlc3RvcmVUZXh0dXJlQmluZGluZygpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGdsOjpCaW5kVGV4dHVyZShtX2JpbmRpbmdQb2ludCwgbV9iaW5kaW5nVmFsdWUp
OwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBHTGludCBtX2JpbmRpbmdQb2lu
dCB7IDAgfTsKLSAgICAgICAgR0xpbnQgbV9iaW5kaW5nVmFsdWUgeyAwIH07Ci0gICAgfTsKLX0K
LQogQGltcGxlbWVudGF0aW9uIFdlYkdMTGF5ZXIgewotICAgIGZsb2F0IF9kZXZpY2VQaXhlbFJh
dGlvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9jb250ZW50c0J1
ZmZlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfZHJhd2luZ0J1
ZmZlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBfc3BhcmVCdWZm
ZXI7Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBfYnVmZmVyU2l6ZTsKLSAgICBCT09MIF91c2luZ0Fs
cGhhOwotICAgIHZvaWQqIF9lZ2xEaXNwbGF5OwotICAgIHZvaWQqIF9lZ2xDb25maWc7Ci0gICAg
dm9pZCogX2NvbnRlbnRzUGJ1ZmZlcjsKLSAgICB2b2lkKiBfZHJhd2luZ1BidWZmZXI7Ci0gICAg
dm9pZCogX3NwYXJlUGJ1ZmZlcjsKLSAgICB2b2lkKiBfbGF0Y2hlZFBidWZmZXI7CisgICAgTmFr
ZWRQdHI8V2ViQ29yZTo6V2ViR0xMYXllckNsaWVudD4gX2NsaWVudDsKKyAgICBXZWJDb3JlOjpX
ZWJHTExheWVyQnVmZmVyIF9jb250ZW50c0J1ZmZlcjsKKyAgICBXZWJDb3JlOjpXZWJHTExheWVy
QnVmZmVyIF9zcGFyZUJ1ZmZlcjsKKwogICAgIEJPT0wgX3ByZXBhcmVkRm9yRGlzcGxheTsKIH0K
IAotLSAoaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHRHTDooTmFrZWRQdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w+KWNvbnRleHQKKy0gKGlkKWluaXRXaXRoQ2xpZW50OihOYWtl
ZFB0cjxXZWJDb3JlOjpXZWJHTExheWVyQ2xpZW50PiljbGllbnQgZGV2aWNlUGl4ZWxSYXRpbzoo
ZmxvYXQpZGV2aWNlUGl4ZWxSYXRpbwogewotICAgIF9jb250ZXh0ID0gY29udGV4dDsKKyAgICBf
Y2xpZW50ID0gY2xpZW50OwogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgYXV0byBhdHRy
aWJ1dGVzID0gY29udGV4dC0+Y29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICBfZGV2aWNlUGl4ZWxS
YXRpbyA9IGF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbzsKLSAgICBzZWxmLmNvbnRlbnRzT3Bh
cXVlID0gIWF0dHJpYnV0ZXMuYWxwaGE7CiAgICAgc2VsZi50cmFuc2Zvcm0gPSBDQVRyYW5zZm9y
bTNESWRlbnRpdHk7Ci0gICAgc2VsZi5jb250ZW50c1NjYWxlID0gX2RldmljZVBpeGVsUmF0aW87
CisgICAgc2VsZi5jb250ZW50c1NjYWxlID0gZGV2aWNlUGl4ZWxSYXRpbzsKICAgICByZXR1cm4g
c2VsZjsKIH0KIApAQCAtMTE3LDY2ICs3MCwzOSBAQCBuYW1lc3BhY2UgewogCiAtIChDR0ltYWdl
UmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29sb3JTcGFjZVJlZiljb2xv
clNwYWNlCiB7Ci0gICAgaWYgKCFfY29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgLy8gRklYTUU6IGltcGxlbWVudC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNzM3NworICAgIC8vIFdoZW4gaW1wbGVtZW50aW5nLCByZW1lbWJlciB0byB1c2Ug
c2VsZi5jb250ZW50c1NjYWxlLgogICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotLSAodm9pZClwcmVwYXJlRm9yRGlzcGxheQorLSAoV2ViQ29y
ZTo6V2ViR0xMYXllckJ1ZmZlcikgcmVjeWNsZUJ1ZmZlcgogewotICAgIGlmICghX2NvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRvIGF2b2lkIHJ1bm5pbmcgYW55IE9wZW5HTCBj
b2RlIGluIGBkaXNwbGF5YCwgdGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZAotICAgIC8vIGF0
IHRoZSBlbmQgb2YgdGhlIHJlbmRlcmluZyB0YXNrLiBXZSB3aWxsIGZsdXNoIGFsbCBwYWludGlu
ZyBjb21tYW5kcwotICAgIC8vIGxlYXZpbmcgdGhlIGJ1ZmZlcnMgcmVhZHkgdG8gY29tcG9zaXRl
LgotCi0gICAgaWYgKCFfY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKLSAgICAgICAg
Ly8gQ29udGV4dCBpcyBsaWtlbHkgYmVpbmcgdG9ybiBkb3duLgotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKF9zcGFyZUJ1ZmZlci5zdXJmYWNlKSB7CisgICAgICAgIGlmIChfc3BhcmVCdWZmZXIu
c3VyZmFjZS0+aXNJblVzZSgpKQorICAgICAgICAgICAgX3NwYXJlQnVmZmVyLnN1cmZhY2UucmVz
ZXQoKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoX3NwYXJlQnVmZmVyKTsKICAgICB9Ci0gICAg
X2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7Ci0gICAgaWYgKF9kcmF3aW5nQnVmZmVyKSB7Ci0g
ICAgICAgIGlmIChfbGF0Y2hlZFBidWZmZXIpIHsKLSAgICAgICAgICAgIFdURjo6T3B0aW9uYWw8
U2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nPiByZXN0b3JlQmluZGluZzsKLSAgICAgICAgICAg
IEdDR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldCgpOwotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byByZXN0b3JlIEdMX1RFWFRVUkVfUkVDVEFOR0xFIGJlY2F1c2UgaXQncyBub3QgYWNjZXNz
aWJsZSBmcm9tIHVzZXIgY29kZS4KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVGFyZ2V0ICE9IFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIpCi0gICAgICAg
ICAgICAgICAgcmVzdG9yZUJpbmRpbmcuZW1wbGFjZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldFF1ZXJ5KCksIHRleHR1cmVUYXJnZXQpOwot
ICAgICAgICAgICAgR0NHTGVudW0gdGV4dHVyZSA9IF9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUo
KTsKLSAgICAgICAgICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlKTsK
LSAgICAgICAgICAgIGlmICghRUdMX1JlbGVhc2VUZXhJbWFnZShfZWdsRGlzcGxheSwgX2xhdGNo
ZWRQYnVmZmVyLCBFR0xfQkFDS19CVUZGRVIpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IHJlcG9ydCBlcnJvci4KLSAgICAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgX2xhdGNoZWRQYnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAg
fQorICAgIHJldHVybiB7IH07Cit9CiAKLSAgICAgICAgc3RkOjpzd2FwKF9jb250ZW50c0J1ZmZl
ciwgX2RyYXdpbmdCdWZmZXIpOwotICAgICAgICBzdGQ6OnN3YXAoX2NvbnRlbnRzUGJ1ZmZlciwg
X2RyYXdpbmdQYnVmZmVyKTsKLSAgICAgICAgW3NlbGYgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZh
aWxhYmxlU3VyZmFjZV07Ci0gICAgfQorLSAodm9pZClwcmVwYXJlRm9yRGlzcGxheVdpdGhDb250
ZW50czooV2ViQ29yZTo6V2ViR0xMYXllckJ1ZmZlcikgYnVmZmVyCit7CisgICAgQVNTRVJUKCFf
c3BhcmVCdWZmZXIuc3VyZmFjZSk7CisgICAgX3NwYXJlQnVmZmVyID0gV1RGTW92ZShfY29udGVu
dHNCdWZmZXIpOworICAgIF9jb250ZW50c0J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKTsKICAgICBb
c2VsZiBzZXROZWVkc0Rpc3BsYXldOwogICAgIF9wcmVwYXJlZEZvckRpc3BsYXkgPSBZRVM7CiB9
CiAKIC0gKHZvaWQpZGlzcGxheQogewotICAgIGlmICghX2NvbnRleHQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UndmUgcGFpbnRlZCBpbnRvIHRoZSBfZHJhd2lu
Z0J1ZmZlciBhbmQgc3dhcHBlZCBpdCB3aXRoIHRoZSBvbGQgX2NvbnRlbnRzQnVmZmVyLAotICAg
IC8vIHNvIGFsbCB3ZSBuZWVkIHRvIGRvIGhlcmUgaXMgdGlja2xlIHRoZSBDQUxheWVyIHRvIGxl
dCBpdCBrbm93IGl0IGhhcyBuZXcgY29udGVudHMuCi0gICAgLy8gVGhpcyBhdm9pZHMgcnVubmlu
ZyBhbnkgT3BlbkdMIGNvZGUgaW4gdGhpcyBtZXRob2QuCi0KLSAgICBpZiAoX2NvbnRlbnRzQnVm
ZmVyICYmIF9wcmVwYXJlZEZvckRpc3BsYXkpIHsKLSAgICAgICAgc2VsZi5jb250ZW50cyA9IF9j
b250ZW50c0J1ZmZlci0+YXNMYXllckNvbnRlbnRzKCk7CisgICAgaWYgKF9jb250ZW50c0J1ZmZl
ci5zdXJmYWNlICYmIF9wcmVwYXJlZEZvckRpc3BsYXkpIHsKKyAgICAgICAgc2VsZi5jb250ZW50
cyA9IF9jb250ZW50c0J1ZmZlci5zdXJmYWNlLT5hc0xheWVyQ29udGVudHMoKTsKICAgICAgICAg
W3NlbGYgcmVsb2FkVmFsdWVGb3JLZXlQYXRoOkAiY29udGVudHMiXTsKICAgICB9Ci0KLSAgICBf
Y29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworICAgIGlmIChfY2xpZW50KQorICAgICAg
ICBfY2xpZW50LT5kaWREaXNwbGF5KCk7CiAgICAgYXV0byBsYXllciA9IFdlYkNvcmU6OlBsYXRm
b3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyRm9yTGF5ZXIoKF9fYnJpZGdlIHZvaWQqKXNlbGYp
OwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkKICAgICAgICAgbGF5ZXItPm93bmVy
KCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShsYXllci5nZXQoKSk7CkBAIC0xODQs
OTYgKzExMCwxNCBAQCBuYW1lc3BhY2UgewogICAgIF9wcmVwYXJlZEZvckRpc3BsYXkgPSBOTzsK
IH0KIAotLSAodm9pZClzZXRFR0xEaXNwbGF5Oih2b2lkKilkaXNwbGF5IGNvbmZpZzoodm9pZCop
Y29uZmlnCi17Ci0gICAgX2VnbERpc3BsYXkgPSBkaXNwbGF5OwotICAgIF9lZ2xDb25maWcgPSBj
b25maWc7Ci19Ci0KLS0gKHZvaWQpcmVsZWFzZUdMUmVzb3VyY2VzCistICh2b2lkKikgZGV0YWNo
Q2xpZW50CiB7Ci0gICAgaWYgKCFfY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KF9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSAmJiBfbGF0Y2hlZFBidWZmZXIpIHsKLSAg
ICAgICAgRUdMX1JlbGVhc2VUZXhJbWFnZShfZWdsRGlzcGxheSwgX2xhdGNoZWRQYnVmZmVyLCBF
R0xfQkFDS19CVUZGRVIpOwotICAgICAgICBfbGF0Y2hlZFBidWZmZXIgPSBudWxscHRyOwotICAg
IH0KLQotICAgIEVHTF9EZXN0cm95U3VyZmFjZShfZWdsRGlzcGxheSwgX2NvbnRlbnRzUGJ1ZmZl
cik7Ci0gICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKF9lZ2xEaXNwbGF5LCBfZHJhd2luZ1BidWZmZXIp
OwotICAgIEVHTF9EZXN0cm95U3VyZmFjZShfZWdsRGlzcGxheSwgX3NwYXJlUGJ1ZmZlcik7Cisg
ICAgQVNTRVJUKCFfc3BhcmVCdWZmZXIuc3VyZmFjZSk7CisgICAgX2NsaWVudCA9IG5pbDsKKyAg
ICB2b2lkKiByZXN1bHQgPSBfY29udGVudHNCdWZmZXIuaGFuZGxlOworICAgIF9jb250ZW50c0J1
ZmZlci5oYW5kbGUgPSBudWxscHRyOworICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KLS0gKGJvb2wp
YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTooV2ViQ29yZTo6SW50U2l6ZSlz
aXplIHVzaW5nQWxwaGE6KEJPT0wpdXNpbmdBbHBoYQotewotICAgIF9idWZmZXJTaXplID0gc2l6
ZTsKLSAgICBfdXNpbmdBbHBoYSA9IHVzaW5nQWxwaGE7Ci0gICAgX2NvbnRlbnRzQnVmZmVyID0g
V2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGUoc2l6ZSwgV2ViQ29yZTo6c1JHQkNvbG9yU3BhY2VS
ZWYoKSk7Ci0gICAgX2RyYXdpbmdCdWZmZXIgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShz
aXplLCBXZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpKTsKLSAgICBfc3BhcmVCdWZmZXIgPSBX
ZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShzaXplLCBXZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJl
ZigpKTsKLQotICAgIGlmICghX2NvbnRlbnRzQnVmZmVyIHx8ICFfZHJhd2luZ0J1ZmZlciB8fCAh
X3NwYXJlQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBfY29udGVudHNCdWZm
ZXItPm1pZ3JhdGVDb2xvclNwYWNlVG9Qcm9wZXJ0aWVzKCk7Ci0gICAgX2RyYXdpbmdCdWZmZXIt
Pm1pZ3JhdGVDb2xvclNwYWNlVG9Qcm9wZXJ0aWVzKCk7Ci0gICAgX3NwYXJlQnVmZmVyLT5taWdy
YXRlQ29sb3JTcGFjZVRvUHJvcGVydGllcygpOwotICAgIGNvbnN0IEVHTGludCBzdXJmYWNlQXR0
cmlidXRlc1tdID0gewotICAgICAgICBFR0xfV0lEVEgsIHNpemUud2lkdGgoKSwKLSAgICAgICAg
RUdMX0hFSUdIVCwgc2l6ZS5oZWlnaHQoKSwKLSAgICAgICAgRUdMX0lPU1VSRkFDRV9QTEFORV9B
TkdMRSwgMCwKLSAgICAgICAgRUdMX1RFWFRVUkVfVEFSR0VULCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6RUdMSU9TdXJmYWNlVGV4dHVyZVRhcmdldCgpLAotICAgICAgICBFR0xf
VEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUsIHVzaW5nQWxwaGEgPyBHTF9CR1JBX0VYVCA6
IEdMX1JHQiwKLSAgICAgICAgRUdMX1RFWFRVUkVfRk9STUFULCBFR0xfVEVYVFVSRV9SR0JBLAot
ICAgICAgICBFR0xfVEVYVFVSRV9UWVBFX0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLAotICAgICAg
ICAvLyBPbmx5IGhhcyBhbiBlZmZlY3Qgb24gdGhlIGlPUyBTaW11bGF0b3IuCi0gICAgICAgIEVH
TF9JT1NVUkZBQ0VfVVNBR0VfSElOVF9BTkdMRSwgRUdMX0lPU1VSRkFDRV9XUklURV9ISU5UX0FO
R0xFLAotICAgICAgICBFR0xfTk9ORSwgRUdMX05PTkUKLSAgICB9OwotCi0gICAgX2NvbnRlbnRz
UGJ1ZmZlciA9IEVHTF9DcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihfZWdsRGlzcGxheSwg
RUdMX0lPU1VSRkFDRV9BTkdMRSwgX2NvbnRlbnRzQnVmZmVyLT5zdXJmYWNlKCksIF9lZ2xDb25m
aWcsIHN1cmZhY2VBdHRyaWJ1dGVzKTsKLSAgICBfZHJhd2luZ1BidWZmZXIgPSBFR0xfQ3JlYXRl
UGJ1ZmZlckZyb21DbGllbnRCdWZmZXIoX2VnbERpc3BsYXksIEVHTF9JT1NVUkZBQ0VfQU5HTEUs
IF9kcmF3aW5nQnVmZmVyLT5zdXJmYWNlKCksIF9lZ2xDb25maWcsIHN1cmZhY2VBdHRyaWJ1dGVz
KTsKLSAgICBfc3BhcmVQYnVmZmVyID0gRUdMX0NyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVy
KF9lZ2xEaXNwbGF5LCBFR0xfSU9TVVJGQUNFX0FOR0xFLCBfc3BhcmVCdWZmZXItPnN1cmZhY2Uo
KSwgX2VnbENvbmZpZywgc3VyZmFjZUF0dHJpYnV0ZXMpOwotCi0gICAgaWYgKCFfY29udGVudHNQ
YnVmZmVyIHx8ICFfZHJhd2luZ1BidWZmZXIgfHwgIV9zcGFyZVBidWZmZXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0tICh2b2lkKWJpbmRGcmFtZWJ1
ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2UKLXsKLSAgICBXVEY6Ok9wdGlvbmFsPFNjb3BlZFJl
c3RvcmVUZXh0dXJlQmluZGluZz4gcmVzdG9yZUJpbmRpbmc7Ci0gICAgR0NHTGVudW0gdGV4dHVy
ZVRhcmdldCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJT1N1cmZhY2VUZXh0
dXJlVGFyZ2V0KCk7Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXN0b3JlIEdMX1RFWFRVUkVf
UkVDVEFOR0xFIGJlY2F1c2UgaXQncyBub3QgYWNjZXNzaWJsZSBmcm9tIHVzZXIgY29kZS4KLSAg
ICBpZiAodGV4dHVyZVRhcmdldCAhPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV9SRUNUQU5HTEVfQVJCKQotICAgICAgICByZXN0b3JlQmluZGluZy5lbXBsYWNlKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0UXVlcnkoKSwg
dGV4dHVyZVRhcmdldCk7Ci0KLSAgICBHQ0dMZW51bSB0ZXh0dXJlID0gX2NvbnRleHQtPnBsYXRm
b3JtVGV4dHVyZSgpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJl
KTsKLQotICAgIGlmIChfbGF0Y2hlZFBidWZmZXIpIHsKLSAgICAgICAgaWYgKCFFR0xfUmVsZWFz
ZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IuCi0gICAgICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgICAgICB9Ci0gICAgICAgIF9sYXRjaGVkUGJ1ZmZlciA9IG51bGxw
dHI7Ci0gICAgfQotCi0gICAgaWYgKF9kcmF3aW5nQnVmZmVyICYmIF9kcmF3aW5nQnVmZmVyLT5p
c0luVXNlKCkpIHsKLSAgICAgICAgc3RkOjpzd2FwKF9kcmF3aW5nQnVmZmVyLCBfc3BhcmVCdWZm
ZXIpOwotICAgICAgICBzdGQ6OnN3YXAoX2RyYXdpbmdQYnVmZmVyLCBfc3BhcmVQYnVmZmVyKTsK
LSAgICB9Ci0KLSAgICAvLyBMaW5rIHRoZSBJT1N1cmZhY2UgdG8gdGhlIHRleHR1cmUgdmlhIHRo
ZSBwcmV2aW91c2x5LWNyZWF0ZWQgcGJ1ZmZlci4KLSAgICBpZiAoIUVHTF9CaW5kVGV4SW1hZ2Uo
X2VnbERpc3BsYXksIF9kcmF3aW5nUGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKSkgewotICAgICAg
ICAvLyBGSVhNRTogcmVwb3J0IGVycm9yLgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IH0KLSAgICBfbGF0Y2hlZFBidWZmZXIgPSBfZHJhd2luZ1BidWZmZXI7Ci19Ci0KIEBlbmQKIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjYw
M2NiZWYyOTI0NDhhZjFiM2I5M2FjZWE3ZWQ0OTkzMTdlN2JjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllckNsaWVudC5o
CkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJH
TExheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJHTExheWVyQ2xpZW50KCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRpZERpc3BsYXkoKSA9IDA7Cit9OworCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IGY4NTgyYzYxN2IwNzY4YTA1MzQyNGFlOTdi
N2M5YzY2MmNlMDMwYmIuLjI1MjE5ZjhmNTMxY2FkYTNhYmY1ZDBlNDIxNTMzNWMxMzQ3MGZlMTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0zNSw2ICszNSwxMSBAQAog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4K
IAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUg
IldlYkdMTGF5ZXJDbGllbnQuaCIKKyNlbmRpZgorCiAjaWYgVVNFKENBKQogI2luY2x1ZGUgIlBs
YXRmb3JtQ0FMYXllci5oIgogI2VuZGlmCkBAIC01NCw3ICs1OSw2IEBACiAjaWYgUExBVEZPUk0o
Q09DT0EpCiBPQkpDX0NMQVNTIENBTGF5ZXI7CiBPQkpDX0NMQVNTIFdlYkdMTGF5ZXI7Ci10eXBl
ZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJmYWNlUmVmOwogI2VuZGlmIC8vIFBMQVRGT1JN
KENPQ09BKQogCiAjaWYgVVNFKE5JQ09TSUEpCkBAIC04Myw3ICs4NywxMSBAQCB0eXBlZGVmIFdU
Rjo6SGFzaE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7CiAKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZTsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0wgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0wKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICAsIHByaXZhdGUgV2ViR0xMYXllckNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6CiAgICAg
Y2xhc3MgQ2xpZW50IHsKICAgICBwdWJsaWM6CkBAIC01NDMsOCArNTUxLDggQEAgcHVibGljOgog
I2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIGFsbG9jYXRlSU9TdXJmYWNl
QmFja2luZ1N0b3JlKEludFNpemUpOwotICAgIHZvaWQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJl
QmFja2luZ1N0b3JlRnJvbUxheWVyKCk7CisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoKTsKKyAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKICNpZiBQTEFURk9STShNQUMp
CiAgICAgdm9pZCB1cGRhdGVDR0xDb250ZXh0KCk7CiAjZW5kaWYKQEAgLTY4MSwxMSArNjg5LDE0
IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6
ZSYpOworICAgIHZvaWQgcHJlcGFyZVRleHR1cmVJbXBsKCk7CiAgICAgdm9pZCByZXNvbHZlTXVs
dGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKICAgICB2
b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdDR0x1aW50IGludGVybmFs
RGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgYm9vbCBhbGxvd09mZmxpbmVSZW5kZXJlcnMoKSBjb25zdDsKKyAgICAv
LyBXZWJHTExheWVyQ2xpZW50IG92ZXJyaWRlcy4KKyAgICB2b2lkIGRpZERpc3BsYXkoKSBvdmVy
cmlkZTsKICNlbmRpZgogCiAgICAgaW50IG1fY3VycmVudFdpZHRoIHsgMCB9OwpAQCAtODkwLDYg
KzkwMSwxMiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKKyAgICAv
LyBCYWNraW5nIHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZlciB3aGljaCBpcyBldmVudHVhbGx5IHVz
ZWQgZm9yIGRpc3BsYXkuCisgICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gZmFs
c2UsIHRoaXMgaXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJhY2tpbmcgc3RvcmUuCisgICAgLy8gV2hl
biBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwgdGhpcyBpcyBibGl0dGVkIHRvIGR1cmlu
ZyBkaXNwbGF5IHByZXBhcmUuCisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9kaXNw
bGF5QnVmZmVyQmFja2luZzsKKyAgICB2b2lkKiBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyIHsgbnVs
bHB0ciB9OworCiAgICAgYm9vbCBtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUgeyBm
YWxzZSB9OwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xC
YXNlLmNwcAppbmRleCBiNThiYjAyY2U3ZjhhZDNjZTliYWZhMTYxNWY3NGYyNjc2NWFjYWVhLi4y
MGJmMmY0Zjk4NGNjN2YyYmI3M2M2ZGE1NTlmMDgwMGEzM2ExNDljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcApAQCAtMTY0LDcgKzE2NCw2IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQotICAgIHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpOwog
ICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBtX3RleHR1cmUs
IDApOwogI2VuZGlmIC8vICFVU0UoT1BFTkdMX0VTKSkKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGZmZWEzMmMyZDI0ZWQ4YjliYmE2
ZDAzNmUwMTkzNDdjOWUyNmFlODYuLjgzMGNhNmQ2OTYzZjI5MDI3N2Q5MThlNTQ0MjhlNTU3NGZi
ZjgyZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CkBAIC0xNzUsNyArMTc1LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnVs
bHNjcmVlbk1hbmFnZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQXR0YWNobWVudEVsZW1lbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTElt
YWdlRWxlbWVudC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbQppbmRleCBmMTQyNWFlMWJlMmEyNzBmZGZmYzYxN2YxZjM3YmUyOWI4
ODVhNjBjLi5hMTcyOWY1YzYyMDVkMTZkN2ZhOTk4YTY1MzZhODRjOGZhNDgwNDU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpA
QCAtNzEsNyArNzEsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>