<?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>237885</bug_id>
          
          <creation_ts>2022-03-15 05:09:43 -0700</creation_ts>
          <short_desc>Migrate use of MediaSampleGStreamer to VideoFrame in WebRTC pipelines</short_desc>
          <delta_ts>2022-03-16 10:35:21 -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>WebRTC</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>237884</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>calvaris</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1851240</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-03-15 05:09:43 -0700</bug_when>
    <thetext>Migrate use of MediaSampleGStreamer to VideoFrame in WebRTC pipelines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851428</commentid>
    <comment_count>1</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-15 12:20:40 -0700</bug_when>
    <thetext>I started a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851718</commentid>
    <comment_count>2</comment_count>
      <attachid>454819</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-16 03:30:12 -0700</bug_when>
    <thetext>Created attachment 454819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851780</commentid>
    <comment_count>3</comment_count>
      <attachid>454819</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-03-16 07:24:28 -0700</bug_when>
    <thetext>Comment on attachment 454819
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaSampleGStreamer.h:69
&gt;      MediaTime m_duration;

Should m_videoRotation and m_videoMirrored be removed as well if they are no longer used except in implement videoRotation() and videoMirrored() that could return default values?
Or maybe add a FIXME to say that they should be removed at some point?

&gt; Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp:99
&gt; +    m_sample = sample;

You could do  m_sample(WTFMove(sample)) next to m_presentationSize instead.
Then reuse m_sample instead of sample in the constructor body.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.h:46
&gt; +    RefPtr&lt;JSC::Uint8ClampedArray&gt; getRGBAImageData() const final;

Could be private?

&gt; Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.h:52
&gt; +    VideoFrameGStreamer(const GRefPtr&lt;GstSample&gt;&amp;, const MediaTime&amp; presentationTime, VideoRotation = VideoRotation::None);

Could be private?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851788</commentid>
    <comment_count>4</comment_count>
      <attachid>454819</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-16 07:38:47 -0700</bug_when>
    <thetext>Comment on attachment 454819
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaSampleGStreamer.h:69
&gt;&gt;      MediaTime m_duration;
&gt; 
&gt; Should m_videoRotation and m_videoMirrored be removed as well if they are no longer used except in implement videoRotation() and videoMirrored() that could return default values?
&gt; Or maybe add a FIXME to say that they should be removed at some point?

Ah yes, I forgot to remove those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851800</commentid>
    <comment_count>5</comment_count>
      <attachid>454819</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-03-16 08:04:46 -0700</bug_when>
    <thetext>Comment on attachment 454819
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaSampleGStreamer.cpp:84
&gt; +Ref&lt;MediaSampleGStreamer&gt; MediaSampleGStreamer::createFakeSample(GstCaps*, MediaTime pts, MediaTime dts, MediaTime duration, const FloatSize&amp; presentationSize, const AtomString&amp; trackId)

Can we make the MediaTimes const &amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851837</commentid>
    <comment_count>6</comment_count>
      <attachid>454842</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-16 08:57:46 -0700</bug_when>
    <thetext>Created attachment 454842
[fast-cq] Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851876</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-16 10:34:14 -0700</bug_when>
    <thetext>Committed r291357 (248490@main): &lt;https://commits.webkit.org/248490@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454842.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851877</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-16 10:35:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/90378933&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454819</attachid>
            <date>2022-03-16 03:30:12 -0700</date>
            <delta_ts>2022-03-16 08:57:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237885-20220316033010.patch</filename>
            <type>text/plain</type>
            <size>38190</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQxMmYwM2Q0M2ZmYWNk
