<?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>103854</bug_id>
          
          <creation_ts>2012-12-02 22:13:33 -0800</creation_ts>
          <short_desc>[META] Coordinated Graphics: Refactoring TextureMapper to work in an actor model</short_desc>
          <delta_ts>2013-06-20 22:19:38 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>108296</dependson>
    
    <dependson>109782</dependson>
    
    <dependson>103366</dependson>
    
    <dependson>103843</dependson>
    
    <dependson>103959</dependson>
    
    <dependson>104990</dependson>
    
    <dependson>107073</dependson>
    
    <dependson>107084</dependson>
    
    <dependson>107099</dependson>
    
    <dependson>107224</dependson>
    
    <dependson>107644</dependson>
    
    <dependson>107794</dependson>
    
    <dependson>108051</dependson>
    
    <dependson>108294</dependson>
    
    <dependson>108295</dependson>
    
    <dependson>108610</dependson>
          <blocked>102994</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Dongseong Hwang">dongseong.hwang</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dev</cc>
    
    <cc>d.nomiyama</cc>
    
    <cc>jaepark</cc>
    
    <cc>jturcotte</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>noam</cc>
    
    <cc>ostap73</cc>
    
    <cc>sergio</cc>
    
    <cc>skyul</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>781128</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-02 22:13:33 -0800</bug_when>
    <thetext>Currently, LayerTreeRenderer uses GraphicsLayerTextureMapper to use TextureMapperLayer, because TextureMapperLayer does not have actor model API.
If refactoring TextureMapper to work in an actor model, Coodinated Graphics does not depend on GraphicsLayerTextureMapper, so we can change features more easily.

After complete, LayerTreeRenderer and GraphicsLayerTextureMapper use TextureMapperLayer in the same way: actor model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785738</commentid>
    <comment_count>1</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-07 01:25:14 -0800</bug_when>
    <thetext>The following document explains what this meta bug will change.
https://docs.google.com/document/pub?id=1u1Oif9lDmVt_MkJLxaEYbTlOuZWVJcKrM1vAxAvFrZk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806917</commentid>
    <comment_count>2</comment_count>
      <attachid>182686</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-14 19:55:01 -0800</bug_when>
    <thetext>Created attachment 182686
Not for review : prototype actor model.

post this patch to help noam&apos;s actor model implementation.

This implementation changes only TextureMapperLayer API so Coordinated Graphics needs to manage similar message passing PODs.
It means it is not completed patch, and noam will complete :)

Note,
1. after actor model implementation, we don&apos;t need LayerTreeRenderer::m_pendingSyncBackingStores.
2. after actor model implementation, it is hard to use getters of TextureMapperLayer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807098</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-15 01:20:29 -0800</bug_when>
    <thetext>I think part of it you should already prepare, if you don&apos;t mind :)
The part where we do all the syncing in GraphicsLayerTextureMapper instead of in TextureMapperLayer. If you want to prepare that and upstream I can do the other part where we use PODs instead of functional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807165</commentid>
    <comment_count>4</comment_count>
      <attachid>182686</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-15 03:38:16 -0800</bug_when>
    <thetext>Comment on attachment 182686
Not for review : prototype actor model.

(In reply to comment #3)
&gt; I think part of it you should already prepare, if you don&apos;t mind :)
&gt; The part where we do all the syncing in GraphicsLayerTextureMapper instead of in TextureMapperLayer. If you want to prepare that and upstream I can do the other part where we use PODs instead of functional.

I want the fastest way. I don&apos;t want you to wait me. Feel free to use this patch. If we can work in parallel, I can complete this patch if you want.
Which is preferable? :)


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

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:490
&gt; +

btw, I&apos;m not sure which granularity is optimal.
Coarse granularity makes POD big and reduces the number of dispatching message.
Fine granularity makes POD small and increases the number of dispatching message.
We need to find sweet point.

IMO CoordinatedGraphics::syncLayerState is a bit coarse. but below is a bit fine (e.g. ContentsRectChange, MasksToBoundsChange and etc.)

Do you have good solution?

Or will you correct the granularity if I land this patch with this problem?

 491    if (m_changeMask &amp; ContentsRectChange)
 492        m_layer-&gt;appendChange(bind(&amp;TextureMapperLayer::setContentsRect, m_layer.get(), contentsRect()));
 493
 494    if (m_changeMask &amp; MasksToBoundsChange)
 495        m_layer-&gt;appendChange(bind(&amp;TextureMapperLayer::setMasksToBounds, m_layer.get(), masksToBounds()));
 496
 497    if (m_changeMask &amp; DrawsContentChange)
 498        m_layer-&gt;appendChange(bind(&amp;TextureMapperLayer::setDrawsContent, m_layer.get(), drawsContent()));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808107</commentid>
    <comment_count>5</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-16 00:20:24 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; I think part of it you should already prepare, if you don&apos;t mind :)
&gt; The part where we do all the syncing in GraphicsLayerTextureMapper instead of in TextureMapperLayer. If you want to prepare that and upstream I can do the other part where we use PODs instead of functional.

I&apos;m working on completing this patch. If you have other opinion, let me know :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808112</commentid>
    <comment_count>6</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-16 00:23:25 -0800</bug_when>
    <thetext>Actually, I think you should go ahead full speed with your approach. Using POD types in the middle would just create unnecessary copies.
No&apos;am</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808143</commentid>
    <comment_count>7</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-16 01:19:48 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Actually, I think you should go ahead full speed with your approach. Using POD types in the middle would just create unnecessary copies.
&gt; No&apos;am

Yes, I run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810431</commentid>
    <comment_count>8</comment_count>
      <attachid>183420</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-18 03:19:48 -0800</bug_when>
    <thetext>Created attachment 183420
Not for review : prototype CoordinatedTask to reduce CoreIPC messages.

This patch&apos;s purpose shows how to reduce CoreIPC messages.

If we choose this mechanism instead of CoreIPC Message, when adding new api (e.g. background color), we don&apos;t need to change LayerTreeCoordinator and LayerTreeCoordinatorProxy.
new Task will be passed via existing LayerTreeCoordinator::flushLayerChanges().

I apply CoordinatedTask to only SyncLayerState and SetLayerChildren for explanation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810443</commentid>
    <comment_count>9</comment_count>
      <attachid>183420</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-18 03:47:53 -0800</bug_when>
    <thetext>Comment on attachment 183420
Not for review : prototype CoordinatedTask to reduce CoreIPC messages.

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

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:835
&gt; +            encoder &lt;&lt; static_cast&lt;const CoordinatdSyncLayerStateTask*&gt;(task)-&gt;m_layerID;

spelling issue... Coordinat*E*d</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817543</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-27 23:28:15 -0800</bug_when>
    <thetext>Seems like the main classes of coordinated graphics (CoordinatedGraphicsLayer, CoordinatedBackingStore, LayerTreeRenderer, CoordinatedSurface, CoordinatedTile, UpdateAtlas, AreaAllocator) no longer depend on anything from WebKit2.
Dongsung, Do you think it&apos;s time to move them to WebCore/platform/graphics/texmap?
This would ease up reviews and would leave only IPC-related code in the WebKit2 directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817550</commentid>
    <comment_count>11</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-27 23:46:35 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Seems like the main classes of coordinated graphics (CoordinatedGraphicsLayer, CoordinatedBackingStore, LayerTreeRenderer, CoordinatedSurface, CoordinatedTile, UpdateAtlas, AreaAllocator) no longer depend on anything from WebKit2.
&gt; Dongsung, Do you think it&apos;s time to move them to WebCore/platform/graphics/texmap?
Yes, I think so.
how about WebCore/platform/graphics/texmap/CoordinatedGraphics?

&gt; This would ease up reviews and would leave only IPC-related code in the WebKit2 directory.

Ok, I&apos;ll create patch ASAP!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817559</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-28 00:11:21 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Seems like the main classes of coordinated graphics (CoordinatedGraphicsLayer, CoordinatedBackingStore, LayerTreeRenderer, CoordinatedSurface, CoordinatedTile, UpdateAtlas, AreaAllocator) no longer depend on anything from WebKit2.
&gt; &gt; Dongsung, Do you think it&apos;s time to move them to WebCore/platform/graphics/texmap?
&gt; Yes, I think so.
&gt; how about WebCore/platform/graphics/texmap/CoordinatedGraphics?
platform/graphics/texmap/coordinated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817612</commentid>
    <comment_count>13</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-28 01:46:28 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; platform/graphics/texmap/coordinated?

Ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817661</commentid>
    <comment_count>14</comment_count>
      <attachid>184963</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-28 03:10:31 -0800</bug_when>
    <thetext>Created attachment 184963
WIP: Refactoring TextureMapper to work in an actor model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817663</commentid>
    <comment_count>15</comment_count>
      <attachid>184963</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-28 03:13:18 -0800</bug_when>
    <thetext>Comment on attachment 184963
WIP: Refactoring TextureMapper to work in an actor model.

Not for review patch

I submit this patch to listen feedback.

I need to test more and I&apos;ll refactor this patch after moving WebCore refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817690</commentid>
    <comment_count>16</comment_count>
      <attachid>184963</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-28 04:44:33 -0800</bug_when>
    <thetext>Comment on attachment 184963
WIP: Refactoring TextureMapper to work in an actor model.

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

&gt; Source/WebKit2/Scripts/webkit2/messages.py:401
&gt; +        &apos;WebKit::CoordinatedOperationHolder&apos;: [&apos;&quot;CoordinatedOperation.h&quot;&apos;],

I&apos;d prefer to have WebCoordinatedOperation, with its own decode/encode

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedOperation.h:87
&gt; +    virtual void execute(LayerTreeRenderer*) = 0;

I don&apos;t think this is needed.
I&apos;d just have LayerTreeRenderer::handleCoordinatedGraphicsOperation(operation) with a switch statement.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedOperation.h:88
&gt; +    virtual TaskType type() const = 0;

OperationType getOperationType()

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedOperation.h:99
&gt; +// To pass operation via CoreIPC.
&gt; +class CoordinatedOperationHolder {
&gt; +public:
&gt; +    RefPtr&lt;CoordinatedOperation&gt; operation;
&gt; +};

I would wrap it with WebKit::WebCoordinatedOperation, and then we can move this to WebCore and don&apos;t need a &quot;Holder&quot;.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedOperation.h:263
&gt; +    uint32_t m_atlasID;
&gt; +    RefPtr&lt;CoordinatedSurface&gt; m_surface;

Don&apos;t use m_ for public members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818026</commentid>
    <comment_count>17</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-28 13:12:12 -0800</bug_when>
    <thetext>Seeing your solution, I think it&apos;s artificial to call enqueue and commit and maintain a queue in the UI process. I think your previous solution of sending a vector of operations and enqueuing them in the web process is more succinct.

This way you also don&apos;t need a special &quot;holder&quot; class, all you need is a CoordinatedGraphicsOperations class that has a Vector&lt;RefPtr&lt;CoordinatedGraphicsOperation&gt; &gt; internally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818079</commentid>
    <comment_count>18</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-28 14:05:44 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; This way you also don&apos;t need a special &quot;holder&quot; class, all you need is a CoordinatedGraphicsOperations class that has a Vector&lt;RefPtr&lt;CoordinatedGraphicsOperation&gt; &gt; internally.

Yeah, I felt like this when implementing :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818799</commentid>
    <comment_count>19</comment_count>
      <attachid>185213</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-29 03:33:11 -0800</bug_when>
    <thetext>Created attachment 185213
WIP: Refactoring TextureMapper to work in an actor model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818804</commentid>
    <comment_count>20</comment_count>
      <attachid>185213</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-29 03:35:06 -0800</bug_when>
    <thetext>Comment on attachment 185213
WIP: Refactoring TextureMapper to work in an actor model. 

I posted the current implementation.
It runs well.
I&apos;ll rebase after completing Bug 108149.

I need feedback :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818979</commentid>
    <comment_count>21</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-01-29 08:39:47 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 185213 [details])
&gt; I posted the current implementation.
&gt; It runs well.
&gt; I&apos;ll rebase after completing Bug 108149.
&gt; 
&gt; I need feedback :)

It seems CoordinatedOperations.h is missing from the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818981</commentid>
    <comment_count>22</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-29 08:41:43 -0800</bug_when>
    <thetext>btw CoordinatedOperation should maybe be CoordinatedGraphicsOperation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819335</commentid>
    <comment_count>23</comment_count>
      <attachid>185213</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-29 14:32:46 -0800</bug_when>
    <thetext>Comment on attachment 185213
WIP: Refactoring TextureMapper to work in an actor model. 

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

&gt; Source/WebKit2/ChangeLog:29
&gt; +        (WebKit::CoordinatedSyncLayerStateOperation::create):

Could you suggest this op name?
CoordinatedGraphicsSyncLayerStateOperation is a bit long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819846</commentid>
    <comment_count>24</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-29 23:41:38 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 185213 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185213&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:29
&gt; &gt; +        (WebKit::CoordinatedSyncLayerStateOperation::create):
&gt; 
&gt; Could you suggest this op name?
&gt; CoordinatedGraphicsSyncLayerStateOperation is a bit long.

I think it&apos;s ok to have them as inner classes, like CoordinatedGraphicsOperation::SetLayerAnimations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819847</commentid>
    <comment_count>25</comment_count>
      <attachid>185213</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-29 23:42:46 -0800</bug_when>
    <thetext>Comment on attachment 185213
WIP: Refactoring TextureMapper to work in an actor model. 

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

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:460
&gt;      m_animationsLocked = true;
&gt; -    m_webPage-&gt;send(Messages::CoordinatedLayerTreeHostProxy::SetAnimationsLocked(true));
&gt; +    enqueueCoordinatedOperation(CoordinatedSetAnimationsLockedOperation::create(true));

This doesn&apos;t make sense. lockAnimations is not a coordinated graphics operation - it should happen immediately if at all.
Though I think we should just remove this feature, it&apos;s not really tested and I&apos;m not sure if it helps anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822641</commentid>
    <comment_count>26</comment_count>
      <attachid>186013</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-01 04:58:40 -0800</bug_when>
    <thetext>Created attachment 186013
Patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182686</attachid>
            <date>2013-01-14 19:55:01 -0800</date>
            <delta_ts>2013-01-28 03:10:16 -0800</delta_ts>
            <desc>Not for review : prototype actor model.</desc>
            <filename>0001-WIP-Actor-Model.patch</filename>
            <type>text/plain</type>
            <size>67617</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSBiOWM3ZTYyODg4ZWE0YmJlMzQ1OWRkMjJlODRlNmMwZDlmZTFlMWE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IEZyaSwgMTEgSmFuIDIwMTMgMTk6MTI6NDAgKzA5MDAKU3ViamVjdDogW1BBVENI
XSBXSVAgQWN0b3IgTW9kZWwKCi0tLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXJUcmFuc2Zvcm0uaCAgICAgfCAgICA2ICsKIC4uLi9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuY3BwIHwgIDIwOCArKysrKysrKysrKystLS0tCiAuLi4vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggICB8ICAgNDYgKysrLQogLi4u
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwICAgICAgICAgfCAgMjI5ICsr
KysrKysrKysrKy0tLS0tCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJMYXllci5oICB8ICAgOTMgKysrKy0tLQogLi4uL0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0RWZsLmNwcCAgICAgICAgICAgfCAgICAxICsKIC4uLi9BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dEdMLmNwcCAgICAgICAgICAgIHwgICAgMSArCiAuLi4vV2ViQ29yZVN1cHBvcnQvVGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50UXQuY3BwICB8ICAgIDEgKwogLi4uL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwICAgICAgfCAgMjU4ICsrKysrKysrLS0tLS0tLS0t
LS0tCiAuLi4vQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oICAgICAgICB8
ICAgMzMgKy0tCiAxMCBmaWxlcyBjaGFuZ2VkLCA1MzAgaW5zZXJ0aW9ucygrKSwgMzQ2IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXJUcmFuc2Zvcm0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uaAppbmRleCA1ZGEyNWI0Li5hY2EwYzZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNm
b3JtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
clRyYW5zZm9ybS5oCkBAIC0zMSwxMSArMzEsMTcgQEAgY2xhc3MgR3JhcGhpY3NMYXllclRyYW5z
Zm9ybSB7CiBwdWJsaWM6CiAgICAgR3JhcGhpY3NMYXllclRyYW5zZm9ybSgpOwogICAgIHZvaWQg
c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYpOworICAgIEZsb2F0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICBGbG9h
dFBvaW50M0QgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CiAg
ICAgdm9pZCBzZXRGbGF0dGVuaW5nKGJvb2wpOworICAgIGJvb2wgZmxhdHRlbmluZygpIGNvbnN0
IHsgcmV0dXJuIG1fZmxhdHRlbmluZzsgfQogICAgIHZvaWQgc2V0TG9jYWxUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2Nh
bFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWw7IH0KICAgICB2b2lkIHNldENoaWxk
cmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVu
OyB9CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmluZWQoKTsKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjb21iaW5lZEZvckNoaWxkcmVuKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGExZTc5MWIuLjhjNzZlYjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjgsNiArMjgsMTEgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitUZXh0dXJlTWFwcGVyTGF5ZXIqIHRvVGV4dHVyZU1hcHBl
ckxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJldHVybiBsYXllciA/IHRvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5sYXllcigpIDogMDsKK30KKwogUGFzc093
blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckZh
Y3RvcnkqIGZhY3RvcnksIEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICBpZiAo
IWZhY3RvcnkpCkBAIC00NSw3ICs1MCw3IEBAIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllCiAgICAg
OiBHcmFwaGljc0xheWVyKGNsaWVudCkKICAgICAsIG1fbGF5ZXIoYWRvcHRQdHIobmV3IFRleHR1
cmVNYXBwZXJMYXllcigpKSkKICAgICAsIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKDApCi0g
ICAgLCBtX2NoYW5nZU1hc2soMCkKKyAgICAsIG1fY2hhbmdlTWFzayhOb0NoYW5nZXMpCiAgICAg
LCBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1faGFzT3duQmFja2luZ1N0b3JlKHRydWUp
CiAgICAgLCBtX2ZpeGVkVG9WaWV3cG9ydChmYWxzZSkKQEAgLTU1LDcgKzYwLDcgQEAgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNz
TGF5ZXJDbGllbnQqIGNsaWUKIHsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q2hhbmdlTWFzayBjaGFuZ2VNYXNr
KQordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bm90aWZ5Q2hhbmdlKENoYW5nZU1h
c2sgY2hhbmdlTWFzaykKIHsKICAgICBtX2NoYW5nZU1hc2sgfD0gY2hhbmdlTWFzazsKICAgICBp
ZiAoIWNsaWVudCgpKQpAQCAtODYsNyArOTEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjpzZXROZWVkc0Rpc3BsYXkoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX25lZWRz
RGlzcGxheSA9IHRydWU7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6RGlz
cGxheUNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKERpc3BsYXlDaGFuZ2UpOwogICAgIGFkZFJl
cGFpbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fc2l6ZSkpOwogfQogCkBAIC05Niwx
MCArMTAxLDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRz
TmVlZHNEaXNwbGF5KCkKIHsKICAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSkgewog
ICAgICAgICBpbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKLSAgICAgICAgbV9jaGFuZ2VNYXNrIHw9
IFRleHR1cmVNYXBwZXJMYXllcjo6UmVwYWludENvdW50Q2hhbmdlOworICAgICAgICBtX2NoYW5n
ZU1hc2sgfD0gUmVwYWludENvdW50Q2hhbmdlOwogICAgIH0KIAotICAgIG5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTGF5ZXI6OkRpc3BsYXlDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShDb250
ZW50c0Rpc3BsYXlDaGFuZ2UpOwogICAgIGFkZFJlcGFpbnRSZWN0KGNvbnRlbnRzUmVjdCgpKTsK
IH0KIApAQCAtMTEzLDcgKzExOCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYgKG1f
bmVlZHNEaXNwbGF5KQogICAgICAgICByZXR1cm47CiAgICAgbV9uZWVkc0Rpc3BsYXlSZWN0LnVu
aXRlKHJlY3QpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkRpc3BsYXlD
aGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShEaXNwbGF5Q2hhbmdlKTsKICAgICBhZGRSZXBhaW50
UmVjdChyZWN0KTsKIH0KIApAQCAtMTIyLDcgKzEyNyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0
b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKICAgICBpZiAoR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW4oY2hpbGRyZW4pKSB7Ci0gICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTGF5ZXI6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICAgICAgbm90aWZ5Q2hhbmdlKENoaWxkcmVu
Q2hhbmdlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
QEAgLTEzMiw3ICsxMzcsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRD
aGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZAogKi8KIHZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQog
ewotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkNoaWxkcmVuQ2hhbmdlKTsK
KyAgICBub3RpZnlDaGFuZ2UoQ2hpbGRyZW5DaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OmFk
ZENoaWxkKGxheWVyKTsKIH0KIApAQCAtMTQxLDcgKzE0Niw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogdm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxh
eWVyLCBpbnQgaW5kZXgpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxh
eWVyLCBpbmRleCk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q2hpbGRy
ZW5DaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShDaGlsZHJlbkNoYW5nZSk7CiB9CiAKIC8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTQ5LDcgKzE1NCw3IEBAIHZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwg
aW50IGluZGV4CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEFib3Zl
KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQogewogICAgICBH
cmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKLSAgICAgbm90aWZ5
Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q2hpbGRyZW5DaGFuZ2UpOworICAgICBub3RpZnlD
aGFuZ2UoQ2hpbGRyZW5DaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
QEAgLTE1Nyw3ICsxNjIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRD
aGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheQogdm9pZCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwg
R3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJl
bG93KGxheWVyLCBzaWJsaW5nKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVy
OjpDaGlsZHJlbkNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKENoaWxkcmVuQ2hhbmdlKTsKIH0K
IAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0xNjUsNyArMTcwLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBs
YXllciwgR3JhcGhpY3NMYXkKIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlcGxh
Y2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQp
CiB7CiAgICAgaWYgKEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hp
bGQpKSB7Ci0gICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkNoaWxkcmVu
Q2hhbmdlKTsKKyAgICAgICAgbm90aWZ5Q2hhbmdlKENoaWxkcmVuQ2hhbmdlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTE3OCw3ICsxODMsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NM
YXllciogdmFsdWUpCiAgICAgaWYgKHZhbHVlID09IG1hc2tMYXllcigpKQogICAgICAgICByZXR1
cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKHZhbHVlKTsKLSAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpNYXNrTGF5ZXJDaGFuZ2UpOworICAgIG5vdGlmeUNo
YW5nZShNYXNrTGF5ZXJDaGFuZ2UpOwogCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTk0LDcgKzE5OSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9
PSByZXBsaWNhTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFJlcGxpY2F0ZWRCeUxheWVyKHZhbHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ckxheWVyOjpSZXBsaWNhTGF5ZXJDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShSZXBsaWNhTGF5
ZXJDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTIwNCw3ICsy
MDksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JiB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gcG9zaXRpb24oKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHZhbHVlKTsKLSAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpQb3NpdGlvbkNoYW5nZSk7CisgICAgbm90
aWZ5Q2hhbmdlKEdlb21ldHJ5Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVy
LmgpCkBAIC0yMTQsNyArMjE5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKICAgICBpZiAodmFsdWUg
PT0gYW5jaG9yUG9pbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dEFuY2hvclBvaW50KHZhbHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVy
OjpBbmNob3JQb2ludENoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKEdlb21ldHJ5Q2hhbmdlKTsK
IH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0yMjcsNyArMjMyLDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHZh
bHVlKQogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUodmFsdWUpOwogICAgIGlmIChtYXNrTGF5
ZXIoKSkKICAgICAgICAgbWFza0xheWVyKCktPnNldFNpemUodmFsdWUpOwotICAgIG5vdGlmeUNo
YW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OlNpemVDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShH
ZW9tZXRyeUNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMjM4
LDcgKzI0Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJMYXllcjo6VHJhbnNmb3JtQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2Uo
R2VvbWV0cnlDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTI0
OCw3ICsyNTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDaGlsZHJl
blRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeAogICAgIGlmICh2YWx1ZSA9PSBj
aGlsZHJlblRyYW5zZm9ybSgpKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTGF5ZXI6OkNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoR2Vv
bWV0cnlDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTI1OCw3
ICsyNjMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQcmVzZXJ2ZXMz
RChib29sIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBwcmVzZXJ2ZXMzRCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QodmFsdWUpOwotICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OlByZXNlcnZlczNEQ2hhbmdlKTsKKyAgICBu
b3RpZnlDaGFuZ2UoR2VvbWV0cnlDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5
ZXIuaCkKQEAgLTI2OCw3ICsyNzMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgdmFsdWUpCiAgICAgaWYgKHZhbHVlID09IG1hc2tzVG9C
b3VuZHMoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9C
b3VuZHModmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6Ok1hc2tz
VG9Cb3VuZHNDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShNYXNrc1RvQm91bmRzQ2hhbmdlKTsK
IH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0yNzcsNyArMjgyLDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgdmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6RHJhd3NDb250ZW50Q2hhbmdlKTsK
KyAgICBub3RpZnlDaGFuZ2UoRHJhd3NDb250ZW50Q2hhbmdlKTsKICAgICBHcmFwaGljc0xheWVy
OjpzZXREcmF3c0NvbnRlbnQodmFsdWUpOwogfQogCkBAIC0yODcsNyArMjkyLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNWaXNpYmxlKGJvb2wgdmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlID09IGNvbnRlbnRzQXJlVmlzaWJsZSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q29udGVudHNWaXNpYmxl
Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoQ29udGVudHNWaXNpYmxlQ2hhbmdlKTsKICAgICBH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUodmFsdWUpOwogICAgIGlmIChtYXNrTGF5
ZXIoKSkKICAgICAgICAgbWFza0xheWVyKCktPnNldENvbnRlbnRzVmlzaWJsZSh2YWx1ZSk7CkBA
IC0yOTksNyArMzA0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29u
dGVudHNPcGFxdWUoYm9vbCB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUgPT0gY29udGVudHNPcGFx
dWUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5
ZXI6OkNvbnRlbnRzT3BhcXVlQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoQ29udGVudHNPcGFx
dWVDaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKHZhbHVlKTsK
IH0KIApAQCAtMzEwLDcgKzMxNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBiYWNr
ZmFjZVZpc2liaWxpdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dEJhY2tmYWNlVmlzaWJpbGl0eSh2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJMYXllcjo6QmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoQmFj
a2ZhY2VWaXNpYmlsaXR5Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgp
CkBAIC0zMjAsNyArMzI1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0
T3BhY2l0eShmbG9hdCB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gb3BhY2l0eSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSh2YWx1ZSk7Ci0gICAgbm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6T3BhY2l0eUNoYW5nZSk7CisgICAgbm90aWZ5
Q2hhbmdlKE9wYWNpdHlDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkK
QEAgLTMzMCw3ICszMzUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRD
b250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgdmFsdWUpCiAgICAgaWYgKHZhbHVlID09IGNvbnRl
bnRzUmVjdCgpKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNSZWN0KHZhbHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDb250
ZW50c1JlY3RDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShDb250ZW50c1JlY3RDaGFuZ2UpOwog
fQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvU29saWRD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC0zMzksNyArMzQ0LDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3NvbGlkQ29sb3IgPSBjb2xvcjsKLSAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDb250ZW50Q2hhbmdlKTsKKyAgICBu
b3RpZnlDaGFuZ2UoQmFja2dyb3VuZENvbG9yQ2hhbmdlKTsKIH0KIAogCkBAIC0zNjUsNyArMzcw
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKIAogICAgICAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSkg
ewogICAgICAgICAgICAgaW5jcmVtZW50UmVwYWludENvdW50KCk7Ci0gICAgICAgICAgICBtX2No
YW5nZU1hc2sgfD0gVGV4dHVyZU1hcHBlckxheWVyOjpSZXBhaW50Q291bnRDaGFuZ2U7CisgICAg
ICAgICAgICBtX2NoYW5nZU1hc2sgfD0gUmVwYWludENvdW50Q2hhbmdlOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIgPSAwOwpAQCAt
MzczLDcgKzM3OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgfQogCiAgICAgc2V0Q29udGVudHNUb01lZGlh
KG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ckxheWVyOjpDb250ZW50Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoQ29udGVudENoYW5nZSk7
CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKIH0KIApAQCAt
MzgzLDcgKzM4OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzVG9NZWRpYShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcioKICAgICAgICAgcmV0dXJuOwog
CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb01lZGlhKG1lZGlhKTsKLSAgICBub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDb250ZW50Q2hhbmdlKTsKKyAgICBub3RpZnlD
aGFuZ2UoQ29udGVudENoYW5nZSk7CiAgICAgbV9jb250ZW50c0xheWVyID0gbWVkaWE7CiB9CiAK
QEAgLTM5Myw3ICszOTgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRT
aG93RGVidWdCb3JkZXIoYm9vbCBzaG93KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGlj
c0xheWVyOjpzZXRTaG93RGVidWdCb3JkZXIoc2hvdyk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJMYXllcjo6RGVidWdWaXN1YWxzQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoRGVi
dWdWaXN1YWxzQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0U2hvd1JlcGFpbnRDb3VudGVyKGJvb2wgc2hvdykKQEAgLTQwMiw3ICs0MDcsNyBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCBz
aG93KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93UmVwYWlu
dENvdW50ZXIoc2hvdyk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6RGVi
dWdWaXN1YWxzQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoRGVidWdWaXN1YWxzQ2hhbmdlKTsK
IH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC00MTEsMTAgKzQxNiwxNiBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCkKIHsKICAgICBpZiAobV9oYXNPd25CYWNraW5nU3RvcmUpCiAgICAgICAg
IHVwZGF0ZURlYnVnQm9yZGVyQW5kUmVwYWludENvdW50KCk7Ci0gICAgbV9sYXllci0+Zmx1c2hD
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSh0aGlzKTsKKworICAgIGNvbW1pdExheWVy
Q2hhbmdlcygpOworCisgICAgaWYgKG1faGFzT3duQmFja2luZ1N0b3JlKQorICAgICAgICBzZXRC
YWNraW5nU3RvcmUoKTsKKworICAgIG1fbGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKKwogICAgIGlmIChtX2hhc093bkJhY2tpbmdTdG9yZSkKICAgICAgICAg
dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgZGlkRmx1c2hDb21wb3NpdGluZ1N0YXRlKCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnVwZGF0ZURlYnVnQm9yZGVyQW5k
UmVwYWludENvdW50KCkKQEAgLTQyOCw3ICs0MzksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjp1cGRhdGVEZWJ1Z0JvcmRlckFuZFJlcGFpbnRDb3VudCgpCiAgICAgYm9vbCBu
ZWVkc1RvUmVwYWludCA9IHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSAmJiAobV9uZWVkc0Rpc3Bs
YXkgfHwgIW1fbmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCkpOwogICAgIGlmIChpc1Nob3dpbmdS
ZXBhaW50Q291bnRlcigpICYmIG5lZWRzVG9SZXBhaW50KSB7CiAgICAgICAgIGluY3JlbWVudFJl
cGFpbnRDb3VudCgpOwotICAgICAgICBtX2NoYW5nZU1hc2sgfD0gVGV4dHVyZU1hcHBlckxheWVy
OjpSZXBhaW50Q291bnRDaGFuZ2U7CisgICAgICAgIG1fY2hhbmdlTWFzayB8PSBSZXBhaW50Q291
bnRDaGFuZ2U7CiAgICAgfQogfQogCkBAIC00MzgsNyArNDQ5LDkwIEBAIHZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxv
YXQgd2lkdGgpCiAgICAgLy8gaGFyZCB0byBzZWUgKHNvbWUgbGVzcyB0aGFuIG9uZSBwaXhlbCB3
aWRlKSwgc28gd2UgZG91YmxlIHRoZWlyIHNpemUgaGVyZS4KICAgICBtX2RlYnVnQm9yZGVyQ29s
b3IgPSBjb2xvcjsKICAgICBtX2RlYnVnQm9yZGVyV2lkdGggPSB3aWR0aCAqIDI7Ci0gICAgbV9j
aGFuZ2VNYXNrIHw9IFRleHR1cmVNYXBwZXJMYXllcjo6RGVidWdWaXN1YWxzQ2hhbmdlOworICAg
IG1fY2hhbmdlTWFzayB8PSBEZWJ1Z1Zpc3VhbHNDaGFuZ2U7Cit9CisKK3N0YXRpYyB2b2lkIHRv
VGV4dHVyZU1hcHBlckxheWVyVmVjdG9yKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGxh
eWVycywgVmVjdG9yPFRleHR1cmVNYXBwZXJMYXllcio+JiB0ZXhtYXBMYXllcnMpCit7CisgICAg
dGV4bWFwTGF5ZXJzLnJlc2VydmVDYXBhY2l0eShsYXllcnMuc2l6ZSgpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxheWVycy5zaXplKCk7ICsraSkKKyAgICAgICAgdGV4bWFwTGF5ZXJz
LmFwcGVuZCh0b1RleHR1cmVNYXBwZXJMYXllcihsYXllcnNbaV0pKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6Y29tbWl0TGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBpZiAo
bV9jaGFuZ2VNYXNrID09IE5vQ2hhbmdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
Y2hhbmdlTWFzayAmIENoaWxkcmVuQ2hhbmdlKSB7CisgICAgICAgIFZlY3RvcjxUZXh0dXJlTWFw
cGVyTGF5ZXIqPiB0ZXh0dXJlTWFwcGVyTGF5ZXJDaGlsZHJlbjsKKyAgICAgICAgdG9UZXh0dXJl
TWFwcGVyTGF5ZXJWZWN0b3IoY2hpbGRyZW4oKSwgdGV4dHVyZU1hcHBlckxheWVyQ2hpbGRyZW4p
OworICAgICAgICBtX2xheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxheWVy
OjpzZXRDaGlsZHJlbiwgbV9sYXllci5nZXQoKSwgdGV4dHVyZU1hcHBlckxheWVyQ2hpbGRyZW4p
KTsKKyAgICB9CisKKyAgICBpZiAobV9jaGFuZ2VNYXNrICYgTWFza0xheWVyQ2hhbmdlKQorICAg
ICAgICBtX2xheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxheWVyOjpzZXRN
YXNrTGF5ZXIsIG1fbGF5ZXIuZ2V0KCksIHRvVGV4dHVyZU1hcHBlckxheWVyKG1hc2tMYXllcigp
KSkpOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIFJlcGxpY2FMYXllckNoYW5nZSkKKyAgICAg
ICAgbV9sYXllci0+YXBwZW5kQ2hhbmdlKGJpbmQoJlRleHR1cmVNYXBwZXJMYXllcjo6c2V0UmVw
bGljYUxheWVyLCBtX2xheWVyLmdldCgpLCB0b1RleHR1cmVNYXBwZXJMYXllcihyZXBsaWNhTGF5
ZXIoKSkpKTsKKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBHZW9tZXRyeUNoYW5nZSkgeworICAg
ICAgICBHcmFwaGljc0xheWVyVHJhbnNmb3JtIGxheWVyVHJhbnNmb3JtOworICAgICAgICBsYXll
clRyYW5zZm9ybS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKKyAgICAgICAgbGF5ZXJUcmFuc2Zv
cm0uc2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQoKSk7CisgICAgICAgIGxheWVyVHJhbnNmb3Jt
LnNldFNpemUoc2l6ZSgpKTsKKyAgICAgICAgbGF5ZXJUcmFuc2Zvcm0uc2V0RmxhdHRlbmluZygh
cHJlc2VydmVzM0QoKSk7CisgICAgICAgIGxheWVyVHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3Jt
KHRyYW5zZm9ybSgpKTsKKyAgICAgICAgbGF5ZXJUcmFuc2Zvcm0uc2V0Q2hpbGRyZW5UcmFuc2Zv
cm0oY2hpbGRyZW5UcmFuc2Zvcm0oKSk7CisKKyAgICAgICAgbV9sYXllci0+YXBwZW5kQ2hhbmdl
KGJpbmQoJlRleHR1cmVNYXBwZXJMYXllcjo6c2V0TGF5ZXJUcmFuc2Zvcm0sIG1fbGF5ZXIuZ2V0
KCksIGxheWVyVHJhbnNmb3JtKSk7CisgICAgfQorCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIENv
bnRlbnRzUmVjdENoYW5nZSkKKyAgICAgICAgbV9sYXllci0+YXBwZW5kQ2hhbmdlKGJpbmQoJlRl
eHR1cmVNYXBwZXJMYXllcjo6c2V0Q29udGVudHNSZWN0LCBtX2xheWVyLmdldCgpLCBjb250ZW50
c1JlY3QoKSkpOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIE1hc2tzVG9Cb3VuZHNDaGFuZ2Up
CisgICAgICAgIG1fbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6
OnNldE1hc2tzVG9Cb3VuZHMsIG1fbGF5ZXIuZ2V0KCksIG1hc2tzVG9Cb3VuZHMoKSkpOworCisg
ICAgaWYgKG1fY2hhbmdlTWFzayAmIERyYXdzQ29udGVudENoYW5nZSkKKyAgICAgICAgbV9sYXll
ci0+YXBwZW5kQ2hhbmdlKGJpbmQoJlRleHR1cmVNYXBwZXJMYXllcjo6c2V0RHJhd3NDb250ZW50
LCBtX2xheWVyLmdldCgpLCBkcmF3c0NvbnRlbnQoKSkpOworCisgICAgaWYgKG1fY2hhbmdlTWFz
ayAmIENvbnRlbnRzVmlzaWJsZUNoYW5nZSkKKyAgICAgICAgbV9sYXllci0+YXBwZW5kQ2hhbmdl
KGJpbmQoJlRleHR1cmVNYXBwZXJMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlLCBtX2xheWVyLmdl
dCgpLCBjb250ZW50c0FyZVZpc2libGUoKSkpOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIENv
bnRlbnRzT3BhcXVlQ2hhbmdlKQorICAgICAgICBtX2xheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgm
VGV4dHVyZU1hcHBlckxheWVyOjpzZXRDb250ZW50c09wYXF1ZSwgbV9sYXllci5nZXQoKSwgY29u
dGVudHNPcGFxdWUoKSkpOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIEJhY2tmYWNlVmlzaWJp
bGl0eUNoYW5nZSkKKyAgICAgICAgbV9sYXllci0+YXBwZW5kQ2hhbmdlKGJpbmQoJlRleHR1cmVN
YXBwZXJMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5LCBtX2xheWVyLmdldCgpLCBiYWNrZmFj
ZVZpc2liaWxpdHkoKSkpOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIE9wYWNpdHlDaGFuZ2Up
CisgICAgICAgIG1fbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6
OnNldE9wYWNpdHksIG1fbGF5ZXIuZ2V0KCksIG9wYWNpdHkoKSkpOworCisgICAgaWYgKG1fY2hh
bmdlTWFzayAmIEJhY2tncm91bmRDb2xvckNoYW5nZSkKKyAgICAgICAgbV9sYXllci0+YXBwZW5k
Q2hhbmdlKGJpbmQoJlRleHR1cmVNYXBwZXJMYXllcjo6c2V0U29saWRDb2xvciwgbV9sYXllci5n
ZXQoKSwgc29saWRDb2xvcigpKSk7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYg
KG1fY2hhbmdlTWFzayAmIEZpbHRlckNoYW5nZSkKKyAgICAgICAgbV9sYXllci0+YXBwZW5kQ2hh
bmdlKGJpbmQoJlRleHR1cmVNYXBwZXJMYXllcjo6c2V0RmlsdGVycywgbV9sYXllci5nZXQoKSwg
ZmlsdGVycygpKSk7CisjZW5kaWYKKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBEZWJ1Z1Zpc3Vh
bHNDaGFuZ2UpCisgICAgICAgIG1fbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFw
cGVyTGF5ZXI6OnNldERlYnVnVmlzdWFscywgbV9sYXllci5nZXQoKSwgaXNTaG93aW5nRGVidWdC
b3JkZXIoKSwgZGVidWdCb3JkZXJDb2xvcigpLCBkZWJ1Z0JvcmRlcldpZHRoKCksIGlzU2hvd2lu
Z1JlcGFpbnRDb3VudGVyKCkpKTsKKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBSZXBhaW50Q291
bnRDaGFuZ2UpCisgICAgICAgIG1fbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFw
cGVyTGF5ZXI6OnNldFJlcGFpbnRDb3VudCwgbV9sYXllci5nZXQoKSwgcmVwYWludENvdW50KCkp
KTsKKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBDb250ZW50Q2hhbmdlKQorICAgICAgICBtX2xh
eWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxheWVyOjpzZXRDb250ZW50c0xh
eWVyLCBtX2xheWVyLmdldCgpLCBwbGF0Zm9ybUxheWVyKCkpKTsKKworICAgIGlmIChtX2NoYW5n
ZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpCisgICAgICAgIG1fbGF5ZXItPmFwcGVuZENoYW5nZShi
aW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEFuaW1hdGlvbnMsIG1fbGF5ZXIuZ2V0KCksIG1f
YW5pbWF0aW9ucykpOworCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIEZpeGVkVG9WaWV3cG9yQ2hh
bmdlKQorICAgICAgICBtX2xheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxh
eWVyOjpzZXRGaXhlZFRvVmlld3BvcnQsIG1fbGF5ZXIuZ2V0KCksIGZpeGVkVG9WaWV3cG9ydCgp
KSk7CisKKyAgICBtX2NoYW5nZU1hc2sgPSBOb0NoYW5nZXM7CiB9CiAKIC8qIFxyZWltcCAoR3Jh
cGhpY3NMYXllci5oKQpAQCAtNDU4LDI4ICs1NTIsMzAgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICAgICAgY2hpbGRyZW4oKVtpXS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwogfQog
Ci12b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpkaWRGbHVzaENvbXBvc2l0aW5nU3Rh
dGUoKQordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2luZ1N0b3JlKCkK
IHsKLSAgICBtX2NoYW5nZU1hc2sgPSAwOworICAgIEFTU0VSVChtX2hhc093bkJhY2tpbmdTdG9y
ZSk7CisgICAgaWYgKCFzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkpCisgICAgICAgIG1fYmFja2lu
Z1N0b3JlLmNsZWFyKCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUp
CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdT
dG9yZTo6Y3JlYXRlKCk7CisgICAgfQorICAgIG1fbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZU
ZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEJhY2tpbmdTdG9yZSwgbV9sYXllci5nZXQoKSwgbV9iYWNr
aW5nU3RvcmUpKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6dXBkYXRl
QmFja2luZ1N0b3JlKCkKIHsKICAgICBBU1NFUlQobV9oYXNPd25CYWNraW5nU3RvcmUpOwotICAg
IHByZXBhcmVCYWNraW5nU3RvcmUoKTsKLSAgICBtX2xheWVyLT5zZXRCYWNraW5nU3RvcmUobV9i
YWNraW5nU3RvcmUpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwcmVw
YXJlQmFja2luZ1N0b3JlKCkKLXsKICAgICBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyID0g
bV9sYXllci0+dGV4dHVyZU1hcHBlcigpOwogICAgIGlmICghdGV4dHVyZU1hcHBlcikKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkpIHsKLSAgICAg
ICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9y
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsK
IAogICAgIEludFJlY3QgZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludDo6emVybygpLCBtX3NpemUpKTsKICAgICBpZiAoIW1fbmVlZHNEaXNwbGF5KQpAQCAt
NDg3LDkgKzU4Myw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnByZXBhcmVC
YWNraW5nU3RvcmUoKQogICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX2JhY2tpbmdTdG9yZSA9
IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0KICNpZiBQTEFURk9S
TShRVCkKICAgICBBU1NFUlQoZHluYW1pY19jYXN0PFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdT
dG9yZSo+KG1fYmFja2luZ1N0b3JlLmdldCgpKSk7CiAjZW5kaWYKQEAgLTUyMCw3ICs2MTMsNyBA
QCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgICAgICBsaXN0c01hdGNoID0gdmFsaWRhdGVU
cmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwgaGFzQmlnUm90YXRpb24pID49IDA7CiAKICAg
ICBtX2FuaW1hdGlvbnMuYWRkKEdyYXBoaWNzTGF5ZXJBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwg
dmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCBXVEY6OmN1cnJlbnRUaW1lKCkgLSB0aW1lT2Zmc2V0
LCBsaXN0c01hdGNoKSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6QW5p
bWF0aW9uQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoQW5pbWF0aW9uQ2hhbmdlKTsKICAgICBt
X2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC01MjgsNyArNjIxLDcgQEAgYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QKIHZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuaW1hdGlvbnMoY29uc3QgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCiB7CiAgICAgbV9hbmltYXRpb25zID0gYW5pbWF0aW9u
czsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpBbmltYXRpb25DaGFuZ2Up
OworICAgIG5vdGlmeUNoYW5nZShBbmltYXRpb25DaGFuZ2UpOwogfQogCiAKQEAgLTU1MCwxNSAr
NjQzLDI0IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFuaW1hdGlvblN0YXJ0
ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJUCiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQogYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogewotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
TGF5ZXI6OkZpbHRlckNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKEZpbHRlckNoYW5nZSk7CiAg
ICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoZmlsdGVycyk7CiB9CiAjZW5kaWYK
IAordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0KGJv
b2wgZml4ZWQpCit7CisgICAgaWYgKG1fZml4ZWRUb1ZpZXdwb3J0ID09IGZpeGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2ZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkOworICAgIG5vdGlmeUNo
YW5nZShGaXhlZFRvVmlld3BvckNoYW5nZSk7Cit9CisKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldFJlcGFpbnRDb3VudChpbnQgdmFsdWUpCiB7CiAgICAgbV9yZXBhaW50Q291
bnQgPSB2YWx1ZTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpSZXBhaW50
Q291bnRDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShSZXBhaW50Q291bnRDaGFuZ2UpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDM5MzM4YzMu
LjM5NGUxYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC03
Myw3ICs3Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJp
bmcmIG5hbWUpOwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllcjsgfQogCi0gICAgdm9pZCBub3RpZnlDaGFuZ2Uo
VGV4dHVyZU1hcHBlckxheWVyOjpDaGFuZ2VNYXNrKTsKICAgICBpbmxpbmUgaW50IGNoYW5nZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZU1hc2s7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBh
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29u
c3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKQEAgLTkwLDcgKzg5LDcgQEAg
cHVibGljOgogICAgIC8vIEZJWE1FOiBJdCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgcmVtb3Zpbmcg
ZGVwZW5kZW5jeSBvZiBMYXllclRyZWVSZW5kZXJlciBvbiBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci4KICAgICB2b2lkIHNldEhhc093bkJhY2tpbmdTdG9yZShib29sIGIpIHsgbV9oYXNPd25C
YWNraW5nU3RvcmUgPSBiOyB9CiAKLSAgICB2b2lkIHNldEZpeGVkVG9WaWV3cG9ydChib29sIGZp
eGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWQ7IH0KKyAgICB2b2lkIHNldEZpeGVkVG9W
aWV3cG9ydChib29sKTsKICAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJu
IG1fZml4ZWRUb1ZpZXdwb3J0OyB9CiAKICAgICBDb2xvciBkZWJ1Z0JvcmRlckNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9kZWJ1Z0JvcmRlckNvbG9yOyB9CkBAIC0xMDAsMTMgKzk5LDUwIEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7Ci0g
ICAgdm9pZCBkaWRGbHVzaENvbXBvc2l0aW5nU3RhdGUoKTsKKworICAgIHZvaWQgY29tbWl0TGF5
ZXJDaGFuZ2VzKCk7CisKICAgICB2b2lkIHVwZGF0ZURlYnVnQm9yZGVyQW5kUmVwYWludENvdW50
KCk7CisgICAgdm9pZCBzZXRCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIHVwZGF0ZUJhY2tpbmdT
dG9yZSgpOwotICAgIHZvaWQgcHJlcGFyZUJhY2tpbmdTdG9yZSgpOwogICAgIGJvb2wgc2hvdWxk
SGF2ZUJhY2tpbmdTdG9yZSgpIGNvbnN0OwogICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRlZFRpbWVy
RmlyZWQoVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI+Kik7CiAKKyAgICAvLyBUaGlz
IHNldCBvZiBmbGFncyBoZWxwIHVzIGRlZmVyIHdoaWNoIHByb3BlcnRpZXMgb2YgdGhlIGxheWVy
IGhhdmUgYmVlbgorICAgIC8vIG1vZGlmaWVkIGJ5IHRoZSBjb21wb3NpdG9yLCBzbyB3ZSBjYW4g
a25vdyB3aGF0IHRvIGxvb2sgZm9yIGluIHRoZSBuZXh0IGZsdXNoLgorICAgIGVudW0gQ2hhbmdl
TWFzayB7CisgICAgICAgIE5vQ2hhbmdlcyA9ICAgICAgICAgICAgICAgICAwLAorCisgICAgICAg
IENoaWxkcmVuQ2hhbmdlID0gICAgICAgICAgICAoMUwgPDwgMSksCisgICAgICAgIE1hc2tMYXll
ckNoYW5nZSA9ICAgICAgICAgICAoMUwgPDwgMiksCisgICAgICAgIFJlcGxpY2FMYXllckNoYW5n
ZSA9ICAgICAgICAoMUwgPDwgMyksCisKKyAgICAgICAgQ29udGVudENoYW5nZSA9ICAgICAgICAg
ICAgICgxTCA8PCA0KSwKKyAgICAgICAgQ29udGVudHNSZWN0Q2hhbmdlID0gICAgICAgICgxTCA8
PCA1KSwKKyAgICAgICAgQ29udGVudHNWaXNpYmxlQ2hhbmdlID0gICAgICgxTCA8PCA2KSwKKyAg
ICAgICAgQ29udGVudHNPcGFxdWVDaGFuZ2UgPSAgICAgICgxTCA8PCA3KSwKKworICAgICAgICBH
ZW9tZXRyeUNoYW5nZSA9ICAgICAgICAgICAgKDFMIDw8IDgpLAorCisgICAgICAgIE1hc2tzVG9C
b3VuZHNDaGFuZ2UgPSAgICAgICAoMUwgPDwgOSksCisgICAgICAgIERyYXdzQ29udGVudENoYW5n
ZSA9ICAgICAgICAoMUwgPDwgMTApLAorICAgICAgICBPcGFjaXR5Q2hhbmdlID0gICAgICAgICAg
ICAgKDFMIDw8IDExKSwKKyAgICAgICAgQmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlID0gICgxTCA8
PCAxMiksCisKKyAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxMyks
CisgICAgICAgIENvbnRlbnRzRGlzcGxheUNoYW5nZSA9ICAgICAoMUwgPDwgMTQpLAorICAgICAg
ICBCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UgPSAgICAgKDFMIDw8IDE1KSwKKworICAgICAgICBBbmlt
YXRpb25DaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8IDE2KSwKKyAgICAgICAgRmlsdGVyQ2hhbmdl
ID0gICAgICAgICAgICAgICgxTCA8PCAxNyksCisKKyAgICAgICAgRGVidWdWaXN1YWxzQ2hhbmdl
ID0gICAgICAgICgxTCA8PCAxOCksCisgICAgICAgIFJlcGFpbnRDb3VudENoYW5nZSA9ICAgICAg
ICAoMUwgPDwgMTkpLAorCisgICAgICAgIEZpeGVkVG9WaWV3cG9yQ2hhbmdlID0gICAgICAoMUwg
PDwgMjApCisgICAgfTsKKyAgICB2b2lkIG5vdGlmeUNoYW5nZShDaGFuZ2VNYXNrKTsKKwogICAg
IE93blB0cjxUZXh0dXJlTWFwcGVyTGF5ZXI+IG1fbGF5ZXI7CiAgICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gbV9jb21wb3NpdGVkSW1hZ2U7CiAgICAgTmF0aXZlSW1h
Z2VQdHIgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHI7CkBAIC0xMzIsNSArMTY4LDcgQEAgaW5s
aW5lIHN0YXRpYyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogdG9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcihHcmFwaGljc0wKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIqPihsYXllcik7CiB9CiAKK1RleHR1cmVNYXBwZXJMYXllciogdG9UZXh0
dXJlTWFwcGVyTGF5ZXIoR3JhcGhpY3NMYXllciopOworCiB9CiAjZW5kaWYgLy8gR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAppbmRleCAyZDc0
ODQwLi5mODJmNTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcApAQCAtMTksMTEgKzE5
LDEyIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5
ZXIuaCIKKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgor
I2VuZGlmCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgewpAQCAtNDAsMTEgKzQxLDYgQEAgcHVibGlj
OgogICAgIHsgfQogfTsKIAotVGV4dHVyZU1hcHBlckxheWVyKiB0b1RleHR1cmVNYXBwZXJMYXll
cihHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gbGF5ZXIgPyB0b0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+bGF5ZXIoKSA6IDA7Ci19Ci0KIGNvbnN0IFRleHR1
cmVNYXBwZXJMYXllciogVGV4dHVyZU1hcHBlckxheWVyOjpyb290TGF5ZXIoKSBjb25zdAogewog
ICAgIGlmIChtX2VmZmVjdFRhcmdldCkKQEAgLTM4MSw4MCArMzc3LDU2IEBAIFRleHR1cmVNYXBw
ZXIqIFRleHR1cmVNYXBwZXJMYXllcjo6dGV4dHVyZU1hcHBlcigpIGNvbnN0CiAgICAgcmV0dXJu
IHJvb3RMYXllcigpLT5tX3RleHR1cmVNYXBwZXI7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckxh
eWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZSgpCiB7Ci0gICAgQVNTRVJUKGdyYXBoaWNzTGF5ZXIpOwotICAg
IGludCBjaGFuZ2VNYXNrID0gZ3JhcGhpY3NMYXllci0+Y2hhbmdlTWFzaygpOworICAgIEFTU0VS
VCh0ZXh0dXJlTWFwcGVyKCkpOwogCi0gICAgaWYgKGNoYW5nZU1hc2sgPT0gTm9DaGFuZ2VzICYm
IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKLSAgICBpZiAo
Y2hhbmdlTWFzayAmIENoaWxkcmVuQ2hhbmdlKQotICAgICAgICBzZXRDaGlsZHJlbihncmFwaGlj
c0xheWVyLT5jaGlsZHJlbigpKTsKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAg
IG1fc3RhdGUubWFza0xheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICBpZiAobV9z
dGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5mbHVzaENv
bXBvc2l0aW5nU3RhdGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4u
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPmZsdXNoQ29tcG9zaXRpbmdTdGF0
ZSgpOworfQogCi0gICAgaWYgKGNoYW5nZU1hc2sgJiBNYXNrTGF5ZXJDaGFuZ2UpIHsKLSAgICAg
ICBpZiAoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGdy
YXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKSkKLSAgICAgICAgICAgbGF5ZXItPm1fZWZmZWN0VGFy
Z2V0ID0gdGhpczsKLSAgICB9Cit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6Zmx1c2hDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAgY29tbWl0UGVuZGluZ0NoYW5nZXMo
KTsKIAotICAgIGlmIChjaGFuZ2VNYXNrICYgUmVwbGljYUxheWVyQ2hhbmdlKSB7Ci0gICAgICAg
aWYgKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihncmFw
aGljc0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkpCi0gICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRh
cmdldCA9IHRoaXM7Ci0gICAgfQorICAgIGlmIChtX2FuaW1hdGlvbnMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoY2hhbmdlTWFzayAmIEFuaW1hdGlvbkNoYW5nZSkKLSAg
ICAgICAgbV9hbmltYXRpb25zID0gZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zOwotCi0gICAg
aWYgKGNoYW5nZU1hc2sgJiBSZXBhaW50Q291bnRDaGFuZ2UpCi0gICAgICAgIG1fc3RhdGUucmVw
YWludENvdW50ID0gZ3JhcGhpY3NMYXllci0+cmVwYWludENvdW50KCk7Ci0KLSAgICBtX3N0YXRl
Lm1hc2tMYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGdyYXBoaWNzTGF5ZXItPm1hc2tMYXll
cigpKTsKLSAgICBtX3N0YXRlLnJlcGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGdy
YXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigpKTsKLSAgICBtX3N0YXRlLnBvcyA9IGdyYXBoaWNz
TGF5ZXItPnBvc2l0aW9uKCk7Ci0gICAgbV9zdGF0ZS5hbmNob3JQb2ludCA9IGdyYXBoaWNzTGF5
ZXItPmFuY2hvclBvaW50KCk7Ci0gICAgbV9zdGF0ZS5zaXplID0gZ3JhcGhpY3NMYXllci0+c2l6
ZSgpOwotICAgIG1fc3RhdGUudHJhbnNmb3JtID0gZ3JhcGhpY3NMYXllci0+dHJhbnNmb3JtKCk7
Ci0gICAgbV9zdGF0ZS5jb250ZW50c1JlY3QgPSBncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3Qo
KTsKLSAgICBtX3N0YXRlLnByZXNlcnZlczNEID0gZ3JhcGhpY3NMYXllci0+cHJlc2VydmVzM0Qo
KTsKLSAgICBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgPSBncmFwaGljc0xheWVyLT5tYXNrc1RvQm91
bmRzKCk7Ci0gICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQgPSBncmFwaGljc0xheWVyLT5kcmF3c0Nv
bnRlbnQoKTsKLSAgICBtX3N0YXRlLmNvbnRlbnRzVmlzaWJsZSA9IGdyYXBoaWNzTGF5ZXItPmNv
bnRlbnRzQXJlVmlzaWJsZSgpOwotICAgIG1fc3RhdGUuY29udGVudHNPcGFxdWUgPSBncmFwaGlj
c0xheWVyLT5jb250ZW50c09wYXF1ZSgpOwotICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5
ID0gZ3JhcGhpY3NMYXllci0+YmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgbV9zdGF0ZS5jaGls
ZHJlblRyYW5zZm9ybSA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCk7Ci0gICAg
bV9zdGF0ZS5vcGFjaXR5ID0gZ3JhcGhpY3NMYXllci0+b3BhY2l0eSgpOwotICAgIG1fc3RhdGUu
c29saWRDb2xvciA9IGdyYXBoaWNzTGF5ZXItPnNvbGlkQ29sb3IoKTsKLSNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi0gICAgaWYgKGNoYW5nZU1hc2sgJiBGaWx0ZXJDaGFuZ2UpCi0gICAgICAgIG1f
c3RhdGUuZmlsdGVycyA9IGdyYXBoaWNzTGF5ZXItPmZpbHRlcnMoKTsKLSNlbmRpZgotICAgIG1f
Zml4ZWRUb1ZpZXdwb3J0ID0gZ3JhcGhpY3NMYXllci0+Zml4ZWRUb1ZpZXdwb3J0KCk7CisgICAg
c3luY0FuaW1hdGlvbnMoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmNvbW1pdFBl
bmRpbmdDaGFuZ2VzKCkKK3sKKyAgICBpZiAobV9jaGFuZ2VzUXVldWUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3N0YXRlLnNob3dEZWJ1Z0JvcmRlcnMgPSBncmFwaGljc0xh
eWVyLT5pc1Nob3dpbmdEZWJ1Z0JvcmRlcigpOwotICAgIG1fc3RhdGUuZGVidWdCb3JkZXJDb2xv
ciA9IHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllciktPmRlYnVnQm9y
ZGVyQ29sb3IoKTsKLSAgICBtX3N0YXRlLmRlYnVnQm9yZGVyV2lkdGggPSB0b0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXIpLT5kZWJ1Z0JvcmRlcldpZHRoKCk7Ci0gICAg
bV9zdGF0ZS5zaG93UmVwYWludENvdW50ZXIgPSBncmFwaGljc0xheWVyLT5pc1Nob3dpbmdSZXBh
aW50Q291bnRlcigpOworI2lmbmRlZiBOREVCVUcKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4g
cHJvdGVjdG9yKG1faXNDb21taXR0aW5nLCB0cnVlKTsKKyNlbmRpZgogCi0gICAgbV9jb250ZW50
c0xheWVyID0gZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jaGFuZ2VzUXVldWUuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hhbmdl
c1F1ZXVlW2ldKCk7CiAKLSAgICBtX2N1cnJlbnRUcmFuc2Zvcm0uc2V0UG9zaXRpb24oYWRqdXN0
ZWRQb3NpdGlvbigpKTsKLSAgICBtX2N1cnJlbnRUcmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQobV9z
dGF0ZS5hbmNob3JQb2ludCk7Ci0gICAgbV9jdXJyZW50VHJhbnNmb3JtLnNldFNpemUobV9zdGF0
ZS5zaXplKTsKLSAgICBtX2N1cnJlbnRUcmFuc2Zvcm0uc2V0RmxhdHRlbmluZyghbV9zdGF0ZS5w
cmVzZXJ2ZXMzRCk7Ci0gICAgbV9jdXJyZW50VHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1f
c3RhdGUudHJhbnNmb3JtKTsKLSAgICBtX2N1cnJlbnRUcmFuc2Zvcm0uc2V0Q2hpbGRyZW5UcmFu
c2Zvcm0obV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgbV9jaGFuZ2VzUXVldWUuY2xl
YXIoKTsKK30KIAotICAgIHN5bmNBbmltYXRpb25zKCk7Cit2b2lkIFRleHR1cmVNYXBwZXJMYXll
cjo6YXBwZW5kQ2hhbmdlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGNoYW5nZSkKK3sKKyAgICBt
X2NoYW5nZXNRdWV1ZS5hcHBlbmQoY2hhbmdlKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTGF5
ZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIG5ld0NoaWxkcmVu
KQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxUZXh0
dXJlTWFwcGVyTGF5ZXIqPiYgbmV3Q2hpbGRyZW4pCiB7CisgICAgQVNTRVJUKG1faXNDb21taXR0
aW5nKTsKICAgICByZW1vdmVBbGxDaGlsZHJlbigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbmV3Q2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVGV4dHVyZU1hcHBlckxheWVy
KiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBlckxheWVyKG5ld0NoaWxkcmVuW2ldKTsKLSAgICAgICAg
QVNTRVJUKGNoaWxkKTsKLSAgICAgICAgYWRkQ2hpbGQoY2hpbGQpOwotICAgIH0KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG5ld0NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBhZGRD
aGlsZChuZXdDaGlsZHJlbltpXSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjphZGRD
aGlsZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGNoaWxkTGF5ZXIpCkBAIC00OTIsNiArNDY0LDEyOSBA
QCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQogICAgIH0KIH0K
IAordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldE1hc2tMYXllcihUZXh0dXJlTWFwcGVyTGF5
ZXIqIG1hc2tMYXllcikKK3sKKyAgICBBU1NFUlQobV9pc0NvbW1pdHRpbmcpOworICAgIGlmICht
YXNrTGF5ZXIpCisgICAgICAgIG1hc2tMYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOworICAg
IG1fc3RhdGUubWFza0xheWVyID0gbWFza0xheWVyOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJM
YXllcjo6c2V0UmVwbGljYUxheWVyKFRleHR1cmVNYXBwZXJMYXllciogcmVwbGljYUxheWVyKQor
eworICAgIEFTU0VSVChtX2lzQ29tbWl0dGluZyk7CisgICAgaWYgKHJlcGxpY2FMYXllcikKKyAg
ICAgICAgcmVwbGljYUxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CisgICAgbV9zdGF0ZS5y
ZXBsaWNhTGF5ZXIgPSByZXBsaWNhTGF5ZXI7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVy
OjpzZXRMYXllclRyYW5zZm9ybShjb25zdCBHcmFwaGljc0xheWVyVHJhbnNmb3JtJiBsYXllclRy
YW5zZm9ybSkKK3sKKyAgICBBU1NFUlQobV9pc0NvbW1pdHRpbmcpOworICAgIG1fc3RhdGUucG9z
ID0gbGF5ZXJUcmFuc2Zvcm0ucG9zaXRpb24oKTsKKyAgICBtX3N0YXRlLmFuY2hvclBvaW50ID0g
bGF5ZXJUcmFuc2Zvcm0uYW5jaG9yUG9pbnQoKTsKKyAgICBtX3N0YXRlLnNpemUgPSBsYXllclRy
YW5zZm9ybS5zaXplKCk7CisgICAgbV9zdGF0ZS5wcmVzZXJ2ZXMzRCA9ICFsYXllclRyYW5zZm9y
bS5mbGF0dGVuaW5nKCk7CisgICAgbV9zdGF0ZS50cmFuc2Zvcm0gPSBsYXllclRyYW5zZm9ybS5s
b2NhbFRyYW5zZm9ybSgpOworICAgIG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0gPSBsYXllclRy
YW5zZm9ybS5jaGlsZHJlblRyYW5zZm9ybSgpOworCisgICAgbV9jdXJyZW50VHJhbnNmb3JtID0g
bGF5ZXJUcmFuc2Zvcm07CisgICAgbV9jdXJyZW50VHJhbnNmb3JtLnNldFBvc2l0aW9uKGFkanVz
dGVkUG9zaXRpb24oKSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzZXRDb250ZW50
c1JlY3QoY29uc3QgSW50UmVjdCYgY29udGVudHNSZWN0KQoreworICAgIEFTU0VSVChtX2lzQ29t
bWl0dGluZyk7CisgICAgbV9zdGF0ZS5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3Q7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgbWFza3NUb0Jv
dW5kcykKK3sKKyAgICBBU1NFUlQobV9pc0NvbW1pdHRpbmcpOworICAgIG1fc3RhdGUubWFza3NU
b0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHM7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpz
ZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCit7CisgICAgQVNTRVJUKG1faXNDb21t
aXR0aW5nKTsKKyAgICBtX3N0YXRlLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudDsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGNvbnRlbnRz
VmlzaWJsZSkKK3sKKyAgICBBU1NFUlQobV9pc0NvbW1pdHRpbmcpOworICAgIG1fc3RhdGUuY29u
dGVudHNWaXNpYmxlID0gY29udGVudHNWaXNpYmxlOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJM
YXllcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBjb250ZW50c09wYXF1ZSkKK3sKKyAgICBBU1NF
UlQobV9pc0NvbW1pdHRpbmcpOworICAgIG1fc3RhdGUuY29udGVudHNPcGFxdWUgPSBjb250ZW50
c09wYXF1ZTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJp
bGl0eShib29sIGJhY2tmYWNlVmlzaWJpbGl0eSkKK3sKKyAgICBBU1NFUlQobV9pc0NvbW1pdHRp
bmcpOworICAgIG1fc3RhdGUuYmFja2ZhY2VWaXNpYmlsaXR5ID0gYmFja2ZhY2VWaXNpYmlsaXR5
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5
KQoreworICAgIEFTU0VSVChtX2lzQ29tbWl0dGluZyk7CisgICAgbV9zdGF0ZS5vcGFjaXR5ID0g
b3BhY2l0eTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldFNvbGlkQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQoreworICAgIEFTU0VSVChtX2lzQ29tbWl0dGluZyk7CisgICAgbV9z
dGF0ZS5zb2xpZENvbG9yID0gY29sb3I7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2
b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKQoreworICAgIEFTU0VSVChtX2lzQ29tbWl0dGluZyk7CisgICAgbV9zdGF0ZS5m
aWx0ZXJzID0gZmlsdGVyczsKK30KKyNlbmRpZgorCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6
c2V0RGVidWdWaXN1YWxzKGJvb2wgc2hvd0RlYnVnQm9yZGVycywgY29uc3QgQ29sb3ImIGRlYnVn
Qm9yZGVyQ29sb3IsIGZsb2F0IGRlYnVnQm9yZGVyV2lkdGgsIGJvb2wgc2hvd1JlcGFpbnRDb3Vu
dGVyKQoreworICAgIEFTU0VSVChtX2lzQ29tbWl0dGluZyk7CisgICAgbV9zdGF0ZS5zaG93RGVi
dWdCb3JkZXJzID0gc2hvd0RlYnVnQm9yZGVyczsKKyAgICBtX3N0YXRlLmRlYnVnQm9yZGVyQ29s
b3IgPSBkZWJ1Z0JvcmRlckNvbG9yOworICAgIG1fc3RhdGUuZGVidWdCb3JkZXJXaWR0aCA9IGRl
YnVnQm9yZGVyV2lkdGg7CisgICAgbV9zdGF0ZS5zaG93UmVwYWludENvdW50ZXIgPSBzaG93UmVw
YWludENvdW50ZXI7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzZXRSZXBhaW50Q291
bnQoaW50IHJlcGFpbnRDb3VudCkKK3sKKyAgICBBU1NFUlQobV9pc0NvbW1pdHRpbmcpOworICAg
IG1fc3RhdGUucmVwYWludENvdW50ID0gcmVwYWludENvdW50OworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJMYXllcjo6c2V0Q29udGVudHNMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcikKK3sKKyAgICBBU1NFUlQobV9pc0NvbW1pdHRpbmcpOworICAgIG1fY29u
dGVudHNMYXllciA9IHBsYXRmb3JtTGF5ZXI7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVy
OjpzZXRBbmltYXRpb25zKGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25z
KQoreworICAgIEFTU0VSVChtX2lzQ29tbWl0dGluZyk7CisgICAgbV9hbmltYXRpb25zID0gYW5p
bWF0aW9uczsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9y
dChib29sIGZpeGVkVG9WaWV3cG9ydCkKK3sKKyAgICBBU1NFUlQobV9pc0NvbW1pdHRpbmcpOwor
ICAgIG1fZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1ZpZXdwb3J0OworfQorCit2b2lkIFRleHR1
cmVNYXBwZXJMYXllcjo6c2V0QmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKQoreworICAgIG1fYmFja2luZ1N0b3JlID0gYmFja2lu
Z1N0b3JlOworfQogCiBib29sIFRleHR1cmVNYXBwZXJMYXllcjo6ZGVzY2VuZGFudHNPclNlbGZI
YXZlUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCmlu
ZGV4IDU3NWJiMjcuLmNiMGVjYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTI0LDU5
ICsyNCwyMSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRyYW5zZm9ybS5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zOwogY2xhc3MgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXI7Ci1jbGFzcyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjsKIAog
Y2xhc3MgVGV4dHVyZU1hcHBlckxheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246
OkNsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dHVyZU1hcHBlckxheWVyKTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICAvLyBUaGlzIHNldCBv
ZiBmbGFncyBoZWxwIHVzIGRlZmVyIHdoaWNoIHByb3BlcnRpZXMgb2YgdGhlIGxheWVyIGhhdmUg
YmVlbgotICAgIC8vIG1vZGlmaWVkIGJ5IHRoZSBjb21wb3NpdG9yLCBzbyB3ZSBjYW4ga25vdyB3
aGF0IHRvIGxvb2sgZm9yIGluIHRoZSBuZXh0IGZsdXNoLgotICAgIGVudW0gQ2hhbmdlTWFzayB7
Ci0gICAgICAgIE5vQ2hhbmdlcyA9ICAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgIENoaWxk
cmVuQ2hhbmdlID0gICAgICAgICAgICAoMUwgPDwgMSksCi0gICAgICAgIE1hc2tMYXllckNoYW5n
ZSA9ICAgICAgICAgICAoMUwgPDwgMiksCi0gICAgICAgIFBvc2l0aW9uQ2hhbmdlID0gICAgICAg
ICAgICAoMUwgPDwgMyksCi0KLSAgICAgICAgQW5jaG9yUG9pbnRDaGFuZ2UgPSAgICAgICAgICgx
TCA8PCA0KSwKLSAgICAgICAgU2l6ZUNoYW5nZSAgPSAgICAgICAgICAgICAgICgxTCA8PCA1KSwK
LSAgICAgICAgVHJhbnNmb3JtQ2hhbmdlID0gICAgICAgICAgICgxTCA8PCA2KSwKLSAgICAgICAg
Q29udGVudENoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCA3KSwKLQotICAgICAgICBDb250ZW50
c09yaWVudGF0aW9uQ2hhbmdlID0gKDFMIDw8IDkpLAotICAgICAgICBPcGFjaXR5Q2hhbmdlID0g
ICAgICAgICAgICAgKDFMIDw8IDEwKSwKLSAgICAgICAgQ29udGVudHNSZWN0Q2hhbmdlID0gICAg
ICAgICgxTCA8PCAxMSksCi0KLSAgICAgICAgUHJlc2VydmVzM0RDaGFuZ2UgPSAgICAgICAgICgx
TCA8PCAxMiksCi0gICAgICAgIE1hc2tzVG9Cb3VuZHNDaGFuZ2UgPSAgICAgICAoMUwgPDwgMTMp
LAotICAgICAgICBEcmF3c0NvbnRlbnRDaGFuZ2UgPSAgICAgICAgKDFMIDw8IDE0KSwKLSAgICAg
ICAgQ29udGVudHNWaXNpYmxlQ2hhbmdlID0gICAgICgxTCA8PCAxNSksCi0gICAgICAgIENvbnRl
bnRzT3BhcXVlQ2hhbmdlID0gICAgICAoMUwgPDwgMTYpLAotCi0gICAgICAgIEJhY2tmYWNlVmlz
aWJpbGl0eUNoYW5nZSA9ICAoMUwgPDwgMTcpLAotICAgICAgICBDaGlsZHJlblRyYW5zZm9ybUNo
YW5nZSA9ICAgKDFMIDw8IDE4KSwKLSAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAg
ICgxTCA8PCAxOSksCi0gICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwg
MjApLAotCi0gICAgICAgIFJlcGxpY2FMYXllckNoYW5nZSA9ICAgICAgICAoMUwgPDwgMjEpLAot
ICAgICAgICBBbmltYXRpb25DaGFuZ2UgPSAgICAgICAgICAgKDFMIDw8IDIyKSwKLSAgICAgICAg
RmlsdGVyQ2hhbmdlID0gICAgICAgICAgICAgICgxTCA8PCAyMyksCi0KLSAgICAgICAgRGVidWdW
aXN1YWxzQ2hhbmdlID0gICAgICAgICgxTCA8PCAyNCksCi0gICAgICAgIFJlcGFpbnRDb3VudENo
YW5nZSA9ICAgICAgICAoMUwgPDwgMjUpCi0gICAgfTsKLQogICAgIFRleHR1cmVNYXBwZXJMYXll
cigpCiAgICAgICAgIDogbV9wYXJlbnQoMCkKICAgICAgICAgLCBtX2VmZmVjdFRhcmdldCgwKQpA
QCAtODQsMTggKzQ2LDUyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2N1cnJlbnRPcGFjaXR5KDEp
CiAgICAgICAgICwgbV9jZW50ZXJaKDApCiAgICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKDApCisg
ICAgICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCisjaWZuZGVmIE5ERUJVRworICAgICAg
ICAsIG1faXNDb21taXR0aW5nKGZhbHNlKQorI2VuZGlmCiAgICAgeyB9CiAKICAgICB2aXJ0dWFs
IH5UZXh0dXJlTWFwcGVyTGF5ZXIoKTsKIAogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIoKSBjb25zdDsKLSAgICB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqKTsKICAgICB2b2lkIHNldFRleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciogdGV4bWFwKSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1hcDsgfQor
CisgICAgdm9pZCBhcHBlbmRDaGFuZ2UoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZv
aWQgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPFRleHR1cmVNYXBwZXJMYXllcio+Jik7CisgICAg
dm9pZCBzZXRNYXNrTGF5ZXIoVGV4dHVyZU1hcHBlckxheWVyKik7CisgICAgdm9pZCBzZXRSZXBs
aWNhTGF5ZXIoVGV4dHVyZU1hcHBlckxheWVyKik7CisgICAgdm9pZCBzZXRMYXllclRyYW5zZm9y
bShjb25zdCBHcmFwaGljc0xheWVyVHJhbnNmb3JtJik7CisgICAgdm9pZCBzZXRDb250ZW50c1Jl
Y3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKKyAg
ICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2b2lkIHNldENvbnRlbnRzVmlzaWJs
ZShib29sKTsKKyAgICB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJvb2wpOworICAgIHZvaWQgc2V0
QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpOworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Cisg
ICAgdm9pZCBzZXRTb2xpZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKKyAgICB2b2lkIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwor
ICAgICNlbmRpZgorICAgIHZvaWQgc2V0RGVidWdWaXN1YWxzKGJvb2wgc2hvd0RlYnVnQm9yZGVy
cywgY29uc3QgQ29sb3ImIGRlYnVnQm9yZGVyQ29sb3IsIGZsb2F0IGRlYnVnQm9yZGVyV2lkdGgs
IGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKTsKKyAgICB2b2lkIHNldFJlcGFpbnRDb3VudChpbnQp
OworICAgIHZvaWQgc2V0Q29udGVudHNMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciop
OworICAgIHZvaWQgc2V0QW5pbWF0aW9ucyhjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYp
OworICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wpOworICAgIHZvaWQgc2V0QmFja2lu
Z1N0b3JlKFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4pOworCisgICAgRmxv
YXRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNpemU7IH0KKworICAgIHZvaWQg
YWRkQ2hpbGQoVGV4dHVyZU1hcHBlckxheWVyKik7CisgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50
KCk7CisgICAgdm9pZCByZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgdm9pZCBmbHVzaENvbXBv
c2l0aW5nU3RhdGUoKTsKKyAgICB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXll
ck9ubHkoKTsKICAgICBib29sIGRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25z
KCkgY29uc3Q7CiAKICAgICB2b2lkIHBhaW50KCk7CiAKLSAgICB2b2lkIHNldEJhY2tpbmdTdG9y
ZShQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSkgeyBt
X2JhY2tpbmdTdG9yZSA9IGJhY2tpbmdTdG9yZTsgfQogICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCkgeyByZXR1cm4gbV9iYWNraW5nU3RvcmU7
IH0KICAgICB2b2lkIGNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOwogCkBAIC0xMTYsMTYg
KzExMiwxMyBAQCBwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUucG9zICsgbV9zY3JvbGxQb3NpdGlvbkRlbHRhOyB9CiAgICAg
Ym9vbCBpc0FuY2VzdG9yRml4ZWRUb1ZpZXdwb3J0KCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldENo
aWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mKTsKLSAgICB2b2lkIGFkZENoaWxk
KFRleHR1cmVNYXBwZXJMYXllciopOwotICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOwotICAg
IHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLQogICAgIHZvaWQgcGFpbnRSZWN1cnNpdmUoY29u
c3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYpOwogICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0
IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxk
cmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHBhaW50U2Vs
ZkFuZENoaWxkcmVuV2l0aFJlcGxpY2EoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYp
OwogCisgICAgdm9pZCBjb21taXRQZW5kaW5nQ2hhbmdlcygpOworCiAgICAgLy8gR3JhcGhpY3NM
YXllckFuaW1hdGlvbjo6Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGVkVHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIE9WRVJSSURFIHsgbV9jdXJy
ZW50VHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1hdHJpeCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0QW5pbWF0ZWRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIE9WRVJSSURFIHsgbV9jdXJyZW50
T3BhY2l0eSA9IG9wYWNpdHk7IH0KQEAgLTIxMywxMCArMjA2LDEyIEBAIHByaXZhdGU6CiAgICAg
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogICAgIEZsb2F0U2l6ZSBtX3Nj
cm9sbFBvc2l0aW9uRGVsdGE7CiAgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydDsKLX07Ci0KIAot
VGV4dHVyZU1hcHBlckxheWVyKiB0b1RleHR1cmVNYXBwZXJMYXllcihHcmFwaGljc0xheWVyKik7
CisgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX2NoYW5nZXNRdWV1ZTsKKyNpZm5kZWYg
TkRFQlVHCisgICAgYm9vbCBtX2lzQ29tbWl0dGluZzsKKyNlbmRpZgorfTsKIAogfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEVmbC5jcHAKaW5kZXggMDhkZTNlMC4u
OGEzYTI0OSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0RWZsLmNwcApAQCAt
MjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgog
I2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50RWZsLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
R0wuY3BwCmluZGV4IGQxMzBhM2YuLmMyM2RlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0R0wuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50
R3RrLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyR0wuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvVGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9UZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdC5jcHAKaW5kZXggZWU4MmI5Ni4uNjZiOGQw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9UZXh0dXJlTWFw
cGVyTGF5ZXJDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9UZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlFXZWJGcmFt
ZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJRV2ViUGFnZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyTGF5ZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAppbmRl
eCBjMWU3MjhlLi5kMzg2ODhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3Bw
CkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5o
IgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5oIgpAQCAtNjYsMTEgKzY1LDYgQEAgc3RhdGljIEZsb2F0UG9pbnQgYm91bmRlZFNjcm9s
bFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdAogICAgIHJl
dHVybiBGbG9hdFBvaW50KHNjcm9sbFBvc2l0aW9uWCwgc2Nyb2xsUG9zaXRpb25ZKTsKIH0KIAot
c3RhdGljIGJvb2wgbGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQotewotICAgIHJldHVybiBsYXllci0+ZHJhd3NDb250ZW50KCkgJiYgbGF5ZXItPmNvbnRl
bnRzQXJlVmlzaWJsZSgpICYmICFsYXllci0+c2l6ZSgpLmlzRW1wdHkoKTsKLX0KLQogTGF5ZXJU
cmVlUmVuZGVyZXI6OkxheWVyVHJlZVJlbmRlcmVyKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5KiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKICAgICA6IG1fY29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkoY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCiAgICAgLCBt
X2lzQWN0aXZlKGZhbHNlKQpAQCAtODksNyArODMsNyBAQCBMYXllclRyZWVSZW5kZXJlcjo6fkxh
eWVyVHJlZVJlbmRlcmVyKCkKIHsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRU
b0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxv
YXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCwgVGV4dHVyZU1hcHBlcjo6UGFp
bnRGbGFncyBQYWludEZsYWdzKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJl
bnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0LCBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50
RmxhZ3MpCiB7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpIHsKICAgICAgICAgbV90ZXh0dXJl
TWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUp
OwpAQCAtMTAwLDE4ICs5NCwxMyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3Vy
cmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cgogICAgIHN5bmNS
ZW1vdGVDb250ZW50KCk7CiAKICAgICBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7Ci0g
ICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwotICAgIGlm
ICghY3VycmVudFJvb3RMYXllcikKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllciA9
IHRoaXMtPnJvb3RMYXllcigpOworICAgIGlmICghcm9vdExheWVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIo
Y3VycmVudFJvb3RMYXllcik7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBsYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAg
IHJvb3RMYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogICAg
IGlmICghbV9hbmltYXRpb25zTG9ja2VkKQotICAgICAgICBsYXllci0+YXBwbHlBbmltYXRpb25z
UmVjdXJzaXZlbHkoKTsKKyAgICAgICAgcm9vdExheWVyLT5hcHBseUFuaW1hdGlvbnNSZWN1cnNp
dmVseSgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWludEZsYWdzKTsK
ICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBj
bGlwUmVjdCk7CiAKQEAgLTEyMiwxNyArMTExLDE3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
CiAgICAgICAgIG1fdGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJlY3QsIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksIENvbG9yKHJnYmEpKTsKICAgICB9CiAKLSAgICBpZiAoY3VycmVu
dFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJh
bnNmb3JtKCkgIT0gbWF0cml4KSB7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNp
dHkob3BhY2l0eSk7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRy
aXgpOwotICAgICAgICBjdXJyZW50Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7Ci0gICAgfQorLy8gICAgaWYgKHJvb3RMYXllci0+b3BhY2l0eSgpICE9
IG9wYWNpdHkgfHwgcm9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKKy8vICAgICAg
ICByb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisvLyAgICAgICAgcm9vdExheWVyLT5z
ZXRUcmFuc2Zvcm0obWF0cml4KTsKKy8vICAgICAgICByb290TGF5ZXItPmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKy8vICAgIH0KIAotICAgIGxheWVyLT5wYWludCgp
OworICAgIHJvb3RMYXllci0+cGFpbnQoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmVuZENsaXAo
KTsKICAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CiAKLSAgICBpZiAobGF5ZXIt
PmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgaWYgKHJvb3RM
YXllci0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKICAgICAgICAg
ZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdw
b3J0LCB0aGlzKSk7CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCkBAIC0x
NjMsNyArMTUyLDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0dyYXBoaWNzQ29u
dGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb24KICAgICAgICAgbV90ZXh0dXJl
TWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1h
cHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6OlNvZnR3YXJlTW9kZSk7
CiAgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVy
ID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOworICAgIFRleHR1cmVNYXBwZXJM
YXllciogbGF5ZXIgPSByb290TGF5ZXIoKTsKIAogICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIxMSw3ICsyMDAsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQ
b3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkKIAogICAgIExheWVyUmF3UHRyTWFwOjppdGVyYXRvciBl
bmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOwogICAgIGZvciAoTGF5ZXJSYXdQdHJNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT52YWx1ZSktPnNldFNjcm9sbFBvc2l0aW9uRGVsdGFJ
Zk5lZWRlZChkZWx0YSk7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0
YUlmTmVlZGVkKGRlbHRhKTsKIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCkBAIC0yMjMsMTQgKzIx
MiwxNCBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0
ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBQ
YXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkKIHsKICAgICBBU1NFUlQobV90ZXh0
dXJlTWFwcGVyKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Cisg
ICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CiAgICAgQVNTRVJU
KCFtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGlkKSk7CiAKICAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZShUZXh0dXJl
TWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOwogICAgIG1fc3VyZmFjZUJhY2tp
bmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNraW5nU3RvcmUpOwogCiAgICAgY2FudmFzQmFja2lu
Z1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgbGF5ZXItPnNldENvbnRl
bnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkpOworICAgIGxheWVyLT5hcHBlbmRD
aGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxheWVyOjpzZXRDb250ZW50c0xheWVyLCBsYXllciwg
Y2FudmFzQmFja2luZ1N0b3JlLmdldCgpKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikK
QEAgLTI0Nyw0MiArMjM2LDQyIEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKIHZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQogewogICAg
IEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJCeUlEKGlkKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlk
KTsKICAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOwogCiAg
ICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1vdmUoaWQpOwotICAgIGxheWVyLT5zZXRDb250
ZW50c1RvTWVkaWEoMCk7CisgICAgbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFw
cGVyTGF5ZXI6OnNldENvbnRlbnRzTGF5ZXIsIGxheWVyLCBzdGF0aWNfY2FzdDxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllcio+KDApKSk7CiB9CiAjZW5kaWYKIAogdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6c2V0UmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQog
ewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICB0b0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0UmVwYWludENvdW50KHZhbHVlKTsKKyAg
ICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBsYXllci0+
YXBwZW5kQ2hhbmdlKGJpbmQoJlRleHR1cmVNYXBwZXJMYXllcjo6c2V0UmVwYWludENvdW50LCBs
YXllciwgdmFsdWUpKTsKIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGls
ZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVy
SUQ+JiBjaGlsZElEcykKIHsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChp
ZCk7Ci0gICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKKyAgICBUZXh0dXJlTWFw
cGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBl
ckxheWVyKj4gY2hpbGRyZW47CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkSURz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBjaGlsZElEID0gY2hp
bGRJRHNbaV07Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxk
SUQpOworICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxk
SUQpOwogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogICAgIH0KLSAgICBsYXllci0+
c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworICAgIGxheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4
dHVyZU1hcHBlckxheWVyOjpzZXRDaGlsZHJlbiwgbGF5ZXIsIGNoaWxkcmVuKSk7CiB9CiAKICNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZp
bHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0
ZXJzKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKIAogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKICAgICBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhmaWx0ZXJz
KTsKICNlbmRpZgotICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5h
cHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxheWVyOjpzZXRGaWx0ZXJzLCBsYXllciwg
ZmlsdGVycykpOwogfQogI2VuZGlmCiAKQEAgLTMyMSw2MSArMzEwLDY2IEBAIHZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQogdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCiB7CiAgICAgQVNTRVJUKG1fcm9vdExh
eWVySUQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotCi0gICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVy
KGdldExheWVyQnlJRElmRXhpc3RzKGxheWVySW5mby5yZXBsaWNhKSk7Ci0gICAgbGF5ZXItPnNl
dE1hc2tMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllckluZm8ubWFzaykpOwotCi0gICAg
bGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7Ci0gICAgbGF5ZXIt
PnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOwotICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5m
by5zaXplKTsKLQotICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7
Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5z
Zm9ybSk7Ci0gICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8uYmFja2Zh
Y2VWaXNpYmxlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRl
bnRzT3BhcXVlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50
c1JlY3QpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvU29saWRDb2xvcihsYXllckluZm8uc29s
aWRDb2xvcik7Ci0gICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250
ZW50KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNWaXNpYmxlKGxheWVySW5mby5jb250ZW50c1Zp
c2libGUpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRGaXhl
ZFRvVmlld3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7Ci0gICAgbGF5ZXItPnNldFNo
b3dEZWJ1Z0JvcmRlcihsYXllckluZm8uc2hvd0RlYnVnQm9yZGVycyk7Ci0gICAgbGF5ZXItPnNl
dERlYnVnQm9yZGVyKGxheWVySW5mby5kZWJ1Z0JvcmRlckNvbG9yLCBsYXllckluZm8uZGVidWdC
b3JkZXJXaWR0aCk7Ci0gICAgbGF5ZXItPnNldFNob3dSZXBhaW50Q291bnRlcihsYXllckluZm8u
c2hvd1JlcGFpbnRDb3VudGVyKTsKLQorICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSBs
YXllckJ5SUQoaWQpOworCisgICAgbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFw
cGVyTGF5ZXI6OnNldFJlcGxpY2FMYXllciwgbGF5ZXIsIGdldExheWVyQnlJRElmRXhpc3RzKGxh
eWVySW5mby5yZXBsaWNhKSkpOworICAgIGxheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVy
ZU1hcHBlckxheWVyOjpzZXRNYXNrTGF5ZXIsIGxheWVyLCBnZXRMYXllckJ5SURJZkV4aXN0cyhs
YXllckluZm8ubWFzaykpKTsKKworICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0gbGF5ZXJUcmFu
c2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0uc2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7Cisg
ICAgbGF5ZXJUcmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hvclBvaW50KTsK
KyAgICBsYXllclRyYW5zZm9ybS5zZXRTaXplKGxheWVySW5mby5zaXplKTsKKyAgICBsYXllclRy
YW5zZm9ybS5zZXRGbGF0dGVuaW5nKCFsYXllckluZm8ucHJlc2VydmVzM0QpOworICAgIGxheWVy
VHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zvcm0pOworICAgIGxh
eWVyVHJhbnNmb3JtLnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5z
Zm9ybSk7CisgICAgbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6
OnNldExheWVyVHJhbnNmb3JtLCBsYXllciwgbGF5ZXJUcmFuc2Zvcm0pKTsKKworICAgIGxheWVy
LT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxheWVyOjpzZXRCYWNrZmFjZVZpc2li
aWxpdHksIGxheWVyLCBsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKSk7CisgICAgbGF5ZXItPmFw
cGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldE9wYWNpdHksIGxheWVyLCBs
YXllckluZm8ub3BhY2l0eSkpOworICAgIGxheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVy
ZU1hcHBlckxheWVyOjpzZXRDb250ZW50c09wYXF1ZSwgbGF5ZXIsIGxheWVySW5mby5jb250ZW50
c09wYXF1ZSkpOworICAgIGxheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxh
eWVyOjpzZXRDb250ZW50c1JlY3QsIGxheWVyLCBsYXllckluZm8uY29udGVudHNSZWN0KSk7Cisg
ICAgbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldFNvbGlk
Q29sb3IsIGxheWVyLCBsYXllckluZm8uc29saWRDb2xvcikpOworICAgIGxheWVyLT5hcHBlbmRD
aGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxheWVyOjpzZXREcmF3c0NvbnRlbnQsIGxheWVyLCBs
YXllckluZm8uZHJhd3NDb250ZW50KSk7CisgICAgbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZU
ZXh0dXJlTWFwcGVyTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZSwgbGF5ZXIsIGxheWVySW5mby5j
b250ZW50c1Zpc2libGUpKTsKKworICAgIGxheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVy
ZU1hcHBlckxheWVyOjpzZXREZWJ1Z1Zpc3VhbHMsIGxheWVyLCBsYXllckluZm8uc2hvd0RlYnVn
Qm9yZGVycywgbGF5ZXJJbmZvLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVySW5mby5kZWJ1Z0JvcmRl
cldpZHRoLCBsYXllckluZm8uc2hvd1JlcGFpbnRDb3VudGVyKSk7CisKKyAgICBsYXllci0+YXBw
ZW5kQ2hhbmdlKGJpbmQoJlRleHR1cmVNYXBwZXJMYXllcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0LCBs
YXllciwgbGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCkpOwogICAgIGlmIChsYXllckluZm8uZml4
ZWRUb1ZpZXdwb3J0KQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLmFkZChpZCwgbGF5ZXIpOwogICAg
IGVsc2UKICAgICAgICAgbV9maXhlZExheWVycy5yZW1vdmUoaWQpOwogCiAgICAgYXNzaWduSW1h
Z2VCYWNraW5nVG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlSUQpOwotICAgIHByZXBhcmVD
b250ZW50QmFja2luZ1N0b3JlKGxheWVyKTsKKyAgICBib29sIHNob3VsZEhhdmVCYWNraW5nU3Rv
cmUgPSBsYXllckluZm8uZHJhd3NDb250ZW50ICYmIGxheWVySW5mby5jb250ZW50c1Zpc2libGUg
JiYgIWxheWVySW5mby5zaXplLmlzRW1wdHkoKTsKKyAgICBpZiAoIXNob3VsZEhhdmVCYWNraW5n
U3RvcmUpCisgICAgICAgIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGxheWVyKTsKKyAgICBl
bHNlCisgICAgICAgIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGxheWVyKTsKIAogICAgIC8v
IE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KLSAgICBsYXllci0+c2V0TWFza3NUb0Jv
dW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91
bmRzKTsKLSAgICBsYXllci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7Ci0gICAgbGF5
ZXItPnNldFByZXNlcnZlczNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgbGF5ZXItPmFw
cGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMsIGxh
eWVyLCBsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91
bmRzKSk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIqIExheWVyVHJlZVJlbmRlcmVyOjpnZXRMYXllckJ5
SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQgaWQpCitUZXh0dXJlTWFwcGVyTGF5ZXIqIExh
eWVyVHJlZVJlbmRlcmVyOjpnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQg
aWQpCiB7CiAgICAgcmV0dXJuIChpZCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKSA/IGxh
eWVyQnlJRChpZCkgOiAwOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVMYXll
cihDb29yZGluYXRlZExheWVySUQgaWQpCiB7Ci0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG5ld0xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDAgLyogZmFjdG9yeSAqLywg
dGhpcyk7Ci0gICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihuZXdMYXllci5nZXQoKSkt
PnNldEhhc093bkJhY2tpbmdTdG9yZShmYWxzZSk7CisgICAgT3duUHRyPFRleHR1cmVNYXBwZXJM
YXllcj4gbmV3TGF5ZXIgPSBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckxheWVyKCkpOwogICAg
IG1fbGF5ZXJzLmFkZChpZCwgbmV3TGF5ZXIucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQpCiB7Ci0g
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGxheWVyID0gbV9sYXllcnMudGFrZShsYXllcklEKTsK
KyAgICBPd25QdHI8VGV4dHVyZU1hcHBlckxheWVyPiBsYXllciA9IG1fbGF5ZXJzLnRha2UobGF5
ZXJJRCk7CiAgICAgQVNTRVJUKGxheWVyKTsKIAotICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50
KCk7Ci0gICAgbV9wZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMucmVtb3ZlKHRvVGV4dHVyZU1hcHBl
ckxheWVyKGxheWVyLmdldCgpKSk7CisgICAgbGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0
dXJlTWFwcGVyTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQsIGxheWVyLmdldCgpKSk7CisgICAgbGF5
ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX2JhY2tp
bmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShs
YXllcklEKTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICBtX3N1cmZhY2VCYWNraW5n
U3RvcmVzLnJlbW92ZShsYXllcklEKTsKQEAgLTM5MCw5MCArMzg0LDUxIEBAIHZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQog
ICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOwogICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxD
aGlsZHJlbigpOwogCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJ
RCk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsK
ICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwogfQogCi1Db29yZGluYXRlZEJhY2tp
bmdTdG9yZSogTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdTdG9yZShHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyKQorQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqIExheWVyVHJlZVJlbmRl
cmVyOjpnZXRCYWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllcikKIHsKLSAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoZ3JhcGhpY3NM
YXllcik7Ci0gICAgQVNTRVJUKGxheWVyKTsKLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSog
YmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqPihsYXll
ci0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOwotCi0gICAgQmFja2luZ1N0b3JlTWFwOjppdGVyYXRv
ciBpdCA9IG1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLmZpbmQobGF5ZXIpOwotICAgIGlmIChp
dCAhPSBtX3BlbmRpbmdTeW5jQmFja2luZ1N0b3Jlcy5lbmQoKSkKKyAgICBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gMDsKKyAgICBCYWNraW5nU3RvcmVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzLmZpbmQobGF5ZXIpOworICAgIGlmIChpdCAhPSBtX2Jh
Y2tpbmdTdG9yZXMuZW5kKCkpCiAgICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZS5nZXQo
KTsKICAgICByZXR1cm4gYmFja2luZ1N0b3JlOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVy
KQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoVGV4
dHVyZU1hcHBlckxheWVyKiBsYXllcikKIHsKLSAgICBpZiAoIWxheWVyU2hvdWxkSGF2ZUJhY2tp
bmdTdG9yZShncmFwaGljc0xheWVyKSkgewotICAgICAgICByZW1vdmVCYWNraW5nU3RvcmVJZk5l
ZWRlZChncmFwaGljc0xheWVyKTsKKyAgICBpZiAoZ2V0QmFja2luZ1N0b3JlKGxheWVyKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGdy
YXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVCYWNraW5n
U3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIFRleHR1
cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihncmFwaGljc0xheWVy
KTsKLSAgICBBU1NFUlQobGF5ZXIpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBkb2Vz
IG5vdCBhbHJlYWR5IGhhdmUgYSBiYWNraW5nIHN0b3JlIChjb21taXR0ZWQgb3IgcGVuZGluZyku
Ci0gICAgQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1N5bmNCYWNraW5n
U3RvcmVzLmZpbmQobGF5ZXIpOwotICAgIGlmIChpdCAhPSBtX3BlbmRpbmdTeW5jQmFja2luZ1N0
b3Jlcy5lbmQoKSkgewotICAgICAgICBpZiAoIWl0LT52YWx1ZSkgewotICAgICAgICAgICAgLy8g
VGhlcmUgaXMgYSBwZW5kaW5nIHJlbW92YWwsIGNhbmNlbCBpdC4KLSAgICAgICAgICAgIG1fcGVu
ZGluZ1N5bmNCYWNraW5nU3RvcmVzLnJlbW92ZShpdCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
VGhlcmUgaXMgYWxyZWFkeSBhIHBlbmRpbmcgYWRkaXRpb24uCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKGxheWVyLT5iYWNraW5nU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBU
aGUgbGF5ZXIgYWxyZWFkeSBoYXMgYSBiYWNraW5nIHN0b3JlIChhbmQgbm8gcGVuZGluZyByZW1v
dmFsKS4KIAogICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
KENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7CiAKLSAgICBiYWNraW5nU3RvcmUt
PnNldFNpemUoZ3JhcGhpY3NMYXllci0+c2l6ZSgpKTsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ1N5
bmNCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGxheWVyKSk7Ci0gICAgbV9wZW5kaW5nU3luY0JhY2tp
bmdTdG9yZXMuYWRkKGxheWVyLCBiYWNraW5nU3RvcmUpOworICAgIC8vIEZJWE1FIDogc2l6ZSBp
cyBzdGFsZS4KKyAgICBiYWNraW5nU3RvcmUtPnNldFNpemUobGF5ZXItPnNpemUoKSk7CisgICAg
bV9iYWNraW5nU3RvcmVzLmFkZChsYXllciwgYmFja2luZ1N0b3JlKTsKKyAgICBsYXllci0+YXBw
ZW5kQ2hhbmdlKGJpbmQoJlRleHR1cmVNYXBwZXJMYXllcjo6c2V0QmFja2luZ1N0b3JlLCBsYXll
ciwgYmFja2luZ1N0b3JlKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit2b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChUZXh0dXJlTWFwcGVy
TGF5ZXIqIGxheWVyKQogewotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1
cmVNYXBwZXJMYXllcihncmFwaGljc0xheWVyKTsKLSAgICBBU1NFUlQobGF5ZXIpOwotCi0gICAg
Ly8gQ2hlY2sgaWYgdGhlIGxheW91dCBhbHJlYWR5IGhhcyBhIGJhY2tpbmcgc3RvcmUgKGNvbW1p
dHRlZCBvciBwZW5kaW5nKS4KLSAgICBCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9w
ZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMuZmluZChsYXllcik7Ci0gICAgaWYgKGl0ICE9IG1fcGVu
ZGluZ1N5bmNCYWNraW5nU3RvcmVzLmVuZCgpKSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUpIHsK
LSAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcGVuZGluZyBhZGRpdGlvbiwgY2FuY2VsIGl0Lgot
ICAgICAgICAgICAgbV9wZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMucmVtb3ZlKGl0KTsKLSAgICAg
ICAgfQotICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyByZW1vdmFsLgorICAg
IGlmICghZ2V0QmFja2luZ1N0b3JlKGxheWVyKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAot
ICAgIGlmICghbGF5ZXItPmJhY2tpbmdTdG9yZSgpKQotICAgICAgICByZXR1cm47IC8vIFRoZSBs
YXllciBoYXMgbm8gYmFja2luZyBzdG9yZSAoYW5kIG5vIHBlbmRpbmcgYWRkaXRpb24pLgotCi0g
ICAgQVNTRVJUKCFtX3BlbmRpbmdTeW5jQmFja2luZ1N0b3Jlcy5jb250YWlucyhsYXllcikpOwot
ICAgIG1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLmFkZChsYXllciwgMCk7CisgICAgbGF5ZXIt
PmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEJhY2tpbmdTdG9yZSwg
bGF5ZXIsIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4oKSkpOwogfQogCi12
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShH
cmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVz
ZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllcikK
IHsKLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gZ2V0QmFja2lu
Z1N0b3JlKGdyYXBoaWNzTGF5ZXIpOworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiBiYWNr
aW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXIpOwogICAgIEFTU0VSVChiYWNraW5nU3Rv
cmUpOwotICAgIGJhY2tpbmdTdG9yZS0+c2V0U2l6ZShncmFwaGljc0xheWVyLT5zaXplKCkpOwor
ICAgIC8vIEZJWE1FIDogc2l6ZSBpcyBzdGFsZS4KKyAgICBiYWNraW5nU3RvcmUtPnNldFNpemUo
bGF5ZXItPnNpemUoKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUo
Q29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgZmxvYXQgc2NhbGUp
CiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAg
VGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKICAgICBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVy
KTsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKICAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRp
bGUodGlsZUlELCBzY2FsZSk7CkBAIC00ODIsNyArNDM3LDcgQEAgdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELAogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5
ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9
IGxheWVyQnlJRChsYXllcklEKTsKICAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogYmFja2lu
Z1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVyKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDk0LDcgKzQ0OSw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCkKIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCiB7
Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgVGV4
dHVyZU1hcHBlckxheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKICAgICBSZWZQdHI8
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGdldEJhY2tpbmdTdG9yZShs
YXllcik7CiAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgYmFja2luZ1N0b3JlLT51cGRh
dGVUaWxlKHRpbGVJRCwgdXBkYXRlLnNvdXJjZVJlY3QsIHVwZGF0ZS50aWxlUmVjdCwgdXBkYXRl
LnN1cmZhY2UsIHVwZGF0ZS5vZmZzZXQpOwpAQCAtNTQzLDE1ICs0OTgsMTUgQEAgdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VJRCkKICAgICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5hcHBlbmQobV9pbWFnZUJh
Y2tpbmdzLnRha2UoaW1hZ2VJRCkpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjphc3Np
Z25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGltYWdlSUQpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFn
ZUJhY2tpbmdUb0xheWVyKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCkKIHsKICAgICBpZiAoaW1hZ2VJRCA9PSBJbnZhbGlkQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCkgewotICAgICAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlh
KDApOworICAgICAgICBsYXllci0+YXBwZW5kQ2hhbmdlKGJpbmQoJlRleHR1cmVNYXBwZXJMYXll
cjo6c2V0Q29udGVudHNMYXllciwgbGF5ZXIsIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyKj4oMCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBJbWFnZUJhY2tp
bmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CiAgICAg
QVNTRVJUKGl0ICE9IG1faW1hZ2VCYWNraW5ncy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRl
bnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkpOworICAgIGxheWVyLT5hcHBlbmRDaGFuZ2UoYmlu
ZCgmVGV4dHVyZU1hcHBlckxheWVyOjpzZXRDb250ZW50c0xheWVyLCBsYXllciwgaXQtPnZhbHVl
LmdldCgpKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVJlbGVhc2VkSW1h
Z2VCYWNraW5nc0lmTmVlZGVkKCkKQEAgLTU2NiwxNSArNTIxLDYgQEAgdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKQogICAgICAgICAo
Kml0KS0+Y29tbWl0VGlsZU9wZXJhdGlvbnMobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIAogICAg
IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwotCi0gICAgewotICAg
ICAgICBCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1N5bmNCYWNraW5n
U3RvcmVzLmVuZCgpOwotICAgICAgICBCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9w
ZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMuYmVnaW4oKTsKLSAgICAgICAgZm9yICg7aXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAgICAgaXQtPmtleS0+c2V0QmFja2luZ1N0b3JlKGl0LT52YWx1ZSk7
Ci0KLSAgICAgICAgbV9wZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMuY2xlYXIoKTsKLSAgICB9CiB9
CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKQEAgLTU4NCw3
ICs1MzAsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcygpCiAg
ICAgLy8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVlbiByZW5kZXJlZCwgd2UgY2FuIHNhZmVs
eSB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhlIG5leHQgbGF5b3V0LgogICAgIHNldEFu
aW1hdGlvbnNMb2NrZWQoZmFsc2UpOwogCi0gICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZShGbG9hdFJlY3QoKSk7CisgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZSgpOwogICAgIGNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7CiAgICAg
cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKIApAQCAtNjAzLDE2ICs1NDks
MjEgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkKICAgICBpZiAo
bV9yb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcm9vdExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKDAgLyogZmFjdG9yeSAqLywgdGhpcyk7Ci0gICAgbV9yb290TGF5ZXIt
PnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0Qo
MCwgMCwgMCkpOworICAgIG1fcm9vdExheWVyID0gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJM
YXllcigpKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKKyAgICBtX3Jvb3RMYXllci5n
ZXQoKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworCisgICAgbV9y
b290TGF5ZXItPmFwcGVuZENoYW5nZShiaW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldE1hc2tz
VG9Cb3VuZHMsIG1fcm9vdExheWVyLmdldCgpLCBmYWxzZSkpOworICAgIG1fcm9vdExheWVyLT5h
cHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBlckxheWVyOjpzZXREcmF3c0NvbnRlbnQsIG1f
cm9vdExheWVyLmdldCgpLCBmYWxzZSkpOwogCiAgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxk
IG5vdCBoYXZlIHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KLSAgICBt
X3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKKyAgICBHcmFwaGljc0xh
eWVyVHJhbnNmb3JtIGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7CisgICAgbGF5ZXJUcmFuc2Zvcm0uc2V0U2l6
ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKKyAgICBsYXllclRyYW5zZm9ybS5zZXRGbGF0dGVuaW5n
KHRydWUpOworICAgIG1fcm9vdExheWVyLT5hcHBlbmRDaGFuZ2UoYmluZCgmVGV4dHVyZU1hcHBl
ckxheWVyOjpzZXRMYXllclRyYW5zZm9ybSwgbV9yb290TGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNm
b3JtKSk7CiAKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLSAgICB0b1RleHR1cmVNYXBw
ZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFw
cGVyLmdldCgpKTsKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jUmVtb3RlQ29u
dGVudCgpCkBAIC02MzQsNyArNTg1LDggQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c3luY1Jl
bW90ZUNvbnRlbnQoKQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2Vz
KCkKIHsKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5
ZXIocm9vdExheWVyKCkpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSByb290TGF5
ZXIoKTsKKyAgICBsYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKCk7CiAKICAgICBpZiAobGF5
ZXIpCiAgICAgICAgIGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKQEAgLTY1
MCw3ICs2MDIsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkK
ICAgICBtX2xheWVycy5jbGVhcigpOwogICAgIG1fZml4ZWRMYXllcnMuY2xlYXIoKTsKICAgICBt
X3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKLSAgICBtX3BlbmRpbmdTeW5jQmFja2luZ1N0b3Jlcy5j
bGVhcigpOworICAgIG1fYmFja2luZ1N0b3Jlcy5jbGVhcigpOwogICAgIG1fYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwogCiAgICAgc2V0QWN0aXZlKGZhbHNlKTsKQEAg
LTY2NSw3ICs2MTcsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9y
ZXMoKQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9u
cykKIHsKLSAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIgPSB0b0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyQnlJRChpZCkpOworICAgIFRleHR1cmVNYXBwZXJMYXll
ciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRp
b25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKQEAgLTY3Nyw3ICs2MjksNyBAQCB2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkLCBjb25zdCBHcmFwaGljcwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgbGF5
ZXItPnNldEFuaW1hdGlvbnMoYW5pbWF0aW9ucyk7CisgICAgbGF5ZXItPmFwcGVuZENoYW5nZShi
aW5kKCZUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEFuaW1hdGlvbnMsIGxheWVyLCBhbmltYXRpb25z
KSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9v
bCBsb2NrZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRleCAxYTk1OTdmLi4w
ZDEzOTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTI3LDcgKzI3LDYg
QEAKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0xheWVyQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KQEAgLTUwLDcgKzQ5LDcgQEAgY2xhc3MgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU7CiBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOwogCi1jbGFzcyBMYXllclRyZWVSZW5kZXJl
ciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxMYXllclRyZWVSZW5kZXJlcj4sIHB1Ymxp
YyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKK2NsYXNzIExheWVyVHJlZVJlbmRlcmVy
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExheWVyVHJlZVJlbmRlcmVyPiB7CiBwdWJs
aWM6CiAgICAgc3RydWN0IFRpbGVVcGRhdGUgewogICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHNv
dXJjZVJlY3Q7CkBAIC0xMTksMjMgKzExOCwxOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoQ29vcmRpbmF0ZWRMYXll
cklEIGlkKQorICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciogbGF5ZXJCeUlEKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2xheWVycy5jb250YWlu
cyhpZCkpOwogICAgICAgICBBU1NFUlQoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7
CiAgICAgICAgIHJldHVybiBtX2xheWVycy5nZXQoaWQpOwogICAgIH0KLSAgICBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiBnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQpOwot
ICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExh
eWVyLmdldCgpOyB9CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBnZXRMYXllckJ5
SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQpOworICAgIFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KIAogICAg
IHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKICAgICB2b2lkIGFkanVzdFBvc2l0aW9uRm9yRml4
ZWRMYXllcnMoKTsKIAotICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREUgeyB9Ci0K
ICAgICB2b2lkIGRpc3BhdGNoT25NYWluVGhyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsK
ICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQpAQCAtMTQ0LDE2ICsxMzgsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbmRlck5l
eHRGcmFtZSgpOwogICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAKLSAgICB2b2lkIGFz
c2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsK
ICAgICB2b2lkIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CiAgICAgdm9p
ZCBlbnN1cmVSb290TGF5ZXIoKTsKICAgICB2b2lkIGNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVP
cGVyYXRpb25zKCk7CiAKLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogZ2V0QmFja2luZ1N0
b3JlKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIHByZXBhcmVDb250ZW50QmFj
a2luZ1N0b3JlKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIGNyZWF0ZUJhY2tp
bmdTdG9yZUlmTmVlZGVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIHJlbW92
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lk
IHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KTsKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogZ2V0QmFja2luZ1N0b3JlKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllciopOworICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlSWZOZWVk
ZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKik7CisgICAgdm9pZCByZW1vdmVCYWNraW5n
U3RvcmVJZk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqKTsKKyAgICB2b2lkIHJl
c2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXll
ciopOwogCiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY29udGVudHNTaXplOwogICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CkBAIC0xNjksNyArMTYyLDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1f
cmVsZWFzZWRJbWFnZUJhY2tpbmdzOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJMYXllciosIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBCYWNr
aW5nU3RvcmVNYXA7Ci0gICAgQmFja2luZ1N0b3JlTWFwIG1fcGVuZGluZ1N5bmNCYWNraW5nU3Rv
cmVzOworICAgIEJhY2tpbmdTdG9yZU1hcCBtX2JhY2tpbmdTdG9yZXM7CiAKICAgICBIYXNoU2V0
PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX2JhY2tpbmdTdG9yZXNXaXRoUGVu
ZGluZ0J1ZmZlcnM7CiAKQEAgLTE4MiwxMSArMTc1LDExIEBAIHByaXZhdGU6CiAgICAgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkqIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7
CiAgICAgYm9vbCBtX2lzQWN0aXZlOwogCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI+IG1fcm9vdExheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI+
IG1fcm9vdExheWVyOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwg
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+ID4gTGF5ZXJNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJM
YXllcj4gPiBMYXllck1hcDsKICAgICBMYXllck1hcCBtX2xheWVyczsKLSAgICB0eXBlZGVmIEhh
c2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJS
YXdQdHJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckxheWVyKj4gTGF5ZXJSYXdQdHJNYXA7CiAgICAgTGF5ZXJSYXdQdHJN
YXAgbV9maXhlZExheWVyczsKICAgICBDb29yZGluYXRlZExheWVySUQgbV9yb290TGF5ZXJJRDsK
ICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9u
OwotLSAKMS43LjkuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183420</attachid>
            <date>2013-01-18 03:19:48 -0800</date>
            <delta_ts>2013-01-28 03:10:20 -0800</delta_ts>
            <desc>Not for review : prototype CoordinatedTask to reduce CoreIPC messages.</desc>
            <filename>0001-TextureMapperTask.patch</filename>
            <type>text/plain</type>
            <size>31537</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSBhNDA0ZjdlNzQ2MjAwYWEzNjAxNzc1MDM3NWU4YWRkMDBjYzVhNDZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IEZyaSwgMTggSmFuIDIwMTMgMTU6MzM6MDAgKzA5MDAKU3ViamVjdDogW1BBVENI
XSBUZXh0dXJlTWFwcGVyVGFzawoKLS0tCiBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCAg
ICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1
bWVudENvZGVycy5jcHAgICAgICAgICAgfCAgIDY0ICsrKysrKysrKysrKysKIC4uLi9Db29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCAgICAgICAgICAgIHwgICAgNiArKwogLi4uL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGFzay5jcHAgfCAgIDQ2ICsrKysr
KysrKysKIC4uLi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRhc2suaCAg
IHwgICA5NiArKysrKysrKysrKysrKysrKysrKwogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRUYXNrcy5jcHAgICAgICAgfCAgIDQzICsrKysrKysrKwogLi4uL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGFza3MuaCAgfCAgIDU3ICsrKysrKysrKysrKwog
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0
ICsKIC4uLi9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgICAgICAgICAgICAgIHwg
ICAxNSArLS0KIC4uLi9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oICAgICAgICAgICAg
ICAgIHwgICAgNSArLQogLi4uL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluICAgICAgfCAgICA0ICstCiAuLi4vQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5k
ZXJlci5jcHAgICAgICB8ICAgIDUgKy0KIC4uLi9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZVJlbmRlcmVyLmggICAgICAgIHwgICAgMyArLQogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiAuLi4vQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCB8ICAgIDQgKy0KIC4uLi9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwICAgICAgICAgICAgICAgICAgIHwgICAxNiArKy0tCiAuLi4vQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCB8ICAgIDQgKy0KIDE3IGZp
bGVzIGNoYW5nZWQsIDM0NiBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZFRhc2suY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUYXNrLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRh
c2tzLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGFza3MuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXgg
ZWFjMDgzYi4uMTRhNTFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTIyNCw2ICsyMjQsOCBA
QCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL0FQSS9jL1dLVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuLmNwcAogCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAorICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkVGFzay5jcHAKKyAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZFRhc2tzLmNwcAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3Jk
aW5hdGVkU3VyZmFjZS5jcHAKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveHkuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDljOWY0YzEuLmY2NzAyMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRU
YXNrcy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgpAQCAtODIyLDYg
KzgyMyw2OSBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRMYXllckluZm8+OjpkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBDb29yZAogICAgIHJldHVybiBTaW1wbGVBcmd1
bWVudENvZGVyPENvb3JkaW5hdGVkTGF5ZXJJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIGNvb3JkaW5h
dGVkTGF5ZXJJbmZvKTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkVGFza3M+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb29yZGluYXRlZFRhc2tz
JiBjb29yZGluYXRlZFRhc2tzKQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGNvb3JkaW5hdGVkVGFza3Muc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvb3JkaW5hdGVkVGFza3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQ29vcmRpbmF0
ZWRUYXNrKiB0YXNrID0gY29vcmRpbmF0ZWRUYXNrcy5hdChpKTsKKyAgICAgICAgZW5jb2Rlci5l
bmNvZGVFbnVtKHRhc2stPnR5cGUoKSk7CisKKyAgICAgICAgc3dpdGNoICh0YXNrLT50eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZFRhc2s6OlN5bmNMYXllclN0YXRlOgorICAgICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRkU3luY0xheWVyU3Rh
dGVUYXNrKj4odGFzayktPm1fbGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZFN5bmNMYXllclN0YXRlVGFzayo+KHRhc2spLT5tX2xheWVy
SW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkVGFzazo6
U2V0TGF5ZXJDaGlsZHJlbjoKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZFNldExheWVyQ2hpbGRyZW5UYXNrKj4odGFzayktPm1fbGF5ZXJJRDsKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZFNldExheWVy
Q2hpbGRyZW5UYXNrKj4odGFzayktPm1fY2hpbGRyZW47CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZFRhc2s6Ok5vbmU6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCiti
b29sIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRUYXNrcz46OmRlY29kZShBcmd1bWVudERlY29k
ZXIqIGRlY29kZXIsIENvb3JkaW5hdGVkVGFza3MmIGNvb3JkaW5hdGVkVGFza3MpCit7CisgICAg
dWludDMyX3QgdGFza3NTaXplOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDMyKHRhc2tz
U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGFza3NTaXplOyArK2kpIHsKKyAgICAgICAgQ29vcmRpbmF0ZWRUYXNrOjpUYXNrVHlwZSB0
eXBlOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0odHlwZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
Q29vcmRpbmF0ZWRUYXNrOjpTeW5jTGF5ZXJTdGF0ZTogeworICAgICAgICAgICAgQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXll
cklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBDb29yZGlu
YXRlZExheWVySW5mbyBsYXllckluZm87CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShsYXllckluZm8pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGNvb3JkaW5hdGVkVGFza3MuYXBwZW5kKENvb3JkaW5hdGRTeW5jTGF5ZXJTdGF0ZVRhc2s6OmNy
ZWF0ZShsYXllcklELCBsYXllckluZm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRUYXNrOjpTZXRMYXllckNoaWxkcmVuOiB7CisgICAg
ICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGNoaWxkcmVuOworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY2hpbGRyZW4pKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGNvb3JkaW5hdGVkVGFza3MuYXBwZW5kKENvb3JkaW5hdGRT
ZXRMYXllckNoaWxkcmVuVGFzazo6Y3JlYXRlKGxheWVySUQsIGNoaWxkcmVuKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkVGFzazo6Tm9u
ZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggY2Rh
OTM0YS4uYzJmMzljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0FyZ3VtZW50Q29kZXJzLmgKQEAgLTU0LDYgKzU0LDcgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFj
ZVRva2VuOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHN0cnVjdCBDb29yZGluYXRlZExheWVySW5m
bzsKK2NsYXNzIENvb3JkaW5hdGVkVGFza3M7CiB9CiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKQEAg
LTExNCw2ICsxMTUsMTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6
OkNvb3JkaW5hdGVkTGF5ZXJJbmZvPiB7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciosIFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKIH07CiAKK3RlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0OjpDb29yZGluYXRlZFRhc2tzPiB7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYktpdDo6Q29vcmRp
bmF0ZWRUYXNrcyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBX
ZWJLaXQ6OkNvb3JkaW5hdGVkVGFza3MmKTsKK307CisKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMK
IAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGFzay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRh
c2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTM5MWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZFRhc2suY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGFzay5oIgorCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgQ29vcmRpbmF0ZFN5bmNMYXllclN0YXRl
VGFzazo6ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVy
ZXItPnNldExheWVyU3RhdGUobV9sYXllcklELCBtX2xheWVySW5mbyk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZFNldExheWVyQ2hpbGRyZW5UYXNrOjpleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKiBy
ZW5kZXJlcikKK3sKKyAgICByZW5kZXJlci0+c2V0TGF5ZXJDaGlsZHJlbihtX2xheWVySUQsIG1f
Y2hpbGRyZW4pOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGFzay5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUYXNrLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyMTNhOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGFzay5o
CkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29yZGluYXRl
ZFRhc2tfaAorI2RlZmluZSBDb29yZGluYXRlZFRhc2tfaAorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKworI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKKworY2xhc3MgQ29vcmRp
bmF0ZWRUYXNrIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRUYXNrPiB7CitwdWJsaWM6
CisgICAgZW51bSBUYXNrVHlwZSB7CisgICAgICAgIFN5bmNMYXllclN0YXRlLAorICAgICAgICBT
ZXRMYXllckNoaWxkcmVuLAorICAgICAgICBOb25lCisgICAgfTsKKworICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKikgPSAwOworICAgIHZpcnR1YWwgVGFza1R5cGUg
dHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZFRhc2soKSB7IH07CisK
K3Byb3RlY3RlZDoKKyAgICBDb29yZGluYXRlZFRhc2soKSB7IH0KK307CisKK2NsYXNzIENvb3Jk
aW5hdGRTeW5jTGF5ZXJTdGF0ZVRhc2sgOiBwdWJsaWMgQ29vcmRpbmF0ZWRUYXNrIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRkU3luY0xheWVyU3RhdGVUYXNrPiBj
cmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYg
bGF5ZXJJbmZvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRk
U3luY0xheWVyU3RhdGVUYXNrKGlkLCBsYXllckluZm8pKTsKKyAgICB9CisgICAgQ29vcmRpbmF0
ZFN5bmNMYXllclN0YXRlVGFzayhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5h
dGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCisgICAgICAgIDogbV9sYXllcklEKGlkKQorICAgICAg
ICAsIG1fbGF5ZXJJbmZvKGxheWVySW5mbykKKyAgICB7IH0KKworICAgIHZpcnR1YWwgVGFza1R5
cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFN5bmNMYXllclN0YXRlOyB9CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIqKSBPVkVSUklERTsKKworICAg
IENvb3JkaW5hdGVkTGF5ZXJJRCBtX2xheWVySUQ7CisgICAgQ29vcmRpbmF0ZWRMYXllckluZm8g
bV9sYXllckluZm87Cit9OworCisKK2NsYXNzIENvb3JkaW5hdGRTZXRMYXllckNoaWxkcmVuVGFz
ayA6IHB1YmxpYyBDb29yZGluYXRlZFRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvb3JkaW5hdGRTZXRMYXllckNoaWxkcmVuVGFzaz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRkU2V0TGF5ZXJDaGlsZHJl
blRhc2soaWQsIGNoaWxkcmVuKSk7CisgICAgfQorICAgIENvb3JkaW5hdGRTZXRMYXllckNoaWxk
cmVuVGFzayhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX2xheWVySUQoaWQpCisgICAgICAgICwgbV9j
aGlsZHJlbihjaGlsZHJlbikKKyAgICB7IH0KKworICAgIHZpcnR1YWwgVGFza1R5cGUgdHlwZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFNldExheWVyQ2hpbGRyZW47IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciopIE9WRVJSSURFOworCisgICAgQ29vcmRp
bmF0ZWRMYXllcklEIG1fbGF5ZXJJRDsKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBt
X2NoaWxkcmVuOworfTsKKworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZFRhc2tf
aAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZFRhc2tzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGFza3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjJmMmY4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRhc2tzLmNwcApAQCAtMCwwICsxLDQz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
b29yZGluYXRlZFRhc2tzLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNp
bmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9p
ZCBDb29yZGluYXRlZFRhc2tzOjpleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlcikK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGFza3Muc2l6ZSgpOyBpKyspCisgICAg
ICAgIG1fdGFza3NbaV0tPmV4ZWN1dGUocmVuZGVyZXIpOworICAgIG1fdGFza3MuY2xlYXIoKTsK
K30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRhc2tzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRhc2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uODFlYzA5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGFza3MuaApAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRUYXNrc19o
CisjZGVmaW5lIENvb3JkaW5hdGVkVGFza3NfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUYXNrLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXI7CisK
K2NsYXNzIENvb3JkaW5hdGVkVGFza3MgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRUYXNrPiB0YXNr
KSB7IG1fdGFza3MuYXBwZW5kKHRhc2spOyB9CisgICAgdm9pZCBjbGVhcigpIHsgbV90YXNrcy5j
bGVhcigpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFza3Muc2l6
ZSgpOyB9CisgICAgY29uc3QgQ29vcmRpbmF0ZWRUYXNrKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGluZGV4IDwgbV90YXNrcy5zaXplKCkgPyBtX3Rhc2tzLmF0KGluZGV4KS5nZXQo
KSA6IDA7IH0KKworICAgIHZvaWQgZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciopOworCitwcml2
YXRlOgorICAgIFZlY3RvcjxSZWZQdHI8Q29vcmRpbmF0ZWRUYXNrPiA+IG1fdGFza3M7Cit9Owor
Cit9CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkVGFza3NfaAorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpp
bmRleCBkNWQzZjgzLi5jNGU3NmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTEzOCw2ICsxMzgsOCBAQCBI
RUFERVJTICs9IFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzQXJndW1lbnRDb2RlcnMuaCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllckluZm8uaCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRTdXJmYWNlLmggXAorICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkVGFzay5oIFwKKyAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZFRhc2tzLmggXAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5h
dGVkU3VyZmFjZS5oIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21G
aWx0ZXJQcm9ncmFtLmggXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luTW9kdWxlLmggXApAQCAtNTEzLDYgKzUxNSw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFNoYXJl
ZC9XZWJVUkxSZXNwb25zZS5jcHAgXAogICAgIFNoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcCBcCiAg
ICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50
Q29kZXJzLmNwcCBcCisgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRU
YXNrLmNwcCBcCisgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUYXNr
cy5jcHAgXAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3Vy
ZmFjZS5jcHAgXAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eS5jcHAgXAogICAgIFNoYXJlZC9xdC9Bcmd1bWVudENvZGVyc1F0LmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5j
cHAKaW5kZXggNGVmNjZmOC4uMzExZGE4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVy
VHJlZUhvc3RNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGFza3MuaCIKICNpbmNs
dWRlICJMYXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgpAQCAtMTA2LDE2ICsxMDcsNiBAQCB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihD
b29yZGluYXRlZExheWVySUQgaQogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRSb290TGF5ZXJJRCwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKIH0KIAotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllclN0YXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8p
Ci17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVy
U3RhdGUsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGlu
YXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJl
bikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5
ZXJDaGlsZHJlbiwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGNoaWxkcmVuKSk7Ci19Ci0KICNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpz
ZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7CkBAIC0xMzQsOSArMTI1LDkgQEAgdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQg
aWQsIGNvbnN0IFdlYkMKIH0KICNlbmRpZgogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1Np
emUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQordm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCwgY29u
c3QgQ29vcmRpbmF0ZWRUYXNrcyYgdGFza3MpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
TGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3JlbmRlcmVyLmdldCgpKSk7
CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJD
aGFuZ2VzLCBtX3JlbmRlcmVyLmdldCgpLCB0YXNrcykpOwogICAgIHVwZGF0ZVZpZXdwb3J0KCk7
CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5w
YWdlKCktPmRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggMzAx
ZjM2Yy4uYmJiOWUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS5oCkBAIC00Myw2ICs0Myw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87CitjbGFzcyBDb29yZGluYXRlZFRhc2tzOwogY2xh
c3MgTGF5ZXJUcmVlUmVuZGVyZXI7CiAKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5IHsKQEAgLTUxLDggKzUyLDYgQEAgY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkgewogcHVibGljOgogICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
KERyYXdpbmdBcmVhUHJveHkqKTsKICAgICB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHko
KTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xh
eWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRM
YXllcklEPiYpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2b2lkIHNldENvbXBvc2l0
aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVy
T3BlcmF0aW9ucyYpOwogI2VuZGlmCkBAIC02NSw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7CiAgICAgdm9pZCBz
ZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRW
aXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IHBhZ2VT
Y2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rvcik7
Ci0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50
c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKKyAgICB2b2lkIGRp
ZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QsIGNvbnN0IENvb3JkaW5hdGVkVGFza3MmKTsK
ICAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
Jik7CiAgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYpOwogICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KaW5kZXggNDQzMDg5NS4uYWNkODVl
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KQEAgLTE5LDggKzE5LDYgQEAKIAogI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKIG1lc3NhZ2VzIC0+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5IHsKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUodWludDMyX3QgaWQsIFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJD
aGlsZHJlbih1aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKICNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCiAgICAgU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnModWludDMyX3Qg
aWQsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVycykKICNlbmRpZgpAQCAtNDAsNyAr
MzgsNyBAQCBtZXNzYWdlcyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSB7CiAgICAg
VXBkYXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQogICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMo
dWludDY0X3QgaW1hZ2VJRCkKICAgICBSZW1vdmVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJ
RCkKLSAgICBEaWRSZW5kZXJGcmFtZShXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2Vi
Q29yZTo6SW50UmVjdCBjb3ZlcmVkUmVjdCkKKyAgICBEaWRSZW5kZXJGcmFtZShXZWJDb3JlOjpJ
bnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb3ZlcmVkUmVjdCwgV2ViS2l0
OjpDb29yZGluYXRlZFRhc2tzIHRhc2tzKQogICAgIERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdl
YkNvcmU6OkZsb2F0UG9pbnQgcG9zaXRpb24pCiAgICAgU2V0TGF5ZXJBbmltYXRpb25zKHVpbnQz
Ml90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRpb25zKQogICAg
IFNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVS
ZW5kZXJlci5jcHAKaW5kZXggY2MwYmRlZi4uMGUwNDlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZVJlbmRlcmVyLmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGFza3MuaCIKICNpbmNsdWRlICJHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXIuaCIKQEAgLTU1MSwxMCArNTUyLDEyIEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCkKICAgICBtX2JhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hM
YXllckNoYW5nZXMoY29uc3QgQ29vcmRpbmF0ZWRUYXNrcyYgdGFza3MpCiB7CiAgICAgbV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Ny
b2xsUG9zaXRpb247CiAKKyAgICBjb25zdF9jYXN0PENvb3JkaW5hdGVkVGFza3MmPih0YXNrcyku
ZXhlY3V0ZSh0aGlzKTsKKwogICAgIC8vIFNpbmNlIHRoZSBmcmFtZSBoYXMgbm93IGJlZW4gcmVu
ZGVyZWQsIHdlIGNhbiBzYWZlbHkgdW5sb2NrIHRoZSBhbmltYXRpb25zIHVudGlsIHRoZSBuZXh0
IGxheW91dC4KICAgICBzZXRBbmltYXRpb25zTG9ja2VkKGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZVJlbmRlcmVyLmgKaW5kZXggNzQzZDcwZC4uYzYwN2Y4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVSZW5kZXJlci5oCkBAIC00OSw2ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Y2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7CiBjbGFzcyBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3MgQ29vcmRpbmF0
ZWRUYXNrczsKIAogY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8TGF5ZXJUcmVlUmVuZGVyZXI+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsaWVudCB7CiBwdWJsaWM6CkBAIC0xMDYsNyArMTA3LDcgQEAgcHVibGljOgogICAgIHZvaWQg
dXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgVGls
ZVVwZGF0ZSYpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKICAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAg
ICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKGNvbnN0IENvb3JkaW5hdGVkVGFza3MmKTsKICAgICB2
b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2
b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwogICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDVkMjNiMjUu
LmMzODRlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQmFj
a2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGFzay5oIgogI2luY2x1ZGUgIkNvb3JkaW5h
dGVkVGlsZS5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBA
IC01MDUsNyArNTA2LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGls
ZHJlbigpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytp
KQogICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9Db29yZGluYXRlZExheWVySUQoY2hpbGRyZW4o
KVtpXSkpOwogCi0gICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hp
bGRJRHMpOworICAgIG1fY29vcmRpbmF0b3ItPnBvc3RUYXNrKENvb3JkaW5hdGRTZXRMYXllckNo
aWxkcmVuVGFzazo6Y3JlYXRlKG1faWQsIGNoaWxkSURzKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oCmluZGV4IDdlYTM4MWYuLjAwYjU1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC00OCwx
MSArNDgsMTQgQEAgY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CiB9CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgeworY2xhc3MgQ29vcmRpbmF0ZWRUYXNrOwogCiBjbGFzcyBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5n
TGF5ZXJDaGFuZ2VzKCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRUYXNrPikgPSAwOworCiAgICAgLy8gQ29vcmRpbmF0ZWRUaWxl
Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgPSAwOwpAQCAtNjEsNyArNjQsNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUlt
YWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5
ZXJJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGlu
YXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JikgPSAwOwogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSA9IDA7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IGRlZWY1NTMuLjkzYTdmNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApA
QCAtMjk0LDcgKzI5NCw3IEBAIGJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKQogCiAgICAgICAgIEludFNpemUgY29udGVudHNTaXplID0gcm91
bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwogICAgICAg
ICBJbnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZFJl
bmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGlkUmVuZGVy
RnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCwgbV9sYXllclBlbmRpbmdUYXNrcykpOwog
ICAgICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwogICAgICAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IGZhbHNlOwogICAgIH0gZWxzZQpAQCAtMzYyLDEzICszNjIsNyBAQCB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBDb29yZAogICAgIH0KIAogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8pKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRy
ZW4oaWQsIGNoaWxkcmVuKSk7CisgICAgcG9zdFRhc2soQ29vcmRpbmF0ZFN5bmNMYXllclN0YXRl
VGFzazo6Y3JlYXRlKGlkLCBpbmZvKSk7CiB9CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
QEAgLTY5OSw2ICs2OTMsMTIgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6cG9zdFRhc2soUGFzc1JlZlB0cjxDb29yZGluYXRlZFRhc2s+IHRhc2sp
Cit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fbGF5ZXJQZW5kaW5nVGFz
a3MuYXBwZW5kKHRhc2spOworfQorCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
dGlsZVJlY3QpCiB7CiAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCA5
YWE5ZTZlLi4wYWE5MmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZFRhc2tzLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgpAQCAtODAsNiArODEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3Jl
OjpJbWFnZSopIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNo
YW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2soUGFzc1JlZlB0cjxDb29yZGluYXRlZFRhc2s+
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRM
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5h
dGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKQEAgLTkxLDcgKzkzLDYgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0
aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zJik7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYpOwpAQCAtMjA0LDYgKzIwNSw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6VGlt
ZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1c2hUaW1lcjsKICAgICBXZWJD
b3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fcmVsZWFzZUluYWN0aXZlQXRs
YXNlc1RpbWVyOwogICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7CisgICAg
Q29vcmRpbmF0ZWRUYXNrcyBtX2xheWVyUGVuZGluZ1Rhc2tzOwogICAgIHVpbnQ2NF90IG1fZm9y
Y2VSZXBhaW50QXN5bmNDYWxsYmFja0lEOwogICAgIGJvb2wgbV9hbmltYXRpb25zTG9ja2VkOwog
fTsKLS0gCjEuNy45LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184963</attachid>
            <date>2013-01-28 03:10:31 -0800</date>
            <delta_ts>2013-01-29 03:33:06 -0800</delta_ts>
            <desc>WIP: Refactoring TextureMapper to work in an actor model.</desc>
            <filename>bug-103854-20130128200658.patch</filename>
            <type>text/plain</type>
            <size>99228</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDE0NTIx
MmVjNWU5YWE1Nzc3OGUxZTQ0NjhiOWI2ZWNkNWE1MzQyNTIuLjkxZDE3ZmY3YzI0MDEwZDRlMTky
ZDBhZGZjMzA3NWQxNTIwZDA2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0yMjMsNiArMjIz
LDcgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9BUEkvYy9XS1VzZXJDb250ZW50
VVJMUGF0dGVybi5jcHAKIAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKKyAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZE9wZXJhdGlvbi5jcHAKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LmNwcAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKaW5kZXggOTk2ZWZhMjViMjhlNTcxMzU0OWRhNDIy
MjBjZWRiOWM1NDNhMmJhMy4uOWFkMzFiOTA4N2I4NDVmMTBkZDdmNzM4NjQwOTdmNGZhZmNhNGY0
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQpAQCAtMzk4
LDYgKzM5OCw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnV2ViQ29y
ZTo6VGV4dENoZWNraW5nUmVzdWx0JzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPidd
LAogICAgICAgICAnV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJzogWyc8V2ViQ29yZS9WaWV3
cG9ydEFyZ3VtZW50cy5oPiddLAogICAgICAgICAnV2ViS2l0OjpDb29yZGluYXRlZExheWVySUQn
OiBbJyJDb29yZGluYXRlZExheWVySW5mby5oIiddLAorICAgICAgICAnV2ViS2l0OjpDb29yZGlu
YXRlZE9wZXJhdGlvbkhvbGRlcic6IFsnIkNvb3JkaW5hdGVkT3BlcmF0aW9uLmgiJ10sCiAgICAg
ICAgICdXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCiAgICAg
ICAgICdXZWJLaXQ6OldlYkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAg
J1dlYktpdDo6V2ViR2VzdHVyZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDll
ODg4ZTU4NjY1NTNlOWE1NzhiYzkwMzdhYmZhYTgzM2IxNWNkYWIuLjdjZWY2ZmI0MjNlMTFmNzM2
MzE1OWQwMDVkYTI0OTE2ZmZlNDc1YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtMzAsNyArMzAsOSBAQAogCiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZv
LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRPcGVyYXRpb24uaCIKICNpbmNsdWRlICJTdXJmYWNl
VXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQW5pbWF0aW9u
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgpAQCAtODMzLDYgKzgzNSwzNjcgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgU3VyZmFjZVUKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxTdXJm
YWNlVXBkYXRlSW5mbz46OmRlY29kZShkZWNvZGVyLCBzdXJmYWNlVXBkYXRlSW5mbyk7CiB9CiAK
K3ZvaWQgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZE9wZXJhdGlvbkhvbGRlcj46OmVuY29kZShB
cmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb3JkaW5hdGVkT3BlcmF0aW9uSG9sZGVy
JiBob2xkZXIpCit7CisgICAgQ29vcmRpbmF0ZWRPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGhvbGRl
ci5vcGVyYXRpb24uZ2V0KCk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKG9wZXJhdGlvbi0+dHlw
ZSgpKTsKKworICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICBjYXNlIENvb3Jk
aW5hdGVkT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVMYXllcnNPcGVyYXRpb24qPihvcGVyYXRpb24p
LT5tX2lkczsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6
RGVsZXRlTGF5ZXJzOgorICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3Jk
aW5hdGVkRGVsZXRlTGF5ZXJzT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bV9pZHM7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlNldFJvb3RDb21wb3NpdGlu
Z0xheWVyOgorICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pLT5tX2xheWVySUQ7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlN5bmNMYXll
clN0YXRlOgorICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
U3luY0xheWVyU3RhdGVPcGVyYXRpb24qPihvcGVyYXRpb24pLT5tX2xheWVySUQ7CisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRTeW5jTGF5ZXJTdGF0ZU9w
ZXJhdGlvbio+KG9wZXJhdGlvbiktPm1fbGF5ZXJJbmZvOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOgorICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU2V0TGF5ZXJDaGlsZHJlbk9wZXJh
dGlvbio+KG9wZXJhdGlvbiktPm1fbGF5ZXJJRDsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZFNldExheWVyQ2hpbGRyZW5PcGVyYXRpb24qPihvcGVyYXRp
b24pLT5tX2NoaWxkcmVuOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkT3Bl
cmF0aW9uOjpDcmVhdGVUaWxlRm9yTGF5ZXI6CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVUaWxlRm9yTGF5ZXJPcGVyYXRpb24qPihvcGVyYXRp
b24pLT5tX2xheWVySUQ7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRDcmVhdGVUaWxlRm9yTGF5ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pLT5tX3RpbGVJ
RDsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZENyZWF0
ZVRpbGVGb3JMYXllck9wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1fdGlsZVJlY3Q7CisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVUaWxlRm9yTGF5
ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pLT5tX3VwZGF0ZUluZm87CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlVwZGF0ZVRpbGVGb3JMYXllcjoKKyAgICAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFVwZGF0ZVRpbGVGb3JM
YXllck9wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1fbGF5ZXJJRDsKKyAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFVwZGF0ZVRpbGVGb3JMYXllck9wZXJhdGlv
bio+KG9wZXJhdGlvbiktPm1fdGlsZUlEOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkVXBkYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KS0+bV90aWxlUmVjdDsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZFVwZGF0ZVRpbGVGb3JMYXllck9wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1fdXBkYXRl
SW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6UmVt
b3ZlVGlsZUZvckxheWVyOgorICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkUmVtb3ZlVGlsZUZvckxheWVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bV9sYXll
cklEOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkUmVt
b3ZlVGlsZUZvckxheWVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bV90aWxlSUQ7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFz
OiB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVh
dGVVcGRhdGVBdGxhc09wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1fYXRsYXNJRDsKKyAgICAgICAg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2Fz
dDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZENy
ZWF0ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bV9zdXJmYWNlLmdldCgpKTsK
KyAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byBkZWFsIHdpdGggdGhlIGNhc2UgdGhhdCBoYW5kbGUgY3JlYXRp
b24gaXMgZmFpbGVkLgorICAgICAgICB3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRs
ZShoYW5kbGUpOworICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOgor
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkUmVtb3ZlVXBk
YXRlQXRsYXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5tX2F0bGFzSUQ7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzoKKyAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZENyZWF0ZUltYWdl
QmFja2luZ09wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1faWQ7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzogeworICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkVXBkYXRlSW1hZ2VCYWNr
aW5nT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bV9pZDsKKyAgICAgICAgV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRl
ZFN1cmZhY2UqPihzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFVwZGF0ZUltYWdlQmFja2lu
Z09wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgIFdlYkNv
b3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHRoYXQgaGFuZGxlIGNyZWF0aW9uIGlzIGZhaWxlZC4K
KyAgICAgICAgd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAg
ICAgICAgZW5jb2RlciA8PCBoYW5kbGU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IENvb3JkaW5hdGVkT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOgorICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkQ2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50c09wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1faWQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzoKKyAgICAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFJlbW92ZUltYWdlQmFj
a2luZ09wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1faWQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczoKKyAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFNldExheWVyQW5pbWF0aW9uc09w
ZXJhdGlvbio+KG9wZXJhdGlvbiktPm1fbGF5ZXJJRDsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFNldExheWVyQW5pbWF0aW9uc09wZXJhdGlvbio+KG9w
ZXJhdGlvbiktPm1fYW5pbWF0aW9uczsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGlu
YXRlZE9wZXJhdGlvbjo6U2V0QW5pbWF0aW9uc0xvY2tlZDoKKyAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFNldEFuaW1hdGlvbnNMb2NrZWRPcGVyYXRpb24q
PihvcGVyYXRpb24pLT5tX2xvY2tlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGlu
YXRlZE9wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6CisgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVDYW52YXNPcGVyYXRpb24q
PihvcGVyYXRpb24pLT5tX2xheWVySUQ7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVDYW52YXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5tX2Nh
bnZhc1NpemU7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRDcmVhdGVDYW52YXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5tX3Rva2VuOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTeW5jQ2FudmFzOgorICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU3luY0NhbnZhc09wZXJh
dGlvbio+KG9wZXJhdGlvbiktPm1fbGF5ZXJJRDsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZFN5bmNDYW52YXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5t
X2Zyb250QnVmZmVyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0
aW9uOjpEZXN0cm95Q2FudmFzOgorICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0
IENvb3JkaW5hdGVkRGVzdHJveUNhbnZhc09wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1fbGF5ZXJJ
RDsKKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNhc2UgQ29v
cmRpbmF0ZWRPcGVyYXRpb246OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzOgorICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU2V0Q29tcG9zaXRpbmdMYXll
ckZpbHRlcnNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5tX2xheWVySUQ7CisgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRTZXRDb21wb3NpdGluZ0xheWVyRmls
dGVyc09wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1fZmlsdGVyczsKKyAgICAgICAgYnJlYWs7Cisj
aWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OkNy
ZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtT3BlcmF0aW9uKj4ob3Bl
cmF0aW9uKS0+bV9jdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtT3BlcmF0
aW9uKj4ob3BlcmF0aW9uKS0+bV9wcm9ncmFtSW5mbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbToKKyAgICAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFJlbW92ZUN1c3RvbUZp
bHRlclByb2dyYW1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5tX2N1c3RvbUZpbHRlclByb2dyYW1J
RDsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNlbmRpZgorICAgIGNhc2UgQ29vcmRpbmF0ZWRP
cGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50OgorICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU2V0TGF5ZXJSZXBhaW50Q291bnRPcGVyYXRpb24qPihv
cGVyYXRpb24pLT5tX2xheWVySUQ7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRTZXRMYXllclJlcGFpbnRDb3VudE9wZXJhdGlvbio+KG9wZXJhdGlvbikt
Pm1fcmVwYWludENvdW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkT3Bl
cmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ29vcmRpbmF0ZWRTZXRCYWNrZ3JvdW5kQ29sb3JPcGVyYXRpb24qPihvcGVyYXRp
b24pLT5tX2NvbG9yOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0
aW9uOjpOb25lOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitib29sIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRPcGVyYXRpb25Ib2xk
ZXI+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBDb29yZGluYXRlZE9wZXJhdGlv
bkhvbGRlciYgaG9sZGVyKQoreworICAgIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpUYXNrVHlwZSB0
eXBlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bSh0eXBlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJh
dGlvbjo6Q3JlYXRlTGF5ZXJzOiB7CisgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+
IGlkczsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWRzKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaG9sZGVyLm9wZXJhdGlvbiA9IENvb3JkaW5hdGVkQ3JlYXRl
TGF5ZXJzT3BlcmF0aW9uOjpjcmVhdGUoaWRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OkRlbGV0ZUxheWVyczogeworICAgICAgICBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBpZHM7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KGlkcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhvbGRlci5vcGVyYXRp
b24gPSBDb29yZGluYXRlZERlbGV0ZUxheWVyc09wZXJhdGlvbjo6Y3JlYXRlKGlkcyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRSb290
Q29tcG9zaXRpbmdMYXllcjogeworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsK
KyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGhvbGRlci5vcGVyYXRpb24gPSBDb29yZGluYXRlZFNldFJvb3RD
b21wb3NpdGluZ0xheWVyT3BlcmF0aW9uOjpjcmVhdGUobGF5ZXJJRCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTeW5jTGF5ZXJTdGF0ZTog
eworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IENvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5mbzsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUobGF5ZXJJbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaG9s
ZGVyLm9wZXJhdGlvbiA9IENvb3JkaW5hdGVkU3luY0xheWVyU3RhdGVPcGVyYXRpb246OmNyZWF0
ZShsYXllcklELCBsYXllckluZm8pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBD
b29yZGluYXRlZE9wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjogeworICAgICAgICBDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobGF5ZXJJ
RCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+IGNoaWxkcmVuOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShjaGlsZHJl
bikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhvbGRlci5vcGVyYXRpb24g
PSBDb29yZGluYXRlZFNldExheWVyQ2hpbGRyZW5PcGVyYXRpb246OmNyZWF0ZShsYXllcklELCBj
aGlsZHJlbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENvb3JkaW5hdGVkT3Bl
cmF0aW9uOjpDcmVhdGVUaWxlRm9yTGF5ZXI6IHsKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQ7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKHRpbGVJRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIEludFJlY3QgdGlsZVJlY3Q7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHRp
bGVSZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU3VyZmFjZVVwZGF0
ZUluZm8gdXBkYXRlSW5mbzsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodXBkYXRlSW5m
bykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhvbGRlci5vcGVyYXRpb24g
PSBDb29yZGluYXRlZENyZWF0ZVRpbGVGb3JMYXllck9wZXJhdGlvbjo6Y3JlYXRlKGxheWVySUQs
IHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6VXBkYXRlVGlsZUZvckxheWVyOiB7CisgICAg
ICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShsYXllcklEKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdWludDMy
X3QgdGlsZUlEOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0aWxlSUQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0OworICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZSh0aWxlUmVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKHVwZGF0ZUluZm8pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBob2xkZXIub3BlcmF0aW9uID0gQ29vcmRpbmF0ZWRVcGRhdGVUaWxlRm9yTGF5ZXJPcGVy
YXRpb246OmNyZWF0ZShsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlJlbW92
ZVRpbGVGb3JMYXllcjogeworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUodGlsZUlEKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaG9sZGVy
Lm9wZXJhdGlvbiA9IENvb3JkaW5hdGVkUmVtb3ZlVGlsZUZvckxheWVyT3BlcmF0aW9uOjpjcmVh
dGUobGF5ZXJJRCwgdGlsZUlEKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29v
cmRpbmF0ZWRPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOiB7CisgICAgICAgIHVpbnQzMl90
IGF0bGFzSUQ7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGF0bGFzSUQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRs
ZSBoYW5kbGU7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhvbGRlci5vcGVyYXRpb24gPSBDb29yZGluYXRl
ZENyZWF0ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uOjpjcmVhdGUoYXRsYXNJRCwgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczogeworICAgICAgICB1
aW50MzJfdCBhdGxhc0lEOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShhdGxhc0lEKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaG9sZGVyLm9wZXJhdGlvbiA9IENv
b3JkaW5hdGVkUmVtb3ZlVXBkYXRlQXRsYXNPcGVyYXRpb246OmNyZWF0ZShhdGxhc0lEKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OkNyZWF0
ZUltYWdlQmFja2luZzogeworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkOwor
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShpZCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGhvbGRlci5vcGVyYXRpb24gPSBDb29yZGluYXRlZENyZWF0ZUltYWdlQmFj
a2luZ09wZXJhdGlvbjo6Y3JlYXRlKGlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzogeworICAgICAgICBD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShpZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFu
ZGxlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaG9sZGVyLm9wZXJhdGlv
biA9IENvb3JkaW5hdGVkVXBkYXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uOjpjcmVhdGUoaWQsIFdl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50czogeworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkOworICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShpZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGhvbGRlci5vcGVyYXRpb24gPSBDb29yZGluYXRlZENsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHNPcGVyYXRpb246OmNyZWF0ZShpZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IENvb3JkaW5hdGVkT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmc6IHsKKyAgICAgICAgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
aWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBob2xkZXIub3BlcmF0aW9u
ID0gQ29vcmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRpb246OmNyZWF0ZShpZCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRM
YXllckFuaW1hdGlvbnM6IHsKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGlkOworICAgICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShpZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnM7CisgICAgICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKGFuaW1hdGlvbnMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBob2xkZXIub3BlcmF0aW9uID0gQ29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlvbnNP
cGVyYXRpb246OmNyZWF0ZShpZCwgYW5pbWF0aW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRBbmltYXRpb25zTG9ja2VkOiB7Cisg
ICAgICAgIGJvb2wgbG9ja2VkOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsb2NrZWQp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBob2xkZXIub3BlcmF0aW9uID0g
Q29vcmRpbmF0ZWRTZXRBbmltYXRpb25zTG9ja2VkT3BlcmF0aW9uOjpjcmVhdGUobG9ja2VkKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlJl
cXVlc3RBbmltYXRpb25GcmFtZToKKyAgICAgICAgaG9sZGVyLm9wZXJhdGlvbiA9IENvb3JkaW5h
dGVkUmVxdWVzdEFuaW1hdGlvbkZyYW1lT3BlcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzOiB7CisgICAg
ICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShsYXllcklEKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgSW50U2l6
ZSBjYW52YXNTaXplOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShjYW52YXNTaXplKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4g
dG9rZW47CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHRva2VuKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaG9sZGVyLm9wZXJhdGlvbiA9IENvb3JkaW5hdGVkQ3Jl
YXRlQ2FudmFzT3BlcmF0aW9uOjpjcmVhdGUobGF5ZXJJRCwgY2FudmFzU2l6ZSwgdG9rZW4pOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6U3lu
Y0NhbnZhczogeworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHVpbnQzMl90IGZyb250QnVmZmVyOworICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShmcm9udEJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhv
bGRlci5vcGVyYXRpb24gPSBDb29yZGluYXRlZFN5bmNDYW52YXNPcGVyYXRpb246OmNyZWF0ZShs
YXllcklELCBmcm9udEJ1ZmZlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENv
b3JkaW5hdGVkT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOiB7CisgICAgICAgIENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklEOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaG9sZGVyLm9wZXJhdGlvbiA9IENv
b3JkaW5hdGVkRGVzdHJveUNhbnZhc09wZXJhdGlvbjo6Y3JlYXRlKGxheWVySUQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNhc2UgQ29vcmRp
bmF0ZWRPcGVyYXRpb246OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzOiB7CisgICAgICAgIENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShs
YXllcklEKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShmaWx0
ZXJzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaG9sZGVyLm9wZXJhdGlv
biA9IENvb3JkaW5hdGVkU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnNPcGVyYXRpb246OmNyZWF0
ZShsYXllcklELCBmaWx0ZXJzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtOiB7CisgICAgICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1J
bmZvIHByb2dyYW1JbmZvOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwcm9ncmFtSW5m
bykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGhvbGRlci5vcGVyYXRpb24g
PSBDb29yZGluYXRlZENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb246OmNyZWF0ZShj
dXN0b21GaWx0ZXJQcm9ncmFtSUQsIHByb2dyYW1JbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW06IHsKKyAgICAgICAgaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaG9sZGVyLm9wZXJhdGlvbiA9IENvb3JkaW5hdGVkUmVtb3ZlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbU9wZXJhdGlvbjo6Y3JlYXRlKGN1c3RvbUZpbHRlclByb2dyYW1JRCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorI2VuZGlmCisgICAgY2FzZSBDb29yZGlu
YXRlZE9wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6IHsKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBDb29yZGluYXRlZExheWVySUQg
cmVwYWludENvdW50OworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZXBhaW50Q291bnQp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBob2xkZXIub3BlcmF0aW9uID0g
Q29vcmRpbmF0ZWRTZXRMYXllclJlcGFpbnRDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKGxheWVySUQs
IHJlcGFpbnRDb3VudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENvb3JkaW5h
dGVkT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6IHsKKyAgICAgICAgV2ViQ29yZTo6Q29s
b3IgY29sb3I7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvbG9yKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaG9sZGVyLm9wZXJhdGlvbiA9IENvb3JkaW5hdGVk
U2V0QmFja2dyb3VuZENvbG9yT3BlcmF0aW9uOjpjcmVhdGUoY29sb3IpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6Tm9uZToKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggMGI1ZTE0Y2MxNzk5NmU2NWQ5NDZhZmRiOTJh
MTRhOGJmMmViZmNmYy4uMzBlMDFhMWJlNDBiZTAzMjEzN2NjOTgzOTNjNGFhMTgyZDJlNWFkZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmgKQEAgLTU0LDYgKzU0LDcgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVRva2VuOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIHN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbzsKK2NsYXNzIENvb3Jk
aW5hdGVkT3BlcmF0aW9uSG9sZGVyOwogY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CiB9CiAKQEAg
LTEyMCw2ICsxMjEsMTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6
OlN1cmZhY2VVcGRhdGVJbmZvPiB7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciosIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKIH07CiAKK3RlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0OjpDb29yZGluYXRlZE9wZXJhdGlvbkhvbGRlcj4gewor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJLaXQ6OkNv
b3JkaW5hdGVkT3BlcmF0aW9uSG9sZGVyJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciosIFdlYktpdDo6Q29vcmRpbmF0ZWRPcGVyYXRpb25Ib2xkZXImKTsKK307CisK
IH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkT3BlcmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMTgz
OTc1YjBjZjdiYzM0NjIyYmE2YzMxYzBjODEyZDJhYmVmODhlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRPcGVy
YXRpb24uY3BwCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENv
bXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZE9wZXJhdGlvbi5oIgorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCisj
aW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordm9pZCBDb29yZGluYXRlZENyZWF0ZUxheWVyc09wZXJh
dGlvbjo6ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVy
ZXItPmNyZWF0ZUxheWVycyhtX2lkcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREZWxldGVMYXll
cnNPcGVyYXRpb246OmV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAg
IHJlbmRlcmVyLT5kZWxldGVMYXllcnMobV9pZHMpOworfQorCit2b2lkIENvb3JkaW5hdGVkU2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXJPcGVyYXRpb246OmV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIq
IHJlbmRlcmVyKQoreworICAgIHJlbmRlcmVyLT5zZXRSb290TGF5ZXJJRChtX2xheWVySUQpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkU3luY0xheWVyU3RhdGVPcGVyYXRpb246OmV4ZWN1dGUoTGF5
ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAgIHJlbmRlcmVyLT5zZXRMYXllclN0YXRl
KG1fbGF5ZXJJRCwgbV9sYXllckluZm8pOworfQorCit2b2lkIENvb3JkaW5hdGVkU2V0TGF5ZXJD
aGlsZHJlbk9wZXJhdGlvbjo6ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7
CisgICAgcmVuZGVyZXItPnNldExheWVyQ2hpbGRyZW4obV9sYXllcklELCBtX2NoaWxkcmVuKTsK
K30KKwordm9pZCBDb29yZGluYXRlZENyZWF0ZVRpbGVGb3JMYXllck9wZXJhdGlvbjo6ZXhlY3V0
ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVyZXItPmNyZWF0ZVRp
bGUobV9sYXllcklELCBtX3RpbGVJRCwgbV91cGRhdGVJbmZvLnNjYWxlRmFjdG9yKTsKKyAgICBy
ZW5kZXJlci0+dXBkYXRlVGlsZShtX2xheWVySUQsIG1fdGlsZUlELCBMYXllclRyZWVSZW5kZXJl
cjo6VGlsZVVwZGF0ZShtX3VwZGF0ZUluZm8udXBkYXRlUmVjdCwgbV90aWxlUmVjdCwgbV91cGRh
dGVJbmZvLmF0bGFzSUQsIG1fdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRVcGRhdGVUaWxlRm9yTGF5ZXJPcGVyYXRpb246OmV4ZWN1dGUoTGF5ZXJUcmVl
UmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAgIHJlbmRlcmVyLT51cGRhdGVUaWxlKG1fbGF5ZXJJ
RCwgbV90aWxlSUQsIExheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKG1fdXBkYXRlSW5mby51
cGRhdGVSZWN0LCBtX3RpbGVSZWN0LCBtX3VwZGF0ZUluZm8uYXRsYXNJRCwgbV91cGRhdGVJbmZv
LnN1cmZhY2VPZmZzZXQpKTsKK30KKwordm9pZCBDb29yZGluYXRlZFJlbW92ZVRpbGVGb3JMYXll
ck9wZXJhdGlvbjo6ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAg
cmVuZGVyZXItPnJlbW92ZVRpbGUobV9sYXllcklELCBtX3RpbGVJRCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRDcmVhdGVVcGRhdGVBdGxhc09wZXJhdGlvbjo6ZXhlY3V0ZShMYXllclRyZWVSZW5k
ZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVyZXItPmNyZWF0ZVVwZGF0ZUF0bGFzKG1fYXRs
YXNJRCwgbV9zdXJmYWNlKTsKK30KKwordm9pZCBDb29yZGluYXRlZFJlbW92ZVVwZGF0ZUF0bGFz
T3BlcmF0aW9uOjpleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlcikKK3sKKyAgICBy
ZW5kZXJlci0+cmVtb3ZlVXBkYXRlQXRsYXMobV9hdGxhc0lEKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZENyZWF0ZUltYWdlQmFja2luZ09wZXJhdGlvbjo6ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJl
ciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVyZXItPmNyZWF0ZUltYWdlQmFja2luZyhtX2lkKTsK
K30KKwordm9pZCBDb29yZGluYXRlZFVwZGF0ZUltYWdlQmFja2luZ09wZXJhdGlvbjo6ZXhlY3V0
ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVyZXItPnVwZGF0ZUlt
YWdlQmFja2luZyhtX2lkLCBtX3N1cmZhY2UpOworfQorCit2b2lkIENvb3JkaW5hdGVkQ2xlYXJJ
bWFnZUJhY2tpbmdDb250ZW50c09wZXJhdGlvbjo6ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciog
cmVuZGVyZXIpCit7CisgICAgcmVuZGVyZXItPmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMobV9p
ZCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRpb246OmV4
ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAgIHJlbmRlcmVyLT5yZW1v
dmVJbWFnZUJhY2tpbmcobV9pZCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRTZXRMYXllckFuaW1h
dGlvbnNPcGVyYXRpb246OmV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyKQorewor
ICAgIHJlbmRlcmVyLT5zZXRMYXllckFuaW1hdGlvbnMobV9sYXllcklELCBtX2FuaW1hdGlvbnMp
OworfQorCit2b2lkIENvb3JkaW5hdGVkU2V0QW5pbWF0aW9uc0xvY2tlZE9wZXJhdGlvbjo6ZXhl
Y3V0ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVyZXItPnNldEFu
aW1hdGlvbnNMb2NrZWQobV9sb2NrZWQpOworfQorCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQordm9pZCBDb29yZGluYXRlZFJlcXVlc3RBbmltYXRpb25GcmFtZU9wZXJhdGlv
bjo6ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVyZXIt
PnJlcXVlc3RBbmltYXRpb25GcmFtZSgpOworfQorI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKK3ZvaWQgQ29vcmRpbmF0ZWRDcmVhdGVDYW52YXNPcGVyYXRpb246OmV4ZWN1dGUo
TGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAgIEdyYXBoaWNzU3VyZmFjZTo6Rmxh
Z3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQg
fCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKKyAgICByZW5kZXJlci0+Y3JlYXRl
Q2FudmFzKG1fbGF5ZXJJRCwgbV9jYW52YXNTaXplLCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZSht
X2NhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgbV90b2tlbikpOworfQorCit2b2lkIENvb3JkaW5h
dGVkU3luY0NhbnZhc09wZXJhdGlvbjo6ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVy
ZXIpCit7CisgICAgcmVuZGVyZXItPnN5bmNDYW52YXMobV9sYXllcklELCBtX2Zyb250QnVmZmVy
KTsKK30KKwordm9pZCBDb29yZGluYXRlZERlc3Ryb3lDYW52YXNPcGVyYXRpb246OmV4ZWN1dGUo
TGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAgIHJlbmRlcmVyLT5kZXN0cm95Q2Fu
dmFzKG1fbGF5ZXJJRCk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3Zv
aWQgQ29vcmRpbmF0ZWRTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVyc09wZXJhdGlvbjo6ZXhlY3V0
ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVyZXItPnNldExheWVy
RmlsdGVycyhtX2xheWVySUQsIG1fZmlsdGVycyk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCit2b2lkIENvb3JkaW5hdGVkQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbU9wZXJhdGlvbjo6
ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVuZGVyZXItPmNy
ZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0obV9jdXN0b21GaWx0ZXJQcm9ncmFtSUQsIG1fcHJvZ3Jh
bUluZm8pOworfQorCit2b2lkIENvb3JkaW5hdGVkUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbU9w
ZXJhdGlvbjo6ZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIpCit7CisgICAgcmVu
ZGVyZXItPnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0obV9jdXN0b21GaWx0ZXJQcm9ncmFtSUQp
OworfQorI2VuZGlmCisjZW5kaWYKKwordm9pZCBDb29yZGluYXRlZFNldExheWVyUmVwYWludENv
dW50T3BlcmF0aW9uOjpleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlcikKK3sKKyAg
ICByZW5kZXJlci0+c2V0TGF5ZXJSZXBhaW50Q291bnQobV9sYXllcklELCBtX3JlcGFpbnRDb3Vu
dCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRTZXRCYWNrZ3JvdW5kQ29sb3JPcGVyYXRpb246OmV4
ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyKQoreworICAgIHJlbmRlcmVyLT5zZXRC
YWNrZ3JvdW5kQ29sb3IobV9jb2xvcik7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRPcGVyYXRp
b24uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkT3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2VkMjM2OWQ5OTU5ZTJlYWQ1NjI3YzYzMGJhY2Vl
ODgzMmFiNTk0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkT3BlcmF0aW9uLmgKQEAgLTAsMCArMSw1NTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZE9wZXJhdGlvbl9oCisjZGVm
aW5lIENvb3JkaW5hdGVkT3BlcmF0aW9uX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRTdXJmYWNlLmgiCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorI2luY2x1ZGUgIkN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvLmgiCisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisj
aW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2VuZGlmCisjaW5jbHVkZSAiR3JhcGhpY3NM
YXllckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZVRva2VuLmgiCisjaW5j
bHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
TGF5ZXJUcmVlUmVuZGVyZXI7CisKK2NsYXNzIENvb3JkaW5hdGVkT3BlcmF0aW9uIDogcHVibGlj
IFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRPcGVyYXRpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFRh
c2tUeXBlIHsKKyAgICAgICAgQ3JlYXRlTGF5ZXJzLAorICAgICAgICBEZWxldGVMYXllcnMsCisg
ICAgICAgIFNldFJvb3RDb21wb3NpdGluZ0xheWVyLAorICAgICAgICBTeW5jTGF5ZXJTdGF0ZSwK
KyAgICAgICAgU2V0TGF5ZXJDaGlsZHJlbiwKKyAgICAgICAgQ3JlYXRlVGlsZUZvckxheWVyLAor
ICAgICAgICBVcGRhdGVUaWxlRm9yTGF5ZXIsCisgICAgICAgIFJlbW92ZVRpbGVGb3JMYXllciwK
KyAgICAgICAgQ3JlYXRlVXBkYXRlQXRsYXMsCisgICAgICAgIFJlbW92ZVVwZGF0ZUF0bGFzLAor
ICAgICAgICBDcmVhdGVJbWFnZUJhY2tpbmcsCisgICAgICAgIFVwZGF0ZUltYWdlQmFja2luZywK
KyAgICAgICAgQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cywKKyAgICAgICAgUmVtb3ZlSW1hZ2VC
YWNraW5nLAorICAgICAgICBTZXRMYXllckFuaW1hdGlvbnMsCisgICAgICAgIFNldEFuaW1hdGlv
bnNMb2NrZWQsCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUsCisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
KyAgICAgICAgQ3JlYXRlQ2FudmFzLAorICAgICAgICBTeW5jQ2FudmFzLAorICAgICAgICBEZXN0
cm95Q2FudmFzLAorI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBTZXRD
b21wb3NpdGluZ0xheWVyRmlsdGVycywKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAg
IENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0sCisgICAgICAgIFJlbW92ZUN1c3RvbUZpbHRlclBy
b2dyYW0sCisjZW5kaWYKKyNlbmRpZgorICAgICAgICBTZXRMYXllclJlcGFpbnRDb3VudCwKKyAg
ICAgICAgU2V0QmFja2dyb3VuZENvbG9yLAorICAgICAgICBOb25lCisgICAgfTsKKworICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKikgPSAwOworICAgIHZpcnR1YWwg
VGFza1R5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZE9wZXJh
dGlvbigpIHsgfTsKKworcHJvdGVjdGVkOgorICAgIENvb3JkaW5hdGVkT3BlcmF0aW9uKCkgeyB9
Cit9OworCisvLyBUbyBwYXNzIG9wZXJhdGlvbiB2aWEgQ29yZUlQQy4KK2NsYXNzIENvb3JkaW5h
dGVkT3BlcmF0aW9uSG9sZGVyIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRPcGVy
YXRpb24+IG9wZXJhdGlvbjsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkQ3JlYXRlTGF5ZXJzT3Bl
cmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZENyZWF0ZUxheWVyc09wZXJhdGlvbj4gY3JlYXRlKGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ3JlYXRlTGF5ZXJzT3BlcmF0aW9uKGlkcykpOwor
ICAgIH0KKyAgICBleHBsaWNpdCBDb29yZGluYXRlZENyZWF0ZUxheWVyc09wZXJhdGlvbihjb25z
dCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQorICAgICAgICA6IG1faWRzKGlkcykK
KyAgICB7IH0KKworICAgIHZpcnR1YWwgVGFza1R5cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIENyZWF0ZUxheWVyczsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKExheWVyVHJl
ZVJlbmRlcmVyKikgT1ZFUlJJREU7CisKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBt
X2lkczsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkRGVsZXRlTGF5ZXJzT3BlcmF0aW9uIDogcHVi
bGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDb29yZGluYXRlZERlbGV0ZUxheWVyc09wZXJhdGlvbj4gY3JlYXRlKGNvbnN0IFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+JiBpZHMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENvb3JkaW5hdGVkRGVsZXRlTGF5ZXJzT3BlcmF0aW9uKGlkcykpOworICAgIH0KKyAgICBl
eHBsaWNpdCBDb29yZGluYXRlZERlbGV0ZUxheWVyc09wZXJhdGlvbihjb25zdCBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiYgaWRzKQorICAgICAgICA6IG1faWRzKGlkcykKKyAgICB7IH0KKwor
ICAgIHZpcnR1YWwgVGFza1R5cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIERlbGV0
ZUxheWVyczsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKikg
T1ZFUlJJREU7CisKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBtX2lkczsKK307CisK
K2NsYXNzIENvb3JkaW5hdGVkU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXJPcGVyYXRpb24gOiBwdWJs
aWMgQ29vcmRpbmF0ZWRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXJPcGVyYXRpb24+IGNyZWF0ZShDb29y
ZGluYXRlZExheWVySUQgaWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENv
b3JkaW5hdGVkU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXJPcGVyYXRpb24oaWQpKTsKKyAgICB9Cisg
ICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRTZXRSb290Q29tcG9zaXRpbmdMYXllck9wZXJhdGlvbihD
b29yZGluYXRlZExheWVySUQgaWQpCisgICAgICAgIDogbV9sYXllcklEKGlkKQorICAgIHsgfQor
CisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShMYXllclRy
ZWVSZW5kZXJlciopIE9WRVJSSURFOworCisgICAgQ29vcmRpbmF0ZWRMYXllcklEIG1fbGF5ZXJJ
RDsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkU3luY0xheWVyU3RhdGVPcGVyYXRpb24gOiBwdWJs
aWMgQ29vcmRpbmF0ZWRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkU3luY0xheWVyU3RhdGVPcGVyYXRpb24+IGNyZWF0ZShDb29yZGluYXRlZExh
eWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkU3luY0xheWVyU3RhdGVPcGVy
YXRpb24oaWQsIGxheWVySW5mbykpOworICAgIH0KKyAgICBDb29yZGluYXRlZFN5bmNMYXllclN0
YXRlT3BlcmF0aW9uKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXll
ckluZm8mIGxheWVySW5mbykKKyAgICAgICAgOiBtX2xheWVySUQoaWQpCisgICAgICAgICwgbV9s
YXllckluZm8obGF5ZXJJbmZvKQorICAgIHsgfQorCisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBl
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU3luY0xheWVyU3RhdGU7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciopIE9WRVJSSURFOworCisgICAgQ29vcmRp
bmF0ZWRMYXllcklEIG1fbGF5ZXJJRDsKKyAgICBDb29yZGluYXRlZExheWVySW5mbyBtX2xheWVy
SW5mbzsKK307CisKKworY2xhc3MgQ29vcmRpbmF0ZWRTZXRMYXllckNoaWxkcmVuT3BlcmF0aW9u
IDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDb29yZGluYXRlZFNldExheWVyQ2hpbGRyZW5PcGVyYXRpb24+IGNyZWF0ZShDb29y
ZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGls
ZHJlbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRTZXRM
YXllckNoaWxkcmVuT3BlcmF0aW9uKGlkLCBjaGlsZHJlbikpOworICAgIH0KKyAgICBDb29yZGlu
YXRlZFNldExheWVyQ2hpbGRyZW5PcGVyYXRpb24oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25z
dCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCisgICAgICAgIDogbV9sYXll
cklEKGlkKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAgeyB9CisKKyAgICB2
aXJ0dWFsIFRhc2tUeXBlIHR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTZXRMYXllckNo
aWxkcmVuOyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIqKSBP
VkVSUklERTsKKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX2xheWVySUQ7CisgICAgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9jaGlsZHJlbjsKK307CisKK2NsYXNzIENvb3JkaW5hdGVk
Q3JlYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZENyZWF0ZVRpbGVG
b3JMYXllck9wZXJhdGlvbj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENvb3JkaW5hdGVkQ3JlYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uKGlkLCB0aWxlSUQsIHRpbGVS
ZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgfQorICAgIENvb3JkaW5hdGVkQ3JlYXRlVGlsZUZvckxh
eWVyT3BlcmF0aW9uKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgdGlsZUlELCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCisgICAgICAgIDogbV9sYXllcklEKGlkKQorICAgICAgICAsIG1fdGlsZUlEKHRp
bGVJRCkKKyAgICAgICAgLCBtX3RpbGVSZWN0KHRpbGVSZWN0KQorICAgICAgICAsIG1fdXBkYXRl
SW5mbyh1cGRhdGVJbmZvKQorICAgIHsgfQorCisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ3JlYXRlVGlsZUZvckxheWVyOyB9CisgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIqKSBPVkVSUklERTsKKworICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBtX2xheWVySUQ7CisgICAgdWludDMyX3QgbV90aWxlSUQ7CisgICAgV2Vi
Q29yZTo6SW50UmVjdCBtX3RpbGVSZWN0OworICAgIFN1cmZhY2VVcGRhdGVJbmZvIG1fdXBkYXRl
SW5mbzsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkVXBkYXRlVGlsZUZvckxheWVyT3BlcmF0aW9u
IDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDb29yZGluYXRlZFVwZGF0ZVRpbGVGb3JMYXllck9wZXJhdGlvbj4gY3JlYXRlKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkVXBkYXRlVGlsZUZvckxh
eWVyT3BlcmF0aW9uKGlkLCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgfQor
ICAgIENvb3JkaW5hdGVkVXBkYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAgICAgIDogbV9sYXll
cklEKGlkKQorICAgICAgICAsIG1fdGlsZUlEKHRpbGVJRCkKKyAgICAgICAgLCBtX3RpbGVSZWN0
KHRpbGVSZWN0KQorICAgICAgICAsIG1fdXBkYXRlSW5mbyh1cGRhdGVJbmZvKQorICAgIHsgfQor
CisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gVXBk
YXRlVGlsZUZvckxheWVyOyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoTGF5ZXJUcmVlUmVu
ZGVyZXIqKSBPVkVSUklERTsKKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX2xheWVySUQ7Cisg
ICAgdWludDMyX3QgbV90aWxlSUQ7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3RpbGVSZWN0Owor
ICAgIFN1cmZhY2VVcGRhdGVJbmZvIG1fdXBkYXRlSW5mbzsKK307CisKK2NsYXNzIENvb3JkaW5h
dGVkUmVtb3ZlVGlsZUZvckxheWVyT3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0
aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZFJlbW92ZVRp
bGVGb3JMYXllck9wZXJhdGlvbj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMy
X3QgdGlsZUlEKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRl
ZFJlbW92ZVRpbGVGb3JMYXllck9wZXJhdGlvbihpZCwgdGlsZUlEKSk7CisgICAgfQorICAgIENv
b3JkaW5hdGVkUmVtb3ZlVGlsZUZvckxheWVyT3BlcmF0aW9uKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgdWludDMyX3QgdGlsZUlEKQorICAgICAgICA6IG1fbGF5ZXJJRChpZCkKKyAgICAgICAgLCBt
X3RpbGVJRCh0aWxlSUQpCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFRhc2tUeXBlIHR5cGUoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBSZW1vdmVUaWxlRm9yTGF5ZXI7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciopIE9WRVJSSURFOworCisgICAgQ29vcmRp
bmF0ZWRMYXllcklEIG1fbGF5ZXJJRDsKKyAgICB1aW50MzJfdCBtX3RpbGVJRDsKK307CisKK2Ns
YXNzIENvb3JkaW5hdGVkQ3JlYXRlVXBkYXRlQXRsYXNPcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRp
bmF0ZWRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkQ3JlYXRlVXBkYXRlQXRsYXNPcGVyYXRpb24+IGNyZWF0ZSh1aW50MzJfdCBpZCwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ3JlYXRlVXBkYXRlQXRsYXNPcGVyYXRpb24oaWQsIHN1
cmZhY2UpKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRDcmVhdGVVcGRhdGVBdGxhc09wZXJhdGlv
bih1aW50MzJfdCBpZCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisg
ICAgICAgIDogbV9hdGxhc0lEKGlkKQorICAgICAgICAsIG1fc3VyZmFjZShzdXJmYWNlKQorICAg
IHsgfQorCisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gQ3JlYXRlVXBkYXRlQXRsYXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShMYXllclRy
ZWVSZW5kZXJlciopIE9WRVJSSURFOworCisgICAgdWludDMyX3QgbV9hdGxhc0lEOworICAgIFJl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK2NsYXNzIENvb3JkaW5h
dGVkUmVtb3ZlVXBkYXRlQXRsYXNPcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRpbmF0ZWRPcGVyYXRp
b24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkUmVtb3ZlVXBk
YXRlQXRsYXNPcGVyYXRpb24+IGNyZWF0ZSh1aW50MzJfdCBpZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRSZW1vdmVVcGRhdGVBdGxhc09wZXJhdGlvbihp
ZCkpOworICAgIH0KKyAgICBleHBsaWNpdCBDb29yZGluYXRlZFJlbW92ZVVwZGF0ZUF0bGFzT3Bl
cmF0aW9uKHVpbnQzMl90IGlkKQorICAgICAgICA6IG1fYXRsYXNJRChpZCkKKyAgICB7IH0KKwor
ICAgIHZpcnR1YWwgVGFza1R5cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFJlbW92
ZVVwZGF0ZUF0bGFzOyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVy
ZXIqKSBPVkVSUklERTsKKworICAgIHVpbnQzMl90IG1fYXRsYXNJRDsKK307CisKK2NsYXNzIENv
b3JkaW5hdGVkQ3JlYXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVk
T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZENy
ZWF0ZUltYWdlQmFja2luZ09wZXJhdGlvbj4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ3Jl
YXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uKGlkKSk7CisgICAgfQorICAgIGV4cGxpY2l0IENvb3Jk
aW5hdGVkQ3JlYXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaWQpCisgICAgICAgIDogbV9pZChpZCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgVGFza1R5
cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENyZWF0ZUltYWdlQmFja2luZzsgfQor
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKikgT1ZFUlJJREU7CisK
KyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIG1faWQ7Cit9OworCitjbGFzcyBDb29yZGlu
YXRlZFVwZGF0ZUltYWdlQmFja2luZ09wZXJhdGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJh
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRVcGRhdGVJ
bWFnZUJhY2tpbmdPcGVyYXRpb24+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlk
LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRVcGRhdGVJbWFnZUJhY2tpbmdPcGVyYXRp
b24oaWQsIHN1cmZhY2UpKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRVcGRhdGVJbWFnZUJhY2tp
bmdPcGVyYXRpb24oQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisgICAgICAgIDogbV9pZChpZCkKKyAgICAgICAgLCBt
X3N1cmZhY2Uoc3VyZmFjZSkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgVGFza1R5cGUgdHlwZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFVwZGF0ZUltYWdlQmFja2luZzsgfQorICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKikgT1ZFUlJJREU7CisKKyAgICBDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIG1faWQ7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFj
ZT4gbV9zdXJmYWNlOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRDbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzT3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZENsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHNPcGVyYXRpb24+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZENsZWFySW1hZ2VCYWNraW5n
Q29udGVudHNPcGVyYXRpb24oaWQpKTsKKyAgICB9CisgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRD
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzT3BlcmF0aW9uKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaWQpCisgICAgICAgIDogbV9pZChpZCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgVGFza1R5
cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShMYXllclRyZWVSZW5kZXJlciopIE9WRVJS
SURFOworCisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBtX2lkOworfTsKKworY2xhc3Mg
Q29vcmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRpbmF0
ZWRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVk
UmVtb3ZlSW1hZ2VCYWNraW5nT3BlcmF0aW9uPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRS
ZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRpb24oaWQpKTsKKyAgICB9CisgICAgZXhwbGljaXQgQ29v
cmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRpb24oQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpZCkKKyAgICAgICAgOiBtX2lkKGlkKQorICAgIHsgfQorCisgICAgdmlydHVhbCBUYXNr
VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gUmVtb3ZlSW1hZ2VCYWNraW5nOyB9
CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIqKSBPVkVSUklERTsK
KworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgbV9pZDsKK307CisKK2NsYXNzIENvb3Jk
aW5hdGVkU2V0TGF5ZXJBbmltYXRpb25zT3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3Bl
cmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZFNldExh
eWVyQW5pbWF0aW9uc09wZXJhdGlvbj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkU2V0TGF5ZXJBbmltYXRpb25z
T3BlcmF0aW9uKGlkLCBhbmltYXRpb25zKSk7CisgICAgfQorICAgIENvb3JkaW5hdGVkU2V0TGF5
ZXJBbmltYXRpb25zT3BlcmF0aW9uKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCisgICAgICAgIDogbV9sYXll
cklEKGlkKQorICAgICAgICAsIG1fYW5pbWF0aW9ucyhhbmltYXRpb25zKQorICAgIHsgfQorCisg
ICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU2V0TGF5
ZXJBbmltYXRpb25zOyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVy
ZXIqKSBPVkVSUklERTsKKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX2xheWVySUQ7CisgICAg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOworfTsKKworY2xh
c3MgQ29vcmRpbmF0ZWRTZXRBbmltYXRpb25zTG9ja2VkT3BlcmF0aW9uIDogcHVibGljIENvb3Jk
aW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZFNldEFuaW1hdGlvbnNMb2NrZWRPcGVyYXRpb24+IGNyZWF0ZShib29sIGxvY2tlZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRTZXRBbmltYXRpb25z
TG9ja2VkT3BlcmF0aW9uKGxvY2tlZCkpOworICAgIH0KKyAgICBleHBsaWNpdCBDb29yZGluYXRl
ZFNldEFuaW1hdGlvbnNMb2NrZWRPcGVyYXRpb24oYm9vbCBsb2NrZWQpCisgICAgICAgIDogbV9s
b2NrZWQobG9ja2VkKQorICAgIHsgfQorCisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gU2V0QW5pbWF0aW9uc0xvY2tlZDsgfQorICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKikgT1ZFUlJJREU7CisKKyAgICBib29sIG1f
bG9ja2VkOworfTsKKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKK2NsYXNz
IENvb3JkaW5hdGVkUmVxdWVzdEFuaW1hdGlvbkZyYW1lT3BlcmF0aW9uIDogcHVibGljIENvb3Jk
aW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZFJlcXVlc3RBbmltYXRpb25GcmFtZU9wZXJhdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVP
cGVyYXRpb24oKSk7CisgICAgfQorICAgIENvb3JkaW5hdGVkUmVxdWVzdEFuaW1hdGlvbkZyYW1l
T3BlcmF0aW9uKCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgVGFza1R5cGUgdHlwZSgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIFJlcXVlc3RBbmltYXRpb25GcmFtZTsgfQorICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKikgT1ZFUlJJREU7Cit9OworI2VuZGlmCisK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK2NsYXNzIENvb3JkaW5hdGVkQ3JlYXRlQ2FudmFz
T3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZENyZWF0ZUNhbnZhc09wZXJhdGlvbj4gY3JlYXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZENyZWF0ZUNhbnZhc09wZXJhdGlvbihpZCwg
c2l6ZSwgdG9rZW4pKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRDcmVhdGVDYW52YXNPcGVyYXRp
b24oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBj
b25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCisgICAgICAgIDogbV9s
YXllcklEKGlkKQorICAgICAgICAsIG1fY2FudmFzU2l6ZShzaXplKQorICAgICAgICAsIG1fdG9r
ZW4odG9rZW4pCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFRhc2tUeXBlIHR5cGUoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBDcmVhdGVDYW52YXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZShMYXllclRyZWVSZW5kZXJlciopIE9WRVJSSURFOworCisgICAgQ29vcmRpbmF0ZWRMYXllcklE
IG1fbGF5ZXJJRDsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fY2FudmFzU2l6ZTsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiBtX3Rva2VuOworfTsKKworY2xhc3MgQ29vcmRpbmF0
ZWRTeW5jQ2FudmFzT3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN5bmNDYW52YXNPcGVyYXRp
b24+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZFN5bmNDYW52YXNP
cGVyYXRpb24oaWQsIGZyb250QnVmZmVyKSk7CisgICAgfQorICAgIENvb3JkaW5hdGVkU3luY0Nh
bnZhc09wZXJhdGlvbihDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVy
KQorICAgICAgICA6IG1fbGF5ZXJJRChpZCkKKyAgICAgICAgLCBtX2Zyb250QnVmZmVyKGZyb250
QnVmZmVyKQorICAgIHsgfQorCisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gU3luY0NhbnZhczsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKExh
eWVyVHJlZVJlbmRlcmVyKikgT1ZFUlJJREU7CisKKyAgICBDb29yZGluYXRlZExheWVySUQgbV9s
YXllcklEOworICAgIHVpbnQzMl90IG1fZnJvbnRCdWZmZXI7Cit9OworCitjbGFzcyBDb29yZGlu
YXRlZERlc3Ryb3lDYW52YXNPcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRpbmF0ZWRPcGVyYXRpb24g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkRGVzdHJveUNhbnZh
c09wZXJhdGlvbj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWREZXN0cm95Q2FudmFzT3BlcmF0aW9uKGlk
KSk7CisgICAgfQorICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkRGVzdHJveUNhbnZhc09wZXJhdGlv
bihDb29yZGluYXRlZExheWVySUQgaWQpCisgICAgICAgIDogbV9sYXllcklEKGlkKQorICAgIHsg
fQorCisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
RGVzdHJveUNhbnZhczsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKExheWVyVHJlZVJlbmRl
cmVyKikgT1ZFUlJJREU7CisKKyAgICBDb29yZGluYXRlZExheWVySUQgbV9sYXllcklEOworfTsK
KyNlbmRpZgorCisKKworCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorY2xhc3MgQ29vcmRpbmF0
ZWRTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVyc09wZXJhdGlvbiA6IHB1YmxpYyBDb29yZGluYXRl
ZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRT
ZXRDb21wb3NpdGluZ0xheWVyRmlsdGVyc09wZXJhdGlvbj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRTZXRDb21wb3NpdGluZ0xh
eWVyRmlsdGVyc09wZXJhdGlvbihpZCwgZmlsdGVycykpOworICAgIH0KKyAgICBDb29yZGluYXRl
ZFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzT3BlcmF0aW9uKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKKyAgICAgICAgOiBt
X2xheWVySUQoaWQpCisgICAgICAgICwgbV9maWx0ZXJzKGZpbHRlcnMpCisgICAgeyB9CisKKyAg
ICB2aXJ0dWFsIFRhc2tUeXBlIHR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTZXRDb21w
b3NpdGluZ0xheWVyRmlsdGVyczsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKExheWVyVHJl
ZVJlbmRlcmVyKikgT1ZFUlJJREU7CisKKyAgICBDb29yZGluYXRlZExheWVySUQgbV9sYXllcklE
OworICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOworfTsKKworI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKK2NsYXNzIENvb3JkaW5hdGVkQ3JlYXRlQ3VzdG9tRmlsdGVyUHJv
Z3JhbU9wZXJhdGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFt
T3BlcmF0aW9uPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRCwgY29uc3QgV2ViQ29y
ZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1P
cGVyYXRpb24oY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBwcm9ncmFtSW5mbykpOworICAgIH0KKyAg
ICBDb29yZGluYXRlZENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb24oaW50IGN1c3Rv
bUZpbHRlclByb2dyYW1JRCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8m
IHByb2dyYW1JbmZvKQorICAgICAgICA6IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKGN1c3RvbUZp
bHRlclByb2dyYW1JRCkKKyAgICAgICAgLCBtX3Byb2dyYW1JbmZvKHByb2dyYW1JbmZvKQorICAg
IHsgfQorCisgICAgdmlydHVhbCBUYXNrVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbTsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
KExheWVyVHJlZVJlbmRlcmVyKikgT1ZFUlJJREU7CisKKyAgICBpbnQgbV9jdXN0b21GaWx0ZXJQ
cm9ncmFtSUQ7CisgICAgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gbV9wcm9ncmFt
SW5mbzsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbU9w
ZXJhdGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtT3BlcmF0
aW9uPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtT3Bl
cmF0aW9uKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpOworICAgIH0KKyAgICBleHBsaWNpdCBDb29y
ZGluYXRlZFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb24oaW50IGN1c3RvbUZpbHRl
clByb2dyYW1JRCkKKyAgICAgICAgOiBtX2N1c3RvbUZpbHRlclByb2dyYW1JRChjdXN0b21GaWx0
ZXJQcm9ncmFtSUQpCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIFRhc2tUeXBlIHR5cGUoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtOyB9CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGUoTGF5ZXJUcmVlUmVuZGVyZXIqKSBPVkVSUklERTsKKworICAgIGlu
dCBtX2N1c3RvbUZpbHRlclByb2dyYW1JRDsKK307CisjZW5kaWYKKyNlbmRpZgorCitjbGFzcyBD
b29yZGluYXRlZFNldExheWVyUmVwYWludENvdW50T3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5h
dGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZFNldExheWVyUmVwYWludENvdW50T3BlcmF0aW9uPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBpbnQgcmVwYWludENvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDb29yZGluYXRlZFNldExheWVyUmVwYWludENvdW50T3BlcmF0aW9uKGlkLCByZXBhaW50Q291
bnQpKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRTZXRMYXllclJlcGFpbnRDb3VudE9wZXJhdGlv
bihDb29yZGluYXRlZExheWVySUQgaWQsIGludCByZXBhaW50Q291bnQpCisgICAgICAgIDogbV9s
YXllcklEKGlkKQorICAgICAgICAsIG1fcmVwYWludENvdW50KHJlcGFpbnRDb3VudCkKKyAgICB7
IH0KKworICAgIHZpcnR1YWwgVGFza1R5cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IFNldExheWVyUmVwYWludENvdW50OyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoTGF5ZXJU
cmVlUmVuZGVyZXIqKSBPVkVSUklERTsKKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX2xheWVy
SUQ7CisgICAgaW50IG1fcmVwYWludENvdW50OworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRTZXRC
YWNrZ3JvdW5kQ29sb3JPcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRpbmF0ZWRPcGVyYXRpb24gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU2V0QmFja2dyb3VuZENv
bG9yT3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZFNldEJhY2tncm91bmRDb2xv
ck9wZXJhdGlvbihjb2xvcikpOworICAgIH0KKyAgICBleHBsaWNpdCBDb29yZGluYXRlZFNldEJh
Y2tncm91bmRDb2xvck9wZXJhdGlvbihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCisgICAg
ICAgIDogbV9jb2xvcihjb2xvcikKKyAgICB7IH0KKworICAgIHZpcnR1YWwgVGFza1R5cGUgdHlw
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFNldEJhY2tncm91bmRDb2xvcjsgfQorICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlKExheWVyVHJlZVJlbmRlcmVyKikgT1ZFUlJJREU7CisKKyAgICBX
ZWJDb3JlOjpDb2xvciBtX2NvbG9yOworfTsKKworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBDb29y
ZGluYXRlZE9wZXJhdGlvbl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL1N1cmZhY2VVcGRhdGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9TdXJmYWNlVXBkYXRlSW5mby5oCmluZGV4IDI3Mjg5
ZmNkZjBmZmI5ZmVlMDZlMDQ0MTk4NDgzMTcwZjgzMmZiMjkuLjBkYWVlMTVlNDY4MmVlZDM0ZTU0
MjY4YjhjMzRhNWE5NjBlOWRjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL1N1cmZhY2VVcGRhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUluZm8uaApAQCAtMjMs
MTMgKzIzLDEwIEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbyB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU3VyZmFjZVVwZGF0ZUluZm8pOwotCiBwdWJsaWM6CiAgICAgU3VyZmFjZVVw
ZGF0ZUluZm8oKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggOTZhYzc4YjU3ODdkNWQyMTQ5N2FjMDEw
N2IzMjk2MGY0ODhkNzFhZC4uZGE5OWU3OWU0NmI1ZTVkMmY5ZjY5OTBhZDg4YzM4OWU1NDNiY2Y1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCkBAIC0xMzksNiArMTM5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hh
cmVkL1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBcCiAgICAgU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllckluZm8uaCBcCisgICAgU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRPcGVyYXRpb24uaCBcCiAgICAgU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRTdXJmYWNlLmggXAogICAgIFNoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL1N1cmZhY2VVcGRhdGVJbmZvLmggXAogICAgIFNoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5oIFwKQEAgLTUxNSw2ICs1MTYs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBTaGFyZWQvV2ViVVJMUmVzcG9uc2UuY3BwIFwKICAgICBT
aGFyZWQvV2ViV2hlZWxFdmVudC5jcHAgXAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgXAorICAgIFNoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkT3BlcmF0aW9uLmNwcCBcCiAgICAgU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBcCiAgICAgU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LmNwcCBcCiAg
ICAgU2hhcmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAppbmRleCBkMTU0YjEzYzE5NDRk
NjM1MmUwYWYyOTVjYTcwNTcyOWZiMTMzMTc0Li5hNzQ1N2U1Yjc2ZmY3NTc1OGIyYTY3ZjkxNTcz
YTJkYjljNDYxYTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuY3BwCkBAIC0yMiwxNyArMjIsMTIgQEAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIK
IAotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZE9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KLQot
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtSW5m
by5oIgotI2VuZGlmCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKQEAgLTY1LDc4ICs2MCwyMiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdAogICAg
IG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZSwgbV9y
ZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7
Ci0gICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0
ZUluZm8pOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVU
aWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8m
IHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVy
ZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgTGF5ZXJU
cmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0aWxlUmVjdCwg
dXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdl
dCgpLCBsYXllcklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVXBkYXRlQXRsYXMsIG1fcmVuZGVyZXIuZ2V0
KCksIGF0bGFzSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6cmVtb3ZlVXBkYXRlQXRsYXMsIG1fcmVuZGVyZXIuZ2V0KCksIGF0bGFzSUQpKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ29tcG9zaXRp
bmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlkcykKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXJzLCBtX3Jl
bmRlcmVyLmdldCgpLCBpZHMpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4mIGlkcykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6ZGVsZXRlTGF5ZXJzLCBtX3JlbmRlcmVyLmdldCgpLCBpZHMpKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRp
bmF0ZWRMYXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRSb290TGF5ZXJJRCwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllclN0YXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8p
Cit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjplbnF1ZXVlQ29vcmRpbmF0ZWRP
cGVyYXRpb24oQ29vcmRpbmF0ZWRPcGVyYXRpb25Ib2xkZXIgaG9sZGVyKQogewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRl
cmVyLmdldCgpLCBpZCwgaW5mbykpOwotfQorICAgIHN3aXRjaCAoaG9sZGVyLm9wZXJhdGlvbi0+
dHlwZSgpKSB7CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlv
bkZyYW1lOgorICAgICAgICB1cGRhdGVWaWV3cG9ydCgpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVy
SUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJl
biwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGNoaWxkcmVuKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmVucXVldWVDb29yZGluYXRlZE9wZXJhdGlvbiwgbV9y
ZW5kZXJlci5nZXQoKSwgaG9sZGVyLm9wZXJhdGlvbikpOwogfQogCi0jaWYgRU5BQkxFKENTU19G
SUxURVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRp
bmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpzZXRMYXllckZpbHRlcnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBmaWx0ZXJzKSk7Ci19
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQotewotICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOwotfQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0
IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVy
UHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7Ci19Ci0jZW5kaWYK
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBjb3ZlcmVkUmVjdCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1p
dENvb3JkaW5hdGVkT3BlcmF0aW9ucyhjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1Np
emUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQogewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5k
ZXJlci5nZXQoKSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
Ojpjb21taXRDb29yZGluYXRlZE9wZXJhdGlvbnMsIG1fcmVuZGVyZXIuZ2V0KCkpKTsKICAgICB1
cGRhdGVWaWV3cG9ydCgpOwogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIG1fZHJh
d2luZ0FyZWFQcm94eS0+cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVy
ZWRSZWN0KTsKQEAgLTE0Niw0MSArODUsMTEgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGUKICNl
bmRpZgogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZUJhY2tpbmcsIG1f
cmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlSW1hZ2VC
YWNraW5nLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6
OmNyZWF0ZShoYW5kbGUpKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpj
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlEKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUltYWdlQmFja2lu
ZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUltYWdlQmFja2luZywgbV9yZW5kZXJl
ci5nZXQoKSwgaW1hZ2VJRCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUpCiB7CiAg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6
ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVy
SUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlv
bnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQp
Ci17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEFuaW1h
dGlvbnNMb2NrZWQsIG1fcmVuZGVyZXIuZ2V0KCksIGxvY2tlZCkpOwotfQotCiB2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiB0
cmFqZWN0b3J5VmVjdG9yKQogewogICAgIC8vIEluZm9ybSB0aGUgcmVuZGVyZXIgdG8gYWRqdXN0
IHZpZXdwb3J0LWZpeGVkIGxheWVycy4KQEAgLTIwNCw1MCArMTEzLDE2IEBAIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgpCiB9CiAKICNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIG1fcmVuZGVyZXIu
Z2V0KCkpKTsKLSAgICB1cGRhdGVWaWV3cG9ydCgpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjphbmltYXRpb25GcmFtZVJlYWR5KCkKIHsKICAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OkFuaW1hdGlvbkZyYW1lUmVhZHkoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5w
YWdlKCktPnBhZ2VJRCgpKTsKIH0KICNlbmRpZgogCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBjb25zdCBHcmFwaGlj
c1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJm
YWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBo
aWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxh
eWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjYW52
YXNTaXplLCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjYW52YXNTaXplLCBzdXJmYWNlRmxhZ3Ms
IHRva2VuKSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5j
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMsIG1f
cmVuZGVyZXIuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUNh
bnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0KLSNlbmRpZgotCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExh
eWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6c2V0TGF5ZXJSZXBhaW50Q291bnQsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCB2
YWx1ZSkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUJh
Y2tpbmdTdG9yZXMoKQogewogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5n
U3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEJhY2tncm91bmRDb2xvcihjb25z
dCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OnNldEJhY2tncm91bmRDb2xvciwgbV9yZW5kZXJlci5nZXQoKSwgY29s
b3IpKTsKLX0KLQogfQogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCmluZGV4IDEx
YTU3NmZjZTBmMWI0ZTQ5YTFjNDIxNjBiNjlkMmEyMWI3MmU2MzguLjU1MGNmZGZlMTk0MDg0ZWQx
MDdjZTVjMjA5NjZlMGQ4MDZmZjhlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaApAQCAtMjYsMjQgKzI2LDEyIEBACiAjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCi0jaW5jbHVkZSAi
UmVnaW9uLmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJD
b29yZGluYXRlZFN1cmZhY2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJm
YWNlVG9rZW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFNpemUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3MgQ29vcmRpbmF0ZWRPcGVy
YXRpb25Ib2xkZXI7CiBjbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKIAogY2xhc3MgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgewpAQCAtNTIsNDggKzQwLDE4IEBAIGNsYXNzIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7CiAgICAgfkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUo
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHZv
aWQgc2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0g
ICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKLSAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25z
dCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwotI2VuZGlmCi0gICAgdm9pZCBjcmVhdGVDb21wb3Np
dGluZ0xheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQg
ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4m
KTsKLSAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7
CisgICAgdm9pZCBlbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRPcGVyYXRp
b25Ib2xkZXIpOworICAgIHZvaWQgY29tbWl0Q29vcmRpbmF0ZWRPcGVyYXRpb25zKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292
ZXJlZFJlY3QpOwogICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpOwotICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3Zl
cmVkUmVjdCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1
aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwot
ICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCB1
cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCByZW1vdmVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBD
b3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdm9pZCB1
cGRhdGVWaWV3cG9ydCgpOwogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0jaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNl
VG9rZW4mKTsKLSAgICB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJf
dCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5
ZXJJRCwgaW50IHZhbHVlKTsKICAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwogICAgIExh
eWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyZXIuZ2V0KCk7IH0KLSAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Ci0gICAgdm9p
ZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwogICAgIHZvaWQgYW5p
bWF0aW9uRnJhbWVSZWFkeSgpOwogI2VuZGlmCi0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKIAogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KaW5kZXggODE4ZjNhZThlYWY3MTM0Zjc1MzhjMjVh
MzZmM2U0ZTQ3ZDU5YzQzOS4uOWEwYmE2ODYzZDVhMWIwOTg5MTI4YTYyODJmY2MwNTk3NmY2YTU0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KQEAgLTE5LDQzICsxOSw3IEBACiAKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCiBtZXNzYWdlcyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eSBMZWdhY3lSZWNlaXZlciB7Ci0gICAgU2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVpbnQz
Ml90IGlkLCBXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5mbykKLSAgICBTZXRD
b21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3QgaWQsIFZlY3Rvcjx1aW50MzJfdD4gY2hp
bGRyZW4pCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJG
aWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMpCi0j
ZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJv
Z3JhbShpbnQgaWQsIFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZv
KQotICAgIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQotI2VuZGlmCi0gICAgU2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCi0gICAgQ3JlYXRlQ29tcG9zaXRpbmdM
YXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcnMo
VmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0
OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1
aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJl
Y3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxl
Rm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotICAgIENyZWF0ZVVw
ZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpIYW5kbGUgaGFuZGxlKQotICAgIFJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQp
Ci0gICAgQ3JlYXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCi0gICAgVXBkYXRlSW1h
Z2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpIYW5kbGUgaGFuZGxlKQotICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHModWludDY0X3Qg
aW1hZ2VJRCkKLSAgICBSZW1vdmVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkKLSAgICBE
aWRSZW5kZXJGcmFtZShXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50
UmVjdCBjb3ZlcmVkUmVjdCkKLSAgICBTZXRMYXllckFuaW1hdGlvbnModWludDMyX3QgaWQsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnMpCi0gICAgU2V0QW5pbWF0
aW9uc0xvY2tlZChib29sIGxvY2tlZCkKLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKLSAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotI2VuZGlmCi0KLSNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLSAgICBDcmVhdGVDYW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6Oklu
dFNpemUgY2FudmFzU2l6ZSwgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4pCi0g
ICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi0gICAgRGVz
dHJveUNhbnZhcyh1aW50MzJfdCBpZCkKLSNlbmRpZgotCi0gICAgU2V0TGF5ZXJSZXBhaW50Q291
bnQodWludDMyX3QgbGF5ZXJJRCwgaW50IHZhbHVlKQotCi0gICAgU2V0QmFja2dyb3VuZENvbG9y
KFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorICAgIEVucXVldWVDb29yZGluYXRlZE9wZXJhdGlvbihX
ZWJLaXQ6OkNvb3JkaW5hdGVkT3BlcmF0aW9uSG9sZGVyIGhvbGRlcikKKyAgICBDb21taXRDb29y
ZGluYXRlZE9wZXJhdGlvbnMoV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUsIFdlYkNvcmU6
OkludFJlY3QgY292ZXJlZFJlY3QpCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJl
bmRlcmVyLmNwcAppbmRleCBiNzRlNjkwYjZiOGFiZmViYzI1ZTliNjU5NDkyOWExZWFhYjRkZWY4
Li4wODhjZGRjYTI1NDViZmJkYmIzODBlNDdhYTc5NmZlMWIwNDM5MjNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5k
ZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJD
b29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRPcGVyYXRpb24uaCIKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKQEAgLTIxOSw2ICsyMjAsMTEgQEAgdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pCiAgICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0g
cG9zaXRpb247CiB9CiAKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmVucXVldWVDb29yZGluYXRl
ZE9wZXJhdGlvbihQYXNzUmVmUHRyPENvb3JkaW5hdGVkT3BlcmF0aW9uPiBvcGVyYXRpb24pCit7
CisgICAgbV9vcGVyYXRpb25zLmFwcGVuZChvcGVyYXRpb24pOworfQorCiAjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgUGFzc1JlZlB0cjxHcmFw
aGljc1N1cmZhY2U+IHN1cmZhY2UpCiB7CkBAIC01NjMsOCArNTY5LDEyIEBAIHZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCkKICAgICBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKIH0KIAotdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQordm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6Y29tbWl0Q29vcmRpbmF0ZWRPcGVyYXRpb25zKCkKIHsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fb3BlcmF0aW9ucy5zaXplKCk7IGkrKykKKyAgICAgICAgbV9vcGVyYXRpb25zW2ld
LT5leGVjdXRlKHRoaXMpOworICAgIG1fb3BlcmF0aW9ucy5jbGVhcigpOworCiAgICAgbV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Ny
b2xsUG9zaXRpb247CiAKICAgICAvLyBTaW5jZSB0aGUgZnJhbWUgaGFzIG5vdyBiZWVuIHJlbmRl
cmVkLCB3ZSBjYW4gc2FmZWx5IHVubG9jayB0aGUgYW5pbWF0aW9ucyB1bnRpbCB0aGUgbmV4dCBs
YXlvdXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRleCAzN2FjZmIzYTM2OTI4
NTExMmI5OWM4ZTQxOTZiMjAyOTBhMGE2M2VlLi4yYzMxYTQwM2Q0ZmRiYmZjNzkwZThiZjJjMjI2
YWZhYjFjMjllNzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTUwLDYg
KzUwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZTsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OwogY2xhc3MgQ29vcmRpbmF0
ZWRMYXllckluZm87CitjbGFzcyBDb29yZGluYXRlZE9wZXJhdGlvbjsKIAogY2xhc3MgTGF5ZXJU
cmVlUmVuZGVyZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5ZXJUcmVlUmVuZGVy
ZXI+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CkBAIC04
OCwxMSArODksMTMgQEAgcHVibGljOgogICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOwogICAg
IHZvaWQgc2V0QWN0aXZlKGJvb2wpOwogCisgICAgdm9pZCBlbnF1ZXVlQ29vcmRpbmF0ZWRPcGVy
YXRpb24oUGFzc1JlZlB0cjxDb29yZGluYXRlZE9wZXJhdGlvbj4pOworICAgIHZvaWQgY29tbWl0
Q29vcmRpbmF0ZWRPcGVyYXRpb25zKCk7CiAgICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVj
dG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBW
ZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwogICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29v
cmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwogICAgIHZvaWQgc2V0
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
Jik7CisgICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAg
ICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zJik7CiAjZW5kaWYKQEAgLTEwNyw3ICsxMTAsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBUaWxlVXBkYXRlJik7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJf
dCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwogICAgIHZvaWQgcmVt
b3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBmbHVzaExheWVyQ2hh
bmdlcygpOwogICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpOwogICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPik7CiAgICAgdm9pZCBjbGVhcklt
YWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwpAQCAtMTkzLDYg
KzE5NSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQWN0aXZlOwogCiAgICAgT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxDb29yZGluYXRlZE9wZXJhdGlvbj4gPiBDb29yZGluYXRlZE9wZXJhdGlvbnM7CisgICAg
Q29vcmRpbmF0ZWRPcGVyYXRpb25zIG1fb3BlcmF0aW9uczsKIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxDb29yZGluYXRlZExheWVySUQsIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiA+IExh
eWVyTWFwOwogICAgIExheWVyTWFwIG1fbGF5ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggNWQyM2IyNTE3
ZDJlNTQ4MmQ4ZmYzYTc5NGMwMDJlMjA2NGMxNGY3Zi4uMTM4NWNmMzYyYTgwYzc1NjY0YTE4Mzdl
ZWNiNGU5MzNmNGQ4MDE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNs
dWRlICJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRPcGVyYXRpb24uaCIKICNpbmNs
dWRlICJDb29yZGluYXRlZFRpbGUuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgpAQCAtNTA1LDcgKzUwNiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzeW5jQ2hpbGRyZW4oKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4o
KS5zaXplKCk7ICsraSkKICAgICAgICAgY2hpbGRJRHMuYXBwZW5kKHRvQ29vcmRpbmF0ZWRMYXll
cklEKGNoaWxkcmVuKClbaV0pKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllckNoaWxk
cmVuKG1faWQsIGNoaWxkSURzKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0
ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRTZXRMYXllckNoaWxkcmVuT3BlcmF0aW9uOjpjcmVhdGUo
bV9pZCwgY2hpbGRJRHMpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTUxNCw3
ICs1MTUsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRlcnMoKQog
ICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2hv
dWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJGaWx0
ZXJzKG1faWQsIGZpbHRlcnMoKSk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5h
dGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnNPcGVyYXRp
b246OmNyZWF0ZShtX2lkLCBmaWx0ZXJzKCkpKTsKIH0KICNlbmRpZgogCkBAIC01NzcsNyArNTc4
LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKCkKICAg
ICB9CiAgICAgbV9sYXllckluZm8uc2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWlu
dENvdW50ZXIoKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1f
bGF5ZXJJbmZvKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRp
b24oQ29vcmRpbmF0ZWRTeW5jTGF5ZXJTdGF0ZU9wZXJhdGlvbjo6Y3JlYXRlKG1faWQsIG1fbGF5
ZXJJbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0Jv
cmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoKQpAQCAtNTk0LDcgKzU5NSw3IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCiAKICAgICBt
X3Nob3VsZFN5bmNBbmltYXRpb25zID0gZmFsc2U7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRM
YXllckFuaW1hdGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5l
bnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlvbnNP
cGVyYXRpb246OmNyZWF0ZShtX2lkLCBtX2FuaW1hdGlvbnMpKTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQpAQCAtNjA3LDcgKzYwOCw4IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKIAogICAgIEFTU0VSVChtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXIpOwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIG1fY29v
cmRpbmF0b3ItPnN5bmNDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICB1
aW50MzJfdCBmcm9udEJ1ZmZlciA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhp
Y3NTdXJmYWNlKCk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkT3BlcmF0
aW9uKENvb3JkaW5hdGVkU3luY0NhbnZhc09wZXJhdGlvbjo6Y3JlYXRlKG1faWQsIGZyb250QnVm
ZmVyKSk7CiAjZW5kaWYKICAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IGZhbHNlOwogfQpAQCAt
NjE4LDcgKzYyMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2Fu
dmFzSWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLSAgICBtX2Nvb3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1faWQpOworICAgIG1fY29vcmRp
bmF0b3ItPmVucXVldWVDb29yZGluYXRlZE9wZXJhdGlvbihDb29yZGluYXRlZERlc3Ryb3lDYW52
YXNPcGVyYXRpb246OmNyZWF0ZShtX2lkKSk7CiAjZW5kaWYKICAgICBtX2NhbnZhc05lZWRzRGVz
dHJveSA9IGZhbHNlOwogfQpAQCAtNjMwLDcgKzYzMiw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpjcmVhdGVDYW52YXNJZk5lZWRlZCgpCiAKICAgICBBU1NFUlQobV9jYW52YXNQ
bGF0Zm9ybUxheWVyKTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX2Nvb3JkaW5h
dG9yLT5jcmVhdGVDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICBJbnRT
aXplIGNhbnZhc1NpemUgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXpl
KCk7CisgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5
ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNv
b3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkQ3JlYXRlQ2FudmFzT3BlcmF0aW9uOjpjcmVh
dGUobV9pZCwgY2FudmFzU2l6ZSwgdG9rZW4pKTsKICNlbmRpZgogICAgIG1fY2FudmFzTmVlZHND
cmVhdGUgPSBmYWxzZTsKIH0KQEAgLTczNSw3ICs3MzksNyBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWlu
dEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKIHsKICAgICBpZiAoaXNT
aG93aW5nUmVwYWludENvdW50ZXIoKSAmJiAhdXBkYXRlZFJlY3RzLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9jb29yZGluYXRvci0+c2V0TGF5ZXJSZXBhaW50Q291bnQoaWQoKSwgaW5jcmVtZW50UmVw
YWludENvdW50KCkpOworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRP
cGVyYXRpb24oQ29vcmRpbmF0ZWRTZXRMYXllclJlcGFpbnRDb3VudE9wZXJhdGlvbjo6Y3JlYXRl
KGlkKCksIGluY3JlbWVudFJlcGFpbnRDb3VudCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKQpA
QCAtNzk0LDIxICs3OTgsMjEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW4KIHsKICAgICBBU1NF
UlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdM
YXllckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxl
SUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29v
cmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRDcmVhdGVUaWxlRm9yTGF5ZXJPcGVyYXRpb246
OmNyZWF0ZShpZCgpLCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0
KQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRv
ci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVU
aWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3QpOworICAgIG1fY29vcmRpbmF0
b3ItPmVucXVldWVDb29yZGluYXRlZE9wZXJhdGlvbihDb29yZGluYXRlZFVwZGF0ZVRpbGVGb3JM
YXllck9wZXJhdGlvbjo6Y3JlYXRlKGlkKCksIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8p
KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMy
X3QgdGlsZUlEKQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9j
b29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAg
ICBtX2Nvb3JkaW5hdG9yLT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7CisgICAgbV9jb29yZGlu
YXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkUmVtb3ZlVGlsZUZv
ckxheWVyT3BlcmF0aW9uOjpjcmVhdGUoaWQoKSwgdGlsZUlEKSk7CiB9CiAKIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IDdl
YTM4MWY3Y2Y3Yzc1YWQzNGQ0NTM4NzkwYTBlMzAwYzQ1ZjNhNDguLjVkM2QxOTkxNTI3NTVhODc5
M2QzMjYwNDczMmY5OTE0MTY5NTNlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC00NCw0MCArNDQsMjEgQEAKICNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsK
IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBDb29yZGluYXRlZE9wZXJhdGlvbjsKIAog
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0ID0gMDsKLQotICAgIC8vIENv
b3JkaW5hdGVkVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5h
dGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUo
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCkgPSAwOwotCiAgICAg
dmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0
ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVk
TGF5ZXJJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JikgPSAwOwot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVy
cyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSA9
IDA7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciop
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFdl
YkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQsIGludCkgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJikgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwogICAgIHZpcnR1YWwgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3Qm
IGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5j
Rml4ZWRMYXllcnMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBlbnF1
ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oUGFzc1JlZlB0cjxDb29yZGluYXRlZE9wZXJhdGlvbj4p
ID0gMDsKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmNwcAppbmRleCA3MDQzMTQ5MzI1Y2E1YTc2ZGM5NWI0NzUyY2Q2
ZWQyZmY5YjZhNmY0Li4wZjEwZmJmZWY0OGQ0ZjRlNjc5ZDBjYThkMDNkNmNkYmYxN2FjNzI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQogI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAKKyNpbmNsdWRlICJDb29y
ZGluYXRlZE9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTU2LDcgKzU3LDcgQEAgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NS
ZWZQdHIKICAgICAvLyBGSVhNRTogV2Ugd291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFsbCBpbWFn
ZSBkaXJlY3RseSBpbnRvIGEgR3JhcGhpY3NTdXJmYWNlLgogICAgIC8vIGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTAxNDI2CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmcoaWQo
KSk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUltYWdlQmFja2luZ0Nvb3JkaW5hdGVkT3Bl
cmF0aW9uKENvb3JkaW5hdGVkQ3JlYXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uOjpjcmVhdGUoaWQo
KSkpOwogfQogCiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nKCkKQEAgLTc2LDcgKzc3LDcgQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVt
b3ZlSG9zdChIb3N0KiBob3N0KQogICAgIG1faG9zdHMucmVtb3ZlKHBvc2l0aW9uKTsKIAogICAg
IGlmIChtX2hvc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+cmVtb3ZlSW1h
Z2VCYWNraW5nKGlkKCkpOworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlSW1hZ2VCYWNr
aW5nQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVy
YXRpb246OmNyZWF0ZShpZCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
Om1hcmtEaXJ0eSgpCkBAIC0xMTUsOSArMTE2LDggQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6dXBkYXRlKCkKIAogICAgIG1fbmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwogCi0gICAgLy8gSWYgc2VuZGluZyB0aGUgbWVzc2FnZSBm
YWlscywgdHJ5IGFnYWluIGluIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBt
X2Nvb3JkaW5hdG9yLT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9zdXJmYWNlKTsKLSAgICBt
X2lzRGlydHkgPSAhc3VjY2VzczsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlSW1hZ2VCYWNr
aW5nQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRVcGRhdGVJbWFnZUJhY2tpbmdPcGVy
YXRpb246OmNyZWF0ZShpZCgpLCBtX3N1cmZhY2UpKTsKKyAgICBtX2lzRGlydHkgPSBmYWxzZTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRl
ZCgpCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBk
YXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wmIGNoYW5nZWRUb1Zpc2libGUpCiAKIHZvaWQgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKFdlYkNvcmU6OlRp
bWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopCiB7Ci0gICAgbV9jb29yZGluYXRvci0+Y2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhpZCgpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVl
SW1hZ2VCYWNraW5nQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRDbGVhckltYWdlQmFj
a2luZ0NvbnRlbnRzT3BlcmF0aW9uOjpjcmVhdGUoaWQoKSkpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEltYWdlQmFja2luZy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCAy
YWRiMmEwMmViODJkZjI3ZDkxMGY1YTljY2IwYTcwY2U3NDM0ZjQxLi5mN2JjMzI2ZjJlM2Y2MzU2
NjBiZmZiOGYwMDIyMTcxNTBjYjBlMDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2lu
Zy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKQEAgLTM2LDE1ICszNiwxMyBAQAogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBDb29yZGlu
YXRlZE9wZXJhdGlvbjsKIAogY2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgOiBwdWJsaWMg
UmVmQ291bnRlZDxDb29yZGluYXRlZEltYWdlQmFja2luZz4gewogcHVibGljOgogICAgIGNsYXNz
IENvb3JkaW5hdG9yIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUltYWdlQmFja2lu
Z0Nvb3JkaW5hdGVkT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRPcGVyYXRpb24+KSA9
IDA7CiAgICAgfTsKIAogICAgIGNsYXNzIEhvc3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMDllMWQ5NmM5
YzkwZDgyNmJmZDhkM2ZmNDc3MWIzNDVjOTIwZTEwYi4uYzNmMDJhMmU2NzRlMDAyYmNiODUzOGRj
ZTMzZjFkOWZmYzVlN2ZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkT3BlcmF0aW9uLmgiCiAjaW5j
bHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiTWVzc2FnZUlELmgiCkBAIC00MywxNCArNDQsMTIgQEAKICNpbmNsdWRlICJXZWJQ
YWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJM
YXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3Jh
cnlDaGFuZ2UuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKQEAgLTI4OSw3ICsyODgsNyBA
QCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KCkKIAogICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpKTsKICAgICAgICAgSW50UmVjdCBjb3ZlcmVk
UmVjdCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci5nZXQoKSktPmNvdmVyUmVjdCgpOwotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRSZW5kZXJGcmFtZShjb250ZW50
c1NpemUsIGNvdmVyZWRSZWN0KSk7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkT3BlcmF0aW9u
cyhjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7CiAgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJv
Y2VzcyA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CiAgICAgfSBl
bHNlCkBAIC0zMTcsNyArMzE2LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNy
ZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUNv
bXBvc2l0aW5nTGF5ZXJzKG1fbGF5ZXJzVG9DcmVhdGUpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0
ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRDcmVhdGVMYXllcnNPcGVyYXRpb246OmNyZWF0ZShtX2xh
eWVyc1RvQ3JlYXRlKSk7CiAgICAgbV9sYXllcnNUb0NyZWF0ZS5jbGVhcigpOwogICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KQEAgLTMzMiw3ICszMzEsNyBAQCB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcnMobV9sYXllcnNUb0RlbGV0
ZSkpOworICAgIGVucXVldWVDb29yZGluYXRlZE9wZXJhdGlvbihDb29yZGluYXRlZERlbGV0ZUxh
eWVyc09wZXJhdGlvbjo6Y3JlYXRlKG1fbGF5ZXJzVG9EZWxldGUpKTsKICAgICBtX2xheWVyc1Rv
RGVsZXRlLmNsZWFyKCk7CiAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwogfQpAQCAtMzQy
LDY1ICszNDEsMTEgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVS
b290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkKICAgICBpZiAobV9kaWRJbml0aWFsaXplUm9v
dENvbXBvc2l0aW5nTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3Np
dGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
aWQoKSkpOworICAgIGVucXVldWVDb29yZGluYXRlZE9wZXJhdGlvbihDb29yZGluYXRlZFNldFJv
b3RDb21wb3NpdGluZ0xheWVyT3BlcmF0aW9uOjpjcmVhdGUodG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CiAgICAgbV9kaWRJbml0aWFsaXplUm9v
dENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOwogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
IH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllclN0YXRlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8pCi17Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0
ZShpZCwgaW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xh
eWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0
ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNy
ZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1Bs
YXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBo
aWNzU3VyZmFjZVRva2VuIHRva2VuID0gY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJm
YWNlVG9rZW4oKTsKLSAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBjYW52YXNQbGF0Zm9ybUxheWVy
LT5wbGF0Zm9ybUxheWVyU2l6ZSgpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUNhbnZhcyhpZCwgY2FudmFzU2l6ZSwg
dG9rZW4pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVy
KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICB1aW50MzJfdCBmcm9udEJ1
ZmZlciA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OlN5bmNDYW52YXMoaWQsIGZyb250QnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBp
ZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgaW50IHZhbHVlKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldExheWVyUmVwYWludENvdW50KGlkLCB2YWx1
ZSkpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFt
UHJveGllcyhmaWx0ZXJzKTsKLSNlbmRpZgotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJz
KGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94
aWVzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7CkBAIC00MjgsNyArMzczLDcg
QEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmEKIAogICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsKICAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eS0+c2V0Q2xpZW50KHRoaXMpOwotICAgICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJv
Z3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFs
aWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CisgICAgICAgICAgICBl
bnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRDcmVhdGVDdXN0b21GaWx0ZXJQ
cm9ncmFtT3BlcmF0aW9uOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBj
dXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8o
KSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMg
bm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50
IGZvciBpdC4KICAgICAgICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNs
aWVudCgpID09IHRoaXMpOwpAQCAtNDQxLDcgKzM4Niw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVy
UHJvCiAgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBzaGFkZXIgaXMgbm90IG5lZWRlZCBhbnltb3Jl
LCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0IGFuZAogICAgIC8vIHNlbmQgYSBtZXNzYWdl
IHRvIHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0ZSBpdC4KICAgICBtX2N1c3RvbUZpbHRlclBy
b2dyYW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOwotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZUN1c3Rv
bUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7CisgICAgZW5x
dWV1ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkUmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbU9wZXJhdGlvbjo6Y3JlYXRlKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSkpOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRl
clByb2dyYW1zKCkKQEAgLTUxMSw3ICs0NTYsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c3luY0ZpeGVkTGF5ZXJzKCkKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojps
b2NrQW5pbWF0aW9ucygpCiB7CiAgICAgbV9hbmltYXRpb25zTG9ja2VkID0gdHJ1ZTsKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpT
ZXRBbmltYXRpb25zTG9ja2VkKHRydWUpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRp
b24oQ29vcmRpbmF0ZWRTZXRBbmltYXRpb25zTG9ja2VkT3BlcmF0aW9uOjpjcmVhdGUodHJ1ZSkp
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dW5sb2NrQW5pbWF0aW9ucygp
CkBAIC01MjAsNyArNDY1LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVubG9j
a0FuaW1hdGlvbnMoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2FuaW1hdGlvbnNMb2NrZWQg
PSBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpTZXRBbmltYXRpb25zTG9ja2VkKGZhbHNlKSk7CisgICAgZW5xdWV1ZUNv
b3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkU2V0QW5pbWF0aW9uc0xvY2tlZE9wZXJhdGlv
bjo6Y3JlYXRlKGZhbHNlKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpw
ZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCkBAIC02MDUsMzggKzU1MCwxNCBAQCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNy
ZWF0ZUltYWdlQmFja2luZwogICAgIHJldHVybiBpbWFnZUJhY2tpbmc7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmVucXVl
dWVVcGRhdGVBdGxhc0Nvb3JkaW5hdGVkT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRP
cGVyYXRpb24+IG9wZXJhdGlvbikKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Q3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRP
cGVyYXRpb24ob3BlcmF0aW9uKTsKIH0KIAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCit2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZW5xdWV1ZUltYWdlQmFja2luZ0Nvb3JkaW5hdGVkT3Bl
cmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRPcGVyYXRpb24+IG9wZXJhdGlvbikKIHsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3
ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2Uq
Pihjb29yZGluYXRlZFN1cmZhY2UuZ2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6
SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFu
ZGxlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJbWFnZUJhY2tp
bmcoaW1hZ2VJRCwgaGFuZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUo
aW1hZ2VJRCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKKyAgICBlbnF1ZXVl
Q29vcmRpbmF0ZWRPcGVyYXRpb24ob3BlcmF0aW9uKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQpAQCAtNjg3LDQx
ICs2MDgsNDggQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZv
KSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxh
eWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQs
IHVpbnQzMl90IHRpbGVJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjplbnF1ZXVl
Q29vcmRpbmF0ZWRPcGVyYXRpb24oUGFzc1JlZlB0cjxDb29yZGluYXRlZE9wZXJhdGlvbj4gb3Bl
cmF0aW9uKQogewogICAgIGlmIChtX2lzUHVyZ2luZykKICAgICAgICAgcmV0dXJuOwotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwg
dGlsZUlEKSk7Ci19CiAKLWJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4g
Y29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29v
cmRpbmF0ZWRTdXJmYWNlID0gc3RhdGljX2Nhc3Q8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oY29v
cmRpbmF0ZWRTdXJmYWNlLmdldCgpKTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRs
ZSBoYW5kbGU7Ci0gICAgaWYgKCF3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZSho
YW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRs
YXNJRCwgaGFuZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgc3dpdGNoIChvcGVyYXRp
b24tPnR5cGUoKSkgeworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlJlbW92ZUltYWdl
QmFja2luZzoKKyAgICAgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZFJlbW92ZUltYWdlQmFja2luZ09wZXJhdGlvbio+KG9wZXJh
dGlvbi5nZXQoKSktPm1faWQpKTsKKyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFJlbW92ZUltYWdlQmFja2luZ09wZXJhdGlvbio+KG9w
ZXJhdGlvbi5nZXQoKSktPm1faWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5h
dGVkT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnM6IHsKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25z
ID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlvbnNPcGVyYXRpb24qPihv
cGVyYXRpb24uZ2V0KCkpLT5tX2FuaW1hdGlvbnM7CisgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMo
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1h
dGlvbnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygp
OworICAgICAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVy
dHlXZWJraXRGaWx0ZXIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19j
YXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKKyAgICAg
ICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+
dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljX2Nhc3Q8
Q29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlvbnNPcGVyYXRpb24qPihvcGVyYXRpb24uZ2V0KCkp
LT5tX2FuaW1hdGlvbnMgPSBhY3RpdmVBbmltYXRpb25zOworI2VuZGlmCisgICAgICAgIGJyZWFr
OworICAgIH0KKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgY2FzZSBDb29yZGluYXRlZE9w
ZXJhdGlvbjo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnM6CisjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQorICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKHN0YXRpY19jYXN0
PENvb3JkaW5hdGVkU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnNPcGVyYXRpb24qPihvcGVyYXRp
b24uZ2V0KCkpLT5tX2ZpbHRlcnMpOworI2VuZGlmCisgICAgICAgIGJyZWFrOworI2VuZGlmCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKLXsKLSAgICBp
ZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVVcGRhdGVBdGxhcyhh
dGxhc0lEKSk7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIENvb3JkaW5hdGVk
T3BlcmF0aW9uSG9sZGVyIGhvbGRlcjsKKyAgICBob2xkZXIub3BlcmF0aW9uID0gb3BlcmF0aW9u
OworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OkVucXVldWVDb29yZGluYXRlZE9wZXJhdGlvbihob2xkZXIpKTsKIH0KIAogV2ViQ29y
ZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVj
dCgpIGNvbnN0CkBAIC03MjksMjUgKzY1Nyw2IEBAIFdlYkNvcmU6OkZsb2F0UmVjdCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAogICAgIHJldHVy
biBtX3Zpc2libGVDb250ZW50c1JlY3Q7CiB9CiAKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29u
c3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1h
dGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFu
aW1hdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7
Ci0gICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Vi
a2l0RmlsdGVyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBGaWx0
ZXJBbmltYXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJB
bmltYXRpb25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAgICBjaGVja0N1c3Rv
bUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYWN0aXZlQW5p
bWF0aW9ucykpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBG
bG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewogICAgIGJvb2wgY29udGVudHNSZWN0RGlk
Q2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1JlY3Q7CkBAIC03ODUsNyArNjk0LDcg
QEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Z3JhcGhp
Y3NMYXllckZhY3RvcnkoKQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkpOworICAgIGVucXVldWVDb29yZGluYXRlZE9wZXJhdGlv
bihDb29yZGluYXRlZFJlcXVlc3RBbmltYXRpb25GcmFtZU9wZXJhdGlvbjo6Y3JlYXRlKCkpOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW9uRnJhbWVSZWFkeSgp
CkBAIC04NjgsNyArNzc3LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVh
c2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGUKIAogdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpD
b2xvciYgY29sb3IpCiB7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSk7CisgICAgZW5x
dWV1ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkU2V0QmFja2dyb3VuZENvbG9yT3Bl
cmF0aW9uOjpjcmVhdGUoY29sb3IpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5o
CmluZGV4IDUxZjlkYWEwNDJhZWM0M2FlOTY1YWNlYjNjOGJlYTE3YmE0ZWY5M2YuLmUxODFmYTEy
YmZiNmE5ODdmZTUyMzBiMDRiZDE2NzBmNTQyZDhhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0zOCw2ICszOCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBDb29yZGluYXRlZE9wZXJhdGlvbjsK
IGNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKIGNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBXZWJQ
YWdlOwpAQCAtODAsOSArODEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3Jl
OjpJbWFnZSopIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNo
YW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNvb3JkaW5hdGVk
T3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRPcGVyYXRpb24+KSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKQEAgLTkwLDI3ICs4OSwxMSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNv
ZGVyJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhp
Y3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJT
dGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5
ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckFuaW1hdGlvbnMmKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2
b2lkIHN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6
UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENv
b3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7
Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0
ZWRMYXllcklELCBpbnQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0ZpeGVkTGF5ZXJzKCk7CiAKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIENv
b3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwogCi0gICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1
cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7CiAjZW5kaWYKQEAg
LTEyNSwxMSArMTA4LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNo
UmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogCisgICAgLy8gVXBkYXRlQXRsYXNDbGll
bnQKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZVVwZGF0ZUF0bGFzQ29vcmRpbmF0ZWRPcGVyYXRp
b24oUGFzc1JlZlB0cjxDb29yZGluYXRlZE9wZXJhdGlvbj4pIE9WRVJSSURFOworCiAgICAgLy8g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUlt
YWdlQmFja2luZ0Nvb3JkaW5hdGVkT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRPcGVy
YXRpb24+KSBPVkVSUklERTsKIAogICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hh
bmdlcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKaW5kZXgg
ZDgyZDMyZmM2ZmZjMTAyY2Y2ZDRhNjQzZjVjMzI4Nzg0ZDZiNTcxYy4uOWMzZjRkZmEzYWUwNjA1
YmYwYWNmNmZiYTY5N2VmNmIyYmViN2QyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1Vw
ZGF0ZUF0bGFzLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRPcGVyYXRpb24uaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KQEAgLTQwLDE1ICs0MSwxMiBAQCBVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMo
VXBkYXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdQog
ICAgIEludFNpemUgc2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1l
bnNpb24pKTsKICAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXpl
LCBmbGFncyk7CiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNz
YWdlIGZhaWxzLCBVcGRhdGVBdGxhcyBnaXZlcyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0
bHkuCi0gICAgaWYgKCFtX2NsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNl
KSkKLSAgICAgICAgbV9zdXJmYWNlLmNsZWFyKCk7CisgICAgbV9jbGllbnQtPmVucXVldWVVcGRh
dGVBdGxhc0Nvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkQ3JlYXRlVXBkYXRlQXRsYXNP
cGVyYXRpb246OmNyZWF0ZShtX0lELCBtX3N1cmZhY2UpKTsKIH0KIAogVXBkYXRlQXRsYXM6On5V
cGRhdGVBdGxhcygpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9jbGllbnQtPnJl
bW92ZVVwZGF0ZUF0bGFzKG1fSUQpOworICAgIG1fY2xpZW50LT5lbnF1ZXVlVXBkYXRlQXRsYXND
b29yZGluYXRlZE9wZXJhdGlvbihDb29yZGluYXRlZFJlbW92ZVVwZGF0ZUF0bGFzT3BlcmF0aW9u
OjpjcmVhdGUobV9JRCkpOwogfQogCiB2b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVl
ZGVkKCkKQEAgLTc0LDkgKzcyLDYgQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0
ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIodWludDMyX3QKICAgICBpZiAo
cmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4oKTsKIAotICAgIGlmICghbV9zdXJmYWNlKQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxH
cmFwaGljc0NvbnRleHQ+KCk7Ci0KICAgICBhdGxhc0lEID0gbV9JRDsKIAogICAgIC8vIEZJWE1F
OiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmgKaW5kZXggZWQ1ODYzYjg0ZDBkOGRiYWNjYmFl
MzliMTJlMjM0MTQ4MzM4NzYyYy4uNWQ5MmMwYzUzMmE4NDI2YmFiOThjYjE1OTNhZDFjZjFkZTQ3
MmRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oCkBAIC0zMiwxMSAr
MzIsMTEgQEAgY2xhc3MgSW50UG9pbnQ7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
Q29vcmRpbmF0ZWRPcGVyYXRpb247CiAKIGNsYXNzIFVwZGF0ZUF0bGFzQ2xpZW50IHsKIHB1Ymxp
YzoKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5xdWV1ZVVwZGF0ZUF0bGFzQ29vcmRpbmF0ZWRPcGVyYXRpb24oUGFzc1JlZlB0cjxDb29yZGlu
YXRlZE9wZXJhdGlvbj4pID0gMDsKIH07CiAKIGNsYXNzIFVwZGF0ZUF0bGFzIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185213</attachid>
            <date>2013-01-29 03:33:11 -0800</date>
            <delta_ts>2013-02-01 04:58:35 -0800</delta_ts>
            <desc>WIP: Refactoring TextureMapper to work in an actor model. </desc>
            <filename>bug-103854-20130129202935.patch</filename>
            <type>text/plain</type>
            <size>112596</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGViYTc3NWE4ZTcwM2U1
ODcwNGRhYzFkN2Q4YjUwZjJiMTJjOTU4ZC4uZWE5ZWJiNmNmNDYxNTkyMjY2ZjhmNTg2YzgwNGY0
ODQ1NWQxNzg0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAxMy0wMS0yOSAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBbTUVUQV0g
Q29vcmRpbmF0ZWQgR3JhcGhpY3M6IFJlZmFjdG9yaW5nIFRleHR1cmVNYXBwZXIgdG8gd29yayBp
biBhbiBhY3RvciBtb2RlbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMzg1NAorCisgICAgICAgIFdJUAorCisgICAgICAgICogU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcDoKKyAg
ICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgKENvcmVJUEMpOgorICAgICAgICAo
Q29yZUlQQzo6OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZE9wZXJhdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChDb29yZGluYXRlZE9wZXJh
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkT3BlcmF0aW9uOjp+Q29vcmRpbmF0
ZWRPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZE9wZXJhdGlvbjo6Q29v
cmRpbmF0ZWRPcGVyYXRpb24pOgorICAgICAgICAoQ29vcmRpbmF0ZWRDcmVhdGVMYXllcnNPcGVy
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZENyZWF0ZUxheWVyc09wZXJhdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRDcmVhdGVMYXllcnNPcGVy
YXRpb246OkNvb3JkaW5hdGVkQ3JlYXRlTGF5ZXJzT3BlcmF0aW9uKToKKyAgICAgICAgKENvb3Jk
aW5hdGVkRGVsZXRlTGF5ZXJzT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWREZWxldGVMYXllcnNPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkRGVsZXRlTGF5ZXJzT3BlcmF0aW9uOjpDb29yZGluYXRlZERlbGV0ZUxheWVyc09wZXJh
dGlvbik6CisgICAgICAgIChDb29yZGluYXRlZFNldFJvb3RDb21wb3NpdGluZ0xheWVyT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRTZXRSb290Q29tcG9zaXRpbmdMYXll
ck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRTZXRSb290
Q29tcG9zaXRpbmdMYXllck9wZXJhdGlvbjo6Q29vcmRpbmF0ZWRTZXRSb290Q29tcG9zaXRpbmdM
YXllck9wZXJhdGlvbik6CisgICAgICAgIChDb29yZGluYXRlZFN5bmNMYXllclN0YXRlT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRTeW5jTGF5ZXJTdGF0ZU9wZXJhdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRTeW5jTGF5ZXJTdGF0ZU9w
ZXJhdGlvbjo6Q29vcmRpbmF0ZWRTeW5jTGF5ZXJTdGF0ZU9wZXJhdGlvbik6CisgICAgICAgIChD
b29yZGluYXRlZFNldExheWVyQ2hpbGRyZW5PcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZFNldExheWVyQ2hpbGRyZW5PcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkU2V0TGF5ZXJDaGlsZHJlbk9wZXJhdGlvbjo6Q29vcmRpbmF0ZWRT
ZXRMYXllckNoaWxkcmVuT3BlcmF0aW9uKToKKyAgICAgICAgKENvb3JkaW5hdGVkQ3JlYXRlVGls
ZUZvckxheWVyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRDcmVhdGVU
aWxlRm9yTGF5ZXJPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkQ3JlYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uOjpDb29yZGluYXRlZENyZWF0ZVRpbGVGb3JM
YXllck9wZXJhdGlvbik6CisgICAgICAgIChDb29yZGluYXRlZFVwZGF0ZVRpbGVGb3JMYXllck9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkVXBkYXRlVGlsZUZvckxheWVy
T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZFVwZGF0ZVRp
bGVGb3JMYXllck9wZXJhdGlvbjo6Q29vcmRpbmF0ZWRVcGRhdGVUaWxlRm9yTGF5ZXJPcGVyYXRp
b24pOgorICAgICAgICAoQ29vcmRpbmF0ZWRSZW1vdmVUaWxlRm9yTGF5ZXJPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZFJlbW92ZVRpbGVGb3JMYXllck9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRSZW1vdmVUaWxlRm9yTGF5ZXJP
cGVyYXRpb246OkNvb3JkaW5hdGVkUmVtb3ZlVGlsZUZvckxheWVyT3BlcmF0aW9uKToKKyAgICAg
ICAgKENvb3JkaW5hdGVkQ3JlYXRlVXBkYXRlQXRsYXNPcGVyYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZENyZWF0ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZENyZWF0ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uOjpDb29y
ZGluYXRlZENyZWF0ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uKToKKyAgICAgICAgKENvb3JkaW5hdGVk
UmVtb3ZlVXBkYXRlQXRsYXNPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZFJlbW92ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZFJlbW92ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uOjpDb29yZGluYXRlZFJlbW92ZVVw
ZGF0ZUF0bGFzT3BlcmF0aW9uKToKKyAgICAgICAgKENvb3JkaW5hdGVkQ3JlYXRlSW1hZ2VCYWNr
aW5nT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRDcmVhdGVJbWFnZUJh
Y2tpbmdPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQ3Jl
YXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uOjpDb29yZGluYXRlZENyZWF0ZUltYWdlQmFja2luZ09w
ZXJhdGlvbik6CisgICAgICAgIChDb29yZGluYXRlZFVwZGF0ZUltYWdlQmFja2luZ09wZXJhdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkVXBkYXRlSW1hZ2VCYWNraW5nT3BlcmF0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZFVwZGF0ZUltYWdlQmFj
a2luZ09wZXJhdGlvbjo6Q29vcmRpbmF0ZWRVcGRhdGVJbWFnZUJhY2tpbmdPcGVyYXRpb24pOgor
ICAgICAgICAoQ29vcmRpbmF0ZWRDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzT3Bl
cmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZENsZWFySW1hZ2VC
YWNraW5nQ29udGVudHNPcGVyYXRpb246OkNvb3JkaW5hdGVkQ2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50c09wZXJhdGlvbik6CisgICAgICAgIChDb29yZGluYXRlZFJlbW92ZUltYWdlQmFja2luZ09w
ZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkUmVtb3ZlSW1hZ2VCYWNraW5n
T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZFJlbW92ZUlt
YWdlQmFja2luZ09wZXJhdGlvbjo6Q29vcmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRp
b24pOgorICAgICAgICAoQ29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlvbnNPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZFNldExheWVyQW5pbWF0aW9uc09wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlvbnNP
cGVyYXRpb246OkNvb3JkaW5hdGVkU2V0TGF5ZXJBbmltYXRpb25zT3BlcmF0aW9uKToKKyAgICAg
ICAgKENvb3JkaW5hdGVkU2V0QW5pbWF0aW9uc0xvY2tlZE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkU2V0QW5pbWF0aW9uc0xvY2tlZE9wZXJhdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRTZXRBbmltYXRpb25zTG9ja2VkT3BlcmF0aW9u
OjpDb29yZGluYXRlZFNldEFuaW1hdGlvbnNMb2NrZWRPcGVyYXRpb24pOgorICAgICAgICAoQ29v
cmRpbmF0ZWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZFJlcXVlc3RBbmltYXRpb25GcmFtZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVPcGVyYXRpb246
OkNvb3JkaW5hdGVkUmVxdWVzdEFuaW1hdGlvbkZyYW1lT3BlcmF0aW9uKToKKyAgICAgICAgKENv
b3JkaW5hdGVkQ3JlYXRlQ2FudmFzT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRDcmVhdGVDYW52YXNPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkQ3JlYXRlQ2FudmFzT3BlcmF0aW9uOjpDb29yZGluYXRlZENyZWF0ZUNhbnZhc09w
ZXJhdGlvbik6CisgICAgICAgIChDb29yZGluYXRlZFN5bmNDYW52YXNPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZFN5bmNDYW52YXNPcGVyYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkU3luY0NhbnZhc09wZXJhdGlvbjo6Q29vcmRpbmF0
ZWRTeW5jQ2FudmFzT3BlcmF0aW9uKToKKyAgICAgICAgKENvb3JkaW5hdGVkRGVzdHJveUNhbnZh
c09wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRGVzdHJveUNhbnZhc09w
ZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREZXN0cm95Q2Fu
dmFzT3BlcmF0aW9uOjpDb29yZGluYXRlZERlc3Ryb3lDYW52YXNPcGVyYXRpb24pOgorICAgICAg
ICAoQ29vcmRpbmF0ZWRTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVyc09wZXJhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnNPcGVyYXRp
b246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkU2V0Q29tcG9zaXRpbmdM
YXllckZpbHRlcnNPcGVyYXRpb246OkNvb3JkaW5hdGVkU2V0Q29tcG9zaXRpbmdMYXllckZpbHRl
cnNPcGVyYXRpb24pOgorICAgICAgICAoQ29vcmRpbmF0ZWRDcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb246OkNvb3JkaW5hdGVkQ3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbU9wZXJhdGlvbik6CisgICAgICAgIChDb29yZGluYXRlZFJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbU9wZXJhdGlvbjo6
Q29vcmRpbmF0ZWRSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtT3BlcmF0aW9uKToKKyAgICAgICAg
KENvb3JkaW5hdGVkU2V0TGF5ZXJSZXBhaW50Q291bnRPcGVyYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZFNldExheWVyUmVwYWludENvdW50T3BlcmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZFNldExheWVyUmVwYWludENvdW50T3BlcmF0aW9u
OjpDb29yZGluYXRlZFNldExheWVyUmVwYWludENvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKENv
b3JkaW5hdGVkU2V0QmFja2dyb3VuZENvbG9yT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRTZXRCYWNrZ3JvdW5kQ29sb3JPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkU2V0QmFja2dyb3VuZENvbG9yT3BlcmF0aW9uOjpDb29yZGlu
YXRlZFNldEJhY2tncm91bmRDb2xvck9wZXJhdGlvbik6CisgICAgICAgICogU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUluZm8uaDoKKyAgICAgICAgKiBUYXJnZXQucHJp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdENvb3JkaW5hdGVk
T3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpleGVjdXRl
Q29vcmRpbmF0ZWRPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5j
RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5
bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c3luY0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6ZGVzdHJveUNhbnZhc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVU
aWxlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92
ZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVu
dHNUaW1lckZpcmVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKENvb3JkaW5hdG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9z
aXRpbmdMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0Ojppbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveGllcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpsb2NrQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dW5sb2NrQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZW5xdWV1ZVVwZGF0ZUF0bGFzQ29v
cmRpbmF0ZWRPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmVucXVldWVJbWFnZUJhY2tpbmdDb29yZGluYXRlZE9wZXJhdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZW5xdWV1ZUNvb3JkaW5hdGVkT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hl
ZHVsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJL
aXQ6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVB
dGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFVwZGF0ZUF0bGFzQ2xpZW50KToKKwogMjAxMy0wMS0yNyAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogcmVtb3ZlIHRoZSBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiBtZXNzYWdl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHAKaW5kZXggOWU4ODhlNTg2NjU1M2U5YTU3OGJjOTAzN2FiZmFhODMzYjE1Y2RhYi4uMzlm
ODAxMzk4NjU5YTlmOGFhZWY1NDZiZTkzMTVlNWI4MWZkYjA1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0zMCw3ICsz
MCw5IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVkU3Vy
ZmFjZS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgpAQCAtODMzLDYg
KzgzNSwzODQgQEAgYm9vbCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgU3VyZmFjZVUKICAgICByZXR1cm4gU2ltcGxlQXJn
dW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmRlY29kZShkZWNvZGVyLCBzdXJmYWNlVXBk
YXRlSW5mbyk7CiB9CiAKK3ZvaWQgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZE9wZXJhdGlvbnM+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb29yZGluYXRlZE9wZXJh
dGlvbnMmIG9wZXJhdGlvbnMpCit7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4ob3BlcmF0aW9ucy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmF0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBDb29yZGluYXRlZE9wZXJhdGlvbiog
b3BlcmF0aW9uID0gb3BlcmF0aW9ucy5hdChpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKKworICAgICAgICBzd2l0Y2ggKG9wZXJh
dGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVy
YXRpb246OkNyZWF0ZUxheWVyczoKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVMYXllcnNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5sYXll
cklEczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0
aW9uOjpEZWxldGVMYXllcnM6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNv
bnN0IENvb3JkaW5hdGVkRGVsZXRlTGF5ZXJzT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJ
RHM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlv
bjo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXI6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXJPcGVyYXRpb24q
PihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29vcmRpbmF0ZWRPcGVyYXRpb246OlN5bmNMYXllclN0YXRlOgorICAgICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFN5bmNMYXllclN0YXRlT3BlcmF0aW9u
Kj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ29vcmRpbmF0ZWRTeW5jTGF5ZXJTdGF0ZU9wZXJhdGlvbio+KG9wZXJhdGlvbikt
PmxheWVySW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVk
T3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFNldExheWVyQ2hpbGRyZW5PcGVyYXRpb24qPihvcGVy
YXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25z
dCBDb29yZGluYXRlZFNldExheWVyQ2hpbGRyZW5PcGVyYXRpb24qPihvcGVyYXRpb24pLT5jaGls
ZHJlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0
aW9uOjpDcmVhdGVUaWxlRm9yTGF5ZXI6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PGNvbnN0IENvb3JkaW5hdGVkQ3JlYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uKj4ob3BlcmF0
aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRDcmVhdGVUaWxlRm9yTGF5ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pLT50aWxl
SUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
Q3JlYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+dGlsZVJlY3Q7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkQ3JlYXRlVGls
ZUZvckxheWVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+dXBkYXRlSW5mbzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpVcGRhdGVUaWxlRm9y
TGF5ZXI6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5h
dGVkVXBkYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRVcGRhdGVU
aWxlRm9yTGF5ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkVXBkYXRlVGlsZUZvckxheWVy
T3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+dGlsZVJlY3Q7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkVXBkYXRlVGlsZUZvckxheWVyT3BlcmF0aW9u
Kj4ob3BlcmF0aW9uKS0+dXBkYXRlSW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpSZW1vdmVUaWxlRm9yTGF5ZXI6CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkUmVtb3ZlVGlsZUZvckxh
eWVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRSZW1vdmVUaWxlRm9yTGF5ZXJPcGVyYXRp
b24qPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXM6IHsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVVcGRhdGVBdGxh
c09wZXJhdGlvbio+KG9wZXJhdGlvbiktPmF0bGFzSUQ7CisgICAgICAgICAgICBXZWJDb29yZGlu
YXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3Jk
aW5hdGVkU3VyZmFjZSo+KHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkQ3JlYXRlVXBkYXRl
QXRsYXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAg
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgY2FzZSB0aGF0IGhhbmRsZSBjcmVhdGlvbiBp
cyBmYWlsZWQuCisgICAgICAgICAgICB3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRs
ZShoYW5kbGUpOworICAgICAgICAgICAgZW5jb2RlciA8PCBoYW5kbGU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpSZW1v
dmVVcGRhdGVBdGxhczoKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRSZW1vdmVVcGRhdGVBdGxhc09wZXJhdGlvbio+KG9wZXJhdGlvbiktPmF0bGFz
SUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlv
bjo6Q3JlYXRlSW1hZ2VCYWNraW5nOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZENyZWF0ZUltYWdlQmFja2luZ09wZXJhdGlvbio+KG9wZXJhdGlv
biktPmltYWdlQmFja2luZ0lEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzogeworICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFVwZGF0ZUltYWdlQmFja2luZ09w
ZXJhdGlvbio+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEOworICAgICAgICAgICAgV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJD
b29yZGluYXRlZFN1cmZhY2UqPihzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFVwZGF0ZUlt
YWdlQmFja2luZ09wZXJhdGlvbio+KG9wZXJhdGlvbiktPnN1cmZhY2UuZ2V0KCkpOworICAgICAg
ICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHRoYXQgaGFuZGxlIGNyZWF0
aW9uIGlzIGZhaWxlZC4KKyAgICAgICAgICAgIHdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRl
SGFuZGxlKGhhbmRsZSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246
OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHM6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IENvb3JkaW5hdGVkQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c09wZXJhdGlv
bio+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzoKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRSZW1vdmVJbWFn
ZUJhY2tpbmdPcGVyYXRpb24qPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRMYXllckFu
aW1hdGlvbnM6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3Jk
aW5hdGVkU2V0TGF5ZXJBbmltYXRpb25zT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsK
KyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRTZXRM
YXllckFuaW1hdGlvbnNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5hbmltYXRpb25zOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlNldEFuaW1h
dGlvbnNMb2NrZWQ6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkU2V0QW5pbWF0aW9uc0xvY2tlZE9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmxvY2tl
ZDsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZy
YW1lOgorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzOgorICAg
ICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZENyZWF0ZUNh
bnZhc09wZXJhdGlvbio+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkQ3JlYXRlQ2FudmFzT3BlcmF0aW9uKj4o
b3BlcmF0aW9uKS0+Y2FudmFzU2l6ZTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVDYW52YXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT50
b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0
aW9uOjpTeW5jQ2FudmFzOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25z
dCBDb29yZGluYXRlZFN5bmNDYW52YXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5sYXllcklEOwor
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFN5bmND
YW52YXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5mcm9udEJ1ZmZlcjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOgor
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZERlc3Ry
b3lDYW52YXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgYnJl
YWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRPcGVyYXRpb246OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzOgorICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFNldENvbXBvc2l0aW5nTGF5
ZXJGaWx0ZXJzT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRTZXRDb21wb3NpdGluZ0xheWVy
RmlsdGVyc09wZXJhdGlvbio+KG9wZXJhdGlvbiktPmZpbHRlcnM7CisgICAgICAgICAgICBicmVh
azsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZE9wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbToKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVDdXN0b21GaWx0ZXJQ
cm9ncmFtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAg
ICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZENyZWF0ZUN1
c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5wcm9ncmFtSW5mbzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpSZW1v
dmVDdXN0b21GaWx0ZXJQcm9ncmFtOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb24qPihv
cGVyYXRpb24pLT5jdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgICAgICAgICBicmVhazsKKyNl
bmRpZgorICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRD
b3VudDoKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRTZXRMYXllclJlcGFpbnRDb3VudE9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmxheWVySUQ7Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU2V0TGF5
ZXJSZXBhaW50Q291bnRPcGVyYXRpb24qPihvcGVyYXRpb24pLT5yZXBhaW50Q291bnQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6U2V0QmFj
a2dyb3VuZENvbG9yOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZFNldEJhY2tncm91bmRDb2xvck9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmNvbG9y
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246
Ok5vbmU6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0
ZWRPcGVyYXRpb25zPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgQ29vcmRpbmF0
ZWRPcGVyYXRpb25zJiBvcGVyYXRpb25zKQoreworICAgIHVpbnQzMl90IG9wZXJhdGlvbnNTaXpl
OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDMyKG9wZXJhdGlvbnNTaXplKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25z
U2l6ZTsgKytpKSB7CisgICAgICAgIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IHR5cGU7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bSh0eXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOiB7CisgICAgICAgICAgICBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBpZHM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShpZHMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkQ3JlYXRlTGF5ZXJzT3BlcmF0aW9uOjpjcmVhdGUo
aWRzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3Jk
aW5hdGVkT3BlcmF0aW9uOjpEZWxldGVMYXllcnM6IHsKKyAgICAgICAgICAgIFZlY3RvcjxDb29y
ZGluYXRlZExheWVySUQ+IGlkczsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlk
cykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9u
cy5hcHBlbmQoQ29vcmRpbmF0ZWREZWxldGVMYXllcnNPcGVyYXRpb246OmNyZWF0ZShpZHMpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRP
cGVyYXRpb246OlNldFJvb3RDb21wb3NpdGluZ0xheWVyOiB7CisgICAgICAgICAgICBDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxh
eWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXJPcGVyYXRpb246
OmNyZWF0ZShsYXllcklEKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTeW5jTGF5ZXJTdGF0ZTogeworICAgICAgICAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm87CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShsYXllckluZm8pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkU3luY0xheWVyU3RhdGVP
cGVyYXRpb246OmNyZWF0ZShsYXllcklELCBsYXllckluZm8pKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlNldExheWVy
Q2hpbGRyZW46IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hp
bGRyZW47CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShjaGlsZHJlbikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQo
Q29vcmRpbmF0ZWRTZXRMYXllckNoaWxkcmVuT3BlcmF0aW9uOjpjcmVhdGUobGF5ZXJJRCwgY2hp
bGRyZW4pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRPcGVyYXRpb246OkNyZWF0ZVRpbGVGb3JMYXllcjogeworICAgICAgICAgICAgQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1
aW50MzJfdCB0aWxlSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0aWxlSUQp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEludFJlY3QgdGls
ZVJlY3Q7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0aWxlUmVjdCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgU3VyZmFjZVVwZGF0ZUluZm8g
dXBkYXRlSW5mbzsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHVwZGF0ZUluZm8p
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMu
YXBwZW5kKENvb3JkaW5hdGVkQ3JlYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uOjpjcmVhdGUobGF5
ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6VXBkYXRlVGls
ZUZvckxheWVyOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKHRpbGVJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKHRpbGVSZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUodXBkYXRlSW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRVcGRhdGVUaWxl
Rm9yTGF5ZXJPcGVyYXRpb246OmNyZWF0ZShsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRh
dGVJbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENv
b3JkaW5hdGVkT3BlcmF0aW9uOjpSZW1vdmVUaWxlRm9yTGF5ZXI6IHsKKyAgICAgICAgICAgIENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
dWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodGlsZUlE
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25z
LmFwcGVuZChDb29yZGluYXRlZFJlbW92ZVRpbGVGb3JMYXllck9wZXJhdGlvbjo6Y3JlYXRlKGxh
eWVySUQsIHRpbGVJRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXM6IHsKKyAgICAgICAg
ICAgIHVpbnQzMl90IGF0bGFzSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShh
dGxhc0lEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShoYW5kbGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkQ3JlYXRlVXBkYXRlQXRsYXNPcGVy
YXRpb246OmNyZWF0ZShhdGxhc0lELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5k
bGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3Jk
aW5hdGVkT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczogeworICAgICAgICAgICAgdWludDMy
X3QgYXRsYXNJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGF0bGFzSUQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKENvb3JkaW5hdGVkUmVtb3ZlVXBkYXRlQXRsYXNPcGVyYXRpb246OmNyZWF0ZShhdGxhc0lE
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5h
dGVkT3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmc6IHsKKyAgICAgICAgICAgIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaWQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShp
ZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9u
cy5hcHBlbmQoQ29vcmRpbmF0ZWRDcmVhdGVJbWFnZUJhY2tpbmdPcGVyYXRpb246OmNyZWF0ZShp
ZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZE9wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOiB7CisgICAgICAgICAgICBDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
aWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdlYkNvb3Jk
aW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKGhhbmRsZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRVcGRhdGVJbWFnZUJhY2tpbmdPcGVyYXRp
b246OmNyZWF0ZShpZCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZE9w
ZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czogeworICAgICAgICAgICAgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KGlkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRp
b25zLmFwcGVuZChDb29yZGluYXRlZENsZWFySW1hZ2VCYWNraW5nQ29udGVudHNPcGVyYXRpb246
OmNyZWF0ZShpZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nOiB7CisgICAgICAgICAg
ICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoaWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkUmVtb3ZlSW1hZ2VCYWNraW5nT3BlcmF0aW9u
OjpjcmVhdGUoaWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczogeworICAgICAgICAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoaWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShhbmltYXRpb25zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZFNldExheWVyQW5pbWF0aW9uc09w
ZXJhdGlvbjo6Y3JlYXRlKGlkLCBhbmltYXRpb25zKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRBbmltYXRpb25z
TG9ja2VkOiB7CisgICAgICAgICAgICBib29sIGxvY2tlZDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGxvY2tlZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRTZXRBbmltYXRpb25zTG9ja2Vk
T3BlcmF0aW9uOjpjcmVhdGUobG9ja2VkKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAgICAgY2FzZSBDb29y
ZGluYXRlZE9wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOgorICAgICAgICAgICAgb3Bl
cmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVPcGVyYXRpb246
OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OkNyZWF0ZUNhbnZh
czogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBJbnRTaXplIGNhbnZhc1NpemU7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXItPmRlY29kZShjYW52YXNTaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbjsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKHRva2VuKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZENyZWF0ZUNhbnZh
c09wZXJhdGlvbjo6Y3JlYXRlKGxheWVySUQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9u
OjpTeW5jQ2FudmFzOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IGZyb250QnVmZmVyOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZnJvbnRCdWZmZXIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5h
dGVkU3luY0NhbnZhc09wZXJhdGlvbjo6Y3JlYXRlKGxheWVySUQsIGZyb250QnVmZmVyKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3Bl
cmF0aW9uOjpEZXN0cm95Q2FudmFzOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5k
KENvb3JkaW5hdGVkRGVzdHJveUNhbnZhc09wZXJhdGlvbjo6Y3JlYXRlKGxheWVySUQpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlNldENvbXBvc2l0aW5nTGF5
ZXJGaWx0ZXJzOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmls
dGVyczsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZpbHRlcnMpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENv
b3JkaW5hdGVkU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnNPcGVyYXRpb246OmNyZWF0ZShsYXll
cklELCBmaWx0ZXJzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisj
aWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9u
OjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOiB7CisgICAgICAgICAgICBpbnQgY3VzdG9tRmls
dGVyUHJvZ3JhbUlEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY3VzdG9tRmls
dGVyUHJvZ3JhbUlEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbzsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHByb2dyYW1JbmZvKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZENy
ZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb246OmNyZWF0ZShjdXN0b21GaWx0ZXJQcm9n
cmFtSUQsIHByb2dyYW1JbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
OiB7CisgICAgICAgICAgICBpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGlu
YXRlZFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb246OmNyZWF0ZShjdXN0b21GaWx0
ZXJQcm9ncmFtSUQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6IHsK
KyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGFpbnRDb3VudDsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlcGFpbnRDb3VudCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRT
ZXRMYXllclJlcGFpbnRDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKGxheWVySUQsIHJlcGFpbnRDb3Vu
dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZE9wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOiB7CisgICAgICAgICAgICBXZWJDb3Jl
OjpDb2xvciBjb2xvcjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvbG9yKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFw
cGVuZChDb29yZGluYXRlZFNldEJhY2tncm91bmRDb2xvck9wZXJhdGlvbjo6Y3JlYXRlKGNvbG9y
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5h
dGVkT3BlcmF0aW9uOjpOb25lOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmgKaW5kZXggMGI1ZTE0Y2MxNzk5NmU2NWQ5NDZhZmRiOTJhMTRhOGJmMmVi
ZmNmYy4uNDIwNzIxZWQ5Y2JlODNlZTMyODZmYmU5MzM3NDgzOGZiZDU4ZGE2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKQEAgLTU0
LDYgKzU0LDcgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVRva2VuOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIHN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbzsKK2NsYXNzIENvb3JkaW5hdGVkT3Bl
cmF0aW9uczsKIGNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOwogfQogCkBAIC0xMjAsNiArMTIxLDEx
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0OjpTdXJmYWNlVXBkYXRl
SW5mbz4gewogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJLaXQ6
OlN1cmZhY2VVcGRhdGVJbmZvJik7CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYktpdDo6Q29vcmRpbmF0ZWRPcGVyYXRpb25zPiB7CisgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYktpdDo6Q29vcmRpbmF0ZWRPcGVyYXRpb25z
Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYktpdDo6Q29v
cmRpbmF0ZWRPcGVyYXRpb25zJik7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCiAKICNl
bmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZE9wZXJhdGlvbi5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRPcGVy
YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kYzAyMDU1YmY2NjAzMThhZGI3Mzk5NjNiYmIyMzc1NjdjMDZl
YzAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRPcGVyYXRpb24uaApAQCAtMCwwICsxLDUxNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkT3BlcmF0aW9uX2gKKyNkZWZpbmUgQ29v
cmRpbmF0ZWRPcGVyYXRpb25faAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZFN1
cmZhY2UuaCIKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
UHJvZ3JhbUluZm8uaCIKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyNpbmNsdWRl
ICJGaWx0ZXJPcGVyYXRpb25zLmgiCisjZW5kaWYKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQW5p
bWF0aW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlVG9rZW4uaCIKKyNpbmNsdWRlICJT
dXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIENvb3Jk
aW5hdGVkT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRPcGVyYXRpb24+
IHsKK3B1YmxpYzoKKyAgICBlbnVtIE9wZXJhdGlvblR5cGUgeworICAgICAgICBDcmVhdGVMYXll
cnMsCisgICAgICAgIERlbGV0ZUxheWVycywKKyAgICAgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIsCisgICAgICAgIFN5bmNMYXllclN0YXRlLAorICAgICAgICBTZXRMYXllckNoaWxkcmVuLAor
ICAgICAgICBDcmVhdGVUaWxlRm9yTGF5ZXIsCisgICAgICAgIFVwZGF0ZVRpbGVGb3JMYXllciwK
KyAgICAgICAgUmVtb3ZlVGlsZUZvckxheWVyLAorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhcywK
KyAgICAgICAgUmVtb3ZlVXBkYXRlQXRsYXMsCisgICAgICAgIENyZWF0ZUltYWdlQmFja2luZywK
KyAgICAgICAgVXBkYXRlSW1hZ2VCYWNraW5nLAorICAgICAgICBDbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzLAorICAgICAgICBSZW1vdmVJbWFnZUJhY2tpbmcsCisgICAgICAgIFNldExheWVyQW5p
bWF0aW9ucywKKyAgICAgICAgU2V0QW5pbWF0aW9uc0xvY2tlZCwKKyNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCisgICAgICAgIFJlcXVlc3RBbmltYXRpb25GcmFtZSwKKyNlbmRp
ZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICBDcmVhdGVDYW52YXMsCisgICAg
ICAgIFN5bmNDYW52YXMsCisgICAgICAgIERlc3Ryb3lDYW52YXMsCisjZW5kaWYKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzLAorI2Vu
ZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBDcmVhdGVDdXN0b21GaWx0ZXJQ
cm9ncmFtLAorICAgICAgICBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtLAorI2VuZGlmCisgICAg
ICAgIFNldExheWVyUmVwYWludENvdW50LAorICAgICAgICBTZXRCYWNrZ3JvdW5kQ29sb3IsCisg
ICAgICAgIE5vbmUKKyAgICB9OworCisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJh
dGlvblR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRPcGVyYXRpb24o
KSB7IH07CisKK3Byb3RlY3RlZDoKKyAgICBDb29yZGluYXRlZE9wZXJhdGlvbigpIHsgfQorfTsK
KworY2xhc3MgQ29vcmRpbmF0ZWRDcmVhdGVMYXllcnNPcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRp
bmF0ZWRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkQ3JlYXRlTGF5ZXJzT3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mIGxheWVySURzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
b29yZGluYXRlZENyZWF0ZUxheWVyc09wZXJhdGlvbihsYXllcklEcykpOworICAgIH0KKyAgICBl
eHBsaWNpdCBDb29yZGluYXRlZENyZWF0ZUxheWVyc09wZXJhdGlvbihjb25zdCBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiYgaWRzKQorICAgICAgICA6IGxheWVySURzKGlkcykKKyAgICB7IH0K
KworICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gQ3JlYXRlTGF5ZXJzOyB9CisKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRM
YXllcklEPiBsYXllcklEczsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkRGVsZXRlTGF5ZXJzT3Bl
cmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZERlbGV0ZUxheWVyc09wZXJhdGlvbj4gY3JlYXRlKGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklEcykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWREZWxldGVMYXllcnNPcGVyYXRpb24obGF5
ZXJJRHMpKTsKKyAgICB9CisgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWREZWxldGVMYXllcnNPcGVy
YXRpb24oY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlkcykKKyAgICAgICAgOiBs
YXllcklEcyhpZHMpCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3Bl
cmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIERlbGV0ZUxheWVyczsgfQorCisg
ICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbGF5ZXJJRHM7Cit9OworCitjbGFzcyBDb29y
ZGluYXRlZFNldFJvb3RDb21wb3NpdGluZ0xheWVyT3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5h
dGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZFNldFJvb3RDb21wb3NpdGluZ0xheWVyT3BlcmF0aW9uPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXll
cklEIGxheWVySUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5h
dGVkU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXJPcGVyYXRpb24obGF5ZXJJRCkpOworICAgIH0KKyAg
ICBleHBsaWNpdCBDb29yZGluYXRlZFNldFJvb3RDb21wb3NpdGluZ0xheWVyT3BlcmF0aW9uKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCkKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgIHsgfQorCisg
ICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBTZXRSb290Q29tcG9zaXRpbmdMYXllcjsgfQorCisgICAgQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQ7Cit9OworCitjbGFzcyBDb29yZGluYXRlZFN5bmNMYXllclN0YXRlT3Bl
cmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN5bmNMYXllclN0YXRlT3BlcmF0aW9uPiBjcmVhdGUo
Q29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBs
YXllckluZm8pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVk
U3luY0xheWVyU3RhdGVPcGVyYXRpb24obGF5ZXJJRCwgbGF5ZXJJbmZvKSk7CisgICAgfQorICAg
IENvb3JkaW5hdGVkU3luY0xheWVyU3RhdGVPcGVyYXRpb24oQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKKyAgICAgICAgOiBsYXllcklEKGlk
KQorICAgICAgICAsIGxheWVySW5mbyhpbmZvKQorICAgIHsgfQorCisgICAgdmlydHVhbCBPcGVy
YXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTeW5j
TGF5ZXJTdGF0ZTsgfQorCisgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgQ29v
cmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvOworfTsKKworCitjbGFzcyBDb29yZGluYXRlZFNl
dExheWVyQ2hpbGRyZW5PcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRpbmF0ZWRPcGVyYXRpb24gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU2V0TGF5ZXJDaGlsZHJl
bk9wZXJhdGlvbj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvb3JkaW5hdGVkU2V0TGF5ZXJDaGlsZHJlbk9wZXJhdGlvbihsYXllcklE
LCBjaGlsZHJlbikpOworICAgIH0KKyAgICBDb29yZGluYXRlZFNldExheWVyQ2hpbGRyZW5PcGVy
YXRpb24oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYgY2hpbGRyZW5WZWN0b3IpCisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCBj
aGlsZHJlbihjaGlsZHJlblZlY3RvcikKKyAgICB7IH0KKworICAgIHZpcnR1YWwgT3BlcmF0aW9u
VHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU2V0TGF5ZXJD
aGlsZHJlbjsgfQorCisgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hpbGRyZW47Cit9OworCitjbGFzcyBDb29yZGluYXRlZENy
ZWF0ZVRpbGVGb3JMYXllck9wZXJhdGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRDcmVhdGVUaWxlRm9y
TGF5ZXJPcGVyYXRpb24+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENvb3JkaW5hdGVkQ3JlYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uKGxheWVySUQsIHRpbGVJ
RCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRDcmVhdGVU
aWxlRm9yTGF5ZXJPcGVyYXRpb24oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxl
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYg
aW5mbykKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAsIHRpbGVJRCh0aWxlKQorICAg
ICAgICAsIHRpbGVSZWN0KHJlY3QpCisgICAgICAgICwgdXBkYXRlSW5mbyhpbmZvKQorICAgIHsg
fQorCisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBDcmVhdGVUaWxlRm9yTGF5ZXI7IH0KKworICAgIENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklEOworICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IHRpbGVSZWN0OworICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87Cit9OworCitj
bGFzcyBDb29yZGluYXRlZFVwZGF0ZVRpbGVGb3JMYXllck9wZXJhdGlvbiA6IHB1YmxpYyBDb29y
ZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRp
bmF0ZWRVcGRhdGVUaWxlRm9yTGF5ZXJPcGVyYXRpb24+IGNyZWF0ZShDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkVXBkYXRlVGlsZUZvckxheWVyT3BlcmF0
aW9uKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKKyAgICB9CisgICAg
Q29vcmRpbmF0ZWRVcGRhdGVUaWxlRm9yTGF5ZXJPcGVyYXRpb24oQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCB1aW50MzJfdCB0aWxlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0LCBjb25zdCBT
dXJmYWNlVXBkYXRlSW5mbyYgaW5mbykKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAs
IHRpbGVJRCh0aWxlKQorICAgICAgICAsIHRpbGVSZWN0KHJlY3QpCisgICAgICAgICwgdXBkYXRl
SW5mbyhpbmZvKQorICAgIHsgfQorCisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJh
dGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBVcGRhdGVUaWxlRm9yTGF5ZXI7IH0K
KworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgIHVpbnQzMl90IHRpbGVJRDsK
KyAgICBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0OworICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVw
ZGF0ZUluZm87Cit9OworCitjbGFzcyBDb29yZGluYXRlZFJlbW92ZVRpbGVGb3JMYXllck9wZXJh
dGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRSZW1vdmVUaWxlRm9yTGF5ZXJPcGVyYXRpb24+IGNyZWF0
ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZFJlbW92ZVRpbGVGb3JMYXllck9w
ZXJhdGlvbihsYXllcklELCB0aWxlSUQpKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRSZW1vdmVU
aWxlRm9yTGF5ZXJPcGVyYXRpb24oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxl
KQorICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICwgdGlsZUlEKHRpbGUpCisgICAgeyB9
CisKKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIFJlbW92ZVRpbGVGb3JMYXllcjsgfQorCisgICAgQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQ7CisgICAgdWludDMyX3QgdGlsZUlEOworfTsKKworY2xhc3MgQ29vcmRp
bmF0ZWRDcmVhdGVVcGRhdGVBdGxhc09wZXJhdGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJh
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRDcmVhdGVV
cGRhdGVBdGxhc09wZXJhdGlvbj4gY3JlYXRlKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDb29yZGluYXRlZENyZWF0ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uKGF0bGFzSUQsIHN1
cmZhY2UpKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRDcmVhdGVVcGRhdGVBdGxhc09wZXJhdGlv
bih1aW50MzJfdCBpZCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVk
U3VyZmFjZSkKKyAgICAgICAgOiBhdGxhc0lEKGlkKQorICAgICAgICAsIHN1cmZhY2UoY29vcmRp
bmF0ZWRTdXJmYWNlKQorICAgIHsgfQorCisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9w
ZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDcmVhdGVVcGRhdGVBdGxhczsg
fQorCisgICAgdWludDMyX3QgYXRsYXNJRDsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiBzdXJmYWNlOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRSZW1vdmVVcGRhdGVBdGxhc09wZXJh
dGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRSZW1vdmVVcGRhdGVBdGxhc09wZXJhdGlvbj4gY3JlYXRl
KHVpbnQzMl90IGF0bGFzSUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENv
b3JkaW5hdGVkUmVtb3ZlVXBkYXRlQXRsYXNPcGVyYXRpb24oYXRsYXNJRCkpOworICAgIH0KKyAg
ICBleHBsaWNpdCBDb29yZGluYXRlZFJlbW92ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uKHVpbnQzMl90
IGlkKQorICAgICAgICA6IGF0bGFzSUQoaWQpCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIE9wZXJh
dGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFJlbW92
ZVVwZGF0ZUF0bGFzOyB9CisKKyAgICB1aW50MzJfdCBhdGxhc0lEOworfTsKKworY2xhc3MgQ29v
cmRpbmF0ZWRDcmVhdGVJbWFnZUJhY2tpbmdPcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRpbmF0ZWRP
cGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQ3Jl
YXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUJhY2tpbmdJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29v
cmRpbmF0ZWRDcmVhdGVJbWFnZUJhY2tpbmdPcGVyYXRpb24oaW1hZ2VCYWNraW5nSUQpKTsKKyAg
ICB9CisgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRDcmVhdGVJbWFnZUJhY2tpbmdPcGVyYXRpb24o
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCkKKyAgICAgICAgOiBpbWFnZUJhY2tpbmdJRChp
ZCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBl
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ3JlYXRlSW1hZ2VCYWNraW5nOyB9CisKKyAgICBD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEOworfTsKKworY2xhc3MgQ29v
cmRpbmF0ZWRVcGRhdGVJbWFnZUJhY2tpbmdPcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRpbmF0ZWRP
cGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkVXBk
YXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2Up
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkVXBkYXRlSW1h
Z2VCYWNraW5nT3BlcmF0aW9uKGltYWdlQmFja2luZ0lELCBzdXJmYWNlKSk7CisgICAgfQorICAg
IENvb3JkaW5hdGVkVXBkYXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaWQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1
cmZhY2UpCisgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQpCisgICAgICAgICwgc3VyZmFjZShj
b29yZGluYXRlZFN1cmZhY2UpCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUg
Z2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFVwZGF0ZUltYWdlQmFj
a2luZzsgfQorCisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRDsK
KyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlOworfTsKKworY2xhc3MgQ29v
cmRpbmF0ZWRDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzT3BlcmF0aW9uIDogcHVibGljIENvb3Jk
aW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZENsZWFySW1hZ2VCYWNraW5nQ29udGVudHNPcGVyYXRpb24+IGNyZWF0ZShDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDb29yZGluYXRlZENsZWFySW1hZ2VCYWNraW5nQ29udGVudHNPcGVyYXRpb24o
aW1hZ2VCYWNraW5nSUQpKTsKKyAgICB9CisgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRDbGVhcklt
YWdlQmFja2luZ0NvbnRlbnRzT3BlcmF0aW9uKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQp
CisgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQpCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIE9w
ZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHM7IH0KKworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VCYWNraW5nSUQ7Cit9OworCitjbGFzcyBDb29yZGluYXRlZFJlbW92ZUltYWdlQmFj
a2luZ09wZXJhdGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRp
b24+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZFJlbW92ZUltYWdlQmFj
a2luZ09wZXJhdGlvbihpbWFnZUJhY2tpbmdJRCkpOworICAgIH0KKyAgICBleHBsaWNpdCBDb29y
ZGluYXRlZFJlbW92ZUltYWdlQmFja2luZ09wZXJhdGlvbihDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGlkKQorICAgICAgICA6IGltYWdlQmFja2luZ0lEKGlkKQorICAgIHsgfQorCisgICAgdmly
dHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBSZW1vdmVJbWFnZUJhY2tpbmc7IH0KKworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VCYWNraW5nSUQ7Cit9OworCitjbGFzcyBDb29yZGluYXRlZFNldExheWVyQW5pbWF0
aW9uc09wZXJhdGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlvbnNPcGVyYXRp
b24+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvb3JkaW5hdGVkU2V0TGF5ZXJBbmltYXRpb25zT3BlcmF0aW9uKGxheWVy
SUQsIGFuaW1hdGlvbnMpKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlv
bnNPcGVyYXRpb24oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucyYgbGF5ZXJBbmltYXRpb25zKQorICAgICAgICA6IGxheWVySUQoaWQp
CisgICAgICAgICwgYW5pbWF0aW9ucyhsYXllckFuaW1hdGlvbnMpCisgICAgeyB9CisKKyAgICB2
aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIFNldExheWVyQW5pbWF0aW9uczsgfQorCisgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxh
eWVySUQ7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9uczsK
K307CisKK2NsYXNzIENvb3JkaW5hdGVkU2V0QW5pbWF0aW9uc0xvY2tlZE9wZXJhdGlvbiA6IHB1
YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q29vcmRpbmF0ZWRTZXRBbmltYXRpb25zTG9ja2VkT3BlcmF0aW9uPiBjcmVhdGUoYm9vbCBs
b2NrZWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkU2V0
QW5pbWF0aW9uc0xvY2tlZE9wZXJhdGlvbihsb2NrZWQpKTsKKyAgICB9CisgICAgZXhwbGljaXQg
Q29vcmRpbmF0ZWRTZXRBbmltYXRpb25zTG9ja2VkT3BlcmF0aW9uKGJvb2wgdmFsdWUpCisgICAg
ICAgIDogbG9ja2VkKHZhbHVlKQorICAgIHsgfQorCisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBl
IGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTZXRBbmltYXRpb25z
TG9ja2VkOyB9CisKKyAgICBib29sIGxvY2tlZDsKK307CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCitjbGFzcyBDb29yZGluYXRlZFJlcXVlc3RBbmltYXRpb25GcmFtZU9w
ZXJhdGlvbiA6IHB1YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVPcGVyYXRpb24+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVk
UmVxdWVzdEFuaW1hdGlvbkZyYW1lT3BlcmF0aW9uKCkpOworICAgIH0KKyAgICBDb29yZGluYXRl
ZFJlcXVlc3RBbmltYXRpb25GcmFtZU9wZXJhdGlvbigpCisgICAgeyB9CisKKyAgICB2aXJ0dWFs
IE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IFJlcXVlc3RBbmltYXRpb25GcmFtZTsgfQorfTsKKyNlbmRpZgorCisjaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCitjbGFzcyBDb29yZGluYXRlZENyZWF0ZUNhbnZhc09wZXJhdGlvbiA6IHB1Ymxp
YyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRDcmVhdGVDYW52YXNPcGVyYXRpb24+IGNyZWF0ZShDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZENyZWF0ZUNhbnZhc09wZXJhdGlvbihsYXllcklELCBj
YW52YXNTaXplLCB0b2tlbikpOworICAgIH0KKyAgICBDb29yZGluYXRlZENyZWF0ZUNhbnZhc09w
ZXJhdGlvbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNp
emUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJiBzdXJmYWNlVG9rZW4pCisg
ICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCBjYW52YXNTaXplKHNpemUpCisgICAgICAg
ICwgdG9rZW4oc3VyZmFjZVRva2VuKQorICAgIHsgfQorCisgICAgdmlydHVhbCBPcGVyYXRpb25U
eXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDcmVhdGVDYW52
YXM7IH0KKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgIFdlYkNvcmU6Oklu
dFNpemUgY2FudmFzU2l6ZTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tl
bjsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkU3luY0NhbnZhc09wZXJhdGlvbiA6IHB1YmxpYyBD
b29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTeW5jQ2FudmFzT3BlcmF0aW9uPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxh
eWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDb29yZGluYXRlZFN5bmNDYW52YXNPcGVyYXRpb24obGF5ZXJJRCwgZnJvbnRCdWZm
ZXIpKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRTeW5jQ2FudmFzT3BlcmF0aW9uKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXJIYW5kbGUpCisgICAgICAgIDogbGF5
ZXJJRChpZCkKKyAgICAgICAgLCBmcm9udEJ1ZmZlcihmcm9udEJ1ZmZlckhhbmRsZSkKKyAgICB7
IH0KKworICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gU3luY0NhbnZhczsgfQorCisgICAgQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQ7CisgICAgdWludDMyX3QgZnJvbnRCdWZmZXI7Cit9OworCitjbGFzcyBDb29yZGlu
YXRlZERlc3Ryb3lDYW52YXNPcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRpbmF0ZWRPcGVyYXRpb24g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkRGVzdHJveUNhbnZh
c09wZXJhdGlvbj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZERlc3Ryb3lDYW52YXNPcGVyYXRp
b24obGF5ZXJJRCkpOworICAgIH0KKyAgICBleHBsaWNpdCBDb29yZGluYXRlZERlc3Ryb3lDYW52
YXNPcGVyYXRpb24oQ29vcmRpbmF0ZWRMYXllcklEIGlkKQorICAgICAgICA6IGxheWVySUQoaWQp
CisgICAgeyB9CisKKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIERlc3Ryb3lDYW52YXM7IH0KKworICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklEOworfTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJT
KQorY2xhc3MgQ29vcmRpbmF0ZWRTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVyc09wZXJhdGlvbiA6
IHB1YmxpYyBDb29yZGluYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVyc09wZXJhdGlvbj4gY3Jl
YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29y
ZGluYXRlZFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzT3BlcmF0aW9uKGxheWVySUQsIGZpbHRl
cnMpKTsKKyAgICB9CisgICAgQ29vcmRpbmF0ZWRTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVyc09w
ZXJhdGlvbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlck9wZXJhdGlvbnMpCisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAg
LCBmaWx0ZXJzKGZpbHRlck9wZXJhdGlvbnMpCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIE9wZXJh
dGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFNldENv
bXBvc2l0aW5nTGF5ZXJGaWx0ZXJzOyB9CisKKyAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RDsKKyAgICBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7Cit9OworCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorY2xhc3MgQ29vcmRpbmF0ZWRDcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtT3BlcmF0aW9uIDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1P
cGVyYXRpb24+IGNyZWF0ZShpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBjb25zdCBXZWJDb3Jl
OjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbU9w
ZXJhdGlvbihjdXN0b21GaWx0ZXJQcm9ncmFtSUQsIHByb2dyYW1JbmZvKSk7CisgICAgfQorICAg
IENvb3JkaW5hdGVkQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbU9wZXJhdGlvbihpbnQgcHJvZ3Jh
bUlELCBjb25zdCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgaW5mbykKKyAgICAg
ICAgOiBjdXN0b21GaWx0ZXJQcm9ncmFtSUQocHJvZ3JhbUlEKQorICAgICAgICAsIHByb2dyYW1J
bmZvKGluZm8pCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0
aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENyZWF0ZUN1c3RvbUZpbHRlclByb2dy
YW07IH0KKworICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgV2ViQ29yZTo6Q3Vz
dG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJvZ3JhbUluZm87Cit9OworCitjbGFzcyBDb29yZGluYXRl
ZFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb24gOiBwdWJsaWMgQ29vcmRpbmF0ZWRP
cGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkUmVt
b3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbU9wZXJhdGlvbj4gY3JlYXRlKGludCBjdXN0b21GaWx0ZXJQ
cm9ncmFtSUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVk
UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbU9wZXJhdGlvbihjdXN0b21GaWx0ZXJQcm9ncmFtSUQp
KTsKKyAgICB9CisgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRSZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtT3BlcmF0aW9uKGludCBwcm9ncmFtSUQpCisgICAgICAgIDogY3VzdG9tRmlsdGVyUHJvZ3Jh
bUlEKHByb2dyYW1JRCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRP
cGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gUmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbTsgfQorCisgICAgaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRDsKK307CisjZW5kaWYK
KyNlbmRpZgorCitjbGFzcyBDb29yZGluYXRlZFNldExheWVyUmVwYWludENvdW50T3BlcmF0aW9u
IDogcHVibGljIENvb3JkaW5hdGVkT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDb29yZGluYXRlZFNldExheWVyUmVwYWludENvdW50T3BlcmF0aW9uPiBjcmVhdGUo
Q29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGludCByZXBhaW50Q291bnQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkU2V0TGF5ZXJSZXBhaW50Q291bnRP
cGVyYXRpb24obGF5ZXJJRCwgcmVwYWludENvdW50KSk7CisgICAgfQorICAgIENvb3JkaW5hdGVk
U2V0TGF5ZXJSZXBhaW50Q291bnRPcGVyYXRpb24oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQg
Y291bnQpCisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCByZXBhaW50Q291bnQoY291
bnQpCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlw
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFNldExheWVyUmVwYWludENvdW50OyB9CisKKyAg
ICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICBpbnQgcmVwYWludENvdW50OworfTsK
KworY2xhc3MgQ29vcmRpbmF0ZWRTZXRCYWNrZ3JvdW5kQ29sb3JPcGVyYXRpb24gOiBwdWJsaWMg
Q29vcmRpbmF0ZWRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkU2V0QmFja2dyb3VuZENvbG9yT3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgV2ViQ29y
ZTo6Q29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29y
ZGluYXRlZFNldEJhY2tncm91bmRDb2xvck9wZXJhdGlvbihjb2xvcikpOworICAgIH0KKyAgICBl
eHBsaWNpdCBDb29yZGluYXRlZFNldEJhY2tncm91bmRDb2xvck9wZXJhdGlvbihjb25zdCBXZWJD
b3JlOjpDb2xvciYgYmFja2dyb3VuZENvbG9yKQorICAgICAgICA6IGNvbG9yKGJhY2tncm91bmRD
b2xvcikKKyAgICB7IH0KKworICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25U
eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU2V0QmFja2dyb3VuZENvbG9yOyB9CisKKyAg
ICBXZWJDb3JlOjpDb2xvciBjb2xvcjsKK307CisKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gQ29v
cmRpbmF0ZWRPcGVyYXRpb25faAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9TdXJmYWNlVXBkYXRlSW5mby5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUluZm8uaAppbmRleCAyNzI4
OWZjZGYwZmZiOWZlZTA2ZTA0NDE5ODQ4MzE3MGY4MzJmYjI5Li4wZGFlZTE1ZTQ2ODJlZWQzNGU1
NDI2OGI4YzM0YTVhOTYwZTlkYzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9TdXJmYWNlVXBkYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1N1cmZhY2VVcGRhdGVJbmZvLmgKQEAgLTIz
LDEzICsyMywxMCBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2luY2x1ZGUg
PFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm8gewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFN1cmZhY2VVcGRhdGVJbmZvKTsKLQogcHVibGljOgogICAgIFN1cmZhY2VV
cGRhdGVJbmZvKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkg
Yi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGJhZWIxMjhlNTA2MTgxNmJkOTE5ZGVi
ZmUwY2VmMzcwMjI5YzJmYzkuLjg4NTAxMGIxMDc1NjEzOTFmYmNjYmUwYmQ1ZWY1ZjQyOWRkYmNm
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dl
YktpdDIvVGFyZ2V0LnByaQpAQCAtMTQwLDYgKzE0MCw4IEBAIEhFQURFUlMgKz0gXAogICAgIFNo
YXJlZC9XZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggXAogICAgIFNoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggXAorICAgIFNoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkT3BlcmF0aW9uLmggXAorICAgIFNoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkT3BlcmF0aW9ucy5oIFwKICAgICBTaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaCBcCiAgICAgU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUluZm8uaCBcCiAgICAgU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmggXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCmluZGV4IGQxNTRi
MTNjMTk0NGQ2MzUyZTBhZjI5NWNhNzA1NzI5ZmIxMzMxNzQuLjRmYzcwYTM0OGNhMmM1NjQ0YzVm
NzQ0YTBkYThkMzk0ZGQ3NzFhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTIyLDE3ICsyMiwxMiBAQAogI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5oIgogCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJD
b29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVk
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCi0jaW5jbHVkZSAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZh
Y2UuaD4KLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mby5oIgotI2VuZGlmCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKQEAgLTY1LDc4ICs2MCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0CiAgICAgbV9yZW5kZXJlci0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKIH0KIAotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVU
aWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVG
YWN0b3IpKTsKLSAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVj
dCwgdXBkYXRlSW5mbyk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlE
LCBMYXllclRyZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRp
bGVSZWN0LCB1cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxh
eWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUsIG1fcmVu
ZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25z
dCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVVcGRhdGVBdGxhcywgbV9yZW5k
ZXJlci5nZXQoKSwgYXRsYXNJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxl
KSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxh
eWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVVcGRhdGVBdGxhcywgbV9yZW5kZXJlci5nZXQoKSwgYXRs
YXNJRCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVD
b21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVMYXll
cnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkcykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8Q29vcmRp
bmF0ZWRMYXllcklEPiYgaWRzKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpkZWxldGVMYXllcnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkcykpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXll
cihDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklELCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xh
eWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5m
byYgaW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
c2V0TGF5ZXJTdGF0ZSwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGluZm8pKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVu
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4m
IGNoaWxkcmVuKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpzZXRMYXllckNoaWxkcmVuLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKLX0K
LQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdldCgp
LCBpZCwgZmlsdGVycykpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtKGludCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW0oaW50IGlkLCBjb25zdCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJv
Z3JhbUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0sIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBwcm9ncmFt
SW5mbykpOwotfQotI2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGluYXRlZE9wZXJhdGlvbnMoY29uc3QgQ29vcmRpbmF0
ZWRPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50
c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQogewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9y
ZW5kZXJlci5nZXQoKSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpjb21taXRDb29yZGluYXRlZE9wZXJhdGlvbnMsIG1fcmVuZGVyZXIuZ2V0KCksIG9wZXJh
dGlvbnMpKTsKICAgICB1cGRhdGVWaWV3cG9ydCgpOwogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250
ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsKQEAgLTE0Niw0MSArNzIsMTEgQEAgdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgY29udGUKICNlbmRpZgogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJ
bWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5k
bGUmIGhhbmRsZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6dXBkYXRlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCBXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVy
VHJlZVJlbmRlcmVyOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzLCBtX3JlbmRlcmVyLmdldCgp
LCBpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJl
bW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUltYWdlQmFj
a2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250
ZW50c1NpemUpCiB7CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7CiB9CiAK
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyhD
b29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmlt
YXRpb25zKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpz
ZXRMYXllckFuaW1hdGlvbnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2Nr
ZWQoYm9vbCBsb2NrZWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fcmVuZGVyZXIuZ2V0KCksIGxvY2tlZCkpOwot
fQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25z
dCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewogICAgIC8vIEluZm9ybSB0aGUgcmVu
ZGVyZXIgdG8gYWRqdXN0IHZpZXdwb3J0LWZpeGVkIGxheWVycy4KQEAgLTIwNCw1MCArMTAwLDE2
IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgp
CiB9CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZXF1ZXN0QW5pbWF0aW9uRnJh
bWUsIG1fcmVuZGVyZXIuZ2V0KCkpKTsKLSAgICB1cGRhdGVWaWV3cG9ydCgpOwotfQotCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjphbmltYXRpb25GcmFtZVJlYWR5KCkKIHsK
ICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkFuaW1hdGlvbkZyYW1lUmVhZHkoKSwgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KICNlbmRpZgogCi0jaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVh
dGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXpl
LCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NTdXJm
YWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVy
ZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVDYW52YXMsIG1fcmVuZGVyZXIu
Z2V0KCksIGlkLCBjYW52YXNTaXplLCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjYW52YXNTaXpl
LCBzdXJmYWNlRmxhZ3MsIHRva2VuKSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJv
bnRCdWZmZXIpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6ZGVzdHJveUNhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0KLSNlbmRpZgot
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllclJlcGFpbnRDb3Vu
dChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJSZXBhaW50Q291bnQsIG1fcmVuZGVy
ZXIuZ2V0KCksIGlkLCB2YWx1ZSkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+
cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdl
SUQoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEJhY2tncm91bmRDb2xvciwgbV9yZW5k
ZXJlci5nZXQoKSwgY29sb3IpKTsKLX0KLQogfQogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5oCmluZGV4IDExYTU3NmZjZTBmMWI0ZTQ5YTFjNDIxNjBiNjlkMmEyMWI3MmU2MzguLmI2
YTA4NDhhN2JlNTZiMzQ1YTU1YTcyM2E2YWMyNmI2YTdjNmJhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaApAQCAtMjYsMjQgKzI2LDEy
IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIK
LSNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3Au
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3Mg
Q29vcmRpbmF0ZWRPcGVyYXRpb25zOwogY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXI7CiAKIGNsYXNz
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IHsKQEAgLTUyLDQ4ICs0MCwxNyBAQCBjbGFz
cyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSopOwogICAgIH5D
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdM
YXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8m
KTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19G
SUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGlu
dCBpZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKLSAgICB2b2lk
IHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKLSNlbmRpZgotICAgIHZvaWQgY3Jl
YXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsK
LSAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihDb29yZGluYXRl
ZExheWVySUQpOworICAgIHZvaWQgY29tbWl0Q29vcmRpbmF0ZWRPcGVyYXRpb25zKGNvbnN0IENv
b3JkaW5hdGVkT3BlcmF0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6
ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpOwogICAgIHZvaWQgc2V0Q29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBwYWdlU2NhbGVG
YWN0b3IsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpOwotICAg
IHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXpl
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7Ci0gICAgdm9pZCBjcmVhdGVU
aWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBk
YXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lk
IHJlbW92ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7
Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwotICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsK
LSAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCk7Ci0gICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6
Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogICAgIHZvaWQg
cmVuZGVyTmV4dEZyYW1lKCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBj
cmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKLSAgICB2b2lkIHN5bmNDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBk
ZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExh
eWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKICAgICB2b2lk
IHB1cmdlQmFja2luZ1N0b3JlcygpOwogICAgIExheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVS
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zJik7Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wp
OwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RB
bmltYXRpb25GcmFtZSgpOwogICAgIHZvaWQgYW5pbWF0aW9uRnJhbWVSZWFkeSgpOwogI2VuZGlm
Ci0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKIAog
ICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4K
aW5kZXggODE4ZjNhZThlYWY3MTM0Zjc1MzhjMjVhMzZmM2U0ZTQ3ZDU5YzQzOS4uZDk2Yzc1ODQ2
NDIwNjNkNTE5ODQwNTA3MDE2NWQ2ZTM0OGFkZWUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KQEAg
LTE5LDQzICsxOSw2IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiBtZXNzYWdl
cyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSBMZWdhY3lSZWNlaXZlciB7Ci0gICAg
U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJJbmZvIGxheWVySW5mbykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWlu
dDMyX3QgaWQsIFZlY3Rvcjx1aW50MzJfdD4gY2hpbGRyZW4pCi0jaWYgRU5BQkxFKENTU19GSUxU
RVJTKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMpCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi0gICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIFdlYkNvcmU6OkN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZvKQotICAgIFJlbW92ZUN1c3RvbUZpbHRlclBy
b2dyYW0oaW50IGlkKQotI2VuZGlmCi0gICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMy
X3QgaWQpCi0gICAgQ3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMp
Ci0gICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAg
Q3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2Vi
Q29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJ
bmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUlu
Zm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlEKQotICAgIENyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQs
IFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQotICAgIFJlbW92
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi0gICAgQ3JlYXRlSW1hZ2VCYWNraW5nKHVp
bnQ2NF90IGltYWdlSUQpCi0gICAgVXBkYXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQs
IFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQotICAgIENsZWFy
SW1hZ2VCYWNraW5nQ29udGVudHModWludDY0X3QgaW1hZ2VJRCkKLSAgICBSZW1vdmVJbWFnZUJh
Y2tpbmcodWludDY0X3QgaW1hZ2VJRCkKLSAgICBEaWRSZW5kZXJGcmFtZShXZWJDb3JlOjpJbnRT
aXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb3ZlcmVkUmVjdCkKLSAgICBTZXRM
YXllckFuaW1hdGlvbnModWludDMyX3QgaWQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRp
b25zIGFuaW1hdGlvbnMpCi0gICAgU2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKLQot
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICBSZXF1ZXN0QW5pbWF0aW9u
RnJhbWUoKQotI2VuZGlmCi0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBDcmVhdGVD
YW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgV2ViQ29yZTo6
R3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4pCi0gICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwg
dWludDMyX3QgZnJvbnRCdWZmZXIpCi0gICAgRGVzdHJveUNhbnZhcyh1aW50MzJfdCBpZCkKLSNl
bmRpZgotCi0gICAgU2V0TGF5ZXJSZXBhaW50Q291bnQodWludDMyX3QgbGF5ZXJJRCwgaW50IHZh
bHVlKQotCi0gICAgU2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorICAg
IENvbW1pdENvb3JkaW5hdGVkT3BlcmF0aW9ucyhXZWJLaXQ6OkNvb3JkaW5hdGVkT3BlcmF0aW9u
cyBvcGVyYXRpb25zLCBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50
UmVjdCBjb3ZlcmVkUmVjdCkKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuY3BwCmluZGV4IGI3NGU2OTBiNmI4YWJmZWJjMjVlOWI2NTk0OTI5YTFlYWFiNGRlZjguLjA2
ZTE4Mzg4ZmIwMDhkNDBiNjU3YjA0MmZkMzlmN2FhOTFmMjIyZWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKQEAgLTU2Myw4ICs1NjQsMTEgQEAgdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKQogICAgIG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwogfQogCi12b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcygpCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
Ojpjb21taXRDb29yZGluYXRlZE9wZXJhdGlvbnMoY29uc3QgQ29vcmRpbmF0ZWRPcGVyYXRpb25z
JiBvcGVyYXRpb25zKQogeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmF0aW9ucy5z
aXplKCk7IGkrKykKKyAgICAgICAgZXhlY3V0ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKG9wZXJhdGlv
bnMuYXQoaSkpOworCiAgICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBtX3Bl
bmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247CiAKICAgICAvLyBTaW5jZSB0aGUg
ZnJhbWUgaGFzIG5vdyBiZWVuIHJlbmRlcmVkLCB3ZSBjYW4gc2FmZWx5IHVubG9jayB0aGUgYW5p
bWF0aW9ucyB1bnRpbCB0aGUgbmV4dCBsYXlvdXQuCkBAIC01NzgsNiArNTgyLDExOSBAQCB2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcygpCiAgICAgZGlzcGF0Y2hPbk1h
aW5UaHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSwgdGhpcykp
OwogfQogCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpleGVjdXRlQ29vcmRpbmF0ZWRPcGVyYXRp
b24oY29uc3QgQ29vcmRpbmF0ZWRPcGVyYXRpb24qIG9wZXJhdGlvbikKK3sKKyAgICBzd2l0Y2gg
KG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBDb29yZGluYXRlZE9w
ZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOgorICAgICAgICBjcmVhdGVMYXllcnMoc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVMYXllcnNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5sYXll
cklEcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OkRl
bGV0ZUxheWVyczoKKyAgICAgICAgZGVsZXRlTGF5ZXJzKHN0YXRpY19jYXN0PGNvbnN0IENvb3Jk
aW5hdGVkRGVsZXRlTGF5ZXJzT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRSb290Q29tcG9z
aXRpbmdMYXllcjoKKyAgICAgICAgc2V0Um9vdExheWVySUQoc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRTZXRSb290Q29tcG9zaXRpbmdMYXllck9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmxh
eWVySUQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpT
eW5jTGF5ZXJTdGF0ZToKKyAgICAgICAgc2V0TGF5ZXJTdGF0ZShzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZFN5bmNMYXllclN0YXRlT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU3luY0xheWVyU3RhdGVP
cGVyYXRpb24qPihvcGVyYXRpb24pLT5sYXllckluZm8pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOgorICAgICAgICBzZXRM
YXllckNoaWxkcmVuKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU2V0TGF5ZXJDaGlsZHJl
bk9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmxheWVySUQsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZFNldExheWVyQ2hpbGRyZW5PcGVyYXRpb24qPihvcGVyYXRpb24p
LT5jaGlsZHJlbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRp
b246OkNyZWF0ZVRpbGVGb3JMYXllcjogeworICAgICAgICBjb25zdCBDb29yZGluYXRlZENyZWF0
ZVRpbGVGb3JMYXllck9wZXJhdGlvbiogY3JlYXRlVGlsZU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkQ3JlYXRlVGlsZUZvckxheWVyT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KTsKKyAgICAgICAgY3JlYXRlVGlsZShjcmVhdGVUaWxlT3BlcmF0aW9uLT5sYXllcklELCBjcmVh
dGVUaWxlT3BlcmF0aW9uLT50aWxlSUQsIGNyZWF0ZVRpbGVPcGVyYXRpb24tPnVwZGF0ZUluZm8u
c2NhbGVGYWN0b3IpOworICAgICAgICB1cGRhdGVUaWxlKGNyZWF0ZVRpbGVPcGVyYXRpb24tPmxh
eWVySUQsIGNyZWF0ZVRpbGVPcGVyYXRpb24tPnRpbGVJRCwKKyAgICAgICAgICAgIExheWVyVHJl
ZVJlbmRlcmVyOjpUaWxlVXBkYXRlKGNyZWF0ZVRpbGVPcGVyYXRpb24tPnVwZGF0ZUluZm8udXBk
YXRlUmVjdCwgY3JlYXRlVGlsZU9wZXJhdGlvbi0+dGlsZVJlY3QsIGNyZWF0ZVRpbGVPcGVyYXRp
b24tPnVwZGF0ZUluZm8uYXRsYXNJRCwgY3JlYXRlVGlsZU9wZXJhdGlvbi0+dXBkYXRlSW5mby5z
dXJmYWNlT2Zmc2V0KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENvb3JkaW5h
dGVkT3BlcmF0aW9uOjpVcGRhdGVUaWxlRm9yTGF5ZXI6IHsKKyAgICAgICAgY29uc3QgQ29vcmRp
bmF0ZWRDcmVhdGVUaWxlRm9yTGF5ZXJPcGVyYXRpb24qIHVwZGF0ZVRpbGVPcGVyYXRpb24gPSBz
dGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZENyZWF0ZVRpbGVGb3JMYXllck9wZXJhdGlvbio+
KG9wZXJhdGlvbik7CisgICAgICAgIHVwZGF0ZVRpbGUodXBkYXRlVGlsZU9wZXJhdGlvbi0+bGF5
ZXJJRCwgdXBkYXRlVGlsZU9wZXJhdGlvbi0+dGlsZUlELAorICAgICAgICAgICAgTGF5ZXJUcmVl
UmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlVGlsZU9wZXJhdGlvbi0+dXBkYXRlSW5mby51cGRh
dGVSZWN0LCB1cGRhdGVUaWxlT3BlcmF0aW9uLT50aWxlUmVjdCwgdXBkYXRlVGlsZU9wZXJhdGlv
bi0+dXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVUaWxlT3BlcmF0aW9uLT51cGRhdGVJbmZvLnN1
cmZhY2VPZmZzZXQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29vcmRpbmF0
ZWRPcGVyYXRpb246OlJlbW92ZVRpbGVGb3JMYXllcjoKKyAgICAgICAgcmVtb3ZlVGlsZShzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFJlbW92ZVRpbGVGb3JMYXllck9wZXJhdGlvbio+KG9w
ZXJhdGlvbiktPmxheWVySUQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGlu
YXRlZFJlbW92ZVRpbGVGb3JMYXllck9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnRpbGVJRCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OkNyZWF0ZVVwZGF0
ZUF0bGFzOgorICAgICAgICBjcmVhdGVVcGRhdGVBdGxhcyhzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZENyZWF0ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+YXRsYXNJRCwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkQ3JlYXRlVXBkYXRlQXRs
YXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5zdXJmYWNlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6CisgICAgICAgIHJl
bW92ZVVwZGF0ZUF0bGFzKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkUmVtb3ZlVXBkYXRl
QXRsYXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5hdGxhc0lEKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOgorICAgICAg
ICBjcmVhdGVJbWFnZUJhY2tpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVJ
bWFnZUJhY2tpbmdPcGVyYXRpb24qPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFj
a2luZzoKKyAgICAgICAgdXBkYXRlSW1hZ2VCYWNraW5nKHN0YXRpY19jYXN0PGNvbnN0IENvb3Jk
aW5hdGVkVXBkYXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNr
aW5nSUQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFVwZGF0ZUlt
YWdlQmFja2luZ09wZXJhdGlvbio+KG9wZXJhdGlvbiktPnN1cmZhY2UpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzOgorICAgICAgICBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKHN0YXRpY19jYXN0PGNvbnN0
IENvb3JkaW5hdGVkQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c09wZXJhdGlvbio+KG9wZXJhdGlv
biktPmltYWdlQmFja2luZ0lEKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRl
ZE9wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nOgorICAgICAgICByZW1vdmVJbWFnZUJhY2tp
bmcoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRp
b24qPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczoKKyAgICAgICAgc2V0
TGF5ZXJBbmltYXRpb25zKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU2V0TGF5ZXJBbmlt
YXRpb25zT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU2V0TGF5ZXJBbmltYXRpb25zT3BlcmF0aW9uKj4ob3Bl
cmF0aW9uKS0+YW5pbWF0aW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0
ZWRPcGVyYXRpb246OlNldEFuaW1hdGlvbnNMb2NrZWQ6CisgICAgICAgIHNldEFuaW1hdGlvbnNM
b2NrZWQoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRTZXRBbmltYXRpb25zTG9ja2VkT3Bl
cmF0aW9uKj4ob3BlcmF0aW9uKS0+bG9ja2VkKTsKKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246
OlJlcXVlc3RBbmltYXRpb25GcmFtZToKKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7
CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAg
Y2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzOiB7CisgICAgICAgIEdyYXBo
aWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0
c1RleHR1cmVUYXJnZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKKyAgICAg
ICAgY29uc3QgQ29vcmRpbmF0ZWRDcmVhdGVDYW52YXNPcGVyYXRpb24qIGNyZWF0ZUNhbnZhc09w
ZXJhdG9pbiA9IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkQ3JlYXRlQ2FudmFzT3BlcmF0
aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgY3JlYXRlQ2FudmFzKGNyZWF0ZUNhbnZhc09wZXJh
dG9pbi0+bGF5ZXJJRCwgY3JlYXRlQ2FudmFzT3BlcmF0b2luLT5jYW52YXNTaXplLAorICAgICAg
ICAgICAgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY3JlYXRlQ2FudmFzT3BlcmF0b2luLT5jYW52
YXNTaXplLCBzdXJmYWNlRmxhZ3MsIGNyZWF0ZUNhbnZhc09wZXJhdG9pbi0+dG9rZW4pKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlN5bmND
YW52YXM6CisgICAgICAgIHN5bmNDYW52YXMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRT
eW5jQ2FudmFzT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU3luY0NhbnZhc09wZXJhdGlvbio+KG9wZXJhdGlv
biktPmZyb250QnVmZmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZE9w
ZXJhdGlvbjo6RGVzdHJveUNhbnZhczoKKyAgICAgICAgZGVzdHJveUNhbnZhcyhzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZERlc3Ryb3lDYW52YXNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5s
YXllcklEKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRl
cnM6CisgICAgICAgIHNldExheWVyRmlsdGVycyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bGF5ZXJJ
RCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkU2V0Q29tcG9zaXRp
bmdMYXllckZpbHRlcnNPcGVyYXRpb24qPihvcGVyYXRpb24pLT5maWx0ZXJzKTsKKyAgICAgICAg
YnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2FzZSBDb29yZGlu
YXRlZE9wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbToKKyAgICAgICAgY3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZENyZWF0ZUN1
c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5jdXN0b21GaWx0ZXJQcm9n
cmFtSUQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZENyZWF0ZUN1
c3RvbUZpbHRlclByb2dyYW1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5wcm9ncmFtSW5mbyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlJlbW92ZUN1c3Rv
bUZpbHRlclByb2dyYW06CisgICAgICAgIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtT3BlcmF0aW9u
Kj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEKTsKKyAgICAgICAgYnJlYWs7Cisj
ZW5kaWYKKyAgICBjYXNlIENvb3JkaW5hdGVkT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3Vu
dDoKKyAgICAgICAgc2V0TGF5ZXJSZXBhaW50Q291bnQoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRTZXRMYXllclJlcGFpbnRDb3VudE9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmxheWVySUQs
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZFNldExheWVyUmVwYWlu
dENvdW50T3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+cmVwYWludENvdW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb29yZGluYXRlZE9wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOgor
ICAgICAgICBzZXRCYWNrZ3JvdW5kQ29sb3Ioc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRT
ZXRCYWNrZ3JvdW5kQ29sb3JPcGVyYXRpb24qPihvcGVyYXRpb24pLT5jb2xvcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246Ok5vbmU6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSgpCiB7CiAgICAgaWYgKG1fY29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRl
eCAzN2FjZmIzYTM2OTI4NTExMmI5OWM4ZTQxOTZiMjAyOTBhMGE2M2VlLi42YTQ2ZGVkNjliMmY0
NGU1MjMyODQzZWUwNGFlZGFlYWYzY2ZkZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmgKQEAgLTUwLDYgKzUwLDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZTsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Owog
Y2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87CitjbGFzcyBDb29yZGluYXRlZE9wZXJhdGlvbjsK
K2NsYXNzIENvb3JkaW5hdGVkT3BlcmF0aW9uczsKIAogY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXIg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5ZXJUcmVlUmVuZGVyZXI+LCBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CkBAIC03MywxMiArNzUsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpOwogICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPik7Ci0gICAgdm9pZCBz
eW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOwotICAg
IHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOwotI2VuZGlmCi0gICAgdm9p
ZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQsIGludCB2YWx1ZSk7CiAK
ICAgICB2b2lkIGRldGFjaCgpOwogICAgIHZvaWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mKTsKQEAgLTg4LDM5ICs4NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXJnZUdM
UmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CiAKLSAgICB2b2lkIGNyZWF0
ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgZGVs
ZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBz
ZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOwotICAgIHZvaWQgc2V0TGF5ZXJDaGls
ZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+
Jik7Ci0gICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBz
ZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJP
cGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBp
bmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKLSAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dy
YW0oaW50IGlkLCBjb25zdCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwotICAg
IHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwotI2VuZGlmCisgICAgdm9p
ZCBjb21taXRDb29yZGluYXRlZE9wZXJhdGlvbnMoY29uc3QgQ29vcmRpbmF0ZWRPcGVyYXRpb25z
Jik7CiAKLSAgICB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwotICAgIHZvaWQgY3Jl
YXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1
cmZhY2U+KTsKLSAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwot
ICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2lu
ZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2lu
ZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFj
ZT4pOwotICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKTsKLSAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Ci0gICAgdm9pZCBz
ZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IFdlYkNvcmU6OkNvbG9yJik7CiAgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCBl
bmFibGUpIHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KIAotI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgp
OwotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXJC
eUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKICAgICB7CkBAIC0xNTAsNiArMTE3LDQzIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjcmVhdGVMYXllcihDb29yZGluYXRlZExheWVySUQpOwogICAgIHZv
aWQgZGVsZXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKIAorICAgIC8vIEJlZ2luIG9wZXJh
dGlvbiBleGVjdXRpb25zLgorICAgIHZvaWQgZXhlY3V0ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKGNv
bnN0IENvb3JkaW5hdGVkT3BlcmF0aW9uKik7CisgICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3Qg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25z
dCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgc2V0Um9vdExheWVySUQo
Q29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIHNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpOworICAgIHZvaWQgc2V0TGF5ZXJD
aGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVy
SUQ+Jik7CisgICAgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJik7CisgICAgdm9pZCByZW1v
dmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2b2lkIGNy
ZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRT
dXJmYWNlPik7CisgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsK
KyAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsK
KyAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOworICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHNldExheWVy
QW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zJik7CisgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOworI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICB2b2lkIHJlcXVlc3RBbmltYXRp
b25GcmFtZSgpOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdm9pZCBj
cmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+KTsKKyAgICB2b2lkIHN5bmNDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7CisgICAgdm9pZCBk
ZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBj
b25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29u
c3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0TGF5ZXJSZXBh
aW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFsdWUpOworICAgIHZvaWQgc2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CisgICAgLy8gRW5kIG9wZXJhdGlv
biBleGVjdXRpb25zLgorCiAgICAgdm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lk
IGVuc3VyZVJvb3RMYXllcigpOwogICAgIHZvaWQgY29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9w
ZXJhdGlvbnMoKTsKQEAgLTE2MSw2ICsxNjUsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICAgICB2b2lk
IHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KTsKIAorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICB2b2lkIGluamVjdENhY2hlZEN1c3Rv
bUZpbHRlclByb2dyYW1zKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMp
IGNvbnN0OworI2VuZGlmCisKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9jb250ZW50c1NpemU7
CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5j
cHAKaW5kZXggMGZmZDkyMzRjMWU4ODM5NzljYmUxYTMyNGVhOTdmNTYxOGEwMDI1YS4uZDgzZTIy
OTg5ZmYwOTUyM2UxYWVkMDQ2OTg4MWRmYjk3MmQ1OWE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRP
cGVyYXRpb24uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKICNpbmNsdWRlICJGbG9h
dFF1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNTAzLDcgKzUwNCw3IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4oKQogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKICAgICAgICAgY2hpbGRJRHMuYXBwZW5k
KHRvQ29vcmRpbmF0ZWRMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKIAotICAgIG1fY29vcmRpbmF0
b3ItPnN5bmNMYXllckNoaWxkcmVuKG1faWQsIGNoaWxkSURzKTsKKyAgICBtX2Nvb3JkaW5hdG9y
LT5lbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRTZXRMYXllckNoaWxkcmVu
T3BlcmF0aW9uOjpjcmVhdGUobV9pZCwgY2hpbGRJRHMpKTsKIH0KIAogI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKQEAgLTUxMiw3ICs1MTMsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c3luY0ZpbHRlcnMoKQogICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKICAgICAgICAg
cmV0dXJuOwogICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5h
dG9yLT5zeW5jTGF5ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7CisgICAgbV9jb29yZGluYXRv
ci0+ZW5xdWV1ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkU2V0Q29tcG9zaXRpbmdM
YXllckZpbHRlcnNPcGVyYXRpb246OmNyZWF0ZShtX2lkLCBmaWx0ZXJzKCkpKTsKIH0KICNlbmRp
ZgogCkBAIC01NzMsNyArNTc0LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5
bmNMYXllclN0YXRlKCkKICAgICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiAgICAgbV9s
YXllckluZm8uc2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsK
IAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsK
KyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0
ZWRTeW5jTGF5ZXJTdGF0ZU9wZXJhdGlvbjo6Y3JlYXRlKG1faWQsIG1fbGF5ZXJJbmZvKSk7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBD
b2xvciYgY29sb3IsIGZsb2F0IHdpZHRoKQpAQCAtNTkwLDcgKzU5MSw3IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCiAKICAgICBtX3Nob3VsZFN5bmNB
bmltYXRpb25zID0gZmFsc2U7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRMYXllckFuaW1hdGlv
bnMobV9pZCwgbV9hbmltYXRpb25zKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRp
bmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlvbnNPcGVyYXRpb246OmNy
ZWF0ZShtX2lkLCBtX2FuaW1hdGlvbnMpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNDYW52YXMoKQpAQCAtNjAzLDcgKzYwNCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKIAogICAgIEFTU0VSVChtX2NhbnZhc1BsYXRmb3Jt
TGF5ZXIpOwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIG1fY29vcmRpbmF0b3ItPnN5
bmNDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICB1aW50MzJfdCBmcm9u
dEJ1ZmZlciA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7
CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5h
dGVkU3luY0NhbnZhc09wZXJhdGlvbjo6Y3JlYXRlKG1faWQsIGZyb250QnVmZmVyKSk7CiAjZW5k
aWYKICAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IGZhbHNlOwogfQpAQCAtNjE0LDcgKzYxNiw3
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQo
KQogICAgICAgICByZXR1cm47CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX2Nv
b3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1faWQpOworICAgIG1fY29vcmRpbmF0b3ItPmVucXVl
dWVDb29yZGluYXRlZE9wZXJhdGlvbihDb29yZGluYXRlZERlc3Ryb3lDYW52YXNPcGVyYXRpb246
OmNyZWF0ZShtX2lkKSk7CiAjZW5kaWYKICAgICBtX2NhbnZhc05lZWRzRGVzdHJveSA9IGZhbHNl
OwogfQpAQCAtNjI2LDcgKzYyOCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpj
cmVhdGVDYW52YXNJZk5lZWRlZCgpCiAKICAgICBBU1NFUlQobV9jYW52YXNQbGF0Zm9ybUxheWVy
KTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVD
YW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICBJbnRTaXplIGNhbnZhc1Np
emUgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7CisgICAgR3Jh
cGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNz
U3VyZmFjZVRva2VuKCk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkT3Bl
cmF0aW9uKENvb3JkaW5hdGVkQ3JlYXRlQ2FudmFzT3BlcmF0aW9uOjpjcmVhdGUobV9pZCwgY2Fu
dmFzU2l6ZSwgdG9rZW4pKTsKICNlbmRpZgogICAgIG1fY2FudmFzTmVlZHNDcmVhdGUgPSBmYWxz
ZTsKIH0KQEAgLTczMSw3ICs3MzUsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBW
ZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKIHsKICAgICBpZiAoaXNTaG93aW5nUmVwYWlu
dENvdW50ZXIoKSAmJiAhdXBkYXRlZFJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGlu
YXRvci0+c2V0TGF5ZXJSZXBhaW50Q291bnQoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkp
OworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29v
cmRpbmF0ZWRTZXRMYXllclJlcGFpbnRDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKGlkKCksIGluY3Jl
bWVudFJlcGFpbnRDb3VudCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Ojp0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKQpAQCAtNzkwLDIxICs3
OTQsMjEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUodWludDMy
X3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW4KIHsKICAgICBBU1NFUlQobV9jb29yZGlu
YXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMo
KSk7Ci0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUlu
Zm8sIHRpbGVSZWN0KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRPcGVy
YXRpb24oQ29vcmRpbmF0ZWRDcmVhdGVUaWxlRm9yTGF5ZXJPcGVyYXRpb246OmNyZWF0ZShpZCgp
LCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQogewogICAgIEFT
U0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGlu
Z0xheWVyQ2hhbmdlcygpKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVUaWxlKGlkKCksIHRp
bGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3QpOworICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVD
b29yZGluYXRlZE9wZXJhdGlvbihDb29yZGluYXRlZFVwZGF0ZVRpbGVGb3JMYXllck9wZXJhdGlv
bjo6Y3JlYXRlKGlkKCksIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAogdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKQog
ewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+
aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAgICBtX2Nvb3JkaW5h
dG9yLT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1
ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkUmVtb3ZlVGlsZUZvckxheWVyT3BlcmF0
aW9uOjpjcmVhdGUoaWQoKSwgdGlsZUlEKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IDdlYTM4MWY3Y2Y3Yzc1
YWQzNGQ0NTM4NzkwYTBlMzAwYzQ1ZjNhNDguLjVkM2QxOTkxNTI3NTVhODc5M2QzMjYwNDczMmY5
OTE0MTY5NTNlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC00NCw0MCArNDQsMjEgQEAKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI7Ci1jbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsKIH0KIAogbmFtZXNw
YWNlIFdlYktpdCB7CitjbGFzcyBDb29yZGluYXRlZE9wZXJhdGlvbjsKIAogY2xhc3MgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNG
bHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0ID0gMDsKLQotICAgIC8vIENvb3JkaW5hdGVkVGls
ZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRM
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShDb29y
ZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCkgPSAwOwotCiAgICAgdmlydHVhbCBXZWJD
b3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2lu
Z0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5
ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JikgPSAwOwotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSA9IDA7Ci0jZW5kaWYK
LSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRm
b3JtTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklEKSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFp
bnRDb3VudChDb29yZGluYXRlZExheWVySUQsIGludCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaExh
eWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIFdl
YkNvcmU6OkludFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciopID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ29vcmRpbmF0
ZWRPcGVyYXRpb24oUGFzc1JlZlB0cjxDb29yZGluYXRlZE9wZXJhdGlvbj4pID0gMDsKIH07CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nLmNwcAppbmRleCA3MDQzMTQ5MzI1Y2E1YTc2ZGM5NWI0NzUyY2Q2ZWQyZmY5YjZhNmY0
Li4wZjEwZmJmZWY0OGQ0ZjRlNjc5ZDBjYThkMDNkNmNkYmYxN2FjNzI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEltYWdlQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUg
IkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZE9wZXJh
dGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKQEAgLTU2LDcgKzU3LDcgQEAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQdHIKICAgICAv
LyBGSVhNRTogV2Ugd291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFsbCBpbWFnZSBkaXJlY3RseSBp
bnRvIGEgR3JhcGhpY3NTdXJmYWNlLgogICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAxNDI2
CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmcoaWQoKSk7CisgICAgbV9j
b29yZGluYXRvci0+ZW5xdWV1ZUltYWdlQmFja2luZ0Nvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3Jk
aW5hdGVkQ3JlYXRlSW1hZ2VCYWNraW5nT3BlcmF0aW9uOjpjcmVhdGUoaWQoKSkpOwogfQogCiBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkKQEAgLTc2
LDcgKzc3LDcgQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdChIb3N0
KiBob3N0KQogICAgIG1faG9zdHMucmVtb3ZlKHBvc2l0aW9uKTsKIAogICAgIGlmIChtX2hvc3Rz
LmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+cmVtb3ZlSW1hZ2VCYWNraW5nKGlk
KCkpOworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlSW1hZ2VCYWNraW5nQ29vcmRpbmF0
ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRpb246OmNyZWF0
ZShpZCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Om1hcmtEaXJ0eSgp
CkBAIC0xMTUsOSArMTE2LDggQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRl
KCkKIAogICAgIG1fbmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogCi0gICAgLy8gSWYgc2VuZGluZyB0aGUgbWVzc2FnZSBmYWlscywgdHJ5IGFn
YWluIGluIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2Nvb3JkaW5hdG9y
LT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9zdXJmYWNlKTsKLSAgICBtX2lzRGlydHkgPSAh
c3VjY2VzczsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlSW1hZ2VCYWNraW5nQ29vcmRpbmF0
ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRVcGRhdGVJbWFnZUJhY2tpbmdPcGVyYXRpb246OmNyZWF0
ZShpZCgpLCBtX3N1cmZhY2UpKTsKKyAgICBtX2lzRGlydHkgPSBmYWxzZTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpCkBAIC0xNTgs
NyArMTU4LDcgQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlzaWJpbGl0
eUlmTmVlZGVkKGJvb2wmIGNoYW5nZWRUb1Zpc2libGUpCiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nPiopCiB7Ci0gICAgbV9jb29yZGluYXRvci0+Y2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhpZCgpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlSW1hZ2VCYWNraW5n
Q29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRDbGVhckltYWdlQmFja2luZ0NvbnRlbnRz
T3BlcmF0aW9uOjpjcmVhdGUoaWQoKSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZElt
YWdlQmFja2luZy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCAyYWRiMmEwMmViODJk
ZjI3ZDkxMGY1YTljY2IwYTcwY2U3NDM0ZjQxLi5mN2JjMzI2ZjJlM2Y2MzU2NjBiZmZiOGYwMDIy
MTcxNTBjYjBlMDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmgKQEAgLTM2LDE1ICszNiwxMyBAQAogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBDb29yZGluYXRlZE9wZXJhdGlv
bjsKIAogY2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgOiBwdWJsaWMgUmVmQ291bnRlZDxD
b29yZGluYXRlZEltYWdlQmFja2luZz4gewogcHVibGljOgogICAgIGNsYXNzIENvb3JkaW5hdG9y
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBk
YXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJh
Y2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUltYWdlQmFja2luZ0Nvb3JkaW5hdGVk
T3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRPcGVyYXRpb24+KSA9IDA7CiAgICAgfTsK
IAogICAgIGNsYXNzIEhvc3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMDllMWQ5NmM5YzkwZDgyNmJmZDhk
M2ZmNDc3MWIzNDVjOTIwZTEwYi4uOWY4Yzc4NzFlODg1ZTk2MDk0MGJhYzNmYWE5ZDkxYzVlYzU4
ZTNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
cy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiRHJhd2lu
Z0FyZWFJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTWVz
c2FnZUlELmgiCkBAIC00MywxNCArNDQsMTIgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNz
YWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4K
IAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKQEAgLTI4OSw3ICsyODgsOCBAQCBib29sIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKIAogICAgICAg
ICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2l6ZSgpKTsKICAgICAgICAgSW50UmVjdCBjb3ZlcmVkUmVjdCA9IHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSkt
PmNvdmVyUmVjdCgpOwotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVy
ZWRSZWN0KSk7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkT3BlcmF0aW9ucyhtX29wZXJhdGlv
bnMsIGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV9vcGVyYXRpb25zLmNs
ZWFyKCk7CiAgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7CiAgICAgICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CiAgICAgfSBlbHNlCkBAIC0zMTcsNyArMzE3LDcgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCkK
ICAgICAgICAgfQogICAgIH0KIAotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKG1fbGF5ZXJz
VG9DcmVhdGUpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRD
cmVhdGVMYXllcnNPcGVyYXRpb246OmNyZWF0ZShtX2xheWVyc1RvQ3JlYXRlKSk7CiAgICAgbV9s
YXllcnNUb0NyZWF0ZS5jbGVhcigpOwogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0K
QEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVsZXRl
Q29tcG9zaXRpbmdMYXllcnMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVsZXRl
Q29tcG9zaXRpbmdMYXllcnMobV9sYXllcnNUb0RlbGV0ZSkpOworICAgIGVucXVldWVDb29yZGlu
YXRlZE9wZXJhdGlvbihDb29yZGluYXRlZERlbGV0ZUxheWVyc09wZXJhdGlvbjo6Y3JlYXRlKG1f
bGF5ZXJzVG9EZWxldGUpKTsKICAgICBtX2xheWVyc1RvRGVsZXRlLmNsZWFyKCk7CiAgICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwogfQpAQCAtMzQyLDY1ICszNDIsMTEgQEAgdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVl
ZGVkKCkKICAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOworICAgIGVucXVldWVDb29y
ZGluYXRlZE9wZXJhdGlvbihDb29yZGluYXRlZFNldFJvb3RDb21wb3NpdGluZ0xheWVyT3BlcmF0
aW9uOjpjcmVhdGUodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkp
LT5pZCgpKSk7CiAgICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVl
OwogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3Qg
Q29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8pCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJD
aGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExh
eWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0g
Y2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAgICBJbnRTaXpl
IGNhbnZhc1NpemUgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OkNyZWF0ZUNhbnZhcyhpZCwgY2FudmFzU2l6ZSwgdG9rZW4pKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQ
bGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVyKQotewotICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKLSAgICB1aW50MzJfdCBmcm9udEJ1ZmZlciA9IGNhbnZhc1BsYXRmb3JtTGF5
ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlN5bmNDYW52YXMoaWQsIGZyb250QnVm
ZmVyKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXN0cm95Q2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95Q2Fu
dmFzKGlkKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNl
dExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQotewot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OlNldExheWVyUmVwYWludENvdW50KGlkLCB2YWx1ZSkpOwotfQotCi0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckZpbHRl
cnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi0gICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJzKTsKLSNlbmRp
ZgotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5k
aWYKLQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMpCiB7CkBAIC00MjgsNyArMzc0LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3Bl
cmEKIAogICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsK
ICAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMpOwot
ICAgICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0
ZWRQcm9ncmFtSW5mbygpKSk7CisgICAgICAgICAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRp
b24oQ29vcmRpbmF0ZWRDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtT3BlcmF0aW9uOjpjcmVhdGUo
Y3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRl
ZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMgbm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRo
aXMgY29vcmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50IGZvciBpdC4KICAgICAgICAgICAgIEFT
U0VSVChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpID09IHRoaXMpOwpAQCAtNDQx
LDcgKzM4Nyw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvCiAgICAgLy8gQXQgdGhpcyB0aW1l
IHRoZSBzaGFkZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBv
dXIgc2V0IGFuZAogICAgIC8vIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBvdGhlciBwcm9jZXNzIHRv
IGRlbGV0ZSBpdC4KICAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShjdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHkpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7CisgICAgZW5xdWV1ZUNvb3JkaW5hdGVkT3BlcmF0aW9u
KENvb3JkaW5hdGVkUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbU9wZXJhdGlvbjo6Y3JlYXRlKGN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCkKQEAgLTUxMSw3ICs0
NTcsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0ZpeGVkTGF5ZXJzKCkK
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpsb2NrQW5pbWF0aW9ucygpCiB7CiAgICAg
bV9hbmltYXRpb25zTG9ja2VkID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRBbmltYXRpb25zTG9ja2VkKHRydWUp
KTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oQ29vcmRpbmF0ZWRTZXRBbmltYXRp
b25zTG9ja2VkT3BlcmF0aW9uOjpjcmVhdGUodHJ1ZSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6dW5sb2NrQW5pbWF0aW9ucygpCkBAIC01MjAsNyArNDY2LDcgQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVubG9ja0FuaW1hdGlvbnMoKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSBmYWxzZTsKLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRBbmltYXRp
b25zTG9ja2VkKGZhbHNlKSk7CisgICAgZW5xdWV1ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3Jk
aW5hdGVkU2V0QW5pbWF0aW9uc0xvY2tlZE9wZXJhdGlvbjo6Y3JlYXRlKGZhbHNlKSk7CiB9CiAK
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVz
aCgpCkBAIC02MDUsMzggKzU1MSwxNCBAQCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZwogICAgIHJl
dHVybiBpbWFnZUJhY2tpbmc7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmVucXVldWVVcGRhdGVBdGxhc0Nvb3JkaW5hdGVk
T3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRPcGVyYXRpb24+IG9wZXJhdGlvbikKIHsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlSW1hZ2VCYWNraW5nKGlt
YWdlSUQpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24ob3BlcmF0aW9uKTsKIH0K
IAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJm
YWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
ZW5xdWV1ZUltYWdlQmFja2luZ0Nvb3JkaW5hdGVkT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRp
bmF0ZWRPcGVyYXRpb24+IG9wZXJhdGlvbikKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBz
dGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihjb29yZGluYXRlZFN1cmZhY2UuZ2V0
KCkpOwotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAo
IXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCwgaGFuZGxlKSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkK
LXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpy
ZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewot
ICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1faW1h
Z2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOwotICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlSW1h
Z2VCYWNraW5nKGltYWdlSUQpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24ob3Bl
cmF0aW9uKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGlu
Z0ltYWdlQmFja2luZ0NoYW5nZXMoKQpAQCAtNjg3LDQxICs2MDksNDYgQEAgYm9vbCBMYXllclRy
ZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVGlsZShDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXll
cklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3Qs
IHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92
ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjplbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRpb24oUGFz
c1JlZlB0cjxDb29yZGluYXRlZE9wZXJhdGlvbj4gb3BlcmF0aW9uKQogewogICAgIGlmIChtX2lz
UHVyZ2luZykKICAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Ci19CiAKLWJvb2wgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lE
LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewot
ICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29vcmRpbmF0ZWRTdXJmYWNlID0gc3RhdGlj
X2Nhc3Q8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oY29vcmRpbmF0ZWRTdXJmYWNlLmdldCgpKTsK
LSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYgKCF3ZWJD
b29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRsYXNJRCwgaGFuZGxlKSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkg
eworICAgIGNhc2UgQ29vcmRpbmF0ZWRPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzoKKyAg
ICAgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZFJlbW92ZUltYWdlQmFja2luZ09wZXJhdGlvbio+KG9wZXJhdGlvbi5nZXQoKSkt
PmltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRSZW1vdmVJbWFnZUJhY2tpbmdPcGVyYXRpb24qPihvcGVy
YXRpb24uZ2V0KCkpLT5pbWFnZUJhY2tpbmdJRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29vcmRpbmF0ZWRPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczogeworI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFu
aW1hdGlvbnMgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRlZFNldExheWVyQW5pbWF0aW9uc09wZXJh
dGlvbio+KG9wZXJhdGlvbi5nZXQoKSktPmFuaW1hdGlvbnM7CisgICAgICAgIEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1h
dGlvbnMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25z
LmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZy
YW1lcygpOworICAgICAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVk
UHJvcGVydHlXZWJraXRGaWx0ZXIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgeworICAg
ICAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0
YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsK
KyAgICAgICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJW
YWx1ZS0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhdGlj
X2Nhc3Q8Q29vcmRpbmF0ZWRTZXRMYXllckFuaW1hdGlvbnNPcGVyYXRpb24qPihvcGVyYXRpb24u
Z2V0KCkpLT5hbmltYXRpb25zID0gYWN0aXZlQW5pbWF0aW9uczsKKyNlbmRpZgorICAgICAgICBi
cmVhazsKKyAgICB9CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNhc2UgQ29vcmRpbmF0
ZWRPcGVyYXRpb246OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzOgorI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhzdGF0aWNf
Y2FzdDxDb29yZGluYXRlZFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzT3BlcmF0aW9uKj4ob3Bl
cmF0aW9uLmdldCgpKS0+ZmlsdGVycyk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisjZW5kaWYK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpyZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQotewotICAg
IGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVVwZGF0ZUF0bGFz
KGF0bGFzSUQpKTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9vcGVyYXRp
b25zLmFwcGVuZChvcGVyYXRpb24pOwogfQogCiBXZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKQEAgLTcyOSwyNSAr
NjU2LDYgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVj
dDsKIH0KIAotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJBbmltYXRp
b25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAg
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMuZ2V0
QWN0aXZlQW5pbWF0aW9ucygpOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRp
b25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAgICAgICAgaWYgKGtleWZyYW1l
cy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6
ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0
ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJh
bWVzLmF0KGkpKTsKLSAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMo
KmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNl
dExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRpb25zKSk7Ci19Ci0KIHZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlW
ZWN0b3IpCiB7CiAgICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlz
aWJsZUNvbnRlbnRzUmVjdDsKQEAgLTc4NSw3ICs2OTMsNyBAQCBHcmFwaGljc0xheWVyRmFjdG9y
eSogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCiAjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIHsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
KSk7CisgICAgZW5xdWV1ZUNvb3JkaW5hdGVkT3BlcmF0aW9uKENvb3JkaW5hdGVkUmVxdWVzdEFu
aW1hdGlvbkZyYW1lT3BlcmF0aW9uOjpjcmVhdGUoKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjphbmltYXRpb25GcmFtZVJlYWR5KCkKQEAgLTg2OCw3ICs3NzYsNyBAQCB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
RmlyZWQoVGltZXI8Q29vcmRpbmF0ZQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKIHsKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpT
ZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRPcGVyYXRp
b24oQ29vcmRpbmF0ZWRTZXRCYWNrZ3JvdW5kQ29sb3JPcGVyYXRpb246OmNyZWF0ZShjb2xvcikp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggNTFmOWRhYTA0MmFlYzQz
YWU5NjVhY2ViM2M4YmVhMTdiYTRlZjkzZi4uMzY3YzViMjU0OTYxNmFkNmQ5YmMwYzkyNTBjYWFj
ZDc5ZDc3NDkyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgpAQCAtODAsOSArODEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3Jl
OjpJbWFnZSopIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNo
YW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNvb3JkaW5hdGVk
T3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRPcGVyYXRpb24+KSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKQEAgLTkwLDI3ICs4OSwxMSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNv
ZGVyJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhp
Y3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJT
dGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5
ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckFuaW1hdGlvbnMmKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2
b2lkIHN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6
UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENv
b3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7
Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0
ZWRMYXllcklELCBpbnQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0ZpeGVkTGF5ZXJzKCk7CiAKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIENv
b3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwogCi0gICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1
cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7CiAjZW5kaWYKQEAg
LTEyNSwxMSArMTA4LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNo
UmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogCisgICAgLy8gVXBkYXRlQXRsYXNDbGll
bnQKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZVVwZGF0ZUF0bGFzQ29vcmRpbmF0ZWRPcGVyYXRp
b24oUGFzc1JlZlB0cjxDb29yZGluYXRlZE9wZXJhdGlvbj4pIE9WRVJSSURFOworCiAgICAgLy8g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUlt
YWdlQmFja2luZ0Nvb3JkaW5hdGVkT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRPcGVy
YXRpb24+KSBPVkVSUklERTsKIAogICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hh
bmdlcygpOwogCkBAIC0xNzUsNiArMTU4LDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgcGFnZSBv
dmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCiAg
ICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKIAor
ICAgIENvb3JkaW5hdGVkT3BlcmF0aW9ucyBtX29wZXJhdGlvbnM7CisKICAgICBIYXNoU2V0PFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKICAg
ICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvQ3JlYXRlOwogICAgIFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVB
dGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKaW5kZXggZDgyZDMyZmM2ZmZjMTAyY2Y2ZDRhNjQzZjVj
MzI4Nzg0ZDZiNTcxYy4uOWMzZjRkZmEzYWUwNjA1YmYwYWNmNmZiYTY5N2VmNmIyYmViN2QyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcApAQCAtMjMsNiArMjMs
NyBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCisjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRPcGVyYXRpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTQwLDE1ICs0MSwx
MiBAQCBVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqIGNsaWVudCwg
aW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdQogICAgIEludFNpemUgc2l6ZSA9IG5leHRQb3dl
ck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1lbnNpb24pKTsKICAgICBtX3N1cmZhY2UgPSBD
b29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFncyk7CiAKLSAgICAvLyBGSVhNRTog
Q3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZhaWxzLCBVcGRhdGVBdGxhcyBnaXZl
cyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0bHkuCi0gICAgaWYgKCFtX2NsaWVudC0+Y3Jl
YXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNlKSkKLSAgICAgICAgbV9zdXJmYWNlLmNsZWFy
KCk7CisgICAgbV9jbGllbnQtPmVucXVldWVVcGRhdGVBdGxhc0Nvb3JkaW5hdGVkT3BlcmF0aW9u
KENvb3JkaW5hdGVkQ3JlYXRlVXBkYXRlQXRsYXNPcGVyYXRpb246OmNyZWF0ZShtX0lELCBtX3N1
cmZhY2UpKTsKIH0KIAogVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCiB7Ci0gICAgaWYgKG1f
c3VyZmFjZSkKLSAgICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOworICAg
IG1fY2xpZW50LT5lbnF1ZXVlVXBkYXRlQXRsYXNDb29yZGluYXRlZE9wZXJhdGlvbihDb29yZGlu
YXRlZFJlbW92ZVVwZGF0ZUF0bGFzT3BlcmF0aW9uOjpjcmVhdGUobV9JRCkpOwogfQogCiB2b2lk
IFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKQEAgLTc0LDkgKzcyLDYgQEAgUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFp
bGFibGVCdWZmZXIodWludDMyX3QKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKIAotICAgIGlmICghbV9zdXJmYWNl
KQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7Ci0KICAgICBh
dGxhc0lEID0gbV9JRDsKIAogICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRv
IGFsbG93IGZhc3RlciB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFz
LmgKaW5kZXggZWQ1ODYzYjg0ZDBkOGRiYWNjYmFlMzliMTJlMjM0MTQ4MzM4NzYyYy4uNWQ5MmMw
YzUzMmE4NDI2YmFiOThjYjE1OTNhZDFjZjFkZTQ3MmRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9VcGRhdGVBdGxhcy5oCkBAIC0zMiwxMSArMzIsMTEgQEAgY2xhc3MgSW50UG9pbnQ7CiB9
CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgQ29vcmRpbmF0ZWRPcGVyYXRpb247CiAKIGNs
YXNzIFVwZGF0ZUF0bGFzQ2xpZW50IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRl
VXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZh
Y2U+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0
bGFzSUQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZVVwZGF0ZUF0bGFzQ29vcmRpbmF0
ZWRPcGVyYXRpb24oUGFzc1JlZlB0cjxDb29yZGluYXRlZE9wZXJhdGlvbj4pID0gMDsKIH07CiAK
IGNsYXNzIFVwZGF0ZUF0bGFzIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186013</attachid>
            <date>2013-02-01 04:58:40 -0800</date>
            <delta_ts>2013-02-01 04:59:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103854-20130201215515.patch</filename>
            <type>text/plain</type>
            <size>128276</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVkNmY1OGM0MjQ0NzFj
OGRlMDEzOTk3YTMzNTg3YzBjMWYzY2RhYy4uYzgxOWViMWNkNTA0ZWU0N2RmZjBlN2ZjMmYxN2Jh
MzAyNTM5MjM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAxMy0wMi0wMSAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzODU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgaGFzIHNvIG1hbnkgSVBDIG1lc3NhZ2VzIChlLmcuIFN5bmND
YW52YXMgYW5kCisgICAgICAgIENyZWF0ZVRpbGUpLCBhbmQgdGhlcmUgaXMgYSBsb25nIGZ1bmN0
aW9uIGNoYWluIGZyb20gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIHRvCisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSAoNCBjbGFzc2VzKS4KKyAgICAgICAgSWYgd2Ugd2FudCB0byBh
ZGQgYSBuZXcgbWVzc2FnZSwgd2UgbmVlZCB0byBhZGQgYm9pbGVycGxhdGUgY29kZSBpbnRvIDQg
Y2xhc3Nlcy4KKworICAgICAgICBOb3cgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGhhcyBvbmx5
IG9uZSBJUEMgbWVzc2FnZTogQ29tbWl0Q29vcmlkbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuCisg
ICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUgcnVuIGFzIGZvbGxvd3M6CisgICAgICAgIDEuIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciBtYWtlcyBhIENvb3JpZG5hdGVkR3JhcGhpY3NPcGVyYXRpb24gKGUuZy4gQ3JlYXRlVGlsZSku
CisgICAgICAgIDIuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzdG9yZXMgYWxsIG9wZXJhdGlv
bnMuCisgICAgICAgIDMuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzZW5kcyBhbGwgb3BlcmF0
aW9ucyB0byBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eQorICAgICAgICBhdCB0aGUgbW9t
ZW50IG9mIGZsdXNoaW5nIHZpYSBDb21taXRDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyBt
ZXNzYWdlLgorICAgICAgICA0LiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgZXhlY3V0ZXMgYWxs
IG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlcmUgaXMgb25lIGJpZyBiZWhhdmlvciBjaGFuZ2Uu
IEFsbCBvcGVyYXRpb25zIChlLmcuIENyZWF0ZUxheWVycyBhbmQKKyAgICAgICAgU3luY0NhbnZh
cykgYXJlIHBlcmZvcm1lZCBhdCB0aGUgc2FtZSB0aW1lLCB3aGVuCisgICAgICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmlkbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgaXMg
Y2FsbGVkLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgY29tcG9zaXRpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJv
eUNhbnZhc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKToKKyAgICAgICAgKE9wZXJhdGlvbik6CisgICAg
ICAgIChDcmVhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpDcmVhdGVMYXllcnMpOgor
ICAgICAgICAoRGVsZXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6RGVsZXRlTGF5ZXJz
KToKKyAgICAgICAgKFNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OlNldFJvb3RM
YXllcik6CisgICAgICAgIChTZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlOjpT
ZXRMYXllclN0YXRlKToKKyAgICAgICAgKFNldExheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyQ2hpbGRyZW46OlNldExheWVyQ2hpbGRyZW4pOgorICAgICAgICAoQ3JlYXRlVGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVU
aWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6Q3JlYXRlVGlsZTo6Q3JlYXRlVGlsZSk6CisgICAgICAgIChVcGRhdGVUaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpVcGRhdGVUaWxlOjpVcGRhdGVUaWxlKToKKyAgICAgICAgKFJlbW92ZVRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVRpbGU6OlJlbW92ZVRpbGUpOgorICAgICAgICAoQ3JlYXRlVXBkYXRlQXRsYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRl
QXRsYXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Q3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
UmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6UmVtb3Zl
VXBkYXRlQXRsYXMpOgorICAgICAgICAoQ3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUltYWdlQmFja2luZzo6Q3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFVwZGF0
ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OlVwZGF0ZUlt
YWdlQmFja2luZyk6CisgICAgICAgIChDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNr
aW5nQ29udGVudHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOjpDbGVhckltYWdlQmFja2lu
Z0NvbnRlbnRzKToKKyAgICAgICAgKFJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmc6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVJbWFnZUJhY2tpbmc6OlJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChTZXRMYXll
ckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpTZXRMYXllckFu
aW1hdGlvbnMpOgorICAgICAgICAoUmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFt
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAg
ICAgKENyZWF0ZUNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OkNyZWF0ZUNhbnZhcyk6Cisg
ICAgICAgIChTeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpTeW5jQ2FudmFzKToKKyAgICAg
ICAgKERlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OkRlc3Ryb3lDYW52YXMp
OgorICAgICAgICAoU2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6
U2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OkNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW0pOgorICAgICAgICAoUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6UmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChTZXRMYXllclJlcGFpbnRDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRD
b3VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyUmVwYWludENvdW50OjpTZXRMYXllclJlcGFpbnRDb3VudCk6CisgICAg
ICAgIChTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9y
OjpTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6RGlkQ2hhbmdlU2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoUXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bnM6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uczo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbnM6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnM6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnM6OmF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAgICAgUmVtb3ZlIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiBiZWNh
dXNlCisgICAgICAgICAgICBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbigpIGlzIGNhbGxlZCBhdCB0
aGUgbW9tZW50IG9mIGZsdXNoaW5nLgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmV4ZWN1dGVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0RHJhd3NCYWNr
Z3JvdW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSk6CisgICAgICAgICAgICBXZSBkb24ndCBk
ZWFsIHdpdGggdGhlIGNhc2Ugd2hlbiBzZW5kaW5nIGFuIFVwZGF0ZUltYWdlQmFja2luZyBvcGVy
YXRpb24gZmFpbHMuCisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOgorICAgICAgICAoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMpOgorICAgICAgICAgICAgV2UgZG9uJ3QgZGVh
bCB3aXRoIHRoZSBjYXNlIHdoZW4gc2VuZGluZyBhIENyZWF0ZVVwZGF0ZUF0bGFzIG9wZXJhdGlv
biBmYWlscy4KKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1Vw
ZGF0ZUF0bGFzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFVwZGF0ZUF0bGFzKToK
KwogMjAxMy0wMi0wMSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS11bR1N0cmVhbWVyXSBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrIGlt
cGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzUzMjY3NzhhODM5NDQ0OTMyZTcwYjg4MGNiODlj
ZmZiMDk4NDJlOS4uMThkOWQ4YzgyMWRlZDVkMmMxZjM0Yzg0YTE5YTFkZGEzODA4OTllZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTAyLTAxICBIdWFuZyBEb25nc3VuZyAgPGx1
eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIHBl
cmZvcm0gdmlhIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM4NTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eSBoYXMgc28gbWFueSBJUEMgbWVzc2FnZXMgKGUuZy4gU3luY0NhbnZhcyBhbmQKKyAgICAg
ICAgQ3JlYXRlVGlsZSksIGFuZCB0aGVyZSBpcyBhIGxvbmcgZnVuY3Rpb24gY2hhaW4gZnJvbSBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lICg0IGNsYXNzZXMpLgorICAgICAgICBJZiB3ZSB3YW50IHRvIGFkZCBhIG5ldyBtZXNzYWdl
LCB3ZSBuZWVkIHRvIGFkZCBib2lsZXJwbGF0ZSBjb2RlIGludG8gNCBjbGFzc2VzLgorCisgICAg
ICAgIE5vdyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgaGFzIG9ubHkgb25lIElQQyBtZXNzYWdl
OiBDb21taXRDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy4KKyAgICAgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBydW4gYXMgZm9s
bG93czoKKyAgICAgICAgMS4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIGEgQ29vcmlk
bmF0ZWRHcmFwaGljc09wZXJhdGlvbiAoZS5nLiBDcmVhdGVUaWxlKS4KKyAgICAgICAgMi4gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IHN0b3JlcyBhbGwgb3BlcmF0aW9ucy4KKyAgICAgICAgMy4g
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHNlbmRzIGFsbCBvcGVyYXRpb25zIHRvIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5CisgICAgICAgIGF0IHRoZSBtb21lbnQgb2YgZmx1c2hpbmcg
dmlhIENvbW1pdENvb3JpZG5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIG1lc3NhZ2UuCisgICAgICAg
IDQuIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBleGVjdXRlcyBhbGwgb3BlcmF0aW9ucy4KKwor
ICAgICAgICBUaGVyZSBpcyBvbmUgYmlnIGJlaGF2aW9yIGNoYW5nZS4gQWxsIG9wZXJhdGlvbnMg
KGUuZy4gQ3JlYXRlTGF5ZXJzIGFuZAorICAgICAgICBTeW5jQ2FudmFzKSBhcmUgcGVyZm9ybWVk
IGF0IHRoZSBzYW1lIHRpbWUsIHdoZW4KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Ojpjb21taXRDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyBpcyBjYWxsZWQuCisKKyAgICAg
ICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOgorICAgICAgICAgICAg
RW5jb2RpbmcgVXBkYXRlSW1hZ2VCYWNraW5nIGFuZCBDcmVhdGVVcGRhdGVBdGxhcyBjYW4gZmFp
bCBiZWNhdXNlCisgICAgICAgICAgICBlbmNvZGluZyBXZWJDb29yZGluYXRlZFN1cmZhY2U6Okhh
bmRsZSBjYW4gZmFpbCwgYnV0IHdlIGRvbid0CisgICAgICAgICAgICByZWNvdmVyIGluIHRoZSBj
YXNlLgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6Cisg
ICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJz
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVDb21w
b3NpdGluZ0xheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3hpZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAg
ICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisKIDIwMTMtMDItMDEgIEd3YW5nIFlvb24g
SHdhbmcgIDxyeXVtaWVsQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFtFRkxdW1dLMl0gTWlu
aUJyb3dzZXIgc2VnZmF1bHRzIG9uIGxvYWRpbmcgZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXgg
ZmE4OTNhODBiZDAwZjI0Y2VhYTk4Y2YxNzE4Yjk4YjVmMjM5OWIxZi4uNWU0MjdjMWM5MDRkYWEx
ZTNlZDk1N2ViZGM1YjFhYTc5NTczODBlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0yMjQ0LDYgKzIyNDQs
OCBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQXJlYUFsbG9jYXRvci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbi5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJ
bmZvLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcAppbmRleCAzNzM2ZjI2MDRjMGMxMDQzOTk5NTdiOThhMjUyNWVlN2RiY2Rk
OWJiLi5lZTY5NzQwY2Q4YmYxMTU2MzIyMTk3NDgwZmI2NmYzYjcxYzI1NjcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApA
QCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hp
bGRyZW4oKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsr
aSkKICAgICAgICAgY2hpbGRJRHMuYXBwZW5kKHRvQ29vcmRpbmF0ZWRMYXllcklEKGNoaWxkcmVu
KClbaV0pKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllckNoaWxkcmVuKG1faWQsIGNo
aWxkSURzKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjpj
cmVhdGUobV9pZCwgY2hpbGRJRHMpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAg
LTUwOSw3ICs1MDksNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRl
cnMoKQogICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKICAgICAgICAgcmV0dXJuOwogICAg
IG1fc2hvdWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5
ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0TGF5ZXJGaWx0ZXJzOjpjcmVhdGUobV9pZCwgZmlsdGVycygpKSk7CiB9CiAjZW5kaWYKIApA
QCAtNTcwLDcgKzU3MCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5
ZXJTdGF0ZSgpCiAgICAgICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogICAgIG1fbGF5ZXJJ
bmZvLnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCk7CiAKLSAg
ICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7CisgICAg
bV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6Y3JlYXRlKG1faWQsIG1fbGF5
ZXJJbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0Jv
cmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoKQpAQCAtNTg3LDcgKzU4Nyw3IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCiAKICAgICBt
X3Nob3VsZFN5bmNBbmltYXRpb25zID0gZmFsc2U7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRM
YXllckFuaW1hdGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5l
bnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnM6OmNyZWF0ZShtX2lkLCBtX2FuaW1hdGlvbnMpKTsK
IH0KIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQpAQCAtNjA0LDcgKzYwNCw5IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKICAgICBpZiAoIW1faXNWYWxp
ZENhbnZhcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb29yZGluYXRvci0+c3luY0NhbnZh
cyhtX2lkLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOworICAgIEFTU0VSVChtX2NhbnZhc1BsYXRm
b3JtTGF5ZXIpOworICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gbV9jYW52YXNQbGF0Zm9ybUxh
eWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVl
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTeW5jQ2FudmFzOjpjcmVhdGUobV9pZCwgZnJvbnRCdWZmZXIpKTsKIH0KIAogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpCkBAIC02MTMsNyAr
NjE1LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5l
ZWRlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2lzVmFsaWRDYW52YXMpIHsKLSAg
ICAgICAgbV9jb29yZGluYXRvci0+ZGVzdHJveUNhbnZhcyhtX2lkKTsKKyAgICAgICAgbV9jb29y
ZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKG1faWQpKTsKICAgICAgICAg
bV9pc1ZhbGlkQ2FudmFzID0gZmFsc2U7CiAgICAgfQogCkBAIC02MjcsNyArNjI5LDkgQEAgdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKCkKIAogICAg
IEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwogICAgIGlmICghbV9pc1ZhbGlkQ2FudmFz
KSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUNhbnZhcyhtX2lkLCBtX2NhbnZhc1Bs
YXRmb3JtTGF5ZXIpOworICAgICAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBtX2NhbnZhc1BsYXRm
b3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7CisgICAgICAgIEdyYXBoaWNzU3VyZmFjZVRv
a2VuIHRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigp
OworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmNyZWF0ZSht
X2lkLCBjYW52YXNTaXplLCB0b2tlbikpOwogICAgICAgICBtX2lzVmFsaWRDYW52YXMgPSB0cnVl
OwogICAgIH0KIApAQCAtNzM2LDcgKzc0MCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNv
bnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQogewogICAgIGlmIChpc1Nob3dpbmdS
ZXBhaW50Q291bnRlcigpICYmICF1cGRhdGVkUmVjdHMuaXNFbXB0eSgpKQotICAgICAgICBtX2Nv
b3JkaW5hdG9yLT5zZXRMYXllclJlcGFpbnRDb3VudChpZCgpLCBpbmNyZW1lbnRSZXBhaW50Q291
bnQoKSk7CisgICAgICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENv
dW50OjpjcmVhdGUoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkpKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVD
cmVhdGlvbigpCkBAIC03OTUsMjEgKzc5OSwyMSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6Y3JlYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbgog
ewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+
aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVUaWxl
KGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3QpOworICAgIG1fY29vcmRpbmF0b3It
PmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZVRpbGU6OmNyZWF0ZShpZCgpLCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRh
dGVJbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxl
KHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0KQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAg
ICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICBt
X2Nvb3JkaW5hdG9yLT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJl
Y3QpOworICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OmNyZWF0ZShpZCgp
LCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCkKIHsKICAgICBBU1NFUlQo
bV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXll
ckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0gICAgbV9jb29yZGluYXRvci0+cmVtb3ZlVGls
ZShpZCgpLCB0aWxlSUQpOworICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGU6
OmNyZWF0ZShpZCgpLCB0aWxlSUQpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRleCBhNTUxZDM1MTFhZGE2NDRlYmY3MzJi
ZWY2MmU4NmFkOWQ4N2YxYTIwLi4zNzg5YmRmNDY5NDYzYjE0ZGY4MmI5MTk2NDJkNTVlYjcwMGFj
MTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcl9oCiAjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCiAKKyNpbmNsdWRlICJD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1ZGUg
IkNvb3JkaW5hdGVkVGlsZS5oIgpAQCAtNDMsMzQgKzQ0LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjsKLWNsYXNzIEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zOwogCi1jbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgewor
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IDogcHVibGljIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNG
bHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0ID0gMDsKLQotICAgIC8vIENvb3JkaW5hdGVkVGls
ZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3Qm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVp
bnQzMl90IHRpbGVJRCkgPSAwOwotCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZUNvbnRl
bnRzUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENv
b3JkaW5hdGVkTGF5ZXJJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGls
ZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+
JikgPSAwOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xh
eWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSA9
IDA7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFBsYXRmb3JtTGF5
ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEKSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFpbnRDb3Vu
dChDb29yZGluYXRlZExheWVySUQsIGludCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExh
eWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zJikgPSAwOwotCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkg
PSAwOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMy
X3QmIGF0bGFzSUQsIEludFBvaW50JikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWViNDBk
NWQ2ZGYxM2FkNDBjYzhlNTllOWI3MWMwOTVhY2ZkMGFhYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgKQEAgLTAsMCArMSw1MTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKyNkZWZpbmUgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkU3VyZmFjZS5oIgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0
b21GaWx0ZXJQcm9ncmFtSW5mby5oIgorI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQor
I2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2VUb2tlbi5oIgorI2lu
Y2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24geworcHVibGljOgorICAgIGVudW0gT3Bl
cmF0aW9uVHlwZSB7CisgICAgICAgIENyZWF0ZUxheWVyc1R5cGUsCisgICAgICAgIERlbGV0ZUxh
eWVyc1R5cGUsCisgICAgICAgIFNldFJvb3RMYXllclR5cGUsCisgICAgICAgIFNldExheWVyU3Rh
dGVUeXBlLAorICAgICAgICBTZXRMYXllckNoaWxkcmVuVHlwZSwKKyAgICAgICAgQ3JlYXRlVGls
ZVR5cGUsCisgICAgICAgIFVwZGF0ZVRpbGVUeXBlLAorICAgICAgICBSZW1vdmVUaWxlVHlwZSwK
KyAgICAgICAgQ3JlYXRlVXBkYXRlQXRsYXNUeXBlLAorICAgICAgICBSZW1vdmVVcGRhdGVBdGxh
c1R5cGUsCisgICAgICAgIENyZWF0ZUltYWdlQmFja2luZ1R5cGUsCisgICAgICAgIFVwZGF0ZUlt
YWdlQmFja2luZ1R5cGUsCisgICAgICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlLAor
ICAgICAgICBSZW1vdmVJbWFnZUJhY2tpbmdUeXBlLAorICAgICAgICBTZXRMYXllckFuaW1hdGlv
bnNUeXBlLAorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAgICAgUmVx
dWVzdEFuaW1hdGlvbkZyYW1lVHlwZSwKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQorICAgICAgICBDcmVhdGVDYW52YXNUeXBlLAorICAgICAgICBTeW5jQ2FudmFzVHlwZSwKKyAg
ICAgICAgRGVzdHJveUNhbnZhc1R5cGUsCisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CisgICAgICAgIFNldExheWVyRmlsdGVyc1R5cGUsCisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLAorICAgICAgICBS
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSwKKyNlbmRpZgorICAgICAgICBTZXRMYXllclJl
cGFpbnRDb3VudFR5cGUsCisgICAgICAgIFNldEJhY2tncm91bmRDb2xvclR5cGUsCisgICAgICAg
IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uVHlwZSwKKyAgICAgICAgTm9uZVR5cGUKKyAgICB9Owor
CisgICAgY2xhc3MgT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8T3BlcmF0aW9uPiB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB9OworCisg
ICAgY2xhc3MgQ3JlYXRlTGF5ZXJzIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVMYXllcnM+IGNyZWF0ZShjb25zdCBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5ZXJJRHMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlTGF5ZXJzKGxheWVySURzKSk7CisgICAgICAgIH0K
KyAgICAgICAgZXhwbGljaXQgQ3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBpZHMpCisgICAgICAgIDogbGF5ZXJJRHMoaWRzKQorICAgICAgICB7IH0KKworICAg
ICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
Z2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVyc1R5cGU7IH0KKworICAgICAgICBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiBsYXllcklEczsKKyAgICB9OworCisgICAgY2xhc3MgRGVsZXRlTGF5
ZXJzIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEZWxldGVMYXllcnM+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYgbGF5ZXJJRHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRGVsZXRlTGF5ZXJzKGxheWVySURzKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQg
RGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCisgICAg
ICAgIDogbGF5ZXJJRHMoaWRzKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRl
bGV0ZUxheWVyc1R5cGU7IH0KKworICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBs
YXllcklEczsKKyAgICB9OworCisgICAgY2xhc3MgU2V0Um9vdExheWVyIDogcHVibGljIE9wZXJh
dGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRSb290TGF5
ZXI+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRSb290TGF5ZXIobGF5ZXJJRCkpOworICAgICAg
ICB9CisgICAgICAgIGV4cGxpY2l0IFNldFJvb3RMYXllcihDb29yZGluYXRlZExheWVySUQgaWQp
CisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5
cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRSb290TGF5ZXJUeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQ7CisgICAgfTsKKworICAgIGNsYXNzIFNldExheWVyU3RhdGUgOiBwdWJsaWMgT3BlcmF0aW9u
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyU3RhdGU+
IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXll
ckluZm8mIGxheWVySW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTZXRMYXllclN0YXRlKGxheWVySUQsIGxheWVySW5mbykpOworICAgICAgICB9CisgICAg
ICAgIFNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRl
ZExheWVySW5mbyYgaW5mbykKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAsIGxheWVy
SW5mbyhpbmZvKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3Rh
dGVUeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAg
IENvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5mbzsKKyAgICB9OworCisKKyAgICBjbGFzcyBT
ZXRMYXllckNoaWxkcmVuIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRMYXllckNoaWxkcmVuPiBjcmVhdGUoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJl
bikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckNo
aWxkcmVuKGxheWVySUQsIGNoaWxkcmVuKSk7CisgICAgICAgIH0KKyAgICAgICAgU2V0TGF5ZXJD
aGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBjaGlsZHJlblZlY3RvcikKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAs
IGNoaWxkcmVuKGNoaWxkcmVuVmVjdG9yKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFs
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9u
VHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlNldExheWVyQ2hpbGRyZW5UeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQ7CisgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGNoaWxkcmVuOwor
ICAgIH07CisKKyAgICBjbGFzcyBDcmVhdGVUaWxlIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVUaWxlPiBjcmVhdGUoQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZVRpbGUobGF5ZXJJRCwgdGls
ZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxlLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgaW5mbykKKyAgICAgICAgOiBsYXllcklEKGlk
KQorICAgICAgICAsIHRpbGVJRCh0aWxlKQorICAgICAgICAsIHRpbGVSZWN0KHJlY3QpCisgICAg
ICAgICwgdXBkYXRlSW5mbyhpbmZvKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlw
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZVRpbGVUeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7
CisgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAg
ICAgICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICB9OworCisgICAgY2xhc3Mg
VXBkYXRlVGlsZSA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VXBkYXRlVGlsZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBVcGRhdGVUaWxlKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0
ZUluZm8pKTsKKyAgICAgICAgfQorICAgICAgICBVcGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgdWludDMyX3QgdGlsZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIGluZm8pCisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCB0aWxlSUQo
dGlsZSkKKyAgICAgICAgLCB0aWxlUmVjdChyZWN0KQorICAgICAgICAsIHVwZGF0ZUluZm8oaW5m
bykKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlVHlwZTsgfQor
CisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICB1aW50MzJfdCB0
aWxlSUQ7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3Q7CisgICAgICAgIFN1cmZhY2VVcGRhdGVJ
bmZvIHVwZGF0ZUluZm87CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZVRpbGUgOiBwdWJsaWMg
T3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92
ZVRpbGU+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZVRpbGUo
bGF5ZXJJRCwgdGlsZUlEKSk7CisgICAgICAgIH0KKyAgICAgICAgUmVtb3ZlVGlsZShDb29yZGlu
YXRlZExheWVySUQgaWQsIHVpbnQzMl90IHRpbGUpCisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAg
ICAgICAgLCB0aWxlSUQodGlsZSkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVUaWxlVHlwZTsgfQorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOwor
ICAgICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgfTsKKworICAgIGNsYXNzIENyZWF0ZVVwZGF0
ZUF0bGFzIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDcmVhdGVVcGRhdGVBdGxhcz4gY3JlYXRlKHVpbnQzMl90IGF0bGFzSUQsIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIHN1cmZh
Y2UpKTsKKyAgICAgICAgfQorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBpZCwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKKyAgICAg
ICAgOiBhdGxhc0lEKGlkKQorICAgICAgICAsIHN1cmZhY2UoY29vcmRpbmF0ZWRTdXJmYWNlKQor
ICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzVHlwZTsg
fQorCisgICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7CisgICAgICAgIFJlZlB0cjxDb29yZGluYXRl
ZFN1cmZhY2U+IHN1cmZhY2U7CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZVVwZGF0ZUF0bGFz
IDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZW1vdmVVcGRhdGVBdGxhcz4gY3JlYXRlKHVpbnQzMl90IGF0bGFzSUQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3ZlVXBkYXRlQXRsYXMoYXRs
YXNJRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IFJlbW92ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGlkKQorICAgICAgICA6IGF0bGFzSUQoaWQpCisgICAgICAgIHsgfQorCisgICAgICAg
IHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRP
cGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXNUeXBlOyB9CisKKyAgICAgICAgdWludDMyX3Qg
YXRsYXNJRDsKKyAgICB9OworCisgICAgY2xhc3MgQ3JlYXRlSW1hZ2VCYWNraW5nIDogcHVibGlj
IE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVh
dGVJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFj
a2luZ0lEKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0
ZUltYWdlQmFja2luZyhpbWFnZUJhY2tpbmdJRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxp
Y2l0IENyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkKQorICAg
ICAgICA6IGltYWdlQmFja2luZ0lEKGlkKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFs
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9u
VHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUltYWdlQmFja2luZ1R5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWdlQmFja2luZ0lEOworICAgIH07CisKKyAgICBjbGFzcyBVcGRhdGVJbWFn
ZUJhY2tpbmcgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFVwZGF0ZUltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBz
dXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVwZGF0
ZUltYWdlQmFja2luZyhpbWFnZUJhY2tpbmdJRCwgc3VyZmFjZSkpOworICAgICAgICB9CisgICAg
ICAgIFVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkLCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQorICAgICAgICA6
IGltYWdlQmFja2luZ0lEKGlkKQorICAgICAgICAsIHN1cmZhY2UoY29vcmRpbmF0ZWRTdXJmYWNl
KQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZ1R5
cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lE
OworICAgICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlOworICAgIH07CisK
KyAgICBjbGFzcyBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzIDogcHVibGljIE9wZXJhdGlvbiB7
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGVhckltYWdlQmFja2lu
Z0NvbnRlbnRzPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJ
RCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKGltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhw
bGljaXQgQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGlkKQorICAgICAgICA6IGltYWdlQmFja2luZ0lEKGlkKQorICAgICAgICB7IH0KKworICAgICAg
ICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0
T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlOyB9CisKKyAgICAgICAg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRDsKKyAgICB9OworCisgICAg
Y2xhc3MgUmVtb3ZlSW1hZ2VCYWNraW5nIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVJbWFnZUJhY2tpbmc+IGNyZWF0ZShD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZUltYWdlQmFja2luZyhpbWFnZUJhY2tp
bmdJRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IFJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkKQorICAgICAgICA6IGltYWdlQmFja2luZ0lEKGlk
KQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZ1R5
cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lE
OworICAgIH07CisKKyAgICBjbGFzcyBTZXRMYXllckFuaW1hdGlvbnMgOiBwdWJsaWMgT3BlcmF0
aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyQW5p
bWF0aW9ucz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYW5pbWF0aW9ucykp
OworICAgICAgICB9CisgICAgICAgIFNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVy
SUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBsYXllckFuaW1hdGlvbnMpCisg
ICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCBhbmltYXRpb25zKGxheWVyQW5pbWF0aW9u
cykKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnNU
eXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnM7CisgICAgfTsKKworI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUg
OiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKKyAgICAgICAgeyB9CisKKyAgICAg
ICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdl
dE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlOyB9CisgICAgfTsKKyNlbmRp
ZgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgY2xhc3MgQ3JlYXRlQ2FudmFzIDog
cHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDcmVhdGVDYW52YXM+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3Qg
SW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUNhbnZhcyhs
YXllcklELCBjYW52YXNTaXplLCB0b2tlbikpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZUNh
bnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzU3VyZmFjZVRva2VuJiBzdXJmYWNlVG9rZW4pCisgICAgICAgIDogbGF5ZXJJRChpZCkK
KyAgICAgICAgLCBjYW52YXNTaXplKHNpemUpCisgICAgICAgICwgdG9rZW4oc3VyZmFjZVRva2Vu
KQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhc1R5cGU7IH0K
KworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgSW50U2l6ZSBj
YW52YXNTaXplOworICAgICAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbjsKKyAgICB9Owor
CisgICAgY2xhc3MgU3luY0NhbnZhcyA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3luY0NhbnZhcz4gY3JlYXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTeW5jQ2FudmFzKGxheWVySUQsIGZyb250QnVmZmVy
KSk7CisgICAgICAgIH0KKyAgICAgICAgU3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQs
IHVpbnQzMl90IGZyb250QnVmZmVySGFuZGxlKQorICAgICAgICA6IGxheWVySUQoaWQpCisgICAg
ICAgICwgZnJvbnRCdWZmZXIoZnJvbnRCdWZmZXJIYW5kbGUpCisgICAgICAgIHsgfQorCisgICAg
ICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBn
ZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6U3luY0NhbnZhc1R5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRDsKKyAgICAgICAgdWludDMyX3QgZnJvbnRCdWZmZXI7CisgICAgfTsKKwor
ICAgIGNsYXNzIERlc3Ryb3lDYW52YXMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlc3Ryb3lDYW52YXM+IGNyZWF0ZShDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBEZXN0cm95Q2FudmFzKGxheWVySUQpKTsKKyAgICAgICAgfQorICAgICAgICBleHBs
aWNpdCBEZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKKyAgICAgICAgOiBsYXll
cklEKGlkKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXNU
eXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgfTsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNsYXNzIFNldExheWVyRmlsdGVy
cyA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2V0TGF5ZXJGaWx0ZXJzPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQs
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJGaWx0ZXJzKGxheWVySUQsIGZpbHRlcnMpKTsK
KyAgICAgICAgfQorICAgICAgICBTZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJPcGVyYXRpb25zKQorICAgICAgICA6IGxh
eWVySUQoaWQpCisgICAgICAgICwgZmlsdGVycyhmaWx0ZXJPcGVyYXRpb25zKQorICAgICAgICB7
IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyc1R5cGU7IH0KKworICAgICAg
ICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBm
aWx0ZXJzOworICAgIH07CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2xhc3MgQ3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gY3Jl
YXRlKGludCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1J
bmZvJiBwcm9ncmFtSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1JRCwgcHJv
Z3JhbUluZm8pKTsKKyAgICAgICAgfQorICAgICAgICBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFt
KGludCBwcm9ncmFtSUQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBpbmZvKQorICAg
ICAgICA6IGN1c3RvbUZpbHRlclByb2dyYW1JRChwcm9ncmFtSUQpCisgICAgICAgICwgcHJvZ3Jh
bUluZm8oaW5mbykKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0
b21GaWx0ZXJQcm9ncmFtVHlwZTsgfQorCisgICAgICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFt
SUQ7CisgICAgICAgIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZvOworICAgIH07
CisKKyAgICBjbGFzcyBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtIDogcHVibGljIE9wZXJhdGlv
biB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0
IFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IHByb2dyYW1JRCkKKyAgICAgICAgOiBjdXN0
b21GaWx0ZXJQcm9ncmFtSUQocHJvZ3JhbUlEKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0
dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0
aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlOyB9CisKKyAgICAgICAgaW50IGN1
c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICB9OworI2VuZGlmCisjZW5kaWYKKworICAgIGNsYXNz
IFNldExheWVyUmVwYWludENvdW50IDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRMYXllclJlcGFpbnRDb3VudD4gY3JlYXRlKENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBpbnQgcmVwYWludENvdW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVyUmVwYWludENvdW50KGxheWVy
SUQsIHJlcGFpbnRDb3VudCkpOworICAgICAgICB9CisgICAgICAgIFNldExheWVyUmVwYWludENv
dW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IGNvdW50KQorICAgICAgICA6IGxheWVySUQo
aWQpCisgICAgICAgICwgcmVwYWludENvdW50KGNvdW50KQorICAgICAgICB7IH0KKworICAgICAg
ICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0
T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50VHlwZTsgfQorCisgICAgICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBpbnQgcmVwYWludENvdW50OworICAgIH07
CisKKyAgICBjbGFzcyBTZXRCYWNrZ3JvdW5kQ29sb3IgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldEJhY2tncm91bmRDb2xvcj4g
Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKKyAgICAgICAgfQorICAg
ICAgICBleHBsaWNpdCBTZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikKKyAgICAgICAgOiBjb2xvcihiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIHsgfQorCisg
ICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yVHlwZTsgfQorCisgICAgICAgIENv
bG9yIGNvbG9yOworICAgIH07CisKKyAgICBjbGFzcyBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiA6
IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaWRDaGFu
Z2VTY3JvbGxQb3NpdGlvbihwb3NpdGlvbikpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0
IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KQorICAgICAgICA6IHBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKQorICAgICAgICB7IH0KKworICAg
ICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
Z2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uVHlwZTsgfQorCisgICAgICAg
IEZsb2F0UG9pbnQgcG9zaXRpb247CisgICAgfTsKKworICAgIGNsYXNzIFF1ZXVlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbihQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlv
bj4pID0gMDsKKyAgICB9OworCit9OyAvLyBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgorCisjZW5kaWYgLy8gQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRmNzdm
MDRmNjNjYjA2ZGNhODY0MDVkZDFlZDk4M2YzNzM3OWY5NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uc19oCisjZGVmaW5lIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6T3BlcmF0aW9uPiBvcGVyYXRpb24pIHsgbV9vcGVyYXRpb25zLmFwcGVuZChvcGVy
YXRpb24pOyB9CisgICAgdm9pZCBjbGVhcigpIHsgbV9vcGVyYXRpb25zLmNsZWFyKCk7IH0KKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7
IH0KKyAgICBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24qIGF0
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPCBtX29wZXJhdGlvbnMuc2l6ZSgp
ID8gbV9vcGVyYXRpb25zLmF0KGluZGV4KS5nZXQoKSA6IDA7IH0KKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8UmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbj4gPiBt
X29wZXJhdGlvbnM7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25zX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCBkMjE1ZmIzNjEzYjkwN2I2YjFkOWY1ZTg5
MTE5ZGJiMjY0NGY0NTk0Li5mODUwMDk1YTY5OTU0OGM5Nzk2Mzk0ZjliZTkwMzhiMWJmYzJlZWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5oIgogCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKQEAgLTIxNSw3ICsyMTYsNyBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygp
CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHsKLSAgICBtX3BlbmRpbmdSZW5kZXJlZENv
bnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBtX3JlbmRlcmVkQ29udGVudHNT
Y3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CkBAIC01NTQsOSArNTU1LDEwIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21t
aXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpCiAgICAgbV9iYWNraW5nU3RvcmVzV2l0
aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpmbHVzaExheWVyQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoY29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCiB7Ci0gICAgbV9yZW5kZXJlZENvbnRlbnRzU2Ny
b2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zLnNpemUoKTsgaSsrKQorICAgICAg
ICBleGVjdXRlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihvcGVyYXRpb25zLmF0KGkpKTsK
IAogICAgIC8vIFNpbmNlIHRoZSBmcmFtZSBoYXMgbm93IGJlZW4gcmVuZGVyZWQsIHdlIGNhbiBz
YWZlbHkgdW5sb2NrIHRoZSBhbmltYXRpb25zIHVudGlsIHRoZSBuZXh0IGxheW91dC4KICAgICBz
ZXRBbmltYXRpb25zTG9ja2VkKGZhbHNlKTsKQEAgLTU2OSw2ICs1NzEsMTE5IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcygpCiAgICAgZGlzcGF0Y2hP
bk1haW5UaHJlYWQoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW5kZXJOZXh0RnJh
bWUsIHRoaXMpKTsKIH0KIAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmV4ZWN1dGVD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246Ok9wZXJhdGlvbiogb3BlcmF0aW9uKQoreworICAgIHN3aXRjaCAob3BlcmF0aW9uLT5n
ZXRPcGVyYXRpb25UeXBlKCkpIHsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUxheWVyc1R5cGU6CisgICAgICAgIGNyZWF0ZUxheWVycyhzdGF0aWNfY2FzdDxj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnMqPihvcGVyYXRp
b24pLT5sYXllcklEcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZToKKyAgICAgICAgZGVsZXRlTGF5ZXJzKHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVy
cyo+KG9wZXJhdGlvbiktPmxheWVySURzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXJUeXBlOgorICAgICAgICBzZXRS
b290TGF5ZXJJRChzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRSb290TGF5ZXIqPihvcGVyYXRpb24pLT5sYXllcklEKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZToK
KyAgICAgICAgc2V0TGF5ZXJTdGF0ZShzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyU3RhdGUqPihvcGVyYXRpb24pLT5sYXllckluZm8pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW5UeXBl
OgorICAgICAgICBzZXRMYXllckNoaWxkcmVuKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW4qPihvcGVyYXRpb24pLT5sYXllcklE
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJDaGlsZHJlbio+KG9wZXJhdGlvbiktPmNoaWxkcmVuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxl
VHlwZTogeworICAgICAgICBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVUaWxlKiBjcmVhdGVUaWxlT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbik7CisgICAgICAgIGNy
ZWF0ZVRpbGUoY3JlYXRlVGlsZU9wZXJhdGlvbi0+bGF5ZXJJRCwgY3JlYXRlVGlsZU9wZXJhdGlv
bi0+dGlsZUlELCBjcmVhdGVUaWxlT3BlcmF0aW9uLT51cGRhdGVJbmZvLnNjYWxlRmFjdG9yKTsK
KyAgICAgICAgdXBkYXRlVGlsZShjcmVhdGVUaWxlT3BlcmF0aW9uLT5sYXllcklELCBjcmVhdGVU
aWxlT3BlcmF0aW9uLT50aWxlSUQsCisgICAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OlRpbGVVcGRhdGUoY3JlYXRlVGlsZU9wZXJhdGlvbi0+dXBkYXRlSW5mby51cGRhdGVSZWN0
LCBjcmVhdGVUaWxlT3BlcmF0aW9uLT50aWxlUmVjdCwgY3JlYXRlVGlsZU9wZXJhdGlvbi0+dXBk
YXRlSW5mby5hdGxhc0lELCBjcmVhdGVUaWxlT3BlcmF0aW9uLT51cGRhdGVJbmZvLnN1cmZhY2VP
ZmZzZXQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZVR5cGU6IHsKKyAgICAgICAgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSogdXBkYXRlVGlsZU9wZXJhdGlvbiA9IHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGUq
PihvcGVyYXRpb24pOworICAgICAgICB1cGRhdGVUaWxlKHVwZGF0ZVRpbGVPcGVyYXRpb24tPmxh
eWVySUQsIHVwZGF0ZVRpbGVPcGVyYXRpb24tPnRpbGVJRCwKKyAgICAgICAgICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVwZGF0ZSh1cGRhdGVUaWxlT3BlcmF0aW9uLT51cGRhdGVJ
bmZvLnVwZGF0ZVJlY3QsIHVwZGF0ZVRpbGVPcGVyYXRpb24tPnRpbGVSZWN0LCB1cGRhdGVUaWxl
T3BlcmF0aW9uLT51cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZVRpbGVPcGVyYXRpb24tPnVwZGF0
ZUluZm8uc3VyZmFjZU9mZnNldCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlVHlwZToKKyAgICAgICAgcmVt
b3ZlVGlsZShzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVUaWxlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGUqPihvcGVyYXRp
b24pLT50aWxlSUQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzVHlwZToKKyAgICAgICAgY3JlYXRlVXBkYXRl
QXRsYXMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlVXBkYXRlQXRsYXMqPihvcGVyYXRpb24pLT5hdGxhc0lELAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRs
YXMqPihvcGVyYXRpb24pLT5zdXJmYWNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU6CisgICAgICAg
IHJlbW92ZVVwZGF0ZUF0bGFzKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzKj4ob3BlcmF0aW9uKS0+YXRsYXNJRCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRl
SW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgY3JlYXRlSW1hZ2VCYWNraW5nKHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZyo+
KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmdUeXBlOgorICAg
ICAgICB1cGRhdGVJbWFnZUJhY2tpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNr
aW5nSUQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5zdXJmYWNlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzVHlwZToKKyAgICAgICAgY2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50cyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92
ZUltYWdlQmFja2luZ1R5cGU6CisgICAgICAgIHJlbW92ZUltYWdlQmFja2luZyhzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmcq
PihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zVHlwZToKKyAg
ICAgICAgc2V0TGF5ZXJBbmltYXRpb25zKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9ucyo+KG9wZXJhdGlvbiktPmxheWVySUQs
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpTZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRpb24pLT5hbmltYXRpb25zKTsKKyAgICAg
ICAgYnJlYWs7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lVHlwZToK
KyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlm
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlOiB7CisgICAgICAgIEdyYXBoaWNzU3VyZmFjZTo6
RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJn
ZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKKyAgICAgICAgY29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzKiBjcmVhdGVDYW52YXNPcGVy
YXRvaW4gPSBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVDYW52YXMqPihvcGVyYXRpb24pOworICAgICAgICBjcmVhdGVDYW52YXMoY3JlYXRlQ2Fu
dmFzT3BlcmF0b2luLT5sYXllcklELCBjcmVhdGVDYW52YXNPcGVyYXRvaW4tPmNhbnZhc1NpemUs
CisgICAgICAgICAgICBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjcmVhdGVDYW52YXNPcGVyYXRv
aW4tPmNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgY3JlYXRlQ2FudmFzT3BlcmF0b2luLT50b2tl
bikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTeW5jQ2FudmFzVHlwZToKKyAgICAgICAgc3luY0NhbnZhcyhzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzKj4ob3BlcmF0
aW9uKS0+bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXMqPihvcGVyYXRpb24pLT5mcm9udEJ1ZmZlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
RGVzdHJveUNhbnZhc1R5cGU6CisgICAgICAgIGRlc3Ryb3lDYW52YXMoc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhcyo+KG9wZXJhdGlv
biktPmxheWVySUQpOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmls
dGVyc1R5cGU6CisgICAgICAgIHNldExheWVyRmlsdGVycyhzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24pLT5s
YXllcklELAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+ZmlsdGVycyk7CisgICAg
ICAgIGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGU6
CisgICAgICAgIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSo+KG9w
ZXJhdGlvbiktPmN1c3RvbUZpbHRlclByb2dyYW1JRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW0qPihvcGVyYXRpb24pLT5wcm9ncmFtSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVR5cGU6CisgICAgICAgIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bSo+KG9wZXJhdGlvbiktPmN1c3RvbUZpbHRlclByb2dyYW1JRCk7CisgICAgICAgIGJyZWFrOwor
I2VuZGlmCisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJl
cGFpbnRDb3VudFR5cGU6CisgICAgICAgIHNldExheWVyUmVwYWludENvdW50KHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50
Kj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50Kj4ob3BlcmF0
aW9uKS0+cmVwYWludENvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlOgorICAgICAgICBzZXRC
YWNrZ3JvdW5kQ29sb3Ioc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0QmFja2dyb3VuZENvbG9yKj4ob3BlcmF0aW9uKS0+Y29sb3IpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uVHlwZToKKyAgICAgICAgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24qPihvcGVyYXRpb24pLT5wb3NpdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Tm9uZVR5cGU6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpyZW5kZXJOZXh0RnJhbWUoKQogewogICAgIGlmIChtX2NsaWVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuaAppbmRleCBjZmFiMTY2MmQxYWM1YzQyM2ZkNTAxMGIwMWNkN2U0MDYzNjkzMzgzLi4wNjlk
OThlYWQyMzdhNTU4OWYxM2UzZDg4ZTFjYWI2MjZmNjA5YjZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCkBAIC0yMSw2ICsyMSw3
IEBACiAjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZV9oCiAKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5o
IgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC00Miw2ICs0Myw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7
CiBjbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zOwogY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbTsKIGNsYXNzIEN1c3RvbUZpbHRl
clByb2dyYW1JbmZvOwogY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOwpAQCAtODIsMTMgKzg0LDYg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRT
aXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24pOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3JlYXRlQ2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NT
dXJmYWNlPik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgZnJvbnRCdWZmZXIpOwotICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExh
eWVySUQsIGludCB2YWx1ZSk7CiAKICAgICB2b2lkIGRldGFjaCgpOwogICAgIHZvaWQgYXBwZW5k
VXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKQEAgLTk4LDM4ICs5MywxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9v
bCk7CiAKLSAgICB2b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOwot
ICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
Ci0gICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKLSAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwotICAgIHZvaWQg
cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwotI2VuZGlmCi0KLSAgICB2b2lkIGNy
ZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxl
KTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwotICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKLSAgICB2b2lk
IHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hMYXll
ckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwotICAgIHZvaWQgY2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2
b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2
b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJik7CisgICAgdm9pZCBjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9ucyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYpOwogICAgIHZvaWQg
c2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKLSAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihj
b25zdCBDb2xvciYpOwotICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7
IG1fc2V0RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9CiAKLSNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCi0gICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKLSNlbmRp
ZgorICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7IG1fc2V0RHJhd3NC
YWNrZ3JvdW5kID0gZW5hYmxlOyB9CiAKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NMYXllciogbGF5
ZXJCeUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKQEAgLTE2MCw2ICsxMjcsNDMgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNyZWF0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7CiAgICAgdm9pZCBk
ZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQpOwogCisgICAgLy8gQmVnaW4gb3BlcmF0aW9u
IGV4ZWN1dGlvbnMuCisgICAgdm9pZCBleGVjdXRlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bihjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24qKTsKKyAgICB2
b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAg
IHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Cisg
ICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOworICAgIHZvaWQgc2V0
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
Jik7CisgICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHVw
ZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFRpbGVV
cGRhdGUmKTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJf
dCB0aWxlSUQpOworICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKKyAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQpOworICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPik7Cisg
ICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpOworICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCisgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKKyNlbmRpZgorI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPik7Cisg
ICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZm
ZXIpOworICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOworI2VuZGlm
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQg
aWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CisgICAgdm9pZCByZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7CisjZW5kaWYKKyAgICB2b2lkIHNldExheWVyUmVwYWlu
dENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKKyAgICB2b2lkIHNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pOworICAgIC8vIEVuZCBvcGVyYXRpb24gZXhl
Y3V0aW9ucy4KKwogICAgIHZvaWQgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xh
eWVyKiwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCByZW1vdmVSZWxlYXNl
ZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpOwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CkBA
IC0xNzAsNiArMTc0LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChHcmFwaGljc0xheWVyKik7CiAgICAgdm9pZCByZXNldEJhY2tpbmdTdG9yZVNpemVU
b0xheWVyU2l6ZShHcmFwaGljc0xheWVyKik7CiAKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisg
ICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKKyNlbmRpZgorCiAgICAgRmxvYXRTaXplIG1fY29udGVu
dHNTaXplOwogICAgIEZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CiAKQEAgLTIwOCw3
ICsyMTYsNiBAQCBwcml2YXRlOgogICAgIExheWVyUmF3UHRyTWFwIG1fZml4ZWRMYXllcnM7CiAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIG1fcm9vdExheWVySUQ7CiAgICAgRmxvYXRQb2ludCBtX3Jl
bmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50IG1fcGVuZGluZ1Jl
bmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tl
ZDsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgYm9vbCBtX2FuaW1h
dGlvbkZyYW1lUmVxdWVzdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEltYWdlQmFja2luZy5jcHAKaW5kZXggZjY5MjQ4Mjg3NWQ1Y2ZjMjFkYjZiYjBkNmYy
MDBlMWQ5OWM1YjIwZi4uYTk5MjQ2ZTNkM2RmY2I1ZTM5ODhmZTY4Mzg0Y2NiNWQ4ZmMyNGZiYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAKKyNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEzICszOSwxMyBAQCBDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQ+KGltYWdlKTsKIH0KIAotUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZShDb29yZGluYXRvciogY2xpZW50LCBQYXNz
UmVmUHRyPEltYWdlPiBpbWFnZSkKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6UXVldWUqIHF1ZXVlLCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKGNsaWVudCwgaW1hZ2UpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKHF1ZXVlLCBp
bWFnZSkpOwogfQogCi1Db29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCi0gICAg
OiBtX2Nvb3JkaW5hdG9yKGNsaWVudCkKK0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZyhDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogcXVl
dWUsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQorICAgIDogbV9vcGVyYXRpb25RdWV1ZShxdWV1
ZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX2lkKGdldENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQobV9pbWFnZS5nZXQoKSkpCiAgICAgLCBtX2NsZWFyQ29udGVudHNUaW1lcih0aGlz
LCAmQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKQpAQCAt
NTQsNyArNTUsNyBAQCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cgogICAgIC8vIEZJWE1FOiBXZSB3
b3VsZCBuZWVkIHRvIGRlY29kZSBhIHNtYWxsIGltYWdlIGRpcmVjdGx5IGludG8gYSBHcmFwaGlj
c1N1cmZhY2UuCiAgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0MjYKIAotICAgIG1fY29v
cmRpbmF0b3ItPmNyZWF0ZUltYWdlQmFja2luZyhpZCgpKTsKKyAgICBtX29wZXJhdGlvblF1ZXVl
LT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmc6OmNyZWF0ZShpZCgpKSk7CiB9CiAKIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjp+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoKQpAQCAtNzQsNyAr
NzUsNyBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVIb3N0KEhvc3QqIGhv
c3QpCiAgICAgbV9ob3N0cy5yZW1vdmUocG9zaXRpb24pOwogCiAgICAgaWYgKG1faG9zdHMuaXNF
bXB0eSgpKQotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5yZW1vdmVJbWFnZUJhY2tpbmcoaWQoKSk7
CisgICAgICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6
Y3JlYXRlKGlkKCkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6bWFya0Rp
cnR5KCkKQEAgLTExMyw5ICsxMTQsOCBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1
cGRhdGUoKQogCiAgICAgbV9uYXRpdmVJbWFnZVB0ciA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CiAKLSAgICAvLyBJZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZhaWxzLCB0
cnkgYWdhaW4gaW4gdGhlIG5leHQgdXBkYXRlLgotICAgIGJvb2wgc3VjY2VzcyA9IG1fY29vcmRp
bmF0b3ItPnVwZGF0ZUltYWdlQmFja2luZyhpZCgpLCBtX3N1cmZhY2UpOwotICAgIG1faXNEaXJ0
eSA9ICFzdWNjZXNzOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdl
QmFja2luZzo6Y3JlYXRlKGlkKCksIG1fc3VyZmFjZSkpOworICAgIG1faXNEaXJ0eSA9IGZhbHNl
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZWxlYXNlU3VyZmFjZUlmTmVl
ZGVkKCkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1
cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdlZFRvVmlzaWJsZSkKIAogdm9pZCBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQoVGltZXI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+KikKIHsKLSAgICBtX2Nvb3JkaW5hdG9yLT5jbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKGlkKCkpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHM6OmNyZWF0ZShpZCgpKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmgKaW5kZXggNWI1YjU3YTZlY2IxMDFlZjc1YjI5MTkxYjU3NTA3YmVkZGEyZjc2
NS4uOGJmNGRiNjU3OTFiZGI1ZWIwYjBlNGVlM2IwNTQ2NDkyODgxNWQwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKQEAgLTI4LDYg
KzI4LDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b24uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC0zOSwyMCArNDAsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEltYWdlQmFja2luZyA6IHB1
YmxpYyBSZWZDb3VudGVkPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiB7CiBwdWJsaWM6Ci0gICAg
Y2xhc3MgQ29vcmRpbmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
ID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgfTsKLQogICAgIGNsYXNzIEhvc3QgewogICAgIHB1
YmxpYzoKICAgICAgICAgdmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zpc2libGUoKSA9IDA7CiAg
ICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBj
cmVhdGUoQ29vcmRpbmF0b3IqLCBQYXNzUmVmUHRyPEltYWdlPik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpRdWV1ZSosIFBhc3NSZWZQdHI8SW1hZ2U+KTsKICAgICB2aXJ0dWFsIH5Db29y
ZGluYXRlZEltYWdlQmFja2luZygpOwogCiAgICAgc3RhdGljIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgZ2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFnZSopOwpAQCAtNjgsMTMgKzYx
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZSgpOwogCiBwcml2YXRlOgotICAgIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxJbWFnZT4pOworICAg
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1
ZXVlKiwgUGFzc1JlZlB0cjxJbWFnZT4pOwogCiAgICAgdm9pZCByZWxlYXNlU3VyZmFjZUlmTmVl
ZGVkKCk7CiAgICAgdm9pZCB1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdlZFRv
VmlzaWJsZSk7CiAgICAgdm9pZCBjbGVhckNvbnRlbnRzVGltZXJGaXJlZChUaW1lcjxDb29yZGlu
YXRlZEltYWdlQmFja2luZz4qKTsKIAotICAgIENvb3JkaW5hdG9yKiBtX2Nvb3JkaW5hdG9yOwor
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiBtX29wZXJhdGlvblF1ZXVl
OwogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBOYXRpdmVJbWFnZVB0ciBtX25hdGl2
ZUltYWdlUHRyOwogICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgbV9pZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9T
dXJmYWNlVXBkYXRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKaW5kZXggNmFiMzg0YTExZWFhNWVh
MjU0MDgxM2M3MDI1ZTVmYzhjMTdkMzkxMC4uZWE4YjI1ZmVmNmU5NzcyOTJmMGUzODhkNDg2NDJm
YTIyOWI1MDk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZv
LmgKQEAgLTIzLDEzICsyMywxMCBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAog
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbyB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU3VyZmFjZVVwZGF0ZUluZm8pOwotCiBwdWJsaWM6CiAgICAgU3VyZmFj
ZVVwZGF0ZUluZm8oKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAK
aW5kZXggMzY0ZjA2ODcxMDgyYjU4ZmNiZDgzYTBlZjMxNDUwYmU0ODAwODQ4Yi4uN2ZjYWJmNjk2
ZGYxOGE4ZGE1ZDk0OWJmNDdiNzAwM2RhMTQzOWM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VXBkYXRlQXRsYXMuY3BwCkBAIC0yMywxNCArMjMsMTUgQEAKIAogI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1VcGRhdGVB
dGxhczo6VXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lv
biwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncykKLSAgICA6IG1fY2xpZW50KGNsaWVu
dCkKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpRdWV1ZSogcXVldWUsIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3Mg
ZmxhZ3MpCisgICAgOiBtX29wZXJhdGlvblF1ZXVlKHF1ZXVlKQogICAgICwgbV9pbmFjdGl2aXR5
SW5TZWNvbmRzKDApCiB7CiAgICAgc3RhdGljIHVpbnQzMl90IG5leHRJRCA9IDA7CkBAIC0zOCwx
NSArMzksMTIgQEAgVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBj
bGllbnQsIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3UKICAgICBJbnRTaXplIHNpemUgPSBu
ZXh0UG93ZXJPZlR3byhJbnRTaXplKGRpbWVuc2lvbiwgZGltZW5zaW9uKSk7CiAgICAgbV9zdXJm
YWNlID0gQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgZmxhZ3MpOwogCi0gICAgLy8g
RklYTUU6IEN1cnJlbnRseSwgaWYgc2VuZGluZyB0aGUgbWVzc2FnZSBmYWlscywgVXBkYXRlQXRs
YXMgZ2l2ZXMgdXAgZHJhd2luZyBhbnl0aGluZyBpbXBsaWNpdGx5LgotICAgIGlmICghbV9jbGll
bnQtPmNyZWF0ZVVwZGF0ZUF0bGFzKG1fSUQsIG1fc3VyZmFjZSkpCi0gICAgICAgIG1fc3VyZmFj
ZS5jbGVhcigpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0
bGFzOjpjcmVhdGUobV9JRCwgbV9zdXJmYWNlKSk7CiB9CiAKIFVwZGF0ZUF0bGFzOjp+VXBkYXRl
QXRsYXMoKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fY2xpZW50LT5yZW1vdmVV
cGRhdGVBdGxhcyhtX0lEKTsKKyAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVV
cGRhdGVBdGxhczo6Y3JlYXRlKG1fSUQpKTsKIH0KIAogdm9pZCBVcGRhdGVBdGxhczo6YnVpbGRM
YXlvdXRJZk5lZWRlZCgpCkBAIC03Miw5ICs3MCw2IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHVpbnQzMl90
CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFw
aGljc0NvbnRleHQ+KCk7CiAKLSAgICBpZiAoIW1fc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIFBh
c3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOwotCiAgICAgYXRsYXNJRCA9IG1fSUQ7CiAKICAg
ICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRl
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKaW5kZXggNDhhNmJmODQ0YTQ5MGY3
ZmQyYzM5YTA0MjRlMzMwZmRkYjE2ZDc4Yi4uMTYzMTM4ZjE3YzI1NjQwNzNkOWI1Njg2YjBhNDM4
ODI5YWNmNGQzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKQEAgLTIyLDYg
KzIyLDcgQEAKICNkZWZpbmUgVXBkYXRlQXRsYXNfaAogCiAjaW5jbHVkZSAiQXJlYUFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRl
ICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKQEAgLTMxLDE2
ICszMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBj
bGFzcyBJbnRQb2ludDsKIAotY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgewotcHVibGljOgotICAg
IHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgPSAwOwotfTsKLQogY2xhc3MgVXBkYXRlQXRsYXMg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKIHB1YmxpYzoKLSAgICBV
cGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCosIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVk
U3VyZmFjZTo6RmxhZ3MpOworICAgIFVwZGF0ZUF0bGFzKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlF1ZXVlKiwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7
CiAgICAgflVwZGF0ZUF0bGFzKCk7CiAKICAgICBpbmxpbmUgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KQEAgLTY2LDcgKzYxLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKIAogcHJpdmF0ZToKLSAgICBVcGRhdGVB
dGxhc0NsaWVudCogbV9jbGllbnQ7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UXVldWUqIG1fb3BlcmF0aW9uUXVldWU7CiAgICAgT3duUHRyPEdlbmVyYWxBcmVhQWxsb2NhdG9y
PiBtX2FyZWFBbGxvY2F0b3I7CiAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gbV9zdXJm
YWNlOwogICAgIGRvdWJsZSBtX2luYWN0aXZpdHlJblNlY29uZHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
QXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBjMzM3MWQy
YzA4NGUwNTJkZWRjZjY0ZWZmNGJkMTQ3NTAwZTliNTRiLi40YmE4MzUwZDg2MmY3YTFhNWM2MzE0
ZGM4YzBjYjNmYjQyN2Y5N2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDkgKzI5LDExIEBACiAjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRM
YXllckluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQzRC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgpAQCAtNzMsOSArNzUsNyBAQAogI2Vu
ZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIENvcmVJUEMgewog
CkBAIC04MzUsNiArODM1LDM4NCBAQCBib29sIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUlu
Zm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBTdXJmYWNlVQogICAgIHJldHVy
biBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIs
IHN1cmZhY2VVcGRhdGVJbmZvKTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCit7CisgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3BlcmF0aW9ucy5zaXplKCkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24qIG9wZXJhdGlvbiA9
IG9wZXJhdGlvbnMuYXQoaSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShvcGVyYXRpb24t
PmdldE9wZXJhdGlvblR5cGUoKSk7CisKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9w
ZXJhdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUxheWVyc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVycyo+KG9wZXJh
dGlvbiktPmxheWVySURzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZToKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
RGVsZXRlTGF5ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXJU
eXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXIqPihvcGVyYXRpb24pLT5sYXllcklEOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJTdGF0ZVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGUqPihv
cGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlKj4ob3BlcmF0
aW9uKS0+bGF5ZXJJbmZvOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlblR5cGU6CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlNldExheWVyQ2hpbGRyZW4qPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllckNoaWxkcmVuKj4ob3BlcmF0aW9uKS0+Y2hpbGRyZW47CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVU
aWxlVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlUmVjdDsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbiktPnVwZGF0ZUluZm87CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlVHlw
ZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlVwZGF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlVwZGF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlUmVjdDsKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRl
VGlsZSo+KG9wZXJhdGlvbiktPnVwZGF0ZUluZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlVHlwZToKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVB
dGxhc1R5cGU6IHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXMqPihvcGVyYXRpb24p
LT5hdGxhc0lEOworICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGlu
YXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxh
cyo+KG9wZXJhdGlvbiktPnN1cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQg
dG8gZGVhbCB3aXRoIHRoZSBjYXNlIHRoYXQgaGFuZGxlIGNyZWF0aW9uIGlzIGZhaWxlZC4KKyAg
ICAgICAgICAgIHdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBk
YXRlQXRsYXNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhcyo+KG9wZXJhdGlv
biktPmF0bGFzSUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmdUeXBlOgorICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlVwZGF0ZUltYWdlQmFja2luZ1R5cGU6IHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNr
aW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQ7CisgICAgICAgICAgICBXZWJDb29yZGlu
YXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3Jk
aW5hdGVkU3VyZmFjZSo+KHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlVwZGF0ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPnN1cmZhY2UuZ2V0KCkpOwor
ICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHRoYXQgaGFuZGxl
IGNyZWF0aW9uIGlzIGZhaWxlZC4KKyAgICAgICAgICAgIHdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGU6CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJ
RDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZ1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUlt
YWdlQmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJB
bmltYXRpb25zVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0
aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0
aW9uKS0+YW5pbWF0aW9uczsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlOgorICAgICAgICAgICAgYnJlYWs7CisjZW5k
aWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVD
YW52YXMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXMq
PihvcGVyYXRpb24pLT5jYW52YXNTaXplOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXMqPihv
cGVyYXRpb24pLT50b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXNUeXBlOgorICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
eW5jQ2FudmFzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZh
cyo+KG9wZXJhdGlvbiktPmZyb250QnVmZmVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhc1R5cGU6Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAg
ICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZToKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+ZmlsdGVyczsKKyAgICAgICAg
ICAgIGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjYXNl
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1U
eXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKj4ob3BlcmF0aW9u
KS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0
ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+cHJvZ3JhbUluZm87CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bSo+KG9wZXJhdGlvbiktPmN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAgICAgIGJyZWFr
OworI2VuZGlmCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJSZXBhaW50Q291bnRUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3Vu
dCo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENv
dW50Kj4ob3BlcmF0aW9uKS0+cmVwYWludENvdW50OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9y
VHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yKj4ob3BlcmF0aW9uKS0+Y29s
b3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvblR5cGU6CisgICAgICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uKj4ob3BlcmF0aW9uKS0+cG9zaXRpb247CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpOb25l
VHlwZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9ucz46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiBvcGVyYXRpb25zKQoreworICAgIHVuc2lnbmVk
IG9wZXJhdGlvbnNTaXplOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG9wZXJhdGlvbnNTaXpl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
cGVyYXRpb25zU2l6ZTsgKytpKSB7CisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgdHlwZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVt
KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxh
eWVyc1R5cGU6IHsKKyAgICAgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGlkczsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkcykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpjcmVhdGUoaWRzKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkRlbGV0ZUxheWVyc1R5cGU6IHsKKyAgICAgICAgICAgIFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+IGlkczsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkcykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpjcmVhdGUoaWRz
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllclR5cGU6IHsKKyAgICAgICAgICAgIENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
b3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExh
eWVyOjpjcmVhdGUobGF5ZXJJRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlw
ZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm87CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllckluZm8pKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGU6OmNyZWF0ZShsYXllcklELCBsYXllcklu
Zm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlblR5cGU6IHsKKyAgICAgICAg
ICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hpbGRyZW47CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShjaGlsZHJlbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6Y3JlYXRlKGxheWVySUQsIGNoaWxkcmVuKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGVUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVy
SUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90
IHRpbGVJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHRpbGVJRCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHRpbGVSZWN0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJ
bmZvOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodXBkYXRlSW5mbykpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZTo6Y3JlYXRlKGxheWVySUQs
IHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRl
VGlsZVR5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUodGlsZUlEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0OworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUodGlsZVJlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgICAgICAgICBpZiAo
IWRlY29kZXItPmRlY29kZSh1cGRhdGVJbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpVcGRhdGVUaWxlOjpjcmVhdGUobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBk
YXRlSW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlVHlwZTogeworICAgICAgICAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0
aWxlSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGU6OmNy
ZWF0ZShsYXllcklELCB0aWxlSUQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRs
YXNUeXBlOiB7CisgICAgICAgICAgICB1aW50MzJfdCBhdGxhc0lEOworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUoYXRsYXNJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKGF0bGFzSUQsIFdlYkNv
b3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlVXBkYXRlQXRsYXNUeXBlOiB7CisgICAgICAgICAgICB1aW50MzJfdCBhdGxhc0lEOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYXRsYXNJRCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OmNyZWF0ZShhdGxhc0lEKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZ1R5cGU6IHsKKyAgICAgICAgICAgIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VC
YWNraW5nOjpjcmVhdGUoaWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5n
VHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkLCBXZWJD
b29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHM6OmNyZWF0ZShpZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmdUeXBl
OiB7CisgICAgICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkOworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlNldExheWVyQW5pbWF0aW9uc1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBh
bmltYXRpb25zOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYW5pbWF0aW9ucykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5h
cHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpj
cmVhdGUoaWQsIGFuaW1hdGlvbnMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisj
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBjYXNlIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZVR5cGU6CisgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1
ZXN0QW5pbWF0aW9uRnJhbWU6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlm
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXll
cklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBJbnRTaXpl
IGNhbnZhc1NpemU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShjYW52YXNTaXpl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBHcmFwaGljc1N1
cmZhY2VUb2tlbiB0b2tlbjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHRva2Vu
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25z
LmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmNyZWF0
ZShsYXllcklELCBjYW52YXNTaXplLCB0b2tlbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2Fu
dmFzVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1aW50MzJfdCBmcm9udEJ1ZmZlcjsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZyb250QnVmZmVyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpjcmVhdGUobGF5ZXJJRCwgZnJvbnRCdWZmZXIp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhc1R5cGU6IHsKKyAgICAgICAgICAgIENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
b3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNh
bnZhczo6Y3JlYXRlKGxheWVySUQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisj
ZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZTogeworICAgICAgICAgICAgQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShmaWx0ZXJzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllckZpbHRlcnM6OmNyZWF0ZShsYXllcklELCBmaWx0ZXJzKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW1UeXBlOiB7CisgICAgICAgICAgICBpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJDb3JlOjpDdXN0b21G
aWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbzsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHByb2dyYW1JbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBw
cm9ncmFtSW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
VHlwZTogeworICAgICAgICAgICAgaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3Jl
YXRlKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyNlbmRpZgorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyUmVwYWludENvdW50VHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVy
SUQgcmVwYWludENvdW50OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVwYWlu
dENvdW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVy
YXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFp
bnRDb3VudDo6Y3JlYXRlKGxheWVySUQsIHJlcGFpbnRDb3VudCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlOiB7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvbG9yKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6OmNyZWF0ZShjb2xvcikpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvblR5cGU6IHsKKyAgICAgICAgICAg
IEZsb2F0UG9pbnQgcG9zaXRpb247CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShw
b3NpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Ny
b2xsUG9zaXRpb246OmNyZWF0ZShwb3NpdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpOb25lVHlw
ZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBDb3JlSVBDCiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCmlu
ZGV4IDJhZWZjNjU3NGZmM2VhNDExMTNmYzFlNDJjMDE5MThmNDI0MWJmNjcuLmMwOWI4ZmRiOTM3
ZTY4Mjc3NzFiYjE0N2JhNjZiMWYwMTdlYjFmMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCkBAIC0zMiwxMCArMzIsMTEgQEAKICNp
bmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBT
dXJmYWNlVXBkYXRlSW5mbzsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOwog
Y2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbjsKIGNsYXNz
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CiBjbGFz
cyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7CiBzdHJ1
Y3QgQ29vcmRpbmF0ZWRMYXllckluZm87CkBAIC0xMTcsNiArMTE4LDExIEBAIHRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8+IHsKICAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0
ZUluZm8mKTsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbnMmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmKTsKK307CisKIH0gLy8gbmFtZXNwYWNl
IENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAppbmRleCA5
ODY0OTNjMzJmZjg0NjI4YTNlMGIwZWJiM2EwNTFiNzQxNTkzNzU4Li45NTVmZGI5MzhhMzM2N2Jl
MDAwNDhiZjUzMDQ0NjQ0OGU1Y2UwZjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0yMywxNiArMjMsMTEgQEAKICNpbmNs
dWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogCiAjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBk
YXRlSW5mby5oPgotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgIkN1c3RvbUZp
bHRlclByb2dyYW1JbmZvLmgiCi0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTksNzggKzU0LDkgQEAgdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3QKICAgICBtX3NjZW5lLT5hcHBlbmRVcGRhdGUoZnVuY3Rpb24pOwogfQogCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRp
bmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVGlsZSwgbV9z
Y2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7Ci0g
ICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUlu
Zm8pOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxl
Rm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
dXBkYXRlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0aWxlUmVjdCwg
dXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZSwgbV9zY2Vu
ZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVVcGRhdGVBdGxhcywgbV9z
Y2VuZS5nZXQoKSwgYXRsYXNJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxl
KSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVXBkYXRlQXRsYXMsIG1fc2NlbmUuZ2V0KCks
IGF0bGFzSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3Jl
YXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlk
cykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmNyZWF0ZUxheWVycywgbV9zY2VuZS5nZXQoKSwgaWRzKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcnMsIG1fc2NlbmUuZ2V0KCksIGlk
cykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRSb290TGF5ZXJJRCwgbV9zY2Vu
ZS5nZXQoKSwgaWQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
c2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mIGluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlLCBtX3NjZW5lLmdldCgpLCBpZCwg
aW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21w
b3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuLCBtX3NjZW5lLmdl
dCgpLCBpZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNl
dExheWVyRmlsdGVycywgbV9zY2VuZS5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVDdXN0b21GaWx0ZXJQ
cm9ncmFtLCBtX3NjZW5lLmdldCgpLCBpZCkpOwotfQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0s
IG1fc2NlbmUuZ2V0KCksIGlkLCBwcm9ncmFtSW5mbykpOwotfQotI2VuZGlmCi0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNpemUm
IGNvbnRlbnRzU2l6ZSwgY29uc3QgSW50UmVjdCYgY292ZXJlZFJlY3QpCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
cyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
b3ZlcmVkUmVjdCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3NjZW5lLmdldCgpKSk7CisgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9ucywgbV9zY2VuZS5nZXQoKSwgb3BlcmF0aW9ucykpOwogICAgIHVw
ZGF0ZVZpZXdwb3J0KCk7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPmRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJl
ZFJlY3QpOwpAQCAtMTQwLDI0ICs2Niw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwKICNlbmRp
ZgogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlSW1hZ2VCYWNraW5n
LCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRh
dGVJbWFnZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQsIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzLCBtX3NjZW5lLmdldCgpLCBpbWFn
ZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2Vk
KQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
cmVtb3ZlSW1hZ2VCYWNraW5nLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7CisgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBbmltYXRpb25zTG9j
a2VkLCBtX3NjZW5lLmdldCgpLCBsb2NrZWQpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNT
aXplKQpAQCAtMTY1LDE1ICs3Niw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6CiAgICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRDb250ZW50c1Np
emUsIG1fc2NlbmUuZ2V0KCksIGNvbnRlbnRzU2l6ZSkpOwogfQogCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQW5p
bWF0aW9ucywgbV9zY2VuZS5nZXQoKSwgaWQsIGFuaW1hdGlvbnMpKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tl
ZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fc2NlbmUuZ2V0KCksIGxvY2tlZCkpOwotfQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikK
IHsKQEAgLTE5NCw1NSArOTYsMTYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6cmVuZGVyTmV4dEZyYW1lKCkKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlcXVlc3RBbmltYXRp
b25GcmFtZSgpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIG1fc2NlbmUuZ2V0KCkpKTsKLSAgICB1cGRh
dGVWaWV3cG9ydCgpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojph
bmltYXRpb25GcmFtZVJlYWR5KCkKIHsKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkFuaW1h
dGlvbkZyYW1lUmVhZHkoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsK
IH0KICNlbmRpZgogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRDaGFu
Z2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpZENoYW5nZVNjcm9s
bFBvc2l0aW9uLCBtX3NjZW5lLmdldCgpLCBwb3NpdGlvbikpOwotfQotCi0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVD
YW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBj
b25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NTdXJmYWNl
OjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRh
cmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzLCBtX3NjZW5l
LmdldCgpLCBpZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6
ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZy
b250QnVmZmVyKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c3luY0NhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGZyb250QnVmZmVyKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6ZGVzdHJveUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0K
LSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllclJl
cGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVwYWlu
dENvdW50LCBtX3NjZW5lLmdldCgpLCBpZCwgdmFsdWUpKTsKLX0KLQogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cGFnZUlEKCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QmFja2dyb3VuZENv
bG9yLCBtX3NjZW5lLmdldCgpLCBjb2xvcikpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5LmgKaW5kZXggMjRiMzQ3NzBhYzA4M2MzNWE1NTQwMzA0ZTA5MGEwNTI1OGVm
NTdhZC4uYzM4ODIzNWQwNDA1NDBkYzk5M2QwNjhlYmQ5YmYyYjhkMmEwMzE0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0yNSwy
MyArMjUsMTMgQEAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29vcmRpbmF0ZWRMYXll
ckluZm87CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczsKIGNsYXNzIFN1cmZh
Y2VVcGRhdGVJbmZvOwogfQogCkBAIC01Myw0NSArNDMsMTIgQEAgY2xhc3MgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lQ2wKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eShEcmF3aW5nQXJlYVByb3h5Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7
Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0
ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIHZvaWQgY3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRl
clByb2dyYW1JbmZvJik7Ci0gICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBp
ZCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVDb21wb3Np
dGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwot
ICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklEKTsKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVj
dCk7CisgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwogICAgIHZvaWQgc2V0Q29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY292ZXJlZFJlY3QpOwotICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHVwZGF0ZVRp
bGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZv
Jik7Ci0gICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMy
X3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2
b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgY3JlYXRl
SW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZv
aWQgdXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQs
IGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7Ci0gICAgdm9pZCBjbGVhcklt
YWdlQmFja2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwot
ICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsK
LSAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHBvc2l0aW9uKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0
ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOwotICAgIHZvaWQgc3lu
Y0NhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVy
KTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsK
LSNlbmRpZgotICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBpbnQgdmFsdWUpOwogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkgY29uc3QgeyByZXR1cm4gbV9zY2VuZS5n
ZXQoKTsgfQotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSAgICB2
b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQotICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7Ci0jZW5kaWYKLSAg
ICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogCiAgICAg
Ly8gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50IE1ldGhvZHMuCiAjaWYgRU5BQkxFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgppbmRleCAyMWRjMjYzNDUw
M2NjZGU4NzkwNjJkNzkzMjNjNmJiYWJlNGY3MmVjLi42ZTI3OTIzYmJjMDM4YTFkOGU2NjQzMzFh
MzIwMGFmNWY5YTFjOTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTksNDQgKzE5LDcgQEAK
IAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIG1lc3NhZ2VzIC0+IENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5IExlZ2FjeVJlY2VpdmVyIHsKLSAgICBTZXRDb21wb3NpdGluZ0xh
eWVyU3RhdGUodWludDMyX3QgaWQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVy
SW5mbykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3QgaWQsIFZlY3Rv
cjx1aW50MzJfdD4gY2hpbGRyZW4pCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFNldENv
bXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zIGZpbHRlcnMpCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgQ3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1J
bmZvIHByb2dyYW1JbmZvKQotICAgIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQot
I2VuZGlmCi0gICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCi0gICAgQ3Jl
YXRlQ29tcG9zaXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAgRGVsZXRlQ29t
cG9zaXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAgQ3JlYXRlVGlsZUZvckxh
eWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0
aWxlUmVjdCwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBVcGRh
dGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3Jl
OjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZv
KQotICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQpCi0gICAgQ3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgV2ViS2l0OjpXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCi0gICAgUmVtb3ZlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCkKLSAgICBDcmVhdGVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJ
RCkKLSAgICBVcGRhdGVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCwgV2ViS2l0OjpXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCi0gICAgQ2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyh1aW50NjRfdCBpbWFnZUlEKQotICAgIFJlbW92ZUltYWdlQmFja2luZyh1aW50NjRf
dCBpbWFnZUlEKQotICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6OkludFNpemUgY29udGVudHNT
aXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQotICAgIERpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zaXRpb24pCi0gICAgU2V0TGF5ZXJBbmltYXRp
b25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRp
b25zKQorICAgIENvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIG9wZXJhdGlvbnMsIFdlYkNvcmU6OkludFNpemUg
Y29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQogICAgIFNldEFuaW1h
dGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCi0KLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCi0gICAgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKLSNlbmRpZgotCi0jaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi0gICAgQ3JlYXRlQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJ
bnRTaXplIGNhbnZhc1NpemUsIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuKQot
ICAgIFN5bmNDYW52YXModWludDMyX3QgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQotICAgIERl
c3Ryb3lDYW52YXModWludDMyX3QgaWQpCi0jZW5kaWYKLQotICAgIFNldExheWVyUmVwYWludENv
dW50KHVpbnQzMl90IGxheWVySUQsIGludCB2YWx1ZSkKLQotICAgIFNldEJhY2tncm91bmRDb2xv
cihXZWJDb3JlOjpDb2xvciBjb2xvcikKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNmU1ZmI1
NzIzMWM5Yjg5NWYyZjA2ZWE0MTUxMzAxNjk4ODEwYTQ1Yy4uZDU5ZjI3NGJkZTZlYWJmMjYxNWNh
YjAxM2I0NTBiZjk0MzYwNmUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCkBAIC0zOCw5ICszOCw5IEBACiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1
cmZhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KQEAg
LTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5m
by5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KICNp
bmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CkBAIC04Niw3ICs4NSw2IEBAIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0KFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3ModHJ1ZSkKICAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZFNlbmRT
Y3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2Up
CiAgICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcihmYWxzZSkKICAgICAs
IG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVy
Rmx1c2hUaW1lckZpcmVkKQogICAgICwgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhp
cywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
RmlyZWQpCkBAIC0yODcsMTQgKzI4NSwxNCBAQCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKIAogICAgIGRlbGV0ZUNvbXBvc2l0aW5nTGF5
ZXJzKCk7CiAKLSAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKKyAgICBpZiAoIW1fb3BlcmF0
aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgZGlkU3luYyA9IHRydWU7CiAKICAgICAgICAgSW50
U2l6ZSBjb250ZW50c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNpemUoKSk7CiAgICAgICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3Zl
clJlY3QoKTsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6RGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVj
dCkpOworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpDb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhtX29wZXJh
dGlvbnMsIGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV9vcGVyYXRpb25z
LmNsZWFyKCk7CiAgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CiAgICAgfSBlbHNlCiAgICAgICAgIHVubG9ja0Fu
aW1hdGlvbnMoKTsKIApAQCAtMzIwLDkgKzMxOCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGVDb21wb3NpdGluZ0xheWVycygpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpDcmVhdGVDb21wb3NpdGluZ0xheWVycyhtX2xheWVyc1RvQ3JlYXRlKSk7CisgICAgZW5xdWV1
ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlTGF5ZXJzOjpjcmVhdGUobV9sYXllcnNUb0NyZWF0ZSkpOwogICAgIG1fbGF5ZXJz
VG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiB9CiAKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVDb21wb3NpdGluZ0xheWVycygpCkBA
IC0zMzUsOSArMzMyLDggQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXJzKG1fbGF5ZXJzVG9EZWxldGUpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVM
YXllcnM6OmNyZWF0ZShtX2xheWVyc1RvRGVsZXRlKSk7CiAgICAgbV9sYXllcnNUb0RlbGV0ZS5j
bGVhcigpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVk
KCkKQEAgLTM0NSw3MCArMzQxLDEwIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpp
bml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCiAgICAgaWYgKG1fZGlkSW5p
dGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRS
b290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXll
ci5nZXQoKSktPmlkKCkpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0ZSh0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKICAgICBt
X2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3lu
Y0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVy
SW5mbyYgaW5mbykKLXsKLSAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUp
IHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0
LmxvY2F0aW9uKCkpKTsKLSAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0
Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBj
aGlsZHJlbikpOwotfQotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxh
dGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBjYW52YXNQbGF0Zm9y
bUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9
IGNhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ2Fu
dmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbikpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIq
IGNhbnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3Jh
cGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lDYW52YXMoaWQpKTsKLX0K
LSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJSZXBhaW50
Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0TGF5ZXJS
ZXBhaW50Q291bnQoaWQsIHZhbHVlKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyRmlsdGVycyhDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBjaGVj
a0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGZpbHRlcnMpOwotI2VuZGlmCi0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29t
cG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCiAjaWYgRU5B
QkxFKENTU19TSEFERVJTKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykK
IHsKQEAgLTQzNiw3ICszNzIsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hl
Y2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYQogCiAgICAgICAg
IGlmICghY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSkgewogICAgICAgICAgICAg
Y3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5zZXRDbGllbnQodGhpcyk7Ci0gICAgICAgICAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpD
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwg
Y3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZv
KCkpKTsKKyAgICAgICAgICAgIGVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OmNy
ZWF0ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFs
aWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2xpZW50IHdhcyBub3QgZGlzY29ubmVjdGVkIHRo
ZW4gdGhpcyBjb29yZGluYXRvciBtdXN0IGJlIHRoZSBjbGllbnQgZm9yIGl0LgogICAgICAgICAg
ICAgQVNTRVJUKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBA
IC00NDksNyArMzg1LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eShXZWJDdXN0b21GaWx0ZXJQcm8KICAgICAvLyBBdCB0aGlz
IHRpbWUgdGhlIHNoYWRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUsIHNvIHdlIHJlbW92ZSBpdCBm
cm9tIG91ciBzZXQgYW5kCiAgICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHByb2Nl
c3MgdG8gZGVsZXRlIGl0LgogICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0
b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVy
UHJvZ3JhbXMoKQpAQCAtNjEzLDQwICs1NDksNiBAQCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZwog
ICAgIHJldHVybiBpbWFnZUJhY2tpbmc7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVJbWFnZUJhY2tp
bmcoaW1hZ2VJRCkpOwotfQotCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRl
SW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0
cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKLXsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGlu
YXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihjb29yZGlu
YXRlZFN1cmZhY2UuZ2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhh
bmRsZTsKLSAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJ
RCwgaGFuZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Ci0gICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0KLQogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQogewogICAg
IEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOwpA
QCAtNzA5LDQxICs2MTEsNTEgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRp
bGVSZWN0LCB1cGRhdGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ojp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0
ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVRpbGUo
Q29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjplbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbj4gb3BlcmF0
aW9uKQogewogICAgIGlmIChtX2lzUHVyZ2luZykKICAgICAgICAgcmV0dXJuOwotICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGls
ZUlEKSk7Ci19CiAKLWJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29v
cmRpbmF0ZWRTdXJmYWNlKQotewotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29vcmRp
bmF0ZWRTdXJmYWNlID0gc3RhdGljX2Nhc3Q8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oY29vcmRp
bmF0ZWRTdXJmYWNlLmdldCgpKTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBo
YW5kbGU7Ci0gICAgaWYgKCF3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5k
bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRsYXNJ
RCwgaGFuZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgc3dpdGNoIChvcGVyYXRpb24t
PmdldE9wZXJhdGlvblR5cGUoKSkgeworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJTdGF0ZVR5cGU6CisgICAgICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQ
b3NpdGlvblVwZGF0ZSkgeworICAgICAgICAgICAgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9z
aXRpb246OmNyZWF0ZShtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSkpOworICAgICAg
ICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZUltYWdlQmFja2luZ1R5cGU6CisgICAgICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3Mu
Y29udGFpbnMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UmVtb3ZlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uLmdldCgpKS0+aW1hZ2VCYWNraW5nSUQpKTsK
KyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShzdGF0aWNfY2FzdDxjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24uZ2V0
KCkpLT5pbWFnZUJhY2tpbmdJRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zVHlwZTogeworI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMm
IGFuaW1hdGlvbnMgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRpb24uZ2V0KCkpLT5hbmltYXRpb25zOworICAgICAg
ICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0gYW5pbWF0aW9ucy5n
ZXRBY3RpdmVBbmltYXRpb25zKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0
aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMo
KS5hdChpKS5rZXlmcmFtZXMoKTsKKyAgICAgICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHko
KSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgp
OyArK2opIHsKKyAgICAgICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSogZmls
dGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtleWZy
YW1lcy5hdChpKSk7CisgICAgICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
QW5pbWF0aW9ucyo+KG9wZXJhdGlvbi5nZXQoKSktPmFuaW1hdGlvbnMgPSBhY3RpdmVBbmltYXRp
b25zOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRl
cnNUeXBlOgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgY2hlY2tDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveGllcyhzdGF0aWNfY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24uZ2V0KCkpLT5maWx0ZXJzKTsKKyNlbmRpZgor
ICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGF0bGFzSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6UmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOworICAgIG1fb3BlcmF0aW9ucy5hcHBl
bmQob3BlcmF0aW9uKTsKIH0KIAogV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CkBAIC03NTIsMjQgKzY2NCw2IEBA
IFdlYkNvcmU6OkZsb2F0UmVjdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250
ZW50c1JlY3QoKSBjb25zdAogfQogCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
ZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0g
YW5pbWF0aW9ucy5nZXRBY3RpdmVBbmltYXRpb25zKCk7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJT
KQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25z
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZy
YW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOwotICAgICAg
ICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRl
cikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IGtleWZyYW1lcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0
aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9u
VmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOwotICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQot
I2VuZGlmCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6U2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMp
KTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5
VmVjdG9yKQogewogICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGluZGljYXRlcyB0aGF0
IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQuCkBAIC04MTIsNyAr
NzA2LDcgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Z3JhcGhpY3NMYXllckZhY3RvcnkoKQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkpOworICAgIGVucXVldWVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmlt
YXRpb25GcmFtZTo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCkBAIC04OTUsNyArNzg5LDcgQEAgdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVy
PENvb3JkaW5hdGUKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91
bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiB7Ci0gICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QmFja2dyb3Vu
ZENvbG9yKGNvbG9yKSk7CisgICAgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24o
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpjcmVhdGUo
Y29sb3IpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDcyOTdlZWQ4
MWUwNWEyZWUwZjAwNWVlYTNkZjgxODg1ZmVjM2YyYjUuLmI5OTE1YTVkMGUwOWIzZGY0ZWJiY2Iz
OWNjYTdmMmM2Yzk0NWIxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdl
QmFja2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KQEAgLTQ2LDggKzQ3LDYgQEAg
Y2xhc3MgV2ViUGFnZTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGlj
IExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IKLSAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpVcGRhdGVBdGxhc0NsaWVudAogICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJGYWN0b3J5CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgICwgV2ViQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CkBAIC03OSw0MCArNzgsMTQgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFs
c2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVk
ZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNo
aW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5
ZXJDaGFuZ2VzOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRh
dGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25z
dCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJs
ZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVD
b29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5
ZXJDaGlsZHJlbihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5p
bWF0aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6
OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZh
cyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQpIE9WRVJSSURFOwotI2VuZGlmCi0gICAgdmly
dHVhbCB2b2lkIHNldExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RCwgaW50KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExh
eWVycygpOwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpD
b29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50
UG9pbnQmKTsKLQotICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Ci0gICAgdmlydHVhbCBib29sIGNy
ZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9WRVJSSURFOwog
I2VuZGlmCkBAIC0xMzEsMTQgKzEwNCwxNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGZsb2F0IHBh
Z2VTY2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgLy8gQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2lu
ZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklE
RTsKLQogICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwogCisgICAg
Ly8gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCBib29sIGlzRmx1
c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdM
YXllckNoYW5nZXM7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29u
dGVudHNSZWN0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChX
ZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJf
dCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oUGFzc1JlZlB0cjxXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24+KSBPVkVSUklERTsKKwog
ICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCopIE9WRVJSSURFOwogCkBAIC0xODEsNiArMTU3LDggQEAgcHJpdmF0ZToKICAg
ICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBw
YWdlIG92ZXJsYXkuCiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92
ZXJsYXlMYXllcjsKIAorICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25z
IG1fb3BlcmF0aW9uczsKKwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQ+IG1fbGF5ZXJzVG9DcmVhdGU7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKQEAgLTIwNCw3ICsxODIsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CiAKICAgICBM
YXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3lu
Y0ZyYW1lOwogICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7CiAg
ICAgV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1c2hU
aW1lcjsKICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fcmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>