<?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>175595</bug_id>
          
          <creation_ts>2017-08-15 13:27:32 -0700</creation_ts>
          <short_desc>Remove the ImageSource from the class hierarchy that connects BitmapImage to ImageFrame</short_desc>
          <delta_ts>2017-11-29 15:25:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1338833</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-15 13:27:32 -0700</bug_when>
    <thetext>Currently we have this hierarchy: BitmapImage -&gt; ImageSource -&gt; ImageFrameCache -&gt; ImageDecoder + ImageFrame. This hierarchy structure has been troublesome. Two reasons for that:

1) Unclear purpose of ImageSource: The initial plan was to have ImageSource be responsible of retrieving and caching the image metadata. And have ImageFrameCache be responsible of retrieving and caching the image frames. This plan changed gradually by having ImageFrameCache be responsible for both. ImageSource mainly became a bridge connecting BitmapImage to ImageFrameCache. Other than that, it has few APIs which set the encoded data in the ImageDecoder. Some other APIs ensure the decoder is created and the rest are just helper APIs. All these APIs can fit better in either BitmapImage or ImageFrameCache.

2) The life cycle of the decoder has become problematic and hard to be understood: This is because it is shared among
   -- ImageSource (for setting the encoded data)
   -- ImageFrameCache (for retrieving the image metadata and decoding the image frames synchronously)
   -- The decoding thread (for decoding the image frames asynchronously)

The way it shared is the following. The ImageSource creates the ImageDecoder and passes a RefPtr to ImageDecoder to the ImageFrameCache. The ImageFrameCache passes a RefPtr to ImageDecoder to the decoding thread. We saw few crashes because the ImageDecoder was not a RefPtr at the beginning. Then we saw other crashes because the ImageDecoder was not protected by the decoding thread.

To fix this issue, here is the plan:
-- Get rid of ImageSource by moving its APIs to ImageFrameCache and BitmapImage.
-- Have BitmapImage::m_source a RefPtr of type ImageFrameCache
-- In followup patch rename ImageFrameCache to be ImageSource</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338847</commentid>
    <comment_count>1</comment_count>
      <attachid>318163</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-15 13:38:55 -0700</bug_when>
    <thetext>Created attachment 318163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338872</commentid>
    <comment_count>2</comment_count>
      <attachid>318172</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-15 14:12:37 -0700</bug_when>
    <thetext>Created attachment 318172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338884</commentid>
    <comment_count>3</comment_count>
      <attachid>318175</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-15 14:34:59 -0700</bug_when>
    <thetext>Created attachment 318175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338915</commentid>
    <comment_count>4</comment_count>
      <attachid>318175</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-08-15 15:43:33 -0700</bug_when>
    <thetext>Comment on attachment 318175
Patch

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

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:-29487
&gt; -				5182C23F1F313A090059BA7C /* ServiceWorker.h in Headers */,
&gt;  				51F1755F1F3EBC8300C74950 /* ServiceWorkerContainer.h in Headers */,
&gt; -				5182C2411F313A090059BA7C /* ServiceWorkerContainer.h in Headers */,
&gt;  				51F175611F3EBC8300C74950 /* ServiceWorkerGlobalScope.h in Headers */,
&gt; -				5182C2431F313A090059BA7C /* ServiceWorkerGlobalScope.h in Headers */,
&gt;  				51F175631F3EBC8300C74950 /* ServiceWorkerJob.h in Headers */,
&gt; -				511CA67E1F3905A60019E074 /* ServiceWorkerJob.h in Headers */,
&gt;  				51F175641F3EBC8300C74950 /* ServiceWorkerJobClient.h in Headers */,
&gt; -				511CA6801F39331F0019E074 /* ServiceWorkerJobClient.h in Headers */,
&gt; -				511CA67A1F3904B10019E074 /* ServiceWorkerProvider.h in Headers */,
&gt;  				51F175661F3EBC8300C74950 /* ServiceWorkerProvider.h in Headers */,
&gt;  				51F175681F3EBC8300C74950 /* ServiceWorkerRegistration.h in Headers */,
&gt; -				5182C2451F313A090059BA7C /* ServiceWorkerRegistration.h in Headers */,
&gt;  				51F175691F3EBC8300C74950 /* ServiceWorkerRegistrationOptions.h in Headers */,
&gt;  				51F1756B1F3EBC8300C74950 /* ServiceWorkerRegistrationParameters.h in Headers */,
&gt;  				51F1756C1F3EBC8300C74950 /* ServiceWorkerUpdateViaCache.h in Headers */,
&gt; -				51F174FF1F35899700C74950 /* ServiceWorkerUpdateViaCache.h in Headers */,

I think you may have done something bad to the project here.

&gt; Source/WebCore/platform/graphics/BitmapImage.h:206
&gt; -    mutable ImageSource m_source;
&gt; +    mutable Ref&lt;ImageFrameCache&gt; m_source;

Is there a reason ImageFrameCache can&apos;t just be by value?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339279</commentid>
    <comment_count>5</comment_count>
      <attachid>318286</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-16 13:49:29 -0700</bug_when>
    <thetext>Created attachment 318286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339345</commentid>
    <comment_count>6</comment_count>
      <attachid>318175</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-16 16:25:37 -0700</bug_when>
    <thetext>Comment on attachment 318175
Patch

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

&gt;&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:-29487
&gt;&gt; -				51F174FF1F35899700C74950 /* ServiceWorkerUpdateViaCache.h in Headers */,
&gt; 
&gt; I think you may have done something bad to the project here.

I just deleted ImageSource.cpp and ImageSource.h from the WebKit xcode project. When I applied this patch locally I did not see these weird deletions in project.pbxproj. I guess it is an issue with xcode itself. The new patch does not have this weirdness.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.h:206
&gt;&gt; +    mutable Ref&lt;ImageFrameCache&gt; m_source;
&gt; 
&gt; Is there a reason ImageFrameCache can&apos;t just be by value?

I think we can&apos;t do that. ImageFrameCache inherits from ThreadSafeRefCounted&lt;ImageFrameCache&gt;. The decoding thread calls makeRef(*this) to have a protected instance of ImageFrameCache. Both BitmapImage and the decoding thread have to have two RefPtrs encapsulating the same ImageFrameCache object. The destructor of these RefPtrs will decide when the ImageFrameCache object itself is safe to be deleted.

If I make BitmapImage::m_source be of type ImageFrameCache, the destructor of BitmapImage will destroy it immediately even if the protected thread holds a RefPtr to the same  ImageFrameCache object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375984</commentid>
    <comment_count>7</comment_count>
      <attachid>327891</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-11-29 13:04:58 -0800</bug_when>
    <thetext>Created attachment 327891
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376018</commentid>
    <comment_count>8</comment_count>
      <attachid>327899</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-11-29 13:57:58 -0800</bug_when>
    <thetext>Created attachment 327899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376068</commentid>
    <comment_count>9</comment_count>
      <attachid>327899</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-29 15:23:58 -0800</bug_when>
    <thetext>Comment on attachment 327899
Patch

Clearing flags on attachment: 327899

Committed r225300: &lt;https://trac.webkit.org/changeset/225300&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376069</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-29 15:24:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376070</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-29 15:25:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/35759071&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318163</attachid>
            <date>2017-08-15 13:38:55 -0700</date>
            <delta_ts>2017-08-15 14:12:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175595-20170815133854.patch</filename>
            <type>text/plain</type>
            <size>81170</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDE3LTA4LTE1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRo
ZSBJbWFnZVNvdXJjZSBmcm9tIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRt
YXBJbWFnZSB0byBJbWFnZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgY29ubmVjdHMgQml0bWFwSW1h
Z2UgdG8gSW1hZ2VGcmFtZSBoYXMgYmVlbgorICAgICAgICB0cm91Ymxlc29tZS4gSW1hZ2VTb3Vy
Y2UgZG9lcyBub3QgaGF2ZSBhIGNsZWFyIHJlc3BvbnNpYmlsaXR5IG90aGVyIHRoYW4KKyAgICAg
ICAgYSBicmlkZ2UgdGhhdCBjb25uZWN0cyBCaXRtYXBJYW1nZSB0byBJbWFnZUZyYW1lQ2FjaGUu
IFNoYXJpbmcgdGhlIAorICAgICAgICBJbWFnZURlY29kZXIgYmV0d2VlbiBJbWFnZVNvdXJjZSBh
bmQgSW1hZ2VGcmFtZUNhY2hlIGlzIHVnbHkgYW5kIGNhdXNlZAorICAgICAgICBmZXcgY3Jhc2hl
cyBpbiB0aGUgcGFzdC4KKworICAgICAgICBUaGlzIHBhdGNoIHdpbGwgZG8gdGhlIGZpcnN0IHN0
ZXAgZm9yIGZpeGluZyB0aGlzIGlzc3VlLiBGaXJzdCBnZXQgcmlkIG9mCisgICAgICAgIEltYWdl
U291cmNlIGJ5IG1vdmluZyBpdHMgQVBJcyB0byBJbWFnZUZyYW1lQ2FjaGUgYW5kIEJpdG1hcElt
YWdlLiBSZXBsYWNlCisgICAgICAgIGFsbCB0aGUgaW5zdGFuY2VzIG9mIEltYWdlU291cmNlIGJ5
IEltYWdlRnJhbWVDYWNoZS4gVGhlIG5leHQgc3RlcCB3aWxsCisgICAgICAgIGJlIHRvIHJlbmFt
ZSBJbWFnZUZyYW1lQ2FjaGUgdG8gSW1hZ2VTb3VyY2UuIEJ1dCB0aGlzIHdpbGwgYmUgZG9uZSBp
biBhCisgICAgICAgIGZvbGxvdy11cCBwYXRjaAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6fkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpjYW5Vc2VBc3luY0RlY29kaW5nRm9yTGFyZ2VJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OnNob3VsZFVzZUFzeW5jRGVjb2RpbmdGb3JBbmltYXRlZEltYWdl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3Vic2FtcGxpbmdMZXZl
bEZvclNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYW5EZXN0
cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludGVybmFs
U3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnN0b3BBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmltYWdlRnJhbWVBdmFpbGFi
bGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVDYWNoZTo6SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVD
YWNoZTo6ZW5zdXJlRGVjb2RlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpy
ZXNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpkYXRhQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmlzQWxsRGF0YVJlY2VpdmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6ZGVzdHJveUZyYW1lQnVmZmVy
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjYW5Vc2VBc3luY0Rl
Y29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6bWF4aW11bVN1YnNh
bXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpzZXRUYXJn
ZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpkdW1w
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6c2V0RGVjb2Rlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmRlY29kZXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpyZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6On5J
bWFnZUV4dHJhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6aXNBbGxEYXRhUmVjZWl2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6aXNBbGxEYXRhUmVjZWl2ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmRlc3Ryb3lGcmFtZUJ1ZmZlckNhY2hl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNh
Y2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmRl
c3Ryb3lGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rl
cjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6CisKIDIwMTctMDgtMTUgIENvbW1p
dCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyMTk1MDQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQyMiw3ICs0MjIsNiBAQAogCQkwRjE3NzQ4MTEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xs
QW5pbWF0b3JJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE3NzQ3RjEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MubW0gKi87
IH07CiAJCTBGMzZFNzM3MUJEMTgzN0EwMDJEQjg5MSAvKiBMYXlvdXRQb2ludC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM2RTczNjFCRDE4MzdB
MDAyREI4OTEgLyogTGF5b3V0UG9pbnQuY3BwICovOyB9OwogCQkwRjM2RTczOTFCRDE4NEI5MDAy
REI4OTEgLyogTGF5b3V0U2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM2RTczODFCRDE4NEI5MDAyREI4OTEgLyogTGF5b3V0U2l6ZS5jcHAg
Ki87IH07Ci0JCTBGM0M3MjVFMTk3NDg3NEIwMEFFREQwQyAvKiBJbWFnZVNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNDNzI1RDE5NzQ4
NzRCMDBBRUREMEMgLyogSW1hZ2VTb3VyY2UuY3BwICovOyB9OwogCQkwRjNERDQ0RjEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5j
cHAgKi87IH07CiAJCTBGM0RENDUwMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNERDQ0RTEyRjVF
QTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5oICovOyB9OwogCQkwRjNGMEU1OTE1NzAzMEMzMDA2
REE1N0YgLyogUmVuZGVyR2VvbWV0cnlNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRjBFNTcxNTcwMzBDMzAwNkRBNTdGIC8qIFJlbmRlckdl
b21ldHJ5TWFwLmNwcCAqLzsgfTsKQEAgLTUyMDcsNyArNTIwNiw2IEBACiAJCUIyNzUzNTZFMEIw
NTM4MTQwMDJDRTY0RiAvKiBJY29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjc1MzU0MDBCMDUzODE0MDAyQ0U2NEYgLyogSWNvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTZGMEIwNTM4
MTQwMDJDRTY0RiAvKiBJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjc1MzU0MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuY3BwICovOyB9
OwogCQlCMjc1MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQyMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUIyNzUzNTcxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDMwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0NDBCMDUz
ODE0MDAyQ0U2NEYgLyogSW50UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU3MzBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0
NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAgKi87IH07CiAJCUIyNzUzNTc0MEIwNTM4
MTQwMDJDRTY0RiAvKiBJbnRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjc1MzU0NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03ODM0LDcgKzc4
MzIsNiBAQAogCQkwRjE3NzQ3RjEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1Mu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxBbmltYXRv
cklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNkU3MzYxQkQxODM3QTAw
MkRCODkxIC8qIExheW91dFBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExheW91dFBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
NkU3MzgxQkQxODRCOTAwMkRCODkxIC8qIExheW91dFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGM0M3MjVEMTk3NDg3NEIwMEFFREQwQyAvKiBJbWFnZVNvdXJjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZVNvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFk
b3dCbHVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd0Js
dXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNERDQ0RTEyRjVFQTFCMDAw
RDkxOTAgLyogU2hhZG93Qmx1ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aGFkb3dCbHVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0YwRTU3MTU3MDMw
QzMwMDZEQTU3RiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJHZW9tZXRyeU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjQ4NCw4ICsxMjQ4MSw4IEBACiAJCTlCMDk4QkRFMUYzRDY3M0QwMDJE
RDU2MiAvKiBKU0RhdGFUcmFuc2Zlckl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNEYXRhVHJhbnNmZXJJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDk4QkRGMUYzRDY3M0QwMDJERDU2MiAvKiBKU0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YVRyYW5zZmVySXRlbUxp
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjA5OEJFMDFGM0Q2NzNEMDAy
REQ1NjIgLyogSlNEYXRhVHJhbnNmZXJJdGVtTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0RhdGFUcmFuc2Zlckl0ZW1MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTlCMDk4QkU2MUYzRDZBRjYwMDJERDU2MiAvKiBKU1N0cmluZ0NhbGxiYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTU3RyaW5nQ2FsbGJhY2su
Y3BwOyBwYXRoID0gSlNTdHJpbmdDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTlCMDk4QkU3MUYzRDZBRjYwMDJERDU2MiAvKiBKU1N0cmluZ0NhbGxiYWNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTU3RyaW5nQ2FsbGJhY2suaDsgcGF0aCA9
IEpTU3RyaW5nQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwOThC
RTYxRjNENkFGNjAwMkRENTYyIC8qIEpTU3RyaW5nQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHJpbmdDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTlCMDk4QkU3MUYzRDZBRjYwMDJERDU2MiAvKiBKU1N0cmluZ0Nh
bGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nQ2FsbGJh
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwRkU4NzMxRDlFMDJERjAwNEE4
QUNCIC8qIERvY3VtZW50T3JTaGFkb3dSb290LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBE
b2N1bWVudE9yU2hhZG93Um9vdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
MTMyNTdCMUYzRDJBQkEwMERBQUI2OSAvKiBEYXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhVHJhbnNmZXJJdGVtTGlzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTlCNjdFMUI5NjRFNTIwMDM0ODc0NSAv
KiBTaGFkb3dSb290LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTaGFkb3dSb290LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNjkxLDcgKzEzNjg4LDYgQEAKIAkJQjI3
NTM1NDAwQjA1MzgxNDAwMkNFNjRGIC8qIEljb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEljb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDEw
QjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUz
NTQyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1NDMw
QjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Mjc1MzU0NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludFBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNzUzNTQ1MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjI3NTM1NDYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIzMjk1LDggKzIzMjkxLDYgQEAKIAkJCQlBODc0OEQ3NDEyQ0MzRjg5MDAxRkJB
NDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkNDMzc2MzAwMUZC
QTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKIAkJCQk0OTI5MUU0QTEzNDE3MkM4MDBFNzUz
REUgLyogSW1hZ2VSZW5kZXJpbmdNb2RlLmggKi8sCi0JCQkJMEYzQzcyNUQxOTc0ODc0QjAwQUVE
RDBDIC8qIEltYWdlU291cmNlLmNwcCAqLywKLQkJCQlCMjc1MzU0MzBCMDUzODE0MDAyQ0U2NEYg
LyogSW1hZ2VTb3VyY2UuaCAqLywKIAkJCQk1NTUwQ0I0MTFFOTU1RTNDMDAxMTFBQTAgLyogSW1h
Z2VUeXBlcy5oICovLAogCQkJCTA3OTQxNzkzMTY2RUEwNEUwMDk0MTZDMiAvKiBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlLmggKi8sCiAJCQkJMDdDRTc3RDQxNjcxMkE2QTAwQzU1QTQ3IC8qIEluYmFu
ZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaCAqLywKQEAgLTI3NzM2LDcgKzI3NzMwLDYgQEAKIAkJ
CQkyRDVBNTkzMTE1MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjUxQTJGM0YxN0Q3RDNBRTAwNzI1MTdBIC8qIEltYWdlUXVhbGl0eUNvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MjkxRTRCMTM0MTcyQzgwMEU3NTNERSAvKiBJ
bWFnZVJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyNzUzNTcxMEIwNTM4MTQw
MDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzNDgwOTQwRUVG
NTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NTBD
QjQyMUU5NTVFM0MwMDExMUFBMCAvKiBJbWFnZVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQky
NkY3NTZCMzFCM0I2NkY3MDAwNURENzkgLyogSW1tdXRhYmxlTkZBLmggaW4gSGVhZGVycyAqLywK
QEAgLTI5NDY4LDIzICsyOTQ2MSwxNSBAQAogCQkJCTUxNkY3RjZEMUMzMUUzOUEwMEYxMTFEQyAv
KiBTZXJ2ZXJPcGVuREJSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDkzQUVFMzE5REY1
NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTFGMTc1NUQxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTUxODJDMjNGMUYzMTNBMDkwMDU5QkE3QyAvKiBTZXJ2aWNlV29ya2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU1RjFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdv
cmtlckNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE4MkMyNDExRjMxM0EwOTAwNTlC
QTdDIC8qIFNlcnZpY2VXb3JrZXJDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjE3
NTYxMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTUxODJDMjQzMUYzMTNBMDkwMDU5QkE3QyAvKiBTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjE3NTYzMUYzRUJDODMwMEM3NDk1MCAv
KiBTZXJ2aWNlV29ya2VySm9iLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTFDQTY3RTFGMzkwNUE2
MDAxOUUwNzQgLyogU2VydmljZVdvcmtlckpvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMTc1
NjQxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJKb2JDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTUxMUNBNjgwMUYzOTMzMUYwMDE5RTA3NCAvKiBTZXJ2aWNlV29ya2VySm9iQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTFDQTY3QTFGMzkwNEIxMDAxOUUwNzQgLyogU2Vy
dmljZVdvcmtlclByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU2NjFGM0VCQzgz
MDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUYxNzU2ODFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNTE4MkMyNDUxRjMxM0EwOTAwNTlCQTdDIC8qIFNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjE3NTY5MUYzRUJDODMwMEM3
NDk1MCAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTFGMTc1NkIxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU2QzFGM0VCQzgzMDBDNzQ5
NTAgLyogU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1
MUYxNzRGRjFGMzU4OTk3MDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3NTZCMkNFMTE4QjcxMDE2MDBGRUNGQUEgLyogU2Vzc2lvbklE
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMDA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9k
ZUF0dHJpYnV0ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4REJEQjRDMTMwQjBGOEEw
MEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzI0
LDcgKzMxNzA5LDYgQEAKIAkJCQlCMjc1MzU3QjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDVBNTkyRjE1MjUyNTIzMDAzNkVFNTEgLyogSW1hZ2VP
cmllbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTFBMkY0MTE3RDdENURFMDA3MjUx
N0EgLyogSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjND
NzI1RTE5NzQ4NzRCMDBBRUREMEMgLyogSW1hZ2VTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNEIzNDgwOTMwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0dNYWMubW0gaW4gU291
cmNlcyAqLywKIAkJCQkzMTZGRTExNzBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkU5NjFDNTQxOEFEMzM4NTAwRDA3REM1IC8qIElu
YmFuZERhdGFUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzMzNCwxOSArMzMzMTgs
MTIgQEAKIAkJCQk1MTZGN0Y2RTFDMzFFMzlDMDBGMTExREMgLyogU2VydmVyT3BlbkRCUmVxdWVz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkzQUVFNDE5REY1NjQxMDAyQTg2QzMgLyogU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTVDMUYz
RUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUx
ODJDMjNFMUYzMTNBMDkwMDU5QkE3QyAvKiBTZXJ2aWNlV29ya2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxRjE3NTVFMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyQ29udGFpbmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxODJDMjQwMUYzMTNBMDkwMDU5QkE3QyAvKiBTZXJ2
aWNlV29ya2VyQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxODJDMjQyMUYzMTNB
MDkwMDU5QkE3QyAvKiBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFGMTc1NjAxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzU2MjFGM0VCQzgzMDBDNzQ5NTAgLyogU2Vy
dmljZVdvcmtlckpvYi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTFDQTY3RDFGMzkwNUE2MDAx
OUUwNzQgLyogU2VydmljZVdvcmtlckpvYi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTFDQTY3
OTFGMzkwNEIxMDAxOUUwNzQgLyogU2VydmljZVdvcmtlclByb3ZpZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxRjE3NTY1MUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyUHJvdmlk
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1NjcxRjNFQkM4MzAwQzc0OTUwIC8qIFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE4MkMyNDQx
RjMxM0EwOTAwNTlCQTdDIC8qIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGMTc1NkExRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxMUNBNjgzMUYzQTND
RDkwMDE5RTA3NCAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uUGFyYW1ldGVycy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTFGN0Q0NDFFQjFDMzkxMDBFNDdCODMgLyogU2Vzc2lvbklELmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXROb2Rl
QXR0cmlidXRlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCOERCREI0QjEzMEIwRjhB
MDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJ
KHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTMgKzQ0LDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqIG9i
c2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0gICAgLCBtX3NvdXJjZSh0aGlzKQorICAg
ICwgbV9zb3VyY2UoSW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUodGhpcykpCiB7CiB9CiAKIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9zb3VyY2UoV1RGTW92
ZShpbWFnZSkpCisgICAgLCBtX3NvdXJjZShJbWFnZUZyYW1lQ2FjaGU6OmNyZWF0ZShXVEZNb3Zl
KGltYWdlKSkpCiB7CiB9CiAKQEAgLTU4LDggKzU4LDggQEAgQml0bWFwSW1hZ2U6On5CaXRtYXBJ
bWFnZSgpCiB7CiAgICAgaW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwogICAgIGNsZWFyVGltZXIo
KTsKLSAgICBtX3NvdXJjZS5jbGVhckltYWdlKCk7Ci0gICAgbV9zb3VyY2Uuc3RvcEFzeW5jRGVj
b2RpbmdRdWV1ZSgpOworICAgIG1fc291cmNlLT5jbGVhckltYWdlKCk7CisgICAgbV9zb3VyY2Ut
PnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6dXBkYXRl
RnJvbVNldHRpbmdzKGNvbnN0IFNldHRpbmdzJiBzZXR0aW5ncykKQEAgLTc0LDIwICs3NCwyMiBA
QCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vCiAgICAgTE9HKEltYWdl
cywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyIsIF9fRlVOQ1RJT05fXywgdGhpcywg
c291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpZiAoIWRlc3Ryb3lB
bGwpCi0gICAgICAgIG1fc291cmNlLmRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKG1fY3Vy
cmVudEZyYW1lKTsKKyAgICAgICAgbV9zb3VyY2UtPmRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZy
YW1lKG1fY3VycmVudEZyYW1lKTsKICAgICBlbHNlIGlmICghY2FuRGVzdHJveURlY29kZWREYXRh
KCkpCi0gICAgICAgIG1fc291cmNlLmRlc3Ryb3lBbGxEZWNvZGVkRGF0YUV4Y2x1ZGVGcmFtZSht
X2N1cnJlbnRGcmFtZSk7CisgICAgICAgIG1fc291cmNlLT5kZXN0cm95QWxsRGVjb2RlZERhdGFF
eGNsdWRlRnJhbWUobV9jdXJyZW50RnJhbWUpOwogICAgIGVsc2UgewotICAgICAgICBtX3NvdXJj
ZS5kZXN0cm95QWxsRGVjb2RlZERhdGEoKTsKKyAgICAgICAgbV9zb3VyY2UtPmRlc3Ryb3lBbGxE
ZWNvZGVkRGF0YSgpOwogICAgICAgICBtX2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID0gRGVj
b2RpbmdTdGF0dXM6OkludmFsaWQ7CiAgICAgfQogCiAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRv
IHRocm93IGF3YXkgdGhlIGRlY29kZXIgdW5sZXNzIHdlJ3JlIGV4cGxpY2l0bHkgYXNrZWQKICAg
ICAvLyB0byBkZXN0cm95IGFsbCBvZiB0aGUgZnJhbWVzLgotICAgIGlmICghZGVzdHJveUFsbCB8
fCBtX3NvdXJjZS5oYXNBc3luY0RlY29kaW5nUXVldWUoKSkKLSAgICAgICAgbV9zb3VyY2UuY2xl
YXJGcmFtZUJ1ZmZlckNhY2hlKG1fY3VycmVudEZyYW1lKTsKKyAgICBpZiAoZGVzdHJveUFsbCAm
JiAhbV9zb3VyY2UtPmhhc0FzeW5jRGVjb2RpbmdRdWV1ZSgpKQorICAgICAgICBtX3NvdXJjZS0+
cmVzZXREYXRhKGRhdGEoKSk7CisjaWYgIVVTRShDRykKICAgICBlbHNlCi0gICAgICAgIG1fc291
cmNlLnJlc2V0RGF0YShkYXRhKCkpOworICAgICAgICBtX3NvdXJjZS0+ZGVzdHJveUZyYW1lQnVm
ZmVyQ2FjaGUobV9jdXJyZW50RnJhbWUpOworI2VuZGlmCiAKICAgICBpbnZhbGlkYXRlUGxhdGZv
cm1EYXRhKCk7CiB9CkBAIC05OSw3ICsxMDEsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGFJZk5lCiAgICAgaWYgKCFkYXRhKCkgJiYgZnJhbWVDb3VudCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9zb3VyY2UuZGVjb2RlZFNpemUoKSA8IExhcmdlQW5pbWF0
aW9uQ3V0b2ZmKQorICAgIGlmIChtX3NvdXJjZS0+ZGVjb2RlZFNpemUoKSA8IExhcmdlQW5pbWF0
aW9uQ3V0b2ZmKQogICAgICAgICByZXR1cm47CiAKICAgICBkZXN0cm95RGVjb2RlZERhdGEoZGVz
dHJveUFsbCk7CkBAIC0xMDcsMTEgKzEwOSwxMSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGFJZk5lCiAKIEVuY29kZWREYXRhU3RhdHVzIEJpdG1hcEltYWdlOjpkYXRhQ2hh
bmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICBpZiAobV9zb3VyY2UuZGVjb2RlZFNp
emUoKSAmJiAhY2FuVXNlQXN5bmNEZWNvZGluZ0ZvckxhcmdlSW1hZ2VzKCkpCi0gICAgICAgIG1f
c291cmNlLmRlc3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERhdGEoKTsKKyAgICBpZiAobV9zb3VyY2Ut
PmRlY29kZWRTaXplKCkgJiYgIWNhblVzZUFzeW5jRGVjb2RpbmdGb3JMYXJnZUltYWdlcygpKQor
ICAgICAgICBtX3NvdXJjZS0+ZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpOwogCiAgICAg
bV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkOwot
ICAgIHJldHVybiBtX3NvdXJjZS5kYXRhQ2hhbmdlZChkYXRhKCksIGFsbERhdGFSZWNlaXZlZCk7
CisgICAgcmV0dXJuIG1fc291cmNlLT5kYXRhQ2hhbmdlZChkYXRhKCksIGFsbERhdGFSZWNlaXZl
ZCk7CiB9CiAgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpzZXRDdXJyZW50RnJhbWVEZWNvZGluZ1N0
YXR1c0lmTmVjZXNzYXJ5KERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzKQpAQCAtMTMwLDgg
KzEzMiwxMiBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0CiAgICAg
ICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3N1YnNhbXBs
aW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNl
VVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFtZVN1YnNh
bXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KSkpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1E
YXRhKCk7CiAgICAgfQotCi0gICAgcmV0dXJuIG1fc291cmNlLmZyYW1lSW1hZ2VBdEluZGV4Q2Fj
aGVJZk5lZWRlZChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgdGFyZ2V0Q29udGV4dCk7CisjaWYg
VVNFKERJUkVDVDJEKQorICAgIG1fc291cmNlLT5zZXRUYXJnZXRDb250ZXh0KHRhcmdldENvbnRl
eHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CisjZW5kaWYKKyAg
ICByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpbmRleCwg
c3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRp
dmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCkBAIC0xODksNyAr
MTk1LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaQogICAgIElu
dFNpemUgc2l6ZUZvckRyYXdpbmcgPSBleHBhbmRlZEludFNpemUoc2l6ZSgpICogc2NhbGVGYWN0
b3JGb3JEcmF3aW5nKTsKICAgICBJbWFnZURyYXdSZXN1bHQgcmVzdWx0ID0gSW1hZ2VEcmF3UmVz
dWx0OjpEaWREcmF3OwogCi0gICAgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCA9IG1fYWxsb3dT
dWJzYW1wbGluZyA/IG1fc291cmNlLnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3Rvcihjb250
ZXh0LCBzY2FsZUZhY3RvckZvckRyYXdpbmcpIDogU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsK
KyAgICBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsID0gbV9hbGxvd1N1YnNhbXBsaW5nID8gc3Vi
c2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKGNvbnRleHQsIHNjYWxlRmFjdG9yRm9yRHJhd2lu
ZykgOiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJ
bWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgPSAlZCBzY2FsZUZhY3Rv
ckZvckRyYXdpbmcgPSAoJS40ZiwgJS40ZildIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VV
UkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fY3VycmVudFN1
YnNhbXBsaW5nTGV2ZWwpLCBzY2FsZUZhY3RvckZvckRyYXdpbmcud2lkdGgoKSwgc2NhbGVGYWN0
b3JGb3JEcmF3aW5nLmhlaWdodCgpKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOwpAQCAt
MjA0LDcgKzIxMCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGkK
ICAgICAgICAgLy8gaXQgaXMgY3VycmVudGx5IGJlaW5nIGRlY29kZWQuIE5ldyBkYXRhIG1heSBo
YXZlIGJlZW4gcmVjZWl2ZWQgc2luY2UgdGhlIHByZXZpb3VzIHJlcXVlc3Qgd2FzIG1hZGUuCiAg
ICAgICAgIGlmICgoIWZyYW1lSXNDb21wYXRpYmxlICYmICFmcmFtZUlzQmVpbmdEZWNvZGVkKSB8
fCBtX2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpJbnZhbGlk
KSB7CiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6
ICVzIFtyZXF1ZXN0aW5nIGxhcmdlIGFzeW5jIGRlY29kaW5nXSIsIF9fRlVOQ1RJT05fXywgdGhp
cywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBtX3Nv
dXJjZS5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9j
dXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgc2l6ZUZvckRyYXdpbmcpOworICAgICAgICAgICAgbV9z
b3VyY2UtPnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KG1fY3VycmVudEZyYW1lLCBt
X2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBzaXplRm9yRHJhd2luZyk7CiAgICAgICAgICAgICBt
X2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID0gRGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nOwog
ICAgICAgICB9CiAKQEAgLTIzMSw3ICsyMzcsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpCiAgICAgICAgIC8vIElmIHRoZSBkZWNvZGluZ01vZGUgY2hhbmdlcyBm
cm9tIGFzeW5jaHJvbm91cyB0byBzeW5jaHJvbm91cyBhbmQgbmV3IGRhdGEgaXMgcmVjZWl2ZWQs
CiAgICAgICAgIC8vIHRoZSBjdXJyZW50IGluY29tcGxldGUgZGVjb2RlZCBmcmFtZSBoYXMgdG8g
YmUgZGVzdHJveWVkLgogICAgICAgICBpZiAobV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9
PSBEZWNvZGluZ1N0YXR1czo6SW52YWxpZCkKLSAgICAgICAgICAgIG1fc291cmNlLmRlc3Ryb3lJ
bmNvbXBsZXRlRGVjb2RlZERhdGEoKTsKKyAgICAgICAgICAgIG1fc291cmNlLT5kZXN0cm95SW5j
b21wbGV0ZURlY29kZWREYXRhKCk7CiAgICAgICAgIAogICAgICAgICBib29sIGZyYW1lSXNDb21w
YXRpYmxlID0gZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNB
dEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBEZWNvZGlu
Z09wdGlvbnMoc2l6ZUZvckRyYXdpbmcpKTsKICAgICAgICAgYm9vbCBmcmFtZUlzQmVpbmdEZWNv
ZGVkID0gZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSwgRGVjb2RpbmdNb2RlOjpBc3luY2hyb25vdXMpOwpAQCAtMzI0LDEy
ICszMzAsMTIgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0ZSgpIGNvbnN0CiAKIGJvb2wg
Qml0bWFwSW1hZ2U6OmNhblVzZUFzeW5jRGVjb2RpbmdGb3JMYXJnZUltYWdlcygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuICFjYW5BbmltYXRlKCkgJiYgbV9zb3VyY2UuY2FuVXNlQXN5bmNEZWNvZGlu
ZygpOworICAgIHJldHVybiAhY2FuQW5pbWF0ZSgpICYmIG1fc291cmNlLT5jYW5Vc2VBc3luY0Rl
Y29kaW5nKCk7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OnNob3VsZFVzZUFzeW5jRGVjb2RpbmdG
b3JBbmltYXRlZEltYWdlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhbkFuaW1hdGUoKSAmJiBt
X2FsbG93QW5pbWF0ZWRJbWFnZUFzeW5jRGVjb2RpbmcgJiYgKHNob3VsZFVzZUFzeW5jRGVjb2Rp
bmdGb3JBbmltYXRlZEltYWdlc0ZvclRlc3RpbmcoKSB8fCBtX3NvdXJjZS5jYW5Vc2VBc3luY0Rl
Y29kaW5nKCkpOworICAgIHJldHVybiBjYW5BbmltYXRlKCkgJiYgbV9hbGxvd0FuaW1hdGVkSW1h
Z2VBc3luY0RlY29kaW5nICYmIChzaG91bGRVc2VBc3luY0RlY29kaW5nRm9yQW5pbWF0ZWRJbWFn
ZXNGb3JUZXN0aW5nKCkgfHwgbV9zb3VyY2UtPmNhblVzZUFzeW5jRGVjb2RpbmcoKSk7CiB9CiAK
IHZvaWQgQml0bWFwSW1hZ2U6OmNsZWFyVGltZXIoKQpAQCAtMzQ0LDEwICszNTAsMzAgQEAgdm9p
ZCBCaXRtYXBJbWFnZTo6c3RhcnRUaW1lcihTZWNvbmRzIGRlbAogICAgIG1fZnJhbWVUaW1lci0+
c3RhcnRPbmVTaG90KGRlbGF5KTsKIH0KIAorU3Vic2FtcGxpbmdMZXZlbCBCaXRtYXBJbWFnZTo6
c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3RvcikKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gTmV2
ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgor
ICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
KSkKKyAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7CisKKyAgICBmbG9h
dCBzY2FsZSA9IHN0ZDo6bWluKGZsb2F0KDEpLCBzdGQ6Om1heChzY2FsZUZhY3Rvci53aWR0aCgp
LCBzY2FsZUZhY3Rvci5oZWlnaHQoKSkpOworICAgIGlmICghKHNjYWxlID4gMCAmJiBzY2FsZSA8
PSAxKSkKKyAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7CisKKyAgICBp
bnQgcmVzdWx0ID0gc3RkOjpjZWlsKHN0ZDo6bG9nMigxIC8gc2NhbGUpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8U3Vic2FtcGxpbmdMZXZlbD4oc3RkOjptaW4ocmVzdWx0LCBzdGF0aWNfY2Fz
dDxpbnQ+KG1fc291cmNlLT5tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpKSkpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKHNjYWxlRmFjdG9yKTsK
KyAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKKyNlbmRpZgorfQorCiBib29s
IEJpdG1hcEltYWdlOjpjYW5EZXN0cm95RGVjb2RlZERhdGEoKQogewogICAgIC8vIEFuaW1hdGVk
IGltYWdlcyBzaG91bGQgcHJlc2VydmUgdGhlIGN1cnJlbnQgZnJhbWUgdGlsbCB0aGUgbmV4dCBv
bmUgZmluaXNoZXMgZGVjb2RpbmcuCi0gICAgaWYgKG1fc291cmNlLmhhc0FzeW5jRGVjb2RpbmdR
dWV1ZSgpKQorICAgIGlmIChtX3NvdXJjZS0+aGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNtYWxsIGltYWdlIHNob3VsZCBiZSBkZWNvZGVk
IHN5bmNocm9ub3VzbHkuIERlbGV0aW5nIGl0cyBkZWNvZGVkIGZyYW1lIGlzIGZpbmUuCkBAIC0z
NzcsNyArNDAzLDcgQEAgQml0bWFwSW1hZ2U6OlN0YXJ0QW5pbWF0aW9uU3RhdHVzIEJpdG1hcAog
ICAgICAgICAvLyB5ZXQgYW5kIG91ciByZXBldGl0aW9uIGNvdW50IGlzIHBvdGVudGlhbGx5IHVu
c2V0LiBUaGUgcmVwZXRpdGlvbiBjb3VudAogICAgICAgICAvLyBpbiBhIEdJRiBjYW4gcG90ZW50
aWFsbHkgY29tZSBhZnRlciBhbGwgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEsIHNvCiAgICAg
ICAgIC8vIHdhaXQgb24gaXQuCi0gICAgICAgIGlmICghbV9zb3VyY2UuaXNBbGxEYXRhUmVjZWl2
ZWQoKSAmJiByZXBldGl0aW9uQ291bnQoKSA9PSBSZXBldGl0aW9uQ291bnRPbmNlKQorICAgICAg
ICBpZiAoIW1fc291cmNlLT5pc0FsbERhdGFSZWNlaXZlZCgpICYmIHJlcGV0aXRpb25Db3VudCgp
ID09IFJlcGV0aXRpb25Db3VudE9uY2UpCiAgICAgICAgICAgICByZXR1cm4gU3RhcnRBbmltYXRp
b25TdGF0dXM6OkluY29tcGxldGVEYXRhOwogCiAgICAgICAgICsrbV9yZXBldGl0aW9uc0NvbXBs
ZXRlOwpAQCAtMzkzLDcgKzQxOSw3IEBAIEJpdG1hcEltYWdlOjpTdGFydEFuaW1hdGlvblN0YXR1
cyBCaXRtYXAKICAgICB9CiAKICAgICAvLyBEb24ndCBhZHZhbmNlIHRoZSBhbmltYXRpb24gdG8g
YW4gaW5jb21wbGV0ZSBmcmFtZS4KLSAgICBpZiAoIW1fc291cmNlLmlzQWxsRGF0YVJlY2VpdmVk
KCkgJiYgIWZyYW1lSXNDb21wbGV0ZUF0SW5kZXgobmV4dEZyYW1lKSkKKyAgICBpZiAoIW1fc291
cmNlLT5pc0FsbERhdGFSZWNlaXZlZCgpICYmICFmcmFtZUlzQ29tcGxldGVBdEluZGV4KG5leHRG
cmFtZSkpCiAgICAgICAgIHJldHVybiBTdGFydEFuaW1hdGlvblN0YXR1czo6SW5jb21wbGV0ZURh
dGE7CiAKICAgICBNb25vdG9uaWNUaW1lIHRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKQEAg
LTQxMywxNCArNDM5LDE0IEBAIEJpdG1hcEltYWdlOjpTdGFydEFuaW1hdGlvblN0YXR1cyBCaXRt
YXAKICAgICAgICAgaWYgKGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhP
cHRpb25zQXRJbmRleChuZXh0RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwsIHsgfSkp
CiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVz
IFtjYWNoZWRGcmFtZUNvdW50ID0gJWxkIG5leHRGcmFtZSA9ICVsZF0iLCBfX0ZVTkNUSU9OX18s
IHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksICsrbV9jYWNoZWRGcmFt
ZUNvdW50LCBuZXh0RnJhbWUpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fc291cmNl
LnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KG5leHRGcmFtZSwgbV9jdXJyZW50U3Vi
c2FtcGxpbmdMZXZlbCk7CisgICAgICAgICAgICBtX3NvdXJjZS0+cmVxdWVzdEZyYW1lQXN5bmNE
ZWNvZGluZ0F0SW5kZXgobmV4dEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsKTsKICAg
ICAgICAgICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBEZWNvZGluZ1N0YXR1czo6
RGVjb2Rpbmc7CiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAg
LSB1cmw6ICVzIFtyZXF1ZXN0aW5nIGFzeW5jIGRlY29kaW5nIGZvciBuZXh0RnJhbWUgPSAlbGRd
IiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBuZXh0RnJhbWUpOwogICAgICAgICB9CiAKICAgICAgICAgbV9kZXNpcmVkRnJhbWVEZWNvZGVU
aW1lRm9yVGVzdGluZyA9IHRpbWUgKyBzdGQ6Om1heChtX2ZyYW1lRGVjb2RpbmdEdXJhdGlvbkZv
clRlc3RpbmcsIDBfcyk7CiAgICAgICAgIGlmIChtX2NsZWFyRGVjb2RlckFmdGVyQXN5bmNGcmFt
ZVJlcXVlc3RGb3JUZXN0aW5nKQotICAgICAgICAgICAgbV9zb3VyY2UucmVzZXREYXRhKGRhdGEo
KSk7CisgICAgICAgICAgICBtX3NvdXJjZS0+cmVzZXREYXRhKGRhdGEoKSk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKCFtX2ZyYW1lVGltZXIpOwpAQCAtNDgyLDcgKzUwOCw3IEBAIHZvaWQgQml0bWFw
SW1hZ2U6OnN0b3BBbmltYXRpb24oKQogICAgIC8vIHRoZSB0aW1lciB1bmxlc3MgYWxsIHJlbmRl
cmVycyBoYXZlIHN0b3BwZWQgZHJhd2luZy4KICAgICBjbGVhclRpbWVyKCk7CiAgICAgaWYgKGNh
bkFuaW1hdGUoKSkKLSAgICAgICAgbV9zb3VyY2Uuc3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOwor
ICAgICAgICBtX3NvdXJjZS0+c3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOwogfQogCiB2b2lkIEJp
dG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigpCkBAIC01MTksOCArNTQ1LDggQEAgdm9pZCBCaXRt
YXBJbWFnZTo6aW1hZ2VGcmFtZUF2YWlsYWJsZUF0SQogICAgIH0KIAogICAgIEFTU0VSVChpbmRl
eCA9PSBtX2N1cnJlbnRGcmFtZSAmJiAhbV9jdXJyZW50RnJhbWUpOwotICAgIGlmIChtX3NvdXJj
ZS5pc0FzeW5jRGVjb2RpbmdRdWV1ZUlkbGUoKSkKLSAgICAgICAgbV9zb3VyY2Uuc3RvcEFzeW5j
RGVjb2RpbmdRdWV1ZSgpOworICAgIGlmIChtX3NvdXJjZS0+aXNBc3luY0RlY29kaW5nUXVldWVJ
ZGxlKCkpCisgICAgICAgIG1fc291cmNlLT5zdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCk7CiAKICAg
ICBEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cyA9IGZyYW1lRGVjb2RpbmdTdGF0dXNBdElu
ZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBzZXRDdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1c0lm
TmVjZXNzYXJ5KGRlY29kaW5nU3RhdHVzKTsKQEAgLTU0NCw3ICs1NzAsNyBAQCB2b2lkIEJpdG1h
cEltYWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjCiAgICAgaWYgKGlzQW5pbWF0ZWQoKSkKICAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJjdXJyZW50LWZyYW1lIiwgbV9jdXJyZW50RnJhbWUpOwog
ICAgIAotICAgIG1fc291cmNlLmR1bXAodHMpOworICAgIG1fc291cmNlLT5kdW1wKHRzKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5oCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiAKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFt
ZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkltYWdlT3Jp
ZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIkludFNpemUu
aCIKIAogI2lmIFVTRShDRykgfHwgVVNFKEFQUEtJVCkKQEAgLTcxLDMxICs3MSwzMSBAQCBwdWJs
aWM6CiAgICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIEVuY29kZWREYXRhU3RhdHVzIGRhdGFDaGFuZ2VkKGJvb2wg
YWxsRGF0YVJlY2VpdmVkKSBvdmVycmlkZTsKLSAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc291cmNlLmRlY29kZWRTaXplKCk7IH0KKyAgICB1bnNpZ25lZCBkZWNv
ZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5kZWNvZGVkU2l6ZSgpOyB9CiAKLSAg
ICBFbmNvZGVkRGF0YVN0YXR1cyBlbmNvZGVkRGF0YVN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlLmVuY29kZWREYXRhU3RhdHVzKCk7IH0KLSAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc291cmNlLmZyYW1lQ291bnQoKTsgfQotICAgIFJlcGV0aXRpb25Db3Vu
dCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5yZXBldGl0aW9uQ291
bnQoKTsgfQotICAgIFN0cmluZyB1dGkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJj
ZS51dGkoKTsgfQotICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fc291cmNlLmZpbGVuYW1lRXh0ZW5zaW9uKCk7IH0KLSAgICBzdGQ6Om9wdGlv
bmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2Uu
aG90U3BvdCgpOyB9CisgICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZW5jb2RlZERhdGFTdGF0dXMoKTsgfQorICAgIHNpemVf
dCBmcmFtZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lQ291bnQoKTsgfQor
ICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZS0+cmVwZXRpdGlvbkNvdW50KCk7IH0KKyAgICBTdHJpbmcgdXRpKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9zb3VyY2UtPnV0aSgpOyB9CisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5z
aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPmZpbGVuYW1lRXh0ZW5zaW9u
KCk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9zb3VyY2UtPmhvdFNwb3QoKTsgfQogCiAgICAgLy8gRmxvYXRTaXplIGR1
ZSB0byBvdmVycmlkZS4KLSAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fc291cmNlLnNpemUoKTsgfQotICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24o
KTsgfQotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fc291cmNlLnNpbmdsZVBpeGVsU29saWRDb2xvcigpOyB9Ci0gICAgYm9vbCBmcmFt
ZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCBp
bmRleCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlLmZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9u
c0F0SW5kZXgoaW5kZXgsIGRlY29kaW5nT3B0aW9ucyk7IH0KLSAgICBEZWNvZGluZ1N0YXR1cyBm
cmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlLmZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4KGluZGV4KTsgfQorICAgIEZsb2F0U2l6
ZSBzaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPnNpemUoKTsgfQorICAg
IEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlLT5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7IH0KKyAgICBDb2xvciBzaW5nbGVQaXhl
bFNvbGlkQ29sb3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS0+c2luZ2xlUGl4
ZWxTb2xpZENvbG9yKCk7IH0KKyAgICBib29sIGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBh
dGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBEZWNvZGluZ09wdGlv
bnMmIGRlY29kaW5nT3B0aW9ucykgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSXNCZWlu
Z0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoaW5kZXgsIGRlY29kaW5n
T3B0aW9ucyk7IH0KKyAgICBEZWNvZGluZ1N0YXR1cyBmcmFtZURlY29kaW5nU3RhdHVzQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZURlY29kaW5nU3Rh
dHVzQXRJbmRleChpbmRleCk7IH0KICAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBmcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChpbmRl
eCkgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9Ci0gICAgYm9vbCBmcmFtZUhhc0FscGhh
QXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmZyYW1lSGFzQWxw
aGFBdEluZGV4KGluZGV4KTsgfQorICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOyB9CiAKLSAgICBib29sIGZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIHsgcmV0dXJuIG1f
c291cmNlLmZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBs
aW5nTGV2ZWwpOyB9Ci0gICAgYm9vbCBmcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGli
bGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1
YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMm
IGRlY29kaW5nT3B0aW9ucykgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNEZWNvZGVkTmF0aXZl
SW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVs
LCBkZWNvZGluZ09wdGlvbnMpOyB9CisgICAgYm9vbCBmcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
KSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChp
bmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7IH0KKyAgICBib29sIGZyYW1lSGFzRGVjb2RlZE5hdGl2
ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERl
Y29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVI
YXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBz
dWJzYW1wbGluZ0xldmVsLCBkZWNvZGluZ09wdGlvbnMpOyB9CiAKLSAgICBTdWJzYW1wbGluZ0xl
dmVsIGZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS5mcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KTsgfQorICAg
IFN1YnNhbXBsaW5nTGV2ZWwgZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4
KGluZGV4KTsgfQogCi0gICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7IH0K
LSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgp
OyB9CisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVEdXJhdGlvbkF0SW5kZXgoaW5kZXgpOyB9CisgICAgSW1h
Z2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZU9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7IH0KIAog
ICAgIHNpemVfdCBjdXJyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZTsg
fQogICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gIWZyYW1lSGFzQWxwaGFBdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQpAQCAtMTQy
LDcgKzE0Miw3IEBAIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBCaXRtYXBJbWFnZShO
YXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwogICAgIFdFQkNPUkVf
RVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0cik7CiAKLSAgICBOYXRp
dmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fc291
cmNlLmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsgfQorICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VB
dEluZGV4KGluZGV4KTsgfQogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4Q2Fj
aGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0LCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7CiAKICAgICAvLyBDYWxs
ZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwg
d2Ugd2lwZSBvdXQKQEAgLTE2NSw3ICsxNjUsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBBbmlt
YXRpb24uCiAgICAgZW51bSBjbGFzcyBTdGFydEFuaW1hdGlvblN0YXR1cyB7IENhbm5vdFN0YXJ0
LCBJbmNvbXBsZXRlRGF0YSwgVGltZXJBY3RpdmUsIERlY29kaW5nQWN0aXZlLCBTdGFydGVkIH07
Ci0gICAgYm9vbCBpc0FuaW1hdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2Uu
ZnJhbWVDb3VudCgpID4gMTsgfQorICAgIGJvb2wgaXNBbmltYXRlZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZUNvdW50KCkgPiAxOyB9CiAgICAgYm9vbCBzaG91bGRB
bmltYXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzdGFydEFuaW1hdGlvbigpIG92ZXJyaWRlIHsgaW50
ZXJuYWxTdGFydEFuaW1hdGlvbigpOyB9CiAgICAgU3RhcnRBbmltYXRpb25TdGF0dXMgaW50ZXJu
YWxTdGFydEFuaW1hdGlvbigpOwpAQCAtMTk0LDYgKzE5NCw3IEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgdm9pZCBjbGVhclRpbWVyKCk7CiAgICAgdm9pZCBzdGFydFRpbWVyKFNlY29uZHMg
ZGVsYXkpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFj
dG9yKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3IpOwogICAg
IGJvb2wgY2FuRGVzdHJveURlY29kZWREYXRhKCk7CiAgICAgdm9pZCBzZXRDdXJyZW50RnJhbWVE
ZWNvZGluZ1N0YXR1c0lmTmVjZXNzYXJ5KERlY29kaW5nU3RhdHVzKTsKICAgICBib29sIGlzQml0
bWFwSW1hZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkBAIC0yMDIsNyArMjAz
LDcgQEAgcHJpdmF0ZToKICAgICAvLyBBbmltYXRlZCBpbWFnZXMgb3ZlciBhIGNlcnRhaW4gc2l6
ZSBhcmUgY29uc2lkZXJlZCBsYXJnZSBlbm91Z2ggdGhhdCB3ZSdsbCBvbmx5IGhhbmcgb24gdG8g
b25lIGZyYW1lIGF0IGEgdGltZS4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgTGFyZ2VBbmlt
YXRpb25DdXRvZmYgPSAzMCAqIDEwMTQgKiAxMDI0OwogCi0gICAgbXV0YWJsZSBJbWFnZVNvdXJj
ZSBtX3NvdXJjZTsKKyAgICBtdXRhYmxlIFJlZjxJbWFnZUZyYW1lQ2FjaGU+IG1fc291cmNlOwog
CiAgICAgc2l6ZV90IG1fY3VycmVudEZyYW1lIHsgMCB9OyAvLyBUaGUgaW5kZXggb2YgdGhlIGN1
cnJlbnQgZnJhbWUgb2YgYW5pbWF0aW9uLgogICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9jdXJyZW50
U3Vic2FtcGxpbmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQgfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNiBAQCBj
bGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2U7
CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlU291cmNlOwogY2xhc3MgSW1hZ2VEYXRh
OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CkBAIC0xMjQ2LDcgKzEyNDUsNiBAQCBw
dWJsaWM6CiAgICAgICAgIGJvb2wgZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7CiAKICNpZiBVU0UoQ0FJUk8pCi0gICAg
ICAgIEltYWdlU291cmNlKiBtX2RlY29kZXI7CiAgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IG1faW1hZ2VTdXJmYWNlOwogI2VsaWYgVVNFKENHKQogICAgICAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gbV9jZ0ltYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjA3NDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw4ICs0NywxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlt
YWdlRnJhbWVDYWNoZTo6SW1hZ2VGcmFtZUNhY2hlKEltYWdlKiBpbWFnZSkKK0ltYWdlRnJhbWVD
YWNoZTo6SW1hZ2VGcmFtZUNhY2hlKEltYWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRp
b24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KQogICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24p
CisgICAgLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uKQogewogfQogCkBAIC03MywyMSArNzUsNzIgQEAgSW1hZ2VGcmFtZUNhY2hlOjp+SW1h
Z2VGcmFtZUNhY2hlKCkKICAgICBBU1NFUlQoIWhhc0FzeW5jRGVjb2RpbmdRdWV1ZSgpKTsKIH0K
IAotdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnNldERlY29kZXIoSW1hZ2VEZWNvZGVyKiBkZWNvZGVy
KQorYm9vbCBJbWFnZUZyYW1lQ2FjaGU6OmVuc3VyZURlY29kZXJBdmFpbGFibGUoU2hhcmVkQnVm
ZmVyKiBkYXRhKQogewotICAgIGlmIChtX2RlY29kZXIgPT0gZGVjb2RlcikKLSAgICAgICAgcmV0
dXJuOworICAgIGlmICghZGF0YSB8fCBpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBtX2RlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwg
bV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisgICAgaWYgKCFp
c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hh
bmdpbmcgdGhlIGRlY29kZXIgaGFzIHRvIHN0b3AgdGhlIGRlY29kaW5nIHRocmVhZC4gVGhlIGN1
cnJlbnQgZnJhbWUgd2lsbAogICAgIC8vIGNvbnRpbnVlIGRlY29kaW5nIHNhZmVseSBiZWNhdXNl
IHRoZSBkZWNvZGluZyB0aHJlYWQgaGFzIGl0cyBvd24KICAgICAvLyByZWZlcmVuY2Ugb2YgdGhl
IG9sZCBkZWNvZGVyLgogICAgIHN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKLSAgICBtX2RlY29k
ZXIgPSBkZWNvZGVyOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEltYWdlRnJhbWVDYWNo
ZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorewor
ICAgIGlmICghZGF0YSB8fCAhZW5zdXJlRGVjb2RlckF2YWlsYWJsZShkYXRhKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9kZWNvZGVyLT5zZXREYXRhKCpkYXRhLCBhbGxEYXRhUmVjZWl2ZWQp
OwogfQogCi1JbWFnZURlY29kZXIqIEltYWdlRnJhbWVDYWNoZTo6ZGVjb2RlcigpIGNvbnN0Cit2
b2lkIEltYWdlRnJhbWVDYWNoZTo6cmVzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAg
ICByZXR1cm4gbV9kZWNvZGVyLmdldCgpOworICAgIG1fZGVjb2RlciA9IG51bGxwdHI7CisgICAg
c2V0RGF0YShkYXRhLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKK30KKworRW5jb2RlZERhdGFTdGF0
dXMgSW1hZ2VGcmFtZUNhY2hlOjpkYXRhQ2hhbmdlZChTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2FibGUgcHJvZ3Jlc3NpdmUgbG9h
ZGluZyBhbmQgbWFrZSB0aGlzCisgICAgLy8gY29kZSBjb25kaXRpb25hbCBvbiBpdC4gVGhlbiB3
ZSBjYW4gcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgIHN0YXRpYyBjb25zdCBk
b3VibGUgY2h1bmtMb2FkSW50ZXJ2YWxzW10gPSB7MCwgMSwgMywgNiwgMTV9OworICAgIGRvdWJs
ZSBpbnRlcnZhbCA9IGNodW5rTG9hZEludGVydmFsc1tzdGQ6Om1pbihtX3Byb2dyZXNzaXZlTG9h
ZENodW5rQ291bnQsIHN0YXRpY19jYXN0PHVpbnQxNl90Pig0KSldOworCisgICAgYm9vbCBuZWVk
c1VwZGF0ZSA9IGZhbHNlOworCisgICAgLy8gVGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwgdGhlIGNo
dW5rIHRpbWUgd2lsbCBiZSAwIGFuZCB0aGUgaW1hZ2Ugd2lsbCBnZXQgYW4gdXBkYXRlLgorICAg
IGlmIChjdXJyZW50VGltZSgpIC0gbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgPiBpbnRlcnZh
bCkgeworICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7CisgICAgICAgIG1fcHJvZ3Jlc3NpdmVM
b2FkQ2h1bmtUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgQVNTRVJUKG1fcHJvZ3Jlc3Np
dmVMb2FkQ2h1bmtDb3VudCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkp
OworICAgICAgICArK21fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudDsKKyAgICB9CisKKyAgICBp
ZiAobmVlZHNVcGRhdGUgfHwgYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICBzZXREYXRhKGRhdGEs
IGFsbERhdGFSZWNlaXZlZCk7CisjZWxzZQorICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKKyNlbmRpZgorCisgICAgY2xlYXJNZXRhZGF0YSgpOworICAgIEVuY29kZWREYXRhU3Rh
dHVzIHN0YXR1cyA9IGVuY29kZWREYXRhU3RhdHVzKCk7CisgICAgaWYgKHN0YXR1cyA8IEVuY29k
ZWREYXRhU3RhdHVzOjpTaXplQXZhaWxhYmxlKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisg
ICAgZ3Jvd0ZyYW1lcygpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2Jvb2wgSW1hZ2VGcmFt
ZUNhY2hlOjppc0FsbERhdGFSZWNlaXZlZCgpCit7CisgICAgcmV0dXJuIGlzRGVjb2RlckF2YWls
YWJsZSgpID8gbV9kZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpIDogZnJhbWVDb3VudCgpOwog
fQogCiB2b2lkIEltYWdlRnJhbWVDYWNoZTo6ZGVzdHJveURlY29kZWREYXRhKHNpemVfdCBmcmFt
ZUNvdW50LCBzaXplX3QgZXhjbHVkZUZyYW1lKQpAQCAtMTE5LDYgKzE3MiwxNSBAQCB2b2lkIElt
YWdlRnJhbWVDYWNoZTo6ZGVzdHJveUluY29tcGxldGVECiAgICAgZGVjb2RlZFNpemVEZWNyZWFz
ZWQoZGVjb2RlZFNpemUpOwogfQogCisjaWYgIVVTRShDRykKK3ZvaWQgSW1hZ2VGcmFtZUNhY2hl
OjpkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3JlRnJhbWUpCit7CisgICAgaWYg
KCFpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVjb2Rlci0+
ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUoYmVmb3JlRnJhbWUpOworfQorI2VuZGlmCisKIHZvaWQg
SW1hZ2VGcmFtZUNhY2hlOjpkZWNvZGVkU2l6ZUNoYW5nZWQobG9uZyBsb25nIGRlY29kZWRTaXpl
KQogewogICAgIGlmICghZGVjb2RlZFNpemUgfHwgIW1faW1hZ2UgfHwgIW1faW1hZ2UtPmltYWdl
T2JzZXJ2ZXIoKSkKQEAgLTI3MCw2ICszMzIsMTQgQEAgUmVmPFdvcmtRdWV1ZT4gSW1hZ2VGcmFt
ZUNhY2hlOjpkZWNvZGluZwogICAgIHJldHVybiAqbV9kZWNvZGluZ1F1ZXVlOwogfQogCitib29s
IEltYWdlRnJhbWVDYWNoZTo6Y2FuVXNlQXN5bmNEZWNvZGluZygpCit7CisgICAgaWYgKCFpc0Rl
Y29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBm
aWd1cmUgb3V0IHRoZSBiZXN0IGhldXJpc3RpYyBmb3IgZW5hYmxpbmcgYXN5bmMgaW1hZ2UgZGVj
b2RpbmcuCisgICAgcmV0dXJuIHNpemUoKS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSA+PSAoZnJh
bWVDb3VudCgpID4gMSA/IDEwMCAqIEtCIDogNTAwICogS0IpOworfQorCiB2b2lkIEltYWdlRnJh
bWVDYWNoZTo6c3RhcnRBc3luY0RlY29kaW5nUXVldWUoKQogewogICAgIGlmIChoYXNBc3luY0Rl
Y29kaW5nUXVldWUoKSB8fCAhaXNEZWNvZGVyQXZhaWxhYmxlKCkpCkBAIC00OTEsNiArNTYxLDI5
IEBAIENvbG9yIEltYWdlRnJhbWVDYWNoZTo6c2luZ2xlUGl4ZWxTb2xpZEMKICAgICByZXR1cm4g
ZnJhbWVNZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVkPENvbG9yPigwLCAoJkltYWdlRnJhbWU6
OnNpbmdsZVBpeGVsU29saWRDb2xvciksICZtX3NpbmdsZVBpeGVsU29saWRDb2xvciwgSW1hZ2VG
cmFtZTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiB9CiAKK1N1YnNhbXBsaW5nTGV2ZWwg
SW1hZ2VGcmFtZUNhY2hlOjptYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpCit7CisgICAgaWYgKG1f
bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpCisgICAgICAgIHJldHVybiBtX21heGltdW1TdWJzYW1w
bGluZ0xldmVsLnZhbHVlKCk7CisKKyAgICBpZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpIHx8ICFt
X2RlY29kZXItPmZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgoMCkpCisgICAgICAgIHJldHVy
biBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OworCisgICAgLy8gRklYTUU6IHRoaXMgdmFsdWUg
d2FzIGNob3NlbiB0byBiZSBhcHByb3ByaWF0ZSBmb3IgaU9TIHNpbmNlIHRoZSBpbWFnZQorICAg
IC8vIHN1YnNhbXBsaW5nIGlzIG9ubHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGlPUy4gQ2hvb3Nl
IGEgZGlmZmVyZW50IHZhbHVlCisgICAgLy8gaWYgaW1hZ2Ugc3Vic2FtcGxpbmcgaXMgZW5hYmxl
ZCBvbiBvdGhlciBwbGF0Zm9ybS4KKyAgICBjb25zdCBpbnQgbWF4aW11bUltYWdlQXJlYUJlZm9y
ZVN1YnNhbXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0OworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbGV2
ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpGaXJzdDsKKworICAgIGZvciAoOyBsZXZlbCA8IFN1YnNh
bXBsaW5nTGV2ZWw6Okxhc3Q7ICsrbGV2ZWwpIHsKKyAgICAgICAgaWYgKGZyYW1lU2l6ZUF0SW5k
ZXgoMCwgbGV2ZWwpLmFyZWEoKS51bnNhZmVHZXQoKSA8IG1heGltdW1JbWFnZUFyZWFCZWZvcmVT
dWJzYW1wbGluZykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fbWF4aW11bVN1
YnNhbXBsaW5nTGV2ZWwgPSBsZXZlbDsKKyAgICByZXR1cm4gbV9tYXhpbXVtU3Vic2FtcGxpbmdM
ZXZlbC52YWx1ZSgpOworfQorCiBib29sIEltYWdlRnJhbWVDYWNoZTo6ZnJhbWVJc0JlaW5nRGVj
b2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0
IERlY29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKQogewogICAgIGF1dG8gaXQgPSBzdGQ6
OmZpbmRfaWYobV9mcmFtZUNvbW1pdFF1ZXVlLmJlZ2luKCksIG1fZnJhbWVDb21taXRRdWV1ZS5l
bmQoKSwgW2luZGV4LCAmZGVjb2RpbmdPcHRpb25zXShjb25zdCBJbWFnZUZyYW1lUmVxdWVzdCYg
ZnJhbWVSZXF1ZXN0KSB7CkBAIC01NDQsNiArNjM3LDE5IEBAIEltYWdlT3JpZW50YXRpb24gSW1h
Z2VGcmFtZUNhY2hlOjpmcmFtZU8KICAgICByZXR1cm4gZnJhbWVNZXRhZGF0YUF0SW5kZXhDYWNo
ZUlmTmVlZGVkPEltYWdlT3JpZW50YXRpb24+KGluZGV4LCAoJkltYWdlRnJhbWU6Om9yaWVudGF0
aW9uKSwgbnVsbHB0ciwgSW1hZ2VGcmFtZTo6Q2FjaGluZzo6TWV0YWRhdGEpOwogfQogCisjaWYg
VVNFKERJUkVDVDJEKQordm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnNldFRhcmdldENvbnRleHQoY29u
c3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQoreworICAgIGlmIChpc0RlY29kZXJB
dmFpbGFibGUoKSAmJiB0YXJnZXRDb250ZXh0KQorICAgICAgICBtX2RlY29kZXItPnNldFRhcmdl
dENvbnRleHQodGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCit9CisjZW5kaWYKKwor
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChz
aXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKK3sKKyAgICBy
ZXR1cm4gaXNEZWNvZGVyQXZhaWxhYmxlKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7Cit9CisKIE5hdGl2ZUlt
YWdlUHRyIEltYWdlRnJhbWVDYWNoZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ewogICAgIHJldHVybiBmcmFtZU1ldGFkYXRhQXRJbmRleDxOYXRpdmVJbWFnZVB0cj4oaW5kZXgs
ICgmSW1hZ2VGcmFtZTo6bmF0aXZlSW1hZ2UpKTsKQEAgLTU1NCw0ICs2NjAsMTYgQEAgTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VGcmFtZUNhY2hlOjpmcmFtZUltYQogICAgIHJldHVybiBmcmFtZU1ldGFk
YXRhQXRJbmRleENhY2hlSWZOZWVkZWQ8TmF0aXZlSW1hZ2VQdHI+KGluZGV4LCAoJkltYWdlRnJh
bWU6Om5hdGl2ZUltYWdlKSwgbnVsbHB0ciwgSW1hZ2VGcmFtZTo6Q2FjaGluZzo6TWV0YWRhdGFB
bmRJbWFnZSwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKK3ZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgidHlwZSIsIGZpbGVu
YW1lRXh0ZW5zaW9uKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZnJhbWUtY291bnQiLCBmcmFt
ZUNvdW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVwZXRpdGlvbnMiLCByZXBldGl0aW9u
Q291bnQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzb2xpZC1jb2xvciIsIHNpbmdsZVBpeGVs
U29saWRDb2xvcigpKTsKKworICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBmcmFt
ZU9yaWVudGF0aW9uQXRJbmRleCgwKTsKKyAgICBpZiAob3JpZW50YXRpb24gIT0gT3JpZ2luVG9w
TGVmdCkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcmllbnRhdGlvbiIsIG9yaWVudGF0aW9u
KTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VG
cmFtZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZUNhY2hlLmgJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N5
bmNocm9uaXplZEZpeGVkUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQwLDExICs0MSwxMSBAQCBjbGFzcyBJbWFnZURlY29kZXI7CiBjbGFzcyBVUkw7CiAKIGNsYXNz
IEltYWdlRnJhbWVDYWNoZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUZyYW1l
Q2FjaGU+IHsKLSAgICBmcmllbmQgY2xhc3MgSW1hZ2VTb3VyY2U7CisgICAgZnJpZW5kIGNsYXNz
IEJpdG1hcEltYWdlOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW1hZ2VGcmFtZUNhY2hlPiBj
cmVhdGUoSW1hZ2UqIGltYWdlKQorICAgIHN0YXRpYyBSZWY8SW1hZ2VGcmFtZUNhY2hlPiBjcmVh
dGUoSW1hZ2UqIGltYWdlLCBBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiA9IEFscGhhT3B0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VGcmFtZUNhY2hlKGltYWdlKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRnJhbWVDYWNoZShpbWFnZSwgYWxwaGFP
cHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IFJlZjxJbWFnZUZyYW1lQ2FjaGU+IGNyZWF0ZShOYXRpdmVJbWFnZVB0ciYmIG5hdGl2ZUltYWdl
KQpAQCAtNTQsMTQgKzU1LDE5IEBAIHB1YmxpYzoKIAogICAgIH5JbWFnZUZyYW1lQ2FjaGUoKTsK
IAotICAgIHZvaWQgc2V0RGVjb2RlcihJbWFnZURlY29kZXIqKTsKLSAgICBJbWFnZURlY29kZXIq
IGRlY29kZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgdm9pZCByZXNldERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhKTsKKyAgICBFbmNvZGVkRGF0YVN0YXR1cyBkYXRhQ2hhbmdlZChTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCk7
CiAKICAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlZFNp
emU7IH0KICAgICB2b2lkIGRlc3Ryb3lBbGxEZWNvZGVkRGF0YSgpIHsgZGVzdHJveURlY29kZWRE
YXRhKGZyYW1lQ291bnQoKSwgZnJhbWVDb3VudCgpKTsgfQogICAgIHZvaWQgZGVzdHJveUFsbERl
Y29kZWREYXRhRXhjbHVkZUZyYW1lKHNpemVfdCBleGNsdWRlRnJhbWUpIHsgZGVzdHJveURlY29k
ZWREYXRhKGZyYW1lQ291bnQoKSwgZXhjbHVkZUZyYW1lKTsgfQogICAgIHZvaWQgZGVzdHJveURl
Y29kZWREYXRhQmVmb3JlRnJhbWUoc2l6ZV90IGJlZm9yZUZyYW1lKSB7IGRlc3Ryb3lEZWNvZGVk
RGF0YShiZWZvcmVGcmFtZSwgYmVmb3JlRnJhbWUpOyB9CiAgICAgdm9pZCBkZXN0cm95SW5jb21w
bGV0ZURlY29kZWREYXRhKCk7CisjaWYgIVVTRShDRykKKyAgICB2b2lkIGRlc3Ryb3lGcmFtZUJ1
ZmZlckNhY2hlKHNpemVfdCBiZWZvcmVGcmFtZSk7CisjZW5kaWYKIAogICAgIHZvaWQgZ3Jvd0Zy
YW1lcygpOwogICAgIHZvaWQgY2xlYXJNZXRhZGF0YSgpOwpAQCAtNjksOCArNzUsOSBAQCBwdWJs
aWM6CiAgICAgVVJMIHNvdXJjZVVSTCgpIGNvbnN0OwogCiAgICAgLy8gQXN5bmNocm9ub3VzIGlt
YWdlIGRlY29kaW5nCisgICAgYm9vbCBjYW5Vc2VBc3luY0RlY29kaW5nKCk7CiAgICAgdm9pZCBz
dGFydEFzeW5jRGVjb2RpbmdRdWV1ZSgpOwotICAgIHZvaWQgcmVxdWVzdEZyYW1lQXN5bmNEZWNv
ZGluZ0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PEludFNpemU+Jik7CisgICAgdm9pZCByZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChz
aXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4mID0g
eyB9KTsKICAgICB2b2lkIHN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKICAgICBib29sIGhhc0Fz
eW5jRGVjb2RpbmdRdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdRdWV1ZTsgfQogICAg
IGJvb2wgaXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCkgY29uc3Q7CkBAIC04OCw4ICs5NSw4IEBA
IHB1YmxpYzoKICAgICAvLyBJbWFnZSBtZXRhZGF0YSB3aGljaCBpcyBjYWxjdWxhdGVkIGZyb20g
dGhlIGZpcnN0IEltYWdlRnJhbWUuCiAgICAgSW50U2l6ZSBzaXplKCk7CiAgICAgSW50U2l6ZSBz
aXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7Ci0KICAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1wbGluZ0xldmVsKCk7
CiAKICAgICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgY2Fj
aGluZyB0aGUgSW1hZ2VGcmFtZS4KICAgICBib29sIGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0Nv
bXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90LCBjb25zdCBEZWNvZGluZ09wdGlvbnMm
KTsKQEAgLTEwNiwxMSArMTEzLDE1IEBAIHB1YmxpYzoKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9u
QXRJbmRleChzaXplX3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0
SW5kZXgoc2l6ZV90KTsKIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldFRhcmdldENv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0Kik7CisjZW5kaWYKKyAgICBOYXRpdmVJbWFnZVB0
ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJz
YW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJ
bmRleChzaXplX3QpOwotICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJ
Zk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpOworICAgIE5hdGl2ZUltYWdlUHRyIGZy
YW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBT
dWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogcHJpdmF0ZToKLSAgICBJbWFnZUZyYW1lQ2Fj
aGUoSW1hZ2UqKTsKKyAgICBJbWFnZUZyYW1lQ2FjaGUoSW1hZ2UqLCBBbHBoYU9wdGlvbiA9IEFs
cGhhT3B0aW9uOjpQcmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkKTsKICAgICBJbWFnZUZyYW1lQ2FjaGUo
TmF0aXZlSW1hZ2VQdHImJik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBUIChJbWFnZURl
Y29kZXI6OipmdW5jdG9yKSgpIGNvbnN0PgpAQCAtMTIyLDYgKzEzMyw3IEBAIHByaXZhdGU6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KICAgICBUIGZyYW1lTWV0
YWRhdGFBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFQgKEltYWdlRnJhbWU6OipmdW5jdG9y
KSgpIGNvbnN0LCAgc3RkOjpvcHRpb25hbDxUPiogY2FjaGVkVmFsdWUsIEFyZ3MmJi4uLik7CiAK
KyAgICBib29sIGVuc3VyZURlY29kZXJBdmFpbGFibGUoU2hhcmVkQnVmZmVyKiBkYXRhKTsKICAg
ICBib29sIGlzRGVjb2RlckF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlcjsgfQog
ICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKHNpemVfdCBmcmFtZUNvdW50LCBzaXplX3QgZXhj
bHVkZUZyYW1lKTsKICAgICB2b2lkIGRlY29kZWRTaXplQ2hhbmdlZChsb25nIGxvbmcgZGVjb2Rl
ZFNpemUpOwpAQCAtMTM5LDExICsxNTEsMjEgQEAgcHJpdmF0ZToKIAogICAgIGNvbnN0IEltYWdl
RnJhbWUmIGZyYW1lQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBJbWFnZUZyYW1lOjpDYWNo
aW5nLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiA9IHsgfSk7CiAKKyAg
ICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJik7CisKICAgICBJbWFnZSogbV9pbWFnZSB7IG51
bGxwdHIgfTsKICAgICBSZWZQdHI8SW1hZ2VEZWNvZGVyPiBtX2RlY29kZXI7CisgICAgQWxwaGFP
cHRpb24gbV9hbHBoYU9wdGlvbiB7IEFscGhhT3B0aW9uOjpQcmVtdWx0aXBsaWVkIH07CisgICAg
R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiB7
IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkIH07CisKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBzZXR0aW5nIHRvIGVuYWJsZS9k
aXNhYmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgc28gdGhhdCB3ZSBjYW4gcmVtb3ZlIHRoZSBQTEFU
Rk9STShJT1MpLWd1YXJkLgorICAgIGRvdWJsZSBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSB7
IDAgfTsKKyAgICB1aW50MTZfdCBtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgeyAwIH07Cisj
ZW5kaWYKKwogICAgIHVuc2lnbmVkIG1fZGVjb2RlZFNpemUgeyAwIH07CiAgICAgdW5zaWduZWQg
bV9kZWNvZGVkUHJvcGVydGllc1NpemUgeyAwIH07Ci0KICAgICBWZWN0b3I8SW1hZ2VGcmFtZSwg
MT4gbV9mcmFtZXM7CiAKICAgICAvLyBBc3luY2hyb25vdXMgaW1hZ2UgZGVjb2RpbmcuCkBAIC0x
NzYsNiArMTk4LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IG1fc2l6
ZTsKICAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlv
bjsKICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBtX3NpbmdsZVBpeGVsU29saWRDb2xvcjsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+IG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2
ZWw7CiB9OwogICAgIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShub25leGlzdGVudCkKQEAgLTEs
MjI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAsIDIwMTEsIDIwMTIs
IDIwMTQsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYwotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SW1hZ2VTb3VyY2UuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaWYgVVNF
KENHKQotI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCi0jaWYgUExBVEZPUk0oV0lOKQotI2lu
Y2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNl
bmRpZgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJE
LmgiCi0jZWxzZQotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotI2VuZGlmCi0KLSNpbmNsdWRl
ICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKE5hdGl2ZUltYWdl
UHRyJiYgbmF0aXZlSW1hZ2UpCi0gICAgOiBtX2ZyYW1lQ2FjaGUoSW1hZ2VGcmFtZUNhY2hlOjpj
cmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpKQotewotfQotICAgIAotSW1hZ2VTb3VyY2U6Oklt
YWdlU291cmNlKEltYWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotICAgIDogbV9m
cmFtZUNhY2hlKEltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlKGltYWdlKSkKLSAgICAsIG1fYWxwaGFP
cHRpb24oYWxwaGFPcHRpb24pCi0gICAgLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKGdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotewotfQotCi1JbWFnZVNvdXJjZTo6fkltYWdlU291
cmNlKCkKLXsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNp
emVfdCBjbGVhckJlZm9yZUZyYW1lKQotewotICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2RlY29kZXItPmNsZWFyRnJhbWVCdWZmZXJDYWNoZShj
bGVhckJlZm9yZUZyYW1lKTsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6ZW5zdXJlRGVjb2RlckF2
YWlsYWJsZShTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgaWYgKCFkYXRhIHx8IGlzRGVjb2Rl
ckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIG1fZGVjb2RlciA9IElt
YWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKTsKLSAgICBpZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2ZyYW1lQ2FjaGUtPnNldERlY29kZXIobV9kZWNvZGVyLmdl
dCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGVjb2Rl
clRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQotewot
I2lmIFVTRShESVJFQ1QyRCkKLSAgICBpZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAodGFyZ2V0Q29udGV4dCkKLSAgICAgICAgbV9kZWNvZGVyLT5z
ZXRUYXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1h
Z2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZl
ZCkKLXsKLSAgICBpZiAoIWRhdGEgfHwgIWVuc3VyZURlY29kZXJBdmFpbGFibGUoZGF0YSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGVjb2Rlci0+c2V0RGF0YSgqZGF0YSwgYWxsRGF0YVJl
Y2VpdmVkKTsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6cmVzZXREYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSkKLXsKLSAgICBtX2RlY29kZXIgPSBudWxscHRyOwotICAgIG1fZnJhbWVDYWNoZS0+c2V0
RGVjb2RlcihudWxscHRyKTsKLSAgICBzZXREYXRhKGRhdGEsIGlzQWxsRGF0YVJlY2VpdmVkKCkp
OwotfQotCi1FbmNvZGVkRGF0YVN0YXR1cyBJbWFnZVNvdXJjZTo6ZGF0YUNoYW5nZWQoU2hhcmVk
QnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSNpZiBQTEFURk9STShJT1Mp
Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBzZXR0aW5nIHRvIGVuYWJsZS9kaXNh
YmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgYW5kIG1ha2UgdGhpcwotICAgIC8vIGNvZGUgY29uZGl0
aW9uYWwgb24gaXQuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4K
LSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGNodW5rTG9hZEludGVydmFsc1tdID0gezAsIDEsIDMs
IDYsIDE1fTsKLSAgICBkb3VibGUgaW50ZXJ2YWwgPSBjaHVua0xvYWRJbnRlcnZhbHNbc3RkOjpt
aW4obV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50LCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oNCkp
XTsKLQotICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKLQotICAgIC8vIFRoZSBmaXJzdCB0
aW1lIHRocm91Z2gsIHRoZSBjaHVuayB0aW1lIHdpbGwgYmUgMCBhbmQgdGhlIGltYWdlIHdpbGwg
Z2V0IGFuIHVwZGF0ZS4KLSAgICBpZiAoY3VycmVudFRpbWUoKSAtIG1fcHJvZ3Jlc3NpdmVMb2Fk
Q2h1bmtUaW1lID4gaW50ZXJ2YWwpIHsKLSAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOwotICAg
ICAgICBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgICAg
IEFTU0VSVChtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MTZfdD46Om1heCgpKTsKLSAgICAgICAgKyttX3Byb2dyZXNzaXZlTG9hZENodW5rQ291
bnQ7Ci0gICAgfQotCi0gICAgaWYgKG5lZWRzVXBkYXRlIHx8IGFsbERhdGFSZWNlaXZlZCkKLSAg
ICAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2Vsc2UKLSAgICBzZXREYXRh
KGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0jZW5kaWYKLQotICAgIG1fZnJhbWVDYWNoZS0+Y2xl
YXJNZXRhZGF0YSgpOwotICAgIEVuY29kZWREYXRhU3RhdHVzIHN0YXR1cyA9IGVuY29kZWREYXRh
U3RhdHVzKCk7Ci0gICAgaWYgKHN0YXR1cyA8IEVuY29kZWREYXRhU3RhdHVzOjpTaXplQXZhaWxh
YmxlKQotICAgICAgICByZXR1cm4gc3RhdHVzOwotCi0gICAgbV9mcmFtZUNhY2hlLT5ncm93RnJh
bWVzKCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6aXNBbGxE
YXRhUmVjZWl2ZWQoKQotewotICAgIHJldHVybiBpc0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVj
b2Rlci0+aXNBbGxEYXRhUmVjZWl2ZWQoKSA6IG1fZnJhbWVDYWNoZS0+ZnJhbWVDb3VudCgpOwot
fQotCi1ib29sIEltYWdlU291cmNlOjpjYW5Vc2VBc3luY0RlY29kaW5nKCkKLXsKLSAgICBpZiAo
IWlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgdGhlIGJlc3QgaGV1cmlzdGljIGZvciBlbmFibGluZyBhc3luYyBpbWFn
ZSBkZWNvZGluZy4KLSAgICByZXR1cm4gc2l6ZSgpLmFyZWEoKSAqIHNpemVvZihSR0JBMzIpID49
IChmcmFtZUNvdW50KCkgPiAxID8gMTAwICogS0IgOiA1MDAgKiBLQik7Ci19Ci0KLVN1YnNhbXBs
aW5nTGV2ZWwgSW1hZ2VTb3VyY2U6Om1heGltdW1TdWJzYW1wbGluZ0xldmVsKCkKLXsKLSAgICBp
ZiAobV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIG1fbWF4aW11bVN1
YnNhbXBsaW5nTGV2ZWwudmFsdWUoKTsKLQotICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkg
fHwgIW1fZGVjb2Rlci0+ZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRleCgwKSkKLSAgICAgICAg
cmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7Ci0KLSAgICAvLyBGSVhNRTogdGhpcyB2
YWx1ZSB3YXMgY2hvc2VuIHRvIGJlIGFwcHJvcHJpYXRlIGZvciBpT1Mgc2luY2UgdGhlIGltYWdl
Ci0gICAgLy8gc3Vic2FtcGxpbmcgaXMgb25seSBlbmFibGVkIGJ5IGRlZmF1bHQgb24gaU9TLiBD
aG9vc2UgYSBkaWZmZXJlbnQgdmFsdWUKLSAgICAvLyBpZiBpbWFnZSBzdWJzYW1wbGluZyBpcyBl
bmFibGVkIG9uIG90aGVyIHBsYXRmb3JtLgotICAgIGNvbnN0IGludCBtYXhpbXVtSW1hZ2VBcmVh
QmVmb3JlU3Vic2FtcGxpbmcgPSA1ICogMTAyNCAqIDEwMjQ7Ci0gICAgU3Vic2FtcGxpbmdMZXZl
bCBsZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkZpcnN0OwotCi0gICAgZm9yICg7IGxldmVsIDwg
U3Vic2FtcGxpbmdMZXZlbDo6TGFzdDsgKytsZXZlbCkgewotICAgICAgICBpZiAoZnJhbWVTaXpl
QXRJbmRleCgwLCBsZXZlbCkuYXJlYSgpLnVuc2FmZUdldCgpIDwgbWF4aW11bUltYWdlQXJlYUJl
Zm9yZVN1YnNhbXBsaW5nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9tYXhp
bXVtU3Vic2FtcGxpbmdMZXZlbCA9IGxldmVsOwotICAgIHJldHVybiBtX21heGltdW1TdWJzYW1w
bGluZ0xldmVsLnZhbHVlKCk7Ci19Ci0KLVN1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1
YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3IpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIE5ldmVy
IHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KLSAg
ICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkp
Ci0gICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OwotCi0gICAgZmxvYXQg
c2NhbGUgPSBzdGQ6Om1pbihmbG9hdCgxKSwgc3RkOjptYXgoc2NhbGVGYWN0b3Iud2lkdGgoKSwg
c2NhbGVGYWN0b3IuaGVpZ2h0KCkpKTsKLSAgICBpZiAoIShzY2FsZSA+IDAgJiYgc2NhbGUgPD0g
MSkpCi0gICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OwotCi0gICAgaW50
IHJlc3VsdCA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIoMSAvIHNjYWxlKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN1YnNhbXBsaW5nTGV2ZWw+KHN0ZDo6bWluKHJlc3VsdCwgc3RhdGljX2Nhc3Q8
aW50PihtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpKSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjYWxlRmFjdG9yKTsKLSAgICByZXR1cm4g
U3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKLSNlbmRpZgotfQotCi1OYXRpdmVJbWFnZVB0ciBJ
bWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCi17Ci0gICAgcmV0dXJuIGlzRGVjb2RlckF2YWls
YWJsZSgpID8gbV9kZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2Ft
cGxpbmdMZXZlbCkgOiBudWxscHRyOwotfQotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6
ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdM
ZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRl
eHQpCi17Ci0gICAgc2V0RGVjb2RlclRhcmdldENvbnRleHQodGFyZ2V0Q29udGV4dCk7Ci0gICAg
cmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKGluZGV4
LCBzdWJzYW1wbGluZ0xldmVsKTsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6ZHVtcChUZXh0U3Ry
ZWFtJiB0cykKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInR5cGUiLCBmaWxlbmFtZUV4dGVuc2lv
bigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImZyYW1lLWNvdW50IiwgZnJhbWVDb3VudCgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInJlcGV0aXRpb25zIiwgcmVwZXRpdGlvbkNvdW50KCkpOwot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgic29saWQtY29sb3IiLCBzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
KSk7Ci0KLSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlv
bkF0SW5kZXgoMCk7Ci0gICAgaWYgKG9yaWVudGF0aW9uICE9IE9yaWdpblRvcExlZnQpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgib3JpZW50YXRpb24iLCBvcmllbnRhdGlvbik7Ci19Ci0KLX0K
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAs
MCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkocmV2aXNpb24g
MjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMDgsIDIwMTAsIDIwMTIsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJJbWFnZUZyYW1lLmgiCi0jaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0j
aW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbWFnZURlY29kZXI7Ci1jbGFzcyBJbWFnZU9yaWVu
dGF0aW9uOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgU2hhcmVkQnVm
ZmVyOwotCi1jbGFzcyBJbWFnZVNvdXJjZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1h
Z2VTb3VyY2UpOwotICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKLXB1YmxpYzoKLSAgICBJ
bWFnZVNvdXJjZShOYXRpdmVJbWFnZVB0ciYmKTsKLSAgICBJbWFnZVNvdXJjZShJbWFnZSosIEFs
cGhhT3B0aW9uID0gQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQsIEdhbW1hQW5kQ29sb3JQcm9m
aWxlT3B0aW9uID0gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQpOwotICAgIH5J
bWFnZVNvdXJjZSgpOwotCi0gICAgdm9pZCBkZXN0cm95QWxsRGVjb2RlZERhdGEoKSB7IG1fZnJh
bWVDYWNoZS0+ZGVzdHJveUFsbERlY29kZWREYXRhKCk7IH0KLSAgICB2b2lkIGRlc3Ryb3lBbGxE
ZWNvZGVkRGF0YUV4Y2x1ZGVGcmFtZShzaXplX3QgZXhjbHVkZUZyYW1lKSB7IG1fZnJhbWVDYWNo
ZS0+ZGVzdHJveUFsbERlY29kZWREYXRhRXhjbHVkZUZyYW1lKGV4Y2x1ZGVGcmFtZSk7IH0KLSAg
ICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKHNpemVfdCBiZWZvcmVGcmFtZSkg
eyBtX2ZyYW1lQ2FjaGUtPmRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKGJlZm9yZUZyYW1l
KTsgfQotICAgIHZvaWQgZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpIHsgbV9mcmFtZUNh
Y2hlLT5kZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7IH0KLSAgICB2b2lkIGNsZWFySW1h
Z2UoKSB7IG1fZnJhbWVDYWNoZS0+Y2xlYXJJbWFnZSgpOyB9Ci0gICAgdm9pZCBjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90KTsKLQotICAgIGJvb2wgZW5zdXJlRGVjb2RlckF2YWlsYWJsZShT
aGFyZWRCdWZmZXIqKTsKLSAgICBib29sIGlzRGVjb2RlckF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIHZvaWQgcmVzZXREYXRhKFNoYXJlZEJ1
ZmZlciogZGF0YSk7Ci0gICAgRW5jb2RlZERhdGFTdGF0dXMgZGF0YUNoYW5nZWQoU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0KLSAgICB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZGVjb2RlZFNpemUoKTsgfQotICAg
IGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKTsKLQotICAgIGJvb2wgY2FuVXNlQXN5bmNEZWNvZGlu
ZygpOwotICAgIHZvaWQgcmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgoc2l6ZV90IGlu
ZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8SW50U2l6ZT4mIHNpemVGb3JEcmF3aW5nID0geyB9KSB7IG1fZnJhbWVDYWNoZS0+cmVxdWVz
dEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIHNpemVG
b3JEcmF3aW5nKTsgfQotICAgIGJvb2wgaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZUNhY2hlLT5oYXNBc3luY0RlY29kaW5nUXVldWUoKTsgfQotICAgIGJvb2wg
aXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCkgY29uc3QgIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+
aXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCk7IH0KLSAgICB2b2lkIHN0b3BBc3luY0RlY29kaW5n
UXVldWUoKSB7IG1fZnJhbWVDYWNoZS0+c3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOyB9Ci0KLSAg
ICAvLyBJbWFnZSBtZXRhZGF0YSB3aGljaCBpcyBjYWxjdWxhdGVkIGJ5IHRoZSBkZWNvZGVyIG9y
IGNhbiBkZWR1Y2VkIGJ5IHRoZSBjYXNlIG9mIHRoZSBtZW1vcnkgTmF0aXZlSW1hZ2UuCi0gICAg
RW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMoKSB7IHJldHVybiBtX2ZyYW1lQ2Fj
aGUtPmVuY29kZWREYXRhU3RhdHVzKCk7IH0KLSAgICBzaXplX3QgZnJhbWVDb3VudCgpIHsgcmV0
dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVDb3VudCgpOyB9Ci0gICAgUmVwZXRpdGlvbkNvdW50IHJl
cGV0aXRpb25Db3VudCgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+cmVwZXRpdGlvbkNvdW50KCk7
IH0KLSAgICBTdHJpbmcgdXRpKCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT51dGkoKTsgfQotICAg
IFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZmlsZW5h
bWVFeHRlbnNpb24oKTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IGhvdFNwb3QoKSB7
IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmhvdFNwb3QoKTsgfQotCi0gICAgLy8gSW1hZ2UgbWV0YWRh
dGEgd2hpY2ggaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBmaXJzdCBJbWFnZUZyYW1lLgotICAgIElu
dFNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+c2l6ZSgpOyB9Ci0gICAgSW50U2l6
ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5zaXpl
UmVzcGVjdGluZ09yaWVudGF0aW9uKCk7IH0KLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPnNpbmdsZVBpeGVsU29saWRDb2xvcigpOyB9Ci0K
LSAgICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgY2FjaGlu
ZyB0aGUgSW1hZ2VGcmFtZS4KLSAgICBib29sIGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBh
dGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBEZWNvZGluZ09wdGlv
bnMmIGRlY29kaW5nT3B0aW9ucykgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUlzQmVpbmdE
ZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBkZWNvZGluZ09w
dGlvbnMpOyB9Ci0gICAgRGVjb2RpbmdTdGF0dXMgZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgo
c2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lRGVjb2RpbmdTdGF0dXNB
dEluZGV4KGluZGV4KTsgfQotICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsg
fQotICAgIGJvb2wgZnJhbWVIYXNJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBt
X2ZyYW1lQ2FjaGUtPmZyYW1lSGFzSW1hZ2VBdEluZGV4KGluZGV4KTsgfQotICAgIGJvb2wgZnJh
bWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwpIHsgcmV0dXJuIG1f
ZnJhbWVDYWNoZS0+ZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCk7IH0KLSAgICBib29sIGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29t
cGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0
aW9ucyYgZGVjb2RpbmdPcHRpb25zKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSGFzRGVj
b2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChpbmRleCwgc3Vic2Ft
cGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRpb25zKTsgfQotICAgIFN1YnNhbXBsaW5nTGV2ZWwgZnJh
bWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVD
YWNoZS0+ZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChpbmRleCk7IH0KLQotICAgIC8vIElt
YWdlRnJhbWUgbWV0YWRhdGEgd2hpY2ggZm9yY2VzIGNhY2hpbmcgb3IgcmUtY2FjaGluZyB0aGUg
SW1hZ2VGcmFtZS4KLSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZh
dWx0KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNh
bXBsaW5nTGV2ZWwpOyB9Ci0gICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGlu
ZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVs
OjpEZWZhdWx0KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lQnl0ZXNBdEluZGV4KGluZGV4
LCBzdWJzYW1wbGluZ0xldmVsKTsgfQotICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUR1cmF0aW9uQXRJbmRleChp
bmRleCk7IH0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZU9yaWVudGF0aW9uQXRJbmRl
eChpbmRleCk7IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUltYWdlQXRJbmRleChpbmRleCk7
IH0KLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6
ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpOwotCi0gICAgU3Vic2FtcGxpbmdMZXZlbCBtYXhp
bXVtU3Vic2FtcGxpbmdMZXZlbCgpOwotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdM
ZXZlbEZvclNjYWxlRmFjdG9yKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2Nh
bGVGYWN0b3IpOwotICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNp
emVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwotCi1w
cml2YXRlOgotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKTsKLQotICAgIHZvaWQgc2V0
RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0Kik7Ci0KLSAgICBSZWY8
SW1hZ2VGcmFtZUNhY2hlPiBtX2ZyYW1lQ2FjaGU7Ci0gICAgUmVmUHRyPEltYWdlRGVjb2Rlcj4g
bV9kZWNvZGVyOwotCi0gICAgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiBtX21heGlt
dW1TdWJzYW1wbGluZ0xldmVsOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBs
b2FkaW5nIHNvIHRoYXQgd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KLSAg
ICBkb3VibGUgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgeyAwIH07Ci0gICAgdWludDE2X3Qg
bV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50IHsgMCB9OwotI2VuZGlmCi0KLSAgICBBbHBoYU9w
dGlvbiBtX2FscGhhT3B0aW9uIHsgQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQgfTsKLSAgICBH
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIHsg
R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQgfTsKLX07Ci0KLX0KClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2
ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHQzRENhaXJvLmNwcAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0j
aW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKQEAgLTI2Myw4ICsyNjMsNiBAQCBHcmFwaGlj
c0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIAogR3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKQogewotICAgIGlmIChtX2RlY29kZXIpCi0g
ICAgICAgIGRlbGV0ZSBtX2RlY29kZXI7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQpAQCAtMjc0LDE5ICsyNzIsMTggQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OgogICAgIC8vIFdlIG5lZWQgdGhpcyB0byBz
dGF5IGluIHNjb3BlIGJlY2F1c2UgdGhlIG5hdGl2ZSBpbWFnZSBpcyBqdXN0IGEgc2hhbGxvdyBj
b3B5IG9mIHRoZSBkYXRhLgogICAgIEFscGhhT3B0aW9uIGFscGhhT3B0aW9uID0gcHJlbXVsdGlw
bHlBbHBoYSA/IEFscGhhT3B0aW9uOjpQcmVtdWx0aXBsaWVkIDogQWxwaGFPcHRpb246Ok5vdFBy
ZW11bHRpcGxpZWQ7CiAgICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24gPSBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uOjpJZ25vcmVkIDogR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFw
cGxpZWQ7Ci0gICAgbV9kZWNvZGVyID0gbmV3IEltYWdlU291cmNlKG51bGxwdHIsIGFscGhhT3B0
aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisgICAgYXV0byBkZWNvZGVyID0gSW1h
Z2VGcmFtZUNhY2hlOjpjcmVhdGUobnVsbHB0ciwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKTsKICAgICAKLSAgICBpZiAoIW1fZGVjb2RlcikKKyAgICBpZiAoIWRlY29k
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlU291cmNlJiBkZWNvZGVyID0g
Km1fZGVjb2RlcjsKICAgICBtX2FscGhhT3AgPSBBbHBoYURvTm90aGluZzsKIAogICAgIGlmICht
X2ltYWdlLT5kYXRhKCkpIHsKLSAgICAgICAgZGVjb2Rlci5zZXREYXRhKG1faW1hZ2UtPmRhdGEo
KSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5mcmFtZUNvdW50KCkpCisgICAgICAgIGRl
Y29kZXItPnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLT5mcmFtZUNvdW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1f
aW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsKKyAgICAg
ICAgbV9pbWFnZVN1cmZhY2UgPSBkZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIC8vIDEuIEZvciB0ZXhJbWFnZTJEIHdpdGgg
SFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJlbXVsdGlwbHlBbHBoYSBoYWQgYmVl
biBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhGRiBmb3IgZWFjaCBwaXhlbCwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNE
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzI3LDEyICszMjcsMTIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBoYXNBbHBoYSA9
ICFtX2ltYWdlLT5jdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKTsKICAgICBpZiAoKGlnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJlbXVsdGlwbHlBbHBoYSkp
ICYmIG1faW1hZ2UtPmRhdGEoKSkgewotICAgICAgICBJbWFnZVNvdXJjZSBkZWNvZGVyKG51bGxw
dHIsIEFscGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBsaWVkLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSA/IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpJZ25vcmVkIDogR2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb246OkFwcGxpZWQpOwotICAgICAgICBkZWNvZGVyLnNldERhdGEobV9pbWFn
ZS0+ZGF0YSgpLCB0cnVlKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSkKKyAg
ICAgICAgYXV0byBkZWNvZGVyID0gSW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUobnVsbHB0ciwgQWxw
aGFPcHRpb246Ok5vdFByZW11bHRpcGxpZWQsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8g
R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbjo6QXBwbGllZCk7CisgICAgICAgIGRlY29kZXItPnNldERhdGEobV9pbWFnZS0+ZGF0
YSgpLCB0cnVlKTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5mcmFtZUNvdW50KCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV9kZWNvZGVkSW1hZ2UgPSBkZWNvZGVyLmNy
ZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOworICAgICAgICBtX2RlY29kZWRJbWFnZSA9IGRlY29k
ZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOwogICAgICAgICBtX2NnSW1hZ2UgPSBtX2Rl
Y29kZWRJbWFnZTsKICAgICB9IGVsc2UKICAgICAgICAgbV9jZ0ltYWdlID0gbV9pbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaAkocmV2aXNpb24gMjIwNzQ3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cu
aAkod29ya2luZyBjb3B5KQpAQCAtNzEsOCArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciYsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBib29s
IGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbERhdGFSZWNlaXZlZDsg
fQotICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkgeyB9Ci0gICAgCisKIHBy
b3RlY3RlZDoKICAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQgeyBmYWxzZSB9OwogICAgIFJl
dGFpblB0cjxDR0ltYWdlU291cmNlUmVmPiBtX25hdGl2ZURlY29kZXI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5oCShy
ZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZVNvdXJjZUNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYg
SW1hZ2VTb3VyY2VDR19oCiAjZGVmaW5lIEltYWdlU291cmNlQ0dfaAogCi0jaW5jbHVkZSAiSW1h
Z2VTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNv
ZGVyRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKQEAgLTcyLDcgKzcxLDYgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXImLCBib29sIGFsbERhdGFSZWNl
aXZlZCk7CiAgICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNB
bGxEYXRhUmVjZWl2ZWQ7IH0KLSAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qp
IHsgfQogCiAgICAgdm9pZCBzZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVyVGFyZ2V0Kik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTky
LDcgKzE5Miw3IEBAIHB1YmxpYzoKICAgICAvLyBDbGVhcnMgZGVjb2RlZCBwaXhlbCBkYXRhIGZy
b20gYmVmb3JlIHRoZSBwcm92aWRlZCBmcmFtZSB1bmxlc3MgdGhhdAogICAgIC8vIGRhdGEgbWF5
IGJlIG5lZWRlZCB0byBkZWNvZGUgZnV0dXJlIGZyYW1lcyAoZS5nLiBkdWUgdG8gR0lGIGZyYW1l
CiAgICAgLy8gY29tcG9zaXRpbmcpLgotICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVy
Q2FjaGUoc2l6ZV90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUZyYW1lQnVmZmVyQ2Fj
aGUoc2l6ZV90KSB7IH0KIAogICAgIC8vIElmIHRoZSBpbWFnZSBoYXMgYSBjdXJzb3IgaG90LXNw
b3QsIHN0b3JlcyBpdCBpbiB0aGUgYXJndW1lbnQKICAgICAvLyBhbmQgcmV0dXJucyB0cnVlLiBP
dGhlcndpc2UgcmV0dXJucyBmYWxzZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcw
LDEwIEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb24KIAogUmVwZXRp
dGlvbkNvdW50IEdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKIHsKLSAg
ICAvLyBUaGlzIHZhbHVlIGNhbiBhcnJpdmUgYXQgYW55IHBvaW50IGluIHRoZSBpbWFnZSBkYXRh
IHN0cmVhbS4gIE1vc3QgR0lGcworICAgIC8vIFRoaXMgdmFsdWUgY2FuIGFycml2ZSBhdCBhbnkg
cG9pbnQgaW4gdGhlIGltYWdlIGRhdGEgc3RyZWFtLiBNb3N0IEdJRnMKICAgICAvLyBpbiB0aGUg
d2lsZCBkZWNsYXJlIGl0IG5lYXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgc28gaXQgdXN1
YWxseSBpcwogICAgIC8vIHNldCBieSB0aGUgdGltZSB3ZSd2ZSBkZWNvZGVkIHRoZSBzaXplLCBi
dXQgKGRlcGVuZGluZyBvbiB0aGUgR0lGIGFuZCB0aGUKLSAgICAvLyBwYWNrZXRzIHNlbnQgYmFj
ayBieSB0aGUgd2Vic2VydmVyKSBub3QgYWx3YXlzLiAgSWYgdGhlIHJlYWRlciBoYXNuJ3QKKyAg
ICAvLyBwYWNrZXRzIHNlbnQgYmFjayBieSB0aGUgd2Vic2VydmVyKSBub3QgYWx3YXlzLiBJZiB0
aGUgcmVhZGVyIGhhc24ndAogICAgIC8vIHNlZW4gYSBsb29wIGNvdW50IHlldCwgaXQgd2lsbCBy
ZXR1cm4gY0xvb3BDb3VudE5vdFNlZW4sIGluIHdoaWNoIGNhc2Ugd2UKICAgICAvLyBzaG91bGQg
ZGVmYXVsdCB0byBsb29waW5nIG9uY2UgKHRoZSBpbml0aWFsIHZhbHVlIGZvcgogICAgIC8vIHxt
X3JlcGV0aXRpb25Db3VudHwpLgpAQCAtODEsMTIgKzgxLDEyIEBAIFJlcGV0aXRpb25Db3VudCBH
SUZJbWFnZURlY29kZXI6OnJlcGV0aXQKICAgICAvLyBUaGVyZSBhcmUgc29tZSBhZGRpdGlvbmFs
IHdyaW5rbGVzIGhlcmUuIEZpcnN0LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKQogICAgIC8vIG1heSBk
ZXN0cm95IHRoZSByZWFkZXIsIG1ha2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRlciBfbGVz
c18KICAgICAvLyBhdXRob3JpdGF0aXZlIG9uIGZ1dHVyZSBjYWxscyBpZiB0aGUgcmVjcmVhdGVk
IHJlYWRlciBoYXNuJ3Qgc2VlbiB0aGUKLSAgICAvLyBsb29wIGNvdW50LiAgV2UgZG9uJ3QgbmVl
ZCB0byBzcGVjaWFsLWNhc2UgdGhpcyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUKKyAgICAvLyBs
b29wIGNvdW50LiBXZSBkb24ndCBuZWVkIHRvIHNwZWNpYWwtY2FzZSB0aGlzIGJlY2F1c2UgaW4g
dGhpcyBjYXNlIHRoZQogICAgIC8vIG5ldyByZWFkZXIgd2lsbCBvbmNlIGFnYWluIHJldHVybiBj
TG9vcENvdW50Tm90U2VlbiwgYW5kIHdlIHdvbid0CiAgICAgLy8gb3ZlcndyaXRlIHRoZSBjYWNo
ZWQgY29ycmVjdCB2YWx1ZS4KICAgICAvLwogICAgIC8vIFNlY29uZCwgYSBHSUYgbWlnaHQgbmV2
ZXIgc2V0IGEgbG9vcCBjb3VudCBhdCBhbGwsIGluIHdoaWNoIGNhc2Ugd2UKLSAgICAvLyBzaG91
bGQgY29udGludWUgdG8gdHJlYXQgaXQgYXMgYSAibG9vcCBvbmNlIiBhbmltYXRpb24uICBXZSBk
b24ndCBuZWVkCisgICAgLy8gc2hvdWxkIGNvbnRpbnVlIHRvIHRyZWF0IGl0IGFzIGEgImxvb3Ag
b25jZSIgYW5pbWF0aW9uLiBXZSBkb24ndCBuZWVkCiAgICAgLy8gc3BlY2lhbCBjb2RlIGhlcmUg
ZWl0aGVyLCBiZWNhdXNlIGluIHRoaXMgY2FzZSB3ZSdsbCBuZXZlciBjaGFuZ2UKICAgICAvLyB8
bV9yZXBldGl0aW9uQ291bnR8IGZyb20gaXRzIGRlZmF1bHQgdmFsdWUuCiAgICAgLy8KQEAgLTEx
OCw3ICsxMTgsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCkKICAgICByZXR1
cm4gSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKTsKIH0KIAotdm9pZCBHSUZJbWFnZURlY29kZXI6
OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3ZvaWQgR0lG
SW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3JlRnJhbWUp
CiB7CiAgICAgLy8gSW4gc29tZSBjYXNlcywgbGlrZSBpZiB0aGUgZGVjb2RlciB3YXMgZGVzdHJv
eWVkIHdoaWxlIGFuaW1hdGluZywgd2UKICAgICAvLyBjYW4gYmUgYXNrZWQgdG8gY2xlYXIgbW9y
ZSBmcmFtZXMgdGhhbiB3ZSBjdXJyZW50bHkgaGF2ZS4KQEAgLTEyOSwzMCArMTI5LDMwIEBAIHZv
aWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2EKICAgICAvLyB0aGVyZSdzIGFu
IG9uZ29pbmcgZGVjb2RlIHdpbGwgY2F1c2UgYSBjcmFzaC4KICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2RlY29kZUxvY2spOwogCi0gICAgLy8gVGhlICItMSIgaGVyZSBpcyB0cmlja3kuICBJdCBk
b2VzIG5vdCBtZWFuIHRoYXQgfGNsZWFyQmVmb3JlRnJhbWV8IGlzIHRoZQorICAgIC8vIFRoZSAi
LTEiIGhlcmUgaXMgdHJpY2t5LiBJdCBkb2VzIG5vdCBtZWFuIHRoYXQgfGJlZm9yZUZyYW1lfCBp
cyB0aGUKICAgICAvLyBsYXN0IGZyYW1lIHdlIHdpc2ggdG8gcHJlc2VydmUsIGJ1dCByYXRoZXIg
dGhhdCB3ZSBuZXZlciB3YW50IHRvIGNsZWFyCiAgICAgLy8gdGhlIHZlcnkgbGFzdCBmcmFtZSBp
biB0aGUgY2FjaGU6IGl0J3MgZW1wdHkgKHNvIGNsZWFyaW5nIGl0IGlzCiAgICAgLy8gcG9pbnRs
ZXNzKSwgaXQncyBwYXJ0aWFsIChzbyB3ZSBkb24ndCB3YW50IHRvIGNsZWFyIGl0IGFueXdheSks
IG9yIHRoZQogICAgIC8vIGNhY2hlIGNvdWxkIGJlIGVubGFyZ2VkIHdpdGggYSBmdXR1cmUgc2V0
RGF0YSgpIGNhbGwgYW5kIGl0IGNvdWxkIGJlCi0gICAgLy8gbmVlZGVkIHRvIGNvbnN0cnVjdCB0
aGUgbmV4dCBmcmFtZSAoc2VlIGNvbW1lbnRzIGJlbG93KS4gIENhbGxlcnMgY2FuCisgICAgLy8g
bmVlZGVkIHRvIGNvbnN0cnVjdCB0aGUgbmV4dCBmcmFtZSAoc2VlIGNvbW1lbnRzIGJlbG93KS4g
Q2FsbGVycyBjYW4KICAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0cnVlLCAu
Li4pIHRvIGNvbXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCiAgICAgLy8gdGhpcyBjYXNlLgot
ICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBtX2ZyYW1l
QnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+Ojpp
dGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1l
KTsKKyAgICBiZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGJlZm9yZUZyYW1lLCBtX2ZyYW1lQnVmZmVy
Q2FjaGUuc2l6ZSgpIC0gMSk7CisgICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRv
ciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBiZWZvcmVGcmFtZSk7CiAKICAgICAv
LyBXZSBuZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNoIHRoYXQ6CiAgICAgLy8gICAqIFdlIGRv
bid0IGNsZWFyIHxlbmR8CiAgICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIHRoZSBmcmFtZSB3ZSdy
ZSBjdXJyZW50bHkgZGVjb2RpbmcKICAgICAvLyAgICogV2UgZG9uJ3QgY2xlYXIgYW55IGZyYW1l
IGZyb20gd2hpY2ggYSBmdXR1cmUgaW5pdEZyYW1lQnVmZmVyKCkgY2FsbAogICAgIC8vICAgICB3
aWxsIGNvcHkgYml0bWFwIGRhdGEKLSAgICAvLyBBbGwgb3RoZXIgZnJhbWVzIGNhbiBiZSBjbGVh
cmVkLiAgQmVjYXVzZSBvZiB0aGUgY29uc3RyYWludHMgb24gd2hlbgorICAgIC8vIEFsbCBvdGhl
ciBmcmFtZXMgY2FuIGJlIGNsZWFyZWQuIEJlY2F1c2Ugb2YgdGhlIGNvbnN0cmFpbnRzIG9uIHdo
ZW4KICAgICAvLyBJbWFnZVNvdXJjZTo6Y2xlYXIoKSBjYW4gYmUgY2FsbGVkIChzZWUgSW1hZ2VT
b3VyY2UuaCksIHdlJ3JlIGd1YXJhbnRlZWQKICAgICAvLyBub3QgdG8gaGF2ZSBub24tZW1wdHkg
ZnJhbWVzIGFmdGVyIHRoZSBmcmFtZSB3ZSdyZSBjdXJyZW50bHkgZGVjb2RpbmcuCiAgICAgLy8g
U28sIHNjYW4gYmFja3dhcmRzIGZyb20gfGVuZHwgYXMgZm9sbG93czoKICAgICAvLyAgICogSWYg
dGhlIGZyYW1lIGlzIGVtcHR5LCB3ZSdyZSBzdGlsbCBwYXN0IGFueSBmcmFtZXMgd2UgY2FyZSBh
Ym91dC4KICAgICAvLyAgICogSWYgdGhlIGZyYW1lIGlzIGNvbXBsZXRlLCBidXQgaXMgRGlzcG9z
YWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzLCB3ZSdsbAotICAgIC8vICAgICBza2lwIG92ZXIg
aXQgaW4gZnV0dXJlIGluaXRGcmFtZUJ1ZmZlcigpIGNhbGxzLiAgV2UgY2FuIGNsZWFyIGl0Ci0g
ICAgLy8gICAgIHVubGVzcyBpdCdzIHxlbmR8LCBhbmQga2VlcCBzY2FubmluZy4gIEZvciBhbnkg
b3RoZXIgZGlzcG9zYWwgbWV0aG9kLAorICAgIC8vICAgICBza2lwIG92ZXIgaXQgaW4gZnV0dXJl
IGluaXRGcmFtZUJ1ZmZlcigpIGNhbGxzLiBXZSBjYW4gY2xlYXIgaXQKKyAgICAvLyAgICAgdW5s
ZXNzIGl0J3MgfGVuZHwsIGFuZCBrZWVwIHNjYW5uaW5nLiBGb3IgYW55IG90aGVyIGRpc3Bvc2Fs
IG1ldGhvZCwKICAgICAvLyAgICAgc3RvcCBzY2FubmluZywgYXMgd2UndmUgZm91bmQgdGhlIGZy
YW1lIGluaXRGcmFtZUJ1ZmZlcigpIHdpbGwgbmVlZAogICAgIC8vICAgICBuZXh0LgogICAgIC8v
ICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUgZGVjb2RpbmcgaXQsIHNvIGRvbid0
IGNsZWFyIGl0OyBpZiBpdApAQCAtMjExLDcgKzIxMSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVy
OjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUkdCQTMy
KiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5iYWNraW5nU3RvcmUoKS0+cGl4ZWxBdCh4QmVnaW4s
IHlCZWdpbik7Ci0gICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUg
ZnJhbWUuICAKKyAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBm
cmFtZS4KICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CiAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSByb3dCdWZmZXJbKG1fc2NhbGVkID8g
bV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXRdOwogICAgICAg
ICBpZiAoKCFmcmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgfHwgKHNvdXJjZVZhbHVlICE9IGZy
YW1lQ29udGV4dC0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXplKSkgewpA
QCAtMjQxLDcgKzI0MSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1
bnMKIAogYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJ
bmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Qg
ZGlzcG9zYWxNZXRob2QpCiB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNz
YXJ5LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywKKyAgICAvLyBJbml0aWFs
aXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90aGluZyBm
cmFtZXMsCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVjb2RlZFJv
dygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwogICAgIGlmIChidWZmZXIuaXNJbnZhbGlkKCkgJiYg
IWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKQEAgLTI1OSw4ICsyNTksOCBAQCBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgIGlmIChyZWN0LmNvbnRh
aW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCiAgICAgICAgICAgICBidWZm
ZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlmIChmcmFtZUluZGV4KSB7Ci0g
ICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUgZG9lcyBub3QgaGF2ZSBhbHBo
YSBvbmx5IGlmIGV2ZXJ5d2hlcmUKLSAgICAgICAgICAgIC8vIG91dHNpZGUgaXRzIHJlY3QgZG9l
c24ndCBoYXZlIGFscGhhLiAgVG8ga25vdyB3aGV0aGVyIHRoaXMgaXMKKyAgICAgICAgICAgIC8v
IFRyaWNreSBjYXNlLiBUaGlzIGZyYW1lIGRvZXMgbm90IGhhdmUgYWxwaGEgb25seSBpZiBldmVy
eXdoZXJlCisgICAgICAgICAgICAvLyBvdXRzaWRlIGl0cyByZWN0IGRvZXNuJ3QgaGF2ZSBhbHBo
YS4gVG8ga25vdyB3aGV0aGVyIHRoaXMgaXMKICAgICAgICAgICAgIC8vIHRydWUsIHdlIGNoZWNr
IHRoZSBzdGFydCBzdGF0ZSBvZiB0aGUgZnJhbWUgLS0gaWYgaXQgZG9lc24ndCBoYXZlCiAgICAg
ICAgICAgICAvLyBhbHBoYSwgd2UncmUgc2FmZS4KICAgICAgICAgICAgIC8vCkBAIC0yNzIsNyAr
MjcyLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgICAg
ICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07
CiAKICAgICAgICAgICAgIC8vIE5vdywgaWYgd2UncmUgYXQgYSBEaXNwb3NhbE1ldGhvZDo6VW5z
cGVjaWZpZWQgb3IgRGlzcG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSBmcmFtZSwgdGhlbgotICAg
ICAgICAgICAgLy8gd2UgY2FuIHNheSB3ZSBoYXZlIG5vIGFscGhhIGlmIHRoYXQgZnJhbWUgaGFk
IG5vIGFscGhhLiAgQnV0CisgICAgICAgICAgICAvLyB3ZSBjYW4gc2F5IHdlIGhhdmUgbm8gYWxw
aGEgaWYgdGhhdCBmcmFtZSBoYWQgbm8gYWxwaGEuIEJ1dAogICAgICAgICAgICAgLy8gc2luY2Ug
aW4gaW5pdEZyYW1lQnVmZmVyKCkgd2UgYWxyZWFkeSBjb3BpZWQgdGhhdCBmcmFtZSdzIGFscGhh
CiAgICAgICAgICAgICAvLyBzdGF0ZSBpbnRvIHRoZSBjdXJyZW50IGZyYW1lJ3MsIHdlIG5lZWQg
ZG8gbm90aGluZyBhdCBhbGwgaGVyZS4KICAgICAgICAgICAgIC8vCkBAIC0zNTIsNyArMzUyLDcg
QEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgICAgICAvLwog
ICAgICAgICAvLyBGcmFtZXMgdGhhdCB1c2UgdGhlIERpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9Q
cmV2aW91cyBtZXRob2QgYXJlIGVmZmVjdGl2ZWx5CiAgICAgICAgIC8vIG5vLW9wcyBpbiB0ZXJt
cyBvZiBjaGFuZ2luZyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgYSBmcmFtZSBjb21wYXJlZCB0bwot
ICAgICAgICAvLyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBz
a2lwIG92ZXIgdGhlbS4gIChJZiB0aGUKKyAgICAgICAgLy8gdGhlIHN0YXJ0aW5nIHN0YXRlIG9m
IHRoZSBwcmV2aW91cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRoZW0uIChJZiB0aGUKICAgICAgICAg
Ly8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxsIGdldCB0cmVhdGVk
IGxpa2UKICAgICAgICAgLy8gRGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91bmQgYmVs
b3cgYW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCiAgICAgICAgIGNvbnN0
IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRl
eF07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMjA3NDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxs
aW5nIHRoaXMgZnJvbSBpbnNpZGUKICAgICAgICAgLy8gR0lGSW1hZ2VSZWFkZXIhCiAgICAgICAg
IGJvb2wgc2V0RmFpbGVkKCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZl
ckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBk
ZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3JlRnJhbWUpIG92ZXJyaWRlOwogCiAg
ICAgICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgogICAgICAgICBib29sIGhh
dmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiYgcm93QnVmZmVyLCBzaXplX3Qgd2lkdGgsIHNpemVfdCByb3dOdW1iZXIsIHVuc2lnbmVk
IHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MzIsMTQgKzczMiwxNCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aW5pdCgp
CiAgICAgbV9zZXF1ZW5jZU51bWJlciA9IDA7CiB9CiAKLXZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpj
bGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGJlZm9yZUZyYW1lKQog
ewogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBTZWUgR0lGSW1hZ2VEZWNvZGVyIGZvciBmdWxsIGV4cGxhbmF0aW9uLgotICAg
IGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBtX2ZyYW1lQnVm
ZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVy
YXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1lKTsK
KyAgICBiZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGJlZm9yZUZyYW1lLCBtX2ZyYW1lQnVmZmVyQ2Fj
aGUuc2l6ZSgpIC0gMSk7CisgICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBl
bmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBiZWZvcmVGcmFtZSk7CiAKICAgICBWZWN0
b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKICAgICBmb3IgKDsgKGkgIT0gbV9mcmFt
ZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmIChpLT5pc0ludmFsaWQoKSB8fCAoaS0+ZGlzcG9zYWxN
ZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJldmlvdXMp
KTsgLS1pKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcvUE5HSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMjA3NDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VE
ZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIGZyYW1lSGVhZGVyKCk7CiAKICAgICAgICAgdm9pZCBpbml0KCk7
Ci0gICAgICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZy
YW1lKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXpl
X3QgYmVmb3JlRnJhbWUpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICAgICAgYm9vbCBpc0NvbXBs
ZXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIy
MDc1MSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTA4LTE1ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBJbWFnZVNvdXJjZSBmcm9t
IHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRtYXBJbWFnZSB0byBJbWFnZUZy
YW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisKIDIwMTctMDgtMTQgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFByb3hpbWl0eSBFdmVudHMg
YW5kIHJlbGF0ZWQgY29kZQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogI2ltcG9ydCA8QXVkaW9U
b29sYm94L0F1ZGlvU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9EZXZpY2UuaD4KICNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ltYWdlU291
cmNlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRNZXNzYWdlLmg+CiAjZW5kaWYK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318172</attachid>
            <date>2017-08-15 14:12:37 -0700</date>
            <delta_ts>2017-08-15 14:34:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175595-20170815141236.patch</filename>
            <type>text/plain</type>
            <size>82375</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE3LTA4LTE1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRo
ZSBJbWFnZVNvdXJjZSBmcm9tIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRt
YXBJbWFnZSB0byBJbWFnZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgY29ubmVjdHMgQml0bWFwSW1h
Z2UgdG8gSW1hZ2VGcmFtZSBoYXMgYmVlbgorICAgICAgICB0cm91Ymxlc29tZS4gSW1hZ2VTb3Vy
Y2UgZG9lcyBub3QgaGF2ZSBhIGNsZWFyIHJlc3BvbnNpYmlsaXR5IG90aGVyIHRoYW4KKyAgICAg
ICAgYSBicmlkZ2UgdGhhdCBjb25uZWN0cyBCaXRtYXBJYW1nZSB0byBJbWFnZUZyYW1lQ2FjaGUu
IFNoYXJpbmcgdGhlIAorICAgICAgICBJbWFnZURlY29kZXIgYmV0d2VlbiBJbWFnZVNvdXJjZSBh
bmQgSW1hZ2VGcmFtZUNhY2hlIGlzIHVnbHkgYW5kIGNhdXNlZAorICAgICAgICBmZXcgY3Jhc2hl
cyBpbiB0aGUgcGFzdC4KKworICAgICAgICBUaGlzIHBhdGNoIHdpbGwgZG8gdGhlIGZpcnN0IHN0
ZXAgZm9yIGZpeGluZyB0aGlzIGlzc3VlLiBGaXJzdCBnZXQgcmlkIG9mCisgICAgICAgIEltYWdl
U291cmNlIGJ5IG1vdmluZyBpdHMgQVBJcyB0byBJbWFnZUZyYW1lQ2FjaGUgYW5kIEJpdG1hcElt
YWdlLiBSZXBsYWNlCisgICAgICAgIGFsbCB0aGUgaW5zdGFuY2VzIG9mIEltYWdlU291cmNlIGJ5
IEltYWdlRnJhbWVDYWNoZS4gVGhlIG5leHQgc3RlcCB3aWxsCisgICAgICAgIGJlIHRvIHJlbmFt
ZSBJbWFnZUZyYW1lQ2FjaGUgdG8gSW1hZ2VTb3VyY2UuIEJ1dCB0aGlzIHdpbGwgYmUgZG9uZSBp
biBhCisgICAgICAgIGZvbGxvdy11cCBwYXRjaAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6fkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpjYW5Vc2VBc3luY0RlY29kaW5nRm9yTGFyZ2VJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OnNob3VsZFVzZUFzeW5jRGVjb2RpbmdGb3JBbmltYXRlZEltYWdl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3Vic2FtcGxpbmdMZXZl
bEZvclNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYW5EZXN0
cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludGVybmFs
U3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnN0b3BBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmltYWdlRnJhbWVBdmFpbGFi
bGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVDYWNoZTo6SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVD
YWNoZTo6ZW5zdXJlRGVjb2RlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpy
ZXNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpkYXRhQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmlzQWxsRGF0YVJlY2VpdmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6ZGVzdHJveUZyYW1lQnVmZmVy
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjYW5Vc2VBc3luY0Rl
Y29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6bWF4aW11bVN1YnNh
bXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpzZXRUYXJn
ZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpkdW1w
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6c2V0RGVjb2Rlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmRlY29kZXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpyZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6On5J
bWFnZUV4dHJhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OmlzQWxsRGF0YVJlY2VpdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVCdWZmZXJDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVC
dWZmZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmNsZWFyRnJh
bWVCdWZmZXJDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorCiAyMDE3LTA4LTE1ICBDb21taXQgUXVldWUgIDxj
b21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMjE5NTA0LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyMDc0NykKKysr
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMzU0LDcg
KzIzNTQsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VGcmFtZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFNpemUuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZQkocmV2aXNpb24g
MjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDcgKzgxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKIApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIw
NzQ3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00MjIsNyArNDIyLDYgQEAKIAkJMEYxNzc0ODExMzc4Qjc3MjAw
OURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzc0N0YxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFu
aW1hdG9ySU9TLm1tICovOyB9OwogCQkwRjM2RTczNzFCRDE4MzdBMDAyREI4OTEgLyogTGF5b3V0
UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzNkU3MzYxQkQxODM3QTAwMkRCODkxIC8qIExheW91dFBvaW50LmNwcCAqLzsgfTsKIAkJMEYz
NkU3MzkxQkQxODRCOTAwMkRCODkxIC8qIExheW91dFNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNkU3MzgxQkQxODRCOTAwMkRCODkxIC8q
IExheW91dFNpemUuY3BwICovOyB9OwotCQkwRjNDNzI1RTE5NzQ4NzRCMDBBRUREMEMgLyogSW1h
Z2VTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQzcyNUQxOTc0ODc0QjAwQUVERDBDIC8qIEltYWdlU291cmNlLmNwcCAqLzsgfTsKIAkJ
MEYzREQ0NEYxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkw
IC8qIFNoYWRvd0JsdXIuY3BwICovOyB9OwogCQkwRjNERDQ1MDEyRjVFQTFCMDAwRDkxOTAgLyog
U2hhZG93Qmx1ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLzsgfTsKIAkJMEYz
RjBFNTkxNTcwMzBDMzAwNkRBNTdGIC8qIFJlbmRlckdlb21ldHJ5TWFwLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0YwRTU3MTU3MDMwQzMwMDZE
QTU3RiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgKi87IH07CkBAIC01MjA3LDcgKzUyMDYsNiBA
QAogCQlCMjc1MzU2RTBCMDUzODE0MDAyQ0U2NEYgLyogSWNvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDAwQjA1MzgxNDAwMkNFNjRGIC8q
IEljb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCMjc1MzU2RjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDEwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlLmNwcCAqLzsgfTsKIAkJQjI3NTM1NzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MjBC
MDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlCMjc1MzU3MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUz
NTQzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTcyMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbnRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI3NTM1NDQwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzMwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3NTM1NDUwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuY3BwICovOyB9Owog
CQlCMjc1MzU3NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDYwQjA1MzgxNDAwMkNFNjRGIC8q
IEludFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNzgzNCw3ICs3ODMyLDYgQEAKIAkJMEYxNzc0N0YxMzc4Qjc3MjAwOURBNzZBIC8qIFNj
cm9sbEFuaW1hdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU2Nyb2xsQW5pbWF0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MzZFNzM2MUJEMTgzN0EwMDJEQjg5MSAvKiBMYXlvdXRQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzZFNzM4MUJEMTg0QjkwMDJEQjg5MSAvKiBMYXlvdXRTaXplLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFNpemUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNDNzI1RDE5NzQ4NzRCMDBBRUREMEMgLyogSW1h
Z2VTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VT
b3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNERDQ0RDEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaGFkb3dCbHVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
REQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2hhZG93Qmx1ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjNGMEU1NzE1NzAzMEMzMDA2REE1N0YgLyogUmVuZGVyR2VvbWV0cnlNYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyR2VvbWV0cnlNYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0ODQsOCArMTI0ODEsOCBAQAogCQk5QjA5
OEJERTFGM0Q2NzNEMDAyREQ1NjIgLyogSlNEYXRhVHJhbnNmZXJJdGVtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVRyYW5zZmVySXRlbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5QjA5OEJERjFGM0Q2NzNEMDAyREQ1NjIgLyogSlNEYXRhVHJhbnNm
ZXJJdGVtTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rh
dGFUcmFuc2Zlckl0ZW1MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIw
OThCRTAxRjNENjczRDAwMkRENTYyIC8qIEpTRGF0YVRyYW5zZmVySXRlbUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVHJhbnNmZXJJdGVtTGlzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5QjA5OEJFNjFGM0Q2QUY2MDAyREQ1NjIgLyogSlNT
dHJpbmdDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1N0cmluZ0NhbGxiYWNrLmNwcDsgcGF0aCA9IEpTU3RyaW5nQ2FsbGJhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5QjA5OEJFNzFGM0Q2QUY2MDAyREQ1NjIgLyogSlNTdHJp
bmdDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1N0cmluZ0Nh
bGxiYWNrLmg7IHBhdGggPSBKU1N0cmluZ0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTlCMDk4QkU2MUYzRDZBRjYwMDJERDU2MiAvKiBKU1N0cmluZ0NhbGxiYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nQ2FsbGJhY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjA5OEJFNzFGM0Q2QUY2MDAyREQ1
NjIgLyogSlNTdHJpbmdDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1N0cmluZ0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMEZF
ODczMUQ5RTAyREYwMDRBOEFDQiAvKiBEb2N1bWVudE9yU2hhZG93Um9vdC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gRG9jdW1lbnRPclNoYWRvd1Jvb3QuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5QjEzMjU3QjFGM0QyQUJBMDBEQUFCNjkgLyogRGF0YVRyYW5zZmVySXRl
bUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YVRyYW5z
ZmVySXRlbUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjE5QjY3RTFC
OTY0RTUyMDAzNDg3NDUgLyogU2hhZG93Um9vdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
U2hhZG93Um9vdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzY5MSw3ICsx
MzY4OCw2IEBACiAJCUIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyNzUzNTQxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMjc1MzU0MjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyNzUzNTQzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDQwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMjc1MzU0NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50UmVjdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ2MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRS
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRSZWN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzI5NSw4ICsyMzI5MSw2IEBACiAJCQkJQTg3NDhE
NzQxMkNDM0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uY3BwICovLAogCQkJCUE4NzQ4
RDY2MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggKi8sCiAJCQkJNDkyOTFF
NEExMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5oICovLAotCQkJCTBGM0M3
MjVEMTk3NDg3NEIwMEFFREQwQyAvKiBJbWFnZVNvdXJjZS5jcHAgKi8sCi0JCQkJQjI3NTM1NDMw
QjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmggKi8sCiAJCQkJNTU1MENCNDExRTk1NUUz
QzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCAqLywKIAkJCQkwNzk0MTc5MzE2NkVBMDRFMDA5NDE2
QzIgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oICovLAogCQkJCTA3Q0U3N0Q0MTY3MTJBNkEw
MEM1NUE0NyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0yNzczNiw3
ICsyNzczMCw2IEBACiAJCQkJMkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUI1MUEyRjNGMTdEN0QzQUUwMDcyNTE3QSAvKiBJ
bWFnZVF1YWxpdHlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTI5MUU0QjEzNDE3
MkM4MDBFNzUzREUgLyogSW1hZ2VSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQlC
Mjc1MzU3MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NTUwQ0I0MjFFOTU1RTNDMDAxMTFBQTAgLyogSW1hZ2VUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yOTQ2OCwyMyArMjk0NjEsMTUgQEAKIAkJCQk1MTZGN0Y2RDFD
MzFFMzlBMDBGMTExREMgLyogU2VydmVyT3BlbkRCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkQ5M0FFRTMxOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjE3NTVEMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNl
V29ya2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTgyQzIzRjFGMzEzQTA5MDA1OUJBN0MgLyog
U2VydmljZVdvcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMTc1NUYxRjNFQkM4MzAwQzc0
OTUwIC8qIFNlcnZpY2VXb3JrZXJDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxODJD
MjQxMUYzMTNBMDkwMDU5QkE3QyAvKiBTZXJ2aWNlV29ya2VyQ29udGFpbmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUYxNzU2MTFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTgyQzI0MzFGMzEzQTA5MDA1OUJBN0MgLyog
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU2MzFG
M0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlckpvYi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTExQ0E2N0UxRjM5MDVBNjAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJKb2IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxRjE3NTY0MUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VySm9iQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTFDQTY4MDFGMzkzMzFGMDAxOUUwNzQgLyogU2Vy
dmljZVdvcmtlckpvYkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTExQ0E2N0ExRjM5MDRC
MTAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTFGMTc1NjYxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJQcm92aWRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTFGMTc1NjgxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxODJDMjQ1MUYzMTNBMDkwMDU5QkE3
QyAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYx
NzU2OTFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9wdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjE3NTZCMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMTc1
NkMxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJVcGRhdGVWaWFDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNTFGMTc0RkYxRjM1ODk5NzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJV
cGRhdGVWaWFDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzU2QjJDRTExOEI3MTAxNjAwRkVD
RkFBIC8qIFNlc3Npb25JRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTAwOTlFNjQ5MjAw
NTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
OERCREI0QzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMTcyNCw3ICszMTcwOSw2IEBACiAJCQkJQjI3NTM1N0IwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ1QTU5MkYxNTI1MjUyMzAw
MzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjUxQTJG
NDExN0Q3RDVERTAwNzI1MTdBIC8qIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMEYzQzcyNUUxOTc0ODc0QjAwQUVERDBDIC8qIEltYWdlU291cmNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTRCMzQ4MDkzMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJj
ZUNHTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2RkUxMTcwRTZFMURBNzAwQkY2MDg4IC8q
IEltcGxpY2l0QW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFOTYxQzU0MThBRDMz
ODUwMEQwN0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MzMzMzQsMTkgKzMzMzE4LDEyIEBACiAJCQkJNTE2RjdGNkUxQzMxRTM5QzAwRjExMURDIC8qIFNl
cnZlck9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5M0FFRTQxOURGNTY0
MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MUYxNzU1QzFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk1MTgyQzIzRTFGMzEzQTA5MDA1OUJBN0MgLyogU2VydmljZVdvcmtlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzU1RTFGM0VCQzgzMDBDNzQ5NTAgLyogU2Vydmlj
ZVdvcmtlckNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTgyQzI0MDFGMzEzQTA5
MDA1OUJBN0MgLyogU2VydmljZVdvcmtlckNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTgyQzI0MjFGMzEzQTA5MDA1OUJBN0MgLyogU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTYwMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1NjIxRjNFQkM4
MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJKb2IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEx
Q0E2N0QxRjM5MDVBNjAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJKb2IuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJNTExQ0E2NzkxRjM5MDRCMTAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzU2NTFGM0VCQzgzMDBDNzQ5NTAgLyogU2Vy
dmljZVdvcmtlclByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTY3MUYzRUJD
ODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTUxODJDMjQ0MUYzMTNBMDkwMDU5QkE3QyAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTZBMUYzRUJDODMwMEM3NDk1MCAvKiBT
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTFDQTY4MzFGM0EzQ0Q5MDAxOUUwNzQgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvblBh
cmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjdENDQxRUIxQzM5MTAwRTQ3Qjgz
IC8qIFNlc3Npb25JRC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUwRjA5OUU2NDkyMDA1
NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjhEQkRCNEIxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEzICs0
NCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShJ
bWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9z
b3VyY2UodGhpcykKKyAgICAsIG1fc291cmNlKEltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlKHRoaXMp
KQogewogfQogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHImJiBpbWFn
ZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKLSAgICAs
IG1fc291cmNlKFdURk1vdmUoaW1hZ2UpKQorICAgICwgbV9zb3VyY2UoSW1hZ2VGcmFtZUNhY2hl
OjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpKQogewogfQogCkBAIC01OCw4ICs1OCw4IEBAIEJpdG1h
cEltYWdlOjp+Qml0bWFwSW1hZ2UoKQogewogICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEoKTsK
ICAgICBjbGVhclRpbWVyKCk7Ci0gICAgbV9zb3VyY2UuY2xlYXJJbWFnZSgpOwotICAgIG1fc291
cmNlLnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKKyAgICBtX3NvdXJjZS0+Y2xlYXJJbWFnZSgp
OworICAgIG1fc291cmNlLT5zdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCk7CiB9CiAKIHZvaWQgQml0
bWFwSW1hZ2U6OnVwZGF0ZUZyb21TZXR0aW5ncyhjb25zdCBTZXR0aW5ncyYgc2V0dGluZ3MpCkBA
IC03NCwyMCArNzQsMjIgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJv
bwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMiLCBfX0ZV
TkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAg
ICAgaWYgKCFkZXN0cm95QWxsKQotICAgICAgICBtX3NvdXJjZS5kZXN0cm95RGVjb2RlZERhdGFC
ZWZvcmVGcmFtZShtX2N1cnJlbnRGcmFtZSk7CisgICAgICAgIG1fc291cmNlLT5kZXN0cm95RGVj
b2RlZERhdGFCZWZvcmVGcmFtZShtX2N1cnJlbnRGcmFtZSk7CiAgICAgZWxzZSBpZiAoIWNhbkRl
c3Ryb3lEZWNvZGVkRGF0YSgpKQotICAgICAgICBtX3NvdXJjZS5kZXN0cm95QWxsRGVjb2RlZERh
dGFFeGNsdWRlRnJhbWUobV9jdXJyZW50RnJhbWUpOworICAgICAgICBtX3NvdXJjZS0+ZGVzdHJv
eUFsbERlY29kZWREYXRhRXhjbHVkZUZyYW1lKG1fY3VycmVudEZyYW1lKTsKICAgICBlbHNlIHsK
LSAgICAgICAgbV9zb3VyY2UuZGVzdHJveUFsbERlY29kZWREYXRhKCk7CisgICAgICAgIG1fc291
cmNlLT5kZXN0cm95QWxsRGVjb2RlZERhdGEoKTsKICAgICAgICAgbV9jdXJyZW50RnJhbWVEZWNv
ZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkOwogICAgIH0KIAogICAgIC8vIFRo
ZXJlJ3Mgbm8gbmVlZCB0byB0aHJvdyBhd2F5IHRoZSBkZWNvZGVyIHVubGVzcyB3ZSdyZSBleHBs
aWNpdGx5IGFza2VkCiAgICAgLy8gdG8gZGVzdHJveSBhbGwgb2YgdGhlIGZyYW1lcy4KLSAgICBp
ZiAoIWRlc3Ryb3lBbGwgfHwgbV9zb3VyY2UuaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkpCi0gICAg
ICAgIG1fc291cmNlLmNsZWFyRnJhbWVCdWZmZXJDYWNoZShtX2N1cnJlbnRGcmFtZSk7CisgICAg
aWYgKGRlc3Ryb3lBbGwgJiYgIW1fc291cmNlLT5oYXNBc3luY0RlY29kaW5nUXVldWUoKSkKKyAg
ICAgICAgbV9zb3VyY2UtPnJlc2V0RGF0YShkYXRhKCkpOworI2lmICFVU0UoQ0cpCiAgICAgZWxz
ZQotICAgICAgICBtX3NvdXJjZS5yZXNldERhdGEoZGF0YSgpKTsKKyAgICAgICAgbV9zb3VyY2Ut
PmRlc3Ryb3lGcmFtZUJ1ZmZlckNhY2hlKG1fY3VycmVudEZyYW1lKTsKKyNlbmRpZgogCiAgICAg
aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwogfQpAQCAtOTksNyArMTAxLDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZQogICAgIGlmICghZGF0YSgpICYmIGZyYW1l
Q291bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc291cmNlLmRlY29kZWRTaXpl
KCkgPCBMYXJnZUFuaW1hdGlvbkN1dG9mZikKKyAgICBpZiAobV9zb3VyY2UtPmRlY29kZWRTaXpl
KCkgPCBMYXJnZUFuaW1hdGlvbkN1dG9mZikKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGVzdHJv
eURlY29kZWREYXRhKGRlc3Ryb3lBbGwpOwpAQCAtMTA3LDExICsxMDksMTEgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZQogCiBFbmNvZGVkRGF0YVN0YXR1cyBCaXRt
YXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAgaWYgKG1f
c291cmNlLmRlY29kZWRTaXplKCkgJiYgIWNhblVzZUFzeW5jRGVjb2RpbmdGb3JMYXJnZUltYWdl
cygpKQotICAgICAgICBtX3NvdXJjZS5kZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7Cisg
ICAgaWYgKG1fc291cmNlLT5kZWNvZGVkU2l6ZSgpICYmICFjYW5Vc2VBc3luY0RlY29kaW5nRm9y
TGFyZ2VJbWFnZXMoKSkKKyAgICAgICAgbV9zb3VyY2UtPmRlc3Ryb3lJbmNvbXBsZXRlRGVjb2Rl
ZERhdGEoKTsKIAogICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBEZWNvZGluZ1N0
YXR1czo6SW52YWxpZDsKLSAgICByZXR1cm4gbV9zb3VyY2UuZGF0YUNoYW5nZWQoZGF0YSgpLCBh
bGxEYXRhUmVjZWl2ZWQpOworICAgIHJldHVybiBtX3NvdXJjZS0+ZGF0YUNoYW5nZWQoZGF0YSgp
LCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogICAgIAogdm9pZCBCaXRtYXBJbWFnZTo6c2V0Q3VycmVu
dEZyYW1lRGVjb2RpbmdTdGF0dXNJZk5lY2Vzc2FyeShEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0
YXR1cykKQEAgLTEzMCw4ICsxMzIsMTIgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZy
YW1lSW1hZ2VBdAogICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1
cmw6ICVzIFtzdWJzYW1wbGluZ0xldmVsIHdhcyAlZCwgcmVzYW1wbGluZ10iLCBfX0ZVTkNUSU9O
X18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0
PGludD4oZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChpbmRleCkpKTsKICAgICAgICAgaW52
YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwogICAgIH0KLQotICAgIHJldHVybiBtX3NvdXJjZS5mcmFt
ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIHRhcmdl
dENvbnRleHQpOworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBtX3NvdXJjZS0+c2V0VGFyZ2V0Q29u
dGV4dCh0YXJnZXRDb250ZXh0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRl
eHQpOworI2VuZGlmCisgICAgcmV0dXJuIG1fc291cmNlLT5mcmFtZUltYWdlQXRJbmRleENhY2hl
SWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwogfQogCiBOYXRpdmVJbWFnZVB0ciBC
aXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250
ZXh0KQpAQCAtMTg5LDcgKzE5NSw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGkKICAgICBJbnRTaXplIHNpemVGb3JEcmF3aW5nID0gZXhwYW5kZWRJbnRTaXplKHNp
emUoKSAqIHNjYWxlRmFjdG9yRm9yRHJhd2luZyk7CiAgICAgSW1hZ2VEcmF3UmVzdWx0IHJlc3Vs
dCA9IEltYWdlRHJhd1Jlc3VsdDo6RGlkRHJhdzsKIAotICAgIG1fY3VycmVudFN1YnNhbXBsaW5n
TGV2ZWwgPSBtX2FsbG93U3Vic2FtcGxpbmcgPyBtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9y
U2NhbGVGYWN0b3IoY29udGV4dCwgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKSA6IFN1YnNhbXBsaW5n
TGV2ZWw6OkRlZmF1bHQ7CisgICAgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCA9IG1fYWxsb3dT
dWJzYW1wbGluZyA/IHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3Rvcihjb250ZXh0LCBzY2Fs
ZUZhY3RvckZvckRyYXdpbmcpIDogU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKICAgICBMT0co
SW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtzdWJzYW1wbGluZ0xldmVs
ID0gJWQgc2NhbGVGYWN0b3JGb3JEcmF3aW5nID0gKCUuNGYsICUuNGYpXSIsIF9fRlVOQ1RJT05f
XywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8
aW50PihtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsKSwgc2NhbGVGYWN0b3JGb3JEcmF3aW5nLndp
ZHRoKCksIHNjYWxlRmFjdG9yRm9yRHJhd2luZy5oZWlnaHQoKSk7CiAKICAgICBOYXRpdmVJbWFn
ZVB0ciBpbWFnZTsKQEAgLTIwNCw3ICsyMTAsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpCiAgICAgICAgIC8vIGl0IGlzIGN1cnJlbnRseSBiZWluZyBkZWNvZGVk
LiBOZXcgZGF0YSBtYXkgaGF2ZSBiZWVuIHJlY2VpdmVkIHNpbmNlIHRoZSBwcmV2aW91cyByZXF1
ZXN0IHdhcyBtYWRlLgogICAgICAgICBpZiAoKCFmcmFtZUlzQ29tcGF0aWJsZSAmJiAhZnJhbWVJ
c0JlaW5nRGVjb2RlZCkgfHwgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9PSBEZWNvZGlu
Z1N0YXR1czo6SW52YWxpZCkgewogICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdl
OjolcyAtICVwIC0gdXJsOiAlcyBbcmVxdWVzdGluZyBsYXJnZSBhc3luYyBkZWNvZGluZ10iLCBf
X0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgbV9zb3VyY2UucmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgobV9j
dXJyZW50RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwsIHNpemVGb3JEcmF3aW5nKTsK
KyAgICAgICAgICAgIG1fc291cmNlLT5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleCht
X2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgc2l6ZUZvckRyYXdpbmcp
OwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3Rh
dHVzOjpEZWNvZGluZzsKICAgICAgICAgfQogCkBAIC0yMzEsNyArMjM3LDcgQEAgSW1hZ2VEcmF3
UmVzdWx0IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaQogICAgICAgICAvLyBJZiB0aGUgZGVjb2Rp
bmdNb2RlIGNoYW5nZXMgZnJvbSBhc3luY2hyb25vdXMgdG8gc3luY2hyb25vdXMgYW5kIG5ldyBk
YXRhIGlzIHJlY2VpdmVkLAogICAgICAgICAvLyB0aGUgY3VycmVudCBpbmNvbXBsZXRlIGRlY29k
ZWQgZnJhbWUgaGFzIHRvIGJlIGRlc3Ryb3llZC4KICAgICAgICAgaWYgKG1fY3VycmVudEZyYW1l
RGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkludmFsaWQpCi0gICAgICAgICAgICBt
X3NvdXJjZS5kZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7CisgICAgICAgICAgICBtX3Nv
dXJjZS0+ZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBmcmFtZUlzQ29tcGF0aWJsZSA9IGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0
aWJsZVdpdGhPcHRpb25zQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxp
bmdMZXZlbCwgRGVjb2RpbmdPcHRpb25zKHNpemVGb3JEcmF3aW5nKSk7CiAgICAgICAgIGJvb2wg
ZnJhbWVJc0JlaW5nRGVjb2RlZCA9IGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVX
aXRoT3B0aW9uc0F0SW5kZXgobV9jdXJyZW50RnJhbWUsIERlY29kaW5nTW9kZTo6QXN5bmNocm9u
b3VzKTsKQEAgLTMyNCwxMiArMzMwLDEyIEBAIGJvb2wgQml0bWFwSW1hZ2U6OmNhbkFuaW1hdGUo
KSBjb25zdAogCiBib29sIEJpdG1hcEltYWdlOjpjYW5Vc2VBc3luY0RlY29kaW5nRm9yTGFyZ2VJ
bWFnZXMoKSBjb25zdAogewotICAgIHJldHVybiAhY2FuQW5pbWF0ZSgpICYmIG1fc291cmNlLmNh
blVzZUFzeW5jRGVjb2RpbmcoKTsKKyAgICByZXR1cm4gIWNhbkFuaW1hdGUoKSAmJiBtX3NvdXJj
ZS0+Y2FuVXNlQXN5bmNEZWNvZGluZygpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpzaG91bGRV
c2VBc3luY0RlY29kaW5nRm9yQW5pbWF0ZWRJbWFnZXMoKSBjb25zdAogewotICAgIHJldHVybiBj
YW5BbmltYXRlKCkgJiYgbV9hbGxvd0FuaW1hdGVkSW1hZ2VBc3luY0RlY29kaW5nICYmIChzaG91
bGRVc2VBc3luY0RlY29kaW5nRm9yQW5pbWF0ZWRJbWFnZXNGb3JUZXN0aW5nKCkgfHwgbV9zb3Vy
Y2UuY2FuVXNlQXN5bmNEZWNvZGluZygpKTsKKyAgICByZXR1cm4gY2FuQW5pbWF0ZSgpICYmIG1f
YWxsb3dBbmltYXRlZEltYWdlQXN5bmNEZWNvZGluZyAmJiAoc2hvdWxkVXNlQXN5bmNEZWNvZGlu
Z0ZvckFuaW1hdGVkSW1hZ2VzRm9yVGVzdGluZygpIHx8IG1fc291cmNlLT5jYW5Vc2VBc3luY0Rl
Y29kaW5nKCkpOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpjbGVhclRpbWVyKCkKQEAgLTM0NCwx
MCArMzUwLDMwIEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIoU2Vjb25kcyBkZWwKICAg
ICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChkZWxheSk7CiB9CiAKK1N1YnNhbXBsaW5nTGV2
ZWwgQml0bWFwSW1hZ2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3IpCit7CisjaWYgVVNF
KENHKQorICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRv
IFBERiBjb250ZXh0cy4KKyAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSkpCisgICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZh
dWx0OworCisgICAgZmxvYXQgc2NhbGUgPSBzdGQ6Om1pbihmbG9hdCgxKSwgc3RkOjptYXgoc2Nh
bGVGYWN0b3Iud2lkdGgoKSwgc2NhbGVGYWN0b3IuaGVpZ2h0KCkpKTsKKyAgICBpZiAoIShzY2Fs
ZSA+IDAgJiYgc2NhbGUgPD0gMSkpCisgICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0OworCisgICAgaW50IHJlc3VsdCA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIoMSAvIHNjYWxl
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN1YnNhbXBsaW5nTGV2ZWw+KHN0ZDo6bWluKHJl
c3VsdCwgc3RhdGljX2Nhc3Q8aW50PihtX3NvdXJjZS0+bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwo
KSkpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFVOVVNFRF9QQVJB
TShzY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7Cisj
ZW5kaWYKK30KKwogYm9vbCBCaXRtYXBJbWFnZTo6Y2FuRGVzdHJveURlY29kZWREYXRhKCkKIHsK
ICAgICAvLyBBbmltYXRlZCBpbWFnZXMgc2hvdWxkIHByZXNlcnZlIHRoZSBjdXJyZW50IGZyYW1l
IHRpbGwgdGhlIG5leHQgb25lIGZpbmlzaGVzIGRlY29kaW5nLgotICAgIGlmIChtX3NvdXJjZS5o
YXNBc3luY0RlY29kaW5nUXVldWUoKSkKKyAgICBpZiAobV9zb3VyY2UtPmhhc0FzeW5jRGVjb2Rp
bmdRdWV1ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTbWFsbCBpbWFnZSBz
aG91bGQgYmUgZGVjb2RlZCBzeW5jaHJvbm91c2x5LiBEZWxldGluZyBpdHMgZGVjb2RlZCBmcmFt
ZSBpcyBmaW5lLgpAQCAtMzc3LDcgKzQwMyw3IEBAIEJpdG1hcEltYWdlOjpTdGFydEFuaW1hdGlv
blN0YXR1cyBCaXRtYXAKICAgICAgICAgLy8geWV0IGFuZCBvdXIgcmVwZXRpdGlvbiBjb3VudCBp
cyBwb3RlbnRpYWxseSB1bnNldC4gVGhlIHJlcGV0aXRpb24gY291bnQKICAgICAgICAgLy8gaW4g
YSBHSUYgY2FuIHBvdGVudGlhbGx5IGNvbWUgYWZ0ZXIgYWxsIHRoZSByZXN0IG9mIHRoZSBpbWFn
ZSBkYXRhLCBzbwogICAgICAgICAvLyB3YWl0IG9uIGl0LgotICAgICAgICBpZiAoIW1fc291cmNl
LmlzQWxsRGF0YVJlY2VpdmVkKCkgJiYgcmVwZXRpdGlvbkNvdW50KCkgPT0gUmVwZXRpdGlvbkNv
dW50T25jZSkKKyAgICAgICAgaWYgKCFtX3NvdXJjZS0+aXNBbGxEYXRhUmVjZWl2ZWQoKSAmJiBy
ZXBldGl0aW9uQ291bnQoKSA9PSBSZXBldGl0aW9uQ291bnRPbmNlKQogICAgICAgICAgICAgcmV0
dXJuIFN0YXJ0QW5pbWF0aW9uU3RhdHVzOjpJbmNvbXBsZXRlRGF0YTsKIAogICAgICAgICArK21f
cmVwZXRpdGlvbnNDb21wbGV0ZTsKQEAgLTM5Myw3ICs0MTksNyBAQCBCaXRtYXBJbWFnZTo6U3Rh
cnRBbmltYXRpb25TdGF0dXMgQml0bWFwCiAgICAgfQogCiAgICAgLy8gRG9uJ3QgYWR2YW5jZSB0
aGUgYW5pbWF0aW9uIHRvIGFuIGluY29tcGxldGUgZnJhbWUuCi0gICAgaWYgKCFtX3NvdXJjZS5p
c0FsbERhdGFSZWNlaXZlZCgpICYmICFmcmFtZUlzQ29tcGxldGVBdEluZGV4KG5leHRGcmFtZSkp
CisgICAgaWYgKCFtX3NvdXJjZS0+aXNBbGxEYXRhUmVjZWl2ZWQoKSAmJiAhZnJhbWVJc0NvbXBs
ZXRlQXRJbmRleChuZXh0RnJhbWUpKQogICAgICAgICByZXR1cm4gU3RhcnRBbmltYXRpb25TdGF0
dXM6OkluY29tcGxldGVEYXRhOwogCiAgICAgTW9ub3RvbmljVGltZSB0aW1lID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CkBAIC00MTMsMTQgKzQzOSwxNCBAQCBCaXRtYXBJbWFnZTo6U3RhcnRBbmlt
YXRpb25TdGF0dXMgQml0bWFwCiAgICAgICAgIGlmIChmcmFtZUhhc0RlY29kZWROYXRpdmVJbWFn
ZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgobmV4dEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1w
bGluZ0xldmVsLCB7IH0pKQogICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjol
cyAtICVwIC0gdXJsOiAlcyBbY2FjaGVkRnJhbWVDb3VudCA9ICVsZCBuZXh0RnJhbWUgPSAlbGRd
IiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCArK21fY2FjaGVkRnJhbWVDb3VudCwgbmV4dEZyYW1lKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBtX3NvdXJjZS5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChuZXh0RnJh
bWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwpOworICAgICAgICAgICAgbV9zb3VyY2UtPnJl
cXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KG5leHRGcmFtZSwgbV9jdXJyZW50U3Vic2Ft
cGxpbmdMZXZlbCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID0g
RGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nOwogICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1h
cEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBbcmVxdWVzdGluZyBhc3luYyBkZWNvZGluZyBmb3Ig
bmV4dEZyYW1lID0gJWxkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgbmV4dEZyYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZGVz
aXJlZEZyYW1lRGVjb2RlVGltZUZvclRlc3RpbmcgPSB0aW1lICsgc3RkOjptYXgobV9mcmFtZURl
Y29kaW5nRHVyYXRpb25Gb3JUZXN0aW5nLCAwX3MpOwogICAgICAgICBpZiAobV9jbGVhckRlY29k
ZXJBZnRlckFzeW5jRnJhbWVSZXF1ZXN0Rm9yVGVzdGluZykKLSAgICAgICAgICAgIG1fc291cmNl
LnJlc2V0RGF0YShkYXRhKCkpOworICAgICAgICAgICAgbV9zb3VyY2UtPnJlc2V0RGF0YShkYXRh
KCkpOwogICAgIH0KIAogICAgIEFTU0VSVCghbV9mcmFtZVRpbWVyKTsKQEAgLTQ4Miw3ICs1MDgs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjpzdG9wQW5pbWF0aW9uKCkKICAgICAvLyB0aGUgdGltZXIg
dW5sZXNzIGFsbCByZW5kZXJlcnMgaGF2ZSBzdG9wcGVkIGRyYXdpbmcuCiAgICAgY2xlYXJUaW1l
cigpOwogICAgIGlmIChjYW5BbmltYXRlKCkpCi0gICAgICAgIG1fc291cmNlLnN0b3BBc3luY0Rl
Y29kaW5nUXVldWUoKTsKKyAgICAgICAgbV9zb3VyY2UtPnN0b3BBc3luY0RlY29kaW5nUXVldWUo
KTsKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6cmVzZXRBbmltYXRpb24oKQpAQCAtNTE5LDggKzU0
NSw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmltYWdlRnJhbWVBdmFpbGFibGVBdEkKICAgICB9CiAK
ICAgICBBU1NFUlQoaW5kZXggPT0gbV9jdXJyZW50RnJhbWUgJiYgIW1fY3VycmVudEZyYW1lKTsK
LSAgICBpZiAobV9zb3VyY2UuaXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCkpCi0gICAgICAgIG1f
c291cmNlLnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKKyAgICBpZiAobV9zb3VyY2UtPmlzQXN5
bmNEZWNvZGluZ1F1ZXVlSWRsZSgpKQorICAgICAgICBtX3NvdXJjZS0+c3RvcEFzeW5jRGVjb2Rp
bmdRdWV1ZSgpOwogCiAgICAgRGVjb2RpbmdTdGF0dXMgZGVjb2RpbmdTdGF0dXMgPSBmcmFtZURl
Y29kaW5nU3RhdHVzQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgc2V0Q3VycmVudEZyYW1l
RGVjb2RpbmdTdGF0dXNJZk5lY2Vzc2FyeShkZWNvZGluZ1N0YXR1cyk7CkBAIC01NDQsNyArNTcw
LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgYwogICAgIGlmIChp
c0FuaW1hdGVkKCkpCiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3VycmVudC1mcmFtZSIsIG1f
Y3VycmVudEZyYW1lKTsKICAgICAKLSAgICBtX3NvdXJjZS5kdW1wKHRzKTsKKyAgICBtX3NvdXJj
ZS0+ZHVtcCh0cyk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
OSArMjksOSBAQAogCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2lu
Y2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCiAKICNpZiBVU0UoQ0cpIHx8IFVTRShBUFBLSVQpCkBAIC03MSwz
MSArNzEsMzEgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBFbmNvZGVkRGF0YVN0YXR1cyBk
YXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkgb3ZlcnJpZGU7Ci0gICAgdW5zaWduZWQg
ZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5kZWNvZGVkU2l6ZSgpOyB9Cisg
ICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZGVjb2Rl
ZFNpemUoKTsgfQogCi0gICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZS5lbmNvZGVkRGF0YVN0YXR1cygpOyB9Ci0gICAgc2l6ZV90
IGZyYW1lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUNvdW50KCk7IH0KLSAg
ICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2UucmVwZXRpdGlvbkNvdW50KCk7IH0KLSAgICBTdHJpbmcgdXRpKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9zb3VyY2UudXRpKCk7IH0KLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS5maWxlbmFtZUV4dGVuc2lvbigpOyB9
Ci0gICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3BvdCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fc291cmNlLmhvdFNwb3QoKTsgfQorICAgIEVuY29kZWREYXRhU3RhdHVzIGVuY29k
ZWREYXRhU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmVuY29kZWREYXRhU3RhdHVz
KCk7IH0KKyAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5m
cmFtZUNvdW50KCk7IH0KKyAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlvbkNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2UtPnJlcGV0aXRpb25Db3VudCgpOyB9CisgICAgU3RyaW5nIHV0
aSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT51dGkoKTsgfQorICAgIFN0cmlu
ZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT5m
aWxlbmFtZUV4dGVuc2lvbigpOyB9CisgICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3Bv
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT5ob3RTcG90KCk7IH0KIAogICAg
IC8vIEZsb2F0U2l6ZSBkdWUgdG8gb3ZlcnJpZGUuCi0gICAgRmxvYXRTaXplIHNpemUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS5zaXplKCk7IH0KLSAgICBJbnRTaXplIHNpemVS
ZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5zaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uKCk7IH0KLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS5zaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsg
fQotICAgIGJvb2wgZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25z
QXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRp
b25zKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21w
YXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBkZWNvZGluZ09wdGlvbnMpOyB9Ci0gICAg
RGVjb2RpbmdTdGF0dXMgZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChpbmRleCk7
IH0KKyAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNl
LT5zaXplKCk7IH0KKyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZS0+c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOyB9CisgICAg
Q29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9z
b3VyY2UtPnNpbmdsZVBpeGVsU29saWRDb2xvcigpOyB9CisgICAgYm9vbCBmcmFtZUlzQmVpbmdE
ZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCBpbmRleCwgY29u
c3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlLT5mcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4
KGluZGV4LCBkZWNvZGluZ09wdGlvbnMpOyB9CisgICAgRGVjb2RpbmdTdGF0dXMgZnJhbWVEZWNv
ZGluZ1N0YXR1c0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+
ZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoaW5kZXgpOyB9CiAgICAgYm9vbCBmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gZnJhbWVEZWNvZGluZ1N0
YXR1c0F0SW5kZXgoaW5kZXgpID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsgfQotICAgIGJv
b2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7IH0KKyAgICBib29sIGZyYW1lSGFzQWxw
aGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSGFz
QWxwaGFBdEluZGV4KGluZGV4KTsgfQogCi0gICAgYm9vbCBmcmFtZUhhc0Z1bGxTaXplTmF0aXZl
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsKSB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1hZ2VBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQotICAgIGJvb2wgZnJhbWVIYXNEZWNvZGVkTmF0
aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCBpbmRleCwgY29uc3Qg
c3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3Qg
RGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIHsgcmV0dXJuIG1fc291cmNlLmZyYW1l
SGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChpbmRleCwg
c3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRpb25zKTsgfQorICAgIGJvb2wgZnJhbWVIYXNG
dWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwg
c3Vic2FtcGxpbmdMZXZlbCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSGFzRnVsbFNpemVOYXRp
dmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9CisgICAgYm9vbCBmcmFt
ZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90
IGluZGV4LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGlu
Z0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgeyByZXR1cm4g
bV9zb3VyY2UtPmZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25z
QXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRpb25zKTsgfQogCi0g
ICAgU3Vic2FtcGxpbmdMZXZlbCBmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRl
eChpbmRleCk7IH0KKyAgICBTdWJzYW1wbGluZ0xldmVsIGZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVTdWJzYW1w
bGluZ0xldmVsQXRJbmRleChpbmRleCk7IH0KIAotICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdElu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVEdXJhdGlvbkF0
SW5kZXgoaW5kZXgpOyB9Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmZyYW1lT3JpZW50YXRp
b25BdEluZGV4KGluZGV4KTsgfQorICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lRHVyYXRpb25BdEluZGV4KGlu
ZGV4KTsgfQorICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgoaW5kZXgpOyB9CiAKICAgICBzaXplX3QgY3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50RnJhbWU7IH0KICAgICBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFmcmFtZUhhc0FscGhhQXRJbmRleChjdXJyZW50RnJh
bWUoKSk7IH0KQEAgLTE0Miw3ICsxNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9FWFBP
UlQgQml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHImJiwgSW1hZ2VPYnNlcnZlciogPSBudWxscHRy
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiA9IG51bGxw
dHIpOwogCi0gICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUltYWdlQXRJbmRleChpbmRleCk7IH0KKyAgICBOYXRp
dmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fc291
cmNlLT5mcmFtZUltYWdlQXRJbmRleChpbmRleCk7IH0KICAgICBOYXRpdmVJbWFnZVB0ciBmcmFt
ZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vi
c2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIp
OwogCiAgICAgLy8gQ2FsbGVkIHRvIGludmFsaWRhdGUgY2FjaGVkIGRhdGEuIFdoZW4gfGRlc3Ry
b3lBbGx8IGlzIHRydWUsIHdlIHdpcGUgb3V0CkBAIC0xNjUsNyArMTY1LDcgQEAgcHJvdGVjdGVk
OgogCiAgICAgLy8gQW5pbWF0aW9uLgogICAgIGVudW0gY2xhc3MgU3RhcnRBbmltYXRpb25TdGF0
dXMgeyBDYW5ub3RTdGFydCwgSW5jb21wbGV0ZURhdGEsIFRpbWVyQWN0aXZlLCBEZWNvZGluZ0Fj
dGl2ZSwgU3RhcnRlZCB9OwotICAgIGJvb2wgaXNBbmltYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fc291cmNlLmZyYW1lQ291bnQoKSA+IDE7IH0KKyAgICBib29sIGlzQW5pbWF0ZWQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVDb3VudCgpID4gMTsgfQog
ICAgIGJvb2wgc2hvdWxkQW5pbWF0ZSgpIGNvbnN0OwogICAgIHZvaWQgc3RhcnRBbmltYXRpb24o
KSBvdmVycmlkZSB7IGludGVybmFsU3RhcnRBbmltYXRpb24oKTsgfQogICAgIFN0YXJ0QW5pbWF0
aW9uU3RhdHVzIGludGVybmFsU3RhcnRBbmltYXRpb24oKTsKQEAgLTE5NCw2ICsxOTQsNyBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJUaW1lcigpOwogICAgIHZvaWQgc3Rh
cnRUaW1lcihTZWNvbmRzIGRlbGF5KTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5n
TGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFNpemUmIHNj
YWxlRmFjdG9yKTsKICAgICBib29sIGNhbkRlc3Ryb3lEZWNvZGVkRGF0YSgpOwogICAgIHZvaWQg
c2V0Q3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXNJZk5lY2Vzc2FyeShEZWNvZGluZ1N0YXR1cyk7
CiAgICAgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQpAQCAtMjAyLDcgKzIwMyw3IEBAIHByaXZhdGU6CiAgICAgLy8gQW5pbWF0ZWQgaW1hZ2VzIG92
ZXIgYSBjZXJ0YWluIHNpemUgYXJlIGNvbnNpZGVyZWQgbGFyZ2UgZW5vdWdoIHRoYXQgd2UnbGwg
b25seSBoYW5nIG9uIHRvIG9uZSBmcmFtZSBhdCBhIHRpbWUuCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIExhcmdlQW5pbWF0aW9uQ3V0b2ZmID0gMzAgKiAxMDE0ICogMTAyNDsKIAotICAgIG11
dGFibGUgSW1hZ2VTb3VyY2UgbV9zb3VyY2U7CisgICAgbXV0YWJsZSBSZWY8SW1hZ2VGcmFtZUNh
Y2hlPiBtX3NvdXJjZTsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAgfTsgLy8gVGhl
IGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KICAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwgeyBTdWJzYW1wbGluZ0xldmVsOjpEZWZh
dWx0IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDcgKzkyLDYgQEAgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMOwogY2xhc3MgSG9zdFdpbmRv
dzsKIGNsYXNzIEltYWdlOwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBJbWFnZVNvdXJjZTsK
IGNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRTaXplOwpAQCAtMTI0
Niw3ICsxMjQ1LDYgQEAgcHVibGljOgogICAgICAgICBib29sIGV4dHJhY3RJbWFnZShib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOwogCiAjaWYg
VVNFKENBSVJPKQotICAgICAgICBJbWFnZVNvdXJjZSogbV9kZWNvZGVyOwogICAgICAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2ltYWdlU3VyZmFjZTsKICNlbGlmIFVTRShDRykKICAgICAg
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fY2dJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkocmV2aXNp
b24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsMTAgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1JbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZShJbWFnZSogaW1h
Z2UpCitJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZShJbWFnZSogaW1hZ2UsIEFscGhh
T3B0aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbikKICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2FscGhhT3B0
aW9uKGFscGhhT3B0aW9uKQorICAgICwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbikKIHsKIH0KIApAQCAtNzMsMjEgKzc1LDcyIEBAIEltYWdl
RnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSgpCiAgICAgQVNTRVJUKCFoYXNBc3luY0RlY29k
aW5nUXVldWUoKSk7CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpzZXREZWNvZGVyKEltYWdl
RGVjb2RlciogZGVjb2RlcikKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hlOjplbnN1cmVEZWNvZGVyQXZh
aWxhYmxlKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAobV9kZWNvZGVyID09IGRlY29k
ZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEgfHwgaXNEZWNvZGVyQXZhaWxhYmxl
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9kZWNvZGVyID0gSW1hZ2VEZWNvZGVy
OjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pOworICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIENoYW5naW5nIHRoZSBkZWNvZGVyIGhhcyB0byBzdG9wIHRoZSBkZWNvZGlu
ZyB0aHJlYWQuIFRoZSBjdXJyZW50IGZyYW1lIHdpbGwKICAgICAvLyBjb250aW51ZSBkZWNvZGlu
ZyBzYWZlbHkgYmVjYXVzZSB0aGUgZGVjb2RpbmcgdGhyZWFkIGhhcyBpdHMgb3duCiAgICAgLy8g
cmVmZXJlbmNlIG9mIHRoZSBvbGQgZGVjb2Rlci4KICAgICBzdG9wQXN5bmNEZWNvZGluZ1F1ZXVl
KCk7Ci0gICAgbV9kZWNvZGVyID0gZGVjb2RlcjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBJbWFnZUZyYW1lQ2FjaGU6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCkKK3sKKyAgICBpZiAoIWRhdGEgfHwgIWVuc3VyZURlY29kZXJBdmFpbGFibGUo
ZGF0YSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVjb2Rlci0+c2V0RGF0YSgqZGF0YSwg
YWxsRGF0YVJlY2VpdmVkKTsKIH0KIAotSW1hZ2VEZWNvZGVyKiBJbWFnZUZyYW1lQ2FjaGU6OmRl
Y29kZXIoKSBjb25zdAordm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnJlc2V0RGF0YShTaGFyZWRCdWZm
ZXIqIGRhdGEpCiB7Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsKKyAgICBtX2RlY29kZXIg
PSBudWxscHRyOworICAgIHNldERhdGEoZGF0YSwgaXNBbGxEYXRhUmVjZWl2ZWQoKSk7Cit9CisK
K0VuY29kZWREYXRhU3RhdHVzIEltYWdlRnJhbWVDYWNoZTo6ZGF0YUNoYW5nZWQoU2hhcmVkQnVm
ZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBzZXR0aW5nIHRvIGVuYWJsZS9kaXNhYmxl
IHByb2dyZXNzaXZlIGxvYWRpbmcgYW5kIG1ha2UgdGhpcworICAgIC8vIGNvZGUgY29uZGl0aW9u
YWwgb24gaXQuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIGNodW5rTG9hZEludGVydmFsc1tdID0gezAsIDEsIDMsIDYs
IDE1fTsKKyAgICBkb3VibGUgaW50ZXJ2YWwgPSBjaHVua0xvYWRJbnRlcnZhbHNbc3RkOjptaW4o
bV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50LCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oNCkpXTsK
KworICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKKworICAgIC8vIFRoZSBmaXJzdCB0aW1l
IHRocm91Z2gsIHRoZSBjaHVuayB0aW1lIHdpbGwgYmUgMCBhbmQgdGhlIGltYWdlIHdpbGwgZ2V0
IGFuIHVwZGF0ZS4KKyAgICBpZiAoY3VycmVudFRpbWUoKSAtIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1
bmtUaW1lID4gaW50ZXJ2YWwpIHsKKyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlOworICAgICAg
ICBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgIEFT
U0VSVChtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MTZfdD46Om1heCgpKTsKKyAgICAgICAgKyttX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQ7
CisgICAgfQorCisgICAgaWYgKG5lZWRzVXBkYXRlIHx8IGFsbERhdGFSZWNlaXZlZCkKKyAgICAg
ICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vsc2UKKyAgICBzZXREYXRhKGRh
dGEsIGFsbERhdGFSZWNlaXZlZCk7CisjZW5kaWYKKworICAgIGNsZWFyTWV0YWRhdGEoKTsKKyAg
ICBFbmNvZGVkRGF0YVN0YXR1cyBzdGF0dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygpOworICAgIGlm
IChzdGF0dXMgPCBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSkKKyAgICAgICAgcmV0
dXJuIHN0YXR1czsKKworICAgIGdyb3dGcmFtZXMoKTsKKyAgICByZXR1cm4gc3RhdHVzOworfQor
Citib29sIEltYWdlRnJhbWVDYWNoZTo6aXNBbGxEYXRhUmVjZWl2ZWQoKQoreworICAgIHJldHVy
biBpc0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVjb2Rlci0+aXNBbGxEYXRhUmVjZWl2ZWQoKSA6
IGZyYW1lQ291bnQoKTsKIH0KIAogdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OmRlc3Ryb3lEZWNvZGVk
RGF0YShzaXplX3QgZnJhbWVDb3VudCwgc2l6ZV90IGV4Y2x1ZGVGcmFtZSkKQEAgLTExOSw2ICsx
NzIsMTUgQEAgdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OmRlc3Ryb3lJbmNvbXBsZXRlRAogICAgIGRl
Y29kZWRTaXplRGVjcmVhc2VkKGRlY29kZWRTaXplKTsKIH0KIAorI2lmICFVU0UoQ0cpCit2b2lk
IEltYWdlRnJhbWVDYWNoZTo6ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGJlZm9yZUZy
YW1lKQoreworICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2RlY29kZXItPmRlc3Ryb3lGcmFtZUJ1ZmZlckNhY2hlKGJlZm9yZUZyYW1lKTsKK30K
KyNlbmRpZgorCiB2b2lkIEltYWdlRnJhbWVDYWNoZTo6ZGVjb2RlZFNpemVDaGFuZ2VkKGxvbmcg
bG9uZyBkZWNvZGVkU2l6ZSkKIHsKICAgICBpZiAoIWRlY29kZWRTaXplIHx8ICFtX2ltYWdlIHx8
ICFtX2ltYWdlLT5pbWFnZU9ic2VydmVyKCkpCkBAIC0yNzAsNiArMzMyLDE0IEBAIFJlZjxXb3Jr
UXVldWU+IEltYWdlRnJhbWVDYWNoZTo6ZGVjb2RpbmcKICAgICByZXR1cm4gKm1fZGVjb2RpbmdR
dWV1ZTsKIH0KIAorYm9vbCBJbWFnZUZyYW1lQ2FjaGU6OmNhblVzZUFzeW5jRGVjb2RpbmcoKQor
eworICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAvLyBGSVhNRTogZmlndXJlIG91dCB0aGUgYmVzdCBoZXVyaXN0aWMgZm9yIGVuYWJsaW5n
IGFzeW5jIGltYWdlIGRlY29kaW5nLgorICAgIHJldHVybiBzaXplKCkuYXJlYSgpICogc2l6ZW9m
KFJHQkEzMikgPj0gKGZyYW1lQ291bnQoKSA+IDEgPyAxMDAgKiBLQiA6IDUwMCAqIEtCKTsKK30K
Kwogdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnN0YXJ0QXN5bmNEZWNvZGluZ1F1ZXVlKCkKIHsKICAg
ICBpZiAoaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkgfHwgIWlzRGVjb2RlckF2YWlsYWJsZSgpKQpA
QCAtNDkxLDYgKzU2MSwyOSBAQCBDb2xvciBJbWFnZUZyYW1lQ2FjaGU6OnNpbmdsZVBpeGVsU29s
aWRDCiAgICAgcmV0dXJuIGZyYW1lTWV0YWRhdGFBdEluZGV4Q2FjaGVJZk5lZWRlZDxDb2xvcj4o
MCwgKCZJbWFnZUZyYW1lOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpLCAmbV9zaW5nbGVQaXhlbFNv
bGlkQ29sb3IsIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogfQogCitT
dWJzYW1wbGluZ0xldmVsIEltYWdlRnJhbWVDYWNoZTo6bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwo
KQoreworICAgIGlmIChtX21heGltdW1TdWJzYW1wbGluZ0xldmVsKQorICAgICAgICByZXR1cm4g
bV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbC52YWx1ZSgpOworCisgICAgaWYgKCFpc0RlY29kZXJB
dmFpbGFibGUoKSB8fCAhbV9kZWNvZGVyLT5mcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4KDAp
KQorICAgICAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKKworICAgIC8vIEZJ
WE1FOiB0aGlzIHZhbHVlIHdhcyBjaG9zZW4gdG8gYmUgYXBwcm9wcmlhdGUgZm9yIGlPUyBzaW5j
ZSB0aGUgaW1hZ2UKKyAgICAvLyBzdWJzYW1wbGluZyBpcyBvbmx5IGVuYWJsZWQgYnkgZGVmYXVs
dCBvbiBpT1MuIENob29zZSBhIGRpZmZlcmVudCB2YWx1ZQorICAgIC8vIGlmIGltYWdlIHN1YnNh
bXBsaW5nIGlzIGVuYWJsZWQgb24gb3RoZXIgcGxhdGZvcm0uCisgICAgY29uc3QgaW50IG1heGlt
dW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZyA9IDUgKiAxMDI0ICogMTAyNDsKKyAgICBTdWJz
YW1wbGluZ0xldmVsIGxldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6Rmlyc3Q7CisKKyAgICBmb3Ig
KDsgbGV2ZWwgPCBTdWJzYW1wbGluZ0xldmVsOjpMYXN0OyArK2xldmVsKSB7CisgICAgICAgIGlm
IChmcmFtZVNpemVBdEluZGV4KDAsIGxldmVsKS5hcmVhKCkudW5zYWZlR2V0KCkgPCBtYXhpbXVt
SW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxpbmcpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsID0gbGV2ZWw7CisgICAgcmV0dXJuIG1fbWF4
aW11bVN1YnNhbXBsaW5nTGV2ZWwudmFsdWUoKTsKK30KKwogYm9vbCBJbWFnZUZyYW1lQ2FjaGU6
OmZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6
ZV90IGluZGV4LCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykKIHsKICAg
ICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKG1fZnJhbWVDb21taXRRdWV1ZS5iZWdpbigpLCBtX2Zy
YW1lQ29tbWl0UXVldWUuZW5kKCksIFtpbmRleCwgJmRlY29kaW5nT3B0aW9uc10oY29uc3QgSW1h
Z2VGcmFtZVJlcXVlc3QmIGZyYW1lUmVxdWVzdCkgewpAQCAtNTQ0LDYgKzYzNywxOSBAQCBJbWFn
ZU9yaWVudGF0aW9uIEltYWdlRnJhbWVDYWNoZTo6ZnJhbWVPCiAgICAgcmV0dXJuIGZyYW1lTWV0
YWRhdGFBdEluZGV4Q2FjaGVJZk5lZWRlZDxJbWFnZU9yaWVudGF0aW9uPihpbmRleCwgKCZJbWFn
ZUZyYW1lOjpvcmllbnRhdGlvbiksIG51bGxwdHIsIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFk
YXRhKTsKIH0KIAorI2lmIFVTRShESVJFQ1QyRCkKK3ZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpzZXRU
YXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCkKK3sKKyAg
ICBpZiAoaXNEZWNvZGVyQXZhaWxhYmxlKCkgJiYgdGFyZ2V0Q29udGV4dCkKKyAgICAgICAgbV9k
ZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
KQorfQorI2VuZGlmCisKK05hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5n
TGV2ZWwpCit7CisgICAgcmV0dXJuIGlzRGVjb2RlckF2YWlsYWJsZSgpID8gbV9kZWNvZGVyLT5j
cmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkgOiBudWxscHRy
OworfQorCiBOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lQ2FjaGU6OmZyYW1lSW1hZ2VBdEluZGV4
KHNpemVfdCBpbmRleCkKIHsKICAgICByZXR1cm4gZnJhbWVNZXRhZGF0YUF0SW5kZXg8TmF0aXZl
SW1hZ2VQdHI+KGluZGV4LCAoJkltYWdlRnJhbWU6Om5hdGl2ZUltYWdlKSk7CkBAIC01NTQsNCAr
NjYwLDE2IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWVDYWNoZTo6ZnJhbWVJbWEKICAgICBy
ZXR1cm4gZnJhbWVNZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVkPE5hdGl2ZUltYWdlUHRyPihp
bmRleCwgKCZJbWFnZUZyYW1lOjpuYXRpdmVJbWFnZSksIG51bGxwdHIsIEltYWdlRnJhbWU6OkNh
Y2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UsIHN1YnNhbXBsaW5nTGV2ZWwpOwogfQogCit2b2lkIElt
YWdlRnJhbWVDYWNoZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykKK3sKKyAgICB0cy5kdW1wUHJvcGVy
dHkoInR5cGUiLCBmaWxlbmFtZUV4dGVuc2lvbigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImZy
YW1lLWNvdW50IiwgZnJhbWVDb3VudCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlcGV0aXRp
b25zIiwgcmVwZXRpdGlvbkNvdW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic29saWQtY29s
b3IiLCBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSk7CisKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9y
aWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoMCk7CisgICAgaWYgKG9yaWVudGF0
aW9uICE9IE9yaWdpblRvcExlZnQpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3JpZW50YXRp
b24iLCBvcmllbnRhdGlvbik7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oCShyZXZpc2lvbiAyMjA3NDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL1dv
cmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00MCwxMSArNDEsMTEgQEAgY2xhc3MgSW1hZ2VEZWNvZGVyOwogY2xh
c3MgVVJMOwogCiBjbGFzcyBJbWFnZUZyYW1lQ2FjaGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8SW1hZ2VGcmFtZUNhY2hlPiB7Ci0gICAgZnJpZW5kIGNsYXNzIEltYWdlU291cmNlOwor
ICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElt
YWdlRnJhbWVDYWNoZT4gY3JlYXRlKEltYWdlKiBpbWFnZSkKKyAgICBzdGF0aWMgUmVmPEltYWdl
RnJhbWVDYWNoZT4gY3JlYXRlKEltYWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24g
PSBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCwgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24g
Z2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gPSBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6
QXBwbGllZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRnJhbWVD
YWNoZShpbWFnZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUZyYW1lQ2Fj
aGUoaW1hZ2UsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogICAg
IH0KIAogICAgIHN0YXRpYyBSZWY8SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoTmF0aXZlSW1hZ2VQ
dHImJiBuYXRpdmVJbWFnZSkKQEAgLTU0LDE0ICs1NSwxOSBAQCBwdWJsaWM6CiAKICAgICB+SW1h
Z2VGcmFtZUNhY2hlKCk7CiAKLSAgICB2b2lkIHNldERlY29kZXIoSW1hZ2VEZWNvZGVyKik7Ci0g
ICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXREYXRhKFNoYXJl
ZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZvaWQgcmVzZXREYXRh
KFNoYXJlZEJ1ZmZlciogZGF0YSk7CisgICAgRW5jb2RlZERhdGFTdGF0dXMgZGF0YUNoYW5nZWQo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgYm9vbCBpc0Fs
bERhdGFSZWNlaXZlZCgpOwogCiAgICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2RlY29kZWRTaXplOyB9CiAgICAgdm9pZCBkZXN0cm95QWxsRGVjb2RlZERhdGEoKSB7
IGRlc3Ryb3lEZWNvZGVkRGF0YShmcmFtZUNvdW50KCksIGZyYW1lQ291bnQoKSk7IH0KICAgICB2
b2lkIGRlc3Ryb3lBbGxEZWNvZGVkRGF0YUV4Y2x1ZGVGcmFtZShzaXplX3QgZXhjbHVkZUZyYW1l
KSB7IGRlc3Ryb3lEZWNvZGVkRGF0YShmcmFtZUNvdW50KCksIGV4Y2x1ZGVGcmFtZSk7IH0KICAg
ICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKHNpemVfdCBiZWZvcmVGcmFtZSkg
eyBkZXN0cm95RGVjb2RlZERhdGEoYmVmb3JlRnJhbWUsIGJlZm9yZUZyYW1lKTsgfQogICAgIHZv
aWQgZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpOworI2lmICFVU0UoQ0cpCisgICAgdm9p
ZCBkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3JlRnJhbWUpOworI2VuZGlmCiAK
ICAgICB2b2lkIGdyb3dGcmFtZXMoKTsKICAgICB2b2lkIGNsZWFyTWV0YWRhdGEoKTsKQEAgLTY5
LDggKzc1LDkgQEAgcHVibGljOgogICAgIFVSTCBzb3VyY2VVUkwoKSBjb25zdDsKIAogICAgIC8v
IEFzeW5jaHJvbm91cyBpbWFnZSBkZWNvZGluZworICAgIGJvb2wgY2FuVXNlQXN5bmNEZWNvZGlu
ZygpOwogICAgIHZvaWQgc3RhcnRBc3luY0RlY29kaW5nUXVldWUoKTsKLSAgICB2b2lkIHJlcXVl
c3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCwgY29u
c3Qgc3RkOjpvcHRpb25hbDxJbnRTaXplPiYpOworICAgIHZvaWQgcmVxdWVzdEZyYW1lQXN5bmNE
ZWNvZGluZ0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEludFNpemU+JiA9IHsgfSk7CiAgICAgdm9pZCBzdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCk7
CiAgICAgYm9vbCBoYXNBc3luY0RlY29kaW5nUXVldWUoKSBjb25zdCB7IHJldHVybiBtX2RlY29k
aW5nUXVldWU7IH0KICAgICBib29sIGlzQXN5bmNEZWNvZGluZ1F1ZXVlSWRsZSgpIGNvbnN0OwpA
QCAtODgsOCArOTUsOCBAQCBwdWJsaWM6CiAgICAgLy8gSW1hZ2UgbWV0YWRhdGEgd2hpY2ggaXMg
Y2FsY3VsYXRlZCBmcm9tIHRoZSBmaXJzdCBJbWFnZUZyYW1lLgogICAgIEludFNpemUgc2l6ZSgp
OwogICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOwotCiAgICAgQ29sb3Ig
c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7CisgICAgU3Vic2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vi
c2FtcGxpbmdMZXZlbCgpOwogCiAgICAgLy8gSW1hZ2VGcmFtZSBtZXRhZGF0YSB3aGljaCBkb2Vz
IG5vdCByZXF1aXJlIGNhY2hpbmcgdGhlIEltYWdlRnJhbWUuCiAgICAgYm9vbCBmcmFtZUlzQmVp
bmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCwgY29uc3Qg
RGVjb2RpbmdPcHRpb25zJik7CkBAIC0xMDYsMTEgKzExMywxNSBAQCBwdWJsaWM6CiAgICAgZmxv
YXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFnZU9yaWVudGF0aW9uIGZy
YW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCk7CiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAg
dm9pZCBzZXRUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCopOworI2VuZGlmCisg
ICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiAgICAgTmF0aXZlSW1hZ2VQ
dHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKTsKKyAgICBO
YXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW1hZ2VGcmFtZUNhY2hlKEltYWdlKik7CisgICAgSW1hZ2VGcmFtZUNhY2hlKEltYWdlKiwg
QWxwaGFPcHRpb24gPSBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCwgR2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb24gPSBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCk7CiAgICAg
SW1hZ2VGcmFtZUNhY2hlKE5hdGl2ZUltYWdlUHRyJiYpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgVCAoSW1hZ2VEZWNvZGVyOjoqZnVuY3RvcikoKSBjb25zdD4KQEAgLTEyMiw2ICsxMzMs
NyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+
CiAgICAgVCBmcmFtZU1ldGFkYXRhQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBUIChJbWFn
ZUZyYW1lOjoqZnVuY3RvcikoKSBjb25zdCwgIHN0ZDo6b3B0aW9uYWw8VD4qIGNhY2hlZFZhbHVl
LCBBcmdzJiYuLi4pOwogCisgICAgYm9vbCBlbnN1cmVEZWNvZGVyQXZhaWxhYmxlKFNoYXJlZEJ1
ZmZlciogZGF0YSk7CiAgICAgYm9vbCBpc0RlY29kZXJBdmFpbGFibGUoKSBjb25zdCB7IHJldHVy
biBtX2RlY29kZXI7IH0KICAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShzaXplX3QgZnJhbWVD
b3VudCwgc2l6ZV90IGV4Y2x1ZGVGcmFtZSk7CiAgICAgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQo
bG9uZyBsb25nIGRlY29kZWRTaXplKTsKQEAgLTEzOSwxMSArMTUxLDIxIEBAIHByaXZhdGU6CiAK
ICAgICBjb25zdCBJbWFnZUZyYW1lJiBmcmFtZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCwg
SW1hZ2VGcmFtZTo6Q2FjaGluZywgY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVs
PiYgPSB7IH0pOwogCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpOworCiAgICAgSW1h
Z2UqIG1faW1hZ2UgeyBudWxscHRyIH07CiAgICAgUmVmUHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNv
ZGVyOworICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRpb24geyBBbHBoYU9wdGlvbjo6UHJlbXVs
dGlwbGllZCB9OworICAgIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIG1fZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24geyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCB9Owor
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0
dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHNvIHRoYXQgd2UgY2Fu
IHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICBkb3VibGUgbV9wcm9ncmVzc2l2
ZUxvYWRDaHVua1RpbWUgeyAwIH07CisgICAgdWludDE2X3QgbV9wcm9ncmVzc2l2ZUxvYWRDaHVu
a0NvdW50IHsgMCB9OworI2VuZGlmCisKICAgICB1bnNpZ25lZCBtX2RlY29kZWRTaXplIHsgMCB9
OwogICAgIHVuc2lnbmVkIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplIHsgMCB9OwotCiAgICAgVmVj
dG9yPEltYWdlRnJhbWUsIDE+IG1fZnJhbWVzOwogCiAgICAgLy8gQXN5bmNocm9ub3VzIGltYWdl
IGRlY29kaW5nLgpAQCAtMTc2LDYgKzE5OCw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25h
bDxJbnRTaXplPiBtX3NpemU7CiAgICAgc3RkOjpvcHRpb25hbDxJbnRTaXplPiBtX3NpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb247CiAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gbV9zaW5nbGVQaXhl
bFNvbGlkQ29sb3I7CisgICAgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiBtX21heGlt
dW1TdWJzYW1wbGluZ0xldmVsOwogfTsKICAgICAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIyMDc0NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDIyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDEwLCAyMDExLCAyMDEyLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3Jh
LmNvLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJJbWFnZURlY29kZXJDRy5oIgotI2lmIFBM
QVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg+Ci0jZW5kaWYKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFn
ZURlY29kZXJEaXJlY3QyRC5oIgotI2Vsc2UKLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNl
bmRpZgotCi0jaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlU291cmNlOjpJbWFnZVNv
dXJjZShOYXRpdmVJbWFnZVB0ciYmIG5hdGl2ZUltYWdlKQotICAgIDogbV9mcmFtZUNhY2hlKElt
YWdlRnJhbWVDYWNoZTo6Y3JlYXRlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSkKLXsKLX0KLSAgICAK
LUltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZSogaW1hZ2UsIEFscGhhT3B0aW9uIGFscGhh
T3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbikKLSAgICA6IG1fZnJhbWVDYWNoZShJbWFnZUZyYW1lQ2FjaGU6OmNyZWF0ZShpbWFnZSkp
Ci0gICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQotICAgICwgbV9nYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLXsKLX0KLQotSW1hZ2VT
b3VyY2U6On5JbWFnZVNvdXJjZSgpCi17Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyRnJh
bWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKLXsKLSAgICBpZiAoIWlzRGVj
b2RlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9kZWNvZGVyLT5jbGVhckZy
YW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7Ci19Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6
OmVuc3VyZURlY29kZXJBdmFpbGFibGUoU2hhcmVkQnVmZmVyKiBkYXRhKQotewotICAgIGlmICgh
ZGF0YSB8fCBpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBtX2RlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwg
bV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0gICAgaWYgKCFpc0RlY29kZXJBdmFpbGFi
bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9mcmFtZUNhY2hlLT5zZXREZWNv
ZGVyKG1fZGVjb2Rlci5nZXQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSW1hZ2VT
b3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFy
Z2V0Q29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKCFpc0RlY29kZXJBdmFp
bGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRhcmdldENvbnRleHQpCi0gICAg
ICAgIG1fZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKLSNlbmRp
ZgotfQotCi12b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKCFkYXRhIHx8ICFlbnN1cmVEZWNvZGVyQXZh
aWxhYmxlKGRhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RlY29kZXItPnNldERhdGEo
KmRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OnJlc2V0RGF0
YShTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgbV9kZWNvZGVyID0gbnVsbHB0cjsKLSAgICBt
X2ZyYW1lQ2FjaGUtPnNldERlY29kZXIobnVsbHB0cik7Ci0gICAgc2V0RGF0YShkYXRhLCBpc0Fs
bERhdGFSZWNlaXZlZCgpKTsKLX0KLQotRW5jb2RlZERhdGFTdGF0dXMgSW1hZ2VTb3VyY2U6OmRh
dGFDaGFuZ2VkKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0j
aWYgUExBVEZPUk0oSU9TKQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGlu
ZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIGFuZCBtYWtlIHRoaXMKLSAg
ICAvLyBjb2RlIGNvbmRpdGlvbmFsIG9uIGl0LiBUaGVuIHdlIGNhbiByZW1vdmUgdGhlIFBMQVRG
T1JNKElPUyktZ3VhcmQuCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBjaHVua0xvYWRJbnRlcnZh
bHNbXSA9IHswLCAxLCAzLCA2LCAxNX07Ci0gICAgZG91YmxlIGludGVydmFsID0gY2h1bmtMb2Fk
SW50ZXJ2YWxzW3N0ZDo6bWluKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCwgc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KDQpKV07Ci0KLSAgICBib29sIG5lZWRzVXBkYXRlID0gZmFsc2U7Ci0KLSAg
ICAvLyBUaGUgZmlyc3QgdGltZSB0aHJvdWdoLCB0aGUgY2h1bmsgdGltZSB3aWxsIGJlIDAgYW5k
IHRoZSBpbWFnZSB3aWxsIGdldCBhbiB1cGRhdGUuCi0gICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBt
X3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA+IGludGVydmFsKSB7Ci0gICAgICAgIG5lZWRzVXBk
YXRlID0gdHJ1ZTsKLSAgICAgICAgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgPSBjdXJyZW50
VGltZSgpOwotICAgICAgICBBU1NFUlQobV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50IDw9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSk7Ci0gICAgICAgICsrbV9wcm9ncmVz
c2l2ZUxvYWRDaHVua0NvdW50OwotICAgIH0KLQotICAgIGlmIChuZWVkc1VwZGF0ZSB8fCBhbGxE
YXRhUmVjZWl2ZWQpCi0gICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLSNl
bHNlCi0gICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2VuZGlmCi0KLSAgICBt
X2ZyYW1lQ2FjaGUtPmNsZWFyTWV0YWRhdGEoKTsKLSAgICBFbmNvZGVkRGF0YVN0YXR1cyBzdGF0
dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygpOwotICAgIGlmIChzdGF0dXMgPCBFbmNvZGVkRGF0YVN0
YXR1czo6U2l6ZUF2YWlsYWJsZSkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLQotICAgIG1fZnJh
bWVDYWNoZS0+Z3Jvd0ZyYW1lcygpOwotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLWJvb2wgSW1h
Z2VTb3VyY2U6OmlzQWxsRGF0YVJlY2VpdmVkKCkKLXsKLSAgICByZXR1cm4gaXNEZWNvZGVyQXZh
aWxhYmxlKCkgPyBtX2RlY29kZXItPmlzQWxsRGF0YVJlY2VpdmVkKCkgOiBtX2ZyYW1lQ2FjaGUt
PmZyYW1lQ291bnQoKTsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6Y2FuVXNlQXN5bmNEZWNvZGlu
ZygpCi17Ci0gICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IHRoZSBiZXN0IGhldXJpc3RpYyBmb3IgZW5h
YmxpbmcgYXN5bmMgaW1hZ2UgZGVjb2RpbmcuCi0gICAgcmV0dXJuIHNpemUoKS5hcmVhKCkgKiBz
aXplb2YoUkdCQTMyKSA+PSAoZnJhbWVDb3VudCgpID4gMSA/IDEwMCAqIEtCIDogNTAwICogS0Ip
OwotfQotCi1TdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjptYXhpbXVtU3Vic2FtcGxpbmdM
ZXZlbCgpCi17Ci0gICAgaWYgKG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpCi0gICAgICAgIHJl
dHVybiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsLnZhbHVlKCk7Ci0KLSAgICBpZiAoIWlzRGVj
b2RlckF2YWlsYWJsZSgpIHx8ICFtX2RlY29kZXItPmZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5k
ZXgoMCkpCi0gICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OwotCi0gICAg
Ly8gRklYTUU6IHRoaXMgdmFsdWUgd2FzIGNob3NlbiB0byBiZSBhcHByb3ByaWF0ZSBmb3IgaU9T
IHNpbmNlIHRoZSBpbWFnZQotICAgIC8vIHN1YnNhbXBsaW5nIGlzIG9ubHkgZW5hYmxlZCBieSBk
ZWZhdWx0IG9uIGlPUy4gQ2hvb3NlIGEgZGlmZmVyZW50IHZhbHVlCi0gICAgLy8gaWYgaW1hZ2Ug
c3Vic2FtcGxpbmcgaXMgZW5hYmxlZCBvbiBvdGhlciBwbGF0Zm9ybS4KLSAgICBjb25zdCBpbnQg
bWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0OwotICAg
IFN1YnNhbXBsaW5nTGV2ZWwgbGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpGaXJzdDsKLQotICAg
IGZvciAoOyBsZXZlbCA8IFN1YnNhbXBsaW5nTGV2ZWw6Okxhc3Q7ICsrbGV2ZWwpIHsKLSAgICAg
ICAgaWYgKGZyYW1lU2l6ZUF0SW5kZXgoMCwgbGV2ZWwpLmFyZWEoKS51bnNhZmVHZXQoKSA8IG1h
eGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZykKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBsZXZlbDsKLSAgICByZXR1cm4g
bV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbC52YWx1ZSgpOwotfQotCi1TdWJzYW1wbGluZ0xldmVs
IEltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGVGYWN0b3IoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIHNjYWxlRmFjdG9yKQotewotI2lmIFVTRShD
RykKLSAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQ
REYgY29udGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCkpKQotICAgICAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVs
dDsKLQotICAgIGZsb2F0IHNjYWxlID0gc3RkOjptaW4oZmxvYXQoMSksIHN0ZDo6bWF4KHNjYWxl
RmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9yLmhlaWdodCgpKSk7Ci0gICAgaWYgKCEoc2NhbGUg
PiAwICYmIHNjYWxlIDw9IDEpKQotICAgICAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVm
YXVsdDsKLQotICAgIGludCByZXN1bHQgPSBzdGQ6OmNlaWwoc3RkOjpsb2cyKDEgLyBzY2FsZSkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdWJzYW1wbGluZ0xldmVsPihzdGQ6Om1pbihyZXN1
bHQsIHN0YXRpY19jYXN0PGludD4obWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKSkpKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShzY2FsZUZhY3Rv
cik7Ci0gICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7Ci0jZW5kaWYKLX0KLQot
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQotewotICAgIHJldHVy
biBpc0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVjb2Rlci0+Y3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0cjsKLX0KLQotTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VTb3VyY2U6OmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgR3JhcGhpY3NDb250
ZXh0KiB0YXJnZXRDb250ZXh0KQotewotICAgIHNldERlY29kZXJUYXJnZXRDb250ZXh0KHRhcmdl
dENvbnRleHQpOwotICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSW1hZ2VBdEluZGV4Q2Fj
aGVJZk5lZWRlZChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci19Ci0KLXZvaWQgSW1hZ2VTb3Vy
Y2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ0eXBlIiwg
ZmlsZW5hbWVFeHRlbnNpb24oKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJmcmFtZS1jb3VudCIs
IGZyYW1lQ291bnQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZXBldGl0aW9ucyIsIHJlcGV0
aXRpb25Db3VudCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNvbGlkLWNvbG9yIiwgc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCkpOwotCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9
IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KDApOwotICAgIGlmIChvcmllbnRhdGlvbiAhPSBPcmln
aW5Ub3BMZWZ0KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9yaWVudGF0aW9uIiwgb3JpZW50
YXRpb24pOwotfQotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9s
LXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmgJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEwLCAyMDEyLCAyMDE0LCAyMDE2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3Jj
aCBNb2JpbGUsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgotI2luY2x1ZGUgIklt
YWdlRnJhbWVDYWNoZS5oIgotI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKLSNpbmNsdWRl
ICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCi0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW1hZ2VEZWNvZGVyOwot
Y2xhc3MgSW1hZ2VPcmllbnRhdGlvbjsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgSW50U2l6ZTsK
LWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotY2xhc3MgSW1hZ2VTb3VyY2UgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKLSAgICBmcmllbmQgY2xhc3MgQml0bWFwSW1hZ2U7
Ci1wdWJsaWM6Ci0gICAgSW1hZ2VTb3VyY2UoTmF0aXZlSW1hZ2VQdHImJik7Ci0gICAgSW1hZ2VT
b3VyY2UoSW1hZ2UqLCBBbHBoYU9wdGlvbiA9IEFscGhhT3B0aW9uOjpQcmVtdWx0aXBsaWVkLCBH
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpB
cHBsaWVkKTsKLSAgICB+SW1hZ2VTb3VyY2UoKTsKLQotICAgIHZvaWQgZGVzdHJveUFsbERlY29k
ZWREYXRhKCkgeyBtX2ZyYW1lQ2FjaGUtPmRlc3Ryb3lBbGxEZWNvZGVkRGF0YSgpOyB9Ci0gICAg
dm9pZCBkZXN0cm95QWxsRGVjb2RlZERhdGFFeGNsdWRlRnJhbWUoc2l6ZV90IGV4Y2x1ZGVGcmFt
ZSkgeyBtX2ZyYW1lQ2FjaGUtPmRlc3Ryb3lBbGxEZWNvZGVkRGF0YUV4Y2x1ZGVGcmFtZShleGNs
dWRlRnJhbWUpOyB9Ci0gICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGFCZWZvcmVGcmFtZShzaXpl
X3QgYmVmb3JlRnJhbWUpIHsgbV9mcmFtZUNhY2hlLT5kZXN0cm95RGVjb2RlZERhdGFCZWZvcmVG
cmFtZShiZWZvcmVGcmFtZSk7IH0KLSAgICB2b2lkIGRlc3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERh
dGEoKSB7IG1fZnJhbWVDYWNoZS0+ZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpOyB9Ci0g
ICAgdm9pZCBjbGVhckltYWdlKCkgeyBtX2ZyYW1lQ2FjaGUtPmNsZWFySW1hZ2UoKTsgfQotICAg
IHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7Ci0KLSAgICBib29sIGVuc3VyZURl
Y29kZXJBdmFpbGFibGUoU2hhcmVkQnVmZmVyKik7Ci0gICAgYm9vbCBpc0RlY29kZXJBdmFpbGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0RGF0
YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICB2b2lkIHJl
c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpOwotICAgIEVuY29kZWREYXRhU3RhdHVzIGRhdGFD
aGFuZ2VkKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotCi0gICAg
dW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmRlY29k
ZWRTaXplKCk7IH0KLSAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCk7Ci0KLSAgICBib29sIGNh
blVzZUFzeW5jRGVjb2RpbmcoKTsKLSAgICB2b2lkIHJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdB
dEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPEludFNpemU+JiBzaXplRm9yRHJhd2luZyA9IHsgfSkgeyBtX2Zy
YW1lQ2FjaGUtPnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KGluZGV4LCBzdWJzYW1w
bGluZ0xldmVsLCBzaXplRm9yRHJhd2luZyk7IH0KLSAgICBib29sIGhhc0FzeW5jRGVjb2RpbmdR
dWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+aGFzQXN5bmNEZWNvZGluZ1F1ZXVl
KCk7IH0KLSAgICBib29sIGlzQXN5bmNEZWNvZGluZ1F1ZXVlSWRsZSgpIGNvbnN0ICB7IHJldHVy
biBtX2ZyYW1lQ2FjaGUtPmlzQXN5bmNEZWNvZGluZ1F1ZXVlSWRsZSgpOyB9Ci0gICAgdm9pZCBz
dG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCkgeyBtX2ZyYW1lQ2FjaGUtPnN0b3BBc3luY0RlY29kaW5n
UXVldWUoKTsgfQotCi0gICAgLy8gSW1hZ2UgbWV0YWRhdGEgd2hpY2ggaXMgY2FsY3VsYXRlZCBi
eSB0aGUgZGVjb2RlciBvciBjYW4gZGVkdWNlZCBieSB0aGUgY2FzZSBvZiB0aGUgbWVtb3J5IE5h
dGl2ZUltYWdlLgotICAgIEVuY29kZWREYXRhU3RhdHVzIGVuY29kZWREYXRhU3RhdHVzKCkgeyBy
ZXR1cm4gbV9mcmFtZUNhY2hlLT5lbmNvZGVkRGF0YVN0YXR1cygpOyB9Ci0gICAgc2l6ZV90IGZy
YW1lQ291bnQoKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lQ291bnQoKTsgfQotICAgIFJl
cGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPnJl
cGV0aXRpb25Db3VudCgpOyB9Ci0gICAgU3RyaW5nIHV0aSgpIHsgcmV0dXJuIG1fZnJhbWVDYWNo
ZS0+dXRpKCk7IH0KLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSB7IHJldHVybiBtX2Zy
YW1lQ2FjaGUtPmZpbGVuYW1lRXh0ZW5zaW9uKCk7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEludFBv
aW50PiBob3RTcG90KCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5ob3RTcG90KCk7IH0KLQotICAg
IC8vIEltYWdlIG1ldGFkYXRhIHdoaWNoIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZmlyc3QgSW1h
Z2VGcmFtZS4KLSAgICBJbnRTaXplIHNpemUoKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPnNpemUo
KTsgfQotICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIHsgcmV0dXJuIG1f
ZnJhbWVDYWNoZS0+c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOyB9Ci0gICAgQ29sb3Igc2lu
Z2xlUGl4ZWxTb2xpZENvbG9yKCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5zaW5nbGVQaXhlbFNv
bGlkQ29sb3IoKTsgfQotCi0gICAgLy8gSW1hZ2VGcmFtZSBtZXRhZGF0YSB3aGljaCBkb2VzIG5v
dCByZXF1aXJlIGNhY2hpbmcgdGhlIEltYWdlRnJhbWUuCi0gICAgYm9vbCBmcmFtZUlzQmVpbmdE
ZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCBpbmRleCwgY29u
c3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIHsgcmV0dXJuIG1fZnJhbWVDYWNo
ZS0+ZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChp
bmRleCwgZGVjb2RpbmdPcHRpb25zKTsgfQotICAgIERlY29kaW5nU3RhdHVzIGZyYW1lRGVjb2Rp
bmdTdGF0dXNBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFt
ZURlY29kaW5nU3RhdHVzQXRJbmRleChpbmRleCk7IH0KLSAgICBib29sIGZyYW1lSGFzQWxwaGFB
dEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUhhc0FscGhh
QXRJbmRleChpbmRleCk7IH0KLSAgICBib29sIGZyYW1lSGFzSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUhhc0ltYWdlQXRJbmRleChpbmRleCk7
IH0KLSAgICBib29sIGZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoc2l6ZV90IGlu
ZGV4LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xl
dmVsKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9Ci0gICAgYm9vbCBmcmFtZUhhc0RlY29k
ZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBj
b25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBj
b25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgeyByZXR1cm4gbV9mcmFtZUNh
Y2hlLT5mcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5k
ZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGRlY29kaW5nT3B0aW9ucyk7IH0KLSAgICBTdWJz
YW1wbGluZ0xldmVsIGZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5kZXgoc2l6ZV90IGluZGV4KSB7
IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5kZXgoaW5kZXgp
OyB9Ci0KLSAgICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNoIGZvcmNlcyBjYWNoaW5nIG9y
IHJlLWNhY2hpbmcgdGhlIEltYWdlRnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4
KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsID0gU3Vic2Ft
cGxpbmdMZXZlbDo6RGVmYXVsdCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZVNpemVBdElu
ZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNB
dEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsID0g
U3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7IH0KLSAgICBmbG9hdCBmcmFtZUR1
cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVE
dXJhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVP
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0KLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVJbWFn
ZUF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6
OkRlZmF1bHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKLQotICAgIFN1YnNh
bXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKTsKLSAgICBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFNpemUmIHNjYWxlRmFjdG9yKTsKLSAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVs
OjpEZWZhdWx0KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJik7
Ci0KLSAgICB2b2lkIHNldERlY29kZXJUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4
dCopOwotCi0gICAgUmVmPEltYWdlRnJhbWVDYWNoZT4gbV9mcmFtZUNhY2hlOwotICAgIFJlZlB0
cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKLQotICAgIHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxp
bmdMZXZlbD4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbDsKLQotI2lmIFBMQVRGT1JNKElPUykK
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxlL2Rpc2Fi
bGUgcHJvZ3Jlc3NpdmUgbG9hZGluZyBzbyB0aGF0IHdlIGNhbiByZW1vdmUgdGhlIFBMQVRGT1JN
KElPUyktZ3VhcmQuCi0gICAgZG91YmxlIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lIHsgMCB9
OwotICAgIHVpbnQxNl90IG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCB7IDAgfTsKLSNlbmRp
ZgotCi0gICAgQWxwaGFPcHRpb24gbV9hbHBoYU9wdGlvbiB7IEFscGhhT3B0aW9uOjpQcmVtdWx0
aXBsaWVkIH07Ci0gICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbiB7IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkIH07Ci19
OwotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAt
MSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RD
YWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAJKHJldmlzaW9uIDIyMDc0NykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiQ2Fpcm9V
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNs
dWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVkZSAiSW1hZ2VG
cmFtZUNhY2hlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCkBAIC0yNjMsOCAr
MjYzLDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAKIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkKIHsKLSAgICBp
ZiAobV9kZWNvZGVyKQotICAgICAgICBkZWxldGUgbV9kZWNvZGVyOwogfQogCiBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKQEAgLTI3NCwxOSArMjcy
LDE4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjoKICAgICAvLyBX
ZSBuZWVkIHRoaXMgdG8gc3RheSBpbiBzY29wZSBiZWNhdXNlIHRoZSBuYXRpdmUgaW1hZ2UgaXMg
anVzdCBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGF0YS4KICAgICBBbHBoYU9wdGlvbiBhbHBoYU9w
dGlvbiA9IHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCA6IEFs
cGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBsaWVkOwogICAgIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uID0gaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUgPyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6SWdub3JlZCA6IEdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uOjpBcHBsaWVkOwotICAgIG1fZGVjb2RlciA9IG5ldyBJbWFnZVNvdXJjZShu
dWxscHRyLCBhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgIGF1
dG8gZGVjb2RlciA9IEltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlKG51bGxwdHIsIGFscGhhT3B0aW9u
LCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAgICAgCi0gICAgaWYgKCFtX2RlY29kZXIp
CisgICAgaWYgKCFkZWNvZGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZVNv
dXJjZSYgZGVjb2RlciA9ICptX2RlY29kZXI7CiAgICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhp
bmc7CiAKICAgICBpZiAobV9pbWFnZS0+ZGF0YSgpKSB7Ci0gICAgICAgIGRlY29kZXIuc2V0RGF0
YShtX2ltYWdlLT5kYXRhKCksIHRydWUpOwotICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3Vu
dCgpKQorICAgICAgICBkZWNvZGVyLT5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7Cisg
ICAgICAgIGlmICghZGVjb2Rlci0+ZnJhbWVDb3VudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgoMCk7CisgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci0+Y3JlYXRlRnJhbWVJ
bWFnZUF0SW5kZXgoMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBt
X2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAvLyAxLiBGb3Ig
dGV4SW1hZ2UyRCB3aXRoIEhUTUxWaWRlb0VsbWVudCBpbnB1dCwgYXNzdW1lIG5vIFByZW11bHRp
cGx5QWxwaGEgaGFkIGJlZW4gYXBwbGllZCBhbmQgdGhlIGFscGhhIHZhbHVlIGlzIDB4RkYgZm9y
IGVhY2ggcGl4ZWwsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHQzRENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAkocmV2aXNpb24gMjIwNzQ3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
M0RDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNywxMiArMzI3LDEyIEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGJvb2wgaGFzQWxwaGEgPSAhbV9pbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCk7
CiAgICAgaWYgKChpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSB8fCAoaGFzQWxwaGEgJiYgIXBy
ZW11bHRpcGx5QWxwaGEpKSAmJiBtX2ltYWdlLT5kYXRhKCkpIHsKLSAgICAgICAgSW1hZ2VTb3Vy
Y2UgZGVjb2RlcihudWxscHRyLCBBbHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZCwgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUgPyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6SWdub3Jl
ZCA6IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkKTsKLSAgICAgICAgZGVjb2Rl
ci5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5m
cmFtZUNvdW50KCkpCisgICAgICAgIGF1dG8gZGVjb2RlciA9IEltYWdlRnJhbWVDYWNoZTo6Y3Jl
YXRlKG51bGxwdHIsIEFscGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBsaWVkLCBpZ25vcmVHYW1tYUFu
ZENvbG9yUHJvZmlsZSA/IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpJZ25vcmVkIDogR2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQpOworICAgICAgICBkZWNvZGVyLT5zZXRE
YXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZnJhbWVD
b3VudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fZGVjb2RlZElt
YWdlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsKKyAgICAgICAgbV9kZWNv
ZGVkSW1hZ2UgPSBkZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsKICAgICAgICAg
bV9jZ0ltYWdlID0gbV9kZWNvZGVkSW1hZ2U7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fY2dJbWFn
ZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgJ
KHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlRGVjb2RlckNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDcgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXImLCBib29sIGFsbERhdGFSZWNl
aXZlZCk7CiAgICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNB
bGxEYXRhUmVjZWl2ZWQ7IH0KLSAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qp
IHsgfQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2lzQWxsRGF0YVJlY2VpdmVkIHsg
ZmFsc2UgfTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVNvdXJjZVJlZj4gbV9uYXRpdmVEZWNvZGVy
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VD
Ry5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0cuaAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw2IEBACiAjaWZuZGVmIEltYWdlU291cmNlQ0dfaAogI2RlZmluZSBJbWFnZVNvdXJjZUNHX2gK
IAotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgJKHJldmlzaW9u
IDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURl
Y29kZXJEaXJlY3QyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCkBAIC03Miw3
ICs3MSw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyJiwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzQWxsRGF0YVJlY2VpdmVkOyB9Ci0gICAgdm9pZCBjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUoc2l6ZV90KSB7IH0KIAogICAgIHZvaWQgc2V0VGFyZ2V0Q29udGV4dChJRDJEMVJl
bmRlclRhcmdldCopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2xlYXJzIGRlY29k
ZWQgcGl4ZWwgZGF0YSBmcm9tIGJlZm9yZSB0aGUgcHJvdmlkZWQgZnJhbWUgdW5sZXNzIHRoYXQK
ICAgICAvLyBkYXRhIG1heSBiZSBuZWVkZWQgdG8gZGVjb2RlIGZ1dHVyZSBmcmFtZXMgKGUuZy4g
ZHVlIHRvIEdJRiBmcmFtZQogICAgIC8vIGNvbXBvc2l0aW5nKS4KLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3lGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkgeyB9CiAKICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFz
IGEgY3Vyc29yIGhvdC1zcG90LCBzdG9yZXMgaXQgaW4gdGhlIGFyZ3VtZW50CiAgICAgLy8gYW5k
IHJldHVybnMgdHJ1ZS4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDEwICs3MCwxMCBAQCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50
KCkgY29uCiAKIFJlcGV0aXRpb25Db3VudCBHSUZJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3Vu
dCgpIGNvbnN0CiB7Ci0gICAgLy8gVGhpcyB2YWx1ZSBjYW4gYXJyaXZlIGF0IGFueSBwb2ludCBp
biB0aGUgaW1hZ2UgZGF0YSBzdHJlYW0uICBNb3N0IEdJRnMKKyAgICAvLyBUaGlzIHZhbHVlIGNh
biBhcnJpdmUgYXQgYW55IHBvaW50IGluIHRoZSBpbWFnZSBkYXRhIHN0cmVhbS4gTW9zdCBHSUZz
CiAgICAgLy8gaW4gdGhlIHdpbGQgZGVjbGFyZSBpdCBuZWFyIHRoZSBiZWdpbm5pbmcgb2YgdGhl
IGZpbGUsIHNvIGl0IHVzdWFsbHkgaXMKICAgICAvLyBzZXQgYnkgdGhlIHRpbWUgd2UndmUgZGVj
b2RlZCB0aGUgc2l6ZSwgYnV0IChkZXBlbmRpbmcgb24gdGhlIEdJRiBhbmQgdGhlCi0gICAgLy8g
cGFja2V0cyBzZW50IGJhY2sgYnkgdGhlIHdlYnNlcnZlcikgbm90IGFsd2F5cy4gIElmIHRoZSBy
ZWFkZXIgaGFzbid0CisgICAgLy8gcGFja2V0cyBzZW50IGJhY2sgYnkgdGhlIHdlYnNlcnZlcikg
bm90IGFsd2F5cy4gSWYgdGhlIHJlYWRlciBoYXNuJ3QKICAgICAvLyBzZWVuIGEgbG9vcCBjb3Vu
dCB5ZXQsIGl0IHdpbGwgcmV0dXJuIGNMb29wQ291bnROb3RTZWVuLCBpbiB3aGljaCBjYXNlIHdl
CiAgICAgLy8gc2hvdWxkIGRlZmF1bHQgdG8gbG9vcGluZyBvbmNlICh0aGUgaW5pdGlhbCB2YWx1
ZSBmb3IKICAgICAvLyB8bV9yZXBldGl0aW9uQ291bnR8KS4KQEAgLTgxLDEyICs4MSwxMiBAQCBS
ZXBldGl0aW9uQ291bnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0CiAgICAgLy8gVGhlcmUgYXJl
IHNvbWUgYWRkaXRpb25hbCB3cmlua2xlcyBoZXJlLiBGaXJzdCwgSW1hZ2VTb3VyY2U6OmNsZWFy
KCkKICAgICAvLyBtYXkgZGVzdHJveSB0aGUgcmVhZGVyLCBtYWtpbmcgdGhlIHJlc3VsdCBmcm9t
IHRoZSByZWFkZXIgX2xlc3NfCiAgICAgLy8gYXV0aG9yaXRhdGl2ZSBvbiBmdXR1cmUgY2FsbHMg
aWYgdGhlIHJlY3JlYXRlZCByZWFkZXIgaGFzbid0IHNlZW4gdGhlCi0gICAgLy8gbG9vcCBjb3Vu
dC4gIFdlIGRvbid0IG5lZWQgdG8gc3BlY2lhbC1jYXNlIHRoaXMgYmVjYXVzZSBpbiB0aGlzIGNh
c2UgdGhlCisgICAgLy8gbG9vcCBjb3VudC4gV2UgZG9uJ3QgbmVlZCB0byBzcGVjaWFsLWNhc2Ug
dGhpcyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUKICAgICAvLyBuZXcgcmVhZGVyIHdpbGwgb25j
ZSBhZ2FpbiByZXR1cm4gY0xvb3BDb3VudE5vdFNlZW4sIGFuZCB3ZSB3b24ndAogICAgIC8vIG92
ZXJ3cml0ZSB0aGUgY2FjaGVkIGNvcnJlY3QgdmFsdWUuCiAgICAgLy8KICAgICAvLyBTZWNvbmQs
IGEgR0lGIG1pZ2h0IG5ldmVyIHNldCBhIGxvb3AgY291bnQgYXQgYWxsLCBpbiB3aGljaCBjYXNl
IHdlCi0gICAgLy8gc2hvdWxkIGNvbnRpbnVlIHRvIHRyZWF0IGl0IGFzIGEgImxvb3Agb25jZSIg
YW5pbWF0aW9uLiAgV2UgZG9uJ3QgbmVlZAorICAgIC8vIHNob3VsZCBjb250aW51ZSB0byB0cmVh
dCBpdCBhcyBhICJsb29wIG9uY2UiIGFuaW1hdGlvbi4gV2UgZG9uJ3QgbmVlZAogICAgIC8vIHNw
ZWNpYWwgY29kZSBoZXJlIGVpdGhlciwgYmVjYXVzZSBpbiB0aGlzIGNhc2Ugd2UnbGwgbmV2ZXIg
Y2hhbmdlCiAgICAgLy8gfG1fcmVwZXRpdGlvbkNvdW50fCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVl
LgogICAgIC8vCkBAIC0xMTgsNyArMTE4LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OnNldEZh
aWxlZCgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCk7CiB9CiAKLXZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3Jl
RnJhbWUpCit2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUoc2l6
ZV90IGJlZm9yZUZyYW1lKQogewogICAgIC8vIEluIHNvbWUgY2FzZXMsIGxpa2UgaWYgdGhlIGRl
Y29kZXIgd2FzIGRlc3Ryb3llZCB3aGlsZSBhbmltYXRpbmcsIHdlCiAgICAgLy8gY2FuIGJlIGFz
a2VkIHRvIGNsZWFyIG1vcmUgZnJhbWVzIHRoYW4gd2UgY3VycmVudGx5IGhhdmUuCkBAIC0xMjks
MzAgKzEyOSwzMCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhCiAg
ICAgLy8gdGhlcmUncyBhbiBvbmdvaW5nIGRlY29kZSB3aWxsIGNhdXNlIGEgY3Jhc2guCiAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9kZWNvZGVMb2NrKTsKIAotICAgIC8vIFRoZSAiLTEiIGhlcmUg
aXMgdHJpY2t5LiAgSXQgZG9lcyBub3QgbWVhbiB0aGF0IHxjbGVhckJlZm9yZUZyYW1lfCBpcyB0
aGUKKyAgICAvLyBUaGUgIi0xIiBoZXJlIGlzIHRyaWNreS4gSXQgZG9lcyBub3QgbWVhbiB0aGF0
IHxiZWZvcmVGcmFtZXwgaXMgdGhlCiAgICAgLy8gbGFzdCBmcmFtZSB3ZSB3aXNoIHRvIHByZXNl
cnZlLCBidXQgcmF0aGVyIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBjbGVhcgogICAgIC8vIHRoZSB2
ZXJ5IGxhc3QgZnJhbWUgaW4gdGhlIGNhY2hlOiBpdCdzIGVtcHR5IChzbyBjbGVhcmluZyBpdCBp
cwogICAgIC8vIHBvaW50bGVzcyksIGl0J3MgcGFydGlhbCAoc28gd2UgZG9uJ3Qgd2FudCB0byBj
bGVhciBpdCBhbnl3YXkpLCBvciB0aGUKICAgICAvLyBjYWNoZSBjb3VsZCBiZSBlbmxhcmdlZCB3
aXRoIGEgZnV0dXJlIHNldERhdGEoKSBjYWxsIGFuZCBpdCBjb3VsZCBiZQotICAgIC8vIG5lZWRl
ZCB0byBjb25zdHJ1Y3QgdGhlIG5leHQgZnJhbWUgKHNlZSBjb21tZW50cyBiZWxvdykuICBDYWxs
ZXJzIGNhbgorICAgIC8vIG5lZWRlZCB0byBjb25zdHJ1Y3QgdGhlIG5leHQgZnJhbWUgKHNlZSBj
b21tZW50cyBiZWxvdykuIENhbGxlcnMgY2FuCiAgICAgLy8gYWx3YXlzIHVzZSBJbWFnZVNvdXJj
ZTo6Y2xlYXIodHJ1ZSwgLi4uKSB0byBjb21wbGV0ZWx5IGZyZWUgdGhlIG1lbW9yeSBpbgogICAg
IC8vIHRoaXMgY2FzZS4KLSAgICBjbGVhckJlZm9yZUZyYW1lID0gc3RkOjptaW4oY2xlYXJCZWZv
cmVGcmFtZSwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEpOwotICAgIGNvbnN0IFZlY3Rv
cjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsg
Y2xlYXJCZWZvcmVGcmFtZSk7CisgICAgYmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihiZWZvcmVGcmFt
ZSwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEpOworICAgIGNvbnN0IFZlY3RvcjxJbWFn
ZUZyYW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgYmVmb3Jl
RnJhbWUpOwogCiAgICAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSBmcmFtZXMgc3VjaCB0aGF0Ogog
ICAgIC8vICAgKiBXZSBkb24ndCBjbGVhciB8ZW5kfAogICAgIC8vICAgKiBXZSBkb24ndCBjbGVh
ciB0aGUgZnJhbWUgd2UncmUgY3VycmVudGx5IGRlY29kaW5nCiAgICAgLy8gICAqIFdlIGRvbid0
IGNsZWFyIGFueSBmcmFtZSBmcm9tIHdoaWNoIGEgZnV0dXJlIGluaXRGcmFtZUJ1ZmZlcigpIGNh
bGwKICAgICAvLyAgICAgd2lsbCBjb3B5IGJpdG1hcCBkYXRhCi0gICAgLy8gQWxsIG90aGVyIGZy
YW1lcyBjYW4gYmUgY2xlYXJlZC4gIEJlY2F1c2Ugb2YgdGhlIGNvbnN0cmFpbnRzIG9uIHdoZW4K
KyAgICAvLyBBbGwgb3RoZXIgZnJhbWVzIGNhbiBiZSBjbGVhcmVkLiBCZWNhdXNlIG9mIHRoZSBj
b25zdHJhaW50cyBvbiB3aGVuCiAgICAgLy8gSW1hZ2VTb3VyY2U6OmNsZWFyKCkgY2FuIGJlIGNh
bGxlZCAoc2VlIEltYWdlU291cmNlLmgpLCB3ZSdyZSBndWFyYW50ZWVkCiAgICAgLy8gbm90IHRv
IGhhdmUgbm9uLWVtcHR5IGZyYW1lcyBhZnRlciB0aGUgZnJhbWUgd2UncmUgY3VycmVudGx5IGRl
Y29kaW5nLgogICAgIC8vIFNvLCBzY2FuIGJhY2t3YXJkcyBmcm9tIHxlbmR8IGFzIGZvbGxvd3M6
CiAgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBlbXB0eSwgd2UncmUgc3RpbGwgcGFzdCBhbnkg
ZnJhbWVzIHdlIGNhcmUgYWJvdXQuCiAgICAgLy8gICAqIElmIHRoZSBmcmFtZSBpcyBjb21wbGV0
ZSwgYnV0IGlzIERpc3Bvc2FsTWV0aG9kOjpSZXN0b3JlVG9QcmV2aW91cywgd2UnbGwKLSAgICAv
LyAgICAgc2tpcCBvdmVyIGl0IGluIGZ1dHVyZSBpbml0RnJhbWVCdWZmZXIoKSBjYWxscy4gIFdl
IGNhbiBjbGVhciBpdAotICAgIC8vICAgICB1bmxlc3MgaXQncyB8ZW5kfCwgYW5kIGtlZXAgc2Nh
bm5pbmcuICBGb3IgYW55IG90aGVyIGRpc3Bvc2FsIG1ldGhvZCwKKyAgICAvLyAgICAgc2tpcCBv
dmVyIGl0IGluIGZ1dHVyZSBpbml0RnJhbWVCdWZmZXIoKSBjYWxscy4gV2UgY2FuIGNsZWFyIGl0
CisgICAgLy8gICAgIHVubGVzcyBpdCdzIHxlbmR8LCBhbmQga2VlcCBzY2FubmluZy4gRm9yIGFu
eSBvdGhlciBkaXNwb3NhbCBtZXRob2QsCiAgICAgLy8gICAgIHN0b3Agc2Nhbm5pbmcsIGFzIHdl
J3ZlIGZvdW5kIHRoZSBmcmFtZSBpbml0RnJhbWVCdWZmZXIoKSB3aWxsIG5lZWQKICAgICAvLyAg
ICAgbmV4dC4KICAgICAvLyAgICogSWYgdGhlIGZyYW1lIGlzIHBhcnRpYWwsIHdlJ3JlIGRlY29k
aW5nIGl0LCBzbyBkb24ndCBjbGVhciBpdDsgaWYgaXQKQEAgLTIxMSw3ICsyMTEsNyBAQCBib29s
IEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuYmFja2luZ1N0b3JlKCkt
PnBpeGVsQXQoeEJlZ2luLCB5QmVnaW4pOwotICAgIC8vIFdyaXRlIG9uZSByb3cncyB3b3J0aCBv
ZiBkYXRhIGludG8gdGhlIGZyYW1lLiAgCisgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9m
IGRhdGEgaW50byB0aGUgZnJhbWUuCiAgICAgZm9yIChpbnQgeCA9IHhCZWdpbjsgeCA8IHhFbmQ7
ICsreCkgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVm
ZmVyWyhtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54
T2Zmc2V0XTsKICAgICAgICAgaWYgKCghZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50IHx8IChz
b3VyY2VWYWx1ZSAhPSBmcmFtZUNvbnRleHQtPnRwaXhlbCkpICYmIChzb3VyY2VWYWx1ZSA8IGNv
bG9yTWFwU2l6ZSkpIHsKQEAgLTI0MSw3ICsyNDEsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6
aGF2ZURlY29kZWRSb3codW5zCiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIEltYWdlRnJhbWU6
OkRpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQogewotICAgIC8vIEluaXRpYWxpemUgdGhl
IGZyYW1lIGlmIG5lY2Vzc2FyeS4gIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90aGluZyBmcmFtZXMs
CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LiBTb21lIEdJRnMgaW5z
ZXJ0IGRvLW5vdGhpbmcgZnJhbWVzLAogICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgbmV2ZXIgcmVh
Y2ggaGF2ZURlY29kZWRSb3coKSBiZWZvcmUgZ2V0dGluZyBoZXJlLgogICAgIEltYWdlRnJhbWUm
IGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKICAgICBpZiAoYnVmZmVy
LmlzSW52YWxpZCgpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCkBAIC0yNTksOCAr
MjU5LDggQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgICAg
ICBpZiAocmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQog
ICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAo
ZnJhbWVJbmRleCkgewotICAgICAgICAgICAgLy8gVHJpY2t5IGNhc2UuICBUaGlzIGZyYW1lIGRv
ZXMgbm90IGhhdmUgYWxwaGEgb25seSBpZiBldmVyeXdoZXJlCi0gICAgICAgICAgICAvLyBvdXRz
aWRlIGl0cyByZWN0IGRvZXNuJ3QgaGF2ZSBhbHBoYS4gIFRvIGtub3cgd2hldGhlciB0aGlzIGlz
CisgICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gVGhpcyBmcmFtZSBkb2VzIG5vdCBoYXZlIGFs
cGhhIG9ubHkgaWYgZXZlcnl3aGVyZQorICAgICAgICAgICAgLy8gb3V0c2lkZSBpdHMgcmVjdCBk
b2Vzbid0IGhhdmUgYWxwaGEuIFRvIGtub3cgd2hldGhlciB0aGlzIGlzCiAgICAgICAgICAgICAv
LyB0cnVlLCB3ZSBjaGVjayB0aGUgc3RhcnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0tIGlmIGl0IGRv
ZXNuJ3QgaGF2ZQogICAgICAgICAgICAgLy8gYWxwaGEsIHdlJ3JlIHNhZmUuCiAgICAgICAgICAg
ICAvLwpAQCAtMjcyLDcgKzI3Miw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBs
ZXRlKHVuc2kKICAgICAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNo
ZVstLWZyYW1lSW5kZXhdOwogCiAgICAgICAgICAgICAvLyBOb3csIGlmIHdlJ3JlIGF0IGEgRGlz
cG9zYWxNZXRob2Q6OlVuc3BlY2lmaWVkIG9yIERpc3Bvc2FsTWV0aG9kOjpEb05vdERpc3Bvc2Ug
ZnJhbWUsIHRoZW4KLSAgICAgICAgICAgIC8vIHdlIGNhbiBzYXkgd2UgaGF2ZSBubyBhbHBoYSBp
ZiB0aGF0IGZyYW1lIGhhZCBubyBhbHBoYS4gIEJ1dAorICAgICAgICAgICAgLy8gd2UgY2FuIHNh
eSB3ZSBoYXZlIG5vIGFscGhhIGlmIHRoYXQgZnJhbWUgaGFkIG5vIGFscGhhLiBCdXQKICAgICAg
ICAgICAgIC8vIHNpbmNlIGluIGluaXRGcmFtZUJ1ZmZlcigpIHdlIGFscmVhZHkgY29waWVkIHRo
YXQgZnJhbWUncyBhbHBoYQogICAgICAgICAgICAgLy8gc3RhdGUgaW50byB0aGUgY3VycmVudCBm
cmFtZSdzLCB3ZSBuZWVkIGRvIG5vdGhpbmcgYXQgYWxsIGhlcmUuCiAgICAgICAgICAgICAvLwpA
QCAtMzUyLDcgKzM1Miw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIo
dW4KICAgICAgICAgLy8KICAgICAgICAgLy8gRnJhbWVzIHRoYXQgdXNlIHRoZSBEaXNwb3NhbE1l
dGhvZDo6UmVzdG9yZVRvUHJldmlvdXMgbWV0aG9kIGFyZSBlZmZlY3RpdmVseQogICAgICAgICAv
LyBuby1vcHMgaW4gdGVybXMgb2YgY2hhbmdpbmcgdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIGEgZnJh
bWUgY29tcGFyZWQgdG8KLSAgICAgICAgLy8gdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIHRoZSBwcmV2
aW91cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRoZW0uICAoSWYgdGhlCisgICAgICAgIC8vIHRoZSBz
dGFydGluZyBzdGF0ZSBvZiB0aGUgcHJldmlvdXMgZnJhbWUsIHNvIHNraXAgb3ZlciB0aGVtLiAo
SWYgdGhlCiAgICAgICAgIC8vIGZpcnN0IGZyYW1lIHNwZWNpZmllcyB0aGlzIG1ldGhvZCwgaXQg
d2lsbCBnZXQgdHJlYXRlZCBsaWtlCiAgICAgICAgIC8vIERpc3Bvc2FsTWV0aG9kOjpSZXN0b3Jl
VG9CYWNrZ3JvdW5kIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2Uu
KQogICAgICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJD
YWNoZVstLWZyYW1lSW5kZXhdOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3Bl
Y2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAgIC8vIEdJRkltYWdl
UmVhZGVyIQogICAgICAgICBib29sIHNldEZhaWxlZCgpIG92ZXJyaWRlOwotICAgICAgICB2b2lk
IGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkgb3ZlcnJpZGU7
CisgICAgICAgIHZvaWQgZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGJlZm9yZUZyYW1l
KSBvdmVycmlkZTsKIAogICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4K
ICAgICAgICAgYm9vbCBoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCBjb25zdCBW
ZWN0b3I8dW5zaWduZWQgY2hhcj4mIHJvd0J1ZmZlciwgc2l6ZV90IHdpZHRoLCBzaXplX3Qgcm93
TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxz
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMjA3NDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMyLDE0ICs3MzIsMTQgQEAgdm9pZCBQTkdJbWFn
ZURlY29kZXI6OmluaXQoKQogICAgIG1fc2VxdWVuY2VOdW1iZXIgPSAwOwogfQogCi12b2lkIFBO
R0ltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZy
YW1lKQordm9pZCBQTkdJbWFnZURlY29kZXI6OmRlc3Ryb3lGcmFtZUJ1ZmZlckNhY2hlKHNpemVf
dCBiZWZvcmVGcmFtZSkKIHsKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2VlIEdJRkltYWdlRGVjb2RlciBmb3IgZnVsbCBl
eHBsYW5hdGlvbi4KLSAgICBjbGVhckJlZm9yZUZyYW1lID0gc3RkOjptaW4oY2xlYXJCZWZvcmVG
cmFtZSwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEpOwotICAgIGNvbnN0IFZlY3RvcjxJ
bWFnZUZyYW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgY2xl
YXJCZWZvcmVGcmFtZSk7CisgICAgYmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihiZWZvcmVGcmFtZSwg
bV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEpOworICAgIGNvbnN0IFZlY3RvcjxJbWFnZUZy
YW1lPjo6aXRlcmF0b3IgZW5kKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpICsgYmVmb3JlRnJh
bWUpOwogCiAgICAgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBpKGVuZCk7CiAgICAgZm9y
ICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAmJiAoaS0+aXNJbnZhbGlkKCkg
fHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zYWxNZXRob2Q6OlJl
c3RvcmVUb1ByZXZpb3VzKSk7IC0taSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAko
cmV2aXNpb24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBmcmFtZUhlYWRlcigpOwogCiAgICAg
ICAgIHZvaWQgaW5pdCgpOwotICAgICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXpl
X3QgY2xlYXJCZWZvcmVGcmFtZSkgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgZGVzdHJveUZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90IGJlZm9yZUZyYW1lKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAg
ICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMjA3NTkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxNy0wOC0xNSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB0aGUg
SW1hZ2VTb3VyY2UgZnJvbSB0aGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgY29ubmVjdHMgQml0bWFw
SW1hZ2UgdG8gSW1hZ2VGcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc1NTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tOgorCiAyMDE3LTA4LTE1ICBE
b24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW1BBTF0gTW92
ZSBTbGVlcCBjbGFzc2VzIGludG8gUEFMCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDIyMDc0NykKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDcgKzU5LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAjaW1wb3J0
IDxBdWRpb1Rvb2xib3gvQXVkaW9TZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RldmljZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
SW1hZ2VTb3VyY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4K
ICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318175</attachid>
            <date>2017-08-15 14:34:59 -0700</date>
            <delta_ts>2017-08-16 13:49:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175595-20170815143458.patch</filename>
            <type>text/plain</type>
            <size>82536</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE3LTA4LTE1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRo
ZSBJbWFnZVNvdXJjZSBmcm9tIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRt
YXBJbWFnZSB0byBJbWFnZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgY29ubmVjdHMgQml0bWFwSW1h
Z2UgdG8gSW1hZ2VGcmFtZSBoYXMgYmVlbgorICAgICAgICB0cm91Ymxlc29tZS4gSW1hZ2VTb3Vy
Y2UgZG9lcyBub3QgaGF2ZSBhIGNsZWFyIHJlc3BvbnNpYmlsaXR5IG90aGVyIHRoYW4KKyAgICAg
ICAgYSBicmlkZ2UgdGhhdCBjb25uZWN0cyBCaXRtYXBJYW1nZSB0byBJbWFnZUZyYW1lQ2FjaGUu
IFNoYXJpbmcgdGhlIAorICAgICAgICBJbWFnZURlY29kZXIgYmV0d2VlbiBJbWFnZVNvdXJjZSBh
bmQgSW1hZ2VGcmFtZUNhY2hlIGlzIHVnbHkgYW5kIGNhdXNlZAorICAgICAgICBmZXcgY3Jhc2hl
cyBpbiB0aGUgcGFzdC4KKworICAgICAgICBUaGlzIHBhdGNoIHdpbGwgZG8gdGhlIGZpcnN0IHN0
ZXAgZm9yIGZpeGluZyB0aGlzIGlzc3VlLiBGaXJzdCBnZXQgcmlkIG9mCisgICAgICAgIEltYWdl
U291cmNlIGJ5IG1vdmluZyBpdHMgQVBJcyB0byBJbWFnZUZyYW1lQ2FjaGUgYW5kIEJpdG1hcElt
YWdlLiBSZXBsYWNlCisgICAgICAgIGFsbCB0aGUgaW5zdGFuY2VzIG9mIEltYWdlU291cmNlIGJ5
IEltYWdlRnJhbWVDYWNoZS4gVGhlIG5leHQgc3RlcCB3aWxsCisgICAgICAgIGJlIHRvIHJlbmFt
ZSBJbWFnZUZyYW1lQ2FjaGUgdG8gSW1hZ2VTb3VyY2UuIEJ1dCB0aGlzIHdpbGwgYmUgZG9uZSBp
biBhCisgICAgICAgIGZvbGxvdy11cCBwYXRjaAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6fkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpjYW5Vc2VBc3luY0RlY29kaW5nRm9yTGFyZ2VJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OnNob3VsZFVzZUFzeW5jRGVjb2RpbmdGb3JBbmltYXRlZEltYWdl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3Vic2FtcGxpbmdMZXZl
bEZvclNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYW5EZXN0
cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludGVybmFs
U3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnN0b3BBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmltYWdlRnJhbWVBdmFpbGFi
bGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVDYWNoZTo6SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVD
YWNoZTo6ZW5zdXJlRGVjb2RlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpy
ZXNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpkYXRhQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmlzQWxsRGF0YVJlY2VpdmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6ZGVzdHJveUZyYW1lQnVmZmVy
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjYW5Vc2VBc3luY0Rl
Y29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6bWF4aW11bVN1YnNh
bXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpzZXRUYXJn
ZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpkdW1w
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6c2V0RGVjb2Rlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmRlY29kZXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpyZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6On5J
bWFnZUV4dHJhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OmlzQWxsRGF0YVJlY2VpdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVCdWZmZXJDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVC
dWZmZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmNsZWFyRnJh
bWVCdWZmZXJDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorCiAyMDE3LTA4LTE1ICBDb21taXQgUXVldWUgIDxj
b21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMjE5NTA0LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyMDc0NykKKysr
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMzU0LDcg
KzIzNTQsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VGcmFtZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFNpemUuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZQkocmV2aXNpb24g
MjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDcgKzgxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKIApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIw
NzQ3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00MjIsNyArNDIyLDYgQEAKIAkJMEYxNzc0ODExMzc4Qjc3MjAw
OURBNzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzc0N0YxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFu
aW1hdG9ySU9TLm1tICovOyB9OwogCQkwRjM2RTczNzFCRDE4MzdBMDAyREI4OTEgLyogTGF5b3V0
UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzNkU3MzYxQkQxODM3QTAwMkRCODkxIC8qIExheW91dFBvaW50LmNwcCAqLzsgfTsKIAkJMEYz
NkU3MzkxQkQxODRCOTAwMkRCODkxIC8qIExheW91dFNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNkU3MzgxQkQxODRCOTAwMkRCODkxIC8q
IExheW91dFNpemUuY3BwICovOyB9OwotCQkwRjNDNzI1RTE5NzQ4NzRCMDBBRUREMEMgLyogSW1h
Z2VTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQzcyNUQxOTc0ODc0QjAwQUVERDBDIC8qIEltYWdlU291cmNlLmNwcCAqLzsgfTsKIAkJ
MEYzREQ0NEYxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkw
IC8qIFNoYWRvd0JsdXIuY3BwICovOyB9OwogCQkwRjNERDQ1MDEyRjVFQTFCMDAwRDkxOTAgLyog
U2hhZG93Qmx1ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLzsgfTsKIAkJMEYz
RjBFNTkxNTcwMzBDMzAwNkRBNTdGIC8qIFJlbmRlckdlb21ldHJ5TWFwLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0YwRTU3MTU3MDMwQzMwMDZE
QTU3RiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgKi87IH07CkBAIC01MjA3LDcgKzUyMDYsNiBA
QAogCQlCMjc1MzU2RTBCMDUzODE0MDAyQ0U2NEYgLyogSWNvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDAwQjA1MzgxNDAwMkNFNjRGIC8q
IEljb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCMjc1MzU2RjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDEwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlLmNwcCAqLzsgfTsKIAkJQjI3NTM1NzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MjBC
MDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlCMjc1MzU3MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUz
NTQzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTcyMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbnRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI3NTM1NDQwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzMwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3NTM1NDUwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuY3BwICovOyB9Owog
CQlCMjc1MzU3NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDYwQjA1MzgxNDAwMkNFNjRGIC8q
IEludFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNzgzNCw3ICs3ODMyLDYgQEAKIAkJMEYxNzc0N0YxMzc4Qjc3MjAwOURBNzZBIC8qIFNj
cm9sbEFuaW1hdG9ySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU2Nyb2xsQW5pbWF0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MzZFNzM2MUJEMTgzN0EwMDJEQjg5MSAvKiBMYXlvdXRQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzZFNzM4MUJEMTg0QjkwMDJEQjg5MSAvKiBMYXlvdXRTaXplLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFNpemUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNDNzI1RDE5NzQ4NzRCMDBBRUREMEMgLyogSW1h
Z2VTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VT
b3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNERDQ0RDEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaGFkb3dCbHVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
REQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2hhZG93Qmx1ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjNGMEU1NzE1NzAzMEMzMDA2REE1N0YgLyogUmVuZGVyR2VvbWV0cnlNYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyR2VvbWV0cnlNYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0ODQsOCArMTI0ODEsOCBAQAogCQk5QjA5
OEJERTFGM0Q2NzNEMDAyREQ1NjIgLyogSlNEYXRhVHJhbnNmZXJJdGVtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVRyYW5zZmVySXRlbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5QjA5OEJERjFGM0Q2NzNEMDAyREQ1NjIgLyogSlNEYXRhVHJhbnNm
ZXJJdGVtTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rh
dGFUcmFuc2Zlckl0ZW1MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIw
OThCRTAxRjNENjczRDAwMkRENTYyIC8qIEpTRGF0YVRyYW5zZmVySXRlbUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVHJhbnNmZXJJdGVtTGlzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5QjA5OEJFNjFGM0Q2QUY2MDAyREQ1NjIgLyogSlNT
dHJpbmdDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U1N0cmluZ0NhbGxiYWNrLmNwcDsgcGF0aCA9IEpTU3RyaW5nQ2FsbGJhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5QjA5OEJFNzFGM0Q2QUY2MDAyREQ1NjIgLyogSlNTdHJp
bmdDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1N0cmluZ0Nh
bGxiYWNrLmg7IHBhdGggPSBKU1N0cmluZ0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTlCMDk4QkU2MUYzRDZBRjYwMDJERDU2MiAvKiBKU1N0cmluZ0NhbGxiYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nQ2FsbGJhY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjA5OEJFNzFGM0Q2QUY2MDAyREQ1
NjIgLyogSlNTdHJpbmdDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1N0cmluZ0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMEZF
ODczMUQ5RTAyREYwMDRBOEFDQiAvKiBEb2N1bWVudE9yU2hhZG93Um9vdC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gRG9jdW1lbnRPclNoYWRvd1Jvb3QuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5QjEzMjU3QjFGM0QyQUJBMDBEQUFCNjkgLyogRGF0YVRyYW5zZmVySXRl
bUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YVRyYW5z
ZmVySXRlbUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjE5QjY3RTFC
OTY0RTUyMDAzNDg3NDUgLyogU2hhZG93Um9vdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
U2hhZG93Um9vdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzY5MSw3ICsx
MzY4OCw2IEBACiAJCUIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyNzUzNTQxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMjc1MzU0MjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyNzUzNTQzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDQwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMjc1MzU0NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50UmVjdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ2MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRS
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRSZWN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzI5NSw4ICsyMzI5MSw2IEBACiAJCQkJQTg3NDhE
NzQxMkNDM0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uY3BwICovLAogCQkJCUE4NzQ4
RDY2MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggKi8sCiAJCQkJNDkyOTFF
NEExMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5oICovLAotCQkJCTBGM0M3
MjVEMTk3NDg3NEIwMEFFREQwQyAvKiBJbWFnZVNvdXJjZS5jcHAgKi8sCi0JCQkJQjI3NTM1NDMw
QjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmggKi8sCiAJCQkJNTU1MENCNDExRTk1NUUz
QzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCAqLywKIAkJCQkwNzk0MTc5MzE2NkVBMDRFMDA5NDE2
QzIgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oICovLAogCQkJCTA3Q0U3N0Q0MTY3MTJBNkEw
MEM1NUE0NyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0yNzczNiw3
ICsyNzczMCw2IEBACiAJCQkJMkQ1QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUI1MUEyRjNGMTdEN0QzQUUwMDcyNTE3QSAvKiBJ
bWFnZVF1YWxpdHlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTI5MUU0QjEzNDE3
MkM4MDBFNzUzREUgLyogSW1hZ2VSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQlC
Mjc1MzU3MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NTUwQ0I0MjFFOTU1RTNDMDAxMTFBQTAgLyogSW1hZ2VUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yOTQ2OCwyMyArMjk0NjEsMTUgQEAKIAkJCQk1MTZGN0Y2RDFD
MzFFMzlBMDBGMTExREMgLyogU2VydmVyT3BlbkRCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkQ5M0FFRTMxOURGNTY0MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjE3NTVEMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNl
V29ya2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTgyQzIzRjFGMzEzQTA5MDA1OUJBN0MgLyog
U2VydmljZVdvcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMTc1NUYxRjNFQkM4MzAwQzc0
OTUwIC8qIFNlcnZpY2VXb3JrZXJDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxODJD
MjQxMUYzMTNBMDkwMDU5QkE3QyAvKiBTZXJ2aWNlV29ya2VyQ29udGFpbmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUYxNzU2MTFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTgyQzI0MzFGMzEzQTA5MDA1OUJBN0MgLyog
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU2MzFG
M0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlckpvYi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTExQ0E2N0UxRjM5MDVBNjAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJKb2IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxRjE3NTY0MUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VySm9iQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTFDQTY4MDFGMzkzMzFGMDAxOUUwNzQgLyogU2Vy
dmljZVdvcmtlckpvYkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTExQ0E2N0ExRjM5MDRC
MTAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTFGMTc1NjYxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJQcm92aWRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTFGMTc1NjgxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxODJDMjQ1MUYzMTNBMDkwMDU5QkE3
QyAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYx
NzU2OTFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9wdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjE3NTZCMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNl
V29ya2VyUmVnaXN0cmF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMTc1
NkMxRjNFQkM4MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJVcGRhdGVWaWFDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNTFGMTc0RkYxRjM1ODk5NzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJV
cGRhdGVWaWFDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzU2QjJDRTExOEI3MTAxNjAwRkVD
RkFBIC8qIFNlc3Npb25JRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTAwOTlFNjQ5MjAw
NTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
OERCREI0QzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMTcyNCw3ICszMTcwOSw2IEBACiAJCQkJQjI3NTM1N0IwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ1QTU5MkYxNTI1MjUyMzAw
MzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjUxQTJG
NDExN0Q3RDVERTAwNzI1MTdBIC8qIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMEYzQzcyNUUxOTc0ODc0QjAwQUVERDBDIC8qIEltYWdlU291cmNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTRCMzQ4MDkzMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJj
ZUNHTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2RkUxMTcwRTZFMURBNzAwQkY2MDg4IC8q
IEltcGxpY2l0QW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFOTYxQzU0MThBRDMz
ODUwMEQwN0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MzMzMzQsMTkgKzMzMzE4LDEyIEBACiAJCQkJNTE2RjdGNkUxQzMxRTM5QzAwRjExMURDIC8qIFNl
cnZlck9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5M0FFRTQxOURGNTY0
MTAwMkE4NkMzIC8qIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MUYxNzU1QzFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk1MTgyQzIzRTFGMzEzQTA5MDA1OUJBN0MgLyogU2VydmljZVdvcmtlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzU1RTFGM0VCQzgzMDBDNzQ5NTAgLyogU2Vydmlj
ZVdvcmtlckNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTgyQzI0MDFGMzEzQTA5
MDA1OUJBN0MgLyogU2VydmljZVdvcmtlckNvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTgyQzI0MjFGMzEzQTA5MDA1OUJBN0MgLyogU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTYwMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMTc1NjIxRjNFQkM4
MzAwQzc0OTUwIC8qIFNlcnZpY2VXb3JrZXJKb2IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEx
Q0E2N0QxRjM5MDVBNjAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJKb2IuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJNTExQ0E2NzkxRjM5MDRCMTAwMTlFMDc0IC8qIFNlcnZpY2VXb3JrZXJQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYxNzU2NTFGM0VCQzgzMDBDNzQ5NTAgLyogU2Vy
dmljZVdvcmtlclByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTY3MUYzRUJD
ODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTUxODJDMjQ0MUYzMTNBMDkwMDU5QkE3QyAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjE3NTZBMUYzRUJDODMwMEM3NDk1MCAvKiBT
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTFDQTY4MzFGM0EzQ0Q5MDAxOUUwNzQgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvblBh
cmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRjdENDQxRUIxQzM5MTAwRTQ3Qjgz
IC8qIFNlc3Npb25JRC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUwRjA5OUU2NDkyMDA1
NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjhEQkRCNEIxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICsz
OSwyMSBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZh
Y2UuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJpdG1hcEltYWdlOjpCaXRt
YXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQot
ICAgICwgbV9zb3VyY2UodGhpcykKKyAgICAsIG1fc291cmNlKEltYWdlRnJhbWVDYWNoZTo6Y3Jl
YXRlKHRoaXMpKQogewogfQogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQ
dHImJiBpbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZl
cikKLSAgICAsIG1fc291cmNlKFdURk1vdmUoaW1hZ2UpKQorICAgICwgbV9zb3VyY2UoSW1hZ2VG
cmFtZUNhY2hlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpKQogewogfQogCkBAIC01OCw4ICs2MSw4
IEBAIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQogewogICAgIGludmFsaWRhdGVQbGF0Zm9y
bURhdGEoKTsKICAgICBjbGVhclRpbWVyKCk7Ci0gICAgbV9zb3VyY2UuY2xlYXJJbWFnZSgpOwot
ICAgIG1fc291cmNlLnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKKyAgICBtX3NvdXJjZS0+Y2xl
YXJJbWFnZSgpOworICAgIG1fc291cmNlLT5zdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCk7CiB9CiAK
IHZvaWQgQml0bWFwSW1hZ2U6OnVwZGF0ZUZyb21TZXR0aW5ncyhjb25zdCBTZXR0aW5ncyYgc2V0
dGluZ3MpCkBAIC03NCwyMCArNzcsMjIgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29k
ZWREYXRhKGJvbwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDog
JXMiLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogCiAgICAgaWYgKCFkZXN0cm95QWxsKQotICAgICAgICBtX3NvdXJjZS5kZXN0cm95RGVj
b2RlZERhdGFCZWZvcmVGcmFtZShtX2N1cnJlbnRGcmFtZSk7CisgICAgICAgIG1fc291cmNlLT5k
ZXN0cm95RGVjb2RlZERhdGFCZWZvcmVGcmFtZShtX2N1cnJlbnRGcmFtZSk7CiAgICAgZWxzZSBp
ZiAoIWNhbkRlc3Ryb3lEZWNvZGVkRGF0YSgpKQotICAgICAgICBtX3NvdXJjZS5kZXN0cm95QWxs
RGVjb2RlZERhdGFFeGNsdWRlRnJhbWUobV9jdXJyZW50RnJhbWUpOworICAgICAgICBtX3NvdXJj
ZS0+ZGVzdHJveUFsbERlY29kZWREYXRhRXhjbHVkZUZyYW1lKG1fY3VycmVudEZyYW1lKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgbV9zb3VyY2UuZGVzdHJveUFsbERlY29kZWREYXRhKCk7CisgICAg
ICAgIG1fc291cmNlLT5kZXN0cm95QWxsRGVjb2RlZERhdGEoKTsKICAgICAgICAgbV9jdXJyZW50
RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkOwogICAgIH0KIAog
ICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byB0aHJvdyBhd2F5IHRoZSBkZWNvZGVyIHVubGVzcyB3
ZSdyZSBleHBsaWNpdGx5IGFza2VkCiAgICAgLy8gdG8gZGVzdHJveSBhbGwgb2YgdGhlIGZyYW1l
cy4KLSAgICBpZiAoIWRlc3Ryb3lBbGwgfHwgbV9zb3VyY2UuaGFzQXN5bmNEZWNvZGluZ1F1ZXVl
KCkpCi0gICAgICAgIG1fc291cmNlLmNsZWFyRnJhbWVCdWZmZXJDYWNoZShtX2N1cnJlbnRGcmFt
ZSk7CisgICAgaWYgKGRlc3Ryb3lBbGwgJiYgIW1fc291cmNlLT5oYXNBc3luY0RlY29kaW5nUXVl
dWUoKSkKKyAgICAgICAgbV9zb3VyY2UtPnJlc2V0RGF0YShkYXRhKCkpOworI2lmICFVU0UoQ0cp
CiAgICAgZWxzZQotICAgICAgICBtX3NvdXJjZS5yZXNldERhdGEoZGF0YSgpKTsKKyAgICAgICAg
bV9zb3VyY2UtPmRlc3Ryb3lGcmFtZUJ1ZmZlckNhY2hlKG1fY3VycmVudEZyYW1lKTsKKyNlbmRp
ZgogCiAgICAgaW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwogfQpAQCAtOTksNyArMTA0LDcgQEAg
dm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZQogICAgIGlmICghZGF0YSgp
ICYmIGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc291cmNlLmRl
Y29kZWRTaXplKCkgPCBMYXJnZUFuaW1hdGlvbkN1dG9mZikKKyAgICBpZiAobV9zb3VyY2UtPmRl
Y29kZWRTaXplKCkgPCBMYXJnZUFuaW1hdGlvbkN1dG9mZikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgZGVzdHJveURlY29kZWREYXRhKGRlc3Ryb3lBbGwpOwpAQCAtMTA3LDExICsxMTIsMTEgQEAg
dm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZQogCiBFbmNvZGVkRGF0YVN0
YXR1cyBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0g
ICAgaWYgKG1fc291cmNlLmRlY29kZWRTaXplKCkgJiYgIWNhblVzZUFzeW5jRGVjb2RpbmdGb3JM
YXJnZUltYWdlcygpKQotICAgICAgICBtX3NvdXJjZS5kZXN0cm95SW5jb21wbGV0ZURlY29kZWRE
YXRhKCk7CisgICAgaWYgKG1fc291cmNlLT5kZWNvZGVkU2l6ZSgpICYmICFjYW5Vc2VBc3luY0Rl
Y29kaW5nRm9yTGFyZ2VJbWFnZXMoKSkKKyAgICAgICAgbV9zb3VyY2UtPmRlc3Ryb3lJbmNvbXBs
ZXRlRGVjb2RlZERhdGEoKTsKIAogICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBE
ZWNvZGluZ1N0YXR1czo6SW52YWxpZDsKLSAgICByZXR1cm4gbV9zb3VyY2UuZGF0YUNoYW5nZWQo
ZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHJldHVybiBtX3NvdXJjZS0+ZGF0YUNoYW5n
ZWQoZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogICAgIAogdm9pZCBCaXRtYXBJbWFnZTo6
c2V0Q3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXNJZk5lY2Vzc2FyeShEZWNvZGluZ1N0YXR1cyBk
ZWNvZGluZ1N0YXR1cykKQEAgLTEzMCw4ICsxMzUsMTIgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFw
SW1hZ2U6OmZyYW1lSW1hZ2VBdAogICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVz
IC0gJXAgLSB1cmw6ICVzIFtzdWJzYW1wbGluZ0xldmVsIHdhcyAlZCwgcmVzYW1wbGluZ10iLCBf
X0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0
YXRpY19jYXN0PGludD4oZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChpbmRleCkpKTsKICAg
ICAgICAgaW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwogICAgIH0KLQotICAgIHJldHVybiBtX3Nv
dXJjZS5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2
ZWwsIHRhcmdldENvbnRleHQpOworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBtX3NvdXJjZS0+c2V0
VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRh
cmdldENvbnRleHQpOworI2VuZGlmCisgICAgcmV0dXJuIG1fc291cmNlLT5mcmFtZUltYWdlQXRJ
bmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwogfQogCiBOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0
YXJnZXRDb250ZXh0KQpAQCAtMTg5LDcgKzE5OCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGkKICAgICBJbnRTaXplIHNpemVGb3JEcmF3aW5nID0gZXhwYW5kZWRJ
bnRTaXplKHNpemUoKSAqIHNjYWxlRmFjdG9yRm9yRHJhd2luZyk7CiAgICAgSW1hZ2VEcmF3UmVz
dWx0IHJlc3VsdCA9IEltYWdlRHJhd1Jlc3VsdDo6RGlkRHJhdzsKIAotICAgIG1fY3VycmVudFN1
YnNhbXBsaW5nTGV2ZWwgPSBtX2FsbG93U3Vic2FtcGxpbmcgPyBtX3NvdXJjZS5zdWJzYW1wbGlu
Z0xldmVsRm9yU2NhbGVGYWN0b3IoY29udGV4dCwgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKSA6IFN1
YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7CisgICAgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCA9
IG1fYWxsb3dTdWJzYW1wbGluZyA/IHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3Rvcihjb250
ZXh0LCBzY2FsZUZhY3RvckZvckRyYXdpbmcpIDogU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsK
ICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtzdWJzYW1w
bGluZ0xldmVsID0gJWQgc2NhbGVGYWN0b3JGb3JEcmF3aW5nID0gKCUuNGYsICUuNGYpXSIsIF9f
RlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsKSwgc2NhbGVGYWN0b3JGb3JE
cmF3aW5nLndpZHRoKCksIHNjYWxlRmFjdG9yRm9yRHJhd2luZy5oZWlnaHQoKSk7CiAKICAgICBO
YXRpdmVJbWFnZVB0ciBpbWFnZTsKQEAgLTIwNCw3ICsyMTMsNyBAQCBJbWFnZURyYXdSZXN1bHQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpCiAgICAgICAgIC8vIGl0IGlzIGN1cnJlbnRseSBiZWlu
ZyBkZWNvZGVkLiBOZXcgZGF0YSBtYXkgaGF2ZSBiZWVuIHJlY2VpdmVkIHNpbmNlIHRoZSBwcmV2
aW91cyByZXF1ZXN0IHdhcyBtYWRlLgogICAgICAgICBpZiAoKCFmcmFtZUlzQ29tcGF0aWJsZSAm
JiAhZnJhbWVJc0JlaW5nRGVjb2RlZCkgfHwgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9
PSBEZWNvZGluZ1N0YXR1czo6SW52YWxpZCkgewogICAgICAgICAgICAgTE9HKEltYWdlcywgIkJp
dG1hcEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBbcmVxdWVzdGluZyBsYXJnZSBhc3luYyBkZWNv
ZGluZ10iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgbV9zb3VyY2UucmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0
SW5kZXgobV9jdXJyZW50RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwsIHNpemVGb3JE
cmF3aW5nKTsKKyAgICAgICAgICAgIG1fc291cmNlLT5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5n
QXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgc2l6ZUZv
ckRyYXdpbmcpOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERl
Y29kaW5nU3RhdHVzOjpEZWNvZGluZzsKICAgICAgICAgfQogCkBAIC0yMzEsNyArMjQwLDcgQEAg
SW1hZ2VEcmF3UmVzdWx0IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaQogICAgICAgICAvLyBJZiB0
aGUgZGVjb2RpbmdNb2RlIGNoYW5nZXMgZnJvbSBhc3luY2hyb25vdXMgdG8gc3luY2hyb25vdXMg
YW5kIG5ldyBkYXRhIGlzIHJlY2VpdmVkLAogICAgICAgICAvLyB0aGUgY3VycmVudCBpbmNvbXBs
ZXRlIGRlY29kZWQgZnJhbWUgaGFzIHRvIGJlIGRlc3Ryb3llZC4KICAgICAgICAgaWYgKG1fY3Vy
cmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkludmFsaWQpCi0gICAg
ICAgICAgICBtX3NvdXJjZS5kZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7CisgICAgICAg
ICAgICBtX3NvdXJjZS0+ZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpOwogICAgICAgICAK
ICAgICAgICAgYm9vbCBmcmFtZUlzQ29tcGF0aWJsZSA9IGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUlt
YWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50
U3Vic2FtcGxpbmdMZXZlbCwgRGVjb2RpbmdPcHRpb25zKHNpemVGb3JEcmF3aW5nKSk7CiAgICAg
ICAgIGJvb2wgZnJhbWVJc0JlaW5nRGVjb2RlZCA9IGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0Nv
bXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgobV9jdXJyZW50RnJhbWUsIERlY29kaW5nTW9kZTo6
QXN5bmNocm9ub3VzKTsKQEAgLTMyNCwxMiArMzMzLDEyIEBAIGJvb2wgQml0bWFwSW1hZ2U6OmNh
bkFuaW1hdGUoKSBjb25zdAogCiBib29sIEJpdG1hcEltYWdlOjpjYW5Vc2VBc3luY0RlY29kaW5n
Rm9yTGFyZ2VJbWFnZXMoKSBjb25zdAogewotICAgIHJldHVybiAhY2FuQW5pbWF0ZSgpICYmIG1f
c291cmNlLmNhblVzZUFzeW5jRGVjb2RpbmcoKTsKKyAgICByZXR1cm4gIWNhbkFuaW1hdGUoKSAm
JiBtX3NvdXJjZS0+Y2FuVXNlQXN5bmNEZWNvZGluZygpOwogfQogCiBib29sIEJpdG1hcEltYWdl
OjpzaG91bGRVc2VBc3luY0RlY29kaW5nRm9yQW5pbWF0ZWRJbWFnZXMoKSBjb25zdAogewotICAg
IHJldHVybiBjYW5BbmltYXRlKCkgJiYgbV9hbGxvd0FuaW1hdGVkSW1hZ2VBc3luY0RlY29kaW5n
ICYmIChzaG91bGRVc2VBc3luY0RlY29kaW5nRm9yQW5pbWF0ZWRJbWFnZXNGb3JUZXN0aW5nKCkg
fHwgbV9zb3VyY2UuY2FuVXNlQXN5bmNEZWNvZGluZygpKTsKKyAgICByZXR1cm4gY2FuQW5pbWF0
ZSgpICYmIG1fYWxsb3dBbmltYXRlZEltYWdlQXN5bmNEZWNvZGluZyAmJiAoc2hvdWxkVXNlQXN5
bmNEZWNvZGluZ0ZvckFuaW1hdGVkSW1hZ2VzRm9yVGVzdGluZygpIHx8IG1fc291cmNlLT5jYW5V
c2VBc3luY0RlY29kaW5nKCkpOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpjbGVhclRpbWVyKCkK
QEAgLTM0NCwxMCArMzUzLDMwIEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0VGltZXIoU2Vjb25k
cyBkZWwKICAgICBtX2ZyYW1lVGltZXItPnN0YXJ0T25lU2hvdChkZWxheSk7CiB9CiAKK1N1YnNh
bXBsaW5nTGV2ZWwgQml0bWFwSW1hZ2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3IpCit7
CisjaWYgVVNFKENHKQorICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJh
d2luZyBpbnRvIFBERiBjb250ZXh0cy4KKyAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQo
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpCisgICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xl
dmVsOjpEZWZhdWx0OworCisgICAgZmxvYXQgc2NhbGUgPSBzdGQ6Om1pbihmbG9hdCgxKSwgc3Rk
OjptYXgoc2NhbGVGYWN0b3Iud2lkdGgoKSwgc2NhbGVGYWN0b3IuaGVpZ2h0KCkpKTsKKyAgICBp
ZiAoIShzY2FsZSA+IDAgJiYgc2NhbGUgPD0gMSkpCisgICAgICAgIHJldHVybiBTdWJzYW1wbGlu
Z0xldmVsOjpEZWZhdWx0OworCisgICAgaW50IHJlc3VsdCA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIo
MSAvIHNjYWxlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN1YnNhbXBsaW5nTGV2ZWw+KHN0
ZDo6bWluKHJlc3VsdCwgc3RhdGljX2Nhc3Q8aW50PihtX3NvdXJjZS0+bWF4aW11bVN1YnNhbXBs
aW5nTGV2ZWwoKSkpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIFVO
VVNFRF9QQVJBTShzY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRl
ZmF1bHQ7CisjZW5kaWYKK30KKwogYm9vbCBCaXRtYXBJbWFnZTo6Y2FuRGVzdHJveURlY29kZWRE
YXRhKCkKIHsKICAgICAvLyBBbmltYXRlZCBpbWFnZXMgc2hvdWxkIHByZXNlcnZlIHRoZSBjdXJy
ZW50IGZyYW1lIHRpbGwgdGhlIG5leHQgb25lIGZpbmlzaGVzIGRlY29kaW5nLgotICAgIGlmICht
X3NvdXJjZS5oYXNBc3luY0RlY29kaW5nUXVldWUoKSkKKyAgICBpZiAobV9zb3VyY2UtPmhhc0Fz
eW5jRGVjb2RpbmdRdWV1ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTbWFs
bCBpbWFnZSBzaG91bGQgYmUgZGVjb2RlZCBzeW5jaHJvbm91c2x5LiBEZWxldGluZyBpdHMgZGVj
b2RlZCBmcmFtZSBpcyBmaW5lLgpAQCAtMzc3LDcgKzQwNiw3IEBAIEJpdG1hcEltYWdlOjpTdGFy
dEFuaW1hdGlvblN0YXR1cyBCaXRtYXAKICAgICAgICAgLy8geWV0IGFuZCBvdXIgcmVwZXRpdGlv
biBjb3VudCBpcyBwb3RlbnRpYWxseSB1bnNldC4gVGhlIHJlcGV0aXRpb24gY291bnQKICAgICAg
ICAgLy8gaW4gYSBHSUYgY2FuIHBvdGVudGlhbGx5IGNvbWUgYWZ0ZXIgYWxsIHRoZSByZXN0IG9m
IHRoZSBpbWFnZSBkYXRhLCBzbwogICAgICAgICAvLyB3YWl0IG9uIGl0LgotICAgICAgICBpZiAo
IW1fc291cmNlLmlzQWxsRGF0YVJlY2VpdmVkKCkgJiYgcmVwZXRpdGlvbkNvdW50KCkgPT0gUmVw
ZXRpdGlvbkNvdW50T25jZSkKKyAgICAgICAgaWYgKCFtX3NvdXJjZS0+aXNBbGxEYXRhUmVjZWl2
ZWQoKSAmJiByZXBldGl0aW9uQ291bnQoKSA9PSBSZXBldGl0aW9uQ291bnRPbmNlKQogICAgICAg
ICAgICAgcmV0dXJuIFN0YXJ0QW5pbWF0aW9uU3RhdHVzOjpJbmNvbXBsZXRlRGF0YTsKIAogICAg
ICAgICArK21fcmVwZXRpdGlvbnNDb21wbGV0ZTsKQEAgLTM5Myw3ICs0MjIsNyBAQCBCaXRtYXBJ
bWFnZTo6U3RhcnRBbmltYXRpb25TdGF0dXMgQml0bWFwCiAgICAgfQogCiAgICAgLy8gRG9uJ3Qg
YWR2YW5jZSB0aGUgYW5pbWF0aW9uIHRvIGFuIGluY29tcGxldGUgZnJhbWUuCi0gICAgaWYgKCFt
X3NvdXJjZS5pc0FsbERhdGFSZWNlaXZlZCgpICYmICFmcmFtZUlzQ29tcGxldGVBdEluZGV4KG5l
eHRGcmFtZSkpCisgICAgaWYgKCFtX3NvdXJjZS0+aXNBbGxEYXRhUmVjZWl2ZWQoKSAmJiAhZnJh
bWVJc0NvbXBsZXRlQXRJbmRleChuZXh0RnJhbWUpKQogICAgICAgICByZXR1cm4gU3RhcnRBbmlt
YXRpb25TdGF0dXM6OkluY29tcGxldGVEYXRhOwogCiAgICAgTW9ub3RvbmljVGltZSB0aW1lID0g
TW9ub3RvbmljVGltZTo6bm93KCk7CkBAIC00MTMsMTQgKzQ0MiwxNCBAQCBCaXRtYXBJbWFnZTo6
U3RhcnRBbmltYXRpb25TdGF0dXMgQml0bWFwCiAgICAgICAgIGlmIChmcmFtZUhhc0RlY29kZWRO
YXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgobmV4dEZyYW1lLCBtX2N1cnJl
bnRTdWJzYW1wbGluZ0xldmVsLCB7IH0pKQogICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1h
cEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBbY2FjaGVkRnJhbWVDb3VudCA9ICVsZCBuZXh0RnJh
bWUgPSAlbGRdIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCArK21fY2FjaGVkRnJhbWVDb3VudCwgbmV4dEZyYW1lKTsKICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBtX3NvdXJjZS5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRl
eChuZXh0RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwpOworICAgICAgICAgICAgbV9z
b3VyY2UtPnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KG5leHRGcmFtZSwgbV9jdXJy
ZW50U3Vic2FtcGxpbmdMZXZlbCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZURlY29kaW5n
U3RhdHVzID0gRGVjb2RpbmdTdGF0dXM6OkRlY29kaW5nOwogICAgICAgICAgICAgTE9HKEltYWdl
cywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBbcmVxdWVzdGluZyBhc3luYyBkZWNv
ZGluZyBmb3IgbmV4dEZyYW1lID0gJWxkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJM
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbmV4dEZyYW1lKTsKICAgICAgICAgfQogCiAgICAg
ICAgIG1fZGVzaXJlZEZyYW1lRGVjb2RlVGltZUZvclRlc3RpbmcgPSB0aW1lICsgc3RkOjptYXgo
bV9mcmFtZURlY29kaW5nRHVyYXRpb25Gb3JUZXN0aW5nLCAwX3MpOwogICAgICAgICBpZiAobV9j
bGVhckRlY29kZXJBZnRlckFzeW5jRnJhbWVSZXF1ZXN0Rm9yVGVzdGluZykKLSAgICAgICAgICAg
IG1fc291cmNlLnJlc2V0RGF0YShkYXRhKCkpOworICAgICAgICAgICAgbV9zb3VyY2UtPnJlc2V0
RGF0YShkYXRhKCkpOwogICAgIH0KIAogICAgIEFTU0VSVCghbV9mcmFtZVRpbWVyKTsKQEAgLTQ4
Miw3ICs1MTEsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpzdG9wQW5pbWF0aW9uKCkKICAgICAvLyB0
aGUgdGltZXIgdW5sZXNzIGFsbCByZW5kZXJlcnMgaGF2ZSBzdG9wcGVkIGRyYXdpbmcuCiAgICAg
Y2xlYXJUaW1lcigpOwogICAgIGlmIChjYW5BbmltYXRlKCkpCi0gICAgICAgIG1fc291cmNlLnN0
b3BBc3luY0RlY29kaW5nUXVldWUoKTsKKyAgICAgICAgbV9zb3VyY2UtPnN0b3BBc3luY0RlY29k
aW5nUXVldWUoKTsKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6cmVzZXRBbmltYXRpb24oKQpAQCAt
NTE5LDggKzU0OCw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmltYWdlRnJhbWVBdmFpbGFibGVBdEkK
ICAgICB9CiAKICAgICBBU1NFUlQoaW5kZXggPT0gbV9jdXJyZW50RnJhbWUgJiYgIW1fY3VycmVu
dEZyYW1lKTsKLSAgICBpZiAobV9zb3VyY2UuaXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCkpCi0g
ICAgICAgIG1fc291cmNlLnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKKyAgICBpZiAobV9zb3Vy
Y2UtPmlzQXN5bmNEZWNvZGluZ1F1ZXVlSWRsZSgpKQorICAgICAgICBtX3NvdXJjZS0+c3RvcEFz
eW5jRGVjb2RpbmdRdWV1ZSgpOwogCiAgICAgRGVjb2RpbmdTdGF0dXMgZGVjb2RpbmdTdGF0dXMg
PSBmcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAgICAgc2V0Q3Vy
cmVudEZyYW1lRGVjb2RpbmdTdGF0dXNJZk5lY2Vzc2FyeShkZWNvZGluZ1N0YXR1cyk7CkBAIC01
NDQsNyArNTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgYwog
ICAgIGlmIChpc0FuaW1hdGVkKCkpCiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3VycmVudC1m
cmFtZSIsIG1fY3VycmVudEZyYW1lKTsKICAgICAKLSAgICBtX3NvdXJjZS5kdW1wKHRzKTsKKyAg
ICBtX3NvdXJjZS0+ZHVtcCh0cyk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksOSArMjksOSBAQAogCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2
ZXIuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3Vy
Y2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKICNpZiBVU0UoQ0cpIHx8IFVTRShBUFBLSVQp
CkBAIC03MSwzMSArNzEsMzEgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlP
cmlnaW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBFbmNvZGVkRGF0
YVN0YXR1cyBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkgb3ZlcnJpZGU7Ci0gICAg
dW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5kZWNvZGVkU2l6
ZSgpOyB9CisgICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZS0+ZGVjb2RlZFNpemUoKTsgfQogCi0gICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFT
dGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5lbmNvZGVkRGF0YVN0YXR1cygpOyB9Ci0g
ICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUNvdW50
KCk7IH0KLSAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2UucmVwZXRpdGlvbkNvdW50KCk7IH0KLSAgICBTdHJpbmcgdXRpKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UudXRpKCk7IH0KLSAgICBTdHJpbmcgZmlsZW5hbWVF
eHRlbnNpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS5maWxlbmFtZUV4dGVu
c2lvbigpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3BvdCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLmhvdFNwb3QoKTsgfQorICAgIEVuY29kZWREYXRhU3Rh
dHVzIGVuY29kZWREYXRhU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmVuY29kZWRE
YXRhU3RhdHVzKCk7IH0KKyAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlLT5mcmFtZUNvdW50KCk7IH0KKyAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlvbkNv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPnJlcGV0aXRpb25Db3VudCgpOyB9CisgICAg
U3RyaW5nIHV0aSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT51dGkoKTsgfQor
ICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
c291cmNlLT5maWxlbmFtZUV4dGVuc2lvbigpOyB9CisgICAgc3RkOjpvcHRpb25hbDxJbnRQb2lu
dD4gaG90U3BvdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT5ob3RTcG90KCk7
IH0KIAogICAgIC8vIEZsb2F0U2l6ZSBkdWUgdG8gb3ZlcnJpZGUuCi0gICAgRmxvYXRTaXplIHNp
emUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS5zaXplKCk7IH0KLSAgICBJbnRT
aXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5z
aXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7IH0KLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsgfQotICAgIGJvb2wgZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdp
dGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgZGVj
b2RpbmdPcHRpb25zKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUlzQmVpbmdEZWNvZGVk
QW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBkZWNvZGluZ09wdGlvbnMp
OyB9Ci0gICAgRGVjb2RpbmdTdGF0dXMgZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZURlY29kaW5nU3RhdHVzQXRJbmRl
eChpbmRleCk7IH0KKyAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fc291cmNlLT5zaXplKCk7IH0KKyAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigp
OyB9CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9zb3VyY2UtPnNpbmdsZVBpeGVsU29saWRDb2xvcigpOyB9CisgICAgYm9vbCBmcmFt
ZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCBp
bmRleCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlLT5mcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlv
bnNBdEluZGV4KGluZGV4LCBkZWNvZGluZ09wdGlvbnMpOyB9CisgICAgRGVjb2RpbmdTdGF0dXMg
ZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZS0+ZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoaW5kZXgpOyB9CiAgICAgYm9vbCBm
cmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gZnJhbWVE
ZWNvZGluZ1N0YXR1c0F0SW5kZXgoaW5kZXgpID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsg
fQotICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7IH0KKyAgICBib29sIGZy
YW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2Ut
PmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsgfQogCi0gICAgYm9vbCBmcmFtZUhhc0Z1bGxT
aXplTmF0aXZlSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsKSB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1h
Z2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQotICAgIGJvb2wgZnJhbWVIYXNE
ZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCBpbmRl
eCwgY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZl
bCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIHsgcmV0dXJuIG1fc291
cmNlLmZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRpb25zKTsgfQorICAgIGJvb2wg
ZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBs
aW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSGFzRnVs
bFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9CisgICAg
Ym9vbCBmcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5k
ZXgoc2l6ZV90IGluZGV4LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBz
dWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykg
eyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdp
dGhPcHRpb25zQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRpb25z
KTsgfQogCi0gICAgU3Vic2FtcGxpbmdMZXZlbCBmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVTdWJzYW1wbGluZ0xl
dmVsQXRJbmRleChpbmRleCk7IH0KKyAgICBTdWJzYW1wbGluZ0xldmVsIGZyYW1lU3Vic2FtcGxp
bmdMZXZlbEF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJh
bWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChpbmRleCk7IH0KIAotICAgIGZsb2F0IGZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVE
dXJhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmZyYW1l
T3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsgfQorICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdElu
ZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lRHVyYXRpb25B
dEluZGV4KGluZGV4KTsgfQorICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgoaW5kZXgpOyB9CiAKICAgICBzaXplX3QgY3VycmVudEZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJyZW50RnJhbWU7IH0KICAgICBib29sIGN1cnJlbnRGcmFtZUtub3duVG9C
ZU9wYXF1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFmcmFtZUhhc0FscGhhQXRJbmRleChj
dXJyZW50RnJhbWUoKSk7IH0KQEAgLTE0Miw3ICsxNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV0VC
Q09SRV9FWFBPUlQgQml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHImJiwgSW1hZ2VPYnNlcnZlciog
PSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVy
KiA9IG51bGxwdHIpOwogCi0gICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4KSB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUltYWdlQXRJbmRleChpbmRleCk7IH0K
KyAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIG1fc291cmNlLT5mcmFtZUltYWdlQXRJbmRleChpbmRleCk7IH0KICAgICBOYXRpdmVJbWFn
ZVB0ciBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1wbGluZ0xl
dmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9
IG51bGxwdHIpOwogCiAgICAgLy8gQ2FsbGVkIHRvIGludmFsaWRhdGUgY2FjaGVkIGRhdGEuIFdo
ZW4gfGRlc3Ryb3lBbGx8IGlzIHRydWUsIHdlIHdpcGUgb3V0CkBAIC0xNjUsNyArMTY1LDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgLy8gQW5pbWF0aW9uLgogICAgIGVudW0gY2xhc3MgU3RhcnRBbmlt
YXRpb25TdGF0dXMgeyBDYW5ub3RTdGFydCwgSW5jb21wbGV0ZURhdGEsIFRpbWVyQWN0aXZlLCBE
ZWNvZGluZ0FjdGl2ZSwgU3RhcnRlZCB9OwotICAgIGJvb2wgaXNBbmltYXRlZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLmZyYW1lQ291bnQoKSA+IDE7IH0KKyAgICBib29sIGlz
QW5pbWF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVDb3VudCgp
ID4gMTsgfQogICAgIGJvb2wgc2hvdWxkQW5pbWF0ZSgpIGNvbnN0OwogICAgIHZvaWQgc3RhcnRB
bmltYXRpb24oKSBvdmVycmlkZSB7IGludGVybmFsU3RhcnRBbmltYXRpb24oKTsgfQogICAgIFN0
YXJ0QW5pbWF0aW9uU3RhdHVzIGludGVybmFsU3RhcnRBbmltYXRpb24oKTsKQEAgLTE5NCw2ICsx
OTQsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJUaW1lcigpOwogICAg
IHZvaWQgc3RhcnRUaW1lcihTZWNvbmRzIGRlbGF5KTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1
YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFNpemUmIHNjYWxlRmFjdG9yKTsKICAgICBib29sIGNhbkRlc3Ryb3lEZWNvZGVkRGF0YSgpOwog
ICAgIHZvaWQgc2V0Q3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXNJZk5lY2Vzc2FyeShEZWNvZGlu
Z1N0YXR1cyk7CiAgICAgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQpAQCAtMjAyLDcgKzIwMyw3IEBAIHByaXZhdGU6CiAgICAgLy8gQW5pbWF0ZWQg
aW1hZ2VzIG92ZXIgYSBjZXJ0YWluIHNpemUgYXJlIGNvbnNpZGVyZWQgbGFyZ2UgZW5vdWdoIHRo
YXQgd2UnbGwgb25seSBoYW5nIG9uIHRvIG9uZSBmcmFtZSBhdCBhIHRpbWUuCiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIExhcmdlQW5pbWF0aW9uQ3V0b2ZmID0gMzAgKiAxMDE0ICogMTAyNDsK
IAotICAgIG11dGFibGUgSW1hZ2VTb3VyY2UgbV9zb3VyY2U7CisgICAgbXV0YWJsZSBSZWY8SW1h
Z2VGcmFtZUNhY2hlPiBtX3NvdXJjZTsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAg
fTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KICAgICBT
dWJzYW1wbGluZ0xldmVsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwgeyBTdWJzYW1wbGluZ0xl
dmVsOjpEZWZhdWx0IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDcgKzkyLDYgQEAgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMOwogY2xhc3Mg
SG9zdFdpbmRvdzsKIGNsYXNzIEltYWdlOwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBJbWFn
ZVNvdXJjZTsKIGNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRTaXpl
OwpAQCAtMTI0Niw3ICsxMjQ1LDYgQEAgcHVibGljOgogICAgICAgICBib29sIGV4dHJhY3RJbWFn
ZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUp
OwogCiAjaWYgVVNFKENBSVJPKQotICAgICAgICBJbWFnZVNvdXJjZSogbV9kZWNvZGVyOwogICAg
ICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2ltYWdlU3VyZmFjZTsKICNlbGlmIFVTRShD
RykKICAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fY2dJbWFnZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNw
cAkocmV2aXNpb24gMjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsMTAgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZShJ
bWFnZSogaW1hZ2UpCitJbWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZShJbWFnZSogaW1h
Z2UsIEFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBn
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgLCBt
X2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQorICAgICwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKIHsKIH0KIApAQCAtNzMsMjEgKzc1LDcy
IEBAIEltYWdlRnJhbWVDYWNoZTo6fkltYWdlRnJhbWVDYWNoZSgpCiAgICAgQVNTRVJUKCFoYXNB
c3luY0RlY29kaW5nUXVldWUoKSk7CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpzZXREZWNv
ZGVyKEltYWdlRGVjb2RlciogZGVjb2RlcikKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hlOjplbnN1cmVE
ZWNvZGVyQXZhaWxhYmxlKFNoYXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICBpZiAobV9kZWNvZGVy
ID09IGRlY29kZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEgfHwgaXNEZWNvZGVy
QXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9kZWNvZGVyID0gSW1h
Z2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb24pOworICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vIENoYW5naW5nIHRoZSBkZWNvZGVyIGhhcyB0byBzdG9wIHRo
ZSBkZWNvZGluZyB0aHJlYWQuIFRoZSBjdXJyZW50IGZyYW1lIHdpbGwKICAgICAvLyBjb250aW51
ZSBkZWNvZGluZyBzYWZlbHkgYmVjYXVzZSB0aGUgZGVjb2RpbmcgdGhyZWFkIGhhcyBpdHMgb3du
CiAgICAgLy8gcmVmZXJlbmNlIG9mIHRoZSBvbGQgZGVjb2Rlci4KICAgICBzdG9wQXN5bmNEZWNv
ZGluZ1F1ZXVlKCk7Ci0gICAgbV9kZWNvZGVyID0gZGVjb2RlcjsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBpZiAoIWRhdGEgfHwgIWVuc3VyZURlY29kZXJB
dmFpbGFibGUoZGF0YSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVjb2Rlci0+c2V0RGF0
YSgqZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAotSW1hZ2VEZWNvZGVyKiBJbWFnZUZyYW1l
Q2FjaGU6OmRlY29kZXIoKSBjb25zdAordm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnJlc2V0RGF0YShT
aGFyZWRCdWZmZXIqIGRhdGEpCiB7Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsKKyAgICBt
X2RlY29kZXIgPSBudWxscHRyOworICAgIHNldERhdGEoZGF0YSwgaXNBbGxEYXRhUmVjZWl2ZWQo
KSk7Cit9CisKK0VuY29kZWREYXRhU3RhdHVzIEltYWdlRnJhbWVDYWNoZTo6ZGF0YUNoYW5nZWQo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBzZXR0aW5nIHRvIGVuYWJs
ZS9kaXNhYmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgYW5kIG1ha2UgdGhpcworICAgIC8vIGNvZGUg
Y29uZGl0aW9uYWwgb24gaXQuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1n
dWFyZC4KKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGNodW5rTG9hZEludGVydmFsc1tdID0gezAs
IDEsIDMsIDYsIDE1fTsKKyAgICBkb3VibGUgaW50ZXJ2YWwgPSBjaHVua0xvYWRJbnRlcnZhbHNb
c3RkOjptaW4obV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50LCBzdGF0aWNfY2FzdDx1aW50MTZf
dD4oNCkpXTsKKworICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKKworICAgIC8vIFRoZSBm
aXJzdCB0aW1lIHRocm91Z2gsIHRoZSBjaHVuayB0aW1lIHdpbGwgYmUgMCBhbmQgdGhlIGltYWdl
IHdpbGwgZ2V0IGFuIHVwZGF0ZS4KKyAgICBpZiAoY3VycmVudFRpbWUoKSAtIG1fcHJvZ3Jlc3Np
dmVMb2FkQ2h1bmtUaW1lID4gaW50ZXJ2YWwpIHsKKyAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVl
OworICAgICAgICBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgICAgIEFTU0VSVChtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgPD0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MTZfdD46Om1heCgpKTsKKyAgICAgICAgKyttX3Byb2dyZXNzaXZlTG9hZENo
dW5rQ291bnQ7CisgICAgfQorCisgICAgaWYgKG5lZWRzVXBkYXRlIHx8IGFsbERhdGFSZWNlaXZl
ZCkKKyAgICAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworI2Vsc2UKKyAgICBz
ZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisjZW5kaWYKKworICAgIGNsZWFyTWV0YWRh
dGEoKTsKKyAgICBFbmNvZGVkRGF0YVN0YXR1cyBzdGF0dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygp
OworICAgIGlmIChzdGF0dXMgPCBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSkKKyAg
ICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIGdyb3dGcmFtZXMoKTsKKyAgICByZXR1cm4gc3Rh
dHVzOworfQorCitib29sIEltYWdlRnJhbWVDYWNoZTo6aXNBbGxEYXRhUmVjZWl2ZWQoKQorewor
ICAgIHJldHVybiBpc0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVjb2Rlci0+aXNBbGxEYXRhUmVj
ZWl2ZWQoKSA6IGZyYW1lQ291bnQoKTsKIH0KIAogdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OmRlc3Ry
b3lEZWNvZGVkRGF0YShzaXplX3QgZnJhbWVDb3VudCwgc2l6ZV90IGV4Y2x1ZGVGcmFtZSkKQEAg
LTExOSw2ICsxNzIsMTUgQEAgdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OmRlc3Ryb3lJbmNvbXBsZXRl
RAogICAgIGRlY29kZWRTaXplRGVjcmVhc2VkKGRlY29kZWRTaXplKTsKIH0KIAorI2lmICFVU0Uo
Q0cpCit2b2lkIEltYWdlRnJhbWVDYWNoZTo6ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90
IGJlZm9yZUZyYW1lKQoreworICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2RlY29kZXItPmRlc3Ryb3lGcmFtZUJ1ZmZlckNhY2hlKGJlZm9yZUZy
YW1lKTsKK30KKyNlbmRpZgorCiB2b2lkIEltYWdlRnJhbWVDYWNoZTo6ZGVjb2RlZFNpemVDaGFu
Z2VkKGxvbmcgbG9uZyBkZWNvZGVkU2l6ZSkKIHsKICAgICBpZiAoIWRlY29kZWRTaXplIHx8ICFt
X2ltYWdlIHx8ICFtX2ltYWdlLT5pbWFnZU9ic2VydmVyKCkpCkBAIC0yNzAsNiArMzMyLDE0IEBA
IFJlZjxXb3JrUXVldWU+IEltYWdlRnJhbWVDYWNoZTo6ZGVjb2RpbmcKICAgICByZXR1cm4gKm1f
ZGVjb2RpbmdRdWV1ZTsKIH0KIAorYm9vbCBJbWFnZUZyYW1lQ2FjaGU6OmNhblVzZUFzeW5jRGVj
b2RpbmcoKQoreworICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAvLyBGSVhNRTogZmlndXJlIG91dCB0aGUgYmVzdCBoZXVyaXN0aWMgZm9y
IGVuYWJsaW5nIGFzeW5jIGltYWdlIGRlY29kaW5nLgorICAgIHJldHVybiBzaXplKCkuYXJlYSgp
ICogc2l6ZW9mKFJHQkEzMikgPj0gKGZyYW1lQ291bnQoKSA+IDEgPyAxMDAgKiBLQiA6IDUwMCAq
IEtCKTsKK30KKwogdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnN0YXJ0QXN5bmNEZWNvZGluZ1F1ZXVl
KCkKIHsKICAgICBpZiAoaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkgfHwgIWlzRGVjb2RlckF2YWls
YWJsZSgpKQpAQCAtNDkxLDYgKzU2MSwyOSBAQCBDb2xvciBJbWFnZUZyYW1lQ2FjaGU6OnNpbmds
ZVBpeGVsU29saWRDCiAgICAgcmV0dXJuIGZyYW1lTWV0YWRhdGFBdEluZGV4Q2FjaGVJZk5lZWRl
ZDxDb2xvcj4oMCwgKCZJbWFnZUZyYW1lOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpLCAmbV9zaW5n
bGVQaXhlbFNvbGlkQ29sb3IsIEltYWdlRnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2Up
OwogfQogCitTdWJzYW1wbGluZ0xldmVsIEltYWdlRnJhbWVDYWNoZTo6bWF4aW11bVN1YnNhbXBs
aW5nTGV2ZWwoKQoreworICAgIGlmIChtX21heGltdW1TdWJzYW1wbGluZ0xldmVsKQorICAgICAg
ICByZXR1cm4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbC52YWx1ZSgpOworCisgICAgaWYgKCFp
c0RlY29kZXJBdmFpbGFibGUoKSB8fCAhbV9kZWNvZGVyLT5mcmFtZUFsbG93U3Vic2FtcGxpbmdB
dEluZGV4KDApKQorICAgICAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKKwor
ICAgIC8vIEZJWE1FOiB0aGlzIHZhbHVlIHdhcyBjaG9zZW4gdG8gYmUgYXBwcm9wcmlhdGUgZm9y
IGlPUyBzaW5jZSB0aGUgaW1hZ2UKKyAgICAvLyBzdWJzYW1wbGluZyBpcyBvbmx5IGVuYWJsZWQg
YnkgZGVmYXVsdCBvbiBpT1MuIENob29zZSBhIGRpZmZlcmVudCB2YWx1ZQorICAgIC8vIGlmIGlt
YWdlIHN1YnNhbXBsaW5nIGlzIGVuYWJsZWQgb24gb3RoZXIgcGxhdGZvcm0uCisgICAgY29uc3Qg
aW50IG1heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZyA9IDUgKiAxMDI0ICogMTAyNDsK
KyAgICBTdWJzYW1wbGluZ0xldmVsIGxldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6Rmlyc3Q7CisK
KyAgICBmb3IgKDsgbGV2ZWwgPCBTdWJzYW1wbGluZ0xldmVsOjpMYXN0OyArK2xldmVsKSB7Cisg
ICAgICAgIGlmIChmcmFtZVNpemVBdEluZGV4KDAsIGxldmVsKS5hcmVhKCkudW5zYWZlR2V0KCkg
PCBtYXhpbXVtSW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxpbmcpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsID0gbGV2ZWw7CisgICAgcmV0
dXJuIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwudmFsdWUoKTsKK30KKwogYm9vbCBJbWFnZUZy
YW1lQ2FjaGU6OmZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0
SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9u
cykKIHsKICAgICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKG1fZnJhbWVDb21taXRRdWV1ZS5iZWdp
bigpLCBtX2ZyYW1lQ29tbWl0UXVldWUuZW5kKCksIFtpbmRleCwgJmRlY29kaW5nT3B0aW9uc10o
Y29uc3QgSW1hZ2VGcmFtZVJlcXVlc3QmIGZyYW1lUmVxdWVzdCkgewpAQCAtNTQ0LDYgKzYzNywx
OSBAQCBJbWFnZU9yaWVudGF0aW9uIEltYWdlRnJhbWVDYWNoZTo6ZnJhbWVPCiAgICAgcmV0dXJu
IGZyYW1lTWV0YWRhdGFBdEluZGV4Q2FjaGVJZk5lZWRlZDxJbWFnZU9yaWVudGF0aW9uPihpbmRl
eCwgKCZJbWFnZUZyYW1lOjpvcmllbnRhdGlvbiksIG51bGxwdHIsIEltYWdlRnJhbWU6OkNhY2hp
bmc6Ok1ldGFkYXRhKTsKIH0KIAorI2lmIFVTRShESVJFQ1QyRCkKK3ZvaWQgSW1hZ2VGcmFtZUNh
Y2hlOjpzZXRUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4
dCkKK3sKKyAgICBpZiAoaXNEZWNvZGVyQXZhaWxhYmxlKCkgJiYgdGFyZ2V0Q29udGV4dCkKKyAg
ICAgICAgbV9kZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpKQorfQorI2VuZGlmCisKK05hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWVDYWNoZTo6
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1
YnNhbXBsaW5nTGV2ZWwpCit7CisgICAgcmV0dXJuIGlzRGVjb2RlckF2YWlsYWJsZSgpID8gbV9k
ZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkg
OiBudWxscHRyOworfQorCiBOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lQ2FjaGU6OmZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICByZXR1cm4gZnJhbWVNZXRhZGF0YUF0SW5k
ZXg8TmF0aXZlSW1hZ2VQdHI+KGluZGV4LCAoJkltYWdlRnJhbWU6Om5hdGl2ZUltYWdlKSk7CkBA
IC01NTQsNCArNjYwLDE2IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWVDYWNoZTo6ZnJhbWVJ
bWEKICAgICByZXR1cm4gZnJhbWVNZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVkPE5hdGl2ZUlt
YWdlUHRyPihpbmRleCwgKCZJbWFnZUZyYW1lOjpuYXRpdmVJbWFnZSksIG51bGxwdHIsIEltYWdl
RnJhbWU6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UsIHN1YnNhbXBsaW5nTGV2ZWwpOwogfQog
Cit2b2lkIEltYWdlRnJhbWVDYWNoZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykKK3sKKyAgICB0cy5k
dW1wUHJvcGVydHkoInR5cGUiLCBmaWxlbmFtZUV4dGVuc2lvbigpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoImZyYW1lLWNvdW50IiwgZnJhbWVDb3VudCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InJlcGV0aXRpb25zIiwgcmVwZXRpdGlvbkNvdW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c29saWQtY29sb3IiLCBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSk7CisKKyAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoMCk7CisgICAgaWYg
KG9yaWVudGF0aW9uICE9IE9yaWdpblRvcExlZnQpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
b3JpZW50YXRpb24iLCBvcmllbnRhdGlvbik7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oCShyZXZpc2lvbiAy
MjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2Fj
aGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TeW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmg+CiAjaW5jbHVk
ZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCwxMSArNDEsMTEgQEAgY2xhc3MgSW1hZ2VEZWNv
ZGVyOwogY2xhc3MgVVJMOwogCiBjbGFzcyBJbWFnZUZyYW1lQ2FjaGUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8SW1hZ2VGcmFtZUNhY2hlPiB7Ci0gICAgZnJpZW5kIGNsYXNzIEltYWdl
U291cmNlOworICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEltYWdlRnJhbWVDYWNoZT4gY3JlYXRlKEltYWdlKiBpbWFnZSkKKyAgICBzdGF0aWMg
UmVmPEltYWdlRnJhbWVDYWNoZT4gY3JlYXRlKEltYWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxw
aGFPcHRpb24gPSBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCwgR2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gPSBHYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbjo6QXBwbGllZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElt
YWdlRnJhbWVDYWNoZShpbWFnZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFn
ZUZyYW1lQ2FjaGUoaW1hZ2UsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bikpOwogICAgIH0KIAogICAgIHN0YXRpYyBSZWY8SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoTmF0
aXZlSW1hZ2VQdHImJiBuYXRpdmVJbWFnZSkKQEAgLTU0LDE0ICs1NSwxOSBAQCBwdWJsaWM6CiAK
ICAgICB+SW1hZ2VGcmFtZUNhY2hlKCk7CiAKLSAgICB2b2lkIHNldERlY29kZXIoSW1hZ2VEZWNv
ZGVyKik7Ci0gICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRE
YXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZvaWQg
cmVzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSk7CisgICAgRW5jb2RlZERhdGFTdGF0dXMgZGF0
YUNoYW5nZWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAg
Ym9vbCBpc0FsbERhdGFSZWNlaXZlZCgpOwogCiAgICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2RlY29kZWRTaXplOyB9CiAgICAgdm9pZCBkZXN0cm95QWxsRGVjb2Rl
ZERhdGEoKSB7IGRlc3Ryb3lEZWNvZGVkRGF0YShmcmFtZUNvdW50KCksIGZyYW1lQ291bnQoKSk7
IH0KICAgICB2b2lkIGRlc3Ryb3lBbGxEZWNvZGVkRGF0YUV4Y2x1ZGVGcmFtZShzaXplX3QgZXhj
bHVkZUZyYW1lKSB7IGRlc3Ryb3lEZWNvZGVkRGF0YShmcmFtZUNvdW50KCksIGV4Y2x1ZGVGcmFt
ZSk7IH0KICAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKHNpemVfdCBiZWZv
cmVGcmFtZSkgeyBkZXN0cm95RGVjb2RlZERhdGEoYmVmb3JlRnJhbWUsIGJlZm9yZUZyYW1lKTsg
fQogICAgIHZvaWQgZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpOworI2lmICFVU0UoQ0cp
CisgICAgdm9pZCBkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3JlRnJhbWUpOwor
I2VuZGlmCiAKICAgICB2b2lkIGdyb3dGcmFtZXMoKTsKICAgICB2b2lkIGNsZWFyTWV0YWRhdGEo
KTsKQEAgLTY5LDggKzc1LDkgQEAgcHVibGljOgogICAgIFVSTCBzb3VyY2VVUkwoKSBjb25zdDsK
IAogICAgIC8vIEFzeW5jaHJvbm91cyBpbWFnZSBkZWNvZGluZworICAgIGJvb2wgY2FuVXNlQXN5
bmNEZWNvZGluZygpOwogICAgIHZvaWQgc3RhcnRBc3luY0RlY29kaW5nUXVldWUoKTsKLSAgICB2
b2lkIHJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCwgY29uc3Qgc3RkOjpvcHRpb25hbDxJbnRTaXplPiYpOworICAgIHZvaWQgcmVxdWVzdEZy
YW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEludFNpemU+JiA9IHsgfSk7CiAgICAgdm9pZCBzdG9wQXN5bmNEZWNvZGlu
Z1F1ZXVlKCk7CiAgICAgYm9vbCBoYXNBc3luY0RlY29kaW5nUXVldWUoKSBjb25zdCB7IHJldHVy
biBtX2RlY29kaW5nUXVldWU7IH0KICAgICBib29sIGlzQXN5bmNEZWNvZGluZ1F1ZXVlSWRsZSgp
IGNvbnN0OwpAQCAtODgsOCArOTUsOCBAQCBwdWJsaWM6CiAgICAgLy8gSW1hZ2UgbWV0YWRhdGEg
d2hpY2ggaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBmaXJzdCBJbWFnZUZyYW1lLgogICAgIEludFNp
emUgc2l6ZSgpOwogICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOwotCiAg
ICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7CisgICAgU3Vic2FtcGxpbmdMZXZlbCBt
YXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpOwogCiAgICAgLy8gSW1hZ2VGcmFtZSBtZXRhZGF0YSB3
aGljaCBkb2VzIG5vdCByZXF1aXJlIGNhY2hpbmcgdGhlIEltYWdlRnJhbWUuCiAgICAgYm9vbCBm
cmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVf
dCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJik7CkBAIC0xMDYsMTEgKzExMywxNSBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFnZU9yaWVu
dGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCk7CiAKKyNpZiBVU0UoRElSRUNU
MkQpCisgICAgdm9pZCBzZXRUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCopOwor
I2VuZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90
LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiAgICAgTmF0
aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKLSAgICBOYXRpdmVJbWFnZVB0
ciBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
KTsKKyAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6
ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiAKIHBy
aXZhdGU6Ci0gICAgSW1hZ2VGcmFtZUNhY2hlKEltYWdlKik7CisgICAgSW1hZ2VGcmFtZUNhY2hl
KEltYWdlKiwgQWxwaGFPcHRpb24gPSBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCwgR2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24gPSBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGll
ZCk7CiAgICAgSW1hZ2VGcmFtZUNhY2hlKE5hdGl2ZUltYWdlUHRyJiYpOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgVCAoSW1hZ2VEZWNvZGVyOjoqZnVuY3RvcikoKSBjb25zdD4KQEAgLTEy
Miw2ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
Li4uIEFyZ3M+CiAgICAgVCBmcmFtZU1ldGFkYXRhQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90
LCBUIChJbWFnZUZyYW1lOjoqZnVuY3RvcikoKSBjb25zdCwgIHN0ZDo6b3B0aW9uYWw8VD4qIGNh
Y2hlZFZhbHVlLCBBcmdzJiYuLi4pOwogCisgICAgYm9vbCBlbnN1cmVEZWNvZGVyQXZhaWxhYmxl
KFNoYXJlZEJ1ZmZlciogZGF0YSk7CiAgICAgYm9vbCBpc0RlY29kZXJBdmFpbGFibGUoKSBjb25z
dCB7IHJldHVybiBtX2RlY29kZXI7IH0KICAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShzaXpl
X3QgZnJhbWVDb3VudCwgc2l6ZV90IGV4Y2x1ZGVGcmFtZSk7CiAgICAgdm9pZCBkZWNvZGVkU2l6
ZUNoYW5nZWQobG9uZyBsb25nIGRlY29kZWRTaXplKTsKQEAgLTEzOSwxMSArMTUxLDIxIEBAIHBy
aXZhdGU6CiAKICAgICBjb25zdCBJbWFnZUZyYW1lJiBmcmFtZUF0SW5kZXhDYWNoZUlmTmVlZGVk
KHNpemVfdCwgSW1hZ2VGcmFtZTo6Q2FjaGluZywgY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1w
bGluZ0xldmVsPiYgPSB7IH0pOwogCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpOwor
CiAgICAgSW1hZ2UqIG1faW1hZ2UgeyBudWxscHRyIH07CiAgICAgUmVmUHRyPEltYWdlRGVjb2Rl
cj4gbV9kZWNvZGVyOworICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRpb24geyBBbHBoYU9wdGlv
bjo6UHJlbXVsdGlwbGllZCB9OworICAgIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIG1fZ2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24geyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBw
bGllZCB9OworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhw
b3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHNvIHRo
YXQgd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TKS1ndWFyZC4KKyAgICBkb3VibGUgbV9w
cm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgeyAwIH07CisgICAgdWludDE2X3QgbV9wcm9ncmVzc2l2
ZUxvYWRDaHVua0NvdW50IHsgMCB9OworI2VuZGlmCisKICAgICB1bnNpZ25lZCBtX2RlY29kZWRT
aXplIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplIHsgMCB9Owot
CiAgICAgVmVjdG9yPEltYWdlRnJhbWUsIDE+IG1fZnJhbWVzOwogCiAgICAgLy8gQXN5bmNocm9u
b3VzIGltYWdlIGRlY29kaW5nLgpAQCAtMTc2LDYgKzE5OCw3IEBAIHByaXZhdGU6CiAgICAgc3Rk
OjpvcHRpb25hbDxJbnRTaXplPiBtX3NpemU7CiAgICAgc3RkOjpvcHRpb25hbDxJbnRTaXplPiBt
X3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gbV9z
aW5nbGVQaXhlbFNvbGlkQ29sb3I7CisgICAgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVs
PiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsOwogfTsKICAgICAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9u
IDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDEwLCAyMDExLCAyMDEyLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJA
Y29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxl
LCBJbmMKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0KLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJJbWFnZURlY29kZXJDRy5o
IgotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNs
dWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgotI2Vsc2UKLSNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlU291cmNl
OjpJbWFnZVNvdXJjZShOYXRpdmVJbWFnZVB0ciYmIG5hdGl2ZUltYWdlKQotICAgIDogbV9mcmFt
ZUNhY2hlKEltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSkKLXsK
LX0KLSAgICAKLUltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZSogaW1hZ2UsIEFscGhhT3B0
aW9uIGFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikKLSAgICA6IG1fZnJhbWVDYWNoZShJbWFnZUZyYW1lQ2FjaGU6OmNyZWF0
ZShpbWFnZSkpCi0gICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQotICAgICwgbV9nYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLXsKLX0K
LQotSW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCi17Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6
OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKLXsKLSAgICBp
ZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9kZWNvZGVy
LT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7Ci19Ci0KLWJvb2wgSW1h
Z2VTb3VyY2U6OmVuc3VyZURlY29kZXJBdmFpbGFibGUoU2hhcmVkQnVmZmVyKiBkYXRhKQotewot
ICAgIGlmICghZGF0YSB8fCBpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBtX2RlY29kZXIgPSBJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBo
YU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0gICAgaWYgKCFpc0RlY29k
ZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9mcmFtZUNhY2hl
LT5zZXREZWNvZGVyKG1fZGVjb2Rlci5nZXQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgSW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCogdGFyZ2V0Q29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKCFpc0Rl
Y29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRhcmdldENvbnRl
eHQpCi0gICAgICAgIG1fZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0
KTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKCFkYXRhIHx8ICFlbnN1cmVE
ZWNvZGVyQXZhaWxhYmxlKGRhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RlY29kZXIt
PnNldERhdGEoKmRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6
OnJlc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgbV9kZWNvZGVyID0gbnVsbHB0
cjsKLSAgICBtX2ZyYW1lQ2FjaGUtPnNldERlY29kZXIobnVsbHB0cik7Ci0gICAgc2V0RGF0YShk
YXRhLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKLX0KLQotRW5jb2RlZERhdGFTdGF0dXMgSW1hZ2VT
b3VyY2U6OmRhdGFDaGFuZ2VkKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3Nl
IGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIGFuZCBtYWtl
IHRoaXMKLSAgICAvLyBjb2RlIGNvbmRpdGlvbmFsIG9uIGl0LiBUaGVuIHdlIGNhbiByZW1vdmUg
dGhlIFBMQVRGT1JNKElPUyktZ3VhcmQuCi0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBjaHVua0xv
YWRJbnRlcnZhbHNbXSA9IHswLCAxLCAzLCA2LCAxNX07Ci0gICAgZG91YmxlIGludGVydmFsID0g
Y2h1bmtMb2FkSW50ZXJ2YWxzW3N0ZDo6bWluKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCwg
c3RhdGljX2Nhc3Q8dWludDE2X3Q+KDQpKV07Ci0KLSAgICBib29sIG5lZWRzVXBkYXRlID0gZmFs
c2U7Ci0KLSAgICAvLyBUaGUgZmlyc3QgdGltZSB0aHJvdWdoLCB0aGUgY2h1bmsgdGltZSB3aWxs
IGJlIDAgYW5kIHRoZSBpbWFnZSB3aWxsIGdldCBhbiB1cGRhdGUuCi0gICAgaWYgKGN1cnJlbnRU
aW1lKCkgLSBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA+IGludGVydmFsKSB7Ci0gICAgICAg
IG5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUg
PSBjdXJyZW50VGltZSgpOwotICAgICAgICBBU1NFUlQobV9wcm9ncmVzc2l2ZUxvYWRDaHVua0Nv
dW50IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSk7Ci0gICAgICAgICsr
bV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50OwotICAgIH0KLQotICAgIGlmIChuZWVkc1VwZGF0
ZSB8fCBhbGxEYXRhUmVjZWl2ZWQpCi0gICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKLSNlbHNlCi0gICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2VuZGlm
Ci0KLSAgICBtX2ZyYW1lQ2FjaGUtPmNsZWFyTWV0YWRhdGEoKTsKLSAgICBFbmNvZGVkRGF0YVN0
YXR1cyBzdGF0dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygpOwotICAgIGlmIChzdGF0dXMgPCBFbmNv
ZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSkKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLQot
ICAgIG1fZnJhbWVDYWNoZS0+Z3Jvd0ZyYW1lcygpOwotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0K
LWJvb2wgSW1hZ2VTb3VyY2U6OmlzQWxsRGF0YVJlY2VpdmVkKCkKLXsKLSAgICByZXR1cm4gaXNE
ZWNvZGVyQXZhaWxhYmxlKCkgPyBtX2RlY29kZXItPmlzQWxsRGF0YVJlY2VpdmVkKCkgOiBtX2Zy
YW1lQ2FjaGUtPmZyYW1lQ291bnQoKTsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6Y2FuVXNlQXN5
bmNEZWNvZGluZygpCi17Ci0gICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IHRoZSBiZXN0IGhldXJpc3Rp
YyBmb3IgZW5hYmxpbmcgYXN5bmMgaW1hZ2UgZGVjb2RpbmcuCi0gICAgcmV0dXJuIHNpemUoKS5h
cmVhKCkgKiBzaXplb2YoUkdCQTMyKSA+PSAoZnJhbWVDb3VudCgpID4gMSA/IDEwMCAqIEtCIDog
NTAwICogS0IpOwotfQotCi1TdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjptYXhpbXVtU3Vi
c2FtcGxpbmdMZXZlbCgpCi17Ci0gICAgaWYgKG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpCi0g
ICAgICAgIHJldHVybiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsLnZhbHVlKCk7Ci0KLSAgICBp
ZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpIHx8ICFtX2RlY29kZXItPmZyYW1lQWxsb3dTdWJzYW1w
bGluZ0F0SW5kZXgoMCkpCi0gICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0
OwotCi0gICAgLy8gRklYTUU6IHRoaXMgdmFsdWUgd2FzIGNob3NlbiB0byBiZSBhcHByb3ByaWF0
ZSBmb3IgaU9TIHNpbmNlIHRoZSBpbWFnZQotICAgIC8vIHN1YnNhbXBsaW5nIGlzIG9ubHkgZW5h
YmxlZCBieSBkZWZhdWx0IG9uIGlPUy4gQ2hvb3NlIGEgZGlmZmVyZW50IHZhbHVlCi0gICAgLy8g
aWYgaW1hZ2Ugc3Vic2FtcGxpbmcgaXMgZW5hYmxlZCBvbiBvdGhlciBwbGF0Zm9ybS4KLSAgICBj
b25zdCBpbnQgbWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nID0gNSAqIDEwMjQgKiAx
MDI0OwotICAgIFN1YnNhbXBsaW5nTGV2ZWwgbGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpGaXJz
dDsKLQotICAgIGZvciAoOyBsZXZlbCA8IFN1YnNhbXBsaW5nTGV2ZWw6Okxhc3Q7ICsrbGV2ZWwp
IHsKLSAgICAgICAgaWYgKGZyYW1lU2l6ZUF0SW5kZXgoMCwgbGV2ZWwpLmFyZWEoKS51bnNhZmVH
ZXQoKSA8IG1heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZykKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBsZXZlbDsKLSAg
ICByZXR1cm4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbC52YWx1ZSgpOwotfQotCi1TdWJzYW1w
bGluZ0xldmVsIEltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGVGYWN0b3IoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIHNjYWxlRmFjdG9yKQotewot
I2lmIFVTRShDRykKLSAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdp
bmcgaW50byBQREYgY29udGV4dHMuCi0gICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAgICAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZl
bDo6RGVmYXVsdDsKLQotICAgIGZsb2F0IHNjYWxlID0gc3RkOjptaW4oZmxvYXQoMSksIHN0ZDo6
bWF4KHNjYWxlRmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9yLmhlaWdodCgpKSk7Ci0gICAgaWYg
KCEoc2NhbGUgPiAwICYmIHNjYWxlIDw9IDEpKQotICAgICAgICByZXR1cm4gU3Vic2FtcGxpbmdM
ZXZlbDo6RGVmYXVsdDsKLQotICAgIGludCByZXN1bHQgPSBzdGQ6OmNlaWwoc3RkOjpsb2cyKDEg
LyBzY2FsZSkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdWJzYW1wbGluZ0xldmVsPihzdGQ6
Om1pbihyZXN1bHQsIHN0YXRpY19jYXN0PGludD4obWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKSkp
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwotICAgIFVOVVNFRF9QQVJBTShz
Y2FsZUZhY3Rvcik7Ci0gICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7Ci0jZW5k
aWYKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKQotewot
ICAgIHJldHVybiBpc0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVjb2Rlci0+Y3JlYXRlRnJhbWVJ
bWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0cjsKLX0KLQotTmF0
aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChz
aXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQotewotICAgIHNldERlY29kZXJUYXJnZXRDb250
ZXh0KHRhcmdldENvbnRleHQpOwotICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSW1hZ2VB
dEluZGV4Q2FjaGVJZk5lZWRlZChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci19Ci0KLXZvaWQg
SW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJ0eXBlIiwgZmlsZW5hbWVFeHRlbnNpb24oKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJmcmFt
ZS1jb3VudCIsIGZyYW1lQ291bnQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZXBldGl0aW9u
cyIsIHJlcGV0aXRpb25Db3VudCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNvbGlkLWNvbG9y
Iiwgc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkpOwotCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBvcmll
bnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KDApOwotICAgIGlmIChvcmllbnRhdGlv
biAhPSBPcmlnaW5Ub3BMZWZ0KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9yaWVudGF0aW9u
Iiwgb3JpZW50YXRpb24pOwotfQotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4LCAyMDEwLCAyMDEyLCAyMDE0LCAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1hZ2VGcmFtZS5oIgotI2lu
Y2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgotI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIK
LSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCi0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW1hZ2VE
ZWNvZGVyOwotY2xhc3MgSW1hZ2VPcmllbnRhdGlvbjsKLWNsYXNzIEludFBvaW50OwotY2xhc3Mg
SW50U2l6ZTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotY2xhc3MgSW1hZ2VTb3VyY2UgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKLSAgICBmcmllbmQgY2xhc3MgQml0
bWFwSW1hZ2U7Ci1wdWJsaWM6Ci0gICAgSW1hZ2VTb3VyY2UoTmF0aXZlSW1hZ2VQdHImJik7Ci0g
ICAgSW1hZ2VTb3VyY2UoSW1hZ2UqLCBBbHBoYU9wdGlvbiA9IEFscGhhT3B0aW9uOjpQcmVtdWx0
aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uOjpBcHBsaWVkKTsKLSAgICB+SW1hZ2VTb3VyY2UoKTsKLQotICAgIHZvaWQgZGVzdHJv
eUFsbERlY29kZWREYXRhKCkgeyBtX2ZyYW1lQ2FjaGUtPmRlc3Ryb3lBbGxEZWNvZGVkRGF0YSgp
OyB9Ci0gICAgdm9pZCBkZXN0cm95QWxsRGVjb2RlZERhdGFFeGNsdWRlRnJhbWUoc2l6ZV90IGV4
Y2x1ZGVGcmFtZSkgeyBtX2ZyYW1lQ2FjaGUtPmRlc3Ryb3lBbGxEZWNvZGVkRGF0YUV4Y2x1ZGVG
cmFtZShleGNsdWRlRnJhbWUpOyB9Ci0gICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGFCZWZvcmVG
cmFtZShzaXplX3QgYmVmb3JlRnJhbWUpIHsgbV9mcmFtZUNhY2hlLT5kZXN0cm95RGVjb2RlZERh
dGFCZWZvcmVGcmFtZShiZWZvcmVGcmFtZSk7IH0KLSAgICB2b2lkIGRlc3Ryb3lJbmNvbXBsZXRl
RGVjb2RlZERhdGEoKSB7IG1fZnJhbWVDYWNoZS0+ZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0
YSgpOyB9Ci0gICAgdm9pZCBjbGVhckltYWdlKCkgeyBtX2ZyYW1lQ2FjaGUtPmNsZWFySW1hZ2Uo
KTsgfQotICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCk7Ci0KLSAgICBib29s
IGVuc3VyZURlY29kZXJBdmFpbGFibGUoU2hhcmVkQnVmZmVyKik7Ci0gICAgYm9vbCBpc0RlY29k
ZXJBdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KLQotICAgIHZv
aWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLSAg
ICB2b2lkIHJlc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpOwotICAgIEVuY29kZWREYXRhU3Rh
dHVzIGRhdGFDaGFuZ2VkKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OwotCi0gICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQ2Fj
aGUtPmRlY29kZWRTaXplKCk7IH0KLSAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCk7Ci0KLSAg
ICBib29sIGNhblVzZUFzeW5jRGVjb2RpbmcoKTsKLSAgICB2b2lkIHJlcXVlc3RGcmFtZUFzeW5j
RGVjb2RpbmdBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
Z0xldmVsLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEludFNpemU+JiBzaXplRm9yRHJhd2luZyA9IHsg
fSkgeyBtX2ZyYW1lQ2FjaGUtPnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KGluZGV4
LCBzdWJzYW1wbGluZ0xldmVsLCBzaXplRm9yRHJhd2luZyk7IH0KLSAgICBib29sIGhhc0FzeW5j
RGVjb2RpbmdRdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+aGFzQXN5bmNEZWNv
ZGluZ1F1ZXVlKCk7IH0KLSAgICBib29sIGlzQXN5bmNEZWNvZGluZ1F1ZXVlSWRsZSgpIGNvbnN0
ICB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmlzQXN5bmNEZWNvZGluZ1F1ZXVlSWRsZSgpOyB9Ci0g
ICAgdm9pZCBzdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCkgeyBtX2ZyYW1lQ2FjaGUtPnN0b3BBc3lu
Y0RlY29kaW5nUXVldWUoKTsgfQotCi0gICAgLy8gSW1hZ2UgbWV0YWRhdGEgd2hpY2ggaXMgY2Fs
Y3VsYXRlZCBieSB0aGUgZGVjb2RlciBvciBjYW4gZGVkdWNlZCBieSB0aGUgY2FzZSBvZiB0aGUg
bWVtb3J5IE5hdGl2ZUltYWdlLgotICAgIEVuY29kZWREYXRhU3RhdHVzIGVuY29kZWREYXRhU3Rh
dHVzKCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5lbmNvZGVkRGF0YVN0YXR1cygpOyB9Ci0gICAg
c2l6ZV90IGZyYW1lQ291bnQoKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lQ291bnQoKTsg
fQotICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSB7IHJldHVybiBtX2ZyYW1l
Q2FjaGUtPnJlcGV0aXRpb25Db3VudCgpOyB9Ci0gICAgU3RyaW5nIHV0aSgpIHsgcmV0dXJuIG1f
ZnJhbWVDYWNoZS0+dXRpKCk7IH0KLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSB7IHJl
dHVybiBtX2ZyYW1lQ2FjaGUtPmZpbGVuYW1lRXh0ZW5zaW9uKCk7IH0KLSAgICBzdGQ6Om9wdGlv
bmFsPEludFBvaW50PiBob3RTcG90KCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5ob3RTcG90KCk7
IH0KLQotICAgIC8vIEltYWdlIG1ldGFkYXRhIHdoaWNoIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUg
Zmlyc3QgSW1hZ2VGcmFtZS4KLSAgICBJbnRTaXplIHNpemUoKSB7IHJldHVybiBtX2ZyYW1lQ2Fj
aGUtPnNpemUoKTsgfQotICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIHsg
cmV0dXJuIG1fZnJhbWVDYWNoZS0+c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOyB9Ci0gICAg
Q29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5zaW5n
bGVQaXhlbFNvbGlkQ29sb3IoKTsgfQotCi0gICAgLy8gSW1hZ2VGcmFtZSBtZXRhZGF0YSB3aGlj
aCBkb2VzIG5vdCByZXF1aXJlIGNhY2hpbmcgdGhlIEltYWdlRnJhbWUuCi0gICAgYm9vbCBmcmFt
ZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCBp
bmRleCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIHsgcmV0dXJuIG1f
ZnJhbWVDYWNoZS0+ZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25z
QXRJbmRleChpbmRleCwgZGVjb2RpbmdPcHRpb25zKTsgfQotICAgIERlY29kaW5nU3RhdHVzIGZy
YW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNh
Y2hlLT5mcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChpbmRleCk7IH0KLSAgICBib29sIGZyYW1l
SGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFt
ZUhhc0FscGhhQXRJbmRleChpbmRleCk7IH0KLSAgICBib29sIGZyYW1lSGFzSW1hZ2VBdEluZGV4
KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUhhc0ltYWdlQXRJbmRl
eChpbmRleCk7IH0KLSAgICBib29sIGZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgo
c2l6ZV90IGluZGV4LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJz
YW1wbGluZ0xldmVsKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSGFzRnVsbFNpemVOYXRp
dmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9Ci0gICAgYm9vbCBmcmFt
ZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90
IGluZGV4LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGlu
Z0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgeyByZXR1cm4g
bV9mcmFtZUNhY2hlLT5mcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0
aW9uc0F0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGRlY29kaW5nT3B0aW9ucyk7IH0K
LSAgICBTdWJzYW1wbGluZ0xldmVsIGZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5kZXgoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5k
ZXgoaW5kZXgpOyB9Ci0KLSAgICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNoIGZvcmNlcyBj
YWNoaW5nIG9yIHJlLWNhY2hpbmcgdGhlIEltYWdlRnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNp
emVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
ID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFt
ZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQotICAgIHVuc2lnbmVkIGZy
YW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGlu
Z0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCkgeyByZXR1cm4gbV9mcmFtZUNhY2hl
LT5mcmFtZUJ5dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7IH0KLSAgICBmbG9h
dCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNo
ZS0+ZnJhbWVEdXJhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBm
cmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNo
ZS0+ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0KLSAgICBOYXRpdmVJbWFnZVB0
ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+
ZnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFn
ZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBs
aW5nTGV2ZWw6OkRlZmF1bHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKLQot
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKTsKLSAgICBTdWJz
YW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlRmFjdG9yKTsKLSAgICBOYXRpdmVJbWFnZVB0ciBj
cmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1w
bGluZ0xldmVsOjpEZWZhdWx0KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0
U3RyZWFtJik7Ci0KLSAgICB2b2lkIHNldERlY29kZXJUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dCopOwotCi0gICAgUmVmPEltYWdlRnJhbWVDYWNoZT4gbV9mcmFtZUNhY2hlOwot
ICAgIFJlZlB0cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
U3Vic2FtcGxpbmdMZXZlbD4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbDsKLQotI2lmIFBMQVRG
T1JNKElPUykKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5h
YmxlL2Rpc2FibGUgcHJvZ3Jlc3NpdmUgbG9hZGluZyBzbyB0aGF0IHdlIGNhbiByZW1vdmUgdGhl
IFBMQVRGT1JNKElPUyktZ3VhcmQuCi0gICAgZG91YmxlIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtU
aW1lIHsgMCB9OwotICAgIHVpbnQxNl90IG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCB7IDAg
fTsKLSNlbmRpZgotCi0gICAgQWxwaGFPcHRpb24gbV9hbHBoYU9wdGlvbiB7IEFscGhhT3B0aW9u
OjpQcmVtdWx0aXBsaWVkIH07Ci0gICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbiB7IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBs
aWVkIH07Ci19OwotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0M0RDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAJKHJldmlzaW9uIDIyMDc0
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dDNEQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVk
ZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVk
ZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCkBA
IC0yNjMsOCArMjYzLDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgp
CiAKIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkK
IHsKLSAgICBpZiAobV9kZWNvZGVyKQotICAgICAgICBkZWxldGUgbV9kZWNvZGVyOwogfQogCiBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKQEAgLTI3
NCwxOSArMjcyLDE0IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjoK
ICAgICAvLyBXZSBuZWVkIHRoaXMgdG8gc3RheSBpbiBzY29wZSBiZWNhdXNlIHRoZSBuYXRpdmUg
aW1hZ2UgaXMganVzdCBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGF0YS4KICAgICBBbHBoYU9wdGlv
biBhbHBoYU9wdGlvbiA9IHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wdGlvbjo6UHJlbXVsdGlw
bGllZCA6IEFscGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBsaWVkOwogICAgIEdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uID0gaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUgPyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6SWdub3JlZCA6IEdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkOwotICAgIG1fZGVjb2RlciA9IG5ldyBJbWFn
ZVNvdXJjZShudWxscHRyLCBhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
OwotICAgIAotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBJbWFnZVNvdXJjZSYgZGVjb2RlciA9ICptX2RlY29kZXI7CisgICAgYXV0byBkZWNvZGVyID0g
SW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUobnVsbHB0ciwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKTsKICAgICBtX2FscGhhT3AgPSBBbHBoYURvTm90aGluZzsKIAogICAg
IGlmIChtX2ltYWdlLT5kYXRhKCkpIHsKLSAgICAgICAgZGVjb2Rlci5zZXREYXRhKG1faW1hZ2Ut
PmRhdGEoKSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5mcmFtZUNvdW50KCkpCisgICAg
ICAgIGRlY29kZXItPnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKKyAgICAgICAgaWYg
KCFkZWNvZGVyLT5mcmFtZUNvdW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIG1faW1hZ2VTdXJmYWNlID0gZGVjb2Rlci5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsK
KyAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBkZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRl
eCgwKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIC8vIDEuIEZvciB0ZXhJbWFnZTJE
IHdpdGggSFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJlbXVsdGlwbHlBbHBoYSBo
YWQgYmVlbiBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhGRiBmb3IgZWFjaCBwaXhl
bCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dDNEQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzI3LDEyICszMjcsMTIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VFeHRyYWN0b3I6OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBoYXNB
bHBoYSA9ICFtX2ltYWdlLT5jdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKTsKICAgICBpZiAo
KGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJlbXVsdGlwbHlB
bHBoYSkpICYmIG1faW1hZ2UtPmRhdGEoKSkgewotICAgICAgICBJbWFnZVNvdXJjZSBkZWNvZGVy
KG51bGxwdHIsIEFscGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBsaWVkLCBpZ25vcmVHYW1tYUFuZENv
bG9yUHJvZmlsZSA/IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpJZ25vcmVkIDogR2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQpOwotICAgICAgICBkZWNvZGVyLnNldERhdGEo
bV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQo
KSkKKyAgICAgICAgYXV0byBkZWNvZGVyID0gSW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUobnVsbHB0
ciwgQWxwaGFPcHRpb246Ok5vdFByZW11bHRpcGxpZWQsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbjo6QXBwbGllZCk7CisgICAgICAgIGRlY29kZXItPnNldERhdGEobV9pbWFn
ZS0+ZGF0YSgpLCB0cnVlKTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5mcmFtZUNvdW50KCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV9kZWNvZGVkSW1hZ2UgPSBkZWNv
ZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOworICAgICAgICBtX2RlY29kZWRJbWFnZSA9
IGRlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOwogICAgICAgICBtX2NnSW1hZ2Ug
PSBtX2RlY29kZWRJbWFnZTsKICAgICB9IGVsc2UKICAgICAgICAgbV9jZ0ltYWdlID0gbV9pbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaAkocmV2aXNpb24g
MjIwNzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNv
ZGVyQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOCArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciYsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAg
ICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbERhdGFSZWNl
aXZlZDsgfQotICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkgeyB9Ci0gICAg
CisKIHByb3RlY3RlZDoKICAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQgeyBmYWxzZSB9Owog
ICAgIFJldGFpblB0cjxDR0ltYWdlU291cmNlUmVmPiBtX25hdGl2ZURlY29kZXI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VD
Ry5oCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNp
Zm5kZWYgSW1hZ2VTb3VyY2VDR19oCiAjZGVmaW5lIEltYWdlU291cmNlQ0dfaAogCi0jaW5jbHVk
ZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VEZWNvZGVyRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkocmV2aXNpb24gMjIwNzQ3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVj
dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKQEAgLTcyLDcgKzcxLDYgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXImLCBib29sIGFsbERh
dGFSZWNlaXZlZCk7CiAgICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KLSAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShz
aXplX3QpIHsgfQogCiAgICAgdm9pZCBzZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVyVGFyZ2V0
Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTkyLDcgKzE5Miw3IEBAIHB1YmxpYzoKICAgICAvLyBDbGVhcnMgZGVjb2RlZCBwaXhlbCBk
YXRhIGZyb20gYmVmb3JlIHRoZSBwcm92aWRlZCBmcmFtZSB1bmxlc3MgdGhhdAogICAgIC8vIGRh
dGEgbWF5IGJlIG5lZWRlZCB0byBkZWNvZGUgZnV0dXJlIGZyYW1lcyAoZS5nLiBkdWUgdG8gR0lG
IGZyYW1lCiAgICAgLy8gY29tcG9zaXRpbmcpLgotICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUZyYW1lQnVm
ZmVyQ2FjaGUoc2l6ZV90KSB7IH0KIAogICAgIC8vIElmIHRoZSBpbWFnZSBoYXMgYSBjdXJzb3Ig
aG90LXNwb3QsIHN0b3JlcyBpdCBpbiB0aGUgYXJndW1lbnQKICAgICAvLyBhbmQgcmV0dXJucyB0
cnVlLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuY3BwCShyZXZpc2lvbiAyMjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAs
MTAgKzcwLDEwIEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb24KIAog
UmVwZXRpdGlvbkNvdW50IEdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QK
IHsKLSAgICAvLyBUaGlzIHZhbHVlIGNhbiBhcnJpdmUgYXQgYW55IHBvaW50IGluIHRoZSBpbWFn
ZSBkYXRhIHN0cmVhbS4gIE1vc3QgR0lGcworICAgIC8vIFRoaXMgdmFsdWUgY2FuIGFycml2ZSBh
dCBhbnkgcG9pbnQgaW4gdGhlIGltYWdlIGRhdGEgc3RyZWFtLiBNb3N0IEdJRnMKICAgICAvLyBp
biB0aGUgd2lsZCBkZWNsYXJlIGl0IG5lYXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgc28g
aXQgdXN1YWxseSBpcwogICAgIC8vIHNldCBieSB0aGUgdGltZSB3ZSd2ZSBkZWNvZGVkIHRoZSBz
aXplLCBidXQgKGRlcGVuZGluZyBvbiB0aGUgR0lGIGFuZCB0aGUKLSAgICAvLyBwYWNrZXRzIHNl
bnQgYmFjayBieSB0aGUgd2Vic2VydmVyKSBub3QgYWx3YXlzLiAgSWYgdGhlIHJlYWRlciBoYXNu
J3QKKyAgICAvLyBwYWNrZXRzIHNlbnQgYmFjayBieSB0aGUgd2Vic2VydmVyKSBub3QgYWx3YXlz
LiBJZiB0aGUgcmVhZGVyIGhhc24ndAogICAgIC8vIHNlZW4gYSBsb29wIGNvdW50IHlldCwgaXQg
d2lsbCByZXR1cm4gY0xvb3BDb3VudE5vdFNlZW4sIGluIHdoaWNoIGNhc2Ugd2UKICAgICAvLyBz
aG91bGQgZGVmYXVsdCB0byBsb29waW5nIG9uY2UgKHRoZSBpbml0aWFsIHZhbHVlIGZvcgogICAg
IC8vIHxtX3JlcGV0aXRpb25Db3VudHwpLgpAQCAtODEsMTIgKzgxLDEyIEBAIFJlcGV0aXRpb25D
b3VudCBHSUZJbWFnZURlY29kZXI6OnJlcGV0aXQKICAgICAvLyBUaGVyZSBhcmUgc29tZSBhZGRp
dGlvbmFsIHdyaW5rbGVzIGhlcmUuIEZpcnN0LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKQogICAgIC8v
IG1heSBkZXN0cm95IHRoZSByZWFkZXIsIG1ha2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRl
ciBfbGVzc18KICAgICAvLyBhdXRob3JpdGF0aXZlIG9uIGZ1dHVyZSBjYWxscyBpZiB0aGUgcmVj
cmVhdGVkIHJlYWRlciBoYXNuJ3Qgc2VlbiB0aGUKLSAgICAvLyBsb29wIGNvdW50LiAgV2UgZG9u
J3QgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhpcyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUKKyAg
ICAvLyBsb29wIGNvdW50LiBXZSBkb24ndCBuZWVkIHRvIHNwZWNpYWwtY2FzZSB0aGlzIGJlY2F1
c2UgaW4gdGhpcyBjYXNlIHRoZQogICAgIC8vIG5ldyByZWFkZXIgd2lsbCBvbmNlIGFnYWluIHJl
dHVybiBjTG9vcENvdW50Tm90U2VlbiwgYW5kIHdlIHdvbid0CiAgICAgLy8gb3ZlcndyaXRlIHRo
ZSBjYWNoZWQgY29ycmVjdCB2YWx1ZS4KICAgICAvLwogICAgIC8vIFNlY29uZCwgYSBHSUYgbWln
aHQgbmV2ZXIgc2V0IGEgbG9vcCBjb3VudCBhdCBhbGwsIGluIHdoaWNoIGNhc2Ugd2UKLSAgICAv
LyBzaG91bGQgY29udGludWUgdG8gdHJlYXQgaXQgYXMgYSAibG9vcCBvbmNlIiBhbmltYXRpb24u
ICBXZSBkb24ndCBuZWVkCisgICAgLy8gc2hvdWxkIGNvbnRpbnVlIHRvIHRyZWF0IGl0IGFzIGEg
Imxvb3Agb25jZSIgYW5pbWF0aW9uLiBXZSBkb24ndCBuZWVkCiAgICAgLy8gc3BlY2lhbCBjb2Rl
IGhlcmUgZWl0aGVyLCBiZWNhdXNlIGluIHRoaXMgY2FzZSB3ZSdsbCBuZXZlciBjaGFuZ2UKICAg
ICAvLyB8bV9yZXBldGl0aW9uQ291bnR8IGZyb20gaXRzIGRlZmF1bHQgdmFsdWUuCiAgICAgLy8K
QEAgLTExOCw3ICsxMTgsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKTsKIH0KIAotdm9pZCBHSUZJbWFnZURl
Y29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3Zv
aWQgR0lGSW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3Jl
RnJhbWUpCiB7CiAgICAgLy8gSW4gc29tZSBjYXNlcywgbGlrZSBpZiB0aGUgZGVjb2RlciB3YXMg
ZGVzdHJveWVkIHdoaWxlIGFuaW1hdGluZywgd2UKICAgICAvLyBjYW4gYmUgYXNrZWQgdG8gY2xl
YXIgbW9yZSBmcmFtZXMgdGhhbiB3ZSBjdXJyZW50bHkgaGF2ZS4KQEAgLTEyOSwzMCArMTI5LDMw
IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2EKICAgICAvLyB0aGVy
ZSdzIGFuIG9uZ29pbmcgZGVjb2RlIHdpbGwgY2F1c2UgYSBjcmFzaC4KICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2RlY29kZUxvY2spOwogCi0gICAgLy8gVGhlICItMSIgaGVyZSBpcyB0cmlja3ku
ICBJdCBkb2VzIG5vdCBtZWFuIHRoYXQgfGNsZWFyQmVmb3JlRnJhbWV8IGlzIHRoZQorICAgIC8v
IFRoZSAiLTEiIGhlcmUgaXMgdHJpY2t5LiBJdCBkb2VzIG5vdCBtZWFuIHRoYXQgfGJlZm9yZUZy
YW1lfCBpcyB0aGUKICAgICAvLyBsYXN0IGZyYW1lIHdlIHdpc2ggdG8gcHJlc2VydmUsIGJ1dCBy
YXRoZXIgdGhhdCB3ZSBuZXZlciB3YW50IHRvIGNsZWFyCiAgICAgLy8gdGhlIHZlcnkgbGFzdCBm
cmFtZSBpbiB0aGUgY2FjaGU6IGl0J3MgZW1wdHkgKHNvIGNsZWFyaW5nIGl0IGlzCiAgICAgLy8g
cG9pbnRsZXNzKSwgaXQncyBwYXJ0aWFsIChzbyB3ZSBkb24ndCB3YW50IHRvIGNsZWFyIGl0IGFu
eXdheSksIG9yIHRoZQogICAgIC8vIGNhY2hlIGNvdWxkIGJlIGVubGFyZ2VkIHdpdGggYSBmdXR1
cmUgc2V0RGF0YSgpIGNhbGwgYW5kIGl0IGNvdWxkIGJlCi0gICAgLy8gbmVlZGVkIHRvIGNvbnN0
cnVjdCB0aGUgbmV4dCBmcmFtZSAoc2VlIGNvbW1lbnRzIGJlbG93KS4gIENhbGxlcnMgY2FuCisg
ICAgLy8gbmVlZGVkIHRvIGNvbnN0cnVjdCB0aGUgbmV4dCBmcmFtZSAoc2VlIGNvbW1lbnRzIGJl
bG93KS4gQ2FsbGVycyBjYW4KICAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0
cnVlLCAuLi4pIHRvIGNvbXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCiAgICAgLy8gdGhpcyBj
YXNlLgotICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJh
bWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9y
ZUZyYW1lKTsKKyAgICBiZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGJlZm9yZUZyYW1lLCBtX2ZyYW1l
QnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7CisgICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+Ojpp
dGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBiZWZvcmVGcmFtZSk7CiAK
ICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNoIHRoYXQ6CiAgICAgLy8gICAq
IFdlIGRvbid0IGNsZWFyIHxlbmR8CiAgICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIHRoZSBmcmFt
ZSB3ZSdyZSBjdXJyZW50bHkgZGVjb2RpbmcKICAgICAvLyAgICogV2UgZG9uJ3QgY2xlYXIgYW55
IGZyYW1lIGZyb20gd2hpY2ggYSBmdXR1cmUgaW5pdEZyYW1lQnVmZmVyKCkgY2FsbAogICAgIC8v
ICAgICB3aWxsIGNvcHkgYml0bWFwIGRhdGEKLSAgICAvLyBBbGwgb3RoZXIgZnJhbWVzIGNhbiBi
ZSBjbGVhcmVkLiAgQmVjYXVzZSBvZiB0aGUgY29uc3RyYWludHMgb24gd2hlbgorICAgIC8vIEFs
bCBvdGhlciBmcmFtZXMgY2FuIGJlIGNsZWFyZWQuIEJlY2F1c2Ugb2YgdGhlIGNvbnN0cmFpbnRz
IG9uIHdoZW4KICAgICAvLyBJbWFnZVNvdXJjZTo6Y2xlYXIoKSBjYW4gYmUgY2FsbGVkIChzZWUg
SW1hZ2VTb3VyY2UuaCksIHdlJ3JlIGd1YXJhbnRlZWQKICAgICAvLyBub3QgdG8gaGF2ZSBub24t
ZW1wdHkgZnJhbWVzIGFmdGVyIHRoZSBmcmFtZSB3ZSdyZSBjdXJyZW50bHkgZGVjb2RpbmcuCiAg
ICAgLy8gU28sIHNjYW4gYmFja3dhcmRzIGZyb20gfGVuZHwgYXMgZm9sbG93czoKICAgICAvLyAg
ICogSWYgdGhlIGZyYW1lIGlzIGVtcHR5LCB3ZSdyZSBzdGlsbCBwYXN0IGFueSBmcmFtZXMgd2Ug
Y2FyZSBhYm91dC4KICAgICAvLyAgICogSWYgdGhlIGZyYW1lIGlzIGNvbXBsZXRlLCBidXQgaXMg
RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzLCB3ZSdsbAotICAgIC8vICAgICBza2lw
IG92ZXIgaXQgaW4gZnV0dXJlIGluaXRGcmFtZUJ1ZmZlcigpIGNhbGxzLiAgV2UgY2FuIGNsZWFy
IGl0Ci0gICAgLy8gICAgIHVubGVzcyBpdCdzIHxlbmR8LCBhbmQga2VlcCBzY2FubmluZy4gIEZv
ciBhbnkgb3RoZXIgZGlzcG9zYWwgbWV0aG9kLAorICAgIC8vICAgICBza2lwIG92ZXIgaXQgaW4g
ZnV0dXJlIGluaXRGcmFtZUJ1ZmZlcigpIGNhbGxzLiBXZSBjYW4gY2xlYXIgaXQKKyAgICAvLyAg
ICAgdW5sZXNzIGl0J3MgfGVuZHwsIGFuZCBrZWVwIHNjYW5uaW5nLiBGb3IgYW55IG90aGVyIGRp
c3Bvc2FsIG1ldGhvZCwKICAgICAvLyAgICAgc3RvcCBzY2FubmluZywgYXMgd2UndmUgZm91bmQg
dGhlIGZyYW1lIGluaXRGcmFtZUJ1ZmZlcigpIHdpbGwgbmVlZAogICAgIC8vICAgICBuZXh0Lgog
ICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUgZGVjb2RpbmcgaXQsIHNv
IGRvbid0IGNsZWFyIGl0OyBpZiBpdApAQCAtMjExLDcgKzIxMSw3IEBAIGJvb2wgR0lGSW1hZ2VE
ZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
UkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5iYWNraW5nU3RvcmUoKS0+cGl4ZWxBdCh4
QmVnaW4sIHlCZWdpbik7Ci0gICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50
byB0aGUgZnJhbWUuICAKKyAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRv
IHRoZSBmcmFtZS4KICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CiAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSByb3dCdWZmZXJbKG1fc2Nh
bGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXRdOwog
ICAgICAgICBpZiAoKCFmcmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgfHwgKHNvdXJjZVZhbHVl
ICE9IGZyYW1lQ29udGV4dC0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXpl
KSkgewpAQCAtMjQxLDcgKzI0MSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2Rl
ZFJvdyh1bnMKIAogYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQg
ZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RGlzcG9zYWxN
ZXRob2QgZGlzcG9zYWxNZXRob2QpCiB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYg
bmVjZXNzYXJ5LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywKKyAgICAvLyBJ
bml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90
aGluZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVj
b2RlZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0g
bV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwogICAgIGlmIChidWZmZXIuaXNJbnZhbGlk
KCkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKQEAgLTI1OSw4ICsyNTksOCBAQCBi
b29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgIGlmIChyZWN0
LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCiAgICAgICAgICAg
ICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlmIChmcmFtZUluZGV4
KSB7Ci0gICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUgZG9lcyBub3QgaGF2
ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKLSAgICAgICAgICAgIC8vIG91dHNpZGUgaXRzIHJl
Y3QgZG9lc24ndCBoYXZlIGFscGhhLiAgVG8ga25vdyB3aGV0aGVyIHRoaXMgaXMKKyAgICAgICAg
ICAgIC8vIFRyaWNreSBjYXNlLiBUaGlzIGZyYW1lIGRvZXMgbm90IGhhdmUgYWxwaGEgb25seSBp
ZiBldmVyeXdoZXJlCisgICAgICAgICAgICAvLyBvdXRzaWRlIGl0cyByZWN0IGRvZXNuJ3QgaGF2
ZSBhbHBoYS4gVG8ga25vdyB3aGV0aGVyIHRoaXMgaXMKICAgICAgICAgICAgIC8vIHRydWUsIHdl
IGNoZWNrIHRoZSBzdGFydCBzdGF0ZSBvZiB0aGUgZnJhbWUgLS0gaWYgaXQgZG9lc24ndCBoYXZl
CiAgICAgICAgICAgICAvLyBhbHBoYSwgd2UncmUgc2FmZS4KICAgICAgICAgICAgIC8vCkBAIC0y
NzIsNyArMjcyLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQog
ICAgICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJ
bmRleF07CiAKICAgICAgICAgICAgIC8vIE5vdywgaWYgd2UncmUgYXQgYSBEaXNwb3NhbE1ldGhv
ZDo6VW5zcGVjaWZpZWQgb3IgRGlzcG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSBmcmFtZSwgdGhl
bgotICAgICAgICAgICAgLy8gd2UgY2FuIHNheSB3ZSBoYXZlIG5vIGFscGhhIGlmIHRoYXQgZnJh
bWUgaGFkIG5vIGFscGhhLiAgQnV0CisgICAgICAgICAgICAvLyB3ZSBjYW4gc2F5IHdlIGhhdmUg
bm8gYWxwaGEgaWYgdGhhdCBmcmFtZSBoYWQgbm8gYWxwaGEuIEJ1dAogICAgICAgICAgICAgLy8g
c2luY2UgaW4gaW5pdEZyYW1lQnVmZmVyKCkgd2UgYWxyZWFkeSBjb3BpZWQgdGhhdCBmcmFtZSdz
IGFscGhhCiAgICAgICAgICAgICAvLyBzdGF0ZSBpbnRvIHRoZSBjdXJyZW50IGZyYW1lJ3MsIHdl
IG5lZWQgZG8gbm90aGluZyBhdCBhbGwgaGVyZS4KICAgICAgICAgICAgIC8vCkBAIC0zNTIsNyAr
MzUyLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgICAg
ICAvLwogICAgICAgICAvLyBGcmFtZXMgdGhhdCB1c2UgdGhlIERpc3Bvc2FsTWV0aG9kOjpSZXN0
b3JlVG9QcmV2aW91cyBtZXRob2QgYXJlIGVmZmVjdGl2ZWx5CiAgICAgICAgIC8vIG5vLW9wcyBp
biB0ZXJtcyBvZiBjaGFuZ2luZyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgYSBmcmFtZSBjb21wYXJl
ZCB0bwotICAgICAgICAvLyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1l
LCBzbyBza2lwIG92ZXIgdGhlbS4gIChJZiB0aGUKKyAgICAgICAgLy8gdGhlIHN0YXJ0aW5nIHN0
YXRlIG9mIHRoZSBwcmV2aW91cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRoZW0uIChJZiB0aGUKICAg
ICAgICAgLy8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxsIGdldCB0
cmVhdGVkIGxpa2UKICAgICAgICAgLy8gRGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91
bmQgYmVsb3cgYW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCiAgICAgICAg
IGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJh
bWVJbmRleF07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMjA3NDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hl
biBjYWxsaW5nIHRoaXMgZnJvbSBpbnNpZGUKICAgICAgICAgLy8gR0lGSW1hZ2VSZWFkZXIhCiAg
ICAgICAgIGJvb2wgc2V0RmFpbGVkKCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgY2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKSBvdmVycmlkZTsKKyAgICAgICAg
dm9pZCBkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3JlRnJhbWUpIG92ZXJyaWRl
OwogCiAgICAgICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgogICAgICAgICBi
b29sIGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiYgcm93QnVmZmVyLCBzaXplX3Qgd2lkdGgsIHNpemVfdCByb3dOdW1iZXIsIHVu
c2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIyMDc0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MzIsMTQgKzczMiwxNCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
aW5pdCgpCiAgICAgbV9zZXF1ZW5jZU51bWJlciA9IDA7CiB9CiAKLXZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGJlZm9yZUZy
YW1lKQogewogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBTZWUgR0lGSW1hZ2VEZWNvZGVyIGZvciBmdWxsIGV4cGxhbmF0aW9u
LgotICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBtX2Zy
YW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+
OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZy
YW1lKTsKKyAgICBiZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGJlZm9yZUZyYW1lLCBtX2ZyYW1lQnVm
ZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7CisgICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVy
YXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBiZWZvcmVGcmFtZSk7CiAKICAg
ICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKICAgICBmb3IgKDsgKGkgIT0g
bV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmIChpLT5pc0ludmFsaWQoKSB8fCAoaS0+ZGlz
cG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJl
dmlvdXMpKTsgLS1pKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAy
MjA3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGZyYW1lSGVhZGVyKCk7CiAKICAgICAgICAgdm9pZCBp
bml0KCk7Ci0gICAgICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJl
Zm9yZUZyYW1lKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBkZXN0cm95RnJhbWVCdWZmZXJDYWNo
ZShzaXplX3QgYmVmb3JlRnJhbWUpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICAgICAgYm9vbCBp
c0NvbXBsZXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIyMDc1OSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTA4LTE1ICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBJbWFnZVNvdXJj
ZSBmcm9tIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRtYXBJbWFnZSB0byBJ
bWFnZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzU1OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisKIDIwMTctMDgtMTUgIERvbiBPbG1zdGVh
ZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbUEFMXSBNb3ZlIFNsZWVwIGNs
YXNzZXMgaW50byBQQUwKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNpb24gMjIwNzQ3KQorKysgU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICNpbXBvcnQgPEF1ZGlvVG9v
bGJveC9BdWRpb1Nlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRGV2aWNlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9JbWFnZVNvdXJj
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkTWVzc2FnZS5oPgogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318286</attachid>
            <date>2017-08-16 13:49:29 -0700</date>
            <delta_ts>2017-11-29 13:04:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175595-20170816134929.patch</filename>
            <type>text/plain</type>
            <size>77783</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE3LTA4LTE2ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRo
ZSBJbWFnZVNvdXJjZSBmcm9tIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRt
YXBJbWFnZSB0byBJbWFnZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgY29ubmVjdHMgQml0bWFwSW1h
Z2UgdG8gSW1hZ2VGcmFtZSBoYXMgYmVlbgorICAgICAgICB0cm91Ymxlc29tZS4gSW1hZ2VTb3Vy
Y2UgZG9lcyBub3QgaGF2ZSBhIGNsZWFyIHJlc3BvbnNpYmlsaXR5IG90aGVyIHRoYW4KKyAgICAg
ICAgYSBicmlkZ2UgdGhhdCBjb25uZWN0cyBCaXRtYXBJYW1nZSB0byBJbWFnZUZyYW1lQ2FjaGUu
IFNoYXJpbmcgdGhlIAorICAgICAgICBJbWFnZURlY29kZXIgYmV0d2VlbiBJbWFnZVNvdXJjZSBh
bmQgSW1hZ2VGcmFtZUNhY2hlIGlzIHVnbHkgYW5kIGNhdXNlZAorICAgICAgICBmZXcgY3Jhc2hl
cyBpbiB0aGUgcGFzdC4KKworICAgICAgICBUaGlzIHBhdGNoIHdpbGwgZG8gdGhlIGZpcnN0IHN0
ZXAgZm9yIGZpeGluZyB0aGlzIGlzc3VlLiBGaXJzdCBnZXQgcmlkIG9mCisgICAgICAgIEltYWdl
U291cmNlIGJ5IG1vdmluZyBpdHMgQVBJcyB0byBJbWFnZUZyYW1lQ2FjaGUgYW5kIEJpdG1hcElt
YWdlLiBSZXBsYWNlCisgICAgICAgIGFsbCB0aGUgaW5zdGFuY2VzIG9mIEltYWdlU291cmNlIGJ5
IEltYWdlRnJhbWVDYWNoZS4gVGhlIG5leHQgc3RlcCB3aWxsCisgICAgICAgIGJlIHRvIHJlbmFt
ZSBJbWFnZUZyYW1lQ2FjaGUgdG8gSW1hZ2VTb3VyY2UuIEJ1dCB0aGlzIHdpbGwgYmUgZG9uZSBp
biBhCisgICAgICAgIGZvbGxvdy11cCBwYXRjaAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogUGxhdGZvcm1XUEUuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6fkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpjYW5Vc2VBc3luY0RlY29kaW5nRm9yTGFyZ2VJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OnNob3VsZFVzZUFzeW5jRGVjb2RpbmdGb3JBbmltYXRlZEltYWdl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c3Vic2FtcGxpbmdMZXZl
bEZvclNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYW5EZXN0
cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmludGVybmFs
U3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnN0b3BBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmltYWdlRnJhbWVBdmFpbGFi
bGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkdW1wIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVDYWNoZTo6SW1hZ2VGcmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVD
YWNoZTo6ZW5zdXJlRGVjb2RlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lQ2FjaGU6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpy
ZXNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpkYXRhQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmlzQWxsRGF0YVJlY2VpdmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6ZGVzdHJveUZyYW1lQnVmZmVy
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjYW5Vc2VBc3luY0Rl
Y29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6bWF4aW11bVN1YnNh
bXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpzZXRUYXJn
ZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpkdW1w
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6c2V0RGVjb2Rlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmRlY29kZXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpyZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6On5J
bWFnZUV4dHJhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OmlzQWxsRGF0YVJlY2VpdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVCdWZmZXJDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVC
dWZmZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmNsZWFyRnJh
bWVCdWZmZXJDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorCiAyMDE3LTA4LTE2ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRXZlbnRTb3VyY2U6IGlnbm9yZSBJRHMgd2l0aCBV
KzAwMDAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjA4MDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjM1NCw3ICsyMzU0
LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bnRTaXplLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UJKHJldmlzaW9uIDIyMDgw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV1BFLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw3ICs4MSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMDgwMSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNDIyLDcgKzQyMiw2IEBACiAJCTBGMTc3NDgxMTM3OEI3NzIwMDlEQTc2
QSAvKiBTY3JvbGxBbmltYXRvcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTc3NDdGMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRv
cklPUy5tbSAqLzsgfTsKIAkJMEYzNkU3MzcxQkQxODM3QTAwMkRCODkxIC8qIExheW91dFBvaW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzZF
NzM2MUJEMTgzN0EwMDJEQjg5MSAvKiBMYXlvdXRQb2ludC5jcHAgKi87IH07CiAJCTBGMzZFNzM5
MUJEMTg0QjkwMDJEQjg5MSAvKiBMYXlvdXRTaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzZFNzM4MUJEMTg0QjkwMDJEQjg5MSAvKiBMYXlv
dXRTaXplLmNwcCAqLzsgfTsKLQkJMEYzQzcyNUUxOTc0ODc0QjAwQUVERDBDIC8qIEltYWdlU291
cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0M3MjVEMTk3NDg3NEIwMEFFREQwQyAvKiBJbWFnZVNvdXJjZS5jcHAgKi87IH07CiAJCTBGM0RE
NDRGMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBT
aGFkb3dCbHVyLmNwcCAqLzsgfTsKIAkJMEYzREQ0NTAxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRv
d0JsdXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
M0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi87IH07CiAJCTBGM0YwRTU5
MTU3MDMwQzMwMDZEQTU3RiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNGMEU1NzE1NzAzMEMzMDA2REE1N0Yg
LyogUmVuZGVyR2VvbWV0cnlNYXAuY3BwICovOyB9OwpAQCAtNTIxNSw3ICs1MjE0LDYgQEAKIAkJ
QjI3NTM1NkUwQjA1MzgxNDAwMkNFNjRGIC8qIEljb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3
NTM1NkYwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFn
ZS5jcHAgKi87IH07CiAJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDIwQjA1Mzgx
NDAwMkNFNjRGIC8qIEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQjI3NTM1NzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MzBC
MDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU3MjBCMDUzODE0MDAyQ0U2NEYgLyogSW50
UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTQ0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTczMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbnRSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNzUzNTQ1MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0LmNwcCAqLzsgfTsKIAkJQjI3
NTM1NzQwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQ2MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRS
ZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTc4MzcsNyArNzgzNSw2IEBACiAJCTBGMTc3NDdGMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3JvbGxB
bmltYXRvcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNj
cm9sbEFuaW1hdG9ySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM2RTcz
NjFCRDE4MzdBMDAyREI4OTEgLyogTGF5b3V0UG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0UG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjM2RTczODFCRDE4NEI5MDAyREI4OTEgLyogTGF5b3V0U2l6ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRTaXplLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzQzcyNUQxOTc0ODc0QjAwQUVERDBDIC8qIEltYWdlU291
cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlU291cmNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5
MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2hhZG93Qmx1ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0RENDRF
MTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNoYWRvd0JsdXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
RjBFNTcxNTcwMzBDMzAwNkRBNTdGIC8qIFJlbmRlckdlb21ldHJ5TWFwLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckdlb21ldHJ5TWFwLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNjk4LDcgKzEzNjk1LDYgQEAKIAkJQjI3NTM1NDAw
QjA1MzgxNDAwMkNFNjRGIC8qIEljb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEljb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDEwQjA1Mzgx
NDAwMkNFNjRGIC8qIEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQyMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1NDMwQjA1Mzgx
NDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0
NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludFBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUz
NTQ1MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbnRSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjI3NTM1NDYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEludFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIzMzAwLDggKzIzMjk2LDYgQEAKIAkJCQlBODc0OEQ3NDEyQ0MzRjg5MDAxRkJBNDEgLyog
SW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkNDMzc2MzAwMUZCQTQxIC8q
IEltYWdlT3JpZW50YXRpb24uaCAqLywKIAkJCQk0OTI5MUU0QTEzNDE3MkM4MDBFNzUzREUgLyog
SW1hZ2VSZW5kZXJpbmdNb2RlLmggKi8sCi0JCQkJMEYzQzcyNUQxOTc0ODc0QjAwQUVERDBDIC8q
IEltYWdlU291cmNlLmNwcCAqLywKLQkJCQlCMjc1MzU0MzBCMDUzODE0MDAyQ0U2NEYgLyogSW1h
Z2VTb3VyY2UuaCAqLywKIAkJCQk1NTUwQ0I0MTFFOTU1RTNDMDAxMTFBQTAgLyogSW1hZ2VUeXBl
cy5oICovLAogCQkJCTA3OTQxNzkzMTY2RUEwNEUwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlLmggKi8sCiAJCQkJMDdDRTc3RDQxNjcxMkE2QTAwQzU1QTQ3IC8qIEluYmFuZFRleHRU
cmFja1ByaXZhdGVDbGllbnQuaCAqLywKQEAgLTI3NzQ1LDcgKzI3NzM5LDYgQEAKIAkJCQkyRDVB
NTkzMTE1MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjUxQTJGM0YxN0Q3RDNBRTAwNzI1MTdBIC8qIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MjkxRTRCMTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJl
bmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyNzUzNTcxMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbWFnZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzNDgwOTQwRUVGNTBENDAw
QUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NTBDQjQyMUU5
NTVFM0MwMDExMUFBMCAvKiBJbWFnZVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkY3NTZC
MzFCM0I2NkY3MDAwNURENzkgLyogSW1tdXRhYmxlTkZBLmggaW4gSGVhZGVycyAqLywKQEAgLTMx
NzI0LDcgKzMxNzE3LDYgQEAKIAkJCQlCMjc1MzU3QjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDVBNTkyRjE1MjUyNTIzMDAzNkVFNTEgLyogSW1h
Z2VPcmllbnRhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTFBMkY0MTE3RDdENURFMDA3
MjUxN0EgLyogSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkw
RjNDNzI1RTE5NzQ4NzRCMDBBRUREMEMgLyogSW1hZ2VTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNEIzNDgwOTMwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0dNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQkzMTZGRTExNzBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmlt
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkU5NjFDNTQxOEFEMzM4NTAwRDA3REM1IC8q
IEluYmFuZERhdGFUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMTg5OCw3ICszMTg5
MCw2IEBACiAJCQkJRTEyNUY4M0QxODI0MTFFNzAwRDg0Q0Q5IC8qIEpTQ3J5cHRvT3BlcmF0aW9u
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzlBQ0FCRjFGM0NGMUFGMDBGM0FBMDkgLyog
SlNDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M5
QUNBQzExRjNDRjFBRjAwRjNBQTA5IC8qIEpTQ3J5cHRvUnNhS2V5QWxnb3JpdGhtLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUU0ODI4NDA4MUY0NDU5NEMwMDg2M0FDMyAvKiBSZW5kZXJUcmVlVXBk
YXRlckZpcnN0TGV0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDZDMUZDMEMwRERDOEYw
MDIwQ0ZDMyAvKiBKU0NTU0ZvbnRGYWNlUnVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQ2
QzFGRTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NJbXBvcnRSdWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxNkZFMDcxMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTMzMTY2LDYgKzMzMTU3LDcgQEAKIAkJCQk5M0YxOUFENTA4MjQ1
RTU5MDAxRTlBQkMgLyogUmVuZGVyVHJlZUFzVGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
ODI0QUJBQTFBRTg0OUM4MDA5MDc0QjcgLyogUmVuZGVyVHJlZVBvc2l0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUU0NjE4MDJCMUM4QTA2RDkwMDI2QzAyQyAvKiBSZW5kZXJUcmVlVXBkYXRl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDgyODQwODFGNDQ1OTRDMDA4NjNBQzMgLyogUmVu
ZGVyVHJlZVVwZGF0ZXJGaXJzdExldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDQ2MTQ1
MTBDRDY4QTM1MDBGQURBNzUgLyogUmVuZGVyVmlkZW8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFQTQ4NjcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkUyMDUwN0QxOEE0NThCRjAwODA2NDdFIC8qIFJlbmRlclZUVEN1ZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAJKHJldmlzaW9uIDIyMDgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTggKzM5
LDIxIEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpZiBQTEFURk9STShX
SU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQml0bWFwSW1hZ2U6OkJpdG1h
cEltYWdlKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0g
ICAgLCBtX3NvdXJjZSh0aGlzKQorICAgICwgbV9zb3VyY2UoSW1hZ2VGcmFtZUNhY2hlOjpjcmVh
dGUodGhpcykpCiB7CiB9CiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0
ciYmIGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVy
KQotICAgICwgbV9zb3VyY2UoV1RGTW92ZShpbWFnZSkpCisgICAgLCBtX3NvdXJjZShJbWFnZUZy
YW1lQ2FjaGU6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSkpCiB7CiB9CiAKQEAgLTU4LDggKzYxLDgg
QEAgQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCiB7CiAgICAgaW52YWxpZGF0ZVBsYXRmb3Jt
RGF0YSgpOwogICAgIGNsZWFyVGltZXIoKTsKLSAgICBtX3NvdXJjZS5jbGVhckltYWdlKCk7Ci0g
ICAgbV9zb3VyY2Uuc3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOworICAgIG1fc291cmNlLT5jbGVh
ckltYWdlKCk7CisgICAgbV9zb3VyY2UtPnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKIH0KIAog
dm9pZCBCaXRtYXBJbWFnZTo6dXBkYXRlRnJvbVNldHRpbmdzKGNvbnN0IFNldHRpbmdzJiBzZXR0
aW5ncykKQEAgLTc0LDIwICs3NywyMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2Rl
ZERhdGEoYm9vCiAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0gdXJsOiAl
cyIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CiAKICAgICBpZiAoIWRlc3Ryb3lBbGwpCi0gICAgICAgIG1fc291cmNlLmRlc3Ryb3lEZWNv
ZGVkRGF0YUJlZm9yZUZyYW1lKG1fY3VycmVudEZyYW1lKTsKKyAgICAgICAgbV9zb3VyY2UtPmRl
c3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKG1fY3VycmVudEZyYW1lKTsKICAgICBlbHNlIGlm
ICghY2FuRGVzdHJveURlY29kZWREYXRhKCkpCi0gICAgICAgIG1fc291cmNlLmRlc3Ryb3lBbGxE
ZWNvZGVkRGF0YUV4Y2x1ZGVGcmFtZShtX2N1cnJlbnRGcmFtZSk7CisgICAgICAgIG1fc291cmNl
LT5kZXN0cm95QWxsRGVjb2RlZERhdGFFeGNsdWRlRnJhbWUobV9jdXJyZW50RnJhbWUpOwogICAg
IGVsc2UgewotICAgICAgICBtX3NvdXJjZS5kZXN0cm95QWxsRGVjb2RlZERhdGEoKTsKKyAgICAg
ICAgbV9zb3VyY2UtPmRlc3Ryb3lBbGxEZWNvZGVkRGF0YSgpOwogICAgICAgICBtX2N1cnJlbnRG
cmFtZURlY29kaW5nU3RhdHVzID0gRGVjb2RpbmdTdGF0dXM6OkludmFsaWQ7CiAgICAgfQogCiAg
ICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHRocm93IGF3YXkgdGhlIGRlY29kZXIgdW5sZXNzIHdl
J3JlIGV4cGxpY2l0bHkgYXNrZWQKICAgICAvLyB0byBkZXN0cm95IGFsbCBvZiB0aGUgZnJhbWVz
LgotICAgIGlmICghZGVzdHJveUFsbCB8fCBtX3NvdXJjZS5oYXNBc3luY0RlY29kaW5nUXVldWUo
KSkKLSAgICAgICAgbV9zb3VyY2UuY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKG1fY3VycmVudEZyYW1l
KTsKKyAgICBpZiAoZGVzdHJveUFsbCAmJiAhbV9zb3VyY2UtPmhhc0FzeW5jRGVjb2RpbmdRdWV1
ZSgpKQorICAgICAgICBtX3NvdXJjZS0+cmVzZXREYXRhKGRhdGEoKSk7CisjaWYgIVVTRShDRykK
ICAgICBlbHNlCi0gICAgICAgIG1fc291cmNlLnJlc2V0RGF0YShkYXRhKCkpOworICAgICAgICBt
X3NvdXJjZS0+ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUobV9jdXJyZW50RnJhbWUpOworI2VuZGlm
CiAKICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiB9CkBAIC05OSw3ICsxMDQsNyBAQCB2
b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGFJZk5lCiAgICAgaWYgKCFkYXRhKCkg
JiYgZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zb3VyY2UuZGVj
b2RlZFNpemUoKSA8IExhcmdlQW5pbWF0aW9uQ3V0b2ZmKQorICAgIGlmIChtX3NvdXJjZS0+ZGVj
b2RlZFNpemUoKSA8IExhcmdlQW5pbWF0aW9uQ3V0b2ZmKQogICAgICAgICByZXR1cm47CiAKICAg
ICBkZXN0cm95RGVjb2RlZERhdGEoZGVzdHJveUFsbCk7CkBAIC0xMDcsMTEgKzExMiwxMSBAQCB2
b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGFJZk5lCiAKIEVuY29kZWREYXRhU3Rh
dHVzIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAg
ICBpZiAobV9zb3VyY2UuZGVjb2RlZFNpemUoKSAmJiAhY2FuVXNlQXN5bmNEZWNvZGluZ0Zvckxh
cmdlSW1hZ2VzKCkpCi0gICAgICAgIG1fc291cmNlLmRlc3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERh
dGEoKTsKKyAgICBpZiAobV9zb3VyY2UtPmRlY29kZWRTaXplKCkgJiYgIWNhblVzZUFzeW5jRGVj
b2RpbmdGb3JMYXJnZUltYWdlcygpKQorICAgICAgICBtX3NvdXJjZS0+ZGVzdHJveUluY29tcGxl
dGVEZWNvZGVkRGF0YSgpOwogCiAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERl
Y29kaW5nU3RhdHVzOjpJbnZhbGlkOwotICAgIHJldHVybiBtX3NvdXJjZS5kYXRhQ2hhbmdlZChk
YXRhKCksIGFsbERhdGFSZWNlaXZlZCk7CisgICAgcmV0dXJuIG1fc291cmNlLT5kYXRhQ2hhbmdl
ZChkYXRhKCksIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpz
ZXRDdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1c0lmTmVjZXNzYXJ5KERlY29kaW5nU3RhdHVzIGRl
Y29kaW5nU3RhdHVzKQpAQCAtMTMwLDggKzEzNSwxMiBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJ
bWFnZTo6ZnJhbWVJbWFnZUF0CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMg
LSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nXSIsIF9f
RlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KSkpOwogICAg
ICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgfQotCi0gICAgcmV0dXJuIG1fc291
cmNlLmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChpbmRleCwgc3Vic2FtcGxpbmdMZXZl
bCwgdGFyZ2V0Q29udGV4dCk7CisjaWYgVVNFKERJUkVDVDJEKQorICAgIG1fc291cmNlLT5zZXRU
YXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFy
Z2V0Q29udGV4dCk7CisjZW5kaWYKKyAgICByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKIE5hdGl2ZUlt
YWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRh
cmdldENvbnRleHQpCkBAIC0xODksNyArMTk4LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJpdG1hcElt
YWdlOjpkcmF3KEdyYXBoaQogICAgIEludFNpemUgc2l6ZUZvckRyYXdpbmcgPSBleHBhbmRlZElu
dFNpemUoc2l6ZSgpICogc2NhbGVGYWN0b3JGb3JEcmF3aW5nKTsKICAgICBJbWFnZURyYXdSZXN1
bHQgcmVzdWx0ID0gSW1hZ2VEcmF3UmVzdWx0OjpEaWREcmF3OwogCi0gICAgbV9jdXJyZW50U3Vi
c2FtcGxpbmdMZXZlbCA9IG1fYWxsb3dTdWJzYW1wbGluZyA/IG1fc291cmNlLnN1YnNhbXBsaW5n
TGV2ZWxGb3JTY2FsZUZhY3Rvcihjb250ZXh0LCBzY2FsZUZhY3RvckZvckRyYXdpbmcpIDogU3Vi
c2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKKyAgICBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsID0g
bV9hbGxvd1N1YnNhbXBsaW5nID8gc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKGNvbnRl
eHQsIHNjYWxlRmFjdG9yRm9yRHJhd2luZykgOiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0Owog
ICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3N1YnNhbXBs
aW5nTGV2ZWwgPSAlZCBzY2FsZUZhY3RvckZvckRyYXdpbmcgPSAoJS40ZiwgJS40ZildIiwgX19G
VU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0
aWNfY2FzdDxpbnQ+KG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwpLCBzY2FsZUZhY3RvckZvckRy
YXdpbmcud2lkdGgoKSwgc2NhbGVGYWN0b3JGb3JEcmF3aW5nLmhlaWdodCgpKTsKIAogICAgIE5h
dGl2ZUltYWdlUHRyIGltYWdlOwpAQCAtMjA0LDcgKzIxMyw3IEBAIEltYWdlRHJhd1Jlc3VsdCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgLy8gaXQgaXMgY3VycmVudGx5IGJlaW5n
IGRlY29kZWQuIE5ldyBkYXRhIG1heSBoYXZlIGJlZW4gcmVjZWl2ZWQgc2luY2UgdGhlIHByZXZp
b3VzIHJlcXVlc3Qgd2FzIG1hZGUuCiAgICAgICAgIGlmICgoIWZyYW1lSXNDb21wYXRpYmxlICYm
ICFmcmFtZUlzQmVpbmdEZWNvZGVkKSB8fCBtX2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID09
IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkKSB7CiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0
bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtyZXF1ZXN0aW5nIGxhcmdlIGFzeW5jIGRlY29k
aW5nXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgICAgICBtX3NvdXJjZS5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgc2l6ZUZvckRy
YXdpbmcpOworICAgICAgICAgICAgbV9zb3VyY2UtPnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdB
dEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBzaXplRm9y
RHJhd2luZyk7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID0gRGVj
b2RpbmdTdGF0dXM6OkRlY29kaW5nOwogICAgICAgICB9CiAKQEAgLTIzMSw3ICsyNDAsNyBAQCBJ
bWFnZURyYXdSZXN1bHQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpCiAgICAgICAgIC8vIElmIHRo
ZSBkZWNvZGluZ01vZGUgY2hhbmdlcyBmcm9tIGFzeW5jaHJvbm91cyB0byBzeW5jaHJvbm91cyBh
bmQgbmV3IGRhdGEgaXMgcmVjZWl2ZWQsCiAgICAgICAgIC8vIHRoZSBjdXJyZW50IGluY29tcGxl
dGUgZGVjb2RlZCBmcmFtZSBoYXMgdG8gYmUgZGVzdHJveWVkLgogICAgICAgICBpZiAobV9jdXJy
ZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9PSBEZWNvZGluZ1N0YXR1czo6SW52YWxpZCkKLSAgICAg
ICAgICAgIG1fc291cmNlLmRlc3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERhdGEoKTsKKyAgICAgICAg
ICAgIG1fc291cmNlLT5kZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7CiAgICAgICAgIAog
ICAgICAgICBib29sIGZyYW1lSXNDb21wYXRpYmxlID0gZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1h
Z2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRT
dWJzYW1wbGluZ0xldmVsLCBEZWNvZGluZ09wdGlvbnMoc2l6ZUZvckRyYXdpbmcpKTsKICAgICAg
ICAgYm9vbCBmcmFtZUlzQmVpbmdEZWNvZGVkID0gZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29t
cGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgRGVjb2RpbmdNb2RlOjpB
c3luY2hyb25vdXMpOwpAQCAtMzI0LDEyICszMzMsMTIgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y2Fu
QW5pbWF0ZSgpIGNvbnN0CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmNhblVzZUFzeW5jRGVjb2RpbmdG
b3JMYXJnZUltYWdlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFjYW5BbmltYXRlKCkgJiYgbV9z
b3VyY2UuY2FuVXNlQXN5bmNEZWNvZGluZygpOworICAgIHJldHVybiAhY2FuQW5pbWF0ZSgpICYm
IG1fc291cmNlLT5jYW5Vc2VBc3luY0RlY29kaW5nKCk7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6
OnNob3VsZFVzZUFzeW5jRGVjb2RpbmdGb3JBbmltYXRlZEltYWdlcygpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGNhbkFuaW1hdGUoKSAmJiBtX2FsbG93QW5pbWF0ZWRJbWFnZUFzeW5jRGVjb2Rpbmcg
JiYgKHNob3VsZFVzZUFzeW5jRGVjb2RpbmdGb3JBbmltYXRlZEltYWdlc0ZvclRlc3RpbmcoKSB8
fCBtX3NvdXJjZS5jYW5Vc2VBc3luY0RlY29kaW5nKCkpOworICAgIHJldHVybiBjYW5BbmltYXRl
KCkgJiYgbV9hbGxvd0FuaW1hdGVkSW1hZ2VBc3luY0RlY29kaW5nICYmIChzaG91bGRVc2VBc3lu
Y0RlY29kaW5nRm9yQW5pbWF0ZWRJbWFnZXNGb3JUZXN0aW5nKCkgfHwgbV9zb3VyY2UtPmNhblVz
ZUFzeW5jRGVjb2RpbmcoKSk7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmNsZWFyVGltZXIoKQpA
QCAtMzQ0LDEwICszNTMsMzAgQEAgdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRUaW1lcihTZWNvbmRz
IGRlbAogICAgIG1fZnJhbWVUaW1lci0+c3RhcnRPbmVTaG90KGRlbGF5KTsKIH0KIAorU3Vic2Ft
cGxpbmdMZXZlbCBCaXRtYXBJbWFnZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3RvcikKK3sK
KyNpZiBVU0UoQ0cpCisgICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3
aW5nIGludG8gUERGIGNvbnRleHRzLgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2
ZWw6OkRlZmF1bHQ7CisKKyAgICBmbG9hdCBzY2FsZSA9IHN0ZDo6bWluKGZsb2F0KDEpLCBzdGQ6
Om1heChzY2FsZUZhY3Rvci53aWR0aCgpLCBzY2FsZUZhY3Rvci5oZWlnaHQoKSkpOworICAgIGlm
ICghKHNjYWxlID4gMCAmJiBzY2FsZSA8PSAxKSkKKyAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5n
TGV2ZWw6OkRlZmF1bHQ7CisKKyAgICBpbnQgcmVzdWx0ID0gc3RkOjpjZWlsKHN0ZDo6bG9nMigx
IC8gc2NhbGUpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3Vic2FtcGxpbmdMZXZlbD4oc3Rk
OjptaW4ocmVzdWx0LCBzdGF0aWNfY2FzdDxpbnQ+KG1fc291cmNlLT5tYXhpbXVtU3Vic2FtcGxp
bmdMZXZlbCgpKSkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5V
U0VEX1BBUkFNKHNjYWxlRmFjdG9yKTsKKyAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVm
YXVsdDsKKyNlbmRpZgorfQorCiBib29sIEJpdG1hcEltYWdlOjpjYW5EZXN0cm95RGVjb2RlZERh
dGEoKQogewogICAgIC8vIEFuaW1hdGVkIGltYWdlcyBzaG91bGQgcHJlc2VydmUgdGhlIGN1cnJl
bnQgZnJhbWUgdGlsbCB0aGUgbmV4dCBvbmUgZmluaXNoZXMgZGVjb2RpbmcuCi0gICAgaWYgKG1f
c291cmNlLmhhc0FzeW5jRGVjb2RpbmdRdWV1ZSgpKQorICAgIGlmIChtX3NvdXJjZS0+aGFzQXN5
bmNEZWNvZGluZ1F1ZXVlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNtYWxs
IGltYWdlIHNob3VsZCBiZSBkZWNvZGVkIHN5bmNocm9ub3VzbHkuIERlbGV0aW5nIGl0cyBkZWNv
ZGVkIGZyYW1lIGlzIGZpbmUuCkBAIC0zNzcsNyArNDA2LDcgQEAgQml0bWFwSW1hZ2U6OlN0YXJ0
QW5pbWF0aW9uU3RhdHVzIEJpdG1hcAogICAgICAgICAvLyB5ZXQgYW5kIG91ciByZXBldGl0aW9u
IGNvdW50IGlzIHBvdGVudGlhbGx5IHVuc2V0LiBUaGUgcmVwZXRpdGlvbiBjb3VudAogICAgICAg
ICAvLyBpbiBhIEdJRiBjYW4gcG90ZW50aWFsbHkgY29tZSBhZnRlciBhbGwgdGhlIHJlc3Qgb2Yg
dGhlIGltYWdlIGRhdGEsIHNvCiAgICAgICAgIC8vIHdhaXQgb24gaXQuCi0gICAgICAgIGlmICgh
bV9zb3VyY2UuaXNBbGxEYXRhUmVjZWl2ZWQoKSAmJiByZXBldGl0aW9uQ291bnQoKSA9PSBSZXBl
dGl0aW9uQ291bnRPbmNlKQorICAgICAgICBpZiAoIW1fc291cmNlLT5pc0FsbERhdGFSZWNlaXZl
ZCgpICYmIHJlcGV0aXRpb25Db3VudCgpID09IFJlcGV0aXRpb25Db3VudE9uY2UpCiAgICAgICAg
ICAgICByZXR1cm4gU3RhcnRBbmltYXRpb25TdGF0dXM6OkluY29tcGxldGVEYXRhOwogCiAgICAg
ICAgICsrbV9yZXBldGl0aW9uc0NvbXBsZXRlOwpAQCAtMzkzLDcgKzQyMiw3IEBAIEJpdG1hcElt
YWdlOjpTdGFydEFuaW1hdGlvblN0YXR1cyBCaXRtYXAKICAgICB9CiAKICAgICAvLyBEb24ndCBh
ZHZhbmNlIHRoZSBhbmltYXRpb24gdG8gYW4gaW5jb21wbGV0ZSBmcmFtZS4KLSAgICBpZiAoIW1f
c291cmNlLmlzQWxsRGF0YVJlY2VpdmVkKCkgJiYgIWZyYW1lSXNDb21wbGV0ZUF0SW5kZXgobmV4
dEZyYW1lKSkKKyAgICBpZiAoIW1fc291cmNlLT5pc0FsbERhdGFSZWNlaXZlZCgpICYmICFmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KG5leHRGcmFtZSkpCiAgICAgICAgIHJldHVybiBTdGFydEFuaW1h
dGlvblN0YXR1czo6SW5jb21wbGV0ZURhdGE7CiAKICAgICBNb25vdG9uaWNUaW1lIHRpbWUgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKQEAgLTQxMywxNCArNDQyLDE0IEBAIEJpdG1hcEltYWdlOjpT
dGFydEFuaW1hdGlvblN0YXR1cyBCaXRtYXAKICAgICAgICAgaWYgKGZyYW1lSGFzRGVjb2RlZE5h
dGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChuZXh0RnJhbWUsIG1fY3VycmVu
dFN1YnNhbXBsaW5nTGV2ZWwsIHsgfSkpCiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFw
SW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtjYWNoZWRGcmFtZUNvdW50ID0gJWxkIG5leHRGcmFt
ZSA9ICVsZF0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksICsrbV9jYWNoZWRGcmFtZUNvdW50LCBuZXh0RnJhbWUpOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIG1fc291cmNlLnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4
KG5leHRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCk7CisgICAgICAgICAgICBtX3Nv
dXJjZS0+cmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgobmV4dEZyYW1lLCBtX2N1cnJl
bnRTdWJzYW1wbGluZ0xldmVsKTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdT
dGF0dXMgPSBEZWNvZGluZ1N0YXR1czo6RGVjb2Rpbmc7CiAgICAgICAgICAgICBMT0coSW1hZ2Vz
LCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtyZXF1ZXN0aW5nIGFzeW5jIGRlY29k
aW5nIGZvciBuZXh0RnJhbWUgPSAlbGRdIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBuZXh0RnJhbWUpOwogICAgICAgICB9CiAKICAgICAg
ICAgbV9kZXNpcmVkRnJhbWVEZWNvZGVUaW1lRm9yVGVzdGluZyA9IHRpbWUgKyBzdGQ6Om1heCht
X2ZyYW1lRGVjb2RpbmdEdXJhdGlvbkZvclRlc3RpbmcsIDBfcyk7CiAgICAgICAgIGlmIChtX2Ns
ZWFyRGVjb2RlckFmdGVyQXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5nKQotICAgICAgICAgICAg
bV9zb3VyY2UucmVzZXREYXRhKGRhdGEoKSk7CisgICAgICAgICAgICBtX3NvdXJjZS0+cmVzZXRE
YXRhKGRhdGEoKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFtX2ZyYW1lVGltZXIpOwpAQCAtNDgy
LDcgKzUxMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0b3BBbmltYXRpb24oKQogICAgIC8vIHRo
ZSB0aW1lciB1bmxlc3MgYWxsIHJlbmRlcmVycyBoYXZlIHN0b3BwZWQgZHJhd2luZy4KICAgICBj
bGVhclRpbWVyKCk7CiAgICAgaWYgKGNhbkFuaW1hdGUoKSkKLSAgICAgICAgbV9zb3VyY2Uuc3Rv
cEFzeW5jRGVjb2RpbmdRdWV1ZSgpOworICAgICAgICBtX3NvdXJjZS0+c3RvcEFzeW5jRGVjb2Rp
bmdRdWV1ZSgpOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigpCkBAIC01
MTksOCArNTQ4LDggQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW1hZ2VGcmFtZUF2YWlsYWJsZUF0SQog
ICAgIH0KIAogICAgIEFTU0VSVChpbmRleCA9PSBtX2N1cnJlbnRGcmFtZSAmJiAhbV9jdXJyZW50
RnJhbWUpOwotICAgIGlmIChtX3NvdXJjZS5pc0FzeW5jRGVjb2RpbmdRdWV1ZUlkbGUoKSkKLSAg
ICAgICAgbV9zb3VyY2Uuc3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOworICAgIGlmIChtX3NvdXJj
ZS0+aXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCkpCisgICAgICAgIG1fc291cmNlLT5zdG9wQXN5
bmNEZWNvZGluZ1F1ZXVlKCk7CiAKICAgICBEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cyA9
IGZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBzZXRDdXJy
ZW50RnJhbWVEZWNvZGluZ1N0YXR1c0lmTmVjZXNzYXJ5KGRlY29kaW5nU3RhdHVzKTsKQEAgLTU0
NCw3ICs1NzMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjCiAg
ICAgaWYgKGlzQW5pbWF0ZWQoKSkKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJjdXJyZW50LWZy
YW1lIiwgbV9jdXJyZW50RnJhbWUpOwogICAgIAotICAgIG1fc291cmNlLmR1bXAodHMpOworICAg
IG1fc291cmNlLT5kdW1wKHRzKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiAyMjA4MDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw5ICsyOSw5IEBACiAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZl
ci5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbWFnZVNvdXJj
ZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIAogI2lmIFVTRShDRykgfHwgVVNFKEFQUEtJVCkK
QEAgLTcxLDMxICs3MSwzMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9y
aWdpbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIEVuY29kZWREYXRh
U3RhdHVzIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBvdmVycmlkZTsKLSAgICB1
bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmRlY29kZWRTaXpl
KCk7IH0KKyAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
LT5kZWNvZGVkU2l6ZSgpOyB9CiAKLSAgICBFbmNvZGVkRGF0YVN0YXR1cyBlbmNvZGVkRGF0YVN0
YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmVuY29kZWREYXRhU3RhdHVzKCk7IH0KLSAg
ICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmZyYW1lQ291bnQo
KTsgfQotICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3NvdXJjZS5yZXBldGl0aW9uQ291bnQoKTsgfQotICAgIFN0cmluZyB1dGkoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS51dGkoKTsgfQotICAgIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLmZpbGVuYW1lRXh0ZW5z
aW9uKCk7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9zb3VyY2UuaG90U3BvdCgpOyB9CisgICAgRW5jb2RlZERhdGFTdGF0
dXMgZW5jb2RlZERhdGFTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZW5jb2RlZERh
dGFTdGF0dXMoKTsgfQorICAgIHNpemVfdCBmcmFtZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2UtPmZyYW1lQ291bnQoKTsgfQorICAgIFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+cmVwZXRpdGlvbkNvdW50KCk7IH0KKyAgICBT
dHJpbmcgdXRpKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPnV0aSgpOyB9Cisg
ICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9z
b3VyY2UtPmZpbGVuYW1lRXh0ZW5zaW9uKCk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEludFBvaW50
PiBob3RTcG90KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPmhvdFNwb3QoKTsg
fQogCiAgICAgLy8gRmxvYXRTaXplIGR1ZSB0byBvdmVycmlkZS4KLSAgICBGbG9hdFNpemUgc2l6
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLnNpemUoKTsgfQotICAgIEludFNp
emUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnNp
emVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsgfQotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRD
b2xvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLnNpbmdsZVBpeGVsU29saWRD
b2xvcigpOyB9Ci0gICAgYm9vbCBmcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0
aE9wdGlvbnNBdEluZGV4KHNpemVfdCBpbmRleCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNv
ZGluZ09wdGlvbnMpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmZyYW1lSXNCZWluZ0RlY29kZWRB
bmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoaW5kZXgsIGRlY29kaW5nT3B0aW9ucyk7
IH0KLSAgICBEZWNvZGluZ1N0YXR1cyBmcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChzaXplX3Qg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4
KGluZGV4KTsgfQorICAgIEZsb2F0U2l6ZSBzaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9zb3VyY2UtPnNpemUoKTsgfQorICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7
IH0KKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3NvdXJjZS0+c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7IH0KKyAgICBib29sIGZyYW1l
SXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGlu
ZGV4LCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2UtPmZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9u
c0F0SW5kZXgoaW5kZXgsIGRlY29kaW5nT3B0aW9ucyk7IH0KKyAgICBEZWNvZGluZ1N0YXR1cyBm
cmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlLT5mcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChpbmRleCk7IH0KICAgICBib29sIGZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBmcmFtZURl
Y29kaW5nU3RhdHVzQXRJbmRleChpbmRleCkgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9
Ci0gICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsgfQorICAgIGJvb2wgZnJh
bWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+
ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOyB9CiAKLSAgICBib29sIGZyYW1lSGFzRnVsbFNp
emVOYXRpdmVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNh
bXBsaW5nTGV2ZWwpIHsgcmV0dXJuIG1fc291cmNlLmZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFn
ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9Ci0gICAgYm9vbCBmcmFtZUhhc0Rl
Y29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVs
LCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgeyByZXR1cm4gbV9zb3Vy
Y2UuZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBkZWNvZGluZ09wdGlvbnMpOyB9CisgICAgYm9vbCBm
cmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVIYXNGdWxs
U2l6ZU5hdGl2ZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7IH0KKyAgICBi
b29sIGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRl
eChzaXplX3QgaW5kZXgsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1
YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSB7
IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0
aE9wdGlvbnNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBkZWNvZGluZ09wdGlvbnMp
OyB9CiAKLSAgICBTdWJzYW1wbGluZ0xldmVsIGZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5kZXgo
c2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZVN1YnNhbXBsaW5nTGV2
ZWxBdEluZGV4KGluZGV4KTsgfQorICAgIFN1YnNhbXBsaW5nTGV2ZWwgZnJhbWVTdWJzYW1wbGlu
Z0xldmVsQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5mcmFt
ZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KTsgfQogCi0gICAgZmxvYXQgZnJhbWVEdXJh
dGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUR1
cmF0aW9uQXRJbmRleChpbmRleCk7IH0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50
YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVP
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOyB9CisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVEdXJhdGlvbkF0
SW5kZXgoaW5kZXgpOyB9CisgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZU9yaWVudGF0
aW9uQXRJbmRleChpbmRleCk7IH0KIAogICAgIHNpemVfdCBjdXJyZW50RnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX2N1cnJlbnRGcmFtZTsgfQogICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0Jl
T3BhcXVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIWZyYW1lSGFzQWxwaGFBdEluZGV4KGN1
cnJlbnRGcmFtZSgpKTsgfQpAQCAtMTQyLDcgKzE0Miw3IEBAIHByb3RlY3RlZDoKICAgICBXRUJD
T1JFX0VYUE9SVCBCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmLCBJbWFnZU9ic2VydmVyKiA9
IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIq
ID0gbnVsbHB0cik7CiAKLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIG1fc291cmNlLmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsgfQor
ICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1
cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsgfQogICAgIE5hdGl2ZUltYWdl
UHRyIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2
ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCBjb25zdCBHcmFwaGljc0NvbnRleHQqID0g
bnVsbHB0cik7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hl
biB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKQEAgLTE2NSw3ICsxNjUsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICAvLyBBbmltYXRpb24uCiAgICAgZW51bSBjbGFzcyBTdGFydEFuaW1h
dGlvblN0YXR1cyB7IENhbm5vdFN0YXJ0LCBJbmNvbXBsZXRlRGF0YSwgVGltZXJBY3RpdmUsIERl
Y29kaW5nQWN0aXZlLCBTdGFydGVkIH07Ci0gICAgYm9vbCBpc0FuaW1hdGVkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVDb3VudCgpID4gMTsgfQorICAgIGJvb2wgaXNB
bmltYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZUNvdW50KCkg
PiAxOyB9CiAgICAgYm9vbCBzaG91bGRBbmltYXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzdGFydEFu
aW1hdGlvbigpIG92ZXJyaWRlIHsgaW50ZXJuYWxTdGFydEFuaW1hdGlvbigpOyB9CiAgICAgU3Rh
cnRBbmltYXRpb25TdGF0dXMgaW50ZXJuYWxTdGFydEFuaW1hdGlvbigpOwpAQCAtMTk0LDYgKzE5
NCw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclRpbWVyKCk7CiAgICAg
dm9pZCBzdGFydFRpbWVyKFNlY29uZHMgZGVsYXkpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
U2l6ZSYgc2NhbGVGYWN0b3IpOwogICAgIGJvb2wgY2FuRGVzdHJveURlY29kZWREYXRhKCk7CiAg
ICAgdm9pZCBzZXRDdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1c0lmTmVjZXNzYXJ5KERlY29kaW5n
U3RhdHVzKTsKICAgICBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CkBAIC0yMDIsNyArMjAzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBBbmltYXRlZCBp
bWFnZXMgb3ZlciBhIGNlcnRhaW4gc2l6ZSBhcmUgY29uc2lkZXJlZCBsYXJnZSBlbm91Z2ggdGhh
dCB3ZSdsbCBvbmx5IGhhbmcgb24gdG8gb25lIGZyYW1lIGF0IGEgdGltZS4KICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgTGFyZ2VBbmltYXRpb25DdXRvZmYgPSAzMCAqIDEwMTQgKiAxMDI0Owog
Ci0gICAgbXV0YWJsZSBJbWFnZVNvdXJjZSBtX3NvdXJjZTsKKyAgICBtdXRhYmxlIFJlZjxJbWFn
ZUZyYW1lQ2FjaGU+IG1fc291cmNlOwogCiAgICAgc2l6ZV90IG1fY3VycmVudEZyYW1lIHsgMCB9
OyAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgZnJhbWUgb2YgYW5pbWF0aW9uLgogICAgIFN1
YnNhbXBsaW5nTGV2ZWwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCB7IFN1YnNhbXBsaW5nTGV2
ZWw6OkRlZmF1bHQgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gMjIwODAxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBj
b3B5KQpAQCAtOTIsNyArOTIsNiBAQCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CiBjbGFzcyBI
b3N0V2luZG93OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdl
U291cmNlOwogY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7
CkBAIC0xMjQ2LDcgKzEyNDUsNiBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgZXh0cmFjdEltYWdl
KGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7
CiAKICNpZiBVU0UoQ0FJUk8pCi0gICAgICAgIEltYWdlU291cmNlKiBtX2RlY29kZXI7CiAgICAg
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2VTdXJmYWNlOwogI2VsaWYgVVNFKENH
KQogICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jZ0ltYWdlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3Bw
CShyZXZpc2lvbiAyMjA4MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0NywxMCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUltYWdlRnJhbWVDYWNoZTo6SW1hZ2VGcmFtZUNhY2hlKElt
YWdlKiBpbWFnZSkKK0ltYWdlRnJhbWVDYWNoZTo6SW1hZ2VGcmFtZUNhY2hlKEltYWdlKiBpbWFn
ZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAsIG1f
YWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCisgICAgLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogewogfQogCkBAIC03MywyMSArNzUsNzIg
QEAgSW1hZ2VGcmFtZUNhY2hlOjp+SW1hZ2VGcmFtZUNhY2hlKCkKICAgICBBU1NFUlQoIWhhc0Fz
eW5jRGVjb2RpbmdRdWV1ZSgpKTsKIH0KIAotdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnNldERlY29k
ZXIoSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKQorYm9vbCBJbWFnZUZyYW1lQ2FjaGU6OmVuc3VyZURl
Y29kZXJBdmFpbGFibGUoU2hhcmVkQnVmZmVyKiBkYXRhKQogewotICAgIGlmIChtX2RlY29kZXIg
PT0gZGVjb2RlcikKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghZGF0YSB8fCBpc0RlY29kZXJB
dmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2RlY29kZXIgPSBJbWFn
ZURlY29kZXI6OmNyZWF0ZSgqZGF0YSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbik7CisgICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIGRlY29kZXIgaGFzIHRvIHN0b3AgdGhl
IGRlY29kaW5nIHRocmVhZC4gVGhlIGN1cnJlbnQgZnJhbWUgd2lsbAogICAgIC8vIGNvbnRpbnVl
IGRlY29kaW5nIHNhZmVseSBiZWNhdXNlIHRoZSBkZWNvZGluZyB0aHJlYWQgaGFzIGl0cyBvd24K
ICAgICAvLyByZWZlcmVuY2Ugb2YgdGhlIG9sZCBkZWNvZGVyLgogICAgIHN0b3BBc3luY0RlY29k
aW5nUXVldWUoKTsKLSAgICBtX2RlY29kZXIgPSBkZWNvZGVyOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEltYWdlRnJhbWVDYWNoZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICghZGF0YSB8fCAhZW5zdXJlRGVjb2RlckF2
YWlsYWJsZShkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kZWNvZGVyLT5zZXREYXRh
KCpkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi1JbWFnZURlY29kZXIqIEltYWdlRnJhbWVD
YWNoZTo6ZGVjb2RlcigpIGNvbnN0Cit2b2lkIEltYWdlRnJhbWVDYWNoZTo6cmVzZXREYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSkKIHsKLSAgICByZXR1cm4gbV9kZWNvZGVyLmdldCgpOworICAgIG1f
ZGVjb2RlciA9IG51bGxwdHI7CisgICAgc2V0RGF0YShkYXRhLCBpc0FsbERhdGFSZWNlaXZlZCgp
KTsKK30KKworRW5jb2RlZERhdGFTdGF0dXMgSW1hZ2VGcmFtZUNhY2hlOjpkYXRhQ2hhbmdlZChT
aGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworI2lmIFBMQVRGT1JN
KElPUykKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV4cG9zZSBhIHNldHRpbmcgdG8gZW5hYmxl
L2Rpc2FibGUgcHJvZ3Jlc3NpdmUgbG9hZGluZyBhbmQgbWFrZSB0aGlzCisgICAgLy8gY29kZSBj
b25kaXRpb25hbCBvbiBpdC4gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1
YXJkLgorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgY2h1bmtMb2FkSW50ZXJ2YWxzW10gPSB7MCwg
MSwgMywgNiwgMTV9OworICAgIGRvdWJsZSBpbnRlcnZhbCA9IGNodW5rTG9hZEludGVydmFsc1tz
dGQ6Om1pbihtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQsIHN0YXRpY19jYXN0PHVpbnQxNl90
Pig0KSldOworCisgICAgYm9vbCBuZWVkc1VwZGF0ZSA9IGZhbHNlOworCisgICAgLy8gVGhlIGZp
cnN0IHRpbWUgdGhyb3VnaCwgdGhlIGNodW5rIHRpbWUgd2lsbCBiZSAwIGFuZCB0aGUgaW1hZ2Ug
d2lsbCBnZXQgYW4gdXBkYXRlLgorICAgIGlmIChjdXJyZW50VGltZSgpIC0gbV9wcm9ncmVzc2l2
ZUxvYWRDaHVua1RpbWUgPiBpbnRlcnZhbCkgeworICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7
CisgICAgICAgIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lID0gY3VycmVudFRpbWUoKTsKKyAg
ICAgICAgQVNTRVJUKG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpOworICAgICAgICArK21fcHJvZ3Jlc3NpdmVMb2FkQ2h1
bmtDb3VudDsKKyAgICB9CisKKyAgICBpZiAobmVlZHNVcGRhdGUgfHwgYWxsRGF0YVJlY2VpdmVk
KQorICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisjZWxzZQorICAgIHNl
dERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKyNlbmRpZgorCisgICAgY2xlYXJNZXRhZGF0
YSgpOworICAgIEVuY29kZWREYXRhU3RhdHVzIHN0YXR1cyA9IGVuY29kZWREYXRhU3RhdHVzKCk7
CisgICAgaWYgKHN0YXR1cyA8IEVuY29kZWREYXRhU3RhdHVzOjpTaXplQXZhaWxhYmxlKQorICAg
ICAgICByZXR1cm4gc3RhdHVzOworCisgICAgZ3Jvd0ZyYW1lcygpOworICAgIHJldHVybiBzdGF0
dXM7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hlOjppc0FsbERhdGFSZWNlaXZlZCgpCit7Cisg
ICAgcmV0dXJuIGlzRGVjb2RlckF2YWlsYWJsZSgpID8gbV9kZWNvZGVyLT5pc0FsbERhdGFSZWNl
aXZlZCgpIDogZnJhbWVDb3VudCgpOwogfQogCiB2b2lkIEltYWdlRnJhbWVDYWNoZTo6ZGVzdHJv
eURlY29kZWREYXRhKHNpemVfdCBmcmFtZUNvdW50LCBzaXplX3QgZXhjbHVkZUZyYW1lKQpAQCAt
MTE5LDYgKzE3MiwxNSBAQCB2b2lkIEltYWdlRnJhbWVDYWNoZTo6ZGVzdHJveUluY29tcGxldGVE
CiAgICAgZGVjb2RlZFNpemVEZWNyZWFzZWQoZGVjb2RlZFNpemUpOwogfQogCisjaWYgIVVTRShD
RykKK3ZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3Qg
YmVmb3JlRnJhbWUpCit7CisgICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZGVjb2Rlci0+ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUoYmVmb3JlRnJh
bWUpOworfQorI2VuZGlmCisKIHZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpkZWNvZGVkU2l6ZUNoYW5n
ZWQobG9uZyBsb25nIGRlY29kZWRTaXplKQogewogICAgIGlmICghZGVjb2RlZFNpemUgfHwgIW1f
aW1hZ2UgfHwgIW1faW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKSkKQEAgLTI3MCw2ICszMzIsMTQgQEAg
UmVmPFdvcmtRdWV1ZT4gSW1hZ2VGcmFtZUNhY2hlOjpkZWNvZGluZwogICAgIHJldHVybiAqbV9k
ZWNvZGluZ1F1ZXVlOwogfQogCitib29sIEltYWdlRnJhbWVDYWNoZTo6Y2FuVXNlQXN5bmNEZWNv
ZGluZygpCit7CisgICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IHRoZSBiZXN0IGhldXJpc3RpYyBmb3Ig
ZW5hYmxpbmcgYXN5bmMgaW1hZ2UgZGVjb2RpbmcuCisgICAgcmV0dXJuIHNpemUoKS5hcmVhKCkg
KiBzaXplb2YoUkdCQTMyKSA+PSAoZnJhbWVDb3VudCgpID4gMSA/IDEwMCAqIEtCIDogNTAwICog
S0IpOworfQorCiB2b2lkIEltYWdlRnJhbWVDYWNoZTo6c3RhcnRBc3luY0RlY29kaW5nUXVldWUo
KQogewogICAgIGlmIChoYXNBc3luY0RlY29kaW5nUXVldWUoKSB8fCAhaXNEZWNvZGVyQXZhaWxh
YmxlKCkpCkBAIC00OTEsNiArNTYxLDI5IEBAIENvbG9yIEltYWdlRnJhbWVDYWNoZTo6c2luZ2xl
UGl4ZWxTb2xpZEMKICAgICByZXR1cm4gZnJhbWVNZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVk
PENvbG9yPigwLCAoJkltYWdlRnJhbWU6OnNpbmdsZVBpeGVsU29saWRDb2xvciksICZtX3Npbmds
ZVBpeGVsU29saWRDb2xvciwgSW1hZ2VGcmFtZTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7
CiB9CiAKK1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VGcmFtZUNhY2hlOjptYXhpbXVtU3Vic2FtcGxp
bmdMZXZlbCgpCit7CisgICAgaWYgKG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpCisgICAgICAg
IHJldHVybiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsLnZhbHVlKCk7CisKKyAgICBpZiAoIWlz
RGVjb2RlckF2YWlsYWJsZSgpIHx8ICFtX2RlY29kZXItPmZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0
SW5kZXgoMCkpCisgICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OworCisg
ICAgLy8gRklYTUU6IHRoaXMgdmFsdWUgd2FzIGNob3NlbiB0byBiZSBhcHByb3ByaWF0ZSBmb3Ig
aU9TIHNpbmNlIHRoZSBpbWFnZQorICAgIC8vIHN1YnNhbXBsaW5nIGlzIG9ubHkgZW5hYmxlZCBi
eSBkZWZhdWx0IG9uIGlPUy4gQ2hvb3NlIGEgZGlmZmVyZW50IHZhbHVlCisgICAgLy8gaWYgaW1h
Z2Ugc3Vic2FtcGxpbmcgaXMgZW5hYmxlZCBvbiBvdGhlciBwbGF0Zm9ybS4KKyAgICBjb25zdCBp
bnQgbWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0Owor
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgbGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpGaXJzdDsKKwor
ICAgIGZvciAoOyBsZXZlbCA8IFN1YnNhbXBsaW5nTGV2ZWw6Okxhc3Q7ICsrbGV2ZWwpIHsKKyAg
ICAgICAgaWYgKGZyYW1lU2l6ZUF0SW5kZXgoMCwgbGV2ZWwpLmFyZWEoKS51bnNhZmVHZXQoKSA8
IG1heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZykKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBsZXZlbDsKKyAgICByZXR1
cm4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbC52YWx1ZSgpOworfQorCiBib29sIEltYWdlRnJh
bWVDYWNoZTo6ZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJ
bmRleChzaXplX3QgaW5kZXgsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25z
KQogewogICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYobV9mcmFtZUNvbW1pdFF1ZXVlLmJlZ2lu
KCksIG1fZnJhbWVDb21taXRRdWV1ZS5lbmQoKSwgW2luZGV4LCAmZGVjb2RpbmdPcHRpb25zXShj
b25zdCBJbWFnZUZyYW1lUmVxdWVzdCYgZnJhbWVSZXF1ZXN0KSB7CkBAIC01NDQsNiArNjM3LDE5
IEBAIEltYWdlT3JpZW50YXRpb24gSW1hZ2VGcmFtZUNhY2hlOjpmcmFtZU8KICAgICByZXR1cm4g
ZnJhbWVNZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVkPEltYWdlT3JpZW50YXRpb24+KGluZGV4
LCAoJkltYWdlRnJhbWU6Om9yaWVudGF0aW9uKSwgbnVsbHB0ciwgSW1hZ2VGcmFtZTo6Q2FjaGlu
Zzo6TWV0YWRhdGEpOwogfQogCisjaWYgVVNFKERJUkVDVDJEKQordm9pZCBJbWFnZUZyYW1lQ2Fj
aGU6OnNldFRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0
KQoreworICAgIGlmIChpc0RlY29kZXJBdmFpbGFibGUoKSAmJiB0YXJnZXRDb250ZXh0KQorICAg
ICAgICBtX2RlY29kZXItPnNldFRhcmdldENvbnRleHQodGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCkpCit9CisjZW5kaWYKKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZUNhY2hlOjpj
cmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbCkKK3sKKyAgICByZXR1cm4gaXNEZWNvZGVyQXZhaWxhYmxlKCkgPyBtX2Rl
Y29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6
IG51bGxwdHI7Cit9CisKIE5hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWVDYWNoZTo6ZnJhbWVJbWFn
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIHJldHVybiBmcmFtZU1ldGFkYXRhQXRJbmRl
eDxOYXRpdmVJbWFnZVB0cj4oaW5kZXgsICgmSW1hZ2VGcmFtZTo6bmF0aXZlSW1hZ2UpKTsKQEAg
LTU1NCw0ICs2NjAsMTYgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZUNhY2hlOjpmcmFtZUlt
YQogICAgIHJldHVybiBmcmFtZU1ldGFkYXRhQXRJbmRleENhY2hlSWZOZWVkZWQ8TmF0aXZlSW1h
Z2VQdHI+KGluZGV4LCAoJkltYWdlRnJhbWU6Om5hdGl2ZUltYWdlKSwgbnVsbHB0ciwgSW1hZ2VG
cmFtZTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAK
K3ZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpkdW1wKFRleHRTdHJlYW0mIHRzKQoreworICAgIHRzLmR1
bXBQcm9wZXJ0eSgidHlwZSIsIGZpbGVuYW1lRXh0ZW5zaW9uKCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZnJhbWUtY291bnQiLCBmcmFtZUNvdW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cmVwZXRpdGlvbnMiLCByZXBldGl0aW9uQ291bnQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJz
b2xpZC1jb2xvciIsIHNpbmdsZVBpeGVsU29saWRDb2xvcigpKTsKKworICAgIEltYWdlT3JpZW50
YXRpb24gb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleCgwKTsKKyAgICBpZiAo
b3JpZW50YXRpb24gIT0gT3JpZ2luVG9wTGVmdCkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJv
cmllbnRhdGlvbiIsIG9yaWVudGF0aW9uKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmgJKHJldmlzaW9uIDIy
MDgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaD4KICNpbmNsdWRl
IDx3dGYvV29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDExICs0MSwxNSBAQCBjbGFzcyBJbWFnZURlY29k
ZXI7CiBjbGFzcyBVUkw7CiAKIGNsYXNzIEltYWdlRnJhbWVDYWNoZSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxJbWFnZUZyYW1lQ2FjaGU+IHsKLSAgICBmcmllbmQgY2xhc3MgSW1hZ2VT
b3VyY2U7CisgICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoSW1hZ2UqIGltYWdlKQorICAgIEltYWdlRnJh
bWVDYWNoZShJbWFnZSosIEFscGhhT3B0aW9uID0gQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQs
IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uID0gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246
OkFwcGxpZWQpOworICAgIEltYWdlRnJhbWVDYWNoZShOYXRpdmVJbWFnZVB0ciYmKTsKKyAgICB+
SW1hZ2VGcmFtZUNhY2hlKCk7CisKKyAgICBzdGF0aWMgUmVmPEltYWdlRnJhbWVDYWNoZT4gY3Jl
YXRlKEltYWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24gPSBBbHBoYU9wdGlvbjo6
UHJlbXVsdGlwbGllZCwgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb24gPSBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRnJhbWVDYWNoZShpbWFnZSkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUZyYW1lQ2FjaGUoaW1hZ2UsIGFscGhh
T3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogICAgIH0KIAogICAgIHN0YXRp
YyBSZWY8SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoTmF0aXZlSW1hZ2VQdHImJiBuYXRpdmVJbWFn
ZSkKQEAgLTUyLDE2ICs1NywxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEltYWdlRnJhbWVDYWNoZShXVEZNb3ZlKG5hdGl2ZUltYWdlKSkpOwogICAgIH0KIAotICAg
IH5JbWFnZUZyYW1lQ2FjaGUoKTsKLQotICAgIHZvaWQgc2V0RGVjb2RlcihJbWFnZURlY29kZXIq
KTsKLSAgICBJbWFnZURlY29kZXIqIGRlY29kZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgdm9pZCByZXNl
dERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhKTsKKyAgICBFbmNvZGVkRGF0YVN0YXR1cyBkYXRhQ2hh
bmdlZChTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBib29s
IGlzQWxsRGF0YVJlY2VpdmVkKCk7CiAKICAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVjb2RlZFNpemU7IH0KICAgICB2b2lkIGRlc3Ryb3lBbGxEZWNvZGVkRGF0
YSgpIHsgZGVzdHJveURlY29kZWREYXRhKGZyYW1lQ291bnQoKSwgZnJhbWVDb3VudCgpKTsgfQog
ICAgIHZvaWQgZGVzdHJveUFsbERlY29kZWREYXRhRXhjbHVkZUZyYW1lKHNpemVfdCBleGNsdWRl
RnJhbWUpIHsgZGVzdHJveURlY29kZWREYXRhKGZyYW1lQ291bnQoKSwgZXhjbHVkZUZyYW1lKTsg
fQogICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhQmVmb3JlRnJhbWUoc2l6ZV90IGJlZm9yZUZy
YW1lKSB7IGRlc3Ryb3lEZWNvZGVkRGF0YShiZWZvcmVGcmFtZSwgYmVmb3JlRnJhbWUpOyB9CiAg
ICAgdm9pZCBkZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7CisjaWYgIVVTRShDRykKKyAg
ICB2b2lkIGRlc3Ryb3lGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBiZWZvcmVGcmFtZSk7CisjZW5k
aWYKIAogICAgIHZvaWQgZ3Jvd0ZyYW1lcygpOwogICAgIHZvaWQgY2xlYXJNZXRhZGF0YSgpOwpA
QCAtNjksOCArNzcsOSBAQCBwdWJsaWM6CiAgICAgVVJMIHNvdXJjZVVSTCgpIGNvbnN0OwogCiAg
ICAgLy8gQXN5bmNocm9ub3VzIGltYWdlIGRlY29kaW5nCisgICAgYm9vbCBjYW5Vc2VBc3luY0Rl
Y29kaW5nKCk7CiAgICAgdm9pZCBzdGFydEFzeW5jRGVjb2RpbmdRdWV1ZSgpOwotICAgIHZvaWQg
cmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEludFNpemU+Jik7CisgICAgdm9pZCByZXF1ZXN0RnJhbWVB
c3luY0RlY29kaW5nQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8SW50U2l6ZT4mID0geyB9KTsKICAgICB2b2lkIHN0b3BBc3luY0RlY29kaW5nUXVl
dWUoKTsKICAgICBib29sIGhhc0FzeW5jRGVjb2RpbmdRdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVjb2RpbmdRdWV1ZTsgfQogICAgIGJvb2wgaXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCkgY29u
c3Q7CkBAIC04OCw4ICs5Nyw4IEBAIHB1YmxpYzoKICAgICAvLyBJbWFnZSBtZXRhZGF0YSB3aGlj
aCBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGZpcnN0IEltYWdlRnJhbWUuCiAgICAgSW50U2l6ZSBz
aXplKCk7CiAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7Ci0KICAgICBD
b2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIG1heGlt
dW1TdWJzYW1wbGluZ0xldmVsKCk7CiAKICAgICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNo
IGRvZXMgbm90IHJlcXVpcmUgY2FjaGluZyB0aGUgSW1hZ2VGcmFtZS4KICAgICBib29sIGZyYW1l
SXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90LCBj
b25zdCBEZWNvZGluZ09wdGlvbnMmKTsKQEAgLTEwNiwxMyArMTE1LDE0IEBAIHB1YmxpYzoKICAg
ICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIEltYWdlT3JpZW50YXRp
b24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KTsKIAorI2lmIFVTRShESVJFQ1QyRCkK
KyAgICB2b2lkIHNldFRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0Kik7CisjZW5k
aWYKKyAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1
YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKICAgICBOYXRpdmVJ
bWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwotICAgIE5hdGl2ZUltYWdlUHRyIGZy
YW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpOwor
ICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3Qs
IFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KTsKIAogcHJpdmF0
ZToKLSAgICBJbWFnZUZyYW1lQ2FjaGUoSW1hZ2UqKTsKLSAgICBJbWFnZUZyYW1lQ2FjaGUoTmF0
aXZlSW1hZ2VQdHImJik7Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBUIChJbWFnZURlY29k
ZXI6OipmdW5jdG9yKSgpIGNvbnN0PgogICAgIFQgbWV0YWRhdGEoY29uc3QgVCYgZGVmYXVsdFZh
bHVlLCBzdGQ6Om9wdGlvbmFsPFQ+KiBjYWNoZWRWYWx1ZSA9IG51bGxwdHIpOwogCkBAIC0xMjIs
NiArMTMyLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4u
LiBBcmdzPgogICAgIFQgZnJhbWVNZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCwg
VCAoSW1hZ2VGcmFtZTo6KmZ1bmN0b3IpKCkgY29uc3QsICBzdGQ6Om9wdGlvbmFsPFQ+KiBjYWNo
ZWRWYWx1ZSwgQXJncyYmLi4uKTsKIAorICAgIGJvb2wgZW5zdXJlRGVjb2RlckF2YWlsYWJsZShT
aGFyZWRCdWZmZXIqIGRhdGEpOwogICAgIGJvb2wgaXNEZWNvZGVyQXZhaWxhYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWNvZGVyOyB9CiAgICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoc2l6ZV90
IGZyYW1lQ291bnQsIHNpemVfdCBleGNsdWRlRnJhbWUpOwogICAgIHZvaWQgZGVjb2RlZFNpemVD
aGFuZ2VkKGxvbmcgbG9uZyBkZWNvZGVkU2l6ZSk7CkBAIC0xMzksMTEgKzE1MCwyMSBAQCBwcml2
YXRlOgogCiAgICAgY29uc3QgSW1hZ2VGcmFtZSYgZnJhbWVBdEluZGV4Q2FjaGVJZk5lZWRlZChz
aXplX3QsIEltYWdlRnJhbWU6OkNhY2hpbmcsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxp
bmdMZXZlbD4mID0geyB9KTsKIAorICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJik7CisKICAgICBJ
bWFnZSogbV9pbWFnZSB7IG51bGxwdHIgfTsKICAgICBSZWZQdHI8SW1hZ2VEZWNvZGVyPiBtX2Rl
Y29kZXI7CisgICAgQWxwaGFPcHRpb24gbV9hbHBoYU9wdGlvbiB7IEFscGhhT3B0aW9uOjpQcmVt
dWx0aXBsaWVkIH07CisgICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiB7IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkIH07
CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBz
ZXR0aW5nIHRvIGVuYWJsZS9kaXNhYmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgc28gdGhhdCB3ZSBj
YW4gcmVtb3ZlIHRoZSBQTEFURk9STShJT1MpLWd1YXJkLgorICAgIGRvdWJsZSBtX3Byb2dyZXNz
aXZlTG9hZENodW5rVGltZSB7IDAgfTsKKyAgICB1aW50MTZfdCBtX3Byb2dyZXNzaXZlTG9hZENo
dW5rQ291bnQgeyAwIH07CisjZW5kaWYKKwogICAgIHVuc2lnbmVkIG1fZGVjb2RlZFNpemUgeyAw
IH07CiAgICAgdW5zaWduZWQgbV9kZWNvZGVkUHJvcGVydGllc1NpemUgeyAwIH07Ci0KICAgICBW
ZWN0b3I8SW1hZ2VGcmFtZSwgMT4gbV9mcmFtZXM7CiAKICAgICAvLyBBc3luY2hyb25vdXMgaW1h
Z2UgZGVjb2RpbmcuCkBAIC0xNzYsNiArMTk3LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlv
bmFsPEludFNpemU+IG1fc2l6ZTsKICAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IG1fc2l6ZVJl
c3BlY3RpbmdPcmllbnRhdGlvbjsKICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBtX3NpbmdsZVBp
eGVsU29saWRDb2xvcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+IG1fbWF4
aW11bVN1YnNhbXBsaW5nTGV2ZWw7CiB9OwogICAgIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkocmV2aXNpb24gMjIwODAx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShu
b25leGlzdGVudCkKQEAgLTEsMjI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMTAsIDIwMTEsIDIwMTIsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJv
cmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYwot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCi0jaWYg
UExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0
ZW1JbnRlcmZhY2UuaD4KLSNlbmRpZgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIklt
YWdlRGVjb2RlckRpcmVjdDJELmgiCi0jZWxzZQotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgot
I2VuZGlmCi0KLSNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VTb3VyY2U6OkltYWdl
U291cmNlKE5hdGl2ZUltYWdlUHRyJiYgbmF0aXZlSW1hZ2UpCi0gICAgOiBtX2ZyYW1lQ2FjaGUo
SW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpKQotewotfQotICAg
IAotSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxw
aGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uKQotICAgIDogbV9mcmFtZUNhY2hlKEltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlKGltYWdl
KSkKLSAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCi0gICAgLCBtX2dhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotewotfQotCi1JbWFn
ZVNvdXJjZTo6fkltYWdlU291cmNlKCkKLXsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQotewotICAgIGlmICghaXNE
ZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2RlY29kZXItPmNsZWFy
RnJhbWVCdWZmZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsKLX0KLQotYm9vbCBJbWFnZVNvdXJj
ZTo6ZW5zdXJlRGVjb2RlckF2YWlsYWJsZShTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgaWYg
KCFkYXRhIHx8IGlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIG1fZGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9u
LCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKLSAgICBpZiAoIWlzRGVjb2RlckF2YWls
YWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2ZyYW1lQ2FjaGUtPnNldERl
Y29kZXIobV9kZWNvZGVyLmdldCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJbWFn
ZVNvdXJjZTo6c2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0
YXJnZXRDb250ZXh0KQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBpZiAoIWlzRGVjb2RlckF2
YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodGFyZ2V0Q29udGV4dCkKLSAg
ICAgICAgbV9kZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0KHRhcmdldENvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBpZiAoIWRhdGEgfHwgIWVuc3VyZURlY29kZXJB
dmFpbGFibGUoZGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGVjb2Rlci0+c2V0RGF0
YSgqZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6cmVzZXRE
YXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICBtX2RlY29kZXIgPSBudWxscHRyOwotICAg
IG1fZnJhbWVDYWNoZS0+c2V0RGVjb2RlcihudWxscHRyKTsKLSAgICBzZXREYXRhKGRhdGEsIGlz
QWxsRGF0YVJlY2VpdmVkKCkpOwotfQotCi1FbmNvZGVkRGF0YVN0YXR1cyBJbWFnZVNvdXJjZTo6
ZGF0YUNoYW5nZWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsK
LSNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2UgYSBzZXR0
aW5nIHRvIGVuYWJsZS9kaXNhYmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgYW5kIG1ha2UgdGhpcwot
ICAgIC8vIGNvZGUgY29uZGl0aW9uYWwgb24gaXQuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgUExB
VEZPUk0oSU9TKS1ndWFyZC4KLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGNodW5rTG9hZEludGVy
dmFsc1tdID0gezAsIDEsIDMsIDYsIDE1fTsKLSAgICBkb3VibGUgaW50ZXJ2YWwgPSBjaHVua0xv
YWRJbnRlcnZhbHNbc3RkOjptaW4obV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50LCBzdGF0aWNf
Y2FzdDx1aW50MTZfdD4oNCkpXTsKLQotICAgIGJvb2wgbmVlZHNVcGRhdGUgPSBmYWxzZTsKLQot
ICAgIC8vIFRoZSBmaXJzdCB0aW1lIHRocm91Z2gsIHRoZSBjaHVuayB0aW1lIHdpbGwgYmUgMCBh
bmQgdGhlIGltYWdlIHdpbGwgZ2V0IGFuIHVwZGF0ZS4KLSAgICBpZiAoY3VycmVudFRpbWUoKSAt
IG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtUaW1lID4gaW50ZXJ2YWwpIHsKLSAgICAgICAgbmVlZHNV
cGRhdGUgPSB0cnVlOwotICAgICAgICBtX3Byb2dyZXNzaXZlTG9hZENodW5rVGltZSA9IGN1cnJl
bnRUaW1lKCk7Ci0gICAgICAgIEFTU0VSVChtX3Byb2dyZXNzaXZlTG9hZENodW5rQ291bnQgPD0g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKTsKLSAgICAgICAgKyttX3Byb2dy
ZXNzaXZlTG9hZENodW5rQ291bnQ7Ci0gICAgfQotCi0gICAgaWYgKG5lZWRzVXBkYXRlIHx8IGFs
bERhdGFSZWNlaXZlZCkKLSAgICAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwot
I2Vsc2UKLSAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0jZW5kaWYKLQotICAg
IG1fZnJhbWVDYWNoZS0+Y2xlYXJNZXRhZGF0YSgpOwotICAgIEVuY29kZWREYXRhU3RhdHVzIHN0
YXR1cyA9IGVuY29kZWREYXRhU3RhdHVzKCk7Ci0gICAgaWYgKHN0YXR1cyA8IEVuY29kZWREYXRh
U3RhdHVzOjpTaXplQXZhaWxhYmxlKQotICAgICAgICByZXR1cm4gc3RhdHVzOwotCi0gICAgbV9m
cmFtZUNhY2hlLT5ncm93RnJhbWVzKCk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotYm9vbCBJ
bWFnZVNvdXJjZTo6aXNBbGxEYXRhUmVjZWl2ZWQoKQotewotICAgIHJldHVybiBpc0RlY29kZXJB
dmFpbGFibGUoKSA/IG1fZGVjb2Rlci0+aXNBbGxEYXRhUmVjZWl2ZWQoKSA6IG1fZnJhbWVDYWNo
ZS0+ZnJhbWVDb3VudCgpOwotfQotCi1ib29sIEltYWdlU291cmNlOjpjYW5Vc2VBc3luY0RlY29k
aW5nKCkKLXsKLSAgICBpZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgdGhlIGJlc3QgaGV1cmlzdGljIGZvciBl
bmFibGluZyBhc3luYyBpbWFnZSBkZWNvZGluZy4KLSAgICByZXR1cm4gc2l6ZSgpLmFyZWEoKSAq
IHNpemVvZihSR0JBMzIpID49IChmcmFtZUNvdW50KCkgPiAxID8gMTAwICogS0IgOiA1MDAgKiBL
Qik7Ci19Ci0KLVN1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6Om1heGltdW1TdWJzYW1wbGlu
Z0xldmVsKCkKLXsKLSAgICBpZiAobV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAg
cmV0dXJuIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwudmFsdWUoKTsKLQotICAgIGlmICghaXNE
ZWNvZGVyQXZhaWxhYmxlKCkgfHwgIW1fZGVjb2Rlci0+ZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJ
bmRleCgwKSkKLSAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7Ci0KLSAg
ICAvLyBGSVhNRTogdGhpcyB2YWx1ZSB3YXMgY2hvc2VuIHRvIGJlIGFwcHJvcHJpYXRlIGZvciBp
T1Mgc2luY2UgdGhlIGltYWdlCi0gICAgLy8gc3Vic2FtcGxpbmcgaXMgb25seSBlbmFibGVkIGJ5
IGRlZmF1bHQgb24gaU9TLiBDaG9vc2UgYSBkaWZmZXJlbnQgdmFsdWUKLSAgICAvLyBpZiBpbWFn
ZSBzdWJzYW1wbGluZyBpcyBlbmFibGVkIG9uIG90aGVyIHBsYXRmb3JtLgotICAgIGNvbnN0IGlu
dCBtYXhpbXVtSW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxpbmcgPSA1ICogMTAyNCAqIDEwMjQ7Ci0g
ICAgU3Vic2FtcGxpbmdMZXZlbCBsZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkZpcnN0OwotCi0g
ICAgZm9yICg7IGxldmVsIDwgU3Vic2FtcGxpbmdMZXZlbDo6TGFzdDsgKytsZXZlbCkgewotICAg
ICAgICBpZiAoZnJhbWVTaXplQXRJbmRleCgwLCBsZXZlbCkuYXJlYSgpLnVuc2FmZUdldCgpIDwg
bWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCA9IGxldmVsOwotICAgIHJldHVy
biBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsLnZhbHVlKCk7Ci19Ci0KLVN1YnNhbXBsaW5nTGV2
ZWwgSW1hZ2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3IpCi17Ci0jaWYgVVNF
KENHKQotICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRv
IFBERiBjb250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSkpCi0gICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZh
dWx0OwotCi0gICAgZmxvYXQgc2NhbGUgPSBzdGQ6Om1pbihmbG9hdCgxKSwgc3RkOjptYXgoc2Nh
bGVGYWN0b3Iud2lkdGgoKSwgc2NhbGVGYWN0b3IuaGVpZ2h0KCkpKTsKLSAgICBpZiAoIShzY2Fs
ZSA+IDAgJiYgc2NhbGUgPD0gMSkpCi0gICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0OwotCi0gICAgaW50IHJlc3VsdCA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIoMSAvIHNjYWxl
KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFN1YnNhbXBsaW5nTGV2ZWw+KHN0ZDo6bWluKHJl
c3VsdCwgc3RhdGljX2Nhc3Q8aW50PihtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpKSkpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjYWxlRmFj
dG9yKTsKLSAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKLSNlbmRpZgotfQot
Ci1OYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCi17Ci0gICAgcmV0
dXJuIGlzRGVjb2RlckF2YWlsYWJsZSgpID8gbV9kZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJ
bmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkgOiBudWxscHRyOwotfQotCi1OYXRpdmVJbWFn
ZVB0ciBJbWFnZVNvdXJjZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCBp
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqIHRhcmdldENvbnRleHQpCi17Ci0gICAgc2V0RGVjb2RlclRhcmdldENvbnRleHQodGFy
Z2V0Q29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLX0KLQotdm9pZCBJbWFnZVNv
dXJjZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInR5cGUi
LCBmaWxlbmFtZUV4dGVuc2lvbigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImZyYW1lLWNvdW50
IiwgZnJhbWVDb3VudCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlcGV0aXRpb25zIiwgcmVw
ZXRpdGlvbkNvdW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgic29saWQtY29sb3IiLCBzaW5n
bGVQaXhlbFNvbGlkQ29sb3IoKSk7Ci0KLSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
ID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoMCk7Ci0gICAgaWYgKG9yaWVudGF0aW9uICE9IE9y
aWdpblRvcExlZnQpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3JpZW50YXRpb24iLCBvcmll
bnRhdGlvbik7Ci19Ci0KLX0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpl
b2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaAkocmV2aXNpb24gMjIwODAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEzNCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIDIwMTAsIDIwMTIsIDIwMTQsIDIwMTYgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRv
cmNoIE1vYmlsZSwgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZUZyYW1lLmgiCi0jaW5jbHVkZSAi
SW1hZ2VGcmFtZUNhY2hlLmgiCi0jaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1
ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbWFnZURlY29kZXI7
Ci1jbGFzcyBJbWFnZU9yaWVudGF0aW9uOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRTaXpl
OwotY2xhc3MgU2hhcmVkQnVmZmVyOwotCi1jbGFzcyBJbWFnZVNvdXJjZSB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW1hZ2VTb3VyY2UpOwotICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFn
ZTsKLXB1YmxpYzoKLSAgICBJbWFnZVNvdXJjZShOYXRpdmVJbWFnZVB0ciYmKTsKLSAgICBJbWFn
ZVNvdXJjZShJbWFnZSosIEFscGhhT3B0aW9uID0gQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQs
IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uID0gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246
OkFwcGxpZWQpOwotICAgIH5JbWFnZVNvdXJjZSgpOwotCi0gICAgdm9pZCBkZXN0cm95QWxsRGVj
b2RlZERhdGEoKSB7IG1fZnJhbWVDYWNoZS0+ZGVzdHJveUFsbERlY29kZWREYXRhKCk7IH0KLSAg
ICB2b2lkIGRlc3Ryb3lBbGxEZWNvZGVkRGF0YUV4Y2x1ZGVGcmFtZShzaXplX3QgZXhjbHVkZUZy
YW1lKSB7IG1fZnJhbWVDYWNoZS0+ZGVzdHJveUFsbERlY29kZWREYXRhRXhjbHVkZUZyYW1lKGV4
Y2x1ZGVGcmFtZSk7IH0KLSAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKHNp
emVfdCBiZWZvcmVGcmFtZSkgeyBtX2ZyYW1lQ2FjaGUtPmRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9y
ZUZyYW1lKGJlZm9yZUZyYW1lKTsgfQotICAgIHZvaWQgZGVzdHJveUluY29tcGxldGVEZWNvZGVk
RGF0YSgpIHsgbV9mcmFtZUNhY2hlLT5kZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7IH0K
LSAgICB2b2lkIGNsZWFySW1hZ2UoKSB7IG1fZnJhbWVDYWNoZS0+Y2xlYXJJbWFnZSgpOyB9Ci0g
ICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKLQotICAgIGJvb2wgZW5zdXJl
RGVjb2RlckF2YWlsYWJsZShTaGFyZWRCdWZmZXIqKTsKLSAgICBib29sIGlzRGVjb2RlckF2YWls
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRE
YXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIHZvaWQg
cmVzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSk7Ci0gICAgRW5jb2RlZERhdGFTdGF0dXMgZGF0
YUNoYW5nZWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0KLSAg
ICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZGVj
b2RlZFNpemUoKTsgfQotICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKTsKLQotICAgIGJvb2wg
Y2FuVXNlQXN5bmNEZWNvZGluZygpOwotICAgIHZvaWQgcmVxdWVzdEZyYW1lQXN5bmNEZWNvZGlu
Z0F0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWws
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4mIHNpemVGb3JEcmF3aW5nID0geyB9KSB7IG1f
ZnJhbWVDYWNoZS0+cmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgoaW5kZXgsIHN1YnNh
bXBsaW5nTGV2ZWwsIHNpemVGb3JEcmF3aW5nKTsgfQotICAgIGJvb2wgaGFzQXN5bmNEZWNvZGlu
Z1F1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5oYXNBc3luY0RlY29kaW5nUXVl
dWUoKTsgfQotICAgIGJvb2wgaXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCkgY29uc3QgIHsgcmV0
dXJuIG1fZnJhbWVDYWNoZS0+aXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCk7IH0KLSAgICB2b2lk
IHN0b3BBc3luY0RlY29kaW5nUXVldWUoKSB7IG1fZnJhbWVDYWNoZS0+c3RvcEFzeW5jRGVjb2Rp
bmdRdWV1ZSgpOyB9Ci0KLSAgICAvLyBJbWFnZSBtZXRhZGF0YSB3aGljaCBpcyBjYWxjdWxhdGVk
IGJ5IHRoZSBkZWNvZGVyIG9yIGNhbiBkZWR1Y2VkIGJ5IHRoZSBjYXNlIG9mIHRoZSBtZW1vcnkg
TmF0aXZlSW1hZ2UuCi0gICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMoKSB7
IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmVuY29kZWREYXRhU3RhdHVzKCk7IH0KLSAgICBzaXplX3Qg
ZnJhbWVDb3VudCgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVDb3VudCgpOyB9Ci0gICAg
UmVwZXRpdGlvbkNvdW50IHJlcGV0aXRpb25Db3VudCgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+
cmVwZXRpdGlvbkNvdW50KCk7IH0KLSAgICBTdHJpbmcgdXRpKCkgeyByZXR1cm4gbV9mcmFtZUNh
Y2hlLT51dGkoKTsgfQotICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIHsgcmV0dXJuIG1f
ZnJhbWVDYWNoZS0+ZmlsZW5hbWVFeHRlbnNpb24oKTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8SW50
UG9pbnQ+IGhvdFNwb3QoKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmhvdFNwb3QoKTsgfQotCi0g
ICAgLy8gSW1hZ2UgbWV0YWRhdGEgd2hpY2ggaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBmaXJzdCBJ
bWFnZUZyYW1lLgotICAgIEludFNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+c2l6
ZSgpOyB9Ci0gICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgeyByZXR1cm4g
bV9mcmFtZUNhY2hlLT5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7IH0KLSAgICBDb2xvciBz
aW5nbGVQaXhlbFNvbGlkQ29sb3IoKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPnNpbmdsZVBpeGVs
U29saWRDb2xvcigpOyB9Ci0KLSAgICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNoIGRvZXMg
bm90IHJlcXVpcmUgY2FjaGluZyB0aGUgSW1hZ2VGcmFtZS4KLSAgICBib29sIGZyYW1lSXNCZWlu
Z0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBj
b25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgeyByZXR1cm4gbV9mcmFtZUNh
Y2hlLT5mcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4
KGluZGV4LCBkZWNvZGluZ09wdGlvbnMpOyB9Ci0gICAgRGVjb2RpbmdTdGF0dXMgZnJhbWVEZWNv
ZGluZ1N0YXR1c0F0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZy
YW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4KGluZGV4KTsgfQotICAgIGJvb2wgZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSGFzQWxw
aGFBdEluZGV4KGluZGV4KTsgfQotICAgIGJvb2wgZnJhbWVIYXNJbWFnZUF0SW5kZXgoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSGFzSW1hZ2VBdEluZGV4KGluZGV4
KTsgfQotICAgIGJvb2wgZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5n
TGV2ZWwpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdl
QXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7IH0KLSAgICBib29sIGZyYW1lSGFzRGVj
b2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgs
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWws
IGNvbnN0IERlY29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSB7IHJldHVybiBtX2ZyYW1l
Q2FjaGUtPmZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJ
bmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRpb25zKTsgfQotICAgIFN1
YnNhbXBsaW5nTGV2ZWwgZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChzaXplX3QgaW5kZXgp
IHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChpbmRl
eCk7IH0KLQotICAgIC8vIEltYWdlRnJhbWUgbWV0YWRhdGEgd2hpY2ggZm9yY2VzIGNhY2hpbmcg
b3IgcmUtY2FjaGluZyB0aGUgSW1hZ2VGcmFtZS4KLSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJz
YW1wbGluZ0xldmVsOjpEZWZhdWx0KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9Ci0gICAgdW5zaWduZWQgZnJhbWVCeXRl
c0F0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwg
PSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1l
Qnl0ZXNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQotICAgIGZsb2F0IGZyYW1l
RHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFt
ZUR1cmF0aW9uQXRJbmRleChpbmRleCk7IH0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3Jp
ZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFt
ZU9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUlt
YWdlQXRJbmRleChpbmRleCk7IH0KLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRl
eENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZl
bDo6RGVmYXVsdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpOwotCi0gICAgU3Vi
c2FtcGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpOwotICAgIFN1YnNhbXBsaW5n
TGV2ZWwgc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3IpOwotICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZy
YW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2
ZWw6OkRlZmF1bHQpOwotCi1wcml2YXRlOgotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0m
KTsKLQotICAgIHZvaWQgc2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0Kik7Ci0KLSAgICBSZWY8SW1hZ2VGcmFtZUNhY2hlPiBtX2ZyYW1lQ2FjaGU7Ci0gICAgUmVm
UHRyPEltYWdlRGVjb2Rlcj4gbV9kZWNvZGVyOwotCi0gICAgc3RkOjpvcHRpb25hbDxTdWJzYW1w
bGluZ0xldmVsPiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsOwotCi0jaWYgUExBVEZPUk0oSU9T
KQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0byBlbmFibGUvZGlz
YWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHNvIHRoYXQgd2UgY2FuIHJlbW92ZSB0aGUgUExBVEZP
Uk0oSU9TKS1ndWFyZC4KLSAgICBkb3VibGUgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUgeyAw
IH07Ci0gICAgdWludDE2X3QgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50IHsgMCB9OwotI2Vu
ZGlmCi0KLSAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uIHsgQWxwaGFPcHRpb246OlByZW11
bHRpcGxpZWQgfTsKLSAgICBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBtX2dhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uIHsgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQgfTsK
LX07Ci0KLX0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMj
IC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQz
RENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAkocmV2aXNpb24gMjIwODAxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RD
YWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDYWly
b1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbWFn
ZUZyYW1lQ2FjaGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKQEAgLTI2Myw4
ICsyNjMsNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIAogR3Jh
cGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKQogewotICAg
IGlmIChtX2RlY29kZXIpCi0gICAgICAgIGRlbGV0ZSBtX2RlY29kZXI7CiB9CiAKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQpAQCAtMjc0LDEyICsy
NzIsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6CiAgICAgLy8g
V2UgbmVlZCB0aGlzIHRvIHN0YXkgaW4gc2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZlIGltYWdlIGlz
IGp1c3QgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRhdGEuCiAgICAgQWxwaGFPcHRpb24gYWxwaGFP
cHRpb24gPSBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQgOiBB
bHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZDsKICAgICBHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbjo6QXBwbGllZDsKLSAgICBtX2RlY29kZXIgPSBuZXcgSW1hZ2VTb3VyY2Uo
bnVsbHB0ciwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKLSAgICAK
LSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW1hZ2VT
b3VyY2UmIGRlY29kZXIgPSAqbV9kZWNvZGVyOworICAgIEltYWdlRnJhbWVDYWNoZSBkZWNvZGVy
KG51bGxwdHIsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAgICAg
bV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CiAKICAgICBpZiAobV9pbWFnZS0+ZGF0YSgpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHQzRENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAkocmV2aXNpb24gMjIwODAxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyNyw3ICszMjcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJ
bWFnZUV4dHJhY3Rvcjo6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBib29sIGhhc0FscGhh
ID0gIW1faW1hZ2UtPmN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpOwogICAgIGlmICgoaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhh
KSkgJiYgbV9pbWFnZS0+ZGF0YSgpKSB7Ci0gICAgICAgIEltYWdlU291cmNlIGRlY29kZXIobnVs
bHB0ciwgQWxwaGFPcHRpb246Ok5vdFByZW11bHRpcGxpZWQsIGlnbm9yZUdhbW1hQW5kQ29sb3JQ
cm9maWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCk7CisgICAgICAgIEltYWdlRnJhbWVDYWNoZSBkZWNv
ZGVyKG51bGxwdHIsIEFscGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBsaWVkLCBpZ25vcmVHYW1tYUFu
ZENvbG9yUHJvZmlsZSA/IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpJZ25vcmVkIDogR2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQpOwogICAgICAgICBkZWNvZGVyLnNldERh
dGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291
bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuaAkocmV2aXNpb24g
MjIwODAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNv
ZGVyQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOCArNzEsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciYsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAg
ICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbERhdGFSZWNl
aXZlZDsgfQotICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkgeyB9Ci0gICAg
CisKIHByb3RlY3RlZDoKICAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQgeyBmYWxzZSB9Owog
ICAgIFJldGFpblB0cjxDR0ltYWdlU291cmNlUmVmPiBtX25hdGl2ZURlY29kZXI7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VD
Ry5oCShyZXZpc2lvbiAyMjA4MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNp
Zm5kZWYgSW1hZ2VTb3VyY2VDR19oCiAjZGVmaW5lIEltYWdlU291cmNlQ0dfaAogCi0jaW5jbHVk
ZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VEZWNvZGVyRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAkocmV2aXNpb24gMjIwODAxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVj
dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKQEAgLTcyLDcgKzcxLDYgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXImLCBib29sIGFsbERh
dGFSZWNlaXZlZCk7CiAgICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KLSAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShz
aXplX3QpIHsgfQogCiAgICAgdm9pZCBzZXRUYXJnZXRDb250ZXh0KElEMkQxUmVuZGVyVGFyZ2V0
Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMjA4MDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTkyLDcgKzE5Miw3IEBAIHB1YmxpYzoKICAgICAvLyBDbGVhcnMgZGVjb2RlZCBwaXhlbCBk
YXRhIGZyb20gYmVmb3JlIHRoZSBwcm92aWRlZCBmcmFtZSB1bmxlc3MgdGhhdAogICAgIC8vIGRh
dGEgbWF5IGJlIG5lZWRlZCB0byBkZWNvZGUgZnV0dXJlIGZyYW1lcyAoZS5nLiBkdWUgdG8gR0lG
IGZyYW1lCiAgICAgLy8gY29tcG9zaXRpbmcpLgotICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUZyYW1lQnVm
ZmVyQ2FjaGUoc2l6ZV90KSB7IH0KIAogICAgIC8vIElmIHRoZSBpbWFnZSBoYXMgYSBjdXJzb3Ig
aG90LXNwb3QsIHN0b3JlcyBpdCBpbiB0aGUgYXJndW1lbnQKICAgICAvLyBhbmQgcmV0dXJucyB0
cnVlLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuY3BwCShyZXZpc2lvbiAyMjA4MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAs
MTAgKzcwLDEwIEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb24KIAog
UmVwZXRpdGlvbkNvdW50IEdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QK
IHsKLSAgICAvLyBUaGlzIHZhbHVlIGNhbiBhcnJpdmUgYXQgYW55IHBvaW50IGluIHRoZSBpbWFn
ZSBkYXRhIHN0cmVhbS4gIE1vc3QgR0lGcworICAgIC8vIFRoaXMgdmFsdWUgY2FuIGFycml2ZSBh
dCBhbnkgcG9pbnQgaW4gdGhlIGltYWdlIGRhdGEgc3RyZWFtLiBNb3N0IEdJRnMKICAgICAvLyBp
biB0aGUgd2lsZCBkZWNsYXJlIGl0IG5lYXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgc28g
aXQgdXN1YWxseSBpcwogICAgIC8vIHNldCBieSB0aGUgdGltZSB3ZSd2ZSBkZWNvZGVkIHRoZSBz
aXplLCBidXQgKGRlcGVuZGluZyBvbiB0aGUgR0lGIGFuZCB0aGUKLSAgICAvLyBwYWNrZXRzIHNl
bnQgYmFjayBieSB0aGUgd2Vic2VydmVyKSBub3QgYWx3YXlzLiAgSWYgdGhlIHJlYWRlciBoYXNu
J3QKKyAgICAvLyBwYWNrZXRzIHNlbnQgYmFjayBieSB0aGUgd2Vic2VydmVyKSBub3QgYWx3YXlz
LiBJZiB0aGUgcmVhZGVyIGhhc24ndAogICAgIC8vIHNlZW4gYSBsb29wIGNvdW50IHlldCwgaXQg
d2lsbCByZXR1cm4gY0xvb3BDb3VudE5vdFNlZW4sIGluIHdoaWNoIGNhc2Ugd2UKICAgICAvLyBz
aG91bGQgZGVmYXVsdCB0byBsb29waW5nIG9uY2UgKHRoZSBpbml0aWFsIHZhbHVlIGZvcgogICAg
IC8vIHxtX3JlcGV0aXRpb25Db3VudHwpLgpAQCAtODEsMTIgKzgxLDEyIEBAIFJlcGV0aXRpb25D
b3VudCBHSUZJbWFnZURlY29kZXI6OnJlcGV0aXQKICAgICAvLyBUaGVyZSBhcmUgc29tZSBhZGRp
dGlvbmFsIHdyaW5rbGVzIGhlcmUuIEZpcnN0LCBJbWFnZVNvdXJjZTo6Y2xlYXIoKQogICAgIC8v
IG1heSBkZXN0cm95IHRoZSByZWFkZXIsIG1ha2luZyB0aGUgcmVzdWx0IGZyb20gdGhlIHJlYWRl
ciBfbGVzc18KICAgICAvLyBhdXRob3JpdGF0aXZlIG9uIGZ1dHVyZSBjYWxscyBpZiB0aGUgcmVj
cmVhdGVkIHJlYWRlciBoYXNuJ3Qgc2VlbiB0aGUKLSAgICAvLyBsb29wIGNvdW50LiAgV2UgZG9u
J3QgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhpcyBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUKKyAg
ICAvLyBsb29wIGNvdW50LiBXZSBkb24ndCBuZWVkIHRvIHNwZWNpYWwtY2FzZSB0aGlzIGJlY2F1
c2UgaW4gdGhpcyBjYXNlIHRoZQogICAgIC8vIG5ldyByZWFkZXIgd2lsbCBvbmNlIGFnYWluIHJl
dHVybiBjTG9vcENvdW50Tm90U2VlbiwgYW5kIHdlIHdvbid0CiAgICAgLy8gb3ZlcndyaXRlIHRo
ZSBjYWNoZWQgY29ycmVjdCB2YWx1ZS4KICAgICAvLwogICAgIC8vIFNlY29uZCwgYSBHSUYgbWln
aHQgbmV2ZXIgc2V0IGEgbG9vcCBjb3VudCBhdCBhbGwsIGluIHdoaWNoIGNhc2Ugd2UKLSAgICAv
LyBzaG91bGQgY29udGludWUgdG8gdHJlYXQgaXQgYXMgYSAibG9vcCBvbmNlIiBhbmltYXRpb24u
ICBXZSBkb24ndCBuZWVkCisgICAgLy8gc2hvdWxkIGNvbnRpbnVlIHRvIHRyZWF0IGl0IGFzIGEg
Imxvb3Agb25jZSIgYW5pbWF0aW9uLiBXZSBkb24ndCBuZWVkCiAgICAgLy8gc3BlY2lhbCBjb2Rl
IGhlcmUgZWl0aGVyLCBiZWNhdXNlIGluIHRoaXMgY2FzZSB3ZSdsbCBuZXZlciBjaGFuZ2UKICAg
ICAvLyB8bV9yZXBldGl0aW9uQ291bnR8IGZyb20gaXRzIGRlZmF1bHQgdmFsdWUuCiAgICAgLy8K
QEAgLTExOCw3ICsxMTgsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKTsKIH0KIAotdm9pZCBHSUZJbWFnZURl
Y29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKK3Zv
aWQgR0lGSW1hZ2VEZWNvZGVyOjpkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3Jl
RnJhbWUpCiB7CiAgICAgLy8gSW4gc29tZSBjYXNlcywgbGlrZSBpZiB0aGUgZGVjb2RlciB3YXMg
ZGVzdHJveWVkIHdoaWxlIGFuaW1hdGluZywgd2UKICAgICAvLyBjYW4gYmUgYXNrZWQgdG8gY2xl
YXIgbW9yZSBmcmFtZXMgdGhhbiB3ZSBjdXJyZW50bHkgaGF2ZS4KQEAgLTEyOSwzMCArMTI5LDMw
IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2EKICAgICAvLyB0aGVy
ZSdzIGFuIG9uZ29pbmcgZGVjb2RlIHdpbGwgY2F1c2UgYSBjcmFzaC4KICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2RlY29kZUxvY2spOwogCi0gICAgLy8gVGhlICItMSIgaGVyZSBpcyB0cmlja3ku
ICBJdCBkb2VzIG5vdCBtZWFuIHRoYXQgfGNsZWFyQmVmb3JlRnJhbWV8IGlzIHRoZQorICAgIC8v
IFRoZSAiLTEiIGhlcmUgaXMgdHJpY2t5LiBJdCBkb2VzIG5vdCBtZWFuIHRoYXQgfGJlZm9yZUZy
YW1lfCBpcyB0aGUKICAgICAvLyBsYXN0IGZyYW1lIHdlIHdpc2ggdG8gcHJlc2VydmUsIGJ1dCBy
YXRoZXIgdGhhdCB3ZSBuZXZlciB3YW50IHRvIGNsZWFyCiAgICAgLy8gdGhlIHZlcnkgbGFzdCBm
cmFtZSBpbiB0aGUgY2FjaGU6IGl0J3MgZW1wdHkgKHNvIGNsZWFyaW5nIGl0IGlzCiAgICAgLy8g
cG9pbnRsZXNzKSwgaXQncyBwYXJ0aWFsIChzbyB3ZSBkb24ndCB3YW50IHRvIGNsZWFyIGl0IGFu
eXdheSksIG9yIHRoZQogICAgIC8vIGNhY2hlIGNvdWxkIGJlIGVubGFyZ2VkIHdpdGggYSBmdXR1
cmUgc2V0RGF0YSgpIGNhbGwgYW5kIGl0IGNvdWxkIGJlCi0gICAgLy8gbmVlZGVkIHRvIGNvbnN0
cnVjdCB0aGUgbmV4dCBmcmFtZSAoc2VlIGNvbW1lbnRzIGJlbG93KS4gIENhbGxlcnMgY2FuCisg
ICAgLy8gbmVlZGVkIHRvIGNvbnN0cnVjdCB0aGUgbmV4dCBmcmFtZSAoc2VlIGNvbW1lbnRzIGJl
bG93KS4gQ2FsbGVycyBjYW4KICAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0
cnVlLCAuLi4pIHRvIGNvbXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCiAgICAgLy8gdGhpcyBj
YXNlLgotICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJh
bWU+OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9y
ZUZyYW1lKTsKKyAgICBiZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGJlZm9yZUZyYW1lLCBtX2ZyYW1l
QnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7CisgICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+Ojpp
dGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBiZWZvcmVGcmFtZSk7CiAK
ICAgICAvLyBXZSBuZWVkIHRvIHByZXNlcnZlIGZyYW1lcyBzdWNoIHRoYXQ6CiAgICAgLy8gICAq
IFdlIGRvbid0IGNsZWFyIHxlbmR8CiAgICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIHRoZSBmcmFt
ZSB3ZSdyZSBjdXJyZW50bHkgZGVjb2RpbmcKICAgICAvLyAgICogV2UgZG9uJ3QgY2xlYXIgYW55
IGZyYW1lIGZyb20gd2hpY2ggYSBmdXR1cmUgaW5pdEZyYW1lQnVmZmVyKCkgY2FsbAogICAgIC8v
ICAgICB3aWxsIGNvcHkgYml0bWFwIGRhdGEKLSAgICAvLyBBbGwgb3RoZXIgZnJhbWVzIGNhbiBi
ZSBjbGVhcmVkLiAgQmVjYXVzZSBvZiB0aGUgY29uc3RyYWludHMgb24gd2hlbgorICAgIC8vIEFs
bCBvdGhlciBmcmFtZXMgY2FuIGJlIGNsZWFyZWQuIEJlY2F1c2Ugb2YgdGhlIGNvbnN0cmFpbnRz
IG9uIHdoZW4KICAgICAvLyBJbWFnZVNvdXJjZTo6Y2xlYXIoKSBjYW4gYmUgY2FsbGVkIChzZWUg
SW1hZ2VTb3VyY2UuaCksIHdlJ3JlIGd1YXJhbnRlZWQKICAgICAvLyBub3QgdG8gaGF2ZSBub24t
ZW1wdHkgZnJhbWVzIGFmdGVyIHRoZSBmcmFtZSB3ZSdyZSBjdXJyZW50bHkgZGVjb2RpbmcuCiAg
ICAgLy8gU28sIHNjYW4gYmFja3dhcmRzIGZyb20gfGVuZHwgYXMgZm9sbG93czoKICAgICAvLyAg
ICogSWYgdGhlIGZyYW1lIGlzIGVtcHR5LCB3ZSdyZSBzdGlsbCBwYXN0IGFueSBmcmFtZXMgd2Ug
Y2FyZSBhYm91dC4KICAgICAvLyAgICogSWYgdGhlIGZyYW1lIGlzIGNvbXBsZXRlLCBidXQgaXMg
RGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb1ByZXZpb3VzLCB3ZSdsbAotICAgIC8vICAgICBza2lw
IG92ZXIgaXQgaW4gZnV0dXJlIGluaXRGcmFtZUJ1ZmZlcigpIGNhbGxzLiAgV2UgY2FuIGNsZWFy
IGl0Ci0gICAgLy8gICAgIHVubGVzcyBpdCdzIHxlbmR8LCBhbmQga2VlcCBzY2FubmluZy4gIEZv
ciBhbnkgb3RoZXIgZGlzcG9zYWwgbWV0aG9kLAorICAgIC8vICAgICBza2lwIG92ZXIgaXQgaW4g
ZnV0dXJlIGluaXRGcmFtZUJ1ZmZlcigpIGNhbGxzLiBXZSBjYW4gY2xlYXIgaXQKKyAgICAvLyAg
ICAgdW5sZXNzIGl0J3MgfGVuZHwsIGFuZCBrZWVwIHNjYW5uaW5nLiBGb3IgYW55IG90aGVyIGRp
c3Bvc2FsIG1ldGhvZCwKICAgICAvLyAgICAgc3RvcCBzY2FubmluZywgYXMgd2UndmUgZm91bmQg
dGhlIGZyYW1lIGluaXRGcmFtZUJ1ZmZlcigpIHdpbGwgbmVlZAogICAgIC8vICAgICBuZXh0Lgog
ICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUgZGVjb2RpbmcgaXQsIHNv
IGRvbid0IGNsZWFyIGl0OyBpZiBpdApAQCAtMjExLDcgKzIxMSw3IEBAIGJvb2wgR0lGSW1hZ2VE
ZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
UkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5iYWNraW5nU3RvcmUoKS0+cGl4ZWxBdCh4
QmVnaW4sIHlCZWdpbik7Ci0gICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50
byB0aGUgZnJhbWUuICAKKyAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRv
IHRoZSBmcmFtZS4KICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CiAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSByb3dCdWZmZXJbKG1fc2Nh
bGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXRdOwog
ICAgICAgICBpZiAoKCFmcmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgfHwgKHNvdXJjZVZhbHVl
ICE9IGZyYW1lQ29udGV4dC0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXpl
KSkgewpAQCAtMjQxLDcgKzI0MSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2Rl
ZFJvdyh1bnMKIAogYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQg
ZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RGlzcG9zYWxN
ZXRob2QgZGlzcG9zYWxNZXRob2QpCiB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYg
bmVjZXNzYXJ5LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywKKyAgICAvLyBJ
bml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90
aGluZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVj
b2RlZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0g
bV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwogICAgIGlmIChidWZmZXIuaXNJbnZhbGlk
KCkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKQEAgLTI1OSw4ICsyNTksOCBAQCBi
b29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgIGlmIChyZWN0
LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCiAgICAgICAgICAg
ICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlmIChmcmFtZUluZGV4
KSB7Ci0gICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUgZG9lcyBub3QgaGF2
ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKLSAgICAgICAgICAgIC8vIG91dHNpZGUgaXRzIHJl
Y3QgZG9lc24ndCBoYXZlIGFscGhhLiAgVG8ga25vdyB3aGV0aGVyIHRoaXMgaXMKKyAgICAgICAg
ICAgIC8vIFRyaWNreSBjYXNlLiBUaGlzIGZyYW1lIGRvZXMgbm90IGhhdmUgYWxwaGEgb25seSBp
ZiBldmVyeXdoZXJlCisgICAgICAgICAgICAvLyBvdXRzaWRlIGl0cyByZWN0IGRvZXNuJ3QgaGF2
ZSBhbHBoYS4gVG8ga25vdyB3aGV0aGVyIHRoaXMgaXMKICAgICAgICAgICAgIC8vIHRydWUsIHdl
IGNoZWNrIHRoZSBzdGFydCBzdGF0ZSBvZiB0aGUgZnJhbWUgLS0gaWYgaXQgZG9lc24ndCBoYXZl
CiAgICAgICAgICAgICAvLyBhbHBoYSwgd2UncmUgc2FmZS4KICAgICAgICAgICAgIC8vCkBAIC0y
NzIsNyArMjcyLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQog
ICAgICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJ
bmRleF07CiAKICAgICAgICAgICAgIC8vIE5vdywgaWYgd2UncmUgYXQgYSBEaXNwb3NhbE1ldGhv
ZDo6VW5zcGVjaWZpZWQgb3IgRGlzcG9zYWxNZXRob2Q6OkRvTm90RGlzcG9zZSBmcmFtZSwgdGhl
bgotICAgICAgICAgICAgLy8gd2UgY2FuIHNheSB3ZSBoYXZlIG5vIGFscGhhIGlmIHRoYXQgZnJh
bWUgaGFkIG5vIGFscGhhLiAgQnV0CisgICAgICAgICAgICAvLyB3ZSBjYW4gc2F5IHdlIGhhdmUg
bm8gYWxwaGEgaWYgdGhhdCBmcmFtZSBoYWQgbm8gYWxwaGEuIEJ1dAogICAgICAgICAgICAgLy8g
c2luY2UgaW4gaW5pdEZyYW1lQnVmZmVyKCkgd2UgYWxyZWFkeSBjb3BpZWQgdGhhdCBmcmFtZSdz
IGFscGhhCiAgICAgICAgICAgICAvLyBzdGF0ZSBpbnRvIHRoZSBjdXJyZW50IGZyYW1lJ3MsIHdl
IG5lZWQgZG8gbm90aGluZyBhdCBhbGwgaGVyZS4KICAgICAgICAgICAgIC8vCkBAIC0zNTIsNyAr
MzUyLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgICAg
ICAvLwogICAgICAgICAvLyBGcmFtZXMgdGhhdCB1c2UgdGhlIERpc3Bvc2FsTWV0aG9kOjpSZXN0
b3JlVG9QcmV2aW91cyBtZXRob2QgYXJlIGVmZmVjdGl2ZWx5CiAgICAgICAgIC8vIG5vLW9wcyBp
biB0ZXJtcyBvZiBjaGFuZ2luZyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgYSBmcmFtZSBjb21wYXJl
ZCB0bwotICAgICAgICAvLyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1l
LCBzbyBza2lwIG92ZXIgdGhlbS4gIChJZiB0aGUKKyAgICAgICAgLy8gdGhlIHN0YXJ0aW5nIHN0
YXRlIG9mIHRoZSBwcmV2aW91cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRoZW0uIChJZiB0aGUKICAg
ICAgICAgLy8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRoaXMgbWV0aG9kLCBpdCB3aWxsIGdldCB0
cmVhdGVkIGxpa2UKICAgICAgICAgLy8gRGlzcG9zYWxNZXRob2Q6OlJlc3RvcmVUb0JhY2tncm91
bmQgYmVsb3cgYW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4pCiAgICAgICAg
IGNvbnN0IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJh
bWVJbmRleF07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMjA4MDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hl
biBjYWxsaW5nIHRoaXMgZnJvbSBpbnNpZGUKICAgICAgICAgLy8gR0lGSW1hZ2VSZWFkZXIhCiAg
ICAgICAgIGJvb2wgc2V0RmFpbGVkKCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgY2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKSBvdmVycmlkZTsKKyAgICAgICAg
dm9pZCBkZXN0cm95RnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3JlRnJhbWUpIG92ZXJyaWRl
OwogCiAgICAgICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgogICAgICAgICBi
b29sIGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiYgcm93QnVmZmVyLCBzaXplX3Qgd2lkdGgsIHNpemVfdCByb3dOdW1iZXIsIHVu
c2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIyMDgwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MzIsMTQgKzczMiwxNCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
aW5pdCgpCiAgICAgbV9zZXF1ZW5jZU51bWJlciA9IDA7CiB9CiAKLXZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCit2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZGVzdHJveUZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGJlZm9yZUZy
YW1lKQogewogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBTZWUgR0lGSW1hZ2VEZWNvZGVyIGZvciBmdWxsIGV4cGxhbmF0aW9u
LgotICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBtX2Zy
YW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+
OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZy
YW1lKTsKKyAgICBiZWZvcmVGcmFtZSA9IHN0ZDo6bWluKGJlZm9yZUZyYW1lLCBtX2ZyYW1lQnVm
ZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7CisgICAgY29uc3QgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVy
YXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBiZWZvcmVGcmFtZSk7CiAKICAg
ICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKICAgICBmb3IgKDsgKGkgIT0g
bV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmIChpLT5pc0ludmFsaWQoKSB8fCAoaS0+ZGlz
cG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NhbE1ldGhvZDo6UmVzdG9yZVRvUHJl
dmlvdXMpKTsgLS1pKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAy
MjA4MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGZyYW1lSGVhZGVyKCk7CiAKICAgICAgICAgdm9pZCBp
bml0KCk7Ci0gICAgICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJl
Zm9yZUZyYW1lKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBkZXN0cm95RnJhbWVCdWZmZXJDYWNo
ZShzaXplX3QgYmVmb3JlRnJhbWUpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICAgICAgYm9vbCBp
c0NvbXBsZXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIyMDgwMSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTA4LTE2ICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBJbWFnZVNvdXJj
ZSBmcm9tIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRtYXBJbWFnZSB0byBJ
bWFnZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzU1OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisKIDIwMTctMDgtMTYgIEFuZHkgRXN0ZXMg
IDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtQYXltZW50IFJlcXVlc3RdIEFkZCBhbiBF
TkFCTEUgZmxhZyBhbmQgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgcHJlZmVyZW5jZQpJbmRleDog
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1t
CShyZXZpc2lvbiAyMjA4MDEpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvU2Vzc2lvbi5oPgog
I2ltcG9ydCA8V2ViQ29yZS9EZXZpY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ltYWdlU291cmNlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1dlYkNvcmVUaHJlYWRNZXNzYWdlLmg+CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327891</attachid>
            <date>2017-11-29 13:04:58 -0800</date>
            <delta_ts>2017-11-29 13:57:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175595-20171129130457.patch</filename>
            <type>text/plain</type>
            <size>59702</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDE3LTExLTI5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRo
ZSBJbWFnZVNvdXJjZSBmcm9tIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRt
YXBJbWFnZSB0byBJbWFnZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1OTUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
KworICAgICAgICBUaGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgY29ubmVjdHMgQml0bWFwSW1hZ2Ug
dG8gSW1hZ2VGcmFtZSBoYXMgYmVlbgorICAgICAgICB0cm91Ymxlc29tZS4gSW1hZ2VTb3VyY2Ug
ZG9lcyBub3QgaGF2ZSBhIGNsZWFyIHJlc3BvbnNpYmlsaXR5IG90aGVyIHRoYW4KKyAgICAgICAg
YSBicmlkZ2UgdGhhdCBjb25uZWN0cyBCaXRtYXBJYW1nZSB0byBJbWFnZUZyYW1lQ2FjaGUuIFNo
YXJpbmcgdGhlIAorICAgICAgICBJbWFnZURlY29kZXIgYmV0d2VlbiBJbWFnZVNvdXJjZSBhbmQg
SW1hZ2VGcmFtZUNhY2hlIGlzIHVnbHkgYW5kIGNhdXNlZAorICAgICAgICBmZXcgY3Jhc2hlcyBp
biB0aGUgcGFzdC4KKworICAgICAgICBUaGlzIHBhdGNoIHdpbGwgZG8gdGhlIGZpcnN0IHN0ZXAg
Zm9yIGZpeGluZyB0aGlzIGlzc3VlLiBGaXJzdCBnZXQgcmlkIG9mCisgICAgICAgIEltYWdlU291
cmNlIGJ5IG1vdmluZyBpdHMgQVBJcyB0byBJbWFnZUZyYW1lQ2FjaGUgYW5kIEJpdG1hcEltYWdl
LiBSZXBsYWNlCisgICAgICAgIGFsbCB0aGUgaW5zdGFuY2VzIG9mIEltYWdlU291cmNlIGJ5IElt
YWdlRnJhbWVDYWNoZS4gVGhlIG5leHQgc3RlcCB3aWxsCisgICAgICAgIGJlIHRvIHJlbmFtZSBJ
bWFnZUZyYW1lQ2FjaGUgdG8gSW1hZ2VTb3VyY2UuIEJ1dCB0aGlzIHdpbGwgYmUgZG9uZSBpbiBh
CisgICAgICAgIGZvbGxvdy11cCBwYXRjaAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6fkJpdG1h
cEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYW5Vc2VBc3luY0RlY29kaW5nRm9yTGFyZ2VJbWFnZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNob3VsZFVzZUFzeW5jRGVj
b2RpbmdGb3JBbmltYXRlZEltYWdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpjYW5EZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmludGVybmFsU3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OnN0b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW1hZ2VGcmFtZUF2
YWlsYWJsZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmR1bXAgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUNhY2hlOjpJbWFnZUZyYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZUNhY2hlOjplbnN1cmVEZWNvZGVyQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2Fj
aGU6OnJlc2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmRhdGFD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNBbGxEYXRhUmVj
ZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjYW5Vc2VBc3lu
Y0RlY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6bWF4aW11bVN1
YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpzZXRU
YXJnZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Y3JlYXRl
RnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpk
dW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6c2V0RGVjb2Rlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmRlY29kZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpyZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRl
eCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6
On5JbWFnZUV4dHJhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5oOgorCiAyMDE3LTExLTI4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2V0IHJpZCBvZiBTZXJ2aWNlV29y
a2VyOjphbGxXb3JrZXJzKCkgaGFzaG1hcApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIy
NTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
NTI1LDcgKzE1MjUsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKLXBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW50
U2l6ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI3OCw3ICsz
Mjc4LDYgQEAKIAkJQjI3NTM1NkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0YwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTZFMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MDBCMDUz
ODE0MDAyQ0U2NEYgLyogSWNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDIwQjA1Mzgx
NDAwMkNFNjRGIC8qIEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQjI3NTM1NzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MzBC
MDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU3MjBCMDUzODE0MDAyQ0U2NEYgLyogSW50
UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTQ0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc0MEIwNTM4MTQwMDJDRTY0RiAv
KiBJbnRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzU0NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc1MEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjc1MzU0NzBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01MzY2LDcgKzUzNjUsNiBAQAog
CQkwRjE3NzQ3RjEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvcklPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNkU3MzYxQkQxODM3QTAwMkRCODkxIC8q
IExheW91dFBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExh
eW91dFBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNkU3MzgxQkQx
ODRCOTAwMkRCODkxIC8qIExheW91dFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGF5b3V0U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGM0M3MjVEMTk3NDg3NEIwMEFFREQwQyAvKiBJbWFnZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd0JsdXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkxOTAgLyog
U2hhZG93Qmx1ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkb3dCbHVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0YwRTU3MTU3MDMwQzMwMDZEQTU3
RiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJHZW9tZXRyeU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTc0MCw3ICsxMTczOCw2IEBACiAJCUIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJ
Y29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY29uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0MjBCMDUzODE0MDAyQ0U2NEYgLyogSW1h
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTQzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNv
dXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VTb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDQwQjA1MzgxNDAwMkNFNjRGIC8q
IEludFBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0NTBCMDUzODE0MDAyQ0U2NEYg
LyogSW50UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50
UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ2MEIwNTM4MTQw
MDJDRTY0RiAvKiBJbnRSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bnRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjcxMiw4ICsyMjcwOSw2
IEBACiAJCQkJQTg3NDhENzQxMkNDM0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uY3Bw
ICovLAogCQkJCUE4NzQ4RDY2MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmgg
Ki8sCiAJCQkJNDkyOTFFNEExMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5o
ICovLAotCQkJCTBGM0M3MjVEMTk3NDg3NEIwMEFFREQwQyAvKiBJbWFnZVNvdXJjZS5jcHAgKi8s
Ci0JCQkJQjI3NTM1NDMwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmggKi8sCiAJCQkJ
NTU1MENCNDExRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCAqLywKIAkJCQkwNzk0MTc5
MzE2NkVBMDRFMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oICovLAogCQkJCTA3
Q0U3N0Q0MTY3MTJBNkEwMEM1NUE0NyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50Lmgg
Ki8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuY3BwCShyZXZpc2lvbiAyMjUyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICszOSwyMSBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaWYgUExBVEZPUk0oV0lOKQor
I2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4K
KyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwg
bV9zb3VyY2UodGhpcykKKyAgICAsIG1fc291cmNlKEltYWdlRnJhbWVDYWNoZTo6Y3JlYXRlKHRo
aXMpKQogewogfQogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VQdHImJiBp
bWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKLSAg
ICAsIG1fc291cmNlKFdURk1vdmUoaW1hZ2UpKQorICAgICwgbV9zb3VyY2UoSW1hZ2VGcmFtZUNh
Y2hlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpKQogewogfQogCkBAIC01OCw4ICs2MSw4IEBAIEJp
dG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQogewogICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEo
KTsKICAgICBjbGVhclRpbWVyKCk7Ci0gICAgbV9zb3VyY2UuY2xlYXJJbWFnZSgpOwotICAgIG1f
c291cmNlLnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKKyAgICBtX3NvdXJjZS0+Y2xlYXJJbWFn
ZSgpOworICAgIG1fc291cmNlLT5zdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCk7CiB9CiAKIHZvaWQg
Qml0bWFwSW1hZ2U6OnVwZGF0ZUZyb21TZXR0aW5ncyhjb25zdCBTZXR0aW5ncyYgc2V0dGluZ3Mp
CkBAIC03NCwyMCArNzcsMjAgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRh
KGJvbwogICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMiLCBf
X0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgaWYgKCFkZXN0cm95QWxsKQotICAgICAgICBtX3NvdXJjZS5kZXN0cm95RGVjb2RlZERh
dGFCZWZvcmVGcmFtZShtX2N1cnJlbnRGcmFtZSk7CisgICAgICAgIG1fc291cmNlLT5kZXN0cm95
RGVjb2RlZERhdGFCZWZvcmVGcmFtZShtX2N1cnJlbnRGcmFtZSk7CiAgICAgZWxzZSBpZiAoIWNh
bkRlc3Ryb3lEZWNvZGVkRGF0YSgpKQotICAgICAgICBtX3NvdXJjZS5kZXN0cm95QWxsRGVjb2Rl
ZERhdGFFeGNsdWRlRnJhbWUobV9jdXJyZW50RnJhbWUpOworICAgICAgICBtX3NvdXJjZS0+ZGVz
dHJveUFsbERlY29kZWREYXRhRXhjbHVkZUZyYW1lKG1fY3VycmVudEZyYW1lKTsKICAgICBlbHNl
IHsKLSAgICAgICAgbV9zb3VyY2UuZGVzdHJveUFsbERlY29kZWREYXRhKCk7CisgICAgICAgIG1f
c291cmNlLT5kZXN0cm95QWxsRGVjb2RlZERhdGEoKTsKICAgICAgICAgbV9jdXJyZW50RnJhbWVE
ZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpJbnZhbGlkOwogICAgIH0KIAogICAgIC8v
IFRoZXJlJ3Mgbm8gbmVlZCB0byB0aHJvdyBhd2F5IHRoZSBkZWNvZGVyIHVubGVzcyB3ZSdyZSBl
eHBsaWNpdGx5IGFza2VkCiAgICAgLy8gdG8gZGVzdHJveSBhbGwgb2YgdGhlIGZyYW1lcy4KLSAg
ICBpZiAoIWRlc3Ryb3lBbGwgfHwgbV9zb3VyY2UuaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkpCi0g
ICAgICAgIG1fc291cmNlLmNsZWFyRnJhbWVCdWZmZXJDYWNoZShtX2N1cnJlbnRGcmFtZSk7Cisg
ICAgaWYgKCFkZXN0cm95QWxsIHx8IG1fc291cmNlLT5oYXNBc3luY0RlY29kaW5nUXVldWUoKSkK
KyAgICAgICAgbV9zb3VyY2UtPmNsZWFyRnJhbWVCdWZmZXJDYWNoZShtX2N1cnJlbnRGcmFtZSk7
CiAgICAgZWxzZQotICAgICAgICBtX3NvdXJjZS5yZXNldERhdGEoZGF0YSgpKTsKKyAgICAgICAg
bV9zb3VyY2UtPnJlc2V0RGF0YShkYXRhKCkpOwogCiAgICAgaW52YWxpZGF0ZVBsYXRmb3JtRGF0
YSgpOwogfQpAQCAtOTksNyArMTAyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29k
ZWREYXRhSWZOZQogICAgIGlmICghZGF0YSgpICYmIGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1fc291cmNlLmRlY29kZWRTaXplKCkgPCBMYXJnZUFuaW1hdGlvbkN1
dG9mZikKKyAgICBpZiAobV9zb3VyY2UtPmRlY29kZWRTaXplKCkgPCBMYXJnZUFuaW1hdGlvbkN1
dG9mZikKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGVzdHJveURlY29kZWREYXRhKGRlc3Ryb3lB
bGwpOwpAQCAtMTA3LDExICsxMTAsMTEgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29k
ZWREYXRhSWZOZQogCiBFbmNvZGVkRGF0YVN0YXR1cyBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQo
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAgaWYgKG1fc291cmNlLmRlY29kZWRTaXplKCkg
JiYgIWNhblVzZUFzeW5jRGVjb2RpbmdGb3JMYXJnZUltYWdlcygpKQotICAgICAgICBtX3NvdXJj
ZS5kZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7CisgICAgaWYgKG1fc291cmNlLT5kZWNv
ZGVkU2l6ZSgpICYmICFjYW5Vc2VBc3luY0RlY29kaW5nRm9yTGFyZ2VJbWFnZXMoKSkKKyAgICAg
ICAgbV9zb3VyY2UtPmRlc3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERhdGEoKTsKIAogICAgIG1fY3Vy
cmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBEZWNvZGluZ1N0YXR1czo6SW52YWxpZDsKLSAgICBy
ZXR1cm4gbV9zb3VyY2UuZGF0YUNoYW5nZWQoZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOworICAg
IHJldHVybiBtX3NvdXJjZS0+ZGF0YUNoYW5nZWQoZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOwog
fQogICAgIAogdm9pZCBCaXRtYXBJbWFnZTo6c2V0Q3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXNJ
Zk5lY2Vzc2FyeShEZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cykKQEAgLTEzMCw4ICsxMzMs
MTIgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdAogICAgICAgICBM
T0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtzdWJzYW1wbGluZ0xl
dmVsIHdhcyAlZCwgcmVzYW1wbGluZ10iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4oZnJhbWVTdWJzYW1wbGlu
Z0xldmVsQXRJbmRleChpbmRleCkpKTsKICAgICAgICAgaW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgp
OwogICAgIH0KLQotICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZO
ZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIHRhcmdldENvbnRleHQpOworI2lmIFVTRShE
SVJFQ1QyRCkKKyAgICBtX3NvdXJjZS0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0KTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOworI2VuZGlmCisgICAgcmV0
dXJuIG1fc291cmNlLT5mcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoaW5kZXgsIHN1YnNh
bXBsaW5nTGV2ZWwpOwogfQogCiBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1h
Z2UoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQpAQCAtMTg5LDcgKzE5Niw3
IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGkKICAgICBJbnRTaXpl
IHNpemVGb3JEcmF3aW5nID0gZXhwYW5kZWRJbnRTaXplKHNpemUoKSAqIHNjYWxlRmFjdG9yRm9y
RHJhd2luZyk7CiAgICAgSW1hZ2VEcmF3UmVzdWx0IHJlc3VsdCA9IEltYWdlRHJhd1Jlc3VsdDo6
RGlkRHJhdzsKIAotICAgIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwgPSBtX2FsbG93U3Vic2Ft
cGxpbmcgPyBtX3NvdXJjZS5zdWJzYW1wbGluZ0xldmVsRm9yU2NhbGVGYWN0b3IoY29udGV4dCwg
c2NhbGVGYWN0b3JGb3JEcmF3aW5nKSA6IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7CisgICAg
bV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCA9IG1fYWxsb3dTdWJzYW1wbGluZyA/IHN1YnNhbXBs
aW5nTGV2ZWxGb3JTY2FsZUZhY3Rvcihjb250ZXh0LCBzY2FsZUZhY3RvckZvckRyYXdpbmcpIDog
U3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6
OiVzIC0gJXAgLSB1cmw6ICVzIFtzdWJzYW1wbGluZ0xldmVsID0gJWQgc2NhbGVGYWN0b3JGb3JE
cmF3aW5nID0gKCUuNGYsICUuNGYpXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihtX2N1cnJlbnRTdWJzYW1w
bGluZ0xldmVsKSwgc2NhbGVGYWN0b3JGb3JEcmF3aW5nLndpZHRoKCksIHNjYWxlRmFjdG9yRm9y
RHJhd2luZy5oZWlnaHQoKSk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsKQEAgLTIwNCw3
ICsyMTEsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpCiAgICAg
ICAgIC8vIGl0IGlzIGN1cnJlbnRseSBiZWluZyBkZWNvZGVkLiBOZXcgZGF0YSBtYXkgaGF2ZSBi
ZWVuIHJlY2VpdmVkIHNpbmNlIHRoZSBwcmV2aW91cyByZXF1ZXN0IHdhcyBtYWRlLgogICAgICAg
ICBpZiAoKCFmcmFtZUlzQ29tcGF0aWJsZSAmJiAhZnJhbWVJc0JlaW5nRGVjb2RlZCkgfHwgbV9j
dXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9PSBEZWNvZGluZ1N0YXR1czo6SW52YWxpZCkgewog
ICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBb
cmVxdWVzdGluZyBsYXJnZSBhc3luYyBkZWNvZGluZ10iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNv
dXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9zb3VyY2Uu
cmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgobV9jdXJyZW50RnJhbWUsIG1fY3VycmVu
dFN1YnNhbXBsaW5nTGV2ZWwsIHNpemVGb3JEcmF3aW5nKTsKKyAgICAgICAgICAgIG1fc291cmNl
LT5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9jdXJy
ZW50U3Vic2FtcGxpbmdMZXZlbCwgc2l6ZUZvckRyYXdpbmcpOwogICAgICAgICAgICAgbV9jdXJy
ZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZzsKICAgICAg
ICAgfQogCkBAIC0yMzEsNyArMjM4LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaQogICAgICAgICAvLyBJZiB0aGUgZGVjb2RpbmdNb2RlIGNoYW5nZXMgZnJvbSBh
c3luY2hyb25vdXMgdG8gc3luY2hyb25vdXMgYW5kIG5ldyBkYXRhIGlzIHJlY2VpdmVkLAogICAg
ICAgICAvLyB0aGUgY3VycmVudCBpbmNvbXBsZXRlIGRlY29kZWQgZnJhbWUgaGFzIHRvIGJlIGRl
c3Ryb3llZC4KICAgICAgICAgaWYgKG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPT0gRGVj
b2RpbmdTdGF0dXM6OkludmFsaWQpCi0gICAgICAgICAgICBtX3NvdXJjZS5kZXN0cm95SW5jb21w
bGV0ZURlY29kZWREYXRhKCk7CisgICAgICAgICAgICBtX3NvdXJjZS0+ZGVzdHJveUluY29tcGxl
dGVEZWNvZGVkRGF0YSgpOwogICAgICAgICAKICAgICAgICAgYm9vbCBmcmFtZUlzQ29tcGF0aWJs
ZSA9IGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgRGVjb2RpbmdPcHRp
b25zKHNpemVGb3JEcmF3aW5nKSk7CiAgICAgICAgIGJvb2wgZnJhbWVJc0JlaW5nRGVjb2RlZCA9
IGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgobV9j
dXJyZW50RnJhbWUsIERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzKTsKQEAgLTMyNCwxMiArMzMx
LDEyIEBAIGJvb2wgQml0bWFwSW1hZ2U6OmNhbkFuaW1hdGUoKSBjb25zdAogCiBib29sIEJpdG1h
cEltYWdlOjpjYW5Vc2VBc3luY0RlY29kaW5nRm9yTGFyZ2VJbWFnZXMoKSBjb25zdAogewotICAg
IHJldHVybiAhY2FuQW5pbWF0ZSgpICYmIG1fc291cmNlLmNhblVzZUFzeW5jRGVjb2RpbmcoKTsK
KyAgICByZXR1cm4gIWNhbkFuaW1hdGUoKSAmJiBtX3NvdXJjZS0+Y2FuVXNlQXN5bmNEZWNvZGlu
ZygpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpzaG91bGRVc2VBc3luY0RlY29kaW5nRm9yQW5p
bWF0ZWRJbWFnZXMoKSBjb25zdAogewotICAgIHJldHVybiBjYW5BbmltYXRlKCkgJiYgbV9hbGxv
d0FuaW1hdGVkSW1hZ2VBc3luY0RlY29kaW5nICYmIChzaG91bGRVc2VBc3luY0RlY29kaW5nRm9y
QW5pbWF0ZWRJbWFnZXNGb3JUZXN0aW5nKCkgfHwgbV9zb3VyY2UuY2FuVXNlQXN5bmNEZWNvZGlu
ZygpKTsKKyAgICByZXR1cm4gY2FuQW5pbWF0ZSgpICYmIG1fYWxsb3dBbmltYXRlZEltYWdlQXN5
bmNEZWNvZGluZyAmJiAoc2hvdWxkVXNlQXN5bmNEZWNvZGluZ0ZvckFuaW1hdGVkSW1hZ2VzRm9y
VGVzdGluZygpIHx8IG1fc291cmNlLT5jYW5Vc2VBc3luY0RlY29kaW5nKCkpOwogfQogCiB2b2lk
IEJpdG1hcEltYWdlOjpjbGVhclRpbWVyKCkKQEAgLTM0NCwxMCArMzUxLDMwIEBAIHZvaWQgQml0
bWFwSW1hZ2U6OnN0YXJ0VGltZXIoU2Vjb25kcyBkZWwKICAgICBtX2ZyYW1lVGltZXItPnN0YXJ0
T25lU2hvdChkZWxheSk7CiB9CiAKK1N1YnNhbXBsaW5nTGV2ZWwgQml0bWFwSW1hZ2U6OnN1YnNh
bXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3IpCit7CisjaWYgVVNFKENHKQorICAgIC8vIE5ldmVyIHVz
ZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KKyAgICBp
ZiAoQ0dDb250ZXh0R2V0VHlwZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSA9PSBrQ0dDb250
ZXh0VHlwZVBERikKKyAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7CisK
KyAgICBmbG9hdCBzY2FsZSA9IHN0ZDo6bWluKGZsb2F0KDEpLCBzdGQ6Om1heChzY2FsZUZhY3Rv
ci53aWR0aCgpLCBzY2FsZUZhY3Rvci5oZWlnaHQoKSkpOworICAgIGlmICghKHNjYWxlID4gMCAm
JiBzY2FsZSA8PSAxKSkKKyAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7
CisKKyAgICBpbnQgcmVzdWx0ID0gc3RkOjpjZWlsKHN0ZDo6bG9nMigxIC8gc2NhbGUpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8U3Vic2FtcGxpbmdMZXZlbD4oc3RkOjptaW4ocmVzdWx0LCBz
dGF0aWNfY2FzdDxpbnQ+KG1fc291cmNlLT5tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpKSkpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKHNjYWxl
RmFjdG9yKTsKKyAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKKyNlbmRpZgor
fQorCiBib29sIEJpdG1hcEltYWdlOjpjYW5EZXN0cm95RGVjb2RlZERhdGEoKQogewogICAgIC8v
IEFuaW1hdGVkIGltYWdlcyBzaG91bGQgcHJlc2VydmUgdGhlIGN1cnJlbnQgZnJhbWUgdGlsbCB0
aGUgbmV4dCBvbmUgZmluaXNoZXMgZGVjb2RpbmcuCi0gICAgaWYgKG1fc291cmNlLmhhc0FzeW5j
RGVjb2RpbmdRdWV1ZSgpKQorICAgIGlmIChtX3NvdXJjZS0+aGFzQXN5bmNEZWNvZGluZ1F1ZXVl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNtYWxsIGltYWdlIHNob3VsZCBi
ZSBkZWNvZGVkIHN5bmNocm9ub3VzbHkuIERlbGV0aW5nIGl0cyBkZWNvZGVkIGZyYW1lIGlzIGZp
bmUuCkBAIC0zNzcsNyArNDA0LDcgQEAgQml0bWFwSW1hZ2U6OlN0YXJ0QW5pbWF0aW9uU3RhdHVz
IEJpdG1hcAogICAgICAgICAvLyB5ZXQgYW5kIG91ciByZXBldGl0aW9uIGNvdW50IGlzIHBvdGVu
dGlhbGx5IHVuc2V0LiBUaGUgcmVwZXRpdGlvbiBjb3VudAogICAgICAgICAvLyBpbiBhIEdJRiBj
YW4gcG90ZW50aWFsbHkgY29tZSBhZnRlciBhbGwgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEs
IHNvCiAgICAgICAgIC8vIHdhaXQgb24gaXQuCi0gICAgICAgIGlmICghbV9zb3VyY2UuaXNBbGxE
YXRhUmVjZWl2ZWQoKSAmJiByZXBldGl0aW9uQ291bnQoKSA9PSBSZXBldGl0aW9uQ291bnRPbmNl
KQorICAgICAgICBpZiAoIW1fc291cmNlLT5pc0FsbERhdGFSZWNlaXZlZCgpICYmIHJlcGV0aXRp
b25Db3VudCgpID09IFJlcGV0aXRpb25Db3VudE9uY2UpCiAgICAgICAgICAgICByZXR1cm4gU3Rh
cnRBbmltYXRpb25TdGF0dXM6OkluY29tcGxldGVEYXRhOwogCiAgICAgICAgICsrbV9yZXBldGl0
aW9uc0NvbXBsZXRlOwpAQCAtMzkzLDcgKzQyMCw3IEBAIEJpdG1hcEltYWdlOjpTdGFydEFuaW1h
dGlvblN0YXR1cyBCaXRtYXAKICAgICB9CiAKICAgICAvLyBEb24ndCBhZHZhbmNlIHRoZSBhbmlt
YXRpb24gdG8gYW4gaW5jb21wbGV0ZSBmcmFtZS4KLSAgICBpZiAoIW1fc291cmNlLmlzQWxsRGF0
YVJlY2VpdmVkKCkgJiYgIWZyYW1lSXNDb21wbGV0ZUF0SW5kZXgobmV4dEZyYW1lKSkKKyAgICBp
ZiAoIW1fc291cmNlLT5pc0FsbERhdGFSZWNlaXZlZCgpICYmICFmcmFtZUlzQ29tcGxldGVBdElu
ZGV4KG5leHRGcmFtZSkpCiAgICAgICAgIHJldHVybiBTdGFydEFuaW1hdGlvblN0YXR1czo6SW5j
b21wbGV0ZURhdGE7CiAKICAgICBNb25vdG9uaWNUaW1lIHRpbWUgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKQEAgLTQxMywxNCArNDQwLDE0IEBAIEJpdG1hcEltYWdlOjpTdGFydEFuaW1hdGlvblN0
YXR1cyBCaXRtYXAKICAgICAgICAgaWYgKGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0
aWJsZVdpdGhPcHRpb25zQXRJbmRleChuZXh0RnJhbWUsIG1fY3VycmVudFN1YnNhbXBsaW5nTGV2
ZWwsIHsgfSkpCiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAg
LSB1cmw6ICVzIFtjYWNoZWRGcmFtZUNvdW50ID0gJWxkIG5leHRGcmFtZSA9ICVsZF0iLCBfX0ZV
TkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksICsrbV9j
YWNoZWRGcmFtZUNvdW50LCBuZXh0RnJhbWUpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IG1fc291cmNlLnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KG5leHRGcmFtZSwgbV9j
dXJyZW50U3Vic2FtcGxpbmdMZXZlbCk7CisgICAgICAgICAgICBtX3NvdXJjZS0+cmVxdWVzdEZy
YW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgobmV4dEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xl
dmVsKTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBEZWNvZGlu
Z1N0YXR1czo6RGVjb2Rpbmc7CiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6
OiVzIC0gJXAgLSB1cmw6ICVzIFtyZXF1ZXN0aW5nIGFzeW5jIGRlY29kaW5nIGZvciBuZXh0RnJh
bWUgPSAlbGRdIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBuZXh0RnJhbWUpOwogICAgICAgICB9CiAKICAgICAgICAgbV9kZXNpcmVkRnJh
bWVEZWNvZGVUaW1lRm9yVGVzdGluZyA9IHRpbWUgKyBzdGQ6Om1heChtX2ZyYW1lRGVjb2RpbmdE
dXJhdGlvbkZvclRlc3RpbmcsIDBfcyk7CiAgICAgICAgIGlmIChtX2NsZWFyRGVjb2RlckFmdGVy
QXN5bmNGcmFtZVJlcXVlc3RGb3JUZXN0aW5nKQotICAgICAgICAgICAgbV9zb3VyY2UucmVzZXRE
YXRhKGRhdGEoKSk7CisgICAgICAgICAgICBtX3NvdXJjZS0+cmVzZXREYXRhKGRhdGEoKSk7CiAg
ICAgfQogCiAgICAgQVNTRVJUKCFtX2ZyYW1lVGltZXIpOwpAQCAtNDg0LDcgKzUxMSw3IEBAIHZv
aWQgQml0bWFwSW1hZ2U6OnN0b3BBbmltYXRpb24oKQogICAgIC8vIHRoZSB0aW1lciB1bmxlc3Mg
YWxsIHJlbmRlcmVycyBoYXZlIHN0b3BwZWQgZHJhd2luZy4KICAgICBjbGVhclRpbWVyKCk7CiAg
ICAgaWYgKGNhbkFuaW1hdGUoKSkKLSAgICAgICAgbV9zb3VyY2Uuc3RvcEFzeW5jRGVjb2RpbmdR
dWV1ZSgpOworICAgICAgICBtX3NvdXJjZS0+c3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOwogfQog
CiB2b2lkIEJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbigpCkBAIC01MTksNyArNTQ2LDcgQEAg
dm9pZCBCaXRtYXBJbWFnZTo6ZGVjb2RlKFdURjo6RnVuY3Rpb248dgogICAgICAgICBpZiAoZnJh
bWVJc0NvbXBhdGlibGUpCiAgICAgICAgICAgICBpbnRlcm5hbFN0YXJ0QW5pbWF0aW9uKCk7CiAg
ICAgICAgIGVsc2UgaWYgKCFmcmFtZUlzQmVpbmdEZWNvZGVkKSB7Ci0gICAgICAgICAgICBtX3Nv
dXJjZS5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9j
dXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgc3RkOjpvcHRpb25hbDxJbnRTaXplPigpKTsKKyAgICAg
ICAgICAgIG1fc291cmNlLT5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChtX2N1cnJl
bnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgc3RkOjpvcHRpb25hbDxJbnRTaXpl
PigpKTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBEZWNvZGlu
Z1N0YXR1czo6RGVjb2Rpbmc7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtNTMxLDcg
KzU1OCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlY29kZShXVEY6OkZ1bmN0aW9uPHYKICAgICBp
ZiAoZnJhbWVJc0NvbXBhdGlibGUpCiAgICAgICAgIGNhbGxEZWNvZGluZ0NhbGxiYWNrcygpOwog
ICAgIGVsc2UgaWYgKCFmcmFtZUlzQmVpbmdEZWNvZGVkKSB7Ci0gICAgICAgIG1fc291cmNlLnJl
cXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRT
dWJzYW1wbGluZ0xldmVsLCBzdGQ6Om9wdGlvbmFsPEludFNpemU+KCkpOworICAgICAgICBtX3Nv
dXJjZS0+cmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgobV9jdXJyZW50RnJhbWUsIG1f
Y3VycmVudFN1YnNhbXBsaW5nTGV2ZWwsIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4oKSk7CiAgICAg
ICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBEZWNvZGluZ1N0YXR1czo6RGVjb2Rp
bmc7CiAgICAgfQogfQpAQCAtNTY3LDggKzU5NCw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmltYWdl
RnJhbWVBdmFpbGFibGVBdEkKICAgICB9CiAKICAgICBBU1NFUlQoaW5kZXggPT0gbV9jdXJyZW50
RnJhbWUgJiYgIW1fY3VycmVudEZyYW1lKTsKLSAgICBpZiAobV9zb3VyY2UuaXNBc3luY0RlY29k
aW5nUXVldWVJZGxlKCkpCi0gICAgICAgIG1fc291cmNlLnN0b3BBc3luY0RlY29kaW5nUXVldWUo
KTsKKyAgICBpZiAobV9zb3VyY2UtPmlzQXN5bmNEZWNvZGluZ1F1ZXVlSWRsZSgpKQorICAgICAg
ICBtX3NvdXJjZS0+c3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOwogCiAgICAgRGVjb2RpbmdTdGF0
dXMgZGVjb2RpbmdTdGF0dXMgPSBmcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChtX2N1cnJlbnRG
cmFtZSk7CiAgICAgc2V0Q3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXNJZk5lY2Vzc2FyeShkZWNv
ZGluZ1N0YXR1cyk7CkBAIC01OTYsNyArNjIzLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHVtcChU
ZXh0U3RyZWFtJiB0cykgYwogICAgIGlmIChpc0FuaW1hdGVkKCkpCiAgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiY3VycmVudC1mcmFtZSIsIG1fY3VycmVudEZyYW1lKTsKICAgICAKLSAgICBtX3Nv
dXJjZS5kdW1wKHRzKTsKKyAgICBtX3NvdXJjZS0+ZHVtcCh0cyk7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkocmV2aXNp
b24gMjI1MjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksOSBAQAogCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgogI2lu
Y2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0j
aW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKICNpZiBVU0Uo
Q0cpIHx8IFVTRShBUFBLSVQpCkBAIC03MSwzMSArNzEsMzEgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiAKICAgICBFbmNvZGVkRGF0YVN0YXR1cyBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZl
ZCkgb3ZlcnJpZGU7Ci0gICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZS5kZWNvZGVkU2l6ZSgpOyB9CisgICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZS0+ZGVjb2RlZFNpemUoKTsgfQogCi0gICAgRW5jb2RlZERhdGFT
dGF0dXMgZW5jb2RlZERhdGFTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5lbmNvZGVk
RGF0YVN0YXR1cygpOyB9Ci0gICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZS5mcmFtZUNvdW50KCk7IH0KLSAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlvbkNv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UucmVwZXRpdGlvbkNvdW50KCk7IH0KLSAgICBT
dHJpbmcgdXRpKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UudXRpKCk7IH0KLSAg
ICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Nv
dXJjZS5maWxlbmFtZUV4dGVuc2lvbigpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxJbnRQb2ludD4g
aG90U3BvdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLmhvdFNwb3QoKTsgfQor
ICAgIEVuY29kZWREYXRhU3RhdHVzIGVuY29kZWREYXRhU3RhdHVzKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2UtPmVuY29kZWREYXRhU3RhdHVzKCk7IH0KKyAgICBzaXplX3QgZnJhbWVDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZUNvdW50KCk7IH0KKyAgICBSZXBldGl0aW9u
Q291bnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPnJlcGV0aXRp
b25Db3VudCgpOyB9CisgICAgU3RyaW5nIHV0aSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
c291cmNlLT51dGkoKTsgfQorICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT5maWxlbmFtZUV4dGVuc2lvbigpOyB9CisgICAgc3Rk
OjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3BvdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
c291cmNlLT5ob3RTcG90KCk7IH0KIAogICAgIC8vIEZsb2F0U2l6ZSBkdWUgdG8gb3ZlcnJpZGUu
Ci0gICAgRmxvYXRTaXplIHNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS5z
aXplKCk7IH0KLSAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7IH0KLSAgICBDb2xv
ciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJj
ZS5zaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsgfQotICAgIGJvb2wgZnJhbWVJc0JlaW5nRGVjb2Rl
ZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IERl
Y29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5m
cmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4
LCBkZWNvZGluZ09wdGlvbnMpOyB9Ci0gICAgRGVjb2RpbmdTdGF0dXMgZnJhbWVEZWNvZGluZ1N0
YXR1c0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZURl
Y29kaW5nU3RhdHVzQXRJbmRleChpbmRleCk7IH0KKyAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNlLT5zaXplKCk7IH0KKyAgICBJbnRTaXplIHNpemVS
ZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+c2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbigpOyB9CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPnNpbmdsZVBpeGVsU29saWRDb2xvcigp
OyB9CisgICAgYm9vbCBmcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlv
bnNBdEluZGV4KHNpemVfdCBpbmRleCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09w
dGlvbnMpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXND
b21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBkZWNvZGluZ09wdGlvbnMpOyB9Cisg
ICAgRGVjb2RpbmdTdGF0dXMgZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoaW5k
ZXgpOyB9CiAgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QgeyByZXR1cm4gZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5kZXgoaW5kZXgpID09IERlY29kaW5n
U3RhdHVzOjpDb21wbGV0ZTsgfQotICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRl
eCk7IH0KKyAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsgfQogCi0gICAg
Ym9vbCBmcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUhh
c0Z1bGxTaXplTmF0aXZlSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQot
ICAgIGJvb2wgZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNB
dEluZGV4KHNpemVfdCBpbmRleCwgY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVs
PiYgc3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlv
bnMpIHsgcmV0dXJuIG1fc291cmNlLmZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJs
ZVdpdGhPcHRpb25zQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRp
b25zKTsgfQorICAgIGJvb2wgZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkgeyByZXR1cm4gbV9z
b3VyY2UtPmZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBs
aW5nTGV2ZWwpOyB9CisgICAgYm9vbCBmcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGli
bGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1
YnNhbXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMm
IGRlY29kaW5nT3B0aW9ucykgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSGFzRGVjb2RlZE5hdGl2
ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZl
bCwgZGVjb2RpbmdPcHRpb25zKTsgfQogCi0gICAgU3Vic2FtcGxpbmdMZXZlbCBmcmFtZVN1YnNh
bXBsaW5nTGV2ZWxBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2Uu
ZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChpbmRleCk7IH0KKyAgICBTdWJzYW1wbGluZ0xl
dmVsIGZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS0+ZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChpbmRleCk7IH0KIAot
ICAgIFNlY29uZHMgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7IH0KLSAgICBJbWFnZU9y
aWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2UuZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOyB9CisgICAgU2Vj
b25kcyBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlLT5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7IH0KKyAgICBJbWFnZU9yaWVudGF0
aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2UtPmZyYW1lT3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsgfQogCiAgICAgc2l6ZV90
IGN1cnJlbnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1lOyB9CiAgICAgYm9v
bCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAh
ZnJhbWVIYXNBbHBoYUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOyB9CkBAIC0xNDIsNyArMTQyLDcg
QEAgcHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JUIEJpdG1hcEltYWdlKE5hdGl2ZUltYWdl
UHRyJiYsIEltYWdlT2JzZXJ2ZXIqID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgQml0
bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogPSBudWxscHRyKTsKIAotICAgIE5hdGl2ZUltYWdlUHRy
IGZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVJ
bWFnZUF0SW5kZXgoaW5kZXgpOyB9CisgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVJbWFnZUF0SW5kZXgoaW5k
ZXgpOyB9CiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVk
KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZh
bGlkYXRlIGNhY2hlZCBkYXRhLiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91
dApAQCAtMTY1LDcgKzE2NSw3IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIEFuaW1hdGlvbi4KICAg
ICBlbnVtIGNsYXNzIFN0YXJ0QW5pbWF0aW9uU3RhdHVzIHsgQ2Fubm90U3RhcnQsIEluY29tcGxl
dGVEYXRhLCBUaW1lckFjdGl2ZSwgRGVjb2RpbmdBY3RpdmUsIFN0YXJ0ZWQgfTsKLSAgICBib29s
IGlzQW5pbWF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUNvdW50
KCkgPiAxOyB9CisgICAgYm9vbCBpc0FuaW1hdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9zb3VyY2UtPmZyYW1lQ291bnQoKSA+IDE7IH0KICAgICBib29sIHNob3VsZEFuaW1hdGUoKSBj
b25zdDsKICAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uKCkgb3ZlcnJpZGUgeyBpbnRlcm5hbFN0YXJ0
QW5pbWF0aW9uKCk7IH0KICAgICBTdGFydEFuaW1hdGlvblN0YXR1cyBpbnRlcm5hbFN0YXJ0QW5p
bWF0aW9uKCk7CkBAIC0xOTMsNiArMTkzLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2
b2lkIGNsZWFyVGltZXIoKTsKICAgICB2b2lkIHN0YXJ0VGltZXIoU2Vjb25kcyBkZWxheSk7Cisg
ICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGVGYWN0b3IoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3Rvcik7CiAgICAgYm9vbCBjYW5E
ZXN0cm95RGVjb2RlZERhdGEoKTsKICAgICB2b2lkIHNldEN1cnJlbnRGcmFtZURlY29kaW5nU3Rh
dHVzSWZOZWNlc3NhcnkoRGVjb2RpbmdTdGF0dXMpOwogICAgIGJvb2wgaXNCaXRtYXBJbWFnZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KQEAgLTIwNCw3ICsyMDUsNyBAQCBwcml2
YXRlOgogICAgIC8vIEFuaW1hdGVkIGltYWdlcyBvdmVyIGEgY2VydGFpbiBzaXplIGFyZSBjb25z
aWRlcmVkIGxhcmdlIGVub3VnaCB0aGF0IHdlJ2xsIG9ubHkgaGFuZyBvbiB0byBvbmUgZnJhbWUg
YXQgYSB0aW1lLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBMYXJnZUFuaW1hdGlvbkN1dG9m
ZiA9IDMwICogMTAyNCAqIDEwMjQ7CiAKLSAgICBtdXRhYmxlIEltYWdlU291cmNlIG1fc291cmNl
OworICAgIG11dGFibGUgUmVmPEltYWdlRnJhbWVDYWNoZT4gbV9zb3VyY2U7CiAKICAgICBzaXpl
X3QgbV9jdXJyZW50RnJhbWUgeyAwIH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFt
ZSBvZiBhbmltYXRpb24uCiAgICAgU3Vic2FtcGxpbmdMZXZlbCBtX2N1cnJlbnRTdWJzYW1wbGlu
Z0xldmVsIHsgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZp
c2lvbiAyMjUyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw2IEBAIGNsYXNzIEV4dGVu
c2lvbnMzRE9wZW5HTDsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIElt
YWdlQnVmZmVyOwotY2xhc3MgSW1hZ2VTb3VyY2U7CiBjbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBJ
bnRSZWN0OwogY2xhc3MgSW50U2l6ZTsKQEAgLTEyNjIsNyArMTI2MSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgYm9vbCBleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsKIAogI2lmIFVTRShDQUlSTykKLSAgICAgICAgSW1hZ2VT
b3VyY2UqIG1fZGVjb2RlcjsKICAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9pbWFn
ZVN1cmZhY2U7CiAjZWxpZiBVU0UoQ0cpCiAgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBt
X2NnSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZy
YW1lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHJldmlzaW9uIDIyNTI0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDggKzQ3LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW1hZ2VGcmFtZUNh
Y2hlOjpJbWFnZUZyYW1lQ2FjaGUoSW1hZ2UqIGltYWdlKQorSW1hZ2VGcmFtZUNhY2hlOjpJbWFn
ZUZyYW1lQ2FjaGUoSW1hZ2UqIGltYWdlLCBBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgR2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCiAgICAgOiBt
X2ltYWdlKGltYWdlKQorICAgICwgbV9hbHBoYU9wdGlvbihhbHBoYU9wdGlvbikKKyAgICAsIG1f
Z2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCiB7
CiB9CiAKQEAgLTczLDIxICs3NSw1MiBAQCBJbWFnZUZyYW1lQ2FjaGU6On5JbWFnZUZyYW1lQ2Fj
aGUoKQogICAgIEFTU0VSVCghaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkpOwogfQogCi12b2lkIElt
YWdlRnJhbWVDYWNoZTo6c2V0RGVjb2RlcihJbWFnZURlY29kZXIqIGRlY29kZXIpCitib29sIElt
YWdlRnJhbWVDYWNoZTo6ZW5zdXJlRGVjb2RlckF2YWlsYWJsZShTaGFyZWRCdWZmZXIqIGRhdGEp
CiB7Ci0gICAgaWYgKG1fZGVjb2RlciA9PSBkZWNvZGVyKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKCFkYXRhIHx8IGlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIG1fZGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtaW1lVHlwZSgp
LCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKyAgICBpZiAo
IWlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKGF1dG8gZXhwZWN0ZWRDb250ZW50U2l6ZSA9IGV4cGVjdGVkQ29udGVudExlbmd0aCgpKQor
ICAgICAgICBtX2RlY29kZXItPnNldEV4cGVjdGVkQ29udGVudFNpemUoZXhwZWN0ZWRDb250ZW50
U2l6ZSk7CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgZGVjb2RlciBoYXMgdG8gc3RvcCB0aGUgZGVj
b2RpbmcgdGhyZWFkLiBUaGUgY3VycmVudCBmcmFtZSB3aWxsCiAgICAgLy8gY29udGludWUgZGVj
b2Rpbmcgc2FmZWx5IGJlY2F1c2UgdGhlIGRlY29kaW5nIHRocmVhZCBoYXMgaXRzIG93bgogICAg
IC8vIHJlZmVyZW5jZSBvZiB0aGUgb2xkIGRlY29kZXIuCiAgICAgc3RvcEFzeW5jRGVjb2RpbmdR
dWV1ZSgpOwotICAgIG1fZGVjb2RlciA9IGRlY29kZXI7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKCFkYXRhIHx8ICFlbnN1cmVEZWNvZGVyQXZhaWxh
YmxlKGRhdGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RlY29kZXItPnNldERhdGEoKmRh
dGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK3ZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpyZXNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIG1fZGVjb2RlciA9IG51bGxwdHI7CisgICAg
c2V0RGF0YShkYXRhLCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKK30KKworRW5jb2RlZERhdGFTdGF0
dXMgSW1hZ2VGcmFtZUNhY2hlOjpkYXRhQ2hhbmdlZChTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQoreworICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsK
KyAgICBjbGVhck1ldGFkYXRhKCk7CisgICAgRW5jb2RlZERhdGFTdGF0dXMgc3RhdHVzID0gZW5j
b2RlZERhdGFTdGF0dXMoKTsKKyAgICBpZiAoc3RhdHVzID49IEVuY29kZWREYXRhU3RhdHVzOjpT
aXplQXZhaWxhYmxlKQorICAgICAgICBncm93RnJhbWVzKCk7CisgICAgcmV0dXJuIHN0YXR1czsK
IH0KIAotSW1hZ2VEZWNvZGVyKiBJbWFnZUZyYW1lQ2FjaGU6OmRlY29kZXIoKSBjb25zdAorYm9v
bCBJbWFnZUZyYW1lQ2FjaGU6OmlzQWxsRGF0YVJlY2VpdmVkKCkKIHsKLSAgICByZXR1cm4gbV9k
ZWNvZGVyLmdldCgpOworICAgIHJldHVybiBpc0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVjb2Rl
ci0+aXNBbGxEYXRhUmVjZWl2ZWQoKSA6IGZyYW1lQ291bnQoKTsKIH0KIAogdm9pZCBJbWFnZUZy
YW1lQ2FjaGU6OmRlc3Ryb3lEZWNvZGVkRGF0YShzaXplX3QgZnJhbWVDb3VudCwgc2l6ZV90IGV4
Y2x1ZGVGcmFtZSkKQEAgLTExOSw2ICsxNTIsMTMgQEAgdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OmRl
c3Ryb3lJbmNvbXBsZXRlRAogICAgIGRlY29kZWRTaXplRGVjcmVhc2VkKGRlY29kZWRTaXplKTsK
IH0KIAordm9pZCBJbWFnZUZyYW1lQ2FjaGU6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qg
YmVmb3JlRnJhbWUpCit7CisgICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGJlZm9yZUZyYW1l
KTsKK30KKwogdm9pZCBJbWFnZUZyYW1lQ2FjaGU6OmRlY29kZWRTaXplQ2hhbmdlZChsb25nIGxv
bmcgZGVjb2RlZFNpemUpCiB7CiAgICAgaWYgKCFkZWNvZGVkU2l6ZSB8fCAhbV9pbWFnZSB8fCAh
bV9pbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQpAQCAtMjc4LDYgKzMxOCwxNCBAQCBJbWFnZUZyYW1l
Q2FjaGU6OkZyYW1lUmVxdWVzdFF1ZXVlJiBJbWFnCiAgICAgcmV0dXJuICptX2ZyYW1lUmVxdWVz
dFF1ZXVlOwogfQogCitib29sIEltYWdlRnJhbWVDYWNoZTo6Y2FuVXNlQXN5bmNEZWNvZGluZygp
Cit7CisgICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IHRoZSBiZXN0IGhldXJpc3RpYyBmb3IgZW5hYmxp
bmcgYXN5bmMgaW1hZ2UgZGVjb2RpbmcuCisgICAgcmV0dXJuIHNpemUoKS5hcmVhKCkgKiBzaXpl
b2YoUkdCQTMyKSA+PSAoZnJhbWVDb3VudCgpID4gMSA/IDEwMCAqIEtCIDogNTAwICogS0IpOwor
fQorCiB2b2lkIEltYWdlRnJhbWVDYWNoZTo6c3RhcnRBc3luY0RlY29kaW5nUXVldWUoKQogewog
ICAgIGlmIChoYXNBc3luY0RlY29kaW5nUXVldWUoKSB8fCAhaXNEZWNvZGVyQXZhaWxhYmxlKCkp
CkBAIC01MTAsNiArNTU4LDI5IEBAIENvbG9yIEltYWdlRnJhbWVDYWNoZTo6c2luZ2xlUGl4ZWxT
b2xpZEMKICAgICByZXR1cm4gZnJhbWVNZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVkPENvbG9y
PigwLCAoJkltYWdlRnJhbWU6OnNpbmdsZVBpeGVsU29saWRDb2xvciksICZtX3NpbmdsZVBpeGVs
U29saWRDb2xvciwgSW1hZ2VGcmFtZTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiB9CiAK
K1N1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VGcmFtZUNhY2hlOjptYXhpbXVtU3Vic2FtcGxpbmdMZXZl
bCgpCit7CisgICAgaWYgKG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpCisgICAgICAgIHJldHVy
biBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsLnZhbHVlKCk7CisKKyAgICBpZiAoIWlzRGVjb2Rl
ckF2YWlsYWJsZSgpIHx8ICFtX2RlY29kZXItPmZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgo
MCkpCisgICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OworCisgICAgLy8g
RklYTUU6IHRoaXMgdmFsdWUgd2FzIGNob3NlbiB0byBiZSBhcHByb3ByaWF0ZSBmb3IgaU9TIHNp
bmNlIHRoZSBpbWFnZQorICAgIC8vIHN1YnNhbXBsaW5nIGlzIG9ubHkgZW5hYmxlZCBieSBkZWZh
dWx0IG9uIGlPUy4gQ2hvb3NlIGEgZGlmZmVyZW50IHZhbHVlCisgICAgLy8gaWYgaW1hZ2Ugc3Vi
c2FtcGxpbmcgaXMgZW5hYmxlZCBvbiBvdGhlciBwbGF0Zm9ybS4KKyAgICBjb25zdCBpbnQgbWF4
aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0OworICAgIFN1
YnNhbXBsaW5nTGV2ZWwgbGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpGaXJzdDsKKworICAgIGZv
ciAoOyBsZXZlbCA8IFN1YnNhbXBsaW5nTGV2ZWw6Okxhc3Q7ICsrbGV2ZWwpIHsKKyAgICAgICAg
aWYgKGZyYW1lU2l6ZUF0SW5kZXgoMCwgbGV2ZWwpLmFyZWEoKS51bnNhZmVHZXQoKSA8IG1heGlt
dW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBsZXZlbDsKKyAgICByZXR1cm4gbV9t
YXhpbXVtU3Vic2FtcGxpbmdMZXZlbC52YWx1ZSgpOworfQorCiBib29sIEltYWdlRnJhbWVDYWNo
ZTo6ZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChz
aXplX3QgaW5kZXgsIGNvbnN0IERlY29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKQogewog
ICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYobV9mcmFtZUNvbW1pdFF1ZXVlLmJlZ2luKCksIG1f
ZnJhbWVDb21taXRRdWV1ZS5lbmQoKSwgW2luZGV4LCAmZGVjb2RpbmdPcHRpb25zXShjb25zdCBJ
bWFnZUZyYW1lUmVxdWVzdCYgZnJhbWVSZXF1ZXN0KSB7CkBAIC01NjMsNiArNjM0LDE5IEBAIElt
YWdlT3JpZW50YXRpb24gSW1hZ2VGcmFtZUNhY2hlOjpmcmFtZU8KICAgICByZXR1cm4gZnJhbWVN
ZXRhZGF0YUF0SW5kZXhDYWNoZUlmTmVlZGVkPEltYWdlT3JpZW50YXRpb24+KGluZGV4LCAoJklt
YWdlRnJhbWU6Om9yaWVudGF0aW9uKSwgbnVsbHB0ciwgSW1hZ2VGcmFtZTo6Q2FjaGluZzo6TWV0
YWRhdGEpOwogfQogCisjaWYgVVNFKERJUkVDVDJEKQordm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnNl
dFRhcmdldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQorewor
ICAgIGlmIChpc0RlY29kZXJBdmFpbGFibGUoKSAmJiB0YXJnZXRDb250ZXh0KQorICAgICAgICBt
X2RlY29kZXItPnNldFRhcmdldENvbnRleHQodGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCkpCit9CisjZW5kaWYKKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGVG
cmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxp
bmdMZXZlbCkKK3sKKyAgICByZXR1cm4gaXNEZWNvZGVyQXZhaWxhYmxlKCkgPyBtX2RlY29kZXIt
PmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51bGxw
dHI7Cit9CisKIE5hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWVDYWNoZTo6ZnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90IGluZGV4KQogewogICAgIHJldHVybiBmcmFtZU1ldGFkYXRhQXRJbmRleDxOYXRp
dmVJbWFnZVB0cj4oaW5kZXgsICgmSW1hZ2VGcmFtZTo6bmF0aXZlSW1hZ2UpKTsKQEAgLTU3Myw0
ICs2NTcsMTYgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZUNhY2hlOjpmcmFtZUltYQogICAg
IHJldHVybiBmcmFtZU1ldGFkYXRhQXRJbmRleENhY2hlSWZOZWVkZWQ8TmF0aXZlSW1hZ2VQdHI+
KGluZGV4LCAoJkltYWdlRnJhbWU6Om5hdGl2ZUltYWdlKSwgbnVsbHB0ciwgSW1hZ2VGcmFtZTo6
Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKK3ZvaWQg
SW1hZ2VGcmFtZUNhY2hlOjpkdW1wKFRleHRTdHJlYW0mIHRzKQoreworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgidHlwZSIsIGZpbGVuYW1lRXh0ZW5zaW9uKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZnJhbWUtY291bnQiLCBmcmFtZUNvdW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVwZXRp
dGlvbnMiLCByZXBldGl0aW9uQ291bnQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzb2xpZC1j
b2xvciIsIHNpbmdsZVBpeGVsU29saWRDb2xvcigpKTsKKworICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleCgwKTsKKyAgICBpZiAob3JpZW50
YXRpb24gIT0gT3JpZ2luVG9wTGVmdCkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcmllbnRh
dGlvbiIsIG9yaWVudGF0aW9uKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmgJKHJldmlzaW9uIDIyNTI0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL1N5bmNocm9uaXplZEZpeGVkUXVldWUuaD4KICNpbmNsdWRlIDx3dGYv
V29ya1F1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQwLDExICs0MSwxNSBAQCBjbGFzcyBJbWFnZURlY29kZXI7CiBj
bGFzcyBVUkw7CiAKIGNsYXNzIEltYWdlRnJhbWVDYWNoZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxJbWFnZUZyYW1lQ2FjaGU+IHsKLSAgICBmcmllbmQgY2xhc3MgSW1hZ2VTb3VyY2U7
CisgICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoSW1hZ2UqIGltYWdlKQorICAgIEltYWdlRnJhbWVDYWNo
ZShJbWFnZSosIEFscGhhT3B0aW9uID0gQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQsIEdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uID0gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxp
ZWQpOworICAgIEltYWdlRnJhbWVDYWNoZShOYXRpdmVJbWFnZVB0ciYmKTsKKyAgICB+SW1hZ2VG
cmFtZUNhY2hlKCk7CisKKyAgICBzdGF0aWMgUmVmPEltYWdlRnJhbWVDYWNoZT4gY3JlYXRlKElt
YWdlKiBpbWFnZSwgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24gPSBBbHBoYU9wdGlvbjo6UHJlbXVs
dGlwbGllZCwgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24gPSBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRnJhbWVDYWNoZShpbWFnZSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUZyYW1lQ2FjaGUoaW1hZ2UsIGFscGhhT3B0aW9u
LCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOwogICAgIH0KIAogICAgIHN0YXRpYyBSZWY8
SW1hZ2VGcmFtZUNhY2hlPiBjcmVhdGUoTmF0aXZlSW1hZ2VQdHImJiBuYXRpdmVJbWFnZSkKQEAg
LTUyLDE2ICs1NywxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElt
YWdlRnJhbWVDYWNoZShXVEZNb3ZlKG5hdGl2ZUltYWdlKSkpOwogICAgIH0KIAotICAgIH5JbWFn
ZUZyYW1lQ2FjaGUoKTsKLQotICAgIHZvaWQgc2V0RGVjb2RlcihJbWFnZURlY29kZXIqKTsKLSAg
ICBJbWFnZURlY29kZXIqIGRlY29kZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldERhdGEoU2hhcmVk
QnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgdm9pZCByZXNldERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhKTsKKyAgICBFbmNvZGVkRGF0YVN0YXR1cyBkYXRhQ2hhbmdlZChT
aGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBib29sIGlzQWxs
RGF0YVJlY2VpdmVkKCk7CiAKICAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVjb2RlZFNpemU7IH0KICAgICB2b2lkIGRlc3Ryb3lBbGxEZWNvZGVkRGF0YSgpIHsg
ZGVzdHJveURlY29kZWREYXRhKGZyYW1lQ291bnQoKSwgZnJhbWVDb3VudCgpKTsgfQogICAgIHZv
aWQgZGVzdHJveUFsbERlY29kZWREYXRhRXhjbHVkZUZyYW1lKHNpemVfdCBleGNsdWRlRnJhbWUp
IHsgZGVzdHJveURlY29kZWREYXRhKGZyYW1lQ291bnQoKSwgZXhjbHVkZUZyYW1lKTsgfQogICAg
IHZvaWQgZGVzdHJveURlY29kZWREYXRhQmVmb3JlRnJhbWUoc2l6ZV90IGJlZm9yZUZyYW1lKSB7
IGRlc3Ryb3lEZWNvZGVkRGF0YShiZWZvcmVGcmFtZSwgYmVmb3JlRnJhbWUpOyB9CiAgICAgdm9p
ZCBkZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7CisgICAgdm9pZCBjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUoc2l6ZV90IGJlZm9yZUZyYW1lKTsKIAogICAgIHZvaWQgZ3Jvd0ZyYW1lcygpOwog
ICAgIHZvaWQgY2xlYXJNZXRhZGF0YSgpOwpAQCAtNzEsOCArNzcsOSBAQCBwdWJsaWM6CiAgICAg
bG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCgpIGNvbnN0OwogCiAgICAgLy8gQXN5bmNo
cm9ub3VzIGltYWdlIGRlY29kaW5nCisgICAgYm9vbCBjYW5Vc2VBc3luY0RlY29kaW5nKCk7CiAg
ICAgdm9pZCBzdGFydEFzeW5jRGVjb2RpbmdRdWV1ZSgpOwotICAgIHZvaWQgcmVxdWVzdEZyYW1l
QXN5bmNEZWNvZGluZ0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEludFNpemU+Jik7CisgICAgdm9pZCByZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5n
QXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SW50
U2l6ZT4mID0geyB9KTsKICAgICB2b2lkIHN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsKICAgICBi
b29sIGhhc0FzeW5jRGVjb2RpbmdRdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RpbmdRdWV1
ZTsgfQogICAgIGJvb2wgaXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCkgY29uc3Q7CkBAIC05MCw4
ICs5Nyw4IEBAIHB1YmxpYzoKICAgICAvLyBJbWFnZSBtZXRhZGF0YSB3aGljaCBpcyBjYWxjdWxh
dGVkIGZyb20gdGhlIGZpcnN0IEltYWdlRnJhbWUuCiAgICAgSW50U2l6ZSBzaXplKCk7CiAgICAg
SW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7Ci0KICAgICBDb2xvciBzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IoKTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIG1heGltdW1TdWJzYW1wbGlu
Z0xldmVsKCk7CiAKICAgICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNoIGRvZXMgbm90IHJl
cXVpcmUgY2FjaGluZyB0aGUgSW1hZ2VGcmFtZS4KICAgICBib29sIGZyYW1lSXNCZWluZ0RlY29k
ZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90LCBjb25zdCBEZWNvZGlu
Z09wdGlvbnMmKTsKQEAgLTEwOCwxMyArMTE1LDE0IEBAIHB1YmxpYzoKICAgICBTZWNvbmRzIGZy
YW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9y
aWVudGF0aW9uQXRJbmRleChzaXplX3QpOwogCisjaWYgVVNFKERJUkVDVDJEKQorICAgIHZvaWQg
c2V0VGFyZ2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqKTsKKyNlbmRpZgorICAgIE5h
dGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogICAgIE5hdGl2ZUltYWdlUHRyIGZy
YW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7Ci0gICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0
SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCk7CisgICAgTmF0aXZl
SW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCwgU3Vic2FtcGxp
bmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpOwogCiBwcml2YXRlOgotICAgIElt
YWdlRnJhbWVDYWNoZShJbWFnZSopOwotICAgIEltYWdlRnJhbWVDYWNoZShOYXRpdmVJbWFnZVB0
ciYmKTsKLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFQgKEltYWdlRGVjb2Rlcjo6KmZ1bmN0
b3IpKCkgY29uc3Q+CiAgICAgVCBtZXRhZGF0YShjb25zdCBUJiBkZWZhdWx0VmFsdWUsIHN0ZDo6
b3B0aW9uYWw8VD4qIGNhY2hlZFZhbHVlID0gbnVsbHB0cik7CiAKQEAgLTEyNCw2ICsxMzIsNyBA
QCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CiAg
ICAgVCBmcmFtZU1ldGFkYXRhQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBUIChJbWFnZUZy
YW1lOjoqZnVuY3RvcikoKSBjb25zdCwgIHN0ZDo6b3B0aW9uYWw8VD4qIGNhY2hlZFZhbHVlLCBB
cmdzJiYuLi4pOwogCisgICAgYm9vbCBlbnN1cmVEZWNvZGVyQXZhaWxhYmxlKFNoYXJlZEJ1ZmZl
ciogZGF0YSk7CiAgICAgYm9vbCBpc0RlY29kZXJBdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBt
X2RlY29kZXI7IH0KICAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShzaXplX3QgZnJhbWVDb3Vu
dCwgc2l6ZV90IGV4Y2x1ZGVGcmFtZSk7CiAgICAgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQobG9u
ZyBsb25nIGRlY29kZWRTaXplKTsKQEAgLTE0NCwxMSArMTUzLDE1IEBAIHByaXZhdGU6CiAKICAg
ICBjb25zdCBJbWFnZUZyYW1lJiBmcmFtZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCwgSW1h
Z2VGcmFtZTo6Q2FjaGluZywgY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYg
PSB7IH0pOwogCisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKTsKKwogICAgIEltYWdlKiBtX2lt
YWdlIHsgbnVsbHB0ciB9OwogICAgIFJlZlB0cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKKyAg
ICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9uIHsgQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQg
fTsKKyAgICBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBtX2dhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uIHsgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQgfTsKKwogICAgIHVu
c2lnbmVkIG1fZGVjb2RlZFNpemUgeyAwIH07CiAgICAgdW5zaWduZWQgbV9kZWNvZGVkUHJvcGVy
dGllc1NpemUgeyAwIH07Ci0KICAgICBWZWN0b3I8SW1hZ2VGcmFtZSwgMT4gbV9mcmFtZXM7CiAK
ICAgICAvLyBBc3luY2hyb25vdXMgaW1hZ2UgZGVjb2RpbmcuCkBAIC0xODAsNiArMTkzLDcgQEAg
cHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IG1fc2l6ZTsKICAgICBzdGQ6Om9w
dGlvbmFsPEludFNpemU+IG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKICAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBtX3NpbmdsZVBpeGVsU29saWRDb2xvcjsKKyAgICBzdGQ6Om9wdGlvbmFs
PFN1YnNhbXBsaW5nTGV2ZWw+IG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWw7CiB9OwogICAgIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAkocmV2aXNpb24gMjI1MjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjA2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3Jh
LmNvLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJJbWFnZURlY29kZXJDRy5oIgotI2lmIFBM
QVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg+Ci0jZW5kaWYKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFn
ZURlY29kZXJEaXJlY3QyRC5oIgotI2Vsc2UKLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNl
bmRpZgotCi0jaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlU291cmNlOjpJbWFnZVNv
dXJjZShOYXRpdmVJbWFnZVB0ciYmIG5hdGl2ZUltYWdlKQotICAgIDogbV9mcmFtZUNhY2hlKElt
YWdlRnJhbWVDYWNoZTo6Y3JlYXRlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSkKLXsKLX0KLSAgICAK
LUltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZSogaW1hZ2UsIEFscGhhT3B0aW9uIGFscGhh
T3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbikKLSAgICA6IG1fZnJhbWVDYWNoZShJbWFnZUZyYW1lQ2FjaGU6OmNyZWF0ZShpbWFnZSkp
Ci0gICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQotICAgICwgbV9nYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLXsKLX0KLQotSW1hZ2VT
b3VyY2U6On5JbWFnZVNvdXJjZSgpID0gZGVmYXVsdDsKLQotdm9pZCBJbWFnZVNvdXJjZTo6Y2xl
YXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKQotewotICAgIGlmICgh
aXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2RlY29kZXItPmNs
ZWFyRnJhbWVCdWZmZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsKLX0KLQotYm9vbCBJbWFnZVNv
dXJjZTo6ZW5zdXJlRGVjb2RlckF2YWlsYWJsZShTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAg
aWYgKCFkYXRhIHx8IGlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIG1fZGVjb2RlciA9IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2ZyYW1lQ2Fj
aGUtPm1pbWVUeXBlKCksIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pOwotICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRvIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fZnJhbWVDYWNoZS0+
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpCi0gICAgICAgIG1fZGVjb2Rlci0+c2V0RXhwZWN0ZWRD
b250ZW50U2l6ZShleHBlY3RlZENvbnRlbnRMZW5ndGgpOwotCi0gICAgbV9mcmFtZUNhY2hlLT5z
ZXREZWNvZGVyKG1fZGVjb2Rlci5nZXQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
SW1hZ2VTb3VyY2U6OnNldERlY29kZXJUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogdGFyZ2V0Q29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgaWYgKCFpc0RlY29k
ZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRhcmdldENvbnRleHQp
Ci0gICAgICAgIG1fZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsK
LSNlbmRpZgotfQotCi12b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKCFkYXRhIHx8ICFlbnN1cmVEZWNv
ZGVyQXZhaWxhYmxlKGRhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RlY29kZXItPnNl
dERhdGEoKmRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OnJl
c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgbV9kZWNvZGVyID0gbnVsbHB0cjsK
LSAgICBtX2ZyYW1lQ2FjaGUtPnNldERlY29kZXIobnVsbHB0cik7Ci0gICAgc2V0RGF0YShkYXRh
LCBpc0FsbERhdGFSZWNlaXZlZCgpKTsKLX0KLQotRW5jb2RlZERhdGFTdGF0dXMgSW1hZ2VTb3Vy
Y2U6OmRhdGFDaGFuZ2VkKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
Ci17Ci0gICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIG1fZnJhbWVDYWNo
ZS0+Y2xlYXJNZXRhZGF0YSgpOwotCi0gICAgRW5jb2RlZERhdGFTdGF0dXMgc3RhdHVzID0gZW5j
b2RlZERhdGFTdGF0dXMoKTsKLSAgICBpZiAoc3RhdHVzID49IEVuY29kZWREYXRhU3RhdHVzOjpT
aXplQXZhaWxhYmxlKQotICAgICAgICBtX2ZyYW1lQ2FjaGUtPmdyb3dGcmFtZXMoKTsKLQotICAg
IHJldHVybiBzdGF0dXM7Ci19Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmlzQWxsRGF0YVJlY2VpdmVk
KCkKLXsKLSAgICByZXR1cm4gaXNEZWNvZGVyQXZhaWxhYmxlKCkgPyBtX2RlY29kZXItPmlzQWxs
RGF0YVJlY2VpdmVkKCkgOiBtX2ZyYW1lQ2FjaGUtPmZyYW1lQ291bnQoKTsKLX0KLQotYm9vbCBJ
bWFnZVNvdXJjZTo6Y2FuVXNlQXN5bmNEZWNvZGluZygpCi17Ci0gICAgaWYgKCFpc0RlY29kZXJB
dmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIEZJWE1FOiBmaWd1cmUg
b3V0IHRoZSBiZXN0IGhldXJpc3RpYyBmb3IgZW5hYmxpbmcgYXN5bmMgaW1hZ2UgZGVjb2Rpbmcu
Ci0gICAgcmV0dXJuIHNpemUoKS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSA+PSAoZnJhbWVDb3Vu
dCgpID4gMSA/IDEwMCAqIEtCIDogNTAwICogS0IpOwotfQotCi1TdWJzYW1wbGluZ0xldmVsIElt
YWdlU291cmNlOjptYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpCi17Ci0gICAgaWYgKG1fbWF4aW11
bVN1YnNhbXBsaW5nTGV2ZWwpCi0gICAgICAgIHJldHVybiBtX21heGltdW1TdWJzYW1wbGluZ0xl
dmVsLnZhbHVlKCk7Ci0KLSAgICBpZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpIHx8ICFtX2RlY29k
ZXItPmZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgoMCkpCi0gICAgICAgIHJldHVybiBTdWJz
YW1wbGluZ0xldmVsOjpEZWZhdWx0OwotCi0gICAgLy8gRklYTUU6IHRoaXMgdmFsdWUgd2FzIGNo
b3NlbiB0byBiZSBhcHByb3ByaWF0ZSBmb3IgaU9TIHNpbmNlIHRoZSBpbWFnZQotICAgIC8vIHN1
YnNhbXBsaW5nIGlzIG9ubHkgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGlPUy4gQ2hvb3NlIGEgZGlm
ZmVyZW50IHZhbHVlCi0gICAgLy8gaWYgaW1hZ2Ugc3Vic2FtcGxpbmcgaXMgZW5hYmxlZCBvbiBv
dGhlciBwbGF0Zm9ybS4KLSAgICBjb25zdCBpbnQgbWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNh
bXBsaW5nID0gNSAqIDEwMjQgKiAxMDI0OwotICAgIFN1YnNhbXBsaW5nTGV2ZWwgbGV2ZWwgPSBT
dWJzYW1wbGluZ0xldmVsOjpGaXJzdDsKLQotICAgIGZvciAoOyBsZXZlbCA8IFN1YnNhbXBsaW5n
TGV2ZWw6Okxhc3Q7ICsrbGV2ZWwpIHsKLSAgICAgICAgaWYgKGZyYW1lU2l6ZUF0SW5kZXgoMCwg
bGV2ZWwpLmFyZWEoKS51bnNhZmVHZXQoKSA8IG1heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1w
bGluZykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fbWF4aW11bVN1YnNhbXBs
aW5nTGV2ZWwgPSBsZXZlbDsKLSAgICByZXR1cm4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbC52
YWx1ZSgpOwotfQotCi1TdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xl
dmVsRm9yU2NhbGVGYWN0b3IoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFNp
emUmIHNjYWxlRmFjdG9yKQotewotI2lmIFVTRShDRykKLSAgICAvLyBOZXZlciB1c2Ugc3Vic2Ft
cGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0gICAgaWYgKENHQ29u
dGV4dEdldFR5cGUoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkgPT0ga0NHQ29udGV4dFR5cGVQ
REYpCi0gICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OwotCi0gICAgZmxv
YXQgc2NhbGUgPSBzdGQ6Om1pbihmbG9hdCgxKSwgc3RkOjptYXgoc2NhbGVGYWN0b3Iud2lkdGgo
KSwgc2NhbGVGYWN0b3IuaGVpZ2h0KCkpKTsKLSAgICBpZiAoIShzY2FsZSA+IDAgJiYgc2NhbGUg
PD0gMSkpCi0gICAgICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OwotCi0gICAg
aW50IHJlc3VsdCA9IHN0ZDo6Y2VpbChzdGQ6OmxvZzIoMSAvIHNjYWxlKSk7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PFN1YnNhbXBsaW5nTGV2ZWw+KHN0ZDo6bWluKHJlc3VsdCwgc3RhdGljX2Nh
c3Q8aW50PihtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpKSkpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjYWxlRmFjdG9yKTsKLSAgICByZXR1
cm4gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdDsKLSNlbmRpZgotfQotCi1OYXRpdmVJbWFnZVB0
ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJz
YW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCi17Ci0gICAgcmV0dXJuIGlzRGVjb2RlckF2
YWlsYWJsZSgpID8gbV9kZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCkgOiBudWxscHRyOwotfQotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJj
ZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENv
bnRleHQpCi17Ci0gICAgc2V0RGVjb2RlclRhcmdldENvbnRleHQodGFyZ2V0Q29udGV4dCk7Ci0g
ICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlmTmVlZGVkKGlu
ZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6ZHVtcChUZXh0
U3RyZWFtJiB0cykKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInR5cGUiLCBmaWxlbmFtZUV4dGVu
c2lvbigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImZyYW1lLWNvdW50IiwgZnJhbWVDb3VudCgp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlcGV0aXRpb25zIiwgcmVwZXRpdGlvbkNvdW50KCkp
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgic29saWQtY29sb3IiLCBzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKSk7Ci0KLSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgoMCk7Ci0gICAgaWYgKG9yaWVudGF0aW9uICE9IE9yaWdpblRvcExlZnQpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3JpZW50YXRpb24iLCBvcmllbnRhdGlvbik7Ci19Ci0K
LX0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEg
KzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkocmV2aXNp
b24gMjI1MjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMDgsIDIwMTAsIDIwMTIsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5j
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJJbWFnZUZyYW1lLmgiCi0jaW5jbHVkZSAiSW1hZ2VGcmFtZUNhY2hl
LmgiCi0jaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkludFBvaW50Lmgi
Ci0jaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbWFnZURlY29kZXI7Ci1jbGFzcyBJbWFnZU9y
aWVudGF0aW9uOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgU2hhcmVk
QnVmZmVyOwotCi1jbGFzcyBJbWFnZVNvdXJjZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW1hZ2VTb3VyY2UpOwotICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKLXB1YmxpYzoKLSAg
ICBJbWFnZVNvdXJjZShOYXRpdmVJbWFnZVB0ciYmKTsKLSAgICBJbWFnZVNvdXJjZShJbWFnZSos
IEFscGhhT3B0aW9uID0gQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQsIEdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uID0gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQpOwotICAg
IH5JbWFnZVNvdXJjZSgpOwotCi0gICAgdm9pZCBkZXN0cm95QWxsRGVjb2RlZERhdGEoKSB7IG1f
ZnJhbWVDYWNoZS0+ZGVzdHJveUFsbERlY29kZWREYXRhKCk7IH0KLSAgICB2b2lkIGRlc3Ryb3lB
bGxEZWNvZGVkRGF0YUV4Y2x1ZGVGcmFtZShzaXplX3QgZXhjbHVkZUZyYW1lKSB7IG1fZnJhbWVD
YWNoZS0+ZGVzdHJveUFsbERlY29kZWREYXRhRXhjbHVkZUZyYW1lKGV4Y2x1ZGVGcmFtZSk7IH0K
LSAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKHNpemVfdCBiZWZvcmVGcmFt
ZSkgeyBtX2ZyYW1lQ2FjaGUtPmRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKGJlZm9yZUZy
YW1lKTsgfQotICAgIHZvaWQgZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpIHsgbV9mcmFt
ZUNhY2hlLT5kZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7IH0KLSAgICB2b2lkIGNsZWFy
SW1hZ2UoKSB7IG1fZnJhbWVDYWNoZS0+Y2xlYXJJbWFnZSgpOyB9Ci0gICAgdm9pZCBjbGVhckZy
YW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKLQotICAgIGJvb2wgZW5zdXJlRGVjb2RlckF2YWlsYWJs
ZShTaGFyZWRCdWZmZXIqKTsKLSAgICBib29sIGlzRGVjb2RlckF2YWlsYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVjb2Rlci5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZl
ciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIHZvaWQgcmVzZXREYXRhKFNoYXJl
ZEJ1ZmZlciogZGF0YSk7Ci0gICAgRW5jb2RlZERhdGFTdGF0dXMgZGF0YUNoYW5nZWQoU2hhcmVk
QnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0KLSAgICB1bnNpZ25lZCBkZWNv
ZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZGVjb2RlZFNpemUoKTsgfQot
ICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKTsKLQotICAgIGJvb2wgY2FuVXNlQXN5bmNEZWNv
ZGluZygpOwotICAgIHZvaWQgcmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgoc2l6ZV90
IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8SW50U2l6ZT4mIHNpemVGb3JEcmF3aW5nID0geyB9KSB7IG1fZnJhbWVDYWNoZS0+cmVx
dWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIHNp
emVGb3JEcmF3aW5nKTsgfQotICAgIGJvb2wgaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZUNhY2hlLT5oYXNBc3luY0RlY29kaW5nUXVldWUoKTsgfQotICAgIGJv
b2wgaXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCkgY29uc3QgIHsgcmV0dXJuIG1fZnJhbWVDYWNo
ZS0+aXNBc3luY0RlY29kaW5nUXVldWVJZGxlKCk7IH0KLSAgICB2b2lkIHN0b3BBc3luY0RlY29k
aW5nUXVldWUoKSB7IG1fZnJhbWVDYWNoZS0+c3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOyB9Ci0K
LSAgICAvLyBJbWFnZSBtZXRhZGF0YSB3aGljaCBpcyBjYWxjdWxhdGVkIGJ5IHRoZSBkZWNvZGVy
IG9yIGNhbiBkZWR1Y2VkIGJ5IHRoZSBjYXNlIG9mIHRoZSBtZW1vcnkgTmF0aXZlSW1hZ2UuCi0g
ICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMoKSB7IHJldHVybiBtX2ZyYW1l
Q2FjaGUtPmVuY29kZWREYXRhU3RhdHVzKCk7IH0KLSAgICBzaXplX3QgZnJhbWVDb3VudCgpIHsg
cmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVDb3VudCgpOyB9Ci0gICAgUmVwZXRpdGlvbkNvdW50
IHJlcGV0aXRpb25Db3VudCgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+cmVwZXRpdGlvbkNvdW50
KCk7IH0KLSAgICBTdHJpbmcgdXRpKCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT51dGkoKTsgfQot
ICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+Zmls
ZW5hbWVFeHRlbnNpb24oKTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IGhvdFNwb3Qo
KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmhvdFNwb3QoKTsgfQotCi0gICAgLy8gSW1hZ2UgbWV0
YWRhdGEgd2hpY2ggaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSBmaXJzdCBJbWFnZUZyYW1lLgotICAg
IEludFNpemUgc2l6ZSgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+c2l6ZSgpOyB9Ci0gICAgSW50
U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5z
aXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7IH0KLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPnNpbmdsZVBpeGVsU29saWRDb2xvcigpOyB9
Ci0KLSAgICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgY2Fj
aGluZyB0aGUgSW1hZ2VGcmFtZS4KLSAgICBib29sIGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0Nv
bXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBEZWNvZGluZ09w
dGlvbnMmIGRlY29kaW5nT3B0aW9ucykgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUlzQmVp
bmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBkZWNvZGlu
Z09wdGlvbnMpOyB9Ci0gICAgRGVjb2RpbmdTdGF0dXMgZnJhbWVEZWNvZGluZ1N0YXR1c0F0SW5k
ZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lRGVjb2RpbmdTdGF0
dXNBdEluZGV4KGluZGV4KTsgfQotICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4
KTsgfQotICAgIGJvb2wgZnJhbWVIYXNJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX2ZyYW1lQ2FjaGUtPmZyYW1lSGFzSW1hZ2VBdEluZGV4KGluZGV4KTsgfQotICAgIGJvb2wg
ZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwpIHsgcmV0dXJu
IG1fZnJhbWVDYWNoZS0+ZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChpbmRleCwg
c3Vic2FtcGxpbmdMZXZlbCk7IH0KLSAgICBib29sIGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdl
Q29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29kaW5n
T3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSGFz
RGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgZGVjb2RpbmdPcHRpb25zKTsgfQotICAgIFN1YnNhbXBsaW5nTGV2ZWwg
ZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJh
bWVDYWNoZS0+ZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChpbmRleCk7IH0KLQotICAgIC8v
IEltYWdlRnJhbWUgbWV0YWRhdGEgd2hpY2ggZm9yY2VzIGNhY2hpbmcgb3IgcmUtY2FjaGluZyB0
aGUgSW1hZ2VGcmFtZS4KLSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4
LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpE
ZWZhdWx0KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1
YnNhbXBsaW5nTGV2ZWwpOyB9Ci0gICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90
IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xl
dmVsOjpEZWZhdWx0KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lQnl0ZXNBdEluZGV4KGlu
ZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQotICAgIFNlY29uZHMgZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lRHVyYXRpb25BdElu
ZGV4KGluZGV4KTsgfQotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lT3JpZW50YXRpb25B
dEluZGV4KGluZGV4KTsgfQotCi0gICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgo
c2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmZyYW1lSW1hZ2VBdEluZGV4KGlu
ZGV4KTsgfQotICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRl
ZChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0LCBj
b25zdCBHcmFwaGljc0NvbnRleHQqID0gbnVsbHB0cik7Ci0KLSAgICBTdWJzYW1wbGluZ0xldmVs
IG1heGltdW1TdWJzYW1wbGluZ0xldmVsKCk7Ci0gICAgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1w
bGluZ0xldmVsRm9yU2NhbGVGYWN0b3IoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRTaXpl
JiBzY2FsZUZhY3Rvcik7Ci0gICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7
Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpOwotCi0gICAgdm9p
ZCBzZXREZWNvZGVyVGFyZ2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqKTsKLQotICAg
IFJlZjxJbWFnZUZyYW1lQ2FjaGU+IG1fZnJhbWVDYWNoZTsKLSAgICBSZWZQdHI8SW1hZ2VEZWNv
ZGVyPiBtX2RlY29kZXI7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+IG1f
bWF4aW11bVN1YnNhbXBsaW5nTGV2ZWw7Ci0KLSAgICBBbHBoYU9wdGlvbiBtX2FscGhhT3B0aW9u
IHsgQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQgfTsKLSAgICBHYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbiBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIHsgR2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb246OkFwcGxpZWQgfTsKLX07Ci0KLX0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxl
dGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAko
cmV2aXNpb24gMjI1MjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3Vy
Y2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lQ2FjaGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVm
UHRyQ2Fpcm8uaCIKQEAgLTI1NSw4ICsyNTUsNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBo
aWNzQ29udGV4dDNEKCkKIAogR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1h
Z2VFeHRyYWN0b3IoKQogewotICAgIGlmIChtX2RlY29kZXIpCi0gICAgICAgIGRlbGV0ZSBtX2Rl
Y29kZXI7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRy
YWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQ
cm9maWxlKQpAQCAtMjY2LDEyICsyNjQsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUV4dHJhY3Rvcjo6CiAgICAgLy8gV2UgbmVlZCB0aGlzIHRvIHN0YXkgaW4gc2NvcGUgYmVjYXVz
ZSB0aGUgbmF0aXZlIGltYWdlIGlzIGp1c3QgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRhdGEuCiAg
ICAgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24gPSBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcHRp
b246OlByZW11bHRpcGxpZWQgOiBBbHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZDsKICAgICBH
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IGln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246Okln
bm9yZWQgOiBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZDsKLSAgICBtX2RlY29k
ZXIgPSBuZXcgSW1hZ2VTb3VyY2UobnVsbHB0ciwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKTsKLSAgICAKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgSW1hZ2VTb3VyY2UmIGRlY29kZXIgPSAqbV9kZWNvZGVyOworICAgIElt
YWdlRnJhbWVDYWNoZSBkZWNvZGVyKG51bGxwdHIsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbik7CiAgICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CiAKICAgICBp
ZiAobV9pbWFnZS0+ZGF0YSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAkocmV2aXNp
b24gMjI1MjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0M0RDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNSw3ICszMjUsNyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBib29sIGhhc0FscGhhID0gIW1faW1hZ2UtPmN1cnJlbnRGcmFtZUtub3duVG9CZU9w
YXF1ZSgpOwogICAgIGlmICgoaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhh
ICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgbV9pbWFnZS0+ZGF0YSgpKSB7Ci0gICAgICAgIElt
YWdlU291cmNlIGRlY29kZXIobnVsbHB0ciwgQWxwaGFPcHRpb246Ok5vdFByZW11bHRpcGxpZWQs
IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246
Oklnbm9yZWQgOiBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCk7CisgICAgICAg
IEltYWdlRnJhbWVDYWNoZSBkZWNvZGVyKG51bGxwdHIsIEFscGhhT3B0aW9uOjpOb3RQcmVtdWx0
aXBsaWVkLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uOjpJZ25vcmVkIDogR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQpOwog
ICAgICAgICBkZWNvZGVyLnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAg
aWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNv
dXJjZUNHLmgJKHJldmlzaW9uIDIyNTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBA
QAogI2lmbmRlZiBJbWFnZVNvdXJjZUNHX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VDR19oCiAKLSNp
bmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIyNTI4MykKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTExLTI5ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBJbWFnZVNvdXJjZSBm
cm9tIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRtYXBJbWFnZSB0byBJbWFn
ZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzU1OTUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFdl
YlZpZXcvV2ViUHJlZmVyZW5jZXMubW06CisKIDIwMTctMTEtMjcgIFRpbSBIb3J0b24gIDx0aW1v
dGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgT25lIHRvbyBtYW55IHplcm9lcyBpbiBt
YWNPUyB2ZXJzaW9uIG51bWJlciBpbiBGZWF0dXJlRGVmaW5lcwpJbmRleDogU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCShyZXZpc2lvbiAy
MjUyNDgpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2Vz
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9EZXZpY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0ltYWdlU291cmNlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWRNZXNzYWdlLmg+CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327899</attachid>
            <date>2017-11-29 13:57:58 -0800</date>
            <delta_ts>2017-11-29 15:23:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175595-20171129135758.patch</filename>
            <type>text/plain</type>
            <size>59713</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDE3LTExLTI5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHRo
ZSBJbWFnZVNvdXJjZSBmcm9tIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBjb25uZWN0cyBCaXRt
YXBJbWFnZSB0byBJbWFnZUZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1OTUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
KworICAgICAgICBUaGUgY2xhc3MgaGllcmFyY2h5IHRoYXQgY29ubmVjdHMgQml0bWFwSW1hZ2Ug
dG8gSW1hZ2VGcmFtZSBoYXMgYmVlbgorICAgICAgICB0cm91Ymxlc29tZS4gSW1hZ2VTb3VyY2Ug
ZG9lcyBub3QgaGF2ZSBhIGNsZWFyIHJlc3BvbnNpYmlsaXR5IG90aGVyIHRoYW4KKyAgICAgICAg
YSBicmlkZ2UgdGhhdCBjb25uZWN0cyBCaXRtYXBJYW1nZSB0byBJbWFnZUZyYW1lQ2FjaGUuIFNo
YXJpbmcgdGhlIAorICAgICAgICBJbWFnZURlY29kZXIgYmV0d2VlbiBJbWFnZVNvdXJjZSBhbmQg
SW1hZ2VGcmFtZUNhY2hlIGlzIHVnbHkgYW5kIGNhdXNlZAorICAgICAgICBmZXcgY3Jhc2hlcyBp
biB0aGUgcGFzdC4KKworICAgICAgICBUaGlzIHBhdGNoIHdpbGwgZG8gdGhlIGZpcnN0IHN0ZXAg
Zm9yIGZpeGluZyB0aGlzIGlzc3VlLiBGaXJzdCBnZXQgcmlkIG9mCisgICAgICAgIEltYWdlU291
cmNlIGJ5IG1vdmluZyBpdHMgQVBJcyB0byBJbWFnZUZyYW1lQ2FjaGUgYW5kIEJpdG1hcEltYWdl
LiBSZXBsYWNlCisgICAgICAgIGFsbCB0aGUgaW5zdGFuY2VzIG9mIEltYWdlU291cmNlIGJ5IElt
YWdlRnJhbWVDYWNoZS4gVGhlIG5leHQgc3RlcCB3aWxsCisgICAgICAgIGJlIHRvIHJlbmFtZSBJ
bWFnZUZyYW1lQ2FjaGUgdG8gSW1hZ2VTb3VyY2UuIEJ1dCB0aGlzIHdpbGwgYmUgZG9uZSBpbiBh
CisgICAgICAgIGZvbGxvdy11cCBwYXRjaAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6fkJpdG1h
cEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXhDYWNoZUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYW5Vc2VBc3luY0RlY29kaW5nRm9yTGFyZ2VJbWFnZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNob3VsZFVzZUFzeW5jRGVj
b2RpbmdGb3JBbmltYXRlZEltYWdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpjYW5EZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmludGVybmFsU3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OnN0b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW1hZ2VGcmFtZUF2
YWlsYWJsZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmR1bXAgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUNhY2hlOjpJbWFnZUZyYW1lQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZUNhY2hlOjplbnN1cmVEZWNvZGVyQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2Fj
aGU6OnJlc2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmRhdGFD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6aXNBbGxEYXRhUmVj
ZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjYW5Vc2VBc3lu
Y0RlY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6bWF4aW11bVN1
YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpzZXRU
YXJnZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6Y3JlYXRl
RnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpk
dW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVDYWNoZTo6c2V0RGVjb2Rlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmRlY29kZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZUNhY2hlOjpyZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRl
eCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6
On5JbWFnZUV4dHJhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5oOgorCiAyMDE3LTExLTI4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR2V0IHJpZCBvZiBTZXJ2aWNlV29y
a2VyOjphbGxXb3JrZXJzKCkgaGFzaG1hcApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIy
NTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
NTI1LDcgKzE1MjUsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKLXBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW50
U2l6ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyNTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI3OCw3ICsz
Mjc4LDYgQEAKIAkJQjI3NTM1NkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0YwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTZFMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MDBCMDUz
ODE0MDAyQ0U2NEYgLyogSWNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDIwQjA1Mzgx
NDAwMkNFNjRGIC8qIEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJQjI3NTM1NzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MzBC
MDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU3MjBCMDUzODE0MDAyQ0U2NEYgLyogSW50
UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTQ0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc0MEIwNTM4MTQwMDJDRTY0RiAv
KiBJbnRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzU0NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc1MEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjc1MzU0NzBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01MzY2LDcgKzUzNjUsNiBAQAog
CQkwRjE3NzQ3RjEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvcklPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNkU3MzYxQkQxODM3QTAwMkRCODkxIC8q
IExheW91dFBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExh
eW91dFBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNkU3MzgxQkQx
ODRCOTAwMkRCODkxIC8qIExheW91dFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGF5b3V0U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGM0M3MjVEMTk3NDg3NEIwMEFFREQwQyAvKiBJbWFnZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd0JsdXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkxOTAgLyog
U2hhZG93Qmx1ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkb3dCbHVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0YwRTU3MTU3MDMwQzMwMDZEQTU3
RiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJHZW9tZXRyeU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTc0MCw3ICsxMTczOCw2IEBACiAJCUIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJ
Y29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY29uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0MjBCMDUzODE0MDAyQ0U2NEYgLyogSW1h
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTQzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNv
dXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VTb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDQwQjA1MzgxNDAwMkNFNjRGIC8q
IEludFBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0NTBCMDUzODE0MDAyQ0U2NEYg
LyogSW50UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50
UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ2MEIwNTM4MTQw
MDJDRTY0RiAvKiBJbnRSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bnRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjcxMiw4ICsyMjcwOSw2
IEBACiAJCQkJQTg3NDhENzQxMkNDM0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uY3Bw
ICovLAogCQkJCUE4NzQ4RDY2MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmgg
Ki8sCiAJCQkJNDkyOTFFNEExMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5o
ICovLAotCQkJCTBGM0M3MjVEMTk3NDg3NEIwMEFFREQwQyAvKiBJbWFnZVNvdXJjZS5jcHAgKi8s
Ci0JCQkJQjI3NTM1NDMwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmggKi8sCiAJCQkJ
NTU1MENCNDExRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCAqLywKIAkJCQkwNzk0MTc5
MzE2NkVBMDRFMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oICovLAogCQkJCTA3
Q0U3N0Q0MTY3MTJBNkEwMEM1NUE0NyAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50Lmgg
Ki8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuY3BwCShyZXZpc2lvbiAyMjUyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICszOSwyMSBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaWYgVVNFKENHKSAmJiBQTEFU
Rk9STShXSU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUlu
dGVyZmFjZS5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2
ZXIpCi0gICAgLCBtX3NvdXJjZSh0aGlzKQorICAgICwgbV9zb3VyY2UoSW1hZ2VGcmFtZUNhY2hl
OjpjcmVhdGUodGhpcykpCiB7CiB9CiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJ
bWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9i
c2VydmVyKQotICAgICwgbV9zb3VyY2UoV1RGTW92ZShpbWFnZSkpCisgICAgLCBtX3NvdXJjZShJ
bWFnZUZyYW1lQ2FjaGU6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSkpCiB7CiB9CiAKQEAgLTU4LDgg
KzYxLDggQEAgQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCiB7CiAgICAgaW52YWxpZGF0ZVBs
YXRmb3JtRGF0YSgpOwogICAgIGNsZWFyVGltZXIoKTsKLSAgICBtX3NvdXJjZS5jbGVhckltYWdl
KCk7Ci0gICAgbV9zb3VyY2Uuc3RvcEFzeW5jRGVjb2RpbmdRdWV1ZSgpOworICAgIG1fc291cmNl
LT5jbGVhckltYWdlKCk7CisgICAgbV9zb3VyY2UtPnN0b3BBc3luY0RlY29kaW5nUXVldWUoKTsK
IH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6dXBkYXRlRnJvbVNldHRpbmdzKGNvbnN0IFNldHRpbmdz
JiBzZXR0aW5ncykKQEAgLTc0LDIwICs3NywyMCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEoYm9vCiAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjolcyAtICVwIC0g
dXJsOiAlcyIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAKICAgICBpZiAoIWRlc3Ryb3lBbGwpCi0gICAgICAgIG1fc291cmNlLmRlc3Ry
b3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKG1fY3VycmVudEZyYW1lKTsKKyAgICAgICAgbV9zb3Vy
Y2UtPmRlc3Ryb3lEZWNvZGVkRGF0YUJlZm9yZUZyYW1lKG1fY3VycmVudEZyYW1lKTsKICAgICBl
bHNlIGlmICghY2FuRGVzdHJveURlY29kZWREYXRhKCkpCi0gICAgICAgIG1fc291cmNlLmRlc3Ry
b3lBbGxEZWNvZGVkRGF0YUV4Y2x1ZGVGcmFtZShtX2N1cnJlbnRGcmFtZSk7CisgICAgICAgIG1f
c291cmNlLT5kZXN0cm95QWxsRGVjb2RlZERhdGFFeGNsdWRlRnJhbWUobV9jdXJyZW50RnJhbWUp
OwogICAgIGVsc2UgewotICAgICAgICBtX3NvdXJjZS5kZXN0cm95QWxsRGVjb2RlZERhdGEoKTsK
KyAgICAgICAgbV9zb3VyY2UtPmRlc3Ryb3lBbGxEZWNvZGVkRGF0YSgpOwogICAgICAgICBtX2N1
cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID0gRGVjb2RpbmdTdGF0dXM6OkludmFsaWQ7CiAgICAg
fQogCiAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHRocm93IGF3YXkgdGhlIGRlY29kZXIgdW5s
ZXNzIHdlJ3JlIGV4cGxpY2l0bHkgYXNrZWQKICAgICAvLyB0byBkZXN0cm95IGFsbCBvZiB0aGUg
ZnJhbWVzLgotICAgIGlmICghZGVzdHJveUFsbCB8fCBtX3NvdXJjZS5oYXNBc3luY0RlY29kaW5n
UXVldWUoKSkKLSAgICAgICAgbV9zb3VyY2UuY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKG1fY3VycmVu
dEZyYW1lKTsKKyAgICBpZiAoIWRlc3Ryb3lBbGwgfHwgbV9zb3VyY2UtPmhhc0FzeW5jRGVjb2Rp
bmdRdWV1ZSgpKQorICAgICAgICBtX3NvdXJjZS0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKG1fY3Vy
cmVudEZyYW1lKTsKICAgICBlbHNlCi0gICAgICAgIG1fc291cmNlLnJlc2V0RGF0YShkYXRhKCkp
OworICAgICAgICBtX3NvdXJjZS0+cmVzZXREYXRhKGRhdGEoKSk7CiAKICAgICBpbnZhbGlkYXRl
UGxhdGZvcm1EYXRhKCk7CiB9CkBAIC05OSw3ICsxMDIsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpk
ZXN0cm95RGVjb2RlZERhdGFJZk5lCiAgICAgaWYgKCFkYXRhKCkgJiYgZnJhbWVDb3VudCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9zb3VyY2UuZGVjb2RlZFNpemUoKSA8IExhcmdl
QW5pbWF0aW9uQ3V0b2ZmKQorICAgIGlmIChtX3NvdXJjZS0+ZGVjb2RlZFNpemUoKSA8IExhcmdl
QW5pbWF0aW9uQ3V0b2ZmKQogICAgICAgICByZXR1cm47CiAKICAgICBkZXN0cm95RGVjb2RlZERh
dGEoZGVzdHJveUFsbCk7CkBAIC0xMDcsMTEgKzExMCwxMSBAQCB2b2lkIEJpdG1hcEltYWdlOjpk
ZXN0cm95RGVjb2RlZERhdGFJZk5lCiAKIEVuY29kZWREYXRhU3RhdHVzIEJpdG1hcEltYWdlOjpk
YXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKIHsKLSAgICBpZiAobV9zb3VyY2UuZGVj
b2RlZFNpemUoKSAmJiAhY2FuVXNlQXN5bmNEZWNvZGluZ0ZvckxhcmdlSW1hZ2VzKCkpCi0gICAg
ICAgIG1fc291cmNlLmRlc3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERhdGEoKTsKKyAgICBpZiAobV9z
b3VyY2UtPmRlY29kZWRTaXplKCkgJiYgIWNhblVzZUFzeW5jRGVjb2RpbmdGb3JMYXJnZUltYWdl
cygpKQorICAgICAgICBtX3NvdXJjZS0+ZGVzdHJveUluY29tcGxldGVEZWNvZGVkRGF0YSgpOwog
CiAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3RhdHVzOjpJbnZh
bGlkOwotICAgIHJldHVybiBtX3NvdXJjZS5kYXRhQ2hhbmdlZChkYXRhKCksIGFsbERhdGFSZWNl
aXZlZCk7CisgICAgcmV0dXJuIG1fc291cmNlLT5kYXRhQ2hhbmdlZChkYXRhKCksIGFsbERhdGFS
ZWNlaXZlZCk7CiB9CiAgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpzZXRDdXJyZW50RnJhbWVEZWNv
ZGluZ1N0YXR1c0lmTmVjZXNzYXJ5KERlY29kaW5nU3RhdHVzIGRlY29kaW5nU3RhdHVzKQpAQCAt
MTMwLDggKzEzMywxMiBAQCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0
CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3N1
YnNhbXBsaW5nTGV2ZWwgd2FzICVkLCByZXNhbXBsaW5nXSIsIF9fRlVOQ1RJT05fXywgdGhpcywg
c291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihmcmFt
ZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KSkpOwogICAgICAgICBpbnZhbGlkYXRlUGxh
dGZvcm1EYXRhKCk7CiAgICAgfQotCi0gICAgcmV0dXJuIG1fc291cmNlLmZyYW1lSW1hZ2VBdElu
ZGV4Q2FjaGVJZk5lZWRlZChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgdGFyZ2V0Q29udGV4dCk7
CisjaWYgVVNFKERJUkVDVDJEKQorICAgIG1fc291cmNlLT5zZXRUYXJnZXRDb250ZXh0KHRhcmdl
dENvbnRleHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CisjZW5k
aWYKKyAgICByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSW1hZ2VBdEluZGV4Q2FjaGVJZk5lZWRlZChp
bmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CiB9CiAKIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdl
OjpuYXRpdmVJbWFnZShjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQpCkBAIC0x
ODksNyArMTk2LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaQog
ICAgIEludFNpemUgc2l6ZUZvckRyYXdpbmcgPSBleHBhbmRlZEludFNpemUoc2l6ZSgpICogc2Nh
bGVGYWN0b3JGb3JEcmF3aW5nKTsKICAgICBJbWFnZURyYXdSZXN1bHQgcmVzdWx0ID0gSW1hZ2VE
cmF3UmVzdWx0OjpEaWREcmF3OwogCi0gICAgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCA9IG1f
YWxsb3dTdWJzYW1wbGluZyA/IG1fc291cmNlLnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3Rv
cihjb250ZXh0LCBzY2FsZUZhY3RvckZvckRyYXdpbmcpIDogU3Vic2FtcGxpbmdMZXZlbDo6RGVm
YXVsdDsKKyAgICBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsID0gbV9hbGxvd1N1YnNhbXBsaW5n
ID8gc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKGNvbnRleHQsIHNjYWxlRmFjdG9yRm9y
RHJhd2luZykgOiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OwogICAgIExPRyhJbWFnZXMsICJC
aXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3N1YnNhbXBsaW5nTGV2ZWwgPSAlZCBzY2Fs
ZUZhY3RvckZvckRyYXdpbmcgPSAoJS40ZiwgJS40ZildIiwgX19GVU5DVElPTl9fLCB0aGlzLCBz
b3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KG1fY3Vy
cmVudFN1YnNhbXBsaW5nTGV2ZWwpLCBzY2FsZUZhY3RvckZvckRyYXdpbmcud2lkdGgoKSwgc2Nh
bGVGYWN0b3JGb3JEcmF3aW5nLmhlaWdodCgpKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGltYWdl
OwpAQCAtMjA0LDcgKzIxMSw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGkKICAgICAgICAgLy8gaXQgaXMgY3VycmVudGx5IGJlaW5nIGRlY29kZWQuIE5ldyBkYXRh
IG1heSBoYXZlIGJlZW4gcmVjZWl2ZWQgc2luY2UgdGhlIHByZXZpb3VzIHJlcXVlc3Qgd2FzIG1h
ZGUuCiAgICAgICAgIGlmICgoIWZyYW1lSXNDb21wYXRpYmxlICYmICFmcmFtZUlzQmVpbmdEZWNv
ZGVkKSB8fCBtX2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpJ
bnZhbGlkKSB7CiAgICAgICAgICAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAg
LSB1cmw6ICVzIFtyZXF1ZXN0aW5nIGxhcmdlIGFzeW5jIGRlY29kaW5nXSIsIF9fRlVOQ1RJT05f
XywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBtX3NvdXJjZS5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgc2l6ZUZvckRyYXdpbmcpOworICAgICAgICAg
ICAgbV9zb3VyY2UtPnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBzaXplRm9yRHJhd2luZyk7CiAgICAgICAg
ICAgICBtX2N1cnJlbnRGcmFtZURlY29kaW5nU3RhdHVzID0gRGVjb2RpbmdTdGF0dXM6OkRlY29k
aW5nOwogICAgICAgICB9CiAKQEAgLTIzMSw3ICsyMzgsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0
bWFwSW1hZ2U6OmRyYXcoR3JhcGhpCiAgICAgICAgIC8vIElmIHRoZSBkZWNvZGluZ01vZGUgY2hh
bmdlcyBmcm9tIGFzeW5jaHJvbm91cyB0byBzeW5jaHJvbm91cyBhbmQgbmV3IGRhdGEgaXMgcmVj
ZWl2ZWQsCiAgICAgICAgIC8vIHRoZSBjdXJyZW50IGluY29tcGxldGUgZGVjb2RlZCBmcmFtZSBo
YXMgdG8gYmUgZGVzdHJveWVkLgogICAgICAgICBpZiAobV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0
YXR1cyA9PSBEZWNvZGluZ1N0YXR1czo6SW52YWxpZCkKLSAgICAgICAgICAgIG1fc291cmNlLmRl
c3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERhdGEoKTsKKyAgICAgICAgICAgIG1fc291cmNlLT5kZXN0
cm95SW5jb21wbGV0ZURlY29kZWREYXRhKCk7CiAgICAgICAgIAogICAgICAgICBib29sIGZyYW1l
SXNDb21wYXRpYmxlID0gZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9w
dGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBE
ZWNvZGluZ09wdGlvbnMoc2l6ZUZvckRyYXdpbmcpKTsKICAgICAgICAgYm9vbCBmcmFtZUlzQmVp
bmdEZWNvZGVkID0gZnJhbWVJc0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25z
QXRJbmRleChtX2N1cnJlbnRGcmFtZSwgRGVjb2RpbmdNb2RlOjpBc3luY2hyb25vdXMpOwpAQCAt
MzI0LDEyICszMzEsMTIgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0ZSgpIGNvbnN0CiAK
IGJvb2wgQml0bWFwSW1hZ2U6OmNhblVzZUFzeW5jRGVjb2RpbmdGb3JMYXJnZUltYWdlcygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICFjYW5BbmltYXRlKCkgJiYgbV9zb3VyY2UuY2FuVXNlQXN5bmNE
ZWNvZGluZygpOworICAgIHJldHVybiAhY2FuQW5pbWF0ZSgpICYmIG1fc291cmNlLT5jYW5Vc2VB
c3luY0RlY29kaW5nKCk7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OnNob3VsZFVzZUFzeW5jRGVj
b2RpbmdGb3JBbmltYXRlZEltYWdlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNhbkFuaW1hdGUo
KSAmJiBtX2FsbG93QW5pbWF0ZWRJbWFnZUFzeW5jRGVjb2RpbmcgJiYgKHNob3VsZFVzZUFzeW5j
RGVjb2RpbmdGb3JBbmltYXRlZEltYWdlc0ZvclRlc3RpbmcoKSB8fCBtX3NvdXJjZS5jYW5Vc2VB
c3luY0RlY29kaW5nKCkpOworICAgIHJldHVybiBjYW5BbmltYXRlKCkgJiYgbV9hbGxvd0FuaW1h
dGVkSW1hZ2VBc3luY0RlY29kaW5nICYmIChzaG91bGRVc2VBc3luY0RlY29kaW5nRm9yQW5pbWF0
ZWRJbWFnZXNGb3JUZXN0aW5nKCkgfHwgbV9zb3VyY2UtPmNhblVzZUFzeW5jRGVjb2RpbmcoKSk7
CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmNsZWFyVGltZXIoKQpAQCAtMzQ0LDEwICszNTEsMzAg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRUaW1lcihTZWNvbmRzIGRlbAogICAgIG1fZnJhbWVU
aW1lci0+c3RhcnRPbmVTaG90KGRlbGF5KTsKIH0KIAorU3Vic2FtcGxpbmdMZXZlbCBCaXRtYXBJ
bWFnZTo6c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlRmFjdG9yKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3RvcikKK3sKKyNpZiBVU0UoQ0cpCisgICAg
Ly8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRl
eHRzLgorICAgIGlmIChDR0NvbnRleHRHZXRUeXBlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkp
ID09IGtDR0NvbnRleHRUeXBlUERGKQorICAgICAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZlbDo6
RGVmYXVsdDsKKworICAgIGZsb2F0IHNjYWxlID0gc3RkOjptaW4oZmxvYXQoMSksIHN0ZDo6bWF4
KHNjYWxlRmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9yLmhlaWdodCgpKSk7CisgICAgaWYgKCEo
c2NhbGUgPiAwICYmIHNjYWxlIDw9IDEpKQorICAgICAgICByZXR1cm4gU3Vic2FtcGxpbmdMZXZl
bDo6RGVmYXVsdDsKKworICAgIGludCByZXN1bHQgPSBzdGQ6OmNlaWwoc3RkOjpsb2cyKDEgLyBz
Y2FsZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdWJzYW1wbGluZ0xldmVsPihzdGQ6Om1p
bihyZXN1bHQsIHN0YXRpY19jYXN0PGludD4obV9zb3VyY2UtPm1heGltdW1TdWJzYW1wbGluZ0xl
dmVsKCkpKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICBVTlVTRURf
UEFSQU0oc2NhbGVGYWN0b3IpOworICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0
OworI2VuZGlmCit9CisKIGJvb2wgQml0bWFwSW1hZ2U6OmNhbkRlc3Ryb3lEZWNvZGVkRGF0YSgp
CiB7CiAgICAgLy8gQW5pbWF0ZWQgaW1hZ2VzIHNob3VsZCBwcmVzZXJ2ZSB0aGUgY3VycmVudCBm
cmFtZSB0aWxsIHRoZSBuZXh0IG9uZSBmaW5pc2hlcyBkZWNvZGluZy4KLSAgICBpZiAobV9zb3Vy
Y2UuaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkpCisgICAgaWYgKG1fc291cmNlLT5oYXNBc3luY0Rl
Y29kaW5nUXVldWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gU21hbGwgaW1h
Z2Ugc2hvdWxkIGJlIGRlY29kZWQgc3luY2hyb25vdXNseS4gRGVsZXRpbmcgaXRzIGRlY29kZWQg
ZnJhbWUgaXMgZmluZS4KQEAgLTM3Nyw3ICs0MDQsNyBAQCBCaXRtYXBJbWFnZTo6U3RhcnRBbmlt
YXRpb25TdGF0dXMgQml0bWFwCiAgICAgICAgIC8vIHlldCBhbmQgb3VyIHJlcGV0aXRpb24gY291
bnQgaXMgcG90ZW50aWFsbHkgdW5zZXQuIFRoZSByZXBldGl0aW9uIGNvdW50CiAgICAgICAgIC8v
IGluIGEgR0lGIGNhbiBwb3RlbnRpYWxseSBjb21lIGFmdGVyIGFsbCB0aGUgcmVzdCBvZiB0aGUg
aW1hZ2UgZGF0YSwgc28KICAgICAgICAgLy8gd2FpdCBvbiBpdC4KLSAgICAgICAgaWYgKCFtX3Nv
dXJjZS5pc0FsbERhdGFSZWNlaXZlZCgpICYmIHJlcGV0aXRpb25Db3VudCgpID09IFJlcGV0aXRp
b25Db3VudE9uY2UpCisgICAgICAgIGlmICghbV9zb3VyY2UtPmlzQWxsRGF0YVJlY2VpdmVkKCkg
JiYgcmVwZXRpdGlvbkNvdW50KCkgPT0gUmVwZXRpdGlvbkNvdW50T25jZSkKICAgICAgICAgICAg
IHJldHVybiBTdGFydEFuaW1hdGlvblN0YXR1czo6SW5jb21wbGV0ZURhdGE7CiAKICAgICAgICAg
KyttX3JlcGV0aXRpb25zQ29tcGxldGU7CkBAIC0zOTMsNyArNDIwLDcgQEAgQml0bWFwSW1hZ2U6
OlN0YXJ0QW5pbWF0aW9uU3RhdHVzIEJpdG1hcAogICAgIH0KIAogICAgIC8vIERvbid0IGFkdmFu
Y2UgdGhlIGFuaW1hdGlvbiB0byBhbiBpbmNvbXBsZXRlIGZyYW1lLgotICAgIGlmICghbV9zb3Vy
Y2UuaXNBbGxEYXRhUmVjZWl2ZWQoKSAmJiAhZnJhbWVJc0NvbXBsZXRlQXRJbmRleChuZXh0RnJh
bWUpKQorICAgIGlmICghbV9zb3VyY2UtPmlzQWxsRGF0YVJlY2VpdmVkKCkgJiYgIWZyYW1lSXND
b21wbGV0ZUF0SW5kZXgobmV4dEZyYW1lKSkKICAgICAgICAgcmV0dXJuIFN0YXJ0QW5pbWF0aW9u
U3RhdHVzOjpJbmNvbXBsZXRlRGF0YTsKIAogICAgIE1vbm90b25pY1RpbWUgdGltZSA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwpAQCAtNDEzLDE0ICs0NDAsMTQgQEAgQml0bWFwSW1hZ2U6OlN0YXJ0
QW5pbWF0aW9uU3RhdHVzIEJpdG1hcAogICAgICAgICBpZiAoZnJhbWVIYXNEZWNvZGVkTmF0aXZl
SW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KG5leHRGcmFtZSwgbV9jdXJyZW50U3Vi
c2FtcGxpbmdMZXZlbCwgeyB9KSkKICAgICAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFn
ZTo6JXMgLSAlcCAtIHVybDogJXMgW2NhY2hlZEZyYW1lQ291bnQgPSAlbGQgbmV4dEZyYW1lID0g
JWxkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgKyttX2NhY2hlZEZyYW1lQ291bnQsIG5leHRGcmFtZSk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbV9zb3VyY2UucmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgobmV4
dEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsKTsKKyAgICAgICAgICAgIG1fc291cmNl
LT5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChuZXh0RnJhbWUsIG1fY3VycmVudFN1
YnNhbXBsaW5nTGV2ZWwpOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1
cyA9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZzsKICAgICAgICAgICAgIExPRyhJbWFnZXMsICJC
aXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3JlcXVlc3RpbmcgYXN5bmMgZGVjb2Rpbmcg
Zm9yIG5leHRGcmFtZSA9ICVsZF0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG5leHRGcmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBt
X2Rlc2lyZWRGcmFtZURlY29kZVRpbWVGb3JUZXN0aW5nID0gdGltZSArIHN0ZDo6bWF4KG1fZnJh
bWVEZWNvZGluZ0R1cmF0aW9uRm9yVGVzdGluZywgMF9zKTsKICAgICAgICAgaWYgKG1fY2xlYXJE
ZWNvZGVyQWZ0ZXJBc3luY0ZyYW1lUmVxdWVzdEZvclRlc3RpbmcpCi0gICAgICAgICAgICBtX3Nv
dXJjZS5yZXNldERhdGEoZGF0YSgpKTsKKyAgICAgICAgICAgIG1fc291cmNlLT5yZXNldERhdGEo
ZGF0YSgpKTsKICAgICB9CiAKICAgICBBU1NFUlQoIW1fZnJhbWVUaW1lcik7CkBAIC00ODQsNyAr
NTExLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbigpCiAgICAgLy8gdGhlIHRp
bWVyIHVubGVzcyBhbGwgcmVuZGVyZXJzIGhhdmUgc3RvcHBlZCBkcmF3aW5nLgogICAgIGNsZWFy
VGltZXIoKTsKICAgICBpZiAoY2FuQW5pbWF0ZSgpKQotICAgICAgICBtX3NvdXJjZS5zdG9wQXN5
bmNEZWNvZGluZ1F1ZXVlKCk7CisgICAgICAgIG1fc291cmNlLT5zdG9wQXN5bmNEZWNvZGluZ1F1
ZXVlKCk7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OnJlc2V0QW5pbWF0aW9uKCkKQEAgLTUxOSw3
ICs1NDYsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZWNvZGUoV1RGOjpGdW5jdGlvbjx2CiAgICAg
ICAgIGlmIChmcmFtZUlzQ29tcGF0aWJsZSkKICAgICAgICAgICAgIGludGVybmFsU3RhcnRBbmlt
YXRpb24oKTsKICAgICAgICAgZWxzZSBpZiAoIWZyYW1lSXNCZWluZ0RlY29kZWQpIHsKLSAgICAg
ICAgICAgIG1fc291cmNlLnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KG1fY3VycmVu
dEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBzdGQ6Om9wdGlvbmFsPEludFNpemU+
KCkpOworICAgICAgICAgICAgbV9zb3VyY2UtPnJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdElu
ZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBzdGQ6Om9wdGlv
bmFsPEludFNpemU+KCkpOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1
cyA9IERlY29kaW5nU3RhdHVzOjpEZWNvZGluZzsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CkBAIC01MzEsNyArNTU4LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVjb2RlKFdURjo6RnVuY3Rp
b248dgogICAgIGlmIChmcmFtZUlzQ29tcGF0aWJsZSkKICAgICAgICAgY2FsbERlY29kaW5nQ2Fs
bGJhY2tzKCk7CiAgICAgZWxzZSBpZiAoIWZyYW1lSXNCZWluZ0RlY29kZWQpIHsKLSAgICAgICAg
bV9zb3VyY2UucmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgobV9jdXJyZW50RnJhbWUs
IG1fY3VycmVudFN1YnNhbXBsaW5nTGV2ZWwsIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4oKSk7Cisg
ICAgICAgIG1fc291cmNlLT5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChtX2N1cnJl
bnRGcmFtZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCwgc3RkOjpvcHRpb25hbDxJbnRTaXpl
PigpKTsKICAgICAgICAgbV9jdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1cyA9IERlY29kaW5nU3Rh
dHVzOjpEZWNvZGluZzsKICAgICB9CiB9CkBAIC01NjcsOCArNTk0LDggQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6aW1hZ2VGcmFtZUF2YWlsYWJsZUF0SQogICAgIH0KIAogICAgIEFTU0VSVChpbmRleCA9
PSBtX2N1cnJlbnRGcmFtZSAmJiAhbV9jdXJyZW50RnJhbWUpOwotICAgIGlmIChtX3NvdXJjZS5p
c0FzeW5jRGVjb2RpbmdRdWV1ZUlkbGUoKSkKLSAgICAgICAgbV9zb3VyY2Uuc3RvcEFzeW5jRGVj
b2RpbmdRdWV1ZSgpOworICAgIGlmIChtX3NvdXJjZS0+aXNBc3luY0RlY29kaW5nUXVldWVJZGxl
KCkpCisgICAgICAgIG1fc291cmNlLT5zdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCk7CiAKICAgICBE
ZWNvZGluZ1N0YXR1cyBkZWNvZGluZ1N0YXR1cyA9IGZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4
KG1fY3VycmVudEZyYW1lKTsKICAgICBzZXRDdXJyZW50RnJhbWVEZWNvZGluZ1N0YXR1c0lmTmVj
ZXNzYXJ5KGRlY29kaW5nU3RhdHVzKTsKQEAgLTU5Niw3ICs2MjMsNyBAQCB2b2lkIEJpdG1hcElt
YWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjCiAgICAgaWYgKGlzQW5pbWF0ZWQoKSkKICAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJjdXJyZW50LWZyYW1lIiwgbV9jdXJyZW50RnJhbWUpOwogICAg
IAotICAgIG1fc291cmNlLmR1bXAodHMpOworICAgIG1fc291cmNlLT5kdW1wKHRzKTsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oCShyZXZpc2lvbiAyMjUyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiAKICNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUNh
Y2hlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50
YXRpb24uaCIKLSNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
IAogI2lmIFVTRShDRykgfHwgVVNFKEFQUEtJVCkKQEAgLTcxLDMxICs3MSwzMSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KIAogICAgIEVuY29kZWREYXRhU3RhdHVzIGRhdGFDaGFuZ2VkKGJvb2wgYWxs
RGF0YVJlY2VpdmVkKSBvdmVycmlkZTsKLSAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlLmRlY29kZWRTaXplKCk7IH0KKyAgICB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5kZWNvZGVkU2l6ZSgpOyB9CiAKLSAgICBF
bmNvZGVkRGF0YVN0YXR1cyBlbmNvZGVkRGF0YVN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlLmVuY29kZWREYXRhU3RhdHVzKCk7IH0KLSAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlLmZyYW1lQ291bnQoKTsgfQotICAgIFJlcGV0aXRpb25Db3VudCBy
ZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5yZXBldGl0aW9uQ291bnQo
KTsgfQotICAgIFN0cmluZyB1dGkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS51
dGkoKTsgfQotICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fc291cmNlLmZpbGVuYW1lRXh0ZW5zaW9uKCk7IH0KLSAgICBzdGQ6Om9wdGlvbmFs
PEludFBvaW50PiBob3RTcG90KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UuaG90
U3BvdCgpOyB9CisgICAgRW5jb2RlZERhdGFTdGF0dXMgZW5jb2RlZERhdGFTdGF0dXMoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZS0+ZW5jb2RlZERhdGFTdGF0dXMoKTsgfQorICAgIHNpemVfdCBm
cmFtZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lQ291bnQoKTsgfQorICAg
IFJlcGV0aXRpb25Db3VudCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZS0+cmVwZXRpdGlvbkNvdW50KCk7IH0KKyAgICBTdHJpbmcgdXRpKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9zb3VyY2UtPnV0aSgpOyB9CisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9u
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPmZpbGVuYW1lRXh0ZW5zaW9uKCk7
IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9zb3VyY2UtPmhvdFNwb3QoKTsgfQogCiAgICAgLy8gRmxvYXRTaXplIGR1ZSB0
byBvdmVycmlkZS4KLSAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fc291cmNlLnNpemUoKTsgfQotICAgIEludFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsg
fQotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fc291cmNlLnNpbmdsZVBpeGVsU29saWRDb2xvcigpOyB9Ci0gICAgYm9vbCBmcmFtZUlz
QmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCBpbmRl
eCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlLmZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0
SW5kZXgoaW5kZXgsIGRlY29kaW5nT3B0aW9ucyk7IH0KLSAgICBEZWNvZGluZ1N0YXR1cyBmcmFt
ZURlY29kaW5nU3RhdHVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlLmZyYW1lRGVjb2RpbmdTdGF0dXNBdEluZGV4KGluZGV4KTsgfQorICAgIEZsb2F0U2l6ZSBz
aXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zb3VyY2UtPnNpemUoKTsgfQorICAgIElu
dFNpemUgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
LT5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKCk7IH0KKyAgICBDb2xvciBzaW5nbGVQaXhlbFNv
bGlkQ29sb3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NvdXJjZS0+c2luZ2xlUGl4ZWxT
b2xpZENvbG9yKCk7IH0KKyAgICBib29sIGZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGli
bGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBEZWNvZGluZ09wdGlvbnMm
IGRlY29kaW5nT3B0aW9ucykgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lSXNCZWluZ0Rl
Y29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoaW5kZXgsIGRlY29kaW5nT3B0
aW9ucyk7IH0KKyAgICBEZWNvZGluZ1N0YXR1cyBmcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZURlY29kaW5nU3RhdHVz
QXRJbmRleChpbmRleCk7IH0KICAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBmcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChpbmRleCkg
PT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9Ci0gICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmZyYW1lSGFzQWxwaGFB
dEluZGV4KGluZGV4KTsgfQorICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgp
OyB9CiAKLSAgICBib29sIGZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoc2l6ZV90
IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIHsgcmV0dXJuIG1fc291
cmNlLmZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5n
TGV2ZWwpOyB9Ci0gICAgYm9vbCBmcmFtZUhhc0RlY29kZWROYXRpdmVJbWFnZUNvbXBhdGlibGVX
aXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNh
bXBsaW5nTGV2ZWw+JiBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmIGRl
Y29kaW5nT3B0aW9ucykgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1h
Z2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBk
ZWNvZGluZ09wdGlvbnMpOyB9CisgICAgYm9vbCBmcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1hZ2VB
dEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSB7
IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCk7IH0KKyAgICBib29sIGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUlt
YWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IERlY29k
aW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVIYXNE
ZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KGluZGV4LCBzdWJz
YW1wbGluZ0xldmVsLCBkZWNvZGluZ09wdGlvbnMpOyB9CiAKLSAgICBTdWJzYW1wbGluZ0xldmVs
IGZyYW1lU3Vic2FtcGxpbmdMZXZlbEF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3NvdXJjZS5mcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KTsgfQorICAgIFN1
YnNhbXBsaW5nTGV2ZWwgZnJhbWVTdWJzYW1wbGluZ0xldmVsQXRJbmRleChzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGlu
ZGV4KTsgfQogCi0gICAgU2Vjb25kcyBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsgfQot
ICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5mcmFtZU9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7
IH0KKyAgICBTZWNvbmRzIGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2UtPmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsgfQorICAgIElt
YWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOyB9CiAK
ICAgICBzaXplX3QgY3VycmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50RnJhbWU7
IH0KICAgICBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuICFmcmFtZUhhc0FscGhhQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KQEAgLTE0
Miw3ICsxNDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9FWFBPUlQgQml0bWFwSW1hZ2Uo
TmF0aXZlSW1hZ2VQdHImJiwgSW1hZ2VPYnNlcnZlciogPSBudWxscHRyKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiA9IG51bGxwdHIpOwogCi0gICAgTmF0
aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3Nv
dXJjZS5mcmFtZUltYWdlQXRJbmRleChpbmRleCk7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBmcmFt
ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fc291cmNlLT5mcmFtZUltYWdl
QXRJbmRleChpbmRleCk7IH0KICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleENh
Y2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6
RGVmYXVsdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IG51bGxwdHIpOwogCiAgICAgLy8gQ2Fs
bGVkIHRvIGludmFsaWRhdGUgY2FjaGVkIGRhdGEuIFdoZW4gfGRlc3Ryb3lBbGx8IGlzIHRydWUs
IHdlIHdpcGUgb3V0CkBAIC0xNjUsNyArMTY1LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gQW5p
bWF0aW9uLgogICAgIGVudW0gY2xhc3MgU3RhcnRBbmltYXRpb25TdGF0dXMgeyBDYW5ub3RTdGFy
dCwgSW5jb21wbGV0ZURhdGEsIFRpbWVyQWN0aXZlLCBEZWNvZGluZ0FjdGl2ZSwgU3RhcnRlZCB9
OwotICAgIGJvb2wgaXNBbmltYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc291cmNl
LmZyYW1lQ291bnQoKSA+IDE7IH0KKyAgICBib29sIGlzQW5pbWF0ZWQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3NvdXJjZS0+ZnJhbWVDb3VudCgpID4gMTsgfQogICAgIGJvb2wgc2hvdWxk
QW5pbWF0ZSgpIGNvbnN0OwogICAgIHZvaWQgc3RhcnRBbmltYXRpb24oKSBvdmVycmlkZSB7IGlu
dGVybmFsU3RhcnRBbmltYXRpb24oKTsgfQogICAgIFN0YXJ0QW5pbWF0aW9uU3RhdHVzIGludGVy
bmFsU3RhcnRBbmltYXRpb24oKTsKQEAgLTE5Myw2ICsxOTMsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2
YXRlOgogICAgIHZvaWQgY2xlYXJUaW1lcigpOwogICAgIHZvaWQgc3RhcnRUaW1lcihTZWNvbmRz
IGRlbGF5KTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZh
Y3RvcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlRmFjdG9yKTsKICAg
ICBib29sIGNhbkRlc3Ryb3lEZWNvZGVkRGF0YSgpOwogICAgIHZvaWQgc2V0Q3VycmVudEZyYW1l
RGVjb2RpbmdTdGF0dXNJZk5lY2Vzc2FyeShEZWNvZGluZ1N0YXR1cyk7CiAgICAgYm9vbCBpc0Jp
dG1hcEltYWdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMjA0LDcgKzIw
NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gQW5pbWF0ZWQgaW1hZ2VzIG92ZXIgYSBjZXJ0YWluIHNp
emUgYXJlIGNvbnNpZGVyZWQgbGFyZ2UgZW5vdWdoIHRoYXQgd2UnbGwgb25seSBoYW5nIG9uIHRv
IG9uZSBmcmFtZSBhdCBhIHRpbWUuCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIExhcmdlQW5p
bWF0aW9uQ3V0b2ZmID0gMzAgKiAxMDI0ICogMTAyNDsKIAotICAgIG11dGFibGUgSW1hZ2VTb3Vy
Y2UgbV9zb3VyY2U7CisgICAgbXV0YWJsZSBSZWY8SW1hZ2VGcmFtZUNhY2hlPiBtX3NvdXJjZTsK
IAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAgfTsgLy8gVGhlIGluZGV4IG9mIHRoZSBj
dXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KICAgICBTdWJzYW1wbGluZ0xldmVsIG1fY3VycmVu
dFN1YnNhbXBsaW5nTGV2ZWwgeyBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0IH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgJKHJldmlzaW9uIDIyNTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDYgQEAg
Y2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMOwogY2xhc3MgSG9zdFdpbmRvdzsKIGNsYXNzIEltYWdl
OwogY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBJbWFnZVNvdXJjZTsKIGNsYXNzIEltYWdlRGF0
YTsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRTaXplOwpAQCAtMTI2Miw3ICsxMjYxLDYgQEAg
cHVibGljOgogICAgICAgICBib29sIGV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOwogCiAjaWYgVVNFKENBSVJPKQotICAg
ICAgICBJbWFnZVNvdXJjZSogbV9kZWNvZGVyOwogICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBtX2ltYWdlU3VyZmFjZTsKICNlbGlmIFVTRShDRykKICAgICAgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IG1fY2dJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkocmV2aXNpb24gMjI1MjQ4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsOCArNDcsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1J
bWFnZUZyYW1lQ2FjaGU6OkltYWdlRnJhbWVDYWNoZShJbWFnZSogaW1hZ2UpCitJbWFnZUZyYW1l
Q2FjaGU6OkltYWdlRnJhbWVDYWNoZShJbWFnZSogaW1hZ2UsIEFscGhhT3B0aW9uIGFscGhhT3B0
aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bikKICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9u
KQorICAgICwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbikKIHsKIH0KIApAQCAtNzMsMjEgKzc1LDUyIEBAIEltYWdlRnJhbWVDYWNoZTo6fklt
YWdlRnJhbWVDYWNoZSgpCiAgICAgQVNTRVJUKCFoYXNBc3luY0RlY29kaW5nUXVldWUoKSk7CiB9
CiAKLXZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpzZXREZWNvZGVyKEltYWdlRGVjb2RlciogZGVjb2Rl
cikKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hlOjplbnN1cmVEZWNvZGVyQXZhaWxhYmxlKFNoYXJlZEJ1
ZmZlciogZGF0YSkKIHsKLSAgICBpZiAobV9kZWNvZGVyID09IGRlY29kZXIpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIWRhdGEgfHwgaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgbV9kZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEs
IG1pbWVUeXBlKCksIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
OworICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBpZiAoYXV0byBleHBlY3RlZENvbnRlbnRTaXplID0gZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKCkpCisgICAgICAgIG1fZGVjb2Rlci0+c2V0RXhwZWN0ZWRDb250ZW50U2l6ZShleHBl
Y3RlZENvbnRlbnRTaXplKTsKIAogICAgIC8vIENoYW5naW5nIHRoZSBkZWNvZGVyIGhhcyB0byBz
dG9wIHRoZSBkZWNvZGluZyB0aHJlYWQuIFRoZSBjdXJyZW50IGZyYW1lIHdpbGwKICAgICAvLyBj
b250aW51ZSBkZWNvZGluZyBzYWZlbHkgYmVjYXVzZSB0aGUgZGVjb2RpbmcgdGhyZWFkIGhhcyBp
dHMgb3duCiAgICAgLy8gcmVmZXJlbmNlIG9mIHRoZSBvbGQgZGVjb2Rlci4KICAgICBzdG9wQXN5
bmNEZWNvZGluZ1F1ZXVlKCk7Ci0gICAgbV9kZWNvZGVyID0gZGVjb2RlcjsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBJbWFnZUZyYW1lQ2FjaGU6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBpZiAoIWRhdGEgfHwgIWVuc3VyZURl
Y29kZXJBdmFpbGFibGUoZGF0YSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVjb2Rlci0+
c2V0RGF0YSgqZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKwordm9pZCBJbWFnZUZyYW1lQ2Fj
aGU6OnJlc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgbV9kZWNvZGVyID0gbnVs
bHB0cjsKKyAgICBzZXREYXRhKGRhdGEsIGlzQWxsRGF0YVJlY2VpdmVkKCkpOworfQorCitFbmNv
ZGVkRGF0YVN0YXR1cyBJbWFnZUZyYW1lQ2FjaGU6OmRhdGFDaGFuZ2VkKFNoYXJlZEJ1ZmZlciog
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRh
UmVjZWl2ZWQpOworICAgIGNsZWFyTWV0YWRhdGEoKTsKKyAgICBFbmNvZGVkRGF0YVN0YXR1cyBz
dGF0dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygpOworICAgIGlmIChzdGF0dXMgPj0gRW5jb2RlZERh
dGFTdGF0dXM6OlNpemVBdmFpbGFibGUpCisgICAgICAgIGdyb3dGcmFtZXMoKTsKKyAgICByZXR1
cm4gc3RhdHVzOwogfQogCi1JbWFnZURlY29kZXIqIEltYWdlRnJhbWVDYWNoZTo6ZGVjb2Rlcigp
IGNvbnN0Citib29sIEltYWdlRnJhbWVDYWNoZTo6aXNBbGxEYXRhUmVjZWl2ZWQoKQogewotICAg
IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7CisgICAgcmV0dXJuIGlzRGVjb2RlckF2YWlsYWJsZSgp
ID8gbV9kZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpIDogZnJhbWVDb3VudCgpOwogfQogCiB2
b2lkIEltYWdlRnJhbWVDYWNoZTo6ZGVzdHJveURlY29kZWREYXRhKHNpemVfdCBmcmFtZUNvdW50
LCBzaXplX3QgZXhjbHVkZUZyYW1lKQpAQCAtMTE5LDYgKzE1MiwxMyBAQCB2b2lkIEltYWdlRnJh
bWVDYWNoZTo6ZGVzdHJveUluY29tcGxldGVECiAgICAgZGVjb2RlZFNpemVEZWNyZWFzZWQoZGVj
b2RlZFNpemUpOwogfQogCit2b2lkIEltYWdlRnJhbWVDYWNoZTo6Y2xlYXJGcmFtZUJ1ZmZlckNh
Y2hlKHNpemVfdCBiZWZvcmVGcmFtZSkKK3sKKyAgICBpZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgp
KQorICAgICAgICByZXR1cm47CisgICAgbV9kZWNvZGVyLT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUo
YmVmb3JlRnJhbWUpOworfQorCiB2b2lkIEltYWdlRnJhbWVDYWNoZTo6ZGVjb2RlZFNpemVDaGFu
Z2VkKGxvbmcgbG9uZyBkZWNvZGVkU2l6ZSkKIHsKICAgICBpZiAoIWRlY29kZWRTaXplIHx8ICFt
X2ltYWdlIHx8ICFtX2ltYWdlLT5pbWFnZU9ic2VydmVyKCkpCkBAIC0yNzgsNiArMzE4LDE0IEBA
IEltYWdlRnJhbWVDYWNoZTo6RnJhbWVSZXF1ZXN0UXVldWUmIEltYWcKICAgICByZXR1cm4gKm1f
ZnJhbWVSZXF1ZXN0UXVldWU7CiB9CiAKK2Jvb2wgSW1hZ2VGcmFtZUNhY2hlOjpjYW5Vc2VBc3lu
Y0RlY29kaW5nKCkKK3sKKyAgICBpZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgdGhlIGJlc3QgaGV1cmlzdGlj
IGZvciBlbmFibGluZyBhc3luYyBpbWFnZSBkZWNvZGluZy4KKyAgICByZXR1cm4gc2l6ZSgpLmFy
ZWEoKSAqIHNpemVvZihSR0JBMzIpID49IChmcmFtZUNvdW50KCkgPiAxID8gMTAwICogS0IgOiA1
MDAgKiBLQik7Cit9CisKIHZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpzdGFydEFzeW5jRGVjb2RpbmdR
dWV1ZSgpCiB7CiAgICAgaWYgKGhhc0FzeW5jRGVjb2RpbmdRdWV1ZSgpIHx8ICFpc0RlY29kZXJB
dmFpbGFibGUoKSkKQEAgLTUxMCw2ICs1NTgsMjkgQEAgQ29sb3IgSW1hZ2VGcmFtZUNhY2hlOjpz
aW5nbGVQaXhlbFNvbGlkQwogICAgIHJldHVybiBmcmFtZU1ldGFkYXRhQXRJbmRleENhY2hlSWZO
ZWVkZWQ8Q29sb3I+KDAsICgmSW1hZ2VGcmFtZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKSwgJm1f
c2luZ2xlUGl4ZWxTb2xpZENvbG9yLCBJbWFnZUZyYW1lOjpDYWNoaW5nOjpNZXRhZGF0YUFuZElt
YWdlKTsKIH0KIAorU3Vic2FtcGxpbmdMZXZlbCBJbWFnZUZyYW1lQ2FjaGU6Om1heGltdW1TdWJz
YW1wbGluZ0xldmVsKCkKK3sKKyAgICBpZiAobV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkKKyAg
ICAgICAgcmV0dXJuIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwudmFsdWUoKTsKKworICAgIGlm
ICghaXNEZWNvZGVyQXZhaWxhYmxlKCkgfHwgIW1fZGVjb2Rlci0+ZnJhbWVBbGxvd1N1YnNhbXBs
aW5nQXRJbmRleCgwKSkKKyAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7
CisKKyAgICAvLyBGSVhNRTogdGhpcyB2YWx1ZSB3YXMgY2hvc2VuIHRvIGJlIGFwcHJvcHJpYXRl
IGZvciBpT1Mgc2luY2UgdGhlIGltYWdlCisgICAgLy8gc3Vic2FtcGxpbmcgaXMgb25seSBlbmFi
bGVkIGJ5IGRlZmF1bHQgb24gaU9TLiBDaG9vc2UgYSBkaWZmZXJlbnQgdmFsdWUKKyAgICAvLyBp
ZiBpbWFnZSBzdWJzYW1wbGluZyBpcyBlbmFibGVkIG9uIG90aGVyIHBsYXRmb3JtLgorICAgIGNv
bnN0IGludCBtYXhpbXVtSW1hZ2VBcmVhQmVmb3JlU3Vic2FtcGxpbmcgPSA1ICogMTAyNCAqIDEw
MjQ7CisgICAgU3Vic2FtcGxpbmdMZXZlbCBsZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkZpcnN0
OworCisgICAgZm9yICg7IGxldmVsIDwgU3Vic2FtcGxpbmdMZXZlbDo6TGFzdDsgKytsZXZlbCkg
eworICAgICAgICBpZiAoZnJhbWVTaXplQXRJbmRleCgwLCBsZXZlbCkuYXJlYSgpLnVuc2FmZUdl
dCgpIDwgbWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCA9IGxldmVsOworICAg
IHJldHVybiBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsLnZhbHVlKCk7Cit9CisKIGJvb2wgSW1h
Z2VGcmFtZUNhY2hlOjpmcmFtZUlzQmVpbmdEZWNvZGVkQW5kSXNDb21wYXRpYmxlV2l0aE9wdGlv
bnNBdEluZGV4KHNpemVfdCBpbmRleCwgY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09w
dGlvbnMpCiB7CiAgICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZihtX2ZyYW1lQ29tbWl0UXVldWUu
YmVnaW4oKSwgbV9mcmFtZUNvbW1pdFF1ZXVlLmVuZCgpLCBbaW5kZXgsICZkZWNvZGluZ09wdGlv
bnNdKGNvbnN0IEltYWdlRnJhbWVSZXF1ZXN0JiBmcmFtZVJlcXVlc3QpIHsKQEAgLTU2Myw2ICs2
MzQsMTkgQEAgSW1hZ2VPcmllbnRhdGlvbiBJbWFnZUZyYW1lQ2FjaGU6OmZyYW1lTwogICAgIHJl
dHVybiBmcmFtZU1ldGFkYXRhQXRJbmRleENhY2hlSWZOZWVkZWQ8SW1hZ2VPcmllbnRhdGlvbj4o
aW5kZXgsICgmSW1hZ2VGcmFtZTo6b3JpZW50YXRpb24pLCBudWxscHRyLCBJbWFnZUZyYW1lOjpD
YWNoaW5nOjpNZXRhZGF0YSk7CiB9CiAKKyNpZiBVU0UoRElSRUNUMkQpCit2b2lkIEltYWdlRnJh
bWVDYWNoZTo6c2V0VGFyZ2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENv
bnRleHQpCit7CisgICAgaWYgKGlzRGVjb2RlckF2YWlsYWJsZSgpICYmIHRhcmdldENvbnRleHQp
CisgICAgICAgIG1fZGVjb2Rlci0+c2V0VGFyZ2V0Q29udGV4dCh0YXJnZXRDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSkKK30KKyNlbmRpZgorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lQ2Fj
aGU6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsKQoreworICAgIHJldHVybiBpc0RlY29kZXJBdmFpbGFibGUoKSA/
IG1fZGVjb2Rlci0+Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2
ZWwpIDogbnVsbHB0cjsKK30KKwogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZUNhY2hlOjpmcmFt
ZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgcmV0dXJuIGZyYW1lTWV0YWRhdGFB
dEluZGV4PE5hdGl2ZUltYWdlUHRyPihpbmRleCwgKCZJbWFnZUZyYW1lOjpuYXRpdmVJbWFnZSkp
OwpAQCAtNTczLDQgKzY1NywxNiBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lQ2FjaGU6OmZy
YW1lSW1hCiAgICAgcmV0dXJuIGZyYW1lTWV0YWRhdGFBdEluZGV4Q2FjaGVJZk5lZWRlZDxOYXRp
dmVJbWFnZVB0cj4oaW5kZXgsICgmSW1hZ2VGcmFtZTo6bmF0aXZlSW1hZ2UpLCBudWxscHRyLCBJ
bWFnZUZyYW1lOjpDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlLCBzdWJzYW1wbGluZ0xldmVsKTsK
IH0KIAordm9pZCBJbWFnZUZyYW1lQ2FjaGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpCit7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJ0eXBlIiwgZmlsZW5hbWVFeHRlbnNpb24oKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJmcmFtZS1jb3VudCIsIGZyYW1lQ291bnQoKSk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZXBldGl0aW9ucyIsIHJlcGV0aXRpb25Db3VudCgpKTsKKyAgICB0cy5kdW1wUHJvcGVy
dHkoInNvbGlkLWNvbG9yIiwgc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkpOworCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KDApOworICAg
IGlmIChvcmllbnRhdGlvbiAhPSBPcmlnaW5Ub3BMZWZ0KQorICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoIm9yaWVudGF0aW9uIiwgb3JpZW50YXRpb24pOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lQ2FjaGUuaAkocmV2aXNp
b24gMjI1MjQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvU3luY2hyb25pemVkRml4ZWRRdWV1ZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsMTEgKzQxLDE1IEBAIGNsYXNzIEltYWdl
RGVjb2RlcjsKIGNsYXNzIFVSTDsKIAogY2xhc3MgSW1hZ2VGcmFtZUNhY2hlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEltYWdlRnJhbWVDYWNoZT4gewotICAgIGZyaWVuZCBjbGFzcyBJ
bWFnZVNvdXJjZTsKKyAgICBmcmllbmQgY2xhc3MgQml0bWFwSW1hZ2U7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxJbWFnZUZyYW1lQ2FjaGU+IGNyZWF0ZShJbWFnZSogaW1hZ2UpCisgICAgSW1h
Z2VGcmFtZUNhY2hlKEltYWdlKiwgQWxwaGFPcHRpb24gPSBBbHBoYU9wdGlvbjo6UHJlbXVsdGlw
bGllZCwgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gPSBHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbjo6QXBwbGllZCk7CisgICAgSW1hZ2VGcmFtZUNhY2hlKE5hdGl2ZUltYWdlUHRyJiYpOwor
ICAgIH5JbWFnZUZyYW1lQ2FjaGUoKTsKKworICAgIHN0YXRpYyBSZWY8SW1hZ2VGcmFtZUNhY2hl
PiBjcmVhdGUoSW1hZ2UqIGltYWdlLCBBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiA9IEFscGhhT3B0
aW9uOjpQcmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VGcmFtZUNhY2hlKGltYWdl
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRnJhbWVDYWNoZShpbWFnZSwg
YWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIFJlZjxJbWFnZUZyYW1lQ2FjaGU+IGNyZWF0ZShOYXRpdmVJbWFnZVB0ciYmIG5hdGl2
ZUltYWdlKQpAQCAtNTIsMTYgKzU3LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW1hZ2VGcmFtZUNhY2hlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSk7CiAgICAgfQog
Ci0gICAgfkltYWdlRnJhbWVDYWNoZSgpOwotCi0gICAgdm9pZCBzZXREZWNvZGVyKEltYWdlRGVj
b2RlciopOwotICAgIEltYWdlRGVjb2RlciogZGVjb2RlcigpIGNvbnN0OworICAgIHZvaWQgc2V0
RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB2b2lk
IHJlc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpOworICAgIEVuY29kZWREYXRhU3RhdHVzIGRh
dGFDaGFuZ2VkKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAg
IGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKTsKIAogICAgIHVuc2lnbmVkIGRlY29kZWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWNvZGVkU2l6ZTsgfQogICAgIHZvaWQgZGVzdHJveUFsbERlY29k
ZWREYXRhKCkgeyBkZXN0cm95RGVjb2RlZERhdGEoZnJhbWVDb3VudCgpLCBmcmFtZUNvdW50KCkp
OyB9CiAgICAgdm9pZCBkZXN0cm95QWxsRGVjb2RlZERhdGFFeGNsdWRlRnJhbWUoc2l6ZV90IGV4
Y2x1ZGVGcmFtZSkgeyBkZXN0cm95RGVjb2RlZERhdGEoZnJhbWVDb3VudCgpLCBleGNsdWRlRnJh
bWUpOyB9CiAgICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGFCZWZvcmVGcmFtZShzaXplX3QgYmVm
b3JlRnJhbWUpIHsgZGVzdHJveURlY29kZWREYXRhKGJlZm9yZUZyYW1lLCBiZWZvcmVGcmFtZSk7
IH0KICAgICB2b2lkIGRlc3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERhdGEoKTsKKyAgICB2b2lkIGNs
ZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgYmVmb3JlRnJhbWUpOwogCiAgICAgdm9pZCBncm93
RnJhbWVzKCk7CiAgICAgdm9pZCBjbGVhck1ldGFkYXRhKCk7CkBAIC03MSw4ICs3Nyw5IEBAIHB1
YmxpYzoKICAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgY29uc3Q7CiAKICAg
ICAvLyBBc3luY2hyb25vdXMgaW1hZ2UgZGVjb2RpbmcKKyAgICBib29sIGNhblVzZUFzeW5jRGVj
b2RpbmcoKTsKICAgICB2b2lkIHN0YXJ0QXN5bmNEZWNvZGluZ1F1ZXVlKCk7Ci0gICAgdm9pZCBy
ZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWws
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4mKTsKKyAgICB2b2lkIHJlcXVlc3RGcmFtZUFz
eW5jRGVjb2RpbmdBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCwgY29uc3Qgc3RkOjpv
cHRpb25hbDxJbnRTaXplPiYgPSB7IH0pOwogICAgIHZvaWQgc3RvcEFzeW5jRGVjb2RpbmdRdWV1
ZSgpOwogICAgIGJvb2wgaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWNvZGluZ1F1ZXVlOyB9CiAgICAgYm9vbCBpc0FzeW5jRGVjb2RpbmdRdWV1ZUlkbGUoKSBjb25z
dDsKQEAgLTkwLDggKzk3LDggQEAgcHVibGljOgogICAgIC8vIEltYWdlIG1ldGFkYXRhIHdoaWNo
IGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZmlyc3QgSW1hZ2VGcmFtZS4KICAgICBJbnRTaXplIHNp
emUoKTsKICAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsKLQogICAgIENv
bG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11
bVN1YnNhbXBsaW5nTGV2ZWwoKTsKIAogICAgIC8vIEltYWdlRnJhbWUgbWV0YWRhdGEgd2hpY2gg
ZG9lcyBub3QgcmVxdWlyZSBjYWNoaW5nIHRoZSBJbWFnZUZyYW1lLgogICAgIGJvb2wgZnJhbWVJ
c0JlaW5nRGVjb2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QsIGNv
bnN0IERlY29kaW5nT3B0aW9ucyYpOwpAQCAtMTA4LDEzICsxMTUsMTQgQEAgcHVibGljOgogICAg
IFNlY29uZHMgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFnZU9yaWVudGF0
aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCk7CiAKKyNpZiBVU0UoRElSRUNUMkQp
CisgICAgdm9pZCBzZXRUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCopOworI2Vu
ZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBT
dWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiAgICAgTmF0aXZl
SW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKLSAgICBOYXRpdmVJbWFnZVB0ciBm
cmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsKTsK
KyAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90
LCBTdWJzYW1wbGluZ0xldmVsID0gU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCk7CiAKIHByaXZh
dGU6Ci0gICAgSW1hZ2VGcmFtZUNhY2hlKEltYWdlKik7Ci0gICAgSW1hZ2VGcmFtZUNhY2hlKE5h
dGl2ZUltYWdlUHRyJiYpOwotCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVCAoSW1hZ2VEZWNv
ZGVyOjoqZnVuY3RvcikoKSBjb25zdD4KICAgICBUIG1ldGFkYXRhKGNvbnN0IFQmIGRlZmF1bHRW
YWx1ZSwgc3RkOjpvcHRpb25hbDxUPiogY2FjaGVkVmFsdWUgPSBudWxscHRyKTsKIApAQCAtMTI0
LDYgKzEzMiw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4gQXJncz4KICAgICBUIGZyYW1lTWV0YWRhdGFBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3Qs
IFQgKEltYWdlRnJhbWU6OipmdW5jdG9yKSgpIGNvbnN0LCAgc3RkOjpvcHRpb25hbDxUPiogY2Fj
aGVkVmFsdWUsIEFyZ3MmJi4uLik7CiAKKyAgICBib29sIGVuc3VyZURlY29kZXJBdmFpbGFibGUo
U2hhcmVkQnVmZmVyKiBkYXRhKTsKICAgICBib29sIGlzRGVjb2RlckF2YWlsYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVjb2RlcjsgfQogICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKHNpemVf
dCBmcmFtZUNvdW50LCBzaXplX3QgZXhjbHVkZUZyYW1lKTsKICAgICB2b2lkIGRlY29kZWRTaXpl
Q2hhbmdlZChsb25nIGxvbmcgZGVjb2RlZFNpemUpOwpAQCAtMTQ0LDExICsxNTMsMTUgQEAgcHJp
dmF0ZToKIAogICAgIGNvbnN0IEltYWdlRnJhbWUmIGZyYW1lQXRJbmRleENhY2hlSWZOZWVkZWQo
c2l6ZV90LCBJbWFnZUZyYW1lOjpDYWNoaW5nLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBs
aW5nTGV2ZWw+JiA9IHsgfSk7CiAKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpOworCiAgICAg
SW1hZ2UqIG1faW1hZ2UgeyBudWxscHRyIH07CiAgICAgUmVmUHRyPEltYWdlRGVjb2Rlcj4gbV9k
ZWNvZGVyOworICAgIEFscGhhT3B0aW9uIG1fYWxwaGFPcHRpb24geyBBbHBoYU9wdGlvbjo6UHJl
bXVsdGlwbGllZCB9OworICAgIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIG1fZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24geyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCB9
OworCiAgICAgdW5zaWduZWQgbV9kZWNvZGVkU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2Rl
Y29kZWRQcm9wZXJ0aWVzU2l6ZSB7IDAgfTsKLQogICAgIFZlY3RvcjxJbWFnZUZyYW1lLCAxPiBt
X2ZyYW1lczsKIAogICAgIC8vIEFzeW5jaHJvbm91cyBpbWFnZSBkZWNvZGluZy4KQEAgLTE4MCw2
ICsxOTMsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4gbV9zaXplOwog
ICAgIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4gbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOwog
ICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IG1fc2luZ2xlUGl4ZWxTb2xpZENvbG9yOworICAgIHN0
ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbDsK
IH07CiAgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lvbiAyMjUyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tl
ckBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2Jp
bGUsIEluYwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKLQotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlRGVjb2RlckNH
LmgiCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9X
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbmRpZgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2lu
Y2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jZWxzZQotI2luY2x1ZGUgIkltYWdlRGVj
b2Rlci5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VTb3Vy
Y2U6OkltYWdlU291cmNlKE5hdGl2ZUltYWdlUHRyJiYgbmF0aXZlSW1hZ2UpCi0gICAgOiBtX2Zy
YW1lQ2FjaGUoSW1hZ2VGcmFtZUNhY2hlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpKQot
ewotfQotICAgIAotSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlKiBpbWFnZSwgQWxwaGFP
cHRpb24gYWxwaGFPcHRpb24sIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKQotICAgIDogbV9mcmFtZUNhY2hlKEltYWdlRnJhbWVDYWNoZTo6Y3Jl
YXRlKGltYWdlKSkKLSAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCi0gICAgLCBtX2dh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotewot
fQotCi1JbWFnZVNvdXJjZTo6fkltYWdlU291cmNlKCkgPSBkZWZhdWx0OwotCi12b2lkIEltYWdl
U291cmNlOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCi17
Ci0gICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
ZGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOwotfQotCi1i
b29sIEltYWdlU291cmNlOjplbnN1cmVEZWNvZGVyQXZhaWxhYmxlKFNoYXJlZEJ1ZmZlciogZGF0
YSkKLXsKLSAgICBpZiAoIWRhdGEgfHwgaXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgbV9kZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEs
IG1fZnJhbWVDYWNoZS0+bWltZVR5cGUoKSwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbik7Ci0gICAgaWYgKCFpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9m
cmFtZUNhY2hlLT5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSkKLSAgICAgICAgbV9kZWNvZGVyLT5z
ZXRFeHBlY3RlZENvbnRlbnRTaXplKGV4cGVjdGVkQ29udGVudExlbmd0aCk7Ci0KLSAgICBtX2Zy
YW1lQ2FjaGUtPnNldERlY29kZXIobV9kZWNvZGVyLmdldCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGVjb2RlclRhcmdldENvbnRleHQoY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0KQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBp
ZiAoIWlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodGFy
Z2V0Q29udGV4dCkKLSAgICAgICAgbV9kZWNvZGVyLT5zZXRUYXJnZXRDb250ZXh0KHRhcmdldENv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdl
dENvbnRleHQpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVk
QnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBpZiAoIWRhdGEgfHwg
IWVuc3VyZURlY29kZXJBdmFpbGFibGUoZGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
ZGVjb2Rlci0+c2V0RGF0YSgqZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLX0KLQotdm9pZCBJbWFn
ZVNvdXJjZTo6cmVzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICBtX2RlY29kZXIg
PSBudWxscHRyOwotICAgIG1fZnJhbWVDYWNoZS0+c2V0RGVjb2RlcihudWxscHRyKTsKLSAgICBz
ZXREYXRhKGRhdGEsIGlzQWxsRGF0YVJlY2VpdmVkKCkpOwotfQotCi1FbmNvZGVkRGF0YVN0YXR1
cyBJbWFnZVNvdXJjZTo6ZGF0YUNoYW5nZWQoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCkKLXsKLSAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAg
bV9mcmFtZUNhY2hlLT5jbGVhck1ldGFkYXRhKCk7Ci0KLSAgICBFbmNvZGVkRGF0YVN0YXR1cyBz
dGF0dXMgPSBlbmNvZGVkRGF0YVN0YXR1cygpOwotICAgIGlmIChzdGF0dXMgPj0gRW5jb2RlZERh
dGFTdGF0dXM6OlNpemVBdmFpbGFibGUpCi0gICAgICAgIG1fZnJhbWVDYWNoZS0+Z3Jvd0ZyYW1l
cygpOwotCi0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6aXNBbGxE
YXRhUmVjZWl2ZWQoKQotewotICAgIHJldHVybiBpc0RlY29kZXJBdmFpbGFibGUoKSA/IG1fZGVj
b2Rlci0+aXNBbGxEYXRhUmVjZWl2ZWQoKSA6IG1fZnJhbWVDYWNoZS0+ZnJhbWVDb3VudCgpOwot
fQotCi1ib29sIEltYWdlU291cmNlOjpjYW5Vc2VBc3luY0RlY29kaW5nKCkKLXsKLSAgICBpZiAo
IWlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgdGhlIGJlc3QgaGV1cmlzdGljIGZvciBlbmFibGluZyBhc3luYyBpbWFn
ZSBkZWNvZGluZy4KLSAgICByZXR1cm4gc2l6ZSgpLmFyZWEoKSAqIHNpemVvZihSR0JBMzIpID49
IChmcmFtZUNvdW50KCkgPiAxID8gMTAwICogS0IgOiA1MDAgKiBLQik7Ci19Ci0KLVN1YnNhbXBs
aW5nTGV2ZWwgSW1hZ2VTb3VyY2U6Om1heGltdW1TdWJzYW1wbGluZ0xldmVsKCkKLXsKLSAgICBp
ZiAobV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIG1fbWF4aW11bVN1
YnNhbXBsaW5nTGV2ZWwudmFsdWUoKTsKLQotICAgIGlmICghaXNEZWNvZGVyQXZhaWxhYmxlKCkg
fHwgIW1fZGVjb2Rlci0+ZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRleCgwKSkKLSAgICAgICAg
cmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7Ci0KLSAgICAvLyBGSVhNRTogdGhpcyB2
YWx1ZSB3YXMgY2hvc2VuIHRvIGJlIGFwcHJvcHJpYXRlIGZvciBpT1Mgc2luY2UgdGhlIGltYWdl
Ci0gICAgLy8gc3Vic2FtcGxpbmcgaXMgb25seSBlbmFibGVkIGJ5IGRlZmF1bHQgb24gaU9TLiBD
aG9vc2UgYSBkaWZmZXJlbnQgdmFsdWUKLSAgICAvLyBpZiBpbWFnZSBzdWJzYW1wbGluZyBpcyBl
bmFibGVkIG9uIG90aGVyIHBsYXRmb3JtLgotICAgIGNvbnN0IGludCBtYXhpbXVtSW1hZ2VBcmVh
QmVmb3JlU3Vic2FtcGxpbmcgPSA1ICogMTAyNCAqIDEwMjQ7Ci0gICAgU3Vic2FtcGxpbmdMZXZl
bCBsZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6OkZpcnN0OwotCi0gICAgZm9yICg7IGxldmVsIDwg
U3Vic2FtcGxpbmdMZXZlbDo6TGFzdDsgKytsZXZlbCkgewotICAgICAgICBpZiAoZnJhbWVTaXpl
QXRJbmRleCgwLCBsZXZlbCkuYXJlYSgpLnVuc2FmZUdldCgpIDwgbWF4aW11bUltYWdlQXJlYUJl
Zm9yZVN1YnNhbXBsaW5nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9tYXhp
bXVtU3Vic2FtcGxpbmdMZXZlbCA9IGxldmVsOwotICAgIHJldHVybiBtX21heGltdW1TdWJzYW1w
bGluZ0xldmVsLnZhbHVlKCk7Ci19Ci0KLVN1YnNhbXBsaW5nTGV2ZWwgSW1hZ2VTb3VyY2U6OnN1
YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3IpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIE5ldmVy
IHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KLSAg
ICBpZiAoQ0dDb250ZXh0R2V0VHlwZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSA9PSBrQ0dD
b250ZXh0VHlwZVBERikKLSAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQ7
Ci0KLSAgICBmbG9hdCBzY2FsZSA9IHN0ZDo6bWluKGZsb2F0KDEpLCBzdGQ6Om1heChzY2FsZUZh
Y3Rvci53aWR0aCgpLCBzY2FsZUZhY3Rvci5oZWlnaHQoKSkpOwotICAgIGlmICghKHNjYWxlID4g
MCAmJiBzY2FsZSA8PSAxKSkKLSAgICAgICAgcmV0dXJuIFN1YnNhbXBsaW5nTGV2ZWw6OkRlZmF1
bHQ7Ci0KLSAgICBpbnQgcmVzdWx0ID0gc3RkOjpjZWlsKHN0ZDo6bG9nMigxIC8gc2NhbGUpKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3Vic2FtcGxpbmdMZXZlbD4oc3RkOjptaW4ocmVzdWx0
LCBzdGF0aWNfY2FzdDxpbnQ+KG1heGltdW1TdWJzYW1wbGluZ0xldmVsKCkpKSk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0oc2NhbGVGYWN0b3Ip
OwotICAgIHJldHVybiBTdWJzYW1wbGluZ0xldmVsOjpEZWZhdWx0OwotI2VuZGlmCi19Ci0KLU5h
dGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKLXsKLSAgICByZXR1cm4g
aXNEZWNvZGVyQXZhaWxhYmxlKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7Ci19Ci0KLU5hdGl2ZUltYWdlUHRy
IEltYWdlU291cmNlOjpmcmFtZUltYWdlQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6ZV90IGluZGV4
LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogdGFyZ2V0Q29udGV4dCkKLXsKLSAgICBzZXREZWNvZGVyVGFyZ2V0Q29udGV4dCh0YXJnZXRD
b250ZXh0KTsKLSAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUltYWdlQXRJbmRleENhY2hl
SWZOZWVkZWQoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotfQotCi12b2lkIEltYWdlU291cmNl
OjpkdW1wKFRleHRTdHJlYW0mIHRzKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgidHlwZSIsIGZp
bGVuYW1lRXh0ZW5zaW9uKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZnJhbWUtY291bnQiLCBm
cmFtZUNvdW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVwZXRpdGlvbnMiLCByZXBldGl0
aW9uQ291bnQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzb2xpZC1jb2xvciIsIHNpbmdsZVBp
eGVsU29saWRDb2xvcigpKTsKLQotICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBm
cmFtZU9yaWVudGF0aW9uQXRJbmRleCgwKTsKLSAgICBpZiAob3JpZW50YXRpb24gIT0gT3JpZ2lu
VG9wTGVmdCkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcmllbnRhdGlvbiIsIG9yaWVudGF0
aW9uKTsKLX0KLQotfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5oCShyZXZpc2lvbiAyMjUyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCShub25leGlzdGVudCkKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwOCwgMjAxMCwgMjAxMiwgMjAxNCwgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2gg
TW9iaWxlLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlRnJhbWUuaCIKLSNpbmNsdWRlICJJbWFn
ZUZyYW1lQ2FjaGUuaCIKLSNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSAi
SW50UG9pbnQuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEltYWdlRGVjb2RlcjsKLWNs
YXNzIEltYWdlT3JpZW50YXRpb247Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFNpemU7Ci1j
bGFzcyBTaGFyZWRCdWZmZXI7Ci0KLWNsYXNzIEltYWdlU291cmNlIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbWFnZVNvdXJjZSk7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwot
cHVibGljOgotICAgIEltYWdlU291cmNlKE5hdGl2ZUltYWdlUHRyJiYpOwotICAgIEltYWdlU291
cmNlKEltYWdlKiwgQWxwaGFPcHRpb24gPSBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCwgR2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24gPSBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBw
bGllZCk7Ci0gICAgfkltYWdlU291cmNlKCk7Ci0KLSAgICB2b2lkIGRlc3Ryb3lBbGxEZWNvZGVk
RGF0YSgpIHsgbV9mcmFtZUNhY2hlLT5kZXN0cm95QWxsRGVjb2RlZERhdGEoKTsgfQotICAgIHZv
aWQgZGVzdHJveUFsbERlY29kZWREYXRhRXhjbHVkZUZyYW1lKHNpemVfdCBleGNsdWRlRnJhbWUp
IHsgbV9mcmFtZUNhY2hlLT5kZXN0cm95QWxsRGVjb2RlZERhdGFFeGNsdWRlRnJhbWUoZXhjbHVk
ZUZyYW1lKTsgfQotICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhQmVmb3JlRnJhbWUoc2l6ZV90
IGJlZm9yZUZyYW1lKSB7IG1fZnJhbWVDYWNoZS0+ZGVzdHJveURlY29kZWREYXRhQmVmb3JlRnJh
bWUoYmVmb3JlRnJhbWUpOyB9Ci0gICAgdm9pZCBkZXN0cm95SW5jb21wbGV0ZURlY29kZWREYXRh
KCkgeyBtX2ZyYW1lQ2FjaGUtPmRlc3Ryb3lJbmNvbXBsZXRlRGVjb2RlZERhdGEoKTsgfQotICAg
IHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9mcmFtZUNhY2hlLT5jbGVhckltYWdlKCk7IH0KLSAgICB2
b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwotCi0gICAgYm9vbCBlbnN1cmVEZWNv
ZGVyQXZhaWxhYmxlKFNoYXJlZEJ1ZmZlciopOwotICAgIGJvb2wgaXNEZWNvZGVyQXZhaWxhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgdm9pZCByZXNl
dERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhKTsKLSAgICBFbmNvZGVkRGF0YVN0YXR1cyBkYXRhQ2hh
bmdlZChTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAgIHVu
c2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5kZWNvZGVk
U2l6ZSgpOyB9Ci0gICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpOwotCi0gICAgYm9vbCBjYW5V
c2VBc3luY0RlY29kaW5nKCk7Ci0gICAgdm9pZCByZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJ
bmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgY29u
c3Qgc3RkOjpvcHRpb25hbDxJbnRTaXplPiYgc2l6ZUZvckRyYXdpbmcgPSB7IH0pIHsgbV9mcmFt
ZUNhY2hlLT5yZXF1ZXN0RnJhbWVBc3luY0RlY29kaW5nQXRJbmRleChpbmRleCwgc3Vic2FtcGxp
bmdMZXZlbCwgc2l6ZUZvckRyYXdpbmcpOyB9Ci0gICAgYm9vbCBoYXNBc3luY0RlY29kaW5nUXVl
dWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQ2FjaGUtPmhhc0FzeW5jRGVjb2RpbmdRdWV1ZSgp
OyB9Ci0gICAgYm9vbCBpc0FzeW5jRGVjb2RpbmdRdWV1ZUlkbGUoKSBjb25zdCAgeyByZXR1cm4g
bV9mcmFtZUNhY2hlLT5pc0FzeW5jRGVjb2RpbmdRdWV1ZUlkbGUoKTsgfQotICAgIHZvaWQgc3Rv
cEFzeW5jRGVjb2RpbmdRdWV1ZSgpIHsgbV9mcmFtZUNhY2hlLT5zdG9wQXN5bmNEZWNvZGluZ1F1
ZXVlKCk7IH0KLQotICAgIC8vIEltYWdlIG1ldGFkYXRhIHdoaWNoIGlzIGNhbGN1bGF0ZWQgYnkg
dGhlIGRlY29kZXIgb3IgY2FuIGRlZHVjZWQgYnkgdGhlIGNhc2Ugb2YgdGhlIG1lbW9yeSBOYXRp
dmVJbWFnZS4KLSAgICBFbmNvZGVkRGF0YVN0YXR1cyBlbmNvZGVkRGF0YVN0YXR1cygpIHsgcmV0
dXJuIG1fZnJhbWVDYWNoZS0+ZW5jb2RlZERhdGFTdGF0dXMoKTsgfQotICAgIHNpemVfdCBmcmFt
ZUNvdW50KCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUNvdW50KCk7IH0KLSAgICBSZXBl
dGl0aW9uQ291bnQgcmVwZXRpdGlvbkNvdW50KCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5yZXBl
dGl0aW9uQ291bnQoKTsgfQotICAgIFN0cmluZyB1dGkoKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUt
PnV0aSgpOyB9Ci0gICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgeyByZXR1cm4gbV9mcmFt
ZUNhY2hlLT5maWxlbmFtZUV4dGVuc2lvbigpOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxJbnRQb2lu
dD4gaG90U3BvdCgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+aG90U3BvdCgpOyB9Ci0KLSAgICAv
LyBJbWFnZSBtZXRhZGF0YSB3aGljaCBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGZpcnN0IEltYWdl
RnJhbWUuCi0gICAgSW50U2l6ZSBzaXplKCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5zaXplKCk7
IH0KLSAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSB7IHJldHVybiBtX2Zy
YW1lQ2FjaGUtPnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsgfQotICAgIENvbG9yIHNpbmds
ZVBpeGVsU29saWRDb2xvcigpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+c2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCk7IH0KLQotICAgIC8vIEltYWdlRnJhbWUgbWV0YWRhdGEgd2hpY2ggZG9lcyBub3Qg
cmVxdWlyZSBjYWNoaW5nIHRoZSBJbWFnZUZyYW1lLgotICAgIGJvb2wgZnJhbWVJc0JlaW5nRGVj
b2RlZEFuZElzQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0
IERlY29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSB7IHJldHVybiBtX2ZyYW1lQ2FjaGUt
PmZyYW1lSXNCZWluZ0RlY29kZWRBbmRJc0NvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoaW5k
ZXgsIGRlY29kaW5nT3B0aW9ucyk7IH0KLSAgICBEZWNvZGluZ1N0YXR1cyBmcmFtZURlY29kaW5n
U3RhdHVzQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVE
ZWNvZGluZ1N0YXR1c0F0SW5kZXgoaW5kZXgpOyB9Ci0gICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoaW5kZXgpOyB9Ci0gICAgYm9vbCBmcmFtZUhhc0ltYWdlQXRJbmRleChzaXplX3QgaW5k
ZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVIYXNJbWFnZUF0SW5kZXgoaW5kZXgpOyB9
Ci0gICAgYm9vbCBmcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRl
eCwgY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZl
bCkgeyByZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1hZ2VBdElu
ZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsgfQotICAgIGJvb2wgZnJhbWVIYXNEZWNvZGVk
TmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCBpbmRleCwgY29u
c3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgc3Vic2FtcGxpbmdMZXZlbCwgY29u
c3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIHsgcmV0dXJuIG1fZnJhbWVDYWNo
ZS0+ZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBkZWNvZGluZ09wdGlvbnMpOyB9Ci0gICAgU3Vic2Ft
cGxpbmdMZXZlbCBmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gbV9mcmFtZUNhY2hlLT5mcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KGluZGV4KTsg
fQotCi0gICAgLy8gSW1hZ2VGcmFtZSBtZXRhZGF0YSB3aGljaCBmb3JjZXMgY2FjaGluZyBvciBy
ZS1jYWNoaW5nIHRoZSBJbWFnZUZyYW1lLgotICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChz
aXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBs
aW5nTGV2ZWw6OkRlZmF1bHQpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVTaXplQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7IH0KLSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJ
bmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCA9IFN1
YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVCeXRl
c0F0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOyB9Ci0gICAgU2Vjb25kcyBmcmFtZUR1
cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVE
dXJhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVP
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOyB9Ci0KLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZnJhbWVDYWNoZS0+ZnJhbWVJbWFn
ZUF0SW5kZXgoaW5kZXgpOyB9Ci0gICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVJbWFnZUF0SW5kZXhD
YWNoZUlmTmVlZGVkKHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IFN1YnNhbXBsaW5nTGV2ZWw6
OkRlZmF1bHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSBudWxscHRyKTsKLQotICAgIFN1YnNh
bXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwoKTsKLSAgICBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZUZhY3RvcihHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFNpemUmIHNjYWxlRmFjdG9yKTsKLSAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBTdWJzYW1wbGluZ0xldmVs
OjpEZWZhdWx0KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJik7
Ci0KLSAgICB2b2lkIHNldERlY29kZXJUYXJnZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4
dCopOwotCi0gICAgUmVmPEltYWdlRnJhbWVDYWNoZT4gbV9mcmFtZUNhY2hlOwotICAgIFJlZlB0
cjxJbWFnZURlY29kZXI+IG1fZGVjb2RlcjsKLQotICAgIHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxp
bmdMZXZlbD4gbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbDsKLQotICAgIEFscGhhT3B0aW9uIG1f
YWxwaGFPcHRpb24geyBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCB9OwotICAgIEdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24geyBHYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCB9OwotfTsKLQotfQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNE
Q2Fpcm8uY3BwCShyZXZpc2lvbiAyMjUyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRl
ICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVDYWNoZS5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNp
bmNsdWRlICJSZWZQdHJDYWlyby5oIgpAQCAtMjU1LDggKzI1NSw2IEBAIEdyYXBoaWNzQ29udGV4
dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogCiBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRy
YWN0b3I6On5JbWFnZUV4dHJhY3RvcigpCiB7Ci0gICAgaWYgKG1fZGVjb2RlcikKLSAgICAgICAg
ZGVsZXRlIG1fZGVjb2RlcjsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRy
YWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUpCkBAIC0yNjYsMTIgKzI2NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjoKICAgICAvLyBXZSBuZWVkIHRoaXMgdG8gc3RheSBpbiBz
Y29wZSBiZWNhdXNlIHRoZSBuYXRpdmUgaW1hZ2UgaXMganVzdCBhIHNoYWxsb3cgY29weSBvZiB0
aGUgZGF0YS4KICAgICBBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiA9IHByZW11bHRpcGx5QWxwaGEg
PyBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCA6IEFscGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBs
aWVkOwogICAgIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uID0gaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBHYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbjo6SWdub3JlZCA6IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkOwot
ICAgIG1fZGVjb2RlciA9IG5ldyBJbWFnZVNvdXJjZShudWxscHRyLCBhbHBoYU9wdGlvbiwgZ2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwotICAgIAotICAgIGlmICghbV9kZWNvZGVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbWFnZVNvdXJjZSYgZGVjb2RlciA9ICptX2RlY29k
ZXI7CisgICAgSW1hZ2VGcmFtZUNhY2hlIGRlY29kZXIobnVsbHB0ciwgYWxwaGFPcHRpb24sIGdh
bW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKICAgICBtX2FscGhhT3AgPSBBbHBoYURvTm90aGlu
ZzsKIAogICAgIGlmIChtX2ltYWdlLT5kYXRhKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cu
Y3BwCShyZXZpc2lvbiAyMjUyNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI1LDcgKzMy
NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGJvb2wgaGFzQWxwaGEgPSAhbV9pbWFnZS0+Y3VycmVudEZyYW1l
S25vd25Ub0JlT3BhcXVlKCk7CiAgICAgaWYgKChpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSB8
fCAoaGFzQWxwaGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBtX2ltYWdlLT5kYXRhKCkpIHsK
LSAgICAgICAgSW1hZ2VTb3VyY2UgZGVjb2RlcihudWxscHRyLCBBbHBoYU9wdGlvbjo6Tm90UHJl
bXVsdGlwbGllZCwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBHYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbjo6SWdub3JlZCA6IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVk
KTsKKyAgICAgICAgSW1hZ2VGcmFtZUNhY2hlIGRlY29kZXIobnVsbHB0ciwgQWxwaGFPcHRpb246
Ok5vdFByZW11bHRpcGxpZWQsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gR2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6
QXBwbGllZCk7CiAgICAgICAgIGRlY29kZXIuc2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUp
OwogICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VT
b3VyY2VDRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlU291cmNlQ0cuaAkocmV2aXNpb24gMjI1MjQ4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw2IEBACiAjaWZuZGVmIEltYWdlU291cmNlQ0dfaAogI2RlZmluZSBJbWFnZVNvdXJj
ZUNHX2gKIAotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjI1MjgzKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTctMTEtMjkgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIElt
YWdlU291cmNlIGZyb20gdGhlIGNsYXNzIGhpZXJhcmNoeSB0aGF0IGNvbm5lY3RzIEJpdG1hcElt
YWdlIHRvIEltYWdlRnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTU5NQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbToKKwogMjAxNy0xMS0yNyAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBPbmUgdG9vIG1hbnkg
emVyb2VzIGluIG1hY09TIHZlcnNpb24gbnVtYmVyIGluIEZlYXR1cmVEZWZpbmVzCkluZGV4OiBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0J
KHJldmlzaW9uIDIyNTI0OCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9TZXNzaW9uLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0RldmljZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSW1hZ2VTb3VyY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRpZgogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>