ZDJjMDZlMTI3OWFiNzUxNDU4NDYwZDdiMC4uMGU5YTkxNDQ0NTlhMjFkYjQ3MjE0YzQzYmJhZTVi
MjVkOWEwOGU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIyLTAzLTE2ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNaWdyYXRlIHVz
ZSBvZiBNZWRpYVNhbXBsZUdTdHJlYW1lciB0byBWaWRlb0ZyYW1lIGluIFdlYlJUQyBwaXBlbGlu
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzg4
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJv
ZHVjaW5nIFZpZGVvRnJhbWVHU3RyZWFtZXIsIG1lYW50IHRvIGJlIHVzZWQgZnJvbSBtZWRpYXN0
cmVhbSBwcm9kdWNlcnMgYW5kIGNvbnN1bWVycy4KKyAgICAgICAgVGhlIFZpZGVvRnJhbWUgaW50
ZXJuYWxseSBtYW5hZ2VzIGEgR3N0U2FtcGxlIHN0b3JpbmcgdGhlIGFjdHVhbCB2aWRlbyBmcmFt
ZSBkYXRhIHRoYXQgY2FuCisgICAgICAgIGJlIHBhc3NlZCBhcm91bmQgYmV0d2VlbiBSZWFsdGlt
ZU1lZGlhU291cmNlcyBhbmQgdGhlIG1lZGlhc3RyZWFtIEdTdHJlYW1lciBzb3VyY2UgZWxlbWVu
dC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0cy4KKworICAgICAg
ICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OnRvTWVkaWFTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1l
ci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1w
bGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVHU3RyZWFtZXI6
Ok1lZGlhU2FtcGxlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlR1N0
cmVhbWVyOjpjcmVhdGVGYWtlU2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxl
R1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVNhbXBsZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21CdWZmZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVHU3RyZWFtZXI6OmdldFJHQkFJbWFnZURhdGEg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNhbXBsZUdTdHJlYW1lci5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVHU3Ry
ZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUdTdHJlYW1lcjo6
Y3JlYXRlV3JhcHBlZFNhbXBsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNh
bXBsZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2VTYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb0ZyYW1lR1N0cmVhbWVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0ZyYW1lR1N0cmVhbWVyOjpjcmVhdGVGcm9tUGl4ZWxC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9GcmFtZUdTdHJlYW1lcjo6VmlkZW9GcmFt
ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0ZyYW1lR1N0cmVhbWVyOjpnZXRS
R0JBSW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9GcmFtZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGFpbnRDb21wb3NpdGVk
UmVzdWx0c1RvTWVkaWFTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NO
ZXdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6
Om5ld1NhbXBsZUNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVhbWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVhbWVyOjp1
cGRhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6
T25GcmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJl
YW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDOjp2aWRlb1NhbXBs
ZUF2YWlsYWJsZSk6CisKIDIwMjItMDMtMTUgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyODI3MzcpOiBgdGV4dC1zaGFkb3dgIGlzIGNsaXBw
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggZWQxMTNm
NzY2NzYyODJhMGJjZWM2MzA1YjkwODA5MzFjODNkNzlkZC4uNzk1ZTY2NjNhZjc1Njk5MzgzOGZl
YzQwOTBiOGUzNmJhZTU0NTJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKQEAgLTk0LDcgKzk0LDcgQEAKICNlbmRpZgogCiAjaWYgVVNFKEdTVFJFQU1FUikK
LSNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVH
U3RyZWFtZXIuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC04MDAsNyArODAw
LDcgQEAgUmVmUHRyPE1lZGlhU2FtcGxlPiBIVE1MQ2FudmFzRWxlbWVudDo6dG9NZWRpYVNhbXBs
ZSgpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgcmV0dXJuIE1lZGlhU2FtcGxlQVZGT2JqQzo6
Y3JlYXRlRnJvbVBpeGVsQnVmZmVyKFdURk1vdmUoKnBpeGVsQnVmZmVyKSk7CiAjZWxpZiBVU0Uo
R1NUUkVBTUVSKQotICAgIHJldHVybiBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2VT
YW1wbGUoV1RGTW92ZSgqcGl4ZWxCdWZmZXIpKTsKKyAgICByZXR1cm4gVmlkZW9GcmFtZUdTdHJl
YW1lcjo6Y3JlYXRlRnJvbVBpeGVsQnVmZmVyKFdURk1vdmUoKnBpeGVsQnVmZmVyKSk7CiAjZW5k
aWYKICNlbHNlCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3Ry
ZWFtZXIuY21ha2UKaW5kZXggMjQxMzA2MWQ4ZjM1MmM3OGEzNjMzZjc5MDE3YjNhMWU3NDg3ZTBi
My4uYjNkY2NjYmQ5NzRjODc3NzFmYWNmNTlhMzk2ZDRmNDA4MTYwY2M1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMjcsNiArMjcsNyBAQCBpZiAoRU5BQkxF
X1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9UZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9UZXh0U2lua0dTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb0ZyYW1lR1N0cmVhbWVyLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9GcmFtZU1ldGFkYXRhR1N0cmVh
bWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNw
cAppbmRleCBmM2EzMTczOWEwNjM1MDcxODY0OGFhYjY2NWJjYmZmMjIzZjc4ZTI0Li44MTFiYmU5
MjAzNDIyNzhhOTUzNmY2OWVmMjk2N2M1Yjk2ZTAzZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNh
bXBsZUdTdHJlYW1lci5jcHAKQEAgLTIzLDExOCArMjMsMjIgQEAKICNpbmNsdWRlICJNZWRpYVNh
bXBsZUdTdHJlYW1lci5oIgogCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCi0jaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJWaWRlb0ZyYW1lTWV0YWRhdGFHU3RyZWFtZXIu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxhbGdvcml0aG0+CiAK
ICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotTWVkaWFTYW1wbGVHU3RyZWFtZXI6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyKEdSZWZQdHI8
R3N0U2FtcGxlPiYmIHNhbXBsZSwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBj
b25zdCBBdG9tU3RyaW5nJiB0cmFja0lkLCBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRpb24sIGJv
b2wgdmlkZW9NaXJyb3JlZCwgc3RkOjpvcHRpb25hbDxWaWRlb0ZyYW1lVGltZU1ldGFkYXRhPiYm
IG1ldGFkYXRhKQorTWVkaWFTYW1wbGVHU3RyZWFtZXI6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyKEdS
ZWZQdHI8R3N0U2FtcGxlPiYmIHNhbXBsZSwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25T
aXplLCBjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQogICAgIDogbV9wdHMoTWVkaWFUaW1lOjp6
ZXJvVGltZSgpKQogICAgICwgbV9kdHMoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQogICAgICwgbV9k
dXJhdGlvbihNZWRpYVRpbWU6Onplcm9UaW1lKCkpCiAgICAgLCBtX3RyYWNrSWQodHJhY2tJZCkK
ICAgICAsIG1fcHJlc2VudGF0aW9uU2l6ZShwcmVzZW50YXRpb25TaXplKQotICAgICwgbV92aWRl
b1JvdGF0aW9uKHZpZGVvUm90YXRpb24pCi0gICAgLCBtX3ZpZGVvTWlycm9yZWQodmlkZW9NaXJy
b3JlZCkKIHsKICAgICBBU1NFUlQoc2FtcGxlKTsKLSAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdz
dF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJ1
ZmZlcik7Ci0KLSAgICBpZiAobWV0YWRhdGEpCi0gICAgICAgIGJ1ZmZlciA9IHdlYmtpdEdzdEJ1
ZmZlclNldFZpZGVvRnJhbWVUaW1lTWV0YWRhdGEoYnVmZmVyLCBXVEZNb3ZlKG1ldGFkYXRhKSk7
Ci0KICAgICBtX3NhbXBsZSA9IHNhbXBsZTsKLSAgICBpbml0aWFsaXplRnJvbUJ1ZmZlcigpOwot
fQotCi1NZWRpYVNhbXBsZUdTdHJlYW1lcjo6TWVkaWFTYW1wbGVHU3RyZWFtZXIoY29uc3QgRmxv
YXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQotICAg
IDogbV9wdHMoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQotICAgICwgbV9kdHMoTWVkaWFUaW1lOjp6
ZXJvVGltZSgpKQotICAgICwgbV9kdXJhdGlvbihNZWRpYVRpbWU6Onplcm9UaW1lKCkpCi0gICAg
LCBtX3RyYWNrSWQodHJhY2tJZCkKLSAgICAsIG1fcHJlc2VudGF0aW9uU2l6ZShwcmVzZW50YXRp
b25TaXplKQotewotfQotCi1NZWRpYVNhbXBsZUdTdHJlYW1lcjo6TWVkaWFTYW1wbGVHU3RyZWFt
ZXIoY29uc3QgR1JlZlB0cjxHc3RTYW1wbGU+JiBzYW1wbGUsIFZpZGVvUm90YXRpb24gdmlkZW9S
b3RhdGlvbikKLSAgICA6IG1fc2FtcGxlKHNhbXBsZSkKLSAgICAsIG1fdmlkZW9Sb3RhdGlvbih2
aWRlb1JvdGF0aW9uKQotewotICAgIGluaXRpYWxpemVGcm9tQnVmZmVyKCk7Ci19Ci0KLVJlZjxN
ZWRpYVNhbXBsZUdTdHJlYW1lcj4gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUZha2VTYW1w
bGUoR3N0Q2FwcyosIE1lZGlhVGltZSBwdHMsIE1lZGlhVGltZSBkdHMsIE1lZGlhVGltZSBkdXJh
dGlvbiwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9tU3RyaW5n
JiB0cmFja0lkKQotewotICAgIE1lZGlhU2FtcGxlR1N0cmVhbWVyKiBnc3RyZWFtZXJNZWRpYVNh
bXBsZSA9IG5ldyBNZWRpYVNhbXBsZUdTdHJlYW1lcihwcmVzZW50YXRpb25TaXplLCB0cmFja0lk
KTsKLSAgICBnc3RyZWFtZXJNZWRpYVNhbXBsZS0+bV9wdHMgPSBwdHM7Ci0gICAgZ3N0cmVhbWVy
TWVkaWFTYW1wbGUtPm1fZHRzID0gZHRzOwotICAgIGdzdHJlYW1lck1lZGlhU2FtcGxlLT5tX2R1
cmF0aW9uID0gZHVyYXRpb247Ci0gICAgZ3N0cmVhbWVyTWVkaWFTYW1wbGUtPm1fZmxhZ3MgPSBN
ZWRpYVNhbXBsZTo6SXNOb25EaXNwbGF5aW5nOwotICAgIHJldHVybiBhZG9wdFJlZigqZ3N0cmVh
bWVyTWVkaWFTYW1wbGUpOwotfQotCi1SZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IE1lZGlhU2Ft
cGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZShQaXhlbEJ1ZmZlciYmIHBpeGVsQnVmZmVy
LCBjb25zdCBJbnRTaXplJiBkZXN0aW5hdGlvblNpemUsIGRvdWJsZSBmcmFtZVJhdGUsIFZpZGVv
Um90YXRpb24gdmlkZW9Sb3RhdGlvbiwgYm9vbCB2aWRlb01pcnJvcmVkLCBzdGQ6Om9wdGlvbmFs
PFZpZGVvRnJhbWVUaW1lTWV0YWRhdGE+JiYgbWV0YWRhdGEpCi17Ci0gICAgZW5zdXJlR1N0cmVh
bWVySW5pdGlhbGl6ZWQoKTsKLQotICAgIGF1dG8gc2l6ZSA9IHBpeGVsQnVmZmVyLnNpemUoKTsK
LQotICAgIGF1dG8gZGF0YSA9IHBpeGVsQnVmZmVyLnRha2VEYXRhKCk7Ci0gICAgYXV0byBzaXpl
SW5CeXRlcyA9IGRhdGEtPmJ5dGVMZW5ndGgoKTsKLSAgICBhdXRvIGRhdGFCYXNlQWRkcmVzcyA9
IGRhdGEtPmRhdGEoKTsKLSAgICBhdXRvIGxlYWtlZERhdGEgPSAmZGF0YS5sZWFrUmVmKCk7Ci0K
LSAgICBhdXRvIGJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwo
R1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBkYXRhQmFzZUFkZHJlc3MsIHNpemVJbkJ5dGVzLCAw
LCBzaXplSW5CeXRlcywgbGVha2VkRGF0YSwgW10oZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8SlNDOjpVaW50OENsYW1wZWRBcnJheSo+KHVzZXJEYXRhKS0+ZGVyZWYo
KTsKLSAgICB9KSk7Ci0KLSAgICBhdXRvIHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGF1dG8g
aGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBnc3RfYnVmZmVyX2FkZF92aWRlb19tZXRhKGJ1
ZmZlci5nZXQoKSwgR1NUX1ZJREVPX0ZSQU1FX0ZMQUdfTk9ORSwgR1NUX1ZJREVPX0ZPUk1BVF9C
R1JBLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIGlmIChtZXRhZGF0YSkKLSAgICAgICAgd2Via2l0
R3N0QnVmZmVyU2V0VmlkZW9GcmFtZVRpbWVNZXRhZGF0YShidWZmZXIuZ2V0KCksICptZXRhZGF0
YSk7Ci0KLSAgICBpbnQgZnJhbWVSYXRlTnVtZXJhdG9yLCBmcmFtZVJhdGVEZW5vbWluYXRvcjsK
LSAgICBnc3RfdXRpbF9kb3VibGVfdG9fZnJhY3Rpb24oZnJhbWVSYXRlLCAmZnJhbWVSYXRlTnVt
ZXJhdG9yLCAmZnJhbWVSYXRlRGVub21pbmF0b3IpOwotCi0gICAgYXV0byBjYXBzID0gYWRvcHRH
UmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwgImZvcm1hdCIsIEdfVFlQRV9T
VFJJTkcsICJCR1JBIiwgIndpZHRoIiwgR19UWVBFX0lOVCwgd2lkdGgsCi0gICAgICAgICJoZWln
aHQiLCBHX1RZUEVfSU5ULCBoZWlnaHQsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwg
ZnJhbWVSYXRlTnVtZXJhdG9yLCBmcmFtZVJhdGVEZW5vbWluYXRvciwgbnVsbHB0cikpOwotICAg
IGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9zYW1wbGVfbmV3KGJ1ZmZlci5nZXQoKSwgY2Fw
cy5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwotCi0gICAgLy8gT3B0aW9uYWxseSByZXNpemUg
dGhlIHZpZGVvIGZyYW1lIHRvIGZpdCBkZXN0aW5hdGlvblNpemUuIFRoaXMgY29kZSBwYXRoIGlz
IHVzZWQgbW9zdGx5IGJ5Ci0gICAgLy8gdGhlIG1vY2sgcmVhbHRpbWUgdmlkZW8gc291cmNlIHdo
ZW4gdGhlIGdVTSBjb25zdHJhaW50cyBzcGVjaWZpY2FsbHkgcmVxdWlyZWQgZXhhY3Qgd2lkdGgK
LSAgICAvLyBhbmQvb3IgaGVpZ2h0IHZhbHVlcy4KLSAgICBpZiAoIWRlc3RpbmF0aW9uU2l6ZS5p
c1plcm8oKSkgewotICAgICAgICBHc3RWaWRlb0luZm8gaW5wdXRJbmZvOwotICAgICAgICBnc3Rf
dmlkZW9faW5mb19mcm9tX2NhcHMoJmlucHV0SW5mbywgY2Fwcy5nZXQoKSk7Ci0KLSAgICAgICAg
d2lkdGggPSBkZXN0aW5hdGlvblNpemUud2lkdGgoKTsKLSAgICAgICAgaGVpZ2h0ID0gZGVzdGlu
YXRpb25TaXplLmhlaWdodCgpOwotICAgICAgICBhdXRvIG91dHB1dENhcHMgPSBhZG9wdEdSZWYo
Z3N0X2NhcHNfbmV3X3NpbXBsZSgidmlkZW8veC1yYXciLCAiZm9ybWF0IiwgR19UWVBFX1NUUklO
RywgIkJHUkEiLCAid2lkdGgiLCBHX1RZUEVfSU5ULCB3aWR0aCwKLSAgICAgICAgICAgICJoZWln
aHQiLCBHX1RZUEVfSU5ULCBoZWlnaHQsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwg
ZnJhbWVSYXRlTnVtZXJhdG9yLCBmcmFtZVJhdGVEZW5vbWluYXRvciwgbnVsbHB0cikpOwotICAg
ICAgICBHc3RWaWRlb0luZm8gb3V0cHV0SW5mbzsKLSAgICAgICAgZ3N0X3ZpZGVvX2luZm9fZnJv
bV9jYXBzKCZvdXRwdXRJbmZvLCBvdXRwdXRDYXBzLmdldCgpKTsKLQotICAgICAgICBhdXRvIG91
dHB1dEJ1ZmZlciA9IGFkb3B0R1JlZihnc3RfYnVmZmVyX25ld19hbGxvY2F0ZShudWxscHRyLCBH
U1RfVklERU9fSU5GT19TSVpFKCZvdXRwdXRJbmZvKSwgbnVsbHB0cikpOwotICAgICAgICBnc3Rf
YnVmZmVyX2FkZF92aWRlb19tZXRhKG91dHB1dEJ1ZmZlci5nZXQoKSwgR1NUX1ZJREVPX0ZSQU1F
X0ZMQUdfTk9ORSwgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgR1VuaXF1ZVB0cjxHc3RWaWRlb0NvbnZlcnRlcj4gY29udmVydGVyKGdzdF92aWRlb19jb252
ZXJ0ZXJfbmV3KCZpbnB1dEluZm8sICZvdXRwdXRJbmZvLCBudWxscHRyKSk7Ci0gICAgICAgIEdz
dE1hcHBlZEZyYW1lIGlucHV0RnJhbWUoZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZS5nZXQo
KSksIGlucHV0SW5mbywgR1NUX01BUF9SRUFEKTsKLSAgICAgICAgR3N0TWFwcGVkRnJhbWUgb3V0
cHV0RnJhbWUob3V0cHV0QnVmZmVyLmdldCgpLCBvdXRwdXRJbmZvLCBHU1RfTUFQX1dSSVRFKTsK
LSAgICAgICAgZ3N0X3ZpZGVvX2NvbnZlcnRlcl9mcmFtZShjb252ZXJ0ZXIuZ2V0KCksIGlucHV0
RnJhbWUuZ2V0KCksIG91dHB1dEZyYW1lLmdldCgpKTsKLSAgICAgICAgc2FtcGxlID0gYWRvcHRH
UmVmKGdzdF9zYW1wbGVfbmV3KG91dHB1dEJ1ZmZlci5nZXQoKSwgb3V0cHV0Q2Fwcy5nZXQoKSwg
bnVsbHB0ciwgbnVsbHB0cikpOwotICAgIH0KLSAgICByZXR1cm4gY3JlYXRlKFdURk1vdmUoc2Ft
cGxlKSwgRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCB7IH0sIHZpZGVvUm90YXRpb24sIHZpZGVv
TWlycm9yZWQpOwotfQotCi12b2lkIE1lZGlhU2FtcGxlR1N0cmVhbWVyOjppbml0aWFsaXplRnJv
bUJ1ZmZlcigpCi17CiAgICAgY29uc3QgR3N0Q2xvY2tUaW1lIG1pbmltdW1EdXJhdGlvbiA9IDEw
MDA7IC8vIDEgdXMKICAgICBhdXRvKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIobV9z
YW1wbGUuZ2V0KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJ1ZmZlcik7CkBAIC0xNjgsMzggKzcy
LDIzIEBAIHZvaWQgTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmluaXRpYWxpemVGcm9tQnVmZmVyKCkK
ICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFncz4o
bV9mbGFncyB8IE1lZGlhU2FtcGxlOjpJc05vbkRpc3BsYXlpbmcpOwogfQogCi1SZWZQdHI8SlND
OjpVaW50OENsYW1wZWRBcnJheT4gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmdldFJHQkFJbWFnZURh
dGEoKSBjb25zdAorTWVkaWFTYW1wbGVHU3RyZWFtZXI6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyKGNv
bnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJ
ZCkKKyAgICA6IG1fcHRzKE1lZGlhVGltZTo6emVyb1RpbWUoKSkKKyAgICAsIG1fZHRzKE1lZGlh
VGltZTo6emVyb1RpbWUoKSkKKyAgICAsIG1fZHVyYXRpb24oTWVkaWFUaW1lOjp6ZXJvVGltZSgp
KQorICAgICwgbV90cmFja0lkKHRyYWNrSWQpCisgICAgLCBtX3ByZXNlbnRhdGlvblNpemUocHJl
c2VudGF0aW9uU2l6ZSkKIHsKLSAgICBhdXRvKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2Fwcyht
X3NhbXBsZS5nZXQoKSk7Ci0gICAgR3N0VmlkZW9JbmZvIGlucHV0SW5mbzsKLSAgICBpZiAoIWdz
dF92aWRlb19pbmZvX2Zyb21fY2FwcygmaW5wdXRJbmZvLCBjYXBzKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAvLyBXZSBjb3VsZCBjaGVjayB0aGUgaW5wdXQgZm9ybWF0IGlzIFJH
QkEgYmVmb3JlIGF0dGVtcHRpbmcgYSBjb252ZXJzaW9uLCBidXQgaXQgaXMgdmVyeQotICAgIC8v
IHVubGlrZWx5IHRvIHBheSBvZmYuIFRoZSBpbnB1dCBmb3JtYXQgaXMgbGlrZWx5IHRvIGJlIEJH
UkEgKHdoZW4gdGhlIHNhbXBsZXMgYXJlIGNyZWF0ZWQgYXMgYQotICAgIC8vIHJlc3VsdCBvZiBt
ZWRpYXN0cmVhbSBjYXB0dXJlU3RyZWFtKSBvciBzb21lIFlVViBmb3JtYXQgaWYgdGhlIHNhbXBs
ZSBpcyBmcm9tIGEgdmlkZW8gY2FwdHVyZQotICAgIC8vIGRldmljZS4gVGhpcyBtZXRob2QgaXMg
Y2FsbGVkIG9ubHkgYnkgaW50ZXJuYWxzIGR1cmluZyBsYXlvdXQgdGVzdHMsIGl0IGlzIHRodXMg
bm90IGNyaXRpY2FsCi0gICAgLy8gdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGguCi0KLSAgICBh
dXRvIG91dHB1dENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfY29weShjYXBzKSk7Ci0gICAgZ3N0
X2NhcHNfc2V0X3NpbXBsZShvdXRwdXRDYXBzLmdldCgpLCAiZm9ybWF0IiwgR19UWVBFX1NUUklO
RywgIlJHQkEiLCBudWxscHRyKTsKLQotICAgIEdzdFZpZGVvSW5mbyBvdXRwdXRJbmZvOwotICAg
IGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZvdXRwdXRJbmZvLCBvdXRwdXRDYXBzLmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpbnQgd2lkdGggPSBHU1RfVklE
RU9fSU5GT19XSURUSCgmaW5wdXRJbmZvKTsKLSAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lO
Rk9fSEVJR0hUKCZpbnB1dEluZm8pOwotICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGggPSBHU1RfVklE
RU9fSU5GT19TSVpFKCZpbnB1dEluZm8pOwotICAgIGF1dG8gYnVmZmVyU3RvcmFnZSA9IEpTQzo6
QXJyYXlCdWZmZXI6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCwgNCk7Ci0gICAgYXV0byBvdXRwdXRC
dWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsKEdTVF9NRU1PUllf
RkxBR19OT19TSEFSRSwgYnVmZmVyU3RvcmFnZS0+ZGF0YSgpLCBieXRlTGVuZ3RoLCAwLCBieXRl
TGVuZ3RoLCBudWxscHRyLCBbXShncG9pbnRlcikgeyB9KSk7Ci0gICAgZ3N0X2J1ZmZlcl9hZGRf
dmlkZW9fbWV0YShvdXRwdXRCdWZmZXIuZ2V0KCksIEdTVF9WSURFT19GUkFNRV9GTEFHX05PTkUs
IEdTVF9WSURFT19GT1JNQVRfUkdCQSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgR3N0TWFwcGVkRnJh
bWUgb3V0cHV0RnJhbWUob3V0cHV0QnVmZmVyLmdldCgpLCBvdXRwdXRJbmZvLCBHU1RfTUFQX1dS
SVRFKTsKK30KIAotICAgIEdVbmlxdWVQdHI8R3N0VmlkZW9Db252ZXJ0ZXI+IGNvbnZlcnRlcihn
c3RfdmlkZW9fY29udmVydGVyX25ldygmaW5wdXRJbmZvLCAmb3V0cHV0SW5mbywgbnVsbHB0cikp
OwotICAgIEdzdE1hcHBlZEZyYW1lIGlucHV0RnJhbWUoZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKG1f
c2FtcGxlLmdldCgpKSwgaW5wdXRJbmZvLCBHU1RfTUFQX1JFQUQpOwotICAgIGdzdF92aWRlb19j
b252ZXJ0ZXJfZnJhbWUoY29udmVydGVyLmdldCgpLCBpbnB1dEZyYW1lLmdldCgpLCBvdXRwdXRG
cmFtZS5nZXQoKSk7Ci0gICAgcmV0dXJuIEpTQzo6VWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0
ZShXVEZNb3ZlKGJ1ZmZlclN0b3JhZ2UpLCAwLCBieXRlTGVuZ3RoKTsKK1JlZjxNZWRpYVNhbXBs
ZUdTdHJlYW1lcj4gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUZha2VTYW1wbGUoR3N0Q2Fw
cyosIE1lZGlhVGltZSBwdHMsIE1lZGlhVGltZSBkdHMsIE1lZGlhVGltZSBkdXJhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lk
KQoreworICAgIE1lZGlhU2FtcGxlR1N0cmVhbWVyKiBnc3RyZWFtZXJNZWRpYVNhbXBsZSA9IG5l
dyBNZWRpYVNhbXBsZUdTdHJlYW1lcihwcmVzZW50YXRpb25TaXplLCB0cmFja0lkKTsKKyAgICBn
c3RyZWFtZXJNZWRpYVNhbXBsZS0+bV9wdHMgPSBwdHM7CisgICAgZ3N0cmVhbWVyTWVkaWFTYW1w
bGUtPm1fZHRzID0gZHRzOworICAgIGdzdHJlYW1lck1lZGlhU2FtcGxlLT5tX2R1cmF0aW9uID0g
ZHVyYXRpb247CisgICAgZ3N0cmVhbWVyTWVkaWFTYW1wbGUtPm1fZmxhZ3MgPSBNZWRpYVNhbXBs
ZTo6SXNOb25EaXNwbGF5aW5nOworICAgIHJldHVybiBhZG9wdFJlZigqZ3N0cmVhbWVyTWVkaWFT
YW1wbGUpOwogfQogCiB2b2lkIE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpleHRlbmRUb1RoZUJlZ2lu
bmluZygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oCmluZGV4IDUwZTY4YmVkYTUz
MzQ0MTVlNDA5YWIyZDAxNzk2NzJlMTNmZjUyZWUuLmNlZjVkMWQ3Nzc0NjcwMmUwZThkY2FiZGY4
Y2M5MTVlNzJlMzBjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oCkBAIC0z
MSwyMiArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQaXhlbEJ1ZmZl
cjsKLQogY2xhc3MgTWVkaWFTYW1wbGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IGNyZWF0ZShHUmVm
UHRyPEdzdFNhbXBsZT4mJiBzYW1wbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6
ZSwgY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgVmlkZW9Sb3RhdGlvbiB2aWRlb1JvdGF0aW9u
ID0gVmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCB2aWRlb01pcnJvcmVkID0gZmFsc2UsIHN0ZDo6
b3B0aW9uYWw8VmlkZW9GcmFtZVRpbWVNZXRhZGF0YT4mJiBtZXRhZGF0YSA9IHN0ZDo6bnVsbG9w
dCkKKyAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGUoR1JlZlB0cjxH
c3RTYW1wbGU+JiYgc2FtcGxlLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRhdGlvblNpemUsIGNv
bnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBNZWRpYVNhbXBsZUdTdHJlYW1lcihXVEZNb3ZlKHNhbXBsZSksIHByZXNlbnRhdGlvblNp
emUsIHRyYWNrSWQsIHZpZGVvUm90YXRpb24sIHZpZGVvTWlycm9yZWQsIFdURk1vdmUobWV0YWRh
dGEpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3Jl
YXRlV3JhcHBlZFNhbXBsZShjb25zdCBHUmVmUHRyPEdzdFNhbXBsZT4mIHNhbXBsZSwgVmlkZW9S
b3RhdGlvbiB2aWRlb1JvdGF0aW9uID0gVmlkZW9Sb3RhdGlvbjo6Tm9uZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxlR1N0cmVhbWVyKHNhbXBsZSwgdmlk
ZW9Sb3RhdGlvbikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUdT
dHJlYW1lcihXVEZNb3ZlKHNhbXBsZSksIHByZXNlbnRhdGlvblNpemUsIHRyYWNrSWQpKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGVGYWtlU2Ft
cGxlKEdzdENhcHMqLCBNZWRpYVRpbWUgcHRzLCBNZWRpYVRpbWUgZHRzLCBNZWRpYVRpbWUgZHVy
YXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbVN0cmlu
ZyYgdHJhY2tJZCk7Ci0gICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3JlYXRl
SW1hZ2VTYW1wbGUoUGl4ZWxCdWZmZXImJiwgY29uc3QgSW50U2l6ZSYgZGVzdGluYXRpb25TaXpl
ID0geyB9LCBkb3VibGUgZnJhbWVSYXRlID0gMSwgVmlkZW9Sb3RhdGlvbiB2aWRlb1JvdGF0aW9u
ID0gVmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCB2aWRlb01pcnJvcmVkID0gZmFsc2UsIHN0ZDo6
b3B0aW9uYWw8VmlkZW9GcmFtZVRpbWVNZXRhZGF0YT4mJiBtZXRhZGF0YSA9IHN0ZDo6bnVsbG9w
dCk7CiAKICAgICB2b2lkIGV4dGVuZFRvVGhlQmVnaW5uaW5nKCk7CiAgICAgTWVkaWFUaW1lIHBy
ZXNlbnRhdGlvblRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3B0czsgfQpAQCAtNjIs
MjAgKzU0LDE2IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlOjpUeXBlIHBsYXRmb3JtU2FtcGxl
VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtU2FtcGxlOjpHU3RyZWFtZXJT
YW1wbGVUeXBlOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IGdldFJHQkFJbWFnZURhdGEoKSBj
b25zdCBmaW5hbDsKICAgICBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRpb24oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3ZpZGVvUm90YXRpb247IH0KICAgICBib29sIHZpZGVvTWlycm9yZWQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvTWlycm9yZWQ7IH0KIAogcHJvdGVjdGVk
OgotICAgIE1lZGlhU2FtcGxlR1N0cmVhbWVyKEdSZWZQdHI8R3N0U2FtcGxlPiYmLCBjb25zdCBG
bG9hdFNpemUmIHByZXNlbnRhdGlvblNpemUsIGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQsIFZp
ZGVvUm90YXRpb24gPSBWaWRlb1JvdGF0aW9uOjpOb25lLCBib29sIHZpZGVvTWlycm9yZWQgPSBm
YWxzZSwgc3RkOjpvcHRpb25hbDxWaWRlb0ZyYW1lVGltZU1ldGFkYXRhPiYmID0gc3RkOjpudWxs
b3B0KTsKLSAgICBNZWRpYVNhbXBsZUdTdHJlYW1lcihjb25zdCBHUmVmUHRyPEdzdFNhbXBsZT4m
LCBWaWRlb1JvdGF0aW9uID0gVmlkZW9Sb3RhdGlvbjo6Tm9uZSk7CisgICAgTWVkaWFTYW1wbGVH
U3RyZWFtZXIoR1JlZlB0cjxHc3RTYW1wbGU+JiYsIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0
aW9uU2l6ZSwgY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCk7CiAgICAgdmlydHVhbCB+TWVkaWFT
YW1wbGVHU3RyZWFtZXIoKSA9IGRlZmF1bHQ7CiAKIHByaXZhdGU6CiAgICAgTWVkaWFTYW1wbGVH
U3RyZWFtZXIoY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9tU3Ry
aW5nJiB0cmFja0lkKTsKIAotICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21CdWZmZXIoKTsKLQogICAg
IE1lZGlhVGltZSBtX3B0czsKICAgICBNZWRpYVRpbWUgbV9kdHM7CiAgICAgTWVkaWFUaW1lIG1f
ZHVyYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVmlkZW9GcmFtZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9GcmFtZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTNlOGFlMDM0YjlmZTk0NGY1NDVlMDY4MTAwNzVhYjJiZDU3MmJlMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb0ZyYW1l
R1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZUdT
dHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KKworI2lmIEVOQUJMRShW
SURFTykgJiYgVVNFKEdTVFJFQU1FUikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWY8Vmlk
ZW9GcmFtZUdTdHJlYW1lcj4gVmlkZW9GcmFtZUdTdHJlYW1lcjo6Y3JlYXRlRnJvbVBpeGVsQnVm
ZmVyKFBpeGVsQnVmZmVyJiYgcGl4ZWxCdWZmZXIsIGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0
aW9uVGltZSwgY29uc3QgSW50U2l6ZSYgZGVzdGluYXRpb25TaXplLCBkb3VibGUgZnJhbWVSYXRl
LCBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRpb24sIGJvb2wgdmlkZW9NaXJyb3JlZCwgc3RkOjpv
cHRpb25hbDxWaWRlb0ZyYW1lVGltZU1ldGFkYXRhPiYmIG1ldGFkYXRhKQoreworICAgIGVuc3Vy
ZUdTdHJlYW1lckluaXRpYWxpemVkKCk7CisKKyAgICBhdXRvIHNpemUgPSBwaXhlbEJ1ZmZlci5z
aXplKCk7CisKKyAgICBhdXRvIGRhdGEgPSBwaXhlbEJ1ZmZlci50YWtlRGF0YSgpOworICAgIGF1
dG8gc2l6ZUluQnl0ZXMgPSBkYXRhLT5ieXRlTGVuZ3RoKCk7CisgICAgYXV0byBkYXRhQmFzZUFk
ZHJlc3MgPSBkYXRhLT5kYXRhKCk7CisgICAgYXV0byBsZWFrZWREYXRhID0gJmRhdGEubGVha1Jl
ZigpOworCisgICAgYXV0byBidWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBl
ZF9mdWxsKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwgZGF0YUJhc2VBZGRyZXNzLCBzaXplSW5C
eXRlcywgMCwgc2l6ZUluQnl0ZXMsIGxlYWtlZERhdGEsIFtdKGdwb2ludGVyIHVzZXJEYXRhKSB7
CisgICAgICAgIHN0YXRpY19jYXN0PEpTQzo6VWludDhDbGFtcGVkQXJyYXkqPih1c2VyRGF0YSkt
PmRlcmVmKCk7CisgICAgfSkpOworCisgICAgYXV0byB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAg
ICBhdXRvIGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgZ3N0X2J1ZmZlcl9hZGRfdmlkZW9f
bWV0YShidWZmZXIuZ2V0KCksIEdTVF9WSURFT19GUkFNRV9GTEFHX05PTkUsIEdTVF9WSURFT19G
T1JNQVRfQkdSQSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBpZiAobWV0YWRhdGEpCisgICAgICAg
IHdlYmtpdEdzdEJ1ZmZlclNldFZpZGVvRnJhbWVUaW1lTWV0YWRhdGEoYnVmZmVyLmdldCgpLCAq
bWV0YWRhdGEpOworCisgICAgaW50IGZyYW1lUmF0ZU51bWVyYXRvciwgZnJhbWVSYXRlRGVub21p
bmF0b3I7CisgICAgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uKGZyYW1lUmF0ZSwgJmZyYW1l
UmF0ZU51bWVyYXRvciwgJmZyYW1lUmF0ZURlbm9taW5hdG9yKTsKKworICAgIGF1dG8gY2FwcyA9
IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJ2aWRlby94LXJhdyIsICJmb3JtYXQiLCBH
X1RZUEVfU1RSSU5HLCAiQkdSQSIsICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHdpZHRoLAorICAgICAg
ICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgaGVpZ2h0LCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJB
Q1RJT04sIGZyYW1lUmF0ZU51bWVyYXRvciwgZnJhbWVSYXRlRGVub21pbmF0b3IsIG51bGxwdHIp
KTsKKyAgICBhdXRvIHNhbXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhidWZmZXIuZ2V0
KCksIGNhcHMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKworICAgIC8vIE9wdGlvbmFsbHkg
cmVzaXplIHRoZSB2aWRlbyBmcmFtZSB0byBmaXQgZGVzdGluYXRpb25TaXplLiBUaGlzIGNvZGUg
cGF0aCBpcyB1c2VkIG1vc3RseSBieQorICAgIC8vIHRoZSBtb2NrIHJlYWx0aW1lIHZpZGVvIHNv
dXJjZSB3aGVuIHRoZSBnVU0gY29uc3RyYWludHMgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGV4YWN0
IHdpZHRoCisgICAgLy8gYW5kL29yIGhlaWdodCB2YWx1ZXMuCisgICAgaWYgKCFkZXN0aW5hdGlv
blNpemUuaXNaZXJvKCkpIHsKKyAgICAgICAgR3N0VmlkZW9JbmZvIGlucHV0SW5mbzsKKyAgICAg
ICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbnB1dEluZm8sIGNhcHMuZ2V0KCkpOworCisg
ICAgICAgIHdpZHRoID0gZGVzdGluYXRpb25TaXplLndpZHRoKCk7CisgICAgICAgIGhlaWdodCA9
IGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgYXV0byBvdXRwdXRDYXBzID0gYWRv
cHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwgImZvcm1hdCIsIEdfVFlQ
RV9TVFJJTkcsICJCR1JBIiwgIndpZHRoIiwgR19UWVBFX0lOVCwgd2lkdGgsCisgICAgICAgICAg
ICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgaGVpZ2h0LCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJB
Q1RJT04sIGZyYW1lUmF0ZU51bWVyYXRvciwgZnJhbWVSYXRlRGVub21pbmF0b3IsIG51bGxwdHIp
KTsKKyAgICAgICAgR3N0VmlkZW9JbmZvIG91dHB1dEluZm87CisgICAgICAgIGdzdF92aWRlb19p
bmZvX2Zyb21fY2Fwcygmb3V0cHV0SW5mbywgb3V0cHV0Q2Fwcy5nZXQoKSk7CisKKyAgICAgICAg
YXV0byBvdXRwdXRCdWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUobnVs
bHB0ciwgR1NUX1ZJREVPX0lORk9fU0laRSgmb3V0cHV0SW5mbyksIG51bGxwdHIpKTsKKyAgICAg
ICAgZ3N0X2J1ZmZlcl9hZGRfdmlkZW9fbWV0YShvdXRwdXRCdWZmZXIuZ2V0KCksIEdTVF9WSURF
T19GUkFNRV9GTEFHX05PTkUsIEdTVF9WSURFT19GT1JNQVRfQkdSQSwgd2lkdGgsIGhlaWdodCk7
CisgICAgICAgIEdVbmlxdWVQdHI8R3N0VmlkZW9Db252ZXJ0ZXI+IGNvbnZlcnRlcihnc3Rfdmlk
ZW9fY29udmVydGVyX25ldygmaW5wdXRJbmZvLCAmb3V0cHV0SW5mbywgbnVsbHB0cikpOworICAg
ICAgICBHc3RNYXBwZWRGcmFtZSBpbnB1dEZyYW1lKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1w
bGUuZ2V0KCkpLCBpbnB1dEluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIEdzdE1hcHBlZEZy
YW1lIG91dHB1dEZyYW1lKG91dHB1dEJ1ZmZlci5nZXQoKSwgb3V0cHV0SW5mbywgR1NUX01BUF9X
UklURSk7CisgICAgICAgIGdzdF92aWRlb19jb252ZXJ0ZXJfZnJhbWUoY29udmVydGVyLmdldCgp
LCBpbnB1dEZyYW1lLmdldCgpLCBvdXRwdXRGcmFtZS5nZXQoKSk7CisgICAgICAgIHNhbXBsZSA9
IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhvdXRwdXRCdWZmZXIuZ2V0KCksIG91dHB1dENhcHMu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBWaWRlb0ZyYW1lR1N0cmVhbWVyKFdURk1vdmUoc2FtcGxlKSwgRmxvYXRTaXplKHdpZHRo
LCBoZWlnaHQpLCBwcmVzZW50YXRpb25UaW1lLCB2aWRlb1JvdGF0aW9uLCB2aWRlb01pcnJvcmVk
LCBXVEZNb3ZlKG1ldGFkYXRhKSkpOworfQorCitWaWRlb0ZyYW1lR1N0cmVhbWVyOjpWaWRlb0Zy
YW1lR1N0cmVhbWVyKEdSZWZQdHI8R3N0U2FtcGxlPiYmIHNhbXBsZSwgY29uc3QgRmxvYXRTaXpl
JiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIFZp
ZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbiwgYm9vbCB2aWRlb01pcnJvcmVkLCBzdGQ6Om9wdGlv
bmFsPFZpZGVvRnJhbWVUaW1lTWV0YWRhdGE+JiYgbWV0YWRhdGEpCisgICAgOiBWaWRlb0ZyYW1l
KHByZXNlbnRhdGlvblRpbWUsIHZpZGVvTWlycm9yZWQsIHZpZGVvUm90YXRpb24pCisgICAgLCBt
X3ByZXNlbnRhdGlvblNpemUocHJlc2VudGF0aW9uU2l6ZSkKK3sKKyAgICBBU1NFUlQoc2FtcGxl
KTsKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUu
Z2V0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGJ1ZmZlcik7CisKKyAgICBpZiAobWV0YWRhdGEp
CisgICAgICAgIGJ1ZmZlciA9IHdlYmtpdEdzdEJ1ZmZlclNldFZpZGVvRnJhbWVUaW1lTWV0YWRh
dGEoYnVmZmVyLCBXVEZNb3ZlKG1ldGFkYXRhKSk7CisKKyAgICBtX3NhbXBsZSA9IHNhbXBsZTsK
K30KKworVmlkZW9GcmFtZUdTdHJlYW1lcjo6VmlkZW9GcmFtZUdTdHJlYW1lcihjb25zdCBHUmVm
UHRyPEdzdFNhbXBsZT4mIHNhbXBsZSwgY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1l
LCBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRpb24pCisgICAgOiBWaWRlb0ZyYW1lKHByZXNlbnRh
dGlvblRpbWUsIGZhbHNlLCB2aWRlb1JvdGF0aW9uKQorICAgICwgbV9zYW1wbGUoc2FtcGxlKQor
eworfQorCitSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gVmlkZW9GcmFtZUdTdHJlYW1l
cjo6Z2V0UkdCQUltYWdlRGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byogY2FwcyA9IGdzdF9zYW1w
bGVfZ2V0X2NhcHMobV9zYW1wbGUuZ2V0KCkpOworICAgIEdzdFZpZGVvSW5mbyBpbnB1dEluZm87
CisgICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJmlucHV0SW5mbywgY2FwcykpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gV2UgY291bGQgY2hlY2sgdGhlIGlucHV0
IGZvcm1hdCBpcyBSR0JBIGJlZm9yZSBhdHRlbXB0aW5nIGEgY29udmVyc2lvbiwgYnV0IGl0IGlz
IHZlcnkKKyAgICAvLyB1bmxpa2VseSB0byBwYXkgb2ZmLiBUaGUgaW5wdXQgZm9ybWF0IGlzIGxp
a2VseSB0byBiZSBCR1JBICh3aGVuIHRoZSBzYW1wbGVzIGFyZSBjcmVhdGVkIGFzIGEKKyAgICAv
LyByZXN1bHQgb2YgbWVkaWFzdHJlYW0gY2FwdHVyZVN0cmVhbSkgb3Igc29tZSBZVVYgZm9ybWF0
IGlmIHRoZSBzYW1wbGUgaXMgZnJvbSBhIHZpZGVvIGNhcHR1cmUKKyAgICAvLyBkZXZpY2UuIFRo
aXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IGJ5IGludGVybmFscyBkdXJpbmcgbGF5b3V0IHRlc3Rz
LCBpdCBpcyB0aHVzIG5vdCBjcml0aWNhbAorICAgIC8vIHRvIG9wdGltaXplIHRoaXMgY29kZSBw
YXRoLgorCisgICAgYXV0byBvdXRwdXRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkoY2Fw
cykpOworICAgIGdzdF9jYXBzX3NldF9zaW1wbGUob3V0cHV0Q2Fwcy5nZXQoKSwgImZvcm1hdCIs
IEdfVFlQRV9TVFJJTkcsICJSR0JBIiwgbnVsbHB0cik7CisKKyAgICBHc3RWaWRlb0luZm8gb3V0
cHV0SW5mbzsKKyAgICBpZiAoIWdzdF92aWRlb19pbmZvX2Zyb21fY2Fwcygmb3V0cHV0SW5mbywg
b3V0cHV0Q2Fwcy5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHdp
ZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJmlucHV0SW5mbyk7CisgICAgaW50IGhlaWdodCA9
IEdTVF9WSURFT19JTkZPX0hFSUdIVCgmaW5wdXRJbmZvKTsKKyAgICB1bnNpZ25lZCBieXRlTGVu
Z3RoID0gR1NUX1ZJREVPX0lORk9fU0laRSgmaW5wdXRJbmZvKTsKKyAgICBhdXRvIGJ1ZmZlclN0
b3JhZ2UgPSBKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUod2lkdGggKiBoZWlnaHQsIDQpOworICAg
IGF1dG8gb3V0cHV0QnVmZmVyID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVs
bChHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkUsIGJ1ZmZlclN0b3JhZ2UtPmRhdGEoKSwgYnl0ZUxl
bmd0aCwgMCwgYnl0ZUxlbmd0aCwgbnVsbHB0ciwgW10oZ3BvaW50ZXIpIHsgfSkpOworICAgIGdz
dF9idWZmZXJfYWRkX3ZpZGVvX21ldGEob3V0cHV0QnVmZmVyLmdldCgpLCBHU1RfVklERU9fRlJB
TUVfRkxBR19OT05FLCBHU1RfVklERU9fRk9STUFUX1JHQkEsIHdpZHRoLCBoZWlnaHQpOworICAg
IEdzdE1hcHBlZEZyYW1lIG91dHB1dEZyYW1lKG91dHB1dEJ1ZmZlci5nZXQoKSwgb3V0cHV0SW5m
bywgR1NUX01BUF9XUklURSk7CisKKyAgICBHVW5pcXVlUHRyPEdzdFZpZGVvQ29udmVydGVyPiBj
b252ZXJ0ZXIoZ3N0X3ZpZGVvX2NvbnZlcnRlcl9uZXcoJmlucHV0SW5mbywgJm91dHB1dEluZm8s
IG51bGxwdHIpKTsKKyAgICBHc3RNYXBwZWRGcmFtZSBpbnB1dEZyYW1lKGdzdF9zYW1wbGVfZ2V0
X2J1ZmZlcihtX3NhbXBsZS5nZXQoKSksIGlucHV0SW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICBn
c3RfdmlkZW9fY29udmVydGVyX2ZyYW1lKGNvbnZlcnRlci5nZXQoKSwgaW5wdXRGcmFtZS5nZXQo
KSwgb3V0cHV0RnJhbWUuZ2V0KCkpOworICAgIHJldHVybiBKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5
Ojp0cnlDcmVhdGUoV1RGTW92ZShidWZmZXJTdG9yYWdlKSwgMCwgYnl0ZUxlbmd0aCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNF
KEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb0ZyYW1lR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9GcmFtZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYz
MGI0ZjEwYzA1ODllZDcyMDljYzg5ZDRjOGRmYjE0N2EyNGU0YTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9GcmFtZUdT
dHJlYW1lci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdh
bGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVS
KQorCisjaW5jbHVkZSAiVmlkZW9GcmFtZS5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVNZXRhZGF0
YUdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBpeGVsQnVmZmVy
OworCitjbGFzcyBWaWRlb0ZyYW1lR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIFZpZGVvRnJhbWUg
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VmlkZW9GcmFtZUdTdHJlYW1lcj4gY3JlYXRlKEdS
ZWZQdHI8R3N0U2FtcGxlPiYmIHNhbXBsZSwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25T
aXplLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUgPSBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCksIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbiA9IFZpZGVvUm90YXRpb246Ok5v
bmUsIGJvb2wgdmlkZW9NaXJyb3JlZCA9IGZhbHNlLCBzdGQ6Om9wdGlvbmFsPFZpZGVvRnJhbWVU
aW1lTWV0YWRhdGE+JiYgbWV0YWRhdGEgPSBzdGQ6Om51bGxvcHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWRlb0ZyYW1lR1N0cmVhbWVyKFdURk1vdmUoc2FtcGxlKSwg
cHJlc2VudGF0aW9uU2l6ZSwgcHJlc2VudGF0aW9uVGltZSwgdmlkZW9Sb3RhdGlvbiwgdmlkZW9N
aXJyb3JlZCwgV1RGTW92ZShtZXRhZGF0YSkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmPFZp
ZGVvRnJhbWVHU3RyZWFtZXI+IGNyZWF0ZVdyYXBwZWRTYW1wbGUoY29uc3QgR1JlZlB0cjxHc3RT
YW1wbGU+JiBzYW1wbGUsIGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgVmlkZW9S
b3RhdGlvbiB2aWRlb1JvdGF0aW9uID0gVmlkZW9Sb3RhdGlvbjo6Tm9uZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZGVvRnJhbWVHU3RyZWFtZXIoc2FtcGxlLCBwcmVz
ZW50YXRpb25UaW1lLCB2aWRlb1JvdGF0aW9uKSk7CisgICAgfQorCisgICAgc3RhdGljIFJlZjxW
aWRlb0ZyYW1lR1N0cmVhbWVyPiBjcmVhdGVGcm9tUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImJiwg
Y29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGlt
ZSgpLCBjb25zdCBJbnRTaXplJiBkZXN0aW5hdGlvblNpemUgPSB7IH0sIGRvdWJsZSBmcmFtZVJh
dGUgPSAxLCBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRpb24gPSBWaWRlb1JvdGF0aW9uOjpOb25l
LCBib29sIHZpZGVvTWlycm9yZWQgPSBmYWxzZSwgc3RkOjpvcHRpb25hbDxWaWRlb0ZyYW1lVGlt
ZU1ldGFkYXRhPiYmIG1ldGFkYXRhID0gc3RkOjpudWxsb3B0KTsKKworICAgIEZsb2F0U2l6ZSBw
cmVzZW50YXRpb25TaXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRpb25TaXpl
OyB9CisgICAgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IGdldFJHQkFJbWFnZURhdGEo
KSBjb25zdCBmaW5hbDsKKworICAgIEdzdFNhbXBsZSogc2FtcGxlKCkgY29uc3QgeyByZXR1cm4g
bV9zYW1wbGUuZ2V0KCk7IH0KKworcHJvdGVjdGVkOgorICAgIFZpZGVvRnJhbWVHU3RyZWFtZXIo
R1JlZlB0cjxHc3RTYW1wbGU+JiYsIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwg
Y29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGlt
ZSgpLCBWaWRlb1JvdGF0aW9uID0gVmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCB2aWRlb01pcnJv
cmVkID0gZmFsc2UsIHN0ZDo6b3B0aW9uYWw8VmlkZW9GcmFtZVRpbWVNZXRhZGF0YT4mJiA9IHN0
ZDo6bnVsbG9wdCk7CisgICAgVmlkZW9GcmFtZUdTdHJlYW1lcihjb25zdCBHUmVmUHRyPEdzdFNh
bXBsZT4mLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIFZpZGVvUm90YXRpb24g
PSBWaWRlb1JvdGF0aW9uOjpOb25lKTsKKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPEdzdFNhbXBs
ZT4gbV9zYW1wbGU7CisgICAgRmxvYXRTaXplIG1fcHJlc2VudGF0aW9uU2l6ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5j
cHAKaW5kZXggMmM1NzAyZDA3NmNlOTNiZjM4NjgyZDYyYWZiZWJiNDdmMjgxYThhYi4uM2U4Zjc4
NDQxYWM5NjJiYzk3ZGZhODY4OTFlMTQ0YmMwNmUxNzAyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKQEAgLTYzLDcgKzYzLDcgQEAKICNlbmRp
ZgogCiAjaWYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSNpbmNsdWRl
ICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVHU3RyZWFtZXIu
aCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTIyLDcgKzEyMiw3IEBAIFJlZlB0
cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBv
c2l0ZWRSZXN1bHRzVG9NZWRpCiB7CiAjaWYgVVNFKEdTVFJFQU1FUikKICAgICBpZiAoYXV0byBw
aXhlbEJ1ZmZlciA9IHJlYWRDb21wb3NpdGVkUmVzdWx0cygpKQotICAgICAgICByZXR1cm4gTWVk
aWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUltYWdlU2FtcGxlKFdURk1vdmUoKnBpeGVsQnVmZmVy
KSk7CisgICAgICAgIHJldHVybiBWaWRlb0ZyYW1lR1N0cmVhbWVyOjpjcmVhdGVGcm9tUGl4ZWxC
dWZmZXIoV1RGTW92ZSgqcGl4ZWxCdWZmZXIpKTsKICNlbmRpZgogICAgIHJldHVybiBudWxscHRy
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5j
cHAKaW5kZXggN2MwZTdjZWUwMThmMTg2YWYxYmE1MmUwMGIwM2JjYmMzNDhjNzA2OC4uNmFiMWFh
YTExNTE4YTNiNzk3NTdkMDFkZjJhNjlhZmI2NjM2NjBlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFt
U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCkBAIC0yOSw4ICsyOSw4IEBACiAj
aW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oIgogI2luY2x1ZGUgIkdTdHJl
YW1lckF1ZGlvRGF0YS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgotI2luY2x1ZGUg
Ik1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgi
CisjaW5jbHVkZSAiVmlkZW9GcmFtZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVN
ZXRhZGF0YUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJl
YW0uaCIKIApAQCAtMjgzLDcgKzI4Myw2IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2NvbmZp
Z3VyZWRTaXplLmhlaWdodCgpKQogICAgICAgICAgICAgbV9jb25maWd1cmVkU2l6ZS5zZXRIZWln
aHQoY2FwdHVyZVNpemUuaGVpZ2h0KCkpOwogCi0gICAgICAgIGF1dG8qIG1lZGlhU2FtcGxlID0g
c3RhdGljX2Nhc3Q8TWVkaWFTYW1wbGVHU3RyZWFtZXIqPigmc2FtcGxlKTsKICAgICAgICAgYXV0
byB2aWRlb1JvdGF0aW9uID0gc2FtcGxlLnZpZGVvUm90YXRpb24oKTsKICAgICAgICAgYm9vbCB2
aWRlb01pcnJvcmVkID0gc2FtcGxlLnZpZGVvTWlycm9yZWQoKTsKICAgICAgICAgaWYgKG1fdmlk
ZW9Sb3RhdGlvbiAhPSB2aWRlb1JvdGF0aW9uIHx8IG1fdmlkZW9NaXJyb3JlZCAhPSB2aWRlb01p
cnJvcmVkKSB7CkBAIC0yOTYsNyArMjk1LDggQEAgcHVibGljOgogICAgICAgICAgICAgZ3N0X3Bh
ZF9wdXNoX2V2ZW50KHBhZC5nZXQoKSwgZ3N0X2V2ZW50X25ld190YWcoZ3N0X3RhZ19saXN0X25l
dyhHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OLCBvcmllbnRhdGlvbi51dGY4KCkuZGF0YSgpLCBu
dWxscHRyKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byogZ3N0U2FtcGxlID0gbWVkaWFT
YW1wbGUtPnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmdzdFNhbXBsZTsKKyAgICAgICAgYXV0byog
dmlkZW9GcmFtZSA9IHN0YXRpY19jYXN0PFZpZGVvRnJhbWVHU3RyZWFtZXIqPigmc2FtcGxlKTsK
KyAgICAgICAgYXV0byogZ3N0U2FtcGxlID0gdmlkZW9GcmFtZS0+c2FtcGxlKCk7CiAgICAgICAg
IGlmICghbV9jb25maWd1cmVkU2l6ZS5pc0VtcHR5KCkgJiYgbV9sYXN0S25vd25TaXplICE9IG1f
Y29uZmlndXJlZFNpemUpIHsKICAgICAgICAgICAgIG1fbGFzdEtub3duU2l6ZSA9IG1fY29uZmln
dXJlZFNpemU7CiAgICAgICAgICAgICB1cGRhdGVCbGFja0ZyYW1lKGdzdF9zYW1wbGVfZ2V0X2Nh
cHMoZ3N0U2FtcGxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0Nh
cHR1cmVTb3VyY2UuY3BwCmluZGV4IDY5ZGEyMGI2ODBlODU5ZmQ3NmY2MjBiOTMzYTVlYTZmMGVi
YmM0ZWYuLjE1MDA1MDJhM2VkYzA5OWIzZDJhYzZjMmZiZjU5OTllMGVkMmIwZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC0y
Nyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJEaXNwbGF5Q2FwdHVyZU1hbmFnZXIuaCIKICNpbmNs
dWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgotI2luY2x1ZGUgIk1lZGlhU2Ft
cGxlR1N0cmVhbWVyLmgiCiAKICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KIApAQCAt
MTkxLDIxICsxOTAsMjIgQEAgdm9pZCBHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0YXJ0
UHJvZHVjaW5nRGF0YSgpCiAgICAgbV9jYXB0dXJlci0+cGxheSgpOwogfQogCi12b2lkIEdTdHJl
YW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc05ld0ZyYW1lKFJlZjxNZWRpYVNhbXBsZT4m
JiBzYW1wbGUpCit2b2lkIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc05ld0Zy
YW1lKFJlZjxWaWRlb0ZyYW1lR1N0cmVhbWVyPiYmIHZpZGVvRnJhbWUpCiB7CiAgICAgaWYgKCFp
c1Byb2R1Y2luZ0RhdGEoKSB8fCBtdXRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkaXNw
YXRjaE1lZGlhU2FtcGxlVG9PYnNlcnZlcnMoV1RGTW92ZShzYW1wbGUpLCB7IH0pOworICAgIGRp
c3BhdGNoTWVkaWFTYW1wbGVUb09ic2VydmVycyhXVEZNb3ZlKHZpZGVvRnJhbWUpLCB7IH0pOwog
fQogCiBHc3RGbG93UmV0dXJuIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6bmV3U2FtcGxl
Q2FsbGJhY2soR3N0RWxlbWVudCogc2luaywgR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKiBz
b3VyY2UpCiB7CiAgICAgYXV0byBnc3RTYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1
bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOwotICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBN
ZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlKFdURk1vdmUoZ3N0U2FtcGxlKSwgV2ViQ29yZTo6
RmxvYXRTaXplKCksIFN0cmluZygpKTsKKyAgICBhdXRvIHByZXNlbnRhdGlvblRpbWUgPSBmcm9t
R3N0Q2xvY2tUaW1lKEdTVF9CVUZGRVJfUFRTKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihnc3RTYW1w
bGUuZ2V0KCkpKSk7CisgICAgYXV0byB2aWRlb0ZyYW1lID0gVmlkZW9GcmFtZUdTdHJlYW1lcjo6
Y3JlYXRlKFdURk1vdmUoZ3N0U2FtcGxlKSwgV2ViQ29yZTo6RmxvYXRTaXplKCksIHByZXNlbnRh
dGlvblRpbWUpOwogCi0gICAgc291cmNlLT5zY2hlZHVsZURlZmVycmVkVGFzayhbc291cmNlLCBz
YW1wbGUgPSBXVEZNb3ZlKG1lZGlhU2FtcGxlKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIHNvdXJj
ZS0+cHJvY2Vzc05ld0ZyYW1lKFdURk1vdmUoc2FtcGxlKSk7CisgICAgc291cmNlLT5zY2hlZHVs
ZURlZmVycmVkVGFzayhbc291cmNlLCB2aWRlb0ZyYW1lID0gV1RGTW92ZSh2aWRlb0ZyYW1lKV0g
KCkgbXV0YWJsZSB7CisgICAgICAgIHNvdXJjZS0+cHJvY2Vzc05ld0ZyYW1lKFdURk1vdmUodmlk
ZW9GcmFtZSkpOwogICAgIH0pOwogCiAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clZpZGVvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oCmluZGV4IGFhOGE5MmUx
ZTc1Zjg4MTZjYWUzYjczMjMyMGMxMGU0YTA1MmE3NTYuLmVlNGY4OWEwMTRmZGJlNzNhYjBhODNh
NTVjNjM4NzdlM2Y5M2FkZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlk
ZW9DYXB0dXJlU291cmNlLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDYXB0dXJlRGV2
aWNlLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9DYXB0dXJlci5oIgogI2luY2x1ZGUgIlJl
YWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZUdTdHJlYW1l
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDcgKzQzLDcgQEAgcHVibGljOgog
ICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBvdmVycmlk
ZTsKICAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIHsgcmV0dXJuIG1fY2FwdHVyZXItPnBpcGVs
aW5lKCk7IH0KICAgICBHU3RyZWFtZXJDYXB0dXJlciogY2FwdHVyZXIoKSB7IHJldHVybiBtX2Nh
cHR1cmVyLmdldCgpOyB9Ci0gICAgdm9pZCBwcm9jZXNzTmV3RnJhbWUoUmVmPE1lZGlhU2FtcGxl
PiYmKTsKKyAgICB2b2lkIHByb2Nlc3NOZXdGcmFtZShSZWY8VmlkZW9GcmFtZUdTdHJlYW1lcj4m
Jik7CiAKICAgICAvLyBHU3RyZWFtZXJDYXB0dXJlcjo6T2JzZXJ2ZXIKICAgICB2b2lkIHNvdXJj
ZUNhcHNDaGFuZ2VkKGNvbnN0IEdzdENhcHMqKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGNhYThi
OTQ2NTM5NDFlOWQxNTYwNDQ2OTFiZDEyMjE0MGZiNDYzNTguLjQwMWU0YTE0OTdhYzIxYTA5OTFj
NmU1OTkxNTQzZDViOTVhMWYyYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01v
Y2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMjYsOSArMjYsOSBAQAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKIAotI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0
cmVhbWVyLmgiCiAjaW5jbHVkZSAiTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKICNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVHU3RyZWFtZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNjQsOSArMTY0LDkgQEAgdm9pZCBNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lcjo6dXBkYXRlU2FtcGxlQnVmZmVyKCkKIAogICAgIHN0
ZDo6b3B0aW9uYWw8VmlkZW9GcmFtZVRpbWVNZXRhZGF0YT4gbWV0YWRhdGE7CiAgICAgbWV0YWRh
dGEtPmNhcHR1cmVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2go
KTsKLSAgICBhdXRvIHNhbXBsZSA9IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNh
bXBsZShXVEZNb3ZlKCpwaXhlbEJ1ZmZlciksIHNpemUoKSwgZnJhbWVSYXRlKCksIHNhbXBsZVJv
dGF0aW9uKCksIGZhbHNlLCBXVEZNb3ZlKG1ldGFkYXRhKSk7Ci0gICAgc2FtcGxlLT5vZmZzZXRU
aW1lc3RhbXBzQnkoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKChlbGFwc2VkVGltZSgpICsg
MTAwX21zKS5zZWNvbmRzKCkpKTsKLSAgICBkaXNwYXRjaE1lZGlhU2FtcGxlVG9PYnNlcnZlcnMo
c2FtcGxlLmdldCgpLCB7IH0pOworICAgIGF1dG8gcHJlc2VudGF0aW9uVGltZSA9IE1lZGlhVGlt
ZTo6Y3JlYXRlV2l0aERvdWJsZSgoZWxhcHNlZFRpbWUoKSArIDEwMF9tcykuc2Vjb25kcygpKTsK
KyAgICBhdXRvIHZpZGVvRnJhbWUgPSBWaWRlb0ZyYW1lR1N0cmVhbWVyOjpjcmVhdGVGcm9tUGl4
ZWxCdWZmZXIoV1RGTW92ZSgqcGl4ZWxCdWZmZXIpLCBwcmVzZW50YXRpb25UaW1lLCBzaXplKCks
IGZyYW1lUmF0ZSgpLCBzYW1wbGVSb3RhdGlvbigpLCBmYWxzZSwgV1RGTW92ZShtZXRhZGF0YSkp
OworICAgIGRpc3BhdGNoTWVkaWFTYW1wbGVUb09ic2VydmVycyh2aWRlb0ZyYW1lLmdldCgpLCB7
IH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUxpYldlYlJUQy5jcHAKaW5kZXggZmQ2YTMyZjA0ODMzNWUyZDkxOTgxMTRlODMzZDlmMGQyZTE5
NjRmMi4uN2Q5NTBmNjc4MDA2NWIyZTllNTc2ZDQ2YzU1NmExM2E3NTNjNTBlOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1l
ci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1
ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5oIgogCiAjaW5jbHVkZSAi
R1N0cmVhbWVyVmlkZW9GcmFtZUxpYldlYlJUQy5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZUdTdHJlYW1lci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTU4LDEzICs1OCwxNCBAQCB2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUxpYldlYlJUQzo6T25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYQog
ICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8g
cHJlc2VudGF0aW9uVGltZSA9IGZyb21Hc3RDbG9ja1RpbWUoZnJhbWUudGltZXN0YW1wX3VzKCkp
OwogICAgIGlmIChmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKS0+dHlwZSgpID09IHdlYnJ0Yzo6
VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05hdGl2ZSkgewogICAgICAgICBhdXRvKiBmcmFtZWJ1
ZmZlciA9IHN0YXRpY19jYXN0PEdTdHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEMqPihmcmFtZS52
aWRlb19mcmFtZV9idWZmZXIoKS5nZXQoKSk7Ci0gICAgICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxl
KE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVXcmFwcGVkU2FtcGxlKGZyYW1lYnVmZmVyLT5n
ZXRTYW1wbGUoKSwgc3RhdGljX2Nhc3Q8TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24+KGZyYW1l
LnJvdGF0aW9uKCkpKSwgeyB9KTsKKyAgICAgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoVmlkZW9G
cmFtZUdTdHJlYW1lcjo6Y3JlYXRlV3JhcHBlZFNhbXBsZShmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxl
KCksIHByZXNlbnRhdGlvblRpbWUsIHN0YXRpY19jYXN0PE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uPihmcmFtZS5yb3RhdGlvbigpKSksIHsgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0
byBnc3RTYW1wbGUgPSBjb252ZXJ0TGliV2ViUlRDVmlkZW9GcmFtZVRvR1N0cmVhbWVyU2FtcGxl
KGZyYW1lKTsKICAgICAgICAgYXV0byBtZXRhZGF0YSA9IHN0ZDo6bWFrZV9vcHRpb25hbChtZXRh
ZGF0YUZyb21WaWRlb0ZyYW1lKGZyYW1lKSk7Ci0gICAgICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxl
KE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGUoV1RGTW92ZShnc3RTYW1wbGUpLCB7IH0sIHsg
fSwgc3RhdGljX2Nhc3Q8TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24+KGZyYW1lLnJvdGF0aW9u
KCkpLCBmYWxzZSwgV1RGTW92ZShtZXRhZGF0YSkpLCB7IH0pOworICAgICAgICB2aWRlb1NhbXBs
ZUF2YWlsYWJsZShWaWRlb0ZyYW1lR1N0cmVhbWVyOjpjcmVhdGUoV1RGTW92ZShnc3RTYW1wbGUp
LCB7IH0sIHByZXNlbnRhdGlvblRpbWUsIHN0YXRpY19jYXN0PE1lZGlhU2FtcGxlOjpWaWRlb1Jv
dGF0aW9uPihmcmFtZS5yb3RhdGlvbigpKSwgZmFsc2UsIFdURk1vdmUobWV0YWRhdGEpKSwgeyB9
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGli
V2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0
Yy9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcAppbmRl
eCA4MjIzNTY2NzZkZTEyNmY4YWFjYmNjMDZjMzIzMGE2ZWQxN2NmNmNjLi5jNmRjYWQ3NTI1ZWRi
ZTY4ZDExMGFlMDIxMjU3MWNiMzZiNGY4NmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUxpYldlYlJUQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VM
aWJXZWJSVEMuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlTGliV2ViUlRDLmgiCiAKICNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0ZyYW1l
TGliV2ViUlRDLmgiCi0jaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJWaWRlb0ZyYW1lR1N0cmVhbWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjcs
OSArNjcsOCBAQCB2b2lkIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6dmlk
ZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGUmIHNhbQogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBBU1NFUlQoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNh
bXBsZTo6R1N0cmVhbWVyU2FtcGxlVHlwZSk7Ci0gICAgYXV0byYgbWVkaWFTYW1wbGUgPSBzdGF0
aWNfY2FzdDxNZWRpYVNhbXBsZUdTdHJlYW1lciY+KHNhbXBsZSk7Ci0gICAgYXV0byBmcmFtZUJ1
ZmZlciA9IEdTdHJlYW1lclZpZGVvRnJhbWVMaWJXZWJSVEM6OmNyZWF0ZShtZWRpYVNhbXBsZS5w
bGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5nc3RTYW1wbGUpOworICAgIGF1dG8mIHZpZGVvRnJhbWUg
PSBzdGF0aWNfY2FzdDxWaWRlb0ZyYW1lR1N0cmVhbWVyJj4oc2FtcGxlKTsKKyAgICBhdXRvIGZy
YW1lQnVmZmVyID0gR1N0cmVhbWVyVmlkZW9GcmFtZUxpYldlYlJUQzo6Y3JlYXRlKHZpZGVvRnJh
bWUuc2FtcGxlKCkpOwogCiAgICAgc2VuZEZyYW1lKFdURk1vdmUoZnJhbWVCdWZmZXIpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454842</attachid>
            <date>2022-03-16 08:57:46 -0700</date>
            <delta_ts>2022-03-16 10:34:17 -0700</delta_ts>
            <desc>[fast-cq] Patch</desc>
            <filename>bug-237885-20220316085745.patch</filename>
            <type>text/plain</type>
            <size>38733</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZiNjdiY2ZjOTdmMjA2
