<?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>237755</bug_id>
          
          <creation_ts>2022-03-10 21:36:42 -0800</creation_ts>
          <short_desc>[WebGPU] Allow for scheduling asynchronous work</short_desc>
          <delta_ts>2022-03-16 05:40:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>237583</blocked>
    
    <blocked>237852</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>djg</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1850366</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-10 21:36:42 -0800</bug_when>
    <thetext>[WebGPU] Allow for scheduling asynchronous work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850369</commentid>
    <comment_count>1</comment_count>
      <attachid>454444</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-10 21:52:27 -0800</bug_when>
    <thetext>Created attachment 454444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850790</commentid>
    <comment_count>2</comment_count>
      <attachid>454444</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-13 22:54:25 -0700</bug_when>
    <thetext>Comment on attachment 454444
Patch

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

&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.cpp:52
&gt; +            scheduleWorkFunction(WTFMove(workItem));

This is a UAF. scheduleWorkFunction refers to the reference, not the function itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850799</commentid>
    <comment_count>3</comment_count>
      <attachid>454566</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 00:59:44 -0700</bug_when>
    <thetext>Created attachment 454566
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850852</commentid>
    <comment_count>4</comment_count>
      <attachid>454566</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-14 06:44:09 -0700</bug_when>
    <thetext>Comment on attachment 454566
Patch

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

Sorry for not understanding the system.. 

Initially I don&apos;t understand the distinction:
WGPUWorkItem  -- I see this as a task coming from wgpu and webkit executing it.

WorkItem -- I see this as a task coming from WebKit going to wgpu, which initially doesn&apos;t make sense. Why would we ask wgpu to invoke this item, why wouldn&apos;t we just invoke it? Is it then coming back as WGPUWorkItem for ordering reasons?

&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.cpp:50
&gt; +    ScheduleWorkFunction localScheduleWorkFunction = WTFMove(scheduleWorkFunction);

scheduleWorkFunction is a block-equivalent..

&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.cpp:57
&gt; +        ^(WGPUWorkItem workItem)

this is a block..

&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.cpp:59
&gt; +            localScheduleWorkFunction(makeBlockPtr(workItem));

makeBlockPtr makes a block..

workItem is a block..

Maybe there&apos;s now some nested blocks that don&apos;t need to be blocks?

&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.h:45
&gt; +    // and anything captured by a block needs to be copyable.

I think this is now somehow mixed, or I&apos;m not undertstanding everything.
We capture WTF::Functions as blocks via makeBlockPtr in WorkQueueCocoa.mm.

&gt; Source/WebGPU/WebGPU/Instance.h:53
&gt; +    using WorkItem = std::function&lt;void(void)&gt;;

This appears to be somehow redundant?

If the work is sent by WGPU as WGPUWorkItem, then WebKit should just be able to apply it via WGPUWorkItem and no need to wrap it redundantly in std::function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850937</commentid>
    <comment_count>5</comment_count>
      <attachid>454566</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 10:48:51 -0700</bug_when>
    <thetext>Comment on attachment 454566
Patch

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

&gt;&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.cpp:59
&gt;&gt; +            localScheduleWorkFunction(makeBlockPtr(workItem));
&gt; 
&gt; makeBlockPtr makes a block..
&gt; 
&gt; workItem is a block..
&gt; 
&gt; Maybe there&apos;s now some nested blocks that don&apos;t need to be blocks?

Yeah, let me see if I can get rid of some.

&gt;&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.h:45
&gt;&gt; +    // and anything captured by a block needs to be copyable.
&gt; 
&gt; I think this is now somehow mixed, or I&apos;m not undertstanding everything.
&gt; We capture WTF::Functions as blocks via makeBlockPtr in WorkQueueCocoa.mm.

Good point! Let me investigate more.

&gt;&gt; Source/WebGPU/WebGPU/Instance.h:53
&gt;&gt; +    using WorkItem = std::function&lt;void(void)&gt;;
&gt; 
&gt; This appears to be somehow redundant?
&gt; 
&gt; If the work is sent by WGPU as WGPUWorkItem, then WebKit should just be able to apply it via WGPUWorkItem and no need to wrap it redundantly in std::function?

These exists for layering. The WGPU types shouldn&apos;t exist outside WebCore/PAL/pal/graphics/WebGPU/Impl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851020</commentid>
    <comment_count>6</comment_count>
      <attachid>454624</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 14:57:37 -0700</bug_when>
    <thetext>Created attachment 454624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851023</commentid>
    <comment_count>7</comment_count>
      <attachid>454566</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 15:01:21 -0700</bug_when>
    <thetext>Comment on attachment 454566
Patch

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

&gt;&gt;&gt; Source/WebGPU/WebGPU/Instance.h:53
&gt;&gt;&gt; +    using WorkItem = std::function&lt;void(void)&gt;;
&gt;&gt; 
&gt;&gt; This appears to be somehow redundant?
&gt;&gt; 
&gt;&gt; If the work is sent by WGPU as WGPUWorkItem, then WebKit should just be able to apply it via WGPUWorkItem and no need to wrap it redundantly in std::function?
&gt; 
&gt; These exists for layering. The WGPU types shouldn&apos;t exist outside WebCore/PAL/pal/graphics/WebGPU/Impl.

Oh, whoops, I was confused when I made this comment ☝️. The reason is because I prefer using C++ lambdas wherever possible because they are more expressive than C blocks (e.g. lambdas can be moved from, etc.). So, internally to the framework, I&apos;m using lambdas, and they get converted to block pointers at framework boundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851208</commentid>
    <comment_count>8</comment_count>
      <attachid>454624</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-15 02:32:58 -0700</bug_when>
    <thetext>Comment on attachment 454624
Patch

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

&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.cpp:48
&gt; +        scheduleWorkFunction(makeBlockPtr(workItem));

WGPUWorkItem is a block, so it shouldn&apos;t need to be wrapped in a block?
Also, the call could move the `workItem`..

&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.h:44
&gt; +    using ScheduleWorkFunction = Function&lt;void(WorkItem&amp;&amp;)&gt;;

&gt; The reason is because I prefer using C++ lambdas wherever possible because they are more expressive than C blocks (e.g. lambdas can be moved from, etc.). So, internally to the framework, I&apos;m using lambdas, and they get converted to block pointers at framework boundaries.

The ScheduleWorkFunction will not move anything from WorkItem (which wrapsWGPUWorkItem) . It won&apos;t move anything out of WGPUWorkItem either, as that is just a block pointer (opaque function with context.) WorkItem cannot be used in any other way than called.

So you are redundantly wrapping the WGPUWorkItem call inside a redundant call.

I think it&apos;s ok if your requirements are:
1) Not expose that blocks exist in this layer of the SW stack (sw layer == WebKit WebGPU client)
2) Not expose WGPU* types  in this layer of the SW stack

However, since both of these are given forever in WebKit, having the extra indirection forever sounds silly.
I&apos;d imagine WGPU* types are like uint32_t types: they&apos;re the fundamental types this particular implementation is being built on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851246</commentid>
    <comment_count>9</comment_count>
      <attachid>454624</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-15 05:56:29 -0700</bug_when>
    <thetext>Comment on attachment 454624
Patch

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

&gt; Source/WebGPU/WebGPU/Instance.h:54
&gt; +    void scheduleWork(WorkItem&amp;&amp;);

In fact, if you keep this as a wrapped thingy, then your &quot;WorkItem&quot; could be a CompletionHandler.
E.g. 
Function == &quot;I give this to you and you may call this once or more times&quot;
CompletionHandler = &quot;I give this to you and you may call this once&quot;

This will come up in later patches, where you hold list of items.

&gt; Source/WebGPU/WebGPU/Instance.mm:89
&gt; +            workItem();

Example iteration related to the CompletionHandler

if you have 700 items in the list, it may be desired for the very nit-picker client that the closures held by each of the functions are discarded as soon as they&apos;re not needed, e.g. immediately after called.

CompletionHandler expresses this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851468</commentid>
    <comment_count>10</comment_count>
      <attachid>454624</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 13:31:53 -0700</bug_when>
    <thetext>Comment on attachment 454624
Patch

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

&gt;&gt; Source/WebGPU/WebGPU/Instance.h:54
&gt;&gt; +    void scheduleWork(WorkItem&amp;&amp;);
&gt; 
&gt; In fact, if you keep this as a wrapped thingy, then your &quot;WorkItem&quot; could be a CompletionHandler.
&gt; E.g. 
&gt; Function == &quot;I give this to you and you may call this once or more times&quot;
&gt; CompletionHandler = &quot;I give this to you and you may call this once&quot;
&gt; 
&gt; This will come up in later patches, where you hold list of items.

Yes, CompletionHandler is a great idea. Asynchronous functions will take a CompletionHandler, whereas functions like Device::setUncapturedErrorCallback() will take a Function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851469</commentid>
    <comment_count>11</comment_count>
      <attachid>454624</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 13:34:47 -0700</bug_when>
    <thetext>Comment on attachment 454624
Patch

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

&gt;&gt;&gt; Source/WebGPU/WebGPU/Instance.h:54
&gt;&gt;&gt; +    void scheduleWork(WorkItem&amp;&amp;);
&gt;&gt; 
&gt;&gt; In fact, if you keep this as a wrapped thingy, then your &quot;WorkItem&quot; could be a CompletionHandler.
&gt;&gt; E.g. 
&gt;&gt; Function == &quot;I give this to you and you may call this once or more times&quot;
&gt;&gt; CompletionHandler = &quot;I give this to you and you may call this once&quot;
&gt;&gt; 
&gt;&gt; This will come up in later patches, where you hold list of items.
&gt; 
&gt; Yes, CompletionHandler is a great idea. Asynchronous functions will take a CompletionHandler, whereas functions like Device::setUncapturedErrorCallback() will take a Function.

I started migrating to CompletionHandler, but it&apos;s ending up being bigger than the original patch, so I&apos;ll separate this migration to a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851475</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 13:38:20 -0700</bug_when>
    <thetext>(In reply to Kimmo Kinnunen from comment #8)
&gt; The ScheduleWorkFunction will not move anything from WorkItem (which
&gt; wrapsWGPUWorkItem) . It won&apos;t move anything out of WGPUWorkItem either, as
&gt; that is just a block pointer (opaque function with context.) WorkItem cannot
&gt; be used in any other way than called.
&gt; 
&gt; So you are redundantly wrapping the WGPUWorkItem call inside a redundant
&gt; call.
&gt; 
&gt; I think it&apos;s ok if your requirements are:
&gt; 1) Not expose that blocks exist in this layer of the SW stack (sw layer ==
&gt; WebKit WebGPU client)
&gt; 2) Not expose WGPU* types  in this layer of the SW stack
&gt; 
&gt; However, since both of these are given forever in WebKit, having the extra
&gt; indirection forever sounds silly.
&gt; I&apos;d imagine WGPU* types are like uint32_t types: they&apos;re the fundamental
&gt; types this particular implementation is being built on.

Yeah, I think this is kind of important for layering - I think both your 1) and 2) are true. I think I disagree about the comparison with uint32_t - that is clearly shared among many libraries and layers, whereas WGPU is just an implementation detail.

And, since the source comes from a WTF::BlockPtr, copying to a second WTF::BlockPtr is free - it doesn&apos;t copy the context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851477</commentid>
    <comment_count>13</comment_count>
      <attachid>454624</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 13:39:16 -0700</bug_when>
    <thetext>Comment on attachment 454624
Patch

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

&gt;&gt; Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUImpl.cpp:48
&gt;&gt; +        scheduleWorkFunction(makeBlockPtr(workItem));
&gt; 
&gt; WGPUWorkItem is a block, so it shouldn&apos;t need to be wrapped in a block?
&gt; Also, the call could move the `workItem`..

Can you describe what you mean by &quot;it shouldn&apos;t need to be wrapped in a block?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851479</commentid>
    <comment_count>14</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 13:40:28 -0700</bug_when>
    <thetext>I&apos;m going to land this making the adjustments that I can, make a follow-up patch about CompletionHandler, and then make another follow-up patch according to Kimmo&apos;s yet-to-be-made comments when he makes them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851496</commentid>
    <comment_count>15</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 14:22:59 -0700</bug_when>
    <thetext>Committed r291313 (248452@trunk): &lt;https://commits.webkit.org/248452@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851497</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-15 14:23:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/90330396&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851498</commentid>
    <comment_count>17</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 14:24:02 -0700</bug_when>
    <thetext>Leaving bug open because there&apos;s more discussion to be had.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851541</commentid>
    <comment_count>18</comment_count>
      <attachid>454624</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 15:35:40 -0700</bug_when>
    <thetext>Comment on attachment 454624
Patch

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

&gt;&gt;&gt;&gt; Source/WebGPU/WebGPU/Instance.h:54
&gt;&gt;&gt;&gt; +    void scheduleWork(WorkItem&amp;&amp;);
&gt;&gt;&gt; 
&gt;&gt;&gt; In fact, if you keep this as a wrapped thingy, then your &quot;WorkItem&quot; could be a CompletionHandler.
&gt;&gt;&gt; E.g. 
&gt;&gt;&gt; Function == &quot;I give this to you and you may call this once or more times&quot;
&gt;&gt;&gt; CompletionHandler = &quot;I give this to you and you may call this once&quot;
&gt;&gt;&gt; 
&gt;&gt;&gt; This will come up in later patches, where you hold list of items.
&gt;&gt; 
&gt;&gt; Yes, CompletionHandler is a great idea. Asynchronous functions will take a CompletionHandler, whereas functions like Device::setUncapturedErrorCallback() will take a Function.
&gt; 
&gt; I started migrating to CompletionHandler, but it&apos;s ending up being bigger than the original patch, so I&apos;ll separate this migration to a follow-up patch.

https://bugs.webkit.org/show_bug.cgi?id=237925 [WebGPU] Migrate from WTF::Function to WTF::CompletionHandler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851749</commentid>
    <comment_count>19</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-16 05:40:44 -0700</bug_when>
    <thetext>workItem needs makeBlockPtr</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454444</attachid>
            <date>2022-03-10 21:52:27 -0800</date>
            <delta_ts>2022-03-14 00:59:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237755-20220310215226.patch</filename>
            <type>text/plain</type>
            <size>14347</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCBmYzg0NjJj
NWU3ZWY4ZGI4YWMzYmMyOTcyYmZhZTQwZDBmMTZiYWQyLi42MGY0ZmM2M2ViOGU4Y2E0MmI4OTQ1
ZWU1NDY1OWQ1ZDQyNDVkYWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAor
MjAyMi0wMy0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisg
ICAgICAgIFtXZWJHUFVdIEFsbG93IGZvciBzY2hlZHVsaW5nIGFzeW5jaHJvbm91cyB3b3JrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3NTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHUFUgZG9l
c24ndCBrbm93IGhvdyB0byBzY2hlZHVsZSBhc3luY2hyb25vdXMgd29yaywgc28gdGhhdCB3aWxs
IGhhdmUgdG8gYmUgaGFuZGxlZAorICAgICAgICBieSBkZXBlbmRlbmN5IGluamVjdGlvbiBmcm9t
IHRoZSBjYWxsZXIuIFRoZSB3YXkgaXQgd29ya3MgaXMgSW5zdGFuY2UgY3JlYXRpb24gdGFrZXMK
KyAgICAgICAgYSBibG9jaywgd2hpY2ggaXMgcmV0YWluZWQuIFdoZW5ldmVyIGFzeW5jaHJvbm91
cyB3b3JrIG5lZWRzIHRvIGJlIHNjaGVkdWxlZCBvbiB0aGUKKyAgICAgICAgcmVsZXZhbnQgdGhy
ZWFkLCB0aGlzIGJsb2NrIGlzIGNhbGxlZCwgYW5kIGlzIHBhc3NlZCBhbm90aGVyIGJsb2NrIGZv
ciB0aGUgd29yayB0byBiZQorICAgICAgICBwZXJmb3JtZWQuCisKKyAgICAgICAgVGhlIEFQSSBj
b250cmFjdCBpczogV2ViR1BVLmZyYW1ld29yayBkb2Vzbid0IHVzZSBhbnkgbG9ja3MgaW50ZXJu
YWxseSwgc28gY2FsbGVycyBtdXN0CisgICAgICAgIGNhbGwgaXRzIGZ1bmN0aW9ucyBpbiBhIG5v
bi1yYWNleSB3YXkuIFRoaXMgc2NoZWR1bGUgZnVuY3Rpb24gd2lsbCBleGVjdXRlIG9uIGEKKyAg
ICAgICAgYmFja2dyb3VuZCB0aHJlYWQsIGFuZCBpdCBtdXN0IHNjaGVkdWxlIHRoZSBibG9jayBp
dCdzIHBhc3NlZCB0byBiZSBydW4gaW4gYSBub24tcmFjZXkKKyAgICAgICAgd2F5IHdpdGggcmVn
YXJkcyB0byBhbGwgdGhlIG90aGVyIFdlYkdQVSBjYWxscy4gVGhlIHNjaGVkdWxlIGZ1bmN0aW9u
IGNhbiBiZSBOVUxMLCBpbgorICAgICAgICB3aGljaCBjYXNlIHRoZSBhc3luY2hyb25vdXMgdGFz
a3Mgd2lsbCBqdXN0IGJlIGludGVybmFsbHkgcXVldWVkIHVwIGluc2lkZSBXZWJHUFUsIGFuZAor
ICAgICAgICB0aGVuIHVzZXJzIHdpbGwgaGF2ZSB0byBjYWxsIHdncHVJbnN0YW5jZVByb2Nlc3NF
dmVudHMoKSBwZXJpb2RpY2FsbHkgdG8gc3luY2hyb25vdXNseQorICAgICAgICBjYWxsIHRoZSBx
dWV1ZWQgY2FsbGJhY2tzLgorCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dl
YkdQVUltcGwuY3BwOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkdQVUltcGw6OmNyZWF0ZSk6Cisg
ICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuaDoKKwogMjAyMi0w
My0wOCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIFNwbGl0
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBh
cnNlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViR1BV
L0NoYW5nZUxvZwppbmRleCAyN2EyYTdlOTc3NjNhMzAxMjk1ODc5ZDg2YzE3MjUzZDRkYzNjYTQ4
Li45ZTA5NWI0YmNlYjQ1ZWQ4NGNjYzE1YTU3ZWE0OTkzN2RkY2M5ODdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViR1BVL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDIyLTAzLTEwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gQWxsb3cgZm9yIHNjaGVkdWxpbmcgYXN5bmNo
cm9ub3VzIHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNzc1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViR1BVL0luc3RhbmNlLmg6CisgICAgICAgIChXZWJHUFU6Okluc3RhbmNlOjpzY2hl
ZHVsZVdvcmspOgorICAgICAgICAoV2ViR1BVOjpJbnN0YW5jZTo6cnVuTG9vcCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogV2ViR1BVL0luc3RhbmNlLm1tOgorICAgICAgICAoV2ViR1BVOjpJ
bnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkdQVTo6SW5zdGFuY2U6Okluc3RhbmNlKToK
KyAgICAgICAgKFdlYkdQVTo6SW5zdGFuY2U6OmRlZmF1bHRTY2hlZHVsZVdvcmspOgorICAgICAg
ICAoV2ViR1BVOjpJbnN0YW5jZTo6cHJvY2Vzc0V2ZW50cyk6CisgICAgICAgICogV2ViR1BVL1dl
YkdQVUV4dC5oOgorCiAyMDIyLTAzLTEwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUu
Y29tPgogCiAgICAgICAgIENhdGFseXN0IEphdmFTY3JpcHRDb3JlLCBXZWJDb3JlLCBXZWJLaXRM
ZWdhY3ksIGFuZCBXZWJLaXQgc2hvdWxkbid0IGJlIGNvcGllZCB0byB0aGUgU2Vjb25kYXJ5IFBh
dGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggNTg4YmVmYjcyYTAyMWU5YzE2ZDdkNjA3ZTliMzExZmZkYzM5OWQyZS4u
MTI1OTJhODdiYThlNGVkMjdhNDdiOTU1ZDFkOTkyZTRkMDJkZTExYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMi0wMy0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBw
bGUuY29tPgorCisgICAgICAgIFtXZWJHUFVdIEFsbG93IGZvciBzY2hlZHVsaW5nIGFzeW5jaHJv
bm91cyB3b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzc3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBIb29rIHVwIHRoZSBzY2hlZHVsaW5nIHdvcmsgZnVuY3Rpb24gdG8gY2FsbE9uTWFpblJ1bkxv
b3AoKS93b3JrUXVldWUoKS5kaXNwYXRjaCgpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9XZWJHUFUvUmVtb3RlR1BVLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR1BVOjp3
b3JrUXVldWVJbml0aWFsaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6
Y3JlYXRlR1BVRm9yV2ViR1BVIGNvbnN0KToKKwogMjAyMi0wMy0xMCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBuYW1pbmcgaW4gTmV0d29ya1Byb2Nlc3NQ
cm94eTo6cmVnaXN0ZXJSZW1vdGVXb3JrZXJDbGllbnRQcm9jZXNzKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwppbmRleCA5YTRlZmE3NDAyNDVmODkxZGNjZWRkNDAwNGFjMGQ2NzVmMzMwMjE3
Li41YmExMjJmMzRhNmQzMTczYTAwYWJlOTg3N2ZmNmY1ZWQ2ZDBkYzNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDMtMTAgIE15bGVzIEMuIE1h
eGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBBbGxvdyBm
b3Igc2NoZWR1bGluZyBhc3luY2hyb25vdXMgd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSG9vayB1cCB0aGUgc2NoZWR1bGluZyB3b3JrIGZ1bmN0
aW9uIHRvIGNhbGxPbk1haW5SdW5Mb29wKCkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZUdQVUZv
cldlYkdQVSBjb25zdCk6CisKIDIwMjItMDMtMTAgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBh
cHBsZS5jb20+CiAKICAgICAgICAgQ2F0YWx5c3QgSmF2YVNjcmlwdENvcmUsIFdlYkNvcmUsIFdl
YktpdExlZ2FjeSwgYW5kIFdlYktpdCBzaG91bGRuJ3QgYmUgY29waWVkIHRvIHRoZSBTZWNvbmRh
cnkgUGF0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJH
UFUvSW1wbC9XZWJHUFVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5jcHAKaW5kZXggYmI4ZTA0ZTNhYzU4MTY3OWQ3MGNkNTY2
ZWY1YjU0MTI1MmM0ZTBmNi4uNDJiNzhjZjE2MTBiNDc3NjBjYTQ4OTEwNzQ1ZWViN2IyNmI3ZmZj
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1w
bC9XZWJHUFVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUltcGwuY3BwCkBAIC00MCw5ICs0MCwxOSBAQCBXVEZfV0VBS19MSU5L
X0ZPUkNFX0lNUE9SVCh3Z3B1Q3JlYXRlSW5zdGFuY2UpOwogCiBuYW1lc3BhY2UgUEFMOjpXZWJH
UFUgewogCi1SZWZQdHI8R1BVSW1wbD4gR1BVSW1wbDo6Y3JlYXRlKCkKK1JlZlB0cjxHUFVJbXBs
PiBHUFVJbXBsOjpjcmVhdGUoU2NoZWR1bGVXb3JrRnVuY3Rpb24mJiBzY2hlZHVsZVdvcmtGdW5j
dGlvbikKIHsKLSAgICBXR1BVSW5zdGFuY2VEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSB7IG51bGxw
dHIgfTsKKyAgICBXR1BVSW5zdGFuY2VDb2NvYURlc2NyaXB0b3IgY29jb2FEZXNjcmlwdG9yIHsK
KyAgICAgICAgeworICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PFdHUFVTVHlwZT4oV0dQVVNUeXBlRXh0ZW5kZWRfSW5zdGFuY2VDb2NvYURlc2NyaXB0b3IpLAor
ICAgICAgICB9LAorICAgICAgICBeKFdHUFVXb3JrSXRlbSB3b3JrSXRlbSkKKyAgICAgICAgewor
ICAgICAgICAgICAgc2NoZWR1bGVXb3JrRnVuY3Rpb24oV1RGTW92ZSh3b3JrSXRlbSkpOworICAg
ICAgICB9LAorICAgIH07CisgICAgV0dQVUluc3RhbmNlRGVzY3JpcHRvciBkZXNjcmlwdG9yID0g
eyAmY29jb2FEZXNjcmlwdG9yLmNoYWluIH07CiAgICAgaWYgKCEmd2dwdUNyZWF0ZUluc3RhbmNl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIGluc3RhbmNlID0gd2dwdUNyZWF0
ZUluc3RhbmNlKCZkZXNjcmlwdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmgKaW5kZXggZDU1MjNlY2NiZTM0
YzA4NjJjZWQxNWE2ZjBjNDAxZDhiODE3NTUzYS4uOTQyYzEyOGIwZWRmOTExMTk0MjJjNDA0ZDc2
NmRiODU2MTE1MWViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGlj
cy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9n
cmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJXZWJHUFUuaCIKICNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CiAjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAKIG5hbWVzcGFjZSBQQUw6Oldl
YkdQVSB7CiAKQEAgLTM4LDcgKzM5LDkgQEAgY2xhc3MgQ29udmVydFRvQmFja2luZ0NvbnRleHQ7
CiBjbGFzcyBHUFVJbXBsIGZpbmFsIDogcHVibGljIEdQVSB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUEFMX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEdQVUltcGw+
IGNyZWF0ZSgpOworICAgIHVzaW5nIFdvcmtJdGVtID0gV1RGOjpGdW5jdGlvbjx2b2lkKHZvaWQp
PjsKKyAgICB1c2luZyBTY2hlZHVsZVdvcmtGdW5jdGlvbiA9IFdURjo6RnVuY3Rpb248dm9pZChX
b3JrSXRlbSYmKT47CisgICAgUEFMX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEdQVUltcGw+IGNyZWF0
ZShTY2hlZHVsZVdvcmtGdW5jdGlvbiYmKTsKIAogICAgIHN0YXRpYyBSZWY8R1BVSW1wbD4gY3Jl
YXRlKFdHUFVJbnN0YW5jZSBpbnN0YW5jZSwgQ29udmVydFRvQmFja2luZ0NvbnRleHQmIGNvbnZl
cnRUb0JhY2tpbmdDb250ZXh0KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2Vi
R1BVL0luc3RhbmNlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5oCmluZGV4IDVm
ODRhZGIzOWQ4Y2Q2NmFhOWI4ZmM1ZDBiMjgwOWJhNjIzYzk3ODcuLjI0MzdmZDdmZDE0MThlYWUz
ZWY5MmZkN2E3NDk2YzBkNjM4M2U4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L0luc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvSW5zdGFuY2UuaApAQCAtMjUs
NyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisjaW1wb3J0IDx3dGYvRGVxdWUuaD4KICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+
CiAjaW1wb3J0IDx3dGYvRnVuY3Rpb24uaD4KICNpbXBvcnQgPHd0Zi9SZWYuaD4KQEAgLTQ4LDEy
ICs0OCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcm9jZXNzRXZlbnRzKCk7CiAgICAgdm9pZCBy
ZXF1ZXN0QWRhcHRlcihjb25zdCBXR1BVUmVxdWVzdEFkYXB0ZXJPcHRpb25zJiwgV1RGOjpGdW5j
dGlvbjx2b2lkKFdHUFVSZXF1ZXN0QWRhcHRlclN0YXR1cywgUmVmUHRyPEFkYXB0ZXI+JiYsIGNv
bnN0IGNoYXIqKT4mJiBjYWxsYmFjayk7CiAKLSAgICBOU1J1bkxvb3AgKnJ1bkxvb3AoKSBjb25z
dCB7IHJldHVybiBtX3J1bkxvb3A7IH0KKyAgICB2b2lkIHNjaGVkdWxlV29yayhXR1BVV29ya0l0
ZW0mJiB3b3JrSXRlbSkgeyBtX3NjaGVkdWxlV29ya0Jsb2NrKFdURk1vdmUod29ya0l0ZW0pKTsg
fQogCiBwcml2YXRlOgotICAgIEluc3RhbmNlKE5TUnVuTG9vcCAqKTsKKyAgICBJbnN0YW5jZShX
R1BVU2NoZWR1bGVXb3JrQmxvY2spOwogCi0gICAgTlNSdW5Mb29wICptX3J1bkxvb3A7CisgICAg
dm9pZCBkZWZhdWx0U2NoZWR1bGVXb3JrKFdHUFVXb3JrSXRlbSYmKTsKKworICAgIERlcXVlPFdH
UFVXb3JrSXRlbT4gbV9wZW5kaW5nV29yazsKKyAgICBXR1BVU2NoZWR1bGVXb3JrQmxvY2sgbV9z
Y2hlZHVsZVdvcmtCbG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkdQVQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvSW5zdGFuY2UubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9JbnN0YW5jZS5tbQppbmRleCAyNGEwNTcxZGQyMzhkMWYzMjhkNjJhZmJiM2EyYWZmMjdkZDZh
YzU4Li5lMTIwMjVmYzkwYWFjMDgyYjg0M2Y2MDA3M2U2NTFhODBkMDE1N2RkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9JbnN0YW5jZS5tbQpAQCAtMzMsMjIgKzMzLDI0IEBACiAKIG5hbWVzcGFjZSBXZWJHUFUg
ewogCi1zdGF0aWMgY29uc3RleHByIE5TU3RyaW5nICpydW5Mb29wTW9kZSA9IEAia0NGUnVuTG9v
cFdlYkdQVU1vZGUiOwotCiBSZWZQdHI8SW5zdGFuY2U+IEluc3RhbmNlOjpjcmVhdGUoY29uc3Qg
V0dQVUluc3RhbmNlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAgICBpZiAoZGVzY3JpcHRv
ci5uZXh0SW5DaGFpbikKKyAgICBpZiAoIWRlc2NyaXB0b3IubmV4dEluQ2hhaW4pCisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEluc3RhbmNlKG51bGxwdHIpKTsKKworICAgIGlmIChkZXNj
cmlwdG9yLm5leHRJbkNoYWluLT5zVHlwZSAhPSBzdGF0aWNfY2FzdDxXR1BVU1R5cGU+KFdHUFVT
VHlwZUV4dGVuZGVkX0luc3RhbmNlQ29jb2FEZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBOU1J1bkxvb3AgKnJ1bkxvb3AgPSBOU1J1bkxvb3AuY3VycmVudFJ1bkxv
b3A7Ci0gICAgaWYgKCFydW5Mb29wKQorICAgIGNvbnN0IFdHUFVJbnN0YW5jZUNvY29hRGVzY3Jp
cHRvciYgY29jb2FEZXNjcmlwdG9yID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBXR1BVSW5zdGFu
Y2VDb2NvYURlc2NyaXB0b3ImPigqZGVzY3JpcHRvci5uZXh0SW5DaGFpbik7CisKKyAgICBpZiAo
Y29jb2FEZXNjcmlwdG9yLmNoYWluLm5leHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zdGFuY2UocnVuTG9vcCkpOworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEluc3RhbmNlKGNvY29hRGVzY3JpcHRvci5zY2hlZHVsZVdvcmtCbG9jaykp
OwogfQogCi1JbnN0YW5jZTo6SW5zdGFuY2UoTlNSdW5Mb29wICpydW5Mb29wKQotICAgIDogbV9y
dW5Mb29wKHJ1bkxvb3ApCitJbnN0YW5jZTo6SW5zdGFuY2UoV0dQVVNjaGVkdWxlV29ya0Jsb2Nr
IHNjaGVkdWxlV29ya0Jsb2NrKQorICAgIDogbV9zY2hlZHVsZVdvcmtCbG9jayhzY2hlZHVsZVdv
cmtCbG9jayA/IFdURk1vdmUoc2NoZWR1bGVXb3JrQmxvY2spIDogXihXR1BVV29ya0l0ZW0gd29y
a0l0ZW0pIHsgZGVmYXVsdFNjaGVkdWxlV29yayhXVEZNb3ZlKHdvcmtJdGVtKSk7IH0pCiB7CiB9
CiAKQEAgLTYxLDE3ICs2MywxNSBAQCBSZWZQdHI8U3VyZmFjZT4gSW5zdGFuY2U6OmNyZWF0ZVN1
cmZhY2UoY29uc3QgV0dQVVN1cmZhY2VEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogICAgIHJldHVy
biBTdXJmYWNlOjpjcmVhdGUoKTsKIH0KIAordm9pZCBJbnN0YW5jZTo6ZGVmYXVsdFNjaGVkdWxl
V29yayhXR1BVV29ya0l0ZW0mJiB3b3JrSXRlbSkKK3sKKyAgICBtX3BlbmRpbmdXb3JrLmFwcGVu
ZChXVEZNb3ZlKHdvcmtJdGVtKSk7Cit9CisKIHZvaWQgSW5zdGFuY2U6OnByb2Nlc3NFdmVudHMo
KQogewotICAgIC8vIE5TUnVuTG9vcHMgYXJlIG5vdCB0aHJlYWQtc2FmZSwgYnV0IHRoZW4gYWdh
aW4gbmVpdGhlciBpcyBXZWJHUFUuCi0gICAgLy8gSWYgdGhlIGNhbGxlciBkb2VzIGFsbCB0aGUg
bmVjZXNzYXJ5IHN5bmNocm9uaXphdGlvbiB0aGVtc2VsdmVzLCB0aGlzIHdpbGwgYmUgc2FmZS4K
LSAgICAvLyBJbiB0aGF0IHNpdHVhdGlvbiwgd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UncmUgdXNp
bmcgdGhlIHJ1biBsb29wIHdlIHdlcmUgY3JlYXRlZCBvbiwKLSAgICAvLyBzbyB0YXNrcyB0aGF0
IHdlcmUgcXVldWVkIHVwIG9uIG9uZSB0aHJlYWQgYWN0dWFsbHkgZ2V0IGV4ZWN1dGVkIGhlcmUs
IGV2ZW4gaWYKLSAgICAvLyB0aGlzIGlzIGV4ZWN1dGluZyBvbiBhIGRpZmZlcmVudCB0aHJlYWQu
Ci0gICAgQk9PTCByZXN1bHQ7Ci0gICAgZG8gewotICAgICAgICByZXN1bHQgPSBbbV9ydW5Mb29w
IHJ1bk1vZGU6cnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRhdGVdXTsKLSAgICB9IHdo
aWxlIChyZXN1bHQpOworICAgIHdoaWxlICghbV9wZW5kaW5nV29yay5pc0VtcHR5KCkpCisgICAg
ICAgIG1fcGVuZGluZ1dvcmsudGFrZUZpcnN0KCkoKTsKIH0KIAogc3RhdGljIE5TQXJyYXk8aWQ8
TVRMRGV2aWNlPj4gKnNvcnRlZERldmljZXMoTlNBcnJheTxpZDxNVExEZXZpY2U+PiAqZGV2aWNl
cywgV0dQVVBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9XZWJHUFVFeHQuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1dlYkdQ
VUV4dC5oCmluZGV4IDNkYTQwMDMyMjY1YTE4OGI4Y2UxNmEzOTAxMDM0NzM4ZWQ1OWRhMTEuLmNm
YmRiNGEyZDI0NGUzOWM3ZDE0OTQ5NGRiMDViNDk3NzY4NzEwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1dlYkdQVUV4dC5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1dl
YkdQVUV4dC5oCkBAIC0zOSwxMyArMzksMjcgQEAgdHlwZWRlZiB2b2lkICheV0dQVUVycm9yQmxv
Y2tDYWxsYmFjaykoV0dQVUVycm9yVHlwZSB0eXBlLCBjaGFyIGNvbnN0ICogbWVzc2FnZSkKIHR5
cGVkZWYgdm9pZCAoXldHUFVRdWV1ZVdvcmtEb25lQmxvY2tDYWxsYmFjaykoV0dQVVF1ZXVlV29y
a0RvbmVTdGF0dXMgc3RhdHVzKTsKIHR5cGVkZWYgdm9pZCAoXldHUFVSZXF1ZXN0QWRhcHRlckJs
b2NrQ2FsbGJhY2spKFdHUFVSZXF1ZXN0QWRhcHRlclN0YXR1cyBzdGF0dXMsIFdHUFVBZGFwdGVy
IGFkYXB0ZXIsIGNoYXIgY29uc3QgKiBtZXNzYWdlKTsKIHR5cGVkZWYgdm9pZCAoXldHUFVSZXF1
ZXN0RGV2aWNlQmxvY2tDYWxsYmFjaykoV0dQVVJlcXVlc3REZXZpY2VTdGF0dXMgc3RhdHVzLCBX
R1BVRGV2aWNlIGRldmljZSwgY2hhciBjb25zdCAqIG1lc3NhZ2UpOwordHlwZWRlZiB2b2lkIChe
V0dQVVdvcmtJdGVtKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoXldHUFVTY2hlZHVsZVdvcmtCbG9j
aykoV0dQVVdvcmtJdGVtIHdvcmtJdGVtKTsKIAogdHlwZWRlZiBlbnVtIFdHUFVTVHlwZUV4dGVu
ZGVkIHsKICAgICBXR1BVU1R5cGVFeHRlbmRlZF9TaGFkZXJNb2R1bGVEZXNjcmlwdG9ySGludHMg
PSAweDM0ODk3MEYzLCAvLyBSYW5kb20KICAgICBXR1BVU1R5cGVFeHRlbmRlZF9UZXh0dXJlRGVz
Y3JpcHRvclZpZXdGb3JtYXRzID0gMHgxRDVCQzU3LCAvLyBSYW5kb20KKyAgICBXR1BVU1R5cGVF
eHRlbmRlZF9JbnN0YW5jZUNvY29hRGVzY3JpcHRvciA9IDB4MTUxQkJDMDAsIC8vIFJhbmRvbQog
ICAgIFdHUFVTVHlwZUV4dGVuZGVkX0ZvcmNlMzIgPSAweDdGRkZGRkZGCiB9IFdHUFVTVHlwZUV4
dGVuZGVkOwogCit0eXBlZGVmIHN0cnVjdCBXR1BVSW5zdGFuY2VDb2NvYURlc2NyaXB0b3Igewor
ICAgIFdHUFVDaGFpbmVkU3RydWN0IGNoYWluOworICAgIC8vIFRoZSBBUEkgY29udHJhY3QgaXM6
IFdlYkdQVS5mcmFtZXdvcmsgZG9lc24ndCB1c2UgYW55IGxvY2tzIGludGVybmFsbHksIHNvIGNh
bGxlcnMgbXVzdAorICAgIC8vIGNhbGwgaXRzIGZ1bmN0aW9ucyBpbiBhIG5vbi1yYWNleSB3YXku
IFRoaXMgc2NoZWR1bGVXb3JrQmxvY2sgd2lsbCBleGVjdXRlIG9uIGEKKyAgICAvLyBiYWNrZ3Jv
dW5kIHRocmVhZCwgYW5kIGl0IG11c3Qgc2NoZWR1bGUgdGhlIGJsb2NrIGl0J3MgcGFzc2VkIHRv
IGJlIHJ1biBpbiBhIG5vbi1yYWNleQorICAgIC8vIHdheSB3aXRoIHJlZ2FyZHMgdG8gYWxsIHRo
ZSBvdGhlciBXZWJHUFUgY2FsbHMuIEl0J3MgZmluZSB0byBwYXNzIE5VTEwgaGVyZSwgYnV0IGlm
IHlvdQorICAgIC8vIGRvLCB5b3UgbXVzdCBwZXJpb2RpY2FsbHkgY2FsbCB3Z3B1SW5zdGFuY2VQ
cm9jZXNzRXZlbnRzKCkgdG8gc3luY2hyb25vdXNseSBydW4gdGhlCisgICAgLy8gcXVldWVkIGNh
bGxiYWNrcy4KKyAgICBXR1BVU2NoZWR1bGVXb3JrQmxvY2sgc2NoZWR1bGVXb3JrQmxvY2s7Cit9
IFdHUFVJbnN0YW5jZUNvY29hRGVzY3JpcHRvcjsKKwogdHlwZWRlZiBzdHJ1Y3QgV0dQVVNoYWRl
ck1vZHVsZUNvbXBpbGF0aW9uSGludCB7CiAgICAgV0dQVVBpcGVsaW5lTGF5b3V0IGxheW91dDsK
IH0gV0dQVVNoYWRlck1vZHVsZUNvbXBpbGF0aW9uSGludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmNwcAppbmRleCAyYzlh
MGY5NTVkOTgwODlhNzc1ZmVkMjhhMGYzZGFhZGQ4M2RiNGJmLi5mYWYzNzhjYzMyZDgxNTA1ZWU1
NzFjOWY1YTg1M2E0NGQ3N2YyOGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1dlYkdQVS9SZW1vdGVHUFUuY3BwCkBAIC03OSw3ICs3OSw5IEBAIHZv
aWQgUmVtb3RlR1BVOjp3b3JrUXVldWVJbml0aWFsaXplKCkKIHsKICAgICBhc3NlcnRJc0N1cnJl
bnQod29ya1F1ZXVlKCkpOwogI2lmIEhBVkUoV0VCR1BVX0lNUExFTUVOVEFUSU9OKQotICAgIGF1
dG8gYmFja2luZyA9IFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVhdGUoKTsKKyAgICBhdXRvIGJh
Y2tpbmcgPSBQQUw6OldlYkdQVTo6R1BVSW1wbDo6Y3JlYXRlKFtwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfV0oUEFMOjpXZWJHUFU6OkdQVUltcGw6OldvcmtJdGVtJiYgd29ya0l0ZW0pIHsK
KyAgICAgICAgcHJvdGVjdGVkVGhpcy0+d29ya1F1ZXVlKCkuZGlzcGF0Y2goV1RGTW92ZSh3b3Jr
SXRlbSkpOworICAgIH0pOwogI2Vsc2UKICAgICBSZWZQdHI8UEFMOjpXZWJHUFU6OkdQVT4gYmFj
a2luZzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCAwNWUzZjNmMWI4ZDRjY2Rh
MjVmZDdiNDU3NTI1ZTIzYzVjMjgxZjIzLi4zYTY0NjFlYjA5OWRjOWQwMDQ1M2E5ZTAzYjJiMDNj
OGVhOWViM2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtOTU3LDcgKzk1Nyw5IEBAIFJl
ZlB0cjxQQUw6OldlYkdQVTo6R1BVPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZUdQVUZvcldlYkdQ
VSgpIGNvbnN0CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogICAgIHJldHVybiBSZW1vdGVHUFVQ
cm94eTo6Y3JlYXRlKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25u
ZWN0aW9uKCksIFdlYkdQVTo6RG93bmNhc3RDb252ZXJ0VG9CYWNraW5nQ29udGV4dDo6Y3JlYXRl
KCksIFdlYkdQVUlkZW50aWZpZXI6OmdlbmVyYXRlKCksIG1fcGFnZS5lbnN1cmVSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkoKS5lbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKTsKICNlbHNlCi0gICAg
cmV0dXJuIFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gUEFMOjpX
ZWJHUFU6OkdQVUltcGw6OmNyZWF0ZShbXShQQUw6OldlYkdQVTo6R1BVSW1wbDo6V29ya0l0ZW0m
JiB3b3JrSXRlbSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcChXVEZNb3ZlKHdvcmtJdGVt
KSk7CisgICAgfSk7CiAjZW5kaWYKICNlbHNlCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQubW0KaW5kZXggYWMzM2NlMTc1ZDBkNDdjY2ZhM2EyMjMxNDA2MDM3ZjczMjU2N2I3OS4u
YWUxMDBkMTI0MzYzZGEyMDFjZmFkNmI0YThhMjRkM2RhZDJhM2UyMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbQpAQCAtMTE2Myw3ICsxMTYzLDkgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmNoYW5nZVVu
aXZlcnNhbEFjY2Vzc1pvb21Gb2N1cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWUKIFJlZlB0
cjxQQUw6OldlYkdQVTo6R1BVPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZUdQVUZvcldlYkdQVSgp
IGNvbnN0CiB7CiAjaWYgSEFWRShXRUJHUFVfSU1QTEVNRU5UQVRJT04pCi0gICAgcmV0dXJuIFBB
TDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gUEFMOjpXZWJHUFU6OkdQ
VUltcGw6OmNyZWF0ZShbXShQQUw6OldlYkdQVTo6R1BVSW1wbDo6V29ya0l0ZW0mJiB3b3JrSXRl
bSkgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcChXVEZNb3ZlKHdvcmtJdGVtKSk7CisgICAg
fSk7CiAjZWxzZQogICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454566</attachid>
            <date>2022-03-14 00:59:44 -0700</date>
            <delta_ts>2022-03-14 14:57:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237755-20220314005943.patch</filename>
            <type>text/plain</type>
            <size>16595</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCAxMTdlYzhh
ODhjZWY0ZTMyOTE3MGYzZTZmN2FiMTNiZTgxOWYyOGRhLi5lMjQ3MGVjZDk1Zjc3YzYzMzQ3NDZh
MWNkNDVhNzIxMTBjNTEyYjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAor
MjAyMi0wMy0xNCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisg
ICAgICAgIFtXZWJHUFVdIEFsbG93IGZvciBzY2hlZHVsaW5nIGFzeW5jaHJvbm91cyB3b3JrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3NTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHUFUgZG9l
c24ndCBrbm93IGhvdyB0byBzY2hlZHVsZSBhc3luY2hyb25vdXMgd29yaywgc28gdGhhdCB3aWxs
IGhhdmUgdG8gYmUgaGFuZGxlZAorICAgICAgICBieSBkZXBlbmRlbmN5IGluamVjdGlvbiBmcm9t
IHRoZSBjYWxsZXIuIFRoZSB3YXkgaXQgd29ya3MgaXMgSW5zdGFuY2UgY3JlYXRpb24gdGFrZXMK
KyAgICAgICAgYSBibG9jaywgd2hpY2ggaXMgcmV0YWluZWQuIFdoZW5ldmVyIGFzeW5jaHJvbm91
cyB3b3JrIG5lZWRzIHRvIGJlIHNjaGVkdWxlZCBvbiB0aGUKKyAgICAgICAgcmVsZXZhbnQgdGhy
ZWFkLCB0aGlzIGJsb2NrIGlzIGNhbGxlZCwgYW5kIGlzIHBhc3NlZCBhbm90aGVyIGJsb2NrIGZv
ciB0aGUgd29yayB0byBiZQorICAgICAgICBwZXJmb3JtZWQuCisKKyAgICAgICAgVGhlIEFQSSBj
b250cmFjdCBpczogY2FsbGVycyBvZiBXZWJHUFUgbXVzdCBjYWxsIGl0cyBmdW5jdGlvbnMgaW4g
YSBub24tcmFjZXkgd2F5LiBUaGUKKyAgICAgICAgc2NoZWR1bGUgZnVuY3Rpb24gd2lsbCBleGVj
dXRlIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQsIGFuZCBpdCBtdXN0IHNjaGVkdWxlIHRoZSBibG9j
aworICAgICAgICBpdCdzIHBhc3NlZCB0byBiZSBydW4gaW4gYSBub24tcmFjZXkgd2F5IHdpdGgg
cmVnYXJkcyB0byBhbGwgdGhlIG90aGVyIFdlYkdQVSBjYWxscy4KKyAgICAgICAgVGhlIHNjaGVk
dWxlIGZ1bmN0aW9uIGNhbiBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIHRoZSBhc3luY2hyb25vdXMg
dGFza3Mgd2lsbCBqdXN0IGJlCisgICAgICAgIGludGVybmFsbHkgcXVldWVkIHVwIGluc2lkZSBX
ZWJHUFUsIGFuZCB0aGVuIHVzZXJzIHdpbGwgaGF2ZSB0byBjYWxsCisgICAgICAgIHdncHVJbnN0
YW5jZVByb2Nlc3NFdmVudHMoKSBwZXJpb2RpY2FsbHkgdG8gc3luY2hyb25vdXNseSBjYWxsIHRo
ZSBxdWV1ZWQgY2FsbGJhY2tzLgorCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUltcGwuY3BwOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkdQVUltcGw6OmNyZWF0ZSk6
CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuaDoKKwogMjAy
Mi0wMy0xMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZG9wdCBGQUxMQkFDS19QTEFURk9STV9OQU1FIGluIHBsYWNlIG9mIEZBTExCQUNLX1BMQVRG
T1JNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUv
Q2hhbmdlTG9nCmluZGV4IGYxYjYyM2RjYTVkNzQ2ZGFiYWZlMzg2MzJmMWYwZmZmNWQ5MGQ5ODMu
LjE3ZWViNTM0OGMyZjYxOTU5ZTJkMzkyM2JhMTdmNDJkY2ZiZDBmNjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMjItMDMtMTQgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBBbGxvdyBmb3Igc2NoZWR1bGluZyBhc3luY2hy
b25vdXMgd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJHUFUvSW5zdGFuY2UuaDoKKyAgICAgICAgKFdlYkdQVTo6SW5zdGFuY2U6OnJ1bkxv
b3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVS9JbnN0YW5jZS5tbToKKyAgICAg
ICAgKFdlYkdQVTo6SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJHUFU6Okluc3RhbmNl
OjpJbnN0YW5jZSk6CisgICAgICAgIChXZWJHUFU6Okluc3RhbmNlOjpzY2hlZHVsZVdvcmspOgor
ICAgICAgICAoV2ViR1BVOjpJbnN0YW5jZTo6ZGVmYXVsdFNjaGVkdWxlV29yayk6CisgICAgICAg
IChXZWJHUFU6Okluc3RhbmNlOjpwcm9jZXNzRXZlbnRzKToKKyAgICAgICAgKiBXZWJHUFUvV2Vi
R1BVRXh0Lmg6CisKIDIwMjItMDMtMTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRvcHQgRkFMTEJBQ0tfUExBVEZPUk1fTkFNRSBpbiBwbGFjZSBv
ZiBGQUxMQkFDS19QTEFURk9STQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmMDQ5NGY1MGFjOGExMDY1ZDI2ZWIyMTc1
ZTg3Mjk2NzdmNjM2NDdkLi5kZTlhNGJkZGI0M2M0NzczYTUzOGE4NWEyZWVhOTM4NmY4NTE2YjU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAzLTE0ICBNeWxlcyBDLiBNYXhmaWVs
ZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gQWxsb3cgZm9yIHNj
aGVkdWxpbmcgYXN5bmNocm9ub3VzIHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNzc1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BV
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR1BVOjp3b3JrUXVldWVJbml0aWFsaXplKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlR1BVOjp3b3JrUXVldWVVbmluaXRpYWxpemUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVHUFVGb3JXZWJHUFUgY29uc3Qp
OgorCiAyMDIyLTAzLTEyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIEluIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLCBncm91cCBtYWtlRnJvbnRCdWZm
ZXJOb25Wb2xhdGlsZSgpIGFuZCBzd2FwVG9WYWxpZEZyb250QnVmZmVyKCkgaW50byBhIHNpbmds
ZSBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGY0YTU4NmFiZjlmMTAz
N2NmYmZlYTlmNjIwMWJjYjQ3Mzc1ZWJmMmMuLjljN2FkMWZiY2M4MjY2MTBjZTYyMzk4OTI0MmM5
ZmUwOWI4MTMxOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAyMi0wMy0xNCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgor
CisgICAgICAgIFtXZWJHUFVdIEFsbG93IGZvciBzY2hlZHVsaW5nIGFzeW5jaHJvbm91cyB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3NTUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6
Y3JlYXRlR1BVRm9yV2ViR1BVIGNvbnN0KToKKwogMjAyMi0wMy0xMiAgVGltIEhvcnRvbiAgPHRp
bW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZG9wdCBGQUxMQkFDS19QTEFURk9S
TV9OQU1FIGluIHBsYWNlIG9mIEZBTExCQUNLX1BMQVRGT1JNCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmNwcApp
bmRleCBiYjhlMDRlM2FjNTgxNjc5ZDcwY2Q1NjZlZjViNTQxMjUyYzRlMGY2Li40NWU1YjQzYWVh
N2UyYjY3NjViZDdiZjIxOWNiNzAxMGI3NmIxYjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5jcHAKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJXZWJHUFVBZGFwdGVySW1wbC5oIgogI2luY2x1ZGUg
IldlYkdQVURvd25jYXN0Q29udmVydFRvQmFja2luZ0NvbnRleHQuaCIKICNpbmNsdWRlIDxXZWJH
UFUvV2ViR1BVRXh0Lmg+CisjaW5jbHVkZSA8d3RmL0Jsb2NrUHRyLmg+CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICNpbmNsdWRlIDx3dGYvZGFyd2luL1dlYWtMaW5raW5nLmg+CkBAIC00MCw5ICs0
MSwyNSBAQCBXVEZfV0VBS19MSU5LX0ZPUkNFX0lNUE9SVCh3Z3B1Q3JlYXRlSW5zdGFuY2UpOwog
CiBuYW1lc3BhY2UgUEFMOjpXZWJHUFUgewogCi1SZWZQdHI8R1BVSW1wbD4gR1BVSW1wbDo6Y3Jl
YXRlKCkKK1JlZlB0cjxHUFVJbXBsPiBHUFVJbXBsOjpjcmVhdGUoU2NoZWR1bGVXb3JrRnVuY3Rp
b24mJiBzY2hlZHVsZVdvcmtGdW5jdGlvbikKIHsKLSAgICBXR1BVSW5zdGFuY2VEZXNjcmlwdG9y
IGRlc2NyaXB0b3IgPSB7IG51bGxwdHIgfTsKKyAgICAvLyBCbG9jayBsaXRlcmFscyBjb3B5IGFs
bCBuYW1lZCBvYmplY3RzIGludG8gdGhlaXIgY2xvc3VyZXMuCisgICAgLy8gSWYgdGhlIGJsb2Nr
IGxpdGVyYWwgbmFtZWQgc2NoZWR1bGVXb3JrRnVuY3Rpb24gaW5zdGVhZCBvZiBsb2NhbFNjaGVk
dWxlV29ya0Z1bmN0aW9uLAorICAgIC8vIHRoZW4gaXQgd291bGQgY29weSBqdXN0IHRoZSByZWZl
cmVuY2UsIGFuZCB3aGVuIHRoZSBmdW5jdGlvbiBmZWxsIG91dCBvZiBzY29wZSwKKyAgICAvLyB0
aGUgcmVmZXJlbmNlIHdvdWxkIGJlIGRhbmdsaW5nLgorICAgIFNjaGVkdWxlV29ya0Z1bmN0aW9u
IGxvY2FsU2NoZWR1bGVXb3JrRnVuY3Rpb24gPSBXVEZNb3ZlKHNjaGVkdWxlV29ya0Z1bmN0aW9u
KTsKKworICAgIFdHUFVJbnN0YW5jZUNvY29hRGVzY3JpcHRvciBjb2NvYURlc2NyaXB0b3Igewor
ICAgICAgICB7CisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
V0dQVVNUeXBlPihXR1BVU1R5cGVFeHRlbmRlZF9JbnN0YW5jZUNvY29hRGVzY3JpcHRvciksCisg
ICAgICAgIH0sCisgICAgICAgIF4oV0dQVVdvcmtJdGVtIHdvcmtJdGVtKQorICAgICAgICB7Cisg
ICAgICAgICAgICBsb2NhbFNjaGVkdWxlV29ya0Z1bmN0aW9uKG1ha2VCbG9ja1B0cih3b3JrSXRl
bSkpOworICAgICAgICB9LAorICAgIH07CisgICAgV0dQVUluc3RhbmNlRGVzY3JpcHRvciBkZXNj
cmlwdG9yID0geyAmY29jb2FEZXNjcmlwdG9yLmNoYWluIH07CiAgICAgaWYgKCEmd2dwdUNyZWF0
ZUluc3RhbmNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIGluc3RhbmNlID0g
d2dwdUNyZWF0ZUluc3RhbmNlKCZkZXNjcmlwdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmgKaW5kZXggZDU1
MjNlY2NiZTM0YzA4NjJjZWQxNWE2ZjBjNDAxZDhiODE3NTUzYS4uOGE2NDNlOGVhYTY4MTkzMzdj
NTk3Y2JkMzU5NDhiMTZjY2VkNjIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJbXBsLmgKQEAgLTI5LDcgKzI5LDkg
QEAKIAogI2luY2x1ZGUgIldlYkdQVS5oIgogI2luY2x1ZGUgPFdlYkdQVS9XZWJHUFUuaD4KKyNp
bmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgogCiBuYW1lc3BhY2UgUEFMOjpXZWJHUFUgewogCkBAIC0zOCw3ICs0MCwx
MSBAQCBjbGFzcyBDb252ZXJ0VG9CYWNraW5nQ29udGV4dDsKIGNsYXNzIEdQVUltcGwgZmluYWwg
OiBwdWJsaWMgR1BVIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBQQUxfRVhQT1JUIHN0YXRpYyBSZWZQdHI8R1BVSW1wbD4gY3JlYXRlKCk7CisgICAgdXNpbmcg
V29ya0l0ZW0gPSBXVEY6OkZ1bmN0aW9uPHZvaWQodm9pZCk+OworICAgIC8vIFdlIGNhbid0IHVz
ZSBXVEY6OkZ1bmN0aW9uIGhlcmUsIGJlY2F1c2UgV2ViR1BVIGlzIGEgQyBBUEkgdGhhdCB1c2Vz
IGJsb2NrcywKKyAgICAvLyBhbmQgYW55dGhpbmcgY2FwdHVyZWQgYnkgYSBibG9jayBuZWVkcyB0
byBiZSBjb3B5YWJsZS4KKyAgICB1c2luZyBTY2hlZHVsZVdvcmtGdW5jdGlvbiA9IHN0ZDo6ZnVu
Y3Rpb248dm9pZChXb3JrSXRlbSYmKT47CisgICAgUEFMX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEdQ
VUltcGw+IGNyZWF0ZShTY2hlZHVsZVdvcmtGdW5jdGlvbiYmKTsKIAogICAgIHN0YXRpYyBSZWY8
R1BVSW1wbD4gY3JlYXRlKFdHUFVJbnN0YW5jZSBpbnN0YW5jZSwgQ29udmVydFRvQmFja2luZ0Nv
bnRleHQmIGNvbnZlcnRUb0JhY2tpbmdDb250ZXh0KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0luc3RhbmNlLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5j
ZS5oCmluZGV4IDVmODRhZGIzOWQ4Y2Q2NmFhOWI4ZmM1ZDBiMjgwOWJhNjIzYzk3ODcuLjZmOGZk
YjE4YWUwOTFhYTRiYTk4ZDcxYmYzMjcyMzkzZjNkMGE3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL0luc3RhbmNlLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvSW5zdGFu
Y2UuaApAQCAtMjUsMTkgKzI1LDIwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9EZXF1ZS5oPgogI2ltcG9ydCA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbXBvcnQgPHd0Zi9GdW5jdGlvbi5oPgorI2ltcG9ydCA8d3RmL0xv
Y2suaD4KICNpbXBvcnQgPHd0Zi9SZWYuaD4KLSNpbXBvcnQgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW1wb3J0IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkdQVSB7CiAKIGNsYXNzIEFkYXB0ZXI7CiBjbGFzcyBTdXJmYWNl
OwogCi1jbGFzcyBJbnN0YW5jZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3RhbmNlPiB7CitjbGFz
cyBJbnN0YW5jZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbnN0YW5jZT4gewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8SW5z
dGFuY2U+IGNyZWF0ZShjb25zdCBXR1BVSW5zdGFuY2VEZXNjcmlwdG9yJik7CkBAIC00OCwxMiAr
NDksMjAgQEAgcHVibGljOgogICAgIHZvaWQgcHJvY2Vzc0V2ZW50cygpOwogICAgIHZvaWQgcmVx
dWVzdEFkYXB0ZXIoY29uc3QgV0dQVVJlcXVlc3RBZGFwdGVyT3B0aW9ucyYsIFdURjo6RnVuY3Rp
b248dm9pZChXR1BVUmVxdWVzdEFkYXB0ZXJTdGF0dXMsIFJlZlB0cjxBZGFwdGVyPiYmLCBjb25z
dCBjaGFyKik+JiYgY2FsbGJhY2spOwogCi0gICAgTlNSdW5Mb29wICpydW5Mb29wKCkgY29uc3Qg
eyByZXR1cm4gbV9ydW5Mb29wOyB9CisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIG9uIGEgYmFj
a2dyb3VuZCB0aHJlYWQuCisgICAgdXNpbmcgV29ya0l0ZW0gPSBzdGQ6OmZ1bmN0aW9uPHZvaWQo
dm9pZCk+OworICAgIHZvaWQgc2NoZWR1bGVXb3JrKFdvcmtJdGVtKTsKIAogcHJpdmF0ZToKLSAg
ICBJbnN0YW5jZShOU1J1bkxvb3AgKik7CisgICAgSW5zdGFuY2UoV0dQVVNjaGVkdWxlV29ya0Js
b2NrKTsKIAotICAgIE5TUnVuTG9vcCAqbV9ydW5Mb29wOworICAgIC8vIFRoaXMgY2FuIGJlIGNh
bGxlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgorICAgIHZvaWQgZGVmYXVsdFNjaGVkdWxlV29y
ayhXR1BVV29ya0l0ZW0mJik7CisKKyAgICAvLyBUaGlzIGNhbiBiZSB1c2VkIG9uIGEgYmFja2dy
b3VuZCB0aHJlYWQuCisgICAgRGVxdWU8V0dQVVdvcmtJdGVtPiBtX3BlbmRpbmdXb3JrIFdURl9H
VUFSREVEX0JZX0xPQ0sobV9sb2NrKTsKKyAgICBXR1BVU2NoZWR1bGVXb3JrQmxvY2sgbV9zY2hl
ZHVsZVdvcmtCbG9jazsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkdQVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvSW5zdGFuY2UubW0gYi9Tb3Vy
Y2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5tbQppbmRleCAyNGEwNTcxZGQyMzhkMWYzMjhkNjJh
ZmJiM2EyYWZmMjdkZDZhYzU4Li45YWFhMWY3MzdmODUwZDk5MDExMGQ1MGMzYjI5NWQ3MWJjNjBm
YWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5tbQorKysgYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9JbnN0YW5jZS5tbQpAQCAtMzMsMjIgKzMzLDI0IEBACiAKIG5h
bWVzcGFjZSBXZWJHUFUgewogCi1zdGF0aWMgY29uc3RleHByIE5TU3RyaW5nICpydW5Mb29wTW9k
ZSA9IEAia0NGUnVuTG9vcFdlYkdQVU1vZGUiOwotCiBSZWZQdHI8SW5zdGFuY2U+IEluc3RhbmNl
OjpjcmVhdGUoY29uc3QgV0dQVUluc3RhbmNlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAg
ICBpZiAoZGVzY3JpcHRvci5uZXh0SW5DaGFpbikKKyAgICBpZiAoIWRlc2NyaXB0b3IubmV4dElu
Q2hhaW4pCisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3RhbmNlKG51bGxwdHIpKTsK
KworICAgIGlmIChkZXNjcmlwdG9yLm5leHRJbkNoYWluLT5zVHlwZSAhPSBzdGF0aWNfY2FzdDxX
R1BVU1R5cGU+KFdHUFVTVHlwZUV4dGVuZGVkX0luc3RhbmNlQ29jb2FEZXNjcmlwdG9yKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBOU1J1bkxvb3AgKnJ1bkxvb3AgPSBOU1J1bkxv
b3AuY3VycmVudFJ1bkxvb3A7Ci0gICAgaWYgKCFydW5Mb29wKQorICAgIGNvbnN0IFdHUFVJbnN0
YW5jZUNvY29hRGVzY3JpcHRvciYgY29jb2FEZXNjcmlwdG9yID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBXR1BVSW5zdGFuY2VDb2NvYURlc2NyaXB0b3ImPigqZGVzY3JpcHRvci5uZXh0SW5DaGFp
bik7CisKKyAgICBpZiAoY29jb2FEZXNjcmlwdG9yLmNoYWluLm5leHQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zdGFuY2UocnVuTG9vcCkp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3RhbmNlKGNvY29hRGVzY3JpcHRvci5zY2hl
ZHVsZVdvcmtCbG9jaykpOwogfQogCi1JbnN0YW5jZTo6SW5zdGFuY2UoTlNSdW5Mb29wICpydW5M
b29wKQotICAgIDogbV9ydW5Mb29wKHJ1bkxvb3ApCitJbnN0YW5jZTo6SW5zdGFuY2UoV0dQVVNj
aGVkdWxlV29ya0Jsb2NrIHNjaGVkdWxlV29ya0Jsb2NrKQorICAgIDogbV9zY2hlZHVsZVdvcmtC
bG9jayhzY2hlZHVsZVdvcmtCbG9jayA/IFdURk1vdmUoc2NoZWR1bGVXb3JrQmxvY2spIDogXihX
R1BVV29ya0l0ZW0gd29ya0l0ZW0pIHsgZGVmYXVsdFNjaGVkdWxlV29yayhXVEZNb3ZlKHdvcmtJ
dGVtKSk7IH0pCiB7CiB9CiAKQEAgLTYxLDE3ICs2MywzMiBAQCBSZWZQdHI8U3VyZmFjZT4gSW5z
dGFuY2U6OmNyZWF0ZVN1cmZhY2UoY29uc3QgV0dQVVN1cmZhY2VEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQogICAgIHJldHVybiBTdXJmYWNlOjpjcmVhdGUoKTsKIH0KIAordm9pZCBJbnN0YW5jZTo6
c2NoZWR1bGVXb3JrKFdvcmtJdGVtIHdvcmtJdGVtKQoreworICAgIG1fc2NoZWR1bGVXb3JrQmxv
Y2soXnsKKyAgICAgICAgd29ya0l0ZW0oKTsKKyAgICB9KTsKK30KKwordm9pZCBJbnN0YW5jZTo6
ZGVmYXVsdFNjaGVkdWxlV29yayhXR1BVV29ya0l0ZW0mJiB3b3JrSXRlbSkKK3sKKyAgICBMb2Nr
SG9sZGVyIGxvY2tIb2xkZXIobV9sb2NrKTsKKyAgICBtX3BlbmRpbmdXb3JrLmFwcGVuZChXVEZN
b3ZlKHdvcmtJdGVtKSk7Cit9CisKIHZvaWQgSW5zdGFuY2U6OnByb2Nlc3NFdmVudHMoKQogewot
ICAgIC8vIE5TUnVuTG9vcHMgYXJlIG5vdCB0aHJlYWQtc2FmZSwgYnV0IHRoZW4gYWdhaW4gbmVp
dGhlciBpcyBXZWJHUFUuCi0gICAgLy8gSWYgdGhlIGNhbGxlciBkb2VzIGFsbCB0aGUgbmVjZXNz
YXJ5IHN5bmNocm9uaXphdGlvbiB0aGVtc2VsdmVzLCB0aGlzIHdpbGwgYmUgc2FmZS4KLSAgICAv
LyBJbiB0aGF0IHNpdHVhdGlvbiwgd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UncmUgdXNpbmcgdGhl
IHJ1biBsb29wIHdlIHdlcmUgY3JlYXRlZCBvbiwKLSAgICAvLyBzbyB0YXNrcyB0aGF0IHdlcmUg
cXVldWVkIHVwIG9uIG9uZSB0aHJlYWQgYWN0dWFsbHkgZ2V0IGV4ZWN1dGVkIGhlcmUsIGV2ZW4g
aWYKLSAgICAvLyB0aGlzIGlzIGV4ZWN1dGluZyBvbiBhIGRpZmZlcmVudCB0aHJlYWQuCi0gICAg
Qk9PTCByZXN1bHQ7Ci0gICAgZG8gewotICAgICAgICByZXN1bHQgPSBbbV9ydW5Mb29wIHJ1bk1v
ZGU6cnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRhdGVdXTsKLSAgICB9IHdoaWxlIChy
ZXN1bHQpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIERlcXVlPFdHUFVXb3JrSXRlbT4g
bG9jYWxXb3JrOworICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tIb2xkZXIo
bV9sb2NrKTsKKyAgICAgICAgICAgIHN0ZDo6ZXhjaGFuZ2UobV9wZW5kaW5nV29yaywgbG9jYWxX
b3JrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobG9jYWxXb3JrLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yIChhdXRvJiB3b3JrSXRlbSA6IGxvY2FsV29yaykK
KyAgICAgICAgICAgIHdvcmtJdGVtKCk7CisgICAgfQogfQogCiBzdGF0aWMgTlNBcnJheTxpZDxN
VExEZXZpY2U+PiAqc29ydGVkRGV2aWNlcyhOU0FycmF5PGlkPE1UTERldmljZT4+ICpkZXZpY2Vz
LCBXR1BVUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1dlYkdQVUV4dC5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvV2ViR1BV
RXh0LmgKaW5kZXggM2RhNDAwMzIyNjVhMTg4YjhjZTE2YTM5MDEwMzQ3MzhlZDU5ZGExMS4uODJj
NTEzYTgwMzg4NmM0M2E0MThhMDljMmY5M2VhZmU0MDZkZjg2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvV2ViR1BVRXh0LmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvV2Vi
R1BVRXh0LmgKQEAgLTM5LDEzICszOSwyNiBAQCB0eXBlZGVmIHZvaWQgKF5XR1BVRXJyb3JCbG9j
a0NhbGxiYWNrKShXR1BVRXJyb3JUeXBlIHR5cGUsIGNoYXIgY29uc3QgKiBtZXNzYWdlKQogdHlw
ZWRlZiB2b2lkICheV0dQVVF1ZXVlV29ya0RvbmVCbG9ja0NhbGxiYWNrKShXR1BVUXVldWVXb3Jr
RG9uZVN0YXR1cyBzdGF0dXMpOwogdHlwZWRlZiB2b2lkICheV0dQVVJlcXVlc3RBZGFwdGVyQmxv
Y2tDYWxsYmFjaykoV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzIHN0YXR1cywgV0dQVUFkYXB0ZXIg
YWRhcHRlciwgY2hhciBjb25zdCAqIG1lc3NhZ2UpOwogdHlwZWRlZiB2b2lkICheV0dQVVJlcXVl
c3REZXZpY2VCbG9ja0NhbGxiYWNrKShXR1BVUmVxdWVzdERldmljZVN0YXR1cyBzdGF0dXMsIFdH
UFVEZXZpY2UgZGV2aWNlLCBjaGFyIGNvbnN0ICogbWVzc2FnZSk7Cit0eXBlZGVmIHZvaWQgKF5X
R1BVV29ya0l0ZW0pKHZvaWQpOwordHlwZWRlZiB2b2lkICheV0dQVVNjaGVkdWxlV29ya0Jsb2Nr
KShXR1BVV29ya0l0ZW0gd29ya0l0ZW0pOwogCiB0eXBlZGVmIGVudW0gV0dQVVNUeXBlRXh0ZW5k
ZWQgewogICAgIFdHUFVTVHlwZUV4dGVuZGVkX1NoYWRlck1vZHVsZURlc2NyaXB0b3JIaW50cyA9
IDB4MzQ4OTcwRjMsIC8vIFJhbmRvbQogICAgIFdHUFVTVHlwZUV4dGVuZGVkX1RleHR1cmVEZXNj
cmlwdG9yVmlld0Zvcm1hdHMgPSAweDFENUJDNTcsIC8vIFJhbmRvbQorICAgIFdHUFVTVHlwZUV4
dGVuZGVkX0luc3RhbmNlQ29jb2FEZXNjcmlwdG9yID0gMHgxNTFCQkMwMCwgLy8gUmFuZG9tCiAg
ICAgV0dQVVNUeXBlRXh0ZW5kZWRfRm9yY2UzMiA9IDB4N0ZGRkZGRkYKIH0gV0dQVVNUeXBlRXh0
ZW5kZWQ7CiAKK3R5cGVkZWYgc3RydWN0IFdHUFVJbnN0YW5jZUNvY29hRGVzY3JpcHRvciB7Cisg
ICAgV0dQVUNoYWluZWRTdHJ1Y3QgY2hhaW47CisgICAgLy8gVGhlIEFQSSBjb250cmFjdCBpczog
Y2FsbGVycyBtdXN0IGNhbGwgV2ViR1BVJ3MgZnVuY3Rpb25zIGluIGEgbm9uLXJhY2V5IHdheSB3
aXRoIHJlc3BlY3QKKyAgICAvLyB0byBlYWNoIG90aGVyLiBUaGlzIHNjaGVkdWxlV29ya0Jsb2Nr
IHdpbGwgZXhlY3V0ZSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLCBhbmQgaXQgbXVzdAorICAgIC8v
IHNjaGVkdWxlIHRoZSBibG9jayBpdCdzIHBhc3NlZCB0byBiZSBydW4gaW4gYSBub24tcmFjZXkg
d2F5IHdpdGggcmVnYXJkcyB0byBhbGwgdGhlIG90aGVyCisgICAgLy8gV2ViR1BVIGNhbGxzLiBJ
dCdzIGZpbmUgdG8gcGFzcyBOVUxMIGhlcmUsIGJ1dCBpZiB5b3UgZG8sIHlvdSBtdXN0IHBlcmlv
ZGljYWxseSBjYWxsCisgICAgLy8gd2dwdUluc3RhbmNlUHJvY2Vzc0V2ZW50cygpIHRvIHN5bmNo
cm9ub3VzbHkgcnVuIHRoZSBxdWV1ZWQgY2FsbGJhY2tzLgorICAgIFdHUFVTY2hlZHVsZVdvcmtC
bG9jayBzY2hlZHVsZVdvcmtCbG9jazsKK30gV0dQVUluc3RhbmNlQ29jb2FEZXNjcmlwdG9yOwor
CiB0eXBlZGVmIHN0cnVjdCBXR1BVU2hhZGVyTW9kdWxlQ29tcGlsYXRpb25IaW50IHsKICAgICBX
R1BVUGlwZWxpbmVMYXlvdXQgbGF5b3V0OwogfSBXR1BVU2hhZGVyTW9kdWxlQ29tcGlsYXRpb25I
aW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1dlYkdQ
VS9SZW1vdGVHUFUuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1dlYkdQ
VS9SZW1vdGVHUFUuY3BwCmluZGV4IDJjOWEwZjk1NWQ5ODA4OWE3NzVmZWQyOGEwZjNkYWFkZDgz
ZGI0YmYuLjNlZjllYjg4Y2M3NmZhNTVmMDc0ODA4ZjU1OGJmNWM0MDNjYjFhYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQ
VS5jcHAKQEAgLTc5LDcgKzc5LDE0IEBAIHZvaWQgUmVtb3RlR1BVOjp3b3JrUXVldWVJbml0aWFs
aXplKCkKIHsKICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogI2lmIEhBVkUoV0VC
R1BVX0lNUExFTUVOVEFUSU9OKQotICAgIGF1dG8gYmFja2luZyA9IFBBTDo6V2ViR1BVOjpHUFVJ
bXBsOjpjcmVhdGUoKTsKKyAgICAvLyBCRVdBUkU6IFRoaXMgaXMgYSByZXRhaW4gY3ljbGUuCisg
ICAgLy8gdGhpcyBvd25zIG1fYmFja2luZywgYnV0IG1fYmFja2luZyBjb250YWlucyBhIGNhbGxi
YWNrIHdoaWNoIGhhcyBhIHN0b25nIHJlZmVyZW5jZSB0byB0aGlzLgorICAgIC8vIFRoZSByZXRh
aW4gY3ljbGUgaXMgcmVxdWlyZWQgYmVjYXVzZSBjYWxsYmFja3MgbmVlZCB0byBleGVjdXRlIGV2
ZW4gaWYgdGhpcyBpcyBkaXNvd25lZAorICAgIC8vIChiZWNhdXNlIHRoZSBjYWxsYmFja3MgaGFu
ZGxlIHJlc291cmNlIGNsZWFudXAsIGV0Yy4pLgorICAgIC8vIFRoZSByZXRhaW4gY3ljbGUgaXMg
YnJva2VuIGluIHdvcmtRdWV1ZVVuaW5pdGlhbGl6ZSgpLgorICAgIGF1dG8gYmFja2luZyA9IFBB
TDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVhdGUoW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
XShQQUw6OldlYkdQVTo6R1BVSW1wbDo6V29ya0l0ZW0mJiB3b3JrSXRlbSkgeworICAgICAgICBw
cm90ZWN0ZWRUaGlzLT53b3JrUXVldWUoKS5kaXNwYXRjaChXVEZNb3ZlKHdvcmtJdGVtKSk7Cisg
ICAgfSk7CiAjZWxzZQogICAgIFJlZlB0cjxQQUw6OldlYkdQVTo6R1BVPiBiYWNraW5nOwogI2Vu
ZGlmCkBAIC05NSw2ICsxMDIsNyBAQCB2b2lkIFJlbW90ZUdQVTo6d29ya1F1ZXVlVW5pbml0aWFs
aXplKCkKICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIG1fc3RyZWFtQ29u
bmVjdGlvbiA9IG51bGxwdHI7CiAgICAgbV9vYmplY3RIZWFwLT5jbGVhcigpOworICAgIG1fYmFj
a2luZyA9IG51bGxwdHI7CiB9CiAKIHZvaWQgUmVtb3RlR1BVOjpyZXF1ZXN0QWRhcHRlcihjb25z
dCBXZWJHUFU6OlJlcXVlc3RBZGFwdGVyT3B0aW9ucyYgb3B0aW9ucywgV2ViR1BVSWRlbnRpZmll
ciBpZGVudGlmaWVyLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxS
ZXF1ZXN0QWRhcHRlclJlc3BvbnNlPiYmKT4mJiBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKaW5kZXggMDVlM2YzZjFiOGQ0Y2NkYTI1ZmQ3YjQ1NzUyNWUyM2M1YzI4MWYyMy4uM2E2NDYx
ZWIwOTlkYzlkMDA0NTNhOWUwM2IyYjAzYzhlYTllYjNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKQEAgLTk1Nyw3ICs5NTcsOSBAQCBSZWZQdHI8UEFMOjpXZWJHUFU6OkdQVT4gV2ViQ2hyb21l
Q2xpZW50OjpjcmVhdGVHUFVGb3JXZWJHUFUoKSBjb25zdAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKICAgICByZXR1cm4gUmVtb3RlR1BVUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLCBXZWJHUFU6OkRvd25jYXN0Q29udmVy
dFRvQmFja2luZ0NvbnRleHQ6OmNyZWF0ZSgpLCBXZWJHUFVJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
LCBtX3BhZ2UuZW5zdXJlUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkuZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKSk7CiAjZWxzZQotICAgIHJldHVybiBQQUw6OldlYkdQVTo6R1BVSW1wbDo6Y3Jl
YXRlKCk7CisgICAgcmV0dXJuIFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVhdGUoW10oUEFMOjpX
ZWJHUFU6OkdQVUltcGw6OldvcmtJdGVtJiYgd29ya0l0ZW0pIHsKKyAgICAgICAgY2FsbE9uTWFp
blJ1bkxvb3AoV1RGTW92ZSh3b3JrSXRlbSkpOworICAgIH0pOwogI2VuZGlmCiAjZWxzZQogICAg
IHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IGFjMzNjZTE3NWQwZDQ3Y2Nm
YTNhMjIzMTQwNjAzN2Y3MzI1NjdiNzkuLmFlMTAwZDEyNDM2M2RhMjAxY2ZhZDZiNGE4YTI0ZDNk
YWQyYTNlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTExNjMsNyArMTE2Myw5IEBAIHZvaWQg
V2ViQ2hyb21lQ2xpZW50OjpjaGFuZ2VVbml2ZXJzYWxBY2Nlc3Nab29tRm9jdXMoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgdmllCiBSZWZQdHI8UEFMOjpXZWJHUFU6OkdQVT4gV2ViQ2hyb21lQ2xp
ZW50OjpjcmVhdGVHUFVGb3JXZWJHUFUoKSBjb25zdAogewogI2lmIEhBVkUoV0VCR1BVX0lNUExF
TUVOVEFUSU9OKQotICAgIHJldHVybiBQQUw6OldlYkdQVTo6R1BVSW1wbDo6Y3JlYXRlKCk7Cisg
ICAgcmV0dXJuIFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVhdGUoW10oUEFMOjpXZWJHUFU6OkdQ
VUltcGw6OldvcmtJdGVtJiYgd29ya0l0ZW0pIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3Ao
V1RGTW92ZSh3b3JrSXRlbSkpOworICAgIH0pOwogI2Vsc2UKICAgICByZXR1cm4gbnVsbHB0cjsK
ICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454624</attachid>
            <date>2022-03-14 14:57:37 -0700</date>
            <delta_ts>2022-03-15 02:32:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237755-20220314145736.patch</filename>
            <type>text/plain</type>
            <size>16190</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCAxMTdlYzhh
ODhjZWY0ZTMyOTE3MGYzZTZmN2FiMTNiZTgxOWYyOGRhLi5lMjQ3MGVjZDk1Zjc3YzYzMzQ3NDZh
MWNkNDVhNzIxMTBjNTEyYjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAor
MjAyMi0wMy0xNCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisg
ICAgICAgIFtXZWJHUFVdIEFsbG93IGZvciBzY2hlZHVsaW5nIGFzeW5jaHJvbm91cyB3b3JrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3NTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHUFUgZG9l
c24ndCBrbm93IGhvdyB0byBzY2hlZHVsZSBhc3luY2hyb25vdXMgd29yaywgc28gdGhhdCB3aWxs
IGhhdmUgdG8gYmUgaGFuZGxlZAorICAgICAgICBieSBkZXBlbmRlbmN5IGluamVjdGlvbiBmcm9t
IHRoZSBjYWxsZXIuIFRoZSB3YXkgaXQgd29ya3MgaXMgSW5zdGFuY2UgY3JlYXRpb24gdGFrZXMK
KyAgICAgICAgYSBibG9jaywgd2hpY2ggaXMgcmV0YWluZWQuIFdoZW5ldmVyIGFzeW5jaHJvbm91
cyB3b3JrIG5lZWRzIHRvIGJlIHNjaGVkdWxlZCBvbiB0aGUKKyAgICAgICAgcmVsZXZhbnQgdGhy
ZWFkLCB0aGlzIGJsb2NrIGlzIGNhbGxlZCwgYW5kIGlzIHBhc3NlZCBhbm90aGVyIGJsb2NrIGZv
ciB0aGUgd29yayB0byBiZQorICAgICAgICBwZXJmb3JtZWQuCisKKyAgICAgICAgVGhlIEFQSSBj
b250cmFjdCBpczogY2FsbGVycyBvZiBXZWJHUFUgbXVzdCBjYWxsIGl0cyBmdW5jdGlvbnMgaW4g
YSBub24tcmFjZXkgd2F5LiBUaGUKKyAgICAgICAgc2NoZWR1bGUgZnVuY3Rpb24gd2lsbCBleGVj
dXRlIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQsIGFuZCBpdCBtdXN0IHNjaGVkdWxlIHRoZSBibG9j
aworICAgICAgICBpdCdzIHBhc3NlZCB0byBiZSBydW4gaW4gYSBub24tcmFjZXkgd2F5IHdpdGgg
cmVnYXJkcyB0byBhbGwgdGhlIG90aGVyIFdlYkdQVSBjYWxscy4KKyAgICAgICAgVGhlIHNjaGVk
dWxlIGZ1bmN0aW9uIGNhbiBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIHRoZSBhc3luY2hyb25vdXMg
dGFza3Mgd2lsbCBqdXN0IGJlCisgICAgICAgIGludGVybmFsbHkgcXVldWVkIHVwIGluc2lkZSBX
ZWJHUFUsIGFuZCB0aGVuIHVzZXJzIHdpbGwgaGF2ZSB0byBjYWxsCisgICAgICAgIHdncHVJbnN0
YW5jZVByb2Nlc3NFdmVudHMoKSBwZXJpb2RpY2FsbHkgdG8gc3luY2hyb25vdXNseSBjYWxsIHRo
ZSBxdWV1ZWQgY2FsbGJhY2tzLgorCisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUltcGwuY3BwOgorICAgICAgICAoUEFMOjpXZWJHUFU6OkdQVUltcGw6OmNyZWF0ZSk6
CisgICAgICAgICogcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBsL1dlYkdQVUltcGwuaDoKKwogMjAy
Mi0wMy0xMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZG9wdCBGQUxMQkFDS19QTEFURk9STV9OQU1FIGluIHBsYWNlIG9mIEZBTExCQUNLX1BMQVRG
T1JNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUv
Q2hhbmdlTG9nCmluZGV4IGYxYjYyM2RjYTVkNzQ2ZGFiYWZlMzg2MzJmMWYwZmZmNWQ5MGQ5ODMu
LjE3ZWViNTM0OGMyZjYxOTU5ZTJkMzkyM2JhMTdmNDJkY2ZiZDBmNjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMjItMDMtMTQgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBBbGxvdyBmb3Igc2NoZWR1bGluZyBhc3luY2hy
b25vdXMgd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJHUFUvSW5zdGFuY2UuaDoKKyAgICAgICAgKFdlYkdQVTo6SW5zdGFuY2U6OnJ1bkxv
b3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVS9JbnN0YW5jZS5tbToKKyAgICAg
ICAgKFdlYkdQVTo6SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJHUFU6Okluc3RhbmNl
OjpJbnN0YW5jZSk6CisgICAgICAgIChXZWJHUFU6Okluc3RhbmNlOjpzY2hlZHVsZVdvcmspOgor
ICAgICAgICAoV2ViR1BVOjpJbnN0YW5jZTo6ZGVmYXVsdFNjaGVkdWxlV29yayk6CisgICAgICAg
IChXZWJHUFU6Okluc3RhbmNlOjpwcm9jZXNzRXZlbnRzKToKKyAgICAgICAgKiBXZWJHUFUvV2Vi
R1BVRXh0Lmg6CisKIDIwMjItMDMtMTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRvcHQgRkFMTEJBQ0tfUExBVEZPUk1fTkFNRSBpbiBwbGFjZSBv
ZiBGQUxMQkFDS19QTEFURk9STQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxOTcwN2EyMDk0YTNlNGM0ZDc0ZTZjNWZm
ZTE5N2ZiMTdmZjllNzc0Li4xNzA3NzlmMDYzZTM4NzJlMDA5MzRjMGRkM2Q3MTk3ZDU5OTc4Yzhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAzLTE0ICBNeWxlcyBDLiBNYXhmaWVs
ZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gQWxsb3cgZm9yIHNj
aGVkdWxpbmcgYXN5bmNocm9ub3VzIHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNzc1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BV
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlR1BVOjp3b3JrUXVldWVJbml0aWFsaXplKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlR1BVOjp3b3JrUXVldWVVbmluaXRpYWxpemUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVHUFVGb3JXZWJHUFUgY29uc3Qp
OgorCiAyMDIyLTAzLTE0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2ZXJ0IHIyOTA2NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpp
bmRleCBmNGE1ODZhYmY5ZjEwMzdjZmJmZWE5ZjYyMDFiY2I0NzM3NWViZjJjLi45YzdhZDFmYmNj
ODI2NjEwY2U2MjM5ODkyNDJjOWZlMDliODEzMThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDMtMTQgIE15bGVzIEMuIE1heGZpZWxkICA8bW1h
eGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBBbGxvdyBmb3Igc2NoZWR1bGlu
ZyBhc3luY2hyb25vdXMgd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM3NzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAg
IChXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZUdQVUZvcldlYkdQVSBjb25zdCk6CisKIDIwMjItMDMt
MTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRv
cHQgRkFMTEJBQ0tfUExBVEZPUk1fTkFNRSBpbiBwbGFjZSBvZiBGQUxMQkFDS19QTEFURk9STQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9X
ZWJHUFVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0lt
cGwvV2ViR1BVSW1wbC5jcHAKaW5kZXggYmI4ZTA0ZTNhYzU4MTY3OWQ3MGNkNTY2ZWY1YjU0MTI1
MmM0ZTBmNi4uNjkzMTA1ZTZmNmU1NzgwMmZmZmE5MzkxMGNiMDUzMzRjNmU2MjMyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9ncmFwaGljcy9XZWJHUFUvSW1wbC9XZWJHUFVJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dlYkdQVS9JbXBs
L1dlYkdQVUltcGwuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiV2ViR1BVQWRhcHRl
ckltcGwuaCIKICNpbmNsdWRlICJXZWJHUFVEb3duY2FzdENvbnZlcnRUb0JhY2tpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSA8V2ViR1BVL1dlYkdQVUV4dC5oPgorI2luY2x1ZGUgPHd0Zi9CbG9ja1B0
ci5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8d3RmL2Rhcndpbi9XZWFrTGlu
a2luZy5oPgpAQCAtNDAsOSArNDEsMjEgQEAgV1RGX1dFQUtfTElOS19GT1JDRV9JTVBPUlQod2dw
dUNyZWF0ZUluc3RhbmNlKTsKIAogbmFtZXNwYWNlIFBBTDo6V2ViR1BVIHsKIAotUmVmUHRyPEdQ
VUltcGw+IEdQVUltcGw6OmNyZWF0ZSgpCitSZWZQdHI8R1BVSW1wbD4gR1BVSW1wbDo6Y3JlYXRl
KFNjaGVkdWxlV29ya0Z1bmN0aW9uJiYgc2NoZWR1bGVXb3JrRnVuY3Rpb24pCiB7Ci0gICAgV0dQ
VUluc3RhbmNlRGVzY3JpcHRvciBkZXNjcmlwdG9yID0geyBudWxscHRyIH07CisgICAgYXV0byBz
Y2hlZHVsZVdvcmtCbG9jayA9IG1ha2VCbG9ja1B0cihbc2NoZWR1bGVXb3JrRnVuY3Rpb24gPSBX
VEZNb3ZlKHNjaGVkdWxlV29ya0Z1bmN0aW9uKV0oV0dQVVdvcmtJdGVtIHdvcmtJdGVtKQorICAg
IHsKKyAgICAgICAgc2NoZWR1bGVXb3JrRnVuY3Rpb24obWFrZUJsb2NrUHRyKHdvcmtJdGVtKSk7
CisgICAgfSk7CisgICAgV0dQVUluc3RhbmNlQ29jb2FEZXNjcmlwdG9yIGNvY29hRGVzY3JpcHRv
ciB7CisgICAgICAgIHsKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxXR1BVU1R5cGU+KFdHUFVTVHlwZUV4dGVuZGVkX0luc3RhbmNlQ29jb2FEZXNjcmlwdG9y
KSwKKyAgICAgICAgfSwKKyAgICAgICAgc2NoZWR1bGVXb3JrQmxvY2suZ2V0KCksCisgICAgfTsK
KyAgICBXR1BVSW5zdGFuY2VEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSB7ICZjb2NvYURlc2NyaXB0
b3IuY2hhaW4gfTsKKwogICAgIGlmICghJndncHVDcmVhdGVJbnN0YW5jZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgYXV0byBpbnN0YW5jZSA9IHdncHVDcmVhdGVJbnN0YW5jZSgmZGVz
Y3JpcHRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2dyYXBoaWNzL1dl
YkdQVS9JbXBsL1dlYkdQVUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3Mv
V2ViR1BVL0ltcGwvV2ViR1BVSW1wbC5oCmluZGV4IGQ1NTIzZWNjYmUzNGMwODYyY2VkMTVhNmYw
YzQwMWQ4YjgxNzU1M2EuLmFjMTgzMzZhMzg3NjM4OWMzYmU2YTViMWNiOTg5ZGIxYjRjM2VlYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BVL0ltcGwv
V2ViR1BVSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvZ3JhcGhpY3MvV2ViR1BV
L0ltcGwvV2ViR1BVSW1wbC5oCkBAIC0yOSw3ICsyOSw5IEBACiAKICNpbmNsdWRlICJXZWJHUFUu
aCIKICNpbmNsdWRlIDxXZWJHUFUvV2ViR1BVLmg+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KIAogbmFtZXNw
YWNlIFBBTDo6V2ViR1BVIHsKIApAQCAtMzgsNyArNDAsOSBAQCBjbGFzcyBDb252ZXJ0VG9CYWNr
aW5nQ29udGV4dDsKIGNsYXNzIEdQVUltcGwgZmluYWwgOiBwdWJsaWMgR1BVIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQQUxfRVhQT1JUIHN0YXRpYyBSZWZQ
dHI8R1BVSW1wbD4gY3JlYXRlKCk7CisgICAgdXNpbmcgV29ya0l0ZW0gPSBGdW5jdGlvbjx2b2lk
KHZvaWQpPjsKKyAgICB1c2luZyBTY2hlZHVsZVdvcmtGdW5jdGlvbiA9IEZ1bmN0aW9uPHZvaWQo
V29ya0l0ZW0mJik+OworICAgIFBBTF9FWFBPUlQgc3RhdGljIFJlZlB0cjxHUFVJbXBsPiBjcmVh
dGUoU2NoZWR1bGVXb3JrRnVuY3Rpb24mJik7CiAKICAgICBzdGF0aWMgUmVmPEdQVUltcGw+IGNy
ZWF0ZShXR1BVSW5zdGFuY2UgaW5zdGFuY2UsIENvbnZlcnRUb0JhY2tpbmdDb250ZXh0JiBjb252
ZXJ0VG9CYWNraW5nQ29udGV4dCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9JbnN0YW5jZS5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvSW5zdGFuY2UuaAppbmRleCA1
Zjg0YWRiMzlkOGNkNjZhYTliOGZjNWQwYjI4MDliYTYyM2M5Nzg3Li5lN2Y2MzQ3ZTczY2I0M2Jk
MzMzMzRlOGZiODMyZjBlMDA4ZjM2OGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9JbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0luc3RhbmNlLmgKQEAgLTI1
LDE5ICsyNSwyMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvRGVxdWUuaD4KICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9j
Lmg+CiAjaW1wb3J0IDx3dGYvRnVuY3Rpb24uaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1w
b3J0IDx3dGYvUmVmLmg+Ci0jaW1wb3J0IDx3dGYvUmVmQ291bnRlZC5oPgogI2ltcG9ydCA8d3Rm
L1JlZlB0ci5oPgorI2ltcG9ydCA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVz
cGFjZSBXZWJHUFUgewogCiBjbGFzcyBBZGFwdGVyOwogY2xhc3MgU3VyZmFjZTsKIAotY2xhc3Mg
SW5zdGFuY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnN0YW5jZT4geworY2xhc3MgSW5zdGFuY2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW5zdGFuY2U+IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEluc3RhbmNlPiBjcmVh
dGUoY29uc3QgV0dQVUluc3RhbmNlRGVzY3JpcHRvciYpOwpAQCAtNDgsMTIgKzQ5LDIwIEBAIHB1
YmxpYzoKICAgICB2b2lkIHByb2Nlc3NFdmVudHMoKTsKICAgICB2b2lkIHJlcXVlc3RBZGFwdGVy
KGNvbnN0IFdHUFVSZXF1ZXN0QWRhcHRlck9wdGlvbnMmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoV0dQ
VVJlcXVlc3RBZGFwdGVyU3RhdHVzLCBSZWZQdHI8QWRhcHRlcj4mJiwgY29uc3QgY2hhciopPiYm
IGNhbGxiYWNrKTsKIAotICAgIE5TUnVuTG9vcCAqcnVuTG9vcCgpIGNvbnN0IHsgcmV0dXJuIG1f
cnVuTG9vcDsgfQorICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBvbiBhIGJhY2tncm91bmQgdGhy
ZWFkLgorICAgIHVzaW5nIFdvcmtJdGVtID0gRnVuY3Rpb248dm9pZCh2b2lkKT47CisgICAgdm9p
ZCBzY2hlZHVsZVdvcmsoV29ya0l0ZW0mJik7CiAKIHByaXZhdGU6Ci0gICAgSW5zdGFuY2UoTlNS
dW5Mb29wICopOworICAgIEluc3RhbmNlKFdHUFVTY2hlZHVsZVdvcmtCbG9jayk7CiAKLSAgICBO
U1J1bkxvb3AgKm1fcnVuTG9vcDsKKyAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgb24gYSBiYWNr
Z3JvdW5kIHRocmVhZC4KKyAgICB2b2lkIGRlZmF1bHRTY2hlZHVsZVdvcmsoV0dQVVdvcmtJdGVt
JiYpOworCisgICAgLy8gVGhpcyBjYW4gYmUgdXNlZCBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgor
ICAgIERlcXVlPFdHUFVXb3JrSXRlbT4gbV9wZW5kaW5nV29yayBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fbG9jayk7CisgICAgV0dQVVNjaGVkdWxlV29ya0Jsb2NrIG1fc2NoZWR1bGVXb3JrQmxvY2s7
CisgICAgTG9jayBtX2xvY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJHUFUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0luc3RhbmNlLm1tIGIvU291cmNlL1dlYkdQVS9XZWJH
UFUvSW5zdGFuY2UubW0KaW5kZXggMjRhMDU3MWRkMjM4ZDFmMzI4ZDYyYWZiYjNhMmFmZjI3ZGQ2
YWM1OC4uYTEyZmUyN2JkNDEzMzAxMGFhYWYxYjI0MjU4ZDE4ZmYyZmE4NDNhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvSW5zdGFuY2UubW0KKysrIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvSW5zdGFuY2UubW0KQEAgLTI5LDI2ICsyOSwyOSBAQAogI2ltcG9ydCAiQWRhcHRlci5o
IgogI2ltcG9ydCAiU3VyZmFjZS5oIgogI2ltcG9ydCA8Y3N0cmluZz4KKyNpbXBvcnQgPHd0Zi9C
bG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
R1BVIHsKIAotc3RhdGljIGNvbnN0ZXhwciBOU1N0cmluZyAqcnVuTG9vcE1vZGUgPSBAImtDRlJ1
bkxvb3BXZWJHUFVNb2RlIjsKLQogUmVmUHRyPEluc3RhbmNlPiBJbnN0YW5jZTo6Y3JlYXRlKGNv
bnN0IFdHUFVJbnN0YW5jZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgaWYgKGRlc2Ny
aXB0b3IubmV4dEluQ2hhaW4pCisgICAgaWYgKCFkZXNjcmlwdG9yLm5leHRJbkNoYWluKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnN0YW5jZShudWxscHRyKSk7CisKKyAgICBpZiAo
ZGVzY3JpcHRvci5uZXh0SW5DaGFpbi0+c1R5cGUgIT0gc3RhdGljX2Nhc3Q8V0dQVVNUeXBlPihX
R1BVU1R5cGVFeHRlbmRlZF9JbnN0YW5jZUNvY29hRGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgTlNSdW5Mb29wICpydW5Mb29wID0gTlNSdW5Mb29wLmN1cnJlbnRS
dW5Mb29wOwotICAgIGlmICghcnVuTG9vcCkKKyAgICBjb25zdCBXR1BVSW5zdGFuY2VDb2NvYURl
c2NyaXB0b3ImIGNvY29hRGVzY3JpcHRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgV0dQVUlu
c3RhbmNlQ29jb2FEZXNjcmlwdG9yJj4oKmRlc2NyaXB0b3IubmV4dEluQ2hhaW4pOworCisgICAg
aWYgKGNvY29hRGVzY3JpcHRvci5jaGFpbi5uZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3RhbmNlKHJ1bkxvb3ApKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbnN0YW5jZShjb2NvYURlc2NyaXB0b3Iuc2NoZWR1bGVXb3JrQmxv
Y2spKTsKIH0KIAotSW5zdGFuY2U6Okluc3RhbmNlKE5TUnVuTG9vcCAqcnVuTG9vcCkKLSAgICA6
IG1fcnVuTG9vcChydW5Mb29wKQorSW5zdGFuY2U6Okluc3RhbmNlKFdHUFVTY2hlZHVsZVdvcmtC
bG9jayBzY2hlZHVsZVdvcmtCbG9jaykKKyAgICA6IG1fc2NoZWR1bGVXb3JrQmxvY2soc2NoZWR1
bGVXb3JrQmxvY2sgPyBXVEZNb3ZlKHNjaGVkdWxlV29ya0Jsb2NrKSA6IF4oV0dQVVdvcmtJdGVt
IHdvcmtJdGVtKSB7IGRlZmF1bHRTY2hlZHVsZVdvcmsoV1RGTW92ZSh3b3JrSXRlbSkpOyB9KQog
ewogfQogCkBAIC02MSwxNyArNjQsMzAgQEAgUmVmUHRyPFN1cmZhY2U+IEluc3RhbmNlOjpjcmVh
dGVTdXJmYWNlKGNvbnN0IFdHUFVTdXJmYWNlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKICAgICBy
ZXR1cm4gU3VyZmFjZTo6Y3JlYXRlKCk7CiB9CiAKK3ZvaWQgSW5zdGFuY2U6OnNjaGVkdWxlV29y
ayhXb3JrSXRlbSYmIHdvcmtJdGVtKQoreworICAgIG1fc2NoZWR1bGVXb3JrQmxvY2sobWFrZUJs
b2NrUHRyKFdURk1vdmUod29ya0l0ZW0pKS5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zdGFuY2U6OmRl
ZmF1bHRTY2hlZHVsZVdvcmsoV0dQVVdvcmtJdGVtJiYgd29ya0l0ZW0pCit7CisgICAgTG9ja0hv
bGRlciBsb2NrSG9sZGVyKG1fbG9jayk7CisgICAgbV9wZW5kaW5nV29yay5hcHBlbmQoV1RGTW92
ZSh3b3JrSXRlbSkpOworfQorCiB2b2lkIEluc3RhbmNlOjpwcm9jZXNzRXZlbnRzKCkKIHsKLSAg
ICAvLyBOU1J1bkxvb3BzIGFyZSBub3QgdGhyZWFkLXNhZmUsIGJ1dCB0aGVuIGFnYWluIG5laXRo
ZXIgaXMgV2ViR1BVLgotICAgIC8vIElmIHRoZSBjYWxsZXIgZG9lcyBhbGwgdGhlIG5lY2Vzc2Fy
eSBzeW5jaHJvbml6YXRpb24gdGhlbXNlbHZlcywgdGhpcyB3aWxsIGJlIHNhZmUuCi0gICAgLy8g
SW4gdGhhdCBzaXR1YXRpb24sIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHdlJ3JlIHVzaW5nIHRoZSBy
dW4gbG9vcCB3ZSB3ZXJlIGNyZWF0ZWQgb24sCi0gICAgLy8gc28gdGFza3MgdGhhdCB3ZXJlIHF1
ZXVlZCB1cCBvbiBvbmUgdGhyZWFkIGFjdHVhbGx5IGdldCBleGVjdXRlZCBoZXJlLCBldmVuIGlm
Ci0gICAgLy8gdGhpcyBpcyBleGVjdXRpbmcgb24gYSBkaWZmZXJlbnQgdGhyZWFkLgotICAgIEJP
T0wgcmVzdWx0OwotICAgIGRvIHsKLSAgICAgICAgcmVzdWx0ID0gW21fcnVuTG9vcCBydW5Nb2Rl
OnJ1bkxvb3BNb2RlIGJlZm9yZURhdGU6W05TRGF0ZSBkYXRlXV07Ci0gICAgfSB3aGlsZSAocmVz
dWx0KTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBEZXF1ZTxXR1BVV29ya0l0ZW0+IGxv
Y2FsV29yazsKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrSG9sZGVyKG1f
bG9jayk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV9wZW5kaW5nV29yaywgbG9jYWxXb3JrKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAobG9jYWxXb3JrLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZm9yIChhdXRvJiB3b3JrSXRlbSA6IGxvY2FsV29yaykKKyAgICAg
ICAgICAgIHdvcmtJdGVtKCk7CisgICAgfQogfQogCiBzdGF0aWMgTlNBcnJheTxpZDxNVExEZXZp
Y2U+PiAqc29ydGVkRGV2aWNlcyhOU0FycmF5PGlkPE1UTERldmljZT4+ICpkZXZpY2VzLCBXR1BV
UG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1dlYkdQVUV4dC5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvV2ViR1BVRXh0LmgK
aW5kZXggM2RhNDAwMzIyNjVhMTg4YjhjZTE2YTM5MDEwMzQ3MzhlZDU5ZGExMS4uODJjNTEzYTgw
Mzg4NmM0M2E0MThhMDljMmY5M2VhZmU0MDZkZjg2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQ
VS9XZWJHUFUvV2ViR1BVRXh0LmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvV2ViR1BVRXh0
LmgKQEAgLTM5LDEzICszOSwyNiBAQCB0eXBlZGVmIHZvaWQgKF5XR1BVRXJyb3JCbG9ja0NhbGxi
YWNrKShXR1BVRXJyb3JUeXBlIHR5cGUsIGNoYXIgY29uc3QgKiBtZXNzYWdlKQogdHlwZWRlZiB2
b2lkICheV0dQVVF1ZXVlV29ya0RvbmVCbG9ja0NhbGxiYWNrKShXR1BVUXVldWVXb3JrRG9uZVN0
YXR1cyBzdGF0dXMpOwogdHlwZWRlZiB2b2lkICheV0dQVVJlcXVlc3RBZGFwdGVyQmxvY2tDYWxs
YmFjaykoV0dQVVJlcXVlc3RBZGFwdGVyU3RhdHVzIHN0YXR1cywgV0dQVUFkYXB0ZXIgYWRhcHRl
ciwgY2hhciBjb25zdCAqIG1lc3NhZ2UpOwogdHlwZWRlZiB2b2lkICheV0dQVVJlcXVlc3REZXZp
Y2VCbG9ja0NhbGxiYWNrKShXR1BVUmVxdWVzdERldmljZVN0YXR1cyBzdGF0dXMsIFdHUFVEZXZp
Y2UgZGV2aWNlLCBjaGFyIGNvbnN0ICogbWVzc2FnZSk7Cit0eXBlZGVmIHZvaWQgKF5XR1BVV29y
a0l0ZW0pKHZvaWQpOwordHlwZWRlZiB2b2lkICheV0dQVVNjaGVkdWxlV29ya0Jsb2NrKShXR1BV
V29ya0l0ZW0gd29ya0l0ZW0pOwogCiB0eXBlZGVmIGVudW0gV0dQVVNUeXBlRXh0ZW5kZWQgewog
ICAgIFdHUFVTVHlwZUV4dGVuZGVkX1NoYWRlck1vZHVsZURlc2NyaXB0b3JIaW50cyA9IDB4MzQ4
OTcwRjMsIC8vIFJhbmRvbQogICAgIFdHUFVTVHlwZUV4dGVuZGVkX1RleHR1cmVEZXNjcmlwdG9y
Vmlld0Zvcm1hdHMgPSAweDFENUJDNTcsIC8vIFJhbmRvbQorICAgIFdHUFVTVHlwZUV4dGVuZGVk
X0luc3RhbmNlQ29jb2FEZXNjcmlwdG9yID0gMHgxNTFCQkMwMCwgLy8gUmFuZG9tCiAgICAgV0dQ
VVNUeXBlRXh0ZW5kZWRfRm9yY2UzMiA9IDB4N0ZGRkZGRkYKIH0gV0dQVVNUeXBlRXh0ZW5kZWQ7
CiAKK3R5cGVkZWYgc3RydWN0IFdHUFVJbnN0YW5jZUNvY29hRGVzY3JpcHRvciB7CisgICAgV0dQ
VUNoYWluZWRTdHJ1Y3QgY2hhaW47CisgICAgLy8gVGhlIEFQSSBjb250cmFjdCBpczogY2FsbGVy
cyBtdXN0IGNhbGwgV2ViR1BVJ3MgZnVuY3Rpb25zIGluIGEgbm9uLXJhY2V5IHdheSB3aXRoIHJl
c3BlY3QKKyAgICAvLyB0byBlYWNoIG90aGVyLiBUaGlzIHNjaGVkdWxlV29ya0Jsb2NrIHdpbGwg
ZXhlY3V0ZSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLCBhbmQgaXQgbXVzdAorICAgIC8vIHNjaGVk
dWxlIHRoZSBibG9jayBpdCdzIHBhc3NlZCB0byBiZSBydW4gaW4gYSBub24tcmFjZXkgd2F5IHdp
dGggcmVnYXJkcyB0byBhbGwgdGhlIG90aGVyCisgICAgLy8gV2ViR1BVIGNhbGxzLiBJdCdzIGZp
bmUgdG8gcGFzcyBOVUxMIGhlcmUsIGJ1dCBpZiB5b3UgZG8sIHlvdSBtdXN0IHBlcmlvZGljYWxs
eSBjYWxsCisgICAgLy8gd2dwdUluc3RhbmNlUHJvY2Vzc0V2ZW50cygpIHRvIHN5bmNocm9ub3Vz
bHkgcnVuIHRoZSBxdWV1ZWQgY2FsbGJhY2tzLgorICAgIFdHUFVTY2hlZHVsZVdvcmtCbG9jayBz
Y2hlZHVsZVdvcmtCbG9jazsKK30gV0dQVUluc3RhbmNlQ29jb2FEZXNjcmlwdG9yOworCiB0eXBl
ZGVmIHN0cnVjdCBXR1BVU2hhZGVyTW9kdWxlQ29tcGlsYXRpb25IaW50IHsKICAgICBXR1BVUGlw
ZWxpbmVMYXlvdXQgbGF5b3V0OwogfSBXR1BVU2hhZGVyTW9kdWxlQ29tcGlsYXRpb25IaW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1dlYkdQVS9SZW1v
dGVHUFUuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1dlYkdQVS9SZW1v
dGVHUFUuY3BwCmluZGV4IDJjOWEwZjk1NWQ5ODA4OWE3NzVmZWQyOGEwZjNkYWFkZDgzZGI0YmYu
LjNlZjllYjg4Y2M3NmZhNTVmMDc0ODA4ZjU1OGJmNWM0MDNjYjFhYzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9XZWJHUFUvUmVtb3RlR1BVLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvV2ViR1BVL1JlbW90ZUdQVS5jcHAK
QEAgLTc5LDcgKzc5LDE0IEBAIHZvaWQgUmVtb3RlR1BVOjp3b3JrUXVldWVJbml0aWFsaXplKCkK
IHsKICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogI2lmIEhBVkUoV0VCR1BVX0lN
UExFTUVOVEFUSU9OKQotICAgIGF1dG8gYmFja2luZyA9IFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpj
cmVhdGUoKTsKKyAgICAvLyBCRVdBUkU6IFRoaXMgaXMgYSByZXRhaW4gY3ljbGUuCisgICAgLy8g
dGhpcyBvd25zIG1fYmFja2luZywgYnV0IG1fYmFja2luZyBjb250YWlucyBhIGNhbGxiYWNrIHdo
aWNoIGhhcyBhIHN0b25nIHJlZmVyZW5jZSB0byB0aGlzLgorICAgIC8vIFRoZSByZXRhaW4gY3lj
bGUgaXMgcmVxdWlyZWQgYmVjYXVzZSBjYWxsYmFja3MgbmVlZCB0byBleGVjdXRlIGV2ZW4gaWYg
dGhpcyBpcyBkaXNvd25lZAorICAgIC8vIChiZWNhdXNlIHRoZSBjYWxsYmFja3MgaGFuZGxlIHJl
c291cmNlIGNsZWFudXAsIGV0Yy4pLgorICAgIC8vIFRoZSByZXRhaW4gY3ljbGUgaXMgYnJva2Vu
IGluIHdvcmtRdWV1ZVVuaW5pdGlhbGl6ZSgpLgorICAgIGF1dG8gYmFja2luZyA9IFBBTDo6V2Vi
R1BVOjpHUFVJbXBsOjpjcmVhdGUoW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XShQQUw6
OldlYkdQVTo6R1BVSW1wbDo6V29ya0l0ZW0mJiB3b3JrSXRlbSkgeworICAgICAgICBwcm90ZWN0
ZWRUaGlzLT53b3JrUXVldWUoKS5kaXNwYXRjaChXVEZNb3ZlKHdvcmtJdGVtKSk7CisgICAgfSk7
CiAjZWxzZQogICAgIFJlZlB0cjxQQUw6OldlYkdQVTo6R1BVPiBiYWNraW5nOwogI2VuZGlmCkBA
IC05NSw2ICsxMDIsNyBAQCB2b2lkIFJlbW90ZUdQVTo6d29ya1F1ZXVlVW5pbml0aWFsaXplKCkK
ICAgICBhc3NlcnRJc0N1cnJlbnQod29ya1F1ZXVlKCkpOwogICAgIG1fc3RyZWFtQ29ubmVjdGlv
biA9IG51bGxwdHI7CiAgICAgbV9vYmplY3RIZWFwLT5jbGVhcigpOworICAgIG1fYmFja2luZyA9
IG51bGxwdHI7CiB9CiAKIHZvaWQgUmVtb3RlR1BVOjpyZXF1ZXN0QWRhcHRlcihjb25zdCBXZWJH
UFU6OlJlcXVlc3RBZGFwdGVyT3B0aW9ucyYgb3B0aW9ucywgV2ViR1BVSWRlbnRpZmllciBpZGVu
dGlmaWVyLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxSZXF1ZXN0
QWRhcHRlclJlc3BvbnNlPiYmKT4mJiBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5k
ZXggOGI0MzIwYTQwOGFlZDQwYmIxOWE1YzQyODEyMWU5MWY3ODA2YzFlMi4uZGFkY2VjYjhjMDgz
ZTVjZDMxY2EzYTM2NjlmMmQwMTA0OTQzNjQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAg
LTk1Nyw3ICs5NTcsOSBAQCBSZWZQdHI8UEFMOjpXZWJHUFU6OkdQVT4gV2ViQ2hyb21lQ2xpZW50
OjpjcmVhdGVHUFVGb3JXZWJHUFUoKSBjb25zdAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKICAg
ICByZXR1cm4gUmVtb3RlR1BVUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLCBXZWJHUFU6OkRvd25jYXN0Q29udmVydFRvQmFj
a2luZ0NvbnRleHQ6OmNyZWF0ZSgpLCBXZWJHUFVJZGVudGlmaWVyOjpnZW5lcmF0ZSgpLCBtX3Bh
Z2UuZW5zdXJlUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkuZW5zdXJlQmFja2VuZENyZWF0
ZWQoKSk7CiAjZWxzZQotICAgIHJldHVybiBQQUw6OldlYkdQVTo6R1BVSW1wbDo6Y3JlYXRlKCk7
CisgICAgcmV0dXJuIFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVhdGUoW10oUEFMOjpXZWJHUFU6
OkdQVUltcGw6OldvcmtJdGVtJiYgd29ya0l0ZW0pIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxv
b3AoV1RGTW92ZSh3b3JrSXRlbSkpOworICAgIH0pOwogI2VuZGlmCiAjZWxzZQogICAgIHJldHVy
biBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCmluZGV4IGFjMzNjZTE3NWQwZDQ3Y2NmYTNhMjIz
MTQwNjAzN2Y3MzI1NjdiNzkuLmFlMTAwZDEyNDM2M2RhMjAxY2ZhZDZiNGE4YTI0ZDNkYWQyYTNl
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTExNjMsNyArMTE2Myw5IEBAIHZvaWQgV2ViQ2hy
b21lQ2xpZW50OjpjaGFuZ2VVbml2ZXJzYWxBY2Nlc3Nab29tRm9jdXMoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgdmllCiBSZWZQdHI8UEFMOjpXZWJHUFU6OkdQVT4gV2ViQ2hyb21lQ2xpZW50Ojpj
cmVhdGVHUFVGb3JXZWJHUFUoKSBjb25zdAogewogI2lmIEhBVkUoV0VCR1BVX0lNUExFTUVOVEFU
SU9OKQotICAgIHJldHVybiBQQUw6OldlYkdQVTo6R1BVSW1wbDo6Y3JlYXRlKCk7CisgICAgcmV0
dXJuIFBBTDo6V2ViR1BVOjpHUFVJbXBsOjpjcmVhdGUoW10oUEFMOjpXZWJHUFU6OkdQVUltcGw6
OldvcmtJdGVtJiYgd29ya0l0ZW0pIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3AoV1RGTW92
ZSh3b3JrSXRlbSkpOworICAgIH0pOwogI2Vsc2UKICAgICByZXR1cm4gbnVsbHB0cjsKICNlbmRp
Zgo=
</data>
<flag name="review"
          id="482336"
          type_id="1"
          status="+"
          setter="kkinnunen"
    />
          </attachment>
      

    </bug>

</bugzilla>