<?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>66065</bug_id>
          
          <creation_ts>2011-08-11 09:17:21 -0700</creation_ts>
          <short_desc>[chromium] Split tiler into main thread / compositor thread versions</short_desc>
          <delta_ts>2011-08-19 16:40:13 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>58834</dependson>
          <blocked>66430</blocked>
    
    <blocked>66609</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>enne</cc>
    
    <cc>husky</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>sievers</cc>
    
    <cc>tony</cc>
    
    <cc>vangelis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>449815</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-11 09:17:21 -0700</bug_when>
    <thetext>[chromium] Split tiler into main thread / compositor thread versions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449816</commentid>
    <comment_count>1</comment_count>
      <attachid>103634</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-11 09:20:43 -0700</bug_when>
    <thetext>Created attachment 103634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449819</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-11 09:27:10 -0700</bug_when>
    <thetext>This isn&apos;t a real patch, but it&apos;s a strawperson attempt at what splitting the tiler into an main thread (invalidation) and compositor thread (upload and drawing) version might look like.

There&apos;s a number of FIXME&apos;s in this patch that I&apos;m going to file as dependent patches so that the actual split can involve as little functionality change as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449879</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-11 10:59:28 -0700</bug_when>
    <thetext>Please preserve http://trac.webkit.org/changeset/92867, wherever that code ends up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449881</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-11 11:02:46 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Please preserve http://trac.webkit.org/changeset/92867, wherever that code ends up.

Oh, I figure there&apos;s going to be a boatload of conflicts.  That&apos;s why I want to land the functionality changes separately and then maybe just re-do the code moving around with wherever ToT is at that point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450809</commentid>
    <comment_count>5</comment_count>
      <attachid>103855</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-12 21:42:33 -0700</bug_when>
    <thetext>Created attachment 103855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451348</commentid>
    <comment_count>6</comment_count>
      <attachid>103855</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-15 15:53:10 -0700</bug_when>
    <thetext>Comment on attachment 103855
Patch

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

I&apos;m not sure about having two subclasses of LayerTilerChromium.  It feels like this is more of a has-a relationship than an is-a relationship.  Could TiledLayerChromium and CCTiledLayerImpl both own a LayerTilerChromium and have the pushPropertiesTo() function do a copy across the two?  It seems like there isn&apos;t all that much state we need to hoist over (the tile map, which we&apos;re explicitly syncing, and a half-dozen properties).  I really feel that LayerTilerChromium should be an implementation detail of TiledLayerChromium and not part of the API.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:67
&gt; +        explicit Tile() : m_i(-1), m_j(-1) { }

nit: no explicit necessary

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerUpdater.cpp:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

times they are a&apos;changing. 2011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451363</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-15 16:18:37 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 103855 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=103855&amp;action=review
&gt; 
&gt; I&apos;m not sure about having two subclasses of LayerTilerChromium.  It feels like this is more of a has-a relationship than an is-a relationship.  Could TiledLayerChromium and CCTiledLayerImpl both own a LayerTilerChromium and have the pushPropertiesTo() function do a copy across the two?  It seems like there isn&apos;t all that much state we need to hoist over (the tile map, which we&apos;re explicitly syncing, and a half-dozen properties).  I really feel that LayerTilerChromium should be an implementation detail of TiledLayerChromium and not part of the API.

I&apos;m ok with a has-a relationship between LayerTilerChromium and LayerTilerUpdater/CClayerTilerImpl.  That&apos;s much cleaner.

However, unless you see some way to make the root layer into a LayerChromium, I&apos;m not sure how to reuse the tiler logic for the root as well.  Pushing the LayerTilerChromium-derived logic up into the respective layer classes would make this tricky, unless I&apos;m missing something.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:67
&gt; &gt; +        explicit Tile() : m_i(-1), m_j(-1) { }
&gt; 
&gt; nit: no explicit necessary

Good catch.  I had removed a parameter there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451369</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-15 16:24:04 -0700</bug_when>
    <thetext>Yeah the root layer stuff sucks.  That&apos;s what https://bugs.webkit.org/show_bug.cgi?id=58834 is hoping to fix.

Maybe you can explicitly make a TiledLayerChromium for the root content if you hooked up the proper client and such?  Gets very yucky.  Lemme see if I can just fix the scissor stuff so this is all in the LayerChromium tree....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451371</commentid>
    <comment_count>9</comment_count>
      <attachid>103855</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-15 16:27:51 -0700</bug_when>
    <thetext>Comment on attachment 103855
Patch

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

This patch makes me very :3. Thank you Enne.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:74
&gt; +void LayerTilerChromium::pushPropertiesTo(LayerTilerChromium* tiler) const

This sort of caught me off guard, I was expecting a CCLayerTilerImpl* here... the hazards perhaps of reading a patch from top to bottom?

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerUpdater.cpp:5
&gt; + * modification, are permitted provided that the following conditions

Is this a mainthread concept right?

Should we be putting new compositor files in cc/ with the prefix? Iirw, all files eventually go up in cc/ that are compositor related... the only reason things are in platform/graphics/chromium is to avoid complications from renaming mid-development.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTilerImpl.h:41
&gt; +class CCLayerTilerImpl : public LayerTilerChromium {

Recapping IM discussion, can we make CCLayerTilerImpl and LayerTiler not share any common base class? I think there&apos;s goodness that comes from it being impossible to cast between impl and mainthread representation. Maybe have a LayerTilerData class for common data, and keep it as a member that you push...

LayerTilerData {
  ... common math, state that both threads have
}

LayerTilerChromium {
  PushPropertiesTo(CCLayerTilerImpl*)
  {
    impl-&gt;SetCommonData(m_data);
  }
  LayerTilerData m_data;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451386</commentid>
    <comment_count>10</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-15 16:42:24 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Yeah the root layer stuff sucks.  That&apos;s what https://bugs.webkit.org/show_bug.cgi?id=58834 is hoping to fix.

Maybe I&apos;ll just wait for that patch then if the root gets a tiled layer.  Trying to do that myself would likely just end up with me writing the same patch you&apos;re writing.

So, once that lands, I could rename LayerTilerChromium (in this original patch) to LayerTilingData and have TiledLayerChromium and CCTiledLayerImpl both have-a LayerTilingData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451389</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-15 16:44:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; Yeah the root layer stuff sucks.  That&apos;s what https://bugs.webkit.org/show_bug.cgi?id=58834 is hoping to fix.
&gt; 
&gt; Maybe I&apos;ll just wait for that patch then if the root gets a tiled layer.  Trying to do that myself would likely just end up with me writing the same patch you&apos;re writing.
&gt; 
&gt; So, once that lands, I could rename LayerTilerChromium (in this original patch) to LayerTilingData and have TiledLayerChromium and CCTiledLayerImpl both have-a LayerTilingData.

Er, CCLayerTilingData, I mean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451423</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-15 17:49:57 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; Yeah the root layer stuff sucks.  That&apos;s what https://bugs.webkit.org/show_bug.cgi?id=58834 is hoping to fix.
&gt; 
&gt; Maybe I&apos;ll just wait for that patch then if the root gets a tiled layer.  Trying to do that myself would likely just end up with me writing the same patch you&apos;re writing.
&gt; 
&gt; So, once that lands, I could rename LayerTilerChromium (in this original patch) to LayerTilingData and have TiledLayerChromium and CCTiledLayerImpl both have-a LayerTilingData.

Exactly.  I&apos;ll try to resolve 58843 ASAP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451424</commentid>
    <comment_count>13</comment_count>
      <attachid>103855</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-15 17:50:40 -0700</bug_when>
    <thetext>Comment on attachment 103855
Patch

r-, gonna wait for the root layer to get sorted out then change the is-a in this patch to a has-a relationship.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452706</commentid>
    <comment_count>14</comment_count>
      <attachid>104276</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-17 16:26:59 -0700</bug_when>
    <thetext>Created attachment 104276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452714</commentid>
    <comment_count>15</comment_count>
      <attachid>104278</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-17 16:30:52 -0700</bug_when>
    <thetext>Created attachment 104278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452715</commentid>
    <comment_count>16</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-17 16:31:28 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=104278) [details]
&gt; Patch

This patch is built on top of the patch from 58834.  I finished re-re-refactoring based on the above comments, so I&apos;m uploading another stab at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452739</commentid>
    <comment_count>17</comment_count>
      <attachid>104278</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-17 16:58:21 -0700</bug_when>
    <thetext>Comment on attachment 104278
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:53
&gt; +    UpdatableTile(PassOwnPtr&lt;ManagedTexture&gt; tex) : m_tex(tex) { }

need &quot;explicit&quot; as in &quot;c++ is an &lt;explicit word here&gt; language&quot;

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:258
&gt; +    for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler-&gt;tiles().begin(); iter != m_tiler-&gt;tiles().end(); ++iter) {

how can we be sure that this will hit every tile on tiledLayer?  I&apos;m a little worried that when we start scrolling on the CCTiledLayerImpl side we could pretty easily miss some tiles in this iteration.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:327
&gt; +        m_unusedTiles.append(static_pointer_cast&lt;UpdatableTile&gt;(m_tiler-&gt;takeTile(removeKeys[i].first, removeKeys[i].second)));

static_pointer_cast&lt;&gt;? I&apos;m not familiar with that, where do we pick it up from?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.cpp:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

2011

&gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:86
&gt; +DrawableTile* CCTiledLayerImpl::tileAt(int i, int j) const
&gt; +{
&gt; +    return static_cast&lt;DrawableTile*&gt;(m_tiler-&gt;tileAt(i, j));
&gt; +}

i wonder if instead of static_cast&lt;&gt;&apos;ing to Tile subclasses if it&apos;d be better to templatize CCTiledLayerData on the Tile subclass.  You&apos;d have to move the implementation of tileAt() into the header, but would it be too much? When we make a CCTiledLayerData we know what kind of Tile we want to put into it and we never mix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452750</commentid>
    <comment_count>18</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-17 17:14:54 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 104278 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104278&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:53
&gt; &gt; +    UpdatableTile(PassOwnPtr&lt;ManagedTexture&gt; tex) : m_tex(tex) { }
&gt; 
&gt; need &quot;explicit&quot; as in &quot;c++ is an &lt;explicit word here&gt; language&quot;

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:258
&gt; &gt; +    for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler-&gt;tiles().begin(); iter != m_tiler-&gt;tiles().end(); ++iter) {
&gt; 
&gt; how can we be sure that this will hit every tile on tiledLayer?  I&apos;m a little worried that when we start scrolling on the CCTiledLayerImpl side we could pretty easily miss some tiles in this iteration.

I&apos;m not sure what your worry is here.  That loop will iterate through everything in the hash map.

&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:327
&gt; &gt; +        m_unusedTiles.append(static_pointer_cast&lt;UpdatableTile&gt;(m_tiler-&gt;takeTile(removeKeys[i].first, removeKeys[i].second)));
&gt; 
&gt; static_pointer_cast&lt;&gt;? I&apos;m not familiar with that, where do we pick it up from?

It comes from RefPtr.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.cpp:2
&gt; &gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; 
&gt; 2011

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:86
&gt; &gt; +DrawableTile* CCTiledLayerImpl::tileAt(int i, int j) const
&gt; &gt; +{
&gt; &gt; +    return static_cast&lt;DrawableTile*&gt;(m_tiler-&gt;tileAt(i, j));
&gt; &gt; +}
&gt; 
&gt; i wonder if instead of static_cast&lt;&gt;&apos;ing to Tile subclasses if it&apos;d be better to templatize CCTiledLayerData on the Tile subclass.  You&apos;d have to move the implementation of tileAt() into the header, but would it be too much? When we make a CCTiledLayerData we know what kind of Tile we want to put into it and we never mix.

I went back and forth on that one and didn&apos;t really feel strongly one way or the other.  I&apos;m happy to change it to use templates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452751</commentid>
    <comment_count>19</comment_count>
      <attachid>104278</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-17 17:16:49 -0700</bug_when>
    <thetext>Comment on attachment 104278
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:63
&gt; +private:
&gt; +    OwnPtr&lt;ManagedTexture&gt; m_tex;

I think you need a virtual destructor here or when a UpdatableTile is destroyed through a Tile* pointer this ~OwnPtr&lt;&gt; won&apos;t get called

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.h:68
&gt; +    class Tile : public RefCounted&lt;Tile&gt; {
&gt; +        WTF_MAKE_NONCOPYABLE(Tile);
&gt; +    public:
&gt; +        Tile() : m_i(-1), m_j(-1) { }

yeah this seems like a problem - this map holds a set of RefPtr&lt;Tile&gt;, but there&apos;s no virtual d&apos;tor declared so when a Tile is destroyed through this path it won&apos;t invoke ~UpdatableTile()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452752</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-17 17:19:43 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:258
&gt; &gt; &gt; +    for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler-&gt;tiles().begin(); iter != m_tiler-&gt;tiles().end(); ++iter) {
&gt; &gt; 
&gt; &gt; how can we be sure that this will hit every tile on tiledLayer?  I&apos;m a little worried that when we start scrolling on the CCTiledLayerImpl side we could pretty easily miss some tiles in this iteration.
&gt; 
&gt; I&apos;m not sure what your worry is here.  That loop will iterate through everything in the hash map.

It iterates through the TiledLayerChromium&apos;s m_tiler::TileMap. My concern is that there might be entries in the CCTiledLayerImpl&apos;s m_tiler::TileMap that aren&apos;t in this one - maybe that&apos;s just a theoretical concern at this point.

&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:327
&gt; &gt; &gt; +        m_unusedTiles.append(static_pointer_cast&lt;UpdatableTile&gt;(m_tiler-&gt;takeTile(removeKeys[i].first, removeKeys[i].second)));
&gt; &gt; 
&gt; &gt; static_pointer_cast&lt;&gt;? I&apos;m not familiar with that, where do we pick it up from?
&gt; 
&gt; It comes from RefPtr.
&gt; 

Interesting.  Looks like the idea is from boost - learn something new every day.

&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:86
&gt; &gt; &gt; +DrawableTile* CCTiledLayerImpl::tileAt(int i, int j) const
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return static_cast&lt;DrawableTile*&gt;(m_tiler-&gt;tileAt(i, j));
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; i wonder if instead of static_cast&lt;&gt;&apos;ing to Tile subclasses if it&apos;d be better to templatize CCTiledLayerData on the Tile subclass.  You&apos;d have to move the implementation of tileAt() into the header, but would it be too much? When we make a CCTiledLayerData we know what kind of Tile we want to put into it and we never mix.
&gt; 
&gt; I went back and forth on that one and didn&apos;t really feel strongly one way or the other.  I&apos;m happy to change it to use templates.

Your call.  I think you&apos;ll need to add a virtual d&apos;tor with this pattern but that&apos;s not huge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452820</commentid>
    <comment_count>21</comment_count>
      <attachid>104278</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-17 19:47:12 -0700</bug_when>
    <thetext>Comment on attachment 104278
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.h:68
&gt;&gt; +        Tile() : m_i(-1), m_j(-1) { }
&gt; 
&gt; yeah this seems like a problem - this map holds a set of RefPtr&lt;Tile&gt;, but there&apos;s no virtual d&apos;tor declared so when a Tile is destroyed through this path it won&apos;t invoke ~UpdatableTile()

Yeah this is definitely a real bug, so R- because of that.  Otherwise I think this patch looks pretty great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453126</commentid>
    <comment_count>22</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-18 10:40:17 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 104278 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104278&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.h:68
&gt; &gt;&gt; +        Tile() : m_i(-1), m_j(-1) { }
&gt; &gt; 
&gt; &gt; yeah this seems like a problem - this map holds a set of RefPtr&lt;Tile&gt;, but there&apos;s no virtual d&apos;tor declared so when a Tile is destroyed through this path it won&apos;t invoke ~UpdatableTile()
&gt; 
&gt; Yeah this is definitely a real bug, so R- because of that.  Otherwise I think this patch looks pretty great.

Good catch.  :)

I&apos;ll take a closer look at what templatifying this code would look like and will upload another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453219</commentid>
    <comment_count>23</comment_count>
      <attachid>104376</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-18 12:01:09 -0700</bug_when>
    <thetext>Created attachment 104376
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453225</commentid>
    <comment_count>24</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-18 12:03:48 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=104376) [details]
&gt; Patch

Adding templates subtracted a lot from readability in my opinion.  I did go add the virtual destructor and address the other review nits.

Also, the worry about iterating through tiles that weren&apos;t there was spot on.  If a tile got removed from the TiledLayerChromium side, there was nothing that would evict it from the other.  So, during the setTilerProperties function, I now just reset the CCTiledLayerImpl version so that it will be synced exactly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453316</commentid>
    <comment_count>25</comment_count>
      <attachid>104390</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-18 13:40:50 -0700</bug_when>
    <thetext>Created attachment 104390
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453320</commentid>
    <comment_count>26</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-18 13:44:23 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; Created an attachment (id=104390) [details]
&gt; Patch

Rebaselined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453460</commentid>
    <comment_count>27</comment_count>
      <attachid>104390</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-18 16:03:27 -0700</bug_when>
    <thetext>Comment on attachment 104390
Patch

Great, R=me.  I wish that generally we had better ways of detecting when we were leaking resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453932</commentid>
    <comment_count>28</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-19 11:07:49 -0700</bug_when>
    <thetext>Committed r93424: &lt;http://trac.webkit.org/changeset/93424&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454178</commentid>
    <comment_count>29</comment_count>
      <attachid>104390</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-08-19 16:22:31 -0700</bug_when>
    <thetext>Comment on attachment 104390
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h:67
&gt; +    void invalidateRect(const IntRect&amp; contentRect);

clang doesn&apos;t like this method because the parent class (LayerChromium) has &quot;virtual void invalidateRect(const FloatRect&amp; dirtyRect) {}&quot;.  Should we rename the method here or did you mean to override the parent method?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103634</attachid>
            <date>2011-08-11 09:20:43 -0700</date>
            <delta_ts>2011-08-12 21:42:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66065-20110811092042.patch</filename>
            <type>text/plain</type>
            <size>83012</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI3OTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMzMxNGIzMTdkNTYzMmYw
ZmMzNjJmZWZkZTJhMDA2YzM5MGExMjU3Li5iNjNjNzdiMWQ2NDVhNjkwMzc3OGQ1YjE0MzdmNmMx
ZGUzOGZhNDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQgQEAKKzIwMTEtMDgtMTEgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNwbGl0
IHRpbGVyIGludG8gbWFpbiB0aHJlYWQgLyBjb21wb3NpdG9yIHRocmVhZCB2ZXJzaW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYwNjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMu
IChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlkYXRlUm9vdExheWVy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJv
b3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6c2V0Vmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpyZXNldCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OlRpbGU6OlRpbGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJVcGRhdGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyVXBkYXRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJVcGRhdGVyOjpMYXllclRpbGVyVXBkYXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyVXBkYXRlcjo6fkxheWVyVGlsZXJVcGRhdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJVcGRhdGVyOjp0aWxlQXQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlclVwZGF0ZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyVGlsZXJVcGRhdGVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VGlsZXJVcGRhdGVyOjppbnZhbGlkYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlclVwZGF0ZXI6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJVcGRhdGVyOjppbnZhbGlkYXRlRW50aXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlclVwZGF0ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlclVwZGF0ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXllclRpbGVyVXBkYXRlcjo6VXBkYXRhYmxlVGlsZTo6ZGlydHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlclVwZGF0ZXI6OlVwZGF0YWJsZVRpbGU6OmNsZWFyRGlydHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRpbGVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUaWxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
aWxlcjo6Q0NMYXllclRpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxlcjo6fkND
TGF5ZXJUaWxlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsZXI6OmxheWVyUmVuZGVy
ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxlcjo6dGlsZUF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxlcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRpbGVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxl
cjo6Z2V0U2luZ2xlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsZXI6OnBy
b3RlY3RUaWxlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGVyOjp1cGRh
dGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxlcjo6ZHJhdyk6CisgICAgICAg
IChXZWJDb3JlOjppc0NDVyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlRWRnZSk6CisgICAg
ICAgIChXZWJDb3JlOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGVy
OjpkcmF3VGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUaWxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxlcjo6bGF5
ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsZXI6OkRyYXdhYmxlVGls
ZTo6RHJhd2FibGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxlcjo6RHJhd2Fi
bGVUaWxlOjp0ZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllcklt
cGw6OkNDVGlsZWRMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZWRMYXllckltcGwuaDoKKwogMjAxMS0wOC0xMCAgQWJoaXNoZWsgQXJ5YSAg
PGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENoZWNrIHRoYXQgd2UgZG8gbm90IG5l
ZWQgbGF5b3V0IGJlZm9yZSB0cnlpbmcgdG8gZGlydHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNjg0
NGI3MTAxNzhhNzEyMjE4ZmZkNjA2YTJjYmMyMzNkMGNkMDcyLi5jMGRkMTFiYzcxZjg1MmUxMDg3
ZTM0ZTJmNDczYjY2MWY0YTE3ZGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTA4LDYgKzM1MDgs
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJVcGRhdGVyLmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlclVwZGF0ZXIuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1D
YW52YXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0
Zm9ybUNhbnZhcy5oJywKQEAgLTM1NTQsNiArMzU1Niw4IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGVyLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGJmYzI5Yjc4ZDFkM2Y1NzA4N2MwYzczZDMwNjkyMTQ4
ZjEyOGQ1YjguLjBhNjc0ZjBiNTFhYjBmMWMxZmRiMWQxMTJhMmVkMTRlOGU2ZjgzZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDc0LDcgKzQ3NCw5IEBAIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9z
dENsaWVudCogY2xpZW50LAogI2VuZGlmCiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0
ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBj
b250ZW50UGFpbnQsIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKTsKIAotICAgIG1fcm9vdExheWVy
Q29udGVudFRpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUodGhpcywgSW50U2l6ZSgy
NTYsIDI1NiksIExheWVyVGlsZXJDaHJvbWl1bTo6Tm9Cb3JkZXJUZXhlbHMpOworICAgIG1fcm9v
dExheWVyQ29udGVudFRpbGVyVXBkYXRlciA9IExheWVyVGlsZXJVcGRhdGVyOjpjcmVhdGUoSW50
U2l6ZSgyNTYsIDI1NiksIENDTGF5ZXJUaWxlcjo6Tm9Cb3JkZXJUZXhlbHMpOworICAgIEFTU0VS
VChtX3Jvb3RMYXllckNvbnRlbnRUaWxlclVwZGF0ZXIpOworICAgIG1fcm9vdExheWVyQ29udGVu
dFRpbGVyID0gQ0NMYXllclRpbGVyOjpjcmVhdGUodGhpcywgSW50U2l6ZSgyNTYsIDI1NiksIEND
TGF5ZXJUaWxlcjo6Tm9Cb3JkZXJUZXhlbHMpOwogICAgIEFTU0VSVChtX3Jvb3RMYXllckNvbnRl
bnRUaWxlcik7CiAKICAgICBtX2hlYWRzVXBEaXNwbGF5ID0gQ0NIZWFkc1VwRGlzcGxheTo6Y3Jl
YXRlKHRoaXMpOwpAQCAtNTE2LDcgKzUxOCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hhcioKIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+aW52
YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlclVwZGF0
ZXItPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpyZWxlYXNlVGV4dHVyZXMoKQpAQCAtNTM0LDcgKzUzNiw3IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpyZWxlYXNlVGV4dHVyZXMoKQogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCkKIHsKICAgICBUUkFDRV9FVkVOVCgiTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyIsIHRoaXMsIDApOwot
ICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5wcmVwYXJlVG9VcGRhdGUobV92aWV3cG9ydFZp
c2libGVSZWN0LCBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyLmdldCgpKTsKKyAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlclVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3QsIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOwogfQogCiB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcigpCkBAIC01NTksNyArNTYxLDcgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zdCBJbnRSZWMKICAgICAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVy
IHN1cmZhY2UgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKICAgICAgICAg
Ly8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0aW1lIHVzZVJlbmRlclN1cmZhY2UgaXMgY2FsbGVk
LgogICAgICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKLSAgICAgICAgbV9yb290TGF5
ZXJDb250ZW50VGlsZXItPmludmFsaWRhdGVFbnRpcmVMYXllcigpOworICAgICAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlclVwZGF0ZXItPmludmFsaWRhdGVFbnRpcmVMYXllcigpOwogICAgIH0K
ICAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogfQpAQCAtODkyLDcgKzg5NCw3IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNo
cm9taXVtPiBsYXllcikKICAgICBtX3Jvb3RMYXllciA9IGxheWVyOwogICAgIGlmIChtX3Jvb3RM
YXllcikKICAgICAgICAgbV9yb290TGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0gICAg
bV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRhdGVFbnRpcmVMYXllcigpOworICAgIG1f
cm9vdExheWVyQ29udGVudFRpbGVyVXBkYXRlci0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7CiB9
CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZl
KExheWVyQ2hyb21pdW0qIGxheWVyKQpAQCAtMTE5MSw3ICsxMTkzLDcgQEAgYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICAvLyBzdGFydCB3
aGlsZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhlciBwcm9ncmFtcyBhcmUgY3JlYXRlZCBsYXppbHkg
b24gZmlyc3QgYWNjZXNzLgogICAgIG1fc2hhcmVkR2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2Vv
bWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fcmVuZGVyU3VyZmFjZVByb2dy
YW0gPSBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKG1fY29udGV4dC5nZXQo
KSkpOwotICAgIG1fdGlsZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1
bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX3RpbGVyUHJvZ3JhbSA9IGFkb3B0
UHRyKG5ldyBDQ0xheWVyVGlsZXI6OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CiAKICAgICBH
TEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCkBAIC0xMjQzLDcgKzEy
NDUsNyBAQCBjb25zdCBDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9ncmFtKiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnJlbmRlclN1cmZhY2VNYXNrUHJvZwogICAgIHJldHVybiBtX3JlbmRlclN1cmZh
Y2VNYXNrUHJvZ3JhbS5nZXQoKTsKIH0KIAotY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9n
cmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbSgpCitjb25zdCBDQ0xheWVy
VGlsZXI6OlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtKCkKIHsK
ICAgICBBU1NFUlQobV90aWxlclByb2dyYW0pOwogICAgIGlmICghbV90aWxlclByb2dyYW0tPmlu
aXRpYWxpemVkKCkpIHsKQEAgLTEyNTMsMTAgKzEyNTUsMTAgQEAgY29uc3QgTGF5ZXJUaWxlckNo
cm9taXVtOjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbSgpCiAg
ICAgcmV0dXJuIG1fdGlsZXJQcm9ncmFtLmdldCgpOwogfQogCi1jb25zdCBMYXllclRpbGVyQ2hy
b21pdW06OlByb2dyYW1Td2l6emxlKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3Jh
bVN3aXp6bGUoKQorY29uc3QgQ0NMYXllclRpbGVyOjpQcm9ncmFtU3dpenpsZSogTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlKCkKIHsKICAgICBpZiAoIW1fdGlsZXJQ
cm9ncmFtU3dpenpsZSkKLSAgICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlID0gYWRvcHRQdHIo
bmV3IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGUobV9jb250ZXh0LmdldCgpKSk7
CisgICAgICAgIG1fdGlsZXJQcm9ncmFtU3dpenpsZSA9IGFkb3B0UHRyKG5ldyBDQ0xheWVyVGls
ZXI6OlByb2dyYW1Td2l6emxlKG1fY29udGV4dC5nZXQoKSkpOwogICAgIGlmICghbV90aWxlclBy
b2dyYW1Td2l6emxlLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXll
clJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGU6OmluaXRpYWxpemUiLCB0aGlz
LCAwKTsKICAgICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlLT5pbml0aWFsaXplKCk7CkBAIC0x
MjY0LDEwICsxMjY2LDEwIEBAIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6
bGUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dpCiAgICAgcmV0dXJuIG1f
dGlsZXJQcm9ncmFtU3dpenpsZS5nZXQoKTsKIH0KIAotY29uc3QgTGF5ZXJUaWxlckNocm9taXVt
OjpQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtQUEoKQorY29u
c3QgQ0NMYXllclRpbGVyOjpQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQ
cm9ncmFtQUEoKQogewogICAgIGlmICghbV90aWxlclByb2dyYW1BQSkKLSAgICAgICAgbV90aWxl
clByb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1BQSht
X2NvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgbV90aWxlclByb2dyYW1BQSA9IGFkb3B0UHRyKG5l
dyBDQ0xheWVyVGlsZXI6OlByb2dyYW1BQShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBpZiAoIW1f
dGlsZXJQcm9ncmFtQUEtPmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtQUE6OmluaXRpYWxpemUiLCB0aGlzLCAw
KTsKICAgICAgICAgbV90aWxlclByb2dyYW1BQS0+aW5pdGlhbGl6ZSgpOwpAQCAtMTI3NSwxMCAr
MTI3NywxMCBAQCBjb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1BQSogTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQSgpCiAgICAgcmV0dXJuIG1fdGlsZXJQcm9ncmFt
QUEuZ2V0KCk7CiB9CiAKLWNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGVB
QSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlQUEoKQorY29uc3Qg
Q0NMYXllclRpbGVyOjpQcm9ncmFtU3dpenpsZUFBKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRp
bGVyUHJvZ3JhbVN3aXp6bGVBQSgpCiB7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3aXp6bGVB
QSkKLSAgICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEgPSBhZG9wdFB0cihuZXcgTGF5ZXJU
aWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZUFBKG1fY29udGV4dC5nZXQoKSkpOworICAgICAg
ICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQSA9IGFkb3B0UHRyKG5ldyBDQ0xheWVyVGlsZXI6OlBy
b2dyYW1Td2l6emxlQUEobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3Jh
bVN3aXp6bGVBQS0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlQUE6OmluaXRpYWxpemUiLCB0aGlz
LCAwKTsKICAgICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEtPmluaXRpYWxpemUoKTsKQEAg
LTEzNTEsNiArMTM1Myw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hh
cmVkT2JqZWN0cygpCiAKICAgICAvLyBDbGVhciB0aWxlcnMgYmVmb3JlIHRoZSB0ZXh0dXJlIG1h
bmFnZXIsIGFzIHRoZXkgaGF2ZSByZWZlcmVuY2VzIHRvIHRleHR1cmVzLgogICAgIG1fcm9vdExh
eWVyQ29udGVudFRpbGVyLmNsZWFyKCk7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXJVcGRh
dGVyLmNsZWFyKCk7CiAKICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuY2xlYXIoKTsKICAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaAppbmRleCBjYWMwNzU0YjA4YTAwNGVjMGU4ZWRkMmIyNTI4ZTU2NDcy
NTczODY4Li4yNWEwMGMwM2RiNTFlZDdiNjY3OWVmMzhmNzRiZjYwOTQ5ZTU1M2EwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTMxLDEwICsxMzEsMTAgQEAgcHVibGlj
OgogICAgIGNvbnN0IENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0qIGhlYWRzVXBEaXNwbGF5UHJv
Z3JhbSgpOwogICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbSogcmVuZGVyU3VyZmFj
ZVByb2dyYW0oKTsKICAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9ncmFtKiByZW5k
ZXJTdXJmYWNlTWFza1Byb2dyYW0oKTsKLSAgICBjb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlBy
b2dyYW0qIHRpbGVyUHJvZ3JhbSgpOwotICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJv
Z3JhbVN3aXp6bGUqIHRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKLSAgICBjb25zdCBMYXllclRpbGVy
Q2hyb21pdW06OlByb2dyYW1BQSogdGlsZXJQcm9ncmFtQUEoKTsKLSAgICBjb25zdCBMYXllclRp
bGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlQUEqIHRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpOwor
ICAgIGNvbnN0IENDTGF5ZXJUaWxlcjo6UHJvZ3JhbSogdGlsZXJQcm9ncmFtKCk7CisgICAgY29u
c3QgQ0NMYXllclRpbGVyOjpQcm9ncmFtU3dpenpsZSogdGlsZXJQcm9ncmFtU3dpenpsZSgpOwor
ICAgIGNvbnN0IENDTGF5ZXJUaWxlcjo6UHJvZ3JhbUFBKiB0aWxlclByb2dyYW1BQSgpOworICAg
IGNvbnN0IENDTGF5ZXJUaWxlcjo6UHJvZ3JhbVN3aXp6bGVBQSogdGlsZXJQcm9ncmFtU3dpenps
ZUFBKCk7CiAgICAgY29uc3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVy
UHJvZ3JhbSgpOwogICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwbHVnaW5M
YXllclByb2dyYW0oKTsKICAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbSog
dmlkZW9MYXllclJHQkFQcm9ncmFtKCk7CkBAIC0yMTYsNyArMjE2LDggQEAgcHJpdmF0ZToKIAog
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKICAgICBPd25QdHI8TGF5ZXJU
ZXh0dXJlVXBkYXRlcj4gbV9yb290TGF5ZXJUZXh0dXJlVXBkYXRlcjsKLSAgICBPd25QdHI8TGF5
ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsKKyAgICBPd25QdHI8TGF5
ZXJUaWxlclVwZGF0ZXI+IG1fcm9vdExheWVyQ29udGVudFRpbGVyVXBkYXRlcjsKKyAgICBPd25Q
dHI8Q0NMYXllclRpbGVyPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsKIAogICAgIGJvb2wgbV9o
YXJkd2FyZUNvbXBvc2l0aW5nOwogICAgIGJvb2wgbV9hY2NlbGVyYXRlRHJhd2luZzsKQEAgLTIz
NywxMCArMjM4LDEwIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEdlb21ldHJ5QmluZGluZz4gbV9z
aGFyZWRHZW9tZXRyeTsKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbT4g
bV9ib3JkZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5OjpQcm9ncmFtPiBt
X2hlYWRzVXBEaXNwbGF5UHJvZ3JhbTsKLSAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtOjpQ
cm9ncmFtPiBtX3RpbGVyUHJvZ3JhbTsKLSAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtOjpQ
cm9ncmFtU3dpenpsZT4gbV90aWxlclByb2dyYW1Td2l6emxlOwotICAgIE93blB0cjxMYXllclRp
bGVyQ2hyb21pdW06OlByb2dyYW1BQT4gbV90aWxlclByb2dyYW1BQTsKLSAgICBPd25QdHI8TGF5
ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZUFBPiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVB
QTsKKyAgICBPd25QdHI8Q0NMYXllclRpbGVyOjpQcm9ncmFtPiBtX3RpbGVyUHJvZ3JhbTsKKyAg
ICBPd25QdHI8Q0NMYXllclRpbGVyOjpQcm9ncmFtU3dpenpsZT4gbV90aWxlclByb2dyYW1Td2l6
emxlOworICAgIE93blB0cjxDQ0xheWVyVGlsZXI6OlByb2dyYW1BQT4gbV90aWxlclByb2dyYW1B
QTsKKyAgICBPd25QdHI8Q0NMYXllclRpbGVyOjpQcm9ncmFtU3dpenpsZUFBPiBtX3RpbGVyUHJv
Z3JhbVN3aXp6bGVBQTsKICAgICBPd25QdHI8Q0NDYW52YXNMYXllckltcGw6OlByb2dyYW0+IG1f
Y2FudmFzTGF5ZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3Jh
bT4gbV9wbHVnaW5MYXllclByb2dyYW07CiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFz
a1Byb2dyYW0+IG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJD
aHJvbWl1bS5jcHAKaW5kZXggNTczODA3MTg0NmNmNGQzNTdkMTI4ZTM1ZTY1NTkyMDhjMTdmNzhj
Ny4uMGYwMTE3OTcyNGVkYTBlNWMwZWNkN2Y3ZDEzNzJhZTY3NjZjNjg1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiRmxvYXRR
dWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJMYXllclRleHR1cmUuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Db2xvci5oIgpAQCAtNDYsMjEgKzQ1LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB0eXBlZGVmIEZsb2F0UG9pbnQzRCBFZGdlOwogCi1QYXNzT3duUHRyPExheWVyVGls
ZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxP
cHRpb24gYm9yZGVyKQotewotICAgIGlmICghbGF5ZXJSZW5kZXJlciB8fCB0aWxlU2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBMYXllclRpbGVyQ2hyb21pdW0obGF5ZXJSZW5kZXJlciwgdGlsZVNpemUsIGJvcmRlcikpOwot
fQotCi1MYXllclRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bShMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJU
ZXhlbE9wdGlvbiBib3JkZXIpCi0gICAgOiBtX3RleHR1cmVGb3JtYXQoUGxhdGZvcm1Db2xvcjo6
YmVzdFRleHR1cmVGb3JtYXQobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpKSkKLSAgICAsIG1fc2tp
cHNEcmF3KGZhbHNlKQotICAgICwgbV90ZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6SW52YWxpZE9yaWVudGF0aW9uKQotICAgICwgbV9zYW1wbGVkVGV4ZWxGb3JtYXQoTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0SW52YWxpZCkKK0xheWVyVGlsZXJD
aHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3Jk
ZXJUZXhlbE9wdGlvbiBib3JkZXIpCisgICAgOiBtX3NraXBzRHJhdyhmYWxzZSkKICAgICAsIG1f
dGlsaW5nRGF0YShtYXgodGlsZVNpemUud2lkdGgoKSwgdGlsZVNpemUuaGVpZ2h0KCkpLCAwLCAw
LCBib3JkZXIgPT0gSGFzQm9yZGVyVGV4ZWxzKQotICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVy
UmVuZGVyZXIpCiB7CiAgICAgc2V0VGlsZVNpemUodGlsZVNpemUpOwogfQpAQCAtNzAsMTIgKzU3
LDYgQEAgTGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxlckNocm9taXVtKCkKICAgICByZXNl
dCgpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRCogTGF5ZXJUaWxlckNocm9taXVtOjpsYXllclJl
bmRlcmVyQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7Ci0g
ICAgcmV0dXJuIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOwotfQotCiB2b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAo
bV90aWxlU2l6ZSA9PSBzaXplKQpAQCAtODcsNjIgKzY4LDEwIEBAIHZvaWQgTGF5ZXJUaWxlckNo
cm9taXVtOjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIG1fdGlsaW5nRGF0
YS5zZXRNYXhUZXh0dXJlU2l6ZShtYXgoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CiB9
CiAKLUxheWVyVGV4dHVyZSogTGF5ZXJUaWxlckNocm9taXVtOjpnZXRTaW5nbGVUZXh0dXJlKCkK
LXsKLSAgICBpZiAobV90aWxpbmdEYXRhLm51bVRpbGVzKCkgIT0gMSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBUaWxlKiB0aWxlID0gdGlsZUF0KDAsIDApOwotICAgIHJldHVybiB0aWxlID8g
dGlsZS0+dGV4dHVyZSgpIDogMDsKLX0KLQogdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0
KCkKIHsKICAgICBtX3RpbGVzLmNsZWFyKCk7Ci0gICAgbV91bnVzZWRUaWxlcy5jbGVhcigpOwog
ICAgIG1fdGlsaW5nRGF0YS5zZXRUb3RhbFNpemUoMCwgMCk7Ci0gICAgbV9wYWludFJlY3QgPSBJ
bnRSZWN0KCk7Ci0gICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwotfQotCi1MYXllclRpbGVy
Q2hyb21pdW06OlRpbGUqIExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50
IGopCi17Ci0gICAgQVNTRVJUKCF0aWxlQXQoaSwgaikpOwotCi0gICAgUmVmUHRyPFRpbGU+IHRp
bGU7Ci0gICAgaWYgKG1fdW51c2VkVGlsZXMuc2l6ZSgpID4gMCkgewotICAgICAgICB0aWxlID0g
bV91bnVzZWRUaWxlcy5sYXN0KCkucmVsZWFzZSgpOwotICAgICAgICBtX3VudXNlZFRpbGVzLnJl
bW92ZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKHRpbGUtPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRl
cmVyQ29udGV4dCgpOwotICAgICAgICBUZXh0dXJlTWFuYWdlciogbWFuYWdlciA9IGxheWVyUmVu
ZGVyZXIoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpOwotICAgICAgICB0aWxlID0gYWRvcHRS
ZWYobmV3IFRpbGUoTGF5ZXJUZXh0dXJlOjpjcmVhdGUoY29udGV4dCwgbWFuYWdlcikpKTsKLSAg
ICB9Ci0gICAgbV90aWxlcy5hZGQobWFrZV9wYWlyKGksIGopLCB0aWxlKTsKLQotICAgIHRpbGUt
Pm1vdmVUbyhpLCBqKTsKLSAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVj
dCh0aWxlLmdldCgpKTsKLQotICAgIHJldHVybiB0aWxlLmdldCgpOwotfQotCi12b2lkIExheWVy
VGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQotewotICAgIGlmICghbV90aWxlcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZl
Y3RvcjxUaWxlTWFwS2V5PiByZW1vdmVLZXlzOwotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fdGlsZXMuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgVGlsZSogdGlsZSA9IGl0ZXItPnNlY29uZC5nZXQoKTsKLSAgICAgICAgSW50UmVj
dCB0aWxlUmVjdCA9IHRpbGVDb250ZW50UmVjdCh0aWxlKTsKLSAgICAgICAgaWYgKHRpbGVSZWN0
LmludGVyc2VjdHMoY29udGVudFJlY3QpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IHJlbW92ZUtleXMuYXBwZW5kKGl0ZXItPmZpcnN0KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJlbW92ZUtleXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fdW51c2VkVGls
ZXMuYXBwZW5kKG1fdGlsZXMudGFrZShyZW1vdmVLZXlzW2ldKSk7CiB9CiAKIHZvaWQgTGF5ZXJU
aWxlckNocm9taXVtOjpjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBj
b25zdApAQCAtMTczLDEzICsxMDIsNiBAQCBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6bGF5
ZXJSZWN0VG9Db250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpIGNvbgogICAgIHJl
dHVybiBjb250ZW50UmVjdDsKIH0KIAotTGF5ZXJUaWxlckNocm9taXVtOjpUaWxlKiBMYXllclRp
bGVyQ2hyb21pdW06OnRpbGVBdChpbnQgaSwgaW50IGopIGNvbnN0Ci17Ci0gICAgVGlsZSogdGls
ZSA9IG1fdGlsZXMuZ2V0KG1ha2VfcGFpcihpLCBqKSkuZ2V0KCk7Ci0gICAgQVNTRVJUKCF0aWxl
IHx8IHRpbGUtPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgcmV0dXJuIHRpbGU7Ci19Ci0KIEludFJl
Y3QgTGF5ZXJUaWxlckNocm9taXVtOjp0aWxlQ29udGVudFJlY3QoY29uc3QgVGlsZSogdGlsZSkg
Y29uc3QKIHsKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdGlsZUxheWVyUmVjdCh0aWxlKTsK
QEAgLTE5NSw0NzAgKzExNywxMSBAQCBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUxh
eWVyUmVjdChjb25zdCBUaWxlKiB0aWxlKSBjb25zdAogICAgIHJldHVybiBsYXllclJlY3Q7CiB9
CiAKLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCkKLXsKLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tp
cHNEcmF3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBncm93TGF5ZXJUb0NvbnRhaW4oY29udGVu
dFJlY3QpOwotCi0gICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFjZSwg
YXMgdGhlIGxheWVyIGNvdWxkIGJlIHJlcG9zaXRpb25lZAotICAgIC8vIGFmdGVyIGludmFsaWRh
dGlvbi4KLSAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJl
Y3QoY29udGVudFJlY3QpOwotCi0gICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAg
ICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbSk7Ci0gICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewotICAg
ICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7Ci0gICAgICAgICAgICBU
aWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgSW50UmVjdCBib3VuZCA9IHRpbGVMYXll
clJlY3QodGlsZSk7Ci0gICAgICAgICAgICBib3VuZC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKLSAg
ICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QudW5pdGUoYm91bmQpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZUVudGlyZUxh
eWVyKCkKLXsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVzLmJlZ2lu
KCk7IGl0ZXIgIT0gbV90aWxlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVy
LT5zZWNvbmQtPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgIG1fdW51c2VkVGlsZXMuYXBwZW5k
KGl0ZXItPnNlY29uZC5yZWxlYXNlKCkpOwotICAgIH0KLSAgICBtX3RpbGVzLmNsZWFyKCk7Ci0K
LSAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwotfQotCi12b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkKLXsKLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIGNvbnRlbnRSZWN0VG9UaWxl
SW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLQotICAgIGZv
ciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAgICAgICAgVGlsZSogdGlsZSA9IHRpbGVB
dChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+dGV4dHVyZSgpLT5pc1Zh
bGlkKG1fdGlsZVNpemUsIG1fdGV4dHVyZUZvcm1hdCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVTaXplLCBt
X3RleHR1cmVGb3JtYXQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIExheWVyVGlsZXJD
aHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBMYXll
clRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcikKLXsKLSAgICBtX3NraXBzRHJhdyA9IGZh
bHNlOwotCi0gICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBtX3VwZGF0
ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJbnZh
bGlkYXRlIG9sZCB0aWxlcyB0aGF0IHdlcmUgcHJldmlvdXNseSB1c2VkIGJ1dCBhcmVuJ3QgaW4g
dXNlIHRoaXMKLSAgICAvLyBmcmFtZSBzbyB0aGF0IHRoZXkgY2FuIGdldCByZXVzZWQgZm9yIG5l
dyB0aWxlcy4KLSAgICBpbnZhbGlkYXRlVGlsZXMoY29udGVudFJlY3QpOwotICAgIGdyb3dMYXll
clRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KLSAgICBpZiAoIW51bVRpbGVzKCkpIHsKLSAgICAg
ICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gQ3JlYXRlIHRpbGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBj
b250YWluIGFsbAotICAgIC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3
bi4KLSAgICBJbnRSZWN0IGRpcnR5TGF5ZXJSZWN0OwotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b207Ci0gICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewot
ICAgICAgICAgICAgVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICgh
dGlsZSkKLSAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKLQotICAgICAg
ICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlU2l6ZSwgbV90ZXh0dXJl
Rm9ybWF0KSkKLSAgICAgICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxh
eWVyUmVjdCh0aWxlKTsKLQotICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPnJlc2Vy
dmUobV90aWxlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KSkgewotICAgICAgICAgICAgICAgIG1fc2tp
cHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXNldCgpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGlydHlMYXllclJlY3QudW5p
dGUodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBE
dWUgdG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRlbmRlZCB0byB0aWxlIGJv
dW5kYXJpZXMsIGl0Ci0gICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGluZyBtb3JlIHRpbGVzIHRo
YW4gdGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCi0gICAgLy8gdGhhdCBvcmlnaW5h
bCByZWN0IHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4gbmVjZXNzYXJ5LgotICAg
IG1fdXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0OwotCi0gICAgbV9wYWludFJlY3QgPSBsYXllclJl
Y3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKLSAgICBpZiAoZGlydHlMYXllclJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXh0dXJlVXBkYXRlci0+cHJlcGFy
ZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVTaXplLCBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4
ZWxzKCkpOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlUmVjdChMYXllclRl
eHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcikKLXsKLSAgICAvLyBQYWludGluZyBjb3VsZCBj
YXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5IGNhdXNlIHRoZSB0
aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KLSAgICBpZiAoIW1fdGlsaW5n
RGF0YS50b3RhbFNpemVYKCkgfHwgIW1fdGlsaW5nRGF0YS50b3RhbFNpemVZKCkgfHwgbV91cGRh
dGVSZWN0LmlzRW1wdHkoKSB8fCAhbnVtVGlsZXMoKSB8fCBtX3NraXBzRHJhdykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVy
Q29udGV4dCgpOwotICAgIG1fdGV4dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXItPm9y
aWVudGF0aW9uKCk7Ci0gICAgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlci0+
c2FtcGxlZFRleGVsRm9ybWF0KG1fdGV4dHVyZUZvcm1hdCk7Ci0KLSAgICBpbnQgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tOwotICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJl
Y3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8
PSBib3R0b207ICsraikgewotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsg
KytpKSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAgICAg
ICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOwot
ICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUtPmRpcnR5KCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0
byBjb3B5IGZyb20uCi0gICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxlQ29udGVu
dFJlY3QodGlsZSk7Ci0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBzb3VyY2VS
ZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChsYXllclJl
Y3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3QpKTsKLSAgICAgICAgICAgIC8v
IFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMs
IHNvCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0
ZW5kIG91dHNpZGUgb2YgaXQuCi0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3Bh
aW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIEFTU0VSVCh0aWxlLT50ZXh0dXJlKCkt
PmlzUmVzZXJ2ZWQoKSk7Ci0KLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJl
Y3RhbmdsZSB0byB1cGxvYWQgaW50by4KLSAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50
UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hv
ci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAoZGVzdFJlY3QueCgp
IDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKGRlc3RSZWN0
LnkoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgLy8gT2Zm
c2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4K
LSAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWlu
dFJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7Ci0gICAgICAgICAg
ICBpZiAocGFpbnRPZmZzZXQueCgpIDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAg
ICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0go
KTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4g
bV9wYWludFJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAg
ICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3Qu
aGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgdGlsZS0+
dGV4dHVyZSgpLT5iaW5kVGV4dHVyZSgpOwotICAgICAgICAgICAgY29uc3QgR0MzRGludCBmaWx0
ZXIgPSBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkgPyBHcmFwaGljc0NvbnRleHQzRDo6TElO
RUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Q7Ci0gICAgICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVyKSk7Ci0gICAgICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmls
dGVyKSk7Ci0gICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApKTsKLQotICAgICAgICAgICAgdGV4dHVyZVVw
ZGF0ZXItPnVwZGF0ZVRleHR1cmVSZWN0KHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVz
dFJlY3QpOwotICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwotICAgICAgICB9Ci0gICAg
fQotfQotCiB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0TGF5ZXJQb3NpdGlvbihjb25zdCBJ
bnRQb2ludCYgbGF5ZXJQb3NpdGlvbikKIHsKICAgICBtX2xheWVyUG9zaXRpb24gPSBsYXllclBv
c2l0aW9uOwogfQogCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5zZm9y
bSwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fdGlsZXMuc2l6
ZSgpIHx8IGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
VXNlIGFudGktYWxpYXNpbmcgcHJvZ3JhbXMgd2hlbiBib3JkZXIgdGV4ZWxzIGFyZSBwcmVzZXQg
YW5kIHRyYW5zZm9ybQotICAgIC8vIGlzIG5vdCBhbiBpbnRlZ2VyIHRyYW5zbGF0aW9uLgotICAg
IGJvb2wgdXNlQUEgPSAobV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpICYmICFnbG9iYWxUcmFu
c2Zvcm0uaXNJbnRlZ2VyVHJhbnNsYXRpb24oKSk7Ci0KLSAgICBzd2l0Y2ggKG1fc2FtcGxlZFRl
eGVsRm9ybWF0KSB7Ci0gICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxG
b3JtYXRSR0JBOgotICAgICAgICBpZiAodXNlQUEpCi0gICAgICAgICAgICBkcmF3VGlsZXMoY29u
dGVudFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxl
clByb2dyYW1BQSgpLCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbUFBKCktPmZyYWdtZW50
U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBsYXllclJlbmRlcmVyKCkt
PnRpbGVyUHJvZ3JhbUFBKCktPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3VGlsZXMoY29udGVudFJlY3QsIGdsb2JhbFRyYW5z
Zm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW0oKSwgLTEsIC0xKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4
ZWxGb3JtYXRCR1JBOgotICAgICAgICBpZiAodXNlQUEpCi0gICAgICAgICAgICBkcmF3VGlsZXMo
Y29udGVudFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50
aWxlclByb2dyYW1Td2l6emxlQUEoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6
emxlQUEoKS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCks
IGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCktPmZyYWdtZW50U2hhZGVy
KCkuZWRnZUxvY2F0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3VGlsZXMo
Y29udGVudFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50
aWxlclByb2dyYW1Td2l6emxlKCksIC0xLCAtMSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBMYXll
clRpbGVyQ2hyb21pdW06Omdyb3dMYXllclRvQ29udGFpbihjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKLXsKLSAgICAvLyBHcm93IHRoZSB0aWxlIGFycmF5IHRvIGNvbnRhaW4gdGhpcyBjb250
ZW50IHJlY3QuCi0gICAgSW50UmVjdCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0
KGNvbnRlbnRSZWN0KTsKLSAgICBJbnRTaXplIHJlY3RTaXplID0gSW50U2l6ZShsYXllclJlY3Qu
bWF4WCgpLCBsYXllclJlY3QubWF4WSgpKTsKLQotICAgIEludFNpemUgb2xkTGF5ZXJTaXplKG1f
dGlsaW5nRGF0YS50b3RhbFNpemVYKCksIG1fdGlsaW5nRGF0YS50b3RhbFNpemVZKCkpOwotICAg
IEludFNpemUgbmV3U2l6ZSA9IHJlY3RTaXplLmV4cGFuZGVkVG8ob2xkTGF5ZXJTaXplKTsKLSAg
ICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWln
aHQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzQ0NXKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKLXsK
LSAgICBGbG9hdFBvaW50IHYxID0gRmxvYXRQb2ludChxdWFkLnAyKCkueCgpIC0gcXVhZC5wMSgp
LngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkLnAyKCkueSgpIC0gcXVh
ZC5wMSgpLnkoKSk7Ci0gICAgRmxvYXRQb2ludCB2MiA9IEZsb2F0UG9pbnQocXVhZC5wMygpLngo
KSAtIHF1YWQucDIoKS54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5w
MygpLnkoKSAtIHF1YWQucDIoKS55KCkpOwotICAgIHJldHVybiAodjEueCgpICogdjIueSgpIC0g
djEueSgpICogdjIueCgpKSA8IDA7Ci19Ci0KLXN0YXRpYyBFZGdlIGNvbXB1dGVFZGdlKGNvbnN0
IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIHEsIGZsb2F0IHNpZ24pCi17Ci0gICAg
QVNTRVJUKHAgIT0gcSk7Ci0KLSAgICBGbG9hdFBvaW50IHRhbmdlbnQocC55KCkgLSBxLnkoKSwg
cS54KCkgLSBwLngoKSk7Ci0gICAgZmxvYXQgc2NhbGUgPSBzaWduIC8gdGFuZ2VudC5sZW5ndGgo
KTsKLSAgICBmbG9hdCBjcm9zczIgPSBwLngoKSAqIHEueSgpIC0gcS54KCkgKiBwLnkoKTsKLQot
ICAgIHJldHVybiBFZGdlKHRhbmdlbnQueCgpICogc2NhbGUsCi0gICAgICAgICAgICAgICAgdGFu
Z2VudC55KCkgKiBzY2FsZSwKLSAgICAgICAgICAgICAgICBjcm9zczIgKiBzY2FsZSk7Ci19Ci0K
LXN0YXRpYyBGbG9hdFBvaW50IGludGVyc2VjdChjb25zdCBFZGdlJiBhLCBjb25zdCBFZGdlJiBi
KQotewotICAgIHJldHVybiBGbG9hdFBvaW50KAotICAgICAgICAoYS55KCkgKiBiLnooKSAtIGIu
eSgpICogYS56KCkpIC8gKGEueCgpICogYi55KCkgLSBiLngoKSAqIGEueSgpKSwKLSAgICAgICAg
KGEueCgpICogYi56KCkgLSBiLngoKSAqIGEueigpKSAvIChiLngoKSAqIGEueSgpIC0gYS54KCkg
KiBiLnkoKSkpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgTGF5ZXJUaWxlckNocm9t
aXVtOjpkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHBy
b2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9u
KQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChsYXllclJlbmRlcmVyKCktPndp
bmRvd01hdHJpeCgpICogbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCkgKiBnbG9i
YWxUcmFuc2Zvcm0pOwotCi0gICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBaIGNvbXBvbmVudC4K
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXhYWVcgPQotICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgMCwgbWF0cml4Lm0xNCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwg
MCwgbWF0cml4Lm0yNCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgMSwgbWF0cml4Lm0zNCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgMCwgbWF0cml4Lm00NCgpKTsKLQot
ICAgIC8vIERvbid0IGRyYXcgYW55IHRpbGVzIHdoZW4gbWF0cml4IGlzIG5vdCBpbnZlcnRpYmxl
LgotICAgIGlmICghbWF0cml4WFlXLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlID0gbWF0cml4WFlXLmludmVyc2UoKTsK
LQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQo
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
KCkpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLQotICAg
IC8vIE1hcCBjb250ZW50IHJlY3RhbmdsZSB0byBkZXZpY2Ugc3BhY2UuCi0gICAgRmxvYXRRdWFk
IGRldmljZVF1YWQgPSBtYXRyaXgubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJlY3QpKTsKLQot
ICAgIC8vIENvdW50ZXItY2xvY2t3aXNlPwotICAgIGZsb2F0IHNpZ24gPSBpc0NDVyhkZXZpY2VR
dWFkKSA/IC0xIDogMTsKLQotICAgIC8vIENvbXB1dGUgb3V0ZXIgZWRnZXMuCi0gICAgRWRnZSBs
ZWZ0RWRnZSA9IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDQoKSwgZGV2aWNlUXVhZC5wMSgpLCBz
aWduKTsKLSAgICBFZGdlIHJpZ2h0RWRnZSA9IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDIoKSwg
ZGV2aWNlUXVhZC5wMygpLCBzaWduKTsKLSAgICBFZGdlIHRvcEVkZ2UgPSBjb21wdXRlRWRnZShk
ZXZpY2VRdWFkLnAxKCksIGRldmljZVF1YWQucDIoKSwgc2lnbik7Ci0gICAgRWRnZSBib3R0b21F
ZGdlID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVhZC5wMygpLCBkZXZpY2VRdWFkLnA0KCksIHNpZ24p
OwotCi0gICAgaWYgKGVkZ2VMb2NhdGlvbiAhPSAtMSkgewotICAgICAgICAvLyBNb3ZlIG91dGVy
IGVkZ2VzIHRvIGVuc3VyZSB0aGF0IGFsbCBwYXJ0aWFsbHkgY292ZXJlZCBwaXhlbHMgYXJlCi0g
ICAgICAgIC8vIHByb2Nlc3NlZC4KLSAgICAgICAgbGVmdEVkZ2UubW92ZSgwLCAwLCAwLjVmKTsK
LSAgICAgICAgcmlnaHRFZGdlLm1vdmUoMCwgMCwgMC41Zik7Ci0gICAgICAgIHRvcEVkZ2UubW92
ZSgwLCAwLCAwLjVmKTsKLSAgICAgICAgYm90dG9tRWRnZS5tb3ZlKDAsIDAsIDAuNWYpOwotCi0g
ICAgICAgIGZsb2F0IGVkZ2VbMTJdOwotICAgICAgICBlZGdlWzBdID0gbGVmdEVkZ2UueCgpOwot
ICAgICAgICBlZGdlWzFdID0gbGVmdEVkZ2UueSgpOwotICAgICAgICBlZGdlWzJdID0gbGVmdEVk
Z2UueigpOwotICAgICAgICBlZGdlWzNdID0gdG9wRWRnZS54KCk7Ci0gICAgICAgIGVkZ2VbNF0g
PSB0b3BFZGdlLnkoKTsKLSAgICAgICAgZWRnZVs1XSA9IHRvcEVkZ2UueigpOwotICAgICAgICBl
ZGdlWzZdID0gcmlnaHRFZGdlLngoKTsKLSAgICAgICAgZWRnZVs3XSA9IHJpZ2h0RWRnZS55KCk7
Ci0gICAgICAgIGVkZ2VbOF0gPSByaWdodEVkZ2UueigpOwotICAgICAgICBlZGdlWzldID0gYm90
dG9tRWRnZS54KCk7Ci0gICAgICAgIGVkZ2VbMTBdID0gYm90dG9tRWRnZS55KCk7Ci0gICAgICAg
IGVkZ2VbMTFdID0gYm90dG9tRWRnZS56KCk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtM2Z2KGVkZ2VMb2NhdGlvbiwgZWRnZSwgNCkpOwotICAgIH0KLQotICAgIEVkZ2Ug
cHJldkVkZ2VZID0gdG9wRWRnZTsKLQotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207
Ci0gICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOwotICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVy
UmVjdChjb250ZW50UmVjdCk7Ci0gICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsr
aikgewotICAgICAgICBFZGdlIHByZXZFZGdlWCA9IGxlZnRFZGdlOwotCi0gICAgICAgIEVkZ2Ug
ZWRnZVkgPSBib3R0b21FZGdlOwotICAgICAgICBpZiAoaiA8IChtX3RpbGluZ0RhdGEubnVtVGls
ZXNZKCkgLSAxKSkgewotICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHVuaW9uUmVjdCht
X3RpbGluZ0RhdGEudGlsZUJvdW5kcyhtX3RpbGluZ0RhdGEudGlsZUluZGV4KDAsIGopKSwgbV90
aWxpbmdEYXRhLnRpbGVCb3VuZHMobV90aWxpbmdEYXRhLnRpbGVJbmRleChtX3RpbGluZ0RhdGEu
bnVtVGlsZXNYKCkgLSAxLCBqKSkpOwotICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGxh
eWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgcm93cy4KLSAgICAgICAgICAg
IGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIHRpbGVSZWN0Lm1vdmUobV9sYXllclBvc2l0aW9uLngoKSwgbV9sYXllclBvc2l0
aW9uLnkoKSk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0
aWxlUmVjdC5tYXhZKCkpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBwMih0aWxlUmVjdC54KCks
IHRpbGVSZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNl
IHNwYWNlLgotICAgICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEpOwotICAgICAgICAg
ICAgcDIgPSBtYXRyaXgubWFwUG9pbnQocDIpOwotCi0gICAgICAgICAgICAvLyBDb21wdXRlIGhv
cml6b250YWwgZWRnZS4KLSAgICAgICAgICAgIGVkZ2VZID0gY29tcHV0ZUVkZ2UocDEsIHAyLCBz
aWduKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0
OyArK2kpIHsKLSAgICAgICAgICAgIFRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7Ci0gICAgICAg
ICAgICBpZiAoIXRpbGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IEFTU0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7Ci0KLSAgICAgICAgICAgIHRp
bGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUoKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgdXNl
IHRpbGVDb250ZW50UmVjdCBoZXJlLCBhcyB0aGF0IGNvbnRhaW5zIHRoZSBmdWxsCi0gICAgICAg
ICAgICAvLyByZWN0IHdpdGggYm9yZGVyIHRleGVscyB3aGljaCBzaG91bGRuJ3QgYmUgZHJhd24u
Ci0gICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxpbmdEYXRhLnRpbGVCb3VuZHMo
bV90aWxpbmdEYXRhLnRpbGVJbmRleCh0aWxlLT5pKCksIHRpbGUtPmooKSkpOwotICAgICAgICAg
ICAgSW50UmVjdCBkaXNwbGF5UmVjdCA9IHRpbGVSZWN0OwotICAgICAgICAgICAgdGlsZVJlY3Qu
aW50ZXJzZWN0KGxheWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgaG93
IHRoZSB0b3AgbGVmdCBoYXMgbW92ZWQsIHNvIHRoZSB0ZXh0dXJlIGNhbiBiZQotICAgICAgICAg
ICAgLy8gb2Zmc2V0IHRoZSBzYW1lIGFtb3VudC4KLSAgICAgICAgICAgIEludFNpemUgZGlzcGxh
eU9mZnNldCA9IHRpbGVSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBkaXNwbGF5UmVjdC5taW5YTWlu
WUNvcm5lcigpOwotCi0gICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHRpbGVzLgotICAgICAgICAg
ICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgdGlsZVJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9z
aXRpb24ueSgpKTsKLQotICAgICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7
Ci0gICAgICAgICAgICAvLyBDbGFtcCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lkIHNhbXBs
aW5nIG91dHNpZGUgdGhlIGxheWVyCi0gICAgICAgICAgICAvLyBieSBkZWZsYXRpbmcgdGhlIHRp
bGUgcmVnaW9uIGhhbGYgYSB0ZXhlbCBvciBoYWxmIGEgdGV4ZWwKLSAgICAgICAgICAgIC8vIG1p
bnVzIGVwc2lsb24gZm9yIG9uZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVn
aW9uCi0gICAgICAgICAgICAvLyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1YXJlIGJ5IHRoZSB2
ZXJ0ZXggc2hhZGVyIGFuZCBtYXBwZWQKLSAgICAgICAgICAgIC8vIGJhY2sgdG8gbm9ybWFsaXpl
ZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIKLSAgICAgICAgICAg
IC8vIGFmdGVyIGJlaW5nIGNsYW1wZWQgdG8gMC0xIHJhbmdlLgotICAgICAgICAgICAgY29uc3Qg
ZmxvYXQgZXBzaWxvbiA9IDEgLyAxMDI0LjBmOwotICAgICAgICAgICAgZmxvYXQgY2xhbXBYID0g
bWluKDAuNSwgY2xhbXBSZWN0LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKLSAgICAgICAgICAg
IGZsb2F0IGNsYW1wWSA9IG1pbigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2ls
b24pOwotICAgICAgICAgICAgY2xhbXBSZWN0LmluZmxhdGVYKC1jbGFtcFgpOwotICAgICAgICAg
ICAgY2xhbXBSZWN0LmluZmxhdGVZKC1jbGFtcFkpOwotICAgICAgICAgICAgRmxvYXRTaXplIGNs
YW1wT2Zmc2V0ID0gY2xhbXBSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9hdFJlY3QodGlsZVJl
Y3QpLm1pblhNaW5ZQ29ybmVyKCk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdGV4T2Zmc2V0
ID0gbV90aWxpbmdEYXRhLnRleHR1cmVPZmZzZXQodGlsZS0+aSgpLCB0aWxlLT5qKCkpICsgY2xh
bXBPZmZzZXQgKyBGbG9hdFNpemUoZGlzcGxheU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCB0
aWxlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlU2l6ZS53aWR0aCgpKTsKLSAgICAg
ICAgICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlU2l6ZS5o
ZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBjbGFtcGluZyByZWN0YW5nbGUgdG8gdW5p
dCBzcXVhcmUuCi0gICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYID0gLWNsYW1w
UmVjdC54KCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRl
eFRyYW5zbGF0ZVkgPSAtY2xhbXBSZWN0LnkoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKLSAgICAg
ICAgICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCkgLyBjbGFtcFJl
Y3Qud2lkdGgoKTsKLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWSA9IHRpbGVSZWN0
LmhlaWdodCgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOwotCi0gICAgICAgICAgICAvLyBNYXAgdG8g
bm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzLgotICAgICAgICAgICAgZmxvYXQgZnJhZ21l
bnRUZXhUcmFuc2xhdGVYID0gdGV4T2Zmc2V0LngoKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgICAg
IGZsb2F0IGZyYWdtZW50VGV4VHJhbnNsYXRlWSA9IHRleE9mZnNldC55KCkgLyB0aWxlSGVpZ2h0
OwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVggPSBjbGFtcFJlY3Qud2lkdGgo
KSAvIHRpbGVXaWR0aDsKLSAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVZID0gY2xh
bXBSZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdodDsKLQotICAgICAgICAgICAgLy8gT3BlbkdMIGNv
b3JkaW5hdGUgc3lzdGVtIGlzIGJvdHRvbS11cC4KLSAgICAgICAgICAgIC8vIElmIHRpbGUgdGV4
dHVyZSBpcyB0b3AtZG93biwgd2UgbmVlZCB0byBmbGlwIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVz
LgotICAgICAgICAgICAgaWYgKG1fdGV4dHVyZU9yaWVudGF0aW9uID09IExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikgewotICAgICAgICAgICAgICAgIGZyYWdtZW50VGV4
VHJhbnNsYXRlWSA9IDEuMCAtIGZyYWdtZW50VGV4VHJhbnNsYXRlWTsKLSAgICAgICAgICAgICAg
ICBmcmFnbWVudFRleFNjYWxlWSAqPSAtMS4wOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBFZGdlIGVkZ2VYID0gcmlnaHRFZGdlOwotICAgICAgICAgICAgaWYgKGkgPCAobV90aWxpbmdE
YXRhLm51bVRpbGVzWCgpIC0gMSkpIHsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRp
bGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QueSgpKTsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50
IHAyKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKLQotICAgICAgICAgICAgICAg
IC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNlLgotICAgICAgICAgICAgICAgIHAxID0gbWF0
cml4Lm1hcFBvaW50KHAxKTsKLSAgICAgICAgICAgICAgICBwMiA9IG1hdHJpeC5tYXBQb2ludChw
Mik7Ci0KLSAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHZlcnRpY2FsIGVkZ2UuCi0gICAgICAg
ICAgICAgICAgZWRnZVggPSBjb21wdXRlRWRnZShwMSwgcDIsIHNpZ24pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyBDcmVhdGUgZGV2aWNlIHNwYWNlIHF1YWQuCi0gICAgICAgICAg
ICBGbG9hdFF1YWQgZGV2aWNlUXVhZChpbnRlcnNlY3QoZWRnZVksIHByZXZFZGdlWCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QocHJldkVkZ2VYLCBwcmV2RWRn
ZVkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0KHByZXZFZGdl
WSwgZWRnZVgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0KGVk
Z2VYLCBlZGdlWSkpOwotCi0gICAgICAgICAgICAvLyBNYXAgcXVhZCB0byBsYXllciBzcGFjZS4K
LSAgICAgICAgICAgIEZsb2F0UXVhZCBxdWFkID0gaW52ZXJzZS5tYXBRdWFkKGRldmljZVF1YWQp
OwotCi0gICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gdGlsZVJlY3QuCi0gICAgICAgICAgICBx
dWFkLnNjYWxlKDEuMGYgLyB0aWxlUmVjdC53aWR0aCgpLCAxLjBmIC8gdGlsZVJlY3QuaGVpZ2h0
KCkpOwotCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9PSAt
MSkgewotICAgICAgICAgICAgICAgIC8vIE1vdmUgZnJhZ21lbnQgc2hhZGVyIHRyYW5zZm9ybSB0
byB2ZXJ0ZXggc2hhZGVyLiBXZSBjYW4gZG8KLSAgICAgICAgICAgICAgICAvLyB0aGlzIHdoaWxl
IHN0aWxsIHByb2R1Y2luZyBjb3JyZWN0IHJlc3VsdHMgYXMKLSAgICAgICAgICAgICAgICAvLyBm
cmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uIHNob3VsZCBhbHdheXMgYmUgbm9uLW5lZ2F0aXZl
Ci0gICAgICAgICAgICAgICAgLy8gd2hlbiB0aWxlcyBhcmUgdHJhbnNmb3JtZWQgaW4gYSB3YXkg
dGhhdCBjb3VsZCByZXN1bHQgaW4KLSAgICAgICAgICAgICAgICAvLyBzYW1wbGluZyBvdXRzaWRl
IHRoZSBsYXllci4KLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVggKj0gZnJhZ21lbnRU
ZXhTY2FsZVg7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4U2NhbGVZICo9IGZyYWdtZW50VGV4
U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKj0gZnJhZ21lbnRU
ZXhTY2FsZVg7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWSAqPSBmcmFnbWVu
dFRleFNjYWxlWTsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVYICs9IGZyYWdt
ZW50VGV4VHJhbnNsYXRlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9
IGZyYWdtZW50VGV4VHJhbnNsYXRlWTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYoZnJhZ21lbnRUZXhUcmFuc2Zvcm1M
b2NhdGlvbiwgZnJhZ21lbnRUZXhUcmFuc2xhdGVYLCBmcmFnbWVudFRleFRyYW5zbGF0ZVksIGZy
YWdtZW50VGV4U2NhbGVYLCBmcmFnbWVudFRleFNjYWxlWSkpOwotCi0gICAgICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnZlcnRl
eFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIHZlcnRleFRleFRyYW5zbGF0ZVgsIHZlcnRleFRleFRy
YW5zbGF0ZVksIHZlcnRleFRleFNjYWxlWCwgdmVydGV4VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAg
ICAgIGZsb2F0IHBvaW50WzhdOwotICAgICAgICAgICAgcG9pbnRbMF0gPSBxdWFkLnAxKCkueCgp
OwotICAgICAgICAgICAgcG9pbnRbMV0gPSBxdWFkLnAxKCkueSgpOwotICAgICAgICAgICAgcG9p
bnRbMl0gPSBxdWFkLnAyKCkueCgpOwotICAgICAgICAgICAgcG9pbnRbM10gPSBxdWFkLnAyKCku
eSgpOwotICAgICAgICAgICAgcG9pbnRbNF0gPSBxdWFkLnAzKCkueCgpOwotICAgICAgICAgICAg
cG9pbnRbNV0gPSBxdWFkLnAzKCkueSgpOwotICAgICAgICAgICAgcG9pbnRbNl0gPSBxdWFkLnA0
KCkueCgpOwotICAgICAgICAgICAgcG9pbnRbN10gPSBxdWFkLnA0KCkueSgpOwotICAgICAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0yZnYocHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkucG9pbnRMb2NhdGlvbigpLCBwb2ludCwgNCkpOwotCi0gICAgICAgICAgICBMYXllckNocm9t
aXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlv
bk1hdHJpeCgpLCBnbG9iYWxUcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCBvcGFj
aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9j
YXRpb24oKSk7Ci0KLSAgICAgICAgICAgIHByZXZFZGdlWCA9IGVkZ2VYOwotICAgICAgICAgICAg
Ly8gUmV2ZXJzZSBkaXJlY3Rpb24uCi0gICAgICAgICAgICBwcmV2RWRnZVguc2NhbGUoLTEsIC0x
LCAtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcmV2RWRnZVkgPSBlZGdlWTsKLSAgICAgICAg
Ly8gUmV2ZXJzZSBkaXJlY3Rpb24uCi0gICAgICAgIHByZXZFZGdlWS5zY2FsZSgtMSwgLTEsIC0x
KTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKaW5kZXgg
YjQ1NWJhMjQ3MmQwNmJiNjkzNTg5ZGEwY2QyNGYzNzAxYTM2ZDYxOC4uZmMwMDExZGQwOTY2MTkz
NmJhNGJlM2Y0YzJmMjg3YTk0NzZkN2IwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgK
QEAgLTI5LDM4ICsyOSwyMCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
Ci0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgot
I2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiVGlsaW5nRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07Ci1jbGFzcyBMYXll
clRleHR1cmVVcGRhdGVyOwotCiBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW0gewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKExheWVyVGlsZXJDaHJvbWl1bSk7CiBwdWJsaWM6CiAgICAgZW51bSBC
b3JkZXJUZXhlbE9wdGlvbiB7IEhhc0JvcmRlclRleGVscywgTm9Cb3JkZXJUZXhlbHMgfTsKIAot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gY3JlYXRlKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlv
bik7Ci0KLSAgICB+TGF5ZXJUaWxlckNocm9taXVtKCk7Ci0KLSAgICAvLyBTZXQgaW52YWxpZGF0
aW9ucyB0byBiZSBwb3RlbnRpYWxseSByZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgotICAgIHZv
aWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotICAgIHZvaWQg
aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7Ci0KLSAgICAvLyBQcmVwYXJlIGRhdGEgbmVlZGVkIHRv
IHVwZGF0ZSB0ZXh0dXJlcyB0aGF0IGluc3RlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KLSAgICB2
b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgTGF5ZXJUZXh0
dXJlVXBkYXRlciopOwotICAgIC8vIFVwZGF0ZSBpbnZhbGlkIHRleHR1cmVzIHRoYXQgaW50ZXJz
ZWN0IHdpdGggY29udGVudFJlY3QgcHJvdmlkZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuCi0gICAg
dm9pZCB1cGRhdGVSZWN0KExheWVyVGV4dHVyZVVwZGF0ZXIqKTsKLSAgICAvLyBEcmF3IGFsbCB0
aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBjb250ZW50IHJlY3QuCi0gICAgdm9pZCBkcmF3
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0IG9wYWNpdHkpOworICAgIHZpcnR1YWwgfkxheWVyVGlsZXJDaHJvbWl1bSgpOwogCiAg
ICAgaW50IG51bVRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxpbmdEYXRhLm51bVRpbGVzKCk7
IH0KIApAQCAtNzEsNjAgKzUzLDI2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2tpcHNEcmF3KCkg
Y29uc3QgeyByZXR1cm4gbV9za2lwc0RyYXc7IH0KIAotICAgIC8vIFJlc2VydmVzIGFsbCBleGlz
dGluZyBhbmQgdmFsaWQgdGlsZSB0ZXh0dXJlcyB0byBwcm90ZWN0IHRoZW0gZnJvbSBiZWluZwot
ICAgIC8vIHJlY3ljbGVkIGJ5IHRoZSB0ZXh0dXJlIG1hbmFnZXIuCi0gICAgdm9pZCBwcm90ZWN0
VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLQotICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxw
aGE+IFByb2dyYW07Ci0gICAgLy8gU2hhZGVyIHByb2dyYW0gdGhhdCBzd2FwcyByZWQgYW5kIGJs
dWUgY29tcG9uZW50cyBvZiB0ZXh0dXJlLgotICAgIC8vIFVzZWQgd2hlbiB0ZXh0dXJlIGZvcm1h
dCBkb2VzIG5vdCBtYXRjaCBuYXRpdmUgY29sb3IgZm9ybWF0LgotICAgIHR5cGVkZWYgUHJvZ3Jh
bUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dpenpsZUFs
cGhhPiBQcm9ncmFtU3dpenpsZTsKLQotICAgIC8vIFNoYWRlciBwcm9ncmFtIHRoYXQgcHJvZHVj
ZXMgYW50aS1hbGlhc2VkIGxheWVyIGVkZ2VzLgotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8
VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFBQT4gUHJvZ3JhbUFB
OwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRT
aGFkZXJSR0JBVGV4U3dpenpsZUFscGhhQUE+IFByb2dyYW1Td2l6emxlQUE7Ci0KLSAgICAvLyBJ
ZiB0aGlzIHRpbGVyIGhhcyBleGFjdGx5IG9uZSB0aWxlLCByZXR1cm4gaXRzIHRleHR1cmUuIE90
aGVyd2lzZSwgbnVsbC4KLSAgICBMYXllclRleHR1cmUqIGdldFNpbmdsZVRleHR1cmUoKTsKLQot
cHJpdmF0ZToKLSAgICBMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiwg
Y29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uKTsKK3Byb3RlY3RlZDoK
KyAgICBMYXllclRpbGVyQ2hyb21pdW0oY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRl
eGVsT3B0aW9uKTsKIAogICAgIGNsYXNzIFRpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaWxlPiB7
CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGUpOwogICAgIHB1YmxpYzoKLSAgICAg
ICAgZXhwbGljaXQgVGlsZShQYXNzT3duUHRyPExheWVyVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRl
eCksIG1faSgtMSksIG1faigtMSkgeyB9Ci0KLSAgICAgICAgTGF5ZXJUZXh0dXJlKiB0ZXh0dXJl
KCkgeyByZXR1cm4gbV90ZXguZ2V0KCk7IH0KLQotICAgICAgICBib29sIGRpcnR5KCkgY29uc3Qg
eyByZXR1cm4gIW1fZGlydHlMYXllclJlY3QuaXNFbXB0eSgpOyB9Ci0gICAgICAgIHZvaWQgY2xl
YXJEaXJ0eSgpIHsgbV9kaXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQorICAgICAgICBleHBs
aWNpdCBUaWxlKCkgOiBtX2koLTEpLCBtX2ooLTEpIHsgfQogCiAgICAgICAgIGludCBpKCkgY29u
c3QgeyByZXR1cm4gbV9pOyB9CiAgICAgICAgIGludCBqKCkgY29uc3QgeyByZXR1cm4gbV9qOyB9
CiAgICAgICAgIHZvaWQgbW92ZVRvKGludCBpLCBpbnQgaikgeyBtX2kgPSBpOyBtX2ogPSBqOyB9
Ci0KLSAgICAgICAgLy8gTGF5ZXItc3BhY2UgZGlydHkgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8g
YmUgcmVwYWludGVkLgotICAgICAgICBJbnRSZWN0IG1fZGlydHlMYXllclJlY3Q7CiAgICAgcHJp
dmF0ZToKLSAgICAgICAgT3duUHRyPExheWVyVGV4dHVyZT4gbV90ZXg7CiAgICAgICAgIGludCBt
X2k7CiAgICAgICAgIGludCBtX2o7CiAgICAgfTsKIAotICAgIC8vIERyYXcgYWxsIHRpbGVzIHRo
YXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0g
ICAgdm9pZCBkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZy
YWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24pOwotCiAgICAgLy8g
R3JvdyBsYXllciBzaXplIHRvIGNvbnRhaW4gdGhpcyByZWN0YW5nbGUuCiAgICAgdm9pZCBncm93
TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCi0gICAgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclJl
bmRlcmVyOyB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGxheWVyUmVuZGVyZXJDb250ZXh0KCkg
Y29uc3Q7Ci0gICAgVGlsZSogY3JlYXRlVGlsZShpbnQgaSwgaW50IGopOwotICAgIC8vIEludmFs
aWRhdGUgYW55IHRpbGVzIHdoaWNoIGRvIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVudFJl
Y3QKLSAgICB2b2lkIGludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7
Ci0gICAgdm9pZCByZXNldCgpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOwogICAgIHZvaWQg
Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQg
JmxlZnQsIGludCAmdG9wLCBpbnQgJnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29uc3Q7CiAgICAgSW50
UmVjdCBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBj
b25zdDsKICAgICBJbnRSZWN0IGxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYg
bGF5ZXJSZWN0KSBjb25zdDsKQEAgLTEzMyw4ICs4MSw2IEBAIHByaXZhdGU6CiAgICAgSW50UmVj
dCB0aWxlQ29udGVudFJlY3QoY29uc3QgVGlsZSopIGNvbnN0OwogICAgIEludFJlY3QgdGlsZUxh
eWVyUmVjdChjb25zdCBUaWxlKikgY29uc3Q7CiAKLSAgICBHQzNEZW51bSBtX3RleHR1cmVGb3Jt
YXQ7Ci0KICAgICBJbnRTaXplIG1fdGlsZVNpemU7CiAgICAgSW50UG9pbnQgbV9sYXllclBvc2l0
aW9uOwogCkBAIC0xNTUsMTggKzEwMSw4IEBAIHByaXZhdGU6CiAgICAgLy8gZG9lc24ndCBlYXNp
bHkgc3VwcG9ydCBPd25QdHIgYXMgYSB2YWx1ZS4KICAgICB0eXBlZGVmIEhhc2hNYXA8VGlsZU1h
cEtleSwgUmVmUHRyPFRpbGU+LCBEZWZhdWx0SGFzaDxUaWxlTWFwS2V5Pjo6SGFzaCwgVGlsZU1h
cEtleVRyYWl0cz4gVGlsZU1hcDsKICAgICBUaWxlTWFwIG1fdGlsZXM7Ci0gICAgLy8gVGlnaHRs
eSBwYWNrZWQgc2V0IG9mIHVudXNlZCB0aWxlcy4KLSAgICBWZWN0b3I8UmVmUHRyPFRpbGU+ID4g
bV91bnVzZWRUaWxlczsKLQotICAgIC8vIFN0YXRlIGhlbGQgYmV0d2VlbiB1cGRhdGUgYW5kIHVw
bG9hZC4KLSAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OwotICAgIEludFJlY3QgbV91cGRhdGVSZWN0
OwogCi0gICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50
YXRpb247Ci0gICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2Ft
cGxlZFRleGVsRm9ybWF0OwogICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRhOwotCi0gICAgTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyVXBk
YXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRpbGVyVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA1MjQ0MzY1MDBiMWFkZDcyMWZmMWU0Mzlh
YTRkYzg2NTA5OTlhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJVcGRhdGVyLmNwcApAQCAtMCwwICsxLDE5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUaWxlclVwZGF0ZXIuaCIKKworI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxMYXll
clRpbGVyVXBkYXRlcj4gTGF5ZXJUaWxlclVwZGF0ZXI6OmNyZWF0ZShjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQoreworICAgIGlmICh0aWxlU2l6ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBMYXllclRpbGVyVXBkYXRlcih0aWxlU2l6ZSwgYm9yZGVyKSk7Cit9CisKK0xheWVyVGls
ZXJVcGRhdGVyOjpMYXllclRpbGVyVXBkYXRlcihjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9y
ZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQorICAgIDogTGF5ZXJUaWxlckNocm9taXVtKHRpbGVTaXpl
LCBib3JkZXIpCit7Cit9CisKK0xheWVyVGlsZXJVcGRhdGVyOjp+TGF5ZXJUaWxlclVwZGF0ZXIo
KQoreworICAgIHJlc2V0KCk7Cit9CisKK0xheWVyVGlsZXJVcGRhdGVyOjpVcGRhdGFibGVUaWxl
KiBMYXllclRpbGVyVXBkYXRlcjo6dGlsZUF0KGludCBpLCBpbnQgaikgY29uc3QKK3sKKyAgICBU
aWxlKiB0aWxlID0gbV90aWxlcy5nZXQobWFrZV9wYWlyKGksIGopKS5nZXQoKTsKKyAgICBBU1NF
UlQoIXRpbGUgfHwgdGlsZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VXBkYXRhYmxlVGlsZSo+KHRpbGUpOworfQorCit2b2lkIExheWVyVGlsZXJVcGRhdGVyOjpy
ZXNldCgpCit7CisgICAgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNldCgpOworICAgIG1fcGFpbnRS
ZWN0ID0gSW50UmVjdCgpOworICAgIG1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKK30KKworTGF5
ZXJUaWxlclVwZGF0ZXI6OlVwZGF0YWJsZVRpbGUqIExheWVyVGlsZXJVcGRhdGVyOjpjcmVhdGVU
aWxlKGludCBpLCBpbnQgaikKK3sKKyAgICBBU1NFUlQoIXRpbGVBdChpLCBqKSk7CisgICAgUmVm
UHRyPFVwZGF0YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihuZXcgVXBkYXRhYmxlVGlsZSgpKTsK
KyAgICBtX3RpbGVzLmFkZChtYWtlX3BhaXIoaSwgaiksIHRpbGUpOworICAgIHRpbGUtPm1vdmVU
byhpLCBqKTsKKyAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVjdCh0aWxl
LmdldCgpKTsKKyAgICByZXR1cm4gdGlsZS5nZXQoKTsKK30KKwordm9pZCBMYXllclRpbGVyVXBk
YXRlcjo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAg
IGlmICghbV90aWxlcy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxUaWxl
TWFwS2V5PiByZW1vdmVLZXlzOworICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
dGlsZXMuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAg
VGlsZSogdGlsZSA9IGl0ZXItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVj
dCA9IHRpbGVDb250ZW50UmVjdCh0aWxlKTsKKyAgICAgICAgaWYgKHRpbGVSZWN0LmludGVyc2Vj
dHMoY29udGVudFJlY3QpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlbW92ZUtl
eXMuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlbW92ZUtleXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdGlsZXMucmVtb3ZlKHJlbW92
ZUtleXNbaV0pOworfQorCit2b2lkIExheWVyVGlsZXJVcGRhdGVyOjppbnZhbGlkYXRlUmVjdChj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0
eSgpIHx8IG1fc2tpcHNEcmF3KQorICAgICAgICByZXR1cm47CisKKyAgICBncm93TGF5ZXJUb0Nv
bnRhaW4oY29udGVudFJlY3QpOworCisgICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBs
YXllciBzcGFjZSwgYXMgdGhlIGxheWVyIGNvdWxkIGJlIHJlcG9zaXRpb25lZAorICAgIC8vIGFm
dGVyIGludmFsaWRhdGlvbi4KKyAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRS
ZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOworCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbTsKKyAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207
ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7Cisg
ICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAg
ICAgaWYgKCF0aWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgSW50
UmVjdCBib3VuZCA9IHRpbGVMYXllclJlY3QodGlsZSk7CisgICAgICAgICAgICBib3VuZC5pbnRl
cnNlY3QobGF5ZXJSZWN0KTsKKyAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QudW5p
dGUoYm91bmQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyVGlsZXJVcGRhdGVy
OjppbnZhbGlkYXRlRW50aXJlTGF5ZXIoKQoreworICAgIG1fdGlsZXMuY2xlYXIoKTsKKyAgICBt
X3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAsIDApOworfQorCit2b2lkIExheWVyVGlsZXJVcGRh
dGVyOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIExheWVyVGV4
dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKQoreworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7
CisKKyAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fdXBkYXRlUmVj
dCA9IEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEludmFsaWRh
dGUgb2xkIHRpbGVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHVzZWQgYnV0IGFyZW4ndCBpbiB1c2Ug
dGhpcworICAgIC8vIGZyYW1lIHNvIHRoYXQgdGhleSBjYW4gZ2V0IHJldXNlZCBmb3IgbmV3IHRp
bGVzLgorICAgIGludmFsaWRhdGVUaWxlcyhjb250ZW50UmVjdCk7CisgICAgZ3Jvd0xheWVyVG9D
b250YWluKGNvbnRlbnRSZWN0KTsKKworICAgIGlmICghbnVtVGlsZXMoKSkgeworICAgICAgICBt
X3VwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBDcmVhdGUgdGlsZXMgYXMgbmVlZGVkLCBleHBhbmRpbmcgYSBkaXJ0eSByZWN0IHRvIGNvbnRh
aW4gYWxsCisgICAgLy8gdGhlIGRpcnR5IHJlZ2lvbnMgY3VycmVudGx5IGJlaW5nIGRyYXduLgor
ICAgIEludFJlY3QgZGlydHlMYXllclJlY3Q7CisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJv
dHRvbTsKKyAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsr
aikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAg
ICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAg
aWYgKCF0aWxlKQorICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOworCisg
ICAgLy8gRklYTUUgZW5uZSAtIHRoaXMgbmVlZHMgdG8gYmUgcHVzaGVkIHRvIHRoZSBDQyBzaWRl
IG9mIHRoaW5ncworICAgIC8vIHRvIHBhc3MgYmFjayBpbnZhbGlkYXRpb25zIHRvIHRoaXMgdmVy
c2lvbgorI2lmIDAKKyAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1f
dGlsZVNpemUsIG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0
eUxheWVyUmVjdCA9IHRpbGVMYXllclJlY3QodGlsZSk7CisKKyAgICAgICAgICAgIGlmICghdGls
ZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZVNpemUsIG1fdGV4dHVyZUZvcm1hdCkpIHsKKyAg
ICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVzZXQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisjZW5kaWYKKworICAg
ICAgICAgICAgZGlydHlMYXllclJlY3QudW5pdGUodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCk7Cisg
ICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBEdWUgdG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRlbmRlZCB0byB0aWxl
IGJvdW5kYXJpZXMsIGl0CisgICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGluZyBtb3JlIHRpbGVz
IHRoYW4gdGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCisgICAgLy8gdGhhdCBvcmln
aW5hbCByZWN0IHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4gbmVjZXNzYXJ5Lgor
ICAgIG1fdXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0OworCisgICAgbV9wYWludFJlY3QgPSBsYXll
clJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKKyAgICBpZiAoZGlydHlMYXllclJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogZW5uZSAtIHRo
ZSB1cGRhdGVyIHNob3VsZCBtYXliZSBnZXQgdGhlIHVwZGF0ZSByZWN0IGhlcmUKKyAgICB0ZXh0
dXJlVXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVTaXplLCBtX3Rp
bGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyVXBkYXRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlclVw
ZGF0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45NDY0YTM1MmMzMDdlZTc4Y2Q2YWUwYzZjNDJmYTUxYWFkNTJj
OTM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUaWxlclVwZGF0ZXIuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisj
aWZuZGVmIExheWVyVGlsZXJVcGRhdGVyX2gKKyNkZWZpbmUgTGF5ZXJUaWxlclVwZGF0ZXJfaAor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUaWxl
ckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOworCitjbGFzcyBMYXllclRpbGVy
VXBkYXRlciA6IHB1YmxpYyBMYXllclRpbGVyQ2hyb21pdW0geworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKExheWVyVGlsZXJVcGRhdGVyKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxMYXllclRpbGVyVXBkYXRlcj4gY3JlYXRlKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3Jk
ZXJUZXhlbE9wdGlvbik7CisKKyAgICB+TGF5ZXJUaWxlclVwZGF0ZXIoKTsKKworICAgIHZpcnR1
YWwgdm9pZCByZXNldCgpOworCisgICAgLy8gU2V0IGludmFsaWRhdGlvbnMgdG8gYmUgcG90ZW50
aWFsbHkgcmVwYWludGVkIGR1cmluZyB1cGRhdGUoKS4KKyAgICB2b2lkIGludmFsaWRhdGVSZWN0
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICB2b2lkIGludmFsaWRhdGVFbnRpcmVM
YXllcigpOworCisgICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMg
dGhhdCBpbnN0ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRh
dGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIExheWVyVGV4dHVyZVVwZGF0ZXIqKTsKKwor
cHJpdmF0ZToKKyAgICBMYXllclRpbGVyVXBkYXRlcihjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwg
Qm9yZGVyVGV4ZWxPcHRpb24pOworCisgICAgY2xhc3MgVXBkYXRhYmxlVGlsZSA6IHB1YmxpYyBU
aWxlIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRhYmxlVGlsZSk7CisgICAg
cHVibGljOgorICAgICAgICBVcGRhdGFibGVUaWxlKCk7CisKKyAgICAgICAgYm9vbCBkaXJ0eSgp
IGNvbnN0IHsgcmV0dXJuICFtX2RpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKTsgfQorICAgICAgICB2
b2lkIGNsZWFyRGlydHkoKSB7IG1fZGlydHlMYXllclJlY3QgPSBJbnRSZWN0KCk7IH0KKworICAg
ICAgICAvLyBMYXllci1zcGFjZSBkaXJ0eSByZWN0YW5nbGUgdGhhdCBuZWVkcyB0byBiZSByZXBh
aW50ZWQuCisgICAgICAgIEludFJlY3QgbV9kaXJ0eUxheWVyUmVjdDsKKyAgICB9OworICAgIFVw
ZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQgaSwgaW50IGopIGNvbnN0OworICAgIFVwZGF0YWJsZVRp
bGUqIGNyZWF0ZVRpbGUoaW50IGksIGludCBqKTsKKworICAgIC8vIEludmFsaWRhdGUgYW55IHRp
bGVzIHdoaWNoIGRvIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVudFJlY3QKKyAgICB2b2lk
IGludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAvLyBT
dGF0ZSBoZWxkIGJldHdlZW4gdXBkYXRlIGFuZCB1cGxvYWQuCisgICAgSW50UmVjdCBtX3BhaW50
UmVjdDsKKyAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKK307CisKK30KKworI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcAppbmRleCBiNjRkMGY0ZTM5MGIzMDU0NzNiYzg5MGNkNWJmYzY2MjlhZjNmYjZj
Li5iNDI2YzY2NmYwZjc3NDY0ZGFjNTA0NmRmNjEzZjlkYmVkODkxOWU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5j
bHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJUaWxlclVwZGF0ZXIu
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
ICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCkBAIC0xMjMsMTUgKzEyMywxNSBAQCB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZXJJZk5lZWRlZCgpCiAKICAgICBjcmVh
dGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCk7CiAKLSAgICBtX3RpbGVyID0gTGF5ZXJUaWxlckNo
cm9taXVtOjpjcmVhdGUoCi0gICAgICAgIGxheWVyUmVuZGVyZXIoKSwKKyAgICBtX3RpbGVyID0g
TGF5ZXJUaWxlclVwZGF0ZXI6OmNyZWF0ZSgKICAgICAgICAgSW50U2l6ZShkZWZhdWx0VGlsZVNp
emUsIGRlZmF1bHRUaWxlU2l6ZSksCiAgICAgICAgIExheWVyVGlsZXJDaHJvbWl1bTo6SGFzQm9y
ZGVyVGV4ZWxzKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoKQogewotICAgIG1fdGlsZXItPnVwZGF0ZVJlY3QodGV4dHVyZVVwZGF0ZXIo
KSk7CisgICAgLy8gRklYTUU6IGVubmUgLSB0aGlzIG5lZWRzIHRvIG1vdmUgdG8gQ0M/CisgICAg
Ly9tX3RpbGVyLT51cGRhdGVSZWN0KHRleHR1cmVVcGRhdGVyKCkpOwogfQogCiB2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5nT3B0aW9uKFRpbGluZ09wdGlvbiB0aWxpbmdPcHRpb24p
CkBAIC0xNjMsMTEgKzE2MywxMiBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBUaWxlZExheWVyQ2hy
b21pdW06OnRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKKyAgICAvLyBGSVhNRSBl
bm5lIC0gdGhpcyBuZWVkcyBkZXJpdmVkIHZhbHVlcworCiAgICAgTGF5ZXJDaHJvbWl1bTo6cHVz
aFByb3BlcnRpZXNUbyhsYXllcik7CiAKICAgICBDQ1RpbGVkTGF5ZXJJbXBsKiB0aWxlZExheWVy
ID0gc3RhdGljX2Nhc3Q8Q0NUaWxlZExheWVySW1wbCo+KGxheWVyKTsKICAgICB0aWxlZExheWVy
LT5zZXRUaWxpbmdUcmFuc2Zvcm0odGlsaW5nVHJhbnNmb3JtKCkpOwotICAgIHRpbGVkTGF5ZXIt
PnNldFRpbGVyKG1fdGlsZXIuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCB3cml0ZUluZGVudChU
ZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5k
ZXggMmY0MzY5YjY0MDM4Mzg1MTcwYzc3MTQzMmZkN2ExZWMyNzIyY2Y5Ny4uYWQ2NzcxYjRiZDcx
MTJlNGEwODg5ODMzOWQ5ZWQ5MWMyZTY4M2ZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmgKQEAgLTI5LDEyICsyOSwxMSBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
IAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmgiCisjaW5jbHVkZSAiTGF5ZXJUaWxlclVwZGF0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBMYXllclRleHR1cmU7Ci1jbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBj
bGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwogCiBjbGFzcyBUaWxlZExheWVyQ2hyb21pdW0gOiBw
dWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC01OSw3ICs1OCw3IEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpID0gMDsKICAgICB2aXJ0
dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOwogCi0g
ICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV90aWxlcjsKKyAgICBPd25QdHI8TGF5ZXJU
aWxlclVwZGF0ZXI+IG1fdGlsZXI7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWY0YzIwZjZlNGQyZWM1MmIyMzk4OGMxYWRiOWE2OTI5MWZlNDU5Ngot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUaWxlci5jcHAKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2lu
Y2x1ZGUgIkNDTGF5ZXJUaWxlci5oIgorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4
dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCisjaW5jbHVkZSAiVHJh
Y2VFdmVudC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3R5cGVkZWYgRmxvYXRQb2ludDNEIEVkZ2U7CisKK1Bhc3NPd25QdHI8Q0NMYXllclRpbGVy
PiBDQ0xheWVyVGlsZXI6OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCit7
CisgICAgaWYgKCFsYXllclJlbmRlcmVyIHx8IHRpbGVTaXplLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUaWxlcihs
YXllclJlbmRlcmVyLCB0aWxlU2l6ZSwgYm9yZGVyKSk7Cit9CisKK0NDTGF5ZXJUaWxlcjo6Q0NM
YXllclRpbGVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50
U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikKKyAgICA6IExheWVyVGls
ZXJDaHJvbWl1bSh0aWxlU2l6ZSwgYm9yZGVyKQorICAgICwgbV90ZXh0dXJlT3JpZW50YXRpb24o
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6SW52YWxpZE9yaWVudGF0aW9uKQorICAgICwgbV9zYW1wbGVk
VGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0SW52YWxp
ZCkKKyAgICAsIG1fdGV4dHVyZUZvcm1hdChQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1h
dChsYXllclJlbmRlcmVyLT5jb250ZXh0KCkpKQorICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVy
UmVuZGVyZXIpCit7Cit9CisKK0NDTGF5ZXJUaWxlcjo6fkNDTGF5ZXJUaWxlcigpCit7CisgICAg
cmVzZXQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUaWxlcjo6bGF5ZXJSZW5k
ZXJlckNvbnRleHQoKSBjb25zdAoreworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworICAg
IHJldHVybiBsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKK30KKworQ0NMYXllclRpbGVyOjpE
cmF3YWJsZVRpbGUqIENDTGF5ZXJUaWxlcjo6dGlsZUF0KGludCBpLCBpbnQgaikgY29uc3QKK3sK
KyAgICBUaWxlKiB0aWxlID0gbV90aWxlcy5nZXQobWFrZV9wYWlyKGksIGopKS5nZXQoKTsKKyAg
ICBBU1NFUlQoIXRpbGUgfHwgdGlsZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RHJhd2FibGVUaWxlKj4odGlsZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRpbGVyOjpy
ZXNldCgpCit7CisgICAgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNldCgpOworICAgIG1fdW51c2Vk
VGlsZXMuY2xlYXIoKTsKK30KKworQ0NMYXllclRpbGVyOjpEcmF3YWJsZVRpbGUqIENDTGF5ZXJU
aWxlcjo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCit7CisgICAgQVNTRVJUKCF0aWxlQXQoaSwg
aikpOworCisgICAgUmVmUHRyPERyYXdhYmxlVGlsZT4gdGlsZTsKKyAgICBpZiAobV91bnVzZWRU
aWxlcy5zaXplKCkgPiAwKSB7CisgICAgICAgIHRpbGUgPSBtX3VudXNlZFRpbGVzLmxhc3QoKS5y
ZWxlYXNlKCk7CisgICAgICAgIG1fdW51c2VkVGlsZXMucmVtb3ZlTGFzdCgpOworICAgICAgICBB
U1NFUlQodGlsZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgICAg
IFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1RleHR1
cmVNYW5hZ2VyKCk7CisgICAgICAgIHRpbGUgPSBhZG9wdFJlZihuZXcgRHJhd2FibGVUaWxlKExh
eWVyVGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQsIG1hbmFnZXIpKSk7CisgICAgfQorICAgIG1fdGls
ZXMuYWRkKG1ha2VfcGFpcihpLCBqKSwgdGlsZSk7CisKKyAgICB0aWxlLT5tb3ZlVG8oaSwgaik7
CisKKyAgICByZXR1cm4gdGlsZS5nZXQoKTsKK30KK0xheWVyVGV4dHVyZSogQ0NMYXllclRpbGVy
OjpnZXRTaW5nbGVUZXh0dXJlKCkKK3sKKyAgICBpZiAobV90aWxpbmdEYXRhLm51bVRpbGVzKCkg
IT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBEcmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxl
QXQoMCwgMCk7CisgICAgcmV0dXJuIHRpbGUgPyB0aWxlLT50ZXh0dXJlKCkgOiAwOworfQorCit2
b2lkIENDTGF5ZXJUaWxlcjo6cHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCkKK3sKKyAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIGNvbnRlbnRSZWN0
VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKwor
ICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgRHJhd2FibGVUaWxl
KiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50
ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZl
KG1fdGlsZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgQ0NMYXllclRpbGVyOjp1cGRhdGVSZWN0KExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVV
cGRhdGVyKQoreworICAgIC8vIEZJWE1FOiBwdXQgcGFpbnQgYW5kIHVwZGF0ZSByZWN0IGludG8g
dGhlIHRleHR1cmUgdXBkYXRlcgorICAgIEludFJlY3QgdXBkYXRlUmVjdDsKKyAgICBJbnRSZWN0
IHBhaW50UmVjdDsKKworICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRv
IGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBpbnZh
bGlkYXRlZCBtaWQtdXBkYXRlLgorICAgIGlmICghbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVgoKSB8
fCAhbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVkoKSB8fCB1cGRhdGVSZWN0LmlzRW1wdHkoKSB8fCAh
bnVtVGlsZXMoKSB8fCBtX3NraXBzRHJhdykKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIG1fdGV4
dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0aW9uKCk7CisgICAgbV9z
YW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlci0+c2FtcGxlZFRleGVsRm9ybWF0KG1f
dGV4dHVyZUZvcm1hdCk7CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAg
IGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyh1cGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgRHJh
d2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlKQor
ICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOworICAgICAgICAgICAgLy8g
RklYTUUgZW5uZSAtIG5lZWQgdG8gcGFzcyBzZXQgb2YgdXBkYXRlZCB0aWxlcyBhbmQgaW52YWxp
ZGF0aW9uIC8vIHJlZ2lvbnMgdG8gdGV4dHVyZSB1cGRhdGVyCisjaWYgMAorICAgICAgICAgICAg
ZWxzZSBpZiAoIXRpbGUtPmRpcnR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5k
aWYKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIGNv
cHkgZnJvbS4KKyAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHRpbGVDb250ZW50UmVj
dCh0aWxlKTsKKyAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJjZVJlY3Qu
bG9jYXRpb24oKTsKKyAgICAgICAgICAgIC8vIEZJWE1FIGVubmUKKyNpZiAwCisgICAgICAgICAg
ICBzb3VyY2VSZWN0LmludGVyc2VjdChsYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGly
dHlMYXllclJlY3QpKTsKKyNlbmRpZgorICAgICAgICAgICAgLy8gUGFpbnQgcmVjdCBub3QgZ3Vh
cmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUgYm91bmRhcmllcywgc28KKyAgICAgICAgICAgIC8v
IG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4K
KyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KHBhaW50UmVjdCk7CisgICAgICAgICAg
ICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIEFTU0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7CisKKyAg
ICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50
by4KKyAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkg
LSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNp
emUoKSk7CisgICAgICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCisgICAgICAgICAg
ICAgICAgQ1JBU0goKTsKKworICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFu
Z2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KKyAgICAgICAgICAgIEludFBvaW50
IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55
KCkgLSBwYWludFJlY3QueSgpKTsKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgPCAw
KQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQu
eSgpIDwgMCkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50
T2Zmc2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPiBwYWludFJlY3Qud2lkdGgoKSkKKyAgICAg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRl
c3RSZWN0LmhlaWdodCgpID4gcGFpbnRSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgIENS
QVNIKCk7CisKKyAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUoKTsKKyAg
ICAgICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxpbmdEYXRhLmJvcmRlclRleGVs
cygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFS
RVNUOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01J
Tl9GSUxURVIsIGZpbHRlcikpOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOworICAgICAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
KSk7CisKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyLT51cGRhdGVUZXh0dXJlUmVjdCh0aWxl
LT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBDQ0xheWVyVGlsZXI6OmRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkp
Cit7CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX3RpbGVzLnNpemUoKSB8fCBjb250ZW50UmVj
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFVzZSBhbnRpLWFsaWFzaW5n
IHByb2dyYW1zIHdoZW4gYm9yZGVyIHRleGVscyBhcmUgcHJlc2V0IGFuZCB0cmFuc2Zvcm0KKyAg
ICAvLyBpcyBub3QgYW4gaW50ZWdlciB0cmFuc2xhdGlvbi4KKyAgICBib29sIHVzZUFBID0gKG1f
dGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSAmJiAhZ2xvYmFsVHJhbnNmb3JtLmlzSW50ZWdlclRy
YW5zbGF0aW9uKCkpOworCisgICAgc3dpdGNoIChtX3NhbXBsZWRUZXhlbEZvcm1hdCkgeworICAg
IGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQToKKyAgICAg
ICAgaWYgKHVzZUFBKQorICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxU
cmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtQUEoKSwgbGF5
ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1BQSgpLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50
VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1BQSgp
LT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxh
eWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtKCksIC0xLCAtMSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQToKKyAg
ICAgICAgaWYgKHVzZUFBKQorICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9i
YWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenps
ZUFBKCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCktPmZyYWdtZW50
U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBsYXllclJlbmRlcmVyKCkt
PnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9i
YWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenps
ZSgpLCAtMSwgLTEpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzQ0NXKGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCkKK3sKKyAgICBGbG9hdFBvaW50IHYxID0gRmxvYXRQb2ludChxdWFkLnAy
KCkueCgpIC0gcXVhZC5wMSgpLngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBx
dWFkLnAyKCkueSgpIC0gcXVhZC5wMSgpLnkoKSk7CisgICAgRmxvYXRQb2ludCB2MiA9IEZsb2F0
UG9pbnQocXVhZC5wMygpLngoKSAtIHF1YWQucDIoKS54KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcXVhZC5wMygpLnkoKSAtIHF1YWQucDIoKS55KCkpOworICAgIHJldHVybiAo
djEueCgpICogdjIueSgpIC0gdjEueSgpICogdjIueCgpKSA8IDA7Cit9CisKK3N0YXRpYyBFZGdl
IGNvbXB1dGVFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIHEsIGZs
b2F0IHNpZ24pCit7CisgICAgQVNTRVJUKHAgIT0gcSk7CisKKyAgICBGbG9hdFBvaW50IHRhbmdl
bnQocC55KCkgLSBxLnkoKSwgcS54KCkgLSBwLngoKSk7CisgICAgZmxvYXQgc2NhbGUgPSBzaWdu
IC8gdGFuZ2VudC5sZW5ndGgoKTsKKyAgICBmbG9hdCBjcm9zczIgPSBwLngoKSAqIHEueSgpIC0g
cS54KCkgKiBwLnkoKTsKKworICAgIHJldHVybiBFZGdlKHRhbmdlbnQueCgpICogc2NhbGUsCisg
ICAgICAgICAgICAgICAgdGFuZ2VudC55KCkgKiBzY2FsZSwKKyAgICAgICAgICAgICAgICBjcm9z
czIgKiBzY2FsZSk7Cit9CisKK3N0YXRpYyBGbG9hdFBvaW50IGludGVyc2VjdChjb25zdCBFZGdl
JiBhLCBjb25zdCBFZGdlJiBiKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KAorICAgICAgICAo
YS55KCkgKiBiLnooKSAtIGIueSgpICogYS56KCkpIC8gKGEueCgpICogYi55KCkgLSBiLngoKSAq
IGEueSgpKSwKKyAgICAgICAgKGEueCgpICogYi56KCkgLSBiLngoKSAqIGEueigpKSAvIChiLngo
KSAqIGEueSgpIC0gYS54KCkgKiBiLnkoKSkpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3Zv
aWQgQ0NMYXllclRpbGVyOjpkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHks
IGNvbnN0IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQg
ZWRnZUxvY2F0aW9uKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChsYXllclJl
bmRlcmVyKCktPndpbmRvd01hdHJpeCgpICogbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0
cml4KCkgKiBnbG9iYWxUcmFuc2Zvcm0pOworCisgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBa
IGNvbXBvbmVudC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXhYWVcgPQorICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgMCwgbWF0
cml4Lm0xNCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTIxKCksIG1h
dHJpeC5tMjIoKSwgMCwgbWF0cml4Lm0yNCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgMSwgbWF0cml4Lm0zNCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgMCwgbWF0cml4
Lm00NCgpKTsKKworICAgIC8vIERvbid0IGRyYXcgYW55IHRpbGVzIHdoZW4gbWF0cml4IGlzIG5v
dCBpbnZlcnRpYmxlLgorICAgIGlmICghbWF0cml4WFlXLmlzSW52ZXJ0aWJsZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlID0gbWF0cml4WFlX
LmludmVyc2UoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5k
ZXJlckNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9n
cmFtLT5wcm9ncmFtKCkpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKKworICAgIC8vIE1hcCBjb250ZW50IHJlY3RhbmdsZSB0byBkZXZpY2Ugc3BhY2UuCisg
ICAgRmxvYXRRdWFkIGRldmljZVF1YWQgPSBtYXRyaXgubWFwUXVhZChGbG9hdFF1YWQoY29udGVu
dFJlY3QpKTsKKworICAgIC8vIENvdW50ZXItY2xvY2t3aXNlPworICAgIGZsb2F0IHNpZ24gPSBp
c0NDVyhkZXZpY2VRdWFkKSA/IC0xIDogMTsKKworICAgIC8vIENvbXB1dGUgb3V0ZXIgZWRnZXMu
CisgICAgRWRnZSBsZWZ0RWRnZSA9IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDQoKSwgZGV2aWNl
UXVhZC5wMSgpLCBzaWduKTsKKyAgICBFZGdlIHJpZ2h0RWRnZSA9IGNvbXB1dGVFZGdlKGRldmlj
ZVF1YWQucDIoKSwgZGV2aWNlUXVhZC5wMygpLCBzaWduKTsKKyAgICBFZGdlIHRvcEVkZ2UgPSBj
b21wdXRlRWRnZShkZXZpY2VRdWFkLnAxKCksIGRldmljZVF1YWQucDIoKSwgc2lnbik7CisgICAg
RWRnZSBib3R0b21FZGdlID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVhZC5wMygpLCBkZXZpY2VRdWFk
LnA0KCksIHNpZ24pOworCisgICAgaWYgKGVkZ2VMb2NhdGlvbiAhPSAtMSkgeworICAgICAgICAv
LyBNb3ZlIG91dGVyIGVkZ2VzIHRvIGVuc3VyZSB0aGF0IGFsbCBwYXJ0aWFsbHkgY292ZXJlZCBw
aXhlbHMgYXJlCisgICAgICAgIC8vIHByb2Nlc3NlZC4KKyAgICAgICAgbGVmdEVkZ2UubW92ZSgw
LCAwLCAwLjVmKTsKKyAgICAgICAgcmlnaHRFZGdlLm1vdmUoMCwgMCwgMC41Zik7CisgICAgICAg
IHRvcEVkZ2UubW92ZSgwLCAwLCAwLjVmKTsKKyAgICAgICAgYm90dG9tRWRnZS5tb3ZlKDAsIDAs
IDAuNWYpOworCisgICAgICAgIGZsb2F0IGVkZ2VbMTJdOworICAgICAgICBlZGdlWzBdID0gbGVm
dEVkZ2UueCgpOworICAgICAgICBlZGdlWzFdID0gbGVmdEVkZ2UueSgpOworICAgICAgICBlZGdl
WzJdID0gbGVmdEVkZ2UueigpOworICAgICAgICBlZGdlWzNdID0gdG9wRWRnZS54KCk7CisgICAg
ICAgIGVkZ2VbNF0gPSB0b3BFZGdlLnkoKTsKKyAgICAgICAgZWRnZVs1XSA9IHRvcEVkZ2Uueigp
OworICAgICAgICBlZGdlWzZdID0gcmlnaHRFZGdlLngoKTsKKyAgICAgICAgZWRnZVs3XSA9IHJp
Z2h0RWRnZS55KCk7CisgICAgICAgIGVkZ2VbOF0gPSByaWdodEVkZ2UueigpOworICAgICAgICBl
ZGdlWzldID0gYm90dG9tRWRnZS54KCk7CisgICAgICAgIGVkZ2VbMTBdID0gYm90dG9tRWRnZS55
KCk7CisgICAgICAgIGVkZ2VbMTFdID0gYm90dG9tRWRnZS56KCk7CisgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtM2Z2KGVkZ2VMb2NhdGlvbiwgZWRnZSwgNCkpOworICAgIH0K
KworICAgIEVkZ2UgcHJldkVkZ2VZID0gdG9wRWRnZTsKKworICAgIGludCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b207CisgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVu
dFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8
PSBib3R0b207ICsraikgeworICAgICAgICBFZGdlIHByZXZFZGdlWCA9IGxlZnRFZGdlOworCisg
ICAgICAgIEVkZ2UgZWRnZVkgPSBib3R0b21FZGdlOworICAgICAgICBpZiAoaiA8IChtX3RpbGlu
Z0RhdGEubnVtVGlsZXNZKCkgLSAxKSkgeworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9
IHVuaW9uUmVjdChtX3RpbGluZ0RhdGEudGlsZUJvdW5kcyhtX3RpbGluZ0RhdGEudGlsZUluZGV4
KDAsIGopKSwgbV90aWxpbmdEYXRhLnRpbGVCb3VuZHMobV90aWxpbmdEYXRhLnRpbGVJbmRleCht
X3RpbGluZ0RhdGEubnVtVGlsZXNYKCkgLSAxLCBqKSkpOworICAgICAgICAgICAgdGlsZVJlY3Qu
aW50ZXJzZWN0KGxheWVyUmVjdCk7CisKKyAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgcm93cy4K
KyAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIHRpbGVSZWN0Lm1vdmUobV9sYXllclBvc2l0aW9uLngoKSwg
bV9sYXllclBvc2l0aW9uLnkoKSk7CisKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJl
Y3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOworICAgICAgICAgICAgRmxvYXRQb2ludCBwMih0
aWxlUmVjdC54KCksIHRpbGVSZWN0Lm1heFkoKSk7CisKKyAgICAgICAgICAgIC8vIE1hcCBwb2lu
dHMgdG8gZGV2aWNlIHNwYWNlLgorICAgICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEp
OworICAgICAgICAgICAgcDIgPSBtYXRyaXgubWFwUG9pbnQocDIpOworCisgICAgICAgICAgICAv
LyBDb21wdXRlIGhvcml6b250YWwgZWRnZS4KKyAgICAgICAgICAgIGVkZ2VZID0gY29tcHV0ZUVk
Z2UocDEsIHAyLCBzaWduKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0
OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIERyYXdhYmxlVGlsZSogdGlsZSA9IHRp
bGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgQVNTRVJUKHRpbGUtPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgp
KTsKKworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZSgpOworCisgICAg
ICAgICAgICAvLyBEb24ndCB1c2UgdGlsZUNvbnRlbnRSZWN0IGhlcmUsIGFzIHRoYXQgY29udGFp
bnMgdGhlIGZ1bGwKKyAgICAgICAgICAgIC8vIHJlY3Qgd2l0aCBib3JkZXIgdGV4ZWxzIHdoaWNo
IHNob3VsZG4ndCBiZSBkcmF3bi4KKyAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3Rp
bGluZ0RhdGEudGlsZUJvdW5kcyhtX3RpbGluZ0RhdGEudGlsZUluZGV4KHRpbGUtPmkoKSwgdGls
ZS0+aigpKSk7CisgICAgICAgICAgICBJbnRSZWN0IGRpc3BsYXlSZWN0ID0gdGlsZVJlY3Q7Cisg
ICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKKworICAgICAgICAgICAg
Ly8gS2VlcCB0cmFjayBvZiBob3cgdGhlIHRvcCBsZWZ0IGhhcyBtb3ZlZCwgc28gdGhlIHRleHR1
cmUgY2FuIGJlCisgICAgICAgICAgICAvLyBvZmZzZXQgdGhlIHNhbWUgYW1vdW50LgorICAgICAg
ICAgICAgSW50U2l6ZSBkaXNwbGF5T2Zmc2V0ID0gdGlsZVJlY3QubWluWE1pbllDb3JuZXIoKSAt
IGRpc3BsYXlSZWN0Lm1pblhNaW5ZQ29ybmVyKCk7CisKKyAgICAgICAgICAgIC8vIFNraXAgZW1w
dHkgdGlsZXMuCisgICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3Np
dGlvbi54KCksIG1fbGF5ZXJQb3NpdGlvbi55KCkpOworCisgICAgICAgICAgICBGbG9hdFJlY3Qg
Y2xhbXBSZWN0KHRpbGVSZWN0KTsKKyAgICAgICAgICAgIC8vIENsYW1wIHRleHR1cmUgY29vcmRp
bmF0ZXMgdG8gYXZvaWQgc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIKKyAgICAgICAgICAgIC8v
IGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhl
bAorICAgICAgICAgICAgLy8gbWludXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxheWVycy4gVGhl
IHJlc3VsdGluZyBjbGFtcCByZWdpb24KKyAgICAgICAgICAgIC8vIGlzIG1hcHBlZCB0byB0aGUg
dW5pdCBzcXVhcmUgYnkgdGhlIHZlcnRleCBzaGFkZXIgYW5kIG1hcHBlZAorICAgICAgICAgICAg
Ly8gYmFjayB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50
IHNoYWRlcgorICAgICAgICAgICAgLy8gYWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAwLTEgcmFuZ2Uu
CisgICAgICAgICAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0gMSAvIDEwMjQuMGY7CisgICAgICAg
ICAgICBmbG9hdCBjbGFtcFggPSBtaW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVw
c2lsb24pOworICAgICAgICAgICAgZmxvYXQgY2xhbXBZID0gbWluKDAuNSwgY2xhbXBSZWN0Lmhl
aWdodCgpIC8gMi4wIC0gZXBzaWxvbik7CisgICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVgo
LWNsYW1wWCk7CisgICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7CisgICAg
ICAgICAgICBGbG9hdFNpemUgY2xhbXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1pbllDb3JuZXIo
KSAtIEZsb2F0UmVjdCh0aWxlUmVjdCkubWluWE1pbllDb3JuZXIoKTsKKworICAgICAgICAgICAg
RmxvYXRQb2ludCB0ZXhPZmZzZXQgPSBtX3RpbGluZ0RhdGEudGV4dHVyZU9mZnNldCh0aWxlLT5p
KCksIHRpbGUtPmooKSkgKyBjbGFtcE9mZnNldCArIEZsb2F0U2l6ZShkaXNwbGF5T2Zmc2V0KTsK
KyAgICAgICAgICAgIGZsb2F0IHRpbGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVT
aXplLndpZHRoKCkpOworICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX3RpbGVTaXplLmhlaWdodCgpKTsKKworICAgICAgICAgICAgLy8gTWFwIGNsYW1w
aW5nIHJlY3RhbmdsZSB0byB1bml0IHNxdWFyZS4KKyAgICAgICAgICAgIGZsb2F0IHZlcnRleFRl
eFRyYW5zbGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOworICAgICAg
ICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBS
ZWN0LmhlaWdodCgpOworICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJl
Y3Qud2lkdGgoKSAvIGNsYW1wUmVjdC53aWR0aCgpOworICAgICAgICAgICAgZmxvYXQgdmVydGV4
VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7CisKKyAg
ICAgICAgICAgIC8vIE1hcCB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAg
ICAgICAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGls
ZVdpZHRoOworICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zm
c2V0LnkoKSAvIHRpbGVIZWlnaHQ7CisgICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxl
WCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGlsZVdpZHRoOworICAgICAgICAgICAgZmxvYXQgZnJh
Z21lbnRUZXhTY2FsZVkgPSBjbGFtcFJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OworCisgICAg
ICAgICAgICAvLyBPcGVuR0wgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgorICAgICAg
ICAgICAgLy8gSWYgdGlsZSB0ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhl
IHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICBpZiAobV90ZXh0dXJlT3JpZW50YXRp
b24gPT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7CisgICAgICAg
ICAgICAgICAgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gMS4wIC0gZnJhZ21lbnRUZXhUcmFuc2xh
dGVZOworICAgICAgICAgICAgICAgIGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEVkZ2UgZWRnZVggPSByaWdodEVkZ2U7CisgICAgICAgICAg
ICBpZiAoaSA8IChtX3RpbGluZ0RhdGEubnVtVGlsZXNYKCkgLSAxKSkgeworICAgICAgICAgICAg
ICAgIEZsb2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOworICAgICAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkp
OworCisgICAgICAgICAgICAgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCisgICAg
ICAgICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEpOworICAgICAgICAgICAgICAgIHAy
ID0gbWF0cml4Lm1hcFBvaW50KHAyKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVy
dGljYWwgZWRnZS4KKyAgICAgICAgICAgICAgICBlZGdlWCA9IGNvbXB1dGVFZGdlKHAxLCBwMiwg
c2lnbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3Bh
Y2UgcXVhZC4KKyAgICAgICAgICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkKGludGVyc2VjdChlZGdl
WSwgcHJldkVkZ2VYKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2Vj
dChwcmV2RWRnZVgsIHByZXZFZGdlWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcnNlY3QocHJldkVkZ2VZLCBlZGdlWCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcnNlY3QoZWRnZVgsIGVkZ2VZKSk7CisKKyAgICAgICAgICAgIC8vIE1hcCBx
dWFkIHRvIGxheWVyIHNwYWNlLgorICAgICAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBpbnZlcnNl
Lm1hcFF1YWQoZGV2aWNlUXVhZCk7CisKKyAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxl
UmVjdC4KKyAgICAgICAgICAgIHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEu
MGYgLyB0aWxlUmVjdC5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRy
YW5zZm9ybUxvY2F0aW9uID09IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVu
dCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbworICAgICAgICAg
ICAgICAgIC8vIHRoaXMgd2hpbGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwor
ICAgICAgICAgICAgICAgIC8vIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFs
d2F5cyBiZSBub24tbmVnYXRpdmUKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0
cmFuc2Zvcm1lZCBpbiBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgorICAgICAgICAgICAgICAg
IC8vIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVyLgorICAgICAgICAgICAgICAgIHZlcnRleFRl
eFNjYWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhT
Y2FsZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgdmVydGV4VGV4VHJh
bnNsYXRlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhU
cmFuc2xhdGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICAgICAgICAgIHZlcnRleFRl
eFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAgICAgICAgICAgICAgIHZl
cnRleFRleFRyYW5zbGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihm
cmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdt
ZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7
CisKKyAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJh
bnNsYXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhT
Y2FsZVkpKTsKKworICAgICAgICAgICAgZmxvYXQgcG9pbnRbOF07CisgICAgICAgICAgICBwb2lu
dFswXSA9IHF1YWQucDEoKS54KCk7CisgICAgICAgICAgICBwb2ludFsxXSA9IHF1YWQucDEoKS55
KCk7CisgICAgICAgICAgICBwb2ludFsyXSA9IHF1YWQucDIoKS54KCk7CisgICAgICAgICAgICBw
b2ludFszXSA9IHF1YWQucDIoKS55KCk7CisgICAgICAgICAgICBwb2ludFs0XSA9IHF1YWQucDMo
KS54KCk7CisgICAgICAgICAgICBwb2ludFs1XSA9IHF1YWQucDMoKS55KCk7CisgICAgICAgICAg
ICBwb2ludFs2XSA9IHF1YWQucDQoKS54KCk7CisgICAgICAgICAgICBwb2ludFs3XSA9IHF1YWQu
cDQoKS55KCk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTJmdihw
cm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCksIHBvaW50LCA0KSk7CisKKyAg
ICAgICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJS
ZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGdsb2JhbFRyYW5zZm9ybSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGls
ZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKKworICAgICAgICAgICAgcHJldkVkZ2VYID0g
ZWRnZVg7CisgICAgICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KKyAgICAgICAgICAgIHBy
ZXZFZGdlWC5zY2FsZSgtMSwgLTEsIC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZFZGdl
WSA9IGVkZ2VZOworICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KKyAgICAgICAgcHJldkVk
Z2VZLnNjYWxlKC0xLCAtMSwgLTEpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VGlsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYTVhM2Q5YjQ1ZTAxYzExMDU1MWRiNWE1ZWMyYzNlMTdjODk0
NTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRpbGVyLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNp
Zm5kZWYgQ0NMYXllclRpbGVyX2gKKyNkZWZpbmUgQ0NMYXllclRpbGVyX2gKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2lu
Y2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRlckNocm9t
aXVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOworCitjbGFzcyBDQ0xheWVyVGlsZXIgOiBwdWJsaWMgTGF5ZXJUaWxlckNocm9taXVtewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUaWxlcik7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NMYXllclRpbGVyPiBjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uKTsKKworICAgIHZp
cnR1YWwgfkNDTGF5ZXJUaWxlcigpOworCisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CisKKyAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyUmVuZGVyZXI7IH0KKyAgICBHcmFwaGljc0NvbnRleHQzRCogbGF5ZXJSZW5kZXJlckNv
bnRleHQoKSBjb25zdDsKKworICAgIC8vIFVwZGF0ZSBpbnZhbGlkIHRleHR1cmVzIHRoYXQgaW50
ZXJzZWN0IHdpdGggY29udGVudFJlY3QgcHJvdmlkZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuCisg
ICAgdm9pZCB1cGRhdGVSZWN0KExheWVyVGV4dHVyZVVwZGF0ZXIqKTsKKworICAgIC8vIFJlc2Vy
dmVzIGFsbCBleGlzdGluZyBhbmQgdmFsaWQgdGlsZSB0ZXh0dXJlcyB0byBwcm90ZWN0IHRoZW0g
ZnJvbSBiZWluZworICAgIC8vIHJlY3ljbGVkIGJ5IHRoZSB0ZXh0dXJlIG1hbmFnZXIuCisgICAg
dm9pZCBwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAg
ICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBjb250ZW50IHJlY3Qu
CisgICAgLy8KKyAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisKKyAgICAvLyBJZiB0aGlz
IHRpbGVyIGhhcyBleGFjdGx5IG9uZSB0aWxlLCByZXR1cm4gaXRzIHRleHR1cmUuIE90aGVyd2lz
ZSwgbnVsbC4KKyAgICBMYXllclRleHR1cmUqIGdldFNpbmdsZVRleHR1cmUoKTsKKworICAgIHR5
cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JB
VGV4QWxwaGE+IFByb2dyYW07CisgICAgLy8gU2hhZGVyIHByb2dyYW0gdGhhdCBzd2FwcyByZWQg
YW5kIGJsdWUgY29tcG9uZW50cyBvZiB0ZXh0dXJlLgorICAgIC8vIFVzZWQgd2hlbiB0ZXh0dXJl
IGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBuYXRpdmUgY29sb3IgZm9ybWF0LgorICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dp
enpsZUFscGhhPiBQcm9ncmFtU3dpenpsZTsKKworICAgIC8vIFNoYWRlciBwcm9ncmFtIHRoYXQg
cHJvZHVjZXMgYW50aS1hbGlhc2VkIGxheWVyIGVkZ2VzLgorICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFBQT4gUHJv
Z3JhbUFBOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJh
Z21lbnRTaGFkZXJSR0JBVGV4U3dpenpsZUFscGhhQUE+IFByb2dyYW1Td2l6emxlQUE7CisKK3By
aXZhdGU6CisgICAgQ0NMYXllclRpbGVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IElu
dFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CisKKyAgICBjbGFzcyBEcmF3YWJs
ZVRpbGUgOiBwdWJsaWMgVGlsZSB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERyYXdh
YmxlVGlsZSk7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBEcmF3YWJsZVRpbGUoUGFz
c093blB0cjxMYXllclRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpIHsgfQorCisgICAgICAgIExh
eWVyVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4LmdldCgpOyB9CisgICAgcHJpdmF0
ZToKKyAgICAgICAgT3duUHRyPExheWVyVGV4dHVyZT4gbV90ZXg7CisgICAgfTsKKyAgICBEcmF3
YWJsZVRpbGUqIHRpbGVBdChpbnQgaSwgaW50IGopIGNvbnN0OworICAgIERyYXdhYmxlVGlsZSog
Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopOworCisgICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBp
bnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICB2
b2lkIGRyYXdUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJhZ21l
bnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbik7CisKKyAgICAvLyBUaWdo
dGx5IHBhY2tlZCBzZXQgb2YgdW51c2VkIHRpbGVzLgorICAgIFZlY3RvcjxSZWZQdHI8RHJhd2Fi
bGVUaWxlPiA+IG1fdW51c2VkVGlsZXM7CisKKyAgICBMYXllclRleHR1cmVVcGRhdGVyOjpPcmll
bnRhdGlvbiBtX3RleHR1cmVPcmllbnRhdGlvbjsKKyAgICBMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXQgbV9zYW1wbGVkVGV4ZWxGb3JtYXQ7CisgICAgR0MzRGVudW0gbV90
ZXh0dXJlRm9ybWF0OworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVy
OworfTsKKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKaW5kZXggZmMxMDNlYWRjYWIy
ZTlmYTNhMDA2NzRlZmNiZGQzYjBkZGQxNTgwMS4uYjIxM2I0NjNlMjAzNmNlMWYyOWJlMjEyNDg0
ZDBkNDM2ZWY1NDczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTM3
LDcgKzM3LDYgQEAgY2xhc3MgTGF5ZXJUZXh0dXJlOwogCiBDQ1RpbGVkTGF5ZXJJbXBsOjpDQ1Rp
bGVkTGF5ZXJJbXBsKGludCBpZCkKICAgICA6IENDTGF5ZXJJbXBsKGlkKQotICAgICwgbV90aWxl
cigwKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggNzM0NmJiN2U3
ZDZmYTZiYzhjYTFlYmNmMjljYzU4NDlmMWVmNjNhZS4uNjQ3ZGMyN2NiMTJiZjU5ZjRiM2MwNmE3
ZTQ2YmJiY2I2YzI4OWIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAtMjYs
OCArMjYsOCBAQAogI2lmbmRlZiBDQ1RpbGVkTGF5ZXJJbXBsX2gKICNkZWZpbmUgQ0NUaWxlZExh
eWVySW1wbF9oCiAKLSNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUaWxlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ1LDEzICs0NSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0Owog
CiAgICAgdm9pZCBzZXRUaWxpbmdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRpbGluZ1RyYW5zZm9ybSkgeyBtX3RpbGluZ1RyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9ybTsg
fQotICAgIHZvaWQgc2V0VGlsZXIoTGF5ZXJUaWxlckNocm9taXVtKiB0aWxlcikgeyBtX3RpbGVy
ID0gdGlsZXI7IH0KIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1RpbGVkTGF5ZXJJbXBsKGlu
dCBpZCk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RpbGluZ1RyYW5zZm9ybTsKLSAg
ICBMYXllclRpbGVyQ2hyb21pdW0qIG1fdGlsZXI7CisKKyAgICBPd25QdHI8Q0NMYXllclRpbGVy
PiBtX3RpbGVyOwogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103855</attachid>
            <date>2011-08-12 21:42:33 -0700</date>
            <delta_ts>2011-08-17 16:26:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66065-20110812214232.patch</filename>
            <type>text/plain</type>
            <size>103860</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMwMTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlNzlkZGQ2OGRmZDdlOWFl
NWY3MTE3Y2I4MGE4MmQzOWI4NTg5ZDFmLi4wNTZmZDFkYjA2NjA5ZTQwYWU3ZTMwMGIyMWY5MWFh
N2VlZmQwMmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEzIEBACisyMDExLTA4LTEyICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxp
dCB0aWxlciBpbnRvIG1haW4gdGhyZWFkIC8gY29tcG9zaXRvciB0aHJlYWQgdmVyc2lvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDY1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cy4KKworICAgICAgICBMYXllclRpbGVyQ2hyb21pdW0gaXMgc3BsaXQgaW50
byBMYXllclRpbGVyVXBkYXRlciAoaW52YWxpZGF0ZS9wYWludCkKKyAgICAgICAgYW5kIENDTGF5
ZXJUaWxlckltcGwgKGRyYXcgdXNpbmcgR0wpLiBMYXllclRpbGVyVXBkYXRlciBpcyBhbHNvCisg
ICAgICAgIG1vZGlmaWVkIHRvIG5vdCBoYXZlIGFueSByZWZlcmVuY2VzIHRvIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSBhbmQgb25seQorICAgICAgICB1c2UgdGhlIEdyYXBoaWNzQ29udGV4dDNEIHRo
YXQncyBiZWVuIHBhc3NlZCBpbi4gRHVyaW5nIHRyZWUKKyAgICAgICAgc3luY2hyb25pemF0aW9u
LCBMYXllclRpbGVyVXBkYXRlciBzeW5jaHJvbml6ZXMgdGV4dHVyZSBpZHMgdG8KKyAgICAgICAg
dGhlIGNvcnJlc3BvbmRpbmcgQ0NMYXllclRpbGVySW1wbCB0byBkcmF3IHdpdGguCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVRleHR1
cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVzdFRleHR1
cmVGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVSb290TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnJvb3RMYXllckNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmpl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9n
cmFtU3dpenpsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRp
bGVyUHJvZ3JhbUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dGlsZXJQcm9ncmFtU3dpenpsZUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxlckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZTo6VGlsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlclVwZGF0ZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJVcGRhdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlclVwZGF0ZXI6OkxheWVyVGlsZXJVcGRhdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJVcGRhdGVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyVXBkYXRlcjo6dGlsZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJVcGRh
dGVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJVcGRhdGVyOjpp
bnZhbGlkYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlclVwZGF0ZXI6Omlu
dmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJVcGRhdGVyOjppbnZh
bGlkYXRlRW50aXJlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlclVwZGF0ZXI6
OnByb3RlY3RUaWxlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlclVwZGF0
ZXI6OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlclVwZGF0
ZXI6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyVXBkYXRl
cjo6dXBkYXRlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUaWxlclVwZGF0ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyVXBk
YXRlcjo6VXBkYXRhYmxlVGlsZTo6VXBkYXRhYmxlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclRpbGVyVXBkYXRlcjo6VXBkYXRhYmxlVGlsZTo6dGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRpbGVyVXBkYXRlcjo6VXBkYXRhYmxlVGlsZTo6ZGlydHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlclVwZGF0ZXI6OlVwZGF0YWJsZVRpbGU6OmNsZWFyRGlydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlclVwZGF0ZXI6OnRleHR1cmVNYW5hZ2VyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6OnRleHR1cmVJZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZXJJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xM
YXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsZXJJbXBsLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRpbGVySW1wbDo6Q0NMYXllclRpbGVySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVGlsZXJJbXBsOjp0aWxlQXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRpbGVySW1wbDo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGls
ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxlckltcGw6OmdldFNp
bmdsZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGVySW1wbDo6c3luY1Rl
eHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsZXJJbXBsOjpldmljdFRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNDQ1cpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZUVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUaWxlckltcGw6OmRyYXdUaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUaWxlckltcGw6OkRyYXdhYmxlVGlsZTo6RHJhd2FibGVUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxlckltcGw6OkRyYXdhYmxlVGlsZTo6dGV4dHVyZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxlckltcGw6OkRyYXdhYmxlVGlsZTo6c2V0VGV4
dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OkNDVGls
ZWRMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnB1c2hUaWxlclByb3BlcnRp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXll
ckltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjpUaWxpbmdEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGluZ0RhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1RpbGluZ0RhdGEuaDoKKwogMjAxMS0wOC0xMiAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9y
YmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBPd25lcnNoaXAgb2YgY2FudmFzJ3MgR3Jh
cGhpY3NDb250ZXh0M0Qgc2hvdWxkIGJlIG1vdmVkIHRvIFBsYXRmb3JtQ29udGV4dFNraWEKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBlZjA1NGJkODE3ZTYyOWVhM2E1YTgyODA3MzhlNGZjNjU1NDg0Zjk1
Li41ZDk1NGU2ZGFmYzdhODNhNzIxYzRkMDQyZjVjYzUwNzkxY2UzNzhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0zNTE0LDYgKzM1MTQsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJVcGRhdGVy
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxl
clVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVk
aWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oJywKQEAgLTM1NjAsNiArMzU2Miw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNv
cnRlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJTb3J0ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRpbGVySW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxlckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggN2E4
ZTBiZmE3YTJjYzBiMTU4MjI4YzczYjk0ZTVlZmI5MmY4MzJlOC4uMzc4MGVmNWE0NjFhOGY2NWY4
MmUxZWQ2ZmViNTdmNTI1MWExYWY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uY3BwCkBAIC02Niw3ICs2Niw3IEBAIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3
c0NvbnRlbnQoKSBjb25zdAogICAgICAgICAgICAgJiYgKGNvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcygpCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopCiB7CiAgICAgaWYgKCFtX2NvbnRlbnRzRGly
dHkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oCmluZGV4IDcyODY3OTYzNjUyNGU1ODJkOTExNTZiNTNlZWM2YjRkM2Yz
NGI5NjQuLmI2ODliMWMzN2FkNjgyNTA2NjQ4ZTdlNWQ0ZmQwYTFkYWExOTk5NDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShEcmF3aW5n
QnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgdmlydHVhbCB+Q2Fu
dmFzMkRMYXllckNocm9taXVtKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0Qq
KTsKIAogICAgIHZvaWQgc2V0VGV4dHVyZUNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IHRleHR1cmVJZCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
MmE3NzE1ZWY5YTQ0NGJmOTkzZjQxZjU0MWIwZjU1Mzc0NjBiMTc4OS4uOGIwYzNlMGMyZGJlYTNi
ODZkZTIyZTdiZTkwYTUyMjhkMGUwMTI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
Y3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNs
dWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0
ZXIuaCIKKyNpbmNsdWRlICJMYXllclRpbGVyVXBkYXRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29sb3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGNh
MmI2NDE3MzcwMDZiN2ZlYzIyMmM1NTE1YWNmMDIwMmE4MGQ1MWQuLjZlMjY0ZTAyYWI1YjEzMWMw
YzdjZDQ5MGZiZDcyZTEzYzgwODkxNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE2MCw3ICsx
NjAsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB0eXBpY2FsbHkgbmVlZCB0byBi
ZSBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGNsYXNzZXMuCiAgICAgdmlydHVhbCBib29sIGRyYXdz
Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
Q29udGVudHNJZkRpcnR5KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyhHcmFwaGljc0NvbnRleHQzRCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2soYm9v
bCkge30KICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoKSB7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGQwMDQ3MmY2MWQzZTZiYjg2N2NmZWQyYjc0ZDA5
MzhjYTc1NDgwMGQuLjg3Y2ExMzEyNDZkZmFmY2VkZWM0YjczZjk0ZTRjNDQ0YjVlMDNiNGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDQsNiArNDQsNyBAQAog
I2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAtNDg1LDcgKzQ4
Niw5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKICNlbmRpZgog
ICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJp
dG1hcDo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgbV9vd25lci0+Y3JlYXRlUm9vdExheWVyUGFp
bnRlcigpLCBtX2NvbnRleHRTdXBwb3J0c01hcFN1Yik7CiAKLSAgICBtX3Jvb3RMYXllckNvbnRl
bnRUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAy
NTYpLCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKKyAgICBtX3Jvb3RMYXll
ckNvbnRlbnRVcGRhdGVyID0gTGF5ZXJUaWxlclVwZGF0ZXI6OmNyZWF0ZShjb250ZW50c1RleHR1
cmVNYW5hZ2VyKCksIGJlc3RUZXh0dXJlRm9ybWF0KCksIEludFNpemUoMjU2LCAyNTYpLCBDQ0xh
eWVyVGlsZXJJbXBsOjpOb0JvcmRlclRleGVscyk7CisgICAgQVNTRVJUKG1fcm9vdExheWVyQ29u
dGVudFVwZGF0ZXIpOworICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyID0gQ0NMYXllclRpbGVy
SW1wbDo6Y3JlYXRlKCk7CiAgICAgQVNTRVJUKG1fcm9vdExheWVyQ29udGVudFRpbGVyKTsKIAog
ICAgIG1faGVhZHNVcERpc3BsYXkgPSBDQ0hlYWRzVXBEaXNwbGF5OjpjcmVhdGUodGhpcyk7CkBA
IC01MTcsNyArNTIwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VUZXh0
dXJlcygpCiB7CiAgICAgLy8gUmVkdWNlcyB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB0byB0ZXh0dXJl
TWVtb3J5TG93TGltaXRCeXRlcyBieSBkZWxldGluZyBub24gcm9vdCBsYXllcgogICAgIC8vIHRl
eHR1cmVzLgotICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5wcm90ZWN0VGlsZVRleHR1cmVz
KG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKSk7CisgICAgbV9yb290TGF5ZXJDb250ZW50
VXBkYXRlci0+cHJvdGVjdFRpbGVUZXh0dXJlcyhtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0
KCkpOwogICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCh0
ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyk7CiAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
LT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7CkBAIC01MjcsMTAgKzUzMCwx
NSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVRleHR1cmVzKCkKICAgICBt
X3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29u
dGV4dC5nZXQoKSk7CiB9CiAKK0dDM0RlbnVtIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVzdFRl
eHR1cmVGb3JtYXQoKQoreworICAgIHJldHVybiBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZv
cm1hdChjb250ZXh0KCkpOworfQorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
Um9vdExheWVyQ29udGVudHMoKQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzIiwgdGhpcywgMCk7Ci0gICAgbV9yb290TGF5
ZXJDb250ZW50VGlsZXItPnByZXBhcmVUb1VwZGF0ZShtX293bmVyLT52aWV3cG9ydFZpc2libGVS
ZWN0KCksIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOworICAgIG1fcm9vdExheWVy
Q29udGVudFVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShtX293bmVyLT52aWV3cG9ydFZpc2libGVS
ZWN0KCksIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOwogfQogCiB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcigpCkBAIC01MzgsMjQgKzU0NiwyNCBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcigpCiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggc2Nyb2xsOwogICAgIHNjcm9sbC50cmFuc2xhdGUoLW1fb3duZXItPnZpZXdw
b3J0VmlzaWJsZVJlY3QoKS54KCksIC1tX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkueSgp
KTsKIAotICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5kcmF3KG1fb3duZXItPnZpZXdwb3J0
VmlzaWJsZVJlY3QoKSwgc2Nyb2xsLCAxLjBmKTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxl
ci0+ZHJhdyh0aGlzLCBtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCksIHNjcm9sbCwgMS4w
Zik7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlkYXRlUm9vdExheWVy
UmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50
VGlsZXItPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CisgICAgbV9yb290TGF5ZXJDb250ZW50
VXBkYXRlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKIH0KIAogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJvb3RMYXllckNoYW5nZWQoKQogewotICAgIG1fcm9vdExheWVyQ29udGVu
dFRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRV
cGRhdGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCiB7CiAgICAgaWYgKG1fY29udGV4dCkKICAgICAg
ICAgbV9jb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fb3duZXItPnZpZXdwb3J0VmlzaWJs
ZVJlY3QoKS53aWR0aCgpKSwgc3RkOjptYXgoMSwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVj
dCgpLmhlaWdodCgpKSk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRhdGVF
bnRpcmVMYXllcigpOworICAgIG1fcm9vdExheWVyQ29udGVudFVwZGF0ZXItPmludmFsaWRhdGVF
bnRpcmVMYXllcigpOwogCiAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZhY2Ug
dG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKICAgICAvLyBwcm9qZWN0aW9u
IG1hdHJpeCBuZXh0IHRpbWUgdXNlUmVuZGVyU3VyZmFjZSBpcyBjYWxsZWQuCkBAIC01OTgsNiAr
NjA2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgIHsK
ICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3luY2hyb25pemVU
cmVlcyIsIHRoaXMsIDApOwogICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCksIG1fcm9vdENDTGF5ZXJJbXBsLmdl
dCgpKTsKKyAgICAgICAgbV9yb290TGF5ZXJDb250ZW50VXBkYXRlci0+cHVzaFByb3BlcnRpZXNU
byhtX3Jvb3RMYXllckNvbnRlbnRUaWxlci5nZXQoKSk7CiAgICAgfQogCiAKQEAgLTY1Miw3ICs2
NjEsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVyQ2hy
b21pdW0qIHJvb3RMYXllcikKICAgICAvLyBVcGRhdGUgY29tcG9zaXRvciByZXNvdXJjZXMgZm9y
IHJvb3QgbGF5ZXIuCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVMYXllcjo6dXBkYXRlUm9vdCIsIHRoaXMsIDApOwotICAgICAgICBtX3Jv
b3RMYXllckNvbnRlbnRUaWxlci0+dXBkYXRlUmVjdChtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVy
LmdldCgpKTsKKyAgICAgICAgbV9yb290TGF5ZXJDb250ZW50VXBkYXRlci0+dXBkYXRlUmVjdCht
X2NvbnRleHQuZ2V0KCksIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOwogICAgIH0K
IAogICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCh0ZXh0
dXJlTWVtb3J5UmVjbGFpbUxpbWl0Qnl0ZXMpOwpAQCAtOTgyLDcgKzk5MSw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21p
dW0qIGxheWVyKQogICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5yZXBs
aWNhTGF5ZXIoKSk7CiAKICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICBs
YXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOworICAgICAgICBsYXllci0+dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0KCkpOwogfQogCiBNYW5hZ2VkVGV4dHVyZSogTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKQpAQCAtMTE1OCw3
ICsxMTY3LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRP
YmplY3RzKCkKICAgICAvLyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhlciBwcm9n
cmFtcyBhcmUgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLgogICAgIG1fc2hhcmVkR2Vv
bWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkpOwog
ICAgIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNl
OjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIG1fdGlsZXJQcm9ncmFtID0gYWRvcHRQ
dHIobmV3IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAg
ICBtX3RpbGVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ0xheWVyVGlsZXJJbXBsOjpQcm9ncmFt
KG1fY29udGV4dC5nZXQoKSkpOwogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5mbHVzaCgpKTsKIApAQCAtMTIxNCw3ICsxMjIzLDcgQEAgY29uc3QgQ0NSZW5kZXJTdXJmYWNl
OjpNYXNrUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJmYWNlTWFza1By
b2cKICAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0uZ2V0KCk7CiB9CiAKLWNv
bnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0
aWxlclByb2dyYW0oKQorY29uc3QgQ0NMYXllclRpbGVySW1wbDo6UHJvZ3JhbSogTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp0aWxlclByb2dyYW0oKQogewogICAgIEFTU0VSVChtX3RpbGVyUHJvZ3Jh
bSk7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewpAQCAtMTIyNCwx
MCArMTIzMywxMCBAQCBjb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0qIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtKCkKICAgICByZXR1cm4gbV90aWxlclByb2dyYW0u
Z2V0KCk7CiB9CiAKLWNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGUqIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZSgpCitjb25zdCBDQ0xheWVy
VGlsZXJJbXBsOjpQcm9ncmFtU3dpenpsZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclBy
b2dyYW1Td2l6emxlKCkKIHsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dpenpsZSkKLSAgICAg
ICAgbV90aWxlclByb2dyYW1Td2l6emxlID0gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1
bTo6UHJvZ3JhbVN3aXp6bGUobV9jb250ZXh0LmdldCgpKSk7CisgICAgICAgIG1fdGlsZXJQcm9n
cmFtU3dpenpsZSA9IGFkb3B0UHRyKG5ldyBDQ0xheWVyVGlsZXJJbXBsOjpQcm9ncmFtU3dpenps
ZShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dpenpsZS0+aW5p
dGlhbGl6ZWQoKSkgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp0aWxlclByb2dyYW1Td2l6emxlOjppbml0aWFsaXplIiwgdGhpcywgMCk7CiAgICAgICAgIG1f
dGlsZXJQcm9ncmFtU3dpenpsZS0+aW5pdGlhbGl6ZSgpOwpAQCAtMTIzNSwxMCArMTI0NCwxMCBA
QCBjb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlKiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aQogICAgIHJldHVybiBtX3RpbGVyUHJvZ3JhbVN3aXp6
bGUuZ2V0KCk7CiB9CiAKLWNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBKiBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbUFBKCkKK2NvbnN0IENDTGF5ZXJUaWxlcklt
cGw6OlByb2dyYW1BQSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQSgpCiB7
CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbUFBKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbUFBID0g
YWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBKG1fY29udGV4dC5nZXQo
KSkpOworICAgICAgICBtX3RpbGVyUHJvZ3JhbUFBID0gYWRvcHRQdHIobmV3IENDTGF5ZXJUaWxl
ckltcGw6OlByb2dyYW1BQShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBpZiAoIW1fdGlsZXJQcm9n
cmFtQUEtPmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtQUE6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKICAgICAg
ICAgbV90aWxlclByb2dyYW1BQS0+aW5pdGlhbGl6ZSgpOwpAQCAtMTI0NiwxMCArMTI1NSwxMCBA
QCBjb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1BQSogTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp0aWxlclByb2dyYW1BQSgpCiAgICAgcmV0dXJuIG1fdGlsZXJQcm9ncmFtQUEuZ2V0KCk7
CiB9CiAKLWNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGVBQSogTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlQUEoKQorY29uc3QgQ0NMYXllclRp
bGVySW1wbDo6UHJvZ3JhbVN3aXp6bGVBQSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclBy
b2dyYW1Td2l6emxlQUEoKQogewogICAgIGlmICghbV90aWxlclByb2dyYW1Td2l6emxlQUEpCi0g
ICAgICAgIG1fdGlsZXJQcm9ncmFtU3dpenpsZUFBID0gYWRvcHRQdHIobmV3IExheWVyVGlsZXJD
aHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGVBQShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgbV90
aWxlclByb2dyYW1Td2l6emxlQUEgPSBhZG9wdFB0cihuZXcgQ0NMYXllclRpbGVySW1wbDo6UHJv
Z3JhbVN3aXp6bGVBQShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFt
U3dpenpsZUFBLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJl
bmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGVBQTo6aW5pdGlhbGl6ZSIsIHRoaXMs
IDApOwogICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQS0+aW5pdGlhbGl6ZSgpOwpAQCAt
MTMyMSw2ICsxMzMwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFy
ZWRPYmplY3RzKCkKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kZWxl
dGVGcmFtZWJ1ZmZlcihtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKIAogICAgIC8vIENsZWFy
IHRpbGVycyBiZWZvcmUgdGhlIHRleHR1cmUgbWFuYWdlciwgYXMgdGhleSBoYXZlIHJlZmVyZW5j
ZXMgdG8gdGV4dHVyZXMuCisgICAgbV9yb290TGF5ZXJDb250ZW50VXBkYXRlci5jbGVhcigpOwog
ICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLmNsZWFyKCk7CiAKICAgICBtX2NvbnRlbnRzVGV4
dHVyZU1hbmFnZXIuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5k
ZXggZmE3MGNmNmI2OGNhNmY5NjVlNTI0MThlZTM2OWNlZGJiOWM3YWU4Yi4uNTQ3YzUyMTc1YjYz
NGUyOWNmODMwMzkxYWU2YjQwMDJjNTAwZGM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgKQEAgLTM3LDExICszNywxMiBAQAogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIK
LSNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclRpbGVyVXBk
YXRlci5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0ND
Q2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVGlsZXJJbXBs
LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NQbHVn
aW5MYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCkBAIC0xMjIs
MTAgKzEyMywxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ0NIZWFkc1VwRGlzcGxheTo6UHJvZ3Jh
bSogaGVhZHNVcERpc3BsYXlQcm9ncmFtKCk7CiAgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQ
cm9ncmFtKiByZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDUmVuZGVyU3VyZmFj
ZTo6TWFza1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOwotICAgIGNvbnN0IExh
eWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbSogdGlsZXJQcm9ncmFtKCk7Ci0gICAgY29uc3QgTGF5
ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZSogdGlsZXJQcm9ncmFtU3dpenpsZSgpOwot
ICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBKiB0aWxlclByb2dyYW1BQSgp
OwotICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGVBQSogdGlsZXJQ
cm9ncmFtU3dpenpsZUFBKCk7CisgICAgY29uc3QgQ0NMYXllclRpbGVySW1wbDo6UHJvZ3JhbSog
dGlsZXJQcm9ncmFtKCk7CisgICAgY29uc3QgQ0NMYXllclRpbGVySW1wbDo6UHJvZ3JhbVN3aXp6
bGUqIHRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKKyAgICBjb25zdCBDQ0xheWVyVGlsZXJJbXBsOjpQ
cm9ncmFtQUEqIHRpbGVyUHJvZ3JhbUFBKCk7CisgICAgY29uc3QgQ0NMYXllclRpbGVySW1wbDo6
UHJvZ3JhbVN3aXp6bGVBQSogdGlsZXJQcm9ncmFtU3dpenpsZUFBKCk7CiAgICAgY29uc3QgQ0ND
YW52YXNMYXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3JhbSgpOwogICAgIGNvbnN0
IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwbHVnaW5MYXllclByb2dyYW0oKTsKICAgICBj
b25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbSogdmlkZW9MYXllclJHQkFQcm9ncmFt
KCk7CkBAIC0xNTIsNiArMTUzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMYXllclJlbmRl
cmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKIAorICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJl
Rm9ybWF0KCk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGJvb2wgc19pblBhaW50TGF5
ZXJDb250ZW50czsKICNlbmRpZgpAQCAtMjA1LDcgKzIwOCw4IEBAIHByaXZhdGU6CiAgICAgLy8g
RklYTUU6IHNwbGl0IHRoZSB0ZXh0dXJlIHVwZGF0ZXIgYW5kIHRpbGVyIGludG8gdHdvIHBhcnRz
LiBUaGVuLCBrZWVwIHRoZQogICAgIC8vIGltcGwgaGVyZSBhbmQgcHV0IHRoZSBwYWludGluZy1z
aWRlIG9uIHRoZSBMYXllclRyZWVIb3N0LgogICAgIE93blB0cjxMYXllclRleHR1cmVVcGRhdGVy
PiBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyOwotICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21p
dW0+IG1fcm9vdExheWVyQ29udGVudFRpbGVyOworICAgIE93blB0cjxMYXllclRpbGVyVXBkYXRl
cj4gbV9yb290TGF5ZXJDb250ZW50VXBkYXRlcjsKKyAgICBPd25QdHI8Q0NMYXllclRpbGVySW1w
bD4gbV9yb290TGF5ZXJDb250ZW50VGlsZXI7CiAKICAgICBPd25QdHI8TGF5ZXJMaXN0PiBtX2Nv
bXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKIApAQCAtMjIyLDEwICsyMjYsMTAgQEAgcHJp
dmF0ZToKICAgICBPd25QdHI8R2VvbWV0cnlCaW5kaW5nPiBtX3NoYXJlZEdlb21ldHJ5OwogICAg
IE93blB0cjxMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtPiBtX2JvcmRlclByb2dyYW07CiAg
ICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0+IG1faGVhZHNVcERpc3BsYXlQcm9n
cmFtOwotICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0+IG1fdGlsZXJQcm9n
cmFtOwotICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlPiBtX3Rp
bGVyUHJvZ3JhbVN3aXp6bGU7Ci0gICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3Jh
bUFBPiBtX3RpbGVyUHJvZ3JhbUFBOwotICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06OlBy
b2dyYW1Td2l6emxlQUE+IG1fdGlsZXJQcm9ncmFtU3dpenpsZUFBOworICAgIE93blB0cjxDQ0xh
eWVyVGlsZXJJbXBsOjpQcm9ncmFtPiBtX3RpbGVyUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NMYXll
clRpbGVySW1wbDo6UHJvZ3JhbVN3aXp6bGU+IG1fdGlsZXJQcm9ncmFtU3dpenpsZTsKKyAgICBP
d25QdHI8Q0NMYXllclRpbGVySW1wbDo6UHJvZ3JhbUFBPiBtX3RpbGVyUHJvZ3JhbUFBOworICAg
IE93blB0cjxDQ0xheWVyVGlsZXJJbXBsOjpQcm9ncmFtU3dpenpsZUFBPiBtX3RpbGVyUHJvZ3Jh
bVN3aXp6bGVBQTsKICAgICBPd25QdHI8Q0NDYW52YXNMYXllckltcGw6OlByb2dyYW0+IG1fY2Fu
dmFzTGF5ZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbT4g
bV9wbHVnaW5MYXllclByb2dyYW07CiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFza1By
b2dyYW0+IG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBk
YXRlci5oCmluZGV4IDIxZDUyZDAyYTVhMjFiNjExMWY3OGI1NDBhZWM2OGMzNDdhMDllZmEuLmU0
YjAzYzVmNTg0M2UzNzg2YzliZGM2NzQzMTY3NDQ3MzllZTgwZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyLmgKQEAgLTc4LDQgKzc4LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjZW5kaWYg
Ly8gTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3Bw
CmluZGV4IDdmZDk2ZjkyM2I2MDcwMDNmZTM0OTEwOWZhOThiMTcyY2RiMGYxNGIuLjQzMjE4Njgz
YWUxNDFkMTYwMzQ4Yzk2NDE0NTIxODIxOTY2MjIwOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNo
cm9taXVtLmNwcApAQCAtMzAsNTAgKzMwLDM0IEBACiAKICNpbmNsdWRlICJMYXllclRpbGVyQ2hy
b21pdW0uaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCi0jaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNp
bmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCi0jaW5jbHVkZSAiVHJhY2VFdmVudC5oIgog
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYg
RmxvYXRQb2ludDNEIEVkZ2U7Ci0KLVBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBMYXll
clRpbGVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCi17
Ci0gICAgaWYgKCFsYXllclJlbmRlcmVyIHx8IHRpbGVTaXplLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJv
bWl1bShsYXllclJlbmRlcmVyLCB0aWxlU2l6ZSwgYm9yZGVyKSk7Ci19Ci0KLUxheWVyVGlsZXJD
aHJvbWl1bTo6TGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uIGJvcmRl
cikKLSAgICA6IG1fdGV4dHVyZUZvcm1hdChQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1h
dChsYXllclJlbmRlcmVyLT5jb250ZXh0KCkpKQotICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCitM
YXllclRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJDaHJvbWl1bShHQzNEZW51bSB0ZXh0dXJlRm9y
bWF0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQor
ICAgIDogbV9za2lwc0RyYXcoZmFsc2UpCisgICAgLCBtX3RleHR1cmVGb3JtYXQodGV4dHVyZUZv
cm1hdCkKICAgICAsIG1fdGV4dHVyZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVwZGF0ZXI6Oklu
dmFsaWRPcmllbnRhdGlvbikKICAgICAsIG1fc2FtcGxlZFRleGVsRm9ybWF0KExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEludmFsaWQpCiAgICAgLCBtX3RpbGluZ0RhdGEo
bWF4KHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXplLmhlaWdodCgpKSwgMCwgMCwgYm9yZGVyID09
IEhhc0JvcmRlclRleGVscykKLSAgICAsIG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKQog
ewogICAgIHNldFRpbGVTaXplKHRpbGVTaXplKTsKIH0KIAotTGF5ZXJUaWxlckNocm9taXVtOjp+
TGF5ZXJUaWxlckNocm9taXVtKCkKK0xheWVyVGlsZXJDaHJvbWl1bTo6TGF5ZXJUaWxlckNocm9t
aXVtKCkKKyAgICA6IG1fc2tpcHNEcmF3KGZhbHNlKQorICAgICwgbV90ZXh0dXJlRm9ybWF0KEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pCisgICAgLCBtX3RleHR1cmVPcmllbnRhdGlv
bihMYXllclRleHR1cmVVcGRhdGVyOjpJbnZhbGlkT3JpZW50YXRpb24pCisgICAgLCBtX3NhbXBs
ZWRUZXhlbEZvcm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRJbnZh
bGlkKQogewotICAgIHJlc2V0KCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEKiBMYXllclRpbGVy
Q2hyb21pdW06OmxheWVyUmVuZGVyZXJDb250ZXh0KCkgY29uc3QKK0xheWVyVGlsZXJDaHJvbWl1
bTo6fkxheWVyVGlsZXJDaHJvbWl1bSgpCiB7Ci0gICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7
Ci0gICAgcmV0dXJuIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOworICAgIHJlc2V0KCk7CiB9
CiAKIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKQpAQCAtODcsNjEgKzcxLDIxIEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpzZXRUaWxl
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIG1fdGlsaW5nRGF0YS5zZXRNYXhUZXh0dXJl
U2l6ZShtYXgoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CiB9CiAKLU1hbmFnZWRUZXh0
dXJlKiBMYXllclRpbGVyQ2hyb21pdW06OmdldFNpbmdsZVRleHR1cmUoKQordm9pZCBMYXllclRp
bGVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oTGF5ZXJUaWxlckNocm9taXVtKiB0aWxlcikg
Y29uc3QKIHsKLSAgICBpZiAobV90aWxpbmdEYXRhLm51bVRpbGVzKCkgIT0gMSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBUaWxlKiB0aWxlID0gdGlsZUF0KDAsIDApOwotICAgIHJldHVybiB0
aWxlID8gdGlsZS0+dGV4dHVyZSgpIDogMDsKKyAgICB0aWxlci0+bV9za2lwc0RyYXcgPSBtX3Nr
aXBzRHJhdzsKKyAgICB0aWxlci0+bV90ZXh0dXJlRm9ybWF0ID0gbV90ZXh0dXJlRm9ybWF0Owor
ICAgIHRpbGVyLT5tX3RpbGVTaXplID0gbV90aWxlU2l6ZTsKKyAgICB0aWxlci0+bV9sYXllclBv
c2l0aW9uID0gbV9sYXllclBvc2l0aW9uOworICAgIHRpbGVyLT5tX3RleHR1cmVPcmllbnRhdGlv
biA9IG1fdGV4dHVyZU9yaWVudGF0aW9uOworICAgIHRpbGVyLT5tX3NhbXBsZWRUZXhlbEZvcm1h
dCA9IG1fc2FtcGxlZFRleGVsRm9ybWF0OworICAgIHRpbGVyLT5tX3RpbGluZ0RhdGEgPSBtX3Rp
bGluZ0RhdGE7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNldCgpCiB7CiAgICAg
bV90aWxlcy5jbGVhcigpOwotICAgIG1fdW51c2VkVGlsZXMuY2xlYXIoKTsKICAgICBtX3RpbGlu
Z0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwotICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOwot
ICAgIG1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLX0KLQotTGF5ZXJUaWxlckNocm9taXVtOjpU
aWxlKiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQotewotICAg
IEFTU0VSVCghdGlsZUF0KGksIGopKTsKLQotICAgIFJlZlB0cjxUaWxlPiB0aWxlOwotICAgIGlm
IChtX3VudXNlZFRpbGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgdGlsZSA9IG1fdW51c2VkVGls
ZXMubGFzdCgpLnJlbGVhc2UoKTsKLSAgICAgICAgbV91bnVzZWRUaWxlcy5yZW1vdmVMYXN0KCk7
Ci0gICAgICAgIEFTU0VSVCh0aWxlLT5yZWZDb3VudCgpID09IDEpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZW50
c1RleHR1cmVNYW5hZ2VyKCk7Ci0gICAgICAgIHRpbGUgPSBhZG9wdFJlZihuZXcgVGlsZShNYW5h
Z2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7Ci0gICAgfQotICAgIG1fdGlsZXMuYWRkKG1h
a2VfcGFpcihpLCBqKSwgdGlsZSk7Ci0KLSAgICB0aWxlLT5tb3ZlVG8oaSwgaik7Ci0gICAgdGls
ZS0+bV9kaXJ0eUxheWVyUmVjdCA9IHRpbGVMYXllclJlY3QodGlsZS5nZXQoKSk7Ci0KLSAgICBy
ZXR1cm4gdGlsZS5nZXQoKTsKLX0KLQotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRh
dGVUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBpZiAoIW1fdGlsZXMu
c2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8VGlsZU1hcEtleT4gcmVtb3Zl
S2V5czsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ZXIgIT0gbV90aWxlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFRpbGUqIHRpbGUgPSBp
dGVyLT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlQ29udGVu
dFJlY3QodGlsZSk7Ci0gICAgICAgIGlmICh0aWxlUmVjdC5pbnRlcnNlY3RzKGNvbnRlbnRSZWN0
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZW1vdmVLZXlzLmFwcGVuZChpdGVy
LT5maXJzdCk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVLZXlz
LnNpemUoKTsgKytpKQotICAgICAgICBtX3VudXNlZFRpbGVzLmFwcGVuZChtX3RpbGVzLnRha2Uo
cmVtb3ZlS2V5c1tpXSkpOwogfQogCiB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJl
Y3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQmIGxlZnQsIGlu
dCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKQEAgLTE3MiwxMyArMTE2LDYg
QEAgSW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OmxheWVyUmVjdFRvQ29udGVudFJlY3QoY29u
c3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBjb24KICAgICByZXR1cm4gY29udGVudFJlY3Q7CiB9CiAK
LUxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZSogTGF5ZXJUaWxlckNocm9taXVtOjp0aWxlQXQoaW50
IGksIGludCBqKSBjb25zdAotewotICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChtYWtlX3Bh
aXIoaSwgaikpLmdldCgpOwotICAgIEFTU0VSVCghdGlsZSB8fCB0aWxlLT5yZWZDb3VudCgpID09
IDEpOwotICAgIHJldHVybiB0aWxlOwotfQotCiBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6
dGlsZUNvbnRlbnRSZWN0KGNvbnN0IFRpbGUqIHRpbGUpIGNvbnN0CiB7CiAgICAgSW50UmVjdCBj
b250ZW50UmVjdCA9IHRpbGVMYXllclJlY3QodGlsZSk7CkBAIC0xOTQsMjE1ICsxMzEsMTEgQEAg
SW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OnRpbGVMYXllclJlY3QoY29uc3QgVGlsZSogdGls
ZSkgY29uc3QKICAgICByZXR1cm4gbGF5ZXJSZWN0OwogfQogCi12b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCi17Ci0gICAg
aWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzRHJhdykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZ3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKLQotICAgIC8vIERpcnR5
IHJlY3RzIGFyZSBhbHdheXMgaW4gbGF5ZXIgc3BhY2UsIGFzIHRoZSBsYXllciBjb3VsZCBiZSBy
ZXBvc2l0aW9uZWQKLSAgICAvLyBhZnRlciBpbnZhbGlkYXRpb24uCi0gICAgY29uc3QgSW50UmVj
dCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKLQotICAg
IGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgY29udGVudFJlY3RUb1RpbGVJbmRp
Y2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIGZvciAoaW50
IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7
IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAgICAgICAgVGlsZSogdGlsZSA9IHRpbGVBdChpLCBq
KTsKLSAgICAgICAgICAgIGlmICghdGlsZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIEludFJlY3QgYm91bmQgPSB0aWxlTGF5ZXJSZWN0KHRpbGUpOwotICAgICAgICAg
ICAgYm91bmQuaW50ZXJzZWN0KGxheWVyUmVjdCk7Ci0gICAgICAgICAgICB0aWxlLT5tX2RpcnR5
TGF5ZXJSZWN0LnVuaXRlKGJvdW5kKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBMYXll
clRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVFbnRpcmVMYXllcigpCi17Ci0gICAgZm9yIChUaWxl
TWFwOjppdGVyYXRvciBpdGVyID0gbV90aWxlcy5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXMuZW5k
KCk7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLT5yZWZDb3VudCgpID09
IDEpOwotICAgICAgICBtX3VudXNlZFRpbGVzLmFwcGVuZChpdGVyLT5zZWNvbmQucmVsZWFzZSgp
KTsKLSAgICB9Ci0gICAgbV90aWxlcy5jbGVhcigpOwotCi0gICAgbV90aWxpbmdEYXRhLnNldFRv
dGFsU2l6ZSgwLCAwKTsKLX0KLQotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnByb3RlY3RUaWxl
VGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCi17Ci0gICAgaWYgKGNvbnRlbnRS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbTsKLSAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0KLSAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJv
dHRvbTsgKytqKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kp
IHsKLSAgICAgICAgICAgIFRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7Ci0gICAgICAgICAgICBp
ZiAoIXRpbGUgfHwgIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVTaXplLCBtX3RleHR1
cmVGb3JtYXQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB0aWxl
LT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0
ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVy
ZVVwZGF0ZXIpCi17Ci0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLQotICAgIGlmIChjb250ZW50
UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW52YWxpZGF0ZSBvbGQgdGlsZXMgdGhhdCB3
ZXJlIHByZXZpb3VzbHkgdXNlZCBidXQgYXJlbid0IGluIHVzZSB0aGlzCi0gICAgLy8gZnJhbWUg
c28gdGhhdCB0aGV5IGNhbiBnZXQgcmV1c2VkIGZvciBuZXcgdGlsZXMuCi0gICAgaW52YWxpZGF0
ZVRpbGVzKGNvbnRlbnRSZWN0KTsKLSAgICBncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3Qp
OwotCi0gICAgaWYgKCFudW1UaWxlcygpKSB7Ci0gICAgICAgIG1fdXBkYXRlUmVjdCA9IEludFJl
Y3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSB0aWxlcyBhcyBu
ZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29udGFpbiBhbGwKLSAgICAvLyB0aGUg
ZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24uCi0gICAgSW50UmVjdCBkaXJ0eUxh
eWVyUmVjdDsKLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIGNvbnRlbnRS
ZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsK
LSAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7Ci0gICAgICAgIGZvciAo
aW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgIFRpbGUqIHRpbGUg
PSB0aWxlQXQoaSwgaik7Ci0gICAgICAgICAgICBpZiAoIXRpbGUpCi0gICAgICAgICAgICAgICAg
dGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7Ci0KLSAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVy
ZSgpLT5pc1ZhbGlkKG1fdGlsZVNpemUsIG1fdGV4dHVyZUZvcm1hdCkpCi0gICAgICAgICAgICAg
ICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IHRpbGVMYXllclJlY3QodGlsZSk7Ci0KLSAgICAg
ICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZVNpemUsIG1fdGV4dHVy
ZUZvcm1hdCkpIHsKLSAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgcmVzZXQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGRpcnR5TGF5ZXJSZWN0LnVuaXRlKHRpbGUtPm1fZGlydHlMYXllclJl
Y3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhl
IHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGlsZSBib3VuZGFyaWVzLCBpdAotICAgIC8vIG1h
eSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxlcyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50
IHJlY3QuIFJlY29yZAotICAgIC8vIHRoYXQgb3JpZ2luYWwgcmVjdCBzbyB3ZSBkb24ndCB1cGxv
YWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4KLSAgICBtX3VwZGF0ZVJlY3QgPSBjb250ZW50
UmVjdDsKLQotICAgIG1fcGFpbnRSZWN0ID0gbGF5ZXJSZWN0VG9Db250ZW50UmVjdChkaXJ0eUxh
eWVyUmVjdCk7Ci0gICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgdGV4dHVyZVVwZGF0ZXItPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwg
bV90aWxlU2l6ZSwgbV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpKTsKLX0KLQotdm9pZCBMYXll
clRpbGVyQ2hyb21pdW06OnVwZGF0ZVJlY3QoTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVw
ZGF0ZXIpCi17Ci0gICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0
IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGludmFsaWRh
dGVkIG1pZC11cGRhdGUuCi0gICAgaWYgKCFtX3RpbGluZ0RhdGEudG90YWxTaXplWCgpIHx8ICFt
X3RpbGluZ0RhdGEudG90YWxTaXplWSgpIHx8IG1fdXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW51
bVRpbGVzKCkgfHwgbV9za2lwc0RyYXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKLSAgICBtX3RleHR1
cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRhdGVyLT5vcmllbnRhdGlvbigpOwotICAgIG1fc2Ft
cGxlZFRleGVsRm9ybWF0ID0gdGV4dHVyZVVwZGF0ZXItPnNhbXBsZWRUZXhlbEZvcm1hdChtX3Rl
eHR1cmVGb3JtYXQpOwotCi0gICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBj
b250ZW50UmVjdFRvVGlsZUluZGljZXMobV91cGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAgICAgICAgVGls
ZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSkKLSAgICAgICAg
ICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCF0
aWxlLT5kaXJ0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAv
LyBDYWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgotICAgICAgICAg
ICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdGlsZUNvbnRlbnRSZWN0KHRpbGUpOwotICAgICAgICAg
ICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOwotICAgICAg
ICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5t
X2RpcnR5TGF5ZXJSZWN0KSk7Ci0gICAgICAgICAgICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50
ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbwotICAgICAgICAgICAgLy8gbWFr
ZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgotICAg
ICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3QpOwotICAgICAgICAgICAg
aWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBBU1NFUlQodGlsZS0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOwotCi0gICAg
ICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8u
Ci0gICAgICAgICAgICBJbnRSZWN0IGRlc3RSZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgpIC0g
YW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5zaXpl
KCkpOwotICAgICAgICAgICAgaWYgKGRlc3RSZWN0LngoKSA8IDApCi0gICAgICAgICAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgICAgIGlmIChkZXN0UmVjdC55KCkgPCAwKQotICAgICAgICAgICAg
ICAgIENSQVNIKCk7Ci0KLSAgICAgICAgICAgIC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3Rhbmds
ZSB0byB0aGlzIHRpbGUncyBkaXJ0eSByZWN0YW5nbGUuCi0gICAgICAgICAgICBJbnRQb2ludCBw
YWludE9mZnNldChzb3VyY2VSZWN0LngoKSAtIG1fcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55
KCkgLSBtX3BhaW50UmVjdC55KCkpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LngoKSA8
IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNl
dC55KCkgPCAwKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAocGFp
bnRPZmZzZXQueCgpICsgZGVzdFJlY3Qud2lkdGgoKSA+IG1fcGFpbnRSZWN0LndpZHRoKCkpCi0g
ICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkg
KyBkZXN0UmVjdC5oZWlnaHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQotICAgICAgICAgICAg
ICAgIENSQVNIKCk7Ci0KLSAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUo
Y29udGV4dCk7Ci0gICAgICAgICAgICBjb25zdCBHQzNEaW50IGZpbHRlciA9IG1fdGlsaW5nRGF0
YS5ib3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIgOiBHcmFwaGljc0Nv
bnRleHQzRDo6TkVBUkVTVDsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsKLSAgICAgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCkpOwotCi0gICAgICAgICAgICB0ZXh0dXJlVXBkYXRlci0+dXBkYXRlVGV4
dHVyZVJlY3QodGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7Ci0gICAgICAg
ICAgICB0aWxlLT5jbGVhckRpcnR5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgTGF5
ZXJUaWxlckNocm9taXVtOjpzZXRMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBsYXllclBv
c2l0aW9uKQogewogICAgIG1fbGF5ZXJQb3NpdGlvbiA9IGxheWVyUG9zaXRpb247CiB9CiAKLXZv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5
KQotewotICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV90aWxlcy5zaXplKCkgfHwgY29udGVudFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBkZWZpbmVkKE9TX0NIUk9NRU9T
KQotICAgIC8vIEZJWE1FOiBEaXNhYmxlIGFudGktYWxpYXNpbmcgdG8gd29ya2Fyb3VuZCBicm9r
ZW4gZHJpdmVyLgotICAgIGJvb2wgdXNlQUEgPSBmYWxzZTsKLSNlbHNlCi0gICAgLy8gVXNlIGFu
dGktYWxpYXNpbmcgcHJvZ3JhbXMgd2hlbiBib3JkZXIgdGV4ZWxzIGFyZSBwcmVzZXQgYW5kIHRy
YW5zZm9ybQotICAgIC8vIGlzIG5vdCBhbiBpbnRlZ2VyIHRyYW5zbGF0aW9uLgotICAgIGJvb2wg
dXNlQUEgPSAobV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpICYmICFnbG9iYWxUcmFuc2Zvcm0u
aXNJbnRlZ2VyVHJhbnNsYXRpb24oKSk7Ci0jZW5kaWYKLQotICAgIHN3aXRjaCAobV9zYW1wbGVk
VGV4ZWxGb3JtYXQpIHsKLSAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhl
bEZvcm1hdFJHQkE6Ci0gICAgICAgIGlmICh1c2VBQSkKLSAgICAgICAgICAgIGRyYXdUaWxlcyhj
b250ZW50UmVjdCwgZ2xvYmFsVHJhbnNmb3JtLCBvcGFjaXR5LCBsYXllclJlbmRlcmVyKCktPnRp
bGVyUHJvZ3JhbUFBKCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtQUEoKS0+ZnJhZ21l
bnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIGxheWVyUmVuZGVyZXIo
KS0+dGlsZXJQcm9ncmFtQUEoKS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRyYXdUaWxlcyhjb250ZW50UmVjdCwgZ2xvYmFsVHJh
bnNmb3JtLCBvcGFjaXR5LCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbSgpLCAtMSwgLTEp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRU
ZXhlbEZvcm1hdEJHUkE6Ci0gICAgICAgIGlmICh1c2VBQSkKLSAgICAgICAgICAgIGRyYXdUaWxl
cyhjb250ZW50UmVjdCwgZ2xvYmFsVHJhbnNmb3JtLCBvcGFjaXR5LCBsYXllclJlbmRlcmVyKCkt
PnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpLCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbVN3
aXp6bGVBQSgpLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24o
KSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6emxlQUEoKS0+ZnJhZ21lbnRTaGFk
ZXIoKS5lZGdlTG9jYXRpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRyYXdUaWxl
cyhjb250ZW50UmVjdCwgZ2xvYmFsVHJhbnNmb3JtLCBvcGFjaXR5LCBsYXllclJlbmRlcmVyKCkt
PnRpbGVyUHJvZ3JhbVN3aXp6bGUoKSwgLTEsIC0xKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCiB2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6Z3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KQogewogICAgIC8vIEdyb3cgdGhlIHRpbGUgYXJyYXkgdG8gY29udGFpbiB0aGlzIGNv
bnRlbnQgcmVjdC4KQEAgLTQxNCwyNTUgKzE0Nyw2IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVt
Ojpncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgbV90
aWxpbmdEYXRhLnNldFRvdGFsU2l6ZShuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkp
OwogfQogCi1zdGF0aWMgYm9vbCBpc0NDVyhjb25zdCBGbG9hdFF1YWQmIHF1YWQpCi17Ci0gICAg
RmxvYXRQb2ludCB2MSA9IEZsb2F0UG9pbnQocXVhZC5wMigpLngoKSAtIHF1YWQucDEoKS54KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5wMigpLnkoKSAtIHF1YWQucDEo
KS55KCkpOwotICAgIEZsb2F0UG9pbnQgdjIgPSBGbG9hdFBvaW50KHF1YWQucDMoKS54KCkgLSBx
dWFkLnAyKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWQucDMoKS55
KCkgLSBxdWFkLnAyKCkueSgpKTsKLSAgICByZXR1cm4gKHYxLngoKSAqIHYyLnkoKSAtIHYxLnko
KSAqIHYyLngoKSkgPCAwOwotfQotCi1zdGF0aWMgRWRnZSBjb21wdXRlRWRnZShjb25zdCBGbG9h
dFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBxLCBmbG9hdCBzaWduKQotewotICAgIEFTU0VS
VChwICE9IHEpOwotCi0gICAgRmxvYXRQb2ludCB0YW5nZW50KHAueSgpIC0gcS55KCksIHEueCgp
IC0gcC54KCkpOwotICAgIGZsb2F0IHNjYWxlID0gc2lnbiAvIHRhbmdlbnQubGVuZ3RoKCk7Ci0g
ICAgZmxvYXQgY3Jvc3MyID0gcC54KCkgKiBxLnkoKSAtIHEueCgpICogcC55KCk7Ci0KLSAgICBy
ZXR1cm4gRWRnZSh0YW5nZW50LngoKSAqIHNjYWxlLAotICAgICAgICAgICAgICAgIHRhbmdlbnQu
eSgpICogc2NhbGUsCi0gICAgICAgICAgICAgICAgY3Jvc3MyICogc2NhbGUpOwotfQotCi1zdGF0
aWMgRmxvYXRQb2ludCBpbnRlcnNlY3QoY29uc3QgRWRnZSYgYSwgY29uc3QgRWRnZSYgYikKLXsK
LSAgICByZXR1cm4gRmxvYXRQb2ludCgKLSAgICAgICAgKGEueSgpICogYi56KCkgLSBiLnkoKSAq
IGEueigpKSAvIChhLngoKSAqIGIueSgpIC0gYi54KCkgKiBhLnkoKSksCi0gICAgICAgIChhLngo
KSAqIGIueigpIC0gYi54KCkgKiBhLnooKSkgLyAoYi54KCkgKiBhLnkoKSAtIGEueCgpICogYi55
KCkpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6
ZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFt
LCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbikKLXsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgobGF5ZXJSZW5kZXJlcigpLT53aW5kb3dN
YXRyaXgoKSAqIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpICogZ2xvYmFsVHJh
bnNmb3JtKTsKLQotICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgWiBjb21wb25lbnQuCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4WFlXID0KLSAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXgobWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIDAsIG1hdHJpeC5tMTQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIDAsIG1h
dHJpeC5tMjQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0zMSgpLCBt
YXRyaXgubTMyKCksIDEsIG1hdHJpeC5tMzQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIDAsIG1hdHJpeC5tNDQoKSk7Ci0KLSAgICAv
LyBEb24ndCBkcmF3IGFueSB0aWxlcyB3aGVuIG1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZS4KLSAg
ICBpZiAoIW1hdHJpeFhZVy5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZSA9IG1hdHJpeFhZVy5pbnZlcnNlKCk7Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Ci0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7
Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0KLSAgICAvLyBN
YXAgY29udGVudCByZWN0YW5nbGUgdG8gZGV2aWNlIHNwYWNlLgotICAgIEZsb2F0UXVhZCBkZXZp
Y2VRdWFkID0gbWF0cml4Lm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0KSk7Ci0KLSAgICAv
LyBDb3VudGVyLWNsb2Nrd2lzZT8KLSAgICBmbG9hdCBzaWduID0gaXNDQ1coZGV2aWNlUXVhZCkg
PyAtMSA6IDE7Ci0KLSAgICAvLyBDb21wdXRlIG91dGVyIGVkZ2VzLgotICAgIEVkZ2UgbGVmdEVk
Z2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnA0KCksIGRldmljZVF1YWQucDEoKSwgc2lnbik7
Ci0gICAgRWRnZSByaWdodEVkZ2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnAyKCksIGRldmlj
ZVF1YWQucDMoKSwgc2lnbik7Ci0gICAgRWRnZSB0b3BFZGdlID0gY29tcHV0ZUVkZ2UoZGV2aWNl
UXVhZC5wMSgpLCBkZXZpY2VRdWFkLnAyKCksIHNpZ24pOwotICAgIEVkZ2UgYm90dG9tRWRnZSA9
IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDMoKSwgZGV2aWNlUXVhZC5wNCgpLCBzaWduKTsKLQot
ICAgIGlmIChlZGdlTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgLy8gTW92ZSBvdXRlciBlZGdl
cyB0byBlbnN1cmUgdGhhdCBhbGwgcGFydGlhbGx5IGNvdmVyZWQgcGl4ZWxzIGFyZQotICAgICAg
ICAvLyBwcm9jZXNzZWQuCi0gICAgICAgIGxlZnRFZGdlLm1vdmUoMCwgMCwgMC41Zik7Ci0gICAg
ICAgIHJpZ2h0RWRnZS5tb3ZlKDAsIDAsIDAuNWYpOwotICAgICAgICB0b3BFZGdlLm1vdmUoMCwg
MCwgMC41Zik7Ci0gICAgICAgIGJvdHRvbUVkZ2UubW92ZSgwLCAwLCAwLjVmKTsKLQotICAgICAg
ICBmbG9hdCBlZGdlWzEyXTsKLSAgICAgICAgZWRnZVswXSA9IGxlZnRFZGdlLngoKTsKLSAgICAg
ICAgZWRnZVsxXSA9IGxlZnRFZGdlLnkoKTsKLSAgICAgICAgZWRnZVsyXSA9IGxlZnRFZGdlLnoo
KTsKLSAgICAgICAgZWRnZVszXSA9IHRvcEVkZ2UueCgpOwotICAgICAgICBlZGdlWzRdID0gdG9w
RWRnZS55KCk7Ci0gICAgICAgIGVkZ2VbNV0gPSB0b3BFZGdlLnooKTsKLSAgICAgICAgZWRnZVs2
XSA9IHJpZ2h0RWRnZS54KCk7Ci0gICAgICAgIGVkZ2VbN10gPSByaWdodEVkZ2UueSgpOwotICAg
ICAgICBlZGdlWzhdID0gcmlnaHRFZGdlLnooKTsKLSAgICAgICAgZWRnZVs5XSA9IGJvdHRvbUVk
Z2UueCgpOwotICAgICAgICBlZGdlWzEwXSA9IGJvdHRvbUVkZ2UueSgpOwotICAgICAgICBlZGdl
WzExXSA9IGJvdHRvbUVkZ2UueigpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTNmdihlZGdlTG9jYXRpb24sIGVkZ2UsIDQpKTsKLSAgICB9Ci0KLSAgICBFZGdlIHByZXZF
ZGdlWSA9IHRvcEVkZ2U7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAg
IGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3Qo
Y29udGVudFJlY3QpOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsK
LSAgICAgICAgRWRnZSBwcmV2RWRnZVggPSBsZWZ0RWRnZTsKLQotICAgICAgICBFZGdlIGVkZ2VZ
ID0gYm90dG9tRWRnZTsKLSAgICAgICAgaWYgKGogPCAobV90aWxpbmdEYXRhLm51bVRpbGVzWSgp
IC0gMSkpIHsKLSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB1bmlvblJlY3QobV90aWxp
bmdEYXRhLnRpbGVCb3VuZHMobV90aWxpbmdEYXRhLnRpbGVJbmRleCgwLCBqKSksIG1fdGlsaW5n
RGF0YS50aWxlQm91bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5kZXgobV90aWxpbmdEYXRhLm51bVRp
bGVzWCgpIC0gMSwgaikpKTsKLSAgICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXllclJl
Y3QpOwotCi0gICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHJvd3MuCi0gICAgICAgICAgICBpZiAo
dGlsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQb3NpdGlvbi55
KCkpOwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJl
Y3QubWF4WSgpKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QueCgpLCB0aWxl
UmVjdC5tYXhZKCkpOwotCi0gICAgICAgICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFj
ZS4KLSAgICAgICAgICAgIHAxID0gbWF0cml4Lm1hcFBvaW50KHAxKTsKLSAgICAgICAgICAgIHAy
ID0gbWF0cml4Lm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgLy8gQ29tcHV0ZSBob3Jpem9u
dGFsIGVkZ2UuCi0gICAgICAgICAgICBlZGdlWSA9IGNvbXB1dGVFZGdlKHAxLCBwMiwgc2lnbik7
Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytp
KSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAgICAgICAg
aWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBBU1NF
UlQodGlsZS0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOwotCi0gICAgICAgICAgICB0aWxlLT50
ZXh0dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRleHQpOwotCi0gICAgICAgICAgICAvLyBEb24ndCB1
c2UgdGlsZUNvbnRlbnRSZWN0IGhlcmUsIGFzIHRoYXQgY29udGFpbnMgdGhlIGZ1bGwKLSAgICAg
ICAgICAgIC8vIHJlY3Qgd2l0aCBib3JkZXIgdGV4ZWxzIHdoaWNoIHNob3VsZG4ndCBiZSBkcmF3
bi4KLSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5k
cyhtX3RpbGluZ0RhdGEudGlsZUluZGV4KHRpbGUtPmkoKSwgdGlsZS0+aigpKSk7Ci0gICAgICAg
ICAgICBJbnRSZWN0IGRpc3BsYXlSZWN0ID0gdGlsZVJlY3Q7Ci0gICAgICAgICAgICB0aWxlUmVj
dC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKLQotICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiBo
b3cgdGhlIHRvcCBsZWZ0IGhhcyBtb3ZlZCwgc28gdGhlIHRleHR1cmUgY2FuIGJlCi0gICAgICAg
ICAgICAvLyBvZmZzZXQgdGhlIHNhbWUgYW1vdW50LgotICAgICAgICAgICAgSW50U2l6ZSBkaXNw
bGF5T2Zmc2V0ID0gdGlsZVJlY3QubWluWE1pbllDb3JuZXIoKSAtIGRpc3BsYXlSZWN0Lm1pblhN
aW5ZQ29ybmVyKCk7Ci0KLSAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgdGlsZXMuCi0gICAgICAg
ICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQ
b3NpdGlvbi55KCkpOwotCi0gICAgICAgICAgICBGbG9hdFJlY3QgY2xhbXBSZWN0KHRpbGVSZWN0
KTsKLSAgICAgICAgICAgIC8vIENsYW1wIHRleHR1cmUgY29vcmRpbmF0ZXMgdG8gYXZvaWQgc2Ft
cGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIKLSAgICAgICAgICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUg
dGlsZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhlbAotICAgICAgICAgICAgLy8g
bWludXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxheWVycy4gVGhlIHJlc3VsdGluZyBjbGFtcCBy
ZWdpb24KLSAgICAgICAgICAgIC8vIGlzIG1hcHBlZCB0byB0aGUgdW5pdCBzcXVhcmUgYnkgdGhl
IHZlcnRleCBzaGFkZXIgYW5kIG1hcHBlZAotICAgICAgICAgICAgLy8gYmFjayB0byBub3JtYWxp
emVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50IHNoYWRlcgotICAgICAgICAg
ICAgLy8gYWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAwLTEgcmFuZ2UuCi0gICAgICAgICAgICBjb25z
dCBmbG9hdCBlcHNpbG9uID0gMSAvIDEwMjQuMGY7Ci0gICAgICAgICAgICBmbG9hdCBjbGFtcFgg
PSBtaW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVwc2lsb24pOwotICAgICAgICAg
ICAgZmxvYXQgY2xhbXBZID0gbWluKDAuNSwgY2xhbXBSZWN0LmhlaWdodCgpIC8gMi4wIC0gZXBz
aWxvbik7Ci0gICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVgoLWNsYW1wWCk7Ci0gICAgICAg
ICAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUg
Y2xhbXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1pbllDb3JuZXIoKSAtIEZsb2F0UmVjdCh0aWxl
UmVjdCkubWluWE1pbllDb3JuZXIoKTsKLQotICAgICAgICAgICAgRmxvYXRQb2ludCB0ZXhPZmZz
ZXQgPSBtX3RpbGluZ0RhdGEudGV4dHVyZU9mZnNldCh0aWxlLT5pKCksIHRpbGUtPmooKSkgKyBj
bGFtcE9mZnNldCArIEZsb2F0U2l6ZShkaXNwbGF5T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0
IHRpbGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVTaXplLndpZHRoKCkpOwotICAg
ICAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVTaXpl
LmhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gTWFwIGNsYW1waW5nIHJlY3RhbmdsZSB0byB1
bml0IHNxdWFyZS4KLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVggPSAtY2xh
bXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4
VGV4VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOwotICAg
ICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1w
UmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGlsZVJl
Y3QuaGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCB0
byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBmbG9hdCBmcmFn
bWVudFRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAg
ICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zmc2V0LnkoKSAvIHRpbGVIZWln
aHQ7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0
aCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBj
bGFtcFJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OwotCi0gICAgICAgICAgICAvLyBPcGVuR0wg
Y29vcmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgotICAgICAgICAgICAgLy8gSWYgdGlsZSB0
ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0
ZXMuCi0gICAgICAgICAgICBpZiAobV90ZXh0dXJlT3JpZW50YXRpb24gPT0gTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRU
ZXhUcmFuc2xhdGVZID0gMS4wIC0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAg
ICAgIGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEVkZ2UgZWRnZVggPSByaWdodEVkZ2U7Ci0gICAgICAgICAgICBpZiAoaSA8IChtX3RpbGlu
Z0RhdGEubnVtVGlsZXNYKCkgLSAxKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEo
dGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0gICAgICAgICAgICAg
ICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCi0gICAgICAgICAgICAgICAgcDEgPSBt
YXRyaXgubWFwUG9pbnQocDEpOwotICAgICAgICAgICAgICAgIHAyID0gbWF0cml4Lm1hcFBvaW50
KHAyKTsKLQotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVydGljYWwgZWRnZS4KLSAgICAg
ICAgICAgICAgICBlZGdlWCA9IGNvbXB1dGVFZGdlKHAxLCBwMiwgc2lnbik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2UgcXVhZC4KLSAgICAgICAg
ICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkKGludGVyc2VjdChlZGdlWSwgcHJldkVkZ2VYKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdChwcmV2RWRnZVgsIHByZXZF
ZGdlWSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QocHJldkVk
Z2VZLCBlZGdlWCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Qo
ZWRnZVgsIGVkZ2VZKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNl
LgotICAgICAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBpbnZlcnNlLm1hcFF1YWQoZGV2aWNlUXVh
ZCk7Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KLSAgICAgICAgICAg
IHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYgLyB0aWxlUmVjdC5oZWln
aHQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uID09
IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3Jt
IHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAgICAgICAgIC8vIHRoaXMgd2hp
bGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwotICAgICAgICAgICAgICAgIC8v
IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBub24tbmVnYXRp
dmUKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdh
eSB0aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAgIC8vIHNhbXBsaW5nIG91dHNp
ZGUgdGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVu
dFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRU
ZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBmcmFnbWVu
dFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICo9IGZyYWdt
ZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKz0gZnJh
Z21lbnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkg
Kz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9y
bUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwg
ZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudmVy
dGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4
VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKLQotICAgICAg
ICAgICAgZmxvYXQgcG9pbnRbOF07Ci0gICAgICAgICAgICBwb2ludFswXSA9IHF1YWQucDEoKS54
KCk7Ci0gICAgICAgICAgICBwb2ludFsxXSA9IHF1YWQucDEoKS55KCk7Ci0gICAgICAgICAgICBw
b2ludFsyXSA9IHF1YWQucDIoKS54KCk7Ci0gICAgICAgICAgICBwb2ludFszXSA9IHF1YWQucDIo
KS55KCk7Ci0gICAgICAgICAgICBwb2ludFs0XSA9IHF1YWQucDMoKS54KCk7Ci0gICAgICAgICAg
ICBwb2ludFs1XSA9IHF1YWQucDMoKS55KCk7Ci0gICAgICAgICAgICBwb2ludFs2XSA9IHF1YWQu
cDQoKS54KCk7Ci0gICAgICAgICAgICBwb2ludFs3XSA9IHF1YWQucDQoKS55KCk7Ci0gICAgICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTJmdihwcm9ncmFtLT52ZXJ0ZXhTaGFk
ZXIoKS5wb2ludExvY2F0aW9uKCksIHBvaW50LCA0KSk7Ci0KLSAgICAgICAgICAgIExheWVyQ2hy
b21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0
aW9uTWF0cml4KCksIGdsb2JhbFRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9w
YWNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFM
b2NhdGlvbigpKTsKLQotICAgICAgICAgICAgcHJldkVkZ2VYID0gZWRnZVg7Ci0gICAgICAgICAg
ICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAgICAgICAgIHByZXZFZGdlWC5zY2FsZSgtMSwg
LTEsIC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByZXZFZGdlWSA9IGVkZ2VZOwotICAgICAg
ICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAgICAgcHJldkVkZ2VZLnNjYWxlKC0xLCAtMSwg
LTEpOwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAppbmRl
eCA3YmJkZTllMWRiZjJiMmU0YWE3MWU1YzMwZjIyMDI0MDk0ZjI4YzRiLi4yOTFkM2U3MjFlM2Jh
Zjc0NzQ0YzdmN2RhZDEwZGEzZjEyNzA0OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0u
aApAQCAtMjksMTE3ICsyOSw2MSBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJl
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIu
aCIKICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBM
YXllclJlbmRlcmVyQ2hyb21pdW07Ci1jbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwotCiBjbGFz
cyBMYXllclRpbGVyQ2hyb21pdW0gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVyVGls
ZXJDaHJvbWl1bSk7CiBwdWJsaWM6CiAgICAgZW51bSBCb3JkZXJUZXhlbE9wdGlvbiB7IEhhc0Jv
cmRlclRleGVscywgTm9Cb3JkZXJUZXhlbHMgfTsKIAotICAgIHN0YXRpYyBQYXNzT3duUHRyPExh
eWVyVGlsZXJDaHJvbWl1bT4gY3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IElu
dFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7Ci0KLSAgICB+TGF5ZXJUaWxlckNo
cm9taXVtKCk7Ci0KLSAgICAvLyBTZXQgaW52YWxpZGF0aW9ucyB0byBiZSBwb3RlbnRpYWxseSBy
ZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgotICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpOwotICAgIHZvaWQgaW52YWxpZGF0ZUVudGlyZUxheWVyKCk7
Ci0KLSAgICAvLyBQcmVwYXJlIGRhdGEgbmVlZGVkIHRvIHVwZGF0ZSB0ZXh0dXJlcyB0aGF0IGlu
c3RlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KLSAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgTGF5ZXJUZXh0dXJlVXBkYXRlciopOwotICAgIC8vIFVw
ZGF0ZSBpbnZhbGlkIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QgcHJv
dmlkZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuCi0gICAgdm9pZCB1cGRhdGVSZWN0KExheWVyVGV4
dHVyZVVwZGF0ZXIqKTsKLSAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRo
IHRoZSBjb250ZW50IHJlY3QuCi0gICAgdm9pZCBkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworICAgIHZp
cnR1YWwgfkxheWVyVGlsZXJDaHJvbWl1bSgpOwogCiAgICAgaW50IG51bVRpbGVzKCkgY29uc3Qg
eyByZXR1cm4gbV90aWxpbmdEYXRhLm51bVRpbGVzKCk7IH0KIAogICAgIC8vIFNldCBwb3NpdGlv
biBvZiB0aGlzIHRpbGVkIGxheWVyIGluIGNvbnRlbnQgc3BhY2UuCiAgICAgdm9pZCBzZXRMYXll
clBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbik7CisKICAgICAvLyBDaGFuZ2UgdGhl
IHRpbGUgc2l6ZS4gIFRoaXMgbWF5IGludmFsaWRhdGUgYWxsIHRoZSBleGlzdGluZyB0aWxlcy4K
ICAgICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpOwogCiAgICAgYm9vbCBz
a2lwc0RyYXcoKSBjb25zdCB7IHJldHVybiBtX3NraXBzRHJhdzsgfQogCi0gICAgLy8gUmVzZXJ2
ZXMgYWxsIGV4aXN0aW5nIGFuZCB2YWxpZCB0aWxlIHRleHR1cmVzIHRvIHByb3RlY3QgdGhlbSBm
cm9tIGJlaW5nCi0gICAgLy8gcmVjeWNsZWQgYnkgdGhlIHRleHR1cmUgbWFuYWdlci4KLSAgICB2
b2lkIHByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotCi0g
ICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRl
clJHQkFUZXhBbHBoYT4gUHJvZ3JhbTsKLSAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHN3YXBz
IHJlZCBhbmQgYmx1ZSBjb21wb25lbnRzIG9mIHRleHR1cmUuCi0gICAgLy8gVXNlZCB3aGVuIHRl
eHR1cmUgZm9ybWF0IGRvZXMgbm90IG1hdGNoIG5hdGl2ZSBjb2xvciBmb3JtYXQuCi0gICAgdHlw
ZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFU
ZXhTd2l6emxlQWxwaGE+IFByb2dyYW1Td2l6emxlOwotCi0gICAgLy8gU2hhZGVyIHByb2dyYW0g
dGhhdCBwcm9kdWNlcyBhbnRpLWFsaWFzZWQgbGF5ZXIgZWRnZXMuCi0gICAgdHlwZWRlZiBQcm9n
cmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYUFB
PiBQcm9ncmFtQUE7Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxl
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGFBQT4gUHJvZ3JhbVN3aXp6bGVBQTsK
KyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhMYXllclRpbGVyQ2hyb21pdW0qKSBj
b25zdDsKIAotICAgIC8vIElmIHRoaXMgdGlsZXIgaGFzIGV4YWN0bHkgb25lIHRpbGUsIHJldHVy
biBpdHMgdGV4dHVyZS4gT3RoZXJ3aXNlLCBudWxsLgotICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRT
aW5nbGVUZXh0dXJlKCk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVy
UmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9w
dGlvbik7Citwcm90ZWN0ZWQ6CisgICAgTGF5ZXJUaWxlckNocm9taXVtKEdDM0RlbnVtIHRleHR1
cmVGb3JtYXQsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7Cisg
ICAgTGF5ZXJUaWxlckNocm9taXVtKCk7CiAKICAgICBjbGFzcyBUaWxlIDogcHVibGljIFJlZkNv
dW50ZWQ8VGlsZT4gewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlKTsKICAgICBw
dWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFRpbGUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4g
dGV4KSA6IG1fdGV4KHRleCksIG1faSgtMSksIG1faigtMSkgeyB9Ci0KLSAgICAgICAgTWFuYWdl
ZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleC5nZXQoKTsgfQotCi0gICAgICAgIGJv
b2wgZGlydHkoKSBjb25zdCB7IHJldHVybiAhbV9kaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCk7IH0K
LSAgICAgICAgdm9pZCBjbGVhckRpcnR5KCkgeyBtX2RpcnR5TGF5ZXJSZWN0ID0gSW50UmVjdCgp
OyB9CisgICAgICAgIGV4cGxpY2l0IFRpbGUoKSA6IG1faSgtMSksIG1faigtMSkgeyB9CiAKICAg
ICAgICAgaW50IGkoKSBjb25zdCB7IHJldHVybiBtX2k7IH0KICAgICAgICAgaW50IGooKSBjb25z
dCB7IHJldHVybiBtX2o7IH0KICAgICAgICAgdm9pZCBtb3ZlVG8oaW50IGksIGludCBqKSB7IG1f
aSA9IGk7IG1faiA9IGo7IH0KLQotICAgICAgICAvLyBMYXllci1zcGFjZSBkaXJ0eSByZWN0YW5n
bGUgdGhhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQuCi0gICAgICAgIEludFJlY3QgbV9kaXJ0eUxh
eWVyUmVjdDsKICAgICBwcml2YXRlOgotICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1f
dGV4OwogICAgICAgICBpbnQgbV9pOwogICAgICAgICBpbnQgbV9qOwogICAgIH07CiAKLSAgICAv
LyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgotICAgIHRl
bXBsYXRlIDxjbGFzcyBUPgotICAgIHZvaWQgZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0
IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxv
Y2F0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKIAogICAgIC8vIEdyb3cgbGF5ZXIg
c2l6ZSB0byBjb250YWluIHRoaXMgcmVjdGFuZ2xlLgogICAgIHZvaWQgZ3Jvd0xheWVyVG9Db250
YWluKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLQotICAgIExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlcjsgfQot
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4dCgpIGNvbnN0OwotICAg
IFRpbGUqIGNyZWF0ZVRpbGUoaW50IGksIGludCBqKTsKLSAgICAvLyBJbnZhbGlkYXRlIGFueSB0
aWxlcyB3aGljaCBkbyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnRSZWN0Ci0gICAgdm9p
ZCBpbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotICAgIHZvaWQg
cmVzZXQoKTsKICAgICB2b2lkIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgaW50ICZsZWZ0LCBpbnQgJnRvcCwgaW50ICZyaWdodCwgaW50ICZib3R0
b20pIGNvbnN0OwogICAgIEludFJlY3QgY29udGVudFJlY3RUb0xheWVyUmVjdChjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7CiAgICAgSW50UmVjdCBsYXllclJlY3RUb0NvbnRlbnRS
ZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkgY29uc3Q7Ci0KLSAgICBUaWxlKiB0aWxlQXQo
aW50LCBpbnQpIGNvbnN0OwogICAgIEludFJlY3QgdGlsZUNvbnRlbnRSZWN0KGNvbnN0IFRpbGUq
KSBjb25zdDsKICAgICBJbnRSZWN0IHRpbGVMYXllclJlY3QoY29uc3QgVGlsZSopIGNvbnN0Owog
Ci0gICAgR0MzRGVudW0gbV90ZXh0dXJlRm9ybWF0OwotCi0gICAgSW50U2l6ZSBtX3RpbGVTaXpl
OwotICAgIEludFBvaW50IG1fbGF5ZXJQb3NpdGlvbjsKLQotICAgIGJvb2wgbV9za2lwc0RyYXc7
Ci0KICAgICAvLyBEZWZhdWx0IGhhc2gga2V5IHRyYWl0cyBmb3IgaW50ZWdlcnMgZGlzYWxsb3cg
MCBhbmQgLTEgYXMgYSBrZXksIHNvCiAgICAgLy8gdXNlIGEgY3VzdG9tIGhhc2ggdHJhaXQgd2hp
Y2ggZGlzYWxsb3dzIC0xIGFuZCAtMiBpbnN0ZWFkLgogICAgIHR5cGVkZWYgc3RkOjpwYWlyPGlu
dCwgaW50PiBUaWxlTWFwS2V5OwpAQCAtMTU1LDE4ICs5OSwxNCBAQCBwcml2YXRlOgogICAgIC8v
IGRvZXNuJ3QgZWFzaWx5IHN1cHBvcnQgT3duUHRyIGFzIGEgdmFsdWUuCiAgICAgdHlwZWRlZiBI
YXNoTWFwPFRpbGVNYXBLZXksIFJlZlB0cjxUaWxlPiwgRGVmYXVsdEhhc2g8VGlsZU1hcEtleT46
Okhhc2gsIFRpbGVNYXBLZXlUcmFpdHM+IFRpbGVNYXA7CiAgICAgVGlsZU1hcCBtX3RpbGVzOwot
ICAgIC8vIFRpZ2h0bHkgcGFja2VkIHNldCBvZiB1bnVzZWQgdGlsZXMuCi0gICAgVmVjdG9yPFJl
ZlB0cjxUaWxlPiA+IG1fdW51c2VkVGlsZXM7Ci0KLSAgICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4g
dXBkYXRlIGFuZCB1cGxvYWQuCi0gICAgSW50UmVjdCBtX3BhaW50UmVjdDsKLSAgICBJbnRSZWN0
IG1fdXBkYXRlUmVjdDsKIAorICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgR0MzRGVudW0gbV90
ZXh0dXJlRm9ybWF0OworICAgIEludFNpemUgbV90aWxlU2l6ZTsKKyAgICBJbnRQb2ludCBtX2xh
eWVyUG9zaXRpb247CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gbV90ZXh0
dXJlT3JpZW50YXRpb247CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OwogICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRhOwot
Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRpbGVyVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyVXBkYXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI5NjdhNWI5ODA4OGNiYmJi
MDUxMWY0MjM1NjI2YTFjYzM0ZDFkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJVcGRhdGVyLmNwcApAQCAtMCww
ICsxLDI5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUaWxlclVwZGF0ZXIuaCIKKwor
I2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYW5h
Z2VyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc093blB0cjxMYXllclRpbGVyVXBkYXRlcj4gTGF5ZXJUaWxlclVwZGF0ZXI6OmNyZWF0ZShU
ZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIsIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQsIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCit7CisgICAg
aWYgKCF0ZXh0dXJlTWFuYWdlciB8fCB0aWxlU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRpbGVyVXBkYXRlcih0
ZXh0dXJlTWFuYWdlciwgdGV4dHVyZUZvcm1hdCwgdGlsZVNpemUsIGJvcmRlcikpOworfQorCitM
YXllclRpbGVyVXBkYXRlcjo6TGF5ZXJUaWxlclVwZGF0ZXIoVGV4dHVyZU1hbmFnZXIqIHRleHR1
cmVNYW5hZ2VyLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQorICAgIDogTGF5ZXJUaWxlckNocm9taXVtKHRl
eHR1cmVGb3JtYXQsIHRpbGVTaXplLCBib3JkZXIpCisgICAgLCBtX3RleHR1cmVNYW5hZ2VyKHRl
eHR1cmVNYW5hZ2VyKQoreworfQorCit2b2lkIExheWVyVGlsZXJVcGRhdGVyOjpyZXNldCgpCit7
CisgICAgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNldCgpOworICAgIG1fdW51c2VkVGlsZXMuY2xl
YXIoKTsKKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3VwZGF0ZVJlY3QgPSBJ
bnRSZWN0KCk7Cit9CisKK0xheWVyVGlsZXJVcGRhdGVyOjpVcGRhdGFibGVUaWxlKiBMYXllclRp
bGVyVXBkYXRlcjo6dGlsZUF0KGludCBpLCBpbnQgaikgY29uc3QKK3sKKyAgICBVcGRhdGFibGVU
aWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KG1fdGlsZXMuZ2V0KG1ha2Vf
cGFpcihpLCBqKSkuZ2V0KCkpOworICAgIEFTU0VSVCghdGlsZSB8fCB0aWxlLT5yZWZDb3VudCgp
ID09IDEpOworICAgIHJldHVybiB0aWxlOworfQorCitMYXllclRpbGVyVXBkYXRlcjo6VXBkYXRh
YmxlVGlsZSogTGF5ZXJUaWxlclVwZGF0ZXI6OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQorewor
ICAgIEFTU0VSVCghdGlsZUF0KGksIGopKTsKKworICAgIFJlZlB0cjxVcGRhdGFibGVUaWxlPiB0
aWxlOworICAgIGlmIChtX3VudXNlZFRpbGVzLnNpemUoKSA+IDApIHsKKyAgICAgICAgdGlsZSA9
IG1fdW51c2VkVGlsZXMubGFzdCgpLnJlbGVhc2UoKTsKKyAgICAgICAgbV91bnVzZWRUaWxlcy5y
ZW1vdmVMYXN0KCk7CisgICAgICAgIEFTU0VSVCh0aWxlLT5yZWZDb3VudCgpID09IDEpOworICAg
IH0gZWxzZSB7CisgICAgICAgIFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyID0gdGV4dHVyZU1hbmFn
ZXIoKTsKKyAgICAgICAgdGlsZSA9IGFkb3B0UmVmKG5ldyBVcGRhdGFibGVUaWxlKE1hbmFnZWRU
ZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKKyAgICB9CisgICAgbV90aWxlcy5hZGQobWFrZV9w
YWlyKGksIGopLCB0aWxlKTsKKworICAgIHRpbGUtPm1vdmVUbyhpLCBqKTsKKyAgICB0aWxlLT5t
X2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVjdCh0aWxlLmdldCgpKTsKKworICAgIHJldHVy
biB0aWxlLmdldCgpOworfQorCit2b2lkIExheWVyVGlsZXJVcGRhdGVyOjppbnZhbGlkYXRlVGls
ZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKCFtX3RpbGVzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFRpbGVNYXBLZXk+IHJlbW92ZUtleXM7
CisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdGVyID0gbV90aWxlcy5iZWdpbigpOyBpdGVy
ICE9IG1fdGlsZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBUaWxlKiB0aWxlID0gaXRlci0+
c2Vjb25kLmdldCgpOworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZUNvbnRlbnRSZWN0
KHRpbGUpOworICAgICAgICBpZiAodGlsZVJlY3QuaW50ZXJzZWN0cyhjb250ZW50UmVjdCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmVtb3ZlS2V5cy5hcHBlbmQoaXRlci0+Zmly
c3QpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVtb3ZlS2V5cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV91bnVzZWRUaWxlcy5hcHBlbmQoc3RhdGljX3BvaW50ZXJfY2Fz
dDxVcGRhdGFibGVUaWxlPihtX3RpbGVzLnRha2UocmVtb3ZlS2V5c1tpXSkpKTsKK30KKwordm9p
ZCBMYXllclRpbGVyVXBkYXRlcjo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpCit7CisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzRHJhdykK
KyAgICAgICAgcmV0dXJuOworCisgICAgZ3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsK
KworICAgIC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4gbGF5ZXIgc3BhY2UsIGFzIHRoZSBs
YXllciBjb3VsZCBiZSByZXBvc2l0aW9uZWQKKyAgICAvLyBhZnRlciBpbnZhbGlkYXRpb24uCisg
ICAgY29uc3QgSW50UmVjdCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRl
bnRSZWN0KTsKKworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgY29udGVu
dFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20p
OworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9y
IChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxl
VGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEludFJlY3QgYm91bmQgPSB0aWxlTGF5
ZXJSZWN0KHRpbGUpOworICAgICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGxheWVyUmVjdCk7Cisg
ICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0LnVuaXRlKGJvdW5kKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBMYXllclRpbGVyVXBkYXRlcjo6aW52YWxpZGF0ZUVudGlyZUxh
eWVyKCkKK3sKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVzLmJlZ2lu
KCk7IGl0ZXIgIT0gbV90aWxlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVChpdGVy
LT5zZWNvbmQtPnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgIG1fdW51c2VkVGlsZXMuYXBwZW5k
KHN0YXRpY19wb2ludGVyX2Nhc3Q8VXBkYXRhYmxlVGlsZT4oaXRlci0+c2Vjb25kLnJlbGVhc2Uo
KSkpOworICAgIH0KKworICAgIG1fdGlsZXMuY2xlYXIoKTsKKyAgICBtX3RpbGluZ0RhdGEuc2V0
VG90YWxTaXplKDAsIDApOworfQorCit2b2lkIExheWVyVGlsZXJVcGRhdGVyOjpwcm90ZWN0VGls
ZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmIChjb250ZW50
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b207CisgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBi
b3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytp
KSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAg
ICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlU2l6
ZSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZVNpemUsIG1fdGV4dHVyZUZvcm1h
dCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUaWxlclVwZGF0ZXI6OnB1c2hQ
cm9wZXJ0aWVzVG8oQ0NMYXllclRpbGVySW1wbCogdGlsZXIpIGNvbnN0Cit7CisgICAgTGF5ZXJU
aWxlckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKHRpbGVyKTsKKworICAgIGZvciAoVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXMuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVz
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaW50IGkgPSBpdGVyLT5maXJzdC5maXJzdDsKKyAg
ICAgICAgaW50IGogPSBpdGVyLT5maXJzdC5zZWNvbmQ7CisgICAgICAgIFVwZGF0YWJsZVRpbGUq
IHRpbGUgPSBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4oaXRlci0+c2Vjb25kLmdldCgpKTsK
KworICAgICAgICBpZiAodGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZVNpemUsIG1fdGV4
dHVyZUZvcm1hdCkpCisgICAgICAgICAgICB0aWxlci0+c3luY1RleHR1cmVJZChpLCBqLCB0aWxl
LT50ZXh0dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGls
ZXItPmV2aWN0VGV4dHVyZShpLCBqKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUaWxlclVwZGF0
ZXI6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgTGF5ZXJUZXh0
dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIpCit7CisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsK
KworICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV91cGRhdGVSZWN0
ID0gSW50UmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSW52YWxpZGF0
ZSBvbGQgdGlsZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdXNlZCBidXQgYXJlbid0IGluIHVzZSB0
aGlzCisgICAgLy8gZnJhbWUgc28gdGhhdCB0aGV5IGNhbiBnZXQgcmV1c2VkIGZvciBuZXcgdGls
ZXMuCisgICAgaW52YWxpZGF0ZVRpbGVzKGNvbnRlbnRSZWN0KTsKKyAgICBncm93TGF5ZXJUb0Nv
bnRhaW4oY29udGVudFJlY3QpOworCisgICAgaWYgKCFudW1UaWxlcygpKSB7CisgICAgICAgIG1f
dXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29udGFp
biBhbGwKKyAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24uCisg
ICAgSW50UmVjdCBkaXJ0eUxheWVyUmVjdDsKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tOworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytq
KSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAg
ICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBp
ZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CisKKyAg
ICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZVNpemUsIG1fdGV4
dHVyZUZvcm1hdCkpCisgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IHRp
bGVMYXllclJlY3QodGlsZSk7CisKKyAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5y
ZXNlcnZlKG1fdGlsZVNpemUsIG1fdGV4dHVyZUZvcm1hdCkpIHsKKyAgICAgICAgICAgICAgICBt
X3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRpcnR5TGF5ZXJSZWN0
LnVuaXRlKHRpbGUtPm1fZGlydHlMYXllclJlY3QpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gRHVlIHRvIGJvcmRlcnMsIHdoZW4gdGhlIHBhaW50IHJlY3QgaXMgZXh0ZW5kZWQgdG8gdGls
ZSBib3VuZGFyaWVzLCBpdAorICAgIC8vIG1heSBlbmQgdXAgb3ZlcmxhcHBpbmcgbW9yZSB0aWxl
cyB0aGFuIHRoZSBvcmlnaW5hbCBjb250ZW50IHJlY3QuIFJlY29yZAorICAgIC8vIHRoYXQgb3Jp
Z2luYWwgcmVjdCBzbyB3ZSBkb24ndCB1cGxvYWQgbW9yZSB0aWxlcyB0aGFuIG5lY2Vzc2FyeS4K
KyAgICBtX3VwZGF0ZVJlY3QgPSBjb250ZW50UmVjdDsKKworICAgIG1fcGFpbnRSZWN0ID0gbGF5
ZXJSZWN0VG9Db250ZW50UmVjdChkaXJ0eUxheWVyUmVjdCk7CisgICAgaWYgKGRpcnR5TGF5ZXJS
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dHVyZVVwZGF0ZXItPnBy
ZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlU2l6ZSwgbV90aWxpbmdEYXRhLmJvcmRl
clRleGVscygpKTsKK30KKwordm9pZCBMYXllclRpbGVyVXBkYXRlcjo6dXBkYXRlUmVjdChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0
ZXIpCit7CisgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0IHR1
cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGludmFsaWRhdGVk
IG1pZC11cGRhdGUuCisgICAgaWYgKCFtX3RpbGluZ0RhdGEudG90YWxTaXplWCgpIHx8ICFtX3Rp
bGluZ0RhdGEudG90YWxTaXplWSgpIHx8IG1fdXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW51bVRp
bGVzKCkgfHwgbV9za2lwc0RyYXcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGV4dHVyZU9y
aWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0aW9uKCk7CisgICAgbV9zYW1wbGVk
VGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlci0+c2FtcGxlZFRleGVsRm9ybWF0KG1fdGV4dHVy
ZUZvcm1hdCk7CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIGNvbnRl
bnRSZWN0VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRv
bSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBm
b3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFi
bGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlKQorICAg
ICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOworICAgICAgICAgICAgZWxzZSBp
ZiAoIXRpbGUtPmRpcnR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCisgICAg
ICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxlQ29udGVudFJlY3QodGlsZSk7CisgICAg
ICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Cisg
ICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChsYXllclJlY3RUb0NvbnRlbnRSZWN0KHRp
bGUtPm1fZGlydHlMYXllclJlY3QpKTsKKyAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1
YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCisgICAgICAgICAgICAv
LyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQu
CisgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7CisgICAgICAg
ICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIEFTU0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7CisK
KyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQg
aW50by4KKyAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54
KCkgLSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0
LnNpemUoKSk7CisgICAgICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCisgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVj
dGFuZ2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KKyAgICAgICAgICAgIEludFBv
aW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgpLCBzb3VyY2VS
ZWN0LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQu
eCgpIDwgMCkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50
T2Zmc2V0LnkoKSA8IDApCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlm
IChwYWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJlY3Qud2lkdGgo
KSkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0
LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0KCkpCisgICAgICAg
ICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4
dHVyZShjb250ZXh0KTsKKyAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxp
bmdEYXRhLmJvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBo
aWNzQ29udGV4dDNEOjpORUFSRVNUOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcikpOworICAgICAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOworICAg
ICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwKSk7CisKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyLT51cGRh
dGVUZXh0dXJlUmVjdCh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKKyAg
ICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUaWxlclVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGlsZXJVcGRhdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTcwYTMxNDc1N2U4MjFm
Mjk2NDM1YzhjMGNkYmJiMTZkYWE4M2ZjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJVcGRhdGVyLmgKQEAgLTAs
MCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgTGF5ZXJUaWxlclVwZGF0ZXJfaAorI2RlZmlu
ZSBMYXllclRpbGVyVXBkYXRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4
dHVyZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUaWxlckltcGw7
CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIFRleHR1cmVNYW5hZ2VyOworCitjbGFz
cyBMYXllclRpbGVyVXBkYXRlciA6IHB1YmxpYyBMYXllclRpbGVyQ2hyb21pdW0geworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKExheWVyVGlsZXJVcGRhdGVyKTsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxMYXllclRpbGVyVXBkYXRlcj4gY3JlYXRlKFRleHR1cmVNYW5hZ2VyKiwg
R0MzRGVudW0gdGV4dHVyZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRl
eGVsT3B0aW9uKTsKKworICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5
IHJlcGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCisgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgdm9pZCBpbnZhbGlkYXRlRW50aXJlTGF5ZXIo
KTsKKworICAgIC8vIFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQg
aW5zdGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBMYXllclRleHR1cmVVcGRhdGVyKik7CisgICAgLy8g
VXBkYXRlIGludmFsaWQgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdCBw
cm92aWRlZCBpbiBwcmVwYXJlVG9VcGRhdGUoKS4KKyAgICB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhp
Y3NDb250ZXh0M0QqLCBMYXllclRleHR1cmVVcGRhdGVyKik7CisKKyAgICAvLyBSZXNlcnZlcyBh
bGwgZXhpc3RpbmcgYW5kIHZhbGlkIHRpbGUgdGV4dHVyZXMgdG8gcHJvdGVjdCB0aGVtIGZyb20g
YmVpbmcKKyAgICAvLyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgorICAgIHZvaWQg
cHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVyVGlsZXJJbXBsKikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgTGF5ZXJUaWxlclVwZGF0ZXIoVGV4dHVyZU1hbmFnZXIqLCBHQzNEZW51
bSB0ZXh0dXJlRm9ybWF0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRp
b24pOworCisgICAgY2xhc3MgVXBkYXRhYmxlVGlsZSA6IHB1YmxpYyBUaWxlIHsKKyAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRhYmxlVGlsZSk7CisgICAgcHVibGljOgorICAgICAg
ICBVcGRhdGFibGVUaWxlKFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleCkgOiBtX3RleCh0
ZXgpIHsgfQorCisgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlKCkgeyByZXR1cm4gbV90
ZXguZ2V0KCk7IH0KKworICAgICAgICBib29sIGRpcnR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGly
dHlMYXllclJlY3QuaXNFbXB0eSgpOyB9CisgICAgICAgIHZvaWQgY2xlYXJEaXJ0eSgpIHsgbV9k
aXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQorCisgICAgICAgIC8vIExheWVyLXNwYWNlIGRp
cnR5IHJlY3RhbmdsZSB0aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZC4KKyAgICAgICAgSW50UmVj
dCBtX2RpcnR5TGF5ZXJSZWN0OworICAgIHByaXZhdGU6CisgICAgICAgIE93blB0cjxNYW5hZ2Vk
VGV4dHVyZT4gbV90ZXg7CisgICAgfTsKKyAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBp
bnQpIGNvbnN0OworICAgIFVwZGF0YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOworCisg
ICAgLy8gSW52YWxpZGF0ZSBhbnkgdGlsZXMgd2hpY2ggZG8gbm90IGludGVyc2VjdCB3aXRoIHRo
ZSBjb250ZW50UmVjdAorICAgIHZvaWQgaW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KTsKKworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworCisgICAgVGV4dHVyZU1h
bmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFuYWdlcjsg
fQorCisgICAgVGV4dHVyZU1hbmFnZXIqIG1fdGV4dHVyZU1hbmFnZXI7CisKKyAgICAvLyBTdGF0
ZSBoZWxkIGJldHdlZW4gdXBkYXRlIGFuZCB1cGxvYWQuCisgICAgSW50UmVjdCBtX3BhaW50UmVj
dDsKKyAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKKworICAgIC8vIFRpZ2h0bHkgcGFja2VkIHNl
dCBvZiB1bnVzZWQgdGlsZXMuCisgICAgVmVjdG9yPFJlZlB0cjxVcGRhdGFibGVUaWxlPiA+IG1f
dW51c2VkVGlsZXM7Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKaW5kZXggYTY3YzIyZTkwMjVlZjg5
N2IxNzhmODY0YWIzMzI5OTZmM2UzZWU3Zi4uMzEwZTE2ODZiZDM1ZmZhNWRjYmY2MTRhN2I0Yjg3
M2E4NDNmN2I0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCkBAIC02MCw2ICs2MCw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgdm9pZCBm
cmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRCopOwogCisgICAgdW5zaWduZWQg
dGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKwogcHJpdmF0ZToKICAg
ICBleHBsaWNpdCBNYW5hZ2VkVGV4dHVyZShUZXh0dXJlTWFuYWdlciopOwogCkBAIC03Myw0ICs3
NSwzIEBAIHByaXZhdGU6CiB9CiAKICNlbmRpZiAvLyBNYW5hZ2VkVGV4dHVyZV9oCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGI2NGQwZjRlMzkwYjMwNTQ3M2JjODkwY2Q1
YmZjNjYyOWFmM2ZiNmMuLjRmNmM2N2FiYjBlOGVmODdhOWMyYjllZGQ0MTBlZDY0M2YyZDUxMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMTIzLDE1ICsxMjMsMTYgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVkZWQoKQogCiAgICAgY3Jl
YXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpOwogCi0gICAgbV90aWxlciA9IExheWVyVGlsZXJD
aHJvbWl1bTo6Y3JlYXRlKAotICAgICAgICBsYXllclJlbmRlcmVyKCksCisgICAgbV90aWxlciA9
IExheWVyVGlsZXJVcGRhdGVyOjpjcmVhdGUoCisgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+Y29u
dGVudHNUZXh0dXJlTWFuYWdlcigpLAorICAgICAgICBsYXllclJlbmRlcmVyKCktPmJlc3RUZXh0
dXJlRm9ybWF0KCksCiAgICAgICAgIEludFNpemUoZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0VGls
ZVNpemUpLAogICAgICAgICBMYXllclRpbGVyQ2hyb21pdW06Okhhc0JvcmRlclRleGVscyk7CiB9
CiAKLXZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkK
K3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQogewotICAgIG1fdGlsZXItPnVwZGF0ZVJlY3QodGV4dHVy
ZVVwZGF0ZXIoKSk7CisgICAgbV90aWxlci0+dXBkYXRlUmVjdChjb250ZXh0LCB0ZXh0dXJlVXBk
YXRlcigpKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRpbGluZ09wdGlvbihU
aWxpbmdPcHRpb24gdGlsaW5nT3B0aW9uKQpAQCAtMTY3LDcgKzE2OCw3IEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIAogICAg
IENDVGlsZWRMYXllckltcGwqIHRpbGVkTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1RpbGVkTGF5ZXJJ
bXBsKj4obGF5ZXIpOwogICAgIHRpbGVkTGF5ZXItPnNldFRpbGluZ1RyYW5zZm9ybSh0aWxpbmdU
cmFuc2Zvcm0oKSk7Ci0gICAgdGlsZWRMYXllci0+c2V0VGlsZXIobV90aWxlci5nZXQoKSk7Cisg
ICAgdGlsZWRMYXllci0+cHVzaFRpbGVyUHJvcGVydGllcyhtX3RpbGVyLmdldCgpKTsKIH0KIAog
c3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGU2MmVjYzdiMWMwNjhhNzBjMGYwM2NlMGZjNjVm
M2E0NTg4OThkNjAuLjIzZWIxODZmMzljYzdiMmE0OGUyZThhZmVlMzNmN2YxNzEyOTZkMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOworY2xhc3MgTGF5ZXJUaWxl
clVwZGF0ZXI7CiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwogCiBjbGFzcyBUaWxlZExheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CkBAIC00Miw3ICs0Miw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgflRpbGVkTGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRJc01hc2soYm9vbCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCopOwpAQCAtNTgsNyArNTgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKSA9IDA7CiAgICAgdmlydHVhbCBMYXll
clRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0ID0gMDsKIAotICAgIE93blB0
cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fdGlsZXI7CisgICAgT3duUHRyPExheWVyVGlsZXJVcGRh
dGVyPiBtX3RpbGVyOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IDIyYmQzMGM3OGQ0Njg3MmE4YjI3YTBiZThkMWU4YTM2NGRmOWIyNzYuLjZjNDgzYjU1
ZjUzNWVmOTg1ZTY4NGY0ZDg1MDQ0MDlhYWUzOTVjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFJlc291cmNlcygpCiAgICAgICAgIHJlc2V0RnJhbWVQYXJhbWV0ZXJzKCk7CiB9CiAKLXZv
aWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKK3ZvaWQg
VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQogewogICAgIGlmICghbV9jb250ZW50c0RpcnR5IHx8ICFtX293bmVy
KQogICAgICAgICByZXR1cm47CkBAIC0xMjUsNyArMTI1LDYgQEAgdm9pZCBWaWRlb0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogCiAgICAgLy8gQWxsb2NhdGUgdGV4
dHVyZXMgZm9yIHBsYW5lcyBpZiB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGFscmVhZHksIG9yCiAg
ICAgLy8gcmVhbGxvY2F0ZSB0ZXh0dXJlcyB0aGF0IGFyZSB0aGUgd3Jvbmcgc2l6ZSBmb3IgdGhl
IGZyYW1lLgotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNv
bnRleHQoKTsKICAgICBib29sIHRleHR1cmVzQWxsb2NhdGVkID0gYWxsb2NhdGVUZXh0dXJlc0lm
TmVlZGVkKGNvbnRleHQsIGZyYW1lLCB0ZXh0dXJlRm9ybWF0KTsKICAgICBpZiAoIXRleHR1cmVz
QWxsb2NhdGVkKSB7CiAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgKaW5kZXggYTJlNGNhNDI5MjZkMWJkMzJiOTk1ZWM2YjIxNmNhMzkyYzUwNjM3
NS4uMmY2NTFlYTY4YmUwMTA3NjM1N2I5MTRkZmI1ZTk2M2ZiM2M3MDliMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogCi0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1
YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBWaWRlb0ZyYW1lUHJvdmlkZXIuIFdoZW4gdGhpcyBt
ZXRob2QgaXMgY2FsbGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAppbmRleCBkOGEz
ZTQwOWM0ZGQxNTY1NWYyNzEzNDFhNzk2NjIzYWY3NDRmMzEyLi41Y2I2MGFjY2E3NTkxYTY5MGVi
MmI4NTU5MmM2MTE1MjcyYWQ1OGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgp
IGNvbnN0CiAgICAgcmV0dXJuIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpOwogfQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcygpCit2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDb250ZXh0KQogewogICAgIGlmICghZHJh
d3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc2LDcgKzc2LDYgQEAgdm9pZCBXZWJH
TExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogICAgIGlmICghbV9j
b250ZW50c0RpcnR5KQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCog
cmVuZGVyZXJDb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKICAgICBpZiAobV90ZXh0
dXJlQ2hhbmdlZCkgewogICAgICAgICByZW5kZXJlckNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CiAgICAgICAgIC8vIFNldCB0
aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBtb2RlcyB0byBHTF9DTEFNUF9U
T19FREdFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDI2MzgwNmNlOTYzZmVjOWU1
ZTc0YTI5NDNlOWZlNjAxOTE1YmY0MDUuLjFmNDNiNWU1ZjYzYTkyMzVjNDMyZDU5YzY2NjYzYWEz
ZjUzNTAyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC01MCw3ICs1MCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTExheWVyQ2hyb21pdW0oKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcygpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgdm9pZCBzZXRUZXh0dXJlVXBkYXRlZCgp
OwogICAgIGJvb2wgcGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVGlsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxlckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNDliNDg0ZTQz
NzgwYzE5ZDlmMzY4ZGMyYjM2YjNmNTA3NGQ5YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsZXJJbXBsLmNw
cApAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ0NMYXllclRpbGVySW1w
bC5oIgorCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUcmFj
ZUV2ZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordHlwZWRlZiBGbG9hdFBvaW50M0QgRWRnZTsKKworUGFzc093blB0cjxDQ0xheWVyVGlsZXJJ
bXBsPiBDQ0xheWVyVGlsZXJJbXBsOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NMYXllclRpbGVySW1wbCgpKTsKK30KKworQ0NMYXllclRpbGVySW1wbDo6Q0NMYXllclRp
bGVySW1wbCgpCit7Cit9CisKK0NDTGF5ZXJUaWxlckltcGw6OkRyYXdhYmxlVGlsZSogQ0NMYXll
clRpbGVySW1wbDo6dGlsZUF0KGludCBpLCBpbnQgaikgY29uc3QKK3sKKyAgICBEcmF3YWJsZVRp
bGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxEcmF3YWJsZVRpbGUqPihtX3RpbGVzLmdldChtYWtlX3Bh
aXIoaSwgaikpLmdldCgpKTsKKyAgICBBU1NFUlQoIXRpbGUgfHwgdGlsZS0+cmVmQ291bnQoKSA9
PSAxKTsKKyAgICByZXR1cm4gdGlsZTsKK30KKworQ0NMYXllclRpbGVySW1wbDo6RHJhd2FibGVU
aWxlKiBDQ0xheWVyVGlsZXJJbXBsOjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikKK3sKKyAgICBB
U1NFUlQoIXRpbGVBdChpLCBqKSk7CisKKyAgICBSZWZQdHI8RHJhd2FibGVUaWxlPiB0aWxlID0g
YWRvcHRSZWYobmV3IERyYXdhYmxlVGlsZSgpKTsKKyAgICBtX3RpbGVzLmFkZChtYWtlX3BhaXIo
aSwgaiksIHRpbGUpOworICAgIHRpbGUtPm1vdmVUbyhpLCBqKTsKKworICAgIHJldHVybiB0aWxl
LmdldCgpOworfQorCit2b2lkIENDTGF5ZXJUaWxlckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkKK3sK
KyAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fdGlsZXMuc2l6ZSgpIHx8IGNvbnRlbnRSZWN0Lmlz
RW1wdHkoKSB8fCAhbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisjaWYgZGVmaW5l
ZChPU19DSFJPTUVPUykKKyAgICAvLyBGSVhNRTogRGlzYWJsZSBhbnRpLWFsaWFzaW5nIHRvIHdv
cmthcm91bmQgYnJva2VuIGRyaXZlci4KKyAgICBib29sIHVzZUFBID0gZmFsc2U7CisjZWxzZQor
ICAgIC8vIFVzZSBhbnRpLWFsaWFzaW5nIHByb2dyYW1zIHdoZW4gYm9yZGVyIHRleGVscyBhcmUg
cHJlc2V0IGFuZCB0cmFuc2Zvcm0KKyAgICAvLyBpcyBub3QgYW4gaW50ZWdlciB0cmFuc2xhdGlv
bi4KKyAgICBib29sIHVzZUFBID0gKG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSAmJiAhZ2xv
YmFsVHJhbnNmb3JtLmlzSW50ZWdlclRyYW5zbGF0aW9uKCkpOworI2VuZGlmCisKKyAgICBzd2l0
Y2ggKG1fc2FtcGxlZFRleGVsRm9ybWF0KSB7CisgICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVy
OjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOgorICAgICAgICBpZiAodXNlQUEpCisgICAgICAgICAg
ICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgY29udGVudFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwg
b3BhY2l0eSwgbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtQUEoKSwgbGF5ZXJSZW5kZXJlci0+
dGlsZXJQcm9ncmFtQUEoKS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxv
Y2F0aW9uKCksIGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbUFBKCktPmZyYWdtZW50U2hhZGVy
KCkuZWRnZUxvY2F0aW9uKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3VGlsZXMo
bGF5ZXJSZW5kZXJlciwgY29udGVudFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5
ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtKCksIC0xLCAtMSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQToKKyAgICAg
ICAgaWYgKHVzZUFBKQorICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGNvbnRl
bnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXItPnRpbGVyUHJv
Z3JhbVN3aXp6bGVBQSgpLCBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6emxlQUEoKS0+
ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIGxheWVyUmVu
ZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2Nh
dGlvbigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVy
ZXIsIGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIt
PnRpbGVyUHJvZ3JhbVN3aXp6bGUoKSwgLTEsIC0xKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitQbGF0Zm9y
bTNET2JqZWN0IENDTGF5ZXJUaWxlckltcGw6OmdldFNpbmdsZVRleHR1cmUoKQoreworICAgIGlm
IChtX3RpbGluZ0RhdGEubnVtVGlsZXMoKSAhPSAxKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IERyYXdhYmxlVGlsZSogdGlsZSA9IHRpbGVBdCgwLCAwKTsKKyAgICByZXR1cm4gdGlsZSA/IHRp
bGUtPnRleHR1cmVJZCgpOiAwOworfQorCit2b2lkIENDTGF5ZXJUaWxlckltcGw6OnN5bmNUZXh0
dXJlSWQoaW50IGksIGludCBqLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkKK3sKKyAgICBE
cmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgaWYgKCF0aWxlKQorICAgICAg
ICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKKyAgICB0aWxlLT5zZXRUZXh0dXJlSWQodGV4dHVy
ZUlkKTsKK30KKwordm9pZCBDQ0xheWVyVGlsZXJJbXBsOjpldmljdFRleHR1cmUoaW50IGksIGlu
dCBqKQoreworICAgIG1fdGlsZXMucmVtb3ZlKG1ha2VfcGFpcihpLCBqKSk7Cit9CisKK3N0YXRp
YyBib29sIGlzQ0NXKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK3sKKyAgICBGbG9hdFBvaW50IHYx
ID0gRmxvYXRQb2ludChxdWFkLnAyKCkueCgpIC0gcXVhZC5wMSgpLngoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBxdWFkLnAyKCkueSgpIC0gcXVhZC5wMSgpLnkoKSk7CisgICAg
RmxvYXRQb2ludCB2MiA9IEZsb2F0UG9pbnQocXVhZC5wMygpLngoKSAtIHF1YWQucDIoKS54KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5wMygpLnkoKSAtIHF1YWQucDIo
KS55KCkpOworICAgIHJldHVybiAodjEueCgpICogdjIueSgpIC0gdjEueSgpICogdjIueCgpKSA8
IDA7Cit9CisKK3N0YXRpYyBFZGdlIGNvbXB1dGVFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNv
bnN0IEZsb2F0UG9pbnQmIHEsIGZsb2F0IHNpZ24pCit7CisgICAgQVNTRVJUKHAgIT0gcSk7CisK
KyAgICBGbG9hdFBvaW50IHRhbmdlbnQocC55KCkgLSBxLnkoKSwgcS54KCkgLSBwLngoKSk7Cisg
ICAgZmxvYXQgc2NhbGUgPSBzaWduIC8gdGFuZ2VudC5sZW5ndGgoKTsKKyAgICBmbG9hdCBjcm9z
czIgPSBwLngoKSAqIHEueSgpIC0gcS54KCkgKiBwLnkoKTsKKworICAgIHJldHVybiBFZGdlKHRh
bmdlbnQueCgpICogc2NhbGUsCisgICAgICAgICAgICAgICAgdGFuZ2VudC55KCkgKiBzY2FsZSwK
KyAgICAgICAgICAgICAgICBjcm9zczIgKiBzY2FsZSk7Cit9CisKK3N0YXRpYyBGbG9hdFBvaW50
IGludGVyc2VjdChjb25zdCBFZGdlJiBhLCBjb25zdCBFZGdlJiBiKQoreworICAgIHJldHVybiBG
bG9hdFBvaW50KAorICAgICAgICAoYS55KCkgKiBiLnooKSAtIGIueSgpICogYS56KCkpIC8gKGEu
eCgpICogYi55KCkgLSBiLngoKSAqIGEueSgpKSwKKyAgICAgICAgKGEueCgpICogYi56KCkgLSBi
LngoKSAqIGEueigpKSAvIChiLngoKSAqIGEueSgpIC0gYS54KCkgKiBiLnkoKSkpOworfQorCit0
ZW1wbGF0ZSA8Y2xhc3MgVD4KK3ZvaWQgQ0NMYXllclRpbGVySW1wbDo6ZHJhd1RpbGVzKExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9w
YWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9u
LCBpbnQgZWRnZUxvY2F0aW9uKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChs
YXllclJlbmRlcmVyLT53aW5kb3dNYXRyaXgoKSAqIGxheWVyUmVuZGVyZXItPnByb2plY3Rpb25N
YXRyaXgoKSAqIGdsb2JhbFRyYW5zZm9ybSk7CisKKyAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0
IFogY29tcG9uZW50LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeFhZVyA9CisgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCAwLCBt
YXRyaXgubTE0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5tMjEoKSwg
bWF0cml4Lm0yMigpLCAwLCBtYXRyaXgubTI0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCAxLCBtYXRyaXgubTM0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCAwLCBtYXRy
aXgubTQ0KCkpOworCisgICAgLy8gRG9uJ3QgZHJhdyBhbnkgdGlsZXMgd2hlbiBtYXRyaXggaXMg
bm90IGludmVydGlibGUuCisgICAgaWYgKCFtYXRyaXhYWVcuaXNJbnZlcnRpYmxlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2UgPSBtYXRyaXhY
WVcuaW52ZXJzZSgpOworCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJl
bmRlcmVyLT5jb250ZXh0KCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0o
cHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0x
aShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUwKSk7CisKKyAgICAvLyBNYXAgY29udGVudCByZWN0YW5nbGUgdG8gZGV2aWNlIHNwYWNl
LgorICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkID0gbWF0cml4Lm1hcFF1YWQoRmxvYXRRdWFkKGNv
bnRlbnRSZWN0KSk7CisKKyAgICAvLyBDb3VudGVyLWNsb2Nrd2lzZT8KKyAgICBmbG9hdCBzaWdu
ID0gaXNDQ1coZGV2aWNlUXVhZCkgPyAtMSA6IDE7CisKKyAgICAvLyBDb21wdXRlIG91dGVyIGVk
Z2VzLgorICAgIEVkZ2UgbGVmdEVkZ2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnA0KCksIGRl
dmljZVF1YWQucDEoKSwgc2lnbik7CisgICAgRWRnZSByaWdodEVkZ2UgPSBjb21wdXRlRWRnZShk
ZXZpY2VRdWFkLnAyKCksIGRldmljZVF1YWQucDMoKSwgc2lnbik7CisgICAgRWRnZSB0b3BFZGdl
ID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVhZC5wMSgpLCBkZXZpY2VRdWFkLnAyKCksIHNpZ24pOwor
ICAgIEVkZ2UgYm90dG9tRWRnZSA9IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDMoKSwgZGV2aWNl
UXVhZC5wNCgpLCBzaWduKTsKKworICAgIGlmIChlZGdlTG9jYXRpb24gIT0gLTEpIHsKKyAgICAg
ICAgLy8gTW92ZSBvdXRlciBlZGdlcyB0byBlbnN1cmUgdGhhdCBhbGwgcGFydGlhbGx5IGNvdmVy
ZWQgcGl4ZWxzIGFyZQorICAgICAgICAvLyBwcm9jZXNzZWQuCisgICAgICAgIGxlZnRFZGdlLm1v
dmUoMCwgMCwgMC41Zik7CisgICAgICAgIHJpZ2h0RWRnZS5tb3ZlKDAsIDAsIDAuNWYpOworICAg
ICAgICB0b3BFZGdlLm1vdmUoMCwgMCwgMC41Zik7CisgICAgICAgIGJvdHRvbUVkZ2UubW92ZSgw
LCAwLCAwLjVmKTsKKworICAgICAgICBmbG9hdCBlZGdlWzEyXTsKKyAgICAgICAgZWRnZVswXSA9
IGxlZnRFZGdlLngoKTsKKyAgICAgICAgZWRnZVsxXSA9IGxlZnRFZGdlLnkoKTsKKyAgICAgICAg
ZWRnZVsyXSA9IGxlZnRFZGdlLnooKTsKKyAgICAgICAgZWRnZVszXSA9IHRvcEVkZ2UueCgpOwor
ICAgICAgICBlZGdlWzRdID0gdG9wRWRnZS55KCk7CisgICAgICAgIGVkZ2VbNV0gPSB0b3BFZGdl
LnooKTsKKyAgICAgICAgZWRnZVs2XSA9IHJpZ2h0RWRnZS54KCk7CisgICAgICAgIGVkZ2VbN10g
PSByaWdodEVkZ2UueSgpOworICAgICAgICBlZGdlWzhdID0gcmlnaHRFZGdlLnooKTsKKyAgICAg
ICAgZWRnZVs5XSA9IGJvdHRvbUVkZ2UueCgpOworICAgICAgICBlZGdlWzEwXSA9IGJvdHRvbUVk
Z2UueSgpOworICAgICAgICBlZGdlWzExXSA9IGJvdHRvbUVkZ2UueigpOworICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dW5pZm9ybTNmdihlZGdlTG9jYXRpb24sIGVkZ2UsIDQpKTsKKyAg
ICB9CisKKyAgICBFZGdlIHByZXZFZGdlWSA9IHRvcEVkZ2U7CisKKyAgICBpbnQgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tOworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVj
dCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNv
bnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOworICAgIGZvciAoaW50IGogPSB0b3A7
IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgRWRnZSBwcmV2RWRnZVggPSBsZWZ0RWRnZTsK
KworICAgICAgICBFZGdlIGVkZ2VZID0gYm90dG9tRWRnZTsKKyAgICAgICAgaWYgKGogPCAobV90
aWxpbmdEYXRhLm51bVRpbGVzWSgpIC0gMSkpIHsKKyAgICAgICAgICAgIEludFJlY3QgdGlsZVJl
Y3QgPSB1bmlvblJlY3QobV90aWxpbmdEYXRhLnRpbGVCb3VuZHMobV90aWxpbmdEYXRhLnRpbGVJ
bmRleCgwLCBqKSksIG1fdGlsaW5nRGF0YS50aWxlQm91bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5k
ZXgobV90aWxpbmdEYXRhLm51bVRpbGVzWCgpIC0gMSwgaikpKTsKKyAgICAgICAgICAgIHRpbGVS
ZWN0LmludGVyc2VjdChsYXllclJlY3QpOworCisgICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHJv
d3MuCisgICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54
KCksIG1fbGF5ZXJQb3NpdGlvbi55KCkpOworCisgICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRp
bGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQg
cDIodGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOworCisgICAgICAgICAgICAvLyBNYXAg
cG9pbnRzIHRvIGRldmljZSBzcGFjZS4KKyAgICAgICAgICAgIHAxID0gbWF0cml4Lm1hcFBvaW50
KHAxKTsKKyAgICAgICAgICAgIHAyID0gbWF0cml4Lm1hcFBvaW50KHAyKTsKKworICAgICAgICAg
ICAgLy8gQ29tcHV0ZSBob3Jpem9udGFsIGVkZ2UuCisgICAgICAgICAgICBlZGdlWSA9IGNvbXB1
dGVFZGdlKHAxLCBwMiwgc2lnbik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpID0g
bGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBEcmF3YWJsZVRpbGUqIHRpbGUg
PSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCB0aWxlLT50ZXh0dXJlSWQoKSk7CisKKyAgICAgICAgICAgIC8v
IERvbid0IHVzZSB0aWxlQ29udGVudFJlY3QgaGVyZSwgYXMgdGhhdCBjb250YWlucyB0aGUgZnVs
bAorICAgICAgICAgICAgLy8gcmVjdCB3aXRoIGJvcmRlciB0ZXhlbHMgd2hpY2ggc2hvdWxkbid0
IGJlIGRyYXduLgorICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IG1fdGlsaW5nRGF0YS50
aWxlQm91bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5kZXgodGlsZS0+aSgpLCB0aWxlLT5qKCkpKTsK
KyAgICAgICAgICAgIEludFJlY3QgZGlzcGxheVJlY3QgPSB0aWxlUmVjdDsKKyAgICAgICAgICAg
IHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3QpOworCisgICAgICAgICAgICAvLyBLZWVwIHRy
YWNrIG9mIGhvdyB0aGUgdG9wIGxlZnQgaGFzIG1vdmVkLCBzbyB0aGUgdGV4dHVyZSBjYW4gYmUK
KyAgICAgICAgICAgIC8vIG9mZnNldCB0aGUgc2FtZSBhbW91bnQuCisgICAgICAgICAgICBJbnRT
aXplIGRpc3BsYXlPZmZzZXQgPSB0aWxlUmVjdC5taW5YTWluWUNvcm5lcigpIC0gZGlzcGxheVJl
Y3QubWluWE1pbllDb3JuZXIoKTsKKworICAgICAgICAgICAgLy8gU2tpcCBlbXB0eSB0aWxlcy4K
KyAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIHRpbGVSZWN0Lm1vdmUobV9sYXllclBvc2l0aW9uLngoKSwg
bV9sYXllclBvc2l0aW9uLnkoKSk7CisKKyAgICAgICAgICAgIEZsb2F0UmVjdCBjbGFtcFJlY3Qo
dGlsZVJlY3QpOworICAgICAgICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBh
dm9pZCBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllcgorICAgICAgICAgICAgLy8gYnkgZGVmbGF0
aW5nIHRoZSB0aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3IgaGFsZiBhIHRleGVsCisgICAgICAg
ICAgICAvLyBtaW51cyBlcHNpbG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUgcmVzdWx0aW5n
IGNsYW1wIHJlZ2lvbgorICAgICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0IHNxdWFy
ZSBieSB0aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCisgICAgICAgICAgICAvLyBiYWNrIHRv
IG5vcm1hbGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hhZGVyCisg
ICAgICAgICAgICAvLyBhZnRlciBiZWluZyBjbGFtcGVkIHRvIDAtMSByYW5nZS4KKyAgICAgICAg
ICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKKyAgICAgICAgICAgIGZsb2F0
IGNsYW1wWCA9IG1pbigwLjUsIGNsYW1wUmVjdC53aWR0aCgpIC8gMi4wIC0gZXBzaWxvbik7Cisg
ICAgICAgICAgICBmbG9hdCBjbGFtcFkgPSBtaW4oMC41LCBjbGFtcFJlY3QuaGVpZ2h0KCkgLyAy
LjAgLSBlcHNpbG9uKTsKKyAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsK
KyAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKKyAgICAgICAgICAgIEZs
b2F0U2l6ZSBjbGFtcE9mZnNldCA9IGNsYW1wUmVjdC5taW5YTWluWUNvcm5lcigpIC0gRmxvYXRS
ZWN0KHRpbGVSZWN0KS5taW5YTWluWUNvcm5lcigpOworCisgICAgICAgICAgICBGbG9hdFBvaW50
IHRleE9mZnNldCA9IG1fdGlsaW5nRGF0YS50ZXh0dXJlT2Zmc2V0KHRpbGUtPmkoKSwgdGlsZS0+
aigpKSArIGNsYW1wT2Zmc2V0ICsgRmxvYXRTaXplKGRpc3BsYXlPZmZzZXQpOworICAgICAgICAg
ICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZVNpemUud2lkdGgo
KSk7CisgICAgICAgICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
dGlsZVNpemUuaGVpZ2h0KCkpOworCisgICAgICAgICAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFu
Z2xlIHRvIHVuaXQgc3F1YXJlLgorICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRl
WCA9IC1jbGFtcFJlY3QueCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7CisgICAgICAgICAgICBmbG9h
dCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZID0gLWNsYW1wUmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0
KCk7CisgICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgp
IC8gY2xhbXBSZWN0LndpZHRoKCk7CisgICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkg
PSB0aWxlUmVjdC5oZWlnaHQoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKKworICAgICAgICAgICAg
Ly8gTWFwIHRvIG5vcm1hbGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcy4KKyAgICAgICAgICAgIGZs
b2F0IGZyYWdtZW50VGV4VHJhbnNsYXRlWCA9IHRleE9mZnNldC54KCkgLyB0aWxlV2lkdGg7Cisg
ICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8g
dGlsZUhlaWdodDsKKyAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVYID0gY2xhbXBS
ZWN0LndpZHRoKCkgLyB0aWxlV2lkdGg7CisgICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNj
YWxlWSA9IGNsYW1wUmVjdC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQ7CisKKyAgICAgICAgICAgIC8v
IE9wZW5HTCBjb29yZGluYXRlIHN5c3RlbSBpcyBib3R0b20tdXAuCisgICAgICAgICAgICAvLyBJ
ZiB0aWxlIHRleHR1cmUgaXMgdG9wLWRvd24sIHdlIG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBj
b29yZGluYXRlcy4KKyAgICAgICAgICAgIGlmIChtX3RleHR1cmVPcmllbnRhdGlvbiA9PSBMYXll
clRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50YXRpb24pIHsKKyAgICAgICAgICAgICAgICBm
cmFnbWVudFRleFRyYW5zbGF0ZVkgPSAxLjAgLSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7CisgICAg
ICAgICAgICAgICAgZnJhZ21lbnRUZXhTY2FsZVkgKj0gLTEuMDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgRWRnZSBlZGdlWCA9IHJpZ2h0RWRnZTsKKyAgICAgICAgICAgIGlmIChpIDwg
KG1fdGlsaW5nRGF0YS5udW1UaWxlc1goKSAtIDEpKSB7CisgICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBwMSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0LnkoKSk7CisgICAgICAgICAgICAgICAg
RmxvYXRQb2ludCBwMih0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7CisKKyAgICAg
ICAgICAgICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4KKyAgICAgICAgICAgICAg
ICBwMSA9IG1hdHJpeC5tYXBQb2ludChwMSk7CisgICAgICAgICAgICAgICAgcDIgPSBtYXRyaXgu
bWFwUG9pbnQocDIpOworCisgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB2ZXJ0aWNhbCBlZGdl
LgorICAgICAgICAgICAgICAgIGVkZ2VYID0gY29tcHV0ZUVkZ2UocDEsIHAyLCBzaWduKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ3JlYXRlIGRldmljZSBzcGFjZSBxdWFkLgor
ICAgICAgICAgICAgRmxvYXRRdWFkIGRldmljZVF1YWQoaW50ZXJzZWN0KGVkZ2VZLCBwcmV2RWRn
ZVgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0KHByZXZFZGdl
WCwgcHJldkVkZ2VZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2Vj
dChwcmV2RWRnZVksIGVkZ2VYKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGVyc2VjdChlZGdlWCwgZWRnZVkpKTsKKworICAgICAgICAgICAgLy8gTWFwIHF1YWQgdG8gbGF5
ZXIgc3BhY2UuCisgICAgICAgICAgICBGbG9hdFF1YWQgcXVhZCA9IGludmVyc2UubWFwUXVhZChk
ZXZpY2VRdWFkKTsKKworICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRvIHRpbGVSZWN0LgorICAg
ICAgICAgICAgcXVhZC5zY2FsZSgxLjBmIC8gdGlsZVJlY3Qud2lkdGgoKSwgMS4wZiAvIHRpbGVS
ZWN0LmhlaWdodCgpKTsKKworICAgICAgICAgICAgaWYgKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9j
YXRpb24gPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBNb3ZlIGZyYWdtZW50IHNoYWRlciB0
cmFuc2Zvcm0gdG8gdmVydGV4IHNoYWRlci4gV2UgY2FuIGRvCisgICAgICAgICAgICAgICAgLy8g
dGhpcyB3aGlsZSBzdGlsbCBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRzIGFzCisgICAgICAgICAg
ICAgICAgLy8gZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIG5v
bi1uZWdhdGl2ZQorICAgICAgICAgICAgICAgIC8vIHdoZW4gdGlsZXMgYXJlIHRyYW5zZm9ybWVk
IGluIGEgd2F5IHRoYXQgY291bGQgcmVzdWx0IGluCisgICAgICAgICAgICAgICAgLy8gc2FtcGxp
bmcgb3V0c2lkZSB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9
IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWSAqPSBm
cmFnbWVudFRleFNjYWxlWTsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVYICo9
IGZyYWdtZW50VGV4U2NhbGVYOworICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkg
Kj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRl
WCArPSBmcmFnbWVudFRleFRyYW5zbGF0ZVg7CisgICAgICAgICAgICAgICAgdmVydGV4VGV4VHJh
bnNsYXRlWSArPSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKGZyYWdtZW50VGV4
VHJhbnNmb3JtTG9jYXRpb24sIGZyYWdtZW50VGV4VHJhbnNsYXRlWCwgZnJhZ21lbnRUZXhUcmFu
c2xhdGVZLCBmcmFnbWVudFRleFNjYWxlWCwgZnJhZ21lbnRUZXhTY2FsZVkpKTsKKworICAgICAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFk
ZXIoKS52ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2
ZXJ0ZXhUZXhUcmFuc2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOwor
CisgICAgICAgICAgICBmbG9hdCBwb2ludFs4XTsKKyAgICAgICAgICAgIHBvaW50WzBdID0gcXVh
ZC5wMSgpLngoKTsKKyAgICAgICAgICAgIHBvaW50WzFdID0gcXVhZC5wMSgpLnkoKTsKKyAgICAg
ICAgICAgIHBvaW50WzJdID0gcXVhZC5wMigpLngoKTsKKyAgICAgICAgICAgIHBvaW50WzNdID0g
cXVhZC5wMigpLnkoKTsKKyAgICAgICAgICAgIHBvaW50WzRdID0gcXVhZC5wMygpLngoKTsKKyAg
ICAgICAgICAgIHBvaW50WzVdID0gcXVhZC5wMygpLnkoKTsKKyAgICAgICAgICAgIHBvaW50WzZd
ID0gcXVhZC5wNCgpLngoKTsKKyAgICAgICAgICAgIHBvaW50WzddID0gcXVhZC5wNCgpLnkoKTsK
KyAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMmZ2KHByb2dyYW0tPnZl
cnRleFNoYWRlcigpLnBvaW50TG9jYXRpb24oKSwgcG9pbnQsIDQpKTsKKworICAgICAgICAgICAg
TGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyLT5w
cm9qZWN0aW9uTWF0cml4KCksIGdsb2JhbFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0
KCksIG9wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCku
YWxwaGFMb2NhdGlvbigpKTsKKworICAgICAgICAgICAgcHJldkVkZ2VYID0gZWRnZVg7CisgICAg
ICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KKyAgICAgICAgICAgIHByZXZFZGdlWC5zY2Fs
ZSgtMSwgLTEsIC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZFZGdlWSA9IGVkZ2VZOwor
ICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KKyAgICAgICAgcHJldkVkZ2VZLnNjYWxlKC0x
LCAtMSwgLTEpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGVySW1w
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdmNDlmOWJiZDgwMGY4NjVjZmI2ZjEzZDc3MTM1MWY2YjA2ZGNjZTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVGlsZXJJbXBsLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lm
bmRlZiBDQ0xheWVyVGlsZXJJbXBsX2gKKyNkZWZpbmUgQ0NMYXllclRpbGVySW1wbF9oCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllclRpbGVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRlckNo
cm9taXVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CisKK2NsYXNzIENDTGF5ZXJUaWxl
ckltcGwgOiBwdWJsaWMgTGF5ZXJUaWxlckNocm9taXVtIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDQ0xheWVyVGlsZXJJbXBsKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q0xheWVyVGlsZXJJbXBsPiBjcmVhdGUoKTsKKworICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQg
aW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KKyAgICB2b2lkIGRyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5k
aW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFt
OworICAgIC8vIFNoYWRlciBwcm9ncmFtIHRoYXQgc3dhcHMgcmVkIGFuZCBibHVlIGNvbXBvbmVu
dHMgb2YgdGV4dHVyZS4KKyAgICAvLyBVc2VkIHdoZW4gdGV4dHVyZSBmb3JtYXQgZG9lcyBub3Qg
bWF0Y2ggbmF0aXZlIGNvbG9yIGZvcm1hdC4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZl
cnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4gUHJvZ3Jh
bVN3aXp6bGU7CisKKyAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHByb2R1Y2VzIGFudGktYWxp
YXNlZCBsYXllciBlZGdlcy4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRl
clRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhQUE+IFByb2dyYW1BQTsKKyAgICB0eXBl
ZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRl
eFN3aXp6bGVBbHBoYUFBPiBQcm9ncmFtU3dpenpsZUFBOworCisgICAgLy8gSWYgdGhpcyB0aWxl
ciBoYXMgZXhhY3RseSBvbmUgdGlsZSwgcmV0dXJuIGl0cyB0ZXh0dXJlLiBPdGhlcndpc2UsIG51
bGwuCisgICAgUGxhdGZvcm0zRE9iamVjdCBnZXRTaW5nbGVUZXh0dXJlKCk7CisKKyAgICB2b2lk
IHN5bmNUZXh0dXJlSWQoaW50LCBpbnQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKTsKKyAg
ICB2b2lkIGV2aWN0VGV4dHVyZShpbnQsIGludCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQg
Q0NMYXllclRpbGVySW1wbCgpOworCisgICAgY2xhc3MgRHJhd2FibGVUaWxlIDogcHVibGljIFRp
bGUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEcmF3YWJsZVRpbGUpOworICAgIHB1
YmxpYzoKKyAgICAgICAgRHJhd2FibGVUaWxlKCkgOiBtX3RleHR1cmVJZCgwKSB7IH0KKworICAg
ICAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVy
ZUlkOyB9CisgICAgICAgIHZvaWQgc2V0VGV4dHVyZUlkKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVy
ZUlkKSB7IG1fdGV4dHVyZUlkID0gdGV4dHVyZUlkOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAg
UGxhdGZvcm0zRE9iamVjdCBtX3RleHR1cmVJZDsKKyAgICB9OworICAgIERyYXdhYmxlVGlsZSog
dGlsZUF0KGludCwgaW50KSBjb25zdDsKKyAgICBEcmF3YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50
LCBpbnQpOworCisgICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250
ZW50UmVjdC4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICB2b2lkIGRyYXdUaWxlcyhMYXll
clJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQg
ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbik7Cit9OworCit9
CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCAxNzNjNDkxMTU1NTE4YWUyODZmNDI0
Yjc1ZTJlNGRlZjBmNzU3YTIwLi4xZTYwNjAxMmMwZDZkYWJlNWQ1M2NiMGUzNjI2MTc5MDE2NzQz
NzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAogI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyVGlsZXJVcGRhdGVyLmgiCiAKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzksNyArNDAsNyBAQCBjbGFzcyBNYW5h
Z2VkVGV4dHVyZTsKIAogQ0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbChpbnQgaWQp
CiAgICAgOiBDQ0xheWVySW1wbChpZCkKLSAgICAsIG1fdGlsZXIoMCkKKyAgICAsIG1fdGlsZXIo
Q0NMYXllclRpbGVySW1wbDo6Y3JlYXRlKCkpCiB7CiB9CiAKQEAgLTUxLDcgKzUyLDcgQEAgdm9p
ZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3KCkKIHsKICAgICBjb25zdCBJbnRSZWN0JiBsYXllclJl
Y3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAgICAgaWYgKCFsYXllclJlY3QuaXNFbXB0eSgpKQot
ICAgICAgICBtX3RpbGVyLT5kcmF3KGxheWVyUmVjdCwgbV90aWxpbmdUcmFuc2Zvcm0sIGRyYXdP
cGFjaXR5KCkpOworICAgICAgICBtX3RpbGVyLT5kcmF3KGxheWVyUmVuZGVyZXIoKSwgbGF5ZXJS
ZWN0LCBtX3RpbGluZ1RyYW5zZm9ybSwgZHJhd09wYWNpdHkoKSk7CiB9CiAKIHZvaWQgQ0NUaWxl
ZExheWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZSgpCkBAIC01OSwxMCArNjAsMTAgQEAgdm9p
ZCBDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKCkKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHNpbmdsZSB0ZXh0dXJlIGxheWVycywgZS5nLiBtYXNr
cy4KICAgICBBU1NFUlQobV90aWxlcik7CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9
IG1fdGlsZXItPmdldFNpbmdsZVRleHR1cmUoKTsKLSAgICBBU1NFUlQodGV4dHVyZSk7CisgICAg
UGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQgPSBtX3RpbGVyLT5nZXRTaW5nbGVUZXh0dXJlKCk7
CisgICAgQVNTRVJUKHRleHR1cmVJZCk7CiAKLSAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShsYXll
clJlbmRlcmVyKCktPmNvbnRleHQoKSk7CisgICAgbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCkt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOwog
fQogCiB2b2lkIENDVGlsZWRMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CkBAIC03MSw2ICs3MiwxMSBAQCB2b2lkIENDVGlsZWRM
YXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQp
IGNvbnN0CiAgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCk7
CiB9CiAKK3ZvaWQgQ0NUaWxlZExheWVySW1wbDo6cHVzaFRpbGVyUHJvcGVydGllcyhMYXllclRp
bGVyVXBkYXRlciogdXBkYXRlcikKK3sKKyAgICB1cGRhdGVyLT5wdXNoUHJvcGVydGllc1RvKG1f
dGlsZXIuZ2V0KCkpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggNzM0NmJiN2U3ZDZmYTZi
YzhjYTFlYmNmMjljYzU4NDlmMWVmNjNhZS4uMTRhMDYwY2E0NmU3ODQzYmM4N2ZjZDc3MWM3ZWUy
ZTZlMmNjNjk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAtMjYsMTEgKzI2
LDEzIEBACiAjaWZuZGVmIENDVGlsZWRMYXllckltcGxfaAogI2RlZmluZSBDQ1RpbGVkTGF5ZXJJ
bXBsX2gKIAotI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NMYXllclRpbGVy
SW1wbDsKK2NsYXNzIExheWVyVGlsZXJVcGRhdGVyOworCiBjbGFzcyBDQ1RpbGVkTGF5ZXJJbXBs
IDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
Q1RpbGVkTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQpAQCAtNDUsMTMgKzQ3LDE0IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50
IGluZGVudCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFRpbGluZ1RyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdGlsaW5nVHJhbnNmb3JtKSB7IG1fdGlsaW5nVHJhbnNmb3JtID0g
dGlsaW5nVHJhbnNmb3JtOyB9Ci0gICAgdm9pZCBzZXRUaWxlcihMYXllclRpbGVyQ2hyb21pdW0q
IHRpbGVyKSB7IG1fdGlsZXIgPSB0aWxlcjsgfQorICAgIHZvaWQgcHVzaFRpbGVyUHJvcGVydGll
cyhMYXllclRpbGVyVXBkYXRlciopOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGlsZWRM
YXllckltcGwoaW50IGlkKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdGlsaW5nVHJh
bnNmb3JtOwotICAgIExheWVyVGlsZXJDaHJvbWl1bSogbV90aWxlcjsKKworICAgIE93blB0cjxD
Q0xheWVyVGlsZXJJbXBsPiBtX3RpbGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCmluZGV4IGZmNzA4YzczZDZj
M2E4OGNkZGYwMmMwNzIzYmJhZGUzMWMzMDA0ZWYuLjBhZjg4M2M4YTIxMjVlMWE2ZDYyYjllYjEy
NzBiMWM0ZGYzZDczMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9UaWxpbmdEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvVGlsaW5nRGF0YS5jcHAKQEAgLTYwLDYgKzYwLDE1IEBAIFRpbGluZ0RhdGE6OlRp
bGluZ0RhdGEoaW50IG1heFRleHR1cmVTaXplLCBpbnQgdG90YWxTaXplWCwgaW50IHRvdGFsU2l6
ZVksIGJvb2wKICAgICByZWNvbXB1dGVOdW1UaWxlcygpOwogfQogCitUaWxpbmdEYXRhOjpUaWxp
bmdEYXRhKCkKKyAgICA6IG1fbWF4VGV4dHVyZVNpemUoMCkKKyAgICAsIG1fdG90YWxTaXplWCgw
KQorICAgICwgbV90b3RhbFNpemVZKDApCisgICAgLCBtX2JvcmRlclRleGVscygwKQoreworICAg
IHJlY29tcHV0ZU51bVRpbGVzKCk7Cit9CisKIHZvaWQgVGlsaW5nRGF0YTo6c2V0VG90YWxTaXpl
KGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSkKIHsKICAgICBtX3RvdGFsU2l6ZVggPSB0
b3RhbFNpemVYOwpAQCAtMjQ4LDYgKzI1NywxOCBAQCBJbnRQb2ludCBUaWxpbmdEYXRhOjp0ZXh0
dXJlT2Zmc2V0KGludCB4SW5kZXgsIGludCB5SW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIEludFBv
aW50KGxlZnQsIHRvcCk7CiB9CiAKK1RpbGluZ0RhdGEmIFRpbGluZ0RhdGE6Om9wZXJhdG9yPShj
b25zdCBUaWxpbmdEYXRhJiBzb3VyY2UpCit7CisgICAgbV9tYXhUZXh0dXJlU2l6ZSA9IHNvdXJj
ZS5tX21heFRleHR1cmVTaXplOworICAgIG1fdG90YWxTaXplWCA9IHNvdXJjZS5tX3RvdGFsU2l6
ZVg7CisgICAgbV90b3RhbFNpemVZID0gc291cmNlLm1fdG90YWxTaXplWTsKKyAgICBtX2JvcmRl
clRleGVscyA9IHNvdXJjZS5tX2JvcmRlclRleGVsczsKKyAgICBtX251bVRpbGVzWCA9IHNvdXJj
ZS5tX251bVRpbGVzWDsKKyAgICBtX251bVRpbGVzWSA9IHNvdXJjZS5tX251bVRpbGVzWTsKKwor
ICAgIHJldHVybiAqdGhpczsKK30KKwogdm9pZCBUaWxpbmdEYXRhOjpyZWNvbXB1dGVOdW1UaWxl
cygpCiB7CiAgICAgbV9udW1UaWxlc1ggPSBjb21wdXRlTnVtVGlsZXMobV9tYXhUZXh0dXJlU2l6
ZSwgbV90b3RhbFNpemVYLCBtX2JvcmRlclRleGVscyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaAppbmRleCAzZGFiYjVkZWMzMzA2ZTdl
MjYzMTQwNWJkYzJjMzRlOTUyZDQyMDI3Li44NGIzMGI2ZDczODFmMzdjYTI0OWFiNDRlZDAwYTM0
NTBkZmRlZGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGlsaW5nRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9UaWxpbmdEYXRhLmgKQEAgLTQwLDkgKzQwLDkgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIElu
dFBvaW50OwogCiBjbGFzcyBUaWxpbmdEYXRhIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShU
aWxpbmdEYXRhKTsKIHB1YmxpYzoKICAgICBUaWxpbmdEYXRhKGludCBtYXhUZXh0dXJlU2l6ZSwg
aW50IHRvdGFsU2l6ZVgsIGludCB0b3RhbFNpemVZLCBib29sIGhhc0JvcmRlclRleGVscyk7Cisg
ICAgVGlsaW5nRGF0YSgpOwogICAgIHZvaWQgc2V0VG90YWxTaXplKGludCB0b3RhbFNpemVYLCBp
bnQgdG90YWxTaXplWSk7CiAgICAgdm9pZCBzZXRNYXhUZXh0dXJlU2l6ZShpbnQpOwogICAgIGlu
dCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KQEAg
LTc2LDggKzc2LDggQEAgcHVibGljOgogICAgIC8vIERpZmZlcmVuY2UgYmV0d2VlbiB0aWxlQm91
bmQncyBhbmQgdGlsZUJvdW5kV2l0aEJvcmRlcidzIGxvY2F0aW9uKCkuCiAgICAgSW50UG9pbnQg
dGV4dHVyZU9mZnNldChpbnQgeEluZGV4LCBpbnQgeUluZGV4KSBjb25zdDsKIAorICAgIFRpbGlu
Z0RhdGEmIG9wZXJhdG9yPShjb25zdCBUaWxpbmdEYXRhJik7CiBwcml2YXRlOgotICAgIFRpbGlu
Z0RhdGEoKSA6IG1fbWF4VGV4dHVyZVNpemUoMCksIG1fdG90YWxTaXplWCgwKSwgbV90b3RhbFNp
emVZKDApIHt9CiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgYXNzZXJ0VGlsZShpbnQgdGlsZSkg
Y29uc3QgeyBBU1NFUlQodGlsZSA+PSAwICYmIHRpbGUgPCBudW1UaWxlcygpKTsgfQogI2Vsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjA1NDIwYzhmNTYyNDExZDc1MjQ5ZmJlODEy
NmFjYjkyNDk5MmMzOC4uMDM5OTdhMThhYjY1MmZlNzMzN2RhZmE3Yjc2YThiMjg3OTQ0NWRlZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wOC0xMiAg
QWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0g
U3BsaXQgdGlsZXIgaW50byBtYWluIHRocmVhZCAvIGNvbXBvc2l0b3IgdGhyZWFkIHZlcnNpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjA2NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHRl
c3QgZm9yIGFzc2lnbm1lbnQgYW5kIGNvcHkgY29uc3RydWN0b3IgZm9yIFRpbGluZ0RhdGEuCisK
KyAgICAgICAgKiB0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
RVNUKToKKwogMjAxMS0wOC0xMiAgRmFkeSBTYW11ZWwgIDxmc2FtdWVsQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZWZhY3RvcmluZyBvZiBQb3B1cE1lbnVDaHJvbWl1bSBGb3IgUmVhZGFiaWxp
dHkgYW5kIE1haW50YWluYWJpbGl0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RpbGluZ0RhdGFUZXN0LmNwcAppbmRleCA3NjJlZGE5Mzk5MTUwZWJlNGM5NzE5NDZhNzRlNTdj
MzlhM2I1ZGQ1Li5kNGM2OGY1NTc0MWU3YWNiNTc5YWViZjE4NWRmNmUzNmEzMmZlM2Y3IDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcApAQCAt
NDg4LDQgKzQ4OCwyOCBAQCBURVNUKFRpbGluZ0RhdGFUZXN0LCBzZXRNYXhUZXh0dXJlU2l6ZUJv
cmRlcnMpCiAgICAgRVhQRUNUX0VRKDEwLCBkYXRhLm51bVRpbGVzWSgpKTsKIH0KIAorVEVTVChU
aWxpbmdEYXRhVGVzdCwgYXNzaWdubWVudCkKK3sKKyAgICB7CisgICAgICAgIFRpbGluZ0RhdGEg
c291cmNlKDgsIDE2LCAzMiwgdHJ1ZSk7CisgICAgICAgIFRpbGluZ0RhdGEgZGVzdCA9IHNvdXJj
ZTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5ib3JkZXJUZXhlbHMoKSwgZGVzdC5ib3JkZXJU
ZXhlbHMoKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UubWF4VGV4dHVyZVNpemUoKSwgZGVz
dC5tYXhUZXh0dXJlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5udW1UaWxlc1go
KSwgZGVzdC5udW1UaWxlc1goKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UubnVtVGlsZXNZ
KCksIGRlc3QubnVtVGlsZXNZKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNlLnRvdGFsU2l6
ZVgoKSwgZGVzdC50b3RhbFNpemVYKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNlLnRvdGFs
U2l6ZVkoKSwgZGVzdC50b3RhbFNpemVZKCkpOworICAgIH0KKyAgICB7CisgICAgICAgIFRpbGlu
Z0RhdGEgc291cmNlKDMsIDYsIDEwMCwgZmFsc2UpOworICAgICAgICBUaWxpbmdEYXRhIGRlc3Qo
c291cmNlKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5ib3JkZXJUZXhlbHMoKSwgZGVzdC5i
b3JkZXJUZXhlbHMoKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UubWF4VGV4dHVyZVNpemUo
KSwgZGVzdC5tYXhUZXh0dXJlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5udW1U
aWxlc1goKSwgZGVzdC5udW1UaWxlc1goKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UubnVt
VGlsZXNZKCksIGRlc3QubnVtVGlsZXNZKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNlLnRv
dGFsU2l6ZVgoKSwgZGVzdC50b3RhbFNpemVYKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNl
LnRvdGFsU2l6ZVkoKSwgZGVzdC50b3RhbFNpemVZKCkpOworICAgIH0KK30KKwogfSAvLyBuYW1l
c3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104276</attachid>
            <date>2011-08-17 16:26:59 -0700</date>
            <delta_ts>2011-08-17 16:30:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66065-20110817162658.patch</filename>
            <type>text/plain</type>
            <size>101148</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMDA4MDA1ZDViYTYwNDAy
ZGIzYTQ0ZGNjZmU2NjY1NTM5MGEyNmQxLi40Y2U4NGE4ZmZlOTU0ZjlkMWU1YmY2YjIyYjZkYzRm
ODM1Mzc1MWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEzIEBACisyMDExLTA4LTE3ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxp
dCB0aWxlciBpbnRvIG1haW4gdGhyZWFkIC8gY29tcG9zaXRvciB0aHJlYWQgdmVyc2lvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDY1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cy4KKworICAgICAgICBMYXllclRpbGVyQ2hyb21pdW0gaXMgcmVuYW1lZCB0
byBiZSBDQ0xheWVyVGlsaW5nRGF0YS4gSW52YWxpZGF0aW9uCisgICAgICAgIGFuZCBwYWludCBm
dW5jdGlvbmFsaXR5IGlzIHB1c2hlZCBpbnRvIFRpbGVkTGF5ZXJDaHJvbWl1bSBhbmQgZHJhd2lu
ZworICAgICAgICB3aXRoIEdMIGlzIHB1c2hlZCBpbnRvIENDVGlsZWRMYXllckltcGwuIER1cmlu
ZyB0cmVlIHN5bmNocm9uaXphdGlvbiwKKyAgICAgICAgdGhlIHRpbGVyIHByb3BlcnRpZXMgYW5k
IHRleHR1cmUgSURzIGFyZSBzeW5jaHJvbml6ZWQgaW50bworICAgICAgICBDQ1RpbGVkTGF5ZXJJ
bXBsLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6YmVzdFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGVB
QSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0
dXJlOjp0ZXh0dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpV
cGRhdGFibGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6ZGlydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6VXBkYXRhYmxlVGlsZTo6Y2xlYXJEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZU1hbmFnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp0aWxlQXQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVyZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRh
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpDQ0xheWVyVGlsaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6c2V0VGlsZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6YWRkVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVGlsaW5nRGF0YTo6dGFrZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRpbGluZ0RhdGE6OnRpbGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0
YTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmNvbnRlbnRS
ZWN0VG9UaWxlSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6
Y29udGVudFJlY3RUb0xheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5n
RGF0YTo6bGF5ZXJSZWN0VG9Db250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VGlsaW5nRGF0YTo6dGlsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
aWxpbmdEYXRhOjp0aWxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxp
bmdEYXRhOjpzZXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxp
bmdEYXRhOjpncm93TGF5ZXJUb0NvbnRhaW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpudW1UaWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUaWxpbmdEYXRhOjpudW1UaWxlc1kpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRpbGluZ0RhdGE6OnRpbGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGlu
Z0RhdGE6OnRleHR1cmVPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0Rh
dGE6OnRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpoYXNC
b3JkZXJUZXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmlzRW1w
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OlRpbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OmkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OmopOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVGlsaW5nRGF0YTo6VGlsZU1hcEtleVRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcEtleVRyYWl0czo6Y29uc3RydWN0RGVs
ZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFw
S2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGls
aW5nRGF0YTo6dGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjpE
cmF3YWJsZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjp0ZXh0dXJlSWQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjpzZXRUZXh0dXJlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnRpbGVBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZWRMYXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6
c2V0VGlsaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5j
VGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmV2aWN0VGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjppc0NDVyk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaWxlZExheWVySW1wbDo6ZHJhd1RpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RpbGVkTGF5ZXJJbXBsOjpzZXRTa2lwc0RyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
ZExheWVySW1wbDo6c2V0VGV4dHVyZU9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGlsZWRMYXllckltcGw6OnNldFNhbXBsZWRUZXhlbEZvcm1hdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaDoKKwogMjAxMS0wOC0xNiAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRHJhdyB0aGUg
cm9vdC8ibm9uLWNvbXBvc2l0ZWQgY29udGVudCIgaW4gY29tcG9zaXRvciBzaWRlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggN2JkYzU5NmE5ZGNhNmMzODBiNzY0ZGMyNjYxNjkwYjgxYzAwNWMxNS4uYmVh
N2FkMmRkY2NhOTVjYTNiN2RiMDVlYWI0MmEwMzFmMWM4MGMxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzUxMCw4ICszNTEwLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJv
bWl1bS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0u
aCcsCkBAIC0zNTYwLDYgKzM1NTgsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IGQ2M2VhMTQ2MWQwNTdkOTA5MmU1ODlmZmUxMjVhOTBjODQw
ZTY2MWQuLjg4MTJkZjYxY2JhYTlkYzNjZjU1NWIzODYzMDVlNmUzOTk1ZTVlZGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEwNCwxMiArMTA0LDEyIEBAIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIAogICAgIEludFJl
Y3QgZGlydHkgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKICAgICBkaXJ0eS5pbnRl
cnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKLSAgICBtX3RpbGVy
LT5pbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOwogCiAg
ICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aWxlci0+
cHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCwgdGV4dHVyZVVwZGF0ZXIoKSk7CisgICAgcHJlcGFy
ZVRvVXBkYXRlKGxheWVyUmVjdCk7CiAgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKIH0K
IApAQCAtMTIyLDYgKzEyMiw3IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRl
eHR1cmVVcGRhdGVySWZOZWVkZWQoKQogewogICAgIGlmIChtX3RleHR1cmVVcGRhdGVyKQogICAg
ICAgICByZXR1cm47CisKICNpZiBVU0UoU0tJQSkKICAgICBpZiAobGF5ZXJSZW5kZXJlcigpLT5z
ZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewogICAgICAgICBtX3RleHR1cmVVcGRhdGVy
ID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250
ZXh0KCksIENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgbGF5ZXJSZW5kZXJl
cigpLT5za2lhQ29udGV4dCgpKTsKQEAgLTEzMSwxMCArMTMyLDUgQEAgdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpCiAgICAgbV90ZXh0dXJl
VXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShsYXllclJlbmRlcmVy
Q29udGV4dCgpLCBDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGxheWVyUmVu
ZGVyZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpOwogfQogCi12b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjpwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpCi17Ci0gICAgbV90aWxlci0+
cHJvdGVjdFRpbGVUZXh0dXJlcyhJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3Vu
ZHMoKSkpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggYzlmZDBkODVjZThlYjMyM2ExMmY5
MDEyYmJlMmYyNDNkZjc4MjQyMC4uYTBlOTZjMzRhMjBkNTQyYTFkYTZlODcxNjA1NTg0YzBmOTFl
ZWM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC02MCw3ICs2MCw2IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCk7CiAgICAgdmlydHVhbCBM
YXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dHVyZVVwZGF0ZXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxl
VGV4dHVyZXMoKTsKIAogICAgIE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX3RleHR1cmVV
cGRhdGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDZlN2E5M2Mw
MDZhYzFiY2E3ZGU0Mjc4YjRmNDczZDFhNWM5YjcyN2IuLmExMTFhMmM3M2NiODdjZWU3NDlmMGY2
MTJkZWI0ZTE0MWE0Y2I3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAt
MTU0LDcgKzE1NCw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZE
aXJ0eSgpCiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAgICAgICAg
IEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7CiAgICAgICAg
IGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX3RpbGVyLT5pbnZh
bGlkYXRlUmVjdChwYWludFJlY3QpOworICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QocGFpbnRS
ZWN0KTsKICAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzSWZEaXJ0eSgpCiAgICAgaWYgKHZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fdGlsZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlTGF5
ZXJSZWN0KCksIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOworICAgIHByZXBhcmVUb1VwZGF0ZSh2
aXNpYmxlTGF5ZXJSZWN0KCkpOwogfQogCiBMYXllclRleHR1cmVVcGRhdGVyKiBJbWFnZUxheWVy
Q2hyb21pdW06OnRleHR1cmVVcGRhdGVyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCmluZGV4IDNhMjg5MTEwMGQ2OTNiYTYwZTExODNlOTBhZmI1YmQwMzg4OWIy
ZTguLmJiYjYwM2YzYWZiMjVmYzdmZWIxNzE1YWQ2ZGRjYmVkMGJmNjkxMDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29u
dGVudEhvc3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKQEAgLTUyMiw2ICs1
MjMsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VUZXh0dXJlcygpCiAg
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyht
X2NvbnRleHQuZ2V0KCkpOwogfQogCitHQzNEZW51bSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJl
c3RUZXh0dXJlRm9ybWF0KCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6YmVzdFRleHR1
cmVGb3JtYXQoY29udGV4dCgpKTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZp
ZXdwb3J0Q2hhbmdlZCgpCiB7CiAgICAgaWYgKG1fY29udGV4dCkKQEAgLTExMDYsNyArMTExMiw3
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygp
CiAgICAgLy8gc3RhcnQgd2hpbGUgd2UgZG8gb3RoZXIgd29yay4gT3RoZXIgcHJvZ3JhbXMgYXJl
IGNyZWF0ZWQgbGF6aWx5IG9uIGZpcnN0IGFjY2Vzcy4KICAgICBtX3NoYXJlZEdlb21ldHJ5ID0g
YWRvcHRQdHIobmV3IEdlb21ldHJ5QmluZGluZyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3Jl
bmRlclN1cmZhY2VQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3Jh
bShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBtX3RpbGVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBM
YXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAgbV90aWxl
clByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbShtX2NvbnRl
eHQuZ2V0KCkpKTsKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Zmx1c2go
KSk7CiAKQEAgLTExNjIsNyArMTE2OCw3IEBAIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6TWFza1By
b2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9nCiAgICAg
cmV0dXJuIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLmdldCgpOwogfQogCi1jb25zdCBMYXll
clRpbGVyQ2hyb21pdW06OlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9n
cmFtKCkKK2NvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dGlsZXJQcm9ncmFtKCkKIHsKICAgICBBU1NFUlQobV90aWxlclByb2dyYW0pOwogICAg
IGlmICghbV90aWxlclByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKQEAgLTExNzIsMTAgKzExNzgs
MTAgQEAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnRpbGVyUHJvZ3JhbSgpCiAgICAgcmV0dXJuIG1fdGlsZXJQcm9ncmFtLmdldCgpOwog
fQogCi1jb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlKiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGUoKQorY29uc3QgQ0NUaWxlZExheWVySW1w
bDo6UHJvZ3JhbVN3aXp6bGUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dp
enpsZSgpCiB7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3aXp6bGUpCi0gICAgICAgIG1fdGls
ZXJQcm9ncmFtU3dpenpsZSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dy
YW1Td2l6emxlKG1fY29udGV4dC5nZXQoKSkpOworICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6
bGUgPSBhZG9wdFB0cihuZXcgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGUobV9jb250
ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3aXp6bGUtPmluaXRpYWxpemVk
KCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQ
cm9ncmFtU3dpenpsZTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwogICAgICAgICBtX3RpbGVyUHJv
Z3JhbVN3aXp6bGUtPmluaXRpYWxpemUoKTsKQEAgLTExODMsMTAgKzExODksMTAgQEAgY29uc3Qg
TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZSogTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp0aWxlclByb2dyYW1Td2kKICAgICByZXR1cm4gbV90aWxlclByb2dyYW1Td2l6emxlLmdldCgp
OwogfQogCi1jb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1BQSogTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp0aWxlclByb2dyYW1BQSgpCitjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9n
cmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtQUEoKQogewogICAgIGlm
ICghbV90aWxlclByb2dyYW1BQSkKLSAgICAgICAgbV90aWxlclByb2dyYW1BQSA9IGFkb3B0UHRy
KG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1BQShtX2NvbnRleHQuZ2V0KCkpKTsKKyAg
ICAgICAgbV90aWxlclByb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsOjpQ
cm9ncmFtQUEobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbUFBLT5p
bml0aWFsaXplZCgpKSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21p
dW06OnRpbGVyUHJvZ3JhbUFBOjppbml0aWFsaXplIiwgdGhpcywgMCk7CiAgICAgICAgIG1fdGls
ZXJQcm9ncmFtQUEtPmluaXRpYWxpemUoKTsKQEAgLTExOTQsMTAgKzEyMDAsMTAgQEAgY29uc3Qg
TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGls
ZXJQcm9ncmFtQUEoKQogICAgIHJldHVybiBtX3RpbGVyUHJvZ3JhbUFBLmdldCgpOwogfQogCi1j
b25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlQUEqIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZUFBKCkKK2NvbnN0IENDVGlsZWRMYXllckltcGw6
OlByb2dyYW1Td2l6emxlQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dp
enpsZUFBKCkKIHsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dpenpsZUFBKQotICAgICAgICBt
X3RpbGVyUHJvZ3JhbVN3aXp6bGVBQSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW06
OlByb2dyYW1Td2l6emxlQUEobV9jb250ZXh0LmdldCgpKSk7CisgICAgICAgIG1fdGlsZXJQcm9n
cmFtU3dpenpsZUFBID0gYWRvcHRQdHIobmV3IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6
emxlQUEobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3aXp6bGVB
QS0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlQUE6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKICAg
ICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEtPmluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNDE3ZjgyMmRlMzFmYzUyOTdjYTQzYTZhNDMyZmY1
NjIwZTZjYTQ1Yi4uYmUyM2Q1MmI2MjdjNjM1ZjU3OTgxNTk5MTg3MmUxM2I3NWZmNjNiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNs
dWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXll
ckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCkBAIC0xMjQsMTAgKzEy
MywxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbSogaGVh
ZHNVcERpc3BsYXlQcm9ncmFtKCk7CiAgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFt
KiByZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6TWFz
a1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOwotICAgIGNvbnN0IExheWVyVGls
ZXJDaHJvbWl1bTo6UHJvZ3JhbSogdGlsZXJQcm9ncmFtKCk7Ci0gICAgY29uc3QgTGF5ZXJUaWxl
ckNocm9taXVtOjpQcm9ncmFtU3dpenpsZSogdGlsZXJQcm9ncmFtU3dpenpsZSgpOwotICAgIGNv
bnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBKiB0aWxlclByb2dyYW1BQSgpOwotICAg
IGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGVBQSogdGlsZXJQcm9ncmFt
U3dpenpsZUFBKCk7CisgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbSogdGlsZXJQ
cm9ncmFtKCk7CisgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGUqIHRp
bGVyUHJvZ3JhbVN3aXp6bGUoKTsKKyAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFt
QUEqIHRpbGVyUHJvZ3JhbUFBKCk7CisgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3Jh
bVN3aXp6bGVBQSogdGlsZXJQcm9ncmFtU3dpenpsZUFBKCk7CiAgICAgY29uc3QgQ0NDYW52YXNM
YXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDUGx1
Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwbHVnaW5MYXllclByb2dyYW0oKTsKICAgICBjb25zdCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbSogdmlkZW9MYXllclJHQkFQcm9ncmFtKCk7CkBA
IC0xNTQsNiArMTUzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyUmVj
dXJzaXZlKExheWVyQ2hyb21pdW0qKTsKIAorICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0
KCk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGJvb2wgc19pblBhaW50TGF5ZXJDb250
ZW50czsKICNlbmRpZgpAQCAtMjE4LDEwICsyMTksMTAgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
R2VvbWV0cnlCaW5kaW5nPiBtX3NoYXJlZEdlb21ldHJ5OwogICAgIE93blB0cjxMYXllckNocm9t
aXVtOjpCb3JkZXJQcm9ncmFtPiBtX2JvcmRlclByb2dyYW07CiAgICAgT3duUHRyPENDSGVhZHNV
cERpc3BsYXk6OlByb2dyYW0+IG1faGVhZHNVcERpc3BsYXlQcm9ncmFtOwotICAgIE93blB0cjxM
YXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0+IG1fdGlsZXJQcm9ncmFtOwotICAgIE93blB0cjxM
YXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlPiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGU7
Ci0gICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBPiBtX3RpbGVyUHJvZ3Jh
bUFBOwotICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlQUE+IG1f
dGlsZXJQcm9ncmFtU3dpenpsZUFBOworICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9n
cmFtPiBtX3RpbGVyUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3Jh
bVN3aXp6bGU+IG1fdGlsZXJQcm9ncmFtU3dpenpsZTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVy
SW1wbDo6UHJvZ3JhbUFBPiBtX3RpbGVyUHJvZ3JhbUFBOworICAgIE93blB0cjxDQ1RpbGVkTGF5
ZXJJbXBsOjpQcm9ncmFtU3dpenpsZUFBPiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQTsKICAgICBP
d25QdHI8Q0NDYW52YXNMYXllckltcGw6OlByb2dyYW0+IG1fY2FudmFzTGF5ZXJQcm9ncmFtOwog
ICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbT4gbV9wbHVnaW5MYXllclByb2dy
YW07CiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW0+IG1fcmVuZGVyU3Vy
ZmFjZU1hc2tQcm9ncmFtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDIxZDUy
ZDAyYTVhMjFiNjExMWY3OGI1NDBhZWM2OGMzNDdhMDllZmEuLjk3NmQ3OWVjOTkzYjNmYWU5MjU4
MWJlMjNlMzhhM2ViNGQxYzZmNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAg
LTMwLDYgKzMwLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNs
dWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03OCw0ICs3OSwzIEBAIHByaXZhdGU6CiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
I2VuZGlmIC8vIExheWVyVGV4dHVyZVVwZGF0ZXJfaAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9t
aXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZkOTZmOTIzYjYwNzAwM2Zl
MzQ5MTA5ZmE5OGIxNzJjZGIwZjE0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjY4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLQotI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiRXh0
ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29s
b3IuaCIKLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBGbG9hdFBvaW50M0QgRWRnZTsKLQotUGFz
c093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikKLXsKLSAgICBpZiAoIWxheWVyUmVuZGVyZXIg
fHwgdGlsZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVtKGxheWVyUmVuZGVyZXIsIHRpbGVT
aXplLCBib3JkZXIpKTsKLX0KLQotTGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hyb21p
dW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQotICAgIDogbV90ZXh0dXJlRm9ybWF0
KFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0dXJlRm9ybWF0KGxheWVyUmVuZGVyZXItPmNvbnRleHQo
KSkpCi0gICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKLSAgICAsIG1fdGV4dHVyZU9yaWVudGF0aW9u
KExheWVyVGV4dHVyZVVwZGF0ZXI6OkludmFsaWRPcmllbnRhdGlvbikKLSAgICAsIG1fc2FtcGxl
ZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEludmFs
aWQpCi0gICAgLCBtX3RpbGluZ0RhdGEobWF4KHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXplLmhl
aWdodCgpKSwgMCwgMCwgYm9yZGVyID09IEhhc0JvcmRlclRleGVscykKLSAgICAsIG1fbGF5ZXJS
ZW5kZXJlcihsYXllclJlbmRlcmVyKQotewotICAgIHNldFRpbGVTaXplKHRpbGVTaXplKTsKLX0K
LQotTGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxlckNocm9taXVtKCkKLXsKLSAgICByZXNl
dCgpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRCogTGF5ZXJUaWxlckNocm9taXVtOjpsYXllclJl
bmRlcmVyQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7Ci0g
ICAgcmV0dXJuIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOwotfQotCi12b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAo
bV90aWxlU2l6ZSA9PSBzaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXNldCgpOwotCi0g
ICAgbV90aWxlU2l6ZSA9IHNpemU7Ci0gICAgbV90aWxpbmdEYXRhLnNldE1heFRleHR1cmVTaXpl
KG1heChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLX0KLQotTWFuYWdlZFRleHR1cmUq
IExheWVyVGlsZXJDaHJvbWl1bTo6Z2V0U2luZ2xlVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fdGls
aW5nRGF0YS5udW1UaWxlcygpICE9IDEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVGlsZSog
dGlsZSA9IHRpbGVBdCgwLCAwKTsKLSAgICByZXR1cm4gdGlsZSA/IHRpbGUtPnRleHR1cmUoKSA6
IDA7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNldCgpCi17Ci0gICAgbV90aWxl
cy5jbGVhcigpOwotICAgIG1fdW51c2VkVGlsZXMuY2xlYXIoKTsKLSAgICBtX3RpbGluZ0RhdGEu
c2V0VG90YWxTaXplKDAsIDApOwotICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIG1f
dXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLX0KLQotTGF5ZXJUaWxlckNocm9taXVtOjpUaWxlKiBM
YXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQotewotICAgIEFTU0VS
VCghdGlsZUF0KGksIGopKTsKLQotICAgIFJlZlB0cjxUaWxlPiB0aWxlOwotICAgIGlmIChtX3Vu
dXNlZFRpbGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgdGlsZSA9IG1fdW51c2VkVGlsZXMubGFz
dCgpLnJlbGVhc2UoKTsKLSAgICAgICAgbV91bnVzZWRUaWxlcy5yZW1vdmVMYXN0KCk7Ci0gICAg
ICAgIEFTU0VSVCh0aWxlLT5yZWZDb3VudCgpID09IDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1RleHR1
cmVNYW5hZ2VyKCk7Ci0gICAgICAgIHRpbGUgPSBhZG9wdFJlZihuZXcgVGlsZShNYW5hZ2VkVGV4
dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7Ci0gICAgfQotICAgIG1fdGlsZXMuYWRkKG1ha2VfcGFp
cihpLCBqKSwgdGlsZSk7Ci0KLSAgICB0aWxlLT5tb3ZlVG8oaSwgaik7Ci0gICAgdGlsZS0+bV9k
aXJ0eUxheWVyUmVjdCA9IHRpbGVMYXllclJlY3QodGlsZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4g
dGlsZS5nZXQoKTsKLX0KLQotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVUaWxl
cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBpZiAoIW1fdGlsZXMuc2l6ZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8VGlsZU1hcEtleT4gcmVtb3ZlS2V5czsK
LSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ZXIg
IT0gbV90aWxlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFRpbGUqIHRpbGUgPSBpdGVyLT5z
ZWNvbmQuZ2V0KCk7Ci0gICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlQ29udGVudFJlY3Qo
dGlsZSk7Ci0gICAgICAgIGlmICh0aWxlUmVjdC5pbnRlcnNlY3RzKGNvbnRlbnRSZWN0KSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZW1vdmVLZXlzLmFwcGVuZChpdGVyLT5maXJz
dCk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVLZXlzLnNpemUo
KTsgKytpKQotICAgICAgICBtX3VudXNlZFRpbGVzLmFwcGVuZChtX3RpbGVzLnRha2UocmVtb3Zl
S2V5c1tpXSkpOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJlY3RUb1Rp
bGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQmIGxlZnQsIGludCYgdG9w
LCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKLXsKLSAgICBjb25zdCBJbnRSZWN0IGxh
eWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotCi0gICAgbGVm
dCA9IG1fdGlsaW5nRGF0YS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC54KCkpOwot
ICAgIHRvcCA9IG1fdGlsaW5nRGF0YS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC55
KCkpOwotICAgIHJpZ2h0ID0gbV90aWxpbmdEYXRhLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQobGF5
ZXJSZWN0Lm1heFgoKSAtIDEpOwotICAgIGJvdHRvbSA9IG1fdGlsaW5nRGF0YS50aWxlWUluZGV4
RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC5tYXhZKCkgLSAxKTsKLX0KLQotSW50UmVjdCBMYXllclRp
bGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9zKGNvbnRlbnRSZWN0LngoKSAtIG1fbGF5
ZXJQb3NpdGlvbi54KCksIGNvbnRlbnRSZWN0LnkoKSAtIG1fbGF5ZXJQb3NpdGlvbi55KCkpOwot
ICAgIEludFJlY3QgbGF5ZXJSZWN0KHBvcywgY29udGVudFJlY3Quc2l6ZSgpKTsKLQotICAgIC8v
IENsaXAgdG8gdGhlIHBvc2l0aW9uLgotICAgIGlmIChwb3MueCgpIDwgMCB8fCBwb3MueSgpIDwg
MCkKLSAgICAgICAgbGF5ZXJSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZShj
b250ZW50UmVjdC53aWR0aCgpICsgcG9zLngoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkgKyBwb3Mu
eSgpKSk7Ci0gICAgcmV0dXJuIGxheWVyUmVjdDsKLX0KLQotSW50UmVjdCBMYXllclRpbGVyQ2hy
b21pdW06OmxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBj
b25zdAotewotICAgIEludFJlY3QgY29udGVudFJlY3QgPSBsYXllclJlY3Q7Ci0gICAgY29udGVu
dFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKLSAg
ICByZXR1cm4gY29udGVudFJlY3Q7Ci19Ci0KLUxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZSogTGF5
ZXJUaWxlckNocm9taXVtOjp0aWxlQXQoaW50IGksIGludCBqKSBjb25zdAotewotICAgIFRpbGUq
IHRpbGUgPSBtX3RpbGVzLmdldChtYWtlX3BhaXIoaSwgaikpLmdldCgpOwotICAgIEFTU0VSVCgh
dGlsZSB8fCB0aWxlLT5yZWZDb3VudCgpID09IDEpOwotICAgIHJldHVybiB0aWxlOwotfQotCi1J
bnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRSZWN0KGNvbnN0IFRpbGUqIHRp
bGUpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHRpbGVMYXllclJlY3QodGls
ZSk7Ci0gICAgY29udGVudFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9z
aXRpb24ueSgpKTsKLSAgICByZXR1cm4gY29udGVudFJlY3Q7Ci19Ci0KLUludFJlY3QgTGF5ZXJU
aWxlckNocm9taXVtOjp0aWxlTGF5ZXJSZWN0KGNvbnN0IFRpbGUqIHRpbGUpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgaW50IGluZGV4ID0gbV90aWxpbmdEYXRhLnRpbGVJbmRleCh0aWxlLT5pKCksIHRp
bGUtPmooKSk7Ci0gICAgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5k
c1dpdGhCb3JkZXIoaW5kZXgpOwotICAgIGxheWVyUmVjdC5zZXRTaXplKG1fdGlsZVNpemUpOwot
ICAgIHJldHVybiBsYXllclJlY3Q7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjppbnZh
bGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBpZiAoY29udGVu
dFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
cm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwotCi0gICAgLy8gRGlydHkgcmVjdHMgYXJl
IGFsd2F5cyBpbiBsYXllciBzcGFjZSwgYXMgdGhlIGxheWVyIGNvdWxkIGJlIHJlcG9zaXRpb25l
ZAotICAgIC8vIGFmdGVyIGludmFsaWRhdGlvbi4KLSAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVj
dCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotCi0gICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVu
dFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgZm9yIChpbnQgaiA9IHRvcDsg
aiA8PSBib3R0b207ICsraikgewotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdo
dDsgKytpKSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAg
ICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
SW50UmVjdCBib3VuZCA9IHRpbGVMYXllclJlY3QodGlsZSk7Ci0gICAgICAgICAgICBib3VuZC5p
bnRlcnNlY3QobGF5ZXJSZWN0KTsKLSAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3Qu
dW5pdGUoYm91bmQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6aW52YWxpZGF0ZUVudGlyZUxheWVyKCkKLXsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlcy5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQtPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAg
ICAgIG1fdW51c2VkVGlsZXMuYXBwZW5kKGl0ZXItPnNlY29uZC5yZWxlYXNlKCkpOwotICAgIH0K
LSAgICBtX3RpbGVzLmNsZWFyKCk7Ci0KLSAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAs
IDApOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJlcyhj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OwotICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKLQotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2op
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAg
ICAgICAgVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSB8
fCAhdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZVNpemUsIG1fdGV4dHVyZUZvcm1hdCkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHRpbGUtPnRleHR1cmUo
KS0+cmVzZXJ2ZShtX3RpbGVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcikK
LXsKLSAgICBtX3NraXBzRHJhdyA9IGZhbHNlOwotCi0gICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1w
dHkoKSkgewotICAgICAgICBtX3VwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBJbnZhbGlkYXRlIG9sZCB0aWxlcyB0aGF0IHdlcmUgcHJldmlv
dXNseSB1c2VkIGJ1dCBhcmVuJ3QgaW4gdXNlIHRoaXMKLSAgICAvLyBmcmFtZSBzbyB0aGF0IHRo
ZXkgY2FuIGdldCByZXVzZWQgZm9yIG5ldyB0aWxlcy4KLSAgICBpbnZhbGlkYXRlVGlsZXMoY29u
dGVudFJlY3QpOwotICAgIGdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KLSAgICBp
ZiAoIW51bVRpbGVzKCkpIHsKLSAgICAgICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIHRpbGVzIGFzIG5lZWRlZCwgZXhw
YW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAotICAgIC8vIHRoZSBkaXJ0eSByZWdp
b25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KLSAgICBJbnRSZWN0IGRpcnR5TGF5ZXJSZWN0Owot
ICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgY29udGVudFJlY3RUb1RpbGVJ
bmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIGZvciAo
aW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGxl
ZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAgICAgICAgVGlsZSogdGlsZSA9IHRpbGVBdChp
LCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSkKLSAgICAgICAgICAgICAgICB0aWxlID0gY3Jl
YXRlVGlsZShpLCBqKTsKLQotICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFs
aWQobV90aWxlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KSkKLSAgICAgICAgICAgICAgICB0aWxlLT5t
X2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVjdCh0aWxlKTsKLQotICAgICAgICAgICAgaWYg
KCF0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KSkg
ewotICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBy
ZXNldCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZGlydHlMYXllclJlY3QudW5pdGUodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEdWUgdG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVj
dCBpcyBleHRlbmRlZCB0byB0aWxlIGJvdW5kYXJpZXMsIGl0Ci0gICAgLy8gbWF5IGVuZCB1cCBv
dmVybGFwcGluZyBtb3JlIHRpbGVzIHRoYW4gdGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVj
b3JkCi0gICAgLy8gdGhhdCBvcmlnaW5hbCByZWN0IHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRp
bGVzIHRoYW4gbmVjZXNzYXJ5LgotICAgIG1fdXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0OwotCi0g
ICAgbV9wYWludFJlY3QgPSBsYXllclJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsK
LSAgICBpZiAoZGlydHlMYXllclJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB0ZXh0dXJlVXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVTaXpl
LCBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkpOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6dXBkYXRlUmVjdChMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcikKLXsK
LSAgICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9m
Ziwgd2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVw
ZGF0ZS4KLSAgICBpZiAoIW1fdGlsaW5nRGF0YS50b3RhbFNpemVYKCkgfHwgIW1fdGlsaW5nRGF0
YS50b3RhbFNpemVZKCkgfHwgbV91cGRhdGVSZWN0LmlzRW1wdHkoKSB8fCAhbnVtVGlsZXMoKSB8
fCBtX3NraXBzRHJhdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgIG1fdGV4dHVyZU9yaWVudGF0
aW9uID0gdGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0aW9uKCk7Ci0gICAgbV9zYW1wbGVkVGV4ZWxG
b3JtYXQgPSB0ZXh0dXJlVXBkYXRlci0+c2FtcGxlZFRleGVsRm9ybWF0KG1fdGV4dHVyZUZvcm1h
dCk7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIGNvbnRlbnRSZWN0
VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0g
ICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewotICAgICAgICBmb3IgKGlu
dCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0g
dGlsZUF0KGksIGopOwotICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIHRp
bGUgPSBjcmVhdGVUaWxlKGksIGopOwotICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUtPmRpcnR5
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIENhbGN1bGF0
ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCi0gICAgICAgICAgICBJbnRSZWN0
IHNvdXJjZVJlY3QgPSB0aWxlQ29udGVudFJlY3QodGlsZSk7Ci0gICAgICAgICAgICBjb25zdCBJ
bnRQb2ludCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICBzb3Vy
Y2VSZWN0LmludGVyc2VjdChsYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXll
clJlY3QpKTsKLSAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGlu
ZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhh
dCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCi0gICAgICAgICAgICBz
b3VyY2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAoc291cmNl
UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IEFTU0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7Ci0KLSAgICAgICAgICAgIC8v
IENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KLSAgICAgICAg
ICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3IueCgp
LCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7Ci0gICAg
ICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0go
KTsKLQotICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMg
dGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KLSAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0
KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFp
bnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpIDwgMCkKLSAgICAg
ICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSA8IDAp
Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54
KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAg
ICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0
LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgQ1JBU0go
KTsKLQotICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250ZXh0KTsK
LSAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxpbmdEYXRhLmJvcmRlclRl
eGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpO
RUFSRVNUOwotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIGZpbHRlcikpOwotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOwotICAgICAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwKSk7Ci0KLSAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyLT51cGRhdGVUZXh0dXJlUmVjdCh0
aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKLSAgICAgICAgICAgIHRpbGUt
PmNsZWFyRGlydHkoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBMYXllclRpbGVyQ2hy
b21pdW06OnNldExheWVyUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIGxheWVyUG9zaXRpb24pCi17
Ci0gICAgbV9sYXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKLX0KLQotdm9pZCBMYXllclRp
bGVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
aWYgKG1fc2tpcHNEcmF3IHx8ICFtX3RpbGVzLnNpemUoKSB8fCBjb250ZW50UmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIGRlZmluZWQoT1NfQ0hST01FT1MpCi0gICAgLy8g
RklYTUU6IERpc2FibGUgYW50aS1hbGlhc2luZyB0byB3b3JrYXJvdW5kIGJyb2tlbiBkcml2ZXIu
Ci0gICAgYm9vbCB1c2VBQSA9IGZhbHNlOwotI2Vsc2UKLSAgICAvLyBVc2UgYW50aS1hbGlhc2lu
ZyBwcm9ncmFtcyB3aGVuIGJvcmRlciB0ZXhlbHMgYXJlIHByZXNldCBhbmQgdHJhbnNmb3JtCi0g
ICAgLy8gaXMgbm90IGFuIGludGVnZXIgdHJhbnNsYXRpb24uCi0gICAgYm9vbCB1c2VBQSA9ICht
X3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkgJiYgIWdsb2JhbFRyYW5zZm9ybS5pc0ludGVnZXJU
cmFuc2xhdGlvbigpKTsKLSNlbmRpZgotCi0gICAgc3dpdGNoIChtX3NhbXBsZWRUZXhlbEZvcm1h
dCkgewotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdC
QToKLSAgICAgICAgaWYgKHVzZUFBKQotICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0
LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFt
QUEoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1BQSgpLT5mcmFnbWVudFNoYWRlcigp
LmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclBy
b2dyYW1BQSgpLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9w
YWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtKCksIC0xLCAtMSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0
QkdSQToKLSAgICAgICAgaWYgKHVzZUFBKQotICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRS
ZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9n
cmFtU3dpenpsZUFBKCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCkt
PmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBsYXllclJl
bmRlcmVyKCktPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VM
b2NhdGlvbigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRS
ZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9n
cmFtU3dpenpsZSgpLCAtMSwgLTEpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNo
cm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCi17
Ci0gICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0
LgotICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50
UmVjdCk7Ci0gICAgSW50U2l6ZSByZWN0U2l6ZSA9IEludFNpemUobGF5ZXJSZWN0Lm1heFgoKSwg
bGF5ZXJSZWN0Lm1heFkoKSk7Ci0KLSAgICBJbnRTaXplIG9sZExheWVyU2l6ZShtX3RpbGluZ0Rh
dGEudG90YWxTaXplWCgpLCBtX3RpbGluZ0RhdGEudG90YWxTaXplWSgpKTsKLSAgICBJbnRTaXpl
IG5ld1NpemUgPSByZWN0U2l6ZS5leHBhbmRlZFRvKG9sZExheWVyU2l6ZSk7Ci0gICAgbV90aWxp
bmdEYXRhLnNldFRvdGFsU2l6ZShuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkpOwot
fQotCi1zdGF0aWMgYm9vbCBpc0NDVyhjb25zdCBGbG9hdFF1YWQmIHF1YWQpCi17Ci0gICAgRmxv
YXRQb2ludCB2MSA9IEZsb2F0UG9pbnQocXVhZC5wMigpLngoKSAtIHF1YWQucDEoKS54KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5wMigpLnkoKSAtIHF1YWQucDEoKS55
KCkpOwotICAgIEZsb2F0UG9pbnQgdjIgPSBGbG9hdFBvaW50KHF1YWQucDMoKS54KCkgLSBxdWFk
LnAyKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWQucDMoKS55KCkg
LSBxdWFkLnAyKCkueSgpKTsKLSAgICByZXR1cm4gKHYxLngoKSAqIHYyLnkoKSAtIHYxLnkoKSAq
IHYyLngoKSkgPCAwOwotfQotCi1zdGF0aWMgRWRnZSBjb21wdXRlRWRnZShjb25zdCBGbG9hdFBv
aW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBxLCBmbG9hdCBzaWduKQotewotICAgIEFTU0VSVChw
ICE9IHEpOwotCi0gICAgRmxvYXRQb2ludCB0YW5nZW50KHAueSgpIC0gcS55KCksIHEueCgpIC0g
cC54KCkpOwotICAgIGZsb2F0IHNjYWxlID0gc2lnbiAvIHRhbmdlbnQubGVuZ3RoKCk7Ci0gICAg
ZmxvYXQgY3Jvc3MyID0gcC54KCkgKiBxLnkoKSAtIHEueCgpICogcC55KCk7Ci0KLSAgICByZXR1
cm4gRWRnZSh0YW5nZW50LngoKSAqIHNjYWxlLAotICAgICAgICAgICAgICAgIHRhbmdlbnQueSgp
ICogc2NhbGUsCi0gICAgICAgICAgICAgICAgY3Jvc3MyICogc2NhbGUpOwotfQotCi1zdGF0aWMg
RmxvYXRQb2ludCBpbnRlcnNlY3QoY29uc3QgRWRnZSYgYSwgY29uc3QgRWRnZSYgYikKLXsKLSAg
ICByZXR1cm4gRmxvYXRQb2ludCgKLSAgICAgICAgKGEueSgpICogYi56KCkgLSBiLnkoKSAqIGEu
eigpKSAvIChhLngoKSAqIGIueSgpIC0gYi54KCkgKiBhLnkoKSksCi0gICAgICAgIChhLngoKSAq
IGIueigpIC0gYi54KCkgKiBhLnooKSkgLyAoYi54KCkgKiBhLnkoKSAtIGEueCgpICogYi55KCkp
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJh
d1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBp
bnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbikKLXsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgobGF5ZXJSZW5kZXJlcigpLT53aW5kb3dNYXRy
aXgoKSAqIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpICogZ2xvYmFsVHJhbnNm
b3JtKTsKLQotICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgWiBjb21wb25lbnQuCi0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbWF0cml4WFlXID0KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXgobWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIDAsIG1hdHJpeC5tMTQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIDAsIG1hdHJp
eC5tMjQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRy
aXgubTMyKCksIDEsIG1hdHJpeC5tMzQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIDAsIG1hdHJpeC5tNDQoKSk7Ci0KLSAgICAvLyBE
b24ndCBkcmF3IGFueSB0aWxlcyB3aGVuIG1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZS4KLSAgICBp
ZiAoIW1hdHJpeFhZVy5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZSA9IG1hdHJpeFhZVy5pbnZlcnNlKCk7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Ci0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFj
dGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0KLSAgICAvLyBNYXAg
Y29udGVudCByZWN0YW5nbGUgdG8gZGV2aWNlIHNwYWNlLgotICAgIEZsb2F0UXVhZCBkZXZpY2VR
dWFkID0gbWF0cml4Lm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0KSk7Ci0KLSAgICAvLyBD
b3VudGVyLWNsb2Nrd2lzZT8KLSAgICBmbG9hdCBzaWduID0gaXNDQ1coZGV2aWNlUXVhZCkgPyAt
MSA6IDE7Ci0KLSAgICAvLyBDb21wdXRlIG91dGVyIGVkZ2VzLgotICAgIEVkZ2UgbGVmdEVkZ2Ug
PSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnA0KCksIGRldmljZVF1YWQucDEoKSwgc2lnbik7Ci0g
ICAgRWRnZSByaWdodEVkZ2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnAyKCksIGRldmljZVF1
YWQucDMoKSwgc2lnbik7Ci0gICAgRWRnZSB0b3BFZGdlID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVh
ZC5wMSgpLCBkZXZpY2VRdWFkLnAyKCksIHNpZ24pOwotICAgIEVkZ2UgYm90dG9tRWRnZSA9IGNv
bXB1dGVFZGdlKGRldmljZVF1YWQucDMoKSwgZGV2aWNlUXVhZC5wNCgpLCBzaWduKTsKLQotICAg
IGlmIChlZGdlTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgLy8gTW92ZSBvdXRlciBlZGdlcyB0
byBlbnN1cmUgdGhhdCBhbGwgcGFydGlhbGx5IGNvdmVyZWQgcGl4ZWxzIGFyZQotICAgICAgICAv
LyBwcm9jZXNzZWQuCi0gICAgICAgIGxlZnRFZGdlLm1vdmUoMCwgMCwgMC41Zik7Ci0gICAgICAg
IHJpZ2h0RWRnZS5tb3ZlKDAsIDAsIDAuNWYpOwotICAgICAgICB0b3BFZGdlLm1vdmUoMCwgMCwg
MC41Zik7Ci0gICAgICAgIGJvdHRvbUVkZ2UubW92ZSgwLCAwLCAwLjVmKTsKLQotICAgICAgICBm
bG9hdCBlZGdlWzEyXTsKLSAgICAgICAgZWRnZVswXSA9IGxlZnRFZGdlLngoKTsKLSAgICAgICAg
ZWRnZVsxXSA9IGxlZnRFZGdlLnkoKTsKLSAgICAgICAgZWRnZVsyXSA9IGxlZnRFZGdlLnooKTsK
LSAgICAgICAgZWRnZVszXSA9IHRvcEVkZ2UueCgpOwotICAgICAgICBlZGdlWzRdID0gdG9wRWRn
ZS55KCk7Ci0gICAgICAgIGVkZ2VbNV0gPSB0b3BFZGdlLnooKTsKLSAgICAgICAgZWRnZVs2XSA9
IHJpZ2h0RWRnZS54KCk7Ci0gICAgICAgIGVkZ2VbN10gPSByaWdodEVkZ2UueSgpOwotICAgICAg
ICBlZGdlWzhdID0gcmlnaHRFZGdlLnooKTsKLSAgICAgICAgZWRnZVs5XSA9IGJvdHRvbUVkZ2Uu
eCgpOwotICAgICAgICBlZGdlWzEwXSA9IGJvdHRvbUVkZ2UueSgpOwotICAgICAgICBlZGdlWzEx
XSA9IGJvdHRvbUVkZ2UueigpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTNmdihlZGdlTG9jYXRpb24sIGVkZ2UsIDQpKTsKLSAgICB9Ci0KLSAgICBFZGdlIHByZXZFZGdl
WSA9IHRvcEVkZ2U7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIGNv
bnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29u
dGVudFJlY3QpOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAg
ICAgICAgRWRnZSBwcmV2RWRnZVggPSBsZWZ0RWRnZTsKLQotICAgICAgICBFZGdlIGVkZ2VZID0g
Ym90dG9tRWRnZTsKLSAgICAgICAgaWYgKGogPCAobV90aWxpbmdEYXRhLm51bVRpbGVzWSgpIC0g
MSkpIHsKLSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB1bmlvblJlY3QobV90aWxpbmdE
YXRhLnRpbGVCb3VuZHMobV90aWxpbmdEYXRhLnRpbGVJbmRleCgwLCBqKSksIG1fdGlsaW5nRGF0
YS50aWxlQm91bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5kZXgobV90aWxpbmdEYXRhLm51bVRpbGVz
WCgpIC0gMSwgaikpKTsKLSAgICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3Qp
OwotCi0gICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHJvd3MuCi0gICAgICAgICAgICBpZiAodGls
ZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQb3NpdGlvbi55KCkp
OwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3Qu
bWF4WSgpKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QueCgpLCB0aWxlUmVj
dC5tYXhZKCkpOwotCi0gICAgICAgICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4K
LSAgICAgICAgICAgIHAxID0gbWF0cml4Lm1hcFBvaW50KHAxKTsKLSAgICAgICAgICAgIHAyID0g
bWF0cml4Lm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgLy8gQ29tcHV0ZSBob3Jpem9udGFs
IGVkZ2UuCi0gICAgICAgICAgICBlZGdlWSA9IGNvbXB1dGVFZGdlKHAxLCBwMiwgc2lnbik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7
Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAgICAgICAgaWYg
KCF0aWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBBU1NFUlQo
dGlsZS0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOwotCi0gICAgICAgICAgICB0aWxlLT50ZXh0
dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRleHQpOwotCi0gICAgICAgICAgICAvLyBEb24ndCB1c2Ug
dGlsZUNvbnRlbnRSZWN0IGhlcmUsIGFzIHRoYXQgY29udGFpbnMgdGhlIGZ1bGwKLSAgICAgICAg
ICAgIC8vIHJlY3Qgd2l0aCBib3JkZXIgdGV4ZWxzIHdoaWNoIHNob3VsZG4ndCBiZSBkcmF3bi4K
LSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5kcyht
X3RpbGluZ0RhdGEudGlsZUluZGV4KHRpbGUtPmkoKSwgdGlsZS0+aigpKSk7Ci0gICAgICAgICAg
ICBJbnRSZWN0IGRpc3BsYXlSZWN0ID0gdGlsZVJlY3Q7Ci0gICAgICAgICAgICB0aWxlUmVjdC5p
bnRlcnNlY3QobGF5ZXJSZWN0KTsKLQotICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiBob3cg
dGhlIHRvcCBsZWZ0IGhhcyBtb3ZlZCwgc28gdGhlIHRleHR1cmUgY2FuIGJlCi0gICAgICAgICAg
ICAvLyBvZmZzZXQgdGhlIHNhbWUgYW1vdW50LgotICAgICAgICAgICAgSW50U2l6ZSBkaXNwbGF5
T2Zmc2V0ID0gdGlsZVJlY3QubWluWE1pbllDb3JuZXIoKSAtIGRpc3BsYXlSZWN0Lm1pblhNaW5Z
Q29ybmVyKCk7Ci0KLSAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgdGlsZXMuCi0gICAgICAgICAg
ICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQb3Np
dGlvbi55KCkpOwotCi0gICAgICAgICAgICBGbG9hdFJlY3QgY2xhbXBSZWN0KHRpbGVSZWN0KTsK
LSAgICAgICAgICAgIC8vIENsYW1wIHRleHR1cmUgY29vcmRpbmF0ZXMgdG8gYXZvaWQgc2FtcGxp
bmcgb3V0c2lkZSB0aGUgbGF5ZXIKLSAgICAgICAgICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUgdGls
ZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhlbAotICAgICAgICAgICAgLy8gbWlu
dXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxheWVycy4gVGhlIHJlc3VsdGluZyBjbGFtcCByZWdp
b24KLSAgICAgICAgICAgIC8vIGlzIG1hcHBlZCB0byB0aGUgdW5pdCBzcXVhcmUgYnkgdGhlIHZl
cnRleCBzaGFkZXIgYW5kIG1hcHBlZAotICAgICAgICAgICAgLy8gYmFjayB0byBub3JtYWxpemVk
IHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50IHNoYWRlcgotICAgICAgICAgICAg
Ly8gYWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAwLTEgcmFuZ2UuCi0gICAgICAgICAgICBjb25zdCBm
bG9hdCBlcHNpbG9uID0gMSAvIDEwMjQuMGY7Ci0gICAgICAgICAgICBmbG9hdCBjbGFtcFggPSBt
aW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVwc2lsb24pOwotICAgICAgICAgICAg
ZmxvYXQgY2xhbXBZID0gbWluKDAuNSwgY2xhbXBSZWN0LmhlaWdodCgpIC8gMi4wIC0gZXBzaWxv
bik7Ci0gICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVgoLWNsYW1wWCk7Ci0gICAgICAgICAg
ICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgY2xh
bXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1pbllDb3JuZXIoKSAtIEZsb2F0UmVjdCh0aWxlUmVj
dCkubWluWE1pbllDb3JuZXIoKTsKLQotICAgICAgICAgICAgRmxvYXRQb2ludCB0ZXhPZmZzZXQg
PSBtX3RpbGluZ0RhdGEudGV4dHVyZU9mZnNldCh0aWxlLT5pKCksIHRpbGUtPmooKSkgKyBjbGFt
cE9mZnNldCArIEZsb2F0U2l6ZShkaXNwbGF5T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IHRp
bGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVTaXplLndpZHRoKCkpOwotICAgICAg
ICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVTaXplLmhl
aWdodCgpKTsKLQotICAgICAgICAgICAgLy8gTWFwIGNsYW1waW5nIHJlY3RhbmdsZSB0byB1bml0
IHNxdWFyZS4KLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVggPSAtY2xhbXBS
ZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4
VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOwotICAgICAg
ICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1wUmVj
dC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGlsZVJlY3Qu
aGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCB0byBu
b3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBmbG9hdCBmcmFnbWVu
dFRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAg
ZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zmc2V0LnkoKSAvIHRpbGVIZWlnaHQ7
Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgp
IC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBjbGFt
cFJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OwotCi0gICAgICAgICAgICAvLyBPcGVuR0wgY29v
cmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgotICAgICAgICAgICAgLy8gSWYgdGlsZSB0ZXh0
dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMu
Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlT3JpZW50YXRpb24gPT0gTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRUZXhU
cmFuc2xhdGVZID0gMS4wIC0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgICAg
IGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEVkZ2UgZWRnZVggPSByaWdodEVkZ2U7Ci0gICAgICAgICAgICBpZiAoaSA8IChtX3RpbGluZ0Rh
dGEubnVtVGlsZXNYKCkgLSAxKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGls
ZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQg
cDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0gICAgICAgICAgICAgICAg
Ly8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCi0gICAgICAgICAgICAgICAgcDEgPSBtYXRy
aXgubWFwUG9pbnQocDEpOwotICAgICAgICAgICAgICAgIHAyID0gbWF0cml4Lm1hcFBvaW50KHAy
KTsKLQotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVydGljYWwgZWRnZS4KLSAgICAgICAg
ICAgICAgICBlZGdlWCA9IGNvbXB1dGVFZGdlKHAxLCBwMiwgc2lnbik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2UgcXVhZC4KLSAgICAgICAgICAg
IEZsb2F0UXVhZCBkZXZpY2VRdWFkKGludGVyc2VjdChlZGdlWSwgcHJldkVkZ2VYKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdChwcmV2RWRnZVgsIHByZXZFZGdl
WSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QocHJldkVkZ2VZ
LCBlZGdlWCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QoZWRn
ZVgsIGVkZ2VZKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgot
ICAgICAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBpbnZlcnNlLm1hcFF1YWQoZGV2aWNlUXVhZCk7
Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KLSAgICAgICAgICAgIHF1
YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYgLyB0aWxlUmVjdC5oZWlnaHQo
KSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uID09IC0x
KSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRv
IHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAgICAgICAgIC8vIHRoaXMgd2hpbGUg
c3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwotICAgICAgICAgICAgICAgIC8vIGZy
YWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBub24tbmVnYXRpdmUK
LSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheSB0
aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAgIC8vIHNhbXBsaW5nIG91dHNpZGUg
dGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVudFRl
eFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRUZXhT
Y2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBmcmFnbWVudFRl
eFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICo9IGZyYWdtZW50
VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21l
bnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKz0g
ZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9ybUxv
Y2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJh
Z21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudmVydGV4
VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJh
bnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKLQotICAgICAgICAg
ICAgZmxvYXQgcG9pbnRbOF07Ci0gICAgICAgICAgICBwb2ludFswXSA9IHF1YWQucDEoKS54KCk7
Ci0gICAgICAgICAgICBwb2ludFsxXSA9IHF1YWQucDEoKS55KCk7Ci0gICAgICAgICAgICBwb2lu
dFsyXSA9IHF1YWQucDIoKS54KCk7Ci0gICAgICAgICAgICBwb2ludFszXSA9IHF1YWQucDIoKS55
KCk7Ci0gICAgICAgICAgICBwb2ludFs0XSA9IHF1YWQucDMoKS54KCk7Ci0gICAgICAgICAgICBw
b2ludFs1XSA9IHF1YWQucDMoKS55KCk7Ci0gICAgICAgICAgICBwb2ludFs2XSA9IHF1YWQucDQo
KS54KCk7Ci0gICAgICAgICAgICBwb2ludFs3XSA9IHF1YWQucDQoKS55KCk7Ci0gICAgICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTJmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS5wb2ludExvY2F0aW9uKCksIHBvaW50LCA0KSk7Ci0KLSAgICAgICAgICAgIExheWVyQ2hyb21p
dW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksIGdsb2JhbFRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNp
dHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0t
PnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2Nh
dGlvbigpKTsKLQotICAgICAgICAgICAgcHJldkVkZ2VYID0gZWRnZVg7Ci0gICAgICAgICAgICAv
LyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAgICAgICAgIHByZXZFZGdlWC5zY2FsZSgtMSwgLTEs
IC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByZXZFZGdlWSA9IGVkZ2VZOwotICAgICAgICAv
LyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAgICAgcHJldkVkZ2VZLnNjYWxlKC0xLCAtMSwgLTEp
OwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JiZGU5ZTFkYmYyYjJlNGFhNzFlNWMzMGYyMjAyNDA5
NGYyOGM0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21p
dW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIExh
eWVyVGlsZXJDaHJvbWl1bV9oCi0jZGVmaW5lIExheWVyVGlsZXJDaHJvbWl1bV9oCi0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRh
dGVyLmgiCi0jaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsK
LWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7Ci0KLWNsYXNzIExheWVyVGlsZXJDaHJvbWl1bSB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJUaWxlckNocm9taXVtKTsKLXB1YmxpYzoK
LSAgICBlbnVtIEJvcmRlclRleGVsT3B0aW9uIHsgSGFzQm9yZGVyVGV4ZWxzLCBOb0JvcmRlclRl
eGVscyB9OwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBjcmVh
dGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRl
clRleGVsT3B0aW9uKTsKLQotICAgIH5MYXllclRpbGVyQ2hyb21pdW0oKTsKLQotICAgIC8vIFNl
dCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5IHJlcGFpbnRlZCBkdXJpbmcgdXBkYXRl
KCkuCi0gICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7
Ci0gICAgdm9pZCBpbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKLQotICAgIC8vIFByZXBhcmUgZGF0
YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW5zdGVyc2VjdCB3aXRoIGNvbnRlbnRS
ZWN0LgotICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBMYXllclRleHR1cmVVcGRhdGVyKik7Ci0gICAgLy8gVXBkYXRlIGludmFsaWQgdGV4dHVyZXMg
dGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdCBwcm92aWRlZCBpbiBwcmVwYXJlVG9VcGRh
dGUoKS4KLSAgICB2b2lkIHVwZGF0ZVJlY3QoTGF5ZXJUZXh0dXJlVXBkYXRlciopOwotICAgIC8v
IERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KLSAg
ICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0KLSAgICBpbnQgbnVtVGlsZXMoKSBjb25zdCB7
IHJldHVybiBtX3RpbGluZ0RhdGEubnVtVGlsZXMoKTsgfQotCi0gICAgLy8gU2V0IHBvc2l0aW9u
IG9mIHRoaXMgdGlsZWQgbGF5ZXIgaW4gY29udGVudCBzcGFjZS4KLSAgICB2b2lkIHNldExheWVy
UG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKTsKLSAgICAvLyBDaGFuZ2UgdGhlIHRp
bGUgc2l6ZS4gIFRoaXMgbWF5IGludmFsaWRhdGUgYWxsIHRoZSBleGlzdGluZyB0aWxlcy4KLSAg
ICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpOwotCi0gICAgYm9vbCBza2lw
c0RyYXcoKSBjb25zdCB7IHJldHVybiBtX3NraXBzRHJhdzsgfQotCi0gICAgLy8gUmVzZXJ2ZXMg
YWxsIGV4aXN0aW5nIGFuZCB2YWxpZCB0aWxlIHRleHR1cmVzIHRvIHByb3RlY3QgdGhlbSBmcm9t
IGJlaW5nCi0gICAgLy8gcmVjeWNsZWQgYnkgdGhlIHRleHR1cmUgbWFuYWdlci4KLSAgICB2b2lk
IHByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotCi0gICAg
dHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJH
QkFUZXhBbHBoYT4gUHJvZ3JhbTsKLSAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHN3YXBzIHJl
ZCBhbmQgYmx1ZSBjb21wb25lbnRzIG9mIHRleHR1cmUuCi0gICAgLy8gVXNlZCB3aGVuIHRleHR1
cmUgZm9ybWF0IGRvZXMgbm90IG1hdGNoIG5hdGl2ZSBjb2xvciBmb3JtYXQuCi0gICAgdHlwZWRl
ZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhT
d2l6emxlQWxwaGE+IFByb2dyYW1Td2l6emxlOwotCi0gICAgLy8gU2hhZGVyIHByb2dyYW0gdGhh
dCBwcm9kdWNlcyBhbnRpLWFsaWFzZWQgbGF5ZXIgZWRnZXMuCi0gICAgdHlwZWRlZiBQcm9ncmFt
QmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYUFBPiBQ
cm9ncmFtQUE7Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBG
cmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGFBQT4gUHJvZ3JhbVN3aXp6bGVBQTsKLQot
ICAgIC8vIElmIHRoaXMgdGlsZXIgaGFzIGV4YWN0bHkgb25lIHRpbGUsIHJldHVybiBpdHMgdGV4
dHVyZS4gT3RoZXJ3aXNlLCBudWxsLgotICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRTaW5nbGVUZXh0
dXJlKCk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJD
aHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7Ci0K
LSAgICBjbGFzcyBUaWxlIDogcHVibGljIFJlZkNvdW50ZWQ8VGlsZT4gewotICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUaWxlKTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFRp
bGUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCksIG1faSgtMSks
IG1faigtMSkgeyB9Ci0KLSAgICAgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVy
biBtX3RleC5nZXQoKTsgfQotCi0gICAgICAgIGJvb2wgZGlydHkoKSBjb25zdCB7IHJldHVybiAh
bV9kaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCk7IH0KLSAgICAgICAgdm9pZCBjbGVhckRpcnR5KCkg
eyBtX2RpcnR5TGF5ZXJSZWN0ID0gSW50UmVjdCgpOyB9Ci0KLSAgICAgICAgaW50IGkoKSBjb25z
dCB7IHJldHVybiBtX2k7IH0KLSAgICAgICAgaW50IGooKSBjb25zdCB7IHJldHVybiBtX2o7IH0K
LSAgICAgICAgdm9pZCBtb3ZlVG8oaW50IGksIGludCBqKSB7IG1faSA9IGk7IG1faiA9IGo7IH0K
LQotICAgICAgICAvLyBMYXllci1zcGFjZSBkaXJ0eSByZWN0YW5nbGUgdGhhdCBuZWVkcyB0byBi
ZSByZXBhaW50ZWQuCi0gICAgICAgIEludFJlY3QgbV9kaXJ0eUxheWVyUmVjdDsKLSAgICBwcml2
YXRlOgotICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4OwotICAgICAgICBpbnQg
bV9pOwotICAgICAgICBpbnQgbV9qOwotICAgIH07Ci0KLSAgICAvLyBEcmF3IGFsbCB0aWxlcyB0
aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgotICAgIHRlbXBsYXRlIDxjbGFzcyBUPgot
ICAgIHZvaWQgZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGludCBm
cmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKTsKLQotICAgIC8v
IEdyb3cgbGF5ZXIgc2l6ZSB0byBjb250YWluIHRoaXMgcmVjdGFuZ2xlLgotICAgIHZvaWQgZ3Jv
d0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLQotICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJS
ZW5kZXJlcjsgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4dCgp
IGNvbnN0OwotICAgIFRpbGUqIGNyZWF0ZVRpbGUoaW50IGksIGludCBqKTsKLSAgICAvLyBJbnZh
bGlkYXRlIGFueSB0aWxlcyB3aGljaCBkbyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnRS
ZWN0Ci0gICAgdm9pZCBpbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
OwotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgaW50ICZsZWZ0LCBpbnQgJnRvcCwgaW50ICZyaWdo
dCwgaW50ICZib3R0b20pIGNvbnN0OwotICAgIEludFJlY3QgY29udGVudFJlY3RUb0xheWVyUmVj
dChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7Ci0gICAgSW50UmVjdCBsYXllclJl
Y3RUb0NvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkgY29uc3Q7Ci0KLSAgICBU
aWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0OwotICAgIEludFJlY3QgdGlsZUNvbnRlbnRSZWN0
KGNvbnN0IFRpbGUqKSBjb25zdDsKLSAgICBJbnRSZWN0IHRpbGVMYXllclJlY3QoY29uc3QgVGls
ZSopIGNvbnN0OwotCi0gICAgR0MzRGVudW0gbV90ZXh0dXJlRm9ybWF0OwotCi0gICAgSW50U2l6
ZSBtX3RpbGVTaXplOwotICAgIEludFBvaW50IG1fbGF5ZXJQb3NpdGlvbjsKLQotICAgIGJvb2wg
bV9za2lwc0RyYXc7Ci0KLSAgICAvLyBEZWZhdWx0IGhhc2gga2V5IHRyYWl0cyBmb3IgaW50ZWdl
cnMgZGlzYWxsb3cgMCBhbmQgLTEgYXMgYSBrZXksIHNvCi0gICAgLy8gdXNlIGEgY3VzdG9tIGhh
c2ggdHJhaXQgd2hpY2ggZGlzYWxsb3dzIC0xIGFuZCAtMiBpbnN0ZWFkLgotICAgIHR5cGVkZWYg
c3RkOjpwYWlyPGludCwgaW50PiBUaWxlTWFwS2V5OwotICAgIHN0cnVjdCBUaWxlTWFwS2V5VHJh
aXRzIDogSGFzaFRyYWl0czxUaWxlTWFwS2V5PiB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgVGlsZU1hcEtleSBlbXB0eVZh
bHVlKCkgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIoLTEsIC0xKTsgfQotICAgICAgICBzdGF0aWMg
dm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVGlsZU1hcEtleSYgc2xvdCkgeyBzbG90ID0gc3Rk
OjptYWtlX3BhaXIoLTIsIC0yKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShUaWxlTWFwS2V5IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5maXJzdCA9PSAtMiAmJiB2YWx1ZS5z
ZWNvbmQgPT0gLTI7IH0KLSAgICB9OwotICAgIC8vIEZJWE1FOiBUaGUgbWFwcGVkIHZhbHVlIGlu
IFRpbGVNYXAgc2hvdWxkIHJlYWxseSBiZSBhbiBPd25QdHIsIGFzIHRoZQotICAgIC8vIHJlZmNv
dW50IG9mIGEgVGlsZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0aGFuIDEuIEhvd2V2ZXIsIEhhc2hN
YXAKLSAgICAvLyBkb2Vzbid0IGVhc2lseSBzdXBwb3J0IE93blB0ciBhcyBhIHZhbHVlLgotICAg
IHR5cGVkZWYgSGFzaE1hcDxUaWxlTWFwS2V5LCBSZWZQdHI8VGlsZT4sIERlZmF1bHRIYXNoPFRp
bGVNYXBLZXk+OjpIYXNoLCBUaWxlTWFwS2V5VHJhaXRzPiBUaWxlTWFwOwotICAgIFRpbGVNYXAg
bV90aWxlczsKLSAgICAvLyBUaWdodGx5IHBhY2tlZCBzZXQgb2YgdW51c2VkIHRpbGVzLgotICAg
IFZlY3RvcjxSZWZQdHI8VGlsZT4gPiBtX3VudXNlZFRpbGVzOwotCi0gICAgLy8gU3RhdGUgaGVs
ZCBiZXR3ZWVuIHVwZGF0ZSBhbmQgdXBsb2FkLgotICAgIEludFJlY3QgbV9wYWludFJlY3Q7Ci0g
ICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7Ci0KLSAgICBMYXllclRleHR1cmVVcGRhdGVyOjpPcmll
bnRhdGlvbiBtX3RleHR1cmVPcmllbnRhdGlvbjsKLSAgICBMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXQgbV9zYW1wbGVkVGV4ZWxGb3JtYXQ7Ci0gICAgVGlsaW5nRGF0YSBt
X3RpbGluZ0RhdGE7Ci0KLSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJl
cjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NYW5hZ2VkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAppbmRleCBhNjdjMjJlOTAyNWVmODk3YjE3OGY4NjRh
YjMzMjk5NmYzZTNlZTdmLi4zMTBlMTY4NmJkMzVmZmE1ZGNiZjYxNGE3YjRiODczYTg0M2Y3YjQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
YW5hZ2VkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL01hbmFnZWRUZXh0dXJlLmgKQEAgLTYwLDYgKzYwLDggQEAgcHVibGljOgogICAgIHZv
aWQgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2b2lkIGZyYW1lYnVmZmVy
VGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQo
KSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0
IE1hbmFnZWRUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CiAKQEAgLTczLDQgKzc1LDMgQEAgcHJp
dmF0ZToKIH0KIAogI2VuZGlmIC8vIE1hbmFnZWRUZXh0dXJlX2gKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2Y0ZDE1MTkwNDlkOGZjMGYyOTU3ODM0NjUxYzQ1MzFiOGQx
ZmJiYS4uOWE2YzlhODI3NDM0OWQ4NTJlYmFmZTA3MzI4MmZhZDZkZTY1ZWMzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJl
LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgpAQCAtNDcsOSArNDcsMjkgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBVcGRhdGFi
bGVUaWxlIDogcHVibGljIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShVcGRhdGFibGVUaWxlKTsKK3B1YmxpYzoKKyAgICBVcGRhdGFibGVUaWxlKFBh
c3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpIHsgfQorCisgICAgTWFu
YWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleC5nZXQoKTsgfQorCisgICAgYm9v
bCBkaXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKTsgfQor
ICAgIHZvaWQgY2xlYXJEaXJ0eSgpIHsgbV9kaXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQor
CisgICAgLy8gTGF5ZXItc3BhY2UgZGlydHkgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgcmVw
YWludGVkLgorICAgIEludFJlY3QgbV9kaXJ0eUxheWVyUmVjdDsKK3ByaXZhdGU6CisgICAgT3du
UHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleDsKK307CisKIFRpbGVkTGF5ZXJDaHJvbWl1bTo6VGls
ZWRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBMYXll
ckNocm9taXVtKG93bmVyKQogICAgICwgbV90aWxpbmdPcHRpb24oQXV0b1RpbGUpCisgICAgLCBt
X3RleHR1cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSkKKyAgICAsIG1f
c2tpcHNEcmF3KGZhbHNlKQorICAgICwgbV90ZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6SW52YWxpZE9yaWVudGF0aW9uKQorICAgICwgbV9zYW1wbGVkVGV4ZWxGb3JtYXQo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0SW52YWxpZCkKIHsKIH0KIApA
QCAtNjQsOCArODQsMTIgQEAgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVGlsZWRMYXllckNocm9t
aXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjbGVh
bnVwUmVzb3VyY2VzKCkKIHsKLSAgICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgTGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcygpOworCisgICAgbV90aWxlci5jbGVhcigpOworICAgIG1fdW51
c2VkVGlsZXMuY2xlYXIoKTsKKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3Vw
ZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CiB9CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRM
YXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKQEAgLTEx
Myw3ICsxMzcsNyBAQCBib29sIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29u
c3QKICAgICBpZiAobV90aWxpbmdPcHRpb24gPT0gTmV2ZXJUaWxlICYmIG1fdGlsZXItPm51bVRp
bGVzKCkgPiAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gIW1fdGlsZXIt
PnNraXBzRHJhdygpOworICAgIHJldHVybiAhbV9za2lwc0RyYXc7CiB9CiAKIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKCkKQEAgLTEyMywxNSArMTQ3LDcyIEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKCkKIAogICAgIGNy
ZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKIAotICAgIG1fdGlsZXIgPSBMYXllclRpbGVy
Q2hyb21pdW06OmNyZWF0ZSgKLSAgICAgICAgbGF5ZXJSZW5kZXJlcigpLAorICAgIG1fdGV4dHVy
ZUZvcm1hdCA9IGxheWVyUmVuZGVyZXIoKS0+YmVzdFRleHR1cmVGb3JtYXQoKTsKKyAgICBtX3Rl
eHR1cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRhdGVyKCktPm9yaWVudGF0aW9uKCk7CisgICAg
bV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlcigpLT5zYW1wbGVkVGV4ZWxGb3Jt
YXQobV90ZXh0dXJlRm9ybWF0KTsKKworICAgIG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6
Y3JlYXRlKAogICAgICAgICBJbnRTaXplKGRlZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXpl
KSwKLSAgICAgICAgaXNSb290TGF5ZXIoKSA/IExheWVyVGlsZXJDaHJvbWl1bTo6Tm9Cb3JkZXJU
ZXhlbHMgOiBMYXllclRpbGVyQ2hyb21pdW06Okhhc0JvcmRlclRleGVscyk7CisgICAgICAgIGlz
Um9vdExheWVyKCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVy
VGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogewotICAgIG1fdGlsZXItPnVwZGF0ZVJl
Y3QodGV4dHVyZVVwZGF0ZXIoKSk7CisgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9z
aXRpbmcgdG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVj
b21lIGludmFsaWRhdGVkIG1pZC11cGRhdGUuCisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fdXBk
YXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5j
b250ZXh0KCk7CisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVy
LT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV91cGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGls
ZSkKKyAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9t
LgorICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRS
ZWN0KHRpbGUpOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVj
dC5sb2NhdGlvbigpOworICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+
bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7CisgICAgICAg
ICAgICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3Vu
ZGFyaWVzLCBzbworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vz
bid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgorICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNl
Y3QobV9wYWludFJlY3QpOworICAgICAgICAgICAgaWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBBU1NFUlQodGlsZS0+dGV4
dHVyZSgpLT5pc1Jlc2VydmVkKCkpOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1z
cGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCisgICAgICAgICAgICBJbnRSZWN0IGRlc3RS
ZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkg
LSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5zaXplKCkpOworICAgICAgICAgICAgaWYgKGRlc3RS
ZWN0LngoKSA8IDApCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChk
ZXN0UmVjdC55KCkgPCAwKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAg
IC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0aGlzIHRpbGUncyBkaXJ0eSByZWN0
YW5nbGUuCisgICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChzb3VyY2VSZWN0LngoKSAt
IG1fcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBtX3BhaW50UmVjdC55KCkpOworICAg
ICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LngoKSA8IDApCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgPCAwKQorICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpICsgZGVzdFJlY3Qud2lk
dGgoKSA+IG1fcGFpbnRSZWN0LndpZHRoKCkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+IG1fcGFp
bnRSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAg
IHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCk7CisgICAgICAgICAgICBjb25z
dCBHQzNEaW50IGZpbHRlciA9IG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOworICAgICAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRl
cikpOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01B
R19GSUxURVIsIGZpbHRlcikpOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7CisKKyAgICAgICAg
ICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KHRpbGUtPnRleHR1cmUoKSwg
c291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwor
ICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5n
T3B0aW9uKFRpbGluZ09wdGlvbiB0aWxpbmdPcHRpb24pCkBAIC0xNjksNyArMjUwLDIxIEBAIHZv
aWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXll
cikKIAogICAgIENDVGlsZWRMYXllckltcGwqIHRpbGVkTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1Rp
bGVkTGF5ZXJJbXBsKj4obGF5ZXIpOwogICAgIHRpbGVkTGF5ZXItPnNldFRpbGluZ1RyYW5zZm9y
bSh0aWxpbmdUcmFuc2Zvcm0oKSk7Ci0gICAgdGlsZWRMYXllci0+c2V0VGlsZXIobV90aWxlci5n
ZXQoKSk7CisgICAgdGlsZWRMYXllci0+c2V0U2tpcHNEcmF3KG1fc2tpcHNEcmF3KTsKKyAgICB0
aWxlZExheWVyLT5zZXRUZXh0dXJlT3JpZW50YXRpb24obV90ZXh0dXJlT3JpZW50YXRpb24pOwor
ICAgIHRpbGVkTGF5ZXItPnNldFNhbXBsZWRUZXhlbEZvcm1hdChtX3NhbXBsZWRUZXhlbEZvcm1h
dCk7CisgICAgdGlsZWRMYXllci0+c2V0VGlsaW5nRGF0YSgqbV90aWxlcik7CisKKyAgICBmb3Ig
KENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxl
ci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBpbnQgaSA9IGl0ZXItPmZpcnN0LmZpcnN0OworICAgICAgICBpbnQgaiA9
IGl0ZXItPmZpcnN0LnNlY29uZDsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRp
Y19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworCisgICAgICAgIGlm
ICh0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJl
Rm9ybWF0KSkKKyAgICAgICAgICAgIHRpbGVkTGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGls
ZS0+dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRp
bGVkTGF5ZXItPmV2aWN0VGV4dHVyZShpLCBqKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHdy
aXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQpAQCAtMTgyLDcgKzI3NywxNTgg
QEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVy
UHJvcGVydGllcyh0cywgaW5kZW50KTsKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAg
ICB0cyA8PCAic2tpcHNEcmF3OiAiIDw8ICghbV90aWxlciB8fCBtX3RpbGVyLT5za2lwc0RyYXco
KSkgPDwgIlxuIjsKKyAgICB0cyA8PCAic2tpcHNEcmF3OiAiIDw8ICghbV90aWxlciB8fCBtX3Nr
aXBzRHJhdykgPDwgIlxuIjsKK30KKworVGV4dHVyZU1hbmFnZXIqIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6dGV4dHVyZU1hbmFnZXIoKSBjb25zdAoreworICAgIGlmICghbGF5ZXJSZW5kZXJlcigpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCk7Cit9CisKK1VwZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
dGlsZUF0KGludCBpLCBpbnQgaikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VXBk
YXRhYmxlVGlsZSo+KG1fdGlsZXItPnRpbGVBdChpLCBqKSk7Cit9CisKK1VwZGF0YWJsZVRpbGUq
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCit7CisgICAgUmVm
UHRyPFVwZGF0YWJsZVRpbGU+IHRpbGU7CisgICAgaWYgKG1fdW51c2VkVGlsZXMuc2l6ZSgpID4g
MCkgeworICAgICAgICB0aWxlID0gbV91bnVzZWRUaWxlcy5sYXN0KCkucmVsZWFzZSgpOworICAg
ICAgICBtX3VudXNlZFRpbGVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKHRpbGUtPnJl
ZkNvdW50KCkgPT0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVGV4dHVyZU1hbmFnZXIqIG1h
bmFnZXIgPSB0ZXh0dXJlTWFuYWdlcigpOworICAgICAgICB0aWxlID0gYWRvcHRSZWYobmV3IFVw
ZGF0YWJsZVRpbGUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOworICAgIH0KKyAg
ICBtX3RpbGVyLT5hZGRUaWxlKHRpbGUsIGksIGopOworICAgIHRpbGUtPm1fZGlydHlMYXllclJl
Y3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUuZ2V0KCkpOworCisgICAgcmV0dXJuIHRp
bGUuZ2V0KCk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlVGlsZXMo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxl
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Q0NMYXllclRpbGluZ0RhdGE6OlRp
bGVNYXBLZXk+IHJlbW92ZUtleXM7CisgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAh
PSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgQ0NMYXllclRpbGlu
Z0RhdGE6OlRpbGUqIHRpbGUgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEludFJlY3Qg
dGlsZVJlY3QgPSBtX3RpbGVyLT50aWxlQ29udGVudFJlY3QodGlsZSk7CisgICAgICAgIGlmICh0
aWxlUmVjdC5pbnRlcnNlY3RzKGNvbnRlbnRSZWN0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICByZW1vdmVLZXlzLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgfQorCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVLZXlzLnNpemUoKTsgKytpKQorICAgICAgICBtX3Vu
dXNlZFRpbGVzLmFwcGVuZChzdGF0aWNfcG9pbnRlcl9jYXN0PFVwZGF0YWJsZVRpbGU+KG1fdGls
ZXItPnRha2VUaWxlKHJlbW92ZUtleXNbaV0uZmlyc3QsIHJlbW92ZUtleXNbaV0uc2Vjb25kKSkp
OworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSB8fCBt
X3NraXBzRHJhdykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9D
b250YWluKGNvbnRlbnRSZWN0KTsKKworICAgIC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4g
bGF5ZXIgc3BhY2UsIGFzIHRoZSBsYXllciBjb3VsZCBiZSByZXBvc2l0aW9uZWQKKyAgICAvLyBh
ZnRlciBpbnZhbGlkYXRpb24uCisgICAgY29uc3QgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGVy
LT5jb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKworICAgIGludCBsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2Vz
KGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGog
PSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkg
PD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVB
dChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIEludFJlY3QgYm91bmQgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRp
bGUpOworICAgICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGxheWVyUmVjdCk7CisgICAgICAgICAg
ICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0LnVuaXRlKGJvdW5kKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVz
KCkKK3sKKyAgICBwcm90ZWN0VGlsZVRleHR1cmVzKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
Y29udGVudEJvdW5kcygpKSk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0
VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmIChjb250
ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNv
bnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgZm9yIChpbnQgaiA9
IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8
PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0
KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCktPmlzVmFs
aWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGls
ZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpCit7CisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKworICAgIGlmIChjb250
ZW50UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSW52YWxpZGF0ZSBvbGQgdGlsZXMgdGhh
dCB3ZXJlIHByZXZpb3VzbHkgdXNlZCBidXQgYXJlbid0IGluIHVzZSB0aGlzCisgICAgLy8gZnJh
bWUgc28gdGhhdCB0aGV5IGNhbiBnZXQgcmV1c2VkIGZvciBuZXcgdGlsZXMuCisgICAgaW52YWxp
ZGF0ZVRpbGVzKGNvbnRlbnRSZWN0KTsKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4o
Y29udGVudFJlY3QpOworCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKSB7CisgICAgICAg
IG1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29u
dGFpbiBhbGwKKyAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24u
CisgICAgSW50UmVjdCBkaXJ0eUxheWVyUmVjdDsKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVj
dCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9
IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyAr
K2kpIHsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7Cisg
ICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUo
aSwgaik7CisKKyAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGls
ZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgICAgICAgICAgdGlsZS0+
bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CisKKyAgICAg
ICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCks
IG1fdGV4dHVyZUZvcm1hdCkpIHsKKyAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7
CisgICAgICAgICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGlydHlMYXllclJlY3QudW5pdGUo
dGlsZS0+bV9kaXJ0eUxheWVyUmVjdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEdWUg
dG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRlbmRlZCB0byB0aWxlIGJvdW5k
YXJpZXMsIGl0CisgICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGluZyBtb3JlIHRpbGVzIHRoYW4g
dGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCisgICAgLy8gdGhhdCBvcmlnaW5hbCBy
ZWN0IHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4gbmVjZXNzYXJ5LgorICAgIG1f
dXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0OworCisgICAgbV9wYWludFJlY3QgPSBtX3RpbGVyLT5s
YXllclJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKKyAgICBpZiAoZGlydHlMYXll
clJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0dXJlVXBkYXRlcigp
LT5wcmVwYXJlVG9VcGRhdGUobV9wYWludFJlY3QsIG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGls
ZXItPmhhc0JvcmRlclRleGVscygpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
aAppbmRleCBlNjJlY2M3YjFjMDY4YTcwYzBmMDNjZTBmYzY1ZjNhNDU4ODk4ZDYwLi5kODJmMzE3
NzRhNTNmNzFiNDM1MWM4OTljMjE5NWU0NjA2ZWZmYzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uaApAQCAtMjksMTIgKzI5LDEzIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
aWxpbmdEYXRhLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyVGV4
dHVyZVVwZGF0ZXI7CitjbGFzcyBVcGRhdGFibGVUaWxlOwogCiBjbGFzcyBUaWxlZExheWVyQ2hy
b21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CkBAIC00OSw2ICs1MCwxMCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKKyAg
ICAvLyBSZXNlcnZlcyBhbGwgZXhpc3RpbmcgYW5kIHZhbGlkIHRpbGUgdGV4dHVyZXMgdG8gcHJv
dGVjdCB0aGVtIGZyb20gYmVpbmcKKyAgICAvLyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5h
Z2VyLgorICAgIHZvaWQgcHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCk7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBUaWxlZExheWVyQ2hyb21pdW0oR3Jh
cGhpY3NMYXllckNocm9taXVtKik7CiAKQEAgLTU4LDcgKzYzLDEzIEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpID0gMDsKICAgICB2
aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOwog
Ci0gICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV90aWxlcjsKKyAgICAvLyBTZXQgaW52
YWxpZGF0aW9ucyB0byBiZSBwb3RlbnRpYWxseSByZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgor
ICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAg
IC8vIFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0
IHdpdGggY29udGVudFJlY3QuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpOworICAgIC8vIFVwZGF0ZSBpbnZhbGlkIHRleHR1cmVzIHRoYXQgaW50
ZXJzZWN0IHdpdGggY29udGVudFJlY3QgcHJvdmlkZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuCisg
ICAgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgTGF5ZXJUZXh0dXJlVXBkYXRl
ciopOworICAgIHZpcnR1YWwgdm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXll
ckltcGwoKTsKQEAgLTcxLDcgKzgyLDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRUaWxpbmdP
cHRpb24oVGlsaW5nT3B0aW9uKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxpbmdUcmFu
c2Zvcm0oKSBjb25zdDsKIAorICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29u
c3Q7CisgICAgVXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CisgICAgdm9pZCBp
bnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCisgICAgVGV4dHVy
ZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CisKKyAgICAvLyBTdGF0ZSBoZWxkIGJl
dHdlZW4gdXBkYXRlIGFuZCB1cGxvYWQuCisgICAgSW50UmVjdCBtX3BhaW50UmVjdDsKKyAgICBJ
bnRSZWN0IG1fdXBkYXRlUmVjdDsKKworICAgIC8vIFRpZ2h0bHkgcGFja2VkIHNldCBvZiB1bnVz
ZWQgdGlsZXMuCisgICAgVmVjdG9yPFJlZlB0cjxVcGRhdGFibGVUaWxlPiA+IG1fdW51c2VkVGls
ZXM7CisKICAgICBUaWxpbmdPcHRpb24gbV90aWxpbmdPcHRpb247CisgICAgR0MzRGVudW0gbV90
ZXh0dXJlRm9ybWF0OworICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CisgICAgTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OworCisgICAg
T3duUHRyPENDTGF5ZXJUaWxpbmdEYXRhPiBtX3RpbGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGlu
Z0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRpbGluZ0RhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4Nzk0ZDRkY2U3NTlhOGIwY2M1Njc4
OWNjZDUxNDMwZDQzYjViYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKQEAgLTAsMCAr
MSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUaWxpbmdEYXRhLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NMYXllclRpbGluZ0RhdGE+IEND
TGF5ZXJUaWxpbmdEYXRhOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRl
eGVsT3B0aW9uIGJvcmRlcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUaWxp
bmdEYXRhKHRpbGVTaXplLCBib3JkZXIpKTsKK30KKworQ0NMYXllclRpbGluZ0RhdGE6OkNDTGF5
ZXJUaWxpbmdEYXRhKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBi
b3JkZXIpCisgICAgOiBtX3RpbGluZ0RhdGEobWF4KHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXpl
LmhlaWdodCgpKSwgMCwgMCwgYm9yZGVyID09IEhhc0JvcmRlclRleGVscykKK3sKKyAgICBzZXRU
aWxlU2l6ZSh0aWxlU2l6ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OnNldFRpbGVT
aXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fdGlsZVNpemUgPT0gc2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcmVzZXQoKTsKKworICAgIG1fdGlsZVNpemUgPSBzaXpl
OworICAgIG1fdGlsaW5nRGF0YS5zZXRNYXhUZXh0dXJlU2l6ZShtYXgoc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKSk7Cit9CisKK2NvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiBDQ0xheWVyVGls
aW5nRGF0YTo6b3BlcmF0b3I9KGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcikKK3sKKyAg
ICBtX3RpbGVTaXplID0gdGlsZXIubV90aWxlU2l6ZTsKKyAgICBtX2xheWVyUG9zaXRpb24gPSB0
aWxlci5tX2xheWVyUG9zaXRpb247CisgICAgbV90aWxpbmdEYXRhID0gdGlsZXIubV90aWxpbmdE
YXRhOworCisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjph
ZGRUaWxlKFBhc3NSZWZQdHI8VGlsZT4gdGlsZSwgaW50IGksIGludCBqKQoreworICAgIEFTU0VS
VCghdGlsZUF0KGksIGopKTsKKyAgICB0aWxlLT5tb3ZlVG8oaSwgaik7CisgICAgbV90aWxlcy5h
ZGQobWFrZV9wYWlyKGksIGopLCB0aWxlKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVyVGlsaW5n
RGF0YTo6VGlsZT4gQ0NMYXllclRpbGluZ0RhdGE6OnRha2VUaWxlKGludCBpLCBpbnQgaikKK3sK
KyAgICByZXR1cm4gbV90aWxlcy50YWtlKG1ha2VfcGFpcihpLCBqKSk7Cit9CisKK0NDTGF5ZXJU
aWxpbmdEYXRhOjpUaWxlKiBDQ0xheWVyVGlsaW5nRGF0YTo6dGlsZUF0KGludCBpLCBpbnQgaikg
Y29uc3QKK3sKKyAgICBUaWxlKiB0aWxlID0gbV90aWxlcy5nZXQobWFrZV9wYWlyKGksIGopKS5n
ZXQoKTsKKyAgICBBU1NFUlQoIXRpbGUgfHwgdGlsZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICBy
ZXR1cm4gdGlsZTsKK30KKwordm9pZCBDQ0xheWVyVGlsaW5nRGF0YTo6cmVzZXQoKQoreworICAg
IG1fdGlsZXMuY2xlYXIoKTsKKyAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwor
fQorCit2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjpjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQs
IGludCYgYm90dG9tKSBjb25zdAoreworICAgIGNvbnN0IEludFJlY3QgbGF5ZXJSZWN0ID0gY29u
dGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7CisKKyAgICBsZWZ0ID0gbV90aWxpbmdE
YXRhLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0LngoKSk7CisgICAgdG9wID0gbV90
aWxpbmdEYXRhLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0LnkoKSk7CisgICAgcmln
aHQgPSBtX3RpbGluZ0RhdGEudGlsZVhJbmRleEZyb21TcmNDb29yZChsYXllclJlY3QubWF4WCgp
IC0gMSk7CisgICAgYm90dG9tID0gbV90aWxpbmdEYXRhLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQo
bGF5ZXJSZWN0Lm1heFkoKSAtIDEpOworfQorCitJbnRSZWN0IENDTGF5ZXJUaWxpbmdEYXRhOjpj
b250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAor
eworICAgIEludFBvaW50IHBvcyhjb250ZW50UmVjdC54KCkgLSBtX2xheWVyUG9zaXRpb24ueCgp
LCBjb250ZW50UmVjdC55KCkgLSBtX2xheWVyUG9zaXRpb24ueSgpKTsKKyAgICBJbnRSZWN0IGxh
eWVyUmVjdChwb3MsIGNvbnRlbnRSZWN0LnNpemUoKSk7CisKKyAgICAvLyBDbGlwIHRvIHRoZSBw
b3NpdGlvbi4KKyAgICBpZiAocG9zLngoKSA8IDAgfHwgcG9zLnkoKSA8IDApCisgICAgICAgIGxh
eWVyUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoY29udGVudFJlY3Qud2lk
dGgoKSArIHBvcy54KCksIGNvbnRlbnRSZWN0LmhlaWdodCgpICsgcG9zLnkoKSkpOworICAgIHJl
dHVybiBsYXllclJlY3Q7Cit9CisKK0ludFJlY3QgQ0NMYXllclRpbGluZ0RhdGE6OmxheWVyUmVj
dFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBjb25zdAoreworICAgIElu
dFJlY3QgY29udGVudFJlY3QgPSBsYXllclJlY3Q7CisgICAgY29udGVudFJlY3QubW92ZShtX2xh
eWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKKyAgICByZXR1cm4gY29udGVu
dFJlY3Q7Cit9CisKK0ludFJlY3QgQ0NMYXllclRpbGluZ0RhdGE6OnRpbGVDb250ZW50UmVjdChj
b25zdCBUaWxlKiB0aWxlKSBjb25zdAoreworICAgIEludFJlY3QgY29udGVudFJlY3QgPSB0aWxl
TGF5ZXJSZWN0KHRpbGUpOworICAgIGNvbnRlbnRSZWN0Lm1vdmUobV9sYXllclBvc2l0aW9uLngo
KSwgbV9sYXllclBvc2l0aW9uLnkoKSk7CisgICAgcmV0dXJuIGNvbnRlbnRSZWN0OworfQorCitJ
bnRSZWN0IENDTGF5ZXJUaWxpbmdEYXRhOjp0aWxlTGF5ZXJSZWN0KGNvbnN0IFRpbGUqIHRpbGUp
IGNvbnN0Cit7CisgICAgY29uc3QgaW50IGluZGV4ID0gbV90aWxpbmdEYXRhLnRpbGVJbmRleCh0
aWxlLT5pKCksIHRpbGUtPmooKSk7CisgICAgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGluZ0Rh
dGEudGlsZUJvdW5kc1dpdGhCb3JkZXIoaW5kZXgpOworICAgIGxheWVyUmVjdC5zZXRTaXplKG1f
dGlsZVNpemUpOworICAgIHJldHVybiBsYXllclJlY3Q7Cit9CisKK3ZvaWQgQ0NMYXllclRpbGlu
Z0RhdGE6OnNldExheWVyUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIGxheWVyUG9zaXRpb24pCit7
CisgICAgbV9sYXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKK30KKwordm9pZCBDQ0xheWVy
VGlsaW5nRGF0YTo6Z3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQoreworICAgIC8vIEdyb3cgdGhlIHRpbGUgYXJyYXkgdG8gY29udGFpbiB0aGlzIGNvbnRlbnQg
cmVjdC4KKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29u
dGVudFJlY3QpOworICAgIEludFNpemUgcmVjdFNpemUgPSBJbnRTaXplKGxheWVyUmVjdC5tYXhY
KCksIGxheWVyUmVjdC5tYXhZKCkpOworCisgICAgSW50U2l6ZSBvbGRMYXllclNpemUobV90aWxp
bmdEYXRhLnRvdGFsU2l6ZVgoKSwgbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVkoKSk7CisgICAgSW50
U2l6ZSBuZXdTaXplID0gcmVjdFNpemUuZXhwYW5kZWRUbyhvbGRMYXllclNpemUpOworICAgIG1f
dGlsaW5nRGF0YS5zZXRUb3RhbFNpemUobmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODUyYzY4NWZmNmVhMGJhZjY0YzM2ODAyZjEyODAyODU1MWNkN2Y5YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUaWxpbmdEYXRhLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ0NMYXll
clRpbGluZ0RhdGFfaAorI2RlZmluZSBDQ0xheWVyVGlsaW5nRGF0YV9oCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
VGlsaW5nRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRpbGlu
Z0RhdGEgeworcHVibGljOgorICAgIGVudW0gQm9yZGVyVGV4ZWxPcHRpb24geyBIYXNCb3JkZXJU
ZXhlbHMsIE5vQm9yZGVyVGV4ZWxzIH07CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVy
VGlsaW5nRGF0YT4gY3JlYXRlKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9w
dGlvbik7CisKKyAgICBpbnQgbnVtVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3RpbGluZ0RhdGEu
bnVtVGlsZXMoKTsgfQorICAgIGludCBudW1UaWxlc1goKSBjb25zdCB7IHJldHVybiBtX3RpbGlu
Z0RhdGEubnVtVGlsZXNYKCk7IH0KKyAgICBpbnQgbnVtVGlsZXNZKCkgY29uc3QgeyByZXR1cm4g
bV90aWxpbmdEYXRhLm51bVRpbGVzWSgpOyB9CisgICAgSW50UmVjdCB0aWxlQm91bmRzKGludCBp
LCBpbnQgaikgY29uc3QgeyByZXR1cm4gbV90aWxpbmdEYXRhLnRpbGVCb3VuZHMobV90aWxpbmdE
YXRhLnRpbGVJbmRleChpLCBqKSk7IH0KKyAgICBJbnRQb2ludCB0ZXh0dXJlT2Zmc2V0KGludCB4
SW5kZXgsIGludCB5SW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsaW5nRGF0YS50ZXh0dXJlT2Zm
c2V0KHhJbmRleCwgeUluZGV4KTsgfQorCisgICAgLy8gU2V0IHBvc2l0aW9uIG9mIHRoaXMgdGls
ZWQgbGF5ZXIgaW4gY29udGVudCBzcGFjZS4KKyAgICB2b2lkIHNldExheWVyUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmKTsKKworICAgIC8vIENoYW5nZSB0aGUgdGlsZSBzaXplLiBUaGlzIG1heSBp
bnZhbGlkYXRlIGFsbCB0aGUgZXhpc3RpbmcgdGlsZXMuCisgICAgdm9pZCBzZXRUaWxlU2l6ZShj
b25zdCBJbnRTaXplJik7CisgICAgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3RpbGVTaXplOyB9CisgICAgYm9vbCBoYXNCb3JkZXJUZXhlbHMoKSBjb25zdCB7IHJl
dHVybiBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuICFtX3RpbGluZ0RhdGEubnVtVGlsZXMoKSB8fCAhdGlsZXMoKS5zaXpl
KCk7IH0KKworICAgIGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiBvcGVyYXRvcj0oY29uc3QgQ0NM
YXllclRpbGluZ0RhdGEmKTsKKworICAgIGNsYXNzIFRpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxU
aWxlPiB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGUpOworICAgIHB1YmxpYzoK
KyAgICAgICAgZXhwbGljaXQgVGlsZSgpIDogbV9pKC0xKSwgbV9qKC0xKSB7IH0KKworICAgICAg
ICBpbnQgaSgpIGNvbnN0IHsgcmV0dXJuIG1faTsgfQorICAgICAgICBpbnQgaigpIGNvbnN0IHsg
cmV0dXJuIG1fajsgfQorICAgICAgICB2b2lkIG1vdmVUbyhpbnQgaSwgaW50IGopIHsgbV9pID0g
aTsgbV9qID0gajsgfQorICAgIHByaXZhdGU6CisgICAgICAgIGludCBtX2k7CisgICAgICAgIGlu
dCBtX2o7CisgICAgfTsKKyAgICAvLyBEZWZhdWx0IGhhc2gga2V5IHRyYWl0cyBmb3IgaW50ZWdl
cnMgZGlzYWxsb3cgMCBhbmQgLTEgYXMgYSBrZXksIHNvCisgICAgLy8gdXNlIGEgY3VzdG9tIGhh
c2ggdHJhaXQgd2hpY2ggZGlzYWxsb3dzIC0xIGFuZCAtMiBpbnN0ZWFkLgorICAgIHR5cGVkZWYg
c3RkOjpwYWlyPGludCwgaW50PiBUaWxlTWFwS2V5OworICAgIHN0cnVjdCBUaWxlTWFwS2V5VHJh
aXRzIDogSGFzaFRyYWl0czxUaWxlTWFwS2V5PiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IGZhbHNlOworICAgICAgICBzdGF0aWMgVGlsZU1hcEtleSBlbXB0eVZh
bHVlKCkgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIoLTEsIC0xKTsgfQorICAgICAgICBzdGF0aWMg
dm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVGlsZU1hcEtleSYgc2xvdCkgeyBzbG90ID0gc3Rk
OjptYWtlX3BhaXIoLTIsIC0yKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShUaWxlTWFwS2V5IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5maXJzdCA9PSAtMiAmJiB2YWx1ZS5z
ZWNvbmQgPT0gLTI7IH0KKyAgICB9OworICAgIC8vIEZJWE1FOiBUaGUgbWFwcGVkIHZhbHVlIGlu
IFRpbGVNYXAgc2hvdWxkIHJlYWxseSBiZSBhbiBPd25QdHIsIGFzIHRoZQorICAgIC8vIHJlZmNv
dW50IG9mIGEgVGlsZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0aGFuIDEuIEhvd2V2ZXIsIEhhc2hN
YXAKKyAgICAvLyBkb2Vzbid0IGVhc2lseSBzdXBwb3J0IE93blB0ciBhcyBhIHZhbHVlLgorICAg
IHR5cGVkZWYgSGFzaE1hcDxUaWxlTWFwS2V5LCBSZWZQdHI8VGlsZT4sIERlZmF1bHRIYXNoPFRp
bGVNYXBLZXk+OjpIYXNoLCBUaWxlTWFwS2V5VHJhaXRzPiBUaWxlTWFwOworCisgICAgdm9pZCBh
ZGRUaWxlKFBhc3NSZWZQdHI8VGlsZT4sIGludCwgaW50KTsKKyAgICBQYXNzUmVmUHRyPFRpbGU+
IHRha2VUaWxlKGludCwgaW50KTsKKyAgICBUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0Owor
ICAgIGNvbnN0IFRpbGVNYXAmIHRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxlczsgfQorCisg
ICAgLy8gR3JvdyBsYXllciBzaXplIHRvIGNvbnRhaW4gdGhpcyByZWN0YW5nbGUuCisgICAgdm9p
ZCBncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHZv
aWQgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBp
bnQgJmxlZnQsIGludCAmdG9wLCBpbnQgJnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29uc3Q7CisgICAg
SW50UmVjdCBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KSBjb25zdDsKKyAgICBJbnRSZWN0IGxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVj
dCYgbGF5ZXJSZWN0KSBjb25zdDsKKyAgICBJbnRSZWN0IHRpbGVDb250ZW50UmVjdChjb25zdCBU
aWxlKikgY29uc3Q7CisgICAgSW50UmVjdCB0aWxlTGF5ZXJSZWN0KGNvbnN0IFRpbGUqKSBjb25z
dDsKKworICAgIHZvaWQgcmVzZXQoKTsKKworcHJvdGVjdGVkOgorICAgIENDTGF5ZXJUaWxpbmdE
YXRhKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CisKKyAgICBU
aWxlTWFwIG1fdGlsZXM7CisgICAgSW50U2l6ZSBtX3RpbGVTaXplOworICAgIEludFBvaW50IG1f
bGF5ZXJQb3NpdGlvbjsKKyAgICBUaWxpbmdEYXRhIG1fdGlsaW5nRGF0YTsKK307CisKK30KKwor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IGIyOWY4MWZjMzFiMzdmOTM0ZjdlYzVlNmQ5
MDlkMTc3YWM0NzliYzQuLjYwNDgyYTJlNjdjMzhiMmU1NmQ2OTYwOTM1MmRiNGQyYTcxNzA2Mzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0yOSwxNyArMjksMzEgQEAK
IAogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAorI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAordHlwZWRlZiBGbG9hdFBvaW50M0QgRWRnZTsKIGNsYXNzIE1hbmFnZWRUZXh0
dXJlOwogCitjbGFzcyBEcmF3YWJsZVRpbGUgOiBwdWJsaWMgQ0NMYXllclRpbGluZ0RhdGE6OlRp
bGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERyYXdhYmxlVGlsZSk7CitwdWJsaWM6Cisg
ICAgRHJhd2FibGVUaWxlKCkgOiBtX3RleHR1cmVJZCgwKSB7IH0KKworICAgIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICB2b2lk
IHNldFRleHR1cmVJZChQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkgeyBtX3RleHR1cmVJZCA9
IHRleHR1cmVJZDsgfQorcHJpdmF0ZToKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdGV4dHVyZUlk
OworfTsKKwogQ0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbChpbnQgaWQpCiAgICAg
OiBDQ0xheWVySW1wbChpZCkKLSAgICAsIG1fdGlsZXIoMCkKIHsKIH0KIApAQCAtNDcsMzEgKzYx
LDE3IEBAIENDVGlsZWRMYXllckltcGw6On5DQ1RpbGVkTGF5ZXJJbXBsKCkKIHsKIH0KIAotdm9p
ZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3KCkKLXsKLSAgICBjb25zdCBJbnRSZWN0JiBsYXllclJl
Y3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7Ci0gICAgaWYgKCFsYXllclJlY3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5j
b250ZXh0KCk7Ci0gICAgICAgIC8vIE1hc2sgb3V0IHdyaXRlcyB0byB0aGUgYWxwaGEgY2hhbm5l
bCBmb3IgdGhlIHJvb3QgbGF5ZXIsIHN1YnBpeGVsIGFudGlhbGlhc2luZwotICAgICAgICAvLyB2
aWEgU2tpYSByZXN1bHRzIGluIGludmFsaWQgemVybyBhbHBoYSB2YWx1ZXMgb24gdGV4dCBnbHlw
aHMuIFRoZSByb290IGxheWVyCi0gICAgICAgIC8vIGlzIGFsd2F5cyBvcGFxdWUgc28gdGhlIGFs
cGhhIGNoYW5uZWwgaXNuJ3QgbWVhbmluZ2Z1bCBhbnl3YXkuCi0gICAgICAgIGlmIChpc1Jvb3RM
YXllcigpKQotICAgICAgICAgICAgY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUs
IGZhbHNlKTsKLSAgICAgICAgbV90aWxlci0+ZHJhdyhsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNm
b3JtLCBkcmF3T3BhY2l0eSgpKTsKLSAgICAgICAgaWYgKGlzUm9vdExheWVyKCkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgfQot
fQotCiB2b2lkIENDVGlsZWRMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoKQogewogICAg
IC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB2YWxpZCBmb3Igc2luZ2xlIHRleHR1cmUgbGF5ZXJz
LCBlLmcuIG1hc2tzLgogICAgIEFTU0VSVChtX3RpbGVyKTsKKyAgICBBU1NFUlQobV90aWxlci0+
bnVtVGlsZXMoKSA9PSAxKTsKIAotICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV90aWxl
ci0+Z2V0U2luZ2xlVGV4dHVyZSgpOwotICAgIEFTU0VSVCh0ZXh0dXJlKTsKKyAgICBEcmF3YWJs
ZVRpbGUqIHRpbGUgPSB0aWxlQXQoMCwgMCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJl
SWQgPSB0aWxlID8gdGlsZS0+dGV4dHVyZUlkKCkgOiAwOworICAgIEFTU0VSVCh0ZXh0dXJlSWQp
OwogCi0gICAgdGV4dHVyZS0+YmluZFRleHR1cmUobGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCkp
OworICAgIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKIH0KIAogdm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25z
dApAQCAtODAsNiArODAsMzI5IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHVtcExheWVyUHJv
cGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKICAgICBDQ0xheWVySW1w
bDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKIH0KIAorRHJhd2FibGVUaWxlKiBD
Q1RpbGVkTGF5ZXJJbXBsOjp0aWxlQXQoaW50IGksIGludCBqKSBjb25zdAoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxEcmF3YWJsZVRpbGUqPihtX3RpbGVyLT50aWxlQXQoaSwgaikpOworfQor
CitEcmF3YWJsZVRpbGUqIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZVRpbGUoaW50IGksIGludCBq
KQoreworICAgIFJlZlB0cjxEcmF3YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihuZXcgRHJhd2Fi
bGVUaWxlKCkpOworICAgIG1fdGlsZXItPmFkZFRpbGUodGlsZSwgaSwgaik7CisgICAgcmV0dXJu
IHRpbGUuZ2V0KCk7Cit9CisKK3ZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdygpCit7CisgICAg
Y29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOworCisgICAgaWYg
KG1fc2tpcHNEcmF3IHx8IG1fdGlsZXItPmlzRW1wdHkoKSB8fCBsYXllclJlY3QuaXNFbXB0eSgp
IHx8ICFsYXllclJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoT1Nf
Q0hST01FT1MpCisgICAgLy8gRklYTUU6IERpc2FibGUgYW50aS1hbGlhc2luZyB0byB3b3JrYXJv
dW5kIGJyb2tlbiBkcml2ZXIuCisgICAgYm9vbCB1c2VBQSA9IGZhbHNlOworI2Vsc2UKKyAgICAv
LyBVc2UgYW50aS1hbGlhc2luZyBwcm9ncmFtcyB3aGVuIGJvcmRlciB0ZXhlbHMgYXJlIHByZXNl
dCBhbmQgdHJhbnNmb3JtCisgICAgLy8gaXMgbm90IGFuIGludGVnZXIgdHJhbnNsYXRpb24uCisg
ICAgYm9vbCB1c2VBQSA9IChtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSAmJiAhbV90aWxpbmdU
cmFuc2Zvcm0uaXNJbnRlZ2VyVHJhbnNsYXRpb24oKSk7CisjZW5kaWYKKworICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisgICAgaWYg
KGlzUm9vdExheWVyKCkpCisgICAgICAgIGNvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0
cnVlLCBmYWxzZSk7CisKKyAgICBzd2l0Y2ggKG1fc2FtcGxlZFRleGVsRm9ybWF0KSB7CisgICAg
Y2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOgorICAgICAg
ICBpZiAodXNlQUEpCisgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlcigpLCBsYXll
clJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyKCkt
PnRpbGVyUHJvZ3JhbUFBKCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtQUEoKS0+ZnJh
Z21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIGxheWVyUmVuZGVy
ZXIoKS0+dGlsZXJQcm9ncmFtQUEoKS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyKCksIGxh
eWVyUmVjdCwgbV90aWxpbmdUcmFuc2Zvcm0sIGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXIo
KS0+dGlsZXJQcm9ncmFtKCksIC0xLCAtMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQToKKyAgICAgICAgaWYgKHVz
ZUFBKQorICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIoKSwgbGF5ZXJSZWN0LCBt
X3RpbGluZ1RyYW5zZm9ybSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclBy
b2dyYW1Td2l6emxlQUEoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6emxlQUEo
KS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIGxheWVy
UmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCktPmZyYWdtZW50U2hhZGVyKCkuZWRn
ZUxvY2F0aW9uKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJS
ZW5kZXJlcigpLCBsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpLCBs
YXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKSwgLTEsIC0xKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgaWYgKGlzUm9vdExheWVyKCkpCisgICAgICAgIGNvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzZXRU
aWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcikKK3sKKyAgICBpZiAoIW1f
dGlsZXIpCisgICAgICAgIG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRlKHRpbGVy
LnRpbGVTaXplKCksIHRpbGVyLmhhc0JvcmRlclRleGVscygpID8gQ0NMYXllclRpbGluZ0RhdGE6
Okhhc0JvcmRlclRleGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpOb0JvcmRlclRleGVscyk7Cisg
ICAgKm1fdGlsZXIgPSB0aWxlcjsKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5jVGV4
dHVyZUlkKGludCBpLCBpbnQgaiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpCit7CisgICAg
RHJhd2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgIGlmICghdGlsZSkKKyAgICAg
ICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CisgICAgdGlsZS0+c2V0VGV4dHVyZUlkKHRleHR1
cmVJZCk7Cit9CisKK3ZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZXZpY3RUZXh0dXJlKGludCBpLCBp
bnQgaikKK3sKKyAgICBEcmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgaWYg
KCF0aWxlKQorICAgICAgICByZXR1cm47CisgICAgdGlsZS0+c2V0VGV4dHVyZUlkKDApOworfQor
CitzdGF0aWMgYm9vbCBpc0NDVyhjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit7CisgICAgRmxvYXRQ
b2ludCB2MSA9IEZsb2F0UG9pbnQocXVhZC5wMigpLngoKSAtIHF1YWQucDEoKS54KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5wMigpLnkoKSAtIHF1YWQucDEoKS55KCkp
OworICAgIEZsb2F0UG9pbnQgdjIgPSBGbG9hdFBvaW50KHF1YWQucDMoKS54KCkgLSBxdWFkLnAy
KCkueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWQucDMoKS55KCkgLSBx
dWFkLnAyKCkueSgpKTsKKyAgICByZXR1cm4gKHYxLngoKSAqIHYyLnkoKSAtIHYxLnkoKSAqIHYy
LngoKSkgPCAwOworfQorCitzdGF0aWMgRWRnZSBjb21wdXRlRWRnZShjb25zdCBGbG9hdFBvaW50
JiBwLCBjb25zdCBGbG9hdFBvaW50JiBxLCBmbG9hdCBzaWduKQoreworICAgIEFTU0VSVChwICE9
IHEpOworCisgICAgRmxvYXRQb2ludCB0YW5nZW50KHAueSgpIC0gcS55KCksIHEueCgpIC0gcC54
KCkpOworICAgIGZsb2F0IHNjYWxlID0gc2lnbiAvIHRhbmdlbnQubGVuZ3RoKCk7CisgICAgZmxv
YXQgY3Jvc3MyID0gcC54KCkgKiBxLnkoKSAtIHEueCgpICogcC55KCk7CisKKyAgICByZXR1cm4g
RWRnZSh0YW5nZW50LngoKSAqIHNjYWxlLAorICAgICAgICAgICAgICAgIHRhbmdlbnQueSgpICog
c2NhbGUsCisgICAgICAgICAgICAgICAgY3Jvc3MyICogc2NhbGUpOworfQorCitzdGF0aWMgRmxv
YXRQb2ludCBpbnRlcnNlY3QoY29uc3QgRWRnZSYgYSwgY29uc3QgRWRnZSYgYikKK3sKKyAgICBy
ZXR1cm4gRmxvYXRQb2ludCgKKyAgICAgICAgKGEueSgpICogYi56KCkgLSBiLnkoKSAqIGEueigp
KSAvIChhLngoKSAqIGIueSgpIC0gYi54KCkgKiBhLnkoKSksCisgICAgICAgIChhLngoKSAqIGIu
eigpIC0gYi54KCkgKiBhLnooKSkgLyAoYi54KCkgKiBhLnkoKSAtIGEueCgpICogYi55KCkpKTsK
K30KKwordGVtcGxhdGUgPGNsYXNzIFQ+Cit2b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXdUaWxl
cyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1M
b2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbikKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
YXRyaXgobGF5ZXJSZW5kZXJlci0+d2luZG93TWF0cml4KCkgKiBsYXllclJlbmRlcmVyLT5wcm9q
ZWN0aW9uTWF0cml4KCkgKiBnbG9iYWxUcmFuc2Zvcm0pOworCisgICAgLy8gV2UgZG9uJ3QgY2Fy
ZSBhYm91dCBaIGNvbXBvbmVudC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXhYWVcg
PQorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtYXRyaXgubTExKCksIG1hdHJpeC5tMTIo
KSwgMCwgbWF0cml4Lm0xNCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgu
bTIxKCksIG1hdHJpeC5tMjIoKSwgMCwgbWF0cml4Lm0yNCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgMSwgbWF0cml4Lm0zNCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwg
MCwgbWF0cml4Lm00NCgpKTsKKworICAgIC8vIERvbid0IGRyYXcgYW55IHRpbGVzIHdoZW4gbWF0
cml4IGlzIG5vdCBpbnZlcnRpYmxlLgorICAgIGlmICghbWF0cml4WFlXLmlzSW52ZXJ0aWJsZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlID0g
bWF0cml4WFlXLmludmVyc2UoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0g
bGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQ
cm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkp
OworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCkpOworCisgICAgLy8gTWFwIGNvbnRlbnQgcmVjdGFuZ2xlIHRvIGRldmlj
ZSBzcGFjZS4KKyAgICBGbG9hdFF1YWQgZGV2aWNlUXVhZCA9IG1hdHJpeC5tYXBRdWFkKEZsb2F0
UXVhZChjb250ZW50UmVjdCkpOworCisgICAgLy8gQ291bnRlci1jbG9ja3dpc2U/CisgICAgZmxv
YXQgc2lnbiA9IGlzQ0NXKGRldmljZVF1YWQpID8gLTEgOiAxOworCisgICAgLy8gQ29tcHV0ZSBv
dXRlciBlZGdlcy4KKyAgICBFZGdlIGxlZnRFZGdlID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVhZC5w
NCgpLCBkZXZpY2VRdWFkLnAxKCksIHNpZ24pOworICAgIEVkZ2UgcmlnaHRFZGdlID0gY29tcHV0
ZUVkZ2UoZGV2aWNlUXVhZC5wMigpLCBkZXZpY2VRdWFkLnAzKCksIHNpZ24pOworICAgIEVkZ2Ug
dG9wRWRnZSA9IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDEoKSwgZGV2aWNlUXVhZC5wMigpLCBz
aWduKTsKKyAgICBFZGdlIGJvdHRvbUVkZ2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnAzKCks
IGRldmljZVF1YWQucDQoKSwgc2lnbik7CisKKyAgICBpZiAoZWRnZUxvY2F0aW9uICE9IC0xKSB7
CisgICAgICAgIC8vIE1vdmUgb3V0ZXIgZWRnZXMgdG8gZW5zdXJlIHRoYXQgYWxsIHBhcnRpYWxs
eSBjb3ZlcmVkIHBpeGVscyBhcmUKKyAgICAgICAgLy8gcHJvY2Vzc2VkLgorICAgICAgICBsZWZ0
RWRnZS5tb3ZlKDAsIDAsIDAuNWYpOworICAgICAgICByaWdodEVkZ2UubW92ZSgwLCAwLCAwLjVm
KTsKKyAgICAgICAgdG9wRWRnZS5tb3ZlKDAsIDAsIDAuNWYpOworICAgICAgICBib3R0b21FZGdl
Lm1vdmUoMCwgMCwgMC41Zik7CisKKyAgICAgICAgZmxvYXQgZWRnZVsxMl07CisgICAgICAgIGVk
Z2VbMF0gPSBsZWZ0RWRnZS54KCk7CisgICAgICAgIGVkZ2VbMV0gPSBsZWZ0RWRnZS55KCk7Cisg
ICAgICAgIGVkZ2VbMl0gPSBsZWZ0RWRnZS56KCk7CisgICAgICAgIGVkZ2VbM10gPSB0b3BFZGdl
LngoKTsKKyAgICAgICAgZWRnZVs0XSA9IHRvcEVkZ2UueSgpOworICAgICAgICBlZGdlWzVdID0g
dG9wRWRnZS56KCk7CisgICAgICAgIGVkZ2VbNl0gPSByaWdodEVkZ2UueCgpOworICAgICAgICBl
ZGdlWzddID0gcmlnaHRFZGdlLnkoKTsKKyAgICAgICAgZWRnZVs4XSA9IHJpZ2h0RWRnZS56KCk7
CisgICAgICAgIGVkZ2VbOV0gPSBib3R0b21FZGdlLngoKTsKKyAgICAgICAgZWRnZVsxMF0gPSBi
b3R0b21FZGdlLnkoKTsKKyAgICAgICAgZWRnZVsxMV0gPSBib3R0b21FZGdlLnooKTsKKyAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0zZnYoZWRnZUxvY2F0aW9uLCBlZGdlLCA0
KSk7CisgICAgfQorCisgICAgRWRnZSBwcmV2RWRnZVkgPSB0b3BFZGdlOworCisgICAgaW50IGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUlu
ZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgSW50UmVj
dCBsYXllclJlY3QgPSBtX3RpbGVyLT5jb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0
KTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIEVk
Z2UgcHJldkVkZ2VYID0gbGVmdEVkZ2U7CisKKyAgICAgICAgRWRnZSBlZGdlWSA9IGJvdHRvbUVk
Z2U7CisgICAgICAgIGlmIChqIDwgKG1fdGlsZXItPm51bVRpbGVzWSgpIC0gMSkpIHsKKyAgICAg
ICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB1bmlvblJlY3QobV90aWxlci0+dGlsZUJvdW5kcygw
LCBqKSwgbV90aWxlci0+dGlsZUJvdW5kcyhtX3RpbGVyLT5udW1UaWxlc1goKSAtIDEsIGopKTsK
KyAgICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3QpOworCisgICAgICAgICAg
ICAvLyBTa2lwIGVtcHR5IHJvd3MuCisgICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0aWxlUmVjdCA9IG1f
dGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZVJlY3QpOworCisgICAgICAgICAgICBG
bG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKKyAgICAgICAg
ICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOworCisgICAg
ICAgICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4KKyAgICAgICAgICAgIHAxID0g
bWF0cml4Lm1hcFBvaW50KHAxKTsKKyAgICAgICAgICAgIHAyID0gbWF0cml4Lm1hcFBvaW50KHAy
KTsKKworICAgICAgICAgICAgLy8gQ29tcHV0ZSBob3Jpem9udGFsIGVkZ2UuCisgICAgICAgICAg
ICBlZGdlWSA9IGNvbXB1dGVFZGdlKHAxLCBwMiwgc2lnbik7CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBEcmF3
YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAoIXRpbGUgfHwg
IXRpbGUtPnRleHR1cmVJZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
dGlsZS0+dGV4dHVyZUlkKCkpOworCisgICAgICAgICAgICAvLyBEb24ndCB1c2UgdGlsZUNvbnRl
bnRSZWN0IGhlcmUsIGFzIHRoYXQgY29udGFpbnMgdGhlIGZ1bGwKKyAgICAgICAgICAgIC8vIHJl
Y3Qgd2l0aCBib3JkZXIgdGV4ZWxzIHdoaWNoIHNob3VsZG4ndCBiZSBkcmF3bi4KKyAgICAgICAg
ICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3RpbGVyLT50aWxlQm91bmRzKHRpbGUtPmkoKSwgdGls
ZS0+aigpKTsKKyAgICAgICAgICAgIEludFJlY3QgZGlzcGxheVJlY3QgPSB0aWxlUmVjdDsKKyAg
ICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3QpOworCisgICAgICAgICAgICAv
LyBLZWVwIHRyYWNrIG9mIGhvdyB0aGUgdG9wIGxlZnQgaGFzIG1vdmVkLCBzbyB0aGUgdGV4dHVy
ZSBjYW4gYmUKKyAgICAgICAgICAgIC8vIG9mZnNldCB0aGUgc2FtZSBhbW91bnQuCisgICAgICAg
ICAgICBJbnRTaXplIGRpc3BsYXlPZmZzZXQgPSB0aWxlUmVjdC5taW5YTWluWUNvcm5lcigpIC0g
ZGlzcGxheVJlY3QubWluWE1pbllDb3JuZXIoKTsKKworICAgICAgICAgICAgLy8gU2tpcCBlbXB0
eSB0aWxlcy4KKyAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+bGF5ZXJS
ZWN0VG9Db250ZW50UmVjdCh0aWxlUmVjdCk7CisKKyAgICAgICAgICAgIEZsb2F0UmVjdCBjbGFt
cFJlY3QodGlsZVJlY3QpOworICAgICAgICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRl
cyB0byBhdm9pZCBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllcgorICAgICAgICAgICAgLy8gYnkg
ZGVmbGF0aW5nIHRoZSB0aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3IgaGFsZiBhIHRleGVsCisg
ICAgICAgICAgICAvLyBtaW51cyBlcHNpbG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUgcmVz
dWx0aW5nIGNsYW1wIHJlZ2lvbgorICAgICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0
IHNxdWFyZSBieSB0aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCisgICAgICAgICAgICAvLyBi
YWNrIHRvIG5vcm1hbGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hh
ZGVyCisgICAgICAgICAgICAvLyBhZnRlciBiZWluZyBjbGFtcGVkIHRvIDAtMSByYW5nZS4KKyAg
ICAgICAgICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKKyAgICAgICAgICAg
IGZsb2F0IGNsYW1wWCA9IG1pbigwLjUsIGNsYW1wUmVjdC53aWR0aCgpIC8gMi4wIC0gZXBzaWxv
bik7CisgICAgICAgICAgICBmbG9hdCBjbGFtcFkgPSBtaW4oMC41LCBjbGFtcFJlY3QuaGVpZ2h0
KCkgLyAyLjAgLSBlcHNpbG9uKTsKKyAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xh
bXBYKTsKKyAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKKyAgICAgICAg
ICAgIEZsb2F0U2l6ZSBjbGFtcE9mZnNldCA9IGNsYW1wUmVjdC5taW5YTWluWUNvcm5lcigpIC0g
RmxvYXRSZWN0KHRpbGVSZWN0KS5taW5YTWluWUNvcm5lcigpOworCisgICAgICAgICAgICBGbG9h
dFBvaW50IHRleE9mZnNldCA9IG1fdGlsZXItPnRleHR1cmVPZmZzZXQodGlsZS0+aSgpLCB0aWxl
LT5qKCkpICsgY2xhbXBPZmZzZXQgKyBGbG9hdFNpemUoZGlzcGxheU9mZnNldCk7CisgICAgICAg
ICAgICBmbG9hdCB0aWxlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlci0+dGlsZVNp
emUoKS53aWR0aCgpKTsKKyAgICAgICAgICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obV90aWxlci0+dGlsZVNpemUoKS5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIC8v
IE1hcCBjbGFtcGluZyByZWN0YW5nbGUgdG8gdW5pdCBzcXVhcmUuCisgICAgICAgICAgICBmbG9h
dCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYID0gLWNsYW1wUmVjdC54KCkgLyBjbGFtcFJlY3Qud2lkdGgo
KTsKKyAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVkgPSAtY2xhbXBSZWN0Lnko
KSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFNjYWxl
WCA9IHRpbGVSZWN0LndpZHRoKCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgIGZs
b2F0IHZlcnRleFRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgpIC8gY2xhbXBSZWN0LmhlaWdo
dCgpOworCisgICAgICAgICAgICAvLyBNYXAgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5h
dGVzLgorICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVYID0gdGV4T2Zmc2V0
LngoKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4VHJhbnNsYXRl
WSA9IHRleE9mZnNldC55KCkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgZmxvYXQgZnJhZ21l
bnRUZXhTY2FsZVggPSBjbGFtcFJlY3Qud2lkdGgoKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAg
IGZsb2F0IGZyYWdtZW50VGV4U2NhbGVZID0gY2xhbXBSZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdo
dDsKKworICAgICAgICAgICAgLy8gT3BlbkdMIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJvdHRvbS11
cC4KKyAgICAgICAgICAgIC8vIElmIHRpbGUgdGV4dHVyZSBpcyB0b3AtZG93biwgd2UgbmVlZCB0
byBmbGlwIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgaWYgKG1fdGV4dHVy
ZU9yaWVudGF0aW9uID09IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikg
eworICAgICAgICAgICAgICAgIGZyYWdtZW50VGV4VHJhbnNsYXRlWSA9IDEuMCAtIGZyYWdtZW50
VGV4VHJhbnNsYXRlWTsKKyAgICAgICAgICAgICAgICBmcmFnbWVudFRleFNjYWxlWSAqPSAtMS4w
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBFZGdlIGVkZ2VYID0gcmlnaHRFZGdlOwor
ICAgICAgICAgICAgaWYgKGkgPCAobV90aWxlci0+bnVtVGlsZXNYKCkgLSAxKSkgeworICAgICAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOwor
ICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5t
YXhZKCkpOworCisgICAgICAgICAgICAgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2Uu
CisgICAgICAgICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEpOworICAgICAgICAgICAg
ICAgIHAyID0gbWF0cml4Lm1hcFBvaW50KHAyKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1
dGUgdmVydGljYWwgZWRnZS4KKyAgICAgICAgICAgICAgICBlZGdlWCA9IGNvbXB1dGVFZGdlKHAx
LCBwMiwgc2lnbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZp
Y2Ugc3BhY2UgcXVhZC4KKyAgICAgICAgICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkKGludGVyc2Vj
dChlZGdlWSwgcHJldkVkZ2VYKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGVyc2VjdChwcmV2RWRnZVgsIHByZXZFZGdlWSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcnNlY3QocHJldkVkZ2VZLCBlZGdlWCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnRlcnNlY3QoZWRnZVgsIGVkZ2VZKSk7CisKKyAgICAgICAgICAgIC8v
IE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgorICAgICAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBp
bnZlcnNlLm1hcFF1YWQoZGV2aWNlUXVhZCk7CisKKyAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0
byB0aWxlUmVjdC4KKyAgICAgICAgICAgIHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRo
KCksIDEuMGYgLyB0aWxlUmVjdC5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIGlmIChmcmFnbWVu
dFRleFRyYW5zZm9ybUxvY2F0aW9uID09IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gTW92ZSBm
cmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbworICAg
ICAgICAgICAgICAgIC8vIHRoaXMgd2hpbGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0
cyBhcworICAgICAgICAgICAgICAgIC8vIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hv
dWxkIGFsd2F5cyBiZSBub24tbmVnYXRpdmUKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVz
IGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgorICAgICAgICAg
ICAgICAgIC8vIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVyLgorICAgICAgICAgICAgICAgIHZl
cnRleFRleFNjYWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICAgICAgICAgICAgICB2ZXJ0
ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgdmVydGV4
VGV4VHJhbnNsYXRlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICAgICAgICAgICAgICB2ZXJ0
ZXhUZXhUcmFuc2xhdGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICAgICAgICAgIHZl
cnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAgICAgICAgICAg
ICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm00ZihmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgs
IGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2Nh
bGVZKSk7CisKKyAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJv
Z3JhbS0+dmVydGV4U2hhZGVyKCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4
VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0
ZXhUZXhTY2FsZVkpKTsKKworICAgICAgICAgICAgZmxvYXQgcG9pbnRbOF07CisgICAgICAgICAg
ICBwb2ludFswXSA9IHF1YWQucDEoKS54KCk7CisgICAgICAgICAgICBwb2ludFsxXSA9IHF1YWQu
cDEoKS55KCk7CisgICAgICAgICAgICBwb2ludFsyXSA9IHF1YWQucDIoKS54KCk7CisgICAgICAg
ICAgICBwb2ludFszXSA9IHF1YWQucDIoKS55KCk7CisgICAgICAgICAgICBwb2ludFs0XSA9IHF1
YWQucDMoKS54KCk7CisgICAgICAgICAgICBwb2ludFs1XSA9IHF1YWQucDMoKS55KCk7CisgICAg
ICAgICAgICBwb2ludFs2XSA9IHF1YWQucDQoKS54KCk7CisgICAgICAgICAgICBwb2ludFs3XSA9
IHF1YWQucDQoKS55KCk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTJmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCksIHBvaW50LCA0KSk7
CisKKyAgICAgICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwg
bGF5ZXJSZW5kZXJlci0+cHJvamVjdGlvbk1hdHJpeCgpLCBnbG9iYWxUcmFuc2Zvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCks
IHRpbGVSZWN0LmhlaWdodCgpLCBvcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSk7CisKKyAgICAgICAgICAgIHByZXZFZGdl
WCA9IGVkZ2VYOworICAgICAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24uCisgICAgICAgICAg
ICBwcmV2RWRnZVguc2NhbGUoLTEsIC0xLCAtMSk7CisgICAgICAgIH0KKworICAgICAgICBwcmV2
RWRnZVkgPSBlZGdlWTsKKyAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24uCisgICAgICAgIHBy
ZXZFZGdlWS5zY2FsZSgtMSwgLTEsIC0xKTsKKyAgICB9Cit9CisKIH0KIAogI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApp
bmRleCA3MzQ2YmI3ZTdkNmZhNmJjOGNhMWViY2YyOWNjNTg0OWYxZWY2M2FlLi5kY2U1MmY3OTUy
YTg4Yjk4MjJmYTYzZWI4YWQ4MDdlODVlZjkzODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5oCkBAIC0yNiwxMSArMjYsMTUgQEAKICNpZm5kZWYgQ0NUaWxlZExheWVySW1wbF9oCiAj
ZGVmaW5lIENDVGlsZWRMYXllckltcGxfaAogCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVt
LmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyVGlsaW5nRGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERy
YXdhYmxlVGlsZTsKKwogY2xhc3MgQ0NUaWxlZExheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1w
bCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaWxlZExheWVySW1wbD4gY3Jl
YXRlKGludCBpZCkKQEAgLTQ1LDEzICs0OSw0MSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCiAg
ICAgdm9pZCBzZXRUaWxpbmdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRp
bGluZ1RyYW5zZm9ybSkgeyBtX3RpbGluZ1RyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9ybTsgfQot
ICAgIHZvaWQgc2V0VGlsZXIoTGF5ZXJUaWxlckNocm9taXVtKiB0aWxlcikgeyBtX3RpbGVyID0g
dGlsZXI7IH0KKyAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBz
RHJhdyA9IHNraXBzRHJhdzsgfQorICAgIHZvaWQgc2V0VGV4dHVyZU9yaWVudGF0aW9uKExheWVy
VGV4dHVyZVVwZGF0ZXI6Ok9yaWVudGF0aW9uIHRleHR1cmVPcmllbnRhdGlvbikgeyBtX3RleHR1
cmVPcmllbnRhdGlvbiA9IHRleHR1cmVPcmllbnRhdGlvbjsgfQorICAgIHZvaWQgc2V0U2FtcGxl
ZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBzYW1w
bGVkVGV4ZWxGb3JtYXQpIHsgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSBzYW1wbGVkVGV4ZWxGb3Jt
YXQ7IH0KKyAgICB2b2lkIHNldFRpbGluZ0RhdGEoY29uc3QgQ0NMYXllclRpbGluZ0RhdGEmIHRp
bGVyKTsKKyAgICB2b2lkIHN5bmNUZXh0dXJlSWQoaW50LCBpbnQsIFBsYXRmb3JtM0RPYmplY3Qg
dGV4dHVyZUlkKTsKKyAgICB2b2lkIGV2aWN0VGV4dHVyZShpbnQsIGludCk7CisKKyAgICB0eXBl
ZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRl
eEFscGhhPiBQcm9ncmFtOworICAgIC8vIFNoYWRlciBwcm9ncmFtIHRoYXQgc3dhcHMgcmVkIGFu
ZCBibHVlIGNvbXBvbmVudHMgb2YgdGV4dHVyZS4KKyAgICAvLyBVc2VkIHdoZW4gdGV4dHVyZSBm
b3JtYXQgZG9lcyBub3QgbWF0Y2ggbmF0aXZlIGNvbG9yIGZvcm1hdC4KKyAgICB0eXBlZGVmIFBy
b2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6
bGVBbHBoYT4gUHJvZ3JhbVN3aXp6bGU7CisKKyAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHBy
b2R1Y2VzIGFudGktYWxpYXNlZCBsYXllciBlZGdlcy4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5k
aW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhQUE+IFByb2dy
YW1BQTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdt
ZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYUFBPiBQcm9ncmFtU3dpenpsZUFBOwogCiBwcml2
YXRlOgogICAgIGV4cGxpY2l0IENDVGlsZWRMYXllckltcGwoaW50IGlkKTsKIAorICAgIC8vIERy
YXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KKyAgICB2
b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisKKyAgICBE
cmF3YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CisgICAgRHJhd2FibGVUaWxlKiBj
cmVhdGVUaWxlKGludCwgaW50KTsKKworICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJz
ZWN0IHdpdGggY29udGVudFJlY3QuCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgdm9pZCBk
cmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCog
cHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRp
b24pOworCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90aWxpbmdUcmFuc2Zvcm07Ci0gICAg
TGF5ZXJUaWxlckNocm9taXVtKiBtX3RpbGVyOworICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAg
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247Cisg
ICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVs
Rm9ybWF0OworCisgICAgT3duUHRyPENDTGF5ZXJUaWxpbmdEYXRhPiBtX3RpbGVyOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGlu
Z0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRh
LmgKaW5kZXggM2RhYmI1ZGVjMzMwNmU3ZTI2MzE0MDViZGMyYzM0ZTk1MmQ0MjAyNy4uYmM2M2E2
NzBiZjQ2MTcyNWU4MWQ4MDBhODkxODk1ZmFjODY2MmE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oCkBAIC00MCw3ICs0MCw2IEBA
IGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRQb2ludDsKIAogY2xhc3MgVGlsaW5nRGF0YSB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsaW5nRGF0YSk7CiBwdWJsaWM6CiAgICAgVGlsaW5n
RGF0YShpbnQgbWF4VGV4dHVyZVNpemUsIGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSwg
Ym9vbCBoYXNCb3JkZXJUZXhlbHMpOwogICAgIHZvaWQgc2V0VG90YWxTaXplKGludCB0b3RhbFNp
emVYLCBpbnQgdG90YWxTaXplWSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGExNDI1
MmU4NDIzZmRiNDVkZDhjY2ZjNDJmODU0Y2EwMzQwZGRmNjguLjc2MTQwOTQ3YzY4NGU4YzE2NDNl
NTQyOTc2YTU4ZTMyOTU5MDE4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTEtMDgtMTcgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4K
KworICAgICAgICBbY2hyb21pdW1dIFNwbGl0IHRpbGVyIGludG8gbWFpbiB0aHJlYWQgLyBjb21w
b3NpdG9yIHRocmVhZCB2ZXJzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjYwNjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgYSB0ZXN0IGZvciBhc3NpZ25tZW50IGFuZCBjb3B5IGNvbnN0cnVj
dG9yIGZvciBUaWxpbmdEYXRhLgorCisgICAgICAgICogdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMDgtMTYgIEphbWVzIFJvYmluc29u
ICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERyYXcgdGhlIHJv
b3QvIm5vbi1jb21wb3NpdGVkIGNvbnRlbnQiIGluIGNvbXBvc2l0b3Igc2lkZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcAppbmRleCA3NjJlZGE5
Mzk5MTUwZWJlNGM5NzE5NDZhNzRlNTdjMzlhM2I1ZGQ1Li5kNGM2OGY1NTc0MWU3YWNiNTc5YWVi
ZjE4NWRmNmUzNmEzMmZlM2Y3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1RpbGluZ0RhdGFUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RpbGluZ0RhdGFUZXN0LmNwcApAQCAtNDg4LDQgKzQ4OCwyOCBAQCBURVNUKFRpbGluZ0RhdGFU
ZXN0LCBzZXRNYXhUZXh0dXJlU2l6ZUJvcmRlcnMpCiAgICAgRVhQRUNUX0VRKDEwLCBkYXRhLm51
bVRpbGVzWSgpKTsKIH0KIAorVEVTVChUaWxpbmdEYXRhVGVzdCwgYXNzaWdubWVudCkKK3sKKyAg
ICB7CisgICAgICAgIFRpbGluZ0RhdGEgc291cmNlKDgsIDE2LCAzMiwgdHJ1ZSk7CisgICAgICAg
IFRpbGluZ0RhdGEgZGVzdCA9IHNvdXJjZTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5ib3Jk
ZXJUZXhlbHMoKSwgZGVzdC5ib3JkZXJUZXhlbHMoKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3Vy
Y2UubWF4VGV4dHVyZVNpemUoKSwgZGVzdC5tYXhUZXh0dXJlU2l6ZSgpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKHNvdXJjZS5udW1UaWxlc1goKSwgZGVzdC5udW1UaWxlc1goKSk7CisgICAgICAgIEVY
UEVDVF9FUShzb3VyY2UubnVtVGlsZXNZKCksIGRlc3QubnVtVGlsZXNZKCkpOworICAgICAgICBF
WFBFQ1RfRVEoc291cmNlLnRvdGFsU2l6ZVgoKSwgZGVzdC50b3RhbFNpemVYKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoc291cmNlLnRvdGFsU2l6ZVkoKSwgZGVzdC50b3RhbFNpemVZKCkpOworICAg
IH0KKyAgICB7CisgICAgICAgIFRpbGluZ0RhdGEgc291cmNlKDMsIDYsIDEwMCwgZmFsc2UpOwor
ICAgICAgICBUaWxpbmdEYXRhIGRlc3Qoc291cmNlKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJj
ZS5ib3JkZXJUZXhlbHMoKSwgZGVzdC5ib3JkZXJUZXhlbHMoKSk7CisgICAgICAgIEVYUEVDVF9F
UShzb3VyY2UubWF4VGV4dHVyZVNpemUoKSwgZGVzdC5tYXhUZXh0dXJlU2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHNvdXJjZS5udW1UaWxlc1goKSwgZGVzdC5udW1UaWxlc1goKSk7CisgICAg
ICAgIEVYUEVDVF9FUShzb3VyY2UubnVtVGlsZXNZKCksIGRlc3QubnVtVGlsZXNZKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoc291cmNlLnRvdGFsU2l6ZVgoKSwgZGVzdC50b3RhbFNpemVYKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoc291cmNlLnRvdGFsU2l6ZVkoKSwgZGVzdC50b3RhbFNpemVZKCkp
OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104278</attachid>
            <date>2011-08-17 16:30:52 -0700</date>
            <delta_ts>2011-08-18 12:01:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66065-20110817163051.patch</filename>
            <type>text/plain</type>
            <size>101139</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMDA4MDA1ZDViYTYwNDAy
ZGIzYTQ0ZGNjZmU2NjY1NTM5MGEyNmQxLi40Y2U4NGE4ZmZlOTU0ZjlkMWU1YmY2YjIyYjZkYzRm
ODM1Mzc1MWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEzIEBACisyMDExLTA4LTE3ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxp
dCB0aWxlciBpbnRvIG1haW4gdGhyZWFkIC8gY29tcG9zaXRvciB0aHJlYWQgdmVyc2lvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDY1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cy4KKworICAgICAgICBMYXllclRpbGVyQ2hyb21pdW0gaXMgcmVuYW1lZCB0
byBiZSBDQ0xheWVyVGlsaW5nRGF0YS4gSW52YWxpZGF0aW9uCisgICAgICAgIGFuZCBwYWludCBm
dW5jdGlvbmFsaXR5IGlzIHB1c2hlZCBpbnRvIFRpbGVkTGF5ZXJDaHJvbWl1bSBhbmQgZHJhd2lu
ZworICAgICAgICB3aXRoIEdMIGlzIHB1c2hlZCBpbnRvIENDVGlsZWRMYXllckltcGwuIER1cmlu
ZyB0cmVlIHN5bmNocm9uaXphdGlvbiwKKyAgICAgICAgdGhlIHRpbGVyIHByb3BlcnRpZXMgYW5k
IHRleHR1cmUgSURzIGFyZSBzeW5jaHJvbml6ZWQgaW50bworICAgICAgICBDQ1RpbGVkTGF5ZXJJ
bXBsLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6YmVzdFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGVB
QSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0
dXJlOjp0ZXh0dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpV
cGRhdGFibGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6ZGlydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6VXBkYXRhYmxlVGlsZTo6Y2xlYXJEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZU1hbmFnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp0aWxlQXQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVyZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRh
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpDQ0xheWVyVGlsaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6c2V0VGlsZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6YWRkVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVGlsaW5nRGF0YTo6dGFrZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRpbGluZ0RhdGE6OnRpbGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0
YTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmNvbnRlbnRS
ZWN0VG9UaWxlSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6
Y29udGVudFJlY3RUb0xheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5n
RGF0YTo6bGF5ZXJSZWN0VG9Db250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VGlsaW5nRGF0YTo6dGlsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
aWxpbmdEYXRhOjp0aWxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxp
bmdEYXRhOjpzZXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxp
bmdEYXRhOjpncm93TGF5ZXJUb0NvbnRhaW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpudW1UaWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUaWxpbmdEYXRhOjpudW1UaWxlc1kpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRpbGluZ0RhdGE6OnRpbGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGlu
Z0RhdGE6OnRleHR1cmVPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0Rh
dGE6OnRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpoYXNC
b3JkZXJUZXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmlzRW1w
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OlRpbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OmkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OmopOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVGlsaW5nRGF0YTo6VGlsZU1hcEtleVRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcEtleVRyYWl0czo6Y29uc3RydWN0RGVs
ZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFw
S2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGls
aW5nRGF0YTo6dGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjpE
cmF3YWJsZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjp0ZXh0dXJlSWQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjpzZXRUZXh0dXJlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnRpbGVBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZWRMYXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6
c2V0VGlsaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5j
VGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmV2aWN0VGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjppc0NDVyk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlRWRnZSk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaWxlZExheWVySW1wbDo6ZHJhd1RpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RpbGVkTGF5ZXJJbXBsOjpzZXRTa2lwc0RyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
ZExheWVySW1wbDo6c2V0VGV4dHVyZU9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGlsZWRMYXllckltcGw6OnNldFNhbXBsZWRUZXhlbEZvcm1hdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaDoKKwogMjAxMS0wOC0xNiAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRHJhdyB0aGUg
cm9vdC8ibm9uLWNvbXBvc2l0ZWQgY29udGVudCIgaW4gY29tcG9zaXRvciBzaWRlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggN2JkYzU5NmE5ZGNhNmMzODBiNzY0ZGMyNjYxNjkwYjgxYzAwNWMxNS4uYmVh
N2FkMmRkY2NhOTVjYTNiN2RiMDVlYWI0MmEwMzFmMWM4MGMxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzUxMCw4ICszNTEwLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJv
bWl1bS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0u
aCcsCkBAIC0zNTYwLDYgKzM1NTgsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IGQ2M2VhMTQ2MWQwNTdkOTA5MmU1ODlmZmUxMjVhOTBjODQw
ZTY2MWQuLjg4MTJkZjYxY2JhYTlkYzNjZjU1NWIzODYzMDVlNmUzOTk1ZTVlZGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEwNCwxMiArMTA0LDEyIEBAIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIAogICAgIEludFJl
Y3QgZGlydHkgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKICAgICBkaXJ0eS5pbnRl
cnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKLSAgICBtX3RpbGVy
LT5pbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgaW52YWxpZGF0ZVJlY3QoZGlydHkpOwogCiAg
ICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aWxlci0+
cHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCwgdGV4dHVyZVVwZGF0ZXIoKSk7CisgICAgcHJlcGFy
ZVRvVXBkYXRlKGxheWVyUmVjdCk7CiAgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKIH0K
IApAQCAtMTIyLDYgKzEyMiw3IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRl
eHR1cmVVcGRhdGVySWZOZWVkZWQoKQogewogICAgIGlmIChtX3RleHR1cmVVcGRhdGVyKQogICAg
ICAgICByZXR1cm47CisKICNpZiBVU0UoU0tJQSkKICAgICBpZiAobGF5ZXJSZW5kZXJlcigpLT5z
ZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewogICAgICAgICBtX3RleHR1cmVVcGRhdGVy
ID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250
ZXh0KCksIENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgbGF5ZXJSZW5kZXJl
cigpLT5za2lhQ29udGV4dCgpKTsKQEAgLTEzMSwxMCArMTMyLDUgQEAgdm9pZCBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpCiAgICAgbV90ZXh0dXJl
VXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShsYXllclJlbmRlcmVy
Q29udGV4dCgpLCBDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGxheWVyUmVu
ZGVyZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpOwogfQogCi12b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjpwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpCi17Ci0gICAgbV90aWxlci0+
cHJvdGVjdFRpbGVUZXh0dXJlcyhJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3Vu
ZHMoKSkpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggYzlmZDBkODVjZThlYjMyM2ExMmY5
MDEyYmJlMmYyNDNkZjc4MjQyMC4uYTBlOTZjMzRhMjBkNTQyYTFkYTZlODcxNjA1NTg0YzBmOTFl
ZWM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC02MCw3ICs2MCw2IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCk7CiAgICAgdmlydHVhbCBM
YXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dHVyZVVwZGF0ZXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxl
VGV4dHVyZXMoKTsKIAogICAgIE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX3RleHR1cmVV
cGRhdGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDZlN2E5M2Mw
MDZhYzFiY2E3ZGU0Mjc4YjRmNDczZDFhNWM5YjcyN2IuLmExMTFhMmM3M2NiODdjZWU3NDlmMGY2
MTJkZWI0ZTE0MWE0Y2I3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAt
MTU0LDcgKzE1NCw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZE
aXJ0eSgpCiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAgICAgICAg
IEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7CiAgICAgICAg
IGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX3RpbGVyLT5pbnZh
bGlkYXRlUmVjdChwYWludFJlY3QpOworICAgICAgICAgICAgaW52YWxpZGF0ZVJlY3QocGFpbnRS
ZWN0KTsKICAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzSWZEaXJ0eSgpCiAgICAgaWYgKHZpc2libGVMYXllclJlY3QoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fdGlsZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlTGF5
ZXJSZWN0KCksIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOworICAgIHByZXBhcmVUb1VwZGF0ZSh2
aXNpYmxlTGF5ZXJSZWN0KCkpOwogfQogCiBMYXllclRleHR1cmVVcGRhdGVyKiBJbWFnZUxheWVy
Q2hyb21pdW06OnRleHR1cmVVcGRhdGVyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCmluZGV4IDNhMjg5MTEwMGQ2OTNiYTYwZTExODNlOTBhZmI1YmQwMzg4OWIy
ZTguLmJiYjYwM2YzYWZiMjVmYzdmZWIxNzE1YWQ2ZGRjYmVkMGJmNjkxMDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUg
IkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29u
dGVudEhvc3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKQEAgLTUyMiw2ICs1
MjMsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VUZXh0dXJlcygpCiAg
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyht
X2NvbnRleHQuZ2V0KCkpOwogfQogCitHQzNEZW51bSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJl
c3RUZXh0dXJlRm9ybWF0KCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6YmVzdFRleHR1
cmVGb3JtYXQoY29udGV4dCgpKTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZp
ZXdwb3J0Q2hhbmdlZCgpCiB7CiAgICAgaWYgKG1fY29udGV4dCkKQEAgLTExMDYsNyArMTExMiw3
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygp
CiAgICAgLy8gc3RhcnQgd2hpbGUgd2UgZG8gb3RoZXIgd29yay4gT3RoZXIgcHJvZ3JhbXMgYXJl
IGNyZWF0ZWQgbGF6aWx5IG9uIGZpcnN0IGFjY2Vzcy4KICAgICBtX3NoYXJlZEdlb21ldHJ5ID0g
YWRvcHRQdHIobmV3IEdlb21ldHJ5QmluZGluZyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3Jl
bmRlclN1cmZhY2VQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3Jh
bShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBtX3RpbGVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBM
YXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAgbV90aWxl
clByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbShtX2NvbnRl
eHQuZ2V0KCkpKTsKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Zmx1c2go
KSk7CiAKQEAgLTExNjIsNyArMTE2OCw3IEBAIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6TWFza1By
b2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9nCiAgICAg
cmV0dXJuIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLmdldCgpOwogfQogCi1jb25zdCBMYXll
clRpbGVyQ2hyb21pdW06OlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9n
cmFtKCkKK2NvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dGlsZXJQcm9ncmFtKCkKIHsKICAgICBBU1NFUlQobV90aWxlclByb2dyYW0pOwogICAg
IGlmICghbV90aWxlclByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKQEAgLTExNzIsMTAgKzExNzgs
MTAgQEAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnRpbGVyUHJvZ3JhbSgpCiAgICAgcmV0dXJuIG1fdGlsZXJQcm9ncmFtLmdldCgpOwog
fQogCi1jb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlKiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGUoKQorY29uc3QgQ0NUaWxlZExheWVySW1w
bDo6UHJvZ3JhbVN3aXp6bGUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dp
enpsZSgpCiB7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3aXp6bGUpCi0gICAgICAgIG1fdGls
ZXJQcm9ncmFtU3dpenpsZSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dy
YW1Td2l6emxlKG1fY29udGV4dC5nZXQoKSkpOworICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6
bGUgPSBhZG9wdFB0cihuZXcgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGUobV9jb250
ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3aXp6bGUtPmluaXRpYWxpemVk
KCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQ
cm9ncmFtU3dpenpsZTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwogICAgICAgICBtX3RpbGVyUHJv
Z3JhbVN3aXp6bGUtPmluaXRpYWxpemUoKTsKQEAgLTExODMsMTAgKzExODksMTAgQEAgY29uc3Qg
TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZSogTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp0aWxlclByb2dyYW1Td2kKICAgICByZXR1cm4gbV90aWxlclByb2dyYW1Td2l6emxlLmdldCgp
OwogfQogCi1jb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1BQSogTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp0aWxlclByb2dyYW1BQSgpCitjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9n
cmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtQUEoKQogewogICAgIGlm
ICghbV90aWxlclByb2dyYW1BQSkKLSAgICAgICAgbV90aWxlclByb2dyYW1BQSA9IGFkb3B0UHRy
KG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1BQShtX2NvbnRleHQuZ2V0KCkpKTsKKyAg
ICAgICAgbV90aWxlclByb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsOjpQ
cm9ncmFtQUEobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbUFBLT5p
bml0aWFsaXplZCgpKSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21p
dW06OnRpbGVyUHJvZ3JhbUFBOjppbml0aWFsaXplIiwgdGhpcywgMCk7CiAgICAgICAgIG1fdGls
ZXJQcm9ncmFtQUEtPmluaXRpYWxpemUoKTsKQEAgLTExOTQsMTAgKzEyMDAsMTAgQEAgY29uc3Qg
TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGls
ZXJQcm9ncmFtQUEoKQogICAgIHJldHVybiBtX3RpbGVyUHJvZ3JhbUFBLmdldCgpOwogfQogCi1j
b25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlQUEqIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZUFBKCkKK2NvbnN0IENDVGlsZWRMYXllckltcGw6
OlByb2dyYW1Td2l6emxlQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dp
enpsZUFBKCkKIHsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dpenpsZUFBKQotICAgICAgICBt
X3RpbGVyUHJvZ3JhbVN3aXp6bGVBQSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW06
OlByb2dyYW1Td2l6emxlQUEobV9jb250ZXh0LmdldCgpKSk7CisgICAgICAgIG1fdGlsZXJQcm9n
cmFtU3dpenpsZUFBID0gYWRvcHRQdHIobmV3IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6
emxlQUEobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3aXp6bGVB
QS0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlQUE6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKICAg
ICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEtPmluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNDE3ZjgyMmRlMzFmYzUyOTdjYTQzYTZhNDMyZmY1
NjIwZTZjYTQ1Yi4uYmUyM2Q1MmI2MjdjNjM1ZjU3OTgxNTk5MTg3MmUxM2I3NWZmNjNiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNs
dWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXll
ckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCkBAIC0xMjQsMTAgKzEy
MywxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbSogaGVh
ZHNVcERpc3BsYXlQcm9ncmFtKCk7CiAgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFt
KiByZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6TWFz
a1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOwotICAgIGNvbnN0IExheWVyVGls
ZXJDaHJvbWl1bTo6UHJvZ3JhbSogdGlsZXJQcm9ncmFtKCk7Ci0gICAgY29uc3QgTGF5ZXJUaWxl
ckNocm9taXVtOjpQcm9ncmFtU3dpenpsZSogdGlsZXJQcm9ncmFtU3dpenpsZSgpOwotICAgIGNv
bnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBKiB0aWxlclByb2dyYW1BQSgpOwotICAg
IGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGVBQSogdGlsZXJQcm9ncmFt
U3dpenpsZUFBKCk7CisgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbSogdGlsZXJQ
cm9ncmFtKCk7CisgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGUqIHRp
bGVyUHJvZ3JhbVN3aXp6bGUoKTsKKyAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFt
QUEqIHRpbGVyUHJvZ3JhbUFBKCk7CisgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3Jh
bVN3aXp6bGVBQSogdGlsZXJQcm9ncmFtU3dpenpsZUFBKCk7CiAgICAgY29uc3QgQ0NDYW52YXNM
YXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDUGx1
Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwbHVnaW5MYXllclByb2dyYW0oKTsKICAgICBjb25zdCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbSogdmlkZW9MYXllclJHQkFQcm9ncmFtKCk7CkBA
IC0xNTQsNiArMTUzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyUmVj
dXJzaXZlKExheWVyQ2hyb21pdW0qKTsKIAorICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0
KCk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGJvb2wgc19pblBhaW50TGF5ZXJDb250
ZW50czsKICNlbmRpZgpAQCAtMjE4LDEwICsyMTksMTAgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
R2VvbWV0cnlCaW5kaW5nPiBtX3NoYXJlZEdlb21ldHJ5OwogICAgIE93blB0cjxMYXllckNocm9t
aXVtOjpCb3JkZXJQcm9ncmFtPiBtX2JvcmRlclByb2dyYW07CiAgICAgT3duUHRyPENDSGVhZHNV
cERpc3BsYXk6OlByb2dyYW0+IG1faGVhZHNVcERpc3BsYXlQcm9ncmFtOwotICAgIE93blB0cjxM
YXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0+IG1fdGlsZXJQcm9ncmFtOwotICAgIE93blB0cjxM
YXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlPiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGU7
Ci0gICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBPiBtX3RpbGVyUHJvZ3Jh
bUFBOwotICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlQUE+IG1f
dGlsZXJQcm9ncmFtU3dpenpsZUFBOworICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9n
cmFtPiBtX3RpbGVyUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3Jh
bVN3aXp6bGU+IG1fdGlsZXJQcm9ncmFtU3dpenpsZTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVy
SW1wbDo6UHJvZ3JhbUFBPiBtX3RpbGVyUHJvZ3JhbUFBOworICAgIE93blB0cjxDQ1RpbGVkTGF5
ZXJJbXBsOjpQcm9ncmFtU3dpenpsZUFBPiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQTsKICAgICBP
d25QdHI8Q0NDYW52YXNMYXllckltcGw6OlByb2dyYW0+IG1fY2FudmFzTGF5ZXJQcm9ncmFtOwog
ICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbT4gbV9wbHVnaW5MYXllclByb2dy
YW07CiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW0+IG1fcmVuZGVyU3Vy
ZmFjZU1hc2tQcm9ncmFtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCmluZGV4IDIxZDUy
ZDAyYTVhMjFiNjExMWY3OGI1NDBhZWM2OGMzNDdhMDllZmEuLjk3NmQ3OWVjOTkzYjNmYWU5MjU4
MWJlMjNlMzhhM2ViNGQxYzZmNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKQEAg
LTMwLDYgKzMwLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNs
dWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03OCw0ICs3OSwzIEBAIHByaXZhdGU6CiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
I2VuZGlmIC8vIExheWVyVGV4dHVyZVVwZGF0ZXJfaAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9t
aXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZkOTZmOTIzYjYwNzAwM2Zl
MzQ5MTA5ZmE5OGIxNzJjZGIwZjE0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjY4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLQotI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiRXh0
ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29s
b3IuaCIKLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBGbG9hdFBvaW50M0QgRWRnZTsKLQotUGFz
c093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUsIEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikKLXsKLSAgICBpZiAoIWxheWVyUmVuZGVyZXIg
fHwgdGlsZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVtKGxheWVyUmVuZGVyZXIsIHRpbGVT
aXplLCBib3JkZXIpKTsKLX0KLQotTGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hyb21p
dW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQotICAgIDogbV90ZXh0dXJlRm9ybWF0
KFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0dXJlRm9ybWF0KGxheWVyUmVuZGVyZXItPmNvbnRleHQo
KSkpCi0gICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKLSAgICAsIG1fdGV4dHVyZU9yaWVudGF0aW9u
KExheWVyVGV4dHVyZVVwZGF0ZXI6OkludmFsaWRPcmllbnRhdGlvbikKLSAgICAsIG1fc2FtcGxl
ZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEludmFs
aWQpCi0gICAgLCBtX3RpbGluZ0RhdGEobWF4KHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXplLmhl
aWdodCgpKSwgMCwgMCwgYm9yZGVyID09IEhhc0JvcmRlclRleGVscykKLSAgICAsIG1fbGF5ZXJS
ZW5kZXJlcihsYXllclJlbmRlcmVyKQotewotICAgIHNldFRpbGVTaXplKHRpbGVTaXplKTsKLX0K
LQotTGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxlckNocm9taXVtKCkKLXsKLSAgICByZXNl
dCgpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRCogTGF5ZXJUaWxlckNocm9taXVtOjpsYXllclJl
bmRlcmVyQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7Ci0g
ICAgcmV0dXJuIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOwotfQotCi12b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAo
bV90aWxlU2l6ZSA9PSBzaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXNldCgpOwotCi0g
ICAgbV90aWxlU2l6ZSA9IHNpemU7Ci0gICAgbV90aWxpbmdEYXRhLnNldE1heFRleHR1cmVTaXpl
KG1heChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLX0KLQotTWFuYWdlZFRleHR1cmUq
IExheWVyVGlsZXJDaHJvbWl1bTo6Z2V0U2luZ2xlVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fdGls
aW5nRGF0YS5udW1UaWxlcygpICE9IDEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVGlsZSog
dGlsZSA9IHRpbGVBdCgwLCAwKTsKLSAgICByZXR1cm4gdGlsZSA/IHRpbGUtPnRleHR1cmUoKSA6
IDA7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpyZXNldCgpCi17Ci0gICAgbV90aWxl
cy5jbGVhcigpOwotICAgIG1fdW51c2VkVGlsZXMuY2xlYXIoKTsKLSAgICBtX3RpbGluZ0RhdGEu
c2V0VG90YWxTaXplKDAsIDApOwotICAgIG1fcGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIG1f
dXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLX0KLQotTGF5ZXJUaWxlckNocm9taXVtOjpUaWxlKiBM
YXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQotewotICAgIEFTU0VS
VCghdGlsZUF0KGksIGopKTsKLQotICAgIFJlZlB0cjxUaWxlPiB0aWxlOwotICAgIGlmIChtX3Vu
dXNlZFRpbGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgdGlsZSA9IG1fdW51c2VkVGlsZXMubGFz
dCgpLnJlbGVhc2UoKTsKLSAgICAgICAgbV91bnVzZWRUaWxlcy5yZW1vdmVMYXN0KCk7Ci0gICAg
ICAgIEFTU0VSVCh0aWxlLT5yZWZDb3VudCgpID09IDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1RleHR1
cmVNYW5hZ2VyKCk7Ci0gICAgICAgIHRpbGUgPSBhZG9wdFJlZihuZXcgVGlsZShNYW5hZ2VkVGV4
dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7Ci0gICAgfQotICAgIG1fdGlsZXMuYWRkKG1ha2VfcGFp
cihpLCBqKSwgdGlsZSk7Ci0KLSAgICB0aWxlLT5tb3ZlVG8oaSwgaik7Ci0gICAgdGlsZS0+bV9k
aXJ0eUxheWVyUmVjdCA9IHRpbGVMYXllclJlY3QodGlsZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4g
dGlsZS5nZXQoKTsKLX0KLQotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmludmFsaWRhdGVUaWxl
cyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBpZiAoIW1fdGlsZXMuc2l6ZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8VGlsZU1hcEtleT4gcmVtb3ZlS2V5czsK
LSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ZXIg
IT0gbV90aWxlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIFRpbGUqIHRpbGUgPSBpdGVyLT5z
ZWNvbmQuZ2V0KCk7Ci0gICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlQ29udGVudFJlY3Qo
dGlsZSk7Ci0gICAgICAgIGlmICh0aWxlUmVjdC5pbnRlcnNlY3RzKGNvbnRlbnRSZWN0KSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZW1vdmVLZXlzLmFwcGVuZChpdGVyLT5maXJz
dCk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVLZXlzLnNpemUo
KTsgKytpKQotICAgICAgICBtX3VudXNlZFRpbGVzLmFwcGVuZChtX3RpbGVzLnRha2UocmVtb3Zl
S2V5c1tpXSkpOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJlY3RUb1Rp
bGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQmIGxlZnQsIGludCYgdG9w
LCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKLXsKLSAgICBjb25zdCBJbnRSZWN0IGxh
eWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotCi0gICAgbGVm
dCA9IG1fdGlsaW5nRGF0YS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC54KCkpOwot
ICAgIHRvcCA9IG1fdGlsaW5nRGF0YS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC55
KCkpOwotICAgIHJpZ2h0ID0gbV90aWxpbmdEYXRhLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQobGF5
ZXJSZWN0Lm1heFgoKSAtIDEpOwotICAgIGJvdHRvbSA9IG1fdGlsaW5nRGF0YS50aWxlWUluZGV4
RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC5tYXhZKCkgLSAxKTsKLX0KLQotSW50UmVjdCBMYXllclRp
bGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9zKGNvbnRlbnRSZWN0LngoKSAtIG1fbGF5
ZXJQb3NpdGlvbi54KCksIGNvbnRlbnRSZWN0LnkoKSAtIG1fbGF5ZXJQb3NpdGlvbi55KCkpOwot
ICAgIEludFJlY3QgbGF5ZXJSZWN0KHBvcywgY29udGVudFJlY3Quc2l6ZSgpKTsKLQotICAgIC8v
IENsaXAgdG8gdGhlIHBvc2l0aW9uLgotICAgIGlmIChwb3MueCgpIDwgMCB8fCBwb3MueSgpIDwg
MCkKLSAgICAgICAgbGF5ZXJSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZShj
b250ZW50UmVjdC53aWR0aCgpICsgcG9zLngoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkgKyBwb3Mu
eSgpKSk7Ci0gICAgcmV0dXJuIGxheWVyUmVjdDsKLX0KLQotSW50UmVjdCBMYXllclRpbGVyQ2hy
b21pdW06OmxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBj
b25zdAotewotICAgIEludFJlY3QgY29udGVudFJlY3QgPSBsYXllclJlY3Q7Ci0gICAgY29udGVu
dFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKLSAg
ICByZXR1cm4gY29udGVudFJlY3Q7Ci19Ci0KLUxheWVyVGlsZXJDaHJvbWl1bTo6VGlsZSogTGF5
ZXJUaWxlckNocm9taXVtOjp0aWxlQXQoaW50IGksIGludCBqKSBjb25zdAotewotICAgIFRpbGUq
IHRpbGUgPSBtX3RpbGVzLmdldChtYWtlX3BhaXIoaSwgaikpLmdldCgpOwotICAgIEFTU0VSVCgh
dGlsZSB8fCB0aWxlLT5yZWZDb3VudCgpID09IDEpOwotICAgIHJldHVybiB0aWxlOwotfQotCi1J
bnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUNvbnRlbnRSZWN0KGNvbnN0IFRpbGUqIHRp
bGUpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHRpbGVMYXllclJlY3QodGls
ZSk7Ci0gICAgY29udGVudFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9z
aXRpb24ueSgpKTsKLSAgICByZXR1cm4gY29udGVudFJlY3Q7Ci19Ci0KLUludFJlY3QgTGF5ZXJU
aWxlckNocm9taXVtOjp0aWxlTGF5ZXJSZWN0KGNvbnN0IFRpbGUqIHRpbGUpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgaW50IGluZGV4ID0gbV90aWxpbmdEYXRhLnRpbGVJbmRleCh0aWxlLT5pKCksIHRp
bGUtPmooKSk7Ci0gICAgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5k
c1dpdGhCb3JkZXIoaW5kZXgpOwotICAgIGxheWVyUmVjdC5zZXRTaXplKG1fdGlsZVNpemUpOwot
ICAgIHJldHVybiBsYXllclJlY3Q7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjppbnZh
bGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBpZiAoY29udGVu
dFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
cm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwotCi0gICAgLy8gRGlydHkgcmVjdHMgYXJl
IGFsd2F5cyBpbiBsYXllciBzcGFjZSwgYXMgdGhlIGxheWVyIGNvdWxkIGJlIHJlcG9zaXRpb25l
ZAotICAgIC8vIGFmdGVyIGludmFsaWRhdGlvbi4KLSAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVj
dCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotCi0gICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVu
dFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgZm9yIChpbnQgaiA9IHRvcDsg
aiA8PSBib3R0b207ICsraikgewotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdo
dDsgKytpKSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAg
ICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
SW50UmVjdCBib3VuZCA9IHRpbGVMYXllclJlY3QodGlsZSk7Ci0gICAgICAgICAgICBib3VuZC5p
bnRlcnNlY3QobGF5ZXJSZWN0KTsKLSAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3Qu
dW5pdGUoYm91bmQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6aW52YWxpZGF0ZUVudGlyZUxheWVyKCkKLXsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlcy5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQtPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAg
ICAgIG1fdW51c2VkVGlsZXMuYXBwZW5kKGl0ZXItPnNlY29uZC5yZWxlYXNlKCkpOwotICAgIH0K
LSAgICBtX3RpbGVzLmNsZWFyKCk7Ci0KLSAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAs
IDApOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cHJvdGVjdFRpbGVUZXh0dXJlcyhj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OwotICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKLQotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2op
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAg
ICAgICAgVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSB8
fCAhdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZVNpemUsIG1fdGV4dHVyZUZvcm1hdCkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHRpbGUtPnRleHR1cmUo
KS0+cmVzZXJ2ZShtX3RpbGVTaXplLCBtX3RleHR1cmVGb3JtYXQpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcikK
LXsKLSAgICBtX3NraXBzRHJhdyA9IGZhbHNlOwotCi0gICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1w
dHkoKSkgewotICAgICAgICBtX3VwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBJbnZhbGlkYXRlIG9sZCB0aWxlcyB0aGF0IHdlcmUgcHJldmlv
dXNseSB1c2VkIGJ1dCBhcmVuJ3QgaW4gdXNlIHRoaXMKLSAgICAvLyBmcmFtZSBzbyB0aGF0IHRo
ZXkgY2FuIGdldCByZXVzZWQgZm9yIG5ldyB0aWxlcy4KLSAgICBpbnZhbGlkYXRlVGlsZXMoY29u
dGVudFJlY3QpOwotICAgIGdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KLSAgICBp
ZiAoIW51bVRpbGVzKCkpIHsKLSAgICAgICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIHRpbGVzIGFzIG5lZWRlZCwgZXhw
YW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAotICAgIC8vIHRoZSBkaXJ0eSByZWdp
b25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KLSAgICBJbnRSZWN0IGRpcnR5TGF5ZXJSZWN0Owot
ICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgY29udGVudFJlY3RUb1RpbGVJ
bmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIGZvciAo
aW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGxl
ZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAgICAgICAgVGlsZSogdGlsZSA9IHRpbGVBdChp
LCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSkKLSAgICAgICAgICAgICAgICB0aWxlID0gY3Jl
YXRlVGlsZShpLCBqKTsKLQotICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFs
aWQobV90aWxlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KSkKLSAgICAgICAgICAgICAgICB0aWxlLT5t
X2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVjdCh0aWxlKTsKLQotICAgICAgICAgICAgaWYg
KCF0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KSkg
ewotICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBy
ZXNldCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZGlydHlMYXllclJlY3QudW5pdGUodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEdWUgdG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVj
dCBpcyBleHRlbmRlZCB0byB0aWxlIGJvdW5kYXJpZXMsIGl0Ci0gICAgLy8gbWF5IGVuZCB1cCBv
dmVybGFwcGluZyBtb3JlIHRpbGVzIHRoYW4gdGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVj
b3JkCi0gICAgLy8gdGhhdCBvcmlnaW5hbCByZWN0IHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRp
bGVzIHRoYW4gbmVjZXNzYXJ5LgotICAgIG1fdXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0OwotCi0g
ICAgbV9wYWludFJlY3QgPSBsYXllclJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsK
LSAgICBpZiAoZGlydHlMYXllclJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB0ZXh0dXJlVXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVTaXpl
LCBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkpOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6dXBkYXRlUmVjdChMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcikKLXsK
LSAgICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9m
Ziwgd2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVw
ZGF0ZS4KLSAgICBpZiAoIW1fdGlsaW5nRGF0YS50b3RhbFNpemVYKCkgfHwgIW1fdGlsaW5nRGF0
YS50b3RhbFNpemVZKCkgfHwgbV91cGRhdGVSZWN0LmlzRW1wdHkoKSB8fCAhbnVtVGlsZXMoKSB8
fCBtX3NraXBzRHJhdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgIG1fdGV4dHVyZU9yaWVudGF0
aW9uID0gdGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0aW9uKCk7Ci0gICAgbV9zYW1wbGVkVGV4ZWxG
b3JtYXQgPSB0ZXh0dXJlVXBkYXRlci0+c2FtcGxlZFRleGVsRm9ybWF0KG1fdGV4dHVyZUZvcm1h
dCk7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIGNvbnRlbnRSZWN0
VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0g
ICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewotICAgICAgICBmb3IgKGlu
dCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0g
dGlsZUF0KGksIGopOwotICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIHRp
bGUgPSBjcmVhdGVUaWxlKGksIGopOwotICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUtPmRpcnR5
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIENhbGN1bGF0
ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCi0gICAgICAgICAgICBJbnRSZWN0
IHNvdXJjZVJlY3QgPSB0aWxlQ29udGVudFJlY3QodGlsZSk7Ci0gICAgICAgICAgICBjb25zdCBJ
bnRQb2ludCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICBzb3Vy
Y2VSZWN0LmludGVyc2VjdChsYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXll
clJlY3QpKTsKLSAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGlu
ZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhh
dCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCi0gICAgICAgICAgICBz
b3VyY2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7Ci0gICAgICAgICAgICBpZiAoc291cmNl
UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IEFTU0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7Ci0KLSAgICAgICAgICAgIC8v
IENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KLSAgICAgICAg
ICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3IueCgp
LCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7Ci0gICAg
ICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0go
KTsKLQotICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMg
dGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KLSAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0
KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFp
bnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpIDwgMCkKLSAgICAg
ICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSA8IDAp
Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54
KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAg
ICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0
LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgQ1JBU0go
KTsKLQotICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250ZXh0KTsK
LSAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxpbmdEYXRhLmJvcmRlclRl
eGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpO
RUFSRVNUOwotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIGZpbHRlcikpOwotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOwotICAgICAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwKSk7Ci0KLSAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyLT51cGRhdGVUZXh0dXJlUmVjdCh0
aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKLSAgICAgICAgICAgIHRpbGUt
PmNsZWFyRGlydHkoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBMYXllclRpbGVyQ2hy
b21pdW06OnNldExheWVyUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIGxheWVyUG9zaXRpb24pCi17
Ci0gICAgbV9sYXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKLX0KLQotdm9pZCBMYXllclRp
bGVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
aWYgKG1fc2tpcHNEcmF3IHx8ICFtX3RpbGVzLnNpemUoKSB8fCBjb250ZW50UmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIGRlZmluZWQoT1NfQ0hST01FT1MpCi0gICAgLy8g
RklYTUU6IERpc2FibGUgYW50aS1hbGlhc2luZyB0byB3b3JrYXJvdW5kIGJyb2tlbiBkcml2ZXIu
Ci0gICAgYm9vbCB1c2VBQSA9IGZhbHNlOwotI2Vsc2UKLSAgICAvLyBVc2UgYW50aS1hbGlhc2lu
ZyBwcm9ncmFtcyB3aGVuIGJvcmRlciB0ZXhlbHMgYXJlIHByZXNldCBhbmQgdHJhbnNmb3JtCi0g
ICAgLy8gaXMgbm90IGFuIGludGVnZXIgdHJhbnNsYXRpb24uCi0gICAgYm9vbCB1c2VBQSA9ICht
X3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkgJiYgIWdsb2JhbFRyYW5zZm9ybS5pc0ludGVnZXJU
cmFuc2xhdGlvbigpKTsKLSNlbmRpZgotCi0gICAgc3dpdGNoIChtX3NhbXBsZWRUZXhlbEZvcm1h
dCkgewotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdC
QToKLSAgICAgICAgaWYgKHVzZUFBKQotICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0
LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFt
QUEoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1BQSgpLT5mcmFnbWVudFNoYWRlcigp
LmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclBy
b2dyYW1BQSgpLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9w
YWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtKCksIC0xLCAtMSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0
QkdSQToKLSAgICAgICAgaWYgKHVzZUFBKQotICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRS
ZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9n
cmFtU3dpenpsZUFBKCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCkt
PmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBsYXllclJl
bmRlcmVyKCktPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VM
b2NhdGlvbigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRS
ZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9n
cmFtU3dpenpsZSgpLCAtMSwgLTEpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNo
cm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCi17
Ci0gICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0
LgotICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50
UmVjdCk7Ci0gICAgSW50U2l6ZSByZWN0U2l6ZSA9IEludFNpemUobGF5ZXJSZWN0Lm1heFgoKSwg
bGF5ZXJSZWN0Lm1heFkoKSk7Ci0KLSAgICBJbnRTaXplIG9sZExheWVyU2l6ZShtX3RpbGluZ0Rh
dGEudG90YWxTaXplWCgpLCBtX3RpbGluZ0RhdGEudG90YWxTaXplWSgpKTsKLSAgICBJbnRTaXpl
IG5ld1NpemUgPSByZWN0U2l6ZS5leHBhbmRlZFRvKG9sZExheWVyU2l6ZSk7Ci0gICAgbV90aWxp
bmdEYXRhLnNldFRvdGFsU2l6ZShuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkpOwot
fQotCi1zdGF0aWMgYm9vbCBpc0NDVyhjb25zdCBGbG9hdFF1YWQmIHF1YWQpCi17Ci0gICAgRmxv
YXRQb2ludCB2MSA9IEZsb2F0UG9pbnQocXVhZC5wMigpLngoKSAtIHF1YWQucDEoKS54KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5wMigpLnkoKSAtIHF1YWQucDEoKS55
KCkpOwotICAgIEZsb2F0UG9pbnQgdjIgPSBGbG9hdFBvaW50KHF1YWQucDMoKS54KCkgLSBxdWFk
LnAyKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWQucDMoKS55KCkg
LSBxdWFkLnAyKCkueSgpKTsKLSAgICByZXR1cm4gKHYxLngoKSAqIHYyLnkoKSAtIHYxLnkoKSAq
IHYyLngoKSkgPCAwOwotfQotCi1zdGF0aWMgRWRnZSBjb21wdXRlRWRnZShjb25zdCBGbG9hdFBv
aW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBxLCBmbG9hdCBzaWduKQotewotICAgIEFTU0VSVChw
ICE9IHEpOwotCi0gICAgRmxvYXRQb2ludCB0YW5nZW50KHAueSgpIC0gcS55KCksIHEueCgpIC0g
cC54KCkpOwotICAgIGZsb2F0IHNjYWxlID0gc2lnbiAvIHRhbmdlbnQubGVuZ3RoKCk7Ci0gICAg
ZmxvYXQgY3Jvc3MyID0gcC54KCkgKiBxLnkoKSAtIHEueCgpICogcC55KCk7Ci0KLSAgICByZXR1
cm4gRWRnZSh0YW5nZW50LngoKSAqIHNjYWxlLAotICAgICAgICAgICAgICAgIHRhbmdlbnQueSgp
ICogc2NhbGUsCi0gICAgICAgICAgICAgICAgY3Jvc3MyICogc2NhbGUpOwotfQotCi1zdGF0aWMg
RmxvYXRQb2ludCBpbnRlcnNlY3QoY29uc3QgRWRnZSYgYSwgY29uc3QgRWRnZSYgYikKLXsKLSAg
ICByZXR1cm4gRmxvYXRQb2ludCgKLSAgICAgICAgKGEueSgpICogYi56KCkgLSBiLnkoKSAqIGEu
eigpKSAvIChhLngoKSAqIGIueSgpIC0gYi54KCkgKiBhLnkoKSksCi0gICAgICAgIChhLngoKSAq
IGIueigpIC0gYi54KCkgKiBhLnooKSkgLyAoYi54KCkgKiBhLnkoKSAtIGEueCgpICogYi55KCkp
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJh
d1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBp
bnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50IGVkZ2VMb2NhdGlvbikKLXsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgobGF5ZXJSZW5kZXJlcigpLT53aW5kb3dNYXRy
aXgoKSAqIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpICogZ2xvYmFsVHJhbnNm
b3JtKTsKLQotICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgWiBjb21wb25lbnQuCi0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbWF0cml4WFlXID0KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXgobWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIDAsIG1hdHJpeC5tMTQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIDAsIG1hdHJp
eC5tMjQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRy
aXgubTMyKCksIDEsIG1hdHJpeC5tMzQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIDAsIG1hdHJpeC5tNDQoKSk7Ci0KLSAgICAvLyBE
b24ndCBkcmF3IGFueSB0aWxlcyB3aGVuIG1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZS4KLSAgICBp
ZiAoIW1hdHJpeFhZVy5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZSA9IG1hdHJpeFhZVy5pbnZlcnNlKCk7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Ci0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFj
dGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0KLSAgICAvLyBNYXAg
Y29udGVudCByZWN0YW5nbGUgdG8gZGV2aWNlIHNwYWNlLgotICAgIEZsb2F0UXVhZCBkZXZpY2VR
dWFkID0gbWF0cml4Lm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0KSk7Ci0KLSAgICAvLyBD
b3VudGVyLWNsb2Nrd2lzZT8KLSAgICBmbG9hdCBzaWduID0gaXNDQ1coZGV2aWNlUXVhZCkgPyAt
MSA6IDE7Ci0KLSAgICAvLyBDb21wdXRlIG91dGVyIGVkZ2VzLgotICAgIEVkZ2UgbGVmdEVkZ2Ug
PSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnA0KCksIGRldmljZVF1YWQucDEoKSwgc2lnbik7Ci0g
ICAgRWRnZSByaWdodEVkZ2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnAyKCksIGRldmljZVF1
YWQucDMoKSwgc2lnbik7Ci0gICAgRWRnZSB0b3BFZGdlID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVh
ZC5wMSgpLCBkZXZpY2VRdWFkLnAyKCksIHNpZ24pOwotICAgIEVkZ2UgYm90dG9tRWRnZSA9IGNv
bXB1dGVFZGdlKGRldmljZVF1YWQucDMoKSwgZGV2aWNlUXVhZC5wNCgpLCBzaWduKTsKLQotICAg
IGlmIChlZGdlTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgLy8gTW92ZSBvdXRlciBlZGdlcyB0
byBlbnN1cmUgdGhhdCBhbGwgcGFydGlhbGx5IGNvdmVyZWQgcGl4ZWxzIGFyZQotICAgICAgICAv
LyBwcm9jZXNzZWQuCi0gICAgICAgIGxlZnRFZGdlLm1vdmUoMCwgMCwgMC41Zik7Ci0gICAgICAg
IHJpZ2h0RWRnZS5tb3ZlKDAsIDAsIDAuNWYpOwotICAgICAgICB0b3BFZGdlLm1vdmUoMCwgMCwg
MC41Zik7Ci0gICAgICAgIGJvdHRvbUVkZ2UubW92ZSgwLCAwLCAwLjVmKTsKLQotICAgICAgICBm
bG9hdCBlZGdlWzEyXTsKLSAgICAgICAgZWRnZVswXSA9IGxlZnRFZGdlLngoKTsKLSAgICAgICAg
ZWRnZVsxXSA9IGxlZnRFZGdlLnkoKTsKLSAgICAgICAgZWRnZVsyXSA9IGxlZnRFZGdlLnooKTsK
LSAgICAgICAgZWRnZVszXSA9IHRvcEVkZ2UueCgpOwotICAgICAgICBlZGdlWzRdID0gdG9wRWRn
ZS55KCk7Ci0gICAgICAgIGVkZ2VbNV0gPSB0b3BFZGdlLnooKTsKLSAgICAgICAgZWRnZVs2XSA9
IHJpZ2h0RWRnZS54KCk7Ci0gICAgICAgIGVkZ2VbN10gPSByaWdodEVkZ2UueSgpOwotICAgICAg
ICBlZGdlWzhdID0gcmlnaHRFZGdlLnooKTsKLSAgICAgICAgZWRnZVs5XSA9IGJvdHRvbUVkZ2Uu
eCgpOwotICAgICAgICBlZGdlWzEwXSA9IGJvdHRvbUVkZ2UueSgpOwotICAgICAgICBlZGdlWzEx
XSA9IGJvdHRvbUVkZ2UueigpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTNmdihlZGdlTG9jYXRpb24sIGVkZ2UsIDQpKTsKLSAgICB9Ci0KLSAgICBFZGdlIHByZXZFZGdl
WSA9IHRvcEVkZ2U7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIGNv
bnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29u
dGVudFJlY3QpOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAg
ICAgICAgRWRnZSBwcmV2RWRnZVggPSBsZWZ0RWRnZTsKLQotICAgICAgICBFZGdlIGVkZ2VZID0g
Ym90dG9tRWRnZTsKLSAgICAgICAgaWYgKGogPCAobV90aWxpbmdEYXRhLm51bVRpbGVzWSgpIC0g
MSkpIHsKLSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB1bmlvblJlY3QobV90aWxpbmdE
YXRhLnRpbGVCb3VuZHMobV90aWxpbmdEYXRhLnRpbGVJbmRleCgwLCBqKSksIG1fdGlsaW5nRGF0
YS50aWxlQm91bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5kZXgobV90aWxpbmdEYXRhLm51bVRpbGVz
WCgpIC0gMSwgaikpKTsKLSAgICAgICAgICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3Qp
OwotCi0gICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHJvd3MuCi0gICAgICAgICAgICBpZiAodGls
ZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQb3NpdGlvbi55KCkp
OwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3Qu
bWF4WSgpKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QueCgpLCB0aWxlUmVj
dC5tYXhZKCkpOwotCi0gICAgICAgICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4K
LSAgICAgICAgICAgIHAxID0gbWF0cml4Lm1hcFBvaW50KHAxKTsKLSAgICAgICAgICAgIHAyID0g
bWF0cml4Lm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgLy8gQ29tcHV0ZSBob3Jpem9udGFs
IGVkZ2UuCi0gICAgICAgICAgICBlZGdlWSA9IGNvbXB1dGVFZGdlKHAxLCBwMiwgc2lnbik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7
Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAgICAgICAgaWYg
KCF0aWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBBU1NFUlQo
dGlsZS0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOwotCi0gICAgICAgICAgICB0aWxlLT50ZXh0
dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRleHQpOwotCi0gICAgICAgICAgICAvLyBEb24ndCB1c2Ug
dGlsZUNvbnRlbnRSZWN0IGhlcmUsIGFzIHRoYXQgY29udGFpbnMgdGhlIGZ1bGwKLSAgICAgICAg
ICAgIC8vIHJlY3Qgd2l0aCBib3JkZXIgdGV4ZWxzIHdoaWNoIHNob3VsZG4ndCBiZSBkcmF3bi4K
LSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3RpbGluZ0RhdGEudGlsZUJvdW5kcyht
X3RpbGluZ0RhdGEudGlsZUluZGV4KHRpbGUtPmkoKSwgdGlsZS0+aigpKSk7Ci0gICAgICAgICAg
ICBJbnRSZWN0IGRpc3BsYXlSZWN0ID0gdGlsZVJlY3Q7Ci0gICAgICAgICAgICB0aWxlUmVjdC5p
bnRlcnNlY3QobGF5ZXJSZWN0KTsKLQotICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiBob3cg
dGhlIHRvcCBsZWZ0IGhhcyBtb3ZlZCwgc28gdGhlIHRleHR1cmUgY2FuIGJlCi0gICAgICAgICAg
ICAvLyBvZmZzZXQgdGhlIHNhbWUgYW1vdW50LgotICAgICAgICAgICAgSW50U2l6ZSBkaXNwbGF5
T2Zmc2V0ID0gdGlsZVJlY3QubWluWE1pbllDb3JuZXIoKSAtIGRpc3BsYXlSZWN0Lm1pblhNaW5Z
Q29ybmVyKCk7Ci0KLSAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgdGlsZXMuCi0gICAgICAgICAg
ICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQb3Np
dGlvbi55KCkpOwotCi0gICAgICAgICAgICBGbG9hdFJlY3QgY2xhbXBSZWN0KHRpbGVSZWN0KTsK
LSAgICAgICAgICAgIC8vIENsYW1wIHRleHR1cmUgY29vcmRpbmF0ZXMgdG8gYXZvaWQgc2FtcGxp
bmcgb3V0c2lkZSB0aGUgbGF5ZXIKLSAgICAgICAgICAgIC8vIGJ5IGRlZmxhdGluZyB0aGUgdGls
ZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhlbAotICAgICAgICAgICAgLy8gbWlu
dXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxheWVycy4gVGhlIHJlc3VsdGluZyBjbGFtcCByZWdp
b24KLSAgICAgICAgICAgIC8vIGlzIG1hcHBlZCB0byB0aGUgdW5pdCBzcXVhcmUgYnkgdGhlIHZl
cnRleCBzaGFkZXIgYW5kIG1hcHBlZAotICAgICAgICAgICAgLy8gYmFjayB0byBub3JtYWxpemVk
IHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50IHNoYWRlcgotICAgICAgICAgICAg
Ly8gYWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAwLTEgcmFuZ2UuCi0gICAgICAgICAgICBjb25zdCBm
bG9hdCBlcHNpbG9uID0gMSAvIDEwMjQuMGY7Ci0gICAgICAgICAgICBmbG9hdCBjbGFtcFggPSBt
aW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVwc2lsb24pOwotICAgICAgICAgICAg
ZmxvYXQgY2xhbXBZID0gbWluKDAuNSwgY2xhbXBSZWN0LmhlaWdodCgpIC8gMi4wIC0gZXBzaWxv
bik7Ci0gICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVgoLWNsYW1wWCk7Ci0gICAgICAgICAg
ICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7Ci0gICAgICAgICAgICBGbG9hdFNpemUgY2xh
bXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1pbllDb3JuZXIoKSAtIEZsb2F0UmVjdCh0aWxlUmVj
dCkubWluWE1pbllDb3JuZXIoKTsKLQotICAgICAgICAgICAgRmxvYXRQb2ludCB0ZXhPZmZzZXQg
PSBtX3RpbGluZ0RhdGEudGV4dHVyZU9mZnNldCh0aWxlLT5pKCksIHRpbGUtPmooKSkgKyBjbGFt
cE9mZnNldCArIEZsb2F0U2l6ZShkaXNwbGF5T2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IHRp
bGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVTaXplLndpZHRoKCkpOwotICAgICAg
ICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVTaXplLmhl
aWdodCgpKTsKLQotICAgICAgICAgICAgLy8gTWFwIGNsYW1waW5nIHJlY3RhbmdsZSB0byB1bml0
IHNxdWFyZS4KLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVggPSAtY2xhbXBS
ZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4
VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOwotICAgICAg
ICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1wUmVj
dC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGlsZVJlY3Qu
aGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCB0byBu
b3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBmbG9hdCBmcmFnbWVu
dFRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAg
ZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zmc2V0LnkoKSAvIHRpbGVIZWlnaHQ7
Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgp
IC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBjbGFt
cFJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OwotCi0gICAgICAgICAgICAvLyBPcGVuR0wgY29v
cmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgotICAgICAgICAgICAgLy8gSWYgdGlsZSB0ZXh0
dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMu
Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlT3JpZW50YXRpb24gPT0gTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnRUZXhU
cmFuc2xhdGVZID0gMS4wIC0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgICAg
IGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEVkZ2UgZWRnZVggPSByaWdodEVkZ2U7Ci0gICAgICAgICAgICBpZiAoaSA8IChtX3RpbGluZ0Rh
dGEubnVtVGlsZXNYKCkgLSAxKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGls
ZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQg
cDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0gICAgICAgICAgICAgICAg
Ly8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCi0gICAgICAgICAgICAgICAgcDEgPSBtYXRy
aXgubWFwUG9pbnQocDEpOwotICAgICAgICAgICAgICAgIHAyID0gbWF0cml4Lm1hcFBvaW50KHAy
KTsKLQotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVydGljYWwgZWRnZS4KLSAgICAgICAg
ICAgICAgICBlZGdlWCA9IGNvbXB1dGVFZGdlKHAxLCBwMiwgc2lnbik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2UgcXVhZC4KLSAgICAgICAgICAg
IEZsb2F0UXVhZCBkZXZpY2VRdWFkKGludGVyc2VjdChlZGdlWSwgcHJldkVkZ2VYKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdChwcmV2RWRnZVgsIHByZXZFZGdl
WSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QocHJldkVkZ2VZ
LCBlZGdlWCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3QoZWRn
ZVgsIGVkZ2VZKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVyIHNwYWNlLgot
ICAgICAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBpbnZlcnNlLm1hcFF1YWQoZGV2aWNlUXVhZCk7
Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVjdC4KLSAgICAgICAgICAgIHF1
YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYgLyB0aWxlUmVjdC5oZWlnaHQo
KSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uID09IC0x
KSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBzaGFkZXIgdHJhbnNmb3JtIHRv
IHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAgICAgICAgIC8vIHRoaXMgd2hpbGUg
c3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwotICAgICAgICAgICAgICAgIC8vIGZy
YWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBub24tbmVnYXRpdmUK
LSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFuc2Zvcm1lZCBpbiBhIHdheSB0
aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAgIC8vIHNhbXBsaW5nIG91dHNpZGUg
dGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWCAqPSBmcmFnbWVudFRl
eFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2FsZVkgKj0gZnJhZ21lbnRUZXhT
Y2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCAqPSBmcmFnbWVudFRl
eFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICo9IGZyYWdtZW50
VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVggKz0gZnJhZ21l
bnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKz0g
ZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFnbWVudFRleFRyYW5zZm9ybUxv
Y2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50VGV4VHJhbnNsYXRlWSwgZnJh
Z21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7Ci0KLSAgICAgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudmVydGV4
VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNsYXRlWCwgdmVydGV4VGV4VHJh
bnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2FsZVkpKTsKLQotICAgICAgICAg
ICAgZmxvYXQgcG9pbnRbOF07Ci0gICAgICAgICAgICBwb2ludFswXSA9IHF1YWQucDEoKS54KCk7
Ci0gICAgICAgICAgICBwb2ludFsxXSA9IHF1YWQucDEoKS55KCk7Ci0gICAgICAgICAgICBwb2lu
dFsyXSA9IHF1YWQucDIoKS54KCk7Ci0gICAgICAgICAgICBwb2ludFszXSA9IHF1YWQucDIoKS55
KCk7Ci0gICAgICAgICAgICBwb2ludFs0XSA9IHF1YWQucDMoKS54KCk7Ci0gICAgICAgICAgICBw
b2ludFs1XSA9IHF1YWQucDMoKS55KCk7Ci0gICAgICAgICAgICBwb2ludFs2XSA9IHF1YWQucDQo
KS54KCk7Ci0gICAgICAgICAgICBwb2ludFs3XSA9IHF1YWQucDQoKS55KCk7Ci0gICAgICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTJmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS5wb2ludExvY2F0aW9uKCksIHBvaW50LCA0KSk7Ci0KLSAgICAgICAgICAgIExheWVyQ2hyb21p
dW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksIGdsb2JhbFRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNp
dHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0t
PnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2Nh
dGlvbigpKTsKLQotICAgICAgICAgICAgcHJldkVkZ2VYID0gZWRnZVg7Ci0gICAgICAgICAgICAv
LyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAgICAgICAgIHByZXZFZGdlWC5zY2FsZSgtMSwgLTEs
IC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByZXZFZGdlWSA9IGVkZ2VZOwotICAgICAgICAv
LyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAgICAgcHJldkVkZ2VZLnNjYWxlKC0xLCAtMSwgLTEp
OwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JiZGU5ZTFkYmYyYjJlNGFhNzFlNWMzMGYyMjAyNDA5
NGYyOGM0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21p
dW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIExh
eWVyVGlsZXJDaHJvbWl1bV9oCi0jZGVmaW5lIExheWVyVGlsZXJDaHJvbWl1bV9oCi0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRh
dGVyLmgiCi0jaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsK
LWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7Ci0KLWNsYXNzIExheWVyVGlsZXJDaHJvbWl1bSB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJUaWxlckNocm9taXVtKTsKLXB1YmxpYzoK
LSAgICBlbnVtIEJvcmRlclRleGVsT3B0aW9uIHsgSGFzQm9yZGVyVGV4ZWxzLCBOb0JvcmRlclRl
eGVscyB9OwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBjcmVh
dGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRl
clRleGVsT3B0aW9uKTsKLQotICAgIH5MYXllclRpbGVyQ2hyb21pdW0oKTsKLQotICAgIC8vIFNl
dCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5IHJlcGFpbnRlZCBkdXJpbmcgdXBkYXRl
KCkuCi0gICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7
Ci0gICAgdm9pZCBpbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKLQotICAgIC8vIFByZXBhcmUgZGF0
YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW5zdGVyc2VjdCB3aXRoIGNvbnRlbnRS
ZWN0LgotICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBMYXllclRleHR1cmVVcGRhdGVyKik7Ci0gICAgLy8gVXBkYXRlIGludmFsaWQgdGV4dHVyZXMg
dGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdCBwcm92aWRlZCBpbiBwcmVwYXJlVG9VcGRh
dGUoKS4KLSAgICB2b2lkIHVwZGF0ZVJlY3QoTGF5ZXJUZXh0dXJlVXBkYXRlciopOwotICAgIC8v
IERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KLSAg
ICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0KLSAgICBpbnQgbnVtVGlsZXMoKSBjb25zdCB7
IHJldHVybiBtX3RpbGluZ0RhdGEubnVtVGlsZXMoKTsgfQotCi0gICAgLy8gU2V0IHBvc2l0aW9u
IG9mIHRoaXMgdGlsZWQgbGF5ZXIgaW4gY29udGVudCBzcGFjZS4KLSAgICB2b2lkIHNldExheWVy
UG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKTsKLSAgICAvLyBDaGFuZ2UgdGhlIHRp
bGUgc2l6ZS4gIFRoaXMgbWF5IGludmFsaWRhdGUgYWxsIHRoZSBleGlzdGluZyB0aWxlcy4KLSAg
ICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpOwotCi0gICAgYm9vbCBza2lw
c0RyYXcoKSBjb25zdCB7IHJldHVybiBtX3NraXBzRHJhdzsgfQotCi0gICAgLy8gUmVzZXJ2ZXMg
YWxsIGV4aXN0aW5nIGFuZCB2YWxpZCB0aWxlIHRleHR1cmVzIHRvIHByb3RlY3QgdGhlbSBmcm9t
IGJlaW5nCi0gICAgLy8gcmVjeWNsZWQgYnkgdGhlIHRleHR1cmUgbWFuYWdlci4KLSAgICB2b2lk
IHByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotCi0gICAg
dHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJH
QkFUZXhBbHBoYT4gUHJvZ3JhbTsKLSAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHN3YXBzIHJl
ZCBhbmQgYmx1ZSBjb21wb25lbnRzIG9mIHRleHR1cmUuCi0gICAgLy8gVXNlZCB3aGVuIHRleHR1
cmUgZm9ybWF0IGRvZXMgbm90IG1hdGNoIG5hdGl2ZSBjb2xvciBmb3JtYXQuCi0gICAgdHlwZWRl
ZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhT
d2l6emxlQWxwaGE+IFByb2dyYW1Td2l6emxlOwotCi0gICAgLy8gU2hhZGVyIHByb2dyYW0gdGhh
dCBwcm9kdWNlcyBhbnRpLWFsaWFzZWQgbGF5ZXIgZWRnZXMuCi0gICAgdHlwZWRlZiBQcm9ncmFt
QmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYUFBPiBQ
cm9ncmFtQUE7Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBG
cmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGFBQT4gUHJvZ3JhbVN3aXp6bGVBQTsKLQot
ICAgIC8vIElmIHRoaXMgdGlsZXIgaGFzIGV4YWN0bHkgb25lIHRpbGUsIHJldHVybiBpdHMgdGV4
dHVyZS4gT3RoZXJ3aXNlLCBudWxsLgotICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRTaW5nbGVUZXh0
dXJlKCk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJUaWxlckNocm9taXVtKExheWVyUmVuZGVyZXJD
aHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7Ci0K
LSAgICBjbGFzcyBUaWxlIDogcHVibGljIFJlZkNvdW50ZWQ8VGlsZT4gewotICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUaWxlKTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFRp
bGUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCksIG1faSgtMSks
IG1faigtMSkgeyB9Ci0KLSAgICAgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVy
biBtX3RleC5nZXQoKTsgfQotCi0gICAgICAgIGJvb2wgZGlydHkoKSBjb25zdCB7IHJldHVybiAh
bV9kaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCk7IH0KLSAgICAgICAgdm9pZCBjbGVhckRpcnR5KCkg
eyBtX2RpcnR5TGF5ZXJSZWN0ID0gSW50UmVjdCgpOyB9Ci0KLSAgICAgICAgaW50IGkoKSBjb25z
dCB7IHJldHVybiBtX2k7IH0KLSAgICAgICAgaW50IGooKSBjb25zdCB7IHJldHVybiBtX2o7IH0K
LSAgICAgICAgdm9pZCBtb3ZlVG8oaW50IGksIGludCBqKSB7IG1faSA9IGk7IG1faiA9IGo7IH0K
LQotICAgICAgICAvLyBMYXllci1zcGFjZSBkaXJ0eSByZWN0YW5nbGUgdGhhdCBuZWVkcyB0byBi
ZSByZXBhaW50ZWQuCi0gICAgICAgIEludFJlY3QgbV9kaXJ0eUxheWVyUmVjdDsKLSAgICBwcml2
YXRlOgotICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4OwotICAgICAgICBpbnQg
bV9pOwotICAgICAgICBpbnQgbV9qOwotICAgIH07Ci0KLSAgICAvLyBEcmF3IGFsbCB0aWxlcyB0
aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgotICAgIHRlbXBsYXRlIDxjbGFzcyBUPgot
ICAgIHZvaWQgZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGludCBm
cmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKTsKLQotICAgIC8v
IEdyb3cgbGF5ZXIgc2l6ZSB0byBjb250YWluIHRoaXMgcmVjdGFuZ2xlLgotICAgIHZvaWQgZ3Jv
d0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKLQotICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJS
ZW5kZXJlcjsgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4dCgp
IGNvbnN0OwotICAgIFRpbGUqIGNyZWF0ZVRpbGUoaW50IGksIGludCBqKTsKLSAgICAvLyBJbnZh
bGlkYXRlIGFueSB0aWxlcyB3aGljaCBkbyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnRS
ZWN0Ci0gICAgdm9pZCBpbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
OwotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgaW50ICZsZWZ0LCBpbnQgJnRvcCwgaW50ICZyaWdo
dCwgaW50ICZib3R0b20pIGNvbnN0OwotICAgIEludFJlY3QgY29udGVudFJlY3RUb0xheWVyUmVj
dChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7Ci0gICAgSW50UmVjdCBsYXllclJl
Y3RUb0NvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkgY29uc3Q7Ci0KLSAgICBU
aWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0OwotICAgIEludFJlY3QgdGlsZUNvbnRlbnRSZWN0
KGNvbnN0IFRpbGUqKSBjb25zdDsKLSAgICBJbnRSZWN0IHRpbGVMYXllclJlY3QoY29uc3QgVGls
ZSopIGNvbnN0OwotCi0gICAgR0MzRGVudW0gbV90ZXh0dXJlRm9ybWF0OwotCi0gICAgSW50U2l6
ZSBtX3RpbGVTaXplOwotICAgIEludFBvaW50IG1fbGF5ZXJQb3NpdGlvbjsKLQotICAgIGJvb2wg
bV9za2lwc0RyYXc7Ci0KLSAgICAvLyBEZWZhdWx0IGhhc2gga2V5IHRyYWl0cyBmb3IgaW50ZWdl
cnMgZGlzYWxsb3cgMCBhbmQgLTEgYXMgYSBrZXksIHNvCi0gICAgLy8gdXNlIGEgY3VzdG9tIGhh
c2ggdHJhaXQgd2hpY2ggZGlzYWxsb3dzIC0xIGFuZCAtMiBpbnN0ZWFkLgotICAgIHR5cGVkZWYg
c3RkOjpwYWlyPGludCwgaW50PiBUaWxlTWFwS2V5OwotICAgIHN0cnVjdCBUaWxlTWFwS2V5VHJh
aXRzIDogSGFzaFRyYWl0czxUaWxlTWFwS2V5PiB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgVGlsZU1hcEtleSBlbXB0eVZh
bHVlKCkgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIoLTEsIC0xKTsgfQotICAgICAgICBzdGF0aWMg
dm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVGlsZU1hcEtleSYgc2xvdCkgeyBzbG90ID0gc3Rk
OjptYWtlX3BhaXIoLTIsIC0yKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShUaWxlTWFwS2V5IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5maXJzdCA9PSAtMiAmJiB2YWx1ZS5z
ZWNvbmQgPT0gLTI7IH0KLSAgICB9OwotICAgIC8vIEZJWE1FOiBUaGUgbWFwcGVkIHZhbHVlIGlu
IFRpbGVNYXAgc2hvdWxkIHJlYWxseSBiZSBhbiBPd25QdHIsIGFzIHRoZQotICAgIC8vIHJlZmNv
dW50IG9mIGEgVGlsZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0aGFuIDEuIEhvd2V2ZXIsIEhhc2hN
YXAKLSAgICAvLyBkb2Vzbid0IGVhc2lseSBzdXBwb3J0IE93blB0ciBhcyBhIHZhbHVlLgotICAg
IHR5cGVkZWYgSGFzaE1hcDxUaWxlTWFwS2V5LCBSZWZQdHI8VGlsZT4sIERlZmF1bHRIYXNoPFRp
bGVNYXBLZXk+OjpIYXNoLCBUaWxlTWFwS2V5VHJhaXRzPiBUaWxlTWFwOwotICAgIFRpbGVNYXAg
bV90aWxlczsKLSAgICAvLyBUaWdodGx5IHBhY2tlZCBzZXQgb2YgdW51c2VkIHRpbGVzLgotICAg
IFZlY3RvcjxSZWZQdHI8VGlsZT4gPiBtX3VudXNlZFRpbGVzOwotCi0gICAgLy8gU3RhdGUgaGVs
ZCBiZXR3ZWVuIHVwZGF0ZSBhbmQgdXBsb2FkLgotICAgIEludFJlY3QgbV9wYWludFJlY3Q7Ci0g
ICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7Ci0KLSAgICBMYXllclRleHR1cmVVcGRhdGVyOjpPcmll
bnRhdGlvbiBtX3RleHR1cmVPcmllbnRhdGlvbjsKLSAgICBMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXQgbV9zYW1wbGVkVGV4ZWxGb3JtYXQ7Ci0gICAgVGlsaW5nRGF0YSBt
X3RpbGluZ0RhdGE7Ci0KLSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJl
cjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NYW5hZ2VkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAppbmRleCBhNjdjMjJlOTAyNWVmODk3YjE3OGY4NjRh
YjMzMjk5NmYzZTNlZTdmLi4zMTBlMTY4NmJkMzVmZmE1ZGNiZjYxNGE3YjRiODczYTg0M2Y3YjQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
YW5hZ2VkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL01hbmFnZWRUZXh0dXJlLmgKQEAgLTYwLDYgKzYwLDggQEAgcHVibGljOgogICAgIHZv
aWQgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2b2lkIGZyYW1lYnVmZmVy
VGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQo
KSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0
IE1hbmFnZWRUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CiAKQEAgLTczLDQgKzc1LDMgQEAgcHJp
dmF0ZToKIH0KIAogI2VuZGlmIC8vIE1hbmFnZWRUZXh0dXJlX2gKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2Y0ZDE1MTkwNDlkOGZjMGYyOTU3ODM0NjUxYzQ1MzFiOGQx
ZmJiYS4uOWE2YzlhODI3NDM0OWQ4NTJlYmFmZTA3MzI4MmZhZDZkZTY1ZWMzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJl
LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgpAQCAtNDcsOSArNDcsMjkgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBVcGRhdGFi
bGVUaWxlIDogcHVibGljIENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShVcGRhdGFibGVUaWxlKTsKK3B1YmxpYzoKKyAgICBVcGRhdGFibGVUaWxlKFBh
c3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpIHsgfQorCisgICAgTWFu
YWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleC5nZXQoKTsgfQorCisgICAgYm9v
bCBkaXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKTsgfQor
ICAgIHZvaWQgY2xlYXJEaXJ0eSgpIHsgbV9kaXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQor
CisgICAgLy8gTGF5ZXItc3BhY2UgZGlydHkgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgcmVw
YWludGVkLgorICAgIEludFJlY3QgbV9kaXJ0eUxheWVyUmVjdDsKK3ByaXZhdGU6CisgICAgT3du
UHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleDsKK307CisKIFRpbGVkTGF5ZXJDaHJvbWl1bTo6VGls
ZWRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBMYXll
ckNocm9taXVtKG93bmVyKQogICAgICwgbV90aWxpbmdPcHRpb24oQXV0b1RpbGUpCisgICAgLCBt
X3RleHR1cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSkKKyAgICAsIG1f
c2tpcHNEcmF3KGZhbHNlKQorICAgICwgbV90ZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6SW52YWxpZE9yaWVudGF0aW9uKQorICAgICwgbV9zYW1wbGVkVGV4ZWxGb3JtYXQo
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0SW52YWxpZCkKIHsKIH0KIApA
QCAtNjQsOCArODQsMTIgQEAgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVGlsZWRMYXllckNocm9t
aXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjbGVh
bnVwUmVzb3VyY2VzKCkKIHsKLSAgICBtX3RpbGVyLmNsZWFyKCk7CiAgICAgTGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcygpOworCisgICAgbV90aWxlci5jbGVhcigpOworICAgIG1fdW51
c2VkVGlsZXMuY2xlYXIoKTsKKyAgICBtX3BhaW50UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3Vw
ZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CiB9CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRM
YXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKQEAgLTEx
Myw3ICsxMzcsNyBAQCBib29sIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29u
c3QKICAgICBpZiAobV90aWxpbmdPcHRpb24gPT0gTmV2ZXJUaWxlICYmIG1fdGlsZXItPm51bVRp
bGVzKCkgPiAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gIW1fdGlsZXIt
PnNraXBzRHJhdygpOworICAgIHJldHVybiAhbV9za2lwc0RyYXc7CiB9CiAKIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKCkKQEAgLTEyMywxNSArMTQ3LDcyIEBA
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKCkKIAogICAgIGNy
ZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKIAotICAgIG1fdGlsZXIgPSBMYXllclRpbGVy
Q2hyb21pdW06OmNyZWF0ZSgKLSAgICAgICAgbGF5ZXJSZW5kZXJlcigpLAorICAgIG1fdGV4dHVy
ZUZvcm1hdCA9IGxheWVyUmVuZGVyZXIoKS0+YmVzdFRleHR1cmVGb3JtYXQoKTsKKyAgICBtX3Rl
eHR1cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRhdGVyKCktPm9yaWVudGF0aW9uKCk7CisgICAg
bV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlcigpLT5zYW1wbGVkVGV4ZWxGb3Jt
YXQobV90ZXh0dXJlRm9ybWF0KTsKKworICAgIG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6
Y3JlYXRlKAogICAgICAgICBJbnRTaXplKGRlZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXpl
KSwKLSAgICAgICAgaXNSb290TGF5ZXIoKSA/IExheWVyVGlsZXJDaHJvbWl1bTo6Tm9Cb3JkZXJU
ZXhlbHMgOiBMYXllclRpbGVyQ2hyb21pdW06Okhhc0JvcmRlclRleGVscyk7CisgICAgICAgIGlz
Um9vdExheWVyKCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVy
VGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogewotICAgIG1fdGlsZXItPnVwZGF0ZVJl
Y3QodGV4dHVyZVVwZGF0ZXIoKSk7CisgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9z
aXRpbmcgdG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVj
b21lIGludmFsaWRhdGVkIG1pZC11cGRhdGUuCisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fdXBk
YXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5j
b250ZXh0KCk7CisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVy
LT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV91cGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGls
ZSkKKyAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9t
LgorICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRS
ZWN0KHRpbGUpOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVj
dC5sb2NhdGlvbigpOworICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+
bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7CisgICAgICAg
ICAgICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3Vu
ZGFyaWVzLCBzbworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vz
bid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgorICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNl
Y3QobV9wYWludFJlY3QpOworICAgICAgICAgICAgaWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBBU1NFUlQodGlsZS0+dGV4
dHVyZSgpLT5pc1Jlc2VydmVkKCkpOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1z
cGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCisgICAgICAgICAgICBJbnRSZWN0IGRlc3RS
ZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkg
LSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5zaXplKCkpOworICAgICAgICAgICAgaWYgKGRlc3RS
ZWN0LngoKSA8IDApCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChk
ZXN0UmVjdC55KCkgPCAwKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAg
IC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0aGlzIHRpbGUncyBkaXJ0eSByZWN0
YW5nbGUuCisgICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChzb3VyY2VSZWN0LngoKSAt
IG1fcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBtX3BhaW50UmVjdC55KCkpOworICAg
ICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LngoKSA8IDApCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgPCAwKQorICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpICsgZGVzdFJlY3Qud2lk
dGgoKSA+IG1fcGFpbnRSZWN0LndpZHRoKCkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+IG1fcGFp
bnRSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAg
IHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCk7CisgICAgICAgICAgICBjb25z
dCBHQzNEaW50IGZpbHRlciA9IG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOworICAgICAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRl
cikpOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01B
R19GSUxURVIsIGZpbHRlcikpOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7CisKKyAgICAgICAg
ICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KHRpbGUtPnRleHR1cmUoKSwg
c291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwor
ICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5n
T3B0aW9uKFRpbGluZ09wdGlvbiB0aWxpbmdPcHRpb24pCkBAIC0xNjksNyArMjUwLDIxIEBAIHZv
aWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXll
cikKIAogICAgIENDVGlsZWRMYXllckltcGwqIHRpbGVkTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1Rp
bGVkTGF5ZXJJbXBsKj4obGF5ZXIpOwogICAgIHRpbGVkTGF5ZXItPnNldFRpbGluZ1RyYW5zZm9y
bSh0aWxpbmdUcmFuc2Zvcm0oKSk7Ci0gICAgdGlsZWRMYXllci0+c2V0VGlsZXIobV90aWxlci5n
ZXQoKSk7CisgICAgdGlsZWRMYXllci0+c2V0U2tpcHNEcmF3KG1fc2tpcHNEcmF3KTsKKyAgICB0
aWxlZExheWVyLT5zZXRUZXh0dXJlT3JpZW50YXRpb24obV90ZXh0dXJlT3JpZW50YXRpb24pOwor
ICAgIHRpbGVkTGF5ZXItPnNldFNhbXBsZWRUZXhlbEZvcm1hdChtX3NhbXBsZWRUZXhlbEZvcm1h
dCk7CisgICAgdGlsZWRMYXllci0+c2V0VGlsaW5nRGF0YSgqbV90aWxlcik7CisKKyAgICBmb3Ig
KENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxl
ci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBpbnQgaSA9IGl0ZXItPmZpcnN0LmZpcnN0OworICAgICAgICBpbnQgaiA9
IGl0ZXItPmZpcnN0LnNlY29uZDsKKyAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRp
Y19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOworCisgICAgICAgIGlm
ICh0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJl
Rm9ybWF0KSkKKyAgICAgICAgICAgIHRpbGVkTGF5ZXItPnN5bmNUZXh0dXJlSWQoaSwgaiwgdGls
ZS0+dGV4dHVyZSgpLT50ZXh0dXJlSWQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRp
bGVkTGF5ZXItPmV2aWN0VGV4dHVyZShpLCBqKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHdy
aXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQpAQCAtMTgyLDcgKzI3NywxNTgg
QEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVy
UHJvcGVydGllcyh0cywgaW5kZW50KTsKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAg
ICB0cyA8PCAic2tpcHNEcmF3OiAiIDw8ICghbV90aWxlciB8fCBtX3RpbGVyLT5za2lwc0RyYXco
KSkgPDwgIlxuIjsKKyAgICB0cyA8PCAic2tpcHNEcmF3OiAiIDw8ICghbV90aWxlciB8fCBtX3Nr
aXBzRHJhdykgPDwgIlxuIjsKK30KKworVGV4dHVyZU1hbmFnZXIqIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6dGV4dHVyZU1hbmFnZXIoKSBjb25zdAoreworICAgIGlmICghbGF5ZXJSZW5kZXJlcigpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCk7Cit9CisKK1VwZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
dGlsZUF0KGludCBpLCBpbnQgaikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VXBk
YXRhYmxlVGlsZSo+KG1fdGlsZXItPnRpbGVBdChpLCBqKSk7Cit9CisKK1VwZGF0YWJsZVRpbGUq
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCit7CisgICAgUmVm
UHRyPFVwZGF0YWJsZVRpbGU+IHRpbGU7CisgICAgaWYgKG1fdW51c2VkVGlsZXMuc2l6ZSgpID4g
MCkgeworICAgICAgICB0aWxlID0gbV91bnVzZWRUaWxlcy5sYXN0KCkucmVsZWFzZSgpOworICAg
ICAgICBtX3VudXNlZFRpbGVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKHRpbGUtPnJl
ZkNvdW50KCkgPT0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVGV4dHVyZU1hbmFnZXIqIG1h
bmFnZXIgPSB0ZXh0dXJlTWFuYWdlcigpOworICAgICAgICB0aWxlID0gYWRvcHRSZWYobmV3IFVw
ZGF0YWJsZVRpbGUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOworICAgIH0KKyAg
ICBtX3RpbGVyLT5hZGRUaWxlKHRpbGUsIGksIGopOworICAgIHRpbGUtPm1fZGlydHlMYXllclJl
Y3QgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUuZ2V0KCkpOworCisgICAgcmV0dXJuIHRp
bGUuZ2V0KCk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlVGlsZXMo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxl
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Q0NMYXllclRpbGluZ0RhdGE6OlRp
bGVNYXBLZXk+IHJlbW92ZUtleXM7CisgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAh
PSBtX3RpbGVyLT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgQ0NMYXllclRpbGlu
Z0RhdGE6OlRpbGUqIHRpbGUgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEludFJlY3Qg
dGlsZVJlY3QgPSBtX3RpbGVyLT50aWxlQ29udGVudFJlY3QodGlsZSk7CisgICAgICAgIGlmICh0
aWxlUmVjdC5pbnRlcnNlY3RzKGNvbnRlbnRSZWN0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICByZW1vdmVLZXlzLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgfQorCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZW1vdmVLZXlzLnNpemUoKTsgKytpKQorICAgICAgICBtX3Vu
dXNlZFRpbGVzLmFwcGVuZChzdGF0aWNfcG9pbnRlcl9jYXN0PFVwZGF0YWJsZVRpbGU+KG1fdGls
ZXItPnRha2VUaWxlKHJlbW92ZUtleXNbaV0uZmlyc3QsIHJlbW92ZUtleXNbaV0uc2Vjb25kKSkp
OworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSB8fCBt
X3NraXBzRHJhdykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9D
b250YWluKGNvbnRlbnRSZWN0KTsKKworICAgIC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4g
bGF5ZXIgc3BhY2UsIGFzIHRoZSBsYXllciBjb3VsZCBiZSByZXBvc2l0aW9uZWQKKyAgICAvLyBh
ZnRlciBpbnZhbGlkYXRpb24uCisgICAgY29uc3QgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGVy
LT5jb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKworICAgIGludCBsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2Vz
KGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGog
PSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkg
PD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVB
dChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIEludFJlY3QgYm91bmQgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRp
bGUpOworICAgICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGxheWVyUmVjdCk7CisgICAgICAgICAg
ICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0LnVuaXRlKGJvdW5kKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVz
KCkKK3sKKyAgICBwcm90ZWN0VGlsZVRleHR1cmVzKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
Y29udGVudEJvdW5kcygpKSk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0
VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmIChjb250
ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNv
bnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgZm9yIChpbnQgaiA9
IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8
PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0
KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCktPmlzVmFs
aWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGls
ZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpCit7CisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKworICAgIGlmIChjb250
ZW50UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSW52YWxpZGF0ZSBvbGQgdGlsZXMgdGhh
dCB3ZXJlIHByZXZpb3VzbHkgdXNlZCBidXQgYXJlbid0IGluIHVzZSB0aGlzCisgICAgLy8gZnJh
bWUgc28gdGhhdCB0aGV5IGNhbiBnZXQgcmV1c2VkIGZvciBuZXcgdGlsZXMuCisgICAgaW52YWxp
ZGF0ZVRpbGVzKGNvbnRlbnRSZWN0KTsKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4o
Y29udGVudFJlY3QpOworCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKSB7CisgICAgICAg
IG1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29u
dGFpbiBhbGwKKyAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24u
CisgICAgSW50UmVjdCBkaXJ0eUxheWVyUmVjdDsKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVj
dCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9
IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyAr
K2kpIHsKKyAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7Cisg
ICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUo
aSwgaik7CisKKyAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGls
ZXItPnRpbGVTaXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgICAgICAgICAgdGlsZS0+
bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CisKKyAgICAg
ICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCks
IG1fdGV4dHVyZUZvcm1hdCkpIHsKKyAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7
CisgICAgICAgICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGlydHlMYXllclJlY3QudW5pdGUo
dGlsZS0+bV9kaXJ0eUxheWVyUmVjdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEdWUg
dG8gYm9yZGVycywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRlbmRlZCB0byB0aWxlIGJvdW5k
YXJpZXMsIGl0CisgICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGluZyBtb3JlIHRpbGVzIHRoYW4g
dGhlIG9yaWdpbmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCisgICAgLy8gdGhhdCBvcmlnaW5hbCBy
ZWN0IHNvIHdlIGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4gbmVjZXNzYXJ5LgorICAgIG1f
dXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0OworCisgICAgbV9wYWludFJlY3QgPSBtX3RpbGVyLT5s
YXllclJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKKyAgICBpZiAoZGlydHlMYXll
clJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0dXJlVXBkYXRlcigp
LT5wcmVwYXJlVG9VcGRhdGUobV9wYWludFJlY3QsIG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGls
ZXItPmhhc0JvcmRlclRleGVscygpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
aAppbmRleCBlNjJlY2M3YjFjMDY4YTcwYzBmMDNjZTBmYzY1ZjNhNDU4ODk4ZDYwLi5kODJmMzE3
NzRhNTNmNzFiNDM1MWM4OTljMjE5NWU0NjA2ZWZmYzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uaApAQCAtMjksMTIgKzI5LDEzIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
aWxpbmdEYXRhLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyVGV4
dHVyZVVwZGF0ZXI7CitjbGFzcyBVcGRhdGFibGVUaWxlOwogCiBjbGFzcyBUaWxlZExheWVyQ2hy
b21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CkBAIC00OSw2ICs1MCwxMCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKKyAg
ICAvLyBSZXNlcnZlcyBhbGwgZXhpc3RpbmcgYW5kIHZhbGlkIHRpbGUgdGV4dHVyZXMgdG8gcHJv
dGVjdCB0aGVtIGZyb20gYmVpbmcKKyAgICAvLyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5h
Z2VyLgorICAgIHZvaWQgcHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCk7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBUaWxlZExheWVyQ2hyb21pdW0oR3Jh
cGhpY3NMYXllckNocm9taXVtKik7CiAKQEAgLTU4LDcgKzYzLDEzIEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpID0gMDsKICAgICB2
aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOwog
Ci0gICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV90aWxlcjsKKyAgICAvLyBTZXQgaW52
YWxpZGF0aW9ucyB0byBiZSBwb3RlbnRpYWxseSByZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgor
ICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAg
IC8vIFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0
IHdpdGggY29udGVudFJlY3QuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpOworICAgIC8vIFVwZGF0ZSBpbnZhbGlkIHRleHR1cmVzIHRoYXQgaW50
ZXJzZWN0IHdpdGggY29udGVudFJlY3QgcHJvdmlkZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuCisg
ICAgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgTGF5ZXJUZXh0dXJlVXBkYXRl
ciopOworICAgIHZpcnR1YWwgdm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXll
ckltcGwoKTsKQEAgLTcxLDcgKzgyLDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRUaWxpbmdP
cHRpb24oVGlsaW5nT3B0aW9uKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxpbmdUcmFu
c2Zvcm0oKSBjb25zdDsKIAorICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29u
c3Q7CisgICAgVXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CisgICAgdm9pZCBp
bnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCisgICAgVGV4dHVy
ZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CisKKyAgICAvLyBTdGF0ZSBoZWxkIGJl
dHdlZW4gdXBkYXRlIGFuZCB1cGxvYWQuCisgICAgSW50UmVjdCBtX3BhaW50UmVjdDsKKyAgICBJ
bnRSZWN0IG1fdXBkYXRlUmVjdDsKKworICAgIC8vIFRpZ2h0bHkgcGFja2VkIHNldCBvZiB1bnVz
ZWQgdGlsZXMuCisgICAgVmVjdG9yPFJlZlB0cjxVcGRhdGFibGVUaWxlPiA+IG1fdW51c2VkVGls
ZXM7CisKICAgICBUaWxpbmdPcHRpb24gbV90aWxpbmdPcHRpb247CisgICAgR0MzRGVudW0gbV90
ZXh0dXJlRm9ybWF0OworICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CisgICAgTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OworCisgICAg
T3duUHRyPENDTGF5ZXJUaWxpbmdEYXRhPiBtX3RpbGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGlu
Z0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRpbGluZ0RhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4Nzk0ZDRkY2U3NTlhOGIwY2M1Njc4
OWNjZDUxNDMwZDQzYjViYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKQEAgLTAsMCAr
MSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUaWxpbmdEYXRhLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q0NMYXllclRpbGluZ0RhdGE+IEND
TGF5ZXJUaWxpbmdEYXRhOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRl
eGVsT3B0aW9uIGJvcmRlcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUaWxp
bmdEYXRhKHRpbGVTaXplLCBib3JkZXIpKTsKK30KKworQ0NMYXllclRpbGluZ0RhdGE6OkNDTGF5
ZXJUaWxpbmdEYXRhKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBi
b3JkZXIpCisgICAgOiBtX3RpbGluZ0RhdGEobWF4KHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXpl
LmhlaWdodCgpKSwgMCwgMCwgYm9yZGVyID09IEhhc0JvcmRlclRleGVscykKK3sKKyAgICBzZXRU
aWxlU2l6ZSh0aWxlU2l6ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OnNldFRpbGVT
aXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fdGlsZVNpemUgPT0gc2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcmVzZXQoKTsKKworICAgIG1fdGlsZVNpemUgPSBzaXpl
OworICAgIG1fdGlsaW5nRGF0YS5zZXRNYXhUZXh0dXJlU2l6ZShtYXgoc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKSk7Cit9CisKK2NvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiBDQ0xheWVyVGls
aW5nRGF0YTo6b3BlcmF0b3I9KGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcikKK3sKKyAg
ICBtX3RpbGVTaXplID0gdGlsZXIubV90aWxlU2l6ZTsKKyAgICBtX2xheWVyUG9zaXRpb24gPSB0
aWxlci5tX2xheWVyUG9zaXRpb247CisgICAgbV90aWxpbmdEYXRhID0gdGlsZXIubV90aWxpbmdE
YXRhOworCisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjph
ZGRUaWxlKFBhc3NSZWZQdHI8VGlsZT4gdGlsZSwgaW50IGksIGludCBqKQoreworICAgIEFTU0VS
VCghdGlsZUF0KGksIGopKTsKKyAgICB0aWxlLT5tb3ZlVG8oaSwgaik7CisgICAgbV90aWxlcy5h
ZGQobWFrZV9wYWlyKGksIGopLCB0aWxlKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVyVGlsaW5n
RGF0YTo6VGlsZT4gQ0NMYXllclRpbGluZ0RhdGE6OnRha2VUaWxlKGludCBpLCBpbnQgaikKK3sK
KyAgICByZXR1cm4gbV90aWxlcy50YWtlKG1ha2VfcGFpcihpLCBqKSk7Cit9CisKK0NDTGF5ZXJU
aWxpbmdEYXRhOjpUaWxlKiBDQ0xheWVyVGlsaW5nRGF0YTo6dGlsZUF0KGludCBpLCBpbnQgaikg
Y29uc3QKK3sKKyAgICBUaWxlKiB0aWxlID0gbV90aWxlcy5nZXQobWFrZV9wYWlyKGksIGopKS5n
ZXQoKTsKKyAgICBBU1NFUlQoIXRpbGUgfHwgdGlsZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICBy
ZXR1cm4gdGlsZTsKK30KKwordm9pZCBDQ0xheWVyVGlsaW5nRGF0YTo6cmVzZXQoKQoreworICAg
IG1fdGlsZXMuY2xlYXIoKTsKKyAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwor
fQorCit2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjpjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQs
IGludCYgYm90dG9tKSBjb25zdAoreworICAgIGNvbnN0IEludFJlY3QgbGF5ZXJSZWN0ID0gY29u
dGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7CisKKyAgICBsZWZ0ID0gbV90aWxpbmdE
YXRhLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0LngoKSk7CisgICAgdG9wID0gbV90
aWxpbmdEYXRhLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0LnkoKSk7CisgICAgcmln
aHQgPSBtX3RpbGluZ0RhdGEudGlsZVhJbmRleEZyb21TcmNDb29yZChsYXllclJlY3QubWF4WCgp
IC0gMSk7CisgICAgYm90dG9tID0gbV90aWxpbmdEYXRhLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQo
bGF5ZXJSZWN0Lm1heFkoKSAtIDEpOworfQorCitJbnRSZWN0IENDTGF5ZXJUaWxpbmdEYXRhOjpj
b250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdAor
eworICAgIEludFBvaW50IHBvcyhjb250ZW50UmVjdC54KCkgLSBtX2xheWVyUG9zaXRpb24ueCgp
LCBjb250ZW50UmVjdC55KCkgLSBtX2xheWVyUG9zaXRpb24ueSgpKTsKKyAgICBJbnRSZWN0IGxh
eWVyUmVjdChwb3MsIGNvbnRlbnRSZWN0LnNpemUoKSk7CisKKyAgICAvLyBDbGlwIHRvIHRoZSBw
b3NpdGlvbi4KKyAgICBpZiAocG9zLngoKSA8IDAgfHwgcG9zLnkoKSA8IDApCisgICAgICAgIGxh
eWVyUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoY29udGVudFJlY3Qud2lk
dGgoKSArIHBvcy54KCksIGNvbnRlbnRSZWN0LmhlaWdodCgpICsgcG9zLnkoKSkpOworICAgIHJl
dHVybiBsYXllclJlY3Q7Cit9CisKK0ludFJlY3QgQ0NMYXllclRpbGluZ0RhdGE6OmxheWVyUmVj
dFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBjb25zdAoreworICAgIElu
dFJlY3QgY29udGVudFJlY3QgPSBsYXllclJlY3Q7CisgICAgY29udGVudFJlY3QubW92ZShtX2xh
eWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKKyAgICByZXR1cm4gY29udGVu
dFJlY3Q7Cit9CisKK0ludFJlY3QgQ0NMYXllclRpbGluZ0RhdGE6OnRpbGVDb250ZW50UmVjdChj
b25zdCBUaWxlKiB0aWxlKSBjb25zdAoreworICAgIEludFJlY3QgY29udGVudFJlY3QgPSB0aWxl
TGF5ZXJSZWN0KHRpbGUpOworICAgIGNvbnRlbnRSZWN0Lm1vdmUobV9sYXllclBvc2l0aW9uLngo
KSwgbV9sYXllclBvc2l0aW9uLnkoKSk7CisgICAgcmV0dXJuIGNvbnRlbnRSZWN0OworfQorCitJ
bnRSZWN0IENDTGF5ZXJUaWxpbmdEYXRhOjp0aWxlTGF5ZXJSZWN0KGNvbnN0IFRpbGUqIHRpbGUp
IGNvbnN0Cit7CisgICAgY29uc3QgaW50IGluZGV4ID0gbV90aWxpbmdEYXRhLnRpbGVJbmRleCh0
aWxlLT5pKCksIHRpbGUtPmooKSk7CisgICAgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGluZ0Rh
dGEudGlsZUJvdW5kc1dpdGhCb3JkZXIoaW5kZXgpOworICAgIGxheWVyUmVjdC5zZXRTaXplKG1f
dGlsZVNpemUpOworICAgIHJldHVybiBsYXllclJlY3Q7Cit9CisKK3ZvaWQgQ0NMYXllclRpbGlu
Z0RhdGE6OnNldExheWVyUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIGxheWVyUG9zaXRpb24pCit7
CisgICAgbV9sYXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKK30KKwordm9pZCBDQ0xheWVy
VGlsaW5nRGF0YTo6Z3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQoreworICAgIC8vIEdyb3cgdGhlIHRpbGUgYXJyYXkgdG8gY29udGFpbiB0aGlzIGNvbnRlbnQg
cmVjdC4KKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29u
dGVudFJlY3QpOworICAgIEludFNpemUgcmVjdFNpemUgPSBJbnRTaXplKGxheWVyUmVjdC5tYXhY
KCksIGxheWVyUmVjdC5tYXhZKCkpOworCisgICAgSW50U2l6ZSBvbGRMYXllclNpemUobV90aWxp
bmdEYXRhLnRvdGFsU2l6ZVgoKSwgbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVkoKSk7CisgICAgSW50
U2l6ZSBuZXdTaXplID0gcmVjdFNpemUuZXhwYW5kZWRUbyhvbGRMYXllclNpemUpOworICAgIG1f
dGlsaW5nRGF0YS5zZXRUb3RhbFNpemUobmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDE0YWM1NmVlOWE1NTFhZjhjY2FjODA4MGUxYjQ4ZDBjNjBiNzIzMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUaWxpbmdEYXRhLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ0NMYXll
clRpbGluZ0RhdGFfaAorI2RlZmluZSBDQ0xheWVyVGlsaW5nRGF0YV9oCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
VGlsaW5nRGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRpbGlu
Z0RhdGEgeworcHVibGljOgorICAgIGVudW0gQm9yZGVyVGV4ZWxPcHRpb24geyBIYXNCb3JkZXJU
ZXhlbHMsIE5vQm9yZGVyVGV4ZWxzIH07CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVy
VGlsaW5nRGF0YT4gY3JlYXRlKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9w
dGlvbik7CisKKyAgICBpbnQgbnVtVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3RpbGluZ0RhdGEu
bnVtVGlsZXMoKTsgfQorICAgIGludCBudW1UaWxlc1goKSBjb25zdCB7IHJldHVybiBtX3RpbGlu
Z0RhdGEubnVtVGlsZXNYKCk7IH0KKyAgICBpbnQgbnVtVGlsZXNZKCkgY29uc3QgeyByZXR1cm4g
bV90aWxpbmdEYXRhLm51bVRpbGVzWSgpOyB9CisgICAgSW50UmVjdCB0aWxlQm91bmRzKGludCBp
LCBpbnQgaikgY29uc3QgeyByZXR1cm4gbV90aWxpbmdEYXRhLnRpbGVCb3VuZHMobV90aWxpbmdE
YXRhLnRpbGVJbmRleChpLCBqKSk7IH0KKyAgICBJbnRQb2ludCB0ZXh0dXJlT2Zmc2V0KGludCB4
SW5kZXgsIGludCB5SW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsaW5nRGF0YS50ZXh0dXJlT2Zm
c2V0KHhJbmRleCwgeUluZGV4KTsgfQorCisgICAgLy8gU2V0IHBvc2l0aW9uIG9mIHRoaXMgdGls
ZWQgbGF5ZXIgaW4gY29udGVudCBzcGFjZS4KKyAgICB2b2lkIHNldExheWVyUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmKTsKKworICAgIC8vIENoYW5nZSB0aGUgdGlsZSBzaXplLiBUaGlzIG1heSBp
bnZhbGlkYXRlIGFsbCB0aGUgZXhpc3RpbmcgdGlsZXMuCisgICAgdm9pZCBzZXRUaWxlU2l6ZShj
b25zdCBJbnRTaXplJik7CisgICAgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3RpbGVTaXplOyB9CisgICAgYm9vbCBoYXNCb3JkZXJUZXhlbHMoKSBjb25zdCB7IHJl
dHVybiBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuICFtX3RpbGluZ0RhdGEubnVtVGlsZXMoKSB8fCAhdGlsZXMoKS5zaXpl
KCk7IH0KKworICAgIGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiBvcGVyYXRvcj0oY29uc3QgQ0NM
YXllclRpbGluZ0RhdGEmKTsKKworICAgIGNsYXNzIFRpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxU
aWxlPiB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGUpOworICAgIHB1YmxpYzoK
KyAgICAgICAgVGlsZSgpIDogbV9pKC0xKSwgbV9qKC0xKSB7IH0KKworICAgICAgICBpbnQgaSgp
IGNvbnN0IHsgcmV0dXJuIG1faTsgfQorICAgICAgICBpbnQgaigpIGNvbnN0IHsgcmV0dXJuIG1f
ajsgfQorICAgICAgICB2b2lkIG1vdmVUbyhpbnQgaSwgaW50IGopIHsgbV9pID0gaTsgbV9qID0g
ajsgfQorICAgIHByaXZhdGU6CisgICAgICAgIGludCBtX2k7CisgICAgICAgIGludCBtX2o7Cisg
ICAgfTsKKyAgICAvLyBEZWZhdWx0IGhhc2gga2V5IHRyYWl0cyBmb3IgaW50ZWdlcnMgZGlzYWxs
b3cgMCBhbmQgLTEgYXMgYSBrZXksIHNvCisgICAgLy8gdXNlIGEgY3VzdG9tIGhhc2ggdHJhaXQg
d2hpY2ggZGlzYWxsb3dzIC0xIGFuZCAtMiBpbnN0ZWFkLgorICAgIHR5cGVkZWYgc3RkOjpwYWly
PGludCwgaW50PiBUaWxlTWFwS2V5OworICAgIHN0cnVjdCBUaWxlTWFwS2V5VHJhaXRzIDogSGFz
aFRyYWl0czxUaWxlTWFwS2V5PiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFs
dWVJc1plcm8gPSBmYWxzZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IGZhbHNlOworICAgICAgICBzdGF0aWMgVGlsZU1hcEtleSBlbXB0eVZhbHVlKCkgeyBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoLTEsIC0xKTsgfQorICAgICAgICBzdGF0aWMgdm9pZCBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoVGlsZU1hcEtleSYgc2xvdCkgeyBzbG90ID0gc3RkOjptYWtlX3Bh
aXIoLTIsIC0yKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShUaWxlTWFw
S2V5IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5maXJzdCA9PSAtMiAmJiB2YWx1ZS5zZWNvbmQgPT0g
LTI7IH0KKyAgICB9OworICAgIC8vIEZJWE1FOiBUaGUgbWFwcGVkIHZhbHVlIGluIFRpbGVNYXAg
c2hvdWxkIHJlYWxseSBiZSBhbiBPd25QdHIsIGFzIHRoZQorICAgIC8vIHJlZmNvdW50IG9mIGEg
VGlsZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0aGFuIDEuIEhvd2V2ZXIsIEhhc2hNYXAKKyAgICAv
LyBkb2Vzbid0IGVhc2lseSBzdXBwb3J0IE93blB0ciBhcyBhIHZhbHVlLgorICAgIHR5cGVkZWYg
SGFzaE1hcDxUaWxlTWFwS2V5LCBSZWZQdHI8VGlsZT4sIERlZmF1bHRIYXNoPFRpbGVNYXBLZXk+
OjpIYXNoLCBUaWxlTWFwS2V5VHJhaXRzPiBUaWxlTWFwOworCisgICAgdm9pZCBhZGRUaWxlKFBh
c3NSZWZQdHI8VGlsZT4sIGludCwgaW50KTsKKyAgICBQYXNzUmVmUHRyPFRpbGU+IHRha2VUaWxl
KGludCwgaW50KTsKKyAgICBUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0OworICAgIGNvbnN0
IFRpbGVNYXAmIHRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxlczsgfQorCisgICAgLy8gR3Jv
dyBsYXllciBzaXplIHRvIGNvbnRhaW4gdGhpcyByZWN0YW5nbGUuCisgICAgdm9pZCBncm93TGF5
ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHZvaWQgY29udGVu
dFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQgJmxlZnQs
IGludCAmdG9wLCBpbnQgJnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29uc3Q7CisgICAgSW50UmVjdCBj
b250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsK
KyAgICBJbnRSZWN0IGxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJS
ZWN0KSBjb25zdDsKKyAgICBJbnRSZWN0IHRpbGVDb250ZW50UmVjdChjb25zdCBUaWxlKikgY29u
c3Q7CisgICAgSW50UmVjdCB0aWxlTGF5ZXJSZWN0KGNvbnN0IFRpbGUqKSBjb25zdDsKKworICAg
IHZvaWQgcmVzZXQoKTsKKworcHJvdGVjdGVkOgorICAgIENDTGF5ZXJUaWxpbmdEYXRhKGNvbnN0
IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CisKKyAgICBUaWxlTWFwIG1f
dGlsZXM7CisgICAgSW50U2l6ZSBtX3RpbGVTaXplOworICAgIEludFBvaW50IG1fbGF5ZXJQb3Np
dGlvbjsKKyAgICBUaWxpbmdEYXRhIG1fdGlsaW5nRGF0YTsKK307CisKK30KKworI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuY3BwCmluZGV4IGIyOWY4MWZjMzFiMzdmOTM0ZjdlYzVlNmQ5MDlkMTc3YWM0
NzliYzQuLjYwNDgyYTJlNjdjMzhiMmU1NmQ2OTYwOTM1MmRiNGQyYTcxNzA2MzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0yOSwxNyArMjksMzEgQEAKIAogI2luY2x1
ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2lu
Y2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAordHlwZWRlZiBGbG9hdFBvaW50M0QgRWRnZTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJlOwogCitj
bGFzcyBEcmF3YWJsZVRpbGUgOiBwdWJsaWMgQ0NMYXllclRpbGluZ0RhdGE6OlRpbGUgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERyYXdhYmxlVGlsZSk7CitwdWJsaWM6CisgICAgRHJhd2Fi
bGVUaWxlKCkgOiBtX3RleHR1cmVJZCgwKSB7IH0KKworICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICB2b2lkIHNldFRleHR1
cmVJZChQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkgeyBtX3RleHR1cmVJZCA9IHRleHR1cmVJ
ZDsgfQorcHJpdmF0ZToKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdGV4dHVyZUlkOworfTsKKwog
Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbChpbnQgaWQpCiAgICAgOiBDQ0xheWVy
SW1wbChpZCkKLSAgICAsIG1fdGlsZXIoMCkKIHsKIH0KIApAQCAtNDcsMzEgKzYxLDE3IEBAIEND
VGlsZWRMYXllckltcGw6On5DQ1RpbGVkTGF5ZXJJbXBsKCkKIHsKIH0KIAotdm9pZCBDQ1RpbGVk
TGF5ZXJJbXBsOjpkcmF3KCkKLXsKLSAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNp
YmxlTGF5ZXJSZWN0KCk7Ci0gICAgaWYgKCFsYXllclJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7
Ci0gICAgICAgIC8vIE1hc2sgb3V0IHdyaXRlcyB0byB0aGUgYWxwaGEgY2hhbm5lbCBmb3IgdGhl
IHJvb3QgbGF5ZXIsIHN1YnBpeGVsIGFudGlhbGlhc2luZwotICAgICAgICAvLyB2aWEgU2tpYSBy
ZXN1bHRzIGluIGludmFsaWQgemVybyBhbHBoYSB2YWx1ZXMgb24gdGV4dCBnbHlwaHMuIFRoZSBy
b290IGxheWVyCi0gICAgICAgIC8vIGlzIGFsd2F5cyBvcGFxdWUgc28gdGhlIGFscGhhIGNoYW5u
ZWwgaXNuJ3QgbWVhbmluZ2Z1bCBhbnl3YXkuCi0gICAgICAgIGlmIChpc1Jvb3RMYXllcigpKQot
ICAgICAgICAgICAgY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKTsK
LSAgICAgICAgbV90aWxlci0+ZHJhdyhsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3
T3BhY2l0eSgpKTsKLSAgICAgICAgaWYgKGlzUm9vdExheWVyKCkpCi0gICAgICAgICAgICBjb250
ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgfQotfQotCiB2b2lk
IENDVGlsZWRMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoKQogewogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgb25seSB2YWxpZCBmb3Igc2luZ2xlIHRleHR1cmUgbGF5ZXJzLCBlLmcuIG1h
c2tzLgogICAgIEFTU0VSVChtX3RpbGVyKTsKKyAgICBBU1NFUlQobV90aWxlci0+bnVtVGlsZXMo
KSA9PSAxKTsKIAotICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV90aWxlci0+Z2V0U2lu
Z2xlVGV4dHVyZSgpOwotICAgIEFTU0VSVCh0ZXh0dXJlKTsKKyAgICBEcmF3YWJsZVRpbGUqIHRp
bGUgPSB0aWxlQXQoMCwgMCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQgPSB0aWxl
ID8gdGlsZS0+dGV4dHVyZUlkKCkgOiAwOworICAgIEFTU0VSVCh0ZXh0dXJlSWQpOwogCi0gICAg
dGV4dHVyZS0+YmluZFRleHR1cmUobGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCkpOworICAgIGxh
eWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKIH0KIAogdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkdW1w
TGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdApAQCAtODAs
NiArODAsMzI5IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhU
ZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKICAgICBDQ0xheWVySW1wbDo6ZHVtcExh
eWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKIH0KIAorRHJhd2FibGVUaWxlKiBDQ1RpbGVkTGF5
ZXJJbXBsOjp0aWxlQXQoaW50IGksIGludCBqKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxEcmF3YWJsZVRpbGUqPihtX3RpbGVyLT50aWxlQXQoaSwgaikpOworfQorCitEcmF3YWJs
ZVRpbGUqIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQoreworICAg
IFJlZlB0cjxEcmF3YWJsZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihuZXcgRHJhd2FibGVUaWxlKCkp
OworICAgIG1fdGlsZXItPmFkZFRpbGUodGlsZSwgaSwgaik7CisgICAgcmV0dXJuIHRpbGUuZ2V0
KCk7Cit9CisKK3ZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdygpCit7CisgICAgY29uc3QgSW50
UmVjdCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOworCisgICAgaWYgKG1fc2tpcHNE
cmF3IHx8IG1fdGlsZXItPmlzRW1wdHkoKSB8fCBsYXllclJlY3QuaXNFbXB0eSgpIHx8ICFsYXll
clJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoT1NfQ0hST01FT1Mp
CisgICAgLy8gRklYTUU6IERpc2FibGUgYW50aS1hbGlhc2luZyB0byB3b3JrYXJvdW5kIGJyb2tl
biBkcml2ZXIuCisgICAgYm9vbCB1c2VBQSA9IGZhbHNlOworI2Vsc2UKKyAgICAvLyBVc2UgYW50
aS1hbGlhc2luZyBwcm9ncmFtcyB3aGVuIGJvcmRlciB0ZXhlbHMgYXJlIHByZXNldCBhbmQgdHJh
bnNmb3JtCisgICAgLy8gaXMgbm90IGFuIGludGVnZXIgdHJhbnNsYXRpb24uCisgICAgYm9vbCB1
c2VBQSA9IChtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSAmJiAhbV90aWxpbmdUcmFuc2Zvcm0u
aXNJbnRlZ2VyVHJhbnNsYXRpb24oKSk7CisjZW5kaWYKKworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisgICAgaWYgKGlzUm9vdExh
eWVyKCkpCisgICAgICAgIGNvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCBmYWxz
ZSk7CisKKyAgICBzd2l0Y2ggKG1fc2FtcGxlZFRleGVsRm9ybWF0KSB7CisgICAgY2FzZSBMYXll
clRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOgorICAgICAgICBpZiAodXNl
QUEpCisgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlcigpLCBsYXllclJlY3QsIG1f
dGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJv
Z3JhbUFBKCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtQUEoKS0+ZnJhZ21lbnRTaGFk
ZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIGxheWVyUmVuZGVyZXIoKS0+dGls
ZXJQcm9ncmFtQUEoKS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyKCksIGxheWVyUmVjdCwg
bV90aWxpbmdUcmFuc2Zvcm0sIGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQ
cm9ncmFtKCksIC0xLCAtMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQToKKyAgICAgICAgaWYgKHVzZUFBKQorICAg
ICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIoKSwgbGF5ZXJSZWN0LCBtX3RpbGluZ1Ry
YW5zZm9ybSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6
emxlQUEoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6emxlQUEoKS0+ZnJhZ21l
bnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIGxheWVyUmVuZGVyZXIo
KS0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCktPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9u
KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlcigp
LCBsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRl
cmVyKCktPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKSwgLTEsIC0xKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
aWYgKGlzUm9vdExheWVyKCkpCisgICAgICAgIGNvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVl
LCB0cnVlLCB0cnVlKTsKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzZXRUaWxpbmdEYXRh
KGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcikKK3sKKyAgICBpZiAoIW1fdGlsZXIpCisg
ICAgICAgIG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRlKHRpbGVyLnRpbGVTaXpl
KCksIHRpbGVyLmhhc0JvcmRlclRleGVscygpID8gQ0NMYXllclRpbGluZ0RhdGE6Okhhc0JvcmRl
clRleGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpOb0JvcmRlclRleGVscyk7CisgICAgKm1fdGls
ZXIgPSB0aWxlcjsKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5jVGV4dHVyZUlkKGlu
dCBpLCBpbnQgaiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpCit7CisgICAgRHJhd2FibGVU
aWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgIGlmICghdGlsZSkKKyAgICAgICAgdGlsZSA9
IGNyZWF0ZVRpbGUoaSwgaik7CisgICAgdGlsZS0+c2V0VGV4dHVyZUlkKHRleHR1cmVJZCk7Cit9
CisKK3ZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZXZpY3RUZXh0dXJlKGludCBpLCBpbnQgaikKK3sK
KyAgICBEcmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgaWYgKCF0aWxlKQor
ICAgICAgICByZXR1cm47CisgICAgdGlsZS0+c2V0VGV4dHVyZUlkKDApOworfQorCitzdGF0aWMg
Ym9vbCBpc0NDVyhjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit7CisgICAgRmxvYXRQb2ludCB2MSA9
IEZsb2F0UG9pbnQocXVhZC5wMigpLngoKSAtIHF1YWQucDEoKS54KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcXVhZC5wMigpLnkoKSAtIHF1YWQucDEoKS55KCkpOworICAgIEZs
b2F0UG9pbnQgdjIgPSBGbG9hdFBvaW50KHF1YWQucDMoKS54KCkgLSBxdWFkLnAyKCkueCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWQucDMoKS55KCkgLSBxdWFkLnAyKCku
eSgpKTsKKyAgICByZXR1cm4gKHYxLngoKSAqIHYyLnkoKSAtIHYxLnkoKSAqIHYyLngoKSkgPCAw
OworfQorCitzdGF0aWMgRWRnZSBjb21wdXRlRWRnZShjb25zdCBGbG9hdFBvaW50JiBwLCBjb25z
dCBGbG9hdFBvaW50JiBxLCBmbG9hdCBzaWduKQoreworICAgIEFTU0VSVChwICE9IHEpOworCisg
ICAgRmxvYXRQb2ludCB0YW5nZW50KHAueSgpIC0gcS55KCksIHEueCgpIC0gcC54KCkpOworICAg
IGZsb2F0IHNjYWxlID0gc2lnbiAvIHRhbmdlbnQubGVuZ3RoKCk7CisgICAgZmxvYXQgY3Jvc3My
ID0gcC54KCkgKiBxLnkoKSAtIHEueCgpICogcC55KCk7CisKKyAgICByZXR1cm4gRWRnZSh0YW5n
ZW50LngoKSAqIHNjYWxlLAorICAgICAgICAgICAgICAgIHRhbmdlbnQueSgpICogc2NhbGUsCisg
ICAgICAgICAgICAgICAgY3Jvc3MyICogc2NhbGUpOworfQorCitzdGF0aWMgRmxvYXRQb2ludCBp
bnRlcnNlY3QoY29uc3QgRWRnZSYgYSwgY29uc3QgRWRnZSYgYikKK3sKKyAgICByZXR1cm4gRmxv
YXRQb2ludCgKKyAgICAgICAgKGEueSgpICogYi56KCkgLSBiLnkoKSAqIGEueigpKSAvIChhLngo
KSAqIGIueSgpIC0gYi54KCkgKiBhLnkoKSksCisgICAgICAgIChhLngoKSAqIGIueigpIC0gYi54
KCkgKiBhLnooKSkgLyAoYi54KCkgKiBhLnkoKSAtIGEueCgpICogYi55KCkpKTsKK30KKwordGVt
cGxhdGUgPGNsYXNzIFQ+Cit2b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXdUaWxlcyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFj
aXR5LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwg
aW50IGVkZ2VMb2NhdGlvbikKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgobGF5
ZXJSZW5kZXJlci0+d2luZG93TWF0cml4KCkgKiBsYXllclJlbmRlcmVyLT5wcm9qZWN0aW9uTWF0
cml4KCkgKiBnbG9iYWxUcmFuc2Zvcm0pOworCisgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBa
IGNvbXBvbmVudC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXhYWVcgPQorICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgMCwgbWF0
cml4Lm0xNCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTIxKCksIG1h
dHJpeC5tMjIoKSwgMCwgbWF0cml4Lm0yNCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgMSwgbWF0cml4Lm0zNCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgMCwgbWF0cml4
Lm00NCgpKTsKKworICAgIC8vIERvbid0IGRyYXcgYW55IHRpbGVzIHdoZW4gbWF0cml4IGlzIG5v
dCBpbnZlcnRpYmxlLgorICAgIGlmICghbWF0cml4WFlXLmlzSW52ZXJ0aWJsZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlID0gbWF0cml4WFlX
LmludmVyc2UoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHBy
b2dyYW0tPnByb2dyYW0oKSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWko
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFMCkpOworCisgICAgLy8gTWFwIGNvbnRlbnQgcmVjdGFuZ2xlIHRvIGRldmljZSBzcGFjZS4K
KyAgICBGbG9hdFF1YWQgZGV2aWNlUXVhZCA9IG1hdHJpeC5tYXBRdWFkKEZsb2F0UXVhZChjb250
ZW50UmVjdCkpOworCisgICAgLy8gQ291bnRlci1jbG9ja3dpc2U/CisgICAgZmxvYXQgc2lnbiA9
IGlzQ0NXKGRldmljZVF1YWQpID8gLTEgOiAxOworCisgICAgLy8gQ29tcHV0ZSBvdXRlciBlZGdl
cy4KKyAgICBFZGdlIGxlZnRFZGdlID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVhZC5wNCgpLCBkZXZp
Y2VRdWFkLnAxKCksIHNpZ24pOworICAgIEVkZ2UgcmlnaHRFZGdlID0gY29tcHV0ZUVkZ2UoZGV2
aWNlUXVhZC5wMigpLCBkZXZpY2VRdWFkLnAzKCksIHNpZ24pOworICAgIEVkZ2UgdG9wRWRnZSA9
IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDEoKSwgZGV2aWNlUXVhZC5wMigpLCBzaWduKTsKKyAg
ICBFZGdlIGJvdHRvbUVkZ2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnAzKCksIGRldmljZVF1
YWQucDQoKSwgc2lnbik7CisKKyAgICBpZiAoZWRnZUxvY2F0aW9uICE9IC0xKSB7CisgICAgICAg
IC8vIE1vdmUgb3V0ZXIgZWRnZXMgdG8gZW5zdXJlIHRoYXQgYWxsIHBhcnRpYWxseSBjb3ZlcmVk
IHBpeGVscyBhcmUKKyAgICAgICAgLy8gcHJvY2Vzc2VkLgorICAgICAgICBsZWZ0RWRnZS5tb3Zl
KDAsIDAsIDAuNWYpOworICAgICAgICByaWdodEVkZ2UubW92ZSgwLCAwLCAwLjVmKTsKKyAgICAg
ICAgdG9wRWRnZS5tb3ZlKDAsIDAsIDAuNWYpOworICAgICAgICBib3R0b21FZGdlLm1vdmUoMCwg
MCwgMC41Zik7CisKKyAgICAgICAgZmxvYXQgZWRnZVsxMl07CisgICAgICAgIGVkZ2VbMF0gPSBs
ZWZ0RWRnZS54KCk7CisgICAgICAgIGVkZ2VbMV0gPSBsZWZ0RWRnZS55KCk7CisgICAgICAgIGVk
Z2VbMl0gPSBsZWZ0RWRnZS56KCk7CisgICAgICAgIGVkZ2VbM10gPSB0b3BFZGdlLngoKTsKKyAg
ICAgICAgZWRnZVs0XSA9IHRvcEVkZ2UueSgpOworICAgICAgICBlZGdlWzVdID0gdG9wRWRnZS56
KCk7CisgICAgICAgIGVkZ2VbNl0gPSByaWdodEVkZ2UueCgpOworICAgICAgICBlZGdlWzddID0g
cmlnaHRFZGdlLnkoKTsKKyAgICAgICAgZWRnZVs4XSA9IHJpZ2h0RWRnZS56KCk7CisgICAgICAg
IGVkZ2VbOV0gPSBib3R0b21FZGdlLngoKTsKKyAgICAgICAgZWRnZVsxMF0gPSBib3R0b21FZGdl
LnkoKTsKKyAgICAgICAgZWRnZVsxMV0gPSBib3R0b21FZGdlLnooKTsKKyAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm0zZnYoZWRnZUxvY2F0aW9uLCBlZGdlLCA0KSk7CisgICAg
fQorCisgICAgRWRnZSBwcmV2RWRnZVkgPSB0b3BFZGdlOworCisgICAgaW50IGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29u
dGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgSW50UmVjdCBsYXllclJl
Y3QgPSBtX3RpbGVyLT5jb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBm
b3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIEVkZ2UgcHJldkVk
Z2VYID0gbGVmdEVkZ2U7CisKKyAgICAgICAgRWRnZSBlZGdlWSA9IGJvdHRvbUVkZ2U7CisgICAg
ICAgIGlmIChqIDwgKG1fdGlsZXItPm51bVRpbGVzWSgpIC0gMSkpIHsKKyAgICAgICAgICAgIElu
dFJlY3QgdGlsZVJlY3QgPSB1bmlvblJlY3QobV90aWxlci0+dGlsZUJvdW5kcygwLCBqKSwgbV90
aWxlci0+dGlsZUJvdW5kcyhtX3RpbGVyLT5udW1UaWxlc1goKSAtIDEsIGopKTsKKyAgICAgICAg
ICAgIHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3QpOworCisgICAgICAgICAgICAvLyBTa2lw
IGVtcHR5IHJvd3MuCisgICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0aWxlUmVjdCA9IG1fdGlsZXItPmxh
eWVyUmVjdFRvQ29udGVudFJlY3QodGlsZVJlY3QpOworCisgICAgICAgICAgICBGbG9hdFBvaW50
IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKKyAgICAgICAgICAgIEZsb2F0
UG9pbnQgcDIodGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOworCisgICAgICAgICAgICAv
LyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4KKyAgICAgICAgICAgIHAxID0gbWF0cml4Lm1h
cFBvaW50KHAxKTsKKyAgICAgICAgICAgIHAyID0gbWF0cml4Lm1hcFBvaW50KHAyKTsKKworICAg
ICAgICAgICAgLy8gQ29tcHV0ZSBob3Jpem9udGFsIGVkZ2UuCisgICAgICAgICAgICBlZGdlWSA9
IGNvbXB1dGVFZGdlKHAxLCBwMiwgc2lnbik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGlu
dCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBEcmF3YWJsZVRpbGUq
IHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPnRl
eHR1cmVJZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGlsZS0+dGV4
dHVyZUlkKCkpOworCisgICAgICAgICAgICAvLyBEb24ndCB1c2UgdGlsZUNvbnRlbnRSZWN0IGhl
cmUsIGFzIHRoYXQgY29udGFpbnMgdGhlIGZ1bGwKKyAgICAgICAgICAgIC8vIHJlY3Qgd2l0aCBi
b3JkZXIgdGV4ZWxzIHdoaWNoIHNob3VsZG4ndCBiZSBkcmF3bi4KKyAgICAgICAgICAgIEludFJl
Y3QgdGlsZVJlY3QgPSBtX3RpbGVyLT50aWxlQm91bmRzKHRpbGUtPmkoKSwgdGlsZS0+aigpKTsK
KyAgICAgICAgICAgIEludFJlY3QgZGlzcGxheVJlY3QgPSB0aWxlUmVjdDsKKyAgICAgICAgICAg
IHRpbGVSZWN0LmludGVyc2VjdChsYXllclJlY3QpOworCisgICAgICAgICAgICAvLyBLZWVwIHRy
YWNrIG9mIGhvdyB0aGUgdG9wIGxlZnQgaGFzIG1vdmVkLCBzbyB0aGUgdGV4dHVyZSBjYW4gYmUK
KyAgICAgICAgICAgIC8vIG9mZnNldCB0aGUgc2FtZSBhbW91bnQuCisgICAgICAgICAgICBJbnRT
aXplIGRpc3BsYXlPZmZzZXQgPSB0aWxlUmVjdC5taW5YTWluWUNvcm5lcigpIC0gZGlzcGxheVJl
Y3QubWluWE1pbllDb3JuZXIoKTsKKworICAgICAgICAgICAgLy8gU2tpcCBlbXB0eSB0aWxlcy4K
KyAgICAgICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9Db250
ZW50UmVjdCh0aWxlUmVjdCk7CisKKyAgICAgICAgICAgIEZsb2F0UmVjdCBjbGFtcFJlY3QodGls
ZVJlY3QpOworICAgICAgICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9p
ZCBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllcgorICAgICAgICAgICAgLy8gYnkgZGVmbGF0aW5n
IHRoZSB0aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3IgaGFsZiBhIHRleGVsCisgICAgICAgICAg
ICAvLyBtaW51cyBlcHNpbG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUgcmVzdWx0aW5nIGNs
YW1wIHJlZ2lvbgorICAgICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0IHNxdWFyZSBi
eSB0aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCisgICAgICAgICAgICAvLyBiYWNrIHRvIG5v
cm1hbGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hhZGVyCisgICAg
ICAgICAgICAvLyBhZnRlciBiZWluZyBjbGFtcGVkIHRvIDAtMSByYW5nZS4KKyAgICAgICAgICAg
IGNvbnN0IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKKyAgICAgICAgICAgIGZsb2F0IGNs
YW1wWCA9IG1pbigwLjUsIGNsYW1wUmVjdC53aWR0aCgpIC8gMi4wIC0gZXBzaWxvbik7CisgICAg
ICAgICAgICBmbG9hdCBjbGFtcFkgPSBtaW4oMC41LCBjbGFtcFJlY3QuaGVpZ2h0KCkgLyAyLjAg
LSBlcHNpbG9uKTsKKyAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsKKyAg
ICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKKyAgICAgICAgICAgIEZsb2F0
U2l6ZSBjbGFtcE9mZnNldCA9IGNsYW1wUmVjdC5taW5YTWluWUNvcm5lcigpIC0gRmxvYXRSZWN0
KHRpbGVSZWN0KS5taW5YTWluWUNvcm5lcigpOworCisgICAgICAgICAgICBGbG9hdFBvaW50IHRl
eE9mZnNldCA9IG1fdGlsZXItPnRleHR1cmVPZmZzZXQodGlsZS0+aSgpLCB0aWxlLT5qKCkpICsg
Y2xhbXBPZmZzZXQgKyBGbG9hdFNpemUoZGlzcGxheU9mZnNldCk7CisgICAgICAgICAgICBmbG9h
dCB0aWxlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4obV90aWxlci0+dGlsZVNpemUoKS53aWR0
aCgpKTsKKyAgICAgICAgICAgIGZsb2F0IHRpbGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
bV90aWxlci0+dGlsZVNpemUoKS5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIC8vIE1hcCBjbGFt
cGluZyByZWN0YW5nbGUgdG8gdW5pdCBzcXVhcmUuCisgICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhU
ZXhUcmFuc2xhdGVYID0gLWNsYW1wUmVjdC54KCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKKyAgICAg
ICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVkgPSAtY2xhbXBSZWN0LnkoKSAvIGNsYW1w
UmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFNjYWxlWCA9IHRpbGVS
ZWN0LndpZHRoKCkgLyBjbGFtcFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgIGZsb2F0IHZlcnRl
eFRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOworCisg
ICAgICAgICAgICAvLyBNYXAgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAg
ICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVYID0gdGV4T2Zmc2V0LngoKSAvIHRp
bGVXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4VHJhbnNsYXRlWSA9IHRleE9m
ZnNldC55KCkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2Fs
ZVggPSBjbGFtcFJlY3Qud2lkdGgoKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IGZy
YWdtZW50VGV4U2NhbGVZID0gY2xhbXBSZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdodDsKKworICAg
ICAgICAgICAgLy8gT3BlbkdMIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJvdHRvbS11cC4KKyAgICAg
ICAgICAgIC8vIElmIHRpbGUgdGV4dHVyZSBpcyB0b3AtZG93biwgd2UgbmVlZCB0byBmbGlwIHRo
ZSB0ZXh0dXJlIGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgaWYgKG1fdGV4dHVyZU9yaWVudGF0
aW9uID09IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikgeworICAgICAg
ICAgICAgICAgIGZyYWdtZW50VGV4VHJhbnNsYXRlWSA9IDEuMCAtIGZyYWdtZW50VGV4VHJhbnNs
YXRlWTsKKyAgICAgICAgICAgICAgICBmcmFnbWVudFRleFNjYWxlWSAqPSAtMS4wOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBFZGdlIGVkZ2VYID0gcmlnaHRFZGdlOworICAgICAgICAg
ICAgaWYgKGkgPCAobV90aWxlci0+bnVtVGlsZXNYKCkgLSAxKSkgeworICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOworICAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkpOwor
CisgICAgICAgICAgICAgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCisgICAgICAg
ICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEpOworICAgICAgICAgICAgICAgIHAyID0g
bWF0cml4Lm1hcFBvaW50KHAyKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVydGlj
YWwgZWRnZS4KKyAgICAgICAgICAgICAgICBlZGdlWCA9IGNvbXB1dGVFZGdlKHAxLCBwMiwgc2ln
bik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3BhY2Ug
cXVhZC4KKyAgICAgICAgICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkKGludGVyc2VjdChlZGdlWSwg
cHJldkVkZ2VYKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdChw
cmV2RWRnZVgsIHByZXZFZGdlWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnRlcnNlY3QocHJldkVkZ2VZLCBlZGdlWCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRlcnNlY3QoZWRnZVgsIGVkZ2VZKSk7CisKKyAgICAgICAgICAgIC8vIE1hcCBxdWFk
IHRvIGxheWVyIHNwYWNlLgorICAgICAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBpbnZlcnNlLm1h
cFF1YWQoZGV2aWNlUXVhZCk7CisKKyAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxlUmVj
dC4KKyAgICAgICAgICAgIHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEuMGYg
LyB0aWxlUmVjdC5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRyYW5z
Zm9ybUxvY2F0aW9uID09IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVudCBz
aGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbworICAgICAgICAgICAg
ICAgIC8vIHRoaXMgd2hpbGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcworICAg
ICAgICAgICAgICAgIC8vIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFsd2F5
cyBiZSBub24tbmVnYXRpdmUKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0cmFu
c2Zvcm1lZCBpbiBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgorICAgICAgICAgICAgICAgIC8v
IHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVyLgorICAgICAgICAgICAgICAgIHZlcnRleFRleFNj
YWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhTY2Fs
ZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7CisgICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNs
YXRlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFu
c2xhdGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICAgICAgICAgIHZlcnRleFRleFRy
YW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOworICAgICAgICAgICAgICAgIHZlcnRl
eFRleFRyYW5zbGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihmcmFn
bWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdtZW50
VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7CisK
KyAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJhbnNs
YXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhTY2Fs
ZVkpKTsKKworICAgICAgICAgICAgZmxvYXQgcG9pbnRbOF07CisgICAgICAgICAgICBwb2ludFsw
XSA9IHF1YWQucDEoKS54KCk7CisgICAgICAgICAgICBwb2ludFsxXSA9IHF1YWQucDEoKS55KCk7
CisgICAgICAgICAgICBwb2ludFsyXSA9IHF1YWQucDIoKS54KCk7CisgICAgICAgICAgICBwb2lu
dFszXSA9IHF1YWQucDIoKS55KCk7CisgICAgICAgICAgICBwb2ludFs0XSA9IHF1YWQucDMoKS54
KCk7CisgICAgICAgICAgICBwb2ludFs1XSA9IHF1YWQucDMoKS55KCk7CisgICAgICAgICAgICBw
b2ludFs2XSA9IHF1YWQucDQoKS54KCk7CisgICAgICAgICAgICBwb2ludFs3XSA9IHF1YWQucDQo
KS55KCk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTJmdihwcm9n
cmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCksIHBvaW50LCA0KSk7CisKKyAgICAg
ICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5k
ZXJlci0+cHJvamVjdGlvbk1hdHJpeCgpLCBnbG9iYWxUcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0
LmhlaWdodCgpLCBvcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLmFscGhhTG9jYXRpb24oKSk7CisKKyAgICAgICAgICAgIHByZXZFZGdlWCA9IGVkZ2VY
OworICAgICAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24uCisgICAgICAgICAgICBwcmV2RWRn
ZVguc2NhbGUoLTEsIC0xLCAtMSk7CisgICAgICAgIH0KKworICAgICAgICBwcmV2RWRnZVkgPSBl
ZGdlWTsKKyAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24uCisgICAgICAgIHByZXZFZGdlWS5z
Y2FsZSgtMSwgLTEsIC0xKTsKKyAgICB9Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCA3MzQ2
YmI3ZTdkNmZhNmJjOGNhMWViY2YyOWNjNTg0OWYxZWY2M2FlLi5kY2U1MmY3OTUyYTg4Yjk4MjJm
YTYzZWI4YWQ4MDdlODVlZjkzODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBA
IC0yNiwxMSArMjYsMTUgQEAKICNpZm5kZWYgQ0NUaWxlZExheWVySW1wbF9oCiAjZGVmaW5lIEND
VGlsZWRMYXllckltcGxfaAogCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCisjaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VGlsaW5nRGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERyYXdhYmxlVGls
ZTsKKwogY2xhc3MgQ0NUaWxlZExheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaWxlZExheWVySW1wbD4gY3JlYXRlKGludCBp
ZCkKQEAgLTQ1LDEzICs0OSw0MSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXll
clByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRUaWxpbmdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRpbGluZ1RyYW5z
Zm9ybSkgeyBtX3RpbGluZ1RyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9ybTsgfQotICAgIHZvaWQg
c2V0VGlsZXIoTGF5ZXJUaWxlckNocm9taXVtKiB0aWxlcikgeyBtX3RpbGVyID0gdGlsZXI7IH0K
KyAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNr
aXBzRHJhdzsgfQorICAgIHZvaWQgc2V0VGV4dHVyZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVw
ZGF0ZXI6Ok9yaWVudGF0aW9uIHRleHR1cmVPcmllbnRhdGlvbikgeyBtX3RleHR1cmVPcmllbnRh
dGlvbiA9IHRleHR1cmVPcmllbnRhdGlvbjsgfQorICAgIHZvaWQgc2V0U2FtcGxlZFRleGVsRm9y
bWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxG
b3JtYXQpIHsgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSBzYW1wbGVkVGV4ZWxGb3JtYXQ7IH0KKyAg
ICB2b2lkIHNldFRpbGluZ0RhdGEoY29uc3QgQ0NMYXllclRpbGluZ0RhdGEmIHRpbGVyKTsKKyAg
ICB2b2lkIHN5bmNUZXh0dXJlSWQoaW50LCBpbnQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlk
KTsKKyAgICB2b2lkIGV2aWN0VGV4dHVyZShpbnQsIGludCk7CisKKyAgICB0eXBlZGVmIFByb2dy
YW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBQ
cm9ncmFtOworICAgIC8vIFNoYWRlciBwcm9ncmFtIHRoYXQgc3dhcHMgcmVkIGFuZCBibHVlIGNv
bXBvbmVudHMgb2YgdGV4dHVyZS4KKyAgICAvLyBVc2VkIHdoZW4gdGV4dHVyZSBmb3JtYXQgZG9l
cyBub3QgbWF0Y2ggbmF0aXZlIGNvbG9yIGZvcm1hdC4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5k
aW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4g
UHJvZ3JhbVN3aXp6bGU7CisKKyAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHByb2R1Y2VzIGFu
dGktYWxpYXNlZCBsYXllciBlZGdlcy4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRl
eFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhQUE+IFByb2dyYW1BQTsKKyAg
ICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVy
UkdCQVRleFN3aXp6bGVBbHBoYUFBPiBQcm9ncmFtU3dpenpsZUFBOwogCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IENDVGlsZWRMYXllckltcGwoaW50IGlkKTsKIAorICAgIC8vIERyYXcgYWxsIHRp
bGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KKyAgICB2b2lkIGRyYXco
TGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisKKyAgICBEcmF3YWJsZVRp
bGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CisgICAgRHJhd2FibGVUaWxlKiBjcmVhdGVUaWxl
KGludCwgaW50KTsKKworICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGgg
Y29udGVudFJlY3QuCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgdm9pZCBkcmF3VGlsZXMo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwg
aW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24pOworCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90aWxpbmdUcmFuc2Zvcm07Ci0gICAgTGF5ZXJUaWxl
ckNocm9taXVtKiBtX3RpbGVyOworICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CisgICAgTGF5ZXJU
ZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0Owor
CisgICAgT3duUHRyPENDTGF5ZXJUaWxpbmdEYXRhPiBtX3RpbGVyOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgKaW5kZXgg
M2RhYmI1ZGVjMzMwNmU3ZTI2MzE0MDViZGMyYzM0ZTk1MmQ0MjAyNy4uYmM2M2E2NzBiZjQ2MTcy
NWU4MWQ4MDBhODkxODk1ZmFjODY2MmE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oCkBAIC00MCw3ICs0MCw2IEBAIGNsYXNzIElu
dFJlY3Q7CiBjbGFzcyBJbnRQb2ludDsKIAogY2xhc3MgVGlsaW5nRGF0YSB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVGlsaW5nRGF0YSk7CiBwdWJsaWM6CiAgICAgVGlsaW5nRGF0YShpbnQg
bWF4VGV4dHVyZVNpemUsIGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSwgYm9vbCBoYXNC
b3JkZXJUZXhlbHMpOwogICAgIHZvaWQgc2V0VG90YWxTaXplKGludCB0b3RhbFNpemVYLCBpbnQg
dG90YWxTaXplWSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGExNDI1MmU4NDIzZmRi
NDVkZDhjY2ZjNDJmODU0Y2EwMzQwZGRmNjguLjc2MTQwOTQ3YzY4NGU4YzE2NDNlNTQyOTc2YTU4
ZTMyOTU5MDE4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDgtMTcgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBbY2hyb21pdW1dIFNwbGl0IHRpbGVyIGludG8gbWFpbiB0aHJlYWQgLyBjb21wb3NpdG9yIHRo
cmVhZCB2ZXJzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjYwNjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgYSB0ZXN0IGZvciBhc3NpZ25tZW50IGFuZCBjb3B5IGNvbnN0cnVjdG9yIGZvciBU
aWxpbmdEYXRhLgorCisgICAgICAgICogdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMDgtMTYgIEphbWVzIFJvYmluc29uICA8amFtZXNy
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERyYXcgdGhlIHJvb3QvIm5vbi1j
b21wb3NpdGVkIGNvbnRlbnQiIGluIGNvbXBvc2l0b3Igc2lkZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcAppbmRleCA3NjJlZGE5Mzk5MTUwZWJl
NGM5NzE5NDZhNzRlNTdjMzlhM2I1ZGQ1Li5kNGM2OGY1NTc0MWU3YWNiNTc5YWViZjE4NWRmNmUz
NmEzMmZlM2Y3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGlu
Z0RhdGFUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0Rh
dGFUZXN0LmNwcApAQCAtNDg4LDQgKzQ4OCwyOCBAQCBURVNUKFRpbGluZ0RhdGFUZXN0LCBzZXRN
YXhUZXh0dXJlU2l6ZUJvcmRlcnMpCiAgICAgRVhQRUNUX0VRKDEwLCBkYXRhLm51bVRpbGVzWSgp
KTsKIH0KIAorVEVTVChUaWxpbmdEYXRhVGVzdCwgYXNzaWdubWVudCkKK3sKKyAgICB7CisgICAg
ICAgIFRpbGluZ0RhdGEgc291cmNlKDgsIDE2LCAzMiwgdHJ1ZSk7CisgICAgICAgIFRpbGluZ0Rh
dGEgZGVzdCA9IHNvdXJjZTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5ib3JkZXJUZXhlbHMo
KSwgZGVzdC5ib3JkZXJUZXhlbHMoKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UubWF4VGV4
dHVyZVNpemUoKSwgZGVzdC5tYXhUZXh0dXJlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNv
dXJjZS5udW1UaWxlc1goKSwgZGVzdC5udW1UaWxlc1goKSk7CisgICAgICAgIEVYUEVDVF9FUShz
b3VyY2UubnVtVGlsZXNZKCksIGRlc3QubnVtVGlsZXNZKCkpOworICAgICAgICBFWFBFQ1RfRVEo
c291cmNlLnRvdGFsU2l6ZVgoKSwgZGVzdC50b3RhbFNpemVYKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoc291cmNlLnRvdGFsU2l6ZVkoKSwgZGVzdC50b3RhbFNpemVZKCkpOworICAgIH0KKyAgICB7
CisgICAgICAgIFRpbGluZ0RhdGEgc291cmNlKDMsIDYsIDEwMCwgZmFsc2UpOworICAgICAgICBU
aWxpbmdEYXRhIGRlc3Qoc291cmNlKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5ib3JkZXJU
ZXhlbHMoKSwgZGVzdC5ib3JkZXJUZXhlbHMoKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2Uu
bWF4VGV4dHVyZVNpemUoKSwgZGVzdC5tYXhUZXh0dXJlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKHNvdXJjZS5udW1UaWxlc1goKSwgZGVzdC5udW1UaWxlc1goKSk7CisgICAgICAgIEVYUEVD
VF9FUShzb3VyY2UubnVtVGlsZXNZKCksIGRlc3QubnVtVGlsZXNZKCkpOworICAgICAgICBFWFBF
Q1RfRVEoc291cmNlLnRvdGFsU2l6ZVgoKSwgZGVzdC50b3RhbFNpemVYKCkpOworICAgICAgICBF
WFBFQ1RfRVEoc291cmNlLnRvdGFsU2l6ZVkoKSwgZGVzdC50b3RhbFNpemVZKCkpOworICAgIH0K
K30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104376</attachid>
            <date>2011-08-18 12:01:09 -0700</date>
            <delta_ts>2011-08-18 13:40:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66065-20110818120108.patch</filename>
            <type>text/plain</type>
            <size>100893</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMDA4MDA1ZDViYTYwNDAy
ZGIzYTQ0ZGNjZmU2NjY1NTM5MGEyNmQxLi45NGJhYjYyN2ZjM2E0MjkzNWM5YTRlNDNjMjdiMWRh
Njc3Zjg2YTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEyIEBACisyMDExLTA4LTE3ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxp
dCB0aWxlciBpbnRvIG1haW4gdGhyZWFkIC8gY29tcG9zaXRvciB0aHJlYWQgdmVyc2lvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDY1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cy4KKworICAgICAgICBMYXllclRpbGVyQ2hyb21pdW0gaXMgcmVuYW1lZCB0
byBiZSBDQ0xheWVyVGlsaW5nRGF0YS4gSW52YWxpZGF0aW9uCisgICAgICAgIGFuZCBwYWludCBm
dW5jdGlvbmFsaXR5IGlzIHB1c2hlZCBpbnRvIFRpbGVkTGF5ZXJDaHJvbWl1bSBhbmQgZHJhd2lu
ZworICAgICAgICB3aXRoIEdMIGlzIHB1c2hlZCBpbnRvIENDVGlsZWRMYXllckltcGwuIER1cmlu
ZyB0cmVlIHN5bmNocm9uaXphdGlvbiwKKyAgICAgICAgdGhlIHRpbGVyIHByb3BlcnRpZXMgYW5k
IHRleHR1cmUgSURzIGFyZSBzeW5jaHJvbml6ZWQgaW50bworICAgICAgICBDQ1RpbGVkTGF5ZXJJ
bXBsLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6YmVzdFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGVB
QSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0
dXJlOjp0ZXh0dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpV
cGRhdGFibGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6ZGlydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6VXBkYXRhYmxlVGlsZTo6Y2xlYXJEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZU1hbmFnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp0aWxlQXQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVyZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRh
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpDQ0xheWVyVGlsaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6c2V0VGlsZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6YWRkVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVGlsaW5nRGF0YTo6dGFrZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRpbGluZ0RhdGE6OnRpbGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0
YTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmNvbnRlbnRS
ZWN0VG9UaWxlSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6
Y29udGVudFJlY3RUb0xheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5n
RGF0YTo6bGF5ZXJSZWN0VG9Db250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VGlsaW5nRGF0YTo6dGlsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
aWxpbmdEYXRhOjp0aWxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxp
bmdEYXRhOjpzZXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxp
bmdEYXRhOjpncm93TGF5ZXJUb0NvbnRhaW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpudW1UaWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUaWxpbmdEYXRhOjpudW1UaWxlc1kpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRpbGluZ0RhdGE6OnRpbGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGlu
Z0RhdGE6OnRleHR1cmVPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0Rh
dGE6OnRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpoYXNC
b3JkZXJUZXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmlzRW1w
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OlRpbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OmkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OmopOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVGlsaW5nRGF0YTo6VGlsZU1hcEtleVRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcEtleVRyYWl0czo6Y29uc3RydWN0RGVs
ZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFw
S2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGls
aW5nRGF0YTo6dGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjpE
cmF3YWJsZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjp0ZXh0dXJlSWQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjpzZXRUZXh0dXJlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnRpbGVBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZWRMYXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6
c2V0VGlsaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5j
VGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ0NXKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVFZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVyc2VjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3VGlsZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGlsZWRMYXllckltcGw6OnNldFNraXBzRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RpbGVkTGF5ZXJJbXBsOjpzZXRUZXh0dXJlT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaWxlZExheWVySW1wbDo6c2V0U2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oOgorCiAyMDExLTA4LTE2ICBKYW1lcyBS
b2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBEcmF3
IHRoZSByb290LyJub24tY29tcG9zaXRlZCBjb250ZW50IiBpbiBjb21wb3NpdG9yIHNpZGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA3YmRjNTk2YTlkY2E2YzM4MGI3NjRkYzI2NjE2OTBiODFjMDA1YzE1
Li5iZWE3YWQyZGRjY2E5NWNhM2I3ZGIwNWVhYjQyYTAzMWYxYzgwYzEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0zNTEwLDggKzM1MTAsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxl
ckNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUaWxlckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJv
bWl1bS5oJywKQEAgLTM1NjAsNiArMzU1OCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5n
RGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZDYzZWExNDYxZDA1N2Q5MDkyZTU4OWZmZTEyNWE5
MGM4NDBlNjYxZC4uODgxMmRmNjFjYmFhOWRjM2NmNTU1YjM4NjMwNWU2ZTM5OTVlNWVkZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTA0LDEyICsxMDQsMTIgQEAg
dm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogCiAgICAg
SW50UmVjdCBkaXJ0eSA9IGVuY2xvc2luZ0ludFJlY3QobV9kaXJ0eVJlY3QpOwogICAgIGRpcnR5
LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSkpOwotICAgIG1f
dGlsZXItPmludmFsaWRhdGVSZWN0KGRpcnR5KTsKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eSk7
CiAKICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Rp
bGVyLT5wcmVwYXJlVG9VcGRhdGUobGF5ZXJSZWN0LCB0ZXh0dXJlVXBkYXRlcigpKTsKKyAgICBw
cmVwYXJlVG9VcGRhdGUobGF5ZXJSZWN0KTsKICAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgp
OwogfQogCkBAIC0xMjIsNiArMTIyLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpCiB7CiAgICAgaWYgKG1fdGV4dHVyZVVwZGF0ZXIp
CiAgICAgICAgIHJldHVybjsKKwogI2lmIFVTRShTS0lBKQogICAgIGlmIChsYXllclJlbmRlcmVy
KCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nKSB7CiAgICAgICAgIG1fdGV4dHVyZVVw
ZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUobGF5ZXJSZW5kZXJl
ckNvbnRleHQoKSwgQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBsYXllclJl
bmRlcmVyKCktPnNraWFDb250ZXh0KCkpOwpAQCAtMTMxLDEwICsxMzIsNSBAQCB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCkKICAgICBtX3Rl
eHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKGxheWVyUmVu
ZGVyZXJDb250ZXh0KCksIENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgbGF5
ZXJSZW5kZXJlcigpLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7CiB9CiAKLXZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCkKLXsKLSAgICBtX3Rp
bGVyLT5wcm90ZWN0VGlsZVRleHR1cmVzKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVu
dEJvdW5kcygpKSk7Ci19Ci0KIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBjOWZkMGQ4NWNlOGViMzIz
YTEyZjkwMTJiYmUyZjI0M2RmNzgyNDIwLi5hMGU5NmMzNGEyMGQ1NDJhMWRhNmU4NzE2MDU1ODRj
MGY5MWVlYzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTYwLDcgKzYw
LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKICAgICB2aXJ0
dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0dXJlVXBkYXRlci5nZXQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBwcm90ZWN0VmlzaWJs
ZVRpbGVUZXh0dXJlcygpOwogCiAgICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fdGV4
dHVyZVVwZGF0ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNmU3
YTkzYzAwNmFjMWJjYTdkZTQyNzhiNGY0NzNkMWE1YzliNzI3Yi4uYTExMWEyYzczY2I4N2NlZTc0
OWYwZjYxMmRlYjRlMTQxYTRjYjc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3Bw
CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KCkKICAgICAgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKICAg
ICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKICAg
ICAgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1fdGlsZXIt
PmludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlUmVjdChw
YWludFJlY3QpOwogICAgICAgICAgICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KCkKICAgICBpZiAodmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aWxlci0+cHJlcGFyZVRvVXBkYXRlKHZpc2li
bGVMYXllclJlY3QoKSwgbV90ZXh0dXJlVXBkYXRlci5nZXQoKSk7CisgICAgcHJlcGFyZVRvVXBk
YXRlKHZpc2libGVMYXllclJlY3QoKSk7CiB9CiAKIExheWVyVGV4dHVyZVVwZGF0ZXIqIEltYWdl
TGF5ZXJDaHJvbWl1bTo6dGV4dHVyZVVwZGF0ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggM2EyODkxMTAwZDY5M2JhNjBlMTE4M2U5MGFmYjViZDAz
ODg5YjJlOC4uYmJiNjAzZjNhZmIyNWZjN2ZlYjE3MTVhZDZkZGNiZWQwYmY2OTEwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAtNTIy
LDYgKzUyMywxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVRleHR1cmVz
KCkKICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1
cmVzKG1fY29udGV4dC5nZXQoKSk7CiB9CiAKK0dDM0RlbnVtIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6YmVzdFRleHR1cmVGb3JtYXQoKQoreworICAgIHJldHVybiBQbGF0Zm9ybUNvbG9yOjpiZXN0
VGV4dHVyZUZvcm1hdChjb250ZXh0KCkpOworfQorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dmlld3BvcnRDaGFuZ2VkKCkKIHsKICAgICBpZiAobV9jb250ZXh0KQpAQCAtMTEwNiw3ICsx
MTEyLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmpl
Y3RzKCkKICAgICAvLyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhlciBwcm9ncmFt
cyBhcmUgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLgogICAgIG1fc2hhcmVkR2VvbWV0
cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkpOwogICAg
IG1fcmVuZGVyU3VyZmFjZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlOjpQ
cm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIG1fdGlsZXJQcm9ncmFtID0gYWRvcHRQdHIo
bmV3IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBt
X3RpbGVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtKG1f
Y29udGV4dC5nZXQoKSkpOwogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5m
bHVzaCgpKTsKIApAQCAtMTE2Miw3ICsxMTY4LDcgQEAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpN
YXNrUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJmYWNlTWFza1Byb2cK
ICAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0uZ2V0KCk7CiB9CiAKLWNvbnN0
IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxl
clByb2dyYW0oKQorY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp0aWxlclByb2dyYW0oKQogewogICAgIEFTU0VSVChtX3RpbGVyUHJvZ3JhbSk7
CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewpAQCAtMTE3MiwxMCAr
MTE3OCwxMCBAQCBjb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0qIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtKCkKICAgICByZXR1cm4gbV90aWxlclByb2dyYW0uZ2V0
KCk7CiB9CiAKLWNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGUqIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZSgpCitjb25zdCBDQ1RpbGVkTGF5
ZXJJbXBsOjpQcm9ncmFtU3dpenpsZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dy
YW1Td2l6emxlKCkKIHsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dpenpsZSkKLSAgICAgICAg
bV90aWxlclByb2dyYW1Td2l6emxlID0gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bTo6
UHJvZ3JhbVN3aXp6bGUobV9jb250ZXh0LmdldCgpKSk7CisgICAgICAgIG1fdGlsZXJQcm9ncmFt
U3dpenpsZSA9IGFkb3B0UHRyKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZSht
X2NvbnRleHQuZ2V0KCkpKTsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dpenpsZS0+aW5pdGlh
bGl6ZWQoKSkgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0
aWxlclByb2dyYW1Td2l6emxlOjppbml0aWFsaXplIiwgdGhpcywgMCk7CiAgICAgICAgIG1fdGls
ZXJQcm9ncmFtU3dpenpsZS0+aW5pdGlhbGl6ZSgpOwpAQCAtMTE4MywxMCArMTE4OSwxMCBAQCBj
b25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlKiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnRpbGVyUHJvZ3JhbVN3aQogICAgIHJldHVybiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGUu
Z2V0KCk7CiB9CiAKLWNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBKiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbUFBKCkKK2NvbnN0IENDVGlsZWRMYXllckltcGw6
OlByb2dyYW1BQSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQSgpCiB7CiAg
ICAgaWYgKCFtX3RpbGVyUHJvZ3JhbUFBKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbUFBID0gYWRv
cHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBKG1fY29udGV4dC5nZXQoKSkp
OworICAgICAgICBtX3RpbGVyUHJvZ3JhbUFBID0gYWRvcHRQdHIobmV3IENDVGlsZWRMYXllcklt
cGw6OlByb2dyYW1BQShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFt
QUEtPmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dGlsZXJQcm9ncmFtQUE6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKICAgICAgICAg
bV90aWxlclByb2dyYW1BQS0+aW5pdGlhbGl6ZSgpOwpAQCAtMTE5NCwxMCArMTIwMCwxMCBAQCBj
b25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1BQSogTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp0aWxlclByb2dyYW1BQSgpCiAgICAgcmV0dXJuIG1fdGlsZXJQcm9ncmFtQUEuZ2V0KCk7CiB9
CiAKLWNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGVBQSogTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlQUEoKQorY29uc3QgQ0NUaWxlZExheWVy
SW1wbDo6UHJvZ3JhbVN3aXp6bGVBQSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dy
YW1Td2l6emxlQUEoKQogewogICAgIGlmICghbV90aWxlclByb2dyYW1Td2l6emxlQUEpCi0gICAg
ICAgIG1fdGlsZXJQcm9ncmFtU3dpenpsZUFBID0gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJv
bWl1bTo6UHJvZ3JhbVN3aXp6bGVBQShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgbV90aWxl
clByb2dyYW1Td2l6emxlQUEgPSBhZG9wdFB0cihuZXcgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3Jh
bVN3aXp6bGVBQShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dp
enpsZUFBLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRl
cmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGVBQTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDAp
OwogICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQS0+aW5pdGlhbGl6ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA0MTdmODIyZGUzMWZjNTI5N2NhNDNhNmE0
MzJmZjU2MjBlNmNhNDViLi5iZTIzZDUyYjYyN2M2MzVmNTc5ODE1OTkxODcyZTEzYjc1ZmY2M2Jh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMzcsNyArMzcsNiBAQAog
I2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZh
c0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKQEAgLTEyNCwx
MCArMTIzLDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBDQ0hlYWRzVXBEaXNwbGF5OjpQcm9ncmFt
KiBoZWFkc1VwRGlzcGxheVByb2dyYW0oKTsKICAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6OlBy
b2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CiAgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNl
OjpNYXNrUHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7Ci0gICAgY29uc3QgTGF5
ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiB0aWxlclByb2dyYW0oKTsKLSAgICBjb25zdCBMYXll
clRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlKiB0aWxlclByb2dyYW1Td2l6emxlKCk7Ci0g
ICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtQUEqIHRpbGVyUHJvZ3JhbUFBKCk7
Ci0gICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZUFBKiB0aWxlclBy
b2dyYW1Td2l6emxlQUEoKTsKKyAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtKiB0
aWxlclByb2dyYW0oKTsKKyAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenps
ZSogdGlsZXJQcm9ncmFtU3dpenpsZSgpOworICAgIGNvbnN0IENDVGlsZWRMYXllckltcGw6OlBy
b2dyYW1BQSogdGlsZXJQcm9ncmFtQUEoKTsKKyAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQ
cm9ncmFtU3dpenpsZUFBKiB0aWxlclByb2dyYW1Td2l6emxlQUEoKTsKICAgICBjb25zdCBDQ0Nh
bnZhc0xheWVySW1wbDo6UHJvZ3JhbSogY2FudmFzTGF5ZXJQcm9ncmFtKCk7CiAgICAgY29uc3Qg
Q0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0qIHBsdWdpbkxheWVyUHJvZ3JhbSgpOwogICAgIGNv
bnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dyYW0o
KTsKQEAgLTE1NCw2ICsxNTMsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldExheWVyUmVuZGVy
ZXJSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSopOwogCisgICAgR0MzRGVudW0gYmVzdFRleHR1cmVG
b3JtYXQoKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9vbCBzX2luUGFpbnRMYXll
ckNvbnRlbnRzOwogI2VuZGlmCkBAIC0yMTgsMTAgKzIxOSwxMCBAQCBwcml2YXRlOgogICAgIE93
blB0cjxHZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2VvbWV0cnk7CiAgICAgT3duUHRyPExheWVy
Q2hyb21pdW06OkJvcmRlclByb2dyYW0+IG1fYm9yZGVyUHJvZ3JhbTsKICAgICBPd25QdHI8Q0NI
ZWFkc1VwRGlzcGxheTo6UHJvZ3JhbT4gbV9oZWFkc1VwRGlzcGxheVByb2dyYW07Ci0gICAgT3du
UHRyPExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbT4gbV90aWxlclByb2dyYW07Ci0gICAgT3du
UHRyPExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGU+IG1fdGlsZXJQcm9ncmFtU3dp
enpsZTsKLSAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtQUE+IG1fdGlsZXJQ
cm9ncmFtQUE7Ci0gICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGVB
QT4gbV90aWxlclByb2dyYW1Td2l6emxlQUE7CisgICAgT3duUHRyPENDVGlsZWRMYXllckltcGw6
OlByb2dyYW0+IG1fdGlsZXJQcm9ncmFtOworICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsOjpQ
cm9ncmFtU3dpenpsZT4gbV90aWxlclByb2dyYW1Td2l6emxlOworICAgIE93blB0cjxDQ1RpbGVk
TGF5ZXJJbXBsOjpQcm9ncmFtQUE+IG1fdGlsZXJQcm9ncmFtQUE7CisgICAgT3duUHRyPENDVGls
ZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlQUE+IG1fdGlsZXJQcm9ncmFtU3dpenpsZUFBOwog
ICAgIE93blB0cjxDQ0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbT4gbV9jYW52YXNMYXllclByb2dy
YW07CiAgICAgT3duUHRyPENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtPiBtX3BsdWdpbkxheWVy
UHJvZ3JhbTsKICAgICBPd25QdHI8Q0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbT4gbV9yZW5k
ZXJTdXJmYWNlTWFza1Byb2dyYW07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKaW5kZXgg
MjFkNTJkMDJhNWEyMWI2MTExZjc4YjU0MGFlYzY4YzM0N2EwOWVmYS4uOTc2ZDc5ZWM5OTNiM2Zh
ZTkyNTgxYmUyM2UzOGEzZWI0ZDFjNmY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIu
aApAQCAtMzAsNiArMzAsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAog
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc4LDQgKzc5LDMgQEAgcHJpdmF0ZToKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAjZW5kaWYgLy8gTGF5ZXJUZXh0dXJlVXBkYXRlcl9oCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVy
Q2hyb21pdW0uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmQ5NmY5MjNiNjA3
MDAzZmUzNDkxMDlmYTk4YjE3MmNkYjBmMTRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCi0KLSNpbmNsdWRl
ICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0j
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTWFuYWdlZFRleHR1
cmUuaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1Db2xvci5oIgotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEZsb2F0UG9pbnQzRCBFZGdlOwot
Ci1QYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVh
dGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0
aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQotewotICAgIGlmICghbGF5ZXJSZW5k
ZXJlciB8fCB0aWxlU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW0obGF5ZXJSZW5kZXJlciwg
dGlsZVNpemUsIGJvcmRlcikpOwotfQotCi1MYXllclRpbGVyQ2hyb21pdW06OkxheWVyVGlsZXJD
aHJvbWl1bShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNp
emUmIHRpbGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCi0gICAgOiBtX3RleHR1cmVG
b3JtYXQoUGxhdGZvcm1Db2xvcjo6YmVzdFRleHR1cmVGb3JtYXQobGF5ZXJSZW5kZXJlci0+Y29u
dGV4dCgpKSkKLSAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQotICAgICwgbV90ZXh0dXJlT3JpZW50
YXRpb24oTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SW52YWxpZE9yaWVudGF0aW9uKQotICAgICwgbV9z
YW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0
SW52YWxpZCkKLSAgICAsIG1fdGlsaW5nRGF0YShtYXgodGlsZVNpemUud2lkdGgoKSwgdGlsZVNp
emUuaGVpZ2h0KCkpLCAwLCAwLCBib3JkZXIgPT0gSGFzQm9yZGVyVGV4ZWxzKQotICAgICwgbV9s
YXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIpCi17Ci0gICAgc2V0VGlsZVNpemUodGlsZVNpemUp
OwotfQotCi1MYXllclRpbGVyQ2hyb21pdW06On5MYXllclRpbGVyQ2hyb21pdW0oKQotewotICAg
IHJlc2V0KCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEKiBMYXllclRpbGVyQ2hyb21pdW06Omxh
eWVyUmVuZGVyZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigp
KTsKLSAgICByZXR1cm4gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7Ci19Ci0KLXZvaWQgTGF5
ZXJUaWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAg
IGlmIChtX3RpbGVTaXplID09IHNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc2V0KCk7
Ci0KLSAgICBtX3RpbGVTaXplID0gc2l6ZTsKLSAgICBtX3RpbGluZ0RhdGEuc2V0TWF4VGV4dHVy
ZVNpemUobWF4KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotfQotCi1NYW5hZ2VkVGV4
dHVyZSogTGF5ZXJUaWxlckNocm9taXVtOjpnZXRTaW5nbGVUZXh0dXJlKCkKLXsKLSAgICBpZiAo
bV90aWxpbmdEYXRhLm51bVRpbGVzKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBU
aWxlKiB0aWxlID0gdGlsZUF0KDAsIDApOwotICAgIHJldHVybiB0aWxlID8gdGlsZS0+dGV4dHVy
ZSgpIDogMDsKLX0KLQotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0KCkKLXsKLSAgICBt
X3RpbGVzLmNsZWFyKCk7Ci0gICAgbV91bnVzZWRUaWxlcy5jbGVhcigpOwotICAgIG1fdGlsaW5n
RGF0YS5zZXRUb3RhbFNpemUoMCwgMCk7Ci0gICAgbV9wYWludFJlY3QgPSBJbnRSZWN0KCk7Ci0g
ICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwotfQotCi1MYXllclRpbGVyQ2hyb21pdW06OlRp
bGUqIExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCi17Ci0gICAg
QVNTRVJUKCF0aWxlQXQoaSwgaikpOwotCi0gICAgUmVmUHRyPFRpbGU+IHRpbGU7Ci0gICAgaWYg
KG1fdW51c2VkVGlsZXMuc2l6ZSgpID4gMCkgewotICAgICAgICB0aWxlID0gbV91bnVzZWRUaWxl
cy5sYXN0KCkucmVsZWFzZSgpOwotICAgICAgICBtX3VudXNlZFRpbGVzLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgQVNTRVJUKHRpbGUtPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIgPSBsYXllclJlbmRlcmVyKCktPmNvbnRlbnRz
VGV4dHVyZU1hbmFnZXIoKTsKLSAgICAgICAgdGlsZSA9IGFkb3B0UmVmKG5ldyBUaWxlKE1hbmFn
ZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKLSAgICB9Ci0gICAgbV90aWxlcy5hZGQobWFr
ZV9wYWlyKGksIGopLCB0aWxlKTsKLQotICAgIHRpbGUtPm1vdmVUbyhpLCBqKTsKLSAgICB0aWxl
LT5tX2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVjdCh0aWxlLmdldCgpKTsKLQotICAgIHJl
dHVybiB0aWxlLmdldCgpOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0
ZVRpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotewotICAgIGlmICghbV90aWxlcy5z
aXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxUaWxlTWFwS2V5PiByZW1vdmVL
ZXlzOwotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fdGlsZXMuYmVnaW4oKTsg
aXRlciAhPSBtX3RpbGVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgVGlsZSogdGlsZSA9IGl0
ZXItPnNlY29uZC5nZXQoKTsKLSAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVDb250ZW50
UmVjdCh0aWxlKTsKLSAgICAgICAgaWYgKHRpbGVSZWN0LmludGVyc2VjdHMoY29udGVudFJlY3Qp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJlbW92ZUtleXMuYXBwZW5kKGl0ZXIt
PmZpcnN0KTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbW92ZUtleXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1fdW51c2VkVGlsZXMuYXBwZW5kKG1fdGlsZXMudGFrZShy
ZW1vdmVLZXlzW2ldKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpjb250ZW50UmVj
dFRvVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGludCYgbGVmdCwgaW50
JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdAotewotICAgIGNvbnN0IEludFJl
Y3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7Ci0KLSAg
ICBsZWZ0ID0gbV90aWxpbmdEYXRhLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0Lngo
KSk7Ci0gICAgdG9wID0gbV90aWxpbmdEYXRhLnRpbGVZSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJS
ZWN0LnkoKSk7Ci0gICAgcmlnaHQgPSBtX3RpbGluZ0RhdGEudGlsZVhJbmRleEZyb21TcmNDb29y
ZChsYXllclJlY3QubWF4WCgpIC0gMSk7Ci0gICAgYm90dG9tID0gbV90aWxpbmdEYXRhLnRpbGVZ
SW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0Lm1heFkoKSAtIDEpOwotfQotCi1JbnRSZWN0IExh
eWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJlY3RUb0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb3MoY29udGVudFJlY3QueCgpIC0g
bV9sYXllclBvc2l0aW9uLngoKSwgY29udGVudFJlY3QueSgpIC0gbV9sYXllclBvc2l0aW9uLnko
KSk7Ci0gICAgSW50UmVjdCBsYXllclJlY3QocG9zLCBjb250ZW50UmVjdC5zaXplKCkpOwotCi0g
ICAgLy8gQ2xpcCB0byB0aGUgcG9zaXRpb24uCi0gICAgaWYgKHBvcy54KCkgPCAwIHx8IHBvcy55
KCkgPCAwKQotICAgICAgICBsYXllclJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRT
aXplKGNvbnRlbnRSZWN0LndpZHRoKCkgKyBwb3MueCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSAr
IHBvcy55KCkpKTsKLSAgICByZXR1cm4gbGF5ZXJSZWN0OwotfQotCi1JbnRSZWN0IExheWVyVGls
ZXJDaHJvbWl1bTo6bGF5ZXJSZWN0VG9Db250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBsYXllclJl
Y3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGxheWVyUmVjdDsKLSAgICBj
b250ZW50UmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQb3NpdGlvbi55KCkp
OwotICAgIHJldHVybiBjb250ZW50UmVjdDsKLX0KLQotTGF5ZXJUaWxlckNocm9taXVtOjpUaWxl
KiBMYXllclRpbGVyQ2hyb21pdW06OnRpbGVBdChpbnQgaSwgaW50IGopIGNvbnN0Ci17Ci0gICAg
VGlsZSogdGlsZSA9IG1fdGlsZXMuZ2V0KG1ha2VfcGFpcihpLCBqKSkuZ2V0KCk7Ci0gICAgQVNT
RVJUKCF0aWxlIHx8IHRpbGUtPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgcmV0dXJuIHRpbGU7Ci19
Ci0KLUludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjp0aWxlQ29udGVudFJlY3QoY29uc3QgVGls
ZSogdGlsZSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdGlsZUxheWVyUmVj
dCh0aWxlKTsKLSAgICBjb250ZW50UmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5
ZXJQb3NpdGlvbi55KCkpOwotICAgIHJldHVybiBjb250ZW50UmVjdDsKLX0KLQotSW50UmVjdCBM
YXllclRpbGVyQ2hyb21pdW06OnRpbGVMYXllclJlY3QoY29uc3QgVGlsZSogdGlsZSkgY29uc3QK
LXsKLSAgICBjb25zdCBpbnQgaW5kZXggPSBtX3RpbGluZ0RhdGEudGlsZUluZGV4KHRpbGUtPmko
KSwgdGlsZS0+aigpKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsaW5nRGF0YS50aWxl
Qm91bmRzV2l0aEJvcmRlcihpbmRleCk7Ci0gICAgbGF5ZXJSZWN0LnNldFNpemUobV90aWxlU2l6
ZSk7Ci0gICAgcmV0dXJuIGxheWVyUmVjdDsKLX0KLQotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06
OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotewotICAgIGlmIChj
b250ZW50UmVjdC5pc0VtcHR5KCkgfHwgbV9za2lwc0RyYXcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7Ci0KLSAgICAvLyBEaXJ0eSByZWN0
cyBhcmUgYWx3YXlzIGluIGxheWVyIHNwYWNlLCBhcyB0aGUgbGF5ZXIgY291bGQgYmUgcmVwb3Np
dGlvbmVkCi0gICAgLy8gYWZ0ZXIgaW52YWxpZGF0aW9uLgotICAgIGNvbnN0IEludFJlY3QgbGF5
ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7Ci0KLSAgICBpbnQg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhj
b250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICBmb3IgKGludCBqID0g
dG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9
IHJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgIFRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7Ci0g
ICAgICAgICAgICBpZiAoIXRpbGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBJbnRSZWN0IGJvdW5kID0gdGlsZUxheWVyUmVjdCh0aWxlKTsKLSAgICAgICAgICAgIGJv
dW5kLmludGVyc2VjdChsYXllclJlY3QpOwotICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxheWVy
UmVjdC51bml0ZShib3VuZCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjppbnZhbGlkYXRlRW50aXJlTGF5ZXIoKQotewotICAgIGZvciAoVGlsZU1hcDo6
aXRlcmF0b3IgaXRlciA9IG1fdGlsZXMuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVzLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXItPnNlY29uZC0+cmVmQ291bnQoKSA9PSAxKTsK
LSAgICAgICAgbV91bnVzZWRUaWxlcy5hcHBlbmQoaXRlci0+c2Vjb25kLnJlbGVhc2UoKSk7Ci0g
ICAgfQotICAgIG1fdGlsZXMuY2xlYXIoKTsKLQotICAgIG1fdGlsaW5nRGF0YS5zZXRUb3RhbFNp
emUoMCwgMCk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1
cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQotewotICAgIGlmIChjb250ZW50UmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b207Ci0gICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b20pOwotCi0gICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207
ICsraikgewotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7Ci0g
ICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAgICAgICAgaWYgKCF0
aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlU2l6ZSwgbV90ZXh0dXJlRm9y
bWF0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgdGlsZS0+dGV4
dHVyZSgpLT5yZXNlcnZlKG1fdGlsZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRh
dGVyKQotewotICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7Ci0KLSAgICBpZiAoY29udGVudFJlY3Qu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEludmFsaWRhdGUgb2xkIHRpbGVzIHRoYXQgd2VyZSBw
cmV2aW91c2x5IHVzZWQgYnV0IGFyZW4ndCBpbiB1c2UgdGhpcwotICAgIC8vIGZyYW1lIHNvIHRo
YXQgdGhleSBjYW4gZ2V0IHJldXNlZCBmb3IgbmV3IHRpbGVzLgotICAgIGludmFsaWRhdGVUaWxl
cyhjb250ZW50UmVjdCk7Ci0gICAgZ3Jvd0xheWVyVG9Db250YWluKGNvbnRlbnRSZWN0KTsKLQot
ICAgIGlmICghbnVtVGlsZXMoKSkgewotICAgICAgICBtX3VwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgdGlsZXMgYXMgbmVlZGVk
LCBleHBhbmRpbmcgYSBkaXJ0eSByZWN0IHRvIGNvbnRhaW4gYWxsCi0gICAgLy8gdGhlIGRpcnR5
IHJlZ2lvbnMgY3VycmVudGx5IGJlaW5nIGRyYXduLgotICAgIEludFJlY3QgZGlydHlMYXllclJl
Y3Q7Ci0gICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBjb250ZW50UmVjdFRv
VGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewotICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0gdGls
ZUF0KGksIGopOwotICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIHRpbGUg
PSBjcmVhdGVUaWxlKGksIGopOwotCi0gICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+
aXNWYWxpZChtX3RpbGVTaXplLCBtX3RleHR1cmVGb3JtYXQpKQotICAgICAgICAgICAgICAgIHRp
bGUtPm1fZGlydHlMYXllclJlY3QgPSB0aWxlTGF5ZXJSZWN0KHRpbGUpOwotCi0gICAgICAgICAg
ICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVTaXplLCBtX3RleHR1cmVGb3Jt
YXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIHJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBkaXJ0eUxheWVyUmVjdC51bml0ZSh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWlu
dCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKLSAgICAvLyBtYXkgZW5k
IHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0
LiBSZWNvcmQKLSAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBsb2FkIG1v
cmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCi0gICAgbV91cGRhdGVSZWN0ID0gY29udGVudFJlY3Q7
Ci0KLSAgICBtX3BhaW50UmVjdCA9IGxheWVyUmVjdFRvQ29udGVudFJlY3QoZGlydHlMYXllclJl
Y3QpOwotICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHRleHR1cmVVcGRhdGVyLT5wcmVwYXJlVG9VcGRhdGUobV9wYWludFJlY3QsIG1fdGls
ZVNpemUsIG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjp1cGRhdGVSZWN0KExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVy
KQotewotICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRvIGdldCB0dXJu
ZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBpbnZhbGlkYXRlZCBt
aWQtdXBkYXRlLgotICAgIGlmICghbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVgoKSB8fCAhbV90aWxp
bmdEYXRhLnRvdGFsU2l6ZVkoKSB8fCBtX3VwZGF0ZVJlY3QuaXNFbXB0eSgpIHx8ICFudW1UaWxl
cygpIHx8IG1fc2tpcHNEcmF3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Ci0gICAgbV90ZXh0dXJlT3Jp
ZW50YXRpb24gPSB0ZXh0dXJlVXBkYXRlci0+b3JpZW50YXRpb24oKTsKLSAgICBtX3NhbXBsZWRU
ZXhlbEZvcm1hdCA9IHRleHR1cmVVcGRhdGVyLT5zYW1wbGVkVGV4ZWxGb3JtYXQobV90ZXh0dXJl
Rm9ybWF0KTsKLQotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0gICAgY29udGVu
dFJlY3RUb1RpbGVJbmRpY2VzKG1fdXBkYXRlUmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
KTsKLSAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgIFRpbGUqIHRp
bGUgPSB0aWxlQXQoaSwgaik7Ci0gICAgICAgICAgICBpZiAoIXRpbGUpCi0gICAgICAgICAgICAg
ICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7Ci0gICAgICAgICAgICBlbHNlIGlmICghdGlsZS0+
ZGlydHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gQ2Fs
Y3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIGNvcHkgZnJvbS4KLSAgICAgICAgICAgIElu
dFJlY3Qgc291cmNlUmVjdCA9IHRpbGVDb250ZW50UmVjdCh0aWxlKTsKLSAgICAgICAgICAgIGNv
bnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLSAgICAgICAgICAg
IHNvdXJjZVJlY3QuaW50ZXJzZWN0KGxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0
eUxheWVyUmVjdCkpOwotICAgICAgICAgICAgLy8gUGFpbnQgcmVjdCBub3QgZ3VhcmFudGVlZCB0
byBsaW5lIHVwIG9uIHRpbGUgYm91bmRhcmllcywgc28KLSAgICAgICAgICAgIC8vIG1ha2Ugc3Vy
ZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4KLSAgICAgICAg
ICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fcGFpbnRSZWN0KTsKLSAgICAgICAgICAgIGlmIChz
b3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgQVNTRVJUKHRpbGUtPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKTsKLQotICAgICAgICAg
ICAgLy8gQ2FsY3VsYXRlIHRpbGUtc3BhY2UgcmVjdGFuZ2xlIHRvIHVwbG9hZCBpbnRvLgotICAg
ICAgICAgICAgSW50UmVjdCBkZXN0UmVjdChJbnRQb2ludChzb3VyY2VSZWN0LngoKSAtIGFuY2hv
ci54KCksIHNvdXJjZVJlY3QueSgpIC0gYW5jaG9yLnkoKSksIHNvdXJjZVJlY3Quc2l6ZSgpKTsK
LSAgICAgICAgICAgIGlmIChkZXN0UmVjdC54KCkgPCAwKQotICAgICAgICAgICAgICAgIENSQVNI
KCk7Ci0gICAgICAgICAgICBpZiAoZGVzdFJlY3QueSgpIDwgMCkKLSAgICAgICAgICAgICAgICBD
UkFTSCgpOwotCi0gICAgICAgICAgICAvLyBPZmZzZXQgZnJvbSBwYWludCByZWN0YW5nbGUgdG8g
dGhpcyB0aWxlJ3MgZGlydHkgcmVjdGFuZ2xlLgotICAgICAgICAgICAgSW50UG9pbnQgcGFpbnRP
ZmZzZXQoc291cmNlUmVjdC54KCkgLSBtX3BhaW50UmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0g
bV9wYWludFJlY3QueSgpKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgPCAwKQot
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgp
IDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zm
c2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPiBtX3BhaW50UmVjdC53aWR0aCgpKQotICAgICAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpICsgZGVz
dFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICBD
UkFTSCgpOwotCi0gICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRl
eHQpOwotICAgICAgICAgICAgY29uc3QgR0MzRGludCBmaWx0ZXIgPSBtX3RpbGluZ0RhdGEuYm9y
ZGVyVGV4ZWxzKCkgPyBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0
M0Q6Ok5FQVJFU1Q7Ci0gICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVyKSk7Ci0gICAgICAgICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyKSk7Ci0gICAgICAgICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDApKTsKLQotICAgICAgICAgICAgdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZVRleHR1cmVS
ZWN0KHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOwotICAgICAgICAgICAg
dGlsZS0+Y2xlYXJEaXJ0eSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6c2V0TGF5ZXJQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgbGF5ZXJQb3NpdGlv
bikKLXsKLSAgICBtX2xheWVyUG9zaXRpb24gPSBsYXllclBvc2l0aW9uOwotfQotCi12b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSkKLXsK
LSAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fdGlsZXMuc2l6ZSgpIHx8IGNvbnRlbnRSZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgZGVmaW5lZChPU19DSFJPTUVPUykKLSAg
ICAvLyBGSVhNRTogRGlzYWJsZSBhbnRpLWFsaWFzaW5nIHRvIHdvcmthcm91bmQgYnJva2VuIGRy
aXZlci4KLSAgICBib29sIHVzZUFBID0gZmFsc2U7Ci0jZWxzZQotICAgIC8vIFVzZSBhbnRpLWFs
aWFzaW5nIHByb2dyYW1zIHdoZW4gYm9yZGVyIHRleGVscyBhcmUgcHJlc2V0IGFuZCB0cmFuc2Zv
cm0KLSAgICAvLyBpcyBub3QgYW4gaW50ZWdlciB0cmFuc2xhdGlvbi4KLSAgICBib29sIHVzZUFB
ID0gKG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSAmJiAhZ2xvYmFsVHJhbnNmb3JtLmlzSW50
ZWdlclRyYW5zbGF0aW9uKCkpOwotI2VuZGlmCi0KLSAgICBzd2l0Y2ggKG1fc2FtcGxlZFRleGVs
Rm9ybWF0KSB7Ci0gICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXRSR0JBOgotICAgICAgICBpZiAodXNlQUEpCi0gICAgICAgICAgICBkcmF3VGlsZXMoY29udGVu
dFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclBy
b2dyYW1BQSgpLCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbUFBKCktPmZyYWdtZW50U2hh
ZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBsYXllclJlbmRlcmVyKCktPnRp
bGVyUHJvZ3JhbUFBKCktPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBkcmF3VGlsZXMoY29udGVudFJlY3QsIGdsb2JhbFRyYW5zZm9y
bSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW0oKSwgLTEsIC0xKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxG
b3JtYXRCR1JBOgotICAgICAgICBpZiAodXNlQUEpCi0gICAgICAgICAgICBkcmF3VGlsZXMoY29u
dGVudFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxl
clByb2dyYW1Td2l6emxlQUEoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6emxl
QUEoKS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIGxh
eWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCktPmZyYWdtZW50U2hhZGVyKCku
ZWRnZUxvY2F0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3VGlsZXMoY29u
dGVudFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxl
clByb2dyYW1Td2l6emxlKCksIC0xLCAtMSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBMYXllclRp
bGVyQ2hyb21pdW06Omdyb3dMYXllclRvQ29udGFpbihjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkKLXsKLSAgICAvLyBHcm93IHRoZSB0aWxlIGFycmF5IHRvIGNvbnRhaW4gdGhpcyBjb250ZW50
IHJlY3QuCi0gICAgSW50UmVjdCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNv
bnRlbnRSZWN0KTsKLSAgICBJbnRTaXplIHJlY3RTaXplID0gSW50U2l6ZShsYXllclJlY3QubWF4
WCgpLCBsYXllclJlY3QubWF4WSgpKTsKLQotICAgIEludFNpemUgb2xkTGF5ZXJTaXplKG1fdGls
aW5nRGF0YS50b3RhbFNpemVYKCksIG1fdGlsaW5nRGF0YS50b3RhbFNpemVZKCkpOwotICAgIElu
dFNpemUgbmV3U2l6ZSA9IHJlY3RTaXplLmV4cGFuZGVkVG8ob2xkTGF5ZXJTaXplKTsKLSAgICBt
X3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQo
KSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzQ0NXKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKLXsKLSAg
ICBGbG9hdFBvaW50IHYxID0gRmxvYXRQb2ludChxdWFkLnAyKCkueCgpIC0gcXVhZC5wMSgpLngo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkLnAyKCkueSgpIC0gcXVhZC5w
MSgpLnkoKSk7Ci0gICAgRmxvYXRQb2ludCB2MiA9IEZsb2F0UG9pbnQocXVhZC5wMygpLngoKSAt
IHF1YWQucDIoKS54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5wMygp
LnkoKSAtIHF1YWQucDIoKS55KCkpOwotICAgIHJldHVybiAodjEueCgpICogdjIueSgpIC0gdjEu
eSgpICogdjIueCgpKSA8IDA7Ci19Ci0KLXN0YXRpYyBFZGdlIGNvbXB1dGVFZGdlKGNvbnN0IEZs
b2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIHEsIGZsb2F0IHNpZ24pCi17Ci0gICAgQVNT
RVJUKHAgIT0gcSk7Ci0KLSAgICBGbG9hdFBvaW50IHRhbmdlbnQocC55KCkgLSBxLnkoKSwgcS54
KCkgLSBwLngoKSk7Ci0gICAgZmxvYXQgc2NhbGUgPSBzaWduIC8gdGFuZ2VudC5sZW5ndGgoKTsK
LSAgICBmbG9hdCBjcm9zczIgPSBwLngoKSAqIHEueSgpIC0gcS54KCkgKiBwLnkoKTsKLQotICAg
IHJldHVybiBFZGdlKHRhbmdlbnQueCgpICogc2NhbGUsCi0gICAgICAgICAgICAgICAgdGFuZ2Vu
dC55KCkgKiBzY2FsZSwKLSAgICAgICAgICAgICAgICBjcm9zczIgKiBzY2FsZSk7Ci19Ci0KLXN0
YXRpYyBGbG9hdFBvaW50IGludGVyc2VjdChjb25zdCBFZGdlJiBhLCBjb25zdCBFZGdlJiBiKQot
ewotICAgIHJldHVybiBGbG9hdFBvaW50KAotICAgICAgICAoYS55KCkgKiBiLnooKSAtIGIueSgp
ICogYS56KCkpIC8gKGEueCgpICogYi55KCkgLSBiLngoKSAqIGEueSgpKSwKLSAgICAgICAgKGEu
eCgpICogYi56KCkgLSBiLngoKSAqIGEueigpKSAvIChiLngoKSAqIGEueSgpIC0gYS54KCkgKiBi
LnkoKSkpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVt
OjpkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dy
YW0sIGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKQot
ewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChsYXllclJlbmRlcmVyKCktPndpbmRv
d01hdHJpeCgpICogbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCkgKiBnbG9iYWxU
cmFuc2Zvcm0pOwotCi0gICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBaIGNvbXBvbmVudC4KLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXhYWVcgPQotICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeChtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgMCwgbWF0cml4Lm0xNCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgMCwg
bWF0cml4Lm0yNCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgubTMxKCks
IG1hdHJpeC5tMzIoKSwgMSwgbWF0cml4Lm0zNCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgMCwgbWF0cml4Lm00NCgpKTsKLQotICAg
IC8vIERvbid0IGRyYXcgYW55IHRpbGVzIHdoZW4gbWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlLgot
ICAgIGlmICghbWF0cml4WFlXLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlID0gbWF0cml4WFlXLmludmVyc2UoKTsKLQot
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsK
LSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkp
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLQotICAgIC8v
IE1hcCBjb250ZW50IHJlY3RhbmdsZSB0byBkZXZpY2Ugc3BhY2UuCi0gICAgRmxvYXRRdWFkIGRl
dmljZVF1YWQgPSBtYXRyaXgubWFwUXVhZChGbG9hdFF1YWQoY29udGVudFJlY3QpKTsKLQotICAg
IC8vIENvdW50ZXItY2xvY2t3aXNlPwotICAgIGZsb2F0IHNpZ24gPSBpc0NDVyhkZXZpY2VRdWFk
KSA/IC0xIDogMTsKLQotICAgIC8vIENvbXB1dGUgb3V0ZXIgZWRnZXMuCi0gICAgRWRnZSBsZWZ0
RWRnZSA9IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDQoKSwgZGV2aWNlUXVhZC5wMSgpLCBzaWdu
KTsKLSAgICBFZGdlIHJpZ2h0RWRnZSA9IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDIoKSwgZGV2
aWNlUXVhZC5wMygpLCBzaWduKTsKLSAgICBFZGdlIHRvcEVkZ2UgPSBjb21wdXRlRWRnZShkZXZp
Y2VRdWFkLnAxKCksIGRldmljZVF1YWQucDIoKSwgc2lnbik7Ci0gICAgRWRnZSBib3R0b21FZGdl
ID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVhZC5wMygpLCBkZXZpY2VRdWFkLnA0KCksIHNpZ24pOwot
Ci0gICAgaWYgKGVkZ2VMb2NhdGlvbiAhPSAtMSkgewotICAgICAgICAvLyBNb3ZlIG91dGVyIGVk
Z2VzIHRvIGVuc3VyZSB0aGF0IGFsbCBwYXJ0aWFsbHkgY292ZXJlZCBwaXhlbHMgYXJlCi0gICAg
ICAgIC8vIHByb2Nlc3NlZC4KLSAgICAgICAgbGVmdEVkZ2UubW92ZSgwLCAwLCAwLjVmKTsKLSAg
ICAgICAgcmlnaHRFZGdlLm1vdmUoMCwgMCwgMC41Zik7Ci0gICAgICAgIHRvcEVkZ2UubW92ZSgw
LCAwLCAwLjVmKTsKLSAgICAgICAgYm90dG9tRWRnZS5tb3ZlKDAsIDAsIDAuNWYpOwotCi0gICAg
ICAgIGZsb2F0IGVkZ2VbMTJdOwotICAgICAgICBlZGdlWzBdID0gbGVmdEVkZ2UueCgpOwotICAg
ICAgICBlZGdlWzFdID0gbGVmdEVkZ2UueSgpOwotICAgICAgICBlZGdlWzJdID0gbGVmdEVkZ2Uu
eigpOwotICAgICAgICBlZGdlWzNdID0gdG9wRWRnZS54KCk7Ci0gICAgICAgIGVkZ2VbNF0gPSB0
b3BFZGdlLnkoKTsKLSAgICAgICAgZWRnZVs1XSA9IHRvcEVkZ2UueigpOwotICAgICAgICBlZGdl
WzZdID0gcmlnaHRFZGdlLngoKTsKLSAgICAgICAgZWRnZVs3XSA9IHJpZ2h0RWRnZS55KCk7Ci0g
ICAgICAgIGVkZ2VbOF0gPSByaWdodEVkZ2UueigpOwotICAgICAgICBlZGdlWzldID0gYm90dG9t
RWRnZS54KCk7Ci0gICAgICAgIGVkZ2VbMTBdID0gYm90dG9tRWRnZS55KCk7Ci0gICAgICAgIGVk
Z2VbMTFdID0gYm90dG9tRWRnZS56KCk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtM2Z2KGVkZ2VMb2NhdGlvbiwgZWRnZSwgNCkpOwotICAgIH0KLQotICAgIEVkZ2UgcHJl
dkVkZ2VZID0gdG9wRWRnZTsKLQotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0g
ICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOwotICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVj
dChjb250ZW50UmVjdCk7Ci0gICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikg
ewotICAgICAgICBFZGdlIHByZXZFZGdlWCA9IGxlZnRFZGdlOwotCi0gICAgICAgIEVkZ2UgZWRn
ZVkgPSBib3R0b21FZGdlOwotICAgICAgICBpZiAoaiA8IChtX3RpbGluZ0RhdGEubnVtVGlsZXNZ
KCkgLSAxKSkgewotICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHVuaW9uUmVjdChtX3Rp
bGluZ0RhdGEudGlsZUJvdW5kcyhtX3RpbGluZ0RhdGEudGlsZUluZGV4KDAsIGopKSwgbV90aWxp
bmdEYXRhLnRpbGVCb3VuZHMobV90aWxpbmdEYXRhLnRpbGVJbmRleChtX3RpbGluZ0RhdGEubnVt
VGlsZXNYKCkgLSAxLCBqKSkpOwotICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGxheWVy
UmVjdCk7Ci0KLSAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgcm93cy4KLSAgICAgICAgICAgIGlm
ICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIHRpbGVSZWN0Lm1vdmUobV9sYXllclBvc2l0aW9uLngoKSwgbV9sYXllclBvc2l0aW9u
LnkoKSk7Ci0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxl
UmVjdC5tYXhZKCkpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBwMih0aWxlUmVjdC54KCksIHRp
bGVSZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNw
YWNlLgotICAgICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEpOwotICAgICAgICAgICAg
cDIgPSBtYXRyaXgubWFwUG9pbnQocDIpOwotCi0gICAgICAgICAgICAvLyBDb21wdXRlIGhvcml6
b250YWwgZWRnZS4KLSAgICAgICAgICAgIGVkZ2VZID0gY29tcHV0ZUVkZ2UocDEsIHAyLCBzaWdu
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyAr
K2kpIHsKLSAgICAgICAgICAgIFRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7Ci0gICAgICAgICAg
ICBpZiAoIXRpbGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIEFT
U0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7Ci0KLSAgICAgICAgICAgIHRpbGUt
PnRleHR1cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCk7Ci0KLSAgICAgICAgICAgIC8vIERvbid0
IHVzZSB0aWxlQ29udGVudFJlY3QgaGVyZSwgYXMgdGhhdCBjb250YWlucyB0aGUgZnVsbAotICAg
ICAgICAgICAgLy8gcmVjdCB3aXRoIGJvcmRlciB0ZXhlbHMgd2hpY2ggc2hvdWxkbid0IGJlIGRy
YXduLgotICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IG1fdGlsaW5nRGF0YS50aWxlQm91
bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5kZXgodGlsZS0+aSgpLCB0aWxlLT5qKCkpKTsKLSAgICAg
ICAgICAgIEludFJlY3QgZGlzcGxheVJlY3QgPSB0aWxlUmVjdDsKLSAgICAgICAgICAgIHRpbGVS
ZWN0LmludGVyc2VjdChsYXllclJlY3QpOwotCi0gICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9m
IGhvdyB0aGUgdG9wIGxlZnQgaGFzIG1vdmVkLCBzbyB0aGUgdGV4dHVyZSBjYW4gYmUKLSAgICAg
ICAgICAgIC8vIG9mZnNldCB0aGUgc2FtZSBhbW91bnQuCi0gICAgICAgICAgICBJbnRTaXplIGRp
c3BsYXlPZmZzZXQgPSB0aWxlUmVjdC5taW5YTWluWUNvcm5lcigpIC0gZGlzcGxheVJlY3QubWlu
WE1pbllDb3JuZXIoKTsKLQotICAgICAgICAgICAgLy8gU2tpcCBlbXB0eSB0aWxlcy4KLSAgICAg
ICAgICAgIGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgIHRpbGVSZWN0Lm1vdmUobV9sYXllclBvc2l0aW9uLngoKSwgbV9sYXll
clBvc2l0aW9uLnkoKSk7Ci0KLSAgICAgICAgICAgIEZsb2F0UmVjdCBjbGFtcFJlY3QodGlsZVJl
Y3QpOwotICAgICAgICAgICAgLy8gQ2xhbXAgdGV4dHVyZSBjb29yZGluYXRlcyB0byBhdm9pZCBz
YW1wbGluZyBvdXRzaWRlIHRoZSBsYXllcgotICAgICAgICAgICAgLy8gYnkgZGVmbGF0aW5nIHRo
ZSB0aWxlIHJlZ2lvbiBoYWxmIGEgdGV4ZWwgb3IgaGFsZiBhIHRleGVsCi0gICAgICAgICAgICAv
LyBtaW51cyBlcHNpbG9uIGZvciBvbmUgcGl4ZWwgbGF5ZXJzLiBUaGUgcmVzdWx0aW5nIGNsYW1w
IHJlZ2lvbgotICAgICAgICAgICAgLy8gaXMgbWFwcGVkIHRvIHRoZSB1bml0IHNxdWFyZSBieSB0
aGUgdmVydGV4IHNoYWRlciBhbmQgbWFwcGVkCi0gICAgICAgICAgICAvLyBiYWNrIHRvIG5vcm1h
bGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcyBieSB0aGUgZnJhZ21lbnQgc2hhZGVyCi0gICAgICAg
ICAgICAvLyBhZnRlciBiZWluZyBjbGFtcGVkIHRvIDAtMSByYW5nZS4KLSAgICAgICAgICAgIGNv
bnN0IGZsb2F0IGVwc2lsb24gPSAxIC8gMTAyNC4wZjsKLSAgICAgICAgICAgIGZsb2F0IGNsYW1w
WCA9IG1pbigwLjUsIGNsYW1wUmVjdC53aWR0aCgpIC8gMi4wIC0gZXBzaWxvbik7Ci0gICAgICAg
ICAgICBmbG9hdCBjbGFtcFkgPSBtaW4oMC41LCBjbGFtcFJlY3QuaGVpZ2h0KCkgLyAyLjAgLSBl
cHNpbG9uKTsKLSAgICAgICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWCgtY2xhbXBYKTsKLSAgICAg
ICAgICAgIGNsYW1wUmVjdC5pbmZsYXRlWSgtY2xhbXBZKTsKLSAgICAgICAgICAgIEZsb2F0U2l6
ZSBjbGFtcE9mZnNldCA9IGNsYW1wUmVjdC5taW5YTWluWUNvcm5lcigpIC0gRmxvYXRSZWN0KHRp
bGVSZWN0KS5taW5YTWluWUNvcm5lcigpOwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IHRleE9m
ZnNldCA9IG1fdGlsaW5nRGF0YS50ZXh0dXJlT2Zmc2V0KHRpbGUtPmkoKSwgdGlsZS0+aigpKSAr
IGNsYW1wT2Zmc2V0ICsgRmxvYXRTaXplKGRpc3BsYXlPZmZzZXQpOwotICAgICAgICAgICAgZmxv
YXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZVNpemUud2lkdGgoKSk7Ci0g
ICAgICAgICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZVNp
emUuaGVpZ2h0KCkpOwotCi0gICAgICAgICAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFuZ2xlIHRv
IHVuaXQgc3F1YXJlLgotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCA9IC1j
bGFtcFJlY3QueCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0
ZXhUZXhUcmFuc2xhdGVZID0gLWNsYW1wUmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0g
ICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8gY2xh
bXBSZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkgPSB0aWxl
UmVjdC5oZWlnaHQoKSAvIGNsYW1wUmVjdC5oZWlnaHQoKTsKLQotICAgICAgICAgICAgLy8gTWFw
IHRvIG5vcm1hbGl6ZWQgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGZsb2F0IGZy
YWdtZW50VGV4VHJhbnNsYXRlWCA9IHRleE9mZnNldC54KCkgLyB0aWxlV2lkdGg7Ci0gICAgICAg
ICAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhl
aWdodDsKLSAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4U2NhbGVYID0gY2xhbXBSZWN0Lndp
ZHRoKCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSA9
IGNsYW1wUmVjdC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQ7Ci0KLSAgICAgICAgICAgIC8vIE9wZW5H
TCBjb29yZGluYXRlIHN5c3RlbSBpcyBib3R0b20tdXAuCi0gICAgICAgICAgICAvLyBJZiB0aWxl
IHRleHR1cmUgaXMgdG9wLWRvd24sIHdlIG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBjb29yZGlu
YXRlcy4KLSAgICAgICAgICAgIGlmIChtX3RleHR1cmVPcmllbnRhdGlvbiA9PSBMYXllclRleHR1
cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50YXRpb24pIHsKLSAgICAgICAgICAgICAgICBmcmFnbWVu
dFRleFRyYW5zbGF0ZVkgPSAxLjAgLSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7Ci0gICAgICAgICAg
ICAgICAgZnJhZ21lbnRUZXhTY2FsZVkgKj0gLTEuMDsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgRWRnZSBlZGdlWCA9IHJpZ2h0RWRnZTsKLSAgICAgICAgICAgIGlmIChpIDwgKG1fdGls
aW5nRGF0YS5udW1UaWxlc1goKSAtIDEpKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBw
MSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0LnkoKSk7Ci0gICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBwMih0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4KLSAgICAgICAgICAgICAgICBwMSA9
IG1hdHJpeC5tYXBQb2ludChwMSk7Ci0gICAgICAgICAgICAgICAgcDIgPSBtYXRyaXgubWFwUG9p
bnQocDIpOwotCi0gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB2ZXJ0aWNhbCBlZGdlLgotICAg
ICAgICAgICAgICAgIGVkZ2VYID0gY29tcHV0ZUVkZ2UocDEsIHAyLCBzaWduKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gQ3JlYXRlIGRldmljZSBzcGFjZSBxdWFkLgotICAgICAg
ICAgICAgRmxvYXRRdWFkIGRldmljZVF1YWQoaW50ZXJzZWN0KGVkZ2VZLCBwcmV2RWRnZVgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0KHByZXZFZGdlWCwgcHJl
dkVkZ2VZKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdChwcmV2
RWRnZVksIGVkZ2VYKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2Vj
dChlZGdlWCwgZWRnZVkpKTsKLQotICAgICAgICAgICAgLy8gTWFwIHF1YWQgdG8gbGF5ZXIgc3Bh
Y2UuCi0gICAgICAgICAgICBGbG9hdFF1YWQgcXVhZCA9IGludmVyc2UubWFwUXVhZChkZXZpY2VR
dWFkKTsKLQotICAgICAgICAgICAgLy8gTm9ybWFsaXplIHRvIHRpbGVSZWN0LgotICAgICAgICAg
ICAgcXVhZC5zY2FsZSgxLjBmIC8gdGlsZVJlY3Qud2lkdGgoKSwgMS4wZiAvIHRpbGVSZWN0Lmhl
aWdodCgpKTsKLQotICAgICAgICAgICAgaWYgKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24g
PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBNb3ZlIGZyYWdtZW50IHNoYWRlciB0cmFuc2Zv
cm0gdG8gdmVydGV4IHNoYWRlci4gV2UgY2FuIGRvCi0gICAgICAgICAgICAgICAgLy8gdGhpcyB3
aGlsZSBzdGlsbCBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRzIGFzCi0gICAgICAgICAgICAgICAg
Ly8gZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIG5vbi1uZWdh
dGl2ZQotICAgICAgICAgICAgICAgIC8vIHdoZW4gdGlsZXMgYXJlIHRyYW5zZm9ybWVkIGluIGEg
d2F5IHRoYXQgY291bGQgcmVzdWx0IGluCi0gICAgICAgICAgICAgICAgLy8gc2FtcGxpbmcgb3V0
c2lkZSB0aGUgbGF5ZXIuCi0gICAgICAgICAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9IGZyYWdt
ZW50VGV4U2NhbGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWSAqPSBmcmFnbWVu
dFRleFNjYWxlWTsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVYICo9IGZyYWdt
ZW50VGV4U2NhbGVYOwotICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKj0gZnJh
Z21lbnRUZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCArPSBm
cmFnbWVudFRleFRyYW5zbGF0ZVg7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRl
WSArPSBmcmFnbWVudFRleFRyYW5zbGF0ZVk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKGZyYWdtZW50VGV4VHJhbnNm
b3JtTG9jYXRpb24sIGZyYWdtZW50VGV4VHJhbnNsYXRlWCwgZnJhZ21lbnRUZXhUcmFuc2xhdGVZ
LCBmcmFnbWVudFRleFNjYWxlWCwgZnJhZ21lbnRUZXhTY2FsZVkpKTsKLQotICAgICAgICAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS52
ZXJ0ZXhUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhU
ZXhUcmFuc2xhdGVZLCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOwotCi0gICAg
ICAgICAgICBmbG9hdCBwb2ludFs4XTsKLSAgICAgICAgICAgIHBvaW50WzBdID0gcXVhZC5wMSgp
LngoKTsKLSAgICAgICAgICAgIHBvaW50WzFdID0gcXVhZC5wMSgpLnkoKTsKLSAgICAgICAgICAg
IHBvaW50WzJdID0gcXVhZC5wMigpLngoKTsKLSAgICAgICAgICAgIHBvaW50WzNdID0gcXVhZC5w
MigpLnkoKTsKLSAgICAgICAgICAgIHBvaW50WzRdID0gcXVhZC5wMygpLngoKTsKLSAgICAgICAg
ICAgIHBvaW50WzVdID0gcXVhZC5wMygpLnkoKTsKLSAgICAgICAgICAgIHBvaW50WzZdID0gcXVh
ZC5wNCgpLngoKTsKLSAgICAgICAgICAgIHBvaW50WzddID0gcXVhZC5wNCgpLnkoKTsKLSAgICAg
ICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMmZ2KHByb2dyYW0tPnZlcnRleFNo
YWRlcigpLnBvaW50TG9jYXRpb24oKSwgcG9pbnQsIDQpKTsKLQotICAgICAgICAgICAgTGF5ZXJD
aHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2pl
Y3Rpb25NYXRyaXgoKSwgZ2xvYmFsVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwg
b3BhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
Z3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBo
YUxvY2F0aW9uKCkpOwotCi0gICAgICAgICAgICBwcmV2RWRnZVggPSBlZGdlWDsKLSAgICAgICAg
ICAgIC8vIFJldmVyc2UgZGlyZWN0aW9uLgotICAgICAgICAgICAgcHJldkVkZ2VYLnNjYWxlKC0x
LCAtMSwgLTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJldkVkZ2VZID0gZWRnZVk7Ci0gICAg
ICAgIC8vIFJldmVyc2UgZGlyZWN0aW9uLgotICAgICAgICBwcmV2RWRnZVkuc2NhbGUoLTEsIC0x
LCAtMSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmJkZTllMWRiZjJiMmU0YWE3MWU1YzMwZjIy
MDI0MDk0ZjI4YzRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJD
aHJvbWl1bS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5k
ZWYgTGF5ZXJUaWxlckNocm9taXVtX2gKLSNkZWZpbmUgTGF5ZXJUaWxlckNocm9taXVtX2gKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVy
ZVVwZGF0ZXIuaCIKLSNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hU
cmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOwotY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKLQotY2xhc3MgTGF5ZXJUaWxlckNocm9t
aXVtIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXllclRpbGVyQ2hyb21pdW0pOwotcHVi
bGljOgotICAgIGVudW0gQm9yZGVyVGV4ZWxPcHRpb24geyBIYXNCb3JkZXJUZXhlbHMsIE5vQm9y
ZGVyVGV4ZWxzIH07Ci0KLSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+
IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwg
Qm9yZGVyVGV4ZWxPcHRpb24pOwotCi0gICAgfkxheWVyVGlsZXJDaHJvbWl1bSgpOwotCi0gICAg
Ly8gU2V0IGludmFsaWRhdGlvbnMgdG8gYmUgcG90ZW50aWFsbHkgcmVwYWludGVkIGR1cmluZyB1
cGRhdGUoKS4KLSAgICB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKLSAgICB2b2lkIGludmFsaWRhdGVFbnRpcmVMYXllcigpOwotCi0gICAgLy8gUHJlcGFy
ZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnN0ZXJzZWN0IHdpdGggY29u
dGVudFJlY3QuCi0gICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIExheWVyVGV4dHVyZVVwZGF0ZXIqKTsKLSAgICAvLyBVcGRhdGUgaW52YWxpZCB0ZXh0
dXJlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0IHByb3ZpZGVkIGluIHByZXBhcmVU
b1VwZGF0ZSgpLgotICAgIHZvaWQgdXBkYXRlUmVjdChMYXllclRleHR1cmVVcGRhdGVyKik7Ci0g
ICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVudCByZWN0
LgotICAgIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLQotICAgIGludCBudW1UaWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdGlsaW5nRGF0YS5udW1UaWxlcygpOyB9Ci0KLSAgICAvLyBTZXQgcG9z
aXRpb24gb2YgdGhpcyB0aWxlZCBsYXllciBpbiBjb250ZW50IHNwYWNlLgotICAgIHZvaWQgc2V0
TGF5ZXJQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pOwotICAgIC8vIENoYW5nZSB0
aGUgdGlsZSBzaXplLiAgVGhpcyBtYXkgaW52YWxpZGF0ZSBhbGwgdGhlIGV4aXN0aW5nIHRpbGVz
LgotICAgIHZvaWQgc2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSk7Ci0KLSAgICBib29s
IHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9Ci0KLSAgICAvLyBSZXNl
cnZlcyBhbGwgZXhpc3RpbmcgYW5kIHZhbGlkIHRpbGUgdGV4dHVyZXMgdG8gcHJvdGVjdCB0aGVt
IGZyb20gYmVpbmcKLSAgICAvLyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgotICAg
IHZvaWQgcHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7Ci0K
LSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hh
ZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtOwotICAgIC8vIFNoYWRlciBwcm9ncmFtIHRoYXQgc3dh
cHMgcmVkIGFuZCBibHVlIGNvbXBvbmVudHMgb2YgdGV4dHVyZS4KLSAgICAvLyBVc2VkIHdoZW4g
dGV4dHVyZSBmb3JtYXQgZG9lcyBub3QgbWF0Y2ggbmF0aXZlIGNvbG9yIGZvcm1hdC4KLSAgICB0
eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdC
QVRleFN3aXp6bGVBbHBoYT4gUHJvZ3JhbVN3aXp6bGU7Ci0KLSAgICAvLyBTaGFkZXIgcHJvZ3Jh
bSB0aGF0IHByb2R1Y2VzIGFudGktYWxpYXNlZCBsYXllciBlZGdlcy4KLSAgICB0eXBlZGVmIFBy
b2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhh
QUE+IFByb2dyYW1BQTsKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRp
bGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYUFBPiBQcm9ncmFtU3dpenpsZUFB
OwotCi0gICAgLy8gSWYgdGhpcyB0aWxlciBoYXMgZXhhY3RseSBvbmUgdGlsZSwgcmV0dXJuIGl0
cyB0ZXh0dXJlLiBPdGhlcndpc2UsIG51bGwuCi0gICAgTWFuYWdlZFRleHR1cmUqIGdldFNpbmds
ZVRleHR1cmUoKTsKLQotcHJpdmF0ZToKLSAgICBMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9u
KTsKLQotICAgIGNsYXNzIFRpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxUaWxlPiB7Ci0gICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGUpOwotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGlj
aXQgVGlsZShQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiB0ZXgpIDogbV90ZXgodGV4KSwgbV9p
KC0xKSwgbV9qKC0xKSB7IH0KLQotICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsg
cmV0dXJuIG1fdGV4LmdldCgpOyB9Ci0KLSAgICAgICAgYm9vbCBkaXJ0eSgpIGNvbnN0IHsgcmV0
dXJuICFtX2RpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKTsgfQotICAgICAgICB2b2lkIGNsZWFyRGly
dHkoKSB7IG1fZGlydHlMYXllclJlY3QgPSBJbnRSZWN0KCk7IH0KLQotICAgICAgICBpbnQgaSgp
IGNvbnN0IHsgcmV0dXJuIG1faTsgfQotICAgICAgICBpbnQgaigpIGNvbnN0IHsgcmV0dXJuIG1f
ajsgfQotICAgICAgICB2b2lkIG1vdmVUbyhpbnQgaSwgaW50IGopIHsgbV9pID0gaTsgbV9qID0g
ajsgfQotCi0gICAgICAgIC8vIExheWVyLXNwYWNlIGRpcnR5IHJlY3RhbmdsZSB0aGF0IG5lZWRz
IHRvIGJlIHJlcGFpbnRlZC4KLSAgICAgICAgSW50UmVjdCBtX2RpcnR5TGF5ZXJSZWN0OwotICAg
IHByaXZhdGU6Ci0gICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXg7Ci0gICAgICAg
IGludCBtX2k7Ci0gICAgICAgIGludCBtX2o7Ci0gICAgfTsKLQotICAgIC8vIERyYXcgYWxsIHRp
bGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCi0gICAgdGVtcGxhdGUgPGNsYXNz
IFQ+Ci0gICAgdm9pZCBkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwg
aW50IGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24pOwotCi0g
ICAgLy8gR3JvdyBsYXllciBzaXplIHRvIGNvbnRhaW4gdGhpcyByZWN0YW5nbGUuCi0gICAgdm9p
ZCBncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwotCi0gICAg
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9s
YXllclJlbmRlcmVyOyB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGxheWVyUmVuZGVyZXJDb250
ZXh0KCkgY29uc3Q7Ci0gICAgVGlsZSogY3JlYXRlVGlsZShpbnQgaSwgaW50IGopOwotICAgIC8v
IEludmFsaWRhdGUgYW55IHRpbGVzIHdoaWNoIGRvIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29u
dGVudFJlY3QKLSAgICB2b2lkIGludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCk7Ci0gICAgdm9pZCByZXNldCgpOwotICAgIHZvaWQgY29udGVudFJlY3RUb1RpbGVJbmRp
Y2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQgJmxlZnQsIGludCAmdG9wLCBpbnQg
JnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29uc3Q7Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdFRvTGF5
ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKLSAgICBJbnRSZWN0IGxh
eWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBjb25zdDsKLQot
ICAgIFRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7Ci0gICAgSW50UmVjdCB0aWxlQ29udGVu
dFJlY3QoY29uc3QgVGlsZSopIGNvbnN0OwotICAgIEludFJlY3QgdGlsZUxheWVyUmVjdChjb25z
dCBUaWxlKikgY29uc3Q7Ci0KLSAgICBHQzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7Ci0KLSAgICBJ
bnRTaXplIG1fdGlsZVNpemU7Ci0gICAgSW50UG9pbnQgbV9sYXllclBvc2l0aW9uOwotCi0gICAg
Ym9vbCBtX3NraXBzRHJhdzsKLQotICAgIC8vIERlZmF1bHQgaGFzaCBrZXkgdHJhaXRzIGZvciBp
bnRlZ2VycyBkaXNhbGxvdyAwIGFuZCAtMSBhcyBhIGtleSwgc28KLSAgICAvLyB1c2UgYSBjdXN0
b20gaGFzaCB0cmFpdCB3aGljaCBkaXNhbGxvd3MgLTEgYW5kIC0yIGluc3RlYWQuCi0gICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IFRpbGVNYXBLZXk7Ci0gICAgc3RydWN0IFRpbGVNYXBL
ZXlUcmFpdHMgOiBIYXNoVHJhaXRzPFRpbGVNYXBLZXk+IHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBUaWxlTWFwS2V5IGVt
cHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcigtMSwgLTEpOyB9Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUaWxlTWFwS2V5JiBzbG90KSB7IHNsb3Qg
PSBzdGQ6Om1ha2VfcGFpcigtMiwgLTIpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRl
ZFZhbHVlKFRpbGVNYXBLZXkgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmZpcnN0ID09IC0yICYmIHZh
bHVlLnNlY29uZCA9PSAtMjsgfQotICAgIH07Ci0gICAgLy8gRklYTUU6IFRoZSBtYXBwZWQgdmFs
dWUgaW4gVGlsZU1hcCBzaG91bGQgcmVhbGx5IGJlIGFuIE93blB0ciwgYXMgdGhlCi0gICAgLy8g
cmVmY291bnQgb2YgYSBUaWxlIHNob3VsZCBuZXZlciBiZSBtb3JlIHRoYW4gMS4gSG93ZXZlciwg
SGFzaE1hcAotICAgIC8vIGRvZXNuJ3QgZWFzaWx5IHN1cHBvcnQgT3duUHRyIGFzIGEgdmFsdWUu
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVNYXBLZXksIFJlZlB0cjxUaWxlPiwgRGVmYXVsdEhh
c2g8VGlsZU1hcEtleT46Okhhc2gsIFRpbGVNYXBLZXlUcmFpdHM+IFRpbGVNYXA7Ci0gICAgVGls
ZU1hcCBtX3RpbGVzOwotICAgIC8vIFRpZ2h0bHkgcGFja2VkIHNldCBvZiB1bnVzZWQgdGlsZXMu
Ci0gICAgVmVjdG9yPFJlZlB0cjxUaWxlPiA+IG1fdW51c2VkVGlsZXM7Ci0KLSAgICAvLyBTdGF0
ZSBoZWxkIGJldHdlZW4gdXBkYXRlIGFuZCB1cGxvYWQuCi0gICAgSW50UmVjdCBtX3BhaW50UmVj
dDsKLSAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKLQotICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6
Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOwotICAgIExheWVyVGV4dHVyZVVwZGF0
ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKLSAgICBUaWxpbmdE
YXRhIG1fdGlsaW5nRGF0YTsKLQotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJl
bmRlcmVyOwotfTsKLQotfQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCmluZGV4IGE2N2MyMmU5MDI1ZWY4OTdiMTc4
Zjg2NGFiMzMyOTk2ZjNlM2VlN2YuLjMxMGUxNjg2YmQzNWZmYTVkY2JmNjE0YTdiNGI4NzNhODQz
ZjdiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL01hbmFnZWRUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaApAQCAtNjAsNiArNjAsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZvaWQgZnJhbWVi
dWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0QqKTsKIAorICAgIHVuc2lnbmVkIHRleHR1
cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9CisKIHByaXZhdGU6CiAgICAgZXhw
bGljaXQgTWFuYWdlZFRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKIApAQCAtNzMsNCArNzUsMyBA
QCBwcml2YXRlOgogfQogCiAjZW5kaWYgLy8gTWFuYWdlZFRleHR1cmVfaAotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcAppbmRleCAzZjRkMTUxOTA0OWQ4ZmMwZjI5NTc4MzQ2NTFjNDUz
MWI4ZDFmYmJhLi42MTA1OTA2ODQyNDEyYTgzYmEzMWE5MjMyYmM5NDE2MGQyNjkxMzdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCisjaW5jbHVkZSAiTWFuYWdlZFRl
eHR1cmUuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllcklt
cGwuaCIKICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCkBAIC00Nyw5ICs0NywyOSBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFVw
ZGF0YWJsZVRpbGUgOiBwdWJsaWMgQ0NMYXllclRpbGluZ0RhdGE6OlRpbGUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFVwZGF0YWJsZVRpbGUpOworcHVibGljOgorICAgIGV4cGxpY2l0IFVw
ZGF0YWJsZVRpbGUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4KSA6IG1fdGV4KHRleCkg
eyB9CisKKyAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGV4LmdldCgp
OyB9CisKKyAgICBib29sIGRpcnR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGlydHlMYXllclJlY3Qu
aXNFbXB0eSgpOyB9CisgICAgdm9pZCBjbGVhckRpcnR5KCkgeyBtX2RpcnR5TGF5ZXJSZWN0ID0g
SW50UmVjdCgpOyB9CisKKyAgICAvLyBMYXllci1zcGFjZSBkaXJ0eSByZWN0YW5nbGUgdGhhdCBu
ZWVkcyB0byBiZSByZXBhaW50ZWQuCisgICAgSW50UmVjdCBtX2RpcnR5TGF5ZXJSZWN0OworcHJp
dmF0ZToKKyAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4OworfTsKKwogVGlsZWRMYXll
ckNocm9taXVtOjpUaWxlZExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25l
cikKICAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRv
VGlsZSkKKyAgICAsIG1fdGV4dHVyZUZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNKQorICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCisgICAgLCBtX3RleHR1cmVPcmllbnRhdGlv
bihMYXllclRleHR1cmVVcGRhdGVyOjpJbnZhbGlkT3JpZW50YXRpb24pCisgICAgLCBtX3NhbXBs
ZWRUZXhlbEZvcm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRJbnZh
bGlkKQogewogfQogCkBAIC02NCw4ICs4NCwxMiBAQCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBU
aWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIAogdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogewotICAgIG1fdGlsZXIuY2xlYXIoKTsKICAg
ICBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7CisKKyAgICBtX3RpbGVyLmNsZWFy
KCk7CisgICAgbV91bnVzZWRUaWxlcy5jbGVhcigpOworICAgIG1fcGFpbnRSZWN0ID0gSW50UmVj
dCgpOworICAgIG1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKIH0KIAogdm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyKQpAQCAtMTEzLDcgKzEzNyw3IEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpkcmF3
c0NvbnRlbnQoKSBjb25zdAogICAgIGlmIChtX3RpbGluZ09wdGlvbiA9PSBOZXZlclRpbGUgJiYg
bV90aWxlci0+bnVtVGlsZXMoKSA+IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiAhbV90aWxlci0+c2tpcHNEcmF3KCk7CisgICAgcmV0dXJuICFtX3NraXBzRHJhdzsKIH0K
IAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVkZWQoKQpAQCAtMTIz
LDE1ICsxNDcsNzIgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVk
ZWQoKQogCiAgICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpOwogCi0gICAgbV90aWxl
ciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKAotICAgICAgICBsYXllclJlbmRlcmVyKCks
CisgICAgbV90ZXh0dXJlRm9ybWF0ID0gbGF5ZXJSZW5kZXJlcigpLT5iZXN0VGV4dHVyZUZvcm1h
dCgpOworICAgIG1fdGV4dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXIoKS0+b3JpZW50
YXRpb24oKTsKKyAgICBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1cmVVcGRhdGVyKCktPnNh
bXBsZWRUZXhlbEZvcm1hdChtX3RleHR1cmVGb3JtYXQpOworCisgICAgbV90aWxlciA9IENDTGF5
ZXJUaWxpbmdEYXRhOjpjcmVhdGUoCiAgICAgICAgIEludFNpemUoZGVmYXVsdFRpbGVTaXplLCBk
ZWZhdWx0VGlsZVNpemUpLAotICAgICAgICBpc1Jvb3RMYXllcigpID8gTGF5ZXJUaWxlckNocm9t
aXVtOjpOb0JvcmRlclRleGVscyA6IExheWVyVGlsZXJDaHJvbWl1bTo6SGFzQm9yZGVyVGV4ZWxz
KTsKKyAgICAgICAgaXNSb290TGF5ZXIoKSA/IENDTGF5ZXJUaWxpbmdEYXRhOjpOb0JvcmRlclRl
eGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3JkZXJUZXhlbHMpOwogfQogCiB2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCiB7Ci0gICAgbV90
aWxlci0+dXBkYXRlUmVjdCh0ZXh0dXJlVXBkYXRlcigpKTsKKyAgICAvLyBQYWludGluZyBjb3Vs
ZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5IGNhdXNlIHRo
ZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KKyAgICBpZiAobV9za2lw
c0RyYXcgfHwgbV91cGRhdGVSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyKCktPmNvbnRleHQoKTsKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9t
OworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3QsIGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0
b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7
CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAg
ICAgICAgaWYgKCF0aWxlKQorICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGop
OworICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUtPmRpcnR5KCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3Rhbmds
ZSB0byBjb3B5IGZyb20uCisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBtX3RpbGVy
LT50aWxlQ29udGVudFJlY3QodGlsZSk7CisgICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNo
b3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmludGVy
c2VjdChtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGUtPm1fZGlydHlMYXllclJl
Y3QpKTsKKyAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qgbm90IGd1YXJhbnRlZWQgdG8gbGluZSB1
cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCisgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBz
b3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgb2YgaXQuCisgICAgICAgICAgICBzb3Vy
Y2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7CisgICAgICAgICAgICBpZiAoc291cmNlUmVj
dC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIEFT
U0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSk7CisKKyAgICAgICAgICAgIC8vIENh
bGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KKyAgICAgICAgICAg
IEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3IueCgpLCBz
b3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7CisgICAgICAg
ICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCisgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KworICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGls
ZSdzIGRpcnR5IHJlY3RhbmdsZS4KKyAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNv
dXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFpbnRS
ZWN0LnkoKSk7CisgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpIDwgMCkKKyAgICAgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSA8IDApCisg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkg
KyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJlY3Qud2lkdGgoKSkKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0Lmhl
aWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZShjb250ZXh0KTsKKyAg
ICAgICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxz
KCkgPyBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJF
U1Q7CisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgZmlsdGVyKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyKSk7CisgICAgICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAp
KTsKKworICAgICAgICAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QodGls
ZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgICAgICB0aWxlLT5j
bGVhckRpcnR5KCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjpzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uIHRpbGluZ09wdGlvbikKQEAgLTE2OSw3
ICsyNTAsMjAgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NM
YXllckltcGwqIGxheWVyKQogCiAgICAgQ0NUaWxlZExheWVySW1wbCogdGlsZWRMYXllciA9IHN0
YXRpY19jYXN0PENDVGlsZWRMYXllckltcGwqPihsYXllcik7CiAgICAgdGlsZWRMYXllci0+c2V0
VGlsaW5nVHJhbnNmb3JtKHRpbGluZ1RyYW5zZm9ybSgpKTsKLSAgICB0aWxlZExheWVyLT5zZXRU
aWxlcihtX3RpbGVyLmdldCgpKTsKKyAgICB0aWxlZExheWVyLT5zZXRTa2lwc0RyYXcobV9za2lw
c0RyYXcpOworICAgIHRpbGVkTGF5ZXItPnNldFRleHR1cmVPcmllbnRhdGlvbihtX3RleHR1cmVP
cmllbnRhdGlvbik7CisgICAgdGlsZWRMYXllci0+c2V0U2FtcGxlZFRleGVsRm9ybWF0KG1fc2Ft
cGxlZFRleGVsRm9ybWF0KTsKKyAgICB0aWxlZExheWVyLT5zZXRUaWxpbmdEYXRhKCptX3RpbGVy
KTsKKworICAgIGZvciAoQ0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtX3RpbGVyLT50aWxlcygpLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlci0+dGlsZXMo
KS5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGludCBpID0gaXRlci0+Zmlyc3QuZmlyc3Q7Cisg
ICAgICAgIGludCBqID0gaXRlci0+Zmlyc3Quc2Vjb25kOworICAgICAgICBVcGRhdGFibGVUaWxl
KiB0aWxlID0gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7
CisgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVTaXpl
KCksIG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0
aWxlZExheWVyLT5zeW5jVGV4dHVyZUlkKGksIGosIHRpbGUtPnRleHR1cmUoKS0+dGV4dHVyZUlk
KCkpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQpCkBAIC0xODIsNyArMjc2LDE1OCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QK
IHsKICAgICBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOwog
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJza2lwc0RyYXc6ICIgPDwg
KCFtX3RpbGVyIHx8IG1fdGlsZXItPnNraXBzRHJhdygpKSA8PCAiXG4iOworICAgIHRzIDw8ICJz
a2lwc0RyYXc6ICIgPDwgKCFtX3RpbGVyIHx8IG1fc2tpcHNEcmF3KSA8PCAiXG4iOworfQorCitU
ZXh0dXJlTWFuYWdlciogVGlsZWRMYXllckNocm9taXVtOjp0ZXh0dXJlTWFuYWdlcigpIGNvbnN0
Cit7CisgICAgaWYgKCFsYXllclJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBsYXllclJlbmRlcmVyKCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKK30KKworVXBk
YXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9taXVtOjp0aWxlQXQoaW50IGksIGludCBqKSBjb25z
dAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxVcGRhdGFibGVUaWxlKj4obV90aWxlci0+dGls
ZUF0KGksIGopKTsKK30KKworVXBkYXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9taXVtOjpjcmVh
dGVUaWxlKGludCBpLCBpbnQgaikKK3sKKyAgICBSZWZQdHI8VXBkYXRhYmxlVGlsZT4gdGlsZTsK
KyAgICBpZiAobV91bnVzZWRUaWxlcy5zaXplKCkgPiAwKSB7CisgICAgICAgIHRpbGUgPSBtX3Vu
dXNlZFRpbGVzLmxhc3QoKS5yZWxlYXNlKCk7CisgICAgICAgIG1fdW51c2VkVGlsZXMucmVtb3Zl
TGFzdCgpOworICAgICAgICBBU1NFUlQodGlsZS0+cmVmQ291bnQoKSA9PSAxKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBUZXh0dXJlTWFuYWdlciogbWFuYWdlciA9IHRleHR1cmVNYW5hZ2VyKCk7
CisgICAgICAgIHRpbGUgPSBhZG9wdFJlZihuZXcgVXBkYXRhYmxlVGlsZShNYW5hZ2VkVGV4dHVy
ZTo6Y3JlYXRlKG1hbmFnZXIpKSk7CisgICAgfQorICAgIG1fdGlsZXItPmFkZFRpbGUodGlsZSwg
aSwgaik7CisgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJl
Y3QodGlsZS5nZXQoKSk7CisKKyAgICByZXR1cm4gdGlsZS5nZXQoKTsKK30KKwordm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OmludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkKK3sKKyAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFZlY3RvcjxDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcEtleT4gcmVtb3ZlS2V5czsKKyAg
ICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7
ICsraXRlcikgeworICAgICAgICBDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZSogdGlsZSA9IGl0ZXIt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IG1fdGlsZXItPnRpbGVD
b250ZW50UmVjdCh0aWxlKTsKKyAgICAgICAgaWYgKHRpbGVSZWN0LmludGVyc2VjdHMoY29udGVu
dFJlY3QpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlbW92ZUtleXMuYXBwZW5k
KGl0ZXItPmZpcnN0KTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbW92
ZUtleXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdW51c2VkVGlsZXMuYXBwZW5kKHN0YXRpY19w
b2ludGVyX2Nhc3Q8VXBkYXRhYmxlVGlsZT4obV90aWxlci0+dGFrZVRpbGUocmVtb3ZlS2V5c1tp
XS5maXJzdCwgcmVtb3ZlS2V5c1tpXS5zZWNvbmQpKSk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAg
ICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOworCisg
ICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFjZSwgYXMgdGhlIGxheWVy
IGNvdWxkIGJlIHJlcG9zaXRpb25lZAorICAgIC8vIGFmdGVyIGludmFsaWRhdGlvbi4KKyAgICBj
b25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0VG9MYXllclJlY3Qo
Y29udGVudFJlY3QpOworCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBt
X3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikg
eworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAg
ICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYg
KCF0aWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgSW50UmVjdCBi
b3VuZCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CisgICAgICAgICAgICBib3VuZC5p
bnRlcnNlY3QobGF5ZXJSZWN0KTsKKyAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3Qu
dW5pdGUoYm91bmQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKQoreworICAgIHByb3RlY3RUaWxlVGV4
dHVyZXMoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKCkpKTsKK30KKwor
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbSk7CisKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7
CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAg
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAgICBpZiAo
IXRpbGUgfHwgIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVyLT50aWxlU2l6ZSgpLCBt
X3RleHR1cmVGb3JtYXQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICB0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJl
Rm9ybWF0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBtX3Nr
aXBzRHJhdyA9IGZhbHNlOworCisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkgeworICAg
ICAgICBtX3VwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBJbnZhbGlkYXRlIG9sZCB0aWxlcyB0aGF0IHdlcmUgcHJldmlvdXNseSB1c2VkIGJ1
dCBhcmVuJ3QgaW4gdXNlIHRoaXMKKyAgICAvLyBmcmFtZSBzbyB0aGF0IHRoZXkgY2FuIGdldCBy
ZXVzZWQgZm9yIG5ldyB0aWxlcy4KKyAgICBpbnZhbGlkYXRlVGlsZXMoY29udGVudFJlY3QpOwor
ICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVjdCk7CisKKyAgICBpZiAo
IW1fdGlsZXItPm51bVRpbGVzKCkpIHsKKyAgICAgICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ3JlYXRlIHRpbGVzIGFzIG5lZWRl
ZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAorICAgIC8vIHRoZSBkaXJ0
eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KKyAgICBJbnRSZWN0IGRpcnR5TGF5ZXJS
ZWN0OworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29u
dGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRh
YmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAg
ICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKKworICAgICAgICAgICAgaWYg
KCF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJl
Rm9ybWF0KSkKKyAgICAgICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxl
ci0+dGlsZUxheWVyUmVjdCh0aWxlKTsKKworICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJl
KCktPnJlc2VydmUobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkgeworICAg
ICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjbGVhbnVw
UmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBkaXJ0eUxheWVyUmVjdC51bml0ZSh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIER1ZSB0byBib3JkZXJzLCB3aGVuIHRoZSBwYWlu
dCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmllcywgaXQKKyAgICAvLyBtYXkgZW5k
IHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUgb3JpZ2luYWwgY29udGVudCByZWN0
LiBSZWNvcmQKKyAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qgc28gd2UgZG9uJ3QgdXBsb2FkIG1v
cmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCisgICAgbV91cGRhdGVSZWN0ID0gY29udGVudFJlY3Q7
CisKKyAgICBtX3BhaW50UmVjdCA9IG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QoZGly
dHlMYXllclJlY3QpOworICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50
UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSwgbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGU2MmVjYzdiMWMwNjhhNzBj
MGYwM2NlMGZjNjVmM2E0NTg4OThkNjAuLmQ4MmYzMTc3NGE1M2Y3MWI0MzUxYzg5OWMyMTk1ZTQ2
MDZlZmZjMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0yOSwxMiArMjksMTMg
QEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRpbGluZ0RhdGEuaCIKICNpbmNsdWRlICJj
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTGF5
ZXJUaWxlckNocm9taXVtOwogY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlcjsKK2NsYXNzIFVwZGF0
YWJsZVRpbGU7CiAKIGNsYXNzIFRpbGVkTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9t
aXVtIHsKIHB1YmxpYzoKQEAgLTQ5LDYgKzUwLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
Ym9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKIAorICAgIC8vIFJlc2VydmVzIGFsbCBleGlzdGlu
ZyBhbmQgdmFsaWQgdGlsZSB0ZXh0dXJlcyB0byBwcm90ZWN0IHRoZW0gZnJvbSBiZWluZworICAg
IC8vIHJlY3ljbGVkIGJ5IHRoZSB0ZXh0dXJlIG1hbmFnZXIuCisgICAgdm9pZCBwcm90ZWN0VGls
ZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKwogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IFRpbGVkTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qKTsKIApA
QCAtNTgsNyArNjMsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0
dXJlVXBkYXRlcklmTmVlZGVkKCkgPSAwOwogICAgIHZpcnR1YWwgTGF5ZXJUZXh0dXJlVXBkYXRl
ciogdGV4dHVyZVVwZGF0ZXIoKSBjb25zdCA9IDA7CiAKLSAgICBPd25QdHI8TGF5ZXJUaWxlckNo
cm9taXVtPiBtX3RpbGVyOworICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlh
bGx5IHJlcGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCisgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0
byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KKyAgICB2
b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgLy8g
VXBkYXRlIGludmFsaWQgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdCBw
cm92aWRlZCBpbiBwcmVwYXJlVG9VcGRhdGUoKS4KKyAgICB2b2lkIHVwZGF0ZVJlY3QoR3JhcGhp
Y3NDb250ZXh0M0QqLCBMYXllclRleHR1cmVVcGRhdGVyKik7CisgICAgdmlydHVhbCB2b2lkIHBy
b3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwpAQCAtNzEsNyArODIsMjYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24pOwogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0OwogCisgICAgVXBk
YXRhYmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsKKyAgICBVcGRhdGFibGVUaWxlKiBj
cmVhdGVUaWxlKGludCwgaW50KTsKKyAgICB2b2lkIGludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIo
KSBjb25zdDsKKworICAgIC8vIFN0YXRlIGhlbGQgYmV0d2VlbiB1cGRhdGUgYW5kIHVwbG9hZC4K
KyAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OworICAgIEludFJlY3QgbV91cGRhdGVSZWN0OworCisg
ICAgLy8gVGlnaHRseSBwYWNrZWQgc2V0IG9mIHVudXNlZCB0aWxlcy4KKyAgICBWZWN0b3I8UmVm
UHRyPFVwZGF0YWJsZVRpbGU+ID4gbV91bnVzZWRUaWxlczsKKwogICAgIFRpbGluZ09wdGlvbiBt
X3RpbGluZ09wdGlvbjsKKyAgICBHQzNEZW51bSBtX3RleHR1cmVGb3JtYXQ7CisgICAgYm9vbCBt
X3NraXBzRHJhdzsKKyAgICBMYXllclRleHR1cmVVcGRhdGVyOjpPcmllbnRhdGlvbiBtX3RleHR1
cmVPcmllbnRhdGlvbjsKKyAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXQgbV9zYW1wbGVkVGV4ZWxGb3JtYXQ7CisKKyAgICBPd25QdHI8Q0NMYXllclRpbGluZ0RhdGE+
IG1fdGlsZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzU0MmI3ZDQyNmI3MTRkZDNlOTMwMjY2ZmQyOTgwNGY3Yzc1M2FkMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUaWxpbmdEYXRhLmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiY2MvQ0NMYXllclRpbGluZ0RhdGEuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENDTGF5ZXJUaWxpbmdEYXRhPiBDQ0xh
eWVyVGlsaW5nRGF0YTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBCb3JkZXJUZXhl
bE9wdGlvbiBib3JkZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVGlsaW5n
RGF0YSh0aWxlU2l6ZSwgYm9yZGVyKSk7Cit9CisKK0NDTGF5ZXJUaWxpbmdEYXRhOjpDQ0xheWVy
VGlsaW5nRGF0YShjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9y
ZGVyKQorICAgIDogbV90aWxpbmdEYXRhKG1heCh0aWxlU2l6ZS53aWR0aCgpLCB0aWxlU2l6ZS5o
ZWlnaHQoKSksIDAsIDAsIGJvcmRlciA9PSBIYXNCb3JkZXJUZXhlbHMpCit7CisgICAgc2V0VGls
ZVNpemUodGlsZVNpemUpOworfQorCit2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjpzZXRUaWxlU2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmIChtX3RpbGVTaXplID09IHNpemUpCisg
ICAgICAgIHJldHVybjsKKworICAgIHJlc2V0KCk7CisKKyAgICBtX3RpbGVTaXplID0gc2l6ZTsK
KyAgICBtX3RpbGluZ0RhdGEuc2V0TWF4VGV4dHVyZVNpemUobWF4KHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkpOworfQorCitjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgQ0NMYXllclRpbGlu
Z0RhdGE6Om9wZXJhdG9yPShjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgdGlsZXIpCit7CisgICAg
bV90aWxlU2l6ZSA9IHRpbGVyLm1fdGlsZVNpemU7CisgICAgbV9sYXllclBvc2l0aW9uID0gdGls
ZXIubV9sYXllclBvc2l0aW9uOworICAgIG1fdGlsaW5nRGF0YSA9IHRpbGVyLm1fdGlsaW5nRGF0
YTsKKworICAgIHJldHVybiAqdGhpczsKK30KKwordm9pZCBDQ0xheWVyVGlsaW5nRGF0YTo6YWRk
VGlsZShQYXNzUmVmUHRyPFRpbGU+IHRpbGUsIGludCBpLCBpbnQgaikKK3sKKyAgICBBU1NFUlQo
IXRpbGVBdChpLCBqKSk7CisgICAgdGlsZS0+bW92ZVRvKGksIGopOworICAgIG1fdGlsZXMuYWRk
KG1ha2VfcGFpcihpLCBqKSwgdGlsZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllclRpbGluZ0Rh
dGE6OlRpbGU+IENDTGF5ZXJUaWxpbmdEYXRhOjp0YWtlVGlsZShpbnQgaSwgaW50IGopCit7Cisg
ICAgcmV0dXJuIG1fdGlsZXMudGFrZShtYWtlX3BhaXIoaSwgaikpOworfQorCitDQ0xheWVyVGls
aW5nRGF0YTo6VGlsZSogQ0NMYXllclRpbGluZ0RhdGE6OnRpbGVBdChpbnQgaSwgaW50IGopIGNv
bnN0Cit7CisgICAgVGlsZSogdGlsZSA9IG1fdGlsZXMuZ2V0KG1ha2VfcGFpcihpLCBqKSkuZ2V0
KCk7CisgICAgQVNTRVJUKCF0aWxlIHx8IHRpbGUtPnJlZkNvdW50KCkgPT0gMSk7CisgICAgcmV0
dXJuIHRpbGU7Cit9CisKK3ZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OnJlc2V0KCkKK3sKKyAgICBt
X3RpbGVzLmNsZWFyKCk7CisgICAgbV90aWxpbmdEYXRhLnNldFRvdGFsU2l6ZSgwLCAwKTsKK30K
Kwordm9pZCBDQ0xheWVyVGlsaW5nRGF0YTo6Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBp
bnQmIGJvdHRvbSkgY29uc3QKK3sKKyAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRl
bnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOworCisgICAgbGVmdCA9IG1fdGlsaW5nRGF0
YS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC54KCkpOworICAgIHRvcCA9IG1fdGls
aW5nRGF0YS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC55KCkpOworICAgIHJpZ2h0
ID0gbV90aWxpbmdEYXRhLnRpbGVYSW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0Lm1heFgoKSAt
IDEpOworICAgIGJvdHRvbSA9IG1fdGlsaW5nRGF0YS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKGxh
eWVyUmVjdC5tYXhZKCkgLSAxKTsKK30KKworSW50UmVjdCBDQ0xheWVyVGlsaW5nRGF0YTo6Y29u
dGVudFJlY3RUb0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKK3sK
KyAgICBJbnRQb2ludCBwb3MoY29udGVudFJlY3QueCgpIC0gbV9sYXllclBvc2l0aW9uLngoKSwg
Y29udGVudFJlY3QueSgpIC0gbV9sYXllclBvc2l0aW9uLnkoKSk7CisgICAgSW50UmVjdCBsYXll
clJlY3QocG9zLCBjb250ZW50UmVjdC5zaXplKCkpOworCisgICAgLy8gQ2xpcCB0byB0aGUgcG9z
aXRpb24uCisgICAgaWYgKHBvcy54KCkgPCAwIHx8IHBvcy55KCkgPCAwKQorICAgICAgICBsYXll
clJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKGNvbnRlbnRSZWN0LndpZHRo
KCkgKyBwb3MueCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSArIHBvcy55KCkpKTsKKyAgICByZXR1
cm4gbGF5ZXJSZWN0OworfQorCitJbnRSZWN0IENDTGF5ZXJUaWxpbmdEYXRhOjpsYXllclJlY3RU
b0NvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IGNvbnRlbnRSZWN0ID0gbGF5ZXJSZWN0OworICAgIGNvbnRlbnRSZWN0Lm1vdmUobV9sYXll
clBvc2l0aW9uLngoKSwgbV9sYXllclBvc2l0aW9uLnkoKSk7CisgICAgcmV0dXJuIGNvbnRlbnRS
ZWN0OworfQorCitJbnRSZWN0IENDTGF5ZXJUaWxpbmdEYXRhOjp0aWxlQ29udGVudFJlY3QoY29u
c3QgVGlsZSogdGlsZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdGlsZUxh
eWVyUmVjdCh0aWxlKTsKKyAgICBjb250ZW50UmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCks
IG1fbGF5ZXJQb3NpdGlvbi55KCkpOworICAgIHJldHVybiBjb250ZW50UmVjdDsKK30KKworSW50
UmVjdCBDQ0xheWVyVGlsaW5nRGF0YTo6dGlsZUxheWVyUmVjdChjb25zdCBUaWxlKiB0aWxlKSBj
b25zdAoreworICAgIGNvbnN0IGludCBpbmRleCA9IG1fdGlsaW5nRGF0YS50aWxlSW5kZXgodGls
ZS0+aSgpLCB0aWxlLT5qKCkpOworICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gbV90aWxpbmdEYXRh
LnRpbGVCb3VuZHNXaXRoQm9yZGVyKGluZGV4KTsKKyAgICBsYXllclJlY3Quc2V0U2l6ZShtX3Rp
bGVTaXplKTsKKyAgICByZXR1cm4gbGF5ZXJSZWN0OworfQorCit2b2lkIENDTGF5ZXJUaWxpbmdE
YXRhOjpzZXRMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBsYXllclBvc2l0aW9uKQorewor
ICAgIG1fbGF5ZXJQb3NpdGlvbiA9IGxheWVyUG9zaXRpb247Cit9CisKK3ZvaWQgQ0NMYXllclRp
bGluZ0RhdGE6Omdyb3dMYXllclRvQ29udGFpbihjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkK
K3sKKyAgICAvLyBHcm93IHRoZSB0aWxlIGFycmF5IHRvIGNvbnRhaW4gdGhpcyBjb250ZW50IHJl
Y3QuCisgICAgSW50UmVjdCBsYXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRl
bnRSZWN0KTsKKyAgICBJbnRTaXplIHJlY3RTaXplID0gSW50U2l6ZShsYXllclJlY3QubWF4WCgp
LCBsYXllclJlY3QubWF4WSgpKTsKKworICAgIEludFNpemUgb2xkTGF5ZXJTaXplKG1fdGlsaW5n
RGF0YS50b3RhbFNpemVYKCksIG1fdGlsaW5nRGF0YS50b3RhbFNpemVZKCkpOworICAgIEludFNp
emUgbmV3U2l6ZSA9IHJlY3RTaXplLmV4cGFuZGVkVG8ob2xkTGF5ZXJTaXplKTsKKyAgICBtX3Rp
bGluZ0RhdGEuc2V0VG90YWxTaXplKG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQxMmVhNzA2YjNlNjFiMzI4MDU5YmJmMWY5ZDA0M2Q4NjNlMTRkNWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VGlsaW5nRGF0YS5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIENDTGF5ZXJU
aWxpbmdEYXRhX2gKKyNkZWZpbmUgQ0NMYXllclRpbGluZ0RhdGFfaAorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRp
bGluZ0RhdGEuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
VHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUaWxpbmdE
YXRhIHsKK3B1YmxpYzoKKyAgICBlbnVtIEJvcmRlclRleGVsT3B0aW9uIHsgSGFzQm9yZGVyVGV4
ZWxzLCBOb0JvcmRlclRleGVscyB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRp
bGluZ0RhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRp
b24pOworCisgICAgaW50IG51bVRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxpbmdEYXRhLm51
bVRpbGVzKCk7IH0KKyAgICBpbnQgbnVtVGlsZXNYKCkgY29uc3QgeyByZXR1cm4gbV90aWxpbmdE
YXRhLm51bVRpbGVzWCgpOyB9CisgICAgaW50IG51bVRpbGVzWSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGlsaW5nRGF0YS5udW1UaWxlc1koKTsgfQorICAgIEludFJlY3QgdGlsZUJvdW5kcyhpbnQgaSwg
aW50IGopIGNvbnN0IHsgcmV0dXJuIG1fdGlsaW5nRGF0YS50aWxlQm91bmRzKG1fdGlsaW5nRGF0
YS50aWxlSW5kZXgoaSwgaikpOyB9CisgICAgSW50UG9pbnQgdGV4dHVyZU9mZnNldChpbnQgeElu
ZGV4LCBpbnQgeUluZGV4KSBjb25zdCB7IHJldHVybiBtX3RpbGluZ0RhdGEudGV4dHVyZU9mZnNl
dCh4SW5kZXgsIHlJbmRleCk7IH0KKworICAgIC8vIFNldCBwb3NpdGlvbiBvZiB0aGlzIHRpbGVk
IGxheWVyIGluIGNvbnRlbnQgc3BhY2UuCisgICAgdm9pZCBzZXRMYXllclBvc2l0aW9uKGNvbnN0
IEludFBvaW50Jik7CisKKyAgICAvLyBDaGFuZ2UgdGhlIHRpbGUgc2l6ZS4gVGhpcyBtYXkgaW52
YWxpZGF0ZSBhbGwgdGhlIGV4aXN0aW5nIHRpbGVzLgorICAgIHZvaWQgc2V0VGlsZVNpemUoY29u
c3QgSW50U2l6ZSYpOworICAgIGNvbnN0IEludFNpemUmIHRpbGVTaXplKCkgY29uc3QgeyByZXR1
cm4gbV90aWxlU2l6ZTsgfQorICAgIGJvb2wgaGFzQm9yZGVyVGV4ZWxzKCkgY29uc3QgeyByZXR1
cm4gbV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhbV90aWxpbmdEYXRhLm51bVRpbGVzKCkgfHwgIXRpbGVzKCkuc2l6ZSgp
OyB9CisKKyAgICBjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYgb3BlcmF0b3I9KGNvbnN0IENDTGF5
ZXJUaWxpbmdEYXRhJik7CisKKyAgICBjbGFzcyBUaWxlOiBwdWJsaWMgUmVmQ291bnRlZDxUaWxl
PiB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGUpOworICAgIHB1YmxpYzoKKyAg
ICAgICAgVGlsZSgpIDogbV9pKC0xKSwgbV9qKC0xKSB7IH0KKyAgICAgICAgdmlydHVhbCB+VGls
ZSgpIHsgfQorCisgICAgICAgIGludCBpKCkgY29uc3QgeyByZXR1cm4gbV9pOyB9CisgICAgICAg
IGludCBqKCkgY29uc3QgeyByZXR1cm4gbV9qOyB9CisgICAgICAgIHZvaWQgbW92ZVRvKGludCBp
LCBpbnQgaikgeyBtX2kgPSBpOyBtX2ogPSBqOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50
IG1faTsKKyAgICAgICAgaW50IG1fajsKKyAgICB9OworICAgIC8vIERlZmF1bHQgaGFzaCBrZXkg
dHJhaXRzIGZvciBpbnRlZ2VycyBkaXNhbGxvdyAwIGFuZCAtMSBhcyBhIGtleSwgc28KKyAgICAv
LyB1c2UgYSBjdXN0b20gaGFzaCB0cmFpdCB3aGljaCBkaXNhbGxvd3MgLTEgYW5kIC0yIGluc3Rl
YWQuCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IFRpbGVNYXBLZXk7CisgICAgc3Ry
dWN0IFRpbGVNYXBLZXlUcmFpdHMgOiBIYXNoVHJhaXRzPFRpbGVNYXBLZXk+IHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBU
aWxlTWFwS2V5IGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcigtMSwgLTEpOyB9
CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUaWxlTWFwS2V5JiBz
bG90KSB7IHNsb3QgPSBzdGQ6Om1ha2VfcGFpcigtMiwgLTIpOyB9CisgICAgICAgIHN0YXRpYyBi
b29sIGlzRGVsZXRlZFZhbHVlKFRpbGVNYXBLZXkgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmZpcnN0
ID09IC0yICYmIHZhbHVlLnNlY29uZCA9PSAtMjsgfQorICAgIH07CisgICAgLy8gRklYTUU6IFRo
ZSBtYXBwZWQgdmFsdWUgaW4gVGlsZU1hcCBzaG91bGQgcmVhbGx5IGJlIGFuIE93blB0ciwgYXMg
dGhlCisgICAgLy8gcmVmY291bnQgb2YgYSBUaWxlIHNob3VsZCBuZXZlciBiZSBtb3JlIHRoYW4g
MS4gSG93ZXZlciwgSGFzaE1hcAorICAgIC8vIGRvZXNuJ3QgZWFzaWx5IHN1cHBvcnQgT3duUHRy
IGFzIGEgdmFsdWUuCisgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVNYXBLZXksIFJlZlB0cjxUaWxl
PiwgRGVmYXVsdEhhc2g8VGlsZU1hcEtleT46Okhhc2gsIFRpbGVNYXBLZXlUcmFpdHM+IFRpbGVN
YXA7CisKKyAgICB2b2lkIGFkZFRpbGUoUGFzc1JlZlB0cjxUaWxlPiwgaW50LCBpbnQpOworICAg
IFBhc3NSZWZQdHI8VGlsZT4gdGFrZVRpbGUoaW50LCBpbnQpOworICAgIFRpbGUqIHRpbGVBdChp
bnQsIGludCkgY29uc3Q7CisgICAgY29uc3QgVGlsZU1hcCYgdGlsZXMoKSBjb25zdCB7IHJldHVy
biBtX3RpbGVzOyB9CisKKyAgICAvLyBHcm93IGxheWVyIHNpemUgdG8gY29udGFpbiB0aGlzIHJl
Y3RhbmdsZS4KKyAgICB2b2lkIGdyb3dMYXllclRvQ29udGFpbihjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCk7CisgICAgdm9pZCBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGludCAmbGVmdCwgaW50ICZ0b3AsIGludCAmcmlnaHQsIGludCAmYm90
dG9tKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpIGNvbnN0OworICAgIEludFJlY3QgbGF5ZXJSZWN0VG9Db250ZW50
UmVjdChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpIGNvbnN0OworICAgIEludFJlY3QgdGlsZUNv
bnRlbnRSZWN0KGNvbnN0IFRpbGUqKSBjb25zdDsKKyAgICBJbnRSZWN0IHRpbGVMYXllclJlY3Qo
Y29uc3QgVGlsZSopIGNvbnN0OworCisgICAgdm9pZCByZXNldCgpOworCitwcm90ZWN0ZWQ6Cisg
ICAgQ0NMYXllclRpbGluZ0RhdGEoY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVs
T3B0aW9uKTsKKworICAgIFRpbGVNYXAgbV90aWxlczsKKyAgICBJbnRTaXplIG1fdGlsZVNpemU7
CisgICAgSW50UG9pbnQgbV9sYXllclBvc2l0aW9uOworICAgIFRpbGluZ0RhdGEgbV90aWxpbmdE
YXRhOworfTsKKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKaW5kZXggYjI5ZjgxZmMz
MWIzN2Y5MzRmN2VjNWU2ZDkwOWQxNzdhYzQ3OWJjNC4uNmE3OTgzYjdlODAzN2E4ODYwN2ZjNjY1
MjMzYThjNzQxMzNkMjhhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAg
LTI5LDE3ICsyOSwzMSBAQAogCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCisj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CiAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0eXBlZGVmIEZsb2F0UG9pbnQzRCBFZGdlOwog
Y2xhc3MgTWFuYWdlZFRleHR1cmU7CiAKK2NsYXNzIERyYXdhYmxlVGlsZSA6IHB1YmxpYyBDQ0xh
eWVyVGlsaW5nRGF0YTo6VGlsZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRHJhd2FibGVU
aWxlKTsKK3B1YmxpYzoKKyAgICBEcmF3YWJsZVRpbGUoKSA6IG1fdGV4dHVyZUlkKDApIHsgfQor
CisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1
cmVJZDsgfQorICAgIHZvaWQgc2V0VGV4dHVyZUlkKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlk
KSB7IG1fdGV4dHVyZUlkID0gdGV4dHVyZUlkOyB9Citwcml2YXRlOgorICAgIFBsYXRmb3JtM0RP
YmplY3QgbV90ZXh0dXJlSWQ7Cit9OworCiBDQ1RpbGVkTGF5ZXJJbXBsOjpDQ1RpbGVkTGF5ZXJJ
bXBsKGludCBpZCkKICAgICA6IENDTGF5ZXJJbXBsKGlkKQotICAgICwgbV90aWxlcigwKQogewog
fQogCkBAIC00NywzMSArNjEsMTcgQEAgQ0NUaWxlZExheWVySW1wbDo6fkNDVGlsZWRMYXllcklt
cGwoKQogewogfQogCi12b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXcoKQotewotICAgIGNvbnN0
IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKLSAgICBpZiAoIWxheWVy
UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBs
YXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKLSAgICAgICAgLy8gTWFzayBvdXQgd3JpdGVzIHRv
IHRoZSBhbHBoYSBjaGFubmVsIGZvciB0aGUgcm9vdCBsYXllciwgc3VicGl4ZWwgYW50aWFsaWFz
aW5nCi0gICAgICAgIC8vIHZpYSBTa2lhIHJlc3VsdHMgaW4gaW52YWxpZCB6ZXJvIGFscGhhIHZh
bHVlcyBvbiB0ZXh0IGdseXBocy4gVGhlIHJvb3QgbGF5ZXIKLSAgICAgICAgLy8gaXMgYWx3YXlz
IG9wYXF1ZSBzbyB0aGUgYWxwaGEgY2hhbm5lbCBpc24ndCBtZWFuaW5nZnVsIGFueXdheS4KLSAg
ICAgICAgaWYgKGlzUm9vdExheWVyKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5jb2xvck1hc2so
dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOwotICAgICAgICBtX3RpbGVyLT5kcmF3KGxheWVyUmVj
dCwgbV90aWxpbmdUcmFuc2Zvcm0sIGRyYXdPcGFjaXR5KCkpOwotICAgICAgICBpZiAoaXNSb290
TGF5ZXIoKSkKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVl
LCB0cnVlKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6YmluZENvbnRlbnRz
VGV4dHVyZSgpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBzaW5n
bGUgdGV4dHVyZSBsYXllcnMsIGUuZy4gbWFza3MuCiAgICAgQVNTRVJUKG1fdGlsZXIpOworICAg
IEFTU0VSVChtX3RpbGVyLT5udW1UaWxlcygpID09IDEpOwogCi0gICAgTWFuYWdlZFRleHR1cmUq
IHRleHR1cmUgPSBtX3RpbGVyLT5nZXRTaW5nbGVUZXh0dXJlKCk7Ci0gICAgQVNTRVJUKHRleHR1
cmUpOworICAgIERyYXdhYmxlVGlsZSogdGlsZSA9IHRpbGVBdCgwLCAwKTsKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IHRleHR1cmVJZCA9IHRpbGUgPyB0aWxlLT50ZXh0dXJlSWQoKSA6IDA7CisgICAg
QVNTRVJUKHRleHR1cmVJZCk7CiAKLSAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShsYXllclJlbmRl
cmVyKCktPmNvbnRleHQoKSk7CisgICAgbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCktPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOwogfQogCiB2
b2lkIENDVGlsZWRMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQpIGNvbnN0CkBAIC04MCw2ICs4MCwzMjMgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25z
dAogICAgIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOwogfQog
CitEcmF3YWJsZVRpbGUqIENDVGlsZWRMYXllckltcGw6OnRpbGVBdChpbnQgaSwgaW50IGopIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERyYXdhYmxlVGlsZSo+KG1fdGlsZXItPnRp
bGVBdChpLCBqKSk7Cit9CisKK0RyYXdhYmxlVGlsZSogQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRl
VGlsZShpbnQgaSwgaW50IGopCit7CisgICAgUmVmUHRyPERyYXdhYmxlVGlsZT4gdGlsZSA9IGFk
b3B0UmVmKG5ldyBEcmF3YWJsZVRpbGUoKSk7CisgICAgbV90aWxlci0+YWRkVGlsZSh0aWxlLCBp
LCBqKTsKKyAgICByZXR1cm4gdGlsZS5nZXQoKTsKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJJbXBs
OjpkcmF3KCkKK3sKKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJS
ZWN0KCk7CisKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgbV90aWxlci0+aXNFbXB0eSgpIHx8IGxh
eWVyUmVjdC5pc0VtcHR5KCkgfHwgIWxheWVyUmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOwor
CisjaWYgZGVmaW5lZChPU19DSFJPTUVPUykKKyAgICAvLyBGSVhNRTogRGlzYWJsZSBhbnRpLWFs
aWFzaW5nIHRvIHdvcmthcm91bmQgYnJva2VuIGRyaXZlci4KKyAgICBib29sIHVzZUFBID0gZmFs
c2U7CisjZWxzZQorICAgIC8vIFVzZSBhbnRpLWFsaWFzaW5nIHByb2dyYW1zIHdoZW4gYm9yZGVy
IHRleGVscyBhcmUgcHJlc2V0IGFuZCB0cmFuc2Zvcm0KKyAgICAvLyBpcyBub3QgYW4gaW50ZWdl
ciB0cmFuc2xhdGlvbi4KKyAgICBib29sIHVzZUFBID0gKG1fdGlsZXItPmhhc0JvcmRlclRleGVs
cygpICYmICFtX3RpbGluZ1RyYW5zZm9ybS5pc0ludGVnZXJUcmFuc2xhdGlvbigpKTsKKyNlbmRp
ZgorCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyKCktPmNv
bnRleHQoKTsKKyAgICBpZiAoaXNSb290TGF5ZXIoKSkKKyAgICAgICAgY29udGV4dC0+Y29sb3JN
YXNrKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKTsKKworICAgIHN3aXRjaCAobV9zYW1wbGVkVGV4
ZWxGb3JtYXQpIHsKKyAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZv
cm1hdFJHQkE6CisgICAgICAgIGlmICh1c2VBQSkKKyAgICAgICAgICAgIGRyYXdUaWxlcyhsYXll
clJlbmRlcmVyKCksIGxheWVyUmVjdCwgbV90aWxpbmdUcmFuc2Zvcm0sIGRyYXdPcGFjaXR5KCks
IGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtQUEoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxl
clByb2dyYW1BQSgpLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRp
b24oKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1BQSgpLT5mcmFnbWVudFNoYWRlcigp
LmVkZ2VMb2NhdGlvbigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZHJhd1RpbGVzKGxh
eWVyUmVuZGVyZXIoKSwgbGF5ZXJSZWN0LCBtX3RpbGluZ1RyYW5zZm9ybSwgZHJhd09wYWNpdHko
KSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW0oKSwgLTEsIC0xKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JB
OgorICAgICAgICBpZiAodXNlQUEpCisgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJl
cigpLCBsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpLCBsYXllclJl
bmRlcmVyKCktPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpLCBsYXllclJlbmRlcmVyKCktPnRpbGVy
UHJvZ3JhbVN3aXp6bGVBQSgpLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3Jt
TG9jYXRpb24oKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6emxlQUEoKS0+ZnJh
Z21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGRyYXdUaWxlcyhsYXllclJlbmRlcmVyKCksIGxheWVyUmVjdCwgbV90aWxpbmdUcmFuc2Zvcm0s
IGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZSgpLCAt
MSwgLTEpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoaXNSb290TGF5ZXIoKSkKKyAgICAgICAgY29u
dGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpOworfQorCit2b2lkIENDVGls
ZWRMYXllckltcGw6OnNldFRpbGluZ0RhdGEoY29uc3QgQ0NMYXllclRpbGluZ0RhdGEmIHRpbGVy
KQoreworICAgIGlmIChtX3RpbGVyKQorICAgICAgICBtX3RpbGVyLT5yZXNldCgpOworICAgIGVs
c2UKKyAgICAgICAgbV90aWxlciA9IENDTGF5ZXJUaWxpbmdEYXRhOjpjcmVhdGUodGlsZXIudGls
ZVNpemUoKSwgdGlsZXIuaGFzQm9yZGVyVGV4ZWxzKCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6SGFz
Qm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzKTsKKyAgICAq
bV90aWxlciA9IHRpbGVyOworfQorCit2b2lkIENDVGlsZWRMYXllckltcGw6OnN5bmNUZXh0dXJl
SWQoaW50IGksIGludCBqLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkKK3sKKyAgICBEcmF3
YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgaWYgKCF0aWxlKQorICAgICAgICB0
aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKKyAgICB0aWxlLT5zZXRUZXh0dXJlSWQodGV4dHVyZUlk
KTsKK30KKworc3RhdGljIGJvb2wgaXNDQ1coY29uc3QgRmxvYXRRdWFkJiBxdWFkKQoreworICAg
IEZsb2F0UG9pbnQgdjEgPSBGbG9hdFBvaW50KHF1YWQucDIoKS54KCkgLSBxdWFkLnAxKCkueCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWQucDIoKS55KCkgLSBxdWFkLnAx
KCkueSgpKTsKKyAgICBGbG9hdFBvaW50IHYyID0gRmxvYXRQb2ludChxdWFkLnAzKCkueCgpIC0g
cXVhZC5wMigpLngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkLnAzKCku
eSgpIC0gcXVhZC5wMigpLnkoKSk7CisgICAgcmV0dXJuICh2MS54KCkgKiB2Mi55KCkgLSB2MS55
KCkgKiB2Mi54KCkpIDwgMDsKK30KKworc3RhdGljIEVkZ2UgY29tcHV0ZUVkZ2UoY29uc3QgRmxv
YXRQb2ludCYgcCwgY29uc3QgRmxvYXRQb2ludCYgcSwgZmxvYXQgc2lnbikKK3sKKyAgICBBU1NF
UlQocCAhPSBxKTsKKworICAgIEZsb2F0UG9pbnQgdGFuZ2VudChwLnkoKSAtIHEueSgpLCBxLngo
KSAtIHAueCgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHNpZ24gLyB0YW5nZW50Lmxlbmd0aCgpOwor
ICAgIGZsb2F0IGNyb3NzMiA9IHAueCgpICogcS55KCkgLSBxLngoKSAqIHAueSgpOworCisgICAg
cmV0dXJuIEVkZ2UodGFuZ2VudC54KCkgKiBzY2FsZSwKKyAgICAgICAgICAgICAgICB0YW5nZW50
LnkoKSAqIHNjYWxlLAorICAgICAgICAgICAgICAgIGNyb3NzMiAqIHNjYWxlKTsKK30KKworc3Rh
dGljIEZsb2F0UG9pbnQgaW50ZXJzZWN0KGNvbnN0IEVkZ2UmIGEsIGNvbnN0IEVkZ2UmIGIpCit7
CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoCisgICAgICAgIChhLnkoKSAqIGIueigpIC0gYi55KCkg
KiBhLnooKSkgLyAoYS54KCkgKiBiLnkoKSAtIGIueCgpICogYS55KCkpLAorICAgICAgICAoYS54
KCkgKiBiLnooKSAtIGIueCgpICogYS56KCkpIC8gKGIueCgpICogYS55KCkgLSBhLngoKSAqIGIu
eSgpKSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpk
cmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5z
Zm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJh
bnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24pCit7CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4KGxheWVyUmVuZGVyZXItPndpbmRvd01hdHJpeCgpICogbGF5ZXJSZW5kZXJl
ci0+cHJvamVjdGlvbk1hdHJpeCgpICogZ2xvYmFsVHJhbnNmb3JtKTsKKworICAgIC8vIFdlIGRv
bid0IGNhcmUgYWJvdXQgWiBjb21wb25lbnQuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4WFlXID0KKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgobWF0cml4Lm0xMSgpLCBtYXRy
aXgubTEyKCksIDAsIG1hdHJpeC5tMTQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIDAsIG1hdHJpeC5tMjQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIDEsIG1hdHJpeC5t
MzQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgu
bTQyKCksIDAsIG1hdHJpeC5tNDQoKSk7CisKKyAgICAvLyBEb24ndCBkcmF3IGFueSB0aWxlcyB3
aGVuIG1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZS4KKyAgICBpZiAoIW1hdHJpeFhZVy5pc0ludmVy
dGlibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52
ZXJzZSA9IG1hdHJpeFhZVy5pbnZlcnNlKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9u
KCksIDApKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKworICAgIC8vIE1hcCBjb250ZW50IHJlY3RhbmdsZSB0
byBkZXZpY2Ugc3BhY2UuCisgICAgRmxvYXRRdWFkIGRldmljZVF1YWQgPSBtYXRyaXgubWFwUXVh
ZChGbG9hdFF1YWQoY29udGVudFJlY3QpKTsKKworICAgIC8vIENvdW50ZXItY2xvY2t3aXNlPwor
ICAgIGZsb2F0IHNpZ24gPSBpc0NDVyhkZXZpY2VRdWFkKSA/IC0xIDogMTsKKworICAgIC8vIENv
bXB1dGUgb3V0ZXIgZWRnZXMuCisgICAgRWRnZSBsZWZ0RWRnZSA9IGNvbXB1dGVFZGdlKGRldmlj
ZVF1YWQucDQoKSwgZGV2aWNlUXVhZC5wMSgpLCBzaWduKTsKKyAgICBFZGdlIHJpZ2h0RWRnZSA9
IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDIoKSwgZGV2aWNlUXVhZC5wMygpLCBzaWduKTsKKyAg
ICBFZGdlIHRvcEVkZ2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnAxKCksIGRldmljZVF1YWQu
cDIoKSwgc2lnbik7CisgICAgRWRnZSBib3R0b21FZGdlID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVh
ZC5wMygpLCBkZXZpY2VRdWFkLnA0KCksIHNpZ24pOworCisgICAgaWYgKGVkZ2VMb2NhdGlvbiAh
PSAtMSkgeworICAgICAgICAvLyBNb3ZlIG91dGVyIGVkZ2VzIHRvIGVuc3VyZSB0aGF0IGFsbCBw
YXJ0aWFsbHkgY292ZXJlZCBwaXhlbHMgYXJlCisgICAgICAgIC8vIHByb2Nlc3NlZC4KKyAgICAg
ICAgbGVmdEVkZ2UubW92ZSgwLCAwLCAwLjVmKTsKKyAgICAgICAgcmlnaHRFZGdlLm1vdmUoMCwg
MCwgMC41Zik7CisgICAgICAgIHRvcEVkZ2UubW92ZSgwLCAwLCAwLjVmKTsKKyAgICAgICAgYm90
dG9tRWRnZS5tb3ZlKDAsIDAsIDAuNWYpOworCisgICAgICAgIGZsb2F0IGVkZ2VbMTJdOworICAg
ICAgICBlZGdlWzBdID0gbGVmdEVkZ2UueCgpOworICAgICAgICBlZGdlWzFdID0gbGVmdEVkZ2Uu
eSgpOworICAgICAgICBlZGdlWzJdID0gbGVmdEVkZ2UueigpOworICAgICAgICBlZGdlWzNdID0g
dG9wRWRnZS54KCk7CisgICAgICAgIGVkZ2VbNF0gPSB0b3BFZGdlLnkoKTsKKyAgICAgICAgZWRn
ZVs1XSA9IHRvcEVkZ2UueigpOworICAgICAgICBlZGdlWzZdID0gcmlnaHRFZGdlLngoKTsKKyAg
ICAgICAgZWRnZVs3XSA9IHJpZ2h0RWRnZS55KCk7CisgICAgICAgIGVkZ2VbOF0gPSByaWdodEVk
Z2UueigpOworICAgICAgICBlZGdlWzldID0gYm90dG9tRWRnZS54KCk7CisgICAgICAgIGVkZ2Vb
MTBdID0gYm90dG9tRWRnZS55KCk7CisgICAgICAgIGVkZ2VbMTFdID0gYm90dG9tRWRnZS56KCk7
CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtM2Z2KGVkZ2VMb2NhdGlvbiwg
ZWRnZSwgNCkpOworICAgIH0KKworICAgIEVkZ2UgcHJldkVkZ2VZID0gdG9wRWRnZTsKKworICAg
IGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RU
b1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAg
IEludFJlY3QgbGF5ZXJSZWN0ID0gbV90aWxlci0+Y29udGVudFJlY3RUb0xheWVyUmVjdChjb250
ZW50UmVjdCk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAg
ICAgICBFZGdlIHByZXZFZGdlWCA9IGxlZnRFZGdlOworCisgICAgICAgIEVkZ2UgZWRnZVkgPSBi
b3R0b21FZGdlOworICAgICAgICBpZiAoaiA8IChtX3RpbGVyLT5udW1UaWxlc1koKSAtIDEpKSB7
CisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdW5pb25SZWN0KG1fdGlsZXItPnRpbGVC
b3VuZHMoMCwgaiksIG1fdGlsZXItPnRpbGVCb3VuZHMobV90aWxlci0+bnVtVGlsZXNYKCkgLSAx
LCBqKSk7CisgICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKKworICAg
ICAgICAgICAgLy8gU2tpcCBlbXB0eSByb3dzLgorICAgICAgICAgICAgaWYgKHRpbGVSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGlsZVJl
Y3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGVSZWN0KTsKKworICAgICAg
ICAgICAgRmxvYXRQb2ludCBwMSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7Cisg
ICAgICAgICAgICBGbG9hdFBvaW50IHAyKHRpbGVSZWN0LngoKSwgdGlsZVJlY3QubWF4WSgpKTsK
KworICAgICAgICAgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCisgICAgICAgICAg
ICBwMSA9IG1hdHJpeC5tYXBQb2ludChwMSk7CisgICAgICAgICAgICBwMiA9IG1hdHJpeC5tYXBQ
b2ludChwMik7CisKKyAgICAgICAgICAgIC8vIENvbXB1dGUgaG9yaXpvbnRhbCBlZGdlLgorICAg
ICAgICAgICAgZWRnZVkgPSBjb21wdXRlRWRnZShwMSwgcDIsIHNpZ24pOworICAgICAgICB9CisK
KyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAg
ICAgRHJhd2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYgKCF0
aWxlIHx8ICF0aWxlLT50ZXh0dXJlSWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIHRpbGUtPnRleHR1cmVJZCgpKTsKKworICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIHRp
bGVDb250ZW50UmVjdCBoZXJlLCBhcyB0aGF0IGNvbnRhaW5zIHRoZSBmdWxsCisgICAgICAgICAg
ICAvLyByZWN0IHdpdGggYm9yZGVyIHRleGVscyB3aGljaCBzaG91bGRuJ3QgYmUgZHJhd24uCisg
ICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxlci0+dGlsZUJvdW5kcyh0aWxlLT5p
KCksIHRpbGUtPmooKSk7CisgICAgICAgICAgICBJbnRSZWN0IGRpc3BsYXlSZWN0ID0gdGlsZVJl
Y3Q7CisgICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKKworICAgICAg
ICAgICAgLy8gS2VlcCB0cmFjayBvZiBob3cgdGhlIHRvcCBsZWZ0IGhhcyBtb3ZlZCwgc28gdGhl
IHRleHR1cmUgY2FuIGJlCisgICAgICAgICAgICAvLyBvZmZzZXQgdGhlIHNhbWUgYW1vdW50Lgor
ICAgICAgICAgICAgSW50U2l6ZSBkaXNwbGF5T2Zmc2V0ID0gdGlsZVJlY3QubWluWE1pbllDb3Ju
ZXIoKSAtIGRpc3BsYXlSZWN0Lm1pblhNaW5ZQ29ybmVyKCk7CisKKyAgICAgICAgICAgIC8vIFNr
aXAgZW1wdHkgdGlsZXMuCisgICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0aWxlUmVjdCA9IG1fdGlsZXIt
PmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZVJlY3QpOworCisgICAgICAgICAgICBGbG9hdFJl
Y3QgY2xhbXBSZWN0KHRpbGVSZWN0KTsKKyAgICAgICAgICAgIC8vIENsYW1wIHRleHR1cmUgY29v
cmRpbmF0ZXMgdG8gYXZvaWQgc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIKKyAgICAgICAgICAg
IC8vIGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0
ZXhlbAorICAgICAgICAgICAgLy8gbWludXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxheWVycy4g
VGhlIHJlc3VsdGluZyBjbGFtcCByZWdpb24KKyAgICAgICAgICAgIC8vIGlzIG1hcHBlZCB0byB0
aGUgdW5pdCBzcXVhcmUgYnkgdGhlIHZlcnRleCBzaGFkZXIgYW5kIG1hcHBlZAorICAgICAgICAg
ICAgLy8gYmFjayB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdt
ZW50IHNoYWRlcgorICAgICAgICAgICAgLy8gYWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAwLTEgcmFu
Z2UuCisgICAgICAgICAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0gMSAvIDEwMjQuMGY7CisgICAg
ICAgICAgICBmbG9hdCBjbGFtcFggPSBtaW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAt
IGVwc2lsb24pOworICAgICAgICAgICAgZmxvYXQgY2xhbXBZID0gbWluKDAuNSwgY2xhbXBSZWN0
LmhlaWdodCgpIC8gMi4wIC0gZXBzaWxvbik7CisgICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0
ZVgoLWNsYW1wWCk7CisgICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7Cisg
ICAgICAgICAgICBGbG9hdFNpemUgY2xhbXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1pbllDb3Ju
ZXIoKSAtIEZsb2F0UmVjdCh0aWxlUmVjdCkubWluWE1pbllDb3JuZXIoKTsKKworICAgICAgICAg
ICAgRmxvYXRQb2ludCB0ZXhPZmZzZXQgPSBtX3RpbGVyLT50ZXh0dXJlT2Zmc2V0KHRpbGUtPmko
KSwgdGlsZS0+aigpKSArIGNsYW1wT2Zmc2V0ICsgRmxvYXRTaXplKGRpc3BsYXlPZmZzZXQpOwor
ICAgICAgICAgICAgZmxvYXQgdGlsZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXIt
PnRpbGVTaXplKCkud2lkdGgoKSk7CisgICAgICAgICAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fdGlsZXItPnRpbGVTaXplKCkuaGVpZ2h0KCkpOworCisgICAgICAg
ICAgICAvLyBNYXAgY2xhbXBpbmcgcmVjdGFuZ2xlIHRvIHVuaXQgc3F1YXJlLgorICAgICAgICAg
ICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWCA9IC1jbGFtcFJlY3QueCgpIC8gY2xhbXBSZWN0
LndpZHRoKCk7CisgICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZID0gLWNsYW1w
UmVjdC55KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7CisgICAgICAgICAgICBmbG9hdCB2ZXJ0ZXhU
ZXhTY2FsZVggPSB0aWxlUmVjdC53aWR0aCgpIC8gY2xhbXBSZWN0LndpZHRoKCk7CisgICAgICAg
ICAgICBmbG9hdCB2ZXJ0ZXhUZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAvIGNsYW1wUmVj
dC5oZWlnaHQoKTsKKworICAgICAgICAgICAgLy8gTWFwIHRvIG5vcm1hbGl6ZWQgdGV4dHVyZSBj
b29yZGluYXRlcy4KKyAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50VGV4VHJhbnNsYXRlWCA9IHRl
eE9mZnNldC54KCkgLyB0aWxlV2lkdGg7CisgICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFRy
YW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgICAgIGZsb2F0
IGZyYWdtZW50VGV4U2NhbGVYID0gY2xhbXBSZWN0LndpZHRoKCkgLyB0aWxlV2lkdGg7CisgICAg
ICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWSA9IGNsYW1wUmVjdC5oZWlnaHQoKSAvIHRp
bGVIZWlnaHQ7CisKKyAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGluYXRlIHN5c3RlbSBpcyBi
b3R0b20tdXAuCisgICAgICAgICAgICAvLyBJZiB0aWxlIHRleHR1cmUgaXMgdG9wLWRvd24sIHdl
IG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBjb29yZGluYXRlcy4KKyAgICAgICAgICAgIGlmICht
X3RleHR1cmVPcmllbnRhdGlvbiA9PSBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50
YXRpb24pIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudFRleFRyYW5zbGF0ZVkgPSAxLjAgLSBm
cmFnbWVudFRleFRyYW5zbGF0ZVk7CisgICAgICAgICAgICAgICAgZnJhZ21lbnRUZXhTY2FsZVkg
Kj0gLTEuMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRWRnZSBlZGdlWCA9IHJpZ2h0
RWRnZTsKKyAgICAgICAgICAgIGlmIChpIDwgKG1fdGlsZXItPm51bVRpbGVzWCgpIC0gMSkpIHsK
KyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3Qu
eSgpKTsKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHAyKHRpbGVSZWN0Lm1heFgoKSwgdGls
ZVJlY3QubWF4WSgpKTsKKworICAgICAgICAgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNl
IHNwYWNlLgorICAgICAgICAgICAgICAgIHAxID0gbWF0cml4Lm1hcFBvaW50KHAxKTsKKyAgICAg
ICAgICAgICAgICBwMiA9IG1hdHJpeC5tYXBQb2ludChwMik7CisKKyAgICAgICAgICAgICAgICAv
LyBDb21wdXRlIHZlcnRpY2FsIGVkZ2UuCisgICAgICAgICAgICAgICAgZWRnZVggPSBjb21wdXRl
RWRnZShwMSwgcDIsIHNpZ24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDcmVh
dGUgZGV2aWNlIHNwYWNlIHF1YWQuCisgICAgICAgICAgICBGbG9hdFF1YWQgZGV2aWNlUXVhZChp
bnRlcnNlY3QoZWRnZVksIHByZXZFZGdlWCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRlcnNlY3QocHJldkVkZ2VYLCBwcmV2RWRnZVkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ZXJzZWN0KHByZXZFZGdlWSwgZWRnZVgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0KGVkZ2VYLCBlZGdlWSkpOworCisgICAgICAg
ICAgICAvLyBNYXAgcXVhZCB0byBsYXllciBzcGFjZS4KKyAgICAgICAgICAgIEZsb2F0UXVhZCBx
dWFkID0gaW52ZXJzZS5tYXBRdWFkKGRldmljZVF1YWQpOworCisgICAgICAgICAgICAvLyBOb3Jt
YWxpemUgdG8gdGlsZVJlY3QuCisgICAgICAgICAgICBxdWFkLnNjYWxlKDEuMGYgLyB0aWxlUmVj
dC53aWR0aCgpLCAxLjBmIC8gdGlsZVJlY3QuaGVpZ2h0KCkpOworCisgICAgICAgICAgICBpZiAo
ZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8v
IE1vdmUgZnJhZ21lbnQgc2hhZGVyIHRyYW5zZm9ybSB0byB2ZXJ0ZXggc2hhZGVyLiBXZSBjYW4g
ZG8KKyAgICAgICAgICAgICAgICAvLyB0aGlzIHdoaWxlIHN0aWxsIHByb2R1Y2luZyBjb3JyZWN0
IHJlc3VsdHMgYXMKKyAgICAgICAgICAgICAgICAvLyBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0
aW9uIHNob3VsZCBhbHdheXMgYmUgbm9uLW5lZ2F0aXZlCisgICAgICAgICAgICAgICAgLy8gd2hl
biB0aWxlcyBhcmUgdHJhbnNmb3JtZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCByZXN1bHQgaW4KKyAg
ICAgICAgICAgICAgICAvLyBzYW1wbGluZyBvdXRzaWRlIHRoZSBsYXllci4KKyAgICAgICAgICAg
ICAgICB2ZXJ0ZXhUZXhTY2FsZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7CisgICAgICAgICAgICAg
ICAgdmVydGV4VGV4U2NhbGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOworICAgICAgICAgICAgICAg
IHZlcnRleFRleFRyYW5zbGF0ZVggKj0gZnJhZ21lbnRUZXhTY2FsZVg7CisgICAgICAgICAgICAg
ICAgdmVydGV4VGV4VHJhbnNsYXRlWSAqPSBmcmFnbWVudFRleFNjYWxlWTsKKyAgICAgICAgICAg
ICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVYICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWDsKKyAgICAg
ICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVZICs9IGZyYWdtZW50VGV4VHJhbnNsYXRlWTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtNGYoZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgZnJhZ21lbnRUZXhUcmFu
c2xhdGVYLCBmcmFnbWVudFRleFRyYW5zbGF0ZVksIGZyYWdtZW50VGV4U2NhbGVYLCBmcmFnbWVu
dFRleFNjYWxlWSkpOworCisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnZlcnRleFRleFRyYW5zZm9ybUxvY2F0aW9uKCks
IHZlcnRleFRleFRyYW5zbGF0ZVgsIHZlcnRleFRleFRyYW5zbGF0ZVksIHZlcnRleFRleFNjYWxl
WCwgdmVydGV4VGV4U2NhbGVZKSk7CisKKyAgICAgICAgICAgIGZsb2F0IHBvaW50WzhdOworICAg
ICAgICAgICAgcG9pbnRbMF0gPSBxdWFkLnAxKCkueCgpOworICAgICAgICAgICAgcG9pbnRbMV0g
PSBxdWFkLnAxKCkueSgpOworICAgICAgICAgICAgcG9pbnRbMl0gPSBxdWFkLnAyKCkueCgpOwor
ICAgICAgICAgICAgcG9pbnRbM10gPSBxdWFkLnAyKCkueSgpOworICAgICAgICAgICAgcG9pbnRb
NF0gPSBxdWFkLnAzKCkueCgpOworICAgICAgICAgICAgcG9pbnRbNV0gPSBxdWFkLnAzKCkueSgp
OworICAgICAgICAgICAgcG9pbnRbNl0gPSBxdWFkLnA0KCkueCgpOworICAgICAgICAgICAgcG9p
bnRbN10gPSBxdWFkLnA0KCkueSgpOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm0yZnYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpLCBwb2lu
dCwgNCkpOworCisgICAgICAgICAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNv
bnRleHQsIGxheWVyUmVuZGVyZXItPnByb2plY3Rpb25NYXRyaXgoKSwgZ2xvYmFsVHJhbnNmb3Jt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC53
aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQoKSwgb3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9j
YXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCkpOworCisgICAgICAgICAgICBw
cmV2RWRnZVggPSBlZGdlWDsKKyAgICAgICAgICAgIC8vIFJldmVyc2UgZGlyZWN0aW9uLgorICAg
ICAgICAgICAgcHJldkVkZ2VYLnNjYWxlKC0xLCAtMSwgLTEpOworICAgICAgICB9CisKKyAgICAg
ICAgcHJldkVkZ2VZID0gZWRnZVk7CisgICAgICAgIC8vIFJldmVyc2UgZGlyZWN0aW9uLgorICAg
ICAgICBwcmV2RWRnZVkuc2NhbGUoLTEsIC0xLCAtMSk7CisgICAgfQorfQorCiB9CiAKICNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmgKaW5kZXggNzM0NmJiN2U3ZDZmYTZiYzhjYTFlYmNmMjljYzU4NDlmMWVmNjNhZS4uYTcy
ZDMwYzFiZGRkMjdlMzMxMDBmMWE4ZjY4NjAyMjhlZjAxNTg2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuaApAQCAtMjYsMTEgKzI2LDE1IEBACiAjaWZuZGVmIENDVGlsZWRMYXllcklt
cGxfaAogI2RlZmluZSBDQ1RpbGVkTGF5ZXJJbXBsX2gKIAotI2luY2x1ZGUgIkxheWVyVGlsZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllclRpbGluZ0RhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBEcmF3YWJsZVRpbGU7CisKIGNsYXNzIENDVGlsZWRMYXllckltcGwgOiBwdWJsaWMgQ0NM
YXllckltcGwgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVGlsZWRMYXllcklt
cGw+IGNyZWF0ZShpbnQgaWQpCkBAIC00NSwxMyArNDksNDAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25z
dDsKIAogICAgIHZvaWQgc2V0VGlsaW5nVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0aWxpbmdUcmFuc2Zvcm0pIHsgbV90aWxpbmdUcmFuc2Zvcm0gPSB0aWxpbmdUcmFuc2Zv
cm07IH0KLSAgICB2b2lkIHNldFRpbGVyKExheWVyVGlsZXJDaHJvbWl1bSogdGlsZXIpIHsgbV90
aWxlciA9IHRpbGVyOyB9CisgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsg
bV9za2lwc0RyYXcgPSBza2lwc0RyYXc7IH0KKyAgICB2b2lkIHNldFRleHR1cmVPcmllbnRhdGlv
bihMYXllclRleHR1cmVVcGRhdGVyOjpPcmllbnRhdGlvbiB0ZXh0dXJlT3JpZW50YXRpb24pIHsg
bV90ZXh0dXJlT3JpZW50YXRpb24gPSB0ZXh0dXJlT3JpZW50YXRpb247IH0KKyAgICB2b2lkIHNl
dFNhbXBsZWRUZXhlbEZvcm1hdChMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3Jt
YXQgc2FtcGxlZFRleGVsRm9ybWF0KSB7IG1fc2FtcGxlZFRleGVsRm9ybWF0ID0gc2FtcGxlZFRl
eGVsRm9ybWF0OyB9CisgICAgdm9pZCBzZXRUaWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdE
YXRhJiB0aWxlcik7CisgICAgdm9pZCBzeW5jVGV4dHVyZUlkKGludCwgaW50LCBQbGF0Zm9ybTNE
T2JqZWN0IHRleHR1cmVJZCk7CisKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNo
YWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtOworICAgIC8vIFNo
YWRlciBwcm9ncmFtIHRoYXQgc3dhcHMgcmVkIGFuZCBibHVlIGNvbXBvbmVudHMgb2YgdGV4dHVy
ZS4KKyAgICAvLyBVc2VkIHdoZW4gdGV4dHVyZSBmb3JtYXQgZG9lcyBub3QgbWF0Y2ggbmF0aXZl
IGNvbG9yIGZvcm1hdC4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRp
bGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4gUHJvZ3JhbVN3aXp6bGU7CisK
KyAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHByb2R1Y2VzIGFudGktYWxpYXNlZCBsYXllciBl
ZGdlcy4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdt
ZW50U2hhZGVyUkdCQVRleEFscGhhQUE+IFByb2dyYW1BQTsKKyAgICB0eXBlZGVmIFByb2dyYW1C
aW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBo
YUFBPiBQcm9ncmFtU3dpenpsZUFBOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVGlsZWRM
YXllckltcGwoaW50IGlkKTsKIAorICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0
IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KKyAgICB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQgb3BhY2l0eSk7CisKKyAgICBEcmF3YWJsZVRpbGUqIHRpbGVBdChpbnQsIGlu
dCkgY29uc3Q7CisgICAgRHJhd2FibGVUaWxlKiBjcmVhdGVUaWxlKGludCwgaW50KTsKKworICAg
IC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCisgICAg
dGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgdm9pZCBkcmF3VGlsZXMoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgaW50IGZyYWdtZW50VGV4VHJh
bnNmb3JtTG9jYXRpb24sIGludCBlZGdlTG9jYXRpb24pOworCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV90aWxpbmdUcmFuc2Zvcm07Ci0gICAgTGF5ZXJUaWxlckNocm9taXVtKiBtX3RpbGVy
OworICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50
YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2Ft
cGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OworCisgICAgT3duUHRyPENDTGF5
ZXJUaWxpbmdEYXRhPiBtX3RpbGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgKaW5kZXggM2RhYmI1ZGVjMzMwNmU3ZTI2
MzE0MDViZGMyYzM0ZTk1MmQ0MjAyNy4uYmM2M2E2NzBiZjQ2MTcyNWU4MWQ4MDBhODkxODk1ZmFj
ODY2MmE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L1RpbGluZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
VGlsaW5nRGF0YS5oCkBAIC00MCw3ICs0MCw2IEBAIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRQ
b2ludDsKIAogY2xhc3MgVGlsaW5nRGF0YSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGls
aW5nRGF0YSk7CiBwdWJsaWM6CiAgICAgVGlsaW5nRGF0YShpbnQgbWF4VGV4dHVyZVNpemUsIGlu
dCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSwgYm9vbCBoYXNCb3JkZXJUZXhlbHMpOwogICAg
IHZvaWQgc2V0VG90YWxTaXplKGludCB0b3RhbFNpemVYLCBpbnQgdG90YWxTaXplWSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGExNDI1MmU4NDIzZmRiNDVkZDhjY2ZjNDJmODU0Y2Ew
MzQwZGRmNjguLjc2MTQwOTQ3YzY4NGU4YzE2NDNlNTQyOTc2YTU4ZTMyOTU5MDE4NTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMTcgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNwbGl0
IHRpbGVyIGludG8gbWFpbiB0aHJlYWQgLyBjb21wb3NpdG9yIHRocmVhZCB2ZXJzaW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYwNjUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSB0ZXN0IGZv
ciBhc3NpZ25tZW50IGFuZCBjb3B5IGNvbnN0cnVjdG9yIGZvciBUaWxpbmdEYXRhLgorCisgICAg
ICAgICogdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisKIDIwMTEtMDgtMTYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbY2hyb21pdW1dIERyYXcgdGhlIHJvb3QvIm5vbi1jb21wb3NpdGVkIGNvbnRlbnQi
IGluIGNvbXBvc2l0b3Igc2lkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGluZ0RhdGFUZXN0LmNwcAppbmRleCA3NjJlZGE5Mzk5MTUwZWJlNGM5NzE5NDZhNzRlNTdjMzlh
M2I1ZGQ1Li5kNGM2OGY1NTc0MWU3YWNiNTc5YWViZjE4NWRmNmUzNmEzMmZlM2Y3IDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcApAQCAtNDg4
LDQgKzQ4OCwyOCBAQCBURVNUKFRpbGluZ0RhdGFUZXN0LCBzZXRNYXhUZXh0dXJlU2l6ZUJvcmRl
cnMpCiAgICAgRVhQRUNUX0VRKDEwLCBkYXRhLm51bVRpbGVzWSgpKTsKIH0KIAorVEVTVChUaWxp
bmdEYXRhVGVzdCwgYXNzaWdubWVudCkKK3sKKyAgICB7CisgICAgICAgIFRpbGluZ0RhdGEgc291
cmNlKDgsIDE2LCAzMiwgdHJ1ZSk7CisgICAgICAgIFRpbGluZ0RhdGEgZGVzdCA9IHNvdXJjZTsK
KyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5ib3JkZXJUZXhlbHMoKSwgZGVzdC5ib3JkZXJUZXhl
bHMoKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UubWF4VGV4dHVyZVNpemUoKSwgZGVzdC5t
YXhUZXh0dXJlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5udW1UaWxlc1goKSwg
ZGVzdC5udW1UaWxlc1goKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UubnVtVGlsZXNZKCks
IGRlc3QubnVtVGlsZXNZKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNlLnRvdGFsU2l6ZVgo
KSwgZGVzdC50b3RhbFNpemVYKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNlLnRvdGFsU2l6
ZVkoKSwgZGVzdC50b3RhbFNpemVZKCkpOworICAgIH0KKyAgICB7CisgICAgICAgIFRpbGluZ0Rh
dGEgc291cmNlKDMsIDYsIDEwMCwgZmFsc2UpOworICAgICAgICBUaWxpbmdEYXRhIGRlc3Qoc291
cmNlKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5ib3JkZXJUZXhlbHMoKSwgZGVzdC5ib3Jk
ZXJUZXhlbHMoKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UubWF4VGV4dHVyZVNpemUoKSwg
ZGVzdC5tYXhUZXh0dXJlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5udW1UaWxl
c1goKSwgZGVzdC5udW1UaWxlc1goKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UubnVtVGls
ZXNZKCksIGRlc3QubnVtVGlsZXNZKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNlLnRvdGFs
U2l6ZVgoKSwgZGVzdC50b3RhbFNpemVYKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNlLnRv
dGFsU2l6ZVkoKSwgZGVzdC50b3RhbFNpemVZKCkpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3Bh
Y2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104390</attachid>
            <date>2011-08-18 13:40:50 -0700</date>
            <delta_ts>2011-08-19 16:22:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66065-20110818134049.patch</filename>
            <type>text/plain</type>
            <size>100883</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMzMzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNjgwZjg0NDQwNDNkN2Y0
ODUyYmI5OTQzYjQ1N2I2ZmEyZWY2Nzk0Li4wOWEwNGQxZDYyNWRmMDE1ZTcxNjlmOTM1ZTNhZTM1
OWEzNjQ2NWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEyIEBACisyMDExLTA4LTE3ICBBZHJp
ZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBTcGxp
dCB0aWxlciBpbnRvIG1haW4gdGhyZWFkIC8gY29tcG9zaXRvciB0aHJlYWQgdmVyc2lvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MDY1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cy4KKworICAgICAgICBMYXllclRpbGVyQ2hyb21pdW0gaXMgcmVuYW1lZCB0
byBiZSBDQ0xheWVyVGlsaW5nRGF0YS4gSW52YWxpZGF0aW9uCisgICAgICAgIGFuZCBwYWludCBm
dW5jdGlvbmFsaXR5IGlzIHB1c2hlZCBpbnRvIFRpbGVkTGF5ZXJDaHJvbWl1bSBhbmQgZHJhd2lu
ZworICAgICAgICB3aXRoIEdMIGlzIHB1c2hlZCBpbnRvIENDVGlsZWRMYXllckltcGwuIER1cmlu
ZyB0cmVlIHN5bmNocm9uaXphdGlvbiwKKyAgICAgICAgdGhlIHRpbGVyIHByb3BlcnRpZXMgYW5k
IHRleHR1cmUgSURzIGFyZSBzeW5jaHJvbml6ZWQgaW50bworICAgICAgICBDQ1RpbGVkTGF5ZXJJ
bXBsLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6YmVzdFRleHR1cmVGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGVB
QSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0
dXJlOjp0ZXh0dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGFibGVUaWxlOjpV
cGRhdGFibGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0YWJsZVRpbGU6OnRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRhYmxlVGlsZTo6ZGlydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6VXBkYXRhYmxlVGlsZTo6Y2xlYXJEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
ZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZU1hbmFnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp0aWxlQXQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcyk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RUaWxlVGV4dHVyZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRh
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpDQ0xheWVyVGlsaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6c2V0VGlsZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6YWRkVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVGlsaW5nRGF0YTo6dGFrZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRpbGluZ0RhdGE6OnRpbGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0
YTo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmNvbnRlbnRS
ZWN0VG9UaWxlSW5kaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6
Y29udGVudFJlY3RUb0xheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGlsaW5n
RGF0YTo6bGF5ZXJSZWN0VG9Db250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VGlsaW5nRGF0YTo6dGlsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
aWxpbmdEYXRhOjp0aWxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxp
bmdEYXRhOjpzZXRMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxp
bmdEYXRhOjpncm93TGF5ZXJUb0NvbnRhaW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpudW1UaWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6bnVtVGlsZXNYKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUaWxpbmdEYXRhOjpudW1UaWxlc1kpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRpbGluZ0RhdGE6OnRpbGVCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGlu
Z0RhdGE6OnRleHR1cmVPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0Rh
dGE6OnRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpoYXNC
b3JkZXJUZXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OmlzRW1w
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OlRpbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OmkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6OmopOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRpbGluZ0RhdGE6OlRpbGU6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVGlsaW5nRGF0YTo6VGlsZU1hcEtleVRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcEtleVRyYWl0czo6Y29uc3RydWN0RGVs
ZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFw
S2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVGls
aW5nRGF0YTo6dGlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjpE
cmF3YWJsZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjp0ZXh0dXJlSWQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd2FibGVUaWxlOjpzZXRUZXh0dXJlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnRpbGVBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGls
ZWRMYXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6
c2V0VGlsaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpzeW5j
VGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ0NXKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVFZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVyc2VjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3VGlsZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGlsZWRMYXllckltcGw6OnNldFNraXBzRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RpbGVkTGF5ZXJJbXBsOjpzZXRUZXh0dXJlT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaWxlZExheWVySW1wbDo6c2V0U2FtcGxlZFRleGVsRm9ybWF0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oOgorCiAyMDExLTA4LTE4ICBLZW50YXJv
IEhhcmEgIDxoYXJha2VuQGdvb2dsZS5jb20+CiAKICAgICAgICAgQSBXb3JrZXIgY29uc3RydWN0
b3Igc2hvdWxkIHRocm93IFR5cGVFcnJvciwgd2hlbiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBp
cyBub3QgZW5vdWdoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDBmYzNhOTI2M2ZkZDQxNmU1NzFkNjM1
ZWYxODVkMDZjYTNjOWQ0MS4uZDJkZWUwZTg1ZWZmMmFkY2JlNDY4MTYzYWFkNTkzMjkxMTBhNjMz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzUxMCw4ICszNTEwLDYgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVu
dEhvc3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQ
bGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcsCkBAIC0zNTYwLDYgKzM1NTgsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVy
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
aWxpbmdEYXRhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRpbGluZ0RhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGQ2M2VhMTQ2MWQwNTdk
OTA5MmU1ODlmZmUxMjVhOTBjODQwZTY2MWQuLjg4MTJkZjYxY2JhYTlkYzNjZjU1NWIzODYzMDVl
NmUzOTk1ZTVlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEw
NCwxMiArMTA0LDEyIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KCkKIAogICAgIEludFJlY3QgZGlydHkgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlS
ZWN0KTsKICAgICBkaXJ0eS5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91
bmRzKCkpKTsKLSAgICBtX3RpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eSk7CisgICAgaW52YWxp
ZGF0ZVJlY3QoZGlydHkpOwogCiAgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV90aWxlci0+cHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCwgdGV4dHVyZVVw
ZGF0ZXIoKSk7CisgICAgcHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCk7CiAgICAgbV9kaXJ0eVJl
Y3QgPSBGbG9hdFJlY3QoKTsKIH0KIApAQCAtMTIyLDYgKzEyMiw3IEBAIHZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQogewogICAgIGlmICht
X3RleHR1cmVVcGRhdGVyKQogICAgICAgICByZXR1cm47CisKICNpZiBVU0UoU0tJQSkKICAgICBp
ZiAobGF5ZXJSZW5kZXJlcigpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewogICAg
ICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3Jl
YXRlKGxheWVyUmVuZGVyZXJDb250ZXh0KCksIENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZSht
X293bmVyKSwgbGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpKTsKQEAgLTEzMSwxMCArMTMy
LDUgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5l
ZWRlZCgpCiAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6
OmNyZWF0ZShsYXllclJlbmRlcmVyQ29udGV4dCgpLCBDb250ZW50TGF5ZXJQYWludGVyOjpjcmVh
dGUobV9vd25lciksIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpOwog
fQogCi12b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJl
cygpCi17Ci0gICAgbV90aWxlci0+cHJvdGVjdFRpbGVUZXh0dXJlcyhJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMoKSkpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXgg
YzlmZDBkODVjZThlYjMyM2ExMmY5MDEyYmJlMmYyNDNkZjc4MjQyMC4uYTBlOTZjMzRhMjBkNTQy
YTFkYTZlODcxNjA1NTg0YzBmOTFlZWM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5oCkBAIC02MCw3ICs2MCw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29u
dGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVl
ZGVkKCk7CiAgICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgcHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKIAogICAgIE93blB0cjxMYXllclRleHR1
cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDZlN2E5M2MwMDZhYzFiY2E3ZGU0Mjc4YjRmNDczZDFhNWM5YjcyN2IuLmEx
MTFhMmM3M2NiODdjZWU3NDlmMGY2MTJkZWI0ZTE0MWE0Y2I3NmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9t
aXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCk7CiAgICAgICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRl
bnRCb3VuZHMoKSk7CiAgICAgICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBtX3RpbGVyLT5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOworICAgICAgICAgICAg
aW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKICAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gSW50
UmVjdCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSW1hZ2VM
YXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgaWYgKHZpc2libGVMYXll
clJlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdGlsZXItPnByZXBh
cmVUb1VwZGF0ZSh2aXNpYmxlTGF5ZXJSZWN0KCksIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOwor
ICAgIHByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlTGF5ZXJSZWN0KCkpOwogfQogCiBMYXllclRleHR1
cmVVcGRhdGVyKiBJbWFnZUxheWVyQ2hyb21pdW06OnRleHR1cmVVcGRhdGVyKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDkwNDQ5OTc4YmVjN2U2Mzhj
NDBhZjZkZTI5NDdlOGUyMjY1NDM1NDcuLjk0NmU0NzY4OTdmMTFhOGQ4NGY0NDQwYzViYmE5OGFi
YjFhMTQyYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUs
NiArNDUsNyBAQAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNs
dWRlICJOb25Db21wb3NpdGVkQ29udGVudEhvc3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNl
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1h
bmFnZXIuaCIKQEAgLTUyMiw2ICs1MjMsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnJlbGVhc2VUZXh0dXJlcygpCiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2NvbnRleHQuZ2V0KCkpOwogfQogCitHQzNEZW51bSBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmJlc3RUZXh0dXJlRm9ybWF0KCkKK3sKKyAgICByZXR1cm4gUGxh
dGZvcm1Db2xvcjo6YmVzdFRleHR1cmVGb3JtYXQoY29udGV4dCgpKTsKK30KKwogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCiB7CiAgICAgaWYgKG1fY29udGV4
dCkKQEAgLTExMDksNyArMTExNSw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0
aWFsaXplU2hhcmVkT2JqZWN0cygpCiAgICAgLy8gc3RhcnQgd2hpbGUgd2UgZG8gb3RoZXIgd29y
ay4gT3RoZXIgcHJvZ3JhbXMgYXJlIGNyZWF0ZWQgbGF6aWx5IG9uIGZpcnN0IGFjY2Vzcy4KICAg
ICBtX3NoYXJlZEdlb21ldHJ5ID0gYWRvcHRQdHIobmV3IEdlb21ldHJ5QmluZGluZyhtX2NvbnRl
eHQuZ2V0KCkpKTsKICAgICBtX3JlbmRlclN1cmZhY2VQcm9ncmFtID0gYWRvcHRQdHIobmV3IEND
UmVuZGVyU3VyZmFjZTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBtX3RpbGVyUHJv
Z3JhbSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0obV9jb250ZXh0
LmdldCgpKSk7CisgICAgbV90aWxlclByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NUaWxlZExheWVy
SW1wbDo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+Zmx1c2goKSk7CiAKQEAgLTExNjUsNyArMTE3MSw3IEBAIGNvbnN0IEND
UmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVy
U3VyZmFjZU1hc2tQcm9nCiAgICAgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLmdl
dCgpOwogfQogCi1jb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0qIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtKCkKK2NvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dy
YW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtKCkKIHsKICAgICBBU1NFUlQo
bV90aWxlclByb2dyYW0pOwogICAgIGlmICghbV90aWxlclByb2dyYW0tPmluaXRpYWxpemVkKCkp
IHsKQEAgLTExNzUsMTAgKzExODEsMTAgQEAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9n
cmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbSgpCiAgICAgcmV0dXJuIG1f
dGlsZXJQcm9ncmFtLmdldCgpOwogfQogCi1jb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dy
YW1Td2l6emxlKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGUoKQor
Y29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGUqIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZSgpCiB7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3
aXp6bGUpCi0gICAgICAgIG1fdGlsZXJQcm9ncmFtU3dpenpsZSA9IGFkb3B0UHRyKG5ldyBMYXll
clRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlKG1fY29udGV4dC5nZXQoKSkpOworICAgICAg
ICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGUgPSBhZG9wdFB0cihuZXcgQ0NUaWxlZExheWVySW1wbDo6
UHJvZ3JhbVN3aXp6bGUobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3RpbGVyUHJvZ3Jh
bVN3aXp6bGUtPmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDAp
OwogICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGUtPmluaXRpYWxpemUoKTsKQEAgLTExODYs
MTAgKzExOTIsMTAgQEAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZSog
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2kKICAgICByZXR1cm4gbV90aWxl
clByb2dyYW1Td2l6emxlLmdldCgpOwogfQogCi1jb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlBy
b2dyYW1BQSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQSgpCitjb25zdCBD
Q1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQ
cm9ncmFtQUEoKQogewogICAgIGlmICghbV90aWxlclByb2dyYW1BQSkKLSAgICAgICAgbV90aWxl
clByb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1BQSht
X2NvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgbV90aWxlclByb2dyYW1BQSA9IGFkb3B0UHRyKG5l
dyBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtQUEobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYg
KCFtX3RpbGVyUHJvZ3JhbUFBLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIFRSQUNFX0VWRU5U
KCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbUFBOjppbml0aWFsaXplIiwgdGhp
cywgMCk7CiAgICAgICAgIG1fdGlsZXJQcm9ncmFtQUEtPmluaXRpYWxpemUoKTsKQEAgLTExOTcs
MTAgKzEyMDMsMTAgQEAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtQUEqIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtQUEoKQogICAgIHJldHVybiBtX3RpbGVyUHJv
Z3JhbUFBLmdldCgpOwogfQogCi1jb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6
emxlQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZUFBKCkKK2Nv
bnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlQUEqIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZUFBKCkKIHsKICAgICBpZiAoIW1fdGlsZXJQcm9ncmFt
U3dpenpsZUFBKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQSA9IGFkb3B0UHRyKG5l
dyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlQUEobV9jb250ZXh0LmdldCgpKSk7
CisgICAgICAgIG1fdGlsZXJQcm9ncmFtU3dpenpsZUFBID0gYWRvcHRQdHIobmV3IENDVGlsZWRM
YXllckltcGw6OlByb2dyYW1Td2l6emxlQUEobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFt
X3RpbGVyUHJvZ3JhbVN3aXp6bGVBQS0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlQUE6OmluaXRp
YWxpemUiLCB0aGlzLCAwKTsKICAgICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEtPmluaXRp
YWxpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNDE3ZjgyMmRl
MzFmYzUyOTdjYTQzYTZhNDMyZmY1NjIwZTZjYTQ1Yi4uYmUyM2Q1MmI2MjdjNjM1ZjU3OTgxNTk5
MTg3MmUxM2I3NWZmNjNiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAg
LTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5
ZXJUaWxlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNw
bGF5LmgiCkBAIC0xMjQsMTAgKzEyMywxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ0NIZWFkc1Vw
RGlzcGxheTo6UHJvZ3JhbSogaGVhZHNVcERpc3BsYXlQcm9ncmFtKCk7CiAgICAgY29uc3QgQ0NS
ZW5kZXJTdXJmYWNlOjpQcm9ncmFtKiByZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOwogICAgIGNvbnN0
IENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgp
OwotICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbSogdGlsZXJQcm9ncmFtKCk7
Ci0gICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZSogdGlsZXJQcm9n
cmFtU3dpenpsZSgpOwotICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbUFBKiB0
aWxlclByb2dyYW1BQSgpOwotICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3
aXp6bGVBQSogdGlsZXJQcm9ncmFtU3dpenpsZUFBKCk7CisgICAgY29uc3QgQ0NUaWxlZExheWVy
SW1wbDo6UHJvZ3JhbSogdGlsZXJQcm9ncmFtKCk7CisgICAgY29uc3QgQ0NUaWxlZExheWVySW1w
bDo6UHJvZ3JhbVN3aXp6bGUqIHRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKKyAgICBjb25zdCBDQ1Rp
bGVkTGF5ZXJJbXBsOjpQcm9ncmFtQUEqIHRpbGVyUHJvZ3JhbUFBKCk7CisgICAgY29uc3QgQ0NU
aWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVBQSogdGlsZXJQcm9ncmFtU3dpenpsZUFBKCk7
CiAgICAgY29uc3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3Jh
bSgpOwogICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwbHVnaW5MYXllclBy
b2dyYW0oKTsKICAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbSogdmlkZW9M
YXllclJHQkFQcm9ncmFtKCk7CkBAIC0xNTQsNiArMTUzLDggQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKIAorICAgIEdDM0Rl
bnVtIGJlc3RUZXh0dXJlRm9ybWF0KCk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGJv
b2wgc19pblBhaW50TGF5ZXJDb250ZW50czsKICNlbmRpZgpAQCAtMjE4LDEwICsyMTksMTAgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8R2VvbWV0cnlCaW5kaW5nPiBtX3NoYXJlZEdlb21ldHJ5Owog
ICAgIE93blB0cjxMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtPiBtX2JvcmRlclByb2dyYW07
CiAgICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0+IG1faGVhZHNVcERpc3BsYXlQ
cm9ncmFtOwotICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0+IG1fdGlsZXJQ
cm9ncmFtOwotICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlPiBt
X3RpbGVyUHJvZ3JhbVN3aXp6bGU7Ci0gICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bTo6UHJv
Z3JhbUFBPiBtX3RpbGVyUHJvZ3JhbUFBOwotICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW06
OlByb2dyYW1Td2l6emxlQUE+IG1fdGlsZXJQcm9ncmFtU3dpenpsZUFBOworICAgIE93blB0cjxD
Q1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtPiBtX3RpbGVyUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NU
aWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGU+IG1fdGlsZXJQcm9ncmFtU3dpenpsZTsKKyAg
ICBPd25QdHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbUFBPiBtX3RpbGVyUHJvZ3JhbUFBOwor
ICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZUFBPiBtX3RpbGVyUHJv
Z3JhbVN3aXp6bGVBQTsKICAgICBPd25QdHI8Q0NDYW52YXNMYXllckltcGw6OlByb2dyYW0+IG1f
Y2FudmFzTGF5ZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3Jh
bT4gbV9wbHVnaW5MYXllclByb2dyYW07CiAgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFz
a1Byb2dyYW0+IG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
VXBkYXRlci5oCmluZGV4IDIxZDUyZDAyYTVhMjFiNjExMWY3OGI1NDBhZWM2OGMzNDdhMDllZmEu
Ljk3NmQ3OWVjOTkzYjNmYWU5MjU4MWJlMjNlMzhhM2ViNGQxYzZmNDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03OCw0ICs3OSwz
IEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogI2VuZGlmIC8vIExheWVyVGV4dHVyZVVwZGF0ZXJfaAotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRpbGVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggN2ZkOTZmOTIzYjYwNzAwM2ZlMzQ5MTA5ZmE5OGIxNzJjZGIwZjE0Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1
bS5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJGbG9h
dFF1YWQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1
ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCi0jaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0KLXVz
aW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBGbG9h
dFBvaW50M0QgRWRnZTsKLQotUGFzc093blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IExheWVyVGls
ZXJDaHJvbWl1bTo6Y3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwg
Y29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uIGJvcmRlcikKLXsKLSAg
ICBpZiAoIWxheWVyUmVuZGVyZXIgfHwgdGlsZVNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUaWxlckNocm9taXVt
KGxheWVyUmVuZGVyZXIsIHRpbGVTaXplLCBib3JkZXIpKTsKLX0KLQotTGF5ZXJUaWxlckNocm9t
aXVtOjpMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRl
cmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQot
ICAgIDogbV90ZXh0dXJlRm9ybWF0KFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0dXJlRm9ybWF0KGxh
eWVyUmVuZGVyZXItPmNvbnRleHQoKSkpCi0gICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKLSAgICAs
IG1fdGV4dHVyZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVwZGF0ZXI6OkludmFsaWRPcmllbnRh
dGlvbikKLSAgICAsIG1fc2FtcGxlZFRleGVsRm9ybWF0KExheWVyVGV4dHVyZVVwZGF0ZXI6OlNh
bXBsZWRUZXhlbEZvcm1hdEludmFsaWQpCi0gICAgLCBtX3RpbGluZ0RhdGEobWF4KHRpbGVTaXpl
LndpZHRoKCksIHRpbGVTaXplLmhlaWdodCgpKSwgMCwgMCwgYm9yZGVyID09IEhhc0JvcmRlclRl
eGVscykKLSAgICAsIG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKQotewotICAgIHNldFRp
bGVTaXplKHRpbGVTaXplKTsKLX0KLQotTGF5ZXJUaWxlckNocm9taXVtOjp+TGF5ZXJUaWxlckNo
cm9taXVtKCkKLXsKLSAgICByZXNldCgpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRCogTGF5ZXJU
aWxlckNocm9taXVtOjpsYXllclJlbmRlcmVyQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KGxheWVyUmVuZGVyZXIoKSk7Ci0gICAgcmV0dXJuIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgp
OwotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKLXsKLSAgICBpZiAobV90aWxlU2l6ZSA9PSBzaXplKQotICAgICAgICByZXR1cm47
Ci0KLSAgICByZXNldCgpOwotCi0gICAgbV90aWxlU2l6ZSA9IHNpemU7Ci0gICAgbV90aWxpbmdE
YXRhLnNldE1heFRleHR1cmVTaXplKG1heChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsK
LX0KLQotTWFuYWdlZFRleHR1cmUqIExheWVyVGlsZXJDaHJvbWl1bTo6Z2V0U2luZ2xlVGV4dHVy
ZSgpCi17Ci0gICAgaWYgKG1fdGlsaW5nRGF0YS5udW1UaWxlcygpICE9IDEpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgVGlsZSogdGlsZSA9IHRpbGVBdCgwLCAwKTsKLSAgICByZXR1cm4gdGls
ZSA/IHRpbGUtPnRleHR1cmUoKSA6IDA7Ci19Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpy
ZXNldCgpCi17Ci0gICAgbV90aWxlcy5jbGVhcigpOwotICAgIG1fdW51c2VkVGlsZXMuY2xlYXIo
KTsKLSAgICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwotICAgIG1fcGFpbnRSZWN0
ID0gSW50UmVjdCgpOwotICAgIG1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLX0KLQotTGF5ZXJU
aWxlckNocm9taXVtOjpUaWxlKiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZVRpbGUoaW50IGks
IGludCBqKQotewotICAgIEFTU0VSVCghdGlsZUF0KGksIGopKTsKLQotICAgIFJlZlB0cjxUaWxl
PiB0aWxlOwotICAgIGlmIChtX3VudXNlZFRpbGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgdGls
ZSA9IG1fdW51c2VkVGlsZXMubGFzdCgpLnJlbGVhc2UoKTsKLSAgICAgICAgbV91bnVzZWRUaWxl
cy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIEFTU0VSVCh0aWxlLT5yZWZDb3VudCgpID09IDEpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyID0gbGF5ZXJSZW5k
ZXJlcigpLT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7Ci0gICAgICAgIHRpbGUgPSBhZG9wdFJl
ZihuZXcgVGlsZShNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1hbmFnZXIpKSk7Ci0gICAgfQotICAg
IG1fdGlsZXMuYWRkKG1ha2VfcGFpcihpLCBqKSwgdGlsZSk7Ci0KLSAgICB0aWxlLT5tb3ZlVG8o
aSwgaik7Ci0gICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IHRpbGVMYXllclJlY3QodGlsZS5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gdGlsZS5nZXQoKTsKLX0KLQotdm9pZCBMYXllclRpbGVyQ2hy
b21pdW06OmludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAg
ICBpZiAoIW1fdGlsZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8VGls
ZU1hcEtleT4gcmVtb3ZlS2V5czsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3RpbGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV90aWxlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IFRpbGUqIHRpbGUgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIEludFJlY3QgdGlsZVJl
Y3QgPSB0aWxlQ29udGVudFJlY3QodGlsZSk7Ci0gICAgICAgIGlmICh0aWxlUmVjdC5pbnRlcnNl
Y3RzKGNvbnRlbnRSZWN0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZW1vdmVL
ZXlzLmFwcGVuZChpdGVyLT5maXJzdCk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByZW1vdmVLZXlzLnNpemUoKTsgKytpKQotICAgICAgICBtX3VudXNlZFRpbGVzLmFwcGVu
ZChtX3RpbGVzLnRha2UocmVtb3ZlS2V5c1tpXSkpOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKLXsK
LSAgICBjb25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29u
dGVudFJlY3QpOwotCi0gICAgbGVmdCA9IG1fdGlsaW5nRGF0YS50aWxlWEluZGV4RnJvbVNyY0Nv
b3JkKGxheWVyUmVjdC54KCkpOwotICAgIHRvcCA9IG1fdGlsaW5nRGF0YS50aWxlWUluZGV4RnJv
bVNyY0Nvb3JkKGxheWVyUmVjdC55KCkpOwotICAgIHJpZ2h0ID0gbV90aWxpbmdEYXRhLnRpbGVY
SW5kZXhGcm9tU3JjQ29vcmQobGF5ZXJSZWN0Lm1heFgoKSAtIDEpOwotICAgIGJvdHRvbSA9IG1f
dGlsaW5nRGF0YS50aWxlWUluZGV4RnJvbVNyY0Nvb3JkKGxheWVyUmVjdC5tYXhZKCkgLSAxKTsK
LX0KLQotSW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OmNvbnRlbnRSZWN0VG9MYXllclJlY3Qo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9zKGNv
bnRlbnRSZWN0LngoKSAtIG1fbGF5ZXJQb3NpdGlvbi54KCksIGNvbnRlbnRSZWN0LnkoKSAtIG1f
bGF5ZXJQb3NpdGlvbi55KCkpOwotICAgIEludFJlY3QgbGF5ZXJSZWN0KHBvcywgY29udGVudFJl
Y3Quc2l6ZSgpKTsKLQotICAgIC8vIENsaXAgdG8gdGhlIHBvc2l0aW9uLgotICAgIGlmIChwb3Mu
eCgpIDwgMCB8fCBwb3MueSgpIDwgMCkKLSAgICAgICAgbGF5ZXJSZWN0ID0gSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgSW50U2l6ZShjb250ZW50UmVjdC53aWR0aCgpICsgcG9zLngoKSwgY29udGVu
dFJlY3QuaGVpZ2h0KCkgKyBwb3MueSgpKSk7Ci0gICAgcmV0dXJuIGxheWVyUmVjdDsKLX0KLQot
SW50UmVjdCBMYXllclRpbGVyQ2hyb21pdW06OmxheWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgY29udGVudFJlY3QgPSBs
YXllclJlY3Q7Ci0gICAgY29udGVudFJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xh
eWVyUG9zaXRpb24ueSgpKTsKLSAgICByZXR1cm4gY29udGVudFJlY3Q7Ci19Ci0KLUxheWVyVGls
ZXJDaHJvbWl1bTo6VGlsZSogTGF5ZXJUaWxlckNocm9taXVtOjp0aWxlQXQoaW50IGksIGludCBq
KSBjb25zdAotewotICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChtYWtlX3BhaXIoaSwgaikp
LmdldCgpOwotICAgIEFTU0VSVCghdGlsZSB8fCB0aWxlLT5yZWZDb3VudCgpID09IDEpOwotICAg
IHJldHVybiB0aWxlOwotfQotCi1JbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6dGlsZUNvbnRl
bnRSZWN0KGNvbnN0IFRpbGUqIHRpbGUpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBjb250ZW50UmVj
dCA9IHRpbGVMYXllclJlY3QodGlsZSk7Ci0gICAgY29udGVudFJlY3QubW92ZShtX2xheWVyUG9z
aXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKLSAgICByZXR1cm4gY29udGVudFJlY3Q7
Ci19Ci0KLUludFJlY3QgTGF5ZXJUaWxlckNocm9taXVtOjp0aWxlTGF5ZXJSZWN0KGNvbnN0IFRp
bGUqIHRpbGUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IGluZGV4ID0gbV90aWxpbmdEYXRhLnRp
bGVJbmRleCh0aWxlLT5pKCksIHRpbGUtPmooKSk7Ci0gICAgSW50UmVjdCBsYXllclJlY3QgPSBt
X3RpbGluZ0RhdGEudGlsZUJvdW5kc1dpdGhCb3JkZXIoaW5kZXgpOwotICAgIGxheWVyUmVjdC5z
ZXRTaXplKG1fdGlsZVNpemUpOwotICAgIHJldHVybiBsYXllclJlY3Q7Ci19Ci0KLXZvaWQgTGF5
ZXJUaWxlckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkKLXsKLSAgICBpZiAoY29udGVudFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNEcmF3KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJlY3QpOwotCi0g
ICAgLy8gRGlydHkgcmVjdHMgYXJlIGFsd2F5cyBpbiBsYXllciBzcGFjZSwgYXMgdGhlIGxheWVy
IGNvdWxkIGJlIHJlcG9zaXRpb25lZAotICAgIC8vIGFmdGVyIGludmFsaWRhdGlvbi4KLSAgICBj
b25zdCBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29udGVudFJl
Y3QpOwotCi0gICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBjb250ZW50UmVj
dFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0g
ICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewotICAgICAgICBmb3IgKGlu
dCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0g
dGlsZUF0KGksIGopOwotICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgSW50UmVjdCBib3VuZCA9IHRpbGVMYXllclJlY3QodGlsZSk7
Ci0gICAgICAgICAgICBib3VuZC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKLSAgICAgICAgICAgIHRp
bGUtPm1fZGlydHlMYXllclJlY3QudW5pdGUoYm91bmQpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6aW52YWxpZGF0ZUVudGlyZUxheWVyKCkKLXsKLSAg
ICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ZXIgIT0g
bV90aWxlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVChpdGVyLT5zZWNvbmQtPnJl
ZkNvdW50KCkgPT0gMSk7Ci0gICAgICAgIG1fdW51c2VkVGlsZXMuYXBwZW5kKGl0ZXItPnNlY29u
ZC5yZWxlYXNlKCkpOwotICAgIH0KLSAgICBtX3RpbGVzLmNsZWFyKCk7Ci0KLSAgICBtX3RpbGlu
Z0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6
cHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKLXsKLSAgICBp
ZiAoY29udGVudFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250
ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLQotICAgIGZvciAoaW50IGogPSB0
b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0g
cmlnaHQ7ICsraSkgewotICAgICAgICAgICAgVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAg
ICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZVNp
emUsIG1fdGV4dHVyZUZvcm1hdCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIHRpbGUtPnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVTaXplLCBtX3RleHR1cmVGb3Jt
YXQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBMYXllclRleHR1cmVVcGRh
dGVyKiB0ZXh0dXJlVXBkYXRlcikKLXsKLSAgICBtX3NraXBzRHJhdyA9IGZhbHNlOwotCi0gICAg
aWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBtX3VwZGF0ZVJlY3QgPSBJbnRS
ZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJbnZhbGlkYXRlIG9sZCB0
aWxlcyB0aGF0IHdlcmUgcHJldmlvdXNseSB1c2VkIGJ1dCBhcmVuJ3QgaW4gdXNlIHRoaXMKLSAg
ICAvLyBmcmFtZSBzbyB0aGF0IHRoZXkgY2FuIGdldCByZXVzZWQgZm9yIG5ldyB0aWxlcy4KLSAg
ICBpbnZhbGlkYXRlVGlsZXMoY29udGVudFJlY3QpOwotICAgIGdyb3dMYXllclRvQ29udGFpbihj
b250ZW50UmVjdCk7Ci0KLSAgICBpZiAoIW51bVRpbGVzKCkpIHsKLSAgICAgICAgbV91cGRhdGVS
ZWN0ID0gSW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRl
IHRpbGVzIGFzIG5lZWRlZCwgZXhwYW5kaW5nIGEgZGlydHkgcmVjdCB0byBjb250YWluIGFsbAot
ICAgIC8vIHRoZSBkaXJ0eSByZWdpb25zIGN1cnJlbnRseSBiZWluZyBkcmF3bi4KLSAgICBJbnRS
ZWN0IGRpcnR5TGF5ZXJSZWN0OwotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0g
ICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAgICAgICAg
VGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSkKLSAgICAg
ICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKLQotICAgICAgICAgICAgaWYgKCF0
aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KSkKLSAg
ICAgICAgICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVjdCh0aWxl
KTsKLQotICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUobV90aWxlU2l6
ZSwgbV90ZXh0dXJlRm9ybWF0KSkgewotICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICByZXNldCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGlydHlMYXllclJlY3QudW5pdGUodGlsZS0+bV9k
aXJ0eUxheWVyUmVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEdWUgdG8gYm9yZGVy
cywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRlbmRlZCB0byB0aWxlIGJvdW5kYXJpZXMsIGl0
Ci0gICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGluZyBtb3JlIHRpbGVzIHRoYW4gdGhlIG9yaWdp
bmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCi0gICAgLy8gdGhhdCBvcmlnaW5hbCByZWN0IHNvIHdl
IGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4gbmVjZXNzYXJ5LgotICAgIG1fdXBkYXRlUmVj
dCA9IGNvbnRlbnRSZWN0OwotCi0gICAgbV9wYWludFJlY3QgPSBsYXllclJlY3RUb0NvbnRlbnRS
ZWN0KGRpcnR5TGF5ZXJSZWN0KTsKLSAgICBpZiAoZGlydHlMYXllclJlY3QuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXh0dXJlVXBkYXRlci0+cHJlcGFyZVRvVXBkYXRlKG1f
cGFpbnRSZWN0LCBtX3RpbGVTaXplLCBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkpOwotfQot
Ci12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlUmVjdChMYXllclRleHR1cmVVcGRhdGVy
KiB0ZXh0dXJlVXBkYXRlcikKLXsKLSAgICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBjb21wb3Np
dGluZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0byBiZWNv
bWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KLSAgICBpZiAoIW1fdGlsaW5nRGF0YS50b3RhbFNp
emVYKCkgfHwgIW1fdGlsaW5nRGF0YS50b3RhbFNpemVZKCkgfHwgbV91cGRhdGVSZWN0LmlzRW1w
dHkoKSB8fCAhbnVtVGlsZXMoKSB8fCBtX3NraXBzRHJhdykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwot
ICAgIG1fdGV4dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0aW9uKCk7
Ci0gICAgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlci0+c2FtcGxlZFRleGVs
Rm9ybWF0KG1fdGV4dHVyZUZvcm1hdCk7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tOwotICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3QsIGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsr
aikgewotICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7Ci0gICAg
ICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwotICAgICAgICAgICAgaWYgKCF0aWxl
KQotICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOwotICAgICAgICAgICAg
ZWxzZSBpZiAoIXRpbGUtPmRpcnR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20u
Ci0gICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxlQ29udGVudFJlY3QodGlsZSk7
Ci0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCBhbmNob3IgPSBzb3VyY2VSZWN0LmxvY2F0aW9u
KCk7Ci0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChsYXllclJlY3RUb0NvbnRlbnRS
ZWN0KHRpbGUtPm1fZGlydHlMYXllclJlY3QpKTsKLSAgICAgICAgICAgIC8vIFBhaW50IHJlY3Qg
bm90IGd1YXJhbnRlZWQgdG8gbGluZSB1cCBvbiB0aWxlIGJvdW5kYXJpZXMsIHNvCi0gICAgICAg
ICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzb3VyY2VSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUg
b2YgaXQuCi0gICAgICAgICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChtX3BhaW50UmVjdCk7Ci0g
ICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIEFTU0VSVCh0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQo
KSk7Ci0KLSAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1
cGxvYWQgaW50by4KLSAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNl
UmVjdC54KCkgLSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3Vy
Y2VSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKLSAgICAg
ICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCi0g
ICAgICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFp
bnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KLSAgICAgICAgICAg
IEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgpLCBz
b3VyY2VSZWN0LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBpZiAocGFpbnRP
ZmZzZXQueCgpIDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYg
KHBhaW50T2Zmc2V0LnkoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
ICAgIGlmIChwYWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJlY3Qu
d2lkdGgoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50
T2Zmc2V0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpID4gbV9wYWludFJlY3QuaGVpZ2h0KCkpCi0g
ICAgICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5i
aW5kVGV4dHVyZShjb250ZXh0KTsKLSAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0g
bV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6
IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOwotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcikpOwotICAgICAgICAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikp
OwotICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7Ci0KLSAgICAgICAgICAgIHRleHR1cmVVcGRhdGVy
LT51cGRhdGVUZXh0dXJlUmVjdCh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0
KTsKLSAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldExheWVyUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmIGxheWVyUG9zaXRpb24pCi17Ci0gICAgbV9sYXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlv
bjsKLX0KLQotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX3RpbGVzLnNpemUoKSB8
fCBjb250ZW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIGRlZmluZWQo
T1NfQ0hST01FT1MpCi0gICAgLy8gRklYTUU6IERpc2FibGUgYW50aS1hbGlhc2luZyB0byB3b3Jr
YXJvdW5kIGJyb2tlbiBkcml2ZXIuCi0gICAgYm9vbCB1c2VBQSA9IGZhbHNlOwotI2Vsc2UKLSAg
ICAvLyBVc2UgYW50aS1hbGlhc2luZyBwcm9ncmFtcyB3aGVuIGJvcmRlciB0ZXhlbHMgYXJlIHBy
ZXNldCBhbmQgdHJhbnNmb3JtCi0gICAgLy8gaXMgbm90IGFuIGludGVnZXIgdHJhbnNsYXRpb24u
Ci0gICAgYm9vbCB1c2VBQSA9IChtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkgJiYgIWdsb2Jh
bFRyYW5zZm9ybS5pc0ludGVnZXJUcmFuc2xhdGlvbigpKTsKLSNlbmRpZgotCi0gICAgc3dpdGNo
IChtX3NhbXBsZWRUZXhlbEZvcm1hdCkgewotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
U2FtcGxlZFRleGVsRm9ybWF0UkdCQToKLSAgICAgICAgaWYgKHVzZUFBKQotICAgICAgICAgICAg
ZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVu
ZGVyZXIoKS0+dGlsZXJQcm9ncmFtQUEoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1B
QSgpLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgbGF5
ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1BQSgpLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2Nh
dGlvbigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0
LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFt
KCksIC0xLCAtMSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQToKLSAgICAgICAgaWYgKHVzZUFBKQotICAgICAgICAg
ICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVy
UmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZUFBKCksIGxheWVyUmVuZGVyZXIoKS0+dGls
ZXJQcm9ncmFtU3dpenpsZUFBKCktPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zv
cm1Mb2NhdGlvbigpLCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpLT5m
cmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVy
UmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZSgpLCAtMSwgLTEpOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCi17Ci0gICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250
YWluIHRoaXMgY29udGVudCByZWN0LgotICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJl
Y3RUb0xheWVyUmVjdChjb250ZW50UmVjdCk7Ci0gICAgSW50U2l6ZSByZWN0U2l6ZSA9IEludFNp
emUobGF5ZXJSZWN0Lm1heFgoKSwgbGF5ZXJSZWN0Lm1heFkoKSk7Ci0KLSAgICBJbnRTaXplIG9s
ZExheWVyU2l6ZShtX3RpbGluZ0RhdGEudG90YWxTaXplWCgpLCBtX3RpbGluZ0RhdGEudG90YWxT
aXplWSgpKTsKLSAgICBJbnRTaXplIG5ld1NpemUgPSByZWN0U2l6ZS5leHBhbmRlZFRvKG9sZExh
eWVyU2l6ZSk7Ci0gICAgbV90aWxpbmdEYXRhLnNldFRvdGFsU2l6ZShuZXdTaXplLndpZHRoKCks
IG5ld1NpemUuaGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBpc0NDVyhjb25zdCBGbG9hdFF1
YWQmIHF1YWQpCi17Ci0gICAgRmxvYXRQb2ludCB2MSA9IEZsb2F0UG9pbnQocXVhZC5wMigpLngo
KSAtIHF1YWQucDEoKS54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5w
MigpLnkoKSAtIHF1YWQucDEoKS55KCkpOwotICAgIEZsb2F0UG9pbnQgdjIgPSBGbG9hdFBvaW50
KHF1YWQucDMoKS54KCkgLSBxdWFkLnAyKCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHF1YWQucDMoKS55KCkgLSBxdWFkLnAyKCkueSgpKTsKLSAgICByZXR1cm4gKHYxLngo
KSAqIHYyLnkoKSAtIHYxLnkoKSAqIHYyLngoKSkgPCAwOwotfQotCi1zdGF0aWMgRWRnZSBjb21w
dXRlRWRnZShjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBxLCBmbG9hdCBz
aWduKQotewotICAgIEFTU0VSVChwICE9IHEpOwotCi0gICAgRmxvYXRQb2ludCB0YW5nZW50KHAu
eSgpIC0gcS55KCksIHEueCgpIC0gcC54KCkpOwotICAgIGZsb2F0IHNjYWxlID0gc2lnbiAvIHRh
bmdlbnQubGVuZ3RoKCk7Ci0gICAgZmxvYXQgY3Jvc3MyID0gcC54KCkgKiBxLnkoKSAtIHEueCgp
ICogcC55KCk7Ci0KLSAgICByZXR1cm4gRWRnZSh0YW5nZW50LngoKSAqIHNjYWxlLAotICAgICAg
ICAgICAgICAgIHRhbmdlbnQueSgpICogc2NhbGUsCi0gICAgICAgICAgICAgICAgY3Jvc3MyICog
c2NhbGUpOwotfQotCi1zdGF0aWMgRmxvYXRQb2ludCBpbnRlcnNlY3QoY29uc3QgRWRnZSYgYSwg
Y29uc3QgRWRnZSYgYikKLXsKLSAgICByZXR1cm4gRmxvYXRQb2ludCgKLSAgICAgICAgKGEueSgp
ICogYi56KCkgLSBiLnkoKSAqIGEueigpKSAvIChhLngoKSAqIGIueSgpIC0gYi54KCkgKiBhLnko
KSksCi0gICAgICAgIChhLngoKSAqIGIueigpIC0gYi54KCkgKiBhLnooKSkgLyAoYi54KCkgKiBh
LnkoKSAtIGEueCgpICogYi55KCkpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6ZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgaW50
IGVkZ2VMb2NhdGlvbikKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgobGF5ZXJS
ZW5kZXJlcigpLT53aW5kb3dNYXRyaXgoKSAqIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1h
dHJpeCgpICogZ2xvYmFsVHJhbnNmb3JtKTsKLQotICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQg
WiBjb21wb25lbnQuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4WFlXID0KLSAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXgobWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIDAsIG1h
dHJpeC5tMTQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm0yMSgpLCBt
YXRyaXgubTIyKCksIDAsIG1hdHJpeC5tMjQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIDEsIG1hdHJpeC5tMzQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIDAsIG1hdHJp
eC5tNDQoKSk7Ci0KLSAgICAvLyBEb24ndCBkcmF3IGFueSB0aWxlcyB3aGVuIG1hdHJpeCBpcyBu
b3QgaW52ZXJ0aWJsZS4KLSAgICBpZiAoIW1hdHJpeFhZVy5pc0ludmVydGlibGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZSA9IG1hdHJpeFhZ
Vy5pbnZlcnNlKCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVu
ZGVyZXJDb250ZXh0KCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJv
Z3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKSk7Ci0KLSAgICAvLyBNYXAgY29udGVudCByZWN0YW5nbGUgdG8gZGV2aWNlIHNwYWNlLgot
ICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkID0gbWF0cml4Lm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRl
bnRSZWN0KSk7Ci0KLSAgICAvLyBDb3VudGVyLWNsb2Nrd2lzZT8KLSAgICBmbG9hdCBzaWduID0g
aXNDQ1coZGV2aWNlUXVhZCkgPyAtMSA6IDE7Ci0KLSAgICAvLyBDb21wdXRlIG91dGVyIGVkZ2Vz
LgotICAgIEVkZ2UgbGVmdEVkZ2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnA0KCksIGRldmlj
ZVF1YWQucDEoKSwgc2lnbik7Ci0gICAgRWRnZSByaWdodEVkZ2UgPSBjb21wdXRlRWRnZShkZXZp
Y2VRdWFkLnAyKCksIGRldmljZVF1YWQucDMoKSwgc2lnbik7Ci0gICAgRWRnZSB0b3BFZGdlID0g
Y29tcHV0ZUVkZ2UoZGV2aWNlUXVhZC5wMSgpLCBkZXZpY2VRdWFkLnAyKCksIHNpZ24pOwotICAg
IEVkZ2UgYm90dG9tRWRnZSA9IGNvbXB1dGVFZGdlKGRldmljZVF1YWQucDMoKSwgZGV2aWNlUXVh
ZC5wNCgpLCBzaWduKTsKLQotICAgIGlmIChlZGdlTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAg
Ly8gTW92ZSBvdXRlciBlZGdlcyB0byBlbnN1cmUgdGhhdCBhbGwgcGFydGlhbGx5IGNvdmVyZWQg
cGl4ZWxzIGFyZQotICAgICAgICAvLyBwcm9jZXNzZWQuCi0gICAgICAgIGxlZnRFZGdlLm1vdmUo
MCwgMCwgMC41Zik7Ci0gICAgICAgIHJpZ2h0RWRnZS5tb3ZlKDAsIDAsIDAuNWYpOwotICAgICAg
ICB0b3BFZGdlLm1vdmUoMCwgMCwgMC41Zik7Ci0gICAgICAgIGJvdHRvbUVkZ2UubW92ZSgwLCAw
LCAwLjVmKTsKLQotICAgICAgICBmbG9hdCBlZGdlWzEyXTsKLSAgICAgICAgZWRnZVswXSA9IGxl
ZnRFZGdlLngoKTsKLSAgICAgICAgZWRnZVsxXSA9IGxlZnRFZGdlLnkoKTsKLSAgICAgICAgZWRn
ZVsyXSA9IGxlZnRFZGdlLnooKTsKLSAgICAgICAgZWRnZVszXSA9IHRvcEVkZ2UueCgpOwotICAg
ICAgICBlZGdlWzRdID0gdG9wRWRnZS55KCk7Ci0gICAgICAgIGVkZ2VbNV0gPSB0b3BFZGdlLnoo
KTsKLSAgICAgICAgZWRnZVs2XSA9IHJpZ2h0RWRnZS54KCk7Ci0gICAgICAgIGVkZ2VbN10gPSBy
aWdodEVkZ2UueSgpOwotICAgICAgICBlZGdlWzhdID0gcmlnaHRFZGdlLnooKTsKLSAgICAgICAg
ZWRnZVs5XSA9IGJvdHRvbUVkZ2UueCgpOwotICAgICAgICBlZGdlWzEwXSA9IGJvdHRvbUVkZ2Uu
eSgpOwotICAgICAgICBlZGdlWzExXSA9IGJvdHRvbUVkZ2UueigpOwotICAgICAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dW5pZm9ybTNmdihlZGdlTG9jYXRpb24sIGVkZ2UsIDQpKTsKLSAgICB9
Ci0KLSAgICBFZGdlIHByZXZFZGdlWSA9IHRvcEVkZ2U7Ci0KLSAgICBpbnQgbGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tOwotICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNvbnRl
bnRSZWN0VG9MYXllclJlY3QoY29udGVudFJlY3QpOwotICAgIGZvciAoaW50IGogPSB0b3A7IGog
PD0gYm90dG9tOyArK2opIHsKLSAgICAgICAgRWRnZSBwcmV2RWRnZVggPSBsZWZ0RWRnZTsKLQot
ICAgICAgICBFZGdlIGVkZ2VZID0gYm90dG9tRWRnZTsKLSAgICAgICAgaWYgKGogPCAobV90aWxp
bmdEYXRhLm51bVRpbGVzWSgpIC0gMSkpIHsKLSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3Qg
PSB1bmlvblJlY3QobV90aWxpbmdEYXRhLnRpbGVCb3VuZHMobV90aWxpbmdEYXRhLnRpbGVJbmRl
eCgwLCBqKSksIG1fdGlsaW5nRGF0YS50aWxlQm91bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5kZXgo
bV90aWxpbmdEYXRhLm51bVRpbGVzWCgpIC0gMSwgaikpKTsKLSAgICAgICAgICAgIHRpbGVSZWN0
LmludGVyc2VjdChsYXllclJlY3QpOwotCi0gICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHJvd3Mu
Ci0gICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCks
IG1fbGF5ZXJQb3NpdGlvbi55KCkpOwotCi0gICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRpbGVS
ZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDIo
dGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOwotCi0gICAgICAgICAgICAvLyBNYXAgcG9p
bnRzIHRvIGRldmljZSBzcGFjZS4KLSAgICAgICAgICAgIHAxID0gbWF0cml4Lm1hcFBvaW50KHAx
KTsKLSAgICAgICAgICAgIHAyID0gbWF0cml4Lm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAg
Ly8gQ29tcHV0ZSBob3Jpem9udGFsIGVkZ2UuCi0gICAgICAgICAgICBlZGdlWSA9IGNvbXB1dGVF
ZGdlKHAxLCBwMiwgc2lnbik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gbGVm
dDsgaSA8PSByaWdodDsgKytpKSB7Ci0gICAgICAgICAgICBUaWxlKiB0aWxlID0gdGlsZUF0KGks
IGopOwotICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBBU1NFUlQodGlsZS0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOwotCi0g
ICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPmJpbmRUZXh0dXJlKGNvbnRleHQpOwotCi0gICAg
ICAgICAgICAvLyBEb24ndCB1c2UgdGlsZUNvbnRlbnRSZWN0IGhlcmUsIGFzIHRoYXQgY29udGFp
bnMgdGhlIGZ1bGwKLSAgICAgICAgICAgIC8vIHJlY3Qgd2l0aCBib3JkZXIgdGV4ZWxzIHdoaWNo
IHNob3VsZG4ndCBiZSBkcmF3bi4KLSAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBtX3Rp
bGluZ0RhdGEudGlsZUJvdW5kcyhtX3RpbGluZ0RhdGEudGlsZUluZGV4KHRpbGUtPmkoKSwgdGls
ZS0+aigpKSk7Ci0gICAgICAgICAgICBJbnRSZWN0IGRpc3BsYXlSZWN0ID0gdGlsZVJlY3Q7Ci0g
ICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0KTsKLQotICAgICAgICAgICAg
Ly8gS2VlcCB0cmFjayBvZiBob3cgdGhlIHRvcCBsZWZ0IGhhcyBtb3ZlZCwgc28gdGhlIHRleHR1
cmUgY2FuIGJlCi0gICAgICAgICAgICAvLyBvZmZzZXQgdGhlIHNhbWUgYW1vdW50LgotICAgICAg
ICAgICAgSW50U2l6ZSBkaXNwbGF5T2Zmc2V0ID0gdGlsZVJlY3QubWluWE1pbllDb3JuZXIoKSAt
IGRpc3BsYXlSZWN0Lm1pblhNaW5ZQ29ybmVyKCk7Ci0KLSAgICAgICAgICAgIC8vIFNraXAgZW1w
dHkgdGlsZXMuCi0gICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB0aWxlUmVjdC5tb3ZlKG1fbGF5ZXJQb3Np
dGlvbi54KCksIG1fbGF5ZXJQb3NpdGlvbi55KCkpOwotCi0gICAgICAgICAgICBGbG9hdFJlY3Qg
Y2xhbXBSZWN0KHRpbGVSZWN0KTsKLSAgICAgICAgICAgIC8vIENsYW1wIHRleHR1cmUgY29vcmRp
bmF0ZXMgdG8gYXZvaWQgc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5ZXIKLSAgICAgICAgICAgIC8v
IGJ5IGRlZmxhdGluZyB0aGUgdGlsZSByZWdpb24gaGFsZiBhIHRleGVsIG9yIGhhbGYgYSB0ZXhl
bAotICAgICAgICAgICAgLy8gbWludXMgZXBzaWxvbiBmb3Igb25lIHBpeGVsIGxheWVycy4gVGhl
IHJlc3VsdGluZyBjbGFtcCByZWdpb24KLSAgICAgICAgICAgIC8vIGlzIG1hcHBlZCB0byB0aGUg
dW5pdCBzcXVhcmUgYnkgdGhlIHZlcnRleCBzaGFkZXIgYW5kIG1hcHBlZAotICAgICAgICAgICAg
Ly8gYmFjayB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMgYnkgdGhlIGZyYWdtZW50
IHNoYWRlcgotICAgICAgICAgICAgLy8gYWZ0ZXIgYmVpbmcgY2xhbXBlZCB0byAwLTEgcmFuZ2Uu
Ci0gICAgICAgICAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0gMSAvIDEwMjQuMGY7Ci0gICAgICAg
ICAgICBmbG9hdCBjbGFtcFggPSBtaW4oMC41LCBjbGFtcFJlY3Qud2lkdGgoKSAvIDIuMCAtIGVw
c2lsb24pOwotICAgICAgICAgICAgZmxvYXQgY2xhbXBZID0gbWluKDAuNSwgY2xhbXBSZWN0Lmhl
aWdodCgpIC8gMi4wIC0gZXBzaWxvbik7Ci0gICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVgo
LWNsYW1wWCk7Ci0gICAgICAgICAgICBjbGFtcFJlY3QuaW5mbGF0ZVkoLWNsYW1wWSk7Ci0gICAg
ICAgICAgICBGbG9hdFNpemUgY2xhbXBPZmZzZXQgPSBjbGFtcFJlY3QubWluWE1pbllDb3JuZXIo
KSAtIEZsb2F0UmVjdCh0aWxlUmVjdCkubWluWE1pbllDb3JuZXIoKTsKLQotICAgICAgICAgICAg
RmxvYXRQb2ludCB0ZXhPZmZzZXQgPSBtX3RpbGluZ0RhdGEudGV4dHVyZU9mZnNldCh0aWxlLT5p
KCksIHRpbGUtPmooKSkgKyBjbGFtcE9mZnNldCArIEZsb2F0U2l6ZShkaXNwbGF5T2Zmc2V0KTsK
LSAgICAgICAgICAgIGZsb2F0IHRpbGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVT
aXplLndpZHRoKCkpOwotICAgICAgICAgICAgZmxvYXQgdGlsZUhlaWdodCA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX3RpbGVTaXplLmhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gTWFwIGNsYW1w
aW5nIHJlY3RhbmdsZSB0byB1bml0IHNxdWFyZS4KLSAgICAgICAgICAgIGZsb2F0IHZlcnRleFRl
eFRyYW5zbGF0ZVggPSAtY2xhbXBSZWN0LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAg
ICAgICAgZmxvYXQgdmVydGV4VGV4VHJhbnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBS
ZWN0LmhlaWdodCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJl
Y3Qud2lkdGgoKSAvIGNsYW1wUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgZmxvYXQgdmVydGV4
VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7Ci0KLSAg
ICAgICAgICAgIC8vIE1hcCB0byBub3JtYWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAg
ICAgICAgICBmbG9hdCBmcmFnbWVudFRleFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGls
ZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zm
c2V0LnkoKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxl
WCA9IGNsYW1wUmVjdC53aWR0aCgpIC8gdGlsZVdpZHRoOwotICAgICAgICAgICAgZmxvYXQgZnJh
Z21lbnRUZXhTY2FsZVkgPSBjbGFtcFJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OwotCi0gICAg
ICAgICAgICAvLyBPcGVuR0wgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgotICAgICAg
ICAgICAgLy8gSWYgdGlsZSB0ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhl
IHRleHR1cmUgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBpZiAobV90ZXh0dXJlT3JpZW50YXRp
b24gPT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gMS4wIC0gZnJhZ21lbnRUZXhUcmFuc2xh
dGVZOwotICAgICAgICAgICAgICAgIGZyYWdtZW50VGV4U2NhbGVZICo9IC0xLjA7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEVkZ2UgZWRnZVggPSByaWdodEVkZ2U7Ci0gICAgICAgICAg
ICBpZiAoaSA8IChtX3RpbGluZ0RhdGEubnVtVGlsZXNYKCkgLSAxKSkgewotICAgICAgICAgICAg
ICAgIEZsb2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC55KCkpOwotICAgICAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5tYXhZKCkp
OwotCi0gICAgICAgICAgICAgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCi0gICAg
ICAgICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEpOwotICAgICAgICAgICAgICAgIHAy
ID0gbWF0cml4Lm1hcFBvaW50KHAyKTsKLQotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdmVy
dGljYWwgZWRnZS4KLSAgICAgICAgICAgICAgICBlZGdlWCA9IGNvbXB1dGVFZGdlKHAxLCBwMiwg
c2lnbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENyZWF0ZSBkZXZpY2Ugc3Bh
Y2UgcXVhZC4KLSAgICAgICAgICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkKGludGVyc2VjdChlZGdl
WSwgcHJldkVkZ2VYKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2Vj
dChwcmV2RWRnZVgsIHByZXZFZGdlWSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcnNlY3QocHJldkVkZ2VZLCBlZGdlWCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcnNlY3QoZWRnZVgsIGVkZ2VZKSk7Ci0KLSAgICAgICAgICAgIC8vIE1hcCBx
dWFkIHRvIGxheWVyIHNwYWNlLgotICAgICAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBpbnZlcnNl
Lm1hcFF1YWQoZGV2aWNlUXVhZCk7Ci0KLSAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byB0aWxl
UmVjdC4KLSAgICAgICAgICAgIHF1YWQuc2NhbGUoMS4wZiAvIHRpbGVSZWN0LndpZHRoKCksIDEu
MGYgLyB0aWxlUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFRleFRy
YW5zZm9ybUxvY2F0aW9uID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gTW92ZSBmcmFnbWVu
dCBzaGFkZXIgdHJhbnNmb3JtIHRvIHZlcnRleCBzaGFkZXIuIFdlIGNhbiBkbwotICAgICAgICAg
ICAgICAgIC8vIHRoaXMgd2hpbGUgc3RpbGwgcHJvZHVjaW5nIGNvcnJlY3QgcmVzdWx0cyBhcwot
ICAgICAgICAgICAgICAgIC8vIGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gc2hvdWxkIGFs
d2F5cyBiZSBub24tbmVnYXRpdmUKLSAgICAgICAgICAgICAgICAvLyB3aGVuIHRpbGVzIGFyZSB0
cmFuc2Zvcm1lZCBpbiBhIHdheSB0aGF0IGNvdWxkIHJlc3VsdCBpbgotICAgICAgICAgICAgICAg
IC8vIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxheWVyLgotICAgICAgICAgICAgICAgIHZlcnRleFRl
eFNjYWxlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhT
Y2FsZVkgKj0gZnJhZ21lbnRUZXhTY2FsZVk7Ci0gICAgICAgICAgICAgICAgdmVydGV4VGV4VHJh
bnNsYXRlWCAqPSBmcmFnbWVudFRleFNjYWxlWDsKLSAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhU
cmFuc2xhdGVZICo9IGZyYWdtZW50VGV4U2NhbGVZOwotICAgICAgICAgICAgICAgIHZlcnRleFRl
eFRyYW5zbGF0ZVggKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVYOwotICAgICAgICAgICAgICAgIHZl
cnRleFRleFRyYW5zbGF0ZVkgKz0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihm
cmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBmcmFnbWVudFRleFRyYW5zbGF0ZVgsIGZyYWdt
ZW50VGV4VHJhbnNsYXRlWSwgZnJhZ21lbnRUZXhTY2FsZVgsIGZyYWdtZW50VGV4U2NhbGVZKSk7
Ci0KLSAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkudmVydGV4VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgdmVydGV4VGV4VHJh
bnNsYXRlWCwgdmVydGV4VGV4VHJhbnNsYXRlWSwgdmVydGV4VGV4U2NhbGVYLCB2ZXJ0ZXhUZXhT
Y2FsZVkpKTsKLQotICAgICAgICAgICAgZmxvYXQgcG9pbnRbOF07Ci0gICAgICAgICAgICBwb2lu
dFswXSA9IHF1YWQucDEoKS54KCk7Ci0gICAgICAgICAgICBwb2ludFsxXSA9IHF1YWQucDEoKS55
KCk7Ci0gICAgICAgICAgICBwb2ludFsyXSA9IHF1YWQucDIoKS54KCk7Ci0gICAgICAgICAgICBw
b2ludFszXSA9IHF1YWQucDIoKS55KCk7Ci0gICAgICAgICAgICBwb2ludFs0XSA9IHF1YWQucDMo
KS54KCk7Ci0gICAgICAgICAgICBwb2ludFs1XSA9IHF1YWQucDMoKS55KCk7Ci0gICAgICAgICAg
ICBwb2ludFs2XSA9IHF1YWQucDQoKS54KCk7Ci0gICAgICAgICAgICBwb2ludFs3XSA9IHF1YWQu
cDQoKS55KCk7Ci0gICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTJmdihw
cm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCksIHBvaW50LCA0KSk7Ci0KLSAg
ICAgICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJS
ZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGdsb2JhbFRyYW5zZm9ybSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGls
ZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKLQotICAgICAgICAgICAgcHJldkVkZ2VYID0g
ZWRnZVg7Ci0gICAgICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAgICAgICAgIHBy
ZXZFZGdlWC5zY2FsZSgtMSwgLTEsIC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByZXZFZGdl
WSA9IGVkZ2VZOwotICAgICAgICAvLyBSZXZlcnNlIGRpcmVjdGlvbi4KLSAgICAgICAgcHJldkVk
Z2VZLnNjYWxlKC0xLCAtMSwgLTEpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JiZGU5ZTFkYmYy
YjJlNGFhNzFlNWMzMGYyMjAyNDA5NGYyOGM0Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotCi0jaWZuZGVmIExheWVyVGlsZXJDaHJvbWl1bV9oCi0jZGVmaW5lIExheWVyVGls
ZXJDaHJvbWl1bV9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKLSNpbmNs
dWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTsKLWNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7Ci0KLWNsYXNz
IExheWVyVGlsZXJDaHJvbWl1bSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJUaWxl
ckNocm9taXVtKTsKLXB1YmxpYzoKLSAgICBlbnVtIEJvcmRlclRleGVsT3B0aW9uIHsgSGFzQm9y
ZGVyVGV4ZWxzLCBOb0JvcmRlclRleGVscyB9OwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8TGF5
ZXJUaWxlckNocm9taXVtPiBjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgSW50
U2l6ZSYgdGlsZVNpemUsIEJvcmRlclRleGVsT3B0aW9uKTsKLQotICAgIH5MYXllclRpbGVyQ2hy
b21pdW0oKTsKLQotICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5IHJl
cGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCi0gICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsK
LQotICAgIC8vIFByZXBhcmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW5z
dGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgotICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBMYXllclRleHR1cmVVcGRhdGVyKik7Ci0gICAgLy8gVXBk
YXRlIGludmFsaWQgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdCBwcm92
aWRlZCBpbiBwcmVwYXJlVG9VcGRhdGUoKS4KLSAgICB2b2lkIHVwZGF0ZVJlY3QoTGF5ZXJUZXh0
dXJlVXBkYXRlciopOwotICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGgg
dGhlIGNvbnRlbnQgcmVjdC4KLSAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0KLSAgICBp
bnQgbnVtVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3RpbGluZ0RhdGEubnVtVGlsZXMoKTsgfQot
Ci0gICAgLy8gU2V0IHBvc2l0aW9uIG9mIHRoaXMgdGlsZWQgbGF5ZXIgaW4gY29udGVudCBzcGFj
ZS4KLSAgICB2b2lkIHNldExheWVyUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKTsK
LSAgICAvLyBDaGFuZ2UgdGhlIHRpbGUgc2l6ZS4gIFRoaXMgbWF5IGludmFsaWRhdGUgYWxsIHRo
ZSBleGlzdGluZyB0aWxlcy4KLSAgICB2b2lkIHNldFRpbGVTaXplKGNvbnN0IEludFNpemUmIHNp
emUpOwotCi0gICAgYm9vbCBza2lwc0RyYXcoKSBjb25zdCB7IHJldHVybiBtX3NraXBzRHJhdzsg
fQotCi0gICAgLy8gUmVzZXJ2ZXMgYWxsIGV4aXN0aW5nIGFuZCB2YWxpZCB0aWxlIHRleHR1cmVz
IHRvIHByb3RlY3QgdGhlbSBmcm9tIGJlaW5nCi0gICAgLy8gcmVjeWNsZWQgYnkgdGhlIHRleHR1
cmUgbWFuYWdlci4KLSAgICB2b2lkIHByb3RlY3RUaWxlVGV4dHVyZXMoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpOwotCi0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJU
aWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJvZ3JhbTsKLSAgICAvLyBTaGFkZXIg
cHJvZ3JhbSB0aGF0IHN3YXBzIHJlZCBhbmQgYmx1ZSBjb21wb25lbnRzIG9mIHRleHR1cmUuCi0g
ICAgLy8gVXNlZCB3aGVuIHRleHR1cmUgZm9ybWF0IGRvZXMgbm90IG1hdGNoIG5hdGl2ZSBjb2xv
ciBmb3JtYXQuCi0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBG
cmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGE+IFByb2dyYW1Td2l6emxlOwotCi0gICAg
Ly8gU2hhZGVyIHByb2dyYW0gdGhhdCBwcm9kdWNlcyBhbnRpLWFsaWFzZWQgbGF5ZXIgZWRnZXMu
Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNo
YWRlclJHQkFUZXhBbHBoYUFBPiBQcm9ncmFtQUE7Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGlu
ZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGFBQT4g
UHJvZ3JhbVN3aXp6bGVBQTsKLQotICAgIC8vIElmIHRoaXMgdGlsZXIgaGFzIGV4YWN0bHkgb25l
IHRpbGUsIHJldHVybiBpdHMgdGV4dHVyZS4gT3RoZXJ3aXNlLCBudWxsLgotICAgIE1hbmFnZWRU
ZXh0dXJlKiBnZXRTaW5nbGVUZXh0dXJlKCk7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJUaWxlckNo
cm9taXVtKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBC
b3JkZXJUZXhlbE9wdGlvbik7Ci0KLSAgICBjbGFzcyBUaWxlIDogcHVibGljIFJlZkNvdW50ZWQ8
VGlsZT4gewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlKTsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIGV4cGxpY2l0IFRpbGUoUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4KSA6
IG1fdGV4KHRleCksIG1faSgtMSksIG1faigtMSkgeyB9Ci0KLSAgICAgICAgTWFuYWdlZFRleHR1
cmUqIHRleHR1cmUoKSB7IHJldHVybiBtX3RleC5nZXQoKTsgfQotCi0gICAgICAgIGJvb2wgZGly
dHkoKSBjb25zdCB7IHJldHVybiAhbV9kaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCk7IH0KLSAgICAg
ICAgdm9pZCBjbGVhckRpcnR5KCkgeyBtX2RpcnR5TGF5ZXJSZWN0ID0gSW50UmVjdCgpOyB9Ci0K
LSAgICAgICAgaW50IGkoKSBjb25zdCB7IHJldHVybiBtX2k7IH0KLSAgICAgICAgaW50IGooKSBj
b25zdCB7IHJldHVybiBtX2o7IH0KLSAgICAgICAgdm9pZCBtb3ZlVG8oaW50IGksIGludCBqKSB7
IG1faSA9IGk7IG1faiA9IGo7IH0KLQotICAgICAgICAvLyBMYXllci1zcGFjZSBkaXJ0eSByZWN0
YW5nbGUgdGhhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQuCi0gICAgICAgIEludFJlY3QgbV9kaXJ0
eUxheWVyUmVjdDsKLSAgICBwcml2YXRlOgotICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+
IG1fdGV4OwotICAgICAgICBpbnQgbV9pOwotICAgICAgICBpbnQgbV9qOwotICAgIH07Ci0KLSAg
ICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgotICAg
IHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHZvaWQgZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNv
bnN0IFQqIHByb2dyYW0sIGludCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRn
ZUxvY2F0aW9uKTsKLQotICAgIC8vIEdyb3cgbGF5ZXIgc2l6ZSB0byBjb250YWluIHRoaXMgcmVj
dGFuZ2xlLgotICAgIHZvaWQgZ3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KTsKLQotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlcjsgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBs
YXllclJlbmRlcmVyQ29udGV4dCgpIGNvbnN0OwotICAgIFRpbGUqIGNyZWF0ZVRpbGUoaW50IGks
IGludCBqKTsKLSAgICAvLyBJbnZhbGlkYXRlIGFueSB0aWxlcyB3aGljaCBkbyBub3QgaW50ZXJz
ZWN0IHdpdGggdGhlIGNvbnRlbnRSZWN0Ci0gICAgdm9pZCBpbnZhbGlkYXRlVGlsZXMoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpOwotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGNvbnRl
bnRSZWN0VG9UaWxlSW5kaWNlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgaW50ICZsZWZ0
LCBpbnQgJnRvcCwgaW50ICZyaWdodCwgaW50ICZib3R0b20pIGNvbnN0OwotICAgIEludFJlY3Qg
Y29udGVudFJlY3RUb0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3Q7
Ci0gICAgSW50UmVjdCBsYXllclJlY3RUb0NvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGxheWVy
UmVjdCkgY29uc3Q7Ci0KLSAgICBUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0OwotICAgIElu
dFJlY3QgdGlsZUNvbnRlbnRSZWN0KGNvbnN0IFRpbGUqKSBjb25zdDsKLSAgICBJbnRSZWN0IHRp
bGVMYXllclJlY3QoY29uc3QgVGlsZSopIGNvbnN0OwotCi0gICAgR0MzRGVudW0gbV90ZXh0dXJl
Rm9ybWF0OwotCi0gICAgSW50U2l6ZSBtX3RpbGVTaXplOwotICAgIEludFBvaW50IG1fbGF5ZXJQ
b3NpdGlvbjsKLQotICAgIGJvb2wgbV9za2lwc0RyYXc7Ci0KLSAgICAvLyBEZWZhdWx0IGhhc2gg
a2V5IHRyYWl0cyBmb3IgaW50ZWdlcnMgZGlzYWxsb3cgMCBhbmQgLTEgYXMgYSBrZXksIHNvCi0g
ICAgLy8gdXNlIGEgY3VzdG9tIGhhc2ggdHJhaXQgd2hpY2ggZGlzYWxsb3dzIC0xIGFuZCAtMiBp
bnN0ZWFkLgotICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgaW50PiBUaWxlTWFwS2V5OwotICAg
IHN0cnVjdCBUaWxlTWFwS2V5VHJhaXRzIDogSGFzaFRyYWl0czxUaWxlTWFwS2V5PiB7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKLSAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwotICAgICAgICBzdGF0
aWMgVGlsZU1hcEtleSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIoLTEsIC0x
KTsgfQotICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVGlsZU1hcEtl
eSYgc2xvdCkgeyBzbG90ID0gc3RkOjptYWtlX3BhaXIoLTIsIC0yKTsgfQotICAgICAgICBzdGF0
aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShUaWxlTWFwS2V5IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5m
aXJzdCA9PSAtMiAmJiB2YWx1ZS5zZWNvbmQgPT0gLTI7IH0KLSAgICB9OwotICAgIC8vIEZJWE1F
OiBUaGUgbWFwcGVkIHZhbHVlIGluIFRpbGVNYXAgc2hvdWxkIHJlYWxseSBiZSBhbiBPd25QdHIs
IGFzIHRoZQotICAgIC8vIHJlZmNvdW50IG9mIGEgVGlsZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0
aGFuIDEuIEhvd2V2ZXIsIEhhc2hNYXAKLSAgICAvLyBkb2Vzbid0IGVhc2lseSBzdXBwb3J0IE93
blB0ciBhcyBhIHZhbHVlLgotICAgIHR5cGVkZWYgSGFzaE1hcDxUaWxlTWFwS2V5LCBSZWZQdHI8
VGlsZT4sIERlZmF1bHRIYXNoPFRpbGVNYXBLZXk+OjpIYXNoLCBUaWxlTWFwS2V5VHJhaXRzPiBU
aWxlTWFwOwotICAgIFRpbGVNYXAgbV90aWxlczsKLSAgICAvLyBUaWdodGx5IHBhY2tlZCBzZXQg
b2YgdW51c2VkIHRpbGVzLgotICAgIFZlY3RvcjxSZWZQdHI8VGlsZT4gPiBtX3VudXNlZFRpbGVz
OwotCi0gICAgLy8gU3RhdGUgaGVsZCBiZXR3ZWVuIHVwZGF0ZSBhbmQgdXBsb2FkLgotICAgIElu
dFJlY3QgbV9wYWludFJlY3Q7Ci0gICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7Ci0KLSAgICBMYXll
clRleHR1cmVVcGRhdGVyOjpPcmllbnRhdGlvbiBtX3RleHR1cmVPcmllbnRhdGlvbjsKLSAgICBM
YXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgbV9zYW1wbGVkVGV4ZWxGb3Jt
YXQ7Ci0gICAgVGlsaW5nRGF0YSBtX3RpbGluZ0RhdGE7Ci0KLSAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAppbmRleCBhNjdj
MjJlOTAyNWVmODk3YjE3OGY4NjRhYjMzMjk5NmYzZTNlZTdmLi4zMTBlMTY4NmJkMzVmZmE1ZGNi
ZjYxNGE3YjRiODczYTg0M2Y3YjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKQEAgLTYwLDYgKzYw
LDggQEAgcHVibGljOgogICAgIHZvaWQgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqKTsK
ICAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKKyAg
ICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IE1hbmFnZWRUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKik7CiAK
QEAgLTczLDQgKzc1LDMgQEAgcHJpdmF0ZToKIH0KIAogI2VuZGlmIC8vIE1hbmFnZWRUZXh0dXJl
X2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2Y0ZDE1MTkwNDlkOGZj
MGYyOTU3ODM0NjUxYzQ1MzFiOGQxZmJiYS4uNjEwNTkwNjg0MjQxMmE4M2JhMzFhOTIzMmJjOTQx
NjBkMjY5MTM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0zMSw3ICsz
MSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgpA
QCAtNDcsOSArNDcsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBVcGRhdGFibGVUaWxlIDogcHVibGljIENDTGF5ZXJUaWxpbmdEYXRhOjpU
aWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGFibGVUaWxlKTsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBVcGRhdGFibGVUaWxlKFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IHRl
eCkgOiBtX3RleCh0ZXgpIHsgfQorCisgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUoKSB7IHJl
dHVybiBtX3RleC5nZXQoKTsgfQorCisgICAgYm9vbCBkaXJ0eSgpIGNvbnN0IHsgcmV0dXJuICFt
X2RpcnR5TGF5ZXJSZWN0LmlzRW1wdHkoKTsgfQorICAgIHZvaWQgY2xlYXJEaXJ0eSgpIHsgbV9k
aXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQorCisgICAgLy8gTGF5ZXItc3BhY2UgZGlydHkg
cmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgcmVwYWludGVkLgorICAgIEludFJlY3QgbV9kaXJ0
eUxheWVyUmVjdDsKK3ByaXZhdGU6CisgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleDsK
K307CisKIFRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBMYXllckNocm9taXVtKG93bmVyKQogICAgICwgbV90
aWxpbmdPcHRpb24oQXV0b1RpbGUpCisgICAgLCBtX3RleHR1cmVGb3JtYXQoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSkKKyAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQorICAgICwgbV90
ZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0dXJlVXBkYXRlcjo6SW52YWxpZE9yaWVudGF0aW9u
KQorICAgICwgbV9zYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0SW52YWxpZCkKIHsKIH0KIApAQCAtNjQsOCArODQsMTIgQEAgUGFzc1JlZlB0
cjxDQ0xheWVySW1wbD4gVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiAK
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKLSAgICBtX3Rp
bGVyLmNsZWFyKCk7CiAgICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOworCisg
ICAgbV90aWxlci5jbGVhcigpOworICAgIG1fdW51c2VkVGlsZXMuY2xlYXIoKTsKKyAgICBtX3Bh
aW50UmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3VwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CiB9CiAK
IHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKQEAgLTExMyw3ICsxMzcsNyBAQCBib29sIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKICAgICBpZiAobV90aWxpbmdPcHRpb24g
PT0gTmV2ZXJUaWxlICYmIG1fdGlsZXItPm51bVRpbGVzKCkgPiAxKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gIW1fdGlsZXItPnNraXBzRHJhdygpOworICAgIHJldHVybiAh
bV9za2lwc0RyYXc7CiB9CiAKIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklm
TmVlZGVkKCkKQEAgLTEyMywxNSArMTQ3LDcyIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpj
cmVhdGVUaWxlcklmTmVlZGVkKCkKIAogICAgIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQo
KTsKIAotICAgIG1fdGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSgKLSAgICAgICAg
bGF5ZXJSZW5kZXJlcigpLAorICAgIG1fdGV4dHVyZUZvcm1hdCA9IGxheWVyUmVuZGVyZXIoKS0+
YmVzdFRleHR1cmVGb3JtYXQoKTsKKyAgICBtX3RleHR1cmVPcmllbnRhdGlvbiA9IHRleHR1cmVV
cGRhdGVyKCktPm9yaWVudGF0aW9uKCk7CisgICAgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0
dXJlVXBkYXRlcigpLT5zYW1wbGVkVGV4ZWxGb3JtYXQobV90ZXh0dXJlRm9ybWF0KTsKKworICAg
IG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRlKAogICAgICAgICBJbnRTaXplKGRl
ZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXplKSwKLSAgICAgICAgaXNSb290TGF5ZXIoKSA/
IExheWVyVGlsZXJDaHJvbWl1bTo6Tm9Cb3JkZXJUZXhlbHMgOiBMYXllclRpbGVyQ2hyb21pdW06
Okhhc0JvcmRlclRleGVscyk7CisgICAgICAgIGlzUm9vdExheWVyKCkgPyBDQ0xheWVyVGlsaW5n
RGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxz
KTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoKQogewotICAgIG1fdGlsZXItPnVwZGF0ZVJlY3QodGV4dHVyZVVwZGF0ZXIoKSk7CisgICAg
Ly8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0IHR1cm5lZCBvZmYsIHdo
aWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGludmFsaWRhdGVkIG1pZC11cGRhdGUu
CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fdXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGls
ZXItPm51bVRpbGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisgICAgaW50IGxlZnQsIHRv
cCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMo
bV91cGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGog
PSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkg
PD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVB
dChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlID0g
Y3JlYXRlVGlsZShpLCBqKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFn
ZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgorICAgICAgICAgICAgSW50UmVjdCBzb3Vy
Y2VSZWN0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpOworICAgICAgICAgICAgY29u
c3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOworICAgICAgICAgICAg
c291cmNlUmVjdC5pbnRlcnNlY3QobV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxl
LT5tX2RpcnR5TGF5ZXJSZWN0KSk7CisgICAgICAgICAgICAvLyBQYWludCByZWN0IG5vdCBndWFy
YW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbworICAgICAgICAgICAgLy8g
bWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0Lgor
ICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobV9wYWludFJlY3QpOworICAgICAgICAg
ICAgaWYgKHNvdXJjZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBBU1NFUlQodGlsZS0+dGV4dHVyZSgpLT5pc1Jlc2VydmVkKCkpOworCisg
ICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFjZSByZWN0YW5nbGUgdG8gdXBsb2FkIGlu
dG8uCisgICAgICAgICAgICBJbnRSZWN0IGRlc3RSZWN0KEludFBvaW50KHNvdXJjZVJlY3QueCgp
IC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNob3IueSgpKSwgc291cmNlUmVjdC5z
aXplKCkpOworICAgICAgICAgICAgaWYgKGRlc3RSZWN0LngoKSA8IDApCisgICAgICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChkZXN0UmVjdC55KCkgPCAwKQorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAgIC8vIE9mZnNldCBmcm9tIHBhaW50IHJlY3Rh
bmdsZSB0byB0aGlzIHRpbGUncyBkaXJ0eSByZWN0YW5nbGUuCisgICAgICAgICAgICBJbnRQb2lu
dCBwYWludE9mZnNldChzb3VyY2VSZWN0LngoKSAtIG1fcGFpbnRSZWN0LngoKSwgc291cmNlUmVj
dC55KCkgLSBtX3BhaW50UmVjdC55KCkpOworICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0Lngo
KSA8IDApCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChwYWludE9m
ZnNldC55KCkgPCAwKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBpZiAo
cGFpbnRPZmZzZXQueCgpICsgZGVzdFJlY3Qud2lkdGgoKSA+IG1fcGFpbnRSZWN0LndpZHRoKCkp
CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55
KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1
cmUoY29udGV4dCk7CisgICAgICAgICAgICBjb25zdCBHQzNEaW50IGZpbHRlciA9IG1fdGlsZXIt
Pmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNz
Q29udGV4dDNEOjpORUFSRVNUOworICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcikpOworICAgICAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOworICAgICAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwKSk7CisKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0
ZVRleHR1cmVSZWN0KHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAg
ICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lk
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5nT3B0aW9uKFRpbGluZ09wdGlvbiB0aWxpbmdP
cHRpb24pCkBAIC0xNjksNyArMjUwLDIwIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNo
UHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIAogICAgIENDVGlsZWRMYXllckltcGwq
IHRpbGVkTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1RpbGVkTGF5ZXJJbXBsKj4obGF5ZXIpOwogICAg
IHRpbGVkTGF5ZXItPnNldFRpbGluZ1RyYW5zZm9ybSh0aWxpbmdUcmFuc2Zvcm0oKSk7Ci0gICAg
dGlsZWRMYXllci0+c2V0VGlsZXIobV90aWxlci5nZXQoKSk7CisgICAgdGlsZWRMYXllci0+c2V0
U2tpcHNEcmF3KG1fc2tpcHNEcmF3KTsKKyAgICB0aWxlZExheWVyLT5zZXRUZXh0dXJlT3JpZW50
YXRpb24obV90ZXh0dXJlT3JpZW50YXRpb24pOworICAgIHRpbGVkTGF5ZXItPnNldFNhbXBsZWRU
ZXhlbEZvcm1hdChtX3NhbXBsZWRUZXhlbEZvcm1hdCk7CisgICAgdGlsZWRMYXllci0+c2V0VGls
aW5nRGF0YSgqbV90aWxlcik7CisKKyAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9
IG1fdGlsZXItPnRpbGVzKCkuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpbnQgaSA9IGl0ZXIt
PmZpcnN0LmZpcnN0OworICAgICAgICBpbnQgaiA9IGl0ZXItPmZpcnN0LnNlY29uZDsKKyAgICAg
ICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVy
LT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBpZiAoIXRpbGUtPnRleHR1cmUoKS0+aXNWYWxpZCht
X3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgdGlsZWRMYXllci0+c3luY1RleHR1cmVJZChpLCBqLCB0aWxlLT50ZXh0
dXJlKCktPnRleHR1cmVJZCgpKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQpAQCAtMTgyLDcgKzI3NiwxNTggQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGlu
dCBpbmRlbnQpIGNvbnN0CiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGll
cyh0cywgaW5kZW50KTsKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAi
c2tpcHNEcmF3OiAiIDw8ICghbV90aWxlciB8fCBtX3RpbGVyLT5za2lwc0RyYXcoKSkgPDwgIlxu
IjsKKyAgICB0cyA8PCAic2tpcHNEcmF3OiAiIDw8ICghbV90aWxlciB8fCBtX3NraXBzRHJhdykg
PDwgIlxuIjsKK30KKworVGV4dHVyZU1hbmFnZXIqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGV4dHVy
ZU1hbmFnZXIoKSBjb25zdAoreworICAgIGlmICghbGF5ZXJSZW5kZXJlcigpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1RleHR1cmVNYW5h
Z2VyKCk7Cit9CisKK1VwZGF0YWJsZVRpbGUqIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZUF0KGlu
dCBpLCBpbnQgaikgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VXBkYXRhYmxlVGls
ZSo+KG1fdGlsZXItPnRpbGVBdChpLCBqKSk7Cit9CisKK1VwZGF0YWJsZVRpbGUqIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCit7CisgICAgUmVmUHRyPFVwZGF0
YWJsZVRpbGU+IHRpbGU7CisgICAgaWYgKG1fdW51c2VkVGlsZXMuc2l6ZSgpID4gMCkgeworICAg
ICAgICB0aWxlID0gbV91bnVzZWRUaWxlcy5sYXN0KCkucmVsZWFzZSgpOworICAgICAgICBtX3Vu
dXNlZFRpbGVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKHRpbGUtPnJlZkNvdW50KCkg
PT0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVGV4dHVyZU1hbmFnZXIqIG1hbmFnZXIgPSB0
ZXh0dXJlTWFuYWdlcigpOworICAgICAgICB0aWxlID0gYWRvcHRSZWYobmV3IFVwZGF0YWJsZVRp
bGUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOworICAgIH0KKyAgICBtX3RpbGVy
LT5hZGRUaWxlKHRpbGUsIGksIGopOworICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSBtX3Rp
bGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUuZ2V0KCkpOworCisgICAgcmV0dXJuIHRpbGUuZ2V0KCk7
Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjppbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Q0NMYXllclRpbGluZ0RhdGE6OlRpbGVNYXBLZXk+
IHJlbW92ZUtleXM7CisgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVy
LT50aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgQ0NMYXllclRpbGluZ0RhdGE6OlRp
bGUqIHRpbGUgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3Qg
PSBtX3RpbGVyLT50aWxlQ29udGVudFJlY3QodGlsZSk7CisgICAgICAgIGlmICh0aWxlUmVjdC5p
bnRlcnNlY3RzKGNvbnRlbnRSZWN0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBy
ZW1vdmVLZXlzLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgfQorCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZW1vdmVLZXlzLnNpemUoKTsgKytpKQorICAgICAgICBtX3VudXNlZFRpbGVz
LmFwcGVuZChzdGF0aWNfcG9pbnRlcl9jYXN0PFVwZGF0YWJsZVRpbGU+KG1fdGlsZXItPnRha2VU
aWxlKHJlbW92ZUtleXNbaV0uZmlyc3QsIHJlbW92ZUtleXNbaV0uc2Vjb25kKSkpOworfQorCit2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpCit7CisgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzRHJh
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90aWxlci0+Z3Jvd0xheWVyVG9Db250YWluKGNv
bnRlbnRSZWN0KTsKKworICAgIC8vIERpcnR5IHJlY3RzIGFyZSBhbHdheXMgaW4gbGF5ZXIgc3Bh
Y2UsIGFzIHRoZSBsYXllciBjb3VsZCBiZSByZXBvc2l0aW9uZWQKKyAgICAvLyBhZnRlciBpbnZh
bGlkYXRpb24uCisgICAgY29uc3QgSW50UmVjdCBsYXllclJlY3QgPSBtX3RpbGVyLT5jb250ZW50
UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRS
ZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGog
PD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7
ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsK
KyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIEludFJlY3QgYm91bmQgPSBtX3RpbGVyLT50aWxlTGF5ZXJSZWN0KHRpbGUpOworICAg
ICAgICAgICAgYm91bmQuaW50ZXJzZWN0KGxheWVyUmVjdCk7CisgICAgICAgICAgICB0aWxlLT5t
X2RpcnR5TGF5ZXJSZWN0LnVuaXRlKGJvdW5kKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBUaWxlZExheWVyQ2hyb21pdW06OnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCkKK3sKKyAg
ICBwcm90ZWN0VGlsZVRleHR1cmVzKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJv
dW5kcygpKSk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1
cmVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIGlmIChjb250ZW50UmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0
LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8
PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsg
KytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwor
ICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxl
ci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVT
aXplKCksIG1fdGV4dHVyZUZvcm1hdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGls
ZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QpCit7CisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKworICAgIGlmIChjb250ZW50UmVjdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgbV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gSW52YWxpZGF0ZSBvbGQgdGlsZXMgdGhhdCB3ZXJlIHBy
ZXZpb3VzbHkgdXNlZCBidXQgYXJlbid0IGluIHVzZSB0aGlzCisgICAgLy8gZnJhbWUgc28gdGhh
dCB0aGV5IGNhbiBnZXQgcmV1c2VkIGZvciBuZXcgdGlsZXMuCisgICAgaW52YWxpZGF0ZVRpbGVz
KGNvbnRlbnRSZWN0KTsKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0NvbnRhaW4oY29udGVudFJl
Y3QpOworCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKSB7CisgICAgICAgIG1fdXBkYXRl
UmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENyZWF0
ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRpcnR5IHJlY3QgdG8gY29udGFpbiBhbGwK
KyAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50bHkgYmVpbmcgZHJhd24uCisgICAgSW50
UmVjdCBkaXJ0eUxheWVyUmVjdDsKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwor
ICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwg
dG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9IGJvdHRvbTsg
KytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyArK2kpIHsKKyAg
ICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CisgICAgICAgICAg
ICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CisK
KyAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5pc1ZhbGlkKG1fdGlsZXItPnRpbGVT
aXplKCksIG1fdGV4dHVyZUZvcm1hdCkpCisgICAgICAgICAgICAgICAgdGlsZS0+bV9kaXJ0eUxh
eWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGlsZSk7CisKKyAgICAgICAgICAgIGlm
ICghdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGV4dHVy
ZUZvcm1hdCkpIHsKKyAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAg
ICAgICAgICAgY2xlYW51cFJlc291cmNlcygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZGlydHlMYXllclJlY3QudW5pdGUodGlsZS0+bV9k
aXJ0eUxheWVyUmVjdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEdWUgdG8gYm9yZGVy
cywgd2hlbiB0aGUgcGFpbnQgcmVjdCBpcyBleHRlbmRlZCB0byB0aWxlIGJvdW5kYXJpZXMsIGl0
CisgICAgLy8gbWF5IGVuZCB1cCBvdmVybGFwcGluZyBtb3JlIHRpbGVzIHRoYW4gdGhlIG9yaWdp
bmFsIGNvbnRlbnQgcmVjdC4gUmVjb3JkCisgICAgLy8gdGhhdCBvcmlnaW5hbCByZWN0IHNvIHdl
IGRvbid0IHVwbG9hZCBtb3JlIHRpbGVzIHRoYW4gbmVjZXNzYXJ5LgorICAgIG1fdXBkYXRlUmVj
dCA9IGNvbnRlbnRSZWN0OworCisgICAgbV9wYWludFJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RU
b0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKKyAgICBpZiAoZGlydHlMYXllclJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0dXJlVXBkYXRlcigpLT5wcmVwYXJl
VG9VcGRhdGUobV9wYWludFJlY3QsIG1fdGlsZXItPnRpbGVTaXplKCksIG1fdGlsZXItPmhhc0Jv
cmRlclRleGVscygpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCBl
NjJlY2M3YjFjMDY4YTcwYzBmMDNjZTBmYzY1ZjNhNDU4ODk4ZDYwLi5kODJmMzE3NzRhNTNmNzFi
NDM1MWM4OTljMjE5NWU0NjA2ZWZmYzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApA
QCAtMjksMTIgKzI5LDEzIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAj
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUaWxpbmdEYXRh
LmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0
ZXI7CitjbGFzcyBVcGRhdGFibGVUaWxlOwogCiBjbGFzcyBUaWxlZExheWVyQ2hyb21pdW0gOiBw
dWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CkBAIC00OSw2ICs1MCwxMCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKKyAgICAvLyBSZXNl
cnZlcyBhbGwgZXhpc3RpbmcgYW5kIHZhbGlkIHRpbGUgdGV4dHVyZXMgdG8gcHJvdGVjdCB0aGVt
IGZyb20gYmVpbmcKKyAgICAvLyByZWN5Y2xlZCBieSB0aGUgdGV4dHVyZSBtYW5hZ2VyLgorICAg
IHZvaWQgcHJvdGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisK
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBUaWxlZExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKik7CiAKQEAgLTU4LDcgKzYzLDEzIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpID0gMDsKICAgICB2aXJ0dWFsIExh
eWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOwogCi0gICAgT3du
UHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV90aWxlcjsKKyAgICAvLyBTZXQgaW52YWxpZGF0aW9u
cyB0byBiZSBwb3RlbnRpYWxseSByZXBhaW50ZWQgZHVyaW5nIHVwZGF0ZSgpLgorICAgIHZvaWQg
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIC8vIFByZXBh
cmUgZGF0YSBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29u
dGVudFJlY3QuCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpOworICAgIC8vIFVwZGF0ZSBpbnZhbGlkIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdp
dGggY29udGVudFJlY3QgcHJvdmlkZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuCisgICAgdm9pZCB1
cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgTGF5ZXJUZXh0dXJlVXBkYXRlciopOworICAg
IHZpcnR1YWwgdm9pZCBwcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwogCiBwcml2YXRlOgog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsK
QEAgLTcxLDcgKzgyLDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGls
aW5nT3B0aW9uKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxpbmdUcmFuc2Zvcm0oKSBj
b25zdDsKIAorICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CisgICAg
VXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CisgICAgdm9pZCBpbnZhbGlkYXRl
VGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCisgICAgVGV4dHVyZU1hbmFnZXIq
IHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CisKKyAgICAvLyBTdGF0ZSBoZWxkIGJldHdlZW4gdXBk
YXRlIGFuZCB1cGxvYWQuCisgICAgSW50UmVjdCBtX3BhaW50UmVjdDsKKyAgICBJbnRSZWN0IG1f
dXBkYXRlUmVjdDsKKworICAgIC8vIFRpZ2h0bHkgcGFja2VkIHNldCBvZiB1bnVzZWQgdGlsZXMu
CisgICAgVmVjdG9yPFJlZlB0cjxVcGRhdGFibGVUaWxlPiA+IG1fdW51c2VkVGlsZXM7CisKICAg
ICBUaWxpbmdPcHRpb24gbV90aWxpbmdPcHRpb247CisgICAgR0MzRGVudW0gbV90ZXh0dXJlRm9y
bWF0OworICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3Jp
ZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OworCisgICAgT3duUHRyPEND
TGF5ZXJUaWxpbmdEYXRhPiBtX3RpbGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRp
bGluZ0RhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1NDJiN2Q0MjZiNzE0ZGQzZTkzMDI2NmZkMjk4MDRm
N2M3NTNhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5jcHAKQEAgLTAsMCArMSwxNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUaWxpbmdEYXRhLmgiCisKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDQ0xheWVy
VGlsaW5nRGF0YT4gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0ZShjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NMYXllclRpbGluZ0RhdGEodGlsZVNpemUsIGJvcmRlcikpOworfQorCitDQ0xheWVyVGls
aW5nRGF0YTo6Q0NMYXllclRpbGluZ0RhdGEoY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEJvcmRl
clRleGVsT3B0aW9uIGJvcmRlcikKKyAgICA6IG1fdGlsaW5nRGF0YShtYXgodGlsZVNpemUud2lk
dGgoKSwgdGlsZVNpemUuaGVpZ2h0KCkpLCAwLCAwLCBib3JkZXIgPT0gSGFzQm9yZGVyVGV4ZWxz
KQoreworICAgIHNldFRpbGVTaXplKHRpbGVTaXplKTsKK30KKwordm9pZCBDQ0xheWVyVGlsaW5n
RGF0YTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV90aWxl
U2l6ZSA9PSBzaXplKQorICAgICAgICByZXR1cm47CisKKyAgICByZXNldCgpOworCisgICAgbV90
aWxlU2l6ZSA9IHNpemU7CisgICAgbV90aWxpbmdEYXRhLnNldE1heFRleHR1cmVTaXplKG1heChz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKK30KKworY29uc3QgQ0NMYXllclRpbGluZ0Rh
dGEmIENDTGF5ZXJUaWxpbmdEYXRhOjpvcGVyYXRvcj0oY29uc3QgQ0NMYXllclRpbGluZ0RhdGEm
IHRpbGVyKQoreworICAgIG1fdGlsZVNpemUgPSB0aWxlci5tX3RpbGVTaXplOworICAgIG1fbGF5
ZXJQb3NpdGlvbiA9IHRpbGVyLm1fbGF5ZXJQb3NpdGlvbjsKKyAgICBtX3RpbGluZ0RhdGEgPSB0
aWxlci5tX3RpbGluZ0RhdGE7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgQ0NMYXll
clRpbGluZ0RhdGE6OmFkZFRpbGUoUGFzc1JlZlB0cjxUaWxlPiB0aWxlLCBpbnQgaSwgaW50IGop
Cit7CisgICAgQVNTRVJUKCF0aWxlQXQoaSwgaikpOworICAgIHRpbGUtPm1vdmVUbyhpLCBqKTsK
KyAgICBtX3RpbGVzLmFkZChtYWtlX3BhaXIoaSwgaiksIHRpbGUpOworfQorCitQYXNzUmVmUHRy
PENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlPiBDQ0xheWVyVGlsaW5nRGF0YTo6dGFrZVRpbGUoaW50
IGksIGludCBqKQoreworICAgIHJldHVybiBtX3RpbGVzLnRha2UobWFrZV9wYWlyKGksIGopKTsK
K30KKworQ0NMYXllclRpbGluZ0RhdGE6OlRpbGUqIENDTGF5ZXJUaWxpbmdEYXRhOjp0aWxlQXQo
aW50IGksIGludCBqKSBjb25zdAoreworICAgIFRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChtYWtl
X3BhaXIoaSwgaikpLmdldCgpOworICAgIEFTU0VSVCghdGlsZSB8fCB0aWxlLT5yZWZDb3VudCgp
ID09IDEpOworICAgIHJldHVybiB0aWxlOworfQorCit2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjpy
ZXNldCgpCit7CisgICAgbV90aWxlcy5jbGVhcigpOworICAgIG1fdGlsaW5nRGF0YS5zZXRUb3Rh
bFNpemUoMCwgMCk7Cit9CisKK3ZvaWQgQ0NMYXllclRpbGluZ0RhdGE6OmNvbnRlbnRSZWN0VG9U
aWxlSW5kaWNlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgaW50JiBsZWZ0LCBpbnQmIHRv
cCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0Cit7CisgICAgY29uc3QgSW50UmVjdCBs
YXllclJlY3QgPSBjb250ZW50UmVjdFRvTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKworICAgIGxl
ZnQgPSBtX3RpbGluZ0RhdGEudGlsZVhJbmRleEZyb21TcmNDb29yZChsYXllclJlY3QueCgpKTsK
KyAgICB0b3AgPSBtX3RpbGluZ0RhdGEudGlsZVlJbmRleEZyb21TcmNDb29yZChsYXllclJlY3Qu
eSgpKTsKKyAgICByaWdodCA9IG1fdGlsaW5nRGF0YS50aWxlWEluZGV4RnJvbVNyY0Nvb3JkKGxh
eWVyUmVjdC5tYXhYKCkgLSAxKTsKKyAgICBib3R0b20gPSBtX3RpbGluZ0RhdGEudGlsZVlJbmRl
eEZyb21TcmNDb29yZChsYXllclJlY3QubWF4WSgpIC0gMSk7Cit9CisKK0ludFJlY3QgQ0NMYXll
clRpbGluZ0RhdGE6OmNvbnRlbnRSZWN0VG9MYXllclJlY3QoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9zKGNvbnRlbnRSZWN0LngoKSAtIG1fbGF5
ZXJQb3NpdGlvbi54KCksIGNvbnRlbnRSZWN0LnkoKSAtIG1fbGF5ZXJQb3NpdGlvbi55KCkpOwor
ICAgIEludFJlY3QgbGF5ZXJSZWN0KHBvcywgY29udGVudFJlY3Quc2l6ZSgpKTsKKworICAgIC8v
IENsaXAgdG8gdGhlIHBvc2l0aW9uLgorICAgIGlmIChwb3MueCgpIDwgMCB8fCBwb3MueSgpIDwg
MCkKKyAgICAgICAgbGF5ZXJSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZShj
b250ZW50UmVjdC53aWR0aCgpICsgcG9zLngoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkgKyBwb3Mu
eSgpKSk7CisgICAgcmV0dXJuIGxheWVyUmVjdDsKK30KKworSW50UmVjdCBDQ0xheWVyVGlsaW5n
RGF0YTo6bGF5ZXJSZWN0VG9Db250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpIGNv
bnN0Cit7CisgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGxheWVyUmVjdDsKKyAgICBjb250ZW50
UmVjdC5tb3ZlKG1fbGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQb3NpdGlvbi55KCkpOworICAg
IHJldHVybiBjb250ZW50UmVjdDsKK30KKworSW50UmVjdCBDQ0xheWVyVGlsaW5nRGF0YTo6dGls
ZUNvbnRlbnRSZWN0KGNvbnN0IFRpbGUqIHRpbGUpIGNvbnN0Cit7CisgICAgSW50UmVjdCBjb250
ZW50UmVjdCA9IHRpbGVMYXllclJlY3QodGlsZSk7CisgICAgY29udGVudFJlY3QubW92ZShtX2xh
eWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKKyAgICByZXR1cm4gY29udGVu
dFJlY3Q7Cit9CisKK0ludFJlY3QgQ0NMYXllclRpbGluZ0RhdGE6OnRpbGVMYXllclJlY3QoY29u
c3QgVGlsZSogdGlsZSkgY29uc3QKK3sKKyAgICBjb25zdCBpbnQgaW5kZXggPSBtX3RpbGluZ0Rh
dGEudGlsZUluZGV4KHRpbGUtPmkoKSwgdGlsZS0+aigpKTsKKyAgICBJbnRSZWN0IGxheWVyUmVj
dCA9IG1fdGlsaW5nRGF0YS50aWxlQm91bmRzV2l0aEJvcmRlcihpbmRleCk7CisgICAgbGF5ZXJS
ZWN0LnNldFNpemUobV90aWxlU2l6ZSk7CisgICAgcmV0dXJuIGxheWVyUmVjdDsKK30KKwordm9p
ZCBDQ0xheWVyVGlsaW5nRGF0YTo6c2V0TGF5ZXJQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgbGF5
ZXJQb3NpdGlvbikKK3sKKyAgICBtX2xheWVyUG9zaXRpb24gPSBsYXllclBvc2l0aW9uOworfQor
Cit2b2lkIENDTGF5ZXJUaWxpbmdEYXRhOjpncm93TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCit7CisgICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250YWlu
IHRoaXMgY29udGVudCByZWN0LgorICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RU
b0xheWVyUmVjdChjb250ZW50UmVjdCk7CisgICAgSW50U2l6ZSByZWN0U2l6ZSA9IEludFNpemUo
bGF5ZXJSZWN0Lm1heFgoKSwgbGF5ZXJSZWN0Lm1heFkoKSk7CisKKyAgICBJbnRTaXplIG9sZExh
eWVyU2l6ZShtX3RpbGluZ0RhdGEudG90YWxTaXplWCgpLCBtX3RpbGluZ0RhdGEudG90YWxTaXpl
WSgpKTsKKyAgICBJbnRTaXplIG5ld1NpemUgPSByZWN0U2l6ZS5leHBhbmRlZFRvKG9sZExheWVy
U2l6ZSk7CisgICAgbV90aWxpbmdEYXRhLnNldFRvdGFsU2l6ZShuZXdTaXplLndpZHRoKCksIG5l
d1NpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0Rh
dGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMTJlYTcwNmIzZTYxYjMyODA1OWJiZjFmOWQwNDNkODYzZTE0ZDVl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKwor
I2lmbmRlZiBDQ0xheWVyVGlsaW5nRGF0YV9oCisjZGVmaW5lIENDTGF5ZXJUaWxpbmdEYXRhX2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQ0xheWVyVGlsaW5nRGF0YSB7CitwdWJsaWM6CisgICAgZW51bSBCb3JkZXJUZXhlbE9wdGlv
biB7IEhhc0JvcmRlclRleGVscywgTm9Cb3JkZXJUZXhlbHMgfTsKKworICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDTGF5ZXJUaWxpbmdEYXRhPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IEJvcmRlclRleGVsT3B0aW9uKTsKKworICAgIGludCBudW1UaWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdGlsaW5nRGF0YS5udW1UaWxlcygpOyB9CisgICAgaW50IG51bVRpbGVzWCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGlsaW5nRGF0YS5udW1UaWxlc1goKTsgfQorICAgIGludCBudW1UaWxlc1koKSBj
b25zdCB7IHJldHVybiBtX3RpbGluZ0RhdGEubnVtVGlsZXNZKCk7IH0KKyAgICBJbnRSZWN0IHRp
bGVCb3VuZHMoaW50IGksIGludCBqKSBjb25zdCB7IHJldHVybiBtX3RpbGluZ0RhdGEudGlsZUJv
dW5kcyhtX3RpbGluZ0RhdGEudGlsZUluZGV4KGksIGopKTsgfQorICAgIEludFBvaW50IHRleHR1
cmVPZmZzZXQoaW50IHhJbmRleCwgaW50IHlJbmRleCkgY29uc3QgeyByZXR1cm4gbV90aWxpbmdE
YXRhLnRleHR1cmVPZmZzZXQoeEluZGV4LCB5SW5kZXgpOyB9CisKKyAgICAvLyBTZXQgcG9zaXRp
b24gb2YgdGhpcyB0aWxlZCBsYXllciBpbiBjb250ZW50IHNwYWNlLgorICAgIHZvaWQgc2V0TGF5
ZXJQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOworCisgICAgLy8gQ2hhbmdlIHRoZSB0aWxlIHNp
emUuIFRoaXMgbWF5IGludmFsaWRhdGUgYWxsIHRoZSBleGlzdGluZyB0aWxlcy4KKyAgICB2b2lk
IHNldFRpbGVTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiB0aWxlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KKyAgICBib29sIGhhc0JvcmRlclRleGVs
cygpIGNvbnN0IHsgcmV0dXJuIG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKTsgfQorCisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fdGlsaW5nRGF0YS5udW1UaWxlcygpIHx8
ICF0aWxlcygpLnNpemUoKTsgfQorCisgICAgY29uc3QgQ0NMYXllclRpbGluZ0RhdGEmIG9wZXJh
dG9yPShjb25zdCBDQ0xheWVyVGlsaW5nRGF0YSYpOworCisgICAgY2xhc3MgVGlsZTogcHVibGlj
IFJlZkNvdW50ZWQ8VGlsZT4geworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlKTsK
KyAgICBwdWJsaWM6CisgICAgICAgIFRpbGUoKSA6IG1faSgtMSksIG1faigtMSkgeyB9CisgICAg
ICAgIHZpcnR1YWwgflRpbGUoKSB7IH0KKworICAgICAgICBpbnQgaSgpIGNvbnN0IHsgcmV0dXJu
IG1faTsgfQorICAgICAgICBpbnQgaigpIGNvbnN0IHsgcmV0dXJuIG1fajsgfQorICAgICAgICB2
b2lkIG1vdmVUbyhpbnQgaSwgaW50IGopIHsgbV9pID0gaTsgbV9qID0gajsgfQorICAgIHByaXZh
dGU6CisgICAgICAgIGludCBtX2k7CisgICAgICAgIGludCBtX2o7CisgICAgfTsKKyAgICAvLyBE
ZWZhdWx0IGhhc2gga2V5IHRyYWl0cyBmb3IgaW50ZWdlcnMgZGlzYWxsb3cgMCBhbmQgLTEgYXMg
YSBrZXksIHNvCisgICAgLy8gdXNlIGEgY3VzdG9tIGhhc2ggdHJhaXQgd2hpY2ggZGlzYWxsb3dz
IC0xIGFuZCAtMiBpbnN0ZWFkLgorICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgaW50PiBUaWxl
TWFwS2V5OworICAgIHN0cnVjdCBUaWxlTWFwS2V5VHJhaXRzIDogSGFzaFRyYWl0czxUaWxlTWFw
S2V5PiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxz
ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwor
ICAgICAgICBzdGF0aWMgVGlsZU1hcEtleSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gc3RkOjptYWtl
X3BhaXIoLTEsIC0xKTsgfQorICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFs
dWUoVGlsZU1hcEtleSYgc2xvdCkgeyBzbG90ID0gc3RkOjptYWtlX3BhaXIoLTIsIC0yKTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShUaWxlTWFwS2V5IHZhbHVlKSB7IHJl
dHVybiB2YWx1ZS5maXJzdCA9PSAtMiAmJiB2YWx1ZS5zZWNvbmQgPT0gLTI7IH0KKyAgICB9Owor
ICAgIC8vIEZJWE1FOiBUaGUgbWFwcGVkIHZhbHVlIGluIFRpbGVNYXAgc2hvdWxkIHJlYWxseSBi
ZSBhbiBPd25QdHIsIGFzIHRoZQorICAgIC8vIHJlZmNvdW50IG9mIGEgVGlsZSBzaG91bGQgbmV2
ZXIgYmUgbW9yZSB0aGFuIDEuIEhvd2V2ZXIsIEhhc2hNYXAKKyAgICAvLyBkb2Vzbid0IGVhc2ls
eSBzdXBwb3J0IE93blB0ciBhcyBhIHZhbHVlLgorICAgIHR5cGVkZWYgSGFzaE1hcDxUaWxlTWFw
S2V5LCBSZWZQdHI8VGlsZT4sIERlZmF1bHRIYXNoPFRpbGVNYXBLZXk+OjpIYXNoLCBUaWxlTWFw
S2V5VHJhaXRzPiBUaWxlTWFwOworCisgICAgdm9pZCBhZGRUaWxlKFBhc3NSZWZQdHI8VGlsZT4s
IGludCwgaW50KTsKKyAgICBQYXNzUmVmUHRyPFRpbGU+IHRha2VUaWxlKGludCwgaW50KTsKKyAg
ICBUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0OworICAgIGNvbnN0IFRpbGVNYXAmIHRpbGVz
KCkgY29uc3QgeyByZXR1cm4gbV90aWxlczsgfQorCisgICAgLy8gR3JvdyBsYXllciBzaXplIHRv
IGNvbnRhaW4gdGhpcyByZWN0YW5nbGUuCisgICAgdm9pZCBncm93TGF5ZXJUb0NvbnRhaW4oY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHZvaWQgY29udGVudFJlY3RUb1RpbGVJbmRp
Y2VzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQgJmxlZnQsIGludCAmdG9wLCBpbnQg
JnJpZ2h0LCBpbnQgJmJvdHRvbSkgY29uc3Q7CisgICAgSW50UmVjdCBjb250ZW50UmVjdFRvTGF5
ZXJSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSBjb25zdDsKKyAgICBJbnRSZWN0IGxh
eWVyUmVjdFRvQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBjb25zdDsKKyAg
ICBJbnRSZWN0IHRpbGVDb250ZW50UmVjdChjb25zdCBUaWxlKikgY29uc3Q7CisgICAgSW50UmVj
dCB0aWxlTGF5ZXJSZWN0KGNvbnN0IFRpbGUqKSBjb25zdDsKKworICAgIHZvaWQgcmVzZXQoKTsK
KworcHJvdGVjdGVkOgorICAgIENDTGF5ZXJUaWxpbmdEYXRhKGNvbnN0IEludFNpemUmIHRpbGVT
aXplLCBCb3JkZXJUZXhlbE9wdGlvbik7CisKKyAgICBUaWxlTWFwIG1fdGlsZXM7CisgICAgSW50
U2l6ZSBtX3RpbGVTaXplOworICAgIEludFBvaW50IG1fbGF5ZXJQb3NpdGlvbjsKKyAgICBUaWxp
bmdEYXRhIG1fdGlsaW5nRGF0YTsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3Bw
CmluZGV4IGIyOWY4MWZjMzFiMzdmOTM0ZjdlYzVlNmQ5MDlkMTc3YWM0NzliYzQuLjZhNzk4M2I3
ZTgwMzdhODg2MDdmYzY2NTIzM2E4Yzc0MTMzZDI4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuY3BwCkBAIC0yOSwxNyArMjksMzEgQEAKIAogI2luY2x1ZGUgImNjL0NDVGlsZWRM
YXllckltcGwuaCIKIAorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordHlwZWRlZiBGbG9h
dFBvaW50M0QgRWRnZTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJlOwogCitjbGFzcyBEcmF3YWJsZVRp
bGUgOiBwdWJsaWMgQ0NMYXllclRpbGluZ0RhdGE6OlRpbGUgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERyYXdhYmxlVGlsZSk7CitwdWJsaWM6CisgICAgRHJhd2FibGVUaWxlKCkgOiBtX3Rl
eHR1cmVJZCgwKSB7IH0KKworICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICB2b2lkIHNldFRleHR1cmVJZChQbGF0Zm9ybTNE
T2JqZWN0IHRleHR1cmVJZCkgeyBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsgfQorcHJpdmF0ZToK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdGV4dHVyZUlkOworfTsKKwogQ0NUaWxlZExheWVySW1w
bDo6Q0NUaWxlZExheWVySW1wbChpbnQgaWQpCiAgICAgOiBDQ0xheWVySW1wbChpZCkKLSAgICAs
IG1fdGlsZXIoMCkKIHsKIH0KIApAQCAtNDcsMzEgKzYxLDE3IEBAIENDVGlsZWRMYXllckltcGw6
On5DQ1RpbGVkTGF5ZXJJbXBsKCkKIHsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3
KCkKLXsKLSAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7
Ci0gICAgaWYgKCFsYXllclJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7Ci0gICAgICAgIC8vIE1h
c2sgb3V0IHdyaXRlcyB0byB0aGUgYWxwaGEgY2hhbm5lbCBmb3IgdGhlIHJvb3QgbGF5ZXIsIHN1
YnBpeGVsIGFudGlhbGlhc2luZwotICAgICAgICAvLyB2aWEgU2tpYSByZXN1bHRzIGluIGludmFs
aWQgemVybyBhbHBoYSB2YWx1ZXMgb24gdGV4dCBnbHlwaHMuIFRoZSByb290IGxheWVyCi0gICAg
ICAgIC8vIGlzIGFsd2F5cyBvcGFxdWUgc28gdGhlIGFscGhhIGNoYW5uZWwgaXNuJ3QgbWVhbmlu
Z2Z1bCBhbnl3YXkuCi0gICAgICAgIGlmIChpc1Jvb3RMYXllcigpKQotICAgICAgICAgICAgY29u
dGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgbV90aWxl
ci0+ZHJhdyhsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpKTsKLSAg
ICAgICAgaWYgKGlzUm9vdExheWVyKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5jb2xvck1hc2so
dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgfQotfQotCiB2b2lkIENDVGlsZWRMYXllcklt
cGw6OmJpbmRDb250ZW50c1RleHR1cmUoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25s
eSB2YWxpZCBmb3Igc2luZ2xlIHRleHR1cmUgbGF5ZXJzLCBlLmcuIG1hc2tzLgogICAgIEFTU0VS
VChtX3RpbGVyKTsKKyAgICBBU1NFUlQobV90aWxlci0+bnVtVGlsZXMoKSA9PSAxKTsKIAotICAg
IE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV90aWxlci0+Z2V0U2luZ2xlVGV4dHVyZSgpOwot
ICAgIEFTU0VSVCh0ZXh0dXJlKTsKKyAgICBEcmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoMCwg
MCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQgPSB0aWxlID8gdGlsZS0+dGV4dHVy
ZUlkKCkgOiAwOworICAgIEFTU0VSVCh0ZXh0dXJlSWQpOwogCi0gICAgdGV4dHVyZS0+YmluZFRl
eHR1cmUobGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCkpOworICAgIGxheWVyUmVuZGVyZXIoKS0+
Y29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4
dHVyZUlkKTsKIH0KIAogdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVz
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdApAQCAtODAsNiArODAsMzIzIEBAIHZv
aWQgQ0NUaWxlZExheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywg
aW50IGluZGVudCkgY29uc3QKICAgICBDQ0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyh0
cywgaW5kZW50KTsKIH0KIAorRHJhd2FibGVUaWxlKiBDQ1RpbGVkTGF5ZXJJbXBsOjp0aWxlQXQo
aW50IGksIGludCBqKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEcmF3YWJsZVRp
bGUqPihtX3RpbGVyLT50aWxlQXQoaSwgaikpOworfQorCitEcmF3YWJsZVRpbGUqIENDVGlsZWRM
YXllckltcGw6OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQoreworICAgIFJlZlB0cjxEcmF3YWJs
ZVRpbGU+IHRpbGUgPSBhZG9wdFJlZihuZXcgRHJhd2FibGVUaWxlKCkpOworICAgIG1fdGlsZXIt
PmFkZFRpbGUodGlsZSwgaSwgaik7CisgICAgcmV0dXJuIHRpbGUuZ2V0KCk7Cit9CisKK3ZvaWQg
Q0NUaWxlZExheWVySW1wbDo6ZHJhdygpCit7CisgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0
ID0gdmlzaWJsZUxheWVyUmVjdCgpOworCisgICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fdGlsZXIt
PmlzRW1wdHkoKSB8fCBsYXllclJlY3QuaXNFbXB0eSgpIHx8ICFsYXllclJlbmRlcmVyKCkpCisg
ICAgICAgIHJldHVybjsKKworI2lmIGRlZmluZWQoT1NfQ0hST01FT1MpCisgICAgLy8gRklYTUU6
IERpc2FibGUgYW50aS1hbGlhc2luZyB0byB3b3JrYXJvdW5kIGJyb2tlbiBkcml2ZXIuCisgICAg
Ym9vbCB1c2VBQSA9IGZhbHNlOworI2Vsc2UKKyAgICAvLyBVc2UgYW50aS1hbGlhc2luZyBwcm9n
cmFtcyB3aGVuIGJvcmRlciB0ZXhlbHMgYXJlIHByZXNldCBhbmQgdHJhbnNmb3JtCisgICAgLy8g
aXMgbm90IGFuIGludGVnZXIgdHJhbnNsYXRpb24uCisgICAgYm9vbCB1c2VBQSA9IChtX3RpbGVy
LT5oYXNCb3JkZXJUZXhlbHMoKSAmJiAhbV90aWxpbmdUcmFuc2Zvcm0uaXNJbnRlZ2VyVHJhbnNs
YXRpb24oKSk7CisjZW5kaWYKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5
ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisgICAgaWYgKGlzUm9vdExheWVyKCkpCisgICAgICAg
IGNvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSk7CisKKyAgICBzd2l0
Y2ggKG1fc2FtcGxlZFRleGVsRm9ybWF0KSB7CisgICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVy
OjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOgorICAgICAgICBpZiAodXNlQUEpCisgICAgICAgICAg
ICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlcigpLCBsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3Jt
LCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbUFBKCksIGxheWVy
UmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtQUEoKS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVudFRl
eFRyYW5zZm9ybUxvY2F0aW9uKCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtQUEoKS0+
ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyKCksIGxheWVyUmVjdCwgbV90aWxpbmdUcmFuc2Zv
cm0sIGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtKCksIC0xLCAt
MSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0QkdSQToKKyAgICAgICAgaWYgKHVzZUFBKQorICAgICAgICAgICAgZHJhd1Rp
bGVzKGxheWVyUmVuZGVyZXIoKSwgbGF5ZXJSZWN0LCBtX3RpbGluZ1RyYW5zZm9ybSwgZHJhd09w
YWNpdHkoKSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6emxlQUEoKSwgbGF5ZXJS
ZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6emxlQUEoKS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFn
bWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFt
U3dpenpsZUFBKCktPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlcigpLCBsYXllclJlY3QsIG1f
dGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJv
Z3JhbVN3aXp6bGUoKSwgLTEsIC0xKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKGlzUm9vdExheWVy
KCkpCisgICAgICAgIGNvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsK
K30KKwordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzZXRUaWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJU
aWxpbmdEYXRhJiB0aWxlcikKK3sKKyAgICBpZiAobV90aWxlcikKKyAgICAgICAgbV90aWxlci0+
cmVzZXQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6
Y3JlYXRlKHRpbGVyLnRpbGVTaXplKCksIHRpbGVyLmhhc0JvcmRlclRleGVscygpID8gQ0NMYXll
clRpbGluZ0RhdGE6Okhhc0JvcmRlclRleGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpOb0JvcmRl
clRleGVscyk7CisgICAgKm1fdGlsZXIgPSB0aWxlcjsKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpzeW5jVGV4dHVyZUlkKGludCBpLCBpbnQgaiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJl
SWQpCit7CisgICAgRHJhd2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgIGlmICgh
dGlsZSkKKyAgICAgICAgdGlsZSA9IGNyZWF0ZVRpbGUoaSwgaik7CisgICAgdGlsZS0+c2V0VGV4
dHVyZUlkKHRleHR1cmVJZCk7Cit9CisKK3N0YXRpYyBib29sIGlzQ0NXKGNvbnN0IEZsb2F0UXVh
ZCYgcXVhZCkKK3sKKyAgICBGbG9hdFBvaW50IHYxID0gRmxvYXRQb2ludChxdWFkLnAyKCkueCgp
IC0gcXVhZC5wMSgpLngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkLnAy
KCkueSgpIC0gcXVhZC5wMSgpLnkoKSk7CisgICAgRmxvYXRQb2ludCB2MiA9IEZsb2F0UG9pbnQo
cXVhZC5wMygpLngoKSAtIHF1YWQucDIoKS54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcXVhZC5wMygpLnkoKSAtIHF1YWQucDIoKS55KCkpOworICAgIHJldHVybiAodjEueCgp
ICogdjIueSgpIC0gdjEueSgpICogdjIueCgpKSA8IDA7Cit9CisKK3N0YXRpYyBFZGdlIGNvbXB1
dGVFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIHEsIGZsb2F0IHNp
Z24pCit7CisgICAgQVNTRVJUKHAgIT0gcSk7CisKKyAgICBGbG9hdFBvaW50IHRhbmdlbnQocC55
KCkgLSBxLnkoKSwgcS54KCkgLSBwLngoKSk7CisgICAgZmxvYXQgc2NhbGUgPSBzaWduIC8gdGFu
Z2VudC5sZW5ndGgoKTsKKyAgICBmbG9hdCBjcm9zczIgPSBwLngoKSAqIHEueSgpIC0gcS54KCkg
KiBwLnkoKTsKKworICAgIHJldHVybiBFZGdlKHRhbmdlbnQueCgpICogc2NhbGUsCisgICAgICAg
ICAgICAgICAgdGFuZ2VudC55KCkgKiBzY2FsZSwKKyAgICAgICAgICAgICAgICBjcm9zczIgKiBz
Y2FsZSk7Cit9CisKK3N0YXRpYyBGbG9hdFBvaW50IGludGVyc2VjdChjb25zdCBFZGdlJiBhLCBj
b25zdCBFZGdlJiBiKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KAorICAgICAgICAoYS55KCkg
KiBiLnooKSAtIGIueSgpICogYS56KCkpIC8gKGEueCgpICogYi55KCkgLSBiLngoKSAqIGEueSgp
KSwKKyAgICAgICAgKGEueCgpICogYi56KCkgLSBiLngoKSAqIGEueigpKSAvIChiLngoKSAqIGEu
eSgpIC0gYS54KCkgKiBiLnkoKSkpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3ZvaWQgQ0NU
aWxlZExheWVySW1wbDo6ZHJhd1RpbGVzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlciwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGlu
dCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKQoreworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChsYXllclJlbmRlcmVyLT53aW5kb3dNYXRyaXgo
KSAqIGxheWVyUmVuZGVyZXItPnByb2plY3Rpb25NYXRyaXgoKSAqIGdsb2JhbFRyYW5zZm9ybSk7
CisKKyAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IFogY29tcG9uZW50LgorICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeFhZVyA9CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1h
dHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCAwLCBtYXRyaXgubTE0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCAwLCBtYXRyaXgubTI0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0z
MigpLCAxLCBtYXRyaXgubTM0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJp
eC5tNDEoKSwgbWF0cml4Lm00MigpLCAwLCBtYXRyaXgubTQ0KCkpOworCisgICAgLy8gRG9uJ3Qg
ZHJhdyBhbnkgdGlsZXMgd2hlbiBtYXRyaXggaXMgbm90IGludmVydGlibGUuCisgICAgaWYgKCFt
YXRyaXhYWVcuaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGludmVyc2UgPSBtYXRyaXhYWVcuaW52ZXJzZSgpOworCisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisKKyAgICAvLyBNYXAgY29u
dGVudCByZWN0YW5nbGUgdG8gZGV2aWNlIHNwYWNlLgorICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFk
ID0gbWF0cml4Lm1hcFF1YWQoRmxvYXRRdWFkKGNvbnRlbnRSZWN0KSk7CisKKyAgICAvLyBDb3Vu
dGVyLWNsb2Nrd2lzZT8KKyAgICBmbG9hdCBzaWduID0gaXNDQ1coZGV2aWNlUXVhZCkgPyAtMSA6
IDE7CisKKyAgICAvLyBDb21wdXRlIG91dGVyIGVkZ2VzLgorICAgIEVkZ2UgbGVmdEVkZ2UgPSBj
b21wdXRlRWRnZShkZXZpY2VRdWFkLnA0KCksIGRldmljZVF1YWQucDEoKSwgc2lnbik7CisgICAg
RWRnZSByaWdodEVkZ2UgPSBjb21wdXRlRWRnZShkZXZpY2VRdWFkLnAyKCksIGRldmljZVF1YWQu
cDMoKSwgc2lnbik7CisgICAgRWRnZSB0b3BFZGdlID0gY29tcHV0ZUVkZ2UoZGV2aWNlUXVhZC5w
MSgpLCBkZXZpY2VRdWFkLnAyKCksIHNpZ24pOworICAgIEVkZ2UgYm90dG9tRWRnZSA9IGNvbXB1
dGVFZGdlKGRldmljZVF1YWQucDMoKSwgZGV2aWNlUXVhZC5wNCgpLCBzaWduKTsKKworICAgIGlm
IChlZGdlTG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAgLy8gTW92ZSBvdXRlciBlZGdlcyB0byBl
bnN1cmUgdGhhdCBhbGwgcGFydGlhbGx5IGNvdmVyZWQgcGl4ZWxzIGFyZQorICAgICAgICAvLyBw
cm9jZXNzZWQuCisgICAgICAgIGxlZnRFZGdlLm1vdmUoMCwgMCwgMC41Zik7CisgICAgICAgIHJp
Z2h0RWRnZS5tb3ZlKDAsIDAsIDAuNWYpOworICAgICAgICB0b3BFZGdlLm1vdmUoMCwgMCwgMC41
Zik7CisgICAgICAgIGJvdHRvbUVkZ2UubW92ZSgwLCAwLCAwLjVmKTsKKworICAgICAgICBmbG9h
dCBlZGdlWzEyXTsKKyAgICAgICAgZWRnZVswXSA9IGxlZnRFZGdlLngoKTsKKyAgICAgICAgZWRn
ZVsxXSA9IGxlZnRFZGdlLnkoKTsKKyAgICAgICAgZWRnZVsyXSA9IGxlZnRFZGdlLnooKTsKKyAg
ICAgICAgZWRnZVszXSA9IHRvcEVkZ2UueCgpOworICAgICAgICBlZGdlWzRdID0gdG9wRWRnZS55
KCk7CisgICAgICAgIGVkZ2VbNV0gPSB0b3BFZGdlLnooKTsKKyAgICAgICAgZWRnZVs2XSA9IHJp
Z2h0RWRnZS54KCk7CisgICAgICAgIGVkZ2VbN10gPSByaWdodEVkZ2UueSgpOworICAgICAgICBl
ZGdlWzhdID0gcmlnaHRFZGdlLnooKTsKKyAgICAgICAgZWRnZVs5XSA9IGJvdHRvbUVkZ2UueCgp
OworICAgICAgICBlZGdlWzEwXSA9IGJvdHRvbUVkZ2UueSgpOworICAgICAgICBlZGdlWzExXSA9
IGJvdHRvbUVkZ2UueigpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTNm
dihlZGdlTG9jYXRpb24sIGVkZ2UsIDQpKTsKKyAgICB9CisKKyAgICBFZGdlIHByZXZFZGdlWSA9
IHRvcEVkZ2U7CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGls
ZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdo
dCwgYm90dG9tKTsKKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IG1fdGlsZXItPmNvbnRlbnRSZWN0
VG9MYXllclJlY3QoY29udGVudFJlY3QpOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90
dG9tOyArK2opIHsKKyAgICAgICAgRWRnZSBwcmV2RWRnZVggPSBsZWZ0RWRnZTsKKworICAgICAg
ICBFZGdlIGVkZ2VZID0gYm90dG9tRWRnZTsKKyAgICAgICAgaWYgKGogPCAobV90aWxlci0+bnVt
VGlsZXNZKCkgLSAxKSkgeworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHVuaW9uUmVj
dChtX3RpbGVyLT50aWxlQm91bmRzKDAsIGopLCBtX3RpbGVyLT50aWxlQm91bmRzKG1fdGlsZXIt
Pm51bVRpbGVzWCgpIC0gMSwgaikpOworICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGxh
eWVyUmVjdCk7CisKKyAgICAgICAgICAgIC8vIFNraXAgZW1wdHkgcm93cy4KKyAgICAgICAgICAg
IGlmICh0aWxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIHRpbGVSZWN0ID0gbV90aWxlci0+bGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxl
UmVjdCk7CisKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxl
UmVjdC5tYXhZKCkpOworICAgICAgICAgICAgRmxvYXRQb2ludCBwMih0aWxlUmVjdC54KCksIHRp
bGVSZWN0Lm1heFkoKSk7CisKKyAgICAgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNw
YWNlLgorICAgICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEpOworICAgICAgICAgICAg
cDIgPSBtYXRyaXgubWFwUG9pbnQocDIpOworCisgICAgICAgICAgICAvLyBDb21wdXRlIGhvcml6
b250YWwgZWRnZS4KKyAgICAgICAgICAgIGVkZ2VZID0gY29tcHV0ZUVkZ2UocDEsIHAyLCBzaWdu
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyAr
K2kpIHsKKyAgICAgICAgICAgIERyYXdhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAg
ICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+dGV4dHVyZUlkKCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0aWxlLT50ZXh0dXJlSWQoKSk7CisKKyAgICAgICAgICAg
IC8vIERvbid0IHVzZSB0aWxlQ29udGVudFJlY3QgaGVyZSwgYXMgdGhhdCBjb250YWlucyB0aGUg
ZnVsbAorICAgICAgICAgICAgLy8gcmVjdCB3aXRoIGJvcmRlciB0ZXhlbHMgd2hpY2ggc2hvdWxk
bid0IGJlIGRyYXduLgorICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IG1fdGlsZXItPnRp
bGVCb3VuZHModGlsZS0+aSgpLCB0aWxlLT5qKCkpOworICAgICAgICAgICAgSW50UmVjdCBkaXNw
bGF5UmVjdCA9IHRpbGVSZWN0OworICAgICAgICAgICAgdGlsZVJlY3QuaW50ZXJzZWN0KGxheWVy
UmVjdCk7CisKKyAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgaG93IHRoZSB0b3AgbGVmdCBo
YXMgbW92ZWQsIHNvIHRoZSB0ZXh0dXJlIGNhbiBiZQorICAgICAgICAgICAgLy8gb2Zmc2V0IHRo
ZSBzYW1lIGFtb3VudC4KKyAgICAgICAgICAgIEludFNpemUgZGlzcGxheU9mZnNldCA9IHRpbGVS
ZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBkaXNwbGF5UmVjdC5taW5YTWluWUNvcm5lcigpOworCisg
ICAgICAgICAgICAvLyBTa2lwIGVtcHR5IHRpbGVzLgorICAgICAgICAgICAgaWYgKHRpbGVSZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGls
ZVJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KHRpbGVSZWN0KTsKKworICAg
ICAgICAgICAgRmxvYXRSZWN0IGNsYW1wUmVjdCh0aWxlUmVjdCk7CisgICAgICAgICAgICAvLyBD
bGFtcCB0ZXh0dXJlIGNvb3JkaW5hdGVzIHRvIGF2b2lkIHNhbXBsaW5nIG91dHNpZGUgdGhlIGxh
eWVyCisgICAgICAgICAgICAvLyBieSBkZWZsYXRpbmcgdGhlIHRpbGUgcmVnaW9uIGhhbGYgYSB0
ZXhlbCBvciBoYWxmIGEgdGV4ZWwKKyAgICAgICAgICAgIC8vIG1pbnVzIGVwc2lsb24gZm9yIG9u
ZSBwaXhlbCBsYXllcnMuIFRoZSByZXN1bHRpbmcgY2xhbXAgcmVnaW9uCisgICAgICAgICAgICAv
LyBpcyBtYXBwZWQgdG8gdGhlIHVuaXQgc3F1YXJlIGJ5IHRoZSB2ZXJ0ZXggc2hhZGVyIGFuZCBt
YXBwZWQKKyAgICAgICAgICAgIC8vIGJhY2sgdG8gbm9ybWFsaXplZCB0ZXh0dXJlIGNvb3JkaW5h
dGVzIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIKKyAgICAgICAgICAgIC8vIGFmdGVyIGJlaW5nIGNs
YW1wZWQgdG8gMC0xIHJhbmdlLgorICAgICAgICAgICAgY29uc3QgZmxvYXQgZXBzaWxvbiA9IDEg
LyAxMDI0LjBmOworICAgICAgICAgICAgZmxvYXQgY2xhbXBYID0gbWluKDAuNSwgY2xhbXBSZWN0
LndpZHRoKCkgLyAyLjAgLSBlcHNpbG9uKTsKKyAgICAgICAgICAgIGZsb2F0IGNsYW1wWSA9IG1p
bigwLjUsIGNsYW1wUmVjdC5oZWlnaHQoKSAvIDIuMCAtIGVwc2lsb24pOworICAgICAgICAgICAg
Y2xhbXBSZWN0LmluZmxhdGVYKC1jbGFtcFgpOworICAgICAgICAgICAgY2xhbXBSZWN0LmluZmxh
dGVZKC1jbGFtcFkpOworICAgICAgICAgICAgRmxvYXRTaXplIGNsYW1wT2Zmc2V0ID0gY2xhbXBS
ZWN0Lm1pblhNaW5ZQ29ybmVyKCkgLSBGbG9hdFJlY3QodGlsZVJlY3QpLm1pblhNaW5ZQ29ybmVy
KCk7CisKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgdGV4T2Zmc2V0ID0gbV90aWxlci0+dGV4dHVy
ZU9mZnNldCh0aWxlLT5pKCksIHRpbGUtPmooKSkgKyBjbGFtcE9mZnNldCArIEZsb2F0U2l6ZShk
aXNwbGF5T2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IHRpbGVXaWR0aCA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLndpZHRoKCkpOworICAgICAgICAgICAgZmxvYXQg
dGlsZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3RpbGVyLT50aWxlU2l6ZSgpLmhlaWdo
dCgpKTsKKworICAgICAgICAgICAgLy8gTWFwIGNsYW1waW5nIHJlY3RhbmdsZSB0byB1bml0IHNx
dWFyZS4KKyAgICAgICAgICAgIGZsb2F0IHZlcnRleFRleFRyYW5zbGF0ZVggPSAtY2xhbXBSZWN0
LngoKSAvIGNsYW1wUmVjdC53aWR0aCgpOworICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4VHJh
bnNsYXRlWSA9IC1jbGFtcFJlY3QueSgpIC8gY2xhbXBSZWN0LmhlaWdodCgpOworICAgICAgICAg
ICAgZmxvYXQgdmVydGV4VGV4U2NhbGVYID0gdGlsZVJlY3Qud2lkdGgoKSAvIGNsYW1wUmVjdC53
aWR0aCgpOworICAgICAgICAgICAgZmxvYXQgdmVydGV4VGV4U2NhbGVZID0gdGlsZVJlY3QuaGVp
Z2h0KCkgLyBjbGFtcFJlY3QuaGVpZ2h0KCk7CisKKyAgICAgICAgICAgIC8vIE1hcCB0byBub3Jt
YWxpemVkIHRleHR1cmUgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRl
eFRyYW5zbGF0ZVggPSB0ZXhPZmZzZXQueCgpIC8gdGlsZVdpZHRoOworICAgICAgICAgICAgZmxv
YXQgZnJhZ21lbnRUZXhUcmFuc2xhdGVZID0gdGV4T2Zmc2V0LnkoKSAvIHRpbGVIZWlnaHQ7Cisg
ICAgICAgICAgICBmbG9hdCBmcmFnbWVudFRleFNjYWxlWCA9IGNsYW1wUmVjdC53aWR0aCgpIC8g
dGlsZVdpZHRoOworICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRUZXhTY2FsZVkgPSBjbGFtcFJl
Y3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OworCisgICAgICAgICAgICAvLyBPcGVuR0wgY29vcmRp
bmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgorICAgICAgICAgICAgLy8gSWYgdGlsZSB0ZXh0dXJl
IGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuCisg
ICAgICAgICAgICBpZiAobV90ZXh0dXJlT3JpZW50YXRpb24gPT0gTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6VG9wRG93bk9yaWVudGF0aW9uKSB7CisgICAgICAgICAgICAgICAgZnJhZ21lbnRUZXhUcmFu
c2xhdGVZID0gMS4wIC0gZnJhZ21lbnRUZXhUcmFuc2xhdGVZOworICAgICAgICAgICAgICAgIGZy
YWdtZW50VGV4U2NhbGVZICo9IC0xLjA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEVk
Z2UgZWRnZVggPSByaWdodEVkZ2U7CisgICAgICAgICAgICBpZiAoaSA8IChtX3RpbGVyLT5udW1U
aWxlc1goKSAtIDEpKSB7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwMSh0aWxlUmVjdC5t
YXhYKCksIHRpbGVSZWN0LnkoKSk7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwMih0aWxl
UmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBNYXAg
cG9pbnRzIHRvIGRldmljZSBzcGFjZS4KKyAgICAgICAgICAgICAgICBwMSA9IG1hdHJpeC5tYXBQ
b2ludChwMSk7CisgICAgICAgICAgICAgICAgcDIgPSBtYXRyaXgubWFwUG9pbnQocDIpOworCisg
ICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB2ZXJ0aWNhbCBlZGdlLgorICAgICAgICAgICAgICAg
IGVkZ2VYID0gY29tcHV0ZUVkZ2UocDEsIHAyLCBzaWduKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gQ3JlYXRlIGRldmljZSBzcGFjZSBxdWFkLgorICAgICAgICAgICAgRmxvYXRR
dWFkIGRldmljZVF1YWQoaW50ZXJzZWN0KGVkZ2VZLCBwcmV2RWRnZVgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0KHByZXZFZGdlWCwgcHJldkVkZ2VZKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdChwcmV2RWRnZVksIGVkZ2VY
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdChlZGdlWCwgZWRn
ZVkpKTsKKworICAgICAgICAgICAgLy8gTWFwIHF1YWQgdG8gbGF5ZXIgc3BhY2UuCisgICAgICAg
ICAgICBGbG9hdFF1YWQgcXVhZCA9IGludmVyc2UubWFwUXVhZChkZXZpY2VRdWFkKTsKKworICAg
ICAgICAgICAgLy8gTm9ybWFsaXplIHRvIHRpbGVSZWN0LgorICAgICAgICAgICAgcXVhZC5zY2Fs
ZSgxLjBmIC8gdGlsZVJlY3Qud2lkdGgoKSwgMS4wZiAvIHRpbGVSZWN0LmhlaWdodCgpKTsKKwor
ICAgICAgICAgICAgaWYgKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24gPT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICAvLyBNb3ZlIGZyYWdtZW50IHNoYWRlciB0cmFuc2Zvcm0gdG8gdmVydGV4
IHNoYWRlci4gV2UgY2FuIGRvCisgICAgICAgICAgICAgICAgLy8gdGhpcyB3aGlsZSBzdGlsbCBw
cm9kdWNpbmcgY29ycmVjdCByZXN1bHRzIGFzCisgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnRU
ZXhUcmFuc2Zvcm1Mb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIG5vbi1uZWdhdGl2ZQorICAgICAg
ICAgICAgICAgIC8vIHdoZW4gdGlsZXMgYXJlIHRyYW5zZm9ybWVkIGluIGEgd2F5IHRoYXQgY291
bGQgcmVzdWx0IGluCisgICAgICAgICAgICAgICAgLy8gc2FtcGxpbmcgb3V0c2lkZSB0aGUgbGF5
ZXIuCisgICAgICAgICAgICAgICAgdmVydGV4VGV4U2NhbGVYICo9IGZyYWdtZW50VGV4U2NhbGVY
OworICAgICAgICAgICAgICAgIHZlcnRleFRleFNjYWxlWSAqPSBmcmFnbWVudFRleFNjYWxlWTsK
KyAgICAgICAgICAgICAgICB2ZXJ0ZXhUZXhUcmFuc2xhdGVYICo9IGZyYWdtZW50VGV4U2NhbGVY
OworICAgICAgICAgICAgICAgIHZlcnRleFRleFRyYW5zbGF0ZVkgKj0gZnJhZ21lbnRUZXhTY2Fs
ZVk7CisgICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWCArPSBmcmFnbWVudFRleFRy
YW5zbGF0ZVg7CisgICAgICAgICAgICAgICAgdmVydGV4VGV4VHJhbnNsYXRlWSArPSBmcmFnbWVu
dFRleFRyYW5zbGF0ZVk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKGZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24s
IGZyYWdtZW50VGV4VHJhbnNsYXRlWCwgZnJhZ21lbnRUZXhUcmFuc2xhdGVZLCBmcmFnbWVudFRl
eFNjYWxlWCwgZnJhZ21lbnRUZXhTY2FsZVkpKTsKKworICAgICAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS52ZXJ0ZXhUZXhUcmFu
c2Zvcm1Mb2NhdGlvbigpLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVYLCB2ZXJ0ZXhUZXhUcmFuc2xhdGVZ
LCB2ZXJ0ZXhUZXhTY2FsZVgsIHZlcnRleFRleFNjYWxlWSkpOworCisgICAgICAgICAgICBmbG9h
dCBwb2ludFs4XTsKKyAgICAgICAgICAgIHBvaW50WzBdID0gcXVhZC5wMSgpLngoKTsKKyAgICAg
ICAgICAgIHBvaW50WzFdID0gcXVhZC5wMSgpLnkoKTsKKyAgICAgICAgICAgIHBvaW50WzJdID0g
cXVhZC5wMigpLngoKTsKKyAgICAgICAgICAgIHBvaW50WzNdID0gcXVhZC5wMigpLnkoKTsKKyAg
ICAgICAgICAgIHBvaW50WzRdID0gcXVhZC5wMygpLngoKTsKKyAgICAgICAgICAgIHBvaW50WzVd
ID0gcXVhZC5wMygpLnkoKTsKKyAgICAgICAgICAgIHBvaW50WzZdID0gcXVhZC5wNCgpLngoKTsK
KyAgICAgICAgICAgIHBvaW50WzddID0gcXVhZC5wNCgpLnkoKTsKKyAgICAgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT51bmlmb3JtMmZ2KHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50
TG9jYXRpb24oKSwgcG9pbnQsIDQpKTsKKworICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJh
d1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyLT5wcm9qZWN0aW9uTWF0cml4KCks
IGdsb2JhbFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIG9wYWNpdHksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNo
YWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsK
KworICAgICAgICAgICAgcHJldkVkZ2VYID0gZWRnZVg7CisgICAgICAgICAgICAvLyBSZXZlcnNl
IGRpcmVjdGlvbi4KKyAgICAgICAgICAgIHByZXZFZGdlWC5zY2FsZSgtMSwgLTEsIC0xKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHByZXZFZGdlWSA9IGVkZ2VZOworICAgICAgICAvLyBSZXZlcnNl
IGRpcmVjdGlvbi4KKyAgICAgICAgcHJldkVkZ2VZLnNjYWxlKC0xLCAtMSwgLTEpOworICAgIH0K
K30KKwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IDczNDZiYjdlN2Q2ZmE2YmM4Y2ExZWJjZjI5Y2M1
ODQ5ZjFlZjYzYWUuLmE3MmQzMGMxYmRkZDI3ZTMzMTAwZjFhOGY2ODYwMjI4ZWYwMTU4NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTI2LDExICsyNiwxNSBAQAogI2lmbmRl
ZiBDQ1RpbGVkTGF5ZXJJbXBsX2gKICNkZWZpbmUgQ0NUaWxlZExheWVySW1wbF9oCiAKLSNpbmNs
dWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVy
LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUaWxpbmdEYXRhLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgRHJhd2FibGVUaWxlOworCiBjbGFzcyBDQ1RpbGVkTGF5ZXJJ
bXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDQ1RpbGVkTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQpAQCAtNDUsMTMgKzQ5LDQwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwg
aW50IGluZGVudCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFRpbGluZ1RyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdGlsaW5nVHJhbnNmb3JtKSB7IG1fdGlsaW5nVHJhbnNmb3Jt
ID0gdGlsaW5nVHJhbnNmb3JtOyB9Ci0gICAgdm9pZCBzZXRUaWxlcihMYXllclRpbGVyQ2hyb21p
dW0qIHRpbGVyKSB7IG1fdGlsZXIgPSB0aWxlcjsgfQorICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJv
b2wgc2tpcHNEcmF3KSB7IG1fc2tpcHNEcmF3ID0gc2tpcHNEcmF3OyB9CisgICAgdm9pZCBzZXRU
ZXh0dXJlT3JpZW50YXRpb24oTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gdGV4dHVy
ZU9yaWVudGF0aW9uKSB7IG1fdGV4dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZU9yaWVudGF0aW9u
OyB9CisgICAgdm9pZCBzZXRTYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdCkgeyBtX3NhbXBsZWRUZXhlbEZv
cm1hdCA9IHNhbXBsZWRUZXhlbEZvcm1hdDsgfQorICAgIHZvaWQgc2V0VGlsaW5nRGF0YShjb25z
dCBDQ0xheWVyVGlsaW5nRGF0YSYgdGlsZXIpOworICAgIHZvaWQgc3luY1RleHR1cmVJZChpbnQs
IGludCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpOworCisgICAgdHlwZWRlZiBQcm9ncmFt
QmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJv
Z3JhbTsKKyAgICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHN3YXBzIHJlZCBhbmQgYmx1ZSBjb21w
b25lbnRzIG9mIHRleHR1cmUuCisgICAgLy8gVXNlZCB3aGVuIHRleHR1cmUgZm9ybWF0IGRvZXMg
bm90IG1hdGNoIG5hdGl2ZSBjb2xvciBmb3JtYXQuCisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGlu
ZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGE+IFBy
b2dyYW1Td2l6emxlOworCisgICAgLy8gU2hhZGVyIHByb2dyYW0gdGhhdCBwcm9kdWNlcyBhbnRp
LWFsaWFzZWQgbGF5ZXIgZWRnZXMuCisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhT
aGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYUFBPiBQcm9ncmFtQUE7CisgICAg
dHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJH
QkFUZXhTd2l6emxlQWxwaGFBQT4gUHJvZ3JhbVN3aXp6bGVBQTsKIAogcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBDQ1RpbGVkTGF5ZXJJbXBsKGludCBpZCk7CiAKKyAgICAvLyBEcmF3IGFsbCB0aWxl
cyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBjb250ZW50IHJlY3QuCisgICAgdm9pZCBkcmF3KExh
eWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworCisgICAgRHJhd2FibGVUaWxl
KiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0OworICAgIERyYXdhYmxlVGlsZSogY3JlYXRlVGlsZShp
bnQsIGludCk7CisKKyAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNv
bnRlbnRSZWN0LgorICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHZvaWQgZHJhd1RpbGVzKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIGlu
dCBmcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uLCBpbnQgZWRnZUxvY2F0aW9uKTsKKwogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdGlsaW5nVHJhbnNmb3JtOwotICAgIExheWVyVGlsZXJD
aHJvbWl1bSogbV90aWxlcjsKKyAgICBib29sIG1fc2tpcHNEcmF3OworICAgIExheWVyVGV4dHVy
ZVVwZGF0ZXI6Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOworICAgIExheWVyVGV4
dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKKwor
ICAgIE93blB0cjxDQ0xheWVyVGlsaW5nRGF0YT4gbV90aWxlcjsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oCmluZGV4IDNk
YWJiNWRlYzMzMDZlN2UyNjMxNDA1YmRjMmMzNGU5NTJkNDIwMjcuLmJjNjNhNjcwYmY0NjE3MjVl
ODFkODAwYTg5MTg5NWZhYzg2NjJhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaApAQCAtNDAsNyArNDAsNiBAQCBjbGFzcyBJbnRS
ZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAKIGNsYXNzIFRpbGluZ0RhdGEgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFRpbGluZ0RhdGEpOwogcHVibGljOgogICAgIFRpbGluZ0RhdGEoaW50IG1h
eFRleHR1cmVTaXplLCBpbnQgdG90YWxTaXplWCwgaW50IHRvdGFsU2l6ZVksIGJvb2wgaGFzQm9y
ZGVyVGV4ZWxzKTsKICAgICB2b2lkIHNldFRvdGFsU2l6ZShpbnQgdG90YWxTaXplWCwgaW50IHRv
dGFsU2l6ZVkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlYmE4NzIxMzNlN2YyZmUw
MDlkMjczYTViNmExMmU1NmQ5NGY5MzczLi4xNDg5ZTIwYmE1YjczMTk4ZWYyOGFkMzA4OWVhMTE5
OTNkYjQ0MmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDExLTA4LTE3ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAg
W2Nocm9taXVtXSBTcGxpdCB0aWxlciBpbnRvIG1haW4gdGhyZWFkIC8gY29tcG9zaXRvciB0aHJl
YWQgdmVyc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY2MDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIGEgdGVzdCBmb3IgYXNzaWdubWVudCBhbmQgY29weSBjb25zdHJ1Y3RvciBmb3IgVGls
aW5nRGF0YS4KKworICAgICAgICAqIHRlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTA4LTE1ICBEbWl0cnkgTG9tb3YgIDxkc2xvbW92QGdv
b2dsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYxMDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGlu
Z0RhdGFUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0YVRl
c3QuY3BwCmluZGV4IDc2MmVkYTkzOTkxNTBlYmU0Yzk3MTk0NmE3NGU1N2MzOWEzYjVkZDUuLmQ0
YzY4ZjU1NzQxZTdhY2I1NzlhZWJmMTg1ZGY2ZTM2YTMyZmUzZjcgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwCkBAIC00ODgsNCArNDg4LDI4
IEBAIFRFU1QoVGlsaW5nRGF0YVRlc3QsIHNldE1heFRleHR1cmVTaXplQm9yZGVycykKICAgICBF
WFBFQ1RfRVEoMTAsIGRhdGEubnVtVGlsZXNZKCkpOwogfQogCitURVNUKFRpbGluZ0RhdGFUZXN0
LCBhc3NpZ25tZW50KQoreworICAgIHsKKyAgICAgICAgVGlsaW5nRGF0YSBzb3VyY2UoOCwgMTYs
IDMyLCB0cnVlKTsKKyAgICAgICAgVGlsaW5nRGF0YSBkZXN0ID0gc291cmNlOworICAgICAgICBF
WFBFQ1RfRVEoc291cmNlLmJvcmRlclRleGVscygpLCBkZXN0LmJvcmRlclRleGVscygpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHNvdXJjZS5tYXhUZXh0dXJlU2l6ZSgpLCBkZXN0Lm1heFRleHR1cmVT
aXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNlLm51bVRpbGVzWCgpLCBkZXN0Lm51bVRp
bGVzWCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5udW1UaWxlc1koKSwgZGVzdC5udW1U
aWxlc1koKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UudG90YWxTaXplWCgpLCBkZXN0LnRv
dGFsU2l6ZVgoKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UudG90YWxTaXplWSgpLCBkZXN0
LnRvdGFsU2l6ZVkoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgVGlsaW5nRGF0YSBzb3VyY2Uo
MywgNiwgMTAwLCBmYWxzZSk7CisgICAgICAgIFRpbGluZ0RhdGEgZGVzdChzb3VyY2UpOworICAg
ICAgICBFWFBFQ1RfRVEoc291cmNlLmJvcmRlclRleGVscygpLCBkZXN0LmJvcmRlclRleGVscygp
KTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5tYXhUZXh0dXJlU2l6ZSgpLCBkZXN0Lm1heFRl
eHR1cmVTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoc291cmNlLm51bVRpbGVzWCgpLCBkZXN0
Lm51bVRpbGVzWCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNvdXJjZS5udW1UaWxlc1koKSwgZGVz
dC5udW1UaWxlc1koKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UudG90YWxTaXplWCgpLCBk
ZXN0LnRvdGFsU2l6ZVgoKSk7CisgICAgICAgIEVYUEVDVF9FUShzb3VyY2UudG90YWxTaXplWSgp
LCBkZXN0LnRvdGFsU2l6ZVkoKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZQo=
</data>
<flag name="review"
          id="100205"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>