NTVmODIxODU0YzE4Mzc0NjVlZGM1OWI5Yi4uMDE4Nzk4MjU1Nzc0Yzc5NzQzMzA4NDBkYWI3NGFm
ODc2MWEyYTQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDIyLTAzLTE2ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNaWdyYXRlIHVz
ZSBvZiBNZWRpYVNhbXBsZUdTdHJlYW1lciB0byBWaWRlb0ZyYW1lIGluIFdlYlJUQyBwaXBlbGlu
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzg4
NQorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgSW50cm9k
dWNpbmcgVmlkZW9GcmFtZUdTdHJlYW1lciwgbWVhbnQgdG8gYmUgdXNlZCBmcm9tIG1lZGlhc3Ry
ZWFtIHByb2R1Y2VycyBhbmQgY29uc3VtZXJzLgorICAgICAgICBUaGUgVmlkZW9GcmFtZSBpbnRl
cm5hbGx5IG1hbmFnZXMgYSBHc3RTYW1wbGUgc3RvcmluZyB0aGUgYWN0dWFsIHZpZGVvIGZyYW1l
IGRhdGEgdGhhdCBjYW4KKyAgICAgICAgYmUgcGFzc2VkIGFyb3VuZCBiZXR3ZWVuIFJlYWx0aW1l
TWVkaWFTb3VyY2VzIGFuZCB0aGUgbWVkaWFzdHJlYW0gR1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50
LgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLgorCisgICAgICAg
ICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2Fu
dmFzRWxlbWVudDo6dG9NZWRpYVNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBs
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUdTdHJlYW1lcjo6
TWVkaWFTYW1wbGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVHU3Ry
ZWFtZXI6OmNyZWF0ZUZha2VTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVH
U3RyZWFtZXI6OmNyZWF0ZUltYWdlU2FtcGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU2FtcGxlR1N0cmVhbWVyOjppbml0aWFsaXplRnJvbUJ1ZmZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Z2V0UkdCQUltYWdlRGF0YSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhU2FtcGxlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUdTdHJl
YW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyOjpj
cmVhdGVXcmFwcGVkU2FtcGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Ft
cGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvRnJhbWVHU3RyZWFtZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnJhbWVHU3RyZWFtZXI6OmNyZWF0ZUZyb21QaXhlbEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0ZyYW1lR1N0cmVhbWVyOjpWaWRlb0ZyYW1l
R1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvRnJhbWVHU3RyZWFtZXI6OmdldFJH
QkFJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9WaWRlb0ZyYW1lR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRS
ZXN1bHRzVG9NZWRpYVNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc05l
d0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6
bmV3U2FtcGxlQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnVw
ZGF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2Vi
cnRjL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRDOjpP
bkZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVh
bWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEM6OnZpZGVvU2FtcGxl
QXZhaWxhYmxlKToKKwogMjAyMi0wMy0xNiAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW0lGQ11bSW50ZWdyYXRpb25dIE1vdmUgZmlyc3RTZWxlY3RlZEJveC9sYXN0
U2VsZWN0ZWRCb3ggb3V0IG9mIElubGluZUl0ZXJhdG9yOjpMaW5lCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGVkMTEzZjc2Njc2MjgyYTBiY2VjNjMwNWI5
MDgwOTMxYzgzZDc5ZGQuLjc5NWU2NjYzYWY3NTY5OTM4MzhmZWM0MDkwYjhlMzZiYWU1NDUyZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC05NCw3ICs5
NCw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVIpCi0jaW5jbHVkZSAiTWVkaWFTYW1w
bGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1lR1N0cmVhbWVyLmgiCiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtODAwLDcgKzgwMCw3IEBAIFJlZlB0cjxNZWRpYVNh
bXBsZT4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvTWVkaWFTYW1wbGUoKQogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZUZyb21QaXhlbEJ1ZmZl
cihXVEZNb3ZlKCpwaXhlbEJ1ZmZlcikpOwogI2VsaWYgVVNFKEdTVFJFQU1FUikKLSAgICByZXR1
cm4gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUltYWdlU2FtcGxlKFdURk1vdmUoKnBpeGVs
QnVmZmVyKSk7CisgICAgcmV0dXJuIFZpZGVvRnJhbWVHU3RyZWFtZXI6OmNyZWF0ZUZyb21QaXhl
bEJ1ZmZlcihXVEZNb3ZlKCpwaXhlbEJ1ZmZlcikpOwogI2VuZGlmCiAjZWxzZQogICAgIHJldHVy
biBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IDI0
MTMwNjFkOGYzNTJjNzhhMzYzM2Y3OTAxN2IzYTFlNzQ4N2UwYjMuLmIzZGNjY2JkOTc0Yzg3Nzcx
ZmFjZjU5YTM5NmQ0ZjQwODE2MGNjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UKQEAgLTI3LDYgKzI3LDcgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VC
X0FVRElPKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENvbWJpbmVy
UGFkR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4
dFNpbmtHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9U
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVmlkZW9GcmFtZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvRnJhbWVNZXRhZGF0YUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhU2FtcGxlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5jcHAKaW5kZXggZjNhMzE3MzlhMDYz
NTA3MTg2NDhhYWI2NjViY2JmZjIyM2Y3OGUyNC4uZGNkMmRmY2RkMzNiYjhlZjhjMzI3ZDhjZDAx
ODE4NjFkMjA2NjVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwCkBA
IC0yMywxMTggKzIzLDIyIEBACiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKIAog
I2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSAiVmlkZW9GcmFtZU1ldGFkYXRhR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJy
YXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiAjaWYgRU5BQkxFKFZJREVPKSAm
JiBVU0UoR1NUUkVBTUVSKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU1lZGlhU2FtcGxlR1N0
cmVhbWVyOjpNZWRpYVNhbXBsZUdTdHJlYW1lcihHUmVmUHRyPEdzdFNhbXBsZT4mJiBzYW1wbGUs
IGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbVN0cmluZyYgdHJh
Y2tJZCwgVmlkZW9Sb3RhdGlvbiB2aWRlb1JvdGF0aW9uLCBib29sIHZpZGVvTWlycm9yZWQsIHN0
ZDo6b3B0aW9uYWw8VmlkZW9GcmFtZVRpbWVNZXRhZGF0YT4mJiBtZXRhZGF0YSkKK01lZGlhU2Ft
cGxlR1N0cmVhbWVyOjpNZWRpYVNhbXBsZUdTdHJlYW1lcihHUmVmUHRyPEdzdFNhbXBsZT4mJiBz
YW1wbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbVN0cmlu
ZyYgdHJhY2tJZCkKICAgICA6IG1fcHRzKE1lZGlhVGltZTo6emVyb1RpbWUoKSkKICAgICAsIG1f
ZHRzKE1lZGlhVGltZTo6emVyb1RpbWUoKSkKICAgICAsIG1fZHVyYXRpb24oTWVkaWFUaW1lOjp6
ZXJvVGltZSgpKQogICAgICwgbV90cmFja0lkKHRyYWNrSWQpCiAgICAgLCBtX3ByZXNlbnRhdGlv
blNpemUocHJlc2VudGF0aW9uU2l6ZSkKLSAgICAsIG1fdmlkZW9Sb3RhdGlvbih2aWRlb1JvdGF0
aW9uKQotICAgICwgbV92aWRlb01pcnJvcmVkKHZpZGVvTWlycm9yZWQpCiB7CiAgICAgQVNTRVJU
KHNhbXBsZSk7Ci0gICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIo
c2FtcGxlLmdldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChidWZmZXIpOwotCi0gICAgaWYgKG1l
dGFkYXRhKQotICAgICAgICBidWZmZXIgPSB3ZWJraXRHc3RCdWZmZXJTZXRWaWRlb0ZyYW1lVGlt
ZU1ldGFkYXRhKGJ1ZmZlciwgV1RGTW92ZShtZXRhZGF0YSkpOwotCiAgICAgbV9zYW1wbGUgPSBz
YW1wbGU7Ci0gICAgaW5pdGlhbGl6ZUZyb21CdWZmZXIoKTsKLX0KLQotTWVkaWFTYW1wbGVHU3Ry
ZWFtZXI6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyKGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9u
U2l6ZSwgY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCkKLSAgICA6IG1fcHRzKE1lZGlhVGltZTo6
emVyb1RpbWUoKSkKLSAgICAsIG1fZHRzKE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAgICAsIG1f
ZHVyYXRpb24oTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQotICAgICwgbV90cmFja0lkKHRyYWNrSWQp
Ci0gICAgLCBtX3ByZXNlbnRhdGlvblNpemUocHJlc2VudGF0aW9uU2l6ZSkKLXsKLX0KLQotTWVk
aWFTYW1wbGVHU3RyZWFtZXI6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyKGNvbnN0IEdSZWZQdHI8R3N0
U2FtcGxlPiYgc2FtcGxlLCBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRpb24pCi0gICAgOiBtX3Nh
bXBsZShzYW1wbGUpCi0gICAgLCBtX3ZpZGVvUm90YXRpb24odmlkZW9Sb3RhdGlvbikKLXsKLSAg
ICBpbml0aWFsaXplRnJvbUJ1ZmZlcigpOwotfQotCi1SZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+
IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVGYWtlU2FtcGxlKEdzdENhcHMqLCBNZWRpYVRp
bWUgcHRzLCBNZWRpYVRpbWUgZHRzLCBNZWRpYVRpbWUgZHVyYXRpb24sIGNvbnN0IEZsb2F0U2l6
ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCkKLXsKLSAgICBN
ZWRpYVNhbXBsZUdTdHJlYW1lciogZ3N0cmVhbWVyTWVkaWFTYW1wbGUgPSBuZXcgTWVkaWFTYW1w
bGVHU3RyZWFtZXIocHJlc2VudGF0aW9uU2l6ZSwgdHJhY2tJZCk7Ci0gICAgZ3N0cmVhbWVyTWVk
aWFTYW1wbGUtPm1fcHRzID0gcHRzOwotICAgIGdzdHJlYW1lck1lZGlhU2FtcGxlLT5tX2R0cyA9
IGR0czsKLSAgICBnc3RyZWFtZXJNZWRpYVNhbXBsZS0+bV9kdXJhdGlvbiA9IGR1cmF0aW9uOwot
ICAgIGdzdHJlYW1lck1lZGlhU2FtcGxlLT5tX2ZsYWdzID0gTWVkaWFTYW1wbGU6OklzTm9uRGlz
cGxheWluZzsKLSAgICByZXR1cm4gYWRvcHRSZWYoKmdzdHJlYW1lck1lZGlhU2FtcGxlKTsKLX0K
LQotUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRl
SW1hZ2VTYW1wbGUoUGl4ZWxCdWZmZXImJiBwaXhlbEJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgZGVz
dGluYXRpb25TaXplLCBkb3VibGUgZnJhbWVSYXRlLCBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRp
b24sIGJvb2wgdmlkZW9NaXJyb3JlZCwgc3RkOjpvcHRpb25hbDxWaWRlb0ZyYW1lVGltZU1ldGFk
YXRhPiYmIG1ldGFkYXRhKQotewotICAgIGVuc3VyZUdTdHJlYW1lckluaXRpYWxpemVkKCk7Ci0K
LSAgICBhdXRvIHNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7Ci0KLSAgICBhdXRvIGRhdGEgPSBw
aXhlbEJ1ZmZlci50YWtlRGF0YSgpOwotICAgIGF1dG8gc2l6ZUluQnl0ZXMgPSBkYXRhLT5ieXRl
TGVuZ3RoKCk7Ci0gICAgYXV0byBkYXRhQmFzZUFkZHJlc3MgPSBkYXRhLT5kYXRhKCk7Ci0gICAg
YXV0byBsZWFrZWREYXRhID0gJmRhdGEubGVha1JlZigpOwotCi0gICAgYXV0byBidWZmZXIgPSBh
ZG9wdEdSZWYoZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsKEdTVF9NRU1PUllfRkxBR19SRUFE
T05MWSwgZGF0YUJhc2VBZGRyZXNzLCBzaXplSW5CeXRlcywgMCwgc2l6ZUluQnl0ZXMsIGxlYWtl
ZERhdGEsIFtdKGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PEpTQzo6
VWludDhDbGFtcGVkQXJyYXkqPih1c2VyRGF0YSktPmRlcmVmKCk7Ci0gICAgfSkpOwotCi0gICAg
YXV0byB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBhdXRvIGhlaWdodCA9IHNpemUuaGVpZ2h0
KCk7Ci0gICAgZ3N0X2J1ZmZlcl9hZGRfdmlkZW9fbWV0YShidWZmZXIuZ2V0KCksIEdTVF9WSURF
T19GUkFNRV9GTEFHX05PTkUsIEdTVF9WSURFT19GT1JNQVRfQkdSQSwgd2lkdGgsIGhlaWdodCk7
Ci0KLSAgICBpZiAobWV0YWRhdGEpCi0gICAgICAgIHdlYmtpdEdzdEJ1ZmZlclNldFZpZGVvRnJh
bWVUaW1lTWV0YWRhdGEoYnVmZmVyLmdldCgpLCAqbWV0YWRhdGEpOwotCi0gICAgaW50IGZyYW1l
UmF0ZU51bWVyYXRvciwgZnJhbWVSYXRlRGVub21pbmF0b3I7Ci0gICAgZ3N0X3V0aWxfZG91Ymxl
X3RvX2ZyYWN0aW9uKGZyYW1lUmF0ZSwgJmZyYW1lUmF0ZU51bWVyYXRvciwgJmZyYW1lUmF0ZURl
bm9taW5hdG9yKTsKLQotICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2lt
cGxlKCJ2aWRlby94LXJhdyIsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiQkdSQSIsICJ3aWR0
aCIsIEdfVFlQRV9JTlQsIHdpZHRoLAotICAgICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgaGVp
Z2h0LCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIGZyYW1lUmF0ZU51bWVyYXRvciwg
ZnJhbWVSYXRlRGVub21pbmF0b3IsIG51bGxwdHIpKTsKLSAgICBhdXRvIHNhbXBsZSA9IGFkb3B0
R1JlZihnc3Rfc2FtcGxlX25ldyhidWZmZXIuZ2V0KCksIGNhcHMuZ2V0KCksIG51bGxwdHIsIG51
bGxwdHIpKTsKLQotICAgIC8vIE9wdGlvbmFsbHkgcmVzaXplIHRoZSB2aWRlbyBmcmFtZSB0byBm
aXQgZGVzdGluYXRpb25TaXplLiBUaGlzIGNvZGUgcGF0aCBpcyB1c2VkIG1vc3RseSBieQotICAg
IC8vIHRoZSBtb2NrIHJlYWx0aW1lIHZpZGVvIHNvdXJjZSB3aGVuIHRoZSBnVU0gY29uc3RyYWlu
dHMgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGV4YWN0IHdpZHRoCi0gICAgLy8gYW5kL29yIGhlaWdo
dCB2YWx1ZXMuCi0gICAgaWYgKCFkZXN0aW5hdGlvblNpemUuaXNaZXJvKCkpIHsKLSAgICAgICAg
R3N0VmlkZW9JbmZvIGlucHV0SW5mbzsKLSAgICAgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBz
KCZpbnB1dEluZm8sIGNhcHMuZ2V0KCkpOwotCi0gICAgICAgIHdpZHRoID0gZGVzdGluYXRpb25T
aXplLndpZHRoKCk7Ci0gICAgICAgIGhlaWdodCA9IGRlc3RpbmF0aW9uU2l6ZS5oZWlnaHQoKTsK
LSAgICAgICAgYXV0byBvdXRwdXRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUo
InZpZGVvL3gtcmF3IiwgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJCR1JBIiwgIndpZHRoIiwg
R19UWVBFX0lOVCwgd2lkdGgsCi0gICAgICAgICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgaGVp
Z2h0LCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIGZyYW1lUmF0ZU51bWVyYXRvciwg
ZnJhbWVSYXRlRGVub21pbmF0b3IsIG51bGxwdHIpKTsKLSAgICAgICAgR3N0VmlkZW9JbmZvIG91
dHB1dEluZm87Ci0gICAgICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2Fwcygmb3V0cHV0SW5mbywg
b3V0cHV0Q2Fwcy5nZXQoKSk7Ci0KLSAgICAgICAgYXV0byBvdXRwdXRCdWZmZXIgPSBhZG9wdEdS
ZWYoZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUobnVsbHB0ciwgR1NUX1ZJREVPX0lORk9fU0laRSgm
b3V0cHV0SW5mbyksIG51bGxwdHIpKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9hZGRfdmlkZW9fbWV0
YShvdXRwdXRCdWZmZXIuZ2V0KCksIEdTVF9WSURFT19GUkFNRV9GTEFHX05PTkUsIEdTVF9WSURF
T19GT1JNQVRfQkdSQSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIEdVbmlxdWVQdHI8R3N0Vmlk
ZW9Db252ZXJ0ZXI+IGNvbnZlcnRlcihnc3RfdmlkZW9fY29udmVydGVyX25ldygmaW5wdXRJbmZv
LCAmb3V0cHV0SW5mbywgbnVsbHB0cikpOwotICAgICAgICBHc3RNYXBwZWRGcmFtZSBpbnB1dEZy
YW1lKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpLCBpbnB1dEluZm8sIEdTVF9N
QVBfUkVBRCk7Ci0gICAgICAgIEdzdE1hcHBlZEZyYW1lIG91dHB1dEZyYW1lKG91dHB1dEJ1ZmZl
ci5nZXQoKSwgb3V0cHV0SW5mbywgR1NUX01BUF9XUklURSk7Ci0gICAgICAgIGdzdF92aWRlb19j
b252ZXJ0ZXJfZnJhbWUoY29udmVydGVyLmdldCgpLCBpbnB1dEZyYW1lLmdldCgpLCBvdXRwdXRG
cmFtZS5nZXQoKSk7Ci0gICAgICAgIHNhbXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhv
dXRwdXRCdWZmZXIuZ2V0KCksIG91dHB1dENhcHMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKHNhbXBsZSksIEZsb2F0U2l6ZSh3aWR0
aCwgaGVpZ2h0KSwgeyB9LCB2aWRlb1JvdGF0aW9uLCB2aWRlb01pcnJvcmVkKTsKLX0KLQotdm9p
ZCBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21CdWZmZXIoKQotewogICAgIGNv
bnN0IEdzdENsb2NrVGltZSBtaW5pbXVtRHVyYXRpb24gPSAxMDAwOyAvLyAxIHVzCiAgICAgYXV0
byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKG1fc2FtcGxlLmdldCgpKTsKICAgICBS
RUxFQVNFX0FTU0VSVChidWZmZXIpOwpAQCAtMTY4LDM4ICs3MiwyMyBAQCB2b2lkIE1lZGlhU2Ft
cGxlR1N0cmVhbWVyOjppbml0aWFsaXplRnJvbUJ1ZmZlcigpCiAgICAgICAgIG1fZmxhZ3MgPSBz
dGF0aWNfY2FzdDxNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M+KG1fZmxhZ3MgfCBNZWRpYVNhbXBs
ZTo6SXNOb25EaXNwbGF5aW5nKTsKIH0KIAotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+
IE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3QKK01lZGlhU2Ft
cGxlR1N0cmVhbWVyOjpNZWRpYVNhbXBsZUdTdHJlYW1lcihjb25zdCBGbG9hdFNpemUmIHByZXNl
bnRhdGlvblNpemUsIGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCisgICAgOiBtX3B0cyhNZWRp
YVRpbWU6Onplcm9UaW1lKCkpCisgICAgLCBtX2R0cyhNZWRpYVRpbWU6Onplcm9UaW1lKCkpCisg
ICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6emVyb1RpbWUoKSkKKyAgICAsIG1fdHJhY2tJZCh0
cmFja0lkKQorICAgICwgbV9wcmVzZW50YXRpb25TaXplKHByZXNlbnRhdGlvblNpemUpCiB7Ci0g
ICAgYXV0byogY2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUuZ2V0KCkpOwotICAg
IEdzdFZpZGVvSW5mbyBpbnB1dEluZm87Ci0gICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2Nh
cHMoJmlucHV0SW5mbywgY2FwcykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
V2UgY291bGQgY2hlY2sgdGhlIGlucHV0IGZvcm1hdCBpcyBSR0JBIGJlZm9yZSBhdHRlbXB0aW5n
IGEgY29udmVyc2lvbiwgYnV0IGl0IGlzIHZlcnkKLSAgICAvLyB1bmxpa2VseSB0byBwYXkgb2Zm
LiBUaGUgaW5wdXQgZm9ybWF0IGlzIGxpa2VseSB0byBiZSBCR1JBICh3aGVuIHRoZSBzYW1wbGVz
IGFyZSBjcmVhdGVkIGFzIGEKLSAgICAvLyByZXN1bHQgb2YgbWVkaWFzdHJlYW0gY2FwdHVyZVN0
cmVhbSkgb3Igc29tZSBZVVYgZm9ybWF0IGlmIHRoZSBzYW1wbGUgaXMgZnJvbSBhIHZpZGVvIGNh
cHR1cmUKLSAgICAvLyBkZXZpY2UuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IGJ5IGludGVy
bmFscyBkdXJpbmcgbGF5b3V0IHRlc3RzLCBpdCBpcyB0aHVzIG5vdCBjcml0aWNhbAotICAgIC8v
IHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLgotCi0gICAgYXV0byBvdXRwdXRDYXBzID0gYWRv
cHRHUmVmKGdzdF9jYXBzX2NvcHkoY2FwcykpOwotICAgIGdzdF9jYXBzX3NldF9zaW1wbGUob3V0
cHV0Q2Fwcy5nZXQoKSwgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJSR0JBIiwgbnVsbHB0cik7
Ci0KLSAgICBHc3RWaWRlb0luZm8gb3V0cHV0SW5mbzsKLSAgICBpZiAoIWdzdF92aWRlb19pbmZv
X2Zyb21fY2Fwcygmb3V0cHV0SW5mbywgb3V0cHV0Q2Fwcy5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaW50IHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJmlucHV0
SW5mbyk7Ci0gICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCgmaW5wdXRJbmZv
KTsKLSAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gR1NUX1ZJREVPX0lORk9fU0laRSgmaW5wdXRJ
bmZvKTsKLSAgICBhdXRvIGJ1ZmZlclN0b3JhZ2UgPSBKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUo
d2lkdGggKiBoZWlnaHQsIDQpOwotICAgIGF1dG8gb3V0cHV0QnVmZmVyID0gYWRvcHRHUmVmKGdz
dF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbChHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkUsIGJ1ZmZl
clN0b3JhZ2UtPmRhdGEoKSwgYnl0ZUxlbmd0aCwgMCwgYnl0ZUxlbmd0aCwgbnVsbHB0ciwgW10o
Z3BvaW50ZXIpIHsgfSkpOwotICAgIGdzdF9idWZmZXJfYWRkX3ZpZGVvX21ldGEob3V0cHV0QnVm
ZmVyLmdldCgpLCBHU1RfVklERU9fRlJBTUVfRkxBR19OT05FLCBHU1RfVklERU9fRk9STUFUX1JH
QkEsIHdpZHRoLCBoZWlnaHQpOwotICAgIEdzdE1hcHBlZEZyYW1lIG91dHB1dEZyYW1lKG91dHB1
dEJ1ZmZlci5nZXQoKSwgb3V0cHV0SW5mbywgR1NUX01BUF9XUklURSk7Cit9CiAKLSAgICBHVW5p
cXVlUHRyPEdzdFZpZGVvQ29udmVydGVyPiBjb252ZXJ0ZXIoZ3N0X3ZpZGVvX2NvbnZlcnRlcl9u
ZXcoJmlucHV0SW5mbywgJm91dHB1dEluZm8sIG51bGxwdHIpKTsKLSAgICBHc3RNYXBwZWRGcmFt
ZSBpbnB1dEZyYW1lKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihtX3NhbXBsZS5nZXQoKSksIGlucHV0
SW5mbywgR1NUX01BUF9SRUFEKTsKLSAgICBnc3RfdmlkZW9fY29udmVydGVyX2ZyYW1lKGNvbnZl
cnRlci5nZXQoKSwgaW5wdXRGcmFtZS5nZXQoKSwgb3V0cHV0RnJhbWUuZ2V0KCkpOwotICAgIHJl
dHVybiBKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShidWZmZXJTdG9y
YWdlKSwgMCwgYnl0ZUxlbmd0aCk7CitSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IE1lZGlhU2Ft
cGxlR1N0cmVhbWVyOjpjcmVhdGVGYWtlU2FtcGxlKEdzdENhcHMqLCBjb25zdCBNZWRpYVRpbWUm
IHB0cywgY29uc3QgTWVkaWFUaW1lJiBkdHMsIGNvbnN0IE1lZGlhVGltZSYgZHVyYXRpb24sIGNv
bnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJ
ZCkKK3sKKyAgICBNZWRpYVNhbXBsZUdTdHJlYW1lciogZ3N0cmVhbWVyTWVkaWFTYW1wbGUgPSBu
ZXcgTWVkaWFTYW1wbGVHU3RyZWFtZXIocHJlc2VudGF0aW9uU2l6ZSwgdHJhY2tJZCk7CisgICAg
Z3N0cmVhbWVyTWVkaWFTYW1wbGUtPm1fcHRzID0gcHRzOworICAgIGdzdHJlYW1lck1lZGlhU2Ft
cGxlLT5tX2R0cyA9IGR0czsKKyAgICBnc3RyZWFtZXJNZWRpYVNhbXBsZS0+bV9kdXJhdGlvbiA9
IGR1cmF0aW9uOworICAgIGdzdHJlYW1lck1lZGlhU2FtcGxlLT5tX2ZsYWdzID0gTWVkaWFTYW1w
bGU6OklzTm9uRGlzcGxheWluZzsKKyAgICByZXR1cm4gYWRvcHRSZWYoKmdzdHJlYW1lck1lZGlh
U2FtcGxlKTsKIH0KIAogdm9pZCBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6ZXh0ZW5kVG9UaGVCZWdp
bm5pbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaAppbmRleCA1MGU2OGJlZGE1
MzM0NDE1ZTQwOWFiMmQwMTc5NjcyZTEzZmY1MmVlLi5mMjQ4Y2Q2YTkyMDM3ODNkMjczNTI0NjYw
Nzg3YzY4MTg0YzJlOGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaApAQCAt
MzEsMjIgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUGl4ZWxCdWZm
ZXI7Ci0KIGNsYXNzIE1lZGlhU2FtcGxlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhU2FtcGxlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGUoR1Jl
ZlB0cjxHc3RTYW1wbGU+JiYgc2FtcGxlLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRhdGlvblNp
emUsIGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQsIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlv
biA9IFZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wgdmlkZW9NaXJyb3JlZCA9IGZhbHNlLCBzdGQ6
Om9wdGlvbmFsPFZpZGVvRnJhbWVUaW1lTWV0YWRhdGE+JiYgbWV0YWRhdGEgPSBzdGQ6Om51bGxv
cHQpCisgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3JlYXRlKEdSZWZQdHI8
R3N0U2FtcGxlPiYmIHNhbXBsZSwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBj
b25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFTYW1wbGVHU3RyZWFtZXIoV1RGTW92ZShzYW1wbGUpLCBwcmVzZW50YXRpb25T
aXplLCB0cmFja0lkLCB2aWRlb1JvdGF0aW9uLCB2aWRlb01pcnJvcmVkLCBXVEZNb3ZlKG1ldGFk
YXRhKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUdTdHJlYW1l
cihXVEZNb3ZlKHNhbXBsZSksIHByZXNlbnRhdGlvblNpemUsIHRyYWNrSWQpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlR1N0cmVhbWVyPiBjcmVhdGVXcmFwcGVkU2FtcGxl
KGNvbnN0IEdSZWZQdHI8R3N0U2FtcGxlPiYgc2FtcGxlLCBWaWRlb1JvdGF0aW9uIHZpZGVvUm90
YXRpb24gPSBWaWRlb1JvdGF0aW9uOjpOb25lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTWVkaWFTYW1wbGVHU3RyZWFtZXIoc2FtcGxlLCB2aWRlb1JvdGF0aW9uKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUdTdHJlYW1lcj4gY3JlYXRlRmFrZVNh
bXBsZShHc3RDYXBzKiwgTWVkaWFUaW1lIHB0cywgTWVkaWFUaW1lIGR0cywgTWVkaWFUaW1lIGR1
cmF0aW9uLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRhdGlvblNpemUsIGNvbnN0IEF0b21TdHJp
bmcmIHRyYWNrSWQpOwotICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IGNyZWF0
ZUltYWdlU2FtcGxlKFBpeGVsQnVmZmVyJiYsIGNvbnN0IEludFNpemUmIGRlc3RpbmF0aW9uU2l6
ZSA9IHsgfSwgZG91YmxlIGZyYW1lUmF0ZSA9IDEsIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlv
biA9IFZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wgdmlkZW9NaXJyb3JlZCA9IGZhbHNlLCBzdGQ6
Om9wdGlvbmFsPFZpZGVvRnJhbWVUaW1lTWV0YWRhdGE+JiYgbWV0YWRhdGEgPSBzdGQ6Om51bGxv
cHQpOworICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVHU3RyZWFtZXI+IGNyZWF0ZUZha2VTYW1w
bGUoR3N0Q2FwcyosIGNvbnN0IE1lZGlhVGltZSYgcHRzLCBjb25zdCBNZWRpYVRpbWUmIGR0cywg
Y29uc3QgTWVkaWFUaW1lJiBkdXJhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25T
aXplLCBjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKTsKIAogICAgIHZvaWQgZXh0ZW5kVG9UaGVC
ZWdpbm5pbmcoKTsKICAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcHRzOyB9CkBAIC02MiwyMCArNTQsMTQgQEAgcHVibGljOgogICAgIFBs
YXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZv
cm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gUGxhdGZvcm1TYW1wbGU6OkdTdHJlYW1lclNhbXBsZVR5cGU7IH0KICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWZQdHI8SlNDOjpVaW50OENsYW1w
ZWRBcnJheT4gZ2V0UkdCQUltYWdlRGF0YSgpIGNvbnN0IGZpbmFsOwotICAgIFZpZGVvUm90YXRp
b24gdmlkZW9Sb3RhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9Sb3RhdGlv
bjsgfQotICAgIGJvb2wgdmlkZW9NaXJyb3JlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
dmlkZW9NaXJyb3JlZDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgTWVkaWFTYW1wbGVHU3RyZWFtZXIo
R1JlZlB0cjxHc3RTYW1wbGU+JiYsIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwg
Y29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgVmlkZW9Sb3RhdGlvbiA9IFZpZGVvUm90YXRpb246
Ok5vbmUsIGJvb2wgdmlkZW9NaXJyb3JlZCA9IGZhbHNlLCBzdGQ6Om9wdGlvbmFsPFZpZGVvRnJh
bWVUaW1lTWV0YWRhdGE+JiYgPSBzdGQ6Om51bGxvcHQpOwotICAgIE1lZGlhU2FtcGxlR1N0cmVh
bWVyKGNvbnN0IEdSZWZQdHI8R3N0U2FtcGxlPiYsIFZpZGVvUm90YXRpb24gPSBWaWRlb1JvdGF0
aW9uOjpOb25lKTsKKyAgICBNZWRpYVNhbXBsZUdTdHJlYW1lcihHUmVmUHRyPEdzdFNhbXBsZT4m
JiwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBBdG9tU3RyaW5nJiB0
cmFja0lkKTsKICAgICB2aXJ0dWFsIH5NZWRpYVNhbXBsZUdTdHJlYW1lcigpID0gZGVmYXVsdDsK
IAogcHJpdmF0ZToKICAgICBNZWRpYVNhbXBsZUdTdHJlYW1lcihjb25zdCBGbG9hdFNpemUmIHBy
ZXNlbnRhdGlvblNpemUsIGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpOwogCi0gICAgdm9pZCBp
bml0aWFsaXplRnJvbUJ1ZmZlcigpOwotCiAgICAgTWVkaWFUaW1lIG1fcHRzOwogICAgIE1lZGlh
VGltZSBtX2R0czsKICAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKQEAgLTg0LDggKzcwLDYgQEAg
cHJpdmF0ZToKICAgICBHUmVmUHRyPEdzdFNhbXBsZT4gbV9zYW1wbGU7CiAgICAgRmxvYXRTaXpl
IG1fcHJlc2VudGF0aW9uU2l6ZTsKICAgICBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3MgbV9mbGFn
cyB7IE1lZGlhU2FtcGxlOjpJc1N5bmMgfTsKLSAgICBWaWRlb1JvdGF0aW9uIG1fdmlkZW9Sb3Rh
dGlvbiB7IFZpZGVvUm90YXRpb246Ok5vbmUgfTsKLSAgICBib29sIG1fdmlkZW9NaXJyb3JlZCB7
IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvRnJhbWVHU3RyZWFt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
RnJhbWVHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5NTVlMDQyZjg1ZjljM2MxNmZiMmRhODNi
OTM1Yjc3ZDkzOTQ1NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9GcmFtZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwx
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIkdT
dHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVk
QXJyYXlJbmxpbmVzLmg+CisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFZpZGVvRnJhbWVHU3RyZWFtZXI+IFZpZGVvRnJh
bWVHU3RyZWFtZXI6OmNyZWF0ZUZyb21QaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYmIHBpeGVsQnVm
ZmVyLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGNvbnN0IEludFNpemUmIGRl
c3RpbmF0aW9uU2l6ZSwgZG91YmxlIGZyYW1lUmF0ZSwgVmlkZW9Sb3RhdGlvbiB2aWRlb1JvdGF0
aW9uLCBib29sIHZpZGVvTWlycm9yZWQsIHN0ZDo6b3B0aW9uYWw8VmlkZW9GcmFtZVRpbWVNZXRh
ZGF0YT4mJiBtZXRhZGF0YSkKK3sKKyAgICBlbnN1cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOwor
CisgICAgYXV0byBzaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgpOworCisgICAgYXV0byBkYXRhID0g
cGl4ZWxCdWZmZXIudGFrZURhdGEoKTsKKyAgICBhdXRvIHNpemVJbkJ5dGVzID0gZGF0YS0+Ynl0
ZUxlbmd0aCgpOworICAgIGF1dG8gZGF0YUJhc2VBZGRyZXNzID0gZGF0YS0+ZGF0YSgpOworICAg
IGF1dG8gbGVha2VkRGF0YSA9ICZkYXRhLmxlYWtSZWYoKTsKKworICAgIGF1dG8gYnVmZmVyID0g
YWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbChHU1RfTUVNT1JZX0ZMQUdfUkVB
RE9OTFksIGRhdGFCYXNlQWRkcmVzcywgc2l6ZUluQnl0ZXMsIDAsIHNpemVJbkJ5dGVzLCBsZWFr
ZWREYXRhLCBbXShncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBzdGF0aWNfY2FzdDxKU0M6
OlVpbnQ4Q2xhbXBlZEFycmF5Kj4odXNlckRhdGEpLT5kZXJlZigpOworICAgIH0pKTsKKworICAg
IGF1dG8gd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgYXV0byBoZWlnaHQgPSBzaXplLmhlaWdo
dCgpOworICAgIGdzdF9idWZmZXJfYWRkX3ZpZGVvX21ldGEoYnVmZmVyLmdldCgpLCBHU1RfVklE
RU9fRlJBTUVfRkxBR19OT05FLCBHU1RfVklERU9fRk9STUFUX0JHUkEsIHdpZHRoLCBoZWlnaHQp
OworCisgICAgaWYgKG1ldGFkYXRhKQorICAgICAgICB3ZWJraXRHc3RCdWZmZXJTZXRWaWRlb0Zy
YW1lVGltZU1ldGFkYXRhKGJ1ZmZlci5nZXQoKSwgKm1ldGFkYXRhKTsKKworICAgIGludCBmcmFt
ZVJhdGVOdW1lcmF0b3IsIGZyYW1lUmF0ZURlbm9taW5hdG9yOworICAgIGdzdF91dGlsX2RvdWJs
ZV90b19mcmFjdGlvbihmcmFtZVJhdGUsICZmcmFtZVJhdGVOdW1lcmF0b3IsICZmcmFtZVJhdGVE
ZW5vbWluYXRvcik7CisKKyAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3Np
bXBsZSgidmlkZW8veC1yYXciLCAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIkJHUkEiLCAid2lk
dGgiLCBHX1RZUEVfSU5ULCB3aWR0aCwKKyAgICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIGhl
aWdodCwgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBmcmFtZVJhdGVOdW1lcmF0b3Is
IGZyYW1lUmF0ZURlbm9taW5hdG9yLCBudWxscHRyKSk7CisgICAgYXV0byBzYW1wbGUgPSBhZG9w
dEdSZWYoZ3N0X3NhbXBsZV9uZXcoYnVmZmVyLmdldCgpLCBjYXBzLmdldCgpLCBudWxscHRyLCBu
dWxscHRyKSk7CisKKyAgICAvLyBPcHRpb25hbGx5IHJlc2l6ZSB0aGUgdmlkZW8gZnJhbWUgdG8g
Zml0IGRlc3RpbmF0aW9uU2l6ZS4gVGhpcyBjb2RlIHBhdGggaXMgdXNlZCBtb3N0bHkgYnkKKyAg
ICAvLyB0aGUgbW9jayByZWFsdGltZSB2aWRlbyBzb3VyY2Ugd2hlbiB0aGUgZ1VNIGNvbnN0cmFp
bnRzIHNwZWNpZmljYWxseSByZXF1aXJlZCBleGFjdCB3aWR0aAorICAgIC8vIGFuZC9vciBoZWln
aHQgdmFsdWVzLgorICAgIGlmICghZGVzdGluYXRpb25TaXplLmlzWmVybygpKSB7CisgICAgICAg
IEdzdFZpZGVvSW5mbyBpbnB1dEluZm87CisgICAgICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2Fw
cygmaW5wdXRJbmZvLCBjYXBzLmdldCgpKTsKKworICAgICAgICB3aWR0aCA9IGRlc3RpbmF0aW9u
U2l6ZS53aWR0aCgpOworICAgICAgICBoZWlnaHQgPSBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCk7
CisgICAgICAgIGF1dG8gb3V0cHV0Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxl
KCJ2aWRlby94LXJhdyIsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiQkdSQSIsICJ3aWR0aCIs
IEdfVFlQRV9JTlQsIHdpZHRoLAorICAgICAgICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIGhl
aWdodCwgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBmcmFtZVJhdGVOdW1lcmF0b3Is
IGZyYW1lUmF0ZURlbm9taW5hdG9yLCBudWxscHRyKSk7CisgICAgICAgIEdzdFZpZGVvSW5mbyBv
dXRwdXRJbmZvOworICAgICAgICBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJm91dHB1dEluZm8s
IG91dHB1dENhcHMuZ2V0KCkpOworCisgICAgICAgIGF1dG8gb3V0cHV0QnVmZmVyID0gYWRvcHRH
UmVmKGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKG51bGxwdHIsIEdTVF9WSURFT19JTkZPX1NJWkUo
Jm91dHB1dEluZm8pLCBudWxscHRyKSk7CisgICAgICAgIGdzdF9idWZmZXJfYWRkX3ZpZGVvX21l
dGEob3V0cHV0QnVmZmVyLmdldCgpLCBHU1RfVklERU9fRlJBTUVfRkxBR19OT05FLCBHU1RfVklE
RU9fRk9STUFUX0JHUkEsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBHVW5pcXVlUHRyPEdzdFZp
ZGVvQ29udmVydGVyPiBjb252ZXJ0ZXIoZ3N0X3ZpZGVvX2NvbnZlcnRlcl9uZXcoJmlucHV0SW5m
bywgJm91dHB1dEluZm8sIG51bGxwdHIpKTsKKyAgICAgICAgR3N0TWFwcGVkRnJhbWUgaW5wdXRG
cmFtZShnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxlLmdldCgpKSwgaW5wdXRJbmZvLCBHU1Rf
TUFQX1JFQUQpOworICAgICAgICBHc3RNYXBwZWRGcmFtZSBvdXRwdXRGcmFtZShvdXRwdXRCdWZm
ZXIuZ2V0KCksIG91dHB1dEluZm8sIEdTVF9NQVBfV1JJVEUpOworICAgICAgICBnc3RfdmlkZW9f
Y29udmVydGVyX2ZyYW1lKGNvbnZlcnRlci5nZXQoKSwgaW5wdXRGcmFtZS5nZXQoKSwgb3V0cHV0
RnJhbWUuZ2V0KCkpOworICAgICAgICBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X3NhbXBsZV9uZXco
b3V0cHV0QnVmZmVyLmdldCgpLCBvdXRwdXRDYXBzLmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7
CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9GcmFtZUdTdHJlYW1lcihX
VEZNb3ZlKHNhbXBsZSksIEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgcHJlc2VudGF0aW9uVGlt
ZSwgdmlkZW9Sb3RhdGlvbiwgdmlkZW9NaXJyb3JlZCwgV1RGTW92ZShtZXRhZGF0YSkpKTsKK30K
KworVmlkZW9GcmFtZUdTdHJlYW1lcjo6VmlkZW9GcmFtZUdTdHJlYW1lcihHUmVmUHRyPEdzdFNh
bXBsZT4mJiBzYW1wbGUsIGNvbnN0IEZsb2F0U2l6ZSYgcHJlc2VudGF0aW9uU2l6ZSwgY29uc3Qg
TWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRpb24s
IGJvb2wgdmlkZW9NaXJyb3JlZCwgc3RkOjpvcHRpb25hbDxWaWRlb0ZyYW1lVGltZU1ldGFkYXRh
PiYmIG1ldGFkYXRhKQorICAgIDogVmlkZW9GcmFtZShwcmVzZW50YXRpb25UaW1lLCB2aWRlb01p
cnJvcmVkLCB2aWRlb1JvdGF0aW9uKQorICAgICwgbV9zYW1wbGUoV1RGTW92ZShzYW1wbGUpKQor
ICAgICwgbV9wcmVzZW50YXRpb25TaXplKHByZXNlbnRhdGlvblNpemUpCit7CisgICAgQVNTRVJU
KG1fc2FtcGxlKTsKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZl
cihtX3NhbXBsZS5nZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYnVmZmVyKTsKKworICAgIGlm
IChtZXRhZGF0YSkKKyAgICAgICAgYnVmZmVyID0gd2Via2l0R3N0QnVmZmVyU2V0VmlkZW9GcmFt
ZVRpbWVNZXRhZGF0YShidWZmZXIsIFdURk1vdmUobWV0YWRhdGEpKTsKK30KKworVmlkZW9GcmFt
ZUdTdHJlYW1lcjo6VmlkZW9GcmFtZUdTdHJlYW1lcihjb25zdCBHUmVmUHRyPEdzdFNhbXBsZT4m
IHNhbXBsZSwgY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBWaWRlb1JvdGF0aW9u
IHZpZGVvUm90YXRpb24pCisgICAgOiBWaWRlb0ZyYW1lKHByZXNlbnRhdGlvblRpbWUsIGZhbHNl
LCB2aWRlb1JvdGF0aW9uKQorICAgICwgbV9zYW1wbGUoc2FtcGxlKQoreworfQorCitSZWZQdHI8
SlNDOjpVaW50OENsYW1wZWRBcnJheT4gVmlkZW9GcmFtZUdTdHJlYW1lcjo6Z2V0UkdCQUltYWdl
RGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byogY2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9z
YW1wbGUuZ2V0KCkpOworICAgIEdzdFZpZGVvSW5mbyBpbnB1dEluZm87CisgICAgaWYgKCFnc3Rf
dmlkZW9faW5mb19mcm9tX2NhcHMoJmlucHV0SW5mbywgY2FwcykpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgLy8gV2UgY291bGQgY2hlY2sgdGhlIGlucHV0IGZvcm1hdCBpcyBSR0JB
IGJlZm9yZSBhdHRlbXB0aW5nIGEgY29udmVyc2lvbiwgYnV0IGl0IGlzIHZlcnkKKyAgICAvLyB1
bmxpa2VseSB0byBwYXkgb2ZmLiBUaGUgaW5wdXQgZm9ybWF0IGlzIGxpa2VseSB0byBiZSBCR1JB
ICh3aGVuIHRoZSBzYW1wbGVzIGFyZSBjcmVhdGVkIGFzIGEKKyAgICAvLyByZXN1bHQgb2YgbWVk
aWFzdHJlYW0gY2FwdHVyZVN0cmVhbSkgb3Igc29tZSBZVVYgZm9ybWF0IGlmIHRoZSBzYW1wbGUg
aXMgZnJvbSBhIHZpZGVvIGNhcHR1cmUKKyAgICAvLyBkZXZpY2UuIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBvbmx5IGJ5IGludGVybmFscyBkdXJpbmcgbGF5b3V0IHRlc3RzLCBpdCBpcyB0aHVzIG5v
dCBjcml0aWNhbAorICAgIC8vIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLgorCisgICAgYXV0
byBvdXRwdXRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkoY2FwcykpOworICAgIGdzdF9j
YXBzX3NldF9zaW1wbGUob3V0cHV0Q2Fwcy5nZXQoKSwgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcs
ICJSR0JBIiwgbnVsbHB0cik7CisKKyAgICBHc3RWaWRlb0luZm8gb3V0cHV0SW5mbzsKKyAgICBp
ZiAoIWdzdF92aWRlb19pbmZvX2Zyb21fY2Fwcygmb3V0cHV0SW5mbywgb3V0cHV0Q2Fwcy5nZXQo
KSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHdpZHRoID0gR1NUX1ZJREVP
X0lORk9fV0lEVEgoJmlucHV0SW5mbyk7CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19JTkZP
X0hFSUdIVCgmaW5wdXRJbmZvKTsKKyAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gR1NUX1ZJREVP
X0lORk9fU0laRSgmaW5wdXRJbmZvKTsKKyAgICBhdXRvIGJ1ZmZlclN0b3JhZ2UgPSBKU0M6OkFy
cmF5QnVmZmVyOjpjcmVhdGUod2lkdGggKiBoZWlnaHQsIDQpOworICAgIGF1dG8gb3V0cHV0QnVm
ZmVyID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbChHU1RfTUVNT1JZX0ZM
QUdfTk9fU0hBUkUsIGJ1ZmZlclN0b3JhZ2UtPmRhdGEoKSwgYnl0ZUxlbmd0aCwgMCwgYnl0ZUxl
bmd0aCwgbnVsbHB0ciwgW10oZ3BvaW50ZXIpIHsgfSkpOworICAgIGdzdF9idWZmZXJfYWRkX3Zp
ZGVvX21ldGEob3V0cHV0QnVmZmVyLmdldCgpLCBHU1RfVklERU9fRlJBTUVfRkxBR19OT05FLCBH
U1RfVklERU9fRk9STUFUX1JHQkEsIHdpZHRoLCBoZWlnaHQpOworICAgIEdzdE1hcHBlZEZyYW1l
IG91dHB1dEZyYW1lKG91dHB1dEJ1ZmZlci5nZXQoKSwgb3V0cHV0SW5mbywgR1NUX01BUF9XUklU
RSk7CisKKyAgICBHVW5pcXVlUHRyPEdzdFZpZGVvQ29udmVydGVyPiBjb252ZXJ0ZXIoZ3N0X3Zp
ZGVvX2NvbnZlcnRlcl9uZXcoJmlucHV0SW5mbywgJm91dHB1dEluZm8sIG51bGxwdHIpKTsKKyAg
ICBHc3RNYXBwZWRGcmFtZSBpbnB1dEZyYW1lKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihtX3NhbXBs
ZS5nZXQoKSksIGlucHV0SW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICBnc3RfdmlkZW9fY29udmVy
dGVyX2ZyYW1lKGNvbnZlcnRlci5nZXQoKSwgaW5wdXRGcmFtZS5nZXQoKSwgb3V0cHV0RnJhbWUu
Z2V0KCkpOworICAgIHJldHVybiBKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RG
TW92ZShidWZmZXJTdG9yYWdlKSwgMCwgYnl0ZUxlbmd0aCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b0ZyYW1lR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9GcmFtZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExYmY5MDJjMDBjMWE5MzIx
M2E1OTA1Yjc4ZjI4OWI3M2Y4MTQ2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9GcmFtZUdTdHJlYW1lci5oCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTAorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAi
VmlkZW9GcmFtZS5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVNZXRhZGF0YUdTdHJlYW1lci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBWaWRl
b0ZyYW1lR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIFZpZGVvRnJhbWUgeworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8VmlkZW9GcmFtZUdTdHJlYW1lcj4gY3JlYXRlKEdSZWZQdHI8R3N0U2FtcGxl
PiYmIHNhbXBsZSwgY29uc3QgRmxvYXRTaXplJiBwcmVzZW50YXRpb25TaXplLCBjb25zdCBNZWRp
YVRpbWUmIHByZXNlbnRhdGlvblRpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCksIFZpZGVv
Um90YXRpb24gdmlkZW9Sb3RhdGlvbiA9IFZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wgdmlkZW9N
aXJyb3JlZCA9IGZhbHNlLCBzdGQ6Om9wdGlvbmFsPFZpZGVvRnJhbWVUaW1lTWV0YWRhdGE+JiYg
bWV0YWRhdGEgPSBzdGQ6Om51bGxvcHQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBWaWRlb0ZyYW1lR1N0cmVhbWVyKFdURk1vdmUoc2FtcGxlKSwgcHJlc2VudGF0aW9uU2l6
ZSwgcHJlc2VudGF0aW9uVGltZSwgdmlkZW9Sb3RhdGlvbiwgdmlkZW9NaXJyb3JlZCwgV1RGTW92
ZShtZXRhZGF0YSkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmPFZpZGVvRnJhbWVHU3RyZWFt
ZXI+IGNyZWF0ZVdyYXBwZWRTYW1wbGUoY29uc3QgR1JlZlB0cjxHc3RTYW1wbGU+JiBzYW1wbGUs
IGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgVmlkZW9Sb3RhdGlvbiB2aWRlb1Jv
dGF0aW9uID0gVmlkZW9Sb3RhdGlvbjo6Tm9uZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFZpZGVvRnJhbWVHU3RyZWFtZXIoc2FtcGxlLCBwcmVzZW50YXRpb25UaW1lLCB2
aWRlb1JvdGF0aW9uKSk7CisgICAgfQorCisgICAgc3RhdGljIFJlZjxWaWRlb0ZyYW1lR1N0cmVh
bWVyPiBjcmVhdGVGcm9tUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImJiwgY29uc3QgTWVkaWFUaW1l
JiBwcmVzZW50YXRpb25UaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpLCBjb25zdCBJbnRT
aXplJiBkZXN0aW5hdGlvblNpemUgPSB7IH0sIGRvdWJsZSBmcmFtZVJhdGUgPSAxLCBWaWRlb1Jv
dGF0aW9uIHZpZGVvUm90YXRpb24gPSBWaWRlb1JvdGF0aW9uOjpOb25lLCBib29sIHZpZGVvTWly
cm9yZWQgPSBmYWxzZSwgc3RkOjpvcHRpb25hbDxWaWRlb0ZyYW1lVGltZU1ldGFkYXRhPiYmIG1l
dGFkYXRhID0gc3RkOjpudWxsb3B0KTsKKworICAgIEdzdFNhbXBsZSogc2FtcGxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zYW1wbGUuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBWaWRlb0ZyYW1lR1N0
cmVhbWVyKEdSZWZQdHI8R3N0U2FtcGxlPiYmLCBjb25zdCBGbG9hdFNpemUmIHByZXNlbnRhdGlv
blNpemUsIGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSA9IE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKSwgVmlkZW9Sb3RhdGlvbiA9IFZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wgdmlk
ZW9NaXJyb3JlZCA9IGZhbHNlLCBzdGQ6Om9wdGlvbmFsPFZpZGVvRnJhbWVUaW1lTWV0YWRhdGE+
JiYgPSBzdGQ6Om51bGxvcHQpOworICAgIFZpZGVvRnJhbWVHU3RyZWFtZXIoY29uc3QgR1JlZlB0
cjxHc3RTYW1wbGU+JiwgY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBWaWRlb1Jv
dGF0aW9uID0gVmlkZW9Sb3RhdGlvbjo6Tm9uZSk7CisKKyAgICBGbG9hdFNpemUgcHJlc2VudGF0
aW9uU2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJlc2VudGF0aW9uU2l6ZTsgfQorICAg
IFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFNhbXBsZT4gbV9zYW1wbGU7CisgICAgRmxvYXRTaXpl
IG1fcHJlc2VudGF0aW9uU2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1
cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggMmM1NzAyZDA3NmNlOTNiZjM4
NjgyZDYyYWZiZWJiNDdmMjgxYThhYi4uM2U4Zjc4NDQxYWM5NjJiYzk3ZGZhODY4OTFlMTQ0YmMw
NmUxNzAyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ci5jcHAKQEAgLTYzLDcgKzYzLDcgQEAKICNlbmRpZgogCiAjaWYgVVNFKEdTVFJFQU1FUikgJiYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLSNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgor
I2luY2x1ZGUgIlZpZGVvRnJhbWVHU3RyZWFtZXIuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJ
REVPKQpAQCAtMTIyLDcgKzEyMiw3IEBAIFJlZlB0cjxNZWRpYVNhbXBsZT4gR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9NZWRpCiB7CiAjaWYg
VVNFKEdTVFJFQU1FUikKICAgICBpZiAoYXV0byBwaXhlbEJ1ZmZlciA9IHJlYWRDb21wb3NpdGVk
UmVzdWx0cygpKQotICAgICAgICByZXR1cm4gTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZUlt
YWdlU2FtcGxlKFdURk1vdmUoKnBpeGVsQnVmZmVyKSk7CisgICAgICAgIHJldHVybiBWaWRlb0Zy
YW1lR1N0cmVhbWVyOjpjcmVhdGVGcm9tUGl4ZWxCdWZmZXIoV1RGTW92ZSgqcGl4ZWxCdWZmZXIp
KTsKICNlbmRpZgogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFt
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5kZXggN2MwZTdjZWUwMThmMTg2YWYx
YmE1MmUwMGIwM2JjYmMzNDhjNzA2OC4uNmFiMWFhYTExNTE4YTNiNzk3NTdkMDFkZjJhNjlhZmI2
NjM2NjBlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1T
b3VyY2UuY3BwCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVN
ZWRpYVN0cmVhbS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvRGF0YS5oIgogI2luY2x1ZGUg
IkdTdHJlYW1lckNvbW1vbi5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCiAj
aW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZUdTdHJl
YW1lci5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVNZXRhZGF0YUdTdHJlYW1lci5oIgogI2luY2x1
ZGUgIlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uaCIKIApAQCAtMjgzLDcgKzI4Myw2IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKCFtX2NvbmZpZ3VyZWRTaXplLmhlaWdodCgpKQogICAgICAg
ICAgICAgbV9jb25maWd1cmVkU2l6ZS5zZXRIZWlnaHQoY2FwdHVyZVNpemUuaGVpZ2h0KCkpOwog
Ci0gICAgICAgIGF1dG8qIG1lZGlhU2FtcGxlID0gc3RhdGljX2Nhc3Q8TWVkaWFTYW1wbGVHU3Ry
ZWFtZXIqPigmc2FtcGxlKTsKICAgICAgICAgYXV0byB2aWRlb1JvdGF0aW9uID0gc2FtcGxlLnZp
ZGVvUm90YXRpb24oKTsKICAgICAgICAgYm9vbCB2aWRlb01pcnJvcmVkID0gc2FtcGxlLnZpZGVv
TWlycm9yZWQoKTsKICAgICAgICAgaWYgKG1fdmlkZW9Sb3RhdGlvbiAhPSB2aWRlb1JvdGF0aW9u
IHx8IG1fdmlkZW9NaXJyb3JlZCAhPSB2aWRlb01pcnJvcmVkKSB7CkBAIC0yOTYsNyArMjk1LDgg
QEAgcHVibGljOgogICAgICAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZC5nZXQoKSwgZ3N0
X2V2ZW50X25ld190YWcoZ3N0X3RhZ19saXN0X25ldyhHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9O
LCBvcmllbnRhdGlvbi51dGY4KCkuZGF0YSgpLCBudWxscHRyKSkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgYXV0byogZ3N0U2FtcGxlID0gbWVkaWFTYW1wbGUtPnBsYXRmb3JtU2FtcGxlKCkuc2Ft
cGxlLmdzdFNhbXBsZTsKKyAgICAgICAgYXV0byogdmlkZW9GcmFtZSA9IHN0YXRpY19jYXN0PFZp
ZGVvRnJhbWVHU3RyZWFtZXIqPigmc2FtcGxlKTsKKyAgICAgICAgYXV0byogZ3N0U2FtcGxlID0g
dmlkZW9GcmFtZS0+c2FtcGxlKCk7CiAgICAgICAgIGlmICghbV9jb25maWd1cmVkU2l6ZS5pc0Vt
cHR5KCkgJiYgbV9sYXN0S25vd25TaXplICE9IG1fY29uZmlndXJlZFNpemUpIHsKICAgICAgICAg
ICAgIG1fbGFzdEtub3duU2l6ZSA9IG1fY29uZmlndXJlZFNpemU7CiAgICAgICAgICAgICB1cGRh
dGVCbGFja0ZyYW1lKGdzdF9zYW1wbGVfZ2V0X2NhcHMoZ3N0U2FtcGxlKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
VmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IDY5ZGEy
MGI2ODBlODU5ZmQ3NmY2MjBiOTMzYTVlYTZmMGViYmM0ZWYuLjE1MDA1MDJhM2VkYzA5OWIzZDJh
YzZjMmZiZjU5OTllMGVkMmIwZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJE
aXNwbGF5Q2FwdHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDYXB0dXJlRGV2aWNl
TWFuYWdlci5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCiAKICNpbmNsdWRl
IDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KIApAQCAtMTkxLDIxICsxOTAsMjIgQEAgdm9pZCBHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCiAgICAgbV9jYXB0
dXJlci0+cGxheSgpOwogfQogCi12b2lkIEdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJv
Y2Vzc05ld0ZyYW1lKFJlZjxNZWRpYVNhbXBsZT4mJiBzYW1wbGUpCit2b2lkIEdTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc05ld0ZyYW1lKFJlZjxWaWRlb0ZyYW1lR1N0cmVhbWVy
PiYmIHZpZGVvRnJhbWUpCiB7CiAgICAgaWYgKCFpc1Byb2R1Y2luZ0RhdGEoKSB8fCBtdXRlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBkaXNwYXRjaE1lZGlhU2FtcGxlVG9PYnNlcnZlcnMo
V1RGTW92ZShzYW1wbGUpLCB7IH0pOworICAgIGRpc3BhdGNoTWVkaWFTYW1wbGVUb09ic2VydmVy
cyhXVEZNb3ZlKHZpZGVvRnJhbWUpLCB7IH0pOwogfQogCiBHc3RGbG93UmV0dXJuIEdTdHJlYW1l
clZpZGVvQ2FwdHVyZVNvdXJjZTo6bmV3U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCogc2luaywg
R1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlKiBzb3VyY2UpCiB7CiAgICAgYXV0byBnc3RTYW1w
bGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5r
KSkpOwotICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRl
KFdURk1vdmUoZ3N0U2FtcGxlKSwgV2ViQ29yZTo6RmxvYXRTaXplKCksIFN0cmluZygpKTsKKyAg
ICBhdXRvIHByZXNlbnRhdGlvblRpbWUgPSBmcm9tR3N0Q2xvY2tUaW1lKEdTVF9CVUZGRVJfUFRT
KGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihnc3RTYW1wbGUuZ2V0KCkpKSk7CisgICAgYXV0byB2aWRl
b0ZyYW1lID0gVmlkZW9GcmFtZUdTdHJlYW1lcjo6Y3JlYXRlKFdURk1vdmUoZ3N0U2FtcGxlKSwg
V2ViQ29yZTo6RmxvYXRTaXplKCksIHByZXNlbnRhdGlvblRpbWUpOwogCi0gICAgc291cmNlLT5z
Y2hlZHVsZURlZmVycmVkVGFzayhbc291cmNlLCBzYW1wbGUgPSBXVEZNb3ZlKG1lZGlhU2FtcGxl
KV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIHNvdXJjZS0+cHJvY2Vzc05ld0ZyYW1lKFdURk1vdmUo
c2FtcGxlKSk7CisgICAgc291cmNlLT5zY2hlZHVsZURlZmVycmVkVGFzayhbc291cmNlLCB2aWRl
b0ZyYW1lID0gV1RGTW92ZSh2aWRlb0ZyYW1lKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHNvdXJj
ZS0+cHJvY2Vzc05ld0ZyYW1lKFdURk1vdmUodmlkZW9GcmFtZSkpOwogICAgIH0pOwogCiAgICAg
cmV0dXJuIEdTVF9GTE9XX09LOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVv
Q2FwdHVyZVNvdXJjZS5oCmluZGV4IGFhOGE5MmUxZTc1Zjg4MTZjYWUzYjczMjMyMGMxMGU0YTA1
MmE3NTYuLmVlNGY4OWEwMTRmZGJlNzNhYjBhODNhNTVjNjM4NzdlM2Y5M2FkZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJDYXB0dXJlRGV2aWNlLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVy
VmlkZW9DYXB0dXJlci5oIgogI2luY2x1ZGUgIlJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmgi
CisjaW5jbHVkZSAiVmlkZW9GcmFtZUdTdHJlYW1lci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQyLDcgKzQzLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBvdmVycmlkZTsKICAgICBHc3RFbGVtZW50KiBwaXBlbGlu
ZSgpIHsgcmV0dXJuIG1fY2FwdHVyZXItPnBpcGVsaW5lKCk7IH0KICAgICBHU3RyZWFtZXJDYXB0
dXJlciogY2FwdHVyZXIoKSB7IHJldHVybiBtX2NhcHR1cmVyLmdldCgpOyB9Ci0gICAgdm9pZCBw
cm9jZXNzTmV3RnJhbWUoUmVmPE1lZGlhU2FtcGxlPiYmKTsKKyAgICB2b2lkIHByb2Nlc3NOZXdG
cmFtZShSZWY8VmlkZW9GcmFtZUdTdHJlYW1lcj4mJik7CiAKICAgICAvLyBHU3RyZWFtZXJDYXB0
dXJlcjo6T2JzZXJ2ZXIKICAgICB2b2lkIHNvdXJjZUNhcHNDaGFuZ2VkKGNvbnN0IEdzdENhcHMq
KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGNhYThiOTQ2NTM5NDFlOWQxNTYwNDQ2OTFiZDEyMjE0
MGZiNDYzNTguLjQwMWU0YTE0OTdhYzIxYTA5OTFjNmU1OTkxNTQzZDViOTVhMWYyYWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVh
bWVyLmNwcApAQCAtMjYsOSArMjYsOSBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXIu
aCIKIAotI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlZpZGVvRnJhbWVHU3RyZWFtZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0xNjQsOSArMTY0LDkgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lcjo6
dXBkYXRlU2FtcGxlQnVmZmVyKCkKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmlkZW9GcmFtZVRpbWVN
ZXRhZGF0YT4gbWV0YWRhdGE7CiAgICAgbWV0YWRhdGEtPmNhcHR1cmVUaW1lID0gTW9ub3Rvbmlj
VGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKTsKLSAgICBhdXRvIHNhbXBsZSA9IE1lZGlh
U2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZVNhbXBsZShXVEZNb3ZlKCpwaXhlbEJ1ZmZlciks
IHNpemUoKSwgZnJhbWVSYXRlKCksIHNhbXBsZVJvdGF0aW9uKCksIGZhbHNlLCBXVEZNb3ZlKG1l
dGFkYXRhKSk7Ci0gICAgc2FtcGxlLT5vZmZzZXRUaW1lc3RhbXBzQnkoTWVkaWFUaW1lOjpjcmVh
dGVXaXRoRG91YmxlKChlbGFwc2VkVGltZSgpICsgMTAwX21zKS5zZWNvbmRzKCkpKTsKLSAgICBk
aXNwYXRjaE1lZGlhU2FtcGxlVG9PYnNlcnZlcnMoc2FtcGxlLmdldCgpLCB7IH0pOworICAgIGF1
dG8gcHJlc2VudGF0aW9uVGltZSA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgoZWxhcHNl
ZFRpbWUoKSArIDEwMF9tcykuc2Vjb25kcygpKTsKKyAgICBhdXRvIHZpZGVvRnJhbWUgPSBWaWRl
b0ZyYW1lR1N0cmVhbWVyOjpjcmVhdGVGcm9tUGl4ZWxCdWZmZXIoV1RGTW92ZSgqcGl4ZWxCdWZm
ZXIpLCBwcmVzZW50YXRpb25UaW1lLCBzaXplKCksIGZyYW1lUmF0ZSgpLCBzYW1wbGVSb3RhdGlv
bigpLCBmYWxzZSwgV1RGTW92ZShtZXRhZGF0YSkpOworICAgIGRpc3BhdGNoTWVkaWFTYW1wbGVU
b09ic2VydmVycyh2aWRlb0ZyYW1lLmdldCgpLCB7IH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9s
aWJ3ZWJydGMvZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvZ3N0cmVh
bWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5jcHAKaW5kZXggZmQ2YTMy
ZjA0ODMzNWUyZDkxOTgxMTRlODMzZDlmMGQyZTE5NjRmMi4uN2Q5NTBmNjc4MDA2NWIyZTllNTc2
ZDQ2YzU1NmExM2E3NTNjNTBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VMaWJXZWJSVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlTGliV2ViUlRD
LmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUxpYldlYlJUQy5oIgogCiAjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9GcmFtZUxpYldlYlJU
Qy5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9G
cmFtZUdTdHJlYW1lci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU4LDEzICs1OCwx
NCBAQCB2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6T25GcmFtZShj
b25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYQogICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gcHJlc2VudGF0aW9uVGltZSA9IGZyb21Hc3RD
bG9ja1RpbWUoZnJhbWUudGltZXN0YW1wX3VzKCkpOwogICAgIGlmIChmcmFtZS52aWRlb19mcmFt
ZV9idWZmZXIoKS0+dHlwZSgpID09IHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcjo6VHlwZTo6a05h
dGl2ZSkgewogICAgICAgICBhdXRvKiBmcmFtZWJ1ZmZlciA9IHN0YXRpY19jYXN0PEdTdHJlYW1l
clZpZGVvRnJhbWVMaWJXZWJSVEMqPihmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKS5nZXQoKSk7
Ci0gICAgICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVh
dGVXcmFwcGVkU2FtcGxlKGZyYW1lYnVmZmVyLT5nZXRTYW1wbGUoKSwgc3RhdGljX2Nhc3Q8TWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb24+KGZyYW1lLnJvdGF0aW9uKCkpKSwgeyB9KTsKKyAgICAg
ICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoVmlkZW9GcmFtZUdTdHJlYW1lcjo6Y3JlYXRlV3JhcHBl
ZFNhbXBsZShmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlKCksIHByZXNlbnRhdGlvblRpbWUsIHN0YXRp
Y19jYXN0PE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uPihmcmFtZS5yb3RhdGlvbigpKSksIHsg
fSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBnc3RTYW1wbGUgPSBjb252ZXJ0TGliV2Vi
UlRDVmlkZW9GcmFtZVRvR1N0cmVhbWVyU2FtcGxlKGZyYW1lKTsKICAgICAgICAgYXV0byBtZXRh
ZGF0YSA9IHN0ZDo6bWFrZV9vcHRpb25hbChtZXRhZGF0YUZyb21WaWRlb0ZyYW1lKGZyYW1lKSk7
Ci0gICAgICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVh
dGUoV1RGTW92ZShnc3RTYW1wbGUpLCB7IH0sIHsgfSwgc3RhdGljX2Nhc3Q8TWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb24+KGZyYW1lLnJvdGF0aW9uKCkpLCBmYWxzZSwgV1RGTW92ZShtZXRhZGF0
YSkpLCB7IH0pOworICAgICAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShWaWRlb0ZyYW1lR1N0cmVh
bWVyOjpjcmVhdGUoV1RGTW92ZShnc3RTYW1wbGUpLCB7IH0sIHByZXNlbnRhdGlvblRpbWUsIHN0
YXRpY19jYXN0PE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uPihmcmFtZS5yb3RhdGlvbigpKSwg
ZmFsc2UsIFdURk1vdmUobWV0YWRhdGEpKSwgeyB9KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlTGliV2ViUlRDLmNwcAppbmRleCA4MjIzNTY2NzZkZTEyNmY4YWFjYmNjMDZj
MzIzMGE2ZWQxN2NmNmNjLi5jNmRjYWQ3NTI1ZWRiZTY4ZDExMGFlMDIxMjU3MWNiMzZiNGY4NmZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJy
dGMvZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL2dzdHJlYW1l
ci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VMaWJXZWJSVEMuY3BwCkBAIC0zMSw3ICszMSw3
IEBACiAjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlTGliV2ViUlRDLmgiCiAK
ICNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0ZyYW1lTGliV2ViUlRDLmgiCi0jaW5jbHVkZSAiTWVk
aWFTYW1wbGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1lR1N0cmVhbWVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjcsOSArNjcsOCBAQCB2b2lkIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUxpYldlYlJUQzo6dmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1w
bGUmIHNhbQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBBU1NFUlQoc2FtcGxlLnBsYXRm
b3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6R1N0cmVhbWVyU2FtcGxlVHlwZSk7
Ci0gICAgYXV0byYgbWVkaWFTYW1wbGUgPSBzdGF0aWNfY2FzdDxNZWRpYVNhbXBsZUdTdHJlYW1l
ciY+KHNhbXBsZSk7Ci0gICAgYXV0byBmcmFtZUJ1ZmZlciA9IEdTdHJlYW1lclZpZGVvRnJhbWVM
aWJXZWJSVEM6OmNyZWF0ZShtZWRpYVNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5nc3RT
YW1wbGUpOworICAgIGF1dG8mIHZpZGVvRnJhbWUgPSBzdGF0aWNfY2FzdDxWaWRlb0ZyYW1lR1N0
cmVhbWVyJj4oc2FtcGxlKTsKKyAgICBhdXRvIGZyYW1lQnVmZmVyID0gR1N0cmVhbWVyVmlkZW9G
cmFtZUxpYldlYlJUQzo6Y3JlYXRlKHZpZGVvRnJhbWUuc2FtcGxlKCkpOwogCiAgICAgc2VuZEZy
YW1lKFdURk1vdmUoZnJhbWVCdWZmZXIpKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>