<?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>20784</bug_id>
          
          <creation_ts>2008-09-11 09:05:33 -0700</creation_ts>
          <short_desc>move npapi.h to C99 integer types</short_desc>
          <delta_ts>2010-04-30 13:54:46 -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>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Josh Aas">joshmoz</reporter>
          <assigned_to name="Josh Aas">joshmoz</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>eric</cc>
    
    <cc>jhoneycutt</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>stuartmorgan</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90862</commentid>
    <comment_count>0</comment_count>
    <who name="Josh Aas">joshmoz</who>
    <bug_when>2008-09-11 09:05:33 -0700</bug_when>
    <thetext>In Mozilla bug 453883, we moved integer types in npapi.h to C99 and stopped defining our own integer types. This change should propagate to WebKit.

int[16/32] -&gt; int[16/32]_t
uint[16/32] -&gt; uint[16/32]_t

https://bugzilla.mozilla.org/show_bug.cgi?id=453883</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90876</commentid>
    <comment_count>1</comment_count>
      <attachid>23355</attachid>
    <who name="Josh Aas">joshmoz</who>
    <bug_when>2008-09-11 11:52:34 -0700</bug_when>
    <thetext>Created attachment 23355
fix v1.0

This works on Mac OS X and I took a stab at Windows and Linux, but I only have access to a Mac OS X machine right now. I&apos;ll have to find somebody to test on Windows and Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90900</commentid>
    <comment_count>2</comment_count>
    <who name="Josh Aas">joshmoz</who>
    <bug_when>2008-09-11 15:19:28 -0700</bug_when>
    <thetext>We might need something like this on Windows:

http://mxr.mozilla.org/mozilla-central/source/modules/plugin/base/public/nptypes.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91187</commentid>
    <comment_count>3</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2008-09-15 01:40:19 -0700</bug_when>
    <thetext>Hi, Josh,

WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp
WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp

are missed by this patch.

Making the same changes there, and including stdint.h in npapi.h, this builds under VC++ 2005. I didn&apos;t try VC++ Express, but I imagine it would build fine, too.

Thanks for working on this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91189</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-09-15 01:56:57 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Making the same changes there, and including stdint.h in npapi.h, this builds
&gt; under VC++ 2005. I didn&apos;t try VC++ Express, but I imagine it would build fine,
&gt; too.

I think the reason it builds is because we have a custom made stdint.h file in our internal SDK on Windows. stdint.h isn&apos;t included in VC++ at all so we would need a replacement solution for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91226</commentid>
    <comment_count>5</comment_count>
      <attachid>23444</attachid>
    <who name="Josh Aas">joshmoz</who>
    <bug_when>2008-09-15 12:42:19 -0700</bug_when>
    <thetext>Created attachment 23444
current Mozilla nptypes.h

Probably best for you guys to just finish the patch as you can update Window project files and test. Here is the current Mozilla nptypes.h which you guys should probably use, just add that and update the files that jhoneycutt pointed out and things should work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219200</commentid>
    <comment_count>6</comment_count>
      <attachid>54739</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-29 15:01:39 -0700</bug_when>
    <thetext>Created attachment 54739
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219203</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-29 15:04:25 -0700</bug_when>
    <thetext>Attachment 54739 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
on&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/nptypes.h:159:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:159:  uint32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/nptypes.h:165:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:165:  &quot;inttypes.h&quot; already included at WebCore/bridge/nptypes.h:58  [build/include] [4]
WebCore/bridge/nptypes.h:167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:169:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:175:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:175:  &quot;sys/types.h&quot; already included at WebCore/bridge/nptypes.h:68  [build/include] [4]
WebCore/bridge/nptypes.h:180:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:181:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:181:  uint32_t is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/nptypes.h:183:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:185:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:186:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:190:  &quot;inttypes.h&quot; already included at WebCore/bridge/nptypes.h:58  [build/include] [4]
WebCore/bridge/nptypes.h:191:  &quot;stdbool.h&quot; already included at WebCore/bridge/nptypes.h:84  [build/include] [4]
WebCore/bridge/nptypes.h:192:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:194:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:194:  &quot;inttypes.h&quot; already included at WebCore/bridge/nptypes.h:58  [build/include] [4]
WebCore/bridge/nptypes.h:201:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:201:  &quot;stdint.h&quot; already included at WebCore/bridge/nptypes.h:94  [build/include] [4]
WebCore/bridge/nptypes.h:203:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bridge/nptypes.h:205:  &quot;stdbool.h&quot; already included at WebCore/bridge/nptypes.h:84  [build/include] [4]
WebCore/bridge/nptypes.h:213:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 56 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219209</commentid>
    <comment_count>8</comment_count>
      <attachid>54739</attachid>
    <who name="">mitz</who>
    <bug_when>2010-04-29 15:11:14 -0700</bug_when>
    <thetext>Comment on attachment 54739
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219230</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-29 15:59:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58542 might have broken GTK Linux 64-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219562</commentid>
    <comment_count>10</comment_count>
      <attachid>54816</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-30 12:04:19 -0700</bug_when>
    <thetext>Created attachment 54816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219563</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-30 12:07:55 -0700</bug_when>
    <thetext>Attachment 54816 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
etAuthenticationInfo is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/npapi.h:875:  NPN_ScheduleTimer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bridge/npapi.h:876:  NPN_UnscheduleTimer is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/plugins/npapi.cpp:46:  NPN_MemAlloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/plugins/npapi.cpp:56:  NPN_MemFlush is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/plugins/npapi.cpp:82:  NPN_PostURLNotify is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/plugins/npapi.cpp:87:  NPN_PostURL is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/plugins/npapi.cpp:97:  NPN_Write is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:69:  NPP_New is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:222:  NPP_NewStream is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:255:  NPP_WriteReady is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:260:  NPP_Write is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:404:  NPP_HandleEvent is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/mac/Plugins/WebNetscapePluginView.h:107:  _currentContainerCheckRequestID is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp:88:  NPP_New is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp:169:  NPP_NewStream is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp:199:  NPP_WriteReady is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp:204:  NPP_Write is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp:217:  NPP_HandleEvent is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 25 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219564</commentid>
    <comment_count>12</comment_count>
      <attachid>54816</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-04-30 12:07:58 -0700</bug_when>
    <thetext>Comment on attachment 54816
Patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 58588)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,41 @@
&gt; +2010-04-30  Anders Carlsson  &lt;andersca@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Next step towards fixing
&gt; +        
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=20784
&gt; +        move npapi.h to C99 integer types
&gt; +
&gt; +        Use the C99 types everywhere. The &quot;old&quot; types are still around but will be removed
&gt; +        in a subsequent commit.
&gt; +
&gt; +        * bridge/npapi.h:
&gt; +        (_NPCocoaEvent::):
&gt; +        * plugins/PluginPackage.h:
&gt; +        * plugins/PluginStream.cpp:
&gt; +        (WebCore::PluginStream::deliverData):
&gt; +        * plugins/PluginStream.h:
&gt; +        * plugins/PluginView.cpp:
&gt; +        (WebCore::PluginView::postURLNotify):
&gt; +        (WebCore::PluginView::postURL):
&gt; +        (WebCore::PluginView::write):
&gt; +        (WebCore::PluginView::handlePost):
&gt; +        * plugins/PluginView.h:
&gt; +        * plugins/PluginViewNone.cpp:
&gt; +        (WebCore::PluginView::handlePostReadFile):
&gt; +        * plugins/npapi.cpp:
&gt; +        (NPN_MemAlloc):
&gt; +        (NPN_MemFlush):
&gt; +        (NPN_PostURLNotify):
&gt; +        (NPN_PostURL):
&gt; +        (NPN_Write):
&gt; +        * plugins/npfunctions.h:
&gt; +        * plugins/win/PluginPackageWin.cpp:
&gt; +        (WebCore::PluginPackage::NPVersion):
&gt; +        * plugins/win/PluginViewWin.cpp:
&gt; +        (WebCore::PluginView::handlePostReadFile):
&gt; +
&gt;  2010-04-30  Brady Eidson  &lt;beidson@apple.com&gt;
&gt;  
&gt;          Reviewed by Eric Carlson.
&gt; Index: WebCore/bridge/npapi.h
&gt; ===================================================================
&gt; --- WebCore/bridge/npapi.h	(revision 58585)
&gt; +++ WebCore/bridge/npapi.h	(working copy)
&gt; @@ -176,8 +176,8 @@ typedef long int32;
&gt;  #endif
&gt;  
&gt;  typedef unsigned char    NPBool;
&gt; -typedef int16            NPError;
&gt; -typedef int16            NPReason;
&gt; +typedef int16_t          NPError;
&gt; +typedef int16_t          NPReason;
&gt;  typedef char*            NPMIMEType;
&gt;  
&gt;  
&gt; @@ -209,8 +209,8 @@ typedef struct _NPStream
&gt;      void*        pdata;        /* plug-in private data */
&gt;      void*        ndata;        /* netscape private data */
&gt;      const char*  url;
&gt; -    uint32       end;
&gt; -    uint32       lastmodified;
&gt; +    uint32_t     end;
&gt; +    uint32_t     lastmodified;
&gt;      void*        notifyData;
&gt;      const char*  headers;      /* Response headers from host.
&gt;                                  * Exists only for &gt;= NPVERS_HAS_RESPONSE_HEADERS.
&gt; @@ -227,25 +227,25 @@ typedef struct _NPStream
&gt;  
&gt;  typedef struct _NPByteRange
&gt;  {
&gt; -    int32      offset;         /* negative offset means from the end */
&gt; -    uint32     length;
&gt; +    int32_t    offset;         /* negative offset means from the end */
&gt; +    uint32_t   length;
&gt;      struct _NPByteRange* next;
&gt;  } NPByteRange;
&gt;  
&gt;  
&gt;  typedef struct _NPSavedData
&gt;  {
&gt; -    int32    len;
&gt; +    int32_t  len;
&gt;      void*    buf;
&gt;  } NPSavedData;
&gt;  
&gt;  
&gt;  typedef struct _NPRect
&gt;  {
&gt; -    uint16    top;
&gt; -    uint16    left;
&gt; -    uint16    bottom;
&gt; -    uint16    right;
&gt; +    uint16_t  top;
&gt; +    uint16_t  left;
&gt; +    uint16_t  bottom;
&gt; +    uint16_t  right;
&gt;  } NPRect;
&gt;  
&gt;  
&gt; @@ -486,25 +486,25 @@ typedef struct _NPNSMenu NPNSMenu;
&gt;  
&gt;  typedef struct _NPCocoaEvent {
&gt;      NPCocoaEventType type;
&gt; -    uint32 version;
&gt; +    uint32_t version;
&gt;      
&gt;      union {
&gt;          struct {
&gt; -            uint32 modifierFlags;
&gt; +            uint32_t modifierFlags;
&gt;              double pluginX;
&gt;              double pluginY;            
&gt; -            int32 buttonNumber;
&gt; -            int32 clickCount;
&gt; +            int32_t buttonNumber;
&gt; +            int32_t clickCount;
&gt;              double deltaX;
&gt;              double deltaY;
&gt;              double deltaZ;
&gt;          } mouse;
&gt;          struct {
&gt; -            uint32 modifierFlags;
&gt; +            uint32_t modifierFlags;
&gt;              NPNSString *characters;
&gt;              NPNSString *charactersIgnoringModifiers;
&gt;              NPBool isARepeat;
&gt; -            uint16 keyCode;
&gt; +            uint16_t keyCode;
&gt;          } key;
&gt;          struct {
&gt;              CGContextRef context;
&gt; @@ -528,10 +528,10 @@ typedef struct _NPCocoaEvent {
&gt;  typedef struct _NPWindow
&gt;  {
&gt;      void*    window;     /* Platform specific window handle */
&gt; -    int32    x;            /* Position of top left corner relative */
&gt; -    int32    y;            /*    to a netscape page.                    */
&gt; -    uint32    width;        /* Maximum window size */
&gt; -    uint32    height;
&gt; +    int32_t  x;            /* Position of top left corner relative */
&gt; +    int32_t  y;            /*    to a netscape page.                    */
&gt; +    uint32_t  width;        /* Maximum window size */
&gt; +    uint32_t  height;
&gt;      NPRect    clipRect;    /* Clipping rectangle in port coordinates */
&gt;                          /* Used by MAC only.              */
&gt;  #if defined(XP_UNIX) || defined(XP_SYMBIAN)
&gt; @@ -558,7 +558,7 @@ typedef struct _NPEmbedPrint
&gt;  
&gt;  typedef struct _NPPrint
&gt;  {
&gt; -    uint16    mode;                        /* NP_FULL or NP_EMBED */
&gt; +    uint16_t    mode;                        /* NP_FULL or NP_EMBED */
&gt;      union
&gt;      {
&gt;          NPFullPrint     fullPrint;        /* if mode is NP_FULL */
&gt; @@ -591,7 +591,7 @@ typedef QEvent NPEvent;
&gt;  #elif defined(XP_WIN)
&gt;  typedef struct _NPEvent
&gt;  {
&gt; -    uint16   event;
&gt; +    uint16_t   event;
&gt;      uintptr_t   wParam;
&gt;      uintptr_t   lParam;
&gt;  } NPEvent;
&gt; @@ -803,22 +803,22 @@ char*                    NPP_GetMIMEDesc
&gt;  NPError     NPP_Initialize(void);
&gt;  void        NPP_Shutdown(void);
&gt;  NPError     NP_LOADDS    NPP_New(NPMIMEType pluginType, NPP instance,
&gt; -                                uint16 mode, int16 argc, char* argn[],
&gt; +                                uint16_t mode, int16_t argc, char* argn[],
&gt;                                  char* argv[], NPSavedData* saved);
&gt;  NPError     NP_LOADDS    NPP_Destroy(NPP instance, NPSavedData** save);
&gt;  NPError     NP_LOADDS    NPP_SetWindow(NPP instance, NPWindow* window);
&gt;  NPError     NP_LOADDS    NPP_NewStream(NPP instance, NPMIMEType type,
&gt;                                        NPStream* stream, NPBool seekable,
&gt; -                                      uint16* stype);
&gt; +                                      uint16_t* stype);
&gt;  NPError     NP_LOADDS    NPP_DestroyStream(NPP instance, NPStream* stream,
&gt;                                            NPReason reason);
&gt; -int32        NP_LOADDS    NPP_WriteReady(NPP instance, NPStream* stream);
&gt; -int32        NP_LOADDS    NPP_Write(NPP instance, NPStream* stream, int32 offset,
&gt; -                                  int32 len, void* buffer);
&gt; +int32_t     NP_LOADDS    NPP_WriteReady(NPP instance, NPStream* stream);
&gt; +int32_t     NP_LOADDS    NPP_Write(NPP instance, NPStream* stream, int32_t offset,
&gt; +                                  int32_t len, void* buffer);
&gt;  void        NP_LOADDS    NPP_StreamAsFile(NPP instance, NPStream* stream,
&gt;                                           const char* fname);
&gt;  void        NP_LOADDS    NPP_Print(NPP instance, NPPrint* platformPrint);
&gt; -int16            NPP_HandleEvent(NPP instance, void* event);
&gt; +int16_t            NPP_HandleEvent(NPP instance, void* event);
&gt;  void        NP_LOADDS    NPP_URLNotify(NPP instance, const char* url,
&gt;                                        NPReason reason, void* notifyData);
&gt;  jref        NP_LOADDS            NPP_GetJavaClass(void);
&gt; @@ -838,24 +838,24 @@ NPError     NPN_GetURLNotify(NPP instanc
&gt;  NPError     NPN_GetURL(NPP instance, const char* url,
&gt;                             const char* target);
&gt;  NPError     NPN_PostURLNotify(NPP instance, const char* url,
&gt; -                                  const char* target, uint32 len,
&gt; +                                  const char* target, uint32_t len,
&gt;                                    const char* buf, NPBool file,
&gt;                                    void* notifyData);
&gt;  NPError     NPN_PostURL(NPP instance, const char* url,
&gt; -                            const char* target, uint32 len,
&gt; +                            const char* target, uint32_t len,
&gt;                              const char* buf, NPBool file);
&gt;  NPError     NPN_RequestRead(NPStream* stream, NPByteRange* rangeList);
&gt;  NPError     NPN_NewStream(NPP instance, NPMIMEType type,
&gt;                                const char* target, NPStream** stream);
&gt; -int32        NPN_Write(NPP instance, NPStream* stream, int32 len,
&gt; +int32_t     NPN_Write(NPP instance, NPStream* stream, int32_t len,
&gt;                            void* buffer);
&gt;  NPError     NPN_DestroyStream(NPP instance, NPStream* stream,
&gt;                                    NPReason reason);
&gt;  void        NPN_Status(NPP instance, const char* message);
&gt;  const char*    NPN_UserAgent(NPP instance);
&gt; -void*        NPN_MemAlloc(uint32 size);
&gt; +void*        NPN_MemAlloc(uint32_t size);
&gt;  void        NPN_MemFree(void* ptr);
&gt; -uint32        NPN_MemFlush(uint32 size);
&gt; +uint32_t      NPN_MemFlush(uint32_t size);
&gt;  void        NPN_ReloadPlugins(NPBool reloadPages);
&gt;  JRIEnv*     NPN_GetJavaEnv(void);
&gt;  jref        NPN_GetJavaPeer(NPP instance);
&gt; @@ -869,11 +869,11 @@ void        NPN_ForceRedraw(NPP instance
&gt;  void        NPN_PushPopupsEnabledState(NPP instance, NPBool enabled);
&gt;  void        NPN_PopPopupsEnabledState(NPP instance);
&gt;  void        NPN_PluginThreadAsyncCall(NPP instance, void (*func) (void *), void *userData);
&gt; -NPError     NPN_GetValueForURL(NPP instance, NPNURLVariable variable, const char* url, char** value, uint32* len);
&gt; -NPError     NPN_SetValueForURL(NPP instance, NPNURLVariable variable, const char* url, const char* value, uint32 len);
&gt; -NPError     NPN_GetAuthenticationInfo(NPP instance, const char* protocol, const char* host, int32 port, const char* scheme, const char *realm, char** username, uint32* ulen, char** password, uint32* plen);
&gt; -uint32      NPN_ScheduleTimer(NPP instance, uint32 interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32 timerID));
&gt; -void        NPN_UnscheduleTimer(NPP instance, uint32 timerID);
&gt; +NPError     NPN_GetValueForURL(NPP instance, NPNURLVariable variable, const char* url, char** value, uint32_t* len);
&gt; +NPError     NPN_SetValueForURL(NPP instance, NPNURLVariable variable, const char* url, const char* value, uint32_t len);
&gt; +NPError     NPN_GetAuthenticationInfo(NPP instance, const char* protocol, const char* host, int32_t port, const char* scheme, const char *realm, char** username, uint32_t* ulen, char** password, uint32_t* plen);
&gt; +uint32_t   NPN_ScheduleTimer(NPP instance, uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID));
&gt; +void        NPN_UnscheduleTimer(NPP instance, uint32_t timerID);
&gt;  NPError     NPN_PopUpContextMenu(NPP instance, NPMenu* menu);
&gt;  NPBool      NPN_ConvertPoint(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
&gt;      
&gt; Index: WebCore/plugins/PluginPackage.h
&gt; ===================================================================
&gt; --- WebCore/plugins/PluginPackage.h	(revision 58585)
&gt; +++ WebCore/plugins/PluginPackage.h	(working copy)
&gt; @@ -55,7 +55,7 @@ namespace WebCore {
&gt;          const String&amp; path() const { return m_path; }
&gt;          const String&amp; fileName() const { return m_fileName; }
&gt;          const String&amp; parentDirectory() const { return m_parentDirectory; }
&gt; -        uint16 NPVersion() const;
&gt; +        uint16_t NPVersion() const;
&gt;          time_t lastModified() const { return m_lastModified; }
&gt;  
&gt;          const MIMEToDescriptionsMap&amp; mimeToDescriptions() const { return m_mimeToDescriptions; }
&gt; Index: WebCore/plugins/PluginStream.cpp
&gt; ===================================================================
&gt; --- WebCore/plugins/PluginStream.cpp	(revision 58585)
&gt; +++ WebCore/plugins/PluginStream.cpp	(working copy)
&gt; @@ -336,20 +336,20 @@ void PluginStream::deliverData()
&gt;      if (!m_stream.ndata || m_deliveryData-&gt;size() == 0)
&gt;          return;
&gt;  
&gt; -    int32 totalBytes = m_deliveryData-&gt;size();
&gt; -    int32 totalBytesDelivered = 0;
&gt; +    int32_t totalBytes = m_deliveryData-&gt;size();
&gt; +    int32_t totalBytesDelivered = 0;
&gt;  
&gt;      if (m_loader)
&gt;          m_loader-&gt;setDefersLoading(true);
&gt;      while (totalBytesDelivered &lt; totalBytes) {
&gt; -        int32 deliveryBytes = m_pluginFuncs-&gt;writeready(m_instance, &amp;m_stream);
&gt; +        int32_t deliveryBytes = m_pluginFuncs-&gt;writeready(m_instance, &amp;m_stream);
&gt;  
&gt;          if (deliveryBytes &lt;= 0) {
&gt;              m_delayDeliveryTimer.startOneShot(0);
&gt;              break;
&gt;          } else {
&gt;              deliveryBytes = min(deliveryBytes, totalBytes - totalBytesDelivered);
&gt; -            int32 dataLength = deliveryBytes;
&gt; +            int32_t dataLength = deliveryBytes;
&gt;              char* data = m_deliveryData-&gt;data() + totalBytesDelivered;
&gt;  
&gt;              // Write the data
&gt; Index: WebCore/plugins/PluginStream.h
&gt; ===================================================================
&gt; --- WebCore/plugins/PluginStream.h	(revision 58585)
&gt; +++ WebCore/plugins/PluginStream.h	(working copy)
&gt; @@ -109,8 +109,8 @@ namespace WebCore {
&gt;  
&gt;          const NPPluginFuncs* m_pluginFuncs;
&gt;          NPP m_instance;
&gt; -        uint16 m_transferMode;
&gt; -        int32 m_offset;
&gt; +        uint16_t m_transferMode;
&gt; +        int32_t m_offset;
&gt;          WTF::CString m_headers;
&gt;          WTF::CString m_path;
&gt;          NPReason m_reason;
&gt; Index: WebCore/plugins/PluginView.cpp
&gt; ===================================================================
&gt; --- WebCore/plugins/PluginView.cpp	(revision 58585)
&gt; +++ WebCore/plugins/PluginView.cpp	(working copy)
&gt; @@ -582,12 +582,12 @@ NPError PluginView::getURL(const char* u
&gt;      return load(frameLoadRequest, false, 0);
&gt;  }
&gt;  
&gt; -NPError PluginView::postURLNotify(const char* url, const char* target, uint32 len, const char* buf, NPBool file, void* notifyData)
&gt; +NPError PluginView::postURLNotify(const char* url, const char* target, uint32_t len, const char* buf, NPBool file, void* notifyData)
&gt;  {
&gt;      return handlePost(url, target, len, buf, file, notifyData, true, true);
&gt;  }
&gt;  
&gt; -NPError PluginView::postURL(const char* url, const char* target, uint32 len, const char* buf, NPBool file)
&gt; +NPError PluginView::postURL(const char* url, const char* target, uint32_t len, const char* buf, NPBool file)
&gt;  {
&gt;      // As documented, only allow headers to be specified via NPP_PostURL when using a file.
&gt;      return handlePost(url, target, len, buf, file, 0, false, file);
&gt; @@ -600,7 +600,7 @@ NPError PluginView::newStream(NPMIMEType
&gt;      return NPERR_GENERIC_ERROR;
&gt;  }
&gt;  
&gt; -int32 PluginView::write(NPStream* stream, int32 len, void* buffer)
&gt; +int32_t PluginView::write(NPStream* stream, int32_t len, void* buffer)
&gt;  {
&gt;      notImplemented();
&gt;      // Unsupported
&gt; @@ -1136,7 +1136,7 @@ static inline HTTPHeaderMap parseRFC822H
&gt;      return headerFields;
&gt;  }
&gt;  
&gt; -NPError PluginView::handlePost(const char* url, const char* target, uint32 len, const char* buf, bool file, void* notifyData, bool sendNotification, bool allowHeaders)
&gt; +NPError PluginView::handlePost(const char* url, const char* target, uint32_t len, const char* buf, bool file, void* notifyData, bool sendNotification, bool allowHeaders)
&gt;  {
&gt;      if (!url || !len || !buf)
&gt;          return NPERR_INVALID_PARAM;
&gt; Index: WebCore/plugins/PluginView.h
&gt; ===================================================================
&gt; --- WebCore/plugins/PluginView.h	(revision 58585)
&gt; +++ WebCore/plugins/PluginView.h	(working copy)
&gt; @@ -129,10 +129,10 @@ namespace WebCore {
&gt;          // NPN functions
&gt;          NPError getURLNotify(const char* url, const char* target, void* notifyData);
&gt;          NPError getURL(const char* url, const char* target);
&gt; -        NPError postURLNotify(const char* url, const char* target, uint32 len, const char* but, NPBool file, void* notifyData);
&gt; -        NPError postURL(const char* url, const char* target, uint32 len, const char* but, NPBool file);
&gt; +        NPError postURLNotify(const char* url, const char* target, uint32_t len, const char* but, NPBool file, void* notifyData);
&gt; +        NPError postURL(const char* url, const char* target, uint32_t len, const char* but, NPBool file);
&gt;          NPError newStream(NPMIMEType type, const char* target, NPStream** stream);
&gt; -        int32 write(NPStream* stream, int32 len, void* buffer);
&gt; +        int32_t write(NPStream* stream, int32_t len, void* buffer);
&gt;          NPError destroyStream(NPStream* stream, NPReason reason);
&gt;          const char* userAgent();
&gt;  #if ENABLE(NETSCAPE_PLUGIN_API)
&gt; @@ -232,8 +232,8 @@ namespace WebCore {
&gt;          void platformDestroy();
&gt;          static void setCurrentPluginView(PluginView*);
&gt;          NPError load(const FrameLoadRequest&amp;, bool sendNotification, void* notifyData);
&gt; -        NPError handlePost(const char* url, const char* target, uint32 len, const char* buf, bool file, void* notifyData, bool sendNotification, bool allowHeaders);
&gt; -        NPError handlePostReadFile(Vector&lt;char&gt;&amp; buffer, uint32 len, const char* buf);
&gt; +        NPError handlePost(const char* url, const char* target, uint32_t len, const char* buf, bool file, void* notifyData, bool sendNotification, bool allowHeaders);
&gt; +        NPError handlePostReadFile(Vector&lt;char&gt;&amp; buffer, uint32_t len, const char* buf);
&gt;          static void freeStringArray(char** stringArray, int length);
&gt;          void setCallingPlugin(bool) const;
&gt;  
&gt; Index: WebCore/plugins/PluginViewNone.cpp
&gt; ===================================================================
&gt; --- WebCore/plugins/PluginViewNone.cpp	(revision 58585)
&gt; +++ WebCore/plugins/PluginViewNone.cpp	(working copy)
&gt; @@ -62,7 +62,7 @@ void PluginView::setNPWindowRect(const I
&gt;  {
&gt;  }
&gt;  
&gt; -NPError PluginView::handlePostReadFile(Vector&lt;char&gt;&amp;, uint32, const char*)
&gt; +NPError PluginView::handlePostReadFile(Vector&lt;char&gt;&amp;, uint32_t, const char*)
&gt;  {
&gt;      return 0;
&gt;  }
&gt; Index: WebCore/plugins/npapi.cpp
&gt; ===================================================================
&gt; --- WebCore/plugins/npapi.cpp	(revision 58585)
&gt; +++ WebCore/plugins/npapi.cpp	(working copy)
&gt; @@ -43,7 +43,7 @@ static PluginView* pluginViewForInstance
&gt;      return PluginView::currentPluginView();
&gt;  }
&gt;  
&gt; -void* NPN_MemAlloc(uint32 size)
&gt; +void* NPN_MemAlloc(uint32_t size)
&gt;  {
&gt;      return malloc(size);
&gt;  }
&gt; @@ -53,7 +53,7 @@ void NPN_MemFree(void* ptr)
&gt;      free(ptr);
&gt;  }
&gt;  
&gt; -uint32 NPN_MemFlush(uint32 size)
&gt; +uint32_t NPN_MemFlush(uint32_t size)
&gt;  {
&gt;      // Do nothing
&gt;      return 0;
&gt; @@ -79,12 +79,12 @@ NPError NPN_GetURL(NPP instance, const c
&gt;      return pluginViewForInstance(instance)-&gt;getURL(url, target);
&gt;  }
&gt;  
&gt; -NPError NPN_PostURLNotify(NPP instance, const char* url, const char* target, uint32 len, const char* buf, NPBool file, void* notifyData)
&gt; +NPError NPN_PostURLNotify(NPP instance, const char* url, const char* target, uint32_t len, const char* buf, NPBool file, void* notifyData)
&gt;  {
&gt;      return pluginViewForInstance(instance)-&gt;postURLNotify(url, target, len, buf, file, notifyData);
&gt;  }
&gt;  
&gt; -NPError NPN_PostURL(NPP instance, const char* url, const char* target, uint32 len, const char* buf, NPBool file)
&gt; +NPError NPN_PostURL(NPP instance, const char* url, const char* target, uint32_t len, const char* buf, NPBool file)
&gt;  {
&gt;      return pluginViewForInstance(instance)-&gt;postURL(url, target, len, buf, file);
&gt;  }
&gt; @@ -94,7 +94,7 @@ NPError NPN_NewStream(NPP instance, NPMI
&gt;      return pluginViewForInstance(instance)-&gt;newStream(type, target, stream);
&gt;  }
&gt;  
&gt; -int32 NPN_Write(NPP instance, NPStream* stream, int32 len, void* buffer)
&gt; +int32_t NPN_Write(NPP instance, NPStream* stream, int32_t len, void* buffer)
&gt;  {
&gt;      return pluginViewForInstance(instance)-&gt;write(stream, len, buffer);
&gt;  }
&gt; Index: WebCore/plugins/npfunctions.h
&gt; ===================================================================
&gt; --- WebCore/plugins/npfunctions.h	(revision 58585)
&gt; +++ WebCore/plugins/npfunctions.h	(working copy)
&gt; @@ -40,16 +40,16 @@ extern &quot;C&quot; {
&gt;  #endif
&gt;  
&gt;  typedef NPError (*NPN_GetURLNotifyProcPtr)(NPP instance, const char* URL, const char* window, void* notifyData);
&gt; -typedef NPError (*NPN_PostURLNotifyProcPtr)(NPP instance, const char* URL, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData);
&gt; +typedef NPError (*NPN_PostURLNotifyProcPtr)(NPP instance, const char* URL, const char* window, uint32_t len, const char* buf, NPBool file, void* notifyData);
&gt;  typedef NPError (*NPN_RequestReadProcPtr)(NPStream* stream, NPByteRange* rangeList);
&gt;  typedef NPError (*NPN_NewStreamProcPtr)(NPP instance, NPMIMEType type, const char* window, NPStream** stream);
&gt; -typedef int32 (*NPN_WriteProcPtr)(NPP instance, NPStream* stream, int32 len, void* buffer);
&gt; +typedef int32_t (*NPN_WriteProcPtr)(NPP instance, NPStream* stream, int32_t len, void* buffer);
&gt;  typedef NPError (*NPN_DestroyStreamProcPtr)(NPP instance, NPStream* stream, NPReason reason);
&gt;  typedef void (*NPN_StatusProcPtr)(NPP instance, const char* message);
&gt;  typedef const char*(*NPN_UserAgentProcPtr)(NPP instance);
&gt; -typedef void* (*NPN_MemAllocProcPtr)(uint32 size);
&gt; +typedef void* (*NPN_MemAllocProcPtr)(uint32_t size);
&gt;  typedef void (*NPN_MemFreeProcPtr)(void* ptr);
&gt; -typedef uint32 (*NPN_MemFlushProcPtr)(uint32 size);
&gt; +typedef uint32_t (*NPN_MemFlushProcPtr)(uint32_t size);
&gt;  typedef void (*NPN_ReloadPluginsProcPtr)(NPBool reloadPages);
&gt;  typedef NPError (*NPN_GetValueProcPtr)(NPP instance, NPNVariable variable, void *ret_value);
&gt;  typedef NPError (*NPN_SetValueProcPtr)(NPP instance, NPPVariable variable, void *value);
&gt; @@ -57,18 +57,18 @@ typedef void (*NPN_InvalidateRectProcPtr
&gt;  typedef void (*NPN_InvalidateRegionProcPtr)(NPP instance, NPRegion region);
&gt;  typedef void (*NPN_ForceRedrawProcPtr)(NPP instance);
&gt;  typedef NPError (*NPN_GetURLProcPtr)(NPP instance, const char* URL, const char* window);
&gt; -typedef NPError (*NPN_PostURLProcPtr)(NPP instance, const char* URL, const char* window, uint32 len, const char* buf, NPBool file);
&gt; +typedef NPError (*NPN_PostURLProcPtr)(NPP instance, const char* URL, const char* window, uint32_t len, const char* buf, NPBool file);
&gt;  typedef void* (*NPN_GetJavaEnvProcPtr)(void);
&gt;  typedef void* (*NPN_GetJavaPeerProcPtr)(NPP instance);
&gt;  typedef void  (*NPN_PushPopupsEnabledStateProcPtr)(NPP instance, NPBool enabled);
&gt;  typedef void  (*NPN_PopPopupsEnabledStateProcPtr)(NPP instance);
&gt;  typedef void (*NPN_PluginThreadAsyncCallProcPtr)(NPP npp, void (*func)(void *), void *userData);
&gt; -typedef NPError (*NPN_GetValueForURLProcPtr)(NPP npp, NPNURLVariable variable, const char* url, char** value, uint32* len);
&gt; -typedef NPError (*NPN_SetValueForURLProcPtr)(NPP npp, NPNURLVariable variable, const char* url, const char* value, uint32 len);
&gt; -typedef NPError (*NPN_GetAuthenticationInfoProcPtr)(NPP npp, const char* protocol, const char* host, int32 port, const char* scheme, const char *realm, char** username, uint32* ulen, char** password, uint32* plen);
&gt; +typedef NPError (*NPN_GetValueForURLProcPtr)(NPP npp, NPNURLVariable variable, const char* url, char** value, uint32_t* len);
&gt; +typedef NPError (*NPN_SetValueForURLProcPtr)(NPP npp, NPNURLVariable variable, const char* url, const char* value, uint32_t len);
&gt; +typedef NPError (*NPN_GetAuthenticationInfoProcPtr)(NPP npp, const char* protocol, const char* host, int32_t port, const char* scheme, const char *realm, char** username, uint32_t* ulen, char** password, uint32_t* plen);
&gt;  
&gt; -typedef uint32 (*NPN_ScheduleTimerProcPtr)(NPP npp, uint32 interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32 timerID));
&gt; -typedef void (*NPN_UnscheduleTimerProcPtr)(NPP npp, uint32 timerID);
&gt; +typedef uint32_t (*NPN_ScheduleTimerProcPtr)(NPP npp, uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID));
&gt; +typedef void (*NPN_UnscheduleTimerProcPtr)(NPP npp, uint32_t timerID);
&gt;  typedef NPError (*NPN_PopUpContextMenuProcPtr)(NPP instance, NPMenu* menu);
&gt;  typedef NPBool (*NPN_ConvertPointProcPtr)(NPP npp, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
&gt;  
&gt; @@ -96,16 +96,16 @@ typedef void (*NPN_SetExceptionProcPtr) 
&gt;  typedef bool (*NPN_EnumerateProcPtr) (NPP npp, NPObject *npobj, NPIdentifier **identifier, uint32_t *count);
&gt;  typedef bool (*NPN_ConstructProcPtr)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);    
&gt;  
&gt; -typedef NPError (*NPP_NewProcPtr)(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
&gt; +typedef NPError (*NPP_NewProcPtr)(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved);
&gt;  typedef NPError (*NPP_DestroyProcPtr)(NPP instance, NPSavedData** save);
&gt;  typedef NPError (*NPP_SetWindowProcPtr)(NPP instance, NPWindow* window);
&gt; -typedef NPError (*NPP_NewStreamProcPtr)(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype);
&gt; +typedef NPError (*NPP_NewStreamProcPtr)(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16_t* stype);
&gt;  typedef NPError (*NPP_DestroyStreamProcPtr)(NPP instance, NPStream* stream, NPReason reason);
&gt;  typedef void (*NPP_StreamAsFileProcPtr)(NPP instance, NPStream* stream, const char* fname);
&gt; -typedef int32 (*NPP_WriteReadyProcPtr)(NPP instance, NPStream* stream);
&gt; -typedef int32 (*NPP_WriteProcPtr)(NPP instance, NPStream* stream, int32_t offset, int32_t len, void* buffer);
&gt; +typedef int32_t (*NPP_WriteReadyProcPtr)(NPP instance, NPStream* stream);
&gt; +typedef int32_t (*NPP_WriteProcPtr)(NPP instance, NPStream* stream, int32_t offset, int32_t len, void* buffer);
&gt;  typedef void (*NPP_PrintProcPtr)(NPP instance, NPPrint* platformPrint);
&gt; -typedef int16 (*NPP_HandleEventProcPtr)(NPP instance, void* event);
&gt; +typedef int16_t (*NPP_HandleEventProcPtr)(NPP instance, void* event);
&gt;  typedef void (*NPP_URLNotifyProcPtr)(NPP instance, const char* URL, NPReason reason, void* notifyData);
&gt;  typedef NPError (*NPP_GetValueProcPtr)(NPP instance, NPPVariable variable, void *ret_value);
&gt;  typedef NPError (*NPP_SetValueProcPtr)(NPP instance, NPNVariable variable, void *value);
&gt; @@ -114,8 +114,8 @@ typedef void *(*NPP_GetJavaClassProcPtr)
&gt;  typedef void* JRIGlobalRef; //not using this right now
&gt;  
&gt;  typedef struct _NPNetscapeFuncs {
&gt; -    uint16 size;
&gt; -    uint16 version;
&gt; +    uint16_t size;
&gt; +    uint16_t version;
&gt;      
&gt;      NPN_GetURLProcPtr geturl;
&gt;      NPN_PostURLProcPtr posturl;
&gt; @@ -173,8 +173,8 @@ typedef struct _NPNetscapeFuncs {
&gt;  } NPNetscapeFuncs;
&gt;  
&gt;  typedef struct _NPPluginFuncs {
&gt; -    uint16 size;
&gt; -    uint16 version;
&gt; +    uint16_t size;
&gt; +    uint16_t version;
&gt;      NPP_NewProcPtr newp;
&gt;      NPP_DestroyProcPtr destroy;
&gt;      NPP_SetWindowProcPtr setwindow;
&gt; Index: WebCore/plugins/win/PluginPackageWin.cpp
&gt; ===================================================================
&gt; --- WebCore/plugins/win/PluginPackageWin.cpp	(revision 58585)
&gt; +++ WebCore/plugins/win/PluginPackageWin.cpp	(working copy)
&gt; @@ -335,7 +335,7 @@ bool PluginPackage::equal(const PluginPa
&gt;      return true;
&gt;  }
&gt;  
&gt; -uint16 PluginPackage::NPVersion() const
&gt; +uint16_t PluginPackage::NPVersion() const
&gt;  {
&gt;      return NP_VERSION_MINOR;
&gt;  }
&gt; Index: WebCore/plugins/win/PluginViewWin.cpp
&gt; ===================================================================
&gt; --- WebCore/plugins/win/PluginViewWin.cpp	(revision 58585)
&gt; +++ WebCore/plugins/win/PluginViewWin.cpp	(working copy)
&gt; @@ -834,7 +834,7 @@ void PluginView::setNPWindowRect(const I
&gt;      }
&gt;  }
&gt;  
&gt; -NPError PluginView::handlePostReadFile(Vector&lt;char&gt;&amp; buffer, uint32 len, const char* buf)
&gt; +NPError PluginView::handlePostReadFile(Vector&lt;char&gt;&amp; buffer, uint32_t len, const char* buf)
&gt;  {
&gt;      String filename(buf, len);
&gt;  
&gt; Index: WebKit/mac/ChangeLog
&gt; ===================================================================
&gt; --- WebKit/mac/ChangeLog	(revision 58588)
&gt; +++ WebKit/mac/ChangeLog	(working copy)
&gt; @@ -1,3 +1,63 @@
&gt; +2010-04-30  Anders Carlsson  &lt;andersca@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Next step towards fixing
&gt; +        
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=20784
&gt; +        move npapi.h to C99 integer types
&gt; +
&gt; +        Use the C99 types everywhere. The &quot;old&quot; types are still around but will be removed
&gt; +        in a subsequent commit.
&gt; +
&gt; +        * Plugins/WebBaseNetscapePluginStream.h:
&gt; +        * Plugins/WebBaseNetscapePluginStream.mm:
&gt; +        (WebNetscapePluginStream::deliverData):
&gt; +        * Plugins/WebNetscapePluginView.h:
&gt; +        * Plugins/WebNetscapePluginView.mm:
&gt; +        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):
&gt; +        (-[WebNetscapePluginView getAuthenticationInfoWithProtocol:host:port:scheme:realm:username:usernameLength:password:passwordLength:]):
&gt; +        * Plugins/npapi.mm:
&gt; +        (NPN_MemAlloc):
&gt; +        (NPN_MemFlush):
&gt; +        (NPN_PostURLNotify):
&gt; +        (NPN_PostURL):
&gt; +        (NPN_Write):
&gt; +        (NPN_ScheduleTimer):
&gt; +        (NPN_UnscheduleTimer):
&gt; +        (NPN_GetValueForURL):
&gt; +        (NPN_SetValueForURL):
&gt; +        (NPN_GetAuthenticationInfo):
&gt; +        (WKN_CheckIfAllowedToLoadURL):
&gt; +        (WKN_CancelCheckIfAllowedToLoadURL):
&gt; +
&gt; +2010-04-29  Anders Carlsson  &lt;andersca@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Need a short description and bug URL (OOPS!)
&gt; +
&gt; +        * Plugins/WebBaseNetscapePluginStream.h:
&gt; +        * Plugins/WebBaseNetscapePluginStream.mm:
&gt; +        (WebNetscapePluginStream::deliverData):
&gt; +        * Plugins/WebNetscapePluginView.h:
&gt; +        * Plugins/WebNetscapePluginView.mm:
&gt; +        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):
&gt; +        (-[WebNetscapePluginView getAuthenticationInfoWithProtocol:host:port:scheme:realm:username:usernameLength:password:passwordLength:]):
&gt; +        * Plugins/npapi.mm:
&gt; +        (NPN_MemAlloc):
&gt; +        (NPN_MemFlush):
&gt; +        (NPN_PostURLNotify):
&gt; +        (NPN_PostURL):
&gt; +        (NPN_Write):
&gt; +        (NPN_ScheduleTimer):
&gt; +        (NPN_UnscheduleTimer):
&gt; +        (NPN_GetValueForURL):
&gt; +        (NPN_SetValueForURL):
&gt; +        (NPN_GetAuthenticationInfo):
&gt; +        (WKN_CheckIfAllowedToLoadURL):
&gt; +        (WKN_CancelCheckIfAllowedToLoadURL):
&gt; +
&gt;  2010-04-29  Anders Carlsson  &lt;andersca@apple.com&gt;
&gt;  
&gt;          Reviewed by Dan Bernstein.
&gt; Index: WebKit/mac/Plugins/WebBaseNetscapePluginStream.h
&gt; ===================================================================
&gt; --- WebKit/mac/Plugins/WebBaseNetscapePluginStream.h	(revision 58585)
&gt; +++ WebKit/mac/Plugins/WebBaseNetscapePluginStream.h	(working copy)
&gt; @@ -105,7 +105,7 @@ private:
&gt;  
&gt;      NPP m_plugin;
&gt;      uint16 m_transferMode;
&gt; -    int32 m_offset;
&gt; +    int32_t m_offset;
&gt;      NPStream m_stream;
&gt;      RetainPtr&lt;NSString&gt; m_path;
&gt;      int m_fileDescriptor;
&gt; Index: WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm
&gt; ===================================================================
&gt; --- WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm	(revision 58585)
&gt; +++ WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm	(working copy)
&gt; @@ -507,12 +507,12 @@ void WebNetscapePluginStream::deliverDat
&gt;  
&gt;      RefPtr&lt;WebNetscapePluginStream&gt; protect(this);
&gt;  
&gt; -    int32 totalBytes = [m_deliveryData.get() length];
&gt; -    int32 totalBytesDelivered = 0;
&gt; +    int32_t totalBytes = [m_deliveryData.get() length];
&gt; +    int32_t totalBytesDelivered = 0;
&gt;  
&gt;      while (totalBytesDelivered &lt; totalBytes) {
&gt;          PluginStopDeferrer deferrer(m_pluginView.get());
&gt; -        int32 deliveryBytes = m_pluginFuncs-&gt;writeready(m_plugin, &amp;m_stream);
&gt; +        int32_t deliveryBytes = m_pluginFuncs-&gt;writeready(m_plugin, &amp;m_stream);
&gt;          LOG(Plugins, &quot;NPP_WriteReady responseURL=%@ bytes=%d&quot;, m_responseURL.get(), deliveryBytes);
&gt;  
&gt;          if (m_isTerminated)
&gt; @@ -533,7 +533,7 @@ void WebNetscapePluginStream::deliverDat
&gt;                  cancelLoadAndDestroyStreamWithError(pluginCancelledConnectionError());
&gt;                  return;
&gt;              }
&gt; -            deliveryBytes = min&lt;int32&gt;(deliveryBytes, [subdata length]);
&gt; +            deliveryBytes = min&lt;int32_t&gt;(deliveryBytes, [subdata length]);
&gt;              m_offset += deliveryBytes;
&gt;              totalBytesDelivered += deliveryBytes;
&gt;              LOG(Plugins, &quot;NPP_Write responseURL=%@ bytes=%d total-delivered=%d/%d&quot;, m_responseURL.get(), deliveryBytes, m_offset, m_stream.end);
&gt; Index: WebKit/mac/Plugins/WebNetscapePluginView.h
&gt; ===================================================================
&gt; --- WebKit/mac/Plugins/WebNetscapePluginView.h	(revision 58585)
&gt; +++ WebKit/mac/Plugins/WebNetscapePluginView.h	(working copy)
&gt; @@ -89,13 +89,13 @@ @interface WebNetscapePluginView : WebBa
&gt;      BOOL inSetWindow;
&gt;      BOOL shouldStopSoon;
&gt;  
&gt; -    uint32 currentTimerID;
&gt; -    HashMap&lt;uint32, PluginTimer*&gt;* timers;
&gt; +    uint32_t currentTimerID;
&gt; +    HashMap&lt;uint32_t, PluginTimer*&gt;* timers;
&gt;  
&gt;      unsigned pluginFunctionCallDepth;
&gt;      
&gt; -    int32 specifiedHeight;
&gt; -    int32 specifiedWidth;
&gt; +    int32_t specifiedHeight;
&gt; +    int32_t specifiedWidth;
&gt;              
&gt;      HashSet&lt;RefPtr&lt;WebNetscapePluginStream&gt; &gt; streams;
&gt;      RetainPtr&lt;NSMutableDictionary&gt; _pendingFrameLoads;
&gt; @@ -104,7 +104,7 @@ @interface WebNetscapePluginView : WebBa
&gt;      BOOL _isSilverlight;
&gt;      
&gt;      NSMutableDictionary *_containerChecksInProgress;
&gt; -    uint32 _currentContainerCheckRequestID;
&gt; +    uint32_t _currentContainerCheckRequestID;
&gt;  }
&gt;  
&gt;  + (WebNetscapePluginView *)currentPluginView;
&gt; @@ -146,8 +146,8 @@ // Returns the NPObject that represents 
&gt;  - (void)handleMouseEntered:(NSEvent *)event;
&gt;  - (void)handleMouseExited:(NSEvent *)event;
&gt;  
&gt; -- (uint32)checkIfAllowedToLoadURL:(const char*)urlCString frame:(const char*)frameNameCString callbackFunc:(void (*)(NPP npp, uint32 checkID, NPBool allowed, void* context))callbackFunc context:(void*)context;
&gt; -- (void)cancelCheckIfAllowedToLoadURL:(uint32)checkID;
&gt; +- (uint32_t)checkIfAllowedToLoadURL:(const char*)urlCString frame:(const char*)frameNameCString callbackFunc:(void (*)(NPP npp, uint32_t checkID, NPBool allowed, void* context))callbackFunc context:(void*)context;
&gt; +- (void)cancelCheckIfAllowedToLoadURL:(uint32_t)checkID;
&gt;  
&gt;  @end
&gt;  
&gt; @@ -172,14 +172,14 @@ @interface WebNetscapePluginView (WebInt
&gt;  - (void)forceRedraw;
&gt;  - (NPError)getVariable:(NPNVariable)variable value:(void *)value;
&gt;  - (NPError)setVariable:(NPPVariable)variable value:(void *)value;
&gt; -- (uint32)scheduleTimerWithInterval:(uint32)interval repeat:(NPBool)repeat timerFunc:(void (*)(NPP npp, uint32 timerID))timerFunc;
&gt; -- (void)unscheduleTimer:(uint32)timerID;
&gt; +- (uint32_t)scheduleTimerWithInterval:(uint32_t)interval repeat:(NPBool)repeat timerFunc:(void (*)(NPP npp, uint32_t timerID))timerFunc;
&gt; +- (void)unscheduleTimer:(uint32_t)timerID;
&gt;  - (NPError)popUpContextMenu:(NPMenu *)menu;
&gt; -- (NPError)getVariable:(NPNURLVariable)variable forURL:(const char*)url value:(char**)value length:(uint32*)length;
&gt; -- (NPError)setVariable:(NPNURLVariable)variable forURL:(const char*)url value:(const char*)value length:(uint32)length;
&gt; -- (NPError)getAuthenticationInfoWithProtocol:(const char*) protocol host:(const char*)host port:(int32)port scheme:(const char*)scheme realm:(const char*)realm
&gt; -                                    username:(char**)username usernameLength:(uint32*)usernameLength 
&gt; -                                    password:(char**)password passwordLength:(uint32*)passwordLength;
&gt; +- (NPError)getVariable:(NPNURLVariable)variable forURL:(const char*)url value:(char**)value length:(uint32_t*)length;
&gt; +- (NPError)setVariable:(NPNURLVariable)variable forURL:(const char*)url value:(const char*)value length:(uint32_t)length;
&gt; +- (NPError)getAuthenticationInfoWithProtocol:(const char*) protocol host:(const char*)host port:(int32_t)port scheme:(const char*)scheme realm:(const char*)realm
&gt; +                                    username:(char**)username usernameLength:(uint32_t*)usernameLength 
&gt; +                                    password:(char**)password passwordLength:(uint32_t*)passwordLength;
&gt;  - (char*)resolveURL:(const char*)url forTarget:(const char*)target;
&gt;  @end
&gt;  
&gt; Index: WebKit/mac/Plugins/WebNetscapePluginView.mm
&gt; ===================================================================
&gt; --- WebKit/mac/Plugins/WebNetscapePluginView.mm	(revision 58585)
&gt; +++ WebKit/mac/Plugins/WebNetscapePluginView.mm	(working copy)
&gt; @@ -306,10 +306,10 @@ - (PortState)saveAndSetNewPortStateForUp
&gt;  #endif
&gt;      
&gt;      window.type = NPWindowTypeWindow;
&gt; -    window.x = (int32)boundsInWindow.origin.x; 
&gt; -    window.y = (int32)boundsInWindow.origin.y;
&gt; -    window.width = static_cast&lt;uint32&gt;(NSWidth(boundsInWindow));
&gt; -    window.height = static_cast&lt;uint32&gt;(NSHeight(boundsInWindow));
&gt; +    window.x = (int32_t)boundsInWindow.origin.x; 
&gt; +    window.y = (int32_t)boundsInWindow.origin.y;
&gt; +    window.width = static_cast&lt;uint32_t&gt;(NSWidth(boundsInWindow));
&gt; +    window.height = static_cast&lt;uint32_t&gt;(NSHeight(boundsInWindow));
&gt;      
&gt;      // &quot;Clip-out&quot; the plug-in when:
&gt;      // 1) it&apos;s not really in a window or off-screen or has no height or width.
&gt; @@ -2255,9 +2255,9 @@ - (NPError)setVariable:(NPNURLVariable)v
&gt;      return NPERR_GENERIC_ERROR;
&gt;  }
&gt;  
&gt; -- (NPError)getAuthenticationInfoWithProtocol:(const char*)protocolStr host:(const char*)hostStr port:(int32)port scheme:(const char*)schemeStr realm:(const char*)realmStr
&gt; -                                    username:(char**)usernameStr usernameLength:(uint32*)usernameLength 
&gt; -                                    password:(char**)passwordStr passwordLength:(uint32*)passwordLength
&gt; +- (NPError)getAuthenticationInfoWithProtocol:(const char*)protocolStr host:(const char*)hostStr port:(int32_t)port scheme:(const char*)schemeStr realm:(const char*)realmStr
&gt; +                                    username:(char**)usernameStr usernameLength:(uint32_t*)usernameLength 
&gt; +                                    password:(char**)passwordStr passwordLength:(uint32_t*)passwordLength
&gt;  {
&gt;      if (!protocolStr || !hostStr || !schemeStr || !realmStr || !usernameStr || !usernameLength || !passwordStr || !passwordLength)
&gt;          return NPERR_GENERIC_ERROR;
&gt; Index: WebKit/mac/Plugins/npapi.mm
&gt; ===================================================================
&gt; --- WebKit/mac/Plugins/npapi.mm	(revision 58585)
&gt; +++ WebKit/mac/Plugins/npapi.mm	(working copy)
&gt; @@ -39,7 +39,7 @@ WebNetscapePluginView *pluginViewForInst
&gt;  
&gt;  // general plug-in to browser functions
&gt;  
&gt; -void* NPN_MemAlloc(uint32 size)
&gt; +void* NPN_MemAlloc(uint32_t size)
&gt;  {
&gt;      return malloc(size);
&gt;  }
&gt; @@ -49,7 +49,7 @@ void NPN_MemFree(void* ptr)
&gt;      free(ptr);
&gt;  }
&gt;  
&gt; -uint32 NPN_MemFlush(uint32 size)
&gt; +uint32_t NPN_MemFlush(uint32_t size)
&gt;  {
&gt;      LOG(Plugins, &quot;NPN_MemFlush&quot;);
&gt;      return size;
&gt; @@ -89,12 +89,12 @@ NPError NPN_GetURL(NPP instance, const c
&gt;      return [pluginViewForInstance(instance) getURL:URL target:target];
&gt;  }
&gt;  
&gt; -NPError NPN_PostURLNotify(NPP instance, const char* URL, const char* target, uint32 len, const char* buf, NPBool file, void* notifyData)
&gt; +NPError NPN_PostURLNotify(NPP instance, const char* URL, const char* target, uint32_t len, const char* buf, NPBool file, void* notifyData)
&gt;  {
&gt;      return [pluginViewForInstance(instance) postURLNotify:URL target:target len:len buf:buf file:file notifyData:notifyData];
&gt;  }
&gt;  
&gt; -NPError NPN_PostURL(NPP instance, const char* URL, const char* target, uint32 len, const char* buf, NPBool file)
&gt; +NPError NPN_PostURL(NPP instance, const char* URL, const char* target, uint32_t len, const char* buf, NPBool file)
&gt;  {
&gt;      return [pluginViewForInstance(instance) postURL:URL target:target len:len buf:buf file:file];
&gt;  }
&gt; @@ -104,7 +104,7 @@ NPError NPN_NewStream(NPP instance, NPMI
&gt;      return [pluginViewForInstance(instance) newStream:type target:target stream:stream];
&gt;  }
&gt;  
&gt; -int32 NPN_Write(NPP instance, NPStream* stream, int32 len, void* buffer)
&gt; +int32_t NPN_Write(NPP instance, NPStream* stream, int32_t len, void* buffer)
&gt;  {
&gt;      return [pluginViewForInstance(instance) write:stream len:len buffer:buffer];
&gt;  }
&gt; @@ -176,12 +176,12 @@ void NPN_PluginThreadAsyncCall(NPP insta
&gt;      PluginMainThreadScheduler::scheduler().scheduleCall(instance, func, userData);
&gt;  }
&gt;  
&gt; -uint32 NPN_ScheduleTimer(NPP instance, uint32 interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32 timerID))
&gt; +uint32_t NPN_ScheduleTimer(NPP instance, uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID))
&gt;  {
&gt;      return [pluginViewForInstance(instance) scheduleTimerWithInterval:interval repeat:repeat timerFunc:timerFunc];
&gt;  }
&gt;  
&gt; -void NPN_UnscheduleTimer(NPP instance, uint32 timerID)
&gt; +void NPN_UnscheduleTimer(NPP instance, uint32_t timerID)
&gt;  {
&gt;      [pluginViewForInstance(instance) unscheduleTimer:timerID];
&gt;  }
&gt; @@ -191,17 +191,17 @@ NPError NPN_PopUpContextMenu(NPP instanc
&gt;      return [pluginViewForInstance(instance) popUpContextMenu:menu];
&gt;  }
&gt;  
&gt; -NPError NPN_GetValueForURL(NPP instance, NPNURLVariable variable, const char* url, char** value, uint32* len)
&gt; +NPError NPN_GetValueForURL(NPP instance, NPNURLVariable variable, const char* url, char** value, uint32_t* len)
&gt;  {
&gt;      return [pluginViewForInstance(instance) getVariable:variable forURL:url value:value length:len];
&gt;  }
&gt;  
&gt; -NPError NPN_SetValueForURL(NPP instance, NPNURLVariable variable, const char* url, const char* value, uint32 len)
&gt; +NPError NPN_SetValueForURL(NPP instance, NPNURLVariable variable, const char* url, const char* value, uint32_t len)
&gt;  {
&gt;      return [pluginViewForInstance(instance) setVariable:variable forURL:url value:value length:len];
&gt;  }
&gt;  
&gt; -NPError NPN_GetAuthenticationInfo(NPP instance, const char* protocol, const char* host, int32 port, const char* scheme, const char *realm, char** username, uint32* ulen, char** password, uint32* plen)
&gt; +NPError NPN_GetAuthenticationInfo(NPP instance, const char* protocol, const char* host, int32_t port, const char* scheme, const char *realm, char** username, uint32_t* ulen, char** password, uint32_t* plen)
&gt;  {
&gt;      return [pluginViewForInstance(instance) getAuthenticationInfoWithProtocol:protocol 
&gt;                                                                           host:host 
&gt; @@ -217,12 +217,12 @@ NPBool NPN_ConvertPoint(NPP instance, do
&gt;      return [pluginViewForInstance(instance) convertFromX:sourceX andY:sourceY space:sourceSpace toX:destX andY:destY space:destSpace];
&gt;  }
&gt;  
&gt; -uint32 WKN_CheckIfAllowedToLoadURL(NPP instance, const char* url, const char* frame, void (*callbackFunc)(NPP npp, uint32, NPBool, void*), void* context)
&gt; +uint32_t WKN_CheckIfAllowedToLoadURL(NPP instance, const char* url, const char* frame, void (*callbackFunc)(NPP npp, uint32_t, NPBool, void*), void* context)
&gt;  {
&gt;      return [pluginViewForInstance(instance) checkIfAllowedToLoadURL:url frame:frame callbackFunc:callbackFunc context:context];
&gt;  }
&gt;  
&gt; -void WKN_CancelCheckIfAllowedToLoadURL(NPP instance, uint32 checkID)
&gt; +void WKN_CancelCheckIfAllowedToLoadURL(NPP instance, uint32_t checkID)
&gt;  {
&gt;      [pluginViewForInstance(instance) cancelCheckIfAllowedToLoadURL:checkID];
&gt;  }
&gt; Index: WebKitTools/ChangeLog
&gt; ===================================================================
&gt; --- WebKitTools/ChangeLog	(revision 58588)
&gt; +++ WebKitTools/ChangeLog	(working copy)
&gt; @@ -1,3 +1,57 @@
&gt; +2010-04-30  Anders Carlsson  &lt;andersca@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Next step towards fixing
&gt; +        
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=20784
&gt; +        move npapi.h to C99 integer types
&gt; +
&gt; +        Use the C99 types everywhere. The &quot;old&quot; types are still around but will be removed
&gt; +        in a subsequent commit.
&gt; +
&gt; +        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
&gt; +        (int32VariantToIdentifier):
&gt; +        (doubleVariantToIdentifier):
&gt; +        (testIdentifierToInt):
&gt; +        (testGetIntIdentifier):
&gt; +        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
&gt; +        (NPP_New):
&gt; +        (NPP_NewStream):
&gt; +        (NPP_WriteReady):
&gt; +        (NPP_Write):
&gt; +        (NPP_HandleEvent):
&gt; +        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
&gt; +        (NPP_New):
&gt; +        (NPP_NewStream):
&gt; +        (NPP_WriteReady):
&gt; +        (NPP_Write):
&gt; +        (NPP_HandleEvent):
&gt; +
&gt; +2010-04-29  Anders Carlsson  &lt;andersca@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Need a short description and bug URL (OOPS!)
&gt; +
&gt; +        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp:
&gt; +        (int32VariantToIdentifier):
&gt; +        (doubleVariantToIdentifier):
&gt; +        (testIdentifierToInt):
&gt; +        (testGetIntIdentifier):
&gt; +        * DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp:
&gt; +        (NPP_New):
&gt; +        (NPP_NewStream):
&gt; +        (NPP_WriteReady):
&gt; +        (NPP_Write):
&gt; +        (NPP_HandleEvent):
&gt; +        * DumpRenderTree/win/TestNetscapePlugin/main.cpp:
&gt; +        (NPP_New):
&gt; +        (NPP_NewStream):
&gt; +        (NPP_WriteReady):
&gt; +        (NPP_Write):
&gt; +        (NPP_HandleEvent):
&gt; +
&gt;  2010-04-30  Steve Block  &lt;steveblock@google.com&gt;
&gt;  
&gt;          Reviewed by Jeremy Orlow.
&gt; Index: WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp
&gt; ===================================================================
&gt; --- WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp	(revision 58585)
&gt; +++ WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.cpp	(working copy)
&gt; @@ -357,7 +357,7 @@ static NPIdentifier stringVariantToIdent
&gt;  static NPIdentifier int32VariantToIdentifier(NPVariant variant)
&gt;  {
&gt;      assert(NPVARIANT_IS_INT32(variant));
&gt; -    int32 integer = NPVARIANT_TO_INT32(variant);
&gt; +    int32_t integer = NPVARIANT_TO_INT32(variant);
&gt;      return browser-&gt;getintidentifier(integer);
&gt;  }
&gt;  
&gt; @@ -366,7 +366,7 @@ static NPIdentifier doubleVariantToIdent
&gt;      assert(NPVARIANT_IS_DOUBLE(variant));
&gt;      double value = NPVARIANT_TO_DOUBLE(variant);
&gt;      // Sadly there is no &quot;getdoubleidentifier&quot;
&gt; -    int32 integer = static_cast&lt;int32&gt;(value);
&gt; +    int32_t integer = static_cast&lt;int32_t&gt;(value);
&gt;      return browser-&gt;getintidentifier(integer);
&gt;  }
&gt;  
&gt; @@ -402,7 +402,7 @@ static bool testIdentifierToInt(PluginOb
&gt;      NPIdentifier identifier = variantToIdentifier(args[0]);
&gt;      if (!identifier)
&gt;          return false;
&gt; -    int32 integer = browser-&gt;intfromidentifier(identifier);
&gt; +    int32_t integer = browser-&gt;intfromidentifier(identifier);
&gt;      INT32_TO_NPVARIANT(integer, *result);
&gt;      return true;
&gt;  }
&gt; @@ -552,7 +552,7 @@ static bool testGetIntIdentifier(PluginO
&gt;          return false;
&gt;  
&gt;      NPIdentifier identifier = browser-&gt;getintidentifier((int)NPVARIANT_TO_DOUBLE(args[0]));
&gt; -    INT32_TO_NPVARIANT((int32)(long long)identifier, *result);
&gt; +    INT32_TO_NPVARIANT((int32_t)(long long)identifier, *result);
&gt;      return true;
&gt;  }
&gt;  
&gt; Index: WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp
&gt; ===================================================================
&gt; --- WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp	(revision 58585)
&gt; +++ WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/main.cpp	(working copy)
&gt; @@ -66,7 +66,7 @@ void NP_Shutdown(void)
&gt;  
&gt;  static void executeScript(const PluginObject* obj, const char* script);
&gt;  
&gt; -NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char *argn[], char *argv[], NPSavedData *saved)
&gt; +NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char *argn[], char *argv[], NPSavedData *saved)
&gt;  {
&gt;      bool forceCarbon = false;
&gt;  
&gt; @@ -219,7 +219,7 @@ static void executeScript(const PluginOb
&gt;      browser-&gt;releasevariantvalue(&amp;browserResult);
&gt;  }
&gt;  
&gt; -NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream *stream, NPBool seekable, uint16 *stype)
&gt; +NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream *stream, NPBool seekable, uint16_t *stype)
&gt;  {
&gt;      PluginObject* obj = static_cast&lt;PluginObject*&gt;(instance-&gt;pdata);
&gt;      obj-&gt;stream = stream;
&gt; @@ -252,12 +252,12 @@ NPError NPP_DestroyStream(NPP instance, 
&gt;      return NPERR_NO_ERROR;
&gt;  }
&gt;  
&gt; -int32 NPP_WriteReady(NPP instance, NPStream *stream)
&gt; +int32_t NPP_WriteReady(NPP instance, NPStream *stream)
&gt;  {
&gt;      return 0;
&gt;  }
&gt;  
&gt; -int32 NPP_Write(NPP instance, NPStream *stream, int32 offset, int32 len, void *buffer)
&gt; +int32_t NPP_Write(NPP instance, NPStream *stream, int32_t offset, int32_t len, void *buffer)
&gt;  {
&gt;      return 0;
&gt;  }
&gt; @@ -401,7 +401,7 @@ static int16_t handleEventCocoa(NPP inst
&gt;      return 0;
&gt;  }
&gt;  
&gt; -int16 NPP_HandleEvent(NPP instance, void *event)
&gt; +int16_t NPP_HandleEvent(NPP instance, void *event)
&gt;  {
&gt;      PluginObject* obj = static_cast&lt;PluginObject*&gt;(instance-&gt;pdata);
&gt;      if (!obj-&gt;eventLogging)
&gt; Index: WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp
&gt; ===================================================================
&gt; --- WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp	(revision 58585)
&gt; +++ WebKitTools/DumpRenderTree/win/TestNetscapePlugin/main.cpp	(working copy)
&gt; @@ -85,13 +85,13 @@ static void executeScript(const PluginOb
&gt;      browser-&gt;releasevariantvalue(&amp;browserResult);
&gt;  }
&gt;  
&gt; -NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char *argn[], char *argv[], NPSavedData *saved)
&gt; +NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char *argn[], char *argv[], NPSavedData *saved)
&gt;  {
&gt;      if (browser-&gt;version &gt;= 14) {
&gt;          PluginObject* obj = (PluginObject*)browser-&gt;createobject(instance, getPluginClass());
&gt;          instance-&gt;pdata = obj;
&gt;  
&gt; -        for (int16 i = 0; i &lt; argc; i++) {
&gt; +        for (int16_t i = 0; i &lt; argc; i++) {
&gt;              if (_stricmp(argn[i], &quot;onstreamload&quot;) == 0 &amp;&amp; !obj-&gt;onStreamLoad)
&gt;                  obj-&gt;onStreamLoad = _strdup(argv[i]);
&gt;              else if (_stricmp(argn[i], &quot;onStreamDestroy&quot;) == 0 &amp;&amp; !obj-&gt;onStreamDestroy)
&gt; @@ -166,7 +166,7 @@ NPError NPP_SetWindow(NPP instance, NPWi
&gt;      return NPERR_NO_ERROR;
&gt;  }
&gt;  
&gt; -NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream *stream, NPBool seekable, uint16 *stype)
&gt; +NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream *stream, NPBool seekable, uint16_t *stype)
&gt;  {
&gt;      PluginObject* obj = (PluginObject*)instance-&gt;pdata;
&gt;  
&gt; @@ -196,12 +196,12 @@ NPError NPP_DestroyStream(NPP instance, 
&gt;      return NPERR_NO_ERROR;
&gt;  }
&gt;  
&gt; -int32 NPP_WriteReady(NPP instance, NPStream *stream)
&gt; +int32_t NPP_WriteReady(NPP instance, NPStream *stream)
&gt;  {
&gt;      return 0;
&gt;  }
&gt;  
&gt; -int32 NPP_Write(NPP instance, NPStream *stream, int32 offset, int32 len, void *buffer)
&gt; +int32_t NPP_Write(NPP instance, NPStream *stream, int32_t offset, int32_t len, void *buffer)
&gt;  {
&gt;      return 0;
&gt;  }
&gt; @@ -214,7 +214,7 @@ void NPP_Print(NPP instance, NPPrint *pl
&gt;  {
&gt;  }
&gt;  
&gt; -int16 NPP_HandleEvent(NPP instance, void *event)
&gt; +int16_t NPP_HandleEvent(NPP instance, void *event)
&gt;  {
&gt;      PluginObject *obj = (PluginObject*)instance-&gt;pdata;
&gt;      if (!obj-&gt;eventLogging)
WebKitTools/ChangeLog:35
 +          Need a short description and bug URL (OOPS!)
Double change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219566</commentid>
    <comment_count>13</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-04-30 12:11:25 -0700</bug_when>
    <thetext>Attachment 54816 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/1921071</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219568</commentid>
    <comment_count>14</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-30 12:17:20 -0700</bug_when>
    <thetext>Committed r58590: &lt;http://trac.webkit.org/changeset/58590&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219570</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-30 12:22:27 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58590 might have broken Qt Linux Release minimal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219585</commentid>
    <comment_count>16</comment_count>
      <attachid>54816</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-30 13:05:45 -0700</bug_when>
    <thetext>Comment on attachment 54816
Patch

Breaks Qt -- see EWS output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219589</commentid>
    <comment_count>17</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-30 13:09:56 -0700</bug_when>
    <thetext>Both the Qt and GTK+ builds have been fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219602</commentid>
    <comment_count>18</comment_count>
      <attachid>54824</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-30 13:38:48 -0700</bug_when>
    <thetext>Created attachment 54824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219603</commentid>
    <comment_count>19</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-04-30 13:49:18 -0700</bug_when>
    <thetext>Attachment 54824 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/1809218</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219604</commentid>
    <comment_count>20</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-04-30 13:49:27 -0700</bug_when>
    <thetext>Committed r58598: &lt;http://trac.webkit.org/changeset/58598&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219606</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-30 13:54:46 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58598 might have broken Qt Linux ARMv5 Release and Qt Linux ARMv7 Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23355</attachid>
            <date>2008-09-11 11:52:34 -0700</date>
            <delta_ts>2010-04-29 15:01:35 -0700</delta_ts>
            <desc>fix v1.0</desc>
            <filename>webkit_npapi_types1.patch</filename>
            <type>text/plain</type>
            <size>46510</size>
            <attacher name="Josh Aas">joshmoz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvUGx1Z2lucy9ucGFwaS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL1BsdWdpbnMvbnBhcGkubW0JKHJldmlzaW9uIDM2MzMzKQorKysgV2ViS2l0L21hYy9QbHVn
aW5zL25wYXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAKIC8vIGdlbmVy
YWwgcGx1Zy1pbiB0byBicm93c2VyIGZ1bmN0aW9ucwogCi12b2lkKiBOUE5fTWVtQWxsb2ModWlu
dDMyIHNpemUpCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyX3Qgc2l6ZSkKIHsKICAgICByZXR1
cm4gbWFsbG9jKHNpemUpOwogfQpAQCAtNTAsNyArNTAsNyBAQAogICAgIGZyZWUocHRyKTsKIH0K
IAotdWludDMyIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSkKK3VpbnQzMl90IE5QTl9NZW1GbHVz
aCh1aW50MzJfdCBzaXplKQogewogICAgIExPRyhQbHVnaW5zLCAiTlBOX01lbUZsdXNoIik7CiAg
ICAgcmV0dXJuIHNpemU7CkBAIC05MCwxMiArOTAsMTIgQEAKICAgICByZXR1cm4gW3BsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZ2V0VVJMOlVSTCB0YXJnZXQ6dGFyZ2V0XTsKIH0KIAot
TlBFcnJvciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhKQorTlBFcnJvciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5z
dGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4s
IGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCiB7CiAgICAg
cmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIHBvc3RVUkxOb3RpZnk6VVJM
IHRhcmdldDp0YXJnZXQgbGVuOmxlbiBidWY6YnVmIGZpbGU6ZmlsZSBub3RpZnlEYXRhOm5vdGlm
eURhdGFdOwogfQogCi1OUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogVVJMLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
TlBCb29sIGZpbGUpCitOUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogVVJMLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVm
LCBOUEJvb2wgZmlsZSkKIHsKICAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSkgcG9zdFVSTDpVUkwgdGFyZ2V0OnRhcmdldCBsZW46bGVuIGJ1ZjpidWYgZmlsZTpmaWxl
XTsKIH0KQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIHJldHVybiBbcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKSBuZXdTdHJlYW06dHlwZSB0YXJnZXQ6dGFyZ2V0IHN0cmVhbTpzdHJlYW1d
OwogfQogCi1pbnQzMiBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBp
bnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcikKK2ludDMyX3QgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwg
TlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcikKIHsKICAgICByZXR1
cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgd3JpdGU6c3RyZWFtIGxlbjpsZW4g
YnVmZmVyOmJ1ZmZlcl07CiB9CkBAIC0xNzcsMTIgKzE3NywxMiBAQAogICAgIFBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnNjaGVkdWxlQ2FsbChpbnN0YW5jZSwgZnVuYywg
dXNlckRhdGEpOwogfQogCi11aW50MzIgTlBOX1NjaGVkdWxlVGltZXIoTlBQIGluc3RhbmNlLCB1
aW50MzIgaW50ZXJ2YWwsIE5QQm9vbCByZXBlYXQsIHZvaWQgKCp0aW1lckZ1bmMpKE5QUCBucHAs
IHVpbnQzMiB0aW1lcklEKSkKK3VpbnQzMl90IE5QTl9TY2hlZHVsZVRpbWVyKE5QUCBpbnN0YW5j
ZSwgdWludDMyX3QgaW50ZXJ2YWwsIE5QQm9vbCByZXBlYXQsIHZvaWQgKCp0aW1lckZ1bmMpKE5Q
UCBucHAsIHVpbnQzMl90IHRpbWVySUQpKQogewogICAgIHJldHVybiBbcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKSBzY2hlZHVsZVRpbWVyV2l0aEludGVydmFsOmludGVydmFsIHJlcGVh
dDpyZXBlYXQgdGltZXJGdW5jOnRpbWVyRnVuY107CiB9CiAKLXZvaWQgTlBOX1Vuc2NoZWR1bGVU
aW1lcihOUFAgaW5zdGFuY2UsIHVpbnQzMiB0aW1lcklEKQordm9pZCBOUE5fVW5zY2hlZHVsZVRp
bWVyKE5QUCBpbnN0YW5jZSwgdWludDMyX3QgdGltZXJJRCkKIHsKICAgICBbcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKSB1bnNjaGVkdWxlVGltZXI6dGltZXJJRF07CiB9CkluZGV4OiBX
ZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0J
KHJldmlzaW9uIDM2MzMzKQorKysgV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBs
dWdpblN0cmVhbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgW3N1
cGVyIGZpbmFsaXplXTsKIH0KIAotLSAodWludDE2KXRyYW5zZmVyTW9kZQorLSAodWludDE2X3Qp
dHJhbnNmZXJNb2RlCiB7CiAgICAgcmV0dXJuIHRyYW5zZmVyTW9kZTsKIH0KQEAgLTI0OSw4ICsy
NDksOCBAQAogICAgIHN0cmVhbS51cmwgPSBzdHJkdXAoW3Jlc3BvbnNlVVJMIF93ZWJfVVJMQ1N0
cmluZ10pOwogCiAgICAgc3RyZWFtLm5kYXRhID0gc2VsZjsKLSAgICBzdHJlYW0uZW5kID0gZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID4gMCA/ICh1aW50MzIpZXhwZWN0ZWRDb250ZW50TGVuZ3RoIDog
MDsKLSAgICBzdHJlYW0ubGFzdG1vZGlmaWVkID0gKHVpbnQzMilbbGFzdE1vZGlmaWVkRGF0ZSB0
aW1lSW50ZXJ2YWxTaW5jZTE5NzBdOworICAgIHN0cmVhbS5lbmQgPSBleHBlY3RlZENvbnRlbnRM
ZW5ndGggPiAwID8gKHVpbnQzMl90KWV4cGVjdGVkQ29udGVudExlbmd0aCA6IDA7CisgICAgc3Ry
ZWFtLmxhc3Rtb2RpZmllZCA9ICh1aW50MzJfdClbbGFzdE1vZGlmaWVkRGF0ZSB0aW1lSW50ZXJ2
YWxTaW5jZTE5NzBdOwogICAgIHN0cmVhbS5ub3RpZnlEYXRhID0gbm90aWZ5RGF0YTsKIAogICAg
IGlmICh0aGVIZWFkZXJzKSB7CkBAIC01MDIsMTMgKzUwMiwxMyBAQAogCiAgICAgW3NlbGYgcmV0
YWluXTsKIAotICAgIGludDMyIHRvdGFsQnl0ZXMgPSBbZGVsaXZlcnlEYXRhIGxlbmd0aF07Ci0g
ICAgaW50MzIgdG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7CisgICAgaW50MzJfdCB0b3RhbEJ5dGVz
ID0gW2RlbGl2ZXJ5RGF0YSBsZW5ndGhdOworICAgIGludDMyX3QgdG90YWxCeXRlc0RlbGl2ZXJl
ZCA9IDA7CiAKICAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsK
ICAgICAgICAgV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqcHYgPSBwbHVnaW5WaWV3OwogICAg
ICAgICBbcHYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07Ci0gICAgICAgIGludDMyIGRlbGl2ZXJ5
Qnl0ZXMgPSBOUFBfV3JpdGVSZWFkeShwbHVnaW4sICZzdHJlYW0pOworICAgICAgICBpbnQzMl90
IGRlbGl2ZXJ5Qnl0ZXMgPSBOUFBfV3JpdGVSZWFkeShwbHVnaW4sICZzdHJlYW0pOwogICAgICAg
ICBbcHYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgTE9HKFBsdWdpbnMsICJOUFBf
V3JpdGVSZWFkeSByZXNwb25zZVVSTD0lQCBieXRlcz0lZCIsIHJlc3BvbnNlVVJMLCBkZWxpdmVy
eUJ5dGVzKTsKIApJbmRleDogV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2Nh
cGVQbHVnaW5TdHJlYW0uaAkocmV2aXNpb24gMzYzMzMpCisrKyBXZWJLaXQvbWFjL1BsdWdpbnMv
V2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDggQEAKICAgICBOU1N0cmluZyAqTUlNRVR5cGU7CiAgICAgCiAgICAgTlBQIHBsdWdpbjsKLSAg
ICB1aW50MTYgdHJhbnNmZXJNb2RlOwotICAgIGludDMyIG9mZnNldDsKKyAgICB1aW50MTZfdCB0
cmFuc2Zlck1vZGU7CisgICAgaW50MzJfdCBvZmZzZXQ7CiAgICAgTlBTdHJlYW0gc3RyZWFtOwog
ICAgIE5TU3RyaW5nICpwYXRoOwogICAgIGludCBmaWxlRGVzY3JpcHRvcjsKQEAgLTc5LDcgKzc5
LDcgQEAKIC0gKHZvaWQpc2V0UmVzcG9uc2VVUkw6KE5TVVJMICopdGhlUmVzcG9uc2VVUkw7CiAt
ICh2b2lkKXNldFBsdWdpbjooTlBQKXRoZVBsdWdpbjsKIAotLSAodWludDE2KXRyYW5zZmVyTW9k
ZTsKKy0gKHVpbnQxNl90KXRyYW5zZmVyTW9kZTsKIC0gKE5QUClwbHVnaW47CiAKIC0gKHZvaWQp
c3RhcnRTdHJlYW1SZXNwb25zZVVSTDooTlNVUkwgKil0aGVSZXNwb25zZVVSTApJbmRleDogV2Vi
S2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaAkocmV2aXNpb24g
MzYzMzMpCisrKyBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAKICAgICBOUFBsdWdpbkZ1bmNzIHBsdWdp
bkZ1bmNzOwogICAgIE5QTmV0c2NhcGVGdW5jcyBicm93c2VyRnVuY3M7CiAgICAgCi0gICAgdWlu
dDE2IHBsdWdpblNpemU7Ci0gICAgdWludDE2IHBsdWdpblZlcnNpb247CisgICAgdWludDE2X3Qg
cGx1Z2luU2l6ZTsKKyAgICB1aW50MTZfdCBwbHVnaW5WZXJzaW9uOwogICAgIAogICAgIFJlc0Zp
bGVSZWZOdW0gcmVzb3VyY2VSZWY7CiAgICAgCkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCShyZXZpc2lvbiAzNjMzMykKKysrIFdlYktpdC9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubQkod29ya2luZyBjb3B5KQpAQCAt
NzE5LDExICs3MTksMTEgQEAKIAogRnVuY3Rpb25Qb2ludGVyIGZ1bmN0aW9uUG9pbnRlckZvclRW
ZWN0b3IoVHJhbnNpdGlvblZlY3RvciB0dnApCiB7Ci0gICAgY29uc3QgdWludDMyIHRlbXBbNl0g
PSB7MHgzRDgwMDAwMCwgMHg2MThDMDAwMCwgMHg4MDBDMDAwMCwgMHg4MDRDMDAwNCwgMHg3QzA5
MDNBNiwgMHg0RTgwMDQyMH07Ci0gICAgdWludDMyICpuZXdHbHVlID0gTlVMTDsKKyAgICBjb25z
dCB1aW50MzJfdCB0ZW1wWzZdID0gezB4M0Q4MDAwMDAsIDB4NjE4QzAwMDAsIDB4ODAwQzAwMDAs
IDB4ODA0QzAwMDQsIDB4N0MwOTAzQTYsIDB4NEU4MDA0MjB9OworICAgIHVpbnQzMl90ICpuZXdH
bHVlID0gTlVMTDsKIAogICAgIGlmICh0dnAgIT0gTlVMTCkgewotICAgICAgICBuZXdHbHVlID0g
KHVpbnQzMiAqKW1hbGxvYyhzaXplb2YodGVtcCkpOworICAgICAgICBuZXdHbHVlID0gKHVpbnQz
Ml90ICopbWFsbG9jKHNpemVvZih0ZW1wKSk7CiAgICAgICAgIGlmIChuZXdHbHVlICE9IE5VTEwp
IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
NjsgaSsrKSBuZXdHbHVlW2ldID0gdGVtcFtpXTsKSW5kZXg6IFdlYktpdC9tYWMvUGx1Z2lucy9X
ZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVn
aW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaAkocmV2aXNpb24gMzYzMzMpCisrKyBXZWJL
aXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsMTUgKzEwMiwxNSBAQAogICAgIEJPT0wgc2hvdWxkU3RvcFNvb247CiAKICAgICBC
T09MIHNob3VsZEZpcmVUaW1lcnM7Ci0gICAgdWludDMyIGN1cnJlbnRUaW1lcklEOwotICAgIEhh
c2hNYXA8dWludDMyLCBQbHVnaW5UaW1lcio+KiB0aW1lcnM7CisgICAgdWludDMyX3QgY3VycmVu
dFRpbWVySUQ7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPiogdGltZXJzOwog
CiAgICAgdW5zaWduZWQgcGx1Z2luRnVuY3Rpb25DYWxsRGVwdGg7CiAgICAgCiAgICAgRE9NRWxl
bWVudCAqZWxlbWVudDsKICAgICAKLSAgICBpbnQzMiBzcGVjaWZpZWRIZWlnaHQ7Ci0gICAgaW50
MzIgc3BlY2lmaWVkV2lkdGg7CisgICAgaW50MzJfdCBzcGVjaWZpZWRIZWlnaHQ7CisgICAgaW50
MzJfdCBzcGVjaWZpZWRXaWR0aDsKICAgICAgICAgICAgIAogICAgIE5TU3RyaW5nICpNSU1FVHlw
ZTsKICAgICBOU1VSTCAqYmFzZVVSTDsKSW5kZXg6IFdlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNl
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9X
ZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAzNjMzMykKKysrIFdlYktpdC9t
YWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjQsOSArMTI0LDkgQEAKIAogY2xhc3MgUGx1Z2luVGltZXIgOiBwdWJsaWMgVGltZXJCYXNl
IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpUaW1lckZ1bmMpKE5QUCBucHAsIHVpbnQz
MiB0aW1lcklEKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpUaW1lckZ1bmMpKE5QUCBucHAsIHVpbnQz
Ml90IHRpbWVySUQpOwogICAgIAotICAgIFBsdWdpblRpbWVyKE5QUCBucHAsIHVpbnQzMiB0aW1l
cklELCB1aW50MzIgaW50ZXJ2YWwsIE5QQm9vbCByZXBlYXQsIFRpbWVyRnVuYyB0aW1lckZ1bmMp
CisgICAgUGx1Z2luVGltZXIoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJRCwgdWludDMyX3QgaW50
ZXJ2YWwsIE5QQm9vbCByZXBlYXQsIFRpbWVyRnVuYyB0aW1lckZ1bmMpCiAgICAgICAgIDogbV9u
cHAobnBwKQogICAgICAgICAsIG1fdGltZXJJRCh0aW1lcklEKQogICAgICAgICAsIG1faW50ZXJ2
YWwoaW50ZXJ2YWwpCkBAIC0xNTQsMTAgKzE1NCwxMCBAQAogICAgICAgICAgICAgZGVsZXRlIHRo
aXM7CiAgICAgfQogICAgIAotICAgIE5QUCBtX25wcDsKLSAgICB1aW50MzIgbV90aW1lcklEOwot
ICAgIHVpbnQzMiBtX2ludGVydmFsOwotICAgIE5QQm9vbCBtX3JlcGVhdDsKKyAgICBOUFAgICAg
ICBtX25wcDsKKyAgICB1aW50MzJfdCBtX3RpbWVySUQ7CisgICAgdWludDMyX3QgbV9pbnRlcnZh
bDsKKyAgICBOUEJvb2wgICBtX3JlcGVhdDsKICAgICBUaW1lckZ1bmMgbV90aW1lckZ1bmM7CiB9
OwogCkBAIC0yOTgsMjAgKzI5OCwyMCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0TlBSZWN0
KGNvbnN0IENHUmVjdCYgY2dyLCBOUFJlY3QmIG5wcikKIHsKLSAgICBucHIudG9wID0gc3RhdGlj
X2Nhc3Q8dWludDE2PihjZ3Iub3JpZ2luLnkpOwotICAgIG5wci5sZWZ0ID0gc3RhdGljX2Nhc3Q8
dWludDE2PihjZ3Iub3JpZ2luLngpOwotICAgIG5wci5ib3R0b20gPSBzdGF0aWNfY2FzdDx1aW50
MTY+KENHUmVjdEdldE1heFkoY2dyKSk7Ci0gICAgbnByLnJpZ2h0ID0gc3RhdGljX2Nhc3Q8dWlu
dDE2PihDR1JlY3RHZXRNYXhYKGNncikpOworICAgIG5wci50b3AgPSBzdGF0aWNfY2FzdDx1aW50
MTZfdD4oY2dyLm9yaWdpbi55KTsKKyAgICBucHIubGVmdCA9IHN0YXRpY19jYXN0PHVpbnQxNl90
PihjZ3Iub3JpZ2luLngpOworICAgIG5wci5ib3R0b20gPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4o
Q0dSZWN0R2V0TWF4WShjZ3IpKTsKKyAgICBucHIucmlnaHQgPSBzdGF0aWNfY2FzdDx1aW50MTZf
dD4oQ0dSZWN0R2V0TWF4WChjZ3IpKTsKIH0KIAogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBnZXROUFJlY3QoY29uc3QgTlNSZWN0JiBuciwgTlBSZWN0JiBucHIpCiB7Ci0gICAgbnByLnRv
cCA9IHN0YXRpY19jYXN0PHVpbnQxNj4obnIub3JpZ2luLnkpOwotICAgIG5wci5sZWZ0ID0gc3Rh
dGljX2Nhc3Q8dWludDE2Pihuci5vcmlnaW4ueCk7Ci0gICAgbnByLmJvdHRvbSA9IHN0YXRpY19j
YXN0PHVpbnQxNj4oTlNNYXhZKG5yKSk7Ci0gICAgbnByLnJpZ2h0ID0gc3RhdGljX2Nhc3Q8dWlu
dDE2PihOU01heFgobnIpKTsKKyAgICBucHIudG9wID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KG5y
Lm9yaWdpbi55KTsKKyAgICBucHIubGVmdCA9IHN0YXRpY19jYXN0PHVpbnQxNl90Pihuci5vcmln
aW4ueCk7CisgICAgbnByLmJvdHRvbSA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihOU01heFkobnIp
KTsKKyAgICBucHIucmlnaHQgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oTlNNYXhYKG5yKSk7CiB9
CiAKIC0gKE5TUmVjdCl2aXNpYmxlUmVjdApAQCAtMzU5LDEwICszNTksMTAgQEAKICAgICB9CiAj
ZW5kaWYKICAgICAKLSAgICB3aW5kb3cueCA9IChpbnQzMilib3VuZHNJbldpbmRvdy5vcmlnaW4u
eDsgCi0gICAgd2luZG93LnkgPSAoaW50MzIpYm91bmRzSW5XaW5kb3cub3JpZ2luLnk7Ci0gICAg
d2luZG93LndpZHRoID0gc3RhdGljX2Nhc3Q8dWludDMyPihOU1dpZHRoKGJvdW5kc0luV2luZG93
KSk7Ci0gICAgd2luZG93LmhlaWdodCA9IHN0YXRpY19jYXN0PHVpbnQzMj4oTlNIZWlnaHQoYm91
bmRzSW5XaW5kb3cpKTsKKyAgICB3aW5kb3cueCA9IChpbnQzMl90KWJvdW5kc0luV2luZG93Lm9y
aWdpbi54OyAKKyAgICB3aW5kb3cueSA9IChpbnQzMl90KWJvdW5kc0luV2luZG93Lm9yaWdpbi55
OworICAgIHdpbmRvdy53aWR0aCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihOU1dpZHRoKGJvdW5k
c0luV2luZG93KSk7CisgICAgd2luZG93LmhlaWdodCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihO
U0hlaWdodChib3VuZHNJbldpbmRvdykpOwogICAgIAogICAgIC8vICJDbGlwLW91dCIgdGhlIHBs
dWctaW4gd2hlbjoKICAgICAvLyAxKSBpdCdzIG5vdCByZWFsbHkgaW4gYSB3aW5kb3cgb3Igb2Zm
LXNjcmVlbiBvciBoYXMgbm8gaGVpZ2h0IG9yIHdpZHRoLgpAQCAtNDA2LDggKzQwNiw4IEBACiAg
ICAgICAgICAgICBDR3JhZlB0ciBwb3J0ID0gR2V0V2luZG93UG9ydCh3aW5kb3dSZWYpOwogICAg
ICAgICAgICAgR2V0UG9ydEJvdW5kcyhwb3J0LCAmcG9ydEJvdW5kcyk7CiAgICAgICAgICAgICBu
UG9ydC5xZFBvcnQucG9ydCA9IHBvcnQ7Ci0gICAgICAgICAgICBuUG9ydC5xZFBvcnQucG9ydHgg
PSAoaW50MzIpLWJvdW5kc0luV2luZG93Lm9yaWdpbi54OwotICAgICAgICAgICAgblBvcnQucWRQ
b3J0LnBvcnR5ID0gKGludDMyKS1ib3VuZHNJbldpbmRvdy5vcmlnaW4ueTsKKyAgICAgICAgICAg
IG5Qb3J0LnFkUG9ydC5wb3J0eCA9IChpbnQzMl90KS1ib3VuZHNJbldpbmRvdy5vcmlnaW4ueDsK
KyAgICAgICAgICAgIG5Qb3J0LnFkUG9ydC5wb3J0eSA9IChpbnQzMl90KS1ib3VuZHNJbldpbmRv
dy5vcmlnaW4ueTsKICAgICAgICAgICAgIHdpbmRvdy53aW5kb3cgPSAmblBvcnQ7CiAKICAgICAg
ICAgICAgIFBvcnRTdGF0ZV9RRCAqcWRQb3J0U3RhdGUgPSAoUG9ydFN0YXRlX1FEKiltYWxsb2Mo
c2l6ZW9mKFBvcnRTdGF0ZV9RRCkpOwpAQCAtNDY5LDggKzQ2OSw4IEBACiAgICAgICAgICAgICAg
ICAgICAgICAgICBvcmlnaW4ueCA9IG9mZnNjcmVlbkJvdW5kcy5sZWZ0IC0gb3JpZ2luLnggKiAo
YXhpc0ZsaXAueCAtIG9yaWdpbi54KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbi55
ID0gb2Zmc2NyZWVuQm91bmRzLmJvdHRvbSArIG9yaWdpbi55ICogKGF4aXNGbGlwLnkgLSBvcmln
aW4ueSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
IG5Qb3J0LnFkUG9ydC5wb3J0eCA9IHN0YXRpY19jYXN0PGludDMyPigtYm91bmRzSW5XaW5kb3cu
b3JpZ2luLnggKyBvcmlnaW4ueCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuUG9ydC5xZFBv
cnQucG9ydHkgPSBzdGF0aWNfY2FzdDxpbnQzMj4oLWJvdW5kc0luV2luZG93Lm9yaWdpbi55IC0g
b3JpZ2luLnkpOworICAgICAgICAgICAgICAgICAgICAgICAgblBvcnQucWRQb3J0LnBvcnR4ID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4oLWJvdW5kc0luV2luZG93Lm9yaWdpbi54ICsgb3JpZ2luLngp
OworICAgICAgICAgICAgICAgICAgICAgICAgblBvcnQucWRQb3J0LnBvcnR5ID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oLWJvdW5kc0luV2luZG93Lm9yaWdpbi55IC0gb3JpZ2luLnkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93LnggPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAg
d2luZG93LnkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LndpbmRvdyA9ICZu
UG9ydDsKQEAgLTc5Niw4ICs3OTYsOCBAQAogICAgIGlmICghdGltZXJzKQogICAgICAgICByZXR1
cm47CiAKLSAgICBIYXNoTWFwPHVpbnQzMiwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gdGltZXJzLT5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8dWludDMyLCBQbHVnaW5UaW1l
cio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGltZXIqPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gdGltZXJzLT5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRp
bWVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGltZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVyID0gaXQtPnNlY29uZDsKICAgICAgICAg
dGltZXItPnN0b3AoKTsKICAgICB9ICAgIApAQCAtODIyLDggKzgyMiw4IEBACiAgICAgaWYgKCF0
aW1lcnMpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBIYXNoTWFwPHVpbnQzMiwgUGx1Z2lu
VGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGltZXJzLT5lbmQoKTsKLSAgICBmb3IgKEhh
c2hNYXA8dWludDMyLCBQbHVnaW5UaW1lcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbWVycy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2lu
VGltZXIqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGltZXJzLT5lbmQoKTsKKyAgICBmb3IgKEhh
c2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGltZXJz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgUGx1Z2luVGltZXIqIHRpbWVy
ID0gaXQtPnNlY29uZDsKICAgICAgICAgQVNTRVJUKCF0aW1lci0+aXNBY3RpdmUoKSk7CiAgICAg
ICAgIHRpbWVyLT5zdGFydChpc0NvbXBsZXRlbHlPYnNjdXJlZCk7CkBAIC0yNzM1LDE1ICsyNzM1
LDE1IEBACiAgICAgfQogfQogCi0tICh1aW50MzIpc2NoZWR1bGVUaW1lcldpdGhJbnRlcnZhbDoo
dWludDMyKWludGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVhdCB0aW1lckZ1bmM6KHZvaWQgKCop
KE5QUCBucHAsIHVpbnQzMiB0aW1lcklEKSl0aW1lckZ1bmMKKy0gKHVpbnQzMl90KXNjaGVkdWxl
VGltZXJXaXRoSW50ZXJ2YWw6KHVpbnQzMl90KWludGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVh
dCB0aW1lckZ1bmM6KHZvaWQgKCopKE5QUCBucHAsIHVpbnQzMl90IHRpbWVySUQpKXRpbWVyRnVu
YwogewogICAgIGlmICghdGltZXJGdW5jKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBp
ZiAoIXRpbWVycykKLSAgICAgICAgdGltZXJzID0gbmV3IEhhc2hNYXA8dWludDMyLCBQbHVnaW5U
aW1lcio+OworICAgICAgICB0aW1lcnMgPSBuZXcgSGFzaE1hcDx1aW50MzJfdCwgUGx1Z2luVGlt
ZXIqPjsKICAgICAKLSAgICB1aW50MzIgdGltZXJJRCA9ICsrY3VycmVudFRpbWVySUQ7CisgICAg
dWludDMyX3QgdGltZXJJRCA9ICsrY3VycmVudFRpbWVySUQ7CiAgICAgCiAgICAgUGx1Z2luVGlt
ZXIqIHRpbWVyID0gbmV3IFBsdWdpblRpbWVyKHBsdWdpbiwgdGltZXJJRCwgaW50ZXJ2YWwsIHJl
cGVhdCwgdGltZXJGdW5jKTsKICAgICB0aW1lcnMtPnNldCh0aW1lcklELCB0aW1lcik7CkBAIC0y
NzU0LDcgKzI3NTQsNyBAQAogICAgIHJldHVybiAwOwogfQogCi0tICh2b2lkKXVuc2NoZWR1bGVU
aW1lcjoodWludDMyKXRpbWVySUQKKy0gKHZvaWQpdW5zY2hlZHVsZVRpbWVyOih1aW50MzJfdCl0
aW1lcklECiB7CiAgICAgaWYgKCF0aW1lcnMpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuaAkocmV2aXNpb24gMzYzMzMpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTAgKzExNSwxMCBAQAogICAgICAgICAvLyBOUE4g
ZnVuY3Rpb25zCiAgICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKICAgICAgICAgTlBFcnJvciBn
ZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOwotICAgICAgICBOUEVy
cm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVp
bnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEp
OwotICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOworICAgICAg
ICBOUEVycm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90
aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxl
KTsKICAgICAgICAgTlBFcnJvciBuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFy
KiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKTsKLSAgICAgICAgaW50MzIgd3JpdGUoTlBTdHJl
YW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpOworICAgICAgICBpbnQzMl90IHdy
aXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwogICAgICAg
ICBOUEVycm9yIGRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29u
KTsKICAgICAgICAgY29uc3QgY2hhciogdXNlckFnZW50KCk7CiAjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCkBAIC0xODIsOCArMTgyLDggQEAKICAgICAgICAgdm9pZCBzdG9wKCk7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKICAg
ICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOwotICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3Qo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNo
YXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRp
b24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKLSAgICAgICAgTlBFcnJvciBoYW5kbGVQb3N0UmVhZEZp
bGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Zik7Cisg
ICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90
aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7CisgICAg
ICAgIE5QRXJyb3IgaGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50
MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1Zik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGZyZWVTdHJp
bmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpOwogICAgICAgICB2b2lkIHNl
dENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5W
aWV3UXQuY3BwCShyZXZpc2lvbiAzNjMzMykKKysrIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5W
aWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAKICAgICByZXR1cm4g
TW96aWxsYVVzZXJBZ2VudDsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVh
ZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikK
K05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVm
ZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKIHsKICAgICBTdHJpbmcgZmlsZW5h
bWUoYnVmLCBsZW4pOwogCkBAIC0zMTMsMTUgKzMxMywxNSBAQAogewogICAgIHN3aXRjaCAodmFy
aWFibGUpIHsKICAgICBjYXNlIE5QTlZUb29sa2l0OgotICAgICAgICAqKCh1aW50MzIgKil2YWx1
ZSkgPSAwOworICAgICAgICAqKCh1aW50MzJfdCAqKXZhbHVlKSA9IDA7CiAgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKIAogICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKLSAg
ICAgICAgKigodWludDMyICopdmFsdWUpID0gdHJ1ZTsKKyAgICAgICAgKigodWludDMyX3QgKil2
YWx1ZSkgPSB0cnVlOwogICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiAKICAgICBjYXNl
IE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6Ci0gICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9
IHRydWU7CisgICAgICAgICooKHVpbnQzMl90ICopdmFsdWUpID0gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOwogCiAgICAgZGVmYXVsdDoKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMzYzMzMpCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNyArMzIyLDcgQEAK
ICAgICByZXR1cm4gTW96aWxsYVVzZXJBZ2VudDsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3Ojpo
YW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMiBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZikKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKIHsKICAgICBT
dHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOwogCkBAIC0zNTYsMjIgKzM1NiwyMiBAQAogICAgIHN3
aXRjaCAodmFyaWFibGUpIHsKICAgICBjYXNlIE5QTlZUb29sa2l0OgogI2lmIFBMQVRGT1JNKEdU
SykKLSAgICAgICAgKigodWludDMyICopdmFsdWUpID0gMjsKKyAgICAgICAgKigodWludDMyX3Qg
Kil2YWx1ZSkgPSAyOwogI2Vsc2UKLSAgICAgICAgKigodWludDMyICopdmFsdWUpID0gMDsKKyAg
ICAgICAgKigodWludDMyX3QgKil2YWx1ZSkgPSAwOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKIAogICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDoKICNpZiBk
ZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQotICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSB0
cnVlOworICAgICAgICAqKCh1aW50MzJfdCAqKXZhbHVlKSA9IHRydWU7CiAjZWxzZQotICAgICAg
ICAqKCh1aW50MzIgKil2YWx1ZSkgPSBmYWxzZTsKKyAgICAgICAgKigodWludDMyX3QgKil2YWx1
ZSkgPSBmYWxzZTsKICNlbmRpZgogICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiAKICAg
ICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6Ci0gICAgICAgICooKHVpbnQzMiAqKXZh
bHVlKSA9IHRydWU7CisgICAgICAgICooKHVpbnQzMl90ICopdmFsdWUpID0gdHJ1ZTsKICAgICAg
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwogCiAgICAgZGVmYXVsdDoKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9ucGFwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNw
cAkocmV2aXNpb24gMzYzMzMpCisrKyBXZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAgICAgcmV0dXJuIFBsdWdpblZpZXc6OmN1cnJlbnRQ
bHVnaW5WaWV3KCk7CiB9CiAKLXZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzIgc2l6ZSkKK3ZvaWQq
IE5QTl9NZW1BbGxvYyh1aW50MzJfdCBzaXplKQogewogICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7
CiB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgZnJlZShwdHIpOwogfQogCi11aW50MzIgTlBOX01l
bUZsdXNoKHVpbnQzMiBzaXplKQordWludDMyX3QgTlBOX01lbUZsdXNoKHVpbnQzMl90IHNpemUp
CiB7CiAgICAgLy8gRG8gbm90aGluZwogICAgIHJldHVybiAwOwpAQCAtNzksMTIgKzc5LDEyIEBA
CiAgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1cmws
IHRhcmdldCk7CiB9CiAKLU5QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hh
ciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK05QRXJyb3IgTlBOX1Bvc3RV
UkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3Rp
ZnlEYXRhKQogewogICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5w
b3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7CiB9
CiAKLU5QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmls
ZSkKK05QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlKQogewogICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0
VVJMKHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7CiB9CkBAIC05NCw3ICs5NCw3IEBACiAg
ICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPm5ld1N0cmVhbSh0eXBl
LCB0YXJnZXQsIHN0cmVhbSk7CiB9CiAKLWludDMyIE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5Q
U3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKQoraW50MzJfdCBOUE5fV3Jp
dGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVm
ZmVyKQogewogICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53cml0
ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3Bw
CShyZXZpc2lvbiAzNjMzMykKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzIsMjAgKzMzMiwyMCBAQAogICAgIGlmICghbV9zdHJlYW0ubmRh
dGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpbnQzMiB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAgICBpbnQzMiB0
b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKyAgICBpbnQzMl90IHRvdGFsQnl0ZXMgPSBtX2RlbGl2
ZXJ5RGF0YS0+c2l6ZSgpOworICAgIGludDMyX3QgdG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7CiAK
ICAgICBpZiAobV9sb2FkZXIpCiAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRy
dWUpOwogICAgIHdoaWxlICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgewotICAg
ICAgICBpbnQzMiBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2lu
c3RhbmNlLCAmbV9zdHJlYW0pOworICAgICAgICBpbnQzMl90IGRlbGl2ZXJ5Qnl0ZXMgPSBtX3Bs
dWdpbkZ1bmNzLT53cml0ZXJlYWR5KG1faW5zdGFuY2UsICZtX3N0cmVhbSk7CiAKICAgICAgICAg
aWYgKGRlbGl2ZXJ5Qnl0ZXMgPD0gMCkgewogICAgICAgICAgICAgbV9kZWxheURlbGl2ZXJ5VGlt
ZXIuc3RhcnRPbmVTaG90KDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIHRvdGFsQnl0
ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkKTsKLSAgICAgICAgICAgIGludDMyIGRhdGFMZW5ndGgg
PSBkZWxpdmVyeUJ5dGVzOworICAgICAgICAgICAgaW50MzJfdCBkYXRhTGVuZ3RoID0gZGVsaXZl
cnlCeXRlczsKICAgICAgICAgICAgIGNoYXIqIGRhdGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgp
ICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKIAogICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5WaWV3V3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5WaWV3V3guY3BwCShyZXZpc2lvbiAzNjMzMykKKysr
IFdlYkNvcmUvcGx1Z2lucy93eC9QbHVnaW5WaWV3V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OSw3ICs5OSw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLU5QRXJyb3IgUGx1Z2luVmlldzo6aGFu
ZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBjb25zdCBj
aGFyKiBidWYpCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8
Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMzYz
MzMpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2NywxMiArMzY3LDEyIEBACiAgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFs
c2UsIDApOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkxOb3RpZnkoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
TlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCitOUEVycm9yIFBsdWdpblZpZXc6OnBvc3RV
UkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxl
biwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKIHsKICAg
ICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURh
dGEsIHRydWUsIHRydWUpOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkwoY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1
ZiwgTlBCb29sIGZpbGUpCitOUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkwoY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBO
UEJvb2wgZmlsZSkKIHsKICAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMg
dG8gYmUgc3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KICAgICBy
ZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBm
aWxlKTsKQEAgLTM4NSw3ICszODUsNyBAQAogICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OwogfQogCi1pbnQzMiBQbHVnaW5WaWV3Ojp3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBs
ZW4sIHZvaWQqIGJ1ZmZlcikKK2ludDMyX3QgUGx1Z2luVmlldzo6d3JpdGUoTlBTdHJlYW0qIHN0
cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIC8vIFVuc3VwcG9ydGVkCkBAIC04MTYsNyArODE2LDcgQEAKICAgICByZXR1cm4gaGVh
ZGVyRmllbGRzOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
Ym9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wg
YWxsb3dIZWFkZXJzKQorTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
Ym9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wg
YWxsb3dIZWFkZXJzKQogewogICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKICAgICAgICAg
cmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvbnBmdW5j
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvbnBmdW5jdGlvbnMuaAkocmV2
aXNpb24gMzYzMzMpCisrKyBXZWJDb3JlL3BsdWdpbnMvbnBmdW5jdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMTYgKzQwLDE2IEBACiAjZW5kaWYKIAogdHlwZWRlZiBOUEVycm9yICgqTlBO
X0dldFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25z
dCBjaGFyKiB3aW5kb3csIHZvaWQqIG5vdGlmeURhdGEpOwotdHlwZWRlZiBOUEVycm9yICgqTlBO
X1Bvc3RVUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29u
c3QgY2hhciogd2luZG93LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxl
LCB2b2lkKiBub3RpZnlEYXRhKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMTm90aWZ5
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRv
dywgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3Rp
ZnlEYXRhKTsKIHR5cGVkZWYgTlBFcnJvciAoKk5QTl9SZXF1ZXN0UmVhZFByb2NQdHIpKE5QU3Ry
ZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiByYW5nZUxpc3QpOwogdHlwZWRlZiBOUEVycm9yICgq
TlBOX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25z
dCBjaGFyKiB3aW5kb3csIE5QU3RyZWFtKiogc3RyZWFtKTsKLXR5cGVkZWYgaW50MzIgKCpOUE5f
V3JpdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwg
dm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgaW50MzJfdCAoKk5QTl9Xcml0ZVByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7CiB0
eXBlZGVmIE5QRXJyb3IgKCpOUE5fRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKIHR5cGVkZWYgdm9pZCAoKk5QTl9T
dGF0dXNQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwogdHlwZWRl
ZiBjb25zdCBjaGFyKigqTlBOX1VzZXJBZ2VudFByb2NQdHIpKE5QUCBpbnN0YW5jZSk7Ci10eXBl
ZGVmIHZvaWQqICgqTlBOX01lbUFsbG9jUHJvY1B0cikodWludDMyIHNpemUpOwordHlwZWRlZiB2
b2lkKiAoKk5QTl9NZW1BbGxvY1Byb2NQdHIpKHVpbnQzMl90IHNpemUpOwogdHlwZWRlZiB2b2lk
ICgqTlBOX01lbUZyZWVQcm9jUHRyKSh2b2lkKiBwdHIpOwotdHlwZWRlZiB1aW50MzIgKCpOUE5f
TWVtRmx1c2hQcm9jUHRyKSh1aW50MzIgc2l6ZSk7Cit0eXBlZGVmIHVpbnQzMl90ICgqTlBOX01l
bUZsdXNoUHJvY1B0cikodWludDMyX3Qgc2l6ZSk7CiB0eXBlZGVmIHZvaWQgKCpOUE5fUmVsb2Fk
UGx1Z2luc1Byb2NQdHIpKE5QQm9vbCByZWxvYWRQYWdlcyk7CiB0eXBlZGVmIE5QRXJyb3IgKCpO
UE5fR2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkICpyZXRfdmFsdWUpOwogdHlwZWRlZiBOUEVycm9yICgqTlBOX1NldFZhbHVlUHJvY1B0ciko
TlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwpAQCAtNTcs
MTQgKzU3LDE0IEBACiB0eXBlZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gcmVnaW9uKTsKIHR5cGVkZWYgdm9pZCAoKk5QTl9Gb3Jj
ZVJlZHJhd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSk7CiB0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0
VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdp
bmRvdyk7Ci10eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1Bvc3RVUkxQ
cm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93
LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwogdHlwZWRlZiB2
b2lkKiAoKk5QTl9HZXRKYXZhRW52UHJvY1B0cikodm9pZCk7CiB0eXBlZGVmIHZvaWQqICgqTlBO
X0dldEphdmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKIHR5cGVkZWYgdm9pZCAgKCpOUE5f
UHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJs
ZWQpOwogdHlwZWRlZiB2b2lkICAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShO
UFAgaW5zdGFuY2UpOwogdHlwZWRlZiB2b2lkICgqTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbFBy
b2NQdHIpKE5QUCBucHAsIHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICp1c2VyRGF0YSk7Ci10
eXBlZGVmIHVpbnQzMiAoKk5QTl9TY2hlZHVsZVRpbWVyUHJvY1B0cikoTlBQIG5wcCwgdWludDMy
IGludGVydmFsLCBOUEJvb2wgcmVwZWF0LCB2b2lkICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50
MzIgdGltZXJJRCkpOwotdHlwZWRlZiB2b2lkICgqTlBOX1Vuc2NoZWR1bGVUaW1lclByb2NQdHIp
KE5QUCBucHAsIHVpbnQzMiB0aW1lcklEKTsKK3R5cGVkZWYgdWludDMyX3QgKCpOUE5fU2NoZWR1
bGVUaW1lclByb2NQdHIpKE5QUCBucHAsIHVpbnQzMl90IGludGVydmFsLCBOUEJvb2wgcmVwZWF0
LCB2b2lkICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50MzJfdCB0aW1lcklEKSk7Cit0eXBlZGVm
IHZvaWQgKCpOUE5fVW5zY2hlZHVsZVRpbWVyUHJvY1B0cikoTlBQIG5wcCwgdWludDMyX3QgdGlt
ZXJJRCk7CiB0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9wVXBDb250ZXh0TWVudVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgTlBNZW51KiBtZW51KTsKIAogdHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VW
YXJpYW50VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2YXJpYW50KTsKQEAgLTkxLDE2ICs5MSwx
NiBAQAogdHlwZWRlZiBib29sICgqTlBOX0VudW1lcmF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9i
amVjdCAqbnBvYmosIE5QSWRlbnRpZmllciAqKmlkZW50aWZpZXIsIHVpbnQzMl90ICpjb3VudCk7
CiB0eXBlZGVmIGJvb2wgKCpOUE5fQ29uc3RydWN0UHJvY1B0cikoTlBQIG5wcCwgTlBPYmplY3Qq
IG9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50
ICpyZXN1bHQpOyAgICAKIAotdHlwZWRlZiBOUEVycm9yICgqTlBQX05ld1Byb2NQdHIpKE5QTUlN
RVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNlLCB1aW50MTYgbW9kZSwgaW50MTYgYXJnYywg
Y2hhciogYXJnbltdLCBjaGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBzYXZlZCk7Cit0eXBlZGVm
IE5QRXJyb3IgKCpOUFBfTmV3UHJvY1B0cikoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5z
dGFuY2UsIHVpbnQxNl90IG1vZGUsIGludDE2X3QgYXJnYywgY2hhciogYXJnbltdLCBjaGFyKiBh
cmd2W10sIE5QU2F2ZWREYXRhKiBzYXZlZCk7CiB0eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJv
eVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTYXZlZERhdGEqKiBzYXZlKTsKIHR5cGVkZWYgTlBF
cnJvciAoKk5QUF9TZXRXaW5kb3dQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QV2luZG93KiB3aW5k
b3cpOwotdHlwZWRlZiBOUEVycm9yICgqTlBQX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVp
bnQxNiogc3R5cGUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX05ld1N0cmVhbVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wgc2Vl
a2FibGUsIHVpbnQxNl90KiBzdHlwZSk7CiB0eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJveVN0
cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVh
c29uKTsKIHR5cGVkZWYgdm9pZCAoKk5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIE5QU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGZuYW1lKTsKLXR5cGVkZWYgaW50MzIg
KCpOUFBfV3JpdGVSZWFkeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSk7
Ci10eXBlZGVmIGludDMyICgqTlBQX1dyaXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVh
bSogc3RyZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7Cit0
eXBlZGVmIGludDMyX3QgKCpOUFBfV3JpdGVSZWFkeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBT
dHJlYW0qIHN0cmVhbSk7Cit0eXBlZGVmIGludDMyX3QgKCpOUFBfV3JpdGVQcm9jUHRyKShOUFAg
aW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbiwg
dm9pZCogYnVmZmVyKTsKIHR5cGVkZWYgdm9pZCAoKk5QUF9QcmludFByb2NQdHIpKE5QUCBpbnN0
YW5jZSwgTlBQcmludCogcGxhdGZvcm1QcmludCk7Ci10eXBlZGVmIGludDE2ICgqTlBQX0hhbmRs
ZUV2ZW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCB2b2lkKiBldmVudCk7Cit0eXBlZGVmIGludDE2
X3QgKCpOUFBfSGFuZGxlRXZlbnRQcm9jUHRyKShOUFAgaW5zdGFuY2UsIHZvaWQqIGV2ZW50KTsK
IHR5cGVkZWYgdm9pZCAoKk5QUF9VUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIFVSTCwgTlBSZWFzb24gcmVhc29uLCB2b2lkKiBub3RpZnlEYXRhKTsKIHR5cGVkZWYg
TlBFcnJvciAoKk5QUF9HZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQgKnJldF92YWx1ZSk7CiB0eXBlZGVmIE5QRXJyb3IgKCpOUFBfU2V0VmFs
dWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1
ZSk7CkBAIC0xMDksOCArMTA5LDggQEAKIHR5cGVkZWYgdm9pZCogSlJJR2xvYmFsUmVmOyAvL25v
dCB1c2luZyB0aGlzIHJpZ2h0IG5vdwogCiB0eXBlZGVmIHN0cnVjdCBfTlBOZXRzY2FwZUZ1bmNz
IHsKLSAgICB1aW50MTYgc2l6ZTsKLSAgICB1aW50MTYgdmVyc2lvbjsKKyAgICB1aW50MTZfdCBz
aXplOworICAgIHVpbnQxNl90IHZlcnNpb247CiAgICAgCiAgICAgTlBOX0dldFVSTFByb2NQdHIg
Z2V0dXJsOwogICAgIE5QTl9Qb3N0VVJMUHJvY1B0ciBwb3N0dXJsOwpAQCAtMTY0LDggKzE2NCw4
IEBACiB9IE5QTmV0c2NhcGVGdW5jczsKIAogdHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2luRnVuY3Mg
ewotICAgIHVpbnQxNiBzaXplOwotICAgIHVpbnQxNiB2ZXJzaW9uOworICAgIHVpbnQxNl90IHNp
emU7CisgICAgdWludDE2X3QgdmVyc2lvbjsKICAgICBOUFBfTmV3UHJvY1B0ciBuZXdwOwogICAg
IE5QUF9EZXN0cm95UHJvY1B0ciBkZXN0cm95OwogICAgIE5QUF9TZXRXaW5kb3dQcm9jUHRyIHNl
dHdpbmRvdzsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNp
b24gMzYzMzMpCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzMsNyArMzczLDcgQEAKICAgICB3aW5kb3dwb3MuY3kgPSBmcmFtZUdl
b21ldHJ5KCkuaGVpZ2h0KCk7CiAKICAgICBucEV2ZW50LmV2ZW50ID0gV01fV0lORE9XUE9TQ0hB
TkdFRDsKLSAgICBucEV2ZW50LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyPigmd2lu
ZG93cG9zKTsKKyAgICBucEV2ZW50LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+
KCZ3aW5kb3dwb3MpOwogICAgIG5wRXZlbnQud1BhcmFtID0gMDsKIAogICAgIGRpc3BhdGNoTlBF
dmVudChucEV2ZW50KTsKQEAgLTM4MSw3ICszODEsNyBAQAogICAgIHNldE5QV2luZG93UmVjdChm
cmFtZUdlb21ldHJ5KCkpOwogCiAgICAgbnBFdmVudC5ldmVudCA9IFdNX1BBSU5UOwotICAgIG5w
RXZlbnQud1BhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzI+KGhkYyk7CisgICAgbnBFdmVu
dC53UGFyYW0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90PihoZGMpOwogCiAgICAgLy8gVGhp
cyBpcyBzdXBwb3NlZCB0byBiZSBhIHBvaW50ZXIgdG8gdGhlIGRpcnR5IHJlY3QsIGJ1dCBpdCBz
ZWVtcyB0aGF0IHRoZSBGbGFzaCBwbHVnaW4KICAgICAvLyBpZ25vcmVzIGl0IHNvIHdlIGp1c3Qg
cGFzcyBudWxsLgpAQCAtNjMxLDcgKzYzMSw3IEBACiAgICAgcmV0dXJuIG1fdXNlckFnZW50LmRh
dGEoKTsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9y
PGNoYXI+JiBidWZmZXIsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKK05QRXJyb3IgUGx1
Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJf
dCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKIHsKICAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4p
OwogCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oCShyZXZpc2lvbiAzNjMzMykKKysrIFdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDggKzEwOSw4
IEBACiAKICAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogbV9wbHVnaW5GdW5jczsKICAgICAg
ICAgTlBQIG1faW5zdGFuY2U7Ci0gICAgICAgIHVpbnQxNiBtX3RyYW5zZmVyTW9kZTsKLSAgICAg
ICAgaW50MzIgbV9vZmZzZXQ7CisgICAgICAgIHVpbnQxNl90IG1fdHJhbnNmZXJNb2RlOworICAg
ICAgICBpbnQzMl90IG1fb2Zmc2V0OwogICAgICAgICBDU3RyaW5nIG1faGVhZGVyczsKICAgICAg
ICAgQ1N0cmluZyBtX3BhdGg7CiAgICAgICAgIE5QUmVhc29uIG1fcmVhc29uOwpJbmRleDogV2Vi
Q29yZS9icmlkZ2UvbnBhcGkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ucGFwaS5o
CShyZXZpc2lvbiAzNjMzMykKKysrIFdlYkNvcmUvYnJpZGdlL25wYXBpLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDEyICszMywxMCBAQAogICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1Q
TCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICAqCiAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAq
KioqKiAqLwotIAotIAorCiAgLyoKICAgKiAgTmV0c2NhcGUgY2xpZW50IHBsdWctaW4gQVBJIHNw
ZWMKICAgKi8KLSAKIAogI2lmbmRlZiBfTlBBUElfSF8KICNkZWZpbmUgX05QQVBJX0hfCkBAIC03
Niw4ICs3NCw3IEBACiAjZW5kaWYKIAogI2lmZGVmIFhQX01BQwotICAgICNpbmNsdWRlIDxRdWlj
a2RyYXcuaD4KLSAgICAjaW5jbHVkZSA8RXZlbnRzLmg+CisgICAgI2luY2x1ZGUgPENhcmJvbi9D
YXJib24uaD4KICNlbmRpZgogCiAjaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIGRlZmluZWQoX19M
UDY0X18pCkBAIC0xMTAsNTcgKzEwNywxNSBAQAogI2RlZmluZSBOUF9WRVJTSU9OX01BSk9SIDAK
ICNkZWZpbmUgTlBfVkVSU0lPTl9NSU5PUiAyMAogCi0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8q
ICAgICAgICAgICAgIERlZmluaXRpb24gb2YgQmFzaWMgVHlwZXMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWZuZGVmIF9VSU5UMTYKLSNk
ZWZpbmUgX1VJTlQxNgotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTY7Ci0jZW5kaWYKK3R5
cGVkZWYgdW5zaWduZWQgY2hhciBOUEJvb2w7Cit0eXBlZGVmIGludDE2X3QgICAgICAgTlBFcnJv
cjsKK3R5cGVkZWYgaW50MTZfdCAgICAgICBOUFJlYXNvbjsKK3R5cGVkZWYgY2hhciogICAgICAg
ICBOUE1JTUVUeXBlOwogCi0jaWZuZGVmIF9VSU5UMzIKLSNkZWZpbmUgX1VJTlQzMgotI2lmZGVm
IF9fTFA2NF9fCi10eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzI7Ci0jZWxzZSAvKiBfX0xQNjRf
XyAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnQzMjsKLSNlbmRpZiAvKiBfX0xQNjRfXyAq
LwotI2VuZGlmCi0KLSNpZm5kZWYgX0lOVDE2Ci0jZGVmaW5lIF9JTlQxNgotdHlwZWRlZiBzaG9y
dCBpbnQxNjsKLSNlbmRpZgotCi0jaWZuZGVmIF9JTlQzMgotI2RlZmluZSBfSU5UMzIKLSNpZmRl
ZiBfX0xQNjRfXwotdHlwZWRlZiBpbnQgaW50MzI7Ci0jZWxzZSAvKiBfX0xQNjRfXyAqLwotdHlw
ZWRlZiBsb25nIGludDMyOwotI2VuZGlmIC8qIF9fTFA2NF9fICovCi0jZW5kaWYKLQotI2lmbmRl
ZiBGQUxTRQotI2RlZmluZSBGQUxTRSAoMCkKLSNlbmRpZgotI2lmbmRlZiBUUlVFCi0jZGVmaW5l
IFRSVUUgKDEpCi0jZW5kaWYKLSNpZm5kZWYgTlVMTAotI2RlZmluZSBOVUxMICgwTCkKLSNlbmRp
ZgotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgTlBCb29sOwotdHlwZWRlZiBpbnQxNiAgICAg
ICAgICAgIE5QRXJyb3I7Ci10eXBlZGVmIGludDE2ICAgICAgICAgICAgTlBSZWFzb247Ci10eXBl
ZGVmIGNoYXIqICAgICAgICAgICAgTlBNSU1FVHlwZTsKLQotCi0KIC8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAvKiAgICAgICAgICAgICBTdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyAgICAgICAgICAgICAq
LwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE4OCw4ICsxNDMsOCBAQAogICAgIHZvaWQqICAgICAg
ICBwZGF0YTsgICAgICAgIC8qIHBsdWctaW4gcHJpdmF0ZSBkYXRhICovCiAgICAgdm9pZCogICAg
ICAgIG5kYXRhOyAgICAgICAgLyogbmV0c2NhcGUgcHJpdmF0ZSBkYXRhICovCiAgICAgY29uc3Qg
Y2hhciogIHVybDsKLSAgICB1aW50MzIgICAgICAgZW5kOwotICAgIHVpbnQzMiAgICAgICBsYXN0
bW9kaWZpZWQ7CisgICAgdWludDMyX3QgICAgIGVuZDsKKyAgICB1aW50MzJfdCAgICAgbGFzdG1v
ZGlmaWVkOwogICAgIHZvaWQqICAgICAgICBub3RpZnlEYXRhOwogICAgIGNvbnN0IGNoYXIqICBo
ZWFkZXJzOyAgICAgIC8qIFJlc3BvbnNlIGhlYWRlcnMgZnJvbSBob3N0LgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqIEV4aXN0cyBvbmx5IGZvciA+PSBOUFZFUlNfSEFTX1JFU1BP
TlNFX0hFQURFUlMuCkBAIC0yMDYsMjUgKzE2MSwyNSBAQAogCiB0eXBlZGVmIHN0cnVjdCBfTlBC
eXRlUmFuZ2UKIHsKLSAgICBpbnQzMiAgICAgIG9mZnNldDsgICAgICAgICAvKiBuZWdhdGl2ZSBv
ZmZzZXQgbWVhbnMgZnJvbSB0aGUgZW5kICovCi0gICAgdWludDMyICAgICBsZW5ndGg7CisgICAg
aW50MzJfdCAgb2Zmc2V0OyAgICAgICAgIC8qIG5lZ2F0aXZlIG9mZnNldCBtZWFucyBmcm9tIHRo
ZSBlbmQgKi8KKyAgICB1aW50MzJfdCBsZW5ndGg7CiAgICAgc3RydWN0IF9OUEJ5dGVSYW5nZSog
bmV4dDsKIH0gTlBCeXRlUmFuZ2U7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgX05QU2F2ZWREYXRhCiB7
Ci0gICAgaW50MzIgICAgbGVuOwotICAgIHZvaWQqICAgIGJ1ZjsKKyAgICBpbnQzMl90IGxlbjsK
KyAgICB2b2lkKiAgIGJ1ZjsKIH0gTlBTYXZlZERhdGE7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgX05Q
UmVjdAogewotICAgIHVpbnQxNiAgICB0b3A7Ci0gICAgdWludDE2ICAgIGxlZnQ7Ci0gICAgdWlu
dDE2ICAgIGJvdHRvbTsKLSAgICB1aW50MTYgICAgcmlnaHQ7CisgICAgdWludDE2X3QgdG9wOwor
ICAgIHVpbnQxNl90IGxlZnQ7CisgICAgdWludDE2X3QgYm90dG9tOworICAgIHVpbnQxNl90IHJp
Z2h0OwogfSBOUFJlY3Q7CiAKIApAQCAtMjQ1LDEyICsyMDAsMTIgQEAKIAogdHlwZWRlZiBzdHJ1
Y3QKIHsKLSAgICBpbnQzMiAgICAgICAgdHlwZTsKKyAgICBpbnQzMl90IHR5cGU7CiB9IE5QQW55
Q2FsbGJhY2tTdHJ1Y3Q7CiAKIHR5cGVkZWYgc3RydWN0CiB7Ci0gICAgaW50MzIgICAgICAgICAg
IHR5cGU7CisgICAgaW50MzJfdCAgICAgICAgIHR5cGU7CiAgICAgRGlzcGxheSogICAgICAgIGRp
c3BsYXk7CiAgICAgVmlzdWFsKiAgICAgICAgIHZpc3VhbDsKICAgICBDb2xvcm1hcCAgICAgICAg
Y29sb3JtYXA7CkBAIC0yNTksOCArMjE0LDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLSAgICBp
bnQzMiAgICAgICAgICAgIHR5cGU7Ci0gICAgRklMRSogICAgICAgICAgICBmcDsKKyAgICBpbnQz
Ml90IHR5cGU7CisgICAgRklMRSogICBmcDsKIH0gTlBQcmludENhbGxiYWNrU3RydWN0OwogCiAj
ZW5kaWYgLyogWFBfVU5JWCAqLwpAQCAtNDUzLDI1ICs0MDgsMjUgQEAKIAogdHlwZWRlZiBzdHJ1
Y3QgX05QQ29jb2FFdmVudCB7CiAgICAgTlBDb2NvYUV2ZW50VHlwZSB0eXBlOwotICAgIHVpbnQz
MiB2ZXJzaW9uOworICAgIHVpbnQzMl90IHZlcnNpb247CiAgICAgCiAgICAgdW5pb24gewogICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdWludDMyIG1vZGlmaWVyRmxhZ3M7Ci0gICAgICAg
ICAgICBkb3VibGUgcGx1Z2luWDsKLSAgICAgICAgICAgIGRvdWJsZSBwbHVnaW5ZOyAgICAgICAg
ICAgIAotICAgICAgICAgICAgaW50MzIgYnV0dG9uTnVtYmVyOwotICAgICAgICAgICAgaW50MzIg
Y2xpY2tDb3VudDsKLSAgICAgICAgICAgIGRvdWJsZSBkZWx0YVg7Ci0gICAgICAgICAgICBkb3Vi
bGUgZGVsdGFZOwotICAgICAgICAgICAgZG91YmxlIGRlbHRhWjsKKyAgICAgICAgICAgIHVpbnQz
Ml90IG1vZGlmaWVyRmxhZ3M7CisgICAgICAgICAgICBkb3VibGUgICBwbHVnaW5YOworICAgICAg
ICAgICAgZG91YmxlICAgcGx1Z2luWTsgICAgICAgICAgICAKKyAgICAgICAgICAgIGludDMyX3Qg
IGJ1dHRvbk51bWJlcjsKKyAgICAgICAgICAgIGludDMyX3QgIGNsaWNrQ291bnQ7CisgICAgICAg
ICAgICBkb3VibGUgICBkZWx0YVg7CisgICAgICAgICAgICBkb3VibGUgICBkZWx0YVk7CisgICAg
ICAgICAgICBkb3VibGUgICBkZWx0YVo7CiAgICAgICAgIH0gbW91c2U7CiAgICAgICAgIHN0cnVj
dCB7Ci0gICAgICAgICAgICB1aW50MzIgbW9kaWZpZXJGbGFnczsKKyAgICAgICAgICAgIHVpbnQz
Ml90IG1vZGlmaWVyRmxhZ3M7CiAgICAgICAgICAgICBOUE5TU3RyaW5nICpjaGFyYWN0ZXJzOwog
ICAgICAgICAgICAgTlBOU1N0cmluZyAqY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOwogICAg
ICAgICAgICAgTlBCb29sIGlzQVJlcGVhdDsKLSAgICAgICAgICAgIHVpbnQxNiBrZXlDb2RlOwor
ICAgICAgICAgICAgdWludDE2X3Qga2V5Q29kZTsKICAgICAgICAgfSBrZXk7CiAgICAgICAgIHN0
cnVjdCB7CiAgICAgICAgICAgICBkb3VibGUgeDsKQEAgLTQ4OSwxMyArNDQ0LDEzIEBACiAKIHR5
cGVkZWYgc3RydWN0IF9OUFdpbmRvdwogewotICAgIHZvaWQqICAgIHdpbmRvdzsgICAgIC8qIFBs
YXRmb3JtIHNwZWNpZmljIHdpbmRvdyBoYW5kbGUgKi8KLSAgICBpbnQzMiAgICB4OyAgICAgICAg
ICAgIC8qIFBvc2l0aW9uIG9mIHRvcCBsZWZ0IGNvcm5lciByZWxhdGl2ZSAqLwotICAgIGludDMy
ICAgIHk7ICAgICAgICAgICAgLyogICAgdG8gYSBuZXRzY2FwZSBwYWdlLiAgICAgICAgICAgICAg
ICAgICAgKi8KLSAgICB1aW50MzIgICAgd2lkdGg7ICAgICAgICAvKiBNYXhpbXVtIHdpbmRvdyBz
aXplICovCi0gICAgdWludDMyICAgIGhlaWdodDsKKyAgICB2b2lkKiAgICAgd2luZG93OyAgICAg
IC8qIFBsYXRmb3JtIHNwZWNpZmljIHdpbmRvdyBoYW5kbGUgKi8KKyAgICBpbnQzMl90ICAgeDsg
ICAgICAgICAgIC8qIFBvc2l0aW9uIG9mIHRvcCBsZWZ0IGNvcm5lciByZWxhdGl2ZSAqLworICAg
IGludDMyX3QgICB5OyAgICAgICAgICAgLyogICAgdG8gYSBuZXRzY2FwZSBwYWdlLiAqLworICAg
IHVpbnQzMl90ICB3aWR0aDsgICAgICAgLyogTWF4aW11bSB3aW5kb3cgc2l6ZSAqLworICAgIHVp
bnQzMl90ICBoZWlnaHQ7CiAgICAgTlBSZWN0ICAgIGNsaXBSZWN0OyAgICAvKiBDbGlwcGluZyBy
ZWN0YW5nbGUgaW4gcG9ydCBjb29yZGluYXRlcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
LyogVXNlZCBieSBNQUMgb25seS4gICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKiBVc2VkIGJ5IE1BQyBvbmx5LiAqLwogI2lmZGVmIFhQX1VOSVgKICAgICB2b2lk
ICogICAgd3NfaW5mbzsgICAgLyogUGxhdGZvcm0tZGVwZW5kZW50IGFkZGl0b25hbCBkYXRhICov
CiAjZW5kaWYgLyogWFBfVU5JWCAqLwpAQCAtNTIwLDcgKzQ3NSw3IEBACiAKIHR5cGVkZWYgc3Ry
dWN0IF9OUFByaW50CiB7Ci0gICAgdWludDE2ICAgIG1vZGU7ICAgICAgICAgICAgICAgICAgICAg
ICAgLyogTlBfRlVMTCBvciBOUF9FTUJFRCAqLworICAgIHVpbnQxNl90ICBtb2RlOyAgICAgICAg
ICAgICAgICAgICAgICAgIC8qIE5QX0ZVTEwgb3IgTlBfRU1CRUQgKi8KICAgICB1bmlvbgogICAg
IHsKICAgICAgICAgTlBGdWxsUHJpbnQgICAgIGZ1bGxQcmludDsgICAgICAgIC8qIGlmIG1vZGUg
aXMgTlBfRlVMTCAqLwpAQCAtNTQzLDkgKzQ5OCw5IEBACiAjZWxpZiBkZWZpbmVkKFhQX1dJTikK
IHR5cGVkZWYgc3RydWN0IF9OUEV2ZW50CiB7Ci0gICAgdWludDE2ICAgZXZlbnQ7Ci0gICAgdWlu
dDMyICAgd1BhcmFtOwotICAgIHVpbnQzMiAgIGxQYXJhbTsKKyAgICB1aW50MTZfdCAgIGV2ZW50
OworICAgIHVpbnQzMl90ICAgd1BhcmFtOworICAgIHVpbnQzMl90ICAgbFBhcmFtOwogfSBOUEV2
ZW50OwogI2VsaWYgZGVmaW5lZCAoWFBfVU5JWCkKIHR5cGVkZWYgWEV2ZW50IE5QRXZlbnQ7CkBA
IC02MjksOCArNTg0LDggQEAKIHR5cGVkZWYgc3RydWN0IE5QX1BvcnQKIHsKICAgICBDR3JhZlB0
ciAgICAgcG9ydDsgICAgICAgIC8qIEdyYWZwb3J0ICovCi0gICAgaW50MzIgICAgICAgIHBvcnR4
OyAgICAgICAgLyogcG9zaXRpb24gaW5zaWRlIHRoZSB0b3Btb3N0IHdpbmRvdyAqLwotICAgIGlu
dDMyICAgICAgICBwb3J0eTsKKyAgICBpbnQzMl90ICAgICAgcG9ydHg7ICAgICAgIC8qIHBvc2l0
aW9uIGluc2lkZSB0aGUgdG9wbW9zdCB3aW5kb3cgKi8KKyAgICBpbnQzMl90ICAgICAgcG9ydHk7
CiB9IE5QX1BvcnQ7CiAKICNlbmRpZiAvKiBOUF9OT19RVUlDS0RSQVcgKi8KQEAgLTc0OSwyMiAr
NzA0LDIyIEBACiBOUEVycm9yICAgICBOUFBfSW5pdGlhbGl6ZSh2b2lkKTsKIHZvaWQgICAgICAg
IE5QUF9TaHV0ZG93bih2b2lkKTsKIE5QRXJyb3IgICAgIE5QX0xPQUREUyAgICBOUFBfTmV3KE5Q
TUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MTYgbW9kZSwgaW50MTYgYXJnYywgY2hhciogYXJnbltdLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBzYXZl
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBtb2RlLCBpbnQx
Nl90IGFyZ2MsIGNoYXIqIGFyZ25bXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkKTsKIE5QRXJyb3IgICAgIE5QX0xPQURE
UyAgICBOUFBfRGVzdHJveShOUFAgaW5zdGFuY2UsIE5QU2F2ZWREYXRhKiogc2F2ZSk7CiBOUEVy
cm9yICAgICBOUF9MT0FERFMgICAgTlBQX1NldFdpbmRvdyhOUFAgaW5zdGFuY2UsIE5QV2luZG93
KiB3aW5kb3cpOwogTlBFcnJvciAgICAgTlBfTE9BRERTICAgIE5QUF9OZXdTdHJlYW0oTlBQIGlu
c3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2KiBzdHlwZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90KiBzdHlwZSk7CiBOUEVycm9yICAgICBOUF9M
T0FERFMgICAgTlBQX0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFt
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBSZWFzb24gcmVh
c29uKTsKLWludDMyICAgICAgICBOUF9MT0FERFMgICAgTlBQX1dyaXRlUmVhZHkoTlBQIGluc3Rh
bmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKLWludDMyICAgICAgICBOUF9MT0FERFMgICAgTlBQX1dy
aXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgb2Zmc2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFJlYXNvbiByZWFzb24p
OworaW50MzJfdCAgICAgTlBfTE9BRERTICAgIE5QUF9Xcml0ZVJlYWR5KE5QUCBpbnN0YW5jZSwg
TlBTdHJlYW0qIHN0cmVhbSk7CitpbnQzMl90ICAgICBOUF9MT0FERFMgICAgTlBQX1dyaXRlKE5Q
UCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7CiB2b2lk
ICAgICAgICBOUF9MT0FERFMgICAgTlBQX1N0cmVhbUFzRmlsZShOUFAgaW5zdGFuY2UsIE5QU3Ry
ZWFtKiBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGZuYW1lKTsKIHZvaWQgICAgICAgIE5QX0xPQUREUyAgICBOUFBfUHJpbnQoTlBQ
IGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9ybVByaW50KTsKLWludDE2ICAgICAgICAgICAgTlBQ
X0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOworaW50MTZfdCAgICAgTlBQ
X0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwogdm9pZCAgICAgICAgTlBf
TE9BRERTICAgIE5QUF9VUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5QUmVhc29uIHJlYXNvbiwgdm9p
ZCogbm90aWZ5RGF0YSk7CiBqcmVmICAgICAgICBOUF9MT0FERFMgICAgICAgICAgICBOUFBfR2V0
SmF2YUNsYXNzKHZvaWQpOwpAQCAtNzg0LDI0ICs3MzksMjQgQEAKIE5QRXJyb3IgICAgIE5QTl9H
ZXRVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXQpOwogTlBFcnJvciAgICAgTlBOX1Bvc3RVUkxOb3Rp
ZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29s
IGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogbm90aWZ5RGF0
YSk7CiBOUEVycm9yICAgICBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVy
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQz
MiBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzJfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYnVm
LCBOUEJvb2wgZmlsZSk7CiBOUEVycm9yICAgICBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0
cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7CiBOUEVycm9yICAgICBOUE5fTmV3U3RyZWFt
KE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7Ci1pbnQzMiAgICAg
ICAgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLAor
aW50MzJfdCAgICAgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50
MzJfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGJ1ZmZlcik7CiBOUEVy
cm9yICAgICBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBSZWFzb24gcmVhc29uKTsKIHZv
aWQgICAgICAgIE5QTl9TdGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsK
LWNvbnN0IGNoYXIqICAgIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKTsKLXZvaWQqICAgICAg
ICBOUE5fTWVtQWxsb2ModWludDMyIHNpemUpOworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChO
UFAgaW5zdGFuY2UpOwordm9pZCogICAgICAgTlBOX01lbUFsbG9jKHVpbnQzMl90IHNpemUpOwog
dm9pZCAgICAgICAgTlBOX01lbUZyZWUodm9pZCogcHRyKTsKLXVpbnQzMiAgICAgICAgTlBOX01l
bUZsdXNoKHVpbnQzMiBzaXplKTsKK3VpbnQzMl90ICAgIE5QTl9NZW1GbHVzaCh1aW50MzJfdCBz
aXplKTsKIHZvaWQgICAgICAgIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdlcyk7
CiBKUklFbnYqICAgICBOUE5fR2V0SmF2YUVudih2b2lkKTsKIGpyZWYgICAgICAgIE5QTl9HZXRK
YXZhUGVlcihOUFAgaW5zdGFuY2UpOwpAQCAtODE1LDggKzc3MCw4IEBACiB2b2lkICAgICAgICBO
UE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKTsK
IHZvaWQgICAgICAgIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKTsKIHZv
aWQgICAgICAgIE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwoTlBQIGluc3RhbmNlLCB2b2lkICgq
ZnVuYykgKHZvaWQgKiksIHZvaWQgKnVzZXJEYXRhKTsKLXVpbnQzMiAgICAgIE5QTl9TY2hlZHVs
ZVRpbWVyKE5QUCBpbnN0YW5jZSwgdWludDMyIGludGVydmFsLCBOUEJvb2wgcmVwZWF0LCB2b2lk
ICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50MzIgdGltZXJJRCkpOwotdm9pZCAgICAgICAgTlBO
X1Vuc2NoZWR1bGVUaW1lcihOUFAgaW5zdGFuY2UsIHVpbnQzMiB0aW1lcklEKTsKK3VpbnQzMl90
ICAgIE5QTl9TY2hlZHVsZVRpbWVyKE5QUCBpbnN0YW5jZSwgdWludDMyX3QgaW50ZXJ2YWwsIE5Q
Qm9vbCByZXBlYXQsIHZvaWQgKCp0aW1lckZ1bmMpKE5QUCBucHAsIHVpbnQzMl90IHRpbWVySUQp
KTsKK3ZvaWQgICAgICAgIE5QTl9VbnNjaGVkdWxlVGltZXIoTlBQIGluc3RhbmNlLCB1aW50MzJf
dCB0aW1lcklEKTsKIE5QRXJyb3IgICAgIE5QTl9Qb3BVcENvbnRleHRNZW51KE5QUCBpbnN0YW5j
ZSwgTlBNZW51KiBtZW51KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkluZGV4OiBXZWJLaXRFeGFt
cGxlUGx1Z2lucy9OZXRzY2FwZUlucHV0TWV0aG9kUGx1Z2luL21haW4ubQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRFeGFtcGxlUGx1Z2lucy9OZXRzY2FwZUlucHV0TWV0aG9kUGx1Z2luL21haW4ubQko
cmV2aXNpb24gMzYzMzMpCisrKyBXZWJLaXRFeGFtcGxlUGx1Z2lucy9OZXRzY2FwZUlucHV0TWV0
aG9kUGx1Z2luL21haW4ubQkod29ya2luZyBjb3B5KQpAQCAtNTgsMjAgKzU4LDE5IEBACiAgICAg
TlNUZXh0U3RvcmFnZSAqdGV4dFN0b3JhZ2U7CiAgICAgTlNMYXlvdXRNYW5hZ2VyICpsYXlvdXRN
YW5hZ2VyOwogICAgIE5TVGV4dENvbnRhaW5lciAqdGV4dENvbnRhaW5lcjsKLSAgICAKIH0gUGx1
Z2luT2JqZWN0OwogCi1OUEVycm9yIE5QUF9OZXcoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAg
aW5zdGFuY2UsIHVpbnQxNiBtb2RlLCBpbnQxNiBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFy
Z3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkKTsKK05QRXJyb3IgTlBQX05ldyhOUE1JTUVUeXBlIHBs
dWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2X3QgbW9kZSwgaW50MTZfdCBhcmdjLCBjaGFy
KiBhcmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkKTsKIE5QRXJyb3IgTlBQ
X0Rlc3Ryb3koTlBQIGluc3RhbmNlLCBOUFNhdmVkRGF0YSoqIHNhdmUpOwogTlBFcnJvciBOUFBf
U2V0V2luZG93KE5QUCBpbnN0YW5jZSwgTlBXaW5kb3cqIHdpbmRvdyk7Ci1OUEVycm9yIE5QUF9O
ZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0s
IE5QQm9vbCBzZWVrYWJsZSwgdWludDE2KiBzdHlwZSk7CitOUEVycm9yIE5QUF9OZXdTdHJlYW0o
TlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBz
ZWVrYWJsZSwgdWludDE2X3QqIHN0eXBlKTsKIE5QRXJyb3IgTlBQX0Rlc3Ryb3lTdHJlYW0oTlBQ
IGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwotaW50MzIgTlBQ
X1dyaXRlUmVhZHkoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKLWludDMyIE5QUF9X
cml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIG9mZnNldCwgaW50MzIg
bGVuLCB2b2lkKiBidWZmZXIpOwotdm9pZCBOUFBfU3RyZWFtQXNGaWxlKE5QUCBpbnN0YW5jZSwg
TlBTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogZm5hbWUpOwotdm9pZCBOUFBfUHJpbnQoTlBQ
IGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9ybVByaW50KTsKLWludDE2IE5QUF9IYW5kbGVFdmVu
dChOUFAgaW5zdGFuY2UsIHZvaWQqIGV2ZW50KTsKLXZvaWQgTlBQX1VSTE5vdGlmeShOUFAgaW5z
dGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgTlBSZWFzb24gcmVhc29uLCB2b2lkKiBub3RpZnlEYXRh
KTsKK2ludDMyX3QgTlBQX1dyaXRlUmVhZHkoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFt
KTsKK2ludDMyX3QgTlBQX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50
MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwordm9pZCAgICBOUFBfU3Ry
ZWFtQXNGaWxlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogZm5h
bWUpOwordm9pZCAgICBOUFBfUHJpbnQoTlBQIGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9ybVBy
aW50KTsKK2ludDE2X3QgTlBQX0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQp
Owordm9pZCAgICBOUFBfVVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBO
UFJlYXNvbiByZWFzb24sIHZvaWQqIG5vdGlmeURhdGEpOwogTlBFcnJvciBOUFBfR2V0VmFsdWUo
TlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwogTlBFcnJv
ciBOUFBfU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAq
dmFsdWUpOwogCkBAIC0xMTMsNyArMTEyLDcgQEAKIHsKIH0KIAotTlBFcnJvciBOUFBfTmV3KE5Q
TUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNlLCB1aW50MTYgbW9kZSwgaW50MTYgYXJn
YywgY2hhciogYXJnbltdLCBjaGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBzYXZlZCkKK05QRXJy
b3IgTlBQX05ldyhOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2X3Qg
bW9kZSwgaW50MTZfdCBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERh
dGEqIHNhdmVkKQogewogICAgIC8vIENyZWF0ZSBwZXItaW5zdGFuY2Ugc3RvcmFnZQogICAgIFBs
dWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCAqKW1hbGxvYyhzaXplb2YoUGx1Z2luT2Jq
ZWN0KSk7CkBAIC0xODEsNyArMTgwLDcgQEAKIH0KICAKIAotTlBFcnJvciBOUFBfTmV3U3RyZWFt
KE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wg
c2Vla2FibGUsIHVpbnQxNiogc3R5cGUpCitOUEVycm9yIE5QUF9OZXdTdHJlYW0oTlBQIGluc3Rh
bmNlLCBOUE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwg
dWludDE2X3QqIHN0eXBlKQogewogICAgICpzdHlwZSA9IE5QX0FTRklMRU9OTFk7CiAgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOwpAQCAtMTkyLDEyICsxOTEsMTIgQEAKICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7CiB9CiAKLWludDMyIE5QUF9Xcml0ZVJlYWR5KE5QUCBpbnN0YW5jZSwgTlBT
dHJlYW0qIHN0cmVhbSkKK2ludDMyX3QgTlBQX1dyaXRlUmVhZHkoTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSogc3RyZWFtKQogewogICAgIHJldHVybiAwOwogfQogCi1pbnQzMiBOUFBfV3JpdGUoTlBQ
IGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBvZmZzZXQsIGludDMyIGxlbiwgdm9p
ZCogYnVmZmVyKQoraW50MzJfdCBOUFBfV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3Ry
ZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcikKIHsKICAgICBy
ZXR1cm4gMDsKIH0KQEAgLTMwOCw3ICszMDcsNyBAQAogICAgIGludmFsaWRhdGVQbHVnaW4ob2Jq
KTsKIH0KIAotaW50MTYgTlBQX0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQp
CitpbnQxNl90IE5QUF9IYW5kbGVFdmVudChOUFAgaW5zdGFuY2UsIHZvaWQqIGV2ZW50KQogewog
ICAgIFBsdWdpbk9iamVjdCAqb2JqID0gaW5zdGFuY2UtPnBkYXRhOwogCkluZGV4OiBXZWJLaXRF
eGFtcGxlUGx1Z2lucy9OZXRzY2FwZUNvY29hUGx1Z2luL21haW4ubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRFeGFtcGxlUGx1Z2lucy9OZXRzY2FwZUNvY29hUGx1Z2luL21haW4ubQkocmV2aXNpb24g
MzYzMzMpCisrKyBXZWJLaXRFeGFtcGxlUGx1Z2lucy9OZXRzY2FwZUNvY29hUGx1Z2luL21haW4u
bQkod29ya2luZyBjb3B5KQpAQCAtNTYsMTcgKzU2LDE3IEBACiAgICAgTWVudUhhbmRsZXIgKm1l
bnVIYW5kbGVyOwogfSBQbHVnaW5PYmplY3Q7CiAKLU5QRXJyb3IgTlBQX05ldyhOUE1JTUVUeXBl
IHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2IG1vZGUsIGludDE2IGFyZ2MsIGNoYXIq
IGFyZ25bXSwgY2hhciogYXJndltdLCBOUFNhdmVkRGF0YSogc2F2ZWQpOworTlBFcnJvciBOUFBf
TmV3KE5QTUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNlLCB1aW50MTZfdCBtb2RlLCBp
bnQxNl90IGFyZ2MsIGNoYXIqIGFyZ25bXSwgY2hhciogYXJndltdLCBOUFNhdmVkRGF0YSogc2F2
ZWQpOwogTlBFcnJvciBOUFBfRGVzdHJveShOUFAgaW5zdGFuY2UsIE5QU2F2ZWREYXRhKiogc2F2
ZSk7CiBOUEVycm9yIE5QUF9TZXRXaW5kb3coTlBQIGluc3RhbmNlLCBOUFdpbmRvdyogd2luZG93
KTsKLU5QRXJyb3IgTlBQX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwg
TlBTdHJlYW0qIHN0cmVhbSwgTlBCb29sIHNlZWthYmxlLCB1aW50MTYqIHN0eXBlKTsKK05QRXJy
b3IgTlBQX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgTlBTdHJlYW0q
IHN0cmVhbSwgTlBCb29sIHNlZWthYmxlLCB1aW50MTZfdCogc3R5cGUpOwogTlBFcnJvciBOUFBf
RGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJl
YXNvbik7Ci1pbnQzMiBOUFBfV3JpdGVSZWFkeShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJl
YW0pOwotaW50MzIgTlBQX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50
MzIgb2Zmc2V0LCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7Ci12b2lkIE5QUF9TdHJlYW1Bc0Zp
bGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiBmbmFtZSk7Ci12
b2lkIE5QUF9QcmludChOUFAgaW5zdGFuY2UsIE5QUHJpbnQqIHBsYXRmb3JtUHJpbnQpOwotaW50
MTYgTlBQX0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwotdm9pZCBOUFBf
VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBOUFJlYXNvbiByZWFzb24s
IHZvaWQqIG5vdGlmeURhdGEpOworaW50MzJfdCBOUFBfV3JpdGVSZWFkeShOUFAgaW5zdGFuY2Us
IE5QU3RyZWFtKiBzdHJlYW0pOworaW50MzJfdCBOUFBfV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSogc3RyZWFtLCBpbnQzMiBvZmZzZXQsIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKK3Zv
aWQgICAgTlBQX1N0cmVhbUFzRmlsZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGNv
bnN0IGNoYXIqIGZuYW1lKTsKK3ZvaWQgICAgTlBQX1ByaW50KE5QUCBpbnN0YW5jZSwgTlBQcmlu
dCogcGxhdGZvcm1QcmludCk7CitpbnQxNl90IE5QUF9IYW5kbGVFdmVudChOUFAgaW5zdGFuY2Us
IHZvaWQqIGV2ZW50KTsKK3ZvaWQgICAgTlBQX1VSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIFVSTCwgTlBSZWFzb24gcmVhc29uLCB2b2lkKiBub3RpZnlEYXRhKTsKIE5QRXJyb3Ig
TlBQX0dldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZh
bHVlKTsKIE5QRXJyb3IgTlBQX1NldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQgKnZhbHVlKTsKIApAQCAtMTA5LDcgKzEwOSw3IEBACiAKIH0KIAotTlBFcnJv
ciBOUFBfTmV3KE5QTUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNlLCB1aW50MTYgbW9k
ZSwgaW50MTYgYXJnYywgY2hhciogYXJnbltdLCBjaGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBz
YXZlZCkKK05QRXJyb3IgTlBQX05ldyhOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5j
ZSwgdWludDE2X3QgbW9kZSwgaW50MTZfdCBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3Zb
XSwgTlBTYXZlZERhdGEqIHNhdmVkKQogewogICAgIC8vIENyZWF0ZSBwZXItaW5zdGFuY2Ugc3Rv
cmFnZQogICAgIFBsdWdpbk9iamVjdCAqb2JqID0gKFBsdWdpbk9iamVjdCAqKW1hbGxvYyhzaXpl
b2YoUGx1Z2luT2JqZWN0KSk7CkBAIC0xNjQsNyArMTY0LDcgQEAKIH0KICAKIAotTlBFcnJvciBO
UFBfTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSogc3Ry
ZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQxNiogc3R5cGUpCitOUEVycm9yIE5QUF9OZXdTdHJl
YW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9v
bCBzZWVrYWJsZSwgdWludDE2X3QqIHN0eXBlKQogewogICAgICpzdHlwZSA9IE5QX0FTRklMRU9O
TFk7CiAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwpAQCAtMTc1LDEyICsxNzUsMTIgQEAKICAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiB9CiAKLWludDMyIE5QUF9Xcml0ZVJlYWR5KE5QUCBp
bnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSkKK2ludDMyX3QgTlBQX1dyaXRlUmVhZHkoTlBQIGlu
c3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKQogewogICAgIHJldHVybiAwOwogfQogCi1pbnQzMiBO
UFBfV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBvZmZzZXQsIGlu
dDMyIGxlbiwgdm9pZCogYnVmZmVyKQoraW50MzJfdCBOUFBfV3JpdGUoTlBQIGluc3RhbmNlLCBO
UFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZl
cikKIHsKICAgICByZXR1cm4gMDsKIH0KQEAgLTMxNSw3ICszMTUsNyBAQAogICAgIGludmFsaWRh
dGVQbHVnaW4ob2JqKTsKIH0KIAotaW50MTYgTlBQX0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwg
dm9pZCogZXZlbnQpCitpbnQxNl90IE5QUF9IYW5kbGVFdmVudChOUFAgaW5zdGFuY2UsIHZvaWQq
IGV2ZW50KQogewogICAgIFBsdWdpbk9iamVjdCAqb2JqID0gaW5zdGFuY2UtPnBkYXRhOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>23444</attachid>
            <date>2008-09-15 12:42:19 -0700</date>
            <delta_ts>2010-04-23 14:25:25 -0700</delta_ts>
            <desc>current Mozilla nptypes.h</desc>
            <filename>nptypes.h</filename>
            <type>text/plain</type>
            <size>3517</size>
            <attacher name="Josh Aas">joshmoz</attacher>
            
              <data encoding="base64">LyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJh
c2ljLW9mZnNldDogMiAtKi0gKi8KLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgog
KiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKICoKICogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uCiAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwogKgog
KiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIGJhc2lzLAogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKICogZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKICog
TGljZW5zZS4KICoKICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KICoK
ICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCiAqIG1vemls
bGEub3JnLgogKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUg
Q29weXJpZ2h0IChDKSAyMDA0CiAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICoKICogQ29udHJpYnV0b3Iocyk6CiAqICAgSm9obm55IFN0ZW5iYWNrIDxqc3RA
bW96aWxsYS5vcmc+IChPcmlnaW5hbCBhdXRob3IpCiAqCiAqIEFsdGVybmF0aXZlbHksIHRoZSBj
b250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCiAqIGVp
dGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0
aGUgIkdQTCIpLCBvcgogKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKICogaW4gd2hpY2ggY2FzZSB0aGUgcHJv
dmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKICog
b2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIG9ubHkKICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9y
IHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwogKiB1c2UgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgog
KiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0
aGVtIHdpdGggdGhlIG5vdGljZQogKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0
aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQogKiB0aGUgcHJvdmlzaW9u
cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyCiAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExH
UEwuCiAqCiAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCgovKgogKiBIZWFkZXIg
ZmlsZSBmb3IgZW5zdXJpbmcgdGhhdCBDOTkgdHlwZXMgKFt1XWludDMyX3QgYW5kIGJvb2wpIGFy
ZQogKiBhdmFpbGFibGUuCiAqLwoKI2lmIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoT1MyKQog
IC8qCiAgICogV2luMzIgYW5kIE9TLzIgZG9uJ3Qga25vdyBDOTksIHNvIGRlZmluZSBbdV1pbnRf
MTYvMzIgaGVyZS4gVGhlIGJvb2wKICAgKiBpcyBwcmVkZWZpbmVkIHRobywgYm90aCBpbiBDIGFu
ZCBDKysuCiAgICovCiAgdHlwZWRlZiBzaG9ydCBpbnQxNl90OwogIHR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgdWludDE2X3Q7CiAgdHlwZWRlZiBpbnQgaW50MzJfdDsKICB0eXBlZGVmIHVuc2lnbmVk
IGludCB1aW50MzJfdDsKI2VsaWYgZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKF9fc3VuKSB8fCBk
ZWZpbmVkKF9fb3NmX18pIHx8IGRlZmluZWQoSVJJWCkgfHwgZGVmaW5lZChIUFVYKQogIC8qCiAg
ICogQUlYIGFuZCBTdW5PUyBzaGlwIGEgaW50dHlwZXMuaCBoZWFkZXIgdGhhdCBkZWZpbmVzIFt1
XWludDMyX3QsCiAgICogYnV0IG5vdCBib29sIGZvciBDLgogICAqLwogICNpbmNsdWRlIDxpbnR0
eXBlcy5oPgoKICAjaWZuZGVmIF9fY3BsdXNwbHVzCiAgICB0eXBlZGVmIGludCBib29sOwogICNl
bmRpZgojZWxpZiBkZWZpbmVkKGJzZGkpIHx8IGRlZmluZWQoRlJFRUJTRCkgfHwgZGVmaW5lZChP
UEVOQlNEKQogIC8qCiAgICogQlNEL09TLCBGcmVlQlNELCBhbmQgT3BlbkJTRCBzaGlwIHN5cy90
eXBlcy5oIHRoYXQgZGVmaW5lIGludDMyX3QgYW5kIAogICAqIHVfaW50MzJfdC4KICAgKi8KICAj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+CgogIC8qCiAgICogQlNEL09TIHNoaXBzIG5vIGhlYWRlciB0
aGF0IGRlZmluZXMgdWludDMyX3QsIG5vciBib29sIChmb3IgQykKICAgKi8KICAjaWYgZGVmaW5l
ZChic2RpKQogIHR5cGVkZWYgdV9pbnQzMl90IHVpbnQzMl90OwoKICAjaWYgIWRlZmluZWQoX19j
cGx1c3BsdXMpCiAgICB0eXBlZGVmIGludCBib29sOwogICNlbmRpZgogICNlbHNlCiAgLyoKICAg
KiBGcmVlQlNEIGFuZCBPcGVuQlNEIGRlZmluZSB1aW50MzJfdCBhbmQgYm9vbC4KICAgKi8KICAg
ICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogICAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICAjZW5kaWYK
I2VsaWYgZGVmaW5lZChCRU9TKQogICNpbmNsdWRlIDxpbnR0eXBlcy5oPgojZWxzZQogIC8qCiAg
ICogRm9yIHRob3NlIHRoYXQgc2hpcCBhIHN0YW5kYXJkIEM5OSBzdGRpbnQuaCBoZWFkZXIgZmls
ZSwgaW5jbHVkZQogICAqIGl0LiBDYW4ndCBkbyB0aGUgc2FtZSBmb3Igc3RkYm9vbC5oIHRobywg
c2luY2Ugc29tZSBzeXN0ZW1zIHNoaXAKICAgKiB3aXRoIGEgc3RkYm9vbC5oIGZpbGUgdGhhdCBk
b2Vzbid0IGNvbXBpbGUhCiAgICovCiAgI2luY2x1ZGUgPHN0ZGludC5oPgoKICAjaWZuZGVmIF9f
Y3BsdXNwbHVzCiAgICAjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IChfX0dOVUNfXyA+IDIgfHwg
X19HTlVDX01JTk9SX18gPiA5NSkKICAgICAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICAgICNlbHNl
CiAgICAgIC8qCiAgICAgICAqIEdDQyAyLjkxIGNhbid0IGRlYWwgd2l0aCBhIHR5cGVkZWYgZm9y
IGJvb2wsIGJ1dCBhICNkZWZpbmUKICAgICAgICogd29ya3MuCiAgICAgICAqLwogICAgICAjZGVm
aW5lIGJvb2wgaW50CiAgICAjZW5kaWYKICAjZW5kaWYKI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54739</attachid>
            <date>2010-04-29 15:01:39 -0700</date>
            <delta_ts>2010-04-30 12:04:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-20784-20100429150137.patch</filename>
            <type>text/plain</type>
            <size>35460</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODU0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDQtMjkgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXJzdCBwYXJ0IG9mCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDc4NAorICAgICAgICBtb3ZlIG5wYXBpLmggdG8gQzk5IGludGVnZXIgdHlwZXMu
CisKKyAgICAgICAgQWRkIG5wdHlwZXMuaCB0byB0aGUgYnVpbGQuCisKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnJpZGdlL25wYXBpLmg6
CisgICAgICAgICogYnJpZGdlL25wcnVudGltZS5oOgorICAgICAgICAqIGJyaWRnZS9ucHR5cGVz
Lmg6IEFkZGVkLgorCiAyMDEwLTA0LTI5ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4K
IAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU4NTMzKQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI5OSw2ICsyOTksNyBAQAogCQkxQTIyNDY0QzBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3Rh
dGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTIyNDY0NjBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmggKi87IH07CiAJCTFB
MjI0NjREMENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIyNDY0NzBDQzk4RERCMDBD
MDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rpb24uY3BwICovOyB9OwogCQkxQTIyNDY0RTBDQzk4RERC
MDBDMDUyNDAgLyogU1FMaXRlVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjI0NjQ4MENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVU
cmFuc2FjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTFBMjdDRjk3MTE4QTM1NEMwMDQxRDYzMiAvKiBucHR5cGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTI3Q0Y5NjExOEEzNTRDMDA0MUQ2
MzIgLyogbnB0eXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTFBMkE2ODIzMEI1QkVERTcwMDAyQTQ4MCAvKiBQcm9ncmVzc1RyYWNrZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyQTY4MjEw
QjVCRURFNzAwMDJBNDgwIC8qIFByb2dyZXNzVHJhY2tlci5jcHAgKi87IH07CiAJCTFBMkE2ODI0
MEI1QkVERTcwMDAyQTQ4MCAvKiBQcm9ncmVzc1RyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkE2ODIyMEI1QkVERTcwMDAyQTQ4MCAvKiBQ
cm9ncmVzc1RyYWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxQTJBQUM1ODBEQzJBM0IxMDBBMjBEOUEgLyogQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEyQUFDNTYwREMyQTNCMTAwQTIwRDlBIC8qIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCAq
LzsgfTsKQEAgLTU2OTYsNiArNTY5Nyw3IEBACiAJCTFBMjI0NjQ2MENDOThEREIwMEMwNTI0MCAv
KiBTUUxpdGVTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FM
aXRlU3RhdGVtZW50Lmg7IHBhdGggPSBzcWwvU1FMaXRlU3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBMjI0NjQ3MENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVUcmFu
c2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxpdGVU
cmFuc2FjdGlvbi5jcHA7IHBhdGggPSBzcWwvU1FMaXRlVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTIyNDY0ODBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRl
VHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMaXRlVHJh
bnNhY3Rpb24uaDsgcGF0aCA9IHNxbC9TUUxpdGVUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQTI3Q0Y5NjExOEEzNTRDMDA0MUQ2MzIgLyogbnB0eXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBucHR5cGVzLmg7IHBhdGggPSBicmlkZ2Uv
bnB0eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTJBNjgyMTBCNUJFREU3
MDAwMkE0ODAgLyogUHJvZ3Jlc3NUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQcm9ncmVzc1RyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQTJBNjgyMjBCNUJFREU3MDAwMkE0ODAgLyogUHJvZ3Jlc3NUcmFja2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmVzc1RyYWNrZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEyQUFDNTYwREMyQTNCMTAwQTIwRDlBIC8qIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEwNjIzLDYgKzEwNjI1LDcgQEAKIAkJCQkxQTU2OUNERjBEN0UyQjgyMDA3QzM5ODMg
LyogbnBydW50aW1lX2ltcGwuaCAqLywKIAkJCQkxQTU2OUNFMDBEN0UyQjgyMDA3QzM5ODMgLyog
bnBydW50aW1lX2ludGVybmFsLmggKi8sCiAJCQkJMUE1NjlDRTEwRDdFMkI4MjAwN0MzOTgzIC8q
IG5wcnVudGltZV9wcml2LmggKi8sCisJCQkJMUEyN0NGOTYxMThBMzU0QzAwNDFENjMyIC8qIG5w
dHlwZXMuaCAqLywKIAkJCQkxQTU2OUNFRjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJh
eS5jcHAgKi8sCiAJCQkJMUE1NjlDRjAwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXku
aCAqLywKIAkJCQkxQTU2OUNGMTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9tZXRob2QuY3Bw
ICovLApAQCAtMTg5MDgsNiArMTg5MTEsNyBAQAogCQkJCUI1MjNDRjA2MTE4MjY3NTQwMEVCQjI5
QyAvKiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjUy
M0NGMDgxMTgyNjc1NDAwRUJCMjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjUyM0NGMEIxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMUEyN0NGOTcxMThBMzU0QzAwNDFENjMyIC8qIG5wdHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9icmlkZ2UvbnBhcGkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9ucGFwaS5oCShyZXZpc2lvbiA1ODUzMykKKysrIFdlYkNvcmUvYnJpZGdl
L25wYXBpLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAKICNpZm5kZWYgX05QQVBJ
X0hfCiAjZGVmaW5lIF9OUEFQSV9IXwogCisjaW5jbHVkZSAibnB0eXBlcy5oIgorCiAjaWZkZWYg
SU5DTFVERV9KQVZBCiAjaW5jbHVkZSAianJpLmgiICAgICAgICAgICAgICAgIC8qIEphdmEgUnVu
dGltZSBJbnRlcmZhY2UgKi8KICNlbHNlCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWUuaAkocmV2aXNpb24gNTg1
MzMpCisrKyBXZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIs
NyArNzIsNiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2luY2x1ZGUgPHN0ZGludC5oPgog
I2luY2x1ZGUgIm5wYXBpLmgiCiAKIC8qCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ucHR5cGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbnB0eXBlcy5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9icmlkZ2UvbnB0eXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxNCBAQAor
LyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJh
c2ljLW9mZnNldDogMiAtKi0gKi8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioK
KyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01Q
TC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxh
Lm9yZyBjb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwg
Q29kZSBpcworICogbW96aWxsYS5vcmcuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0
aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDA0CisgKiB0aGUgSW5pdGlhbCBEZXZl
bG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKiAg
IEpvaG5ueSBTdGVuYmFjayA8anN0QG1vemlsbGEub3JnPiAoT3JpZ2luYWwgYXV0aG9yKQorICoK
KyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIp
LAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BM
IGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0
aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFu
ZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlv
dSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qCisgKiBIZWFkZXIgZmlsZSBmb3IgZW5zdXJpbmcg
dGhhdCBDOTkgdHlwZXMgKFt1XWludDMyX3QgYW5kIGJvb2wpIGFyZQorICogYXZhaWxhYmxlLgor
ICovCisKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKE9TMikKKyAgLyoKKyAgICogV2lu
MzIgYW5kIE9TLzIgZG9uJ3Qga25vdyBDOTksIHNvIGRlZmluZSBbdV1pbnRfMTYvMzIgaGVyZS4g
VGhlIGJvb2wKKyAgICogaXMgcHJlZGVmaW5lZCB0aG8sIGJvdGggaW4gQyBhbmQgQysrLgorICAg
Ki8KKyAgdHlwZWRlZiBzaG9ydCBpbnQxNl90OworICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVp
bnQxNl90OworICB0eXBlZGVmIGludCBpbnQzMl90OworICB0eXBlZGVmIHVuc2lnbmVkIGludCB1
aW50MzJfdDsKKyNlbGlmIGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5l
ZChfX29zZl9fKSB8fCBkZWZpbmVkKElSSVgpIHx8IGRlZmluZWQoSFBVWCkKKyAgLyoKKyAgICog
QUlYIGFuZCBTdW5PUyBzaGlwIGEgaW50dHlwZXMuaCBoZWFkZXIgdGhhdCBkZWZpbmVzIFt1XWlu
dDMyX3QsCisgICAqIGJ1dCBub3QgYm9vbCBmb3IgQy4KKyAgICovCisgICNpbmNsdWRlIDxpbnR0
eXBlcy5oPgorCisgICNpZm5kZWYgX19jcGx1c3BsdXMKKyAgICB0eXBlZGVmIGludCBib29sOwor
ICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoYnNkaSkgfHwgZGVmaW5lZChGUkVFQlNEKSB8fCBkZWZp
bmVkKE9QRU5CU0QpCisgIC8qCisgICAqIEJTRC9PUywgRnJlZUJTRCwgYW5kIE9wZW5CU0Qgc2hp
cCBzeXMvdHlwZXMuaCB0aGF0IGRlZmluZSBpbnQzMl90IGFuZCAKKyAgICogdV9pbnQzMl90Lgor
ICAgKi8KKyAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisgIC8qCisgICAqIEJTRC9PUyBzaGlw
cyBubyBoZWFkZXIgdGhhdCBkZWZpbmVzIHVpbnQzMl90LCBub3IgYm9vbCAoZm9yIEMpCisgICAq
LworICAjaWYgZGVmaW5lZChic2RpKQorICB0eXBlZGVmIHVfaW50MzJfdCB1aW50MzJfdDsKKwor
ICAjaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpCisgICAgdHlwZWRlZiBpbnQgYm9vbDsKKyAgI2Vu
ZGlmCisgICNlbHNlCisgIC8qCisgICAqIEZyZWVCU0QgYW5kIE9wZW5CU0QgZGVmaW5lIHVpbnQz
Ml90IGFuZCBib29sLgorICAgKi8KKyAgICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAgICAjaW5j
bHVkZSA8c3RkYm9vbC5oPgorICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoQkVPUykKKyAgI2luY2x1
ZGUgPGludHR5cGVzLmg+CisjZWxzZQorICAvKgorICAgKiBGb3IgdGhvc2UgdGhhdCBzaGlwIGEg
c3RhbmRhcmQgQzk5IHN0ZGludC5oIGhlYWRlciBmaWxlLCBpbmNsdWRlCisgICAqIGl0LiBDYW4n
dCBkbyB0aGUgc2FtZSBmb3Igc3RkYm9vbC5oIHRobywgc2luY2Ugc29tZSBzeXN0ZW1zIHNoaXAK
KyAgICogd2l0aCBhIHN0ZGJvb2wuaCBmaWxlIHRoYXQgZG9lc24ndCBjb21waWxlIQorICAgKi8K
KyAgI2luY2x1ZGUgPHN0ZGludC5oPgorCisgICNpZm5kZWYgX19jcGx1c3BsdXMKKyAgICAjaWYg
IWRlZmluZWQoX19HTlVDX18pIHx8IChfX0dOVUNfXyA+IDIgfHwgX19HTlVDX01JTk9SX18gPiA5
NSkKKyAgICAgICNpbmNsdWRlIDxzdGRib29sLmg+CisgICAgI2Vsc2UKKyAgICAgIC8qCisgICAg
ICAgKiBHQ0MgMi45MSBjYW4ndCBkZWFsIHdpdGggYSB0eXBlZGVmIGZvciBib29sLCBidXQgYSAj
ZGVmaW5lCisgICAgICAgKiB3b3Jrcy4KKyAgICAgICAqLworICAgICAgI2RlZmluZSBib29sIGlu
dAorICAgICNlbmRpZgorICAjZW5kaWYKKyNlbmRpZgorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0
aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KKy8q
ICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BM
IDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1Ympl
Y3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxp
Y2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJh
c2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAq
CisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgorICoKKyAqIFRoZSBJ
bml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogbW96aWxsYS5vcmcu
CisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJp
Z2h0IChDKSAyMDA0CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKiAgIEpvaG5ueSBTdGVuYmFjayA8anN0QG1v
emlsbGEub3JnPiAoT3JpZ2luYWwgYXV0aG9yKQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBj
b250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBl
aXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAo
dGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQK
KyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBH
UEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUg
eW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJl
cGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVp
cmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUg
cHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BM
IG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisK
Ky8qCisgKiBIZWFkZXIgZmlsZSBmb3IgZW5zdXJpbmcgdGhhdCBDOTkgdHlwZXMgKFt1XWludDMy
X3QgYW5kIGJvb2wpIGFyZQorICogYXZhaWxhYmxlLgorICovCisKKyNpZiBkZWZpbmVkKFdJTjMy
KSB8fCBkZWZpbmVkKE9TMikKKyAgLyoKKyAgICogV2luMzIgYW5kIE9TLzIgZG9uJ3Qga25vdyBD
OTksIHNvIGRlZmluZSBbdV1pbnRfMTYvMzIgaGVyZS4gVGhlIGJvb2wKKyAgICogaXMgcHJlZGVm
aW5lZCB0aG8sIGJvdGggaW4gQyBhbmQgQysrLgorICAgKi8KKyAgdHlwZWRlZiBzaG9ydCBpbnQx
Nl90OworICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90OworICB0eXBlZGVmIGludCBp
bnQzMl90OworICB0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKKyNlbGlmIGRlZmluZWQo
X0FJWCkgfHwgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChfX29zZl9fKSB8fCBkZWZpbmVkKElS
SVgpIHx8IGRlZmluZWQoSFBVWCkKKyAgLyoKKyAgICogQUlYIGFuZCBTdW5PUyBzaGlwIGEgaW50
dHlwZXMuaCBoZWFkZXIgdGhhdCBkZWZpbmVzIFt1XWludDMyX3QsCisgICAqIGJ1dCBub3QgYm9v
bCBmb3IgQy4KKyAgICovCisgICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisgICNpZm5kZWYgX19j
cGx1c3BsdXMKKyAgICB0eXBlZGVmIGludCBib29sOworICAjZW5kaWYKKyNlbGlmIGRlZmluZWQo
YnNkaSkgfHwgZGVmaW5lZChGUkVFQlNEKSB8fCBkZWZpbmVkKE9QRU5CU0QpCisgIC8qCisgICAq
IEJTRC9PUywgRnJlZUJTRCwgYW5kIE9wZW5CU0Qgc2hpcCBzeXMvdHlwZXMuaCB0aGF0IGRlZmlu
ZSBpbnQzMl90IGFuZCAKKyAgICogdV9pbnQzMl90LgorICAgKi8KKyAgI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorCisgIC8qCisgICAqIEJTRC9PUyBzaGlwcyBubyBoZWFkZXIgdGhhdCBkZWZpbmVz
IHVpbnQzMl90LCBub3IgYm9vbCAoZm9yIEMpCisgICAqLworICAjaWYgZGVmaW5lZChic2RpKQor
ICB0eXBlZGVmIHVfaW50MzJfdCB1aW50MzJfdDsKKworICAjaWYgIWRlZmluZWQoX19jcGx1c3Bs
dXMpCisgICAgdHlwZWRlZiBpbnQgYm9vbDsKKyAgI2VuZGlmCisgICNlbHNlCisgIC8qCisgICAq
IEZyZWVCU0QgYW5kIE9wZW5CU0QgZGVmaW5lIHVpbnQzMl90IGFuZCBib29sLgorICAgKi8KKyAg
ICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICAjZW5k
aWYKKyNlbGlmIGRlZmluZWQoQkVPUykKKyAgI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQor
ICAvKgorICAgKiBGb3IgdGhvc2UgdGhhdCBzaGlwIGEgc3RhbmRhcmQgQzk5IHN0ZGludC5oIGhl
YWRlciBmaWxlLCBpbmNsdWRlCisgICAqIGl0LiBDYW4ndCBkbyB0aGUgc2FtZSBmb3Igc3RkYm9v
bC5oIHRobywgc2luY2Ugc29tZSBzeXN0ZW1zIHNoaXAKKyAgICogd2l0aCBhIHN0ZGJvb2wuaCBm
aWxlIHRoYXQgZG9lc24ndCBjb21waWxlIQorICAgKi8KKyAgI2luY2x1ZGUgPHN0ZGludC5oPgor
CisgICNpZm5kZWYgX19jcGx1c3BsdXMKKyAgICAjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IChf
X0dOVUNfXyA+IDIgfHwgX19HTlVDX01JTk9SX18gPiA5NSkKKyAgICAgICNpbmNsdWRlIDxzdGRi
b29sLmg+CisgICAgI2Vsc2UKKyAgICAgIC8qCisgICAgICAgKiBHQ0MgMi45MSBjYW4ndCBkZWFs
IHdpdGggYSB0eXBlZGVmIGZvciBib29sLCBidXQgYSAjZGVmaW5lCisgICAgICAgKiB3b3Jrcy4K
KyAgICAgICAqLworICAgICAgI2RlZmluZSBib29sIGludAorICAgICNlbmRpZgorICAjZW5kaWYK
KyNlbmRpZgpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NTQwKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNC0yOSAgQW5kZXJzIENhcmxz
c29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpcnN0IHBhcnQgb2YKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzg0CisgICAgICAgIG1vdmUgbnBhcGkuaCB0byBD
OTkgaW50ZWdlciB0eXBlcy4KKworICAgICAgICAqIE1pZ3JhdGVIZWFkZXJzLm1ha2U6CisKIDIw
MTAtMDQtMjggIE1pa2UgVGhvbGUgIDxtdGhvbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIEtpbHplci4KSW5kZXg6IFdlYktpdC9tYWMvTWlncmF0ZUhlYWRlcnMubWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pZ3JhdGVIZWFkZXJzLm1ha2UJKHJldmlzaW9u
IDU4NTMzKQorKysgV2ViS2l0L21hYy9NaWdyYXRlSGVhZGVycy5tYWtlCSh3b3JraW5nIGNvcHkp
CkBAIC0xODUsNiArMTg1LDcgQEAgYWxsIDogXAogICAgICQoUFVCTElDX0hFQURFUlNfRElSKS9u
cGFwaS5oIFwKICAgICAkKFBVQkxJQ19IRUFERVJTX0RJUikvbnBmdW5jdGlvbnMuaCBcCiAgICAg
JChQVUJMSUNfSEVBREVSU19ESVIpL25wcnVudGltZS5oIFwKKyAgICAkKFBVQkxJQ19IRUFERVJT
X0RJUikvbnB0eXBlcy5oIFwKICMKIAogaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9TVkdfRE9N
X09CSkNfQklORElOR1MsJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxFX1NWR19ET01fT0JKQ19C
SU5ESU5HUykKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA1ODU0MCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMjkgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGaXJzdCBwYXJ0IG9mCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4NAorICAgICAgICBtb3ZlIG5wYXBpLmggdG8g
Qzk5IGludGVnZXIgdHlwZXMuCisKKyAgICAgICAgKiBXZWJLaXQudmNwcm9qL1dlYktpdC52Y3By
b2o6CisKIDIwMTAtMDQtMjggIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0L3dpbi9XZWJLaXQudmNw
cm9qL1dlYktpdC52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9q
L1dlYktpdC52Y3Byb2oJKHJldmlzaW9uIDU4NTMzKQorKysgV2ViS2l0L3dpbi9XZWJLaXQudmNw
cm9qL1dlYktpdC52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAKIAkJCS8+
DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1h
bmRMaW5lPSJta2RpciAyJmd0O05VTCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxX
ZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFBy
b2plY3REaXIpXC4uXFdlYkxvY2FsaXphYmxlU3RyaW5ncy5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZx
dW90OyQoUHJvamVjdERpcilcLi5cV2ViS2l0R3JhcGhpY3MuaCZxdW90OyAmcXVvdDskKFdlYktp
dE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAm
cXVvdDskKFByb2plY3REaXIpXC4uXFdlYktpdENPTUFQSS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZx
dW90OyQoUHJvamVjdERpcilcLi5cV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgmcXVvdDsgJnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7JiN4
MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2Vi
Q29yZVxucGZ1bmN0aW9ucy5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRl
XFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0
RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBhcGkuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5wcnVudGltZS5oJnF1b3Q7ICZxdW90OyQo
V2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95
IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBydW50aW1lX2lu
dGVybmFsLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1
b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7bWtkaXIgMiZndDtOVUwgJnF1b3Q7JChPdXREaXIp
XFdlYktpdC5yZXNvdXJjZXMmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFBy
b2plY3REaXIpLi5cJChQcm9qZWN0TmFtZSkucmVzb3VyY2VzXComcXVvdDsgJnF1b3Q7JChPdXRE
aXIpXCQoUHJvamVjdE5hbWUpLnJlc291cmNlcyZxdW90OyYjeDBEOyYjeDBBO21rZGlyIDImZ3Q7
TlVMICZxdW90OyQoT3V0RGlyKVxXZWJLaXQucmVzb3VyY2VzXGVuLmxwcm9qJnF1b3Q7JiN4MEQ7
JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4uXEVuZ2xpc2gubHByb2pc
TG9jYWxpemFibGUuc3RyaW5ncyZxdW90OyAmcXVvdDskKE91dERpcilcV2ViS2l0LnJlc291cmNl
c1xlbi5scHJvalwmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtpZiBleGlzdCAmcXVvdDsk
KFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsgZGVsICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyYjeDBEOyYjeDBBOyINCisJCQkJQ29tbWFuZExpbmU9
Im1rZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZx
dW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERp
cilcLi5cV2ViTG9jYWxpemFibGVTdHJpbmdzLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQ
cm9qZWN0RGlyKVwuLlxXZWJLaXRHcmFwaGljcy5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0
RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQo
UHJvamVjdERpcilcLi5cV2ViS2l0Q09NQVBJLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQ
cm9qZWN0RGlyKVwuLlxXZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCZxdW90OyAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gw
QTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5w
YXBpLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7
JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVc
V2ViQ29yZVxucGZ1bmN0aW9ucy5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNs
dWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBydW50aW1lLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRP
dXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucHJ1bnRpbWVfaW50ZXJuYWwu
aCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gw
RDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJD
b3JlXG5wdHlwZXMuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJL
aXQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtta2RpciAyJmd0O05VTCAmcXVvdDskKE91
dERpcilcV2ViS2l0LnJlc291cmNlcyZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90
OyQoUHJvamVjdERpcikuLlwkKFByb2plY3ROYW1lKS5yZXNvdXJjZXNcKiZxdW90OyAmcXVvdDsk
KE91dERpcilcJChQcm9qZWN0TmFtZSkucmVzb3VyY2VzJnF1b3Q7JiN4MEQ7JiN4MEE7bWtkaXIg
MiZndDtOVUwgJnF1b3Q7JChPdXREaXIpXFdlYktpdC5yZXNvdXJjZXNcZW4ubHByb2omcXVvdDsm
I3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cRW5nbGlzaC5s
cHJvalxMb2NhbGl6YWJsZS5zdHJpbmdzJnF1b3Q7ICZxdW90OyQoT3V0RGlyKVxXZWJLaXQucmVz
b3VyY2VzXGVuLmxwcm9qXCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO2lmIGV4aXN0ICZx
dW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyBkZWwgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQk8
L0NvbmZpZ3VyYXRpb24+DQogCQk8Q29uZmlndXJhdGlvbg0KQEAgLTE2NSw3ICsxNjUsNyBAQAog
CQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJ
Q29tbWFuZExpbmU9Im1rZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNs
dWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90
OyQoUHJvamVjdERpcilcLi5cV2ViTG9jYWxpemFibGVTdHJpbmdzLmgmcXVvdDsgJnF1b3Q7JChX
ZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kg
L2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJLaXRHcmFwaGljcy5oJnF1b3Q7ICZxdW90OyQo
V2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95
IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViS2l0Q09NQVBJLmgmcXVvdDsgJnF1b3Q7JChX
ZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kg
L2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCZxdW90
OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gw
QTsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVk
ZVxXZWJDb3JlXG5wZnVuY3Rpb25zLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGlu
Y2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRP
dXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucGFwaS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBydW50aW1lLmgmcXVvdDsgJnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNv
cHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucHJ1bnRp
bWVfaW50ZXJuYWwuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJL
aXQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtta2RpciAyJmd0O05VTCAmcXVvdDskKE91
dERpcilcV2ViS2l0LnJlc291cmNlcyZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90
OyQoUHJvamVjdERpcikuLlwkKFByb2plY3ROYW1lKS5yZXNvdXJjZXNcKiZxdW90OyAmcXVvdDsk
KE91dERpcilcJChQcm9qZWN0TmFtZSkucmVzb3VyY2VzJnF1b3Q7JiN4MEQ7JiN4MEE7bWtkaXIg
MiZndDtOVUwgJnF1b3Q7JChPdXREaXIpXFdlYktpdC5yZXNvdXJjZXNcZW4ubHByb2omcXVvdDsm
I3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5cLi5cRW5nbGlzaC5s
cHJvalxMb2NhbGl6YWJsZS5zdHJpbmdzJnF1b3Q7ICZxdW90OyQoT3V0RGlyKVxXZWJLaXQucmVz
b3VyY2VzXGVuLmxwcm9qXCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO2lmIGV4aXN0ICZx
dW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyBkZWwgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KKwkJCQlDb21tYW5k
TGluZT0ibWtkaXIgMiZndDtOVUwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2Vi
S2l0JnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9q
ZWN0RGlyKVwuLlxXZWJMb2NhbGl6YWJsZVN0cmluZ3MuaCZxdW90OyAmcXVvdDskKFdlYktpdE91
dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVv
dDskKFByb2plY3REaXIpXC4uXFdlYktpdEdyYXBoaWNzLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRP
dXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1
b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJLaXRDT01BUEkuaCZxdW90OyAmcXVvdDskKFdlYktpdE91
dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVv
dDskKFByb2plY3REaXIpXC4uXFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oJnF1b3Q7ICZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBOyYjeDBE
OyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNv
cmVcbnBhcGkuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQm
cXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5j
bHVkZVxXZWJDb3JlXG5wZnVuY3Rpb25zLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucHJ1bnRpbWUuaCZxdW90OyAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAv
ZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5wcnVudGltZV9pbnRl
cm5hbC5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90
OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRl
XFdlYkNvcmVcbnB0eXBlcy5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRl
XFdlYktpdCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO21rZGlyIDImZ3Q7TlVMICZxdW90
OyQoT3V0RGlyKVxXZWJLaXQucmVzb3VyY2VzJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2Qg
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXCQoUHJvamVjdE5hbWUpLnJlc291cmNlc1wqJnF1b3Q7ICZx
dW90OyQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5yZXNvdXJjZXMmcXVvdDsmI3gwRDsmI3gwQTtt
a2RpciAyJmd0O05VTCAmcXVvdDskKE91dERpcilcV2ViS2l0LnJlc291cmNlc1xlbi5scHJvaiZx
dW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxFbmds
aXNoLmxwcm9qXExvY2FsaXphYmxlLnN0cmluZ3MmcXVvdDsgJnF1b3Q7JChPdXREaXIpXFdlYktp
dC5yZXNvdXJjZXNcZW4ubHByb2pcJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhp
c3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDsk
KFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQogCQkJLz4N
CiAJCTwvQ29uZmlndXJhdGlvbj4NCiAJCTxDb25maWd1cmF0aW9uDQpAQCAtMjQyLDcgKzI0Miw3
IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0K
LQkJCQlDb21tYW5kTGluZT0ibWtkaXIgMiZndDtOVUwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2Qg
JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJMb2NhbGl6YWJsZVN0cmluZ3MuaCZxdW90OyAmcXVv
dDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29w
eSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYktpdEdyYXBoaWNzLmgmcXVvdDsgJnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNv
cHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJLaXRDT01BUEkuaCZxdW90OyAmcXVv
dDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29w
eSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5o
JnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBE
OyYjeDBBOyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxp
bmNsdWRlXFdlYkNvcmVcbnBmdW5jdGlvbnMuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5wYXBpLmgmcXVvdDsgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2Qg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucHJ1bnRpbWUuaCZxdW90
OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gw
QTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5w
cnVudGltZV9pbnRlcm5hbC5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRl
XFdlYktpdCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO21rZGlyIDImZ3Q7TlVMICZxdW90
OyQoT3V0RGlyKVxXZWJLaXQucmVzb3VyY2VzJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2Qg
JnF1b3Q7JChQcm9qZWN0RGlyKS4uXCQoUHJvamVjdE5hbWUpLnJlc291cmNlc1wqJnF1b3Q7ICZx
dW90OyQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5yZXNvdXJjZXMmcXVvdDsmI3gwRDsmI3gwQTtt
a2RpciAyJmd0O05VTCAmcXVvdDskKE91dERpcilcV2ViS2l0LnJlc291cmNlc1xlbi5scHJvaiZx
dW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlwuLlxFbmds
aXNoLmxwcm9qXExvY2FsaXphYmxlLnN0cmluZ3MmcXVvdDsgJnF1b3Q7JChPdXREaXIpXFdlYktp
dC5yZXNvdXJjZXNcZW4ubHByb2pcJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7aWYgZXhp
c3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7IGRlbCAmcXVvdDsk
KFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsmI3gwQTsiDQorCQkJCUNv
bW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVk
ZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDsk
KFByb2plY3REaXIpXC4uXFdlYkxvY2FsaXphYmxlU3RyaW5ncy5oJnF1b3Q7ICZxdW90OyQoV2Vi
S2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9k
ICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViS2l0R3JhcGhpY3MuaCZxdW90OyAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAv
ZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYktpdENPTUFQSS5oJnF1b3Q7ICZxdW90OyQoV2Vi
S2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9k
ICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgmcXVvdDsg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7
JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVc
V2ViQ29yZVxucGFwaS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdl
YktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGly
KVxpbmNsdWRlXFdlYkNvcmVcbnBmdW5jdGlvbnMuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1
dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDsk
KFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5wcnVudGltZS5oJnF1b3Q7ICZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5
IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBydW50aW1l
X2ludGVybmFsLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0
JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGlu
Y2x1ZGVcV2ViQ29yZVxucHR5cGVzLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGlu
Y2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7bWtkaXIgMiZndDtOVUwg
JnF1b3Q7JChPdXREaXIpXFdlYktpdC5yZXNvdXJjZXMmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAv
eSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5cJChQcm9qZWN0TmFtZSkucmVzb3VyY2VzXComcXVv
dDsgJnF1b3Q7JChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnJlc291cmNlcyZxdW90OyYjeDBEOyYj
eDBBO21rZGlyIDImZ3Q7TlVMICZxdW90OyQoT3V0RGlyKVxXZWJLaXQucmVzb3VyY2VzXGVuLmxw
cm9qJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4u
XEVuZ2xpc2gubHByb2pcTG9jYWxpemFibGUuc3RyaW5ncyZxdW90OyAmcXVvdDskKE91dERpcilc
V2ViS2l0LnJlc291cmNlc1xlbi5scHJvalwmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtp
ZiBleGlzdCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsgZGVsICZx
dW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyYjeDBEOyYjeDBBOyINCiAJ
CQkvPg0KIAkJPC9Db25maWd1cmF0aW9uPg0KIAkJPENvbmZpZ3VyYXRpb24NCkBAIC0zMTksNyAr
MzE5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRv
b2wiDQotCQkJCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAmcXVvdDskKFdlYktpdE91dHB1
dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTt4Y29weSAv
eSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYkxvY2FsaXphYmxlU3RyaW5ncy5oJnF1b3Q7
ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBB
O3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViS2l0R3JhcGhpY3MuaCZxdW90
OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gw
QTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYktpdENPTUFQSS5oJnF1b3Q7
ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBB
O3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViUHJlZmVyZW5jZUtleXNQcml2
YXRlLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7
JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXGluY2x1ZGVcV2ViQ29yZVxucGZ1bmN0aW9ucy5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBhcGkuaCZxdW90OyAmcXVvdDsk
KFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAv
eSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5wcnVudGltZS5o
JnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBE
OyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNv
cmVcbnBydW50aW1lX2ludGVybmFsLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGlu
Y2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7bWtkaXIgMiZndDtOVUwg
JnF1b3Q7JChPdXREaXIpXFdlYktpdC5yZXNvdXJjZXMmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAv
eSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5cJChQcm9qZWN0TmFtZSkucmVzb3VyY2VzXComcXVv
dDsgJnF1b3Q7JChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnJlc291cmNlcyZxdW90OyYjeDBEOyYj
eDBBO21rZGlyIDImZ3Q7TlVMICZxdW90OyQoT3V0RGlyKVxXZWJLaXQucmVzb3VyY2VzXGVuLmxw
cm9qJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXC4u
XEVuZ2xpc2gubHByb2pcTG9jYWxpemFibGUuc3RyaW5ncyZxdW90OyAmcXVvdDskKE91dERpcilc
V2ViS2l0LnJlc291cmNlc1xlbi5scHJvalwmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtp
ZiBleGlzdCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsgZGVsICZx
dW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyYjeDBEOyYjeDBBOyINCisJ
CQkJQ29tbWFuZExpbmU9Im1rZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxp
bmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZx
dW90OyQoUHJvamVjdERpcilcLi5cV2ViTG9jYWxpemFibGVTdHJpbmdzLmgmcXVvdDsgJnF1b3Q7
JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkg
L3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJLaXRHcmFwaGljcy5oJnF1b3Q7ICZxdW90
OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5
IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViS2l0Q09NQVBJLmgmcXVvdDsgJnF1b3Q7
JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkg
L3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCZx
dW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsm
I3gwQTsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5j
bHVkZVxXZWJDb3JlXG5wYXBpLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1
ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRw
dXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucGZ1bmN0aW9ucy5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZx
dW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBydW50aW1lLmgmcXVvdDsg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7
eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucHJ1
bnRpbWVfaW50ZXJuYWwuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxX
ZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxXZWJDb3JlXG5wdHlwZXMuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtta2RpciAyJmd0
O05VTCAmcXVvdDskKE91dERpcilcV2ViS2l0LnJlc291cmNlcyZxdW90OyYjeDBEOyYjeDBBO3hj
b3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlwkKFByb2plY3ROYW1lKS5yZXNvdXJjZXNc
KiZxdW90OyAmcXVvdDskKE91dERpcilcJChQcm9qZWN0TmFtZSkucmVzb3VyY2VzJnF1b3Q7JiN4
MEQ7JiN4MEE7bWtkaXIgMiZndDtOVUwgJnF1b3Q7JChPdXREaXIpXFdlYktpdC5yZXNvdXJjZXNc
ZW4ubHByb2omcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cRW5nbGlzaC5scHJvalxMb2NhbGl6YWJsZS5zdHJpbmdzJnF1b3Q7ICZxdW90OyQoT3V0
RGlyKVxXZWJLaXQucmVzb3VyY2VzXGVuLmxwcm9qXCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYj
eDBBO2lmIGV4aXN0ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyBk
ZWwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7JiN4MEQ7JiN4MEE7
Ig0KIAkJCS8+DQogCQk8L0NvbmZpZ3VyYXRpb24+DQogCQk8Q29uZmlndXJhdGlvbg0KQEAgLTM5
OCw3ICszOTgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2
ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9Im1rZGlyIDImZ3Q7TlVMICZxdW90OyQoV2ViS2l0
T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO3hj
b3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViTG9jYWxpemFibGVTdHJpbmdzLmgm
cXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7
JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJLaXRHcmFwaGljcy5o
JnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBE
OyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViS2l0Q09NQVBJLmgm
cXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7
JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQcmVmZXJlbmNlS2V5
c1ByaXZhdGUuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQm
cXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91
dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5wZnVuY3Rpb25zLmgmcXVvdDsgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2Qg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucGFwaS5oJnF1b3Q7ICZx
dW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hj
b3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBydW50
aW1lLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7
JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVc
V2ViQ29yZVxucHJ1bnRpbWVfaW50ZXJuYWwuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTtta2RpciAyJmd0
O05VTCAmcXVvdDskKE91dERpcilcV2ViS2l0LnJlc291cmNlcyZxdW90OyYjeDBEOyYjeDBBO3hj
b3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcikuLlwkKFByb2plY3ROYW1lKS5yZXNvdXJjZXNc
KiZxdW90OyAmcXVvdDskKE91dERpcilcJChQcm9qZWN0TmFtZSkucmVzb3VyY2VzJnF1b3Q7JiN4
MEQ7JiN4MEE7bWtkaXIgMiZndDtOVUwgJnF1b3Q7JChPdXREaXIpXFdlYktpdC5yZXNvdXJjZXNc
ZW4ubHByb2omcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIp
Li5cLi5cRW5nbGlzaC5scHJvalxMb2NhbGl6YWJsZS5zdHJpbmdzJnF1b3Q7ICZxdW90OyQoT3V0
RGlyKVxXZWJLaXQucmVzb3VyY2VzXGVuLmxwcm9qXCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYj
eDBBO2lmIGV4aXN0ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyBk
ZWwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1b3Q7JiN4MEQ7JiN4MEE7
Ig0KKwkJCQlDb21tYW5kTGluZT0ibWtkaXIgMiZndDtOVUwgJnF1b3Q7JChXZWJLaXRPdXRwdXRE
aXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7eGNvcHkgL3kg
L2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJMb2NhbGl6YWJsZVN0cmluZ3MuaCZxdW90OyAm
cXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4
Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYktpdEdyYXBoaWNzLmgmcXVvdDsg
JnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7
eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJLaXRDT01BUEkuaCZxdW90OyAm
cXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4
Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0
ZS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYj
eDBEOyYjeDBBOyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGly
KVxpbmNsdWRlXFdlYkNvcmVcbnBhcGkuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilc
aW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktp
dE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5wZnVuY3Rpb25zLmgmcXVvdDsgJnF1b3Q7JChX
ZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kg
L2QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucHJ1bnRpbWUuaCZx
dW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsm
I3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3Jl
XG5wcnVudGltZV9pbnRlcm5hbC5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNs
dWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnB0eXBlcy5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO21rZGly
IDImZ3Q7TlVMICZxdW90OyQoT3V0RGlyKVxXZWJLaXQucmVzb3VyY2VzJnF1b3Q7JiN4MEQ7JiN4
MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXCQoUHJvamVjdE5hbWUpLnJlc291
cmNlc1wqJnF1b3Q7ICZxdW90OyQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5yZXNvdXJjZXMmcXVv
dDsmI3gwRDsmI3gwQTtta2RpciAyJmd0O05VTCAmcXVvdDskKE91dERpcilcV2ViS2l0LnJlc291
cmNlc1xlbi5scHJvaiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVj
dERpcikuLlwuLlxFbmdsaXNoLmxwcm9qXExvY2FsaXphYmxlLnN0cmluZ3MmcXVvdDsgJnF1b3Q7
JChPdXREaXIpXFdlYktpdC5yZXNvdXJjZXNcZW4ubHByb2pcJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4
MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1
b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsm
I3gwQTsiDQogCQkJLz4NCiAJCTwvQ29uZmlndXJhdGlvbj4NCiAJCTxDb25maWd1cmF0aW9uDQpA
QCAtNDc1LDcgKzQ3NSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUG9zdEJ1
aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0ibWtkaXIgMiZndDtOVUwgJnF1b3Q7JChX
ZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4
MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJMb2NhbGl6YWJsZVN0cmlu
Z3MuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsm
I3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYktpdEdyYXBo
aWNzLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7
JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJLaXRDT01B
UEkuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsm
I3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlByZWZlcmVu
Y2VLZXlzUHJpdmF0ZS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdl
YktpdCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2Vi
S2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBmdW5jdGlvbnMuaCZxdW90OyAmcXVvdDsk
KFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAv
eSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5wYXBpLmgmcXVv
dDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4
MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxu
cHJ1bnRpbWUuaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQm
cXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5j
bHVkZVxXZWJDb3JlXG5wcnVudGltZV9pbnRlcm5hbC5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO21rZGly
IDImZ3Q7TlVMICZxdW90OyQoT3V0RGlyKVxXZWJLaXQucmVzb3VyY2VzJnF1b3Q7JiN4MEQ7JiN4
MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKS4uXCQoUHJvamVjdE5hbWUpLnJlc291
cmNlc1wqJnF1b3Q7ICZxdW90OyQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5yZXNvdXJjZXMmcXVv
dDsmI3gwRDsmI3gwQTtta2RpciAyJmd0O05VTCAmcXVvdDskKE91dERpcilcV2ViS2l0LnJlc291
cmNlc1xlbi5scHJvaiZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVj
dERpcikuLlwuLlxFbmdsaXNoLmxwcm9qXExvY2FsaXphYmxlLnN0cmluZ3MmcXVvdDsgJnF1b3Q7
JChPdXREaXIpXFdlYktpdC5yZXNvdXJjZXNcZW4ubHByb2pcJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4
MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1
b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsm
I3gwQTsiDQorCQkJCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAmcXVvdDskKFdlYktpdE91
dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTsmI3gwRDsmI3gwQTt4Y29w
eSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYkxvY2FsaXphYmxlU3RyaW5ncy5oJnF1
b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYj
eDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViS2l0R3JhcGhpY3MuaCZx
dW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsm
I3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYktpdENPTUFQSS5oJnF1
b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYj
eDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViUHJlZmVyZW5jZUtleXNQ
cml2YXRlLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1
b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJLaXRPdXRw
dXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucGFwaS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0
RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQo
V2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYkNvcmVcbnBmdW5jdGlvbnMuaCZxdW90OyAmcXVv
dDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJLaXQmcXVvdDsmI3gwRDsmI3gwQTt4Y29w
eSAveSAvZCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxXZWJDb3JlXG5wcnVudGlt
ZS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdlYktpdCZxdW90OyYj
eDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXFdl
YkNvcmVcbnBydW50aW1lX2ludGVybmFsLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIp
XGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViQ29yZVxucHR5cGVzLmgmcXVvdDsgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGluY2x1ZGVcV2ViS2l0JnF1b3Q7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7
bWtkaXIgMiZndDtOVUwgJnF1b3Q7JChPdXREaXIpXFdlYktpdC5yZXNvdXJjZXMmcXVvdDsmI3gw
RDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5cJChQcm9qZWN0TmFtZSku
cmVzb3VyY2VzXComcXVvdDsgJnF1b3Q7JChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnJlc291cmNl
cyZxdW90OyYjeDBEOyYjeDBBO21rZGlyIDImZ3Q7TlVMICZxdW90OyQoT3V0RGlyKVxXZWJLaXQu
cmVzb3VyY2VzXGVuLmxwcm9qJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQ
cm9qZWN0RGlyKS4uXC4uXEVuZ2xpc2gubHByb2pcTG9jYWxpemFibGUuc3RyaW5ncyZxdW90OyAm
cXVvdDskKE91dERpcilcV2ViS2l0LnJlc291cmNlc1xlbi5scHJvalwmcXVvdDsmI3gwRDsmI3gw
QTsmI3gwRDsmI3gwQTtpZiBleGlzdCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWls
ZWQmcXVvdDsgZGVsICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxidWlsZGZhaWxlZCZxdW90OyYj
eDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJPC9Db25maWd1cmF0aW9uPg0KIAk8L0NvbmZpZ3VyYXRp
b25zPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54816</attachid>
            <date>2010-04-30 12:04:19 -0700</date>
            <delta_ts>2010-04-30 13:38:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-20784-20100430120418.patch</filename>
            <type>text/plain</type>
            <size>50050</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODU4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDQtMzAgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZXh0IHN0ZXAgdG93YXJkcyBmaXhpbmcKKyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4NAorICAgICAgICBtb3ZlIG5wYXBpLmgg
dG8gQzk5IGludGVnZXIgdHlwZXMKKworICAgICAgICBVc2UgdGhlIEM5OSB0eXBlcyBldmVyeXdo
ZXJlLiBUaGUgIm9sZCIgdHlwZXMgYXJlIHN0aWxsIGFyb3VuZCBidXQgd2lsbCBiZSByZW1vdmVk
CisgICAgICAgIGluIGEgc3Vic2VxdWVudCBjb21taXQuCisKKyAgICAgICAgKiBicmlkZ2UvbnBh
cGkuaDoKKyAgICAgICAgKF9OUENvY29hRXZlbnQ6Oik6CisgICAgICAgICogcGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmg6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YSk6CisgICAgICAgICogcGx1Z2lu
cy9QbHVnaW5TdHJlYW0uaDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cG9zdFVSTE5vdGlmeSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3Ojpwb3N0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZVBvc3QpOgorICAg
ICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmll
d05vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRG
aWxlKToKKyAgICAgICAgKiBwbHVnaW5zL25wYXBpLmNwcDoKKyAgICAgICAgKE5QTl9NZW1BbGxv
Yyk6CisgICAgICAgIChOUE5fTWVtRmx1c2gpOgorICAgICAgICAoTlBOX1Bvc3RVUkxOb3RpZnkp
OgorICAgICAgICAoTlBOX1Bvc3RVUkwpOgorICAgICAgICAoTlBOX1dyaXRlKToKKyAgICAgICAg
KiBwbHVnaW5zL25wZnVuY3Rpb25zLmg6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFj
a2FnZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24p
OgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKwogMjAxMC0wNC0zMCAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBDYXJsc29uLgpJbmRleDogV2ViQ29yZS9icmlkZ2UvbnBhcGkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9ucGFwaS5oCShyZXZpc2lvbiA1ODU4NSkKKysrIFdlYkNvcmUvYnJpZGdl
L25wYXBpLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw4ICsxNzYsOCBAQCB0eXBlZGVmIGxvbmcg
aW50MzI7CiAjZW5kaWYKIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgIE5QQm9vbDsKLXR5cGVk
ZWYgaW50MTYgICAgICAgICAgICBOUEVycm9yOwotdHlwZWRlZiBpbnQxNiAgICAgICAgICAgIE5Q
UmVhc29uOwordHlwZWRlZiBpbnQxNl90ICAgICAgICAgIE5QRXJyb3I7Cit0eXBlZGVmIGludDE2
X3QgICAgICAgICAgTlBSZWFzb247CiB0eXBlZGVmIGNoYXIqICAgICAgICAgICAgTlBNSU1FVHlw
ZTsKIAogCkBAIC0yMDksOCArMjA5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX05QU3RyZWFtCiAgICAg
dm9pZCogICAgICAgIHBkYXRhOyAgICAgICAgLyogcGx1Zy1pbiBwcml2YXRlIGRhdGEgKi8KICAg
ICB2b2lkKiAgICAgICAgbmRhdGE7ICAgICAgICAvKiBuZXRzY2FwZSBwcml2YXRlIGRhdGEgKi8K
ICAgICBjb25zdCBjaGFyKiAgdXJsOwotICAgIHVpbnQzMiAgICAgICBlbmQ7Ci0gICAgdWludDMy
ICAgICAgIGxhc3Rtb2RpZmllZDsKKyAgICB1aW50MzJfdCAgICAgZW5kOworICAgIHVpbnQzMl90
ICAgICBsYXN0bW9kaWZpZWQ7CiAgICAgdm9pZCogICAgICAgIG5vdGlmeURhdGE7CiAgICAgY29u
c3QgY2hhciogIGhlYWRlcnM7ICAgICAgLyogUmVzcG9uc2UgaGVhZGVycyBmcm9tIGhvc3QuCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRXhpc3RzIG9ubHkgZm9yID49IE5QVkVS
U19IQVNfUkVTUE9OU0VfSEVBREVSUy4KQEAgLTIyNywyNSArMjI3LDI1IEBAIHR5cGVkZWYgc3Ry
dWN0IF9OUFN0cmVhbQogCiB0eXBlZGVmIHN0cnVjdCBfTlBCeXRlUmFuZ2UKIHsKLSAgICBpbnQz
MiAgICAgIG9mZnNldDsgICAgICAgICAvKiBuZWdhdGl2ZSBvZmZzZXQgbWVhbnMgZnJvbSB0aGUg
ZW5kICovCi0gICAgdWludDMyICAgICBsZW5ndGg7CisgICAgaW50MzJfdCAgICBvZmZzZXQ7ICAg
ICAgICAgLyogbmVnYXRpdmUgb2Zmc2V0IG1lYW5zIGZyb20gdGhlIGVuZCAqLworICAgIHVpbnQz
Ml90ICAgbGVuZ3RoOwogICAgIHN0cnVjdCBfTlBCeXRlUmFuZ2UqIG5leHQ7CiB9IE5QQnl0ZVJh
bmdlOwogCiAKIHR5cGVkZWYgc3RydWN0IF9OUFNhdmVkRGF0YQogewotICAgIGludDMyICAgIGxl
bjsKKyAgICBpbnQzMl90ICBsZW47CiAgICAgdm9pZCogICAgYnVmOwogfSBOUFNhdmVkRGF0YTsK
IAogCiB0eXBlZGVmIHN0cnVjdCBfTlBSZWN0CiB7Ci0gICAgdWludDE2ICAgIHRvcDsKLSAgICB1
aW50MTYgICAgbGVmdDsKLSAgICB1aW50MTYgICAgYm90dG9tOwotICAgIHVpbnQxNiAgICByaWdo
dDsKKyAgICB1aW50MTZfdCAgdG9wOworICAgIHVpbnQxNl90ICBsZWZ0OworICAgIHVpbnQxNl90
ICBib3R0b207CisgICAgdWludDE2X3QgIHJpZ2h0OwogfSBOUFJlY3Q7CiAKIApAQCAtNDg2LDI1
ICs0ODYsMjUgQEAgdHlwZWRlZiBzdHJ1Y3QgX05QTlNNZW51IE5QTlNNZW51OwogCiB0eXBlZGVm
IHN0cnVjdCBfTlBDb2NvYUV2ZW50IHsKICAgICBOUENvY29hRXZlbnRUeXBlIHR5cGU7Ci0gICAg
dWludDMyIHZlcnNpb247CisgICAgdWludDMyX3QgdmVyc2lvbjsKICAgICAKICAgICB1bmlvbiB7
CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1aW50MzIgbW9kaWZpZXJGbGFnczsKKyAg
ICAgICAgICAgIHVpbnQzMl90IG1vZGlmaWVyRmxhZ3M7CiAgICAgICAgICAgICBkb3VibGUgcGx1
Z2luWDsKICAgICAgICAgICAgIGRvdWJsZSBwbHVnaW5ZOyAgICAgICAgICAgIAotICAgICAgICAg
ICAgaW50MzIgYnV0dG9uTnVtYmVyOwotICAgICAgICAgICAgaW50MzIgY2xpY2tDb3VudDsKKyAg
ICAgICAgICAgIGludDMyX3QgYnV0dG9uTnVtYmVyOworICAgICAgICAgICAgaW50MzJfdCBjbGlj
a0NvdW50OwogICAgICAgICAgICAgZG91YmxlIGRlbHRhWDsKICAgICAgICAgICAgIGRvdWJsZSBk
ZWx0YVk7CiAgICAgICAgICAgICBkb3VibGUgZGVsdGFaOwogICAgICAgICB9IG1vdXNlOwogICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdWludDMyIG1vZGlmaWVyRmxhZ3M7CisgICAgICAg
ICAgICB1aW50MzJfdCBtb2RpZmllckZsYWdzOwogICAgICAgICAgICAgTlBOU1N0cmluZyAqY2hh
cmFjdGVyczsKICAgICAgICAgICAgIE5QTlNTdHJpbmcgKmNoYXJhY3RlcnNJZ25vcmluZ01vZGlm
aWVyczsKICAgICAgICAgICAgIE5QQm9vbCBpc0FSZXBlYXQ7Ci0gICAgICAgICAgICB1aW50MTYg
a2V5Q29kZTsKKyAgICAgICAgICAgIHVpbnQxNl90IGtleUNvZGU7CiAgICAgICAgIH0ga2V5Owog
ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQ7CkBAIC01
MjgsMTAgKzUyOCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfTlBDb2NvYUV2ZW50IHsKIHR5cGVkZWYg
c3RydWN0IF9OUFdpbmRvdwogewogICAgIHZvaWQqICAgIHdpbmRvdzsgICAgIC8qIFBsYXRmb3Jt
IHNwZWNpZmljIHdpbmRvdyBoYW5kbGUgKi8KLSAgICBpbnQzMiAgICB4OyAgICAgICAgICAgIC8q
IFBvc2l0aW9uIG9mIHRvcCBsZWZ0IGNvcm5lciByZWxhdGl2ZSAqLwotICAgIGludDMyICAgIHk7
ICAgICAgICAgICAgLyogICAgdG8gYSBuZXRzY2FwZSBwYWdlLiAgICAgICAgICAgICAgICAgICAg
Ki8KLSAgICB1aW50MzIgICAgd2lkdGg7ICAgICAgICAvKiBNYXhpbXVtIHdpbmRvdyBzaXplICov
Ci0gICAgdWludDMyICAgIGhlaWdodDsKKyAgICBpbnQzMl90ICB4OyAgICAgICAgICAgIC8qIFBv
c2l0aW9uIG9mIHRvcCBsZWZ0IGNvcm5lciByZWxhdGl2ZSAqLworICAgIGludDMyX3QgIHk7ICAg
ICAgICAgICAgLyogICAgdG8gYSBuZXRzY2FwZSBwYWdlLiAgICAgICAgICAgICAgICAgICAgKi8K
KyAgICB1aW50MzJfdCAgd2lkdGg7ICAgICAgICAvKiBNYXhpbXVtIHdpbmRvdyBzaXplICovCisg
ICAgdWludDMyX3QgIGhlaWdodDsKICAgICBOUFJlY3QgICAgY2xpcFJlY3Q7ICAgIC8qIENsaXBw
aW5nIHJlY3RhbmdsZSBpbiBwb3J0IGNvb3JkaW5hdGVzICovCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvKiBVc2VkIGJ5IE1BQyBvbmx5LiAgICAgICAgICAgICAgKi8KICNpZiBkZWZpbmVkKFhQ
X1VOSVgpIHx8IGRlZmluZWQoWFBfU1lNQklBTikKQEAgLTU1OCw3ICs1NTgsNyBAQCB0eXBlZGVm
IHN0cnVjdCBfTlBFbWJlZFByaW50CiAKIHR5cGVkZWYgc3RydWN0IF9OUFByaW50CiB7Ci0gICAg
dWludDE2ICAgIG1vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTlBfRlVMTCBvciBOUF9F
TUJFRCAqLworICAgIHVpbnQxNl90ICAgIG1vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyog
TlBfRlVMTCBvciBOUF9FTUJFRCAqLwogICAgIHVuaW9uCiAgICAgewogICAgICAgICBOUEZ1bGxQ
cmludCAgICAgZnVsbFByaW50OyAgICAgICAgLyogaWYgbW9kZSBpcyBOUF9GVUxMICovCkBAIC01
OTEsNyArNTkxLDcgQEAgdHlwZWRlZiBRRXZlbnQgTlBFdmVudDsKICNlbGlmIGRlZmluZWQoWFBf
V0lOKQogdHlwZWRlZiBzdHJ1Y3QgX05QRXZlbnQKIHsKLSAgICB1aW50MTYgICBldmVudDsKKyAg
ICB1aW50MTZfdCAgIGV2ZW50OwogICAgIHVpbnRwdHJfdCAgIHdQYXJhbTsKICAgICB1aW50cHRy
X3QgICBsUGFyYW07CiB9IE5QRXZlbnQ7CkBAIC04MDMsMjIgKzgwMywyMiBAQCBjaGFyKiAgICAg
ICAgICAgICAgICAgICAgTlBQX0dldE1JTUVEZXNjCiBOUEVycm9yICAgICBOUFBfSW5pdGlhbGl6
ZSh2b2lkKTsKIHZvaWQgICAgICAgIE5QUF9TaHV0ZG93bih2b2lkKTsKIE5QRXJyb3IgICAgIE5Q
X0xPQUREUyAgICBOUFBfTmV3KE5QTUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTYgbW9kZSwgaW50MTYgYXJnYywg
Y2hhciogYXJnbltdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBt
b2RlLCBpbnQxNl90IGFyZ2MsIGNoYXIqIGFyZ25bXSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciogYXJndltdLCBOUFNhdmVkRGF0YSogc2F2ZWQpOwogTlBFcnJvciAgICAg
TlBfTE9BRERTICAgIE5QUF9EZXN0cm95KE5QUCBpbnN0YW5jZSwgTlBTYXZlZERhdGEqKiBzYXZl
KTsKIE5QRXJyb3IgICAgIE5QX0xPQUREUyAgICBOUFBfU2V0V2luZG93KE5QUCBpbnN0YW5jZSwg
TlBXaW5kb3cqIHdpbmRvdyk7CiBOUEVycm9yICAgICBOUF9MT0FERFMgICAgTlBQX05ld1N0cmVh
bShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlBTdHJlYW0qIHN0cmVhbSwgTlBCb29sIHNlZWthYmxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTYqIHN0eXBlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QqIHN0eXBlKTsKIE5QRXJyb3Ig
ICAgIE5QX0xPQUREUyAgICBOUFBfRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFt
KiBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFJl
YXNvbiByZWFzb24pOwotaW50MzIgICAgICAgIE5QX0xPQUREUyAgICBOUFBfV3JpdGVSZWFkeShO
UFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0pOwotaW50MzIgICAgICAgIE5QX0xPQUREUyAg
ICBOUFBfV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgbGVuLCB2b2lkKiBidWZm
ZXIpOworaW50MzJfdCAgICAgTlBfTE9BRERTICAgIE5QUF9Xcml0ZVJlYWR5KE5QUCBpbnN0YW5j
ZSwgTlBTdHJlYW0qIHN0cmVhbSk7CitpbnQzMl90ICAgICBOUF9MT0FERFMgICAgTlBQX1dyaXRl
KE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7CiB2
b2lkICAgICAgICBOUF9MT0FERFMgICAgTlBQX1N0cmVhbUFzRmlsZShOUFAgaW5zdGFuY2UsIE5Q
U3RyZWFtKiBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGZuYW1lKTsKIHZvaWQgICAgICAgIE5QX0xPQUREUyAgICBOUFBfUHJpbnQo
TlBQIGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9ybVByaW50KTsKLWludDE2ICAgICAgICAgICAg
TlBQX0hhbmRsZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOworaW50MTZfdCAgICAg
ICAgICAgIE5QUF9IYW5kbGVFdmVudChOUFAgaW5zdGFuY2UsIHZvaWQqIGV2ZW50KTsKIHZvaWQg
ICAgICAgIE5QX0xPQUREUyAgICBOUFBfVVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUFJlYXNvbiBy
ZWFzb24sIHZvaWQqIG5vdGlmeURhdGEpOwoganJlZiAgICAgICAgTlBfTE9BRERTICAgICAgICAg
ICAgTlBQX0dldEphdmFDbGFzcyh2b2lkKTsKQEAgLTgzOCwyNCArODM4LDI0IEBAIE5QRXJyb3Ig
ICAgIE5QTl9HZXRVUkxOb3RpZnkoTlBQIGluc3RhbmMKIE5QRXJyb3IgICAgIE5QTl9HZXRVUkwo
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiB0YXJnZXQpOwogTlBFcnJvciAgICAgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQ
IGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogbm90aWZ5RGF0YSk7CiBO
UEVycm9yICAgICBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJf
dCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYnVmLCBOUEJv
b2wgZmlsZSk7CiBOUEVycm9yICAgICBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwg
TlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7CiBOUEVycm9yICAgICBOUE5fTmV3U3RyZWFtKE5QUCBp
bnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7Ci1pbnQzMiAgICAgICAgTlBO
X1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLAoraW50MzJf
dCAgICAgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBs
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGJ1ZmZlcik7CiBOUEVycm9yICAg
ICBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlBSZWFzb24gcmVhc29uKTsKIHZvaWQgICAg
ICAgIE5QTl9TdGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKIGNvbnN0
IGNoYXIqICAgIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKTsKLXZvaWQqICAgICAgICBOUE5f
TWVtQWxsb2ModWludDMyIHNpemUpOwordm9pZCogICAgICAgIE5QTl9NZW1BbGxvYyh1aW50MzJf
dCBzaXplKTsKIHZvaWQgICAgICAgIE5QTl9NZW1GcmVlKHZvaWQqIHB0cik7Ci11aW50MzIgICAg
ICAgIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSk7Cit1aW50MzJfdCAgICAgIE5QTl9NZW1GbHVz
aCh1aW50MzJfdCBzaXplKTsKIHZvaWQgICAgICAgIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCBy
ZWxvYWRQYWdlcyk7CiBKUklFbnYqICAgICBOUE5fR2V0SmF2YUVudih2b2lkKTsKIGpyZWYgICAg
ICAgIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2UpOwpAQCAtODY5LDExICs4NjksMTEgQEAg
dm9pZCAgICAgICAgTlBOX0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZQogdm9pZCAgICAgICAgTlBO
X1B1c2hQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7CiB2
b2lkICAgICAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSk7CiB2b2lk
ICAgICAgICBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsKE5QUCBpbnN0YW5jZSwgdm9pZCAoKmZ1
bmMpICh2b2lkICopLCB2b2lkICp1c2VyRGF0YSk7Ci1OUEVycm9yICAgICBOUE5fR2V0VmFsdWVG
b3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciog
dXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMiogbGVuKTsKLU5QRXJyb3IgICAgIE5QTl9TZXRWYWx1
ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzIgbGVuKTsKLU5QRXJyb3IgICAgIE5QTl9H
ZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBwcm90b2NvbCwg
Y29uc3QgY2hhciogaG9zdCwgaW50MzIgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25zdCBj
aGFyICpyZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzIqIHVsZW4sIGNoYXIqKiBwYXNzd29y
ZCwgdWludDMyKiBwbGVuKTsKLXVpbnQzMiAgICAgIE5QTl9TY2hlZHVsZVRpbWVyKE5QUCBpbnN0
YW5jZSwgdWludDMyIGludGVydmFsLCBOUEJvb2wgcmVwZWF0LCB2b2lkICgqdGltZXJGdW5jKShO
UFAgbnBwLCB1aW50MzIgdGltZXJJRCkpOwotdm9pZCAgICAgICAgTlBOX1Vuc2NoZWR1bGVUaW1l
cihOUFAgaW5zdGFuY2UsIHVpbnQzMiB0aW1lcklEKTsKK05QRXJyb3IgICAgIE5QTl9HZXRWYWx1
ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFy
KiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbik7CitOUEVycm9yICAgICBOUE5fU2V0
VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVuKTsKK05QRXJyb3IgICAg
IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBwcm90
b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUs
IGNvbnN0IGNoYXIgKnJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMl90KiB1bGVuLCBjaGFy
KiogcGFzc3dvcmQsIHVpbnQzMl90KiBwbGVuKTsKK3VpbnQzMl90ICAgTlBOX1NjaGVkdWxlVGlt
ZXIoTlBQIGluc3RhbmNlLCB1aW50MzJfdCBpbnRlcnZhbCwgTlBCb29sIHJlcGVhdCwgdm9pZCAo
KnRpbWVyRnVuYykoTlBQIG5wcCwgdWludDMyX3QgdGltZXJJRCkpOwordm9pZCAgICAgICAgTlBO
X1Vuc2NoZWR1bGVUaW1lcihOUFAgaW5zdGFuY2UsIHVpbnQzMl90IHRpbWVySUQpOwogTlBFcnJv
ciAgICAgTlBOX1BvcFVwQ29udGV4dE1lbnUoTlBQIGluc3RhbmNlLCBOUE1lbnUqIG1lbnUpOwog
TlBCb29sICAgICAgTlBOX0NvbnZlcnRQb2ludChOUFAgaW5zdGFuY2UsIGRvdWJsZSBzb3VyY2VY
LCBkb3VibGUgc291cmNlWSwgTlBDb29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIGRvdWJsZSAq
ZGVzdFgsIGRvdWJsZSAqZGVzdFksIE5QQ29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSk7CiAgICAg
CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHJldmlzaW9uIDU4NTg1KQorKysgV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgICAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhcmVudERp
cmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RGlyZWN0b3J5OyB9Ci0gICAgICAgIHVp
bnQxNiBOUFZlcnNpb24oKSBjb25zdDsKKyAgICAgICAgdWludDE2X3QgTlBWZXJzaW9uKCkgY29u
c3Q7CiAgICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RN
b2RpZmllZDsgfQogCiAgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRv
RGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCShyZXZpc2lvbiA1ODU4NSkKKysrIFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsMjAgKzMzNiwy
MCBAQCB2b2lkIFBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEoKQogICAgIGlmICghbV9zdHJlYW0u
bmRhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpbnQzMiB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAgICBpbnQz
MiB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKyAgICBpbnQzMl90IHRvdGFsQnl0ZXMgPSBtX2Rl
bGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIGludDMyX3QgdG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7
CiAKICAgICBpZiAobV9sb2FkZXIpCiAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5n
KHRydWUpOwogICAgIHdoaWxlICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgewot
ICAgICAgICBpbnQzMiBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeSht
X2luc3RhbmNlLCAmbV9zdHJlYW0pOworICAgICAgICBpbnQzMl90IGRlbGl2ZXJ5Qnl0ZXMgPSBt
X3BsdWdpbkZ1bmNzLT53cml0ZXJlYWR5KG1faW5zdGFuY2UsICZtX3N0cmVhbSk7CiAKICAgICAg
ICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPD0gMCkgewogICAgICAgICAgICAgbV9kZWxheURlbGl2ZXJ5
VGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIHRvdGFs
Qnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkKTsKLSAgICAgICAgICAgIGludDMyIGRhdGFMZW5n
dGggPSBkZWxpdmVyeUJ5dGVzOworICAgICAgICAgICAgaW50MzJfdCBkYXRhTGVuZ3RoID0gZGVs
aXZlcnlCeXRlczsKICAgICAgICAgICAgIGNoYXIqIGRhdGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0
YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKIAogICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRh
dGEKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmgJKHJldmlzaW9uIDU4NTg1KQorKysgV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksOCArMTA5LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIG1f
cGx1Z2luRnVuY3M7CiAgICAgICAgIE5QUCBtX2luc3RhbmNlOwotICAgICAgICB1aW50MTYgbV90
cmFuc2Zlck1vZGU7Ci0gICAgICAgIGludDMyIG1fb2Zmc2V0OworICAgICAgICB1aW50MTZfdCBt
X3RyYW5zZmVyTW9kZTsKKyAgICAgICAgaW50MzJfdCBtX29mZnNldDsKICAgICAgICAgV1RGOjpD
U3RyaW5nIG1faGVhZGVyczsKICAgICAgICAgV1RGOjpDU3RyaW5nIG1fcGF0aDsKICAgICAgICAg
TlBSZWFzb24gbV9yZWFzb247CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiA1
ODU4NSkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTgyLDEyICs1ODIsMTIgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRVUkwoY29uc3QgY2hh
ciogdQogICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKIH0KIAot
TlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2
b2lkKiBub3RpZnlEYXRhKQorTlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5KGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIq
IGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCiB7CiAgICAgcmV0dXJuIGhhbmRs
ZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhLCB0cnVlLCB0cnVl
KTsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxl
KQorTlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCiB7
CiAgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNpZmll
ZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCiAgICAgcmV0dXJuIGhhbmRsZVBv
c3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxzZSwgZmlsZSk7CkBAIC02MDAs
NyArNjAwLDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpuZXdTdHJlYW0oTlBNSU1FVHlwZQogICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogfQogCi1pbnQzMiBQbHVnaW5WaWV3Ojp3cml0
ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcikKK2ludDMyX3QgUGx1
Z2luVmlldzo6d3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZl
cikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIC8vIFVuc3VwcG9ydGVkCkBAIC0xMTM2
LDcgKzExMzYsNyBAQCBzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJICiAg
ICAgcmV0dXJuIGhlYWRlckZpZWxkczsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQ
b3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25z
dCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZp
Y2F0aW9uLCBib29sIGFsbG93SGVhZGVycykKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9z
dChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25z
dCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZp
Y2F0aW9uLCBib29sIGFsbG93SGVhZGVycykKIHsKICAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFi
dWYpCiAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5oCShyZXZpc2lvbiA1ODU4NSkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyOSwxMCArMTI5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgLy8gTlBOIGZ1bmN0aW9ucwogICAgICAgICBOUEVycm9yIGdldFVSTE5vdGlmeShj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7CiAg
ICAgICAgIE5QRXJyb3IgZ2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
KTsKLSAgICAgICAgTlBFcnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2
b2lkKiBub3RpZnlEYXRhKTsKLSAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9v
bCBmaWxlKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29s
IGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciog
YnV0LCBOUEJvb2wgZmlsZSk7CiAgICAgICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUg
dHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7Ci0gICAgICAgIGlu
dDMyIHdyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKKyAg
ICAgICAgaW50MzJfdCB3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCog
YnVmZmVyKTsKICAgICAgICAgTlBFcnJvciBkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0s
IE5QUmVhc29uIHJlYXNvbik7CiAgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgpOwogI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpAQCAtMjMyLDggKzIzMiw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKICAgICAgICAgc3Rh
dGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlldyopOwogICAgICAgICBOUEVy
cm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwg
dm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBi
b29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBh
bGxvd0hlYWRlcnMpOwotICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8
Y2hhcj4mIGJ1ZmZlciwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmKTsKKyAgICAgICAgTlBF
cnJvciBoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50
MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBi
b29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKKyAgICAgICAgTlBFcnJv
ciBoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwg
Y29uc3QgY2hhciogYnVmKTsKICAgICAgICAgc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNo
YXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCk7CiAgICAgICAgIHZvaWQgc2V0Q2FsbGluZ1Bs
dWdpbihib29sKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXdOb25l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCShy
ZXZpc2lvbiA1ODU4NSkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3Tm9uZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRv
d1JlY3QoY29uc3QgSQogewogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFk
RmlsZShWZWN0b3I8Y2hhcj4mLCB1aW50MzIsIGNvbnN0IGNoYXIqKQorTlBFcnJvciBQbHVnaW5W
aWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiwgdWludDMyX3QsIGNvbnN0IGNo
YXIqKQogewogICAgIHJldHVybiAwOwogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwCShyZXZpc2lvbiA1ODU4
NSkKKysrIFdlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgc3RhdGljIFBsdWdpblZpZXcqIHBsdWdpblZpZXdGb3JJbnN0YW5jZQogICAgIHJl
dHVybiBQbHVnaW5WaWV3OjpjdXJyZW50UGx1Z2luVmlldygpOwogfQogCi12b2lkKiBOUE5fTWVt
QWxsb2ModWludDMyIHNpemUpCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyX3Qgc2l6ZSkKIHsK
ICAgICByZXR1cm4gbWFsbG9jKHNpemUpOwogfQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIE5QTl9N
ZW1GcmVlKHZvaWQqIHB0cikKICAgICBmcmVlKHB0cik7CiB9CiAKLXVpbnQzMiBOUE5fTWVtRmx1
c2godWludDMyIHNpemUpCit1aW50MzJfdCBOUE5fTWVtRmx1c2godWludDMyX3Qgc2l6ZSkKIHsK
ICAgICAvLyBEbyBub3RoaW5nCiAgICAgcmV0dXJuIDA7CkBAIC03OSwxMiArNzksMTIgQEAgTlBF
cnJvciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgYwogICAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkwodXJsLCB0YXJnZXQpOwogfQogCi1OUEVy
cm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUs
IHZvaWQqIG5vdGlmeURhdGEpCitOUEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBpbnN0YW5j
ZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29u
c3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKIHsKICAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTE5vdGlmeSh1cmwsIHRh
cmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEpOwogfQogCi1OUEVycm9yIE5QTl9Qb3N0
VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVp
bnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCitOUEVycm9yIE5QTl9Qb3N0
VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVp
bnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKIHsKICAgICByZXR1cm4g
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTCh1cmwsIHRhcmdldCwgbGVu
LCBidWYsIGZpbGUpOwogfQpAQCAtOTQsNyArOTQsNyBAQCBOUEVycm9yIE5QTl9OZXdTdHJlYW0o
TlBQIGluc3RhbmNlLCBOUE1JCiAgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQsIHN0cmVhbSk7CiB9CiAKLWludDMyIE5QTl9X
cml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVm
ZmVyKQoraW50MzJfdCBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBp
bnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKQogewogICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpLT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKIH0KSW5kZXg6IFdl
YkNvcmUvcGx1Z2lucy9ucGZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lu
cy9ucGZ1bmN0aW9ucy5oCShyZXZpc2lvbiA1ODU4NSkKKysrIFdlYkNvcmUvcGx1Z2lucy9ucGZ1
bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNiArNDAsMTYgQEAgZXh0ZXJuICJDIiB7
CiAjZW5kaWYKIAogdHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFVSTE5vdGlmeVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHZvaWQqIG5v
dGlmeURhdGEpOwotdHlwZWRlZiBOUEVycm9yICgqTlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyKShO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB1aW50MzIg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKK3R5
cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBj
b25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdWludDMyX3QgbGVuLCBjb25zdCBj
aGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKIHR5cGVkZWYgTlBFcnJv
ciAoKk5QTl9SZXF1ZXN0UmVhZFByb2NQdHIpKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdl
KiByYW5nZUxpc3QpOwogdHlwZWRlZiBOUEVycm9yICgqTlBOX05ld1N0cmVhbVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB3aW5kb3csIE5QU3RyZWFt
Kiogc3RyZWFtKTsKLXR5cGVkZWYgaW50MzIgKCpOUE5fV3JpdGVQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYg
aW50MzJfdCAoKk5QTl9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVh
bSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7CiB0eXBlZGVmIE5QRXJyb3IgKCpOUE5fRGVz
dHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFz
b24gcmVhc29uKTsKIHR5cGVkZWYgdm9pZCAoKk5QTl9TdGF0dXNQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwogdHlwZWRlZiBjb25zdCBjaGFyKigqTlBOX1VzZXJB
Z2VudFByb2NQdHIpKE5QUCBpbnN0YW5jZSk7Ci10eXBlZGVmIHZvaWQqICgqTlBOX01lbUFsbG9j
UHJvY1B0cikodWludDMyIHNpemUpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9NZW1BbGxvY1Byb2NQ
dHIpKHVpbnQzMl90IHNpemUpOwogdHlwZWRlZiB2b2lkICgqTlBOX01lbUZyZWVQcm9jUHRyKSh2
b2lkKiBwdHIpOwotdHlwZWRlZiB1aW50MzIgKCpOUE5fTWVtRmx1c2hQcm9jUHRyKSh1aW50MzIg
c2l6ZSk7Cit0eXBlZGVmIHVpbnQzMl90ICgqTlBOX01lbUZsdXNoUHJvY1B0cikodWludDMyX3Qg
c2l6ZSk7CiB0eXBlZGVmIHZvaWQgKCpOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIpKE5QQm9vbCBy
ZWxvYWRQYWdlcyk7CiB0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VmFsdWVQcm9jUHRyKShOUFAg
aW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICpyZXRfdmFsdWUpOwogdHlwZWRl
ZiBOUEVycm9yICgqTlBOX1NldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwpAQCAtNTcsMTggKzU3LDE4IEBAIHR5cGVkZWYgdm9p
ZCAoKk5QTl9JbnZhbGlkYXRlUmVjdFByb2NQdHIKIHR5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlk
YXRlUmVnaW9uUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiByZWdpb24pOwogdHlwZWRl
ZiB2b2lkICgqTlBOX0ZvcmNlUmVkcmF3UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKIHR5cGVkZWYg
TlBFcnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVS
TCwgY29uc3QgY2hhciogd2luZG93KTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMUHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywg
dWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7Cit0eXBlZGVmIE5QRXJy
b3IgKCpOUE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBj
b25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSk7CiB0eXBlZGVmIHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKIHR5
cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwogdHlw
ZWRlZiB2b2lkICAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBOUEJvb2wgZW5hYmxlZCk7CiB0eXBlZGVmIHZvaWQgICgqTlBOX1BvcFBvcHVwc0VuYWJs
ZWRTdGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSk7CiB0eXBlZGVmIHZvaWQgKCpOUE5fUGx1Z2lu
VGhyZWFkQXN5bmNDYWxsUHJvY1B0cikoTlBQIG5wcCwgdm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZv
aWQgKnVzZXJEYXRhKTsKLXR5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRWYWx1ZUZvclVSTFByb2NQ
dHIpKE5QUCBucHAsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNo
YXIqKiB2YWx1ZSwgdWludDMyKiBsZW4pOwotdHlwZWRlZiBOUEVycm9yICgqTlBOX1NldFZhbHVl
Rm9yVVJMUHJvY1B0cikoTlBQIG5wcCwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNo
YXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMiBsZW4pOwotdHlwZWRlZiBOUEVycm9y
ICgqTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mb1Byb2NQdHIpKE5QUCBucHAsIGNvbnN0IGNoYXIq
IHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMiBwb3J0LCBjb25zdCBjaGFyKiBzY2hl
bWUsIGNvbnN0IGNoYXIgKnJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMiogdWxlbiwgY2hh
cioqIHBhc3N3b3JkLCB1aW50MzIqIHBsZW4pOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFZh
bHVlRm9yVVJMUHJvY1B0cikoTlBQIG5wcCwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0
IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKTsKK3R5cGVkZWYgTlBFcnJv
ciAoKk5QTl9TZXRWYWx1ZUZvclVSTFByb2NQdHIpKE5QUCBucHAsIE5QTlVSTFZhcmlhYmxlIHZh
cmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4p
OwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mb1Byb2NQdHIpKE5Q
UCBucHAsIGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMl90IHBv
cnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciAqcmVhbG0sIGNoYXIqKiB1c2VybmFt
ZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29yZCwgdWludDMyX3QqIHBsZW4pOwogCi10
eXBlZGVmIHVpbnQzMiAoKk5QTl9TY2hlZHVsZVRpbWVyUHJvY1B0cikoTlBQIG5wcCwgdWludDMy
IGludGVydmFsLCBOUEJvb2wgcmVwZWF0LCB2b2lkICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50
MzIgdGltZXJJRCkpOwotdHlwZWRlZiB2b2lkICgqTlBOX1Vuc2NoZWR1bGVUaW1lclByb2NQdHIp
KE5QUCBucHAsIHVpbnQzMiB0aW1lcklEKTsKK3R5cGVkZWYgdWludDMyX3QgKCpOUE5fU2NoZWR1
bGVUaW1lclByb2NQdHIpKE5QUCBucHAsIHVpbnQzMl90IGludGVydmFsLCBOUEJvb2wgcmVwZWF0
LCB2b2lkICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50MzJfdCB0aW1lcklEKSk7Cit0eXBlZGVm
IHZvaWQgKCpOUE5fVW5zY2hlZHVsZVRpbWVyUHJvY1B0cikoTlBQIG5wcCwgdWludDMyX3QgdGlt
ZXJJRCk7CiB0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9wVXBDb250ZXh0TWVudVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgTlBNZW51KiBtZW51KTsKIHR5cGVkZWYgTlBCb29sICgqTlBOX0NvbnZlcnRQ
b2ludFByb2NQdHIpKE5QUCBucHAsIGRvdWJsZSBzb3VyY2VYLCBkb3VibGUgc291cmNlWSwgTlBD
b29yZGluYXRlU3BhY2Ugc291cmNlU3BhY2UsIGRvdWJsZSAqZGVzdFgsIGRvdWJsZSAqZGVzdFks
IE5QQ29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSk7CiAKQEAgLTk2LDE2ICs5NiwxNiBAQCB0eXBl
ZGVmIHZvaWQgKCpOUE5fU2V0RXhjZXB0aW9uUHJvY1B0cikgCiB0eXBlZGVmIGJvb2wgKCpOUE5f
RW51bWVyYXRlUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVy
ICoqaWRlbnRpZmllciwgdWludDMyX3QgKmNvdW50KTsKIHR5cGVkZWYgYm9vbCAoKk5QTl9Db25z
dHJ1Y3RQcm9jUHRyKShOUFAgbnBwLCBOUE9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQgKmFy
Z3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7ICAgIAogCi10eXBlZGVm
IE5QRXJyb3IgKCpOUFBfTmV3UHJvY1B0cikoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5z
dGFuY2UsIHVpbnQxNiBtb2RlLCBpbnQxNiBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3Zb
XSwgTlBTYXZlZERhdGEqIHNhdmVkKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9OZXdQcm9jUHRy
KShOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2X3QgbW9kZSwgaW50
MTZfdCBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVk
KTsKIHR5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95UHJvY1B0cikoTlBQIGluc3RhbmNlLCBO
UFNhdmVkRGF0YSoqIHNhdmUpOwogdHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFdpbmRvd1Byb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgTlBXaW5kb3cqIHdpbmRvdyk7Ci10eXBlZGVmIE5QRXJyb3IgKCpO
UFBfTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIE5QU3Ry
ZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2KiBzdHlwZSk7Cit0eXBlZGVmIE5Q
RXJyb3IgKCpOUFBfTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5
cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2X3QqIHN0eXBlKTsK
IHR5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNl
LCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwogdHlwZWRlZiB2b2lkICgqTlBQ
X1N0cmVhbUFzRmlsZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgY29u
c3QgY2hhciogZm5hbWUpOwotdHlwZWRlZiBpbnQzMiAoKk5QUF9Xcml0ZVJlYWR5UHJvY1B0ciko
TlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKLXR5cGVkZWYgaW50MzIgKCpOUFBfV3Jp
dGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zmc2V0
LCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgaW50MzJfdCAoKk5QUF9Xcml0
ZVJlYWR5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKK3R5cGVkZWYg
aW50MzJfdCAoKk5QUF9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVh
bSwgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwogdHlwZWRlZiB2
b2lkICgqTlBQX1ByaW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9ybVBy
aW50KTsKLXR5cGVkZWYgaW50MTYgKCpOUFBfSGFuZGxlRXZlbnRQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIHZvaWQqIGV2ZW50KTsKK3R5cGVkZWYgaW50MTZfdCAoKk5QUF9IYW5kbGVFdmVudFByb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwogdHlwZWRlZiB2b2lkICgqTlBQX1VSTE5v
dGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBOUFJlYXNvbiByZWFz
b24sIHZvaWQqIG5vdGlmeURhdGEpOwogdHlwZWRlZiBOUEVycm9yICgqTlBQX0dldFZhbHVlUHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVl
KTsKIHR5cGVkZWYgTlBFcnJvciAoKk5QUF9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKQEAgLTExNCw4ICsxMTQsOCBAQCB0
eXBlZGVmIHZvaWQgKigqTlBQX0dldEphdmFDbGFzc1Byb2NQdHIpCiB0eXBlZGVmIHZvaWQqIEpS
SUdsb2JhbFJlZjsgLy9ub3QgdXNpbmcgdGhpcyByaWdodCBub3cKIAogdHlwZWRlZiBzdHJ1Y3Qg
X05QTmV0c2NhcGVGdW5jcyB7Ci0gICAgdWludDE2IHNpemU7Ci0gICAgdWludDE2IHZlcnNpb247
CisgICAgdWludDE2X3Qgc2l6ZTsKKyAgICB1aW50MTZfdCB2ZXJzaW9uOwogICAgIAogICAgIE5Q
Tl9HZXRVUkxQcm9jUHRyIGdldHVybDsKICAgICBOUE5fUG9zdFVSTFByb2NQdHIgcG9zdHVybDsK
QEAgLTE3Myw4ICsxNzMsOCBAQCB0eXBlZGVmIHN0cnVjdCBfTlBOZXRzY2FwZUZ1bmNzIHsKIH0g
TlBOZXRzY2FwZUZ1bmNzOwogCiB0eXBlZGVmIHN0cnVjdCBfTlBQbHVnaW5GdW5jcyB7Ci0gICAg
dWludDE2IHNpemU7Ci0gICAgdWludDE2IHZlcnNpb247CisgICAgdWludDE2X3Qgc2l6ZTsKKyAg
ICB1aW50MTZfdCB2ZXJzaW9uOwogICAgIE5QUF9OZXdQcm9jUHRyIG5ld3A7CiAgICAgTlBQX0Rl
c3Ryb3lQcm9jUHRyIGRlc3Ryb3k7CiAgICAgTlBQX1NldFdpbmRvd1Byb2NQdHIgc2V0d2luZG93
OwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShyZXZpc2lv
biA1ODU4NSkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzNSw3ICszMzUsNyBAQCBib29sIFBsdWdpblBhY2thZ2U6OmVxdWFs
KGNvbnN0IFBsdWdpblBhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXVpbnQxNiBQbHVnaW5QYWNr
YWdlOjpOUFZlcnNpb24oKSBjb25zdAordWludDE2X3QgUGx1Z2luUGFja2FnZTo6TlBWZXJzaW9u
KCkgY29uc3QKIHsKICAgICByZXR1cm4gTlBfVkVSU0lPTl9NSU5PUjsKIH0KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gNTg1ODUpCisrKyBXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQsNyAr
ODM0LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSQogICAgIH0K
IH0KIAotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+
JiBidWZmZXIsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKK05QRXJyb3IgUGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4s
IGNvbnN0IGNoYXIqIGJ1ZikKIHsKICAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOwogCklu
ZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkocmV2aXNpb24gNTg1ODgpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDEwLTA0LTMwICBBbmRlcnMgQ2FybHNzb24gIDxhbmRl
cnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTmV4dCBzdGVwIHRvd2FyZHMgZml4aW5nCisgICAgICAgIAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3ODQKKyAgICAgICAgbW92ZSBu
cGFwaS5oIHRvIEM5OSBpbnRlZ2VyIHR5cGVzCisKKyAgICAgICAgVXNlIHRoZSBDOTkgdHlwZXMg
ZXZlcnl3aGVyZS4gVGhlICJvbGQiIHR5cGVzIGFyZSBzdGlsbCBhcm91bmQgYnV0IHdpbGwgYmUg
cmVtb3ZlZAorICAgICAgICBpbiBhIHN1YnNlcXVlbnQgY29tbWl0LgorCisgICAgICAgICogUGx1
Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaDoKKyAgICAgICAgKiBQbHVnaW5zL1dl
YkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5tbToKKyAgICAgICAgKFdlYk5ldHNjYXBlUGx1Z2lu
U3RyZWFtOjpkZWxpdmVyRGF0YSk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdp
blZpZXcuaDoKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAg
ICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNhdmVBbmRTZXROZXdQb3J0U3RhdGVGb3JV
cGRhdGU6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRBdXRoZW50aWNh
dGlvbkluZm9XaXRoUHJvdG9jb2w6aG9zdDpwb3J0OnNjaGVtZTpyZWFsbTp1c2VybmFtZTp1c2Vy
bmFtZUxlbmd0aDpwYXNzd29yZDpwYXNzd29yZExlbmd0aDpdKToKKyAgICAgICAgKiBQbHVnaW5z
L25wYXBpLm1tOgorICAgICAgICAoTlBOX01lbUFsbG9jKToKKyAgICAgICAgKE5QTl9NZW1GbHVz
aCk6CisgICAgICAgIChOUE5fUG9zdFVSTE5vdGlmeSk6CisgICAgICAgIChOUE5fUG9zdFVSTCk6
CisgICAgICAgIChOUE5fV3JpdGUpOgorICAgICAgICAoTlBOX1NjaGVkdWxlVGltZXIpOgorICAg
ICAgICAoTlBOX1Vuc2NoZWR1bGVUaW1lcik6CisgICAgICAgIChOUE5fR2V0VmFsdWVGb3JVUkwp
OgorICAgICAgICAoTlBOX1NldFZhbHVlRm9yVVJMKToKKyAgICAgICAgKE5QTl9HZXRBdXRoZW50
aWNhdGlvbkluZm8pOgorICAgICAgICAoV0tOX0NoZWNrSWZBbGxvd2VkVG9Mb2FkVVJMKToKKyAg
ICAgICAgKFdLTl9DYW5jZWxDaGVja0lmQWxsb3dlZFRvTG9hZFVSTCk6CisKKzIwMTAtMDQtMjkg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24g
YW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQ
bHVnaW5TdHJlYW0uaDoKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0
cmVhbS5tbToKKyAgICAgICAgKFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YSk6
CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcuaDoKKyAgICAgICAgKiBQ
bHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3IHNhdmVBbmRTZXROZXdQb3J0U3RhdGVGb3JVcGRhdGU6XSk6CisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRBdXRoZW50aWNhdGlvbkluZm9XaXRoUHJvdG9jb2w6
aG9zdDpwb3J0OnNjaGVtZTpyZWFsbTp1c2VybmFtZTp1c2VybmFtZUxlbmd0aDpwYXNzd29yZDpw
YXNzd29yZExlbmd0aDpdKToKKyAgICAgICAgKiBQbHVnaW5zL25wYXBpLm1tOgorICAgICAgICAo
TlBOX01lbUFsbG9jKToKKyAgICAgICAgKE5QTl9NZW1GbHVzaCk6CisgICAgICAgIChOUE5fUG9z
dFVSTE5vdGlmeSk6CisgICAgICAgIChOUE5fUG9zdFVSTCk6CisgICAgICAgIChOUE5fV3JpdGUp
OgorICAgICAgICAoTlBOX1NjaGVkdWxlVGltZXIpOgorICAgICAgICAoTlBOX1Vuc2NoZWR1bGVU
aW1lcik6CisgICAgICAgIChOUE5fR2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoTlBOX1NldFZh
bHVlRm9yVVJMKToKKyAgICAgICAgKE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8pOgorICAgICAg
ICAoV0tOX0NoZWNrSWZBbGxvd2VkVG9Mb2FkVVJMKToKKyAgICAgICAgKFdLTl9DYW5jZWxDaGVj
a0lmQWxsb3dlZFRvTG9hZFVSTCk6CisKIDIwMTAtMDQtMjkgIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJ
bmRleDogV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJl
YW0uaAkocmV2aXNpb24gNTg1ODUpCisrKyBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNj
YXBlUGx1Z2luU3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBwcml2
YXRlOgogCiAgICAgTlBQIG1fcGx1Z2luOwogICAgIHVpbnQxNiBtX3RyYW5zZmVyTW9kZTsKLSAg
ICBpbnQzMiBtX29mZnNldDsKKyAgICBpbnQzMl90IG1fb2Zmc2V0OwogICAgIE5QU3RyZWFtIG1f
c3RyZWFtOwogICAgIFJldGFpblB0cjxOU1N0cmluZz4gbV9wYXRoOwogICAgIGludCBtX2ZpbGVE
ZXNjcmlwdG9yOwpJbmRleDogV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNj
YXBlUGx1Z2luU3RyZWFtLm1tCShyZXZpc2lvbiA1ODU4NSkKKysrIFdlYktpdC9tYWMvUGx1Z2lu
cy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwNywx
MiArNTA3LDEyIEBAIHZvaWQgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OmRlbGl2ZXJEYXQKIAog
ICAgIFJlZlB0cjxXZWJOZXRzY2FwZVBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKIAotICAg
IGludDMyIHRvdGFsQnl0ZXMgPSBbbV9kZWxpdmVyeURhdGEuZ2V0KCkgbGVuZ3RoXTsKLSAgICBp
bnQzMiB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKyAgICBpbnQzMl90IHRvdGFsQnl0ZXMgPSBb
bV9kZWxpdmVyeURhdGEuZ2V0KCkgbGVuZ3RoXTsKKyAgICBpbnQzMl90IHRvdGFsQnl0ZXNEZWxp
dmVyZWQgPSAwOwogCiAgICAgd2hpbGUgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVz
KSB7CiAgICAgICAgIFBsdWdpblN0b3BEZWZlcnJlciBkZWZlcnJlcihtX3BsdWdpblZpZXcuZ2V0
KCkpOwotICAgICAgICBpbnQzMiBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVy
ZWFkeShtX3BsdWdpbiwgJm1fc3RyZWFtKTsKKyAgICAgICAgaW50MzJfdCBkZWxpdmVyeUJ5dGVz
ID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX3BsdWdpbiwgJm1fc3RyZWFtKTsKICAgICAg
ICAgTE9HKFBsdWdpbnMsICJOUFBfV3JpdGVSZWFkeSByZXNwb25zZVVSTD0lQCBieXRlcz0lZCIs
IG1fcmVzcG9uc2VVUkwuZ2V0KCksIGRlbGl2ZXJ5Qnl0ZXMpOwogCiAgICAgICAgIGlmIChtX2lz
VGVybWluYXRlZCkKQEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIFdlYk5ldHNjYXBlUGx1Z2luU3Ry
ZWFtOjpkZWxpdmVyRGF0CiAgICAgICAgICAgICAgICAgY2FuY2VsTG9hZEFuZERlc3Ryb3lTdHJl
YW1XaXRoRXJyb3IocGx1Z2luQ2FuY2VsbGVkQ29ubmVjdGlvbkVycm9yKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMg
PSBtaW48aW50MzI+KGRlbGl2ZXJ5Qnl0ZXMsIFtzdWJkYXRhIGxlbmd0aF0pOworICAgICAgICAg
ICAgZGVsaXZlcnlCeXRlcyA9IG1pbjxpbnQzMl90PihkZWxpdmVyeUJ5dGVzLCBbc3ViZGF0YSBs
ZW5ndGhdKTsKICAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7CiAgICAgICAg
ICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7CiAgICAgICAgICAgICBM
T0coUGx1Z2lucywgIk5QUF9Xcml0ZSByZXNwb25zZVVSTD0lQCBieXRlcz0lZCB0b3RhbC1kZWxp
dmVyZWQ9JWQvJWQiLCBtX3Jlc3BvbnNlVVJMLmdldCgpLCBkZWxpdmVyeUJ5dGVzLCBtX29mZnNl
dCwgbV9zdHJlYW0uZW5kKTsKSW5kZXg6IFdlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpblZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3LmgJKHJldmlzaW9uIDU4NTg1KQorKysgV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMyArODksMTMgQEAgQGlu
dGVyZmFjZSBXZWJOZXRzY2FwZVBsdWdpblZpZXcgOiBXZWJCYQogICAgIEJPT0wgaW5TZXRXaW5k
b3c7CiAgICAgQk9PTCBzaG91bGRTdG9wU29vbjsKIAotICAgIHVpbnQzMiBjdXJyZW50VGltZXJJ
RDsKLSAgICBIYXNoTWFwPHVpbnQzMiwgUGx1Z2luVGltZXIqPiogdGltZXJzOworICAgIHVpbnQz
Ml90IGN1cnJlbnRUaW1lcklEOworICAgIEhhc2hNYXA8dWludDMyX3QsIFBsdWdpblRpbWVyKj4q
IHRpbWVyczsKIAogICAgIHVuc2lnbmVkIHBsdWdpbkZ1bmN0aW9uQ2FsbERlcHRoOwogICAgIAot
ICAgIGludDMyIHNwZWNpZmllZEhlaWdodDsKLSAgICBpbnQzMiBzcGVjaWZpZWRXaWR0aDsKKyAg
ICBpbnQzMl90IHNwZWNpZmllZEhlaWdodDsKKyAgICBpbnQzMl90IHNwZWNpZmllZFdpZHRoOwog
ICAgICAgICAgICAgCiAgICAgSGFzaFNldDxSZWZQdHI8V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0+
ID4gc3RyZWFtczsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gX3BlbmRpbmdG
cmFtZUxvYWRzOwpAQCAtMTA0LDcgKzEwNCw3IEBAIEBpbnRlcmZhY2UgV2ViTmV0c2NhcGVQbHVn
aW5WaWV3IDogV2ViQmEKICAgICBCT09MIF9pc1NpbHZlcmxpZ2h0OwogICAgIAogICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKl9jb250YWluZXJDaGVja3NJblByb2dyZXNzOwotICAgIHVpbnQzMiBf
Y3VycmVudENvbnRhaW5lckNoZWNrUmVxdWVzdElEOworICAgIHVpbnQzMl90IF9jdXJyZW50Q29u
dGFpbmVyQ2hlY2tSZXF1ZXN0SUQ7CiB9CiAKICsgKFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqKWN1
cnJlbnRQbHVnaW5WaWV3OwpAQCAtMTQ2LDggKzE0Niw4IEBAIC8vIFJldHVybnMgdGhlIE5QT2Jq
ZWN0IHRoYXQgcmVwcmVzZW50cyAKIC0gKHZvaWQpaGFuZGxlTW91c2VFbnRlcmVkOihOU0V2ZW50
ICopZXZlbnQ7CiAtICh2b2lkKWhhbmRsZU1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQ7CiAK
LS0gKHVpbnQzMiljaGVja0lmQWxsb3dlZFRvTG9hZFVSTDooY29uc3QgY2hhciopdXJsQ1N0cmlu
ZyBmcmFtZTooY29uc3QgY2hhciopZnJhbWVOYW1lQ1N0cmluZyBjYWxsYmFja0Z1bmM6KHZvaWQg
KCopKE5QUCBucHAsIHVpbnQzMiBjaGVja0lELCBOUEJvb2wgYWxsb3dlZCwgdm9pZCogY29udGV4
dCkpY2FsbGJhY2tGdW5jIGNvbnRleHQ6KHZvaWQqKWNvbnRleHQ7Ci0tICh2b2lkKWNhbmNlbENo
ZWNrSWZBbGxvd2VkVG9Mb2FkVVJMOih1aW50MzIpY2hlY2tJRDsKKy0gKHVpbnQzMl90KWNoZWNr
SWZBbGxvd2VkVG9Mb2FkVVJMOihjb25zdCBjaGFyKil1cmxDU3RyaW5nIGZyYW1lOihjb25zdCBj
aGFyKilmcmFtZU5hbWVDU3RyaW5nIGNhbGxiYWNrRnVuYzoodm9pZCAoKikoTlBQIG5wcCwgdWlu
dDMyX3QgY2hlY2tJRCwgTlBCb29sIGFsbG93ZWQsIHZvaWQqIGNvbnRleHQpKWNhbGxiYWNrRnVu
YyBjb250ZXh0Oih2b2lkKiljb250ZXh0OworLSAodm9pZCljYW5jZWxDaGVja0lmQWxsb3dlZFRv
TG9hZFVSTDoodWludDMyX3QpY2hlY2tJRDsKIAogQGVuZAogCkBAIC0xNzIsMTQgKzE3MiwxNCBA
QCBAaW50ZXJmYWNlIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAoV2ViSW50CiAtICh2b2lkKWZvcmNl
UmVkcmF3OwogLSAoTlBFcnJvcilnZXRWYXJpYWJsZTooTlBOVmFyaWFibGUpdmFyaWFibGUgdmFs
dWU6KHZvaWQgKil2YWx1ZTsKIC0gKE5QRXJyb3Ipc2V0VmFyaWFibGU6KE5QUFZhcmlhYmxlKXZh
cmlhYmxlIHZhbHVlOih2b2lkICopdmFsdWU7Ci0tICh1aW50MzIpc2NoZWR1bGVUaW1lcldpdGhJ
bnRlcnZhbDoodWludDMyKWludGVydmFsIHJlcGVhdDooTlBCb29sKXJlcGVhdCB0aW1lckZ1bmM6
KHZvaWQgKCopKE5QUCBucHAsIHVpbnQzMiB0aW1lcklEKSl0aW1lckZ1bmM7Ci0tICh2b2lkKXVu
c2NoZWR1bGVUaW1lcjoodWludDMyKXRpbWVySUQ7CistICh1aW50MzJfdClzY2hlZHVsZVRpbWVy
V2l0aEludGVydmFsOih1aW50MzJfdClpbnRlcnZhbCByZXBlYXQ6KE5QQm9vbClyZXBlYXQgdGlt
ZXJGdW5jOih2b2lkICgqKShOUFAgbnBwLCB1aW50MzJfdCB0aW1lcklEKSl0aW1lckZ1bmM7Cist
ICh2b2lkKXVuc2NoZWR1bGVUaW1lcjoodWludDMyX3QpdGltZXJJRDsKIC0gKE5QRXJyb3IpcG9w
VXBDb250ZXh0TWVudTooTlBNZW51ICopbWVudTsKLS0gKE5QRXJyb3IpZ2V0VmFyaWFibGU6KE5Q
TlVSTFZhcmlhYmxlKXZhcmlhYmxlIGZvclVSTDooY29uc3QgY2hhciopdXJsIHZhbHVlOihjaGFy
KiopdmFsdWUgbGVuZ3RoOih1aW50MzIqKWxlbmd0aDsKLS0gKE5QRXJyb3Ipc2V0VmFyaWFibGU6
KE5QTlVSTFZhcmlhYmxlKXZhcmlhYmxlIGZvclVSTDooY29uc3QgY2hhciopdXJsIHZhbHVlOihj
b25zdCBjaGFyKil2YWx1ZSBsZW5ndGg6KHVpbnQzMilsZW5ndGg7Ci0tIChOUEVycm9yKWdldEF1
dGhlbnRpY2F0aW9uSW5mb1dpdGhQcm90b2NvbDooY29uc3QgY2hhciopIHByb3RvY29sIGhvc3Q6
KGNvbnN0IGNoYXIqKWhvc3QgcG9ydDooaW50MzIpcG9ydCBzY2hlbWU6KGNvbnN0IGNoYXIqKXNj
aGVtZSByZWFsbTooY29uc3QgY2hhciopcmVhbG0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZXJuYW1lOihjaGFyKiopdXNlcm5hbWUgdXNlcm5hbWVMZW5ndGg6KHVpbnQz
MiopdXNlcm5hbWVMZW5ndGggCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXNzd29yZDooY2hhcioqKXBhc3N3b3JkIHBhc3N3b3JkTGVuZ3RoOih1aW50MzIqKXBhc3N3b3Jk
TGVuZ3RoOworLSAoTlBFcnJvcilnZXRWYXJpYWJsZTooTlBOVVJMVmFyaWFibGUpdmFyaWFibGUg
Zm9yVVJMOihjb25zdCBjaGFyKil1cmwgdmFsdWU6KGNoYXIqKil2YWx1ZSBsZW5ndGg6KHVpbnQz
Ml90KilsZW5ndGg7CistIChOUEVycm9yKXNldFZhcmlhYmxlOihOUE5VUkxWYXJpYWJsZSl2YXJp
YWJsZSBmb3JVUkw6KGNvbnN0IGNoYXIqKXVybCB2YWx1ZTooY29uc3QgY2hhciopdmFsdWUgbGVu
Z3RoOih1aW50MzJfdClsZW5ndGg7CistIChOUEVycm9yKWdldEF1dGhlbnRpY2F0aW9uSW5mb1dp
dGhQcm90b2NvbDooY29uc3QgY2hhciopIHByb3RvY29sIGhvc3Q6KGNvbnN0IGNoYXIqKWhvc3Qg
cG9ydDooaW50MzJfdClwb3J0IHNjaGVtZTooY29uc3QgY2hhciopc2NoZW1lIHJlYWxtOihjb25z
dCBjaGFyKilyZWFsbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5h
bWU6KGNoYXIqKil1c2VybmFtZSB1c2VybmFtZUxlbmd0aDoodWludDMyX3QqKXVzZXJuYW1lTGVu
Z3RoIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6KGNoYXIq
KilwYXNzd29yZCBwYXNzd29yZExlbmd0aDoodWludDMyX3QqKXBhc3N3b3JkTGVuZ3RoOwogLSAo
Y2hhciopcmVzb2x2ZVVSTDooY29uc3QgY2hhciopdXJsIGZvclRhcmdldDooY29uc3QgY2hhciop
dGFyZ2V0OwogQGVuZAogCkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBs
dWdpblZpZXcubW0JKHJldmlzaW9uIDU4NTg1KQorKysgV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzA2LDEwICszMDYsMTAgQEAg
LSAoUG9ydFN0YXRlKXNhdmVBbmRTZXROZXdQb3J0U3RhdGVGb3JVcAogI2VuZGlmCiAgICAgCiAg
ICAgd2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7Ci0gICAgd2luZG93LnggPSAoaW50
MzIpYm91bmRzSW5XaW5kb3cub3JpZ2luLng7IAotICAgIHdpbmRvdy55ID0gKGludDMyKWJvdW5k
c0luV2luZG93Lm9yaWdpbi55OwotICAgIHdpbmRvdy53aWR0aCA9IHN0YXRpY19jYXN0PHVpbnQz
Mj4oTlNXaWR0aChib3VuZHNJbldpbmRvdykpOwotICAgIHdpbmRvdy5oZWlnaHQgPSBzdGF0aWNf
Y2FzdDx1aW50MzI+KE5TSGVpZ2h0KGJvdW5kc0luV2luZG93KSk7CisgICAgd2luZG93LnggPSAo
aW50MzJfdClib3VuZHNJbldpbmRvdy5vcmlnaW4ueDsgCisgICAgd2luZG93LnkgPSAoaW50MzJf
dClib3VuZHNJbldpbmRvdy5vcmlnaW4ueTsKKyAgICB3aW5kb3cud2lkdGggPSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oTlNXaWR0aChib3VuZHNJbldpbmRvdykpOworICAgIHdpbmRvdy5oZWlnaHQg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTlNIZWlnaHQoYm91bmRzSW5XaW5kb3cpKTsKICAgICAK
ICAgICAvLyAiQ2xpcC1vdXQiIHRoZSBwbHVnLWluIHdoZW46CiAgICAgLy8gMSkgaXQncyBub3Qg
cmVhbGx5IGluIGEgd2luZG93IG9yIG9mZi1zY3JlZW4gb3IgaGFzIG5vIGhlaWdodCBvciB3aWR0
aC4KQEAgLTIyNTUsOSArMjI1NSw5IEBAIC0gKE5QRXJyb3Ipc2V0VmFyaWFibGU6KE5QTlVSTFZh
cmlhYmxlKXYKICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKIH0KIAotLSAoTlBFcnJv
cilnZXRBdXRoZW50aWNhdGlvbkluZm9XaXRoUHJvdG9jb2w6KGNvbnN0IGNoYXIqKXByb3RvY29s
U3RyIGhvc3Q6KGNvbnN0IGNoYXIqKWhvc3RTdHIgcG9ydDooaW50MzIpcG9ydCBzY2hlbWU6KGNv
bnN0IGNoYXIqKXNjaGVtZVN0ciByZWFsbTooY29uc3QgY2hhciopcmVhbG1TdHIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOihjaGFyKiopdXNlcm5hbWVTdHIg
dXNlcm5hbWVMZW5ndGg6KHVpbnQzMiopdXNlcm5hbWVMZW5ndGggCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDooY2hhcioqKXBhc3N3b3JkU3RyIHBhc3N3b3Jk
TGVuZ3RoOih1aW50MzIqKXBhc3N3b3JkTGVuZ3RoCistIChOUEVycm9yKWdldEF1dGhlbnRpY2F0
aW9uSW5mb1dpdGhQcm90b2NvbDooY29uc3QgY2hhciopcHJvdG9jb2xTdHIgaG9zdDooY29uc3Qg
Y2hhciopaG9zdFN0ciBwb3J0OihpbnQzMl90KXBvcnQgc2NoZW1lOihjb25zdCBjaGFyKilzY2hl
bWVTdHIgcmVhbG06KGNvbnN0IGNoYXIqKXJlYWxtU3RyCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VybmFtZTooY2hhcioqKXVzZXJuYW1lU3RyIHVzZXJuYW1lTGVuZ3Ro
Oih1aW50MzJfdCopdXNlcm5hbWVMZW5ndGggCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXNzd29yZDooY2hhcioqKXBhc3N3b3JkU3RyIHBhc3N3b3JkTGVuZ3RoOih1aW50
MzJfdCopcGFzc3dvcmRMZW5ndGgKIHsKICAgICBpZiAoIXByb3RvY29sU3RyIHx8ICFob3N0U3Ry
IHx8ICFzY2hlbWVTdHIgfHwgIXJlYWxtU3RyIHx8ICF1c2VybmFtZVN0ciB8fCAhdXNlcm5hbWVM
ZW5ndGggfHwgIXBhc3N3b3JkU3RyIHx8ICFwYXNzd29yZExlbmd0aCkKICAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7CkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvbnBhcGkubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5zL25wYXBpLm1tCShyZXZpc2lvbiA1ODU4
NSkKKysrIFdlYktpdC9tYWMvUGx1Z2lucy9ucGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksNyBAQCBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnBsdWdpblZpZXdGb3JJbnN0CiAKIC8v
IGdlbmVyYWwgcGx1Zy1pbiB0byBicm93c2VyIGZ1bmN0aW9ucwogCi12b2lkKiBOUE5fTWVtQWxs
b2ModWludDMyIHNpemUpCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyX3Qgc2l6ZSkKIHsKICAg
ICByZXR1cm4gbWFsbG9jKHNpemUpOwogfQpAQCAtNDksNyArNDksNyBAQCB2b2lkIE5QTl9NZW1G
cmVlKHZvaWQqIHB0cikKICAgICBmcmVlKHB0cik7CiB9CiAKLXVpbnQzMiBOUE5fTWVtRmx1c2go
dWludDMyIHNpemUpCit1aW50MzJfdCBOUE5fTWVtRmx1c2godWludDMyX3Qgc2l6ZSkKIHsKICAg
ICBMT0coUGx1Z2lucywgIk5QTl9NZW1GbHVzaCIpOwogICAgIHJldHVybiBzaXplOwpAQCAtODks
MTIgKzg5LDEyIEBAIE5QRXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGMKICAg
ICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZ2V0VVJMOlVSTCB0YXJn
ZXQ6dGFyZ2V0XTsKIH0KIAotTlBFcnJvciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2Us
IGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBj
aGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQorTlBFcnJvciBOUE5fUG9z
dFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogdGFy
Z2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5v
dGlmeURhdGEpCiB7CiAgICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
IHBvc3RVUkxOb3RpZnk6VVJMIHRhcmdldDp0YXJnZXQgbGVuOmxlbiBidWY6YnVmIGZpbGU6Zmls
ZSBub3RpZnlEYXRhOm5vdGlmeURhdGFdOwogfQogCi1OUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBp
bnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4s
IGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCitOUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBp
bnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxl
biwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKIHsKICAgICByZXR1cm4gW3BsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgcG9zdFVSTDpVUkwgdGFyZ2V0OnRhcmdldCBsZW46bGVu
IGJ1ZjpidWYgZmlsZTpmaWxlXTsKIH0KQEAgLTEwNCw3ICsxMDQsNyBAQCBOUEVycm9yIE5QTl9O
ZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JCiAgICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpIG5ld1N0cmVhbTp0eXBlIHRhcmdldDp0YXJnZXQgc3RyZWFtOnN0cmVh
bV07CiB9CiAKLWludDMyIE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0s
IGludDMyIGxlbiwgdm9pZCogYnVmZmVyKQoraW50MzJfdCBOUE5fV3JpdGUoTlBQIGluc3RhbmNl
LCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKQogewogICAgIHJl
dHVybiBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSB3cml0ZTpzdHJlYW0gbGVuOmxl
biBidWZmZXI6YnVmZmVyXTsKIH0KQEAgLTE3NiwxMiArMTc2LDEyIEBAIHZvaWQgTlBOX1BsdWdp
blRocmVhZEFzeW5jQ2FsbChOUFAgaW5zdGEKICAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
OjpzY2hlZHVsZXIoKS5zY2hlZHVsZUNhbGwoaW5zdGFuY2UsIGZ1bmMsIHVzZXJEYXRhKTsKIH0K
IAotdWludDMyIE5QTl9TY2hlZHVsZVRpbWVyKE5QUCBpbnN0YW5jZSwgdWludDMyIGludGVydmFs
LCBOUEJvb2wgcmVwZWF0LCB2b2lkICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50MzIgdGltZXJJ
RCkpCit1aW50MzJfdCBOUE5fU2NoZWR1bGVUaW1lcihOUFAgaW5zdGFuY2UsIHVpbnQzMl90IGlu
dGVydmFsLCBOUEJvb2wgcmVwZWF0LCB2b2lkICgqdGltZXJGdW5jKShOUFAgbnBwLCB1aW50MzJf
dCB0aW1lcklEKSkKIHsKICAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSkgc2NoZWR1bGVUaW1lcldpdGhJbnRlcnZhbDppbnRlcnZhbCByZXBlYXQ6cmVwZWF0IHRpbWVy
RnVuYzp0aW1lckZ1bmNdOwogfQogCi12b2lkIE5QTl9VbnNjaGVkdWxlVGltZXIoTlBQIGluc3Rh
bmNlLCB1aW50MzIgdGltZXJJRCkKK3ZvaWQgTlBOX1Vuc2NoZWR1bGVUaW1lcihOUFAgaW5zdGFu
Y2UsIHVpbnQzMl90IHRpbWVySUQpCiB7CiAgICAgW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSkgdW5zY2hlZHVsZVRpbWVyOnRpbWVySURdOwogfQpAQCAtMTkxLDE3ICsxOTEsMTcgQEAg
TlBFcnJvciBOUE5fUG9wVXBDb250ZXh0TWVudShOUFAgaW5zdGFuYwogICAgIHJldHVybiBbcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBwb3BVcENvbnRleHRNZW51Om1lbnVdOwogfQog
Ci1OUEVycm9yIE5QTl9HZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxl
IHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyKiBsZW4pCitO
UEVycm9yIE5QTl9HZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZh
cmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKIHsK
ICAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgZ2V0VmFyaWFibGU6
dmFyaWFibGUgZm9yVVJMOnVybCB2YWx1ZTp2YWx1ZSBsZW5ndGg6bGVuXTsKIH0KIAotTlBFcnJv
ciBOUE5fU2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJs
ZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyIGxlbikKK05QRXJy
b3IgTlBOX1NldFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFi
bGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKIHsK
ICAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkgc2V0VmFyaWFibGU6
dmFyaWFibGUgZm9yVVJMOnVybCB2YWx1ZTp2YWx1ZSBsZW5ndGg6bGVuXTsKIH0KIAotTlBFcnJv
ciBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogcHJv
dG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyIHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwg
Y29uc3QgY2hhciAqcmVhbG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMyKiB1bGVuLCBjaGFyKiog
cGFzc3dvcmQsIHVpbnQzMiogcGxlbikKK05QRXJyb3IgTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5m
byhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBp
bnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciAqcmVhbG0sIGNoYXIq
KiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29yZCwgdWludDMyX3QqIHBs
ZW4pCiB7CiAgICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpIGdldEF1
dGhlbnRpY2F0aW9uSW5mb1dpdGhQcm90b2NvbDpwcm90b2NvbCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
b3N0Omhvc3QgCkBAIC0yMTcsMTIgKzIxNywxMiBAQCBOUEJvb2wgTlBOX0NvbnZlcnRQb2ludChO
UFAgaW5zdGFuY2UsIGRvCiAgICAgcmV0dXJuIFtwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpIGNvbnZlcnRGcm9tWDpzb3VyY2VYIGFuZFk6c291cmNlWSBzcGFjZTpzb3VyY2VTcGFjZSB0
b1g6ZGVzdFggYW5kWTpkZXN0WSBzcGFjZTpkZXN0U3BhY2VdOwogfQogCi11aW50MzIgV0tOX0No
ZWNrSWZBbGxvd2VkVG9Mb2FkVVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiBmcmFtZSwgdm9pZCAoKmNhbGxiYWNrRnVuYykoTlBQIG5wcCwgdWludDMyLCBOUEJv
b2wsIHZvaWQqKSwgdm9pZCogY29udGV4dCkKK3VpbnQzMl90IFdLTl9DaGVja0lmQWxsb3dlZFRv
TG9hZFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogZnJhbWUs
IHZvaWQgKCpjYWxsYmFja0Z1bmMpKE5QUCBucHAsIHVpbnQzMl90LCBOUEJvb2wsIHZvaWQqKSwg
dm9pZCogY29udGV4dCkKIHsKICAgICByZXR1cm4gW3BsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSkgY2hlY2tJZkFsbG93ZWRUb0xvYWRVUkw6dXJsIGZyYW1lOmZyYW1lIGNhbGxiYWNrRnVu
YzpjYWxsYmFja0Z1bmMgY29udGV4dDpjb250ZXh0XTsKIH0KIAotdm9pZCBXS05fQ2FuY2VsQ2hl
Y2tJZkFsbG93ZWRUb0xvYWRVUkwoTlBQIGluc3RhbmNlLCB1aW50MzIgY2hlY2tJRCkKK3ZvaWQg
V0tOX0NhbmNlbENoZWNrSWZBbGxvd2VkVG9Mb2FkVVJMKE5QUCBpbnN0YW5jZSwgdWludDMyX3Qg
Y2hlY2tJRCkKIHsKICAgICBbcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKSBjYW5jZWxD
aGVja0lmQWxsb3dlZFRvTG9hZFVSTDpjaGVja0lEXTsKIH0KSW5kZXg6IFdlYktpdFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4
NTg4KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NTcgQEAKKzIwMTAtMDQtMzAgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXh0IHN0
ZXAgdG93YXJkcyBmaXhpbmcKKyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4NAorICAgICAgICBtb3ZlIG5wYXBpLmggdG8gQzk5IGlu
dGVnZXIgdHlwZXMKKworICAgICAgICBVc2UgdGhlIEM5OSB0eXBlcyBldmVyeXdoZXJlLiBUaGUg
Im9sZCIgdHlwZXMgYXJlIHN0aWxsIGFyb3VuZCBidXQgd2lsbCBiZSByZW1vdmVkCisgICAgICAg
IGluIGEgc3Vic2VxdWVudCBjb21taXQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0
TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuY3BwOgorICAgICAgICAoaW50MzJW
YXJpYW50VG9JZGVudGlmaWVyKToKKyAgICAgICAgKGRvdWJsZVZhcmlhbnRUb0lkZW50aWZpZXIp
OgorICAgICAgICAodGVzdElkZW50aWZpZXJUb0ludCk6CisgICAgICAgICh0ZXN0R2V0SW50SWRl
bnRpZmllcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1
YnByb2ovbWFpbi5jcHA6CisgICAgICAgIChOUFBfTmV3KToKKyAgICAgICAgKE5QUF9OZXdTdHJl
YW0pOgorICAgICAgICAoTlBQX1dyaXRlUmVhZHkpOgorICAgICAgICAoTlBQX1dyaXRlKToKKyAg
ICAgICAgKE5QUF9IYW5kbGVFdmVudCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1Rl
c3ROZXRzY2FwZVBsdWdpbi9tYWluLmNwcDoKKyAgICAgICAgKE5QUF9OZXcpOgorICAgICAgICAo
TlBQX05ld1N0cmVhbSk6CisgICAgICAgIChOUFBfV3JpdGVSZWFkeSk6CisgICAgICAgIChOUFBf
V3JpdGUpOgorICAgICAgICAoTlBQX0hhbmRsZUV2ZW50KToKKworMjAxMC0wNC0yOSAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVn
IFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVn
SW4uc3VicHJvai9QbHVnaW5PYmplY3QuY3BwOgorICAgICAgICAoaW50MzJWYXJpYW50VG9JZGVu
dGlmaWVyKToKKyAgICAgICAgKGRvdWJsZVZhcmlhbnRUb0lkZW50aWZpZXIpOgorICAgICAgICAo
dGVzdElkZW50aWZpZXJUb0ludCk6CisgICAgICAgICh0ZXN0R2V0SW50SWRlbnRpZmllcik6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovbWFpbi5j
cHA6CisgICAgICAgIChOUFBfTmV3KToKKyAgICAgICAgKE5QUF9OZXdTdHJlYW0pOgorICAgICAg
ICAoTlBQX1dyaXRlUmVhZHkpOgorICAgICAgICAoTlBQX1dyaXRlKToKKyAgICAgICAgKE5QUF9I
YW5kbGVFdmVudCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1Rlc3ROZXRzY2FwZVBs
dWdpbi9tYWluLmNwcDoKKyAgICAgICAgKE5QUF9OZXcpOgorICAgICAgICAoTlBQX05ld1N0cmVh
bSk6CisgICAgICAgIChOUFBfV3JpdGVSZWFkeSk6CisgICAgICAgIChOUFBfV3JpdGUpOgorICAg
ICAgICAoTlBQX0hhbmRsZUV2ZW50KToKKwogMjAxMC0wNC0zMCAgU3RldmUgQmxvY2sgIDxzdGV2
ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpJ
bmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnBy
b2ovUGx1Z2luT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuY3BwCShyZXZpc2lv
biA1ODU4NSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJ
bi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3ICszNTcs
NyBAQCBzdGF0aWMgTlBJZGVudGlmaWVyIHN0cmluZ1ZhcmlhbnRUb0lkZW50CiBzdGF0aWMgTlBJ
ZGVudGlmaWVyIGludDMyVmFyaWFudFRvSWRlbnRpZmllcihOUFZhcmlhbnQgdmFyaWFudCkKIHsK
ICAgICBhc3NlcnQoTlBWQVJJQU5UX0lTX0lOVDMyKHZhcmlhbnQpKTsKLSAgICBpbnQzMiBpbnRl
Z2VyID0gTlBWQVJJQU5UX1RPX0lOVDMyKHZhcmlhbnQpOworICAgIGludDMyX3QgaW50ZWdlciA9
IE5QVkFSSUFOVF9UT19JTlQzMih2YXJpYW50KTsKICAgICByZXR1cm4gYnJvd3Nlci0+Z2V0aW50
aWRlbnRpZmllcihpbnRlZ2VyKTsKIH0KIApAQCAtMzY2LDcgKzM2Niw3IEBAIHN0YXRpYyBOUElk
ZW50aWZpZXIgZG91YmxlVmFyaWFudFRvSWRlbnQKICAgICBhc3NlcnQoTlBWQVJJQU5UX0lTX0RP
VUJMRSh2YXJpYW50KSk7CiAgICAgZG91YmxlIHZhbHVlID0gTlBWQVJJQU5UX1RPX0RPVUJMRSh2
YXJpYW50KTsKICAgICAvLyBTYWRseSB0aGVyZSBpcyBubyAiZ2V0ZG91YmxlaWRlbnRpZmllciIK
LSAgICBpbnQzMiBpbnRlZ2VyID0gc3RhdGljX2Nhc3Q8aW50MzI+KHZhbHVlKTsKKyAgICBpbnQz
Ml90IGludGVnZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSk7CiAgICAgcmV0dXJuIGJy
b3dzZXItPmdldGludGlkZW50aWZpZXIoaW50ZWdlcik7CiB9CiAKQEAgLTQwMiw3ICs0MDIsNyBA
QCBzdGF0aWMgYm9vbCB0ZXN0SWRlbnRpZmllclRvSW50KFBsdWdpbk9iCiAgICAgTlBJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSB2YXJpYW50VG9JZGVudGlmaWVyKGFyZ3NbMF0pOwogICAgIGlmICgh
aWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludDMyIGludGVnZXIgPSBi
cm93c2VyLT5pbnRmcm9taWRlbnRpZmllcihpZGVudGlmaWVyKTsKKyAgICBpbnQzMl90IGludGVn
ZXIgPSBicm93c2VyLT5pbnRmcm9taWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICBJTlQzMl9U
T19OUFZBUklBTlQoaW50ZWdlciwgKnJlc3VsdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01
NTIsNyArNTUyLDcgQEAgc3RhdGljIGJvb2wgdGVzdEdldEludElkZW50aWZpZXIoUGx1Z2luTwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9IGJy
b3dzZXItPmdldGludGlkZW50aWZpZXIoKGludClOUFZBUklBTlRfVE9fRE9VQkxFKGFyZ3NbMF0p
KTsKLSAgICBJTlQzMl9UT19OUFZBUklBTlQoKGludDMyKShsb25nIGxvbmcpaWRlbnRpZmllciwg
KnJlc3VsdCk7CisgICAgSU5UMzJfVE9fTlBWQVJJQU5UKChpbnQzMl90KShsb25nIGxvbmcpaWRl
bnRpZmllciwgKnJlc3VsdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL21haW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJ
bi5zdWJwcm9qL21haW4uY3BwCShyZXZpc2lvbiA1ODU4NSkKKysrIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL21haW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgTlBfU2h1dGRvd24odm9pZCkKIAogc3RhdGljIHZv
aWQgZXhlY3V0ZVNjcmlwdChjb25zdCBQbHVnaW5PYmplY3QqIG9iaiwgY29uc3QgY2hhciogc2Ny
aXB0KTsKIAotTlBFcnJvciBOUFBfTmV3KE5QTUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3Rh
bmNlLCB1aW50MTYgbW9kZSwgaW50MTYgYXJnYywgY2hhciAqYXJnbltdLCBjaGFyICphcmd2W10s
IE5QU2F2ZWREYXRhICpzYXZlZCkKK05QRXJyb3IgTlBQX05ldyhOUE1JTUVUeXBlIHBsdWdpblR5
cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2X3QgbW9kZSwgaW50MTZfdCBhcmdjLCBjaGFyICphcmdu
W10sIGNoYXIgKmFyZ3ZbXSwgTlBTYXZlZERhdGEgKnNhdmVkKQogewogICAgIGJvb2wgZm9yY2VD
YXJib24gPSBmYWxzZTsKIApAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRpYyB2b2lkIGV4ZWN1dGVT
Y3JpcHQoY29uc3QgUGx1Z2luT2IKICAgICBicm93c2VyLT5yZWxlYXNldmFyaWFudHZhbHVlKCZi
cm93c2VyUmVzdWx0KTsKIH0KIAotTlBFcnJvciBOUFBfTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwg
TlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSAqc3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQx
NiAqc3R5cGUpCitOUEVycm9yIE5QUF9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBl
IHR5cGUsIE5QU3RyZWFtICpzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2X3QgKnN0eXBl
KQogewogICAgIFBsdWdpbk9iamVjdCogb2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luT2JqZWN0Kj4o
aW5zdGFuY2UtPnBkYXRhKTsKICAgICBvYmotPnN0cmVhbSA9IHN0cmVhbTsKQEAgLTI1MiwxMiAr
MjUyLDEyIEBAIE5QRXJyb3IgTlBQX0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNlLCAKICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CiB9CiAKLWludDMyIE5QUF9Xcml0ZVJlYWR5KE5QUCBpbnN0
YW5jZSwgTlBTdHJlYW0gKnN0cmVhbSkKK2ludDMyX3QgTlBQX1dyaXRlUmVhZHkoTlBQIGluc3Rh
bmNlLCBOUFN0cmVhbSAqc3RyZWFtKQogewogICAgIHJldHVybiAwOwogfQogCi1pbnQzMiBOUFBf
V3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSAqc3RyZWFtLCBpbnQzMiBvZmZzZXQsIGludDMy
IGxlbiwgdm9pZCAqYnVmZmVyKQoraW50MzJfdCBOUFBfV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSAqc3RyZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW4sIHZvaWQgKmJ1ZmZlcikK
IHsKICAgICByZXR1cm4gMDsKIH0KQEAgLTQwMSw3ICs0MDEsNyBAQCBzdGF0aWMgaW50MTZfdCBo
YW5kbGVFdmVudENvY29hKE5QUCBpbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludDE2IE5QUF9I
YW5kbGVFdmVudChOUFAgaW5zdGFuY2UsIHZvaWQgKmV2ZW50KQoraW50MTZfdCBOUFBfSGFuZGxl
RXZlbnQoTlBQIGluc3RhbmNlLCB2b2lkICpldmVudCkKIHsKICAgICBQbHVnaW5PYmplY3QqIG9i
aiA9IHN0YXRpY19jYXN0PFBsdWdpbk9iamVjdCo+KGluc3RhbmNlLT5wZGF0YSk7CiAgICAgaWYg
KCFvYmotPmV2ZW50TG9nZ2luZykKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9UZXN0TmV0c2NhcGVQbHVnaW4vbWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL1Rlc3ROZXRzY2FwZVBsdWdpbi9tYWluLmNwcAkocmV2aXNpb24g
NTg1ODUpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdE5ldHNjYXBlUGx1
Z2luL21haW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxMyArODUsMTMgQEAgc3RhdGljIHZv
aWQgZXhlY3V0ZVNjcmlwdChjb25zdCBQbHVnaW5PYgogICAgIGJyb3dzZXItPnJlbGVhc2V2YXJp
YW50dmFsdWUoJmJyb3dzZXJSZXN1bHQpOwogfQogCi1OUEVycm9yIE5QUF9OZXcoTlBNSU1FVHlw
ZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVpbnQxNiBtb2RlLCBpbnQxNiBhcmdjLCBjaGFy
ICphcmduW10sIGNoYXIgKmFyZ3ZbXSwgTlBTYXZlZERhdGEgKnNhdmVkKQorTlBFcnJvciBOUFBf
TmV3KE5QTUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNlLCB1aW50MTZfdCBtb2RlLCBp
bnQxNl90IGFyZ2MsIGNoYXIgKmFyZ25bXSwgY2hhciAqYXJndltdLCBOUFNhdmVkRGF0YSAqc2F2
ZWQpCiB7CiAgICAgaWYgKGJyb3dzZXItPnZlcnNpb24gPj0gMTQpIHsKICAgICAgICAgUGx1Z2lu
T2JqZWN0KiBvYmogPSAoUGx1Z2luT2JqZWN0Kilicm93c2VyLT5jcmVhdGVvYmplY3QoaW5zdGFu
Y2UsIGdldFBsdWdpbkNsYXNzKCkpOwogICAgICAgICBpbnN0YW5jZS0+cGRhdGEgPSBvYmo7CiAK
LSAgICAgICAgZm9yIChpbnQxNiBpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworICAgICAgICBmb3Ig
KGludDE2X3QgaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKICAgICAgICAgICAgIGlmIChfc3RyaWNt
cChhcmduW2ldLCAib25zdHJlYW1sb2FkIikgPT0gMCAmJiAhb2JqLT5vblN0cmVhbUxvYWQpCiAg
ICAgICAgICAgICAgICAgb2JqLT5vblN0cmVhbUxvYWQgPSBfc3RyZHVwKGFyZ3ZbaV0pOwogICAg
ICAgICAgICAgZWxzZSBpZiAoX3N0cmljbXAoYXJnbltpXSwgIm9uU3RyZWFtRGVzdHJveSIpID09
IDAgJiYgIW9iai0+b25TdHJlYW1EZXN0cm95KQpAQCAtMTY2LDcgKzE2Niw3IEBAIE5QRXJyb3Ig
TlBQX1NldFdpbmRvdyhOUFAgaW5zdGFuY2UsIE5QV2kKICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CiB9CiAKLU5QRXJyb3IgTlBQX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUg
dHlwZSwgTlBTdHJlYW0gKnN0cmVhbSwgTlBCb29sIHNlZWthYmxlLCB1aW50MTYgKnN0eXBlKQor
TlBFcnJvciBOUFBfTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0
cmVhbSAqc3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQxNl90ICpzdHlwZSkKIHsKICAgICBQ
bHVnaW5PYmplY3QqIG9iaiA9IChQbHVnaW5PYmplY3QqKWluc3RhbmNlLT5wZGF0YTsKIApAQCAt
MTk2LDEyICsxOTYsMTIgQEAgTlBFcnJvciBOUFBfRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2Us
IAogICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKIH0KIAotaW50MzIgTlBQX1dyaXRlUmVhZHko
TlBQIGluc3RhbmNlLCBOUFN0cmVhbSAqc3RyZWFtKQoraW50MzJfdCBOUFBfV3JpdGVSZWFkeShO
UFAgaW5zdGFuY2UsIE5QU3RyZWFtICpzdHJlYW0pCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlu
dDMyIE5QUF9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtICpzdHJlYW0sIGludDMyIG9mZnNl
dCwgaW50MzIgbGVuLCB2b2lkICpidWZmZXIpCitpbnQzMl90IE5QUF9Xcml0ZShOUFAgaW5zdGFu
Y2UsIE5QU3RyZWFtICpzdHJlYW0sIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbiwgdm9pZCAq
YnVmZmVyKQogewogICAgIHJldHVybiAwOwogfQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgTlBQ
X1ByaW50KE5QUCBpbnN0YW5jZSwgTlBQcmludCAqcGwKIHsKIH0KIAotaW50MTYgTlBQX0hhbmRs
ZUV2ZW50KE5QUCBpbnN0YW5jZSwgdm9pZCAqZXZlbnQpCitpbnQxNl90IE5QUF9IYW5kbGVFdmVu
dChOUFAgaW5zdGFuY2UsIHZvaWQgKmV2ZW50KQogewogICAgIFBsdWdpbk9iamVjdCAqb2JqID0g
KFBsdWdpbk9iamVjdCopaW5zdGFuY2UtPnBkYXRhOwogICAgIGlmICghb2JqLT5ldmVudExvZ2dp
bmcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54824</attachid>
            <date>2010-04-30 13:38:48 -0700</date>
            <delta_ts>2010-04-30 13:44:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-20784-20100430133847.patch</filename>
            <type>text/plain</type>
            <size>2143</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODU5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDQtMzAgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaW5hbCBwYXJ0IG9mIAorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNzg0CisgICAgICAgIG1vdmUgbnBhcGkuaCB0byBDOTkgaW50
ZWdlciB0eXBlcworCisgICAgICAgICogYnJpZGdlL25wYXBpLmg6CisgICAgICAgIFJlbW92ZSB0
aGUgb2xkIHR5cGVzLgorCiAyMDEwLTA0LTMwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcu
Ym90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNTg1Njku
CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ucGFwaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJp
ZGdlL25wYXBpLmgJKHJldmlzaW9uIDU4NTk3KQorKysgV2ViQ29yZS9icmlkZ2UvbnBhcGkuaAko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDUyICsxMjksNiBAQAogLyogICAgICAgICAgICAgRGVmaW5p
dGlvbiBvZiBCYXNpYyBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCiAKLS8qIFFOWCBzZXRzIHRoZSBfSU5UMTYgYW5kIGZyaWVuZHMgZGVm
aW5lcywgYnV0IGRvZXMgbm90IHR5cGVkZWYgdGhlIHR5cGVzICovCi0jaWZkZWYgX19RTlhOVE9f
XwotI3VuZGVmIF9VSU5UMTYKLSN1bmRlZiBfSU5UMTYKLSN1bmRlZiBfVUlOVDMyCi0jdW5kZWYg
X0lOVDMyCi0jZW5kaWYKLQotI2lmbmRlZiBfVUlOVDE2Ci0jZGVmaW5lIF9VSU5UMTYKLXR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgdWludDE2OwotI2VuZGlmCi0KLSNpZm5kZWYgX1VJTlQzMgotI2Rl
ZmluZSBfVUlOVDMyCi0jaWZkZWYgX19MUDY0X18KLXR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQz
MjsKLSNlbHNlIC8qIF9fTFA2NF9fICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDMyOwot
I2VuZGlmIC8qIF9fTFA2NF9fICovCi0jZW5kaWYKLQotI2lmbmRlZiBfSU5UMTYKLSNkZWZpbmUg
X0lOVDE2Ci10eXBlZGVmIHNob3J0IGludDE2OwotI2VuZGlmCi0KLSNpZm5kZWYgX0lOVDMyCi0j
ZGVmaW5lIF9JTlQzMgotI2lmZGVmIF9fTFA2NF9fCi10eXBlZGVmIGludCBpbnQzMjsKLSNlbHNl
IC8qIF9fTFA2NF9fICovCi10eXBlZGVmIGxvbmcgaW50MzI7Ci0jZW5kaWYgLyogX19MUDY0X18g
Ki8KLSNlbmRpZgotCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFICgwKQotI2VuZGlmCi0j
aWZuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRSAoMSkKLSNlbmRpZgotI2lmbmRlZiBOVUxMCi0jZGVm
aW5lIE5VTEwgKDBMKQotI2VuZGlmCi0KIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgICBOUEJvb2w7
CiB0eXBlZGVmIGludDE2X3QgICAgICAgICAgTlBFcnJvcjsKIHR5cGVkZWYgaW50MTZfdCAgICAg
ICAgICBOUFJlYXNvbjsKQEAgLTY3OSw4ICs2MzMsOCBAQCB0eXBlZGVmIHN0cnVjdCBOUF9HTENv
bnRleHQKIHR5cGVkZWYgc3RydWN0IE5QX1BvcnQKIHsKICAgICBDR3JhZlB0ciAgICAgcG9ydDsg
ICAgICAgIC8qIEdyYWZwb3J0ICovCi0gICAgaW50MzIgICAgICAgIHBvcnR4OyAgICAgICAgLyog
cG9zaXRpb24gaW5zaWRlIHRoZSB0b3Btb3N0IHdpbmRvdyAqLwotICAgIGludDMyICAgICAgICBw
b3J0eTsKKyAgICBpbnQzMl90ICAgICAgcG9ydHg7ICAgICAgICAvKiBwb3NpdGlvbiBpbnNpZGUg
dGhlIHRvcG1vc3Qgd2luZG93ICovCisgICAgaW50MzJfdCAgICAgIHBvcnR5OwogfSBOUF9Qb3J0
OwogCiAjZW5kaWYgLyogTlBfTk9fUVVJQ0tEUkFXICovCg==
</data>
<flag name="review"
          id="38879"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>