<?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>149233</bug_id>
          
          <creation_ts>2015-09-16 15:03:40 -0700</creation_ts>
          <short_desc>[Mac MediaStream] Cleanup capture source classes</short_desc>
          <delta_ts>2015-09-17 08:39:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</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="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1126476</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-16 15:03:40 -0700</bug_when>
    <thetext>Clean up classes, prepare for adding WebAudio support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126490</commentid>
    <comment_count>1</comment_count>
      <attachid>261332</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-16 15:43:13 -0700</bug_when>
    <thetext>Created attachment 261332
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126491</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 15:45:37 -0700</bug_when>
    <thetext>Attachment 261332 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm:39:  *SoftLink.h header should be included after all other headers.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm:40:  *SoftLink.h header should be included after all other headers.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:199:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:219:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:220:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.h:32:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
Total errors found: 8 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126504</commentid>
    <comment_count>3</comment_count>
      <attachid>261335</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-16 16:07:55 -0700</bug_when>
    <thetext>Created attachment 261335
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126505</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 16:11:10 -0700</bug_when>
    <thetext>Attachment 261335 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm:38:  *SoftLink.h header should be included after all other headers.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm:39:  *SoftLink.h header should be included after all other headers.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm:40:  *SoftLink.h header should be included after all other headers.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:199:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 5 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126509</commentid>
    <comment_count>5</comment_count>
      <attachid>261335</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-09-16 16:21:36 -0700</bug_when>
    <thetext>Comment on attachment 261335
Updated patch

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

&gt; Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h:59
&gt; +    void startProducingData() override;
&gt; +    void stopProducingData() override;
&gt; +

Do these need to be public?

&gt; Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:211
&gt; +void AVMediaCaptureSource::scheduleDeferredTask(std::function&lt;void ()&gt; function)
&gt; +{
&gt; +    ASSERT(function);
&gt; +
&gt; +    auto weakThis = createWeakPtr();
&gt; +    dispatch_async(dispatch_get_main_queue(), [weakThis, function] {
&gt; +        if (!weakThis)
&gt; +            return;
&gt; +
&gt; +        function();
&gt; +    });
&gt; +}
&gt; +

Will this break on WK1-iOS? (where the main thread is not necessarily the web thread)  If so, we could use GenericTaskQueue&lt;Timer&gt; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126693</commentid>
    <comment_count>6</comment_count>
      <attachid>261392</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-17 07:47:06 -0700</bug_when>
    <thetext>Created attachment 261392
Updated patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126694</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-17 07:48:31 -0700</bug_when>
    <thetext>Attachment 261392 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:199:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:230:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h:77:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126697</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-17 08:34:55 -0700</bug_when>
    <thetext>Committed r189913: https://trac.webkit.org/r189913</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126698</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-09-17 08:35:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/22739163&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126699</commentid>
    <comment_count>10</comment_count>
      <attachid>261335</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-09-17 08:38:54 -0700</bug_when>
    <thetext>Comment on attachment 261335
Updated patch

Clearing flags on attachment: 261335</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261332</attachid>
            <date>2015-09-16 15:43:13 -0700</date>
            <delta_ts>2015-09-16 16:07:55 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>av_capture_source_patch_1.txt</filename>
            <type>text/plain</type>
            <size>38294</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE1LTA5LTE2ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMgTWVkaWFTdHJl
YW1dIENsZWFudXAgY2FwdHVyZSBzb3VyY2UgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5jcHA6IFNvZnQtbGluayBDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uLAorICAgICAgICAgIENNU2FtcGxlQnVmZmVyR2V0QXVkaW9CdWZmZXJMaXN0V2l0
aFJldGFpbmVkQmxvY2tCdWZmZXIsIGFuZCBDTVNhbXBsZUJ1ZmZlckdldE51bVNhbXBsZXMuCisg
ICAgICAgICogcGxhdGZvcm0vY2YvQ29yZU1lZGlhU29mdExpbmsuaDoKKworICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oOgorICAgICAgICAo
V2ViQ29yZTo6QVZBdWRpb0NhcHR1cmVTb3VyY2U6Ok9ic2VydmVyOjp+T2JzZXJ2ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9DYXB0dXJlU291cmNlOjpBVkF1ZGlvQ2FwdHVyZVNv
dXJjZSk6IEluaXRpYWxpemUgbV9pbnB1dERlc2NyaXB0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
QVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcyk6IDAgLT4gbnVsbHB0ci4KKyAgICAg
ICAgKFdlYkNvcmU6OkFWQXVkaW9DYXB0dXJlU291cmNlOjphZGRPYnNlcnZlcik6IE5ldywgYWRk
IGFuIG9ic2VydmVyIGFuZCB0ZWxsIGl0IHRvIHByZXBhcmUuCisgICAgICAgIChXZWJDb3JlOjpB
VkF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlT2JzZXJ2ZXIpOiBOZXcuCisgICAgICAgIChXZWJD
b3JlOjpvcGVyYXRvcj09KTogQ29tcGFyZSBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9D
YXB0dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5l
Y3Rpb24pOiBDYWxsIAorICAgICAgICAgIG9ic2VydmVyLT5wcmVwYXJlIHdoZW4gcGFzc2VkIGEg
bmV3IHN0cmVhbSBkZXNjcmlwdGlvbiwgY2FsbCBvYnNlcnZlci0+cHJvY2Vzcy4KKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6cmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KTogU2V0IG1fZ3JvdXBJ
RCBhbmQgbV9sb2NhbGl6ZWROYW1lLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludCk6IEludmFsaWQgY29uc3RyYWludCBu
YW1lcyBzaG91bGQKKyAgICAgICAgICBiZSBpZ25vcmVkLCBzbyByZXR1cm4gdHJ1ZSB3aGVuIHBh
c3NlZCBvbmUuCisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRT
b3VyY2VzSW5mbyk6IFRoaXMganVzdCBkaWRuJ3Qgd29yaywgZml4IGl0LgorICAgICAgICAoV2Vi
Q29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5
cGUpOiBPcHRpb25hbCBjb25zdHJhaW50cyBhcmUKKyAgICAgICAgICBvcHRpb25hbCBzbyB0aGV5
IGRvbid0IG5lZWQgdG8gYmUgdmFsaWRhdGVkLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3RyYWludHMpOiBtX2F1ZGlv
U291cmNlIC0+IG1fYXVkaW9BVk1lZGlhQ2FwdHVyZVNvdXJjZSwKKyAgICAgICAgICBtX3ZpZGVv
U291cmNlIC0+IG1fdmlkZW9BVk1lZGlhQ2FwdHVyZVNvdXJjZS4KKyAgICAgICAgKFdlYkNvcmU6
OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNvdXJjZVdpdGhVSUQpOiBEaXR0by4KKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2U6OnNlc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2U6OmRldmljZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6Y3VycmVudFN0YXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6Y29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6
QVZNZWRpYUNhcHR1cmVTb3VyY2U6OnN0YXRlc0RpZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2U6OmNyZWF0ZVdlYWtQdHIpOgorICAgICAgICAoV2ViQ29y
ZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2U6OmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6c2V0QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UubW06CisgICAg
ICAgIChXZWJDb3JlOjpBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2Up
OiBJbml0aWxpemUgbV93ZWFrUHRyRmFjdG9yeS4KKyAgICAgICAgKFdlYkNvcmU6OkFWTWVkaWFD
YXB0dXJlU291cmNlOjpzY2hlZHVsZURlZmVycmVkVGFzayk6IE5ldywgY2FsbCBhIGZ1bmN0aW9u
IGFzeW5jaHJvbm91c2x5IG9uCisgICAgICAgICAgdGhlIG1haW4gdGhyZWFkLgorICAgICAgICAo
LVtXZWJDb3JlQVZNZWRpYUNhcHR1cmVTb3VyY2VPYnNlcnZlciBjYXB0dXJlT3V0cHV0OmRpZE91
dHB1dFNhbXBsZUJ1ZmZlcjpmcm9tQ29ubmVjdGlvbjpdKTogRG9uJ3QKKyAgICAgICAgICBkaXNw
YXRjaCBjYWxscyB0byB0aGUgbWFpbiB0aHJlYWQsIGxldCB0aGUgZGVyaXZlZCBjbGFzc2VzIGRv
IHRoYXQgaWYgbmVjZXNzYXJ5LgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0FWVmlkZW9DYXB0dXJlU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVy
ZVNvdXJjZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6
OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJldmll
d0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFWVmlkZW9DYXB0dXJlU291cmNlOjpjdXJyZW50
RnJhbWVTYW1wbGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
VlZpZGVvQ2FwdHVyZVNvdXJjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFWVmlkZW9DYXB0dXJl
U291cmNlOjpzZXRGcmFtZVJhdGVDb25zdHJhaW50KTogUmVtb3ZlIHVud2FudGVkIGxvZ2dpbmcu
CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0dXBDYXB0dXJlU2Vz
c2lvbik6IENvbmZpZ3VyZSB0aGUgQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0IHNvCisgICAgICAg
ICAgaXQgZGVsaXZlcnMgMzItYml0IEJHUkEgc2FtcGxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkFW
VmlkZW9DYXB0dXJlU291cmNlOjpjYWxjdWxhdGVGcmFtZXJhdGUpOiBSZXR1cm4gYm9vbCB0byBz
aWduYWwgaWYgdGhlIGZyYW1lIHJhdGUKKyAgICAgICAgICBjaGFuZ2VkLgorICAgICAgICAoV2Vi
Q29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NOZXdGcmFtZSk6IE5ldy4gUHJvY2Vz
cyBzYW1wbGUgYnVmZmVyLCBpbnZhbGlkYXRlIGNhY2hlZAorICAgICAgICAgIGltYWdlLCBzaWdu
YWwgd2hlbiBjaGFyYWN0ZXJpc3RpY3MgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRl
b0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29u
bmVjdGlvbik6IFNjaGVkdWxlCisgICAgICAgICAgY2FsbCB0byBwcm9jZXNzTmV3RnJhbWUgb24g
dGhlIG1haW4gdGhyZWFkIHNvIHdlIGRvIGFsbCB2aWRlbyBwcm9jZXNzaW5nIG9uIG1haW4gdGhy
ZWFkLgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmN1cnJlbnRGcmFt
ZUltYWdlKTogQ3JlYXRlIGFuZCByZXR1cm4gYSBDVkltYWdlQnVmZmVyIG9mIHRoZQorICAgICAg
ICAgIGN1cnJlbnQgdmlkZW8gZnJhbWUuCisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVy
ZVNvdXJjZTo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQpOiBEcmF3IHRoZSBjdXJyZW50IGZy
YW1lIHRvIGEgY29udGV4dC4KKwogMjAxNS0wOS0xNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSB3aW5kb3cuaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
IHJldHVybiBhbiBJREJPcGVuREJSZXF1ZXN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNwcAkocmV2aXNpb24gMTg5ODc2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdl
YkNvcmUsIEMKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVNZWRp
YSwgQ01Gb3JtYXREZXNjcmlwdGlvbkdldEV4dGVuc2lvbnMsIENGRGljdGlvbmFyeVJlZiwgKENN
Rm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzYyksIChkZXNjKSkKIFNPRlRfTElOS19GVU5DVElPTl9G
T1JfU09VUkNFKFdlYkNvcmUsIENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXREYXRhQnVmZmVy
LCBDTUJsb2NrQnVmZmVyUmVmLCAoQ01TYW1wbGVCdWZmZXJSZWYgc2J1ZiksIChzYnVmKSkKIFNP
RlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVNZWRpYSwgQ01TYW1wbGVC
dWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiwgKENNU2Ft
cGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RShXZWJDb3JlLCBDb3JlTWVkaWEsIENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJh
c2ljRGVzY3JpcHRpb24sIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAqLCAoQ01B
dWRpb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGRlc2MpLCAoZGVzYykpCitTT0ZUX0xJTktfRlVOQ1RJ
T05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlTWVkaWEsIENNU2FtcGxlQnVmZmVyR2V0QXVkaW9C
dWZmZXJMaXN0V2l0aFJldGFpbmVkQmxvY2tCdWZmZXIsIE9TU3RhdHVzLCAoQ01TYW1wbGVCdWZm
ZXJSZWYgc2J1Ziwgc2l6ZV90ICpidWZmZXJMaXN0U2l6ZU5lZWRlZE91dCwgQXVkaW9CdWZmZXJM
aXN0ICpidWZmZXJMaXN0T3V0LCBzaXplX3QgYnVmZmVyTGlzdFNpemUsIENGQWxsb2NhdG9yUmVm
IGJidWZTdHJ1Y3RBbGxvY2F0b3IsIENGQWxsb2NhdG9yUmVmIGJidWZNZW1vcnlBbGxvY2F0b3Is
IHVpbnQzMl90IGZsYWdzLCBDTUJsb2NrQnVmZmVyUmVmICpibG9ja0J1ZmZlck91dCksIChzYnVm
LCBidWZmZXJMaXN0U2l6ZU5lZWRlZE91dCwgYnVmZmVyTGlzdE91dCwgYnVmZmVyTGlzdFNpemUs
IGJidWZTdHJ1Y3RBbGxvY2F0b3IsIGJidWZNZW1vcnlBbGxvY2F0b3IsIGZsYWdzLCBibG9ja0J1
ZmZlck91dCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlTWVk
aWEsIENNU2FtcGxlQnVmZmVyR2V0TnVtU2FtcGxlcywgQ01JdGVtQ291bnQsIChDTVNhbXBsZUJ1
ZmZlclJlZiBzYnVmKSwgKHNidWYpKQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2Vi
Q29yZSwgQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm8sIE9TU3Rh
dHVzLCAoQ01TYW1wbGVCdWZmZXJSZWYgc2J1ZiwgQ01JdGVtSW5kZXggc2FtcGxlSW5kZXgsIENN
U2FtcGxlVGltaW5nSW5mbyogdGltaW5nSW5mb091dCksIChzYnVmLCBzYW1wbGVJbmRleCwgdGlt
aW5nSW5mb091dCkpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3Jl
TWVkaWEsIENNVGltZUNvbXBhcmUsIGludDMyX3QsIChDTVRpbWUgdGltZTEsIENNVGltZSB0aW1l
MiksICh0aW1lMSwgdGltZTIpKQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29y
ZSwgQ29yZU1lZGlhLCBDTVRpbWVHZXRTZWNvbmRzLCBGbG9hdDY0LCAoQ01UaW1lIHRpbWUpLCAo
dGltZSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0NvcmVNZWRpYVNv
ZnRMaW5rLmgJKHJldmlzaW9uIDE4OTg3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nm
L0NvcmVNZWRpYVNvZnRMaW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDEyIEBAIFNP
RlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIEMKICNkZWZpbmUgQ01TYW1wbGVC
dWZmZXJHZXREYXRhQnVmZmVyIHNvZnRMaW5rX0NvcmVNZWRpYV9DTVNhbXBsZUJ1ZmZlckdldERh
dGFCdWZmZXIKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVNZWRp
YSwgQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbiwgQ01Gb3JtYXREZXNjcmlwdGlv
blJlZiwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpCiAjZGVmaW5lIENNU2FtcGxl
QnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24gc29mdExpbmtfQ29yZU1lZGlhX0NNU2FtcGxlQnVm
ZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24KK1NPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdl
YkNvcmUsIENvcmVNZWRpYSwgQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uICosIChDTUF1ZGlv
Rm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzYyksIChkZXNjKSkKKyNkZWZpbmUgQ01BdWRpb0Zvcm1h
dERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzb2Z0TGlua19Db3JlTWVkaWFf
Q01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbgorU09GVF9M
SU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZl
ckdldEF1ZGlvQnVmZmVyTGlzdFdpdGhSZXRhaW5lZEJsb2NrQnVmZmVyLCBPU1N0YXR1cywgKENN
U2FtcGxlQnVmZmVyUmVmIHNidWYsIHNpemVfdCAqYnVmZmVyTGlzdFNpemVOZWVkZWRPdXQsIEF1
ZGlvQnVmZmVyTGlzdCAqYnVmZmVyTGlzdE91dCwgc2l6ZV90IGJ1ZmZlckxpc3RTaXplLCBDRkFs
bG9jYXRvclJlZiBiYnVmU3RydWN0QWxsb2NhdG9yLCBDRkFsbG9jYXRvclJlZiBiYnVmTWVtb3J5
QWxsb2NhdG9yLCB1aW50MzJfdCBmbGFncywgQ01CbG9ja0J1ZmZlclJlZiAqYmxvY2tCdWZmZXJP
dXQpLCAoc2J1ZiwgYnVmZmVyTGlzdFNpemVOZWVkZWRPdXQsIGJ1ZmZlckxpc3RPdXQsIGJ1ZmZl
ckxpc3RTaXplLCBiYnVmU3RydWN0QWxsb2NhdG9yLCBiYnVmTWVtb3J5QWxsb2NhdG9yLCBmbGFn
cywgYmxvY2tCdWZmZXJPdXQpKQorI2RlZmluZSBDTVNhbXBsZUJ1ZmZlckdldEF1ZGlvQnVmZmVy
TGlzdFdpdGhSZXRhaW5lZEJsb2NrQnVmZmVyIHNvZnRMaW5rX0NvcmVNZWRpYV9DTVNhbXBsZUJ1
ZmZlckdldEF1ZGlvQnVmZmVyTGlzdFdpdGhSZXRhaW5lZEJsb2NrQnVmZmVyCitTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlTWVkaWEsIENNU2FtcGxlQnVmZmVyR2V0
TnVtU2FtcGxlcywgQ01JdGVtQ291bnQsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYp
KQorI2RlZmluZSBDTVNhbXBsZUJ1ZmZlckdldE51bVNhbXBsZXMgc29mdExpbmtfQ29yZU1lZGlh
X0NNU2FtcGxlQnVmZmVyR2V0TnVtU2FtcGxlcwogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFE
RVIoV2ViQ29yZSwgQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm8s
IE9TU3RhdHVzLCAoQ01TYW1wbGVCdWZmZXJSZWYgc2J1ZiwgQ01JdGVtSW5kZXggc2FtcGxlSW5k
ZXgsIENNU2FtcGxlVGltaW5nSW5mbyogdGltaW5nSW5mb091dCksIChzYnVmLCBzYW1wbGVJbmRl
eCwgdGltaW5nSW5mb091dCkpCiAjZGVmaW5lIENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5n
SW5mbyBzb2Z0TGlua19Db3JlTWVkaWFfQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZv
CiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlTWVkaWEsIENNVGlt
ZUNvbXBhcmUsIGludDMyX3QsIChDTVRpbWUgdGltZTEsIENNVGltZSB0aW1lMiksICh0aW1lMSwg
dGltZTIpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
QXVkaW9DYXB0dXJlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQXVkaW9DYXB0dXJlU291cmNlLmgJKHJldmlzaW9uIDE4OTg3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDI3ICsyOSw0NCBAQAogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCiAKICNpbmNsdWRlICJBVk1lZGlhQ2Fw
dHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgInd0Zi9Mb2NrLmgiCiAKK3R5cGVkZWYgc3RydWN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb247CiB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERl
c2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIGNsYXNzIEFWQXVk
aW9DYXB0dXJlU291cmNlIDogcHVibGljIEFWTWVkaWFDYXB0dXJlU291cmNlIHsKIHB1YmxpYzoK
KworICAgIGNsYXNzIE9ic2VydmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9i
c2VydmVyKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiAqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bnByZXBh
cmUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKENNRm9ybWF0RGVzY3JpcHRp
b25SZWYsIENNU2FtcGxlQnVmZmVyUmVmKSA9IDA7CisgICAgfTsKKwogICAgIHN0YXRpYyBSZWZQ
dHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IGNyZWF0ZShBVkNhcHR1cmVEZXZpY2UqLCBjb25zdCBB
dG9taWNTdHJpbmcmLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKLSAgICAKKworICAg
IHZvaWQgYWRkT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKKyAgICB2b2lkIHJlbW92ZU9ic2VydmVyKE9i
c2VydmVyKik7CisKIHByaXZhdGU6CiAgICAgQVZBdWRpb0NhcHR1cmVTb3VyY2UoQVZDYXB0dXJl
RGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRz
Pik7CiAgICAgdmlydHVhbCB+QVZBdWRpb0NhcHR1cmVTb3VyY2UoKTsKICAgICAKLSAgICB2aXJ0
dWFsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1
dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVm
ZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0aW9uKikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFJlYWx0
aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0
aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVmZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0
aW9uKikgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldHVwQ2FwdHVyZVNlc3Np
b24oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGVzKCkgb3ZlcnJpZGU7
Ci0gICAgICAgIAorICAgIHZvaWQgc2V0dXBDYXB0dXJlU2Vzc2lvbigpIG92ZXJyaWRlOworICAg
IHZvaWQgdXBkYXRlU3RhdGVzKCkgb3ZlcnJpZGU7CisKICAgICBSZXRhaW5QdHI8QVZDYXB0dXJl
Q29ubmVjdGlvbj4gbV9hdWRpb0Nvbm5lY3Rpb247Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbjsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+IG1faW5wdXREZXNjcmlwdGlvbjsKKyAg
ICBWZWN0b3I8T2JzZXJ2ZXIqPiBtX29ic2VydmVyczsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2Uu
bW0JKHJldmlzaW9uIDE4OTg3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw4
IEBACiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzLmgiCiAjaW1wb3J0ICJTb2Z0
TGlua2luZy5oIgogI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWRm91bmRhdGlvbi5oPgotI2ltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CisjaW1wb3J0IDxDb3JlQXVkaW8vQ29yZUF1ZGlvLmg+CisjaW1w
b3J0IDx3dGYvSGFzaFNldC5oPgogCiB0eXBlZGVmIEFWQ2FwdHVyZUNvbm5lY3Rpb24gQVZDYXB0
dXJlQ29ubmVjdGlvblR5cGU7CiB0eXBlZGVmIEFWQ2FwdHVyZURldmljZSBBVkNhcHR1cmVEZXZp
Y2VUeXBlOwpAQCAtNjgsNiArNjksNyBAQCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6QVZBdWRpb0Nh
cHR1cmVTb3VyCiB7CiAgICAgY3VycmVudFN0YXRlcygpLT5zZXRTb3VyY2VJZChpZCk7CiAgICAg
Y3VycmVudFN0YXRlcygpLT5zZXRTb3VyY2VUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6
Ok1pY3JvcGhvbmUpOworICAgIG1faW5wdXREZXNjcmlwdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uPigpOwogfQogICAgIAogQVZBdWRpb0NhcHR1cmVT
b3VyY2U6On5BVkF1ZGlvQ2FwdHVyZVNvdXJjZSgpCkBAIC03Nyw3ICs3OSw3IEBAIEFWQXVkaW9D
YXB0dXJlU291cmNlOjp+QVZBdWRpb0NhcHR1cmVTb3UKIFJlZlB0cjxSZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzPiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkgY29u
c3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiB2b2lkIEFWQXVkaW9DYXB0dXJlU291cmNlOjp1cGRhdGVTdGF0ZXMoKQpA
QCAtODUsNiArODcsMjUgQEAgdm9pZCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6dXBkYXRlU3RhdGVz
KAogICAgIC8vIEZJWE1FOiB1c2UgW0FWQ2FwdHVyZUF1ZGlvUHJldmlld091dHB1dCB2b2x1bWVd
IGZvciB2b2x1bWUKIH0KIAordm9pZCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkT2JzZXJ2ZXIo
QVZBdWRpb0NhcHR1cmVTb3VyY2U6Ok9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICB7CisgICAg
ICAgIExvY2tIb2xkZXIgbG9jayhtX2xvY2spOworICAgICAgICBtX29ic2VydmVycy5hcHBlbmQo
b2JzZXJ2ZXIpOworICAgIH0KKworICAgIGlmIChtX2lucHV0RGVzY3JpcHRpb24tPm1TYW1wbGVS
YXRlKQorICAgICAgICBvYnNlcnZlci0+cHJlcGFyZShtX2lucHV0RGVzY3JpcHRpb24uZ2V0KCkp
OworfQorCit2b2lkIEFWQXVkaW9DYXB0dXJlU291cmNlOjpyZW1vdmVPYnNlcnZlcihBVkF1ZGlv
Q2FwdHVyZVNvdXJjZTo6T2JzZXJ2ZXIqIG9ic2VydmVyKQoreworICAgIExvY2tIb2xkZXIgbG9j
ayhtX2xvY2spOworICAgIHNpemVfdCBwb3MgPSBtX29ic2VydmVycy5maW5kKG9ic2VydmVyKTsK
KyAgICBpZiAocG9zICE9IG5vdEZvdW5kKQorICAgICAgICBtX29ic2VydmVycy5yZW1vdmUocG9z
KTsKK30KKwogdm9pZCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBDYXB0dXJlU2Vzc2lvbigp
CiB7CiAgICAgUmV0YWluUHRyPEFWQ2FwdHVyZURldmljZUlucHV0VHlwZT4gYXVkaW9JbiA9IGFk
b3B0TlMoW2FsbG9jQVZDYXB0dXJlRGV2aWNlSW5wdXRJbnN0YW5jZSgpIGluaXRXaXRoRGV2aWNl
OmRldmljZSgpIGVycm9yOm5pbF0pOwpAQCAtMTAwLDE0ICsxMjEsNDcgQEAgdm9pZCBBVkF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c2V0dXBDYXB0dXJlUwogICAgIG1fYXVkaW9Db25uZWN0aW9uID0gYWRv
cHROUyhbYXVkaW9PdXRwdXQuZ2V0KCkgY29ubmVjdGlvbldpdGhNZWRpYVR5cGU6QVZNZWRpYVR5
cGVBdWRpb10pOwogfQogCitzdGF0aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiYgYSwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBi
KQoreworICAgIHJldHVybiBhLm1TYW1wbGVSYXRlID09IGIubVNhbXBsZVJhdGUKKyAgICAgICAg
JiYgYS5tRm9ybWF0SUQgPT0gYi5tRm9ybWF0SUQKKyAgICAgICAgJiYgYS5tRm9ybWF0RmxhZ3Mg
PT0gYi5tRm9ybWF0RmxhZ3MKKyAgICAgICAgJiYgYS5tQnl0ZXNQZXJQYWNrZXQgPT0gYi5tQnl0
ZXNQZXJQYWNrZXQKKyAgICAgICAgJiYgYS5tRnJhbWVzUGVyUGFja2V0ID09IGIubUZyYW1lc1Bl
clBhY2tldAorICAgICAgICAmJiBhLm1CeXRlc1BlckZyYW1lID09IGIubUJ5dGVzUGVyRnJhbWUK
KyAgICAgICAgJiYgYS5tQ2hhbm5lbHNQZXJGcmFtZSA9PSBiLm1DaGFubmVsc1BlckZyYW1lCisg
ICAgICAgICYmIGEubUJpdHNQZXJDaGFubmVsID09IGIubUJpdHNQZXJDaGFubmVsOworfQorCitz
dGF0aWMgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYg
YSwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBiKQoreworICAgIHJldHVybiAh
KGEgPT0gYik7Cit9CisKIHZvaWQgQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXRE
aWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNhcHR1cmVPdXRwdXRUeXBlKiwg
Q01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBBVkNhcHR1cmVDb25uZWN0aW9uVHlwZSop
CiB7CisgICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzOworICAgIHsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrKG1fbG9jayk7CisgICAgICAgIGlmIChtX29ic2VydmVycy5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29weVRvVmVjdG9yKG1fb2JzZXJ2ZXJz
LCBvYnNlcnZlcnMpOworICAgIH0KKwogICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0
RGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNhbXBsZUJ1
ZmZlcik7CiAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ0ZSZXRhaW4oZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIG1fYXVkaW9Gb3JtYXREZXNjcmlw
dGlvbiA9IGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGNvbnN0IEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiogc3RyZWFtRGVzY3JpcHRpb24gPSBDTUF1ZGlvRm9ybWF0RGVzY3Jp
cHRpb25HZXRTdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBp
ZiAoKm1faW5wdXREZXNjcmlwdGlvbiAhPSAqc3RyZWFtRGVzY3JpcHRpb24pIHsKKyAgICAgICAg
bV9pbnB1dERlc2NyaXB0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24+KCpzdHJlYW1EZXNjcmlwdGlvbik7CisgICAgICAgIGZvciAoYXV0byYgb2JzZXJ2
ZXIgOiBvYnNlcnZlcnMpCisgICAgICAgICAgICBvYnNlcnZlci0+cHJlcGFyZShtX2lucHV0RGVz
Y3JpcHRpb24uZ2V0KCkpOworICAgIH0KKworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBvYnNl
cnZlcnMpCisgICAgICAgIG9ic2VydmVyLT5wcm9jZXNzKGZvcm1hdERlc2NyaXB0aW9uLCBzYW1w
bGVCdWZmZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZD
YXB0dXJlRGV2aWNlTWFuYWdlci5tbQkocmV2aXNpb24gMTg5ODc2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMSBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgogCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKIAotI2ltcG9ydCAiQVZDYXB0dXJlRGV2aWNl
TWFuYWdlci5oIgotCisjaW1wb3J0ICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCiAjaW1wb3J0ICJB
VkF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgogI2ltcG9ydCAiQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCIK
ICNpbXBvcnQgIkFWVmlkZW9DYXB0dXJlU291cmNlLmgiCkBAIC05OSwxMiArOTksMTQgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIFN0cmluZyBtX2NhcHR1cmVEZXZpY2VJRDsKKyAgICBTdHJpbmcg
bV9sb2NhbGl6ZWROYW1lOworICAgIFN0cmluZyBtX2dyb3VwSUQ7CiAKICAgICBTdHJpbmcgbV9h
dWRpb1NvdXJjZUlkOwotICAgIFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4gbV9hdWRpb1Nv
dXJjZTsKKyAgICBSZWZQdHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IG1fYXVkaW9BVk1lZGlhQ2Fw
dHVyZVNvdXJjZTsKIAogICAgIFN0cmluZyBtX3ZpZGVvU291cmNlSWQ7Ci0gICAgUmVmUHRyPEFW
TWVkaWFDYXB0dXJlU291cmNlPiBtX3ZpZGVvU291cmNlOworICAgIFJlZlB0cjxBVk1lZGlhQ2Fw
dHVyZVNvdXJjZT4gbV92aWRlb0FWTWVkaWFDYXB0dXJlU291cmNlOwogCiAgICAgYm9vbCBtX2Vu
YWJsZWQ7CiB9OwpAQCAtMTU4LDYgKzE2MCw5IEBAIHN0YXRpYyB2b2lkIHJlZnJlc2hDYXB0dXJl
RGV2aWNlTGlzdCgpCiAgICAgICAgICAgICBpZiAoW2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRp
YVR5cGVWaWRlb10gfHwgW2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVNdXhlZF0pCiAg
ICAgICAgICAgICAgICAgc291cmNlLm1fdmlkZW9Tb3VyY2VJZCA9IGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKTsKIAorICAgICAgICAgICAgc291cmNlLm1fZ3JvdXBJRCA9IGNyZWF0ZUNhbm9u
aWNhbFVVSURTdHJpbmcoKTsKKyAgICAgICAgICAgIHNvdXJjZS5tX2xvY2FsaXplZE5hbWUgPSBk
ZXZpY2UubG9jYWxpemVkTmFtZTsKKwogICAgICAgICAgICAgZGV2aWNlcy5hcHBlbmQoc291cmNl
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI1OCw3ICsyNjMsNyBAQCBib29sIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXI6OnNlc3Npb25TdXBwCiB7CiAgICAgc2l6ZV90IGNvbnN0cmFpbnQgPSB2YWxp
ZENvbnN0cmFpbnROYW1lcygpLmZpbmQobmFtZSk7CiAgICAgaWYgKGNvbnN0cmFpbnQgPT0gbm90
Rm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
CiAgICAgc3dpdGNoIChjb25zdHJhaW50KSB7CiAgICAgY2FzZSBXaWR0aDoKQEAgLTMyMiwyMCAr
MzI3LDE3IEBAIFZlY3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gQVZDYXB0dXIKICAgICAg
ICAgcmV0dXJuIHNvdXJjZXNJbmZvOwogCiAgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZp
Y2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKLSAgICBzaXplX3QgY291bnQgPSBkZXZpY2VzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
QVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlID0gW0FWQ2FwdHVyZURldmljZSBkZXZpY2VXaXRo
VW5pcXVlSUQ6ZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRF07Ci0gICAgICAgIEFTU0VSVChk
ZXZpY2UpOworICAgIGZvciAoYXV0byBjYXB0dXJlRGV2aWNlIDogZGV2aWNlcykgewogCi0gICAg
ICAgIGlmICghZGV2aWNlc1tpXS5tX2VuYWJsZWQpCisgICAgICAgIGlmICghY2FwdHVyZURldmlj
ZS5tX2VuYWJsZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gRklYTUU6IENo
YW5nZSBncm91cElEIGZyb20gbG9jYWxpemVkTmFtZSB0byBzb21ldGhpbmcgbW9yZSBtZWFuaW5n
ZnVsCi0gICAgICAgIGlmIChkZXZpY2VzW2ldLm1fdmlkZW9Tb3VyY2UpCi0gICAgICAgICAgICBz
b3VyY2VzSW5mby5hcHBlbmQoVHJhY2tTb3VyY2VJbmZvOjpjcmVhdGUoZGV2aWNlc1tpXS5tX3Zp
ZGVvU291cmNlSWQsIFRyYWNrU291cmNlSW5mbzo6VmlkZW8sIGRldmljZS5sb2NhbGl6ZWROYW1l
LCBkZXZpY2UubG9jYWxpemVkTmFtZSwgZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRCkpOwot
ICAgICAgICBpZiAoZGV2aWNlc1tpXS5tX2F1ZGlvU291cmNlKQotICAgICAgICAgICAgc291cmNl
c0luZm8uYXBwZW5kKFRyYWNrU291cmNlSW5mbzo6Y3JlYXRlKGRldmljZXNbaV0ubV9hdWRpb1Nv
dXJjZUlkLCBUcmFja1NvdXJjZUluZm86OkF1ZGlvLCBkZXZpY2UubG9jYWxpemVkTmFtZSwgZGV2
aWNlLmxvY2FsaXplZE5hbWUsIGRldmljZXNbaV0ubV9jYXB0dXJlRGV2aWNlSUQpKTsKKworICAg
ICAgICBpZiAoIWNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHNvdXJjZXNJbmZvLmFwcGVuZChUcmFja1NvdXJjZUluZm86OmNyZWF0ZShjYXB0dXJl
RGV2aWNlLm1fdmlkZW9Tb3VyY2VJZCwgVHJhY2tTb3VyY2VJbmZvOjpWaWRlbywgY2FwdHVyZURl
dmljZS5tX2xvY2FsaXplZE5hbWUsIGNhcHR1cmVEZXZpY2UubV9ncm91cElELCBjYXB0dXJlRGV2
aWNlLm1fY2FwdHVyZURldmljZUlEKSk7CisgICAgICAgIGlmICghY2FwdHVyZURldmljZS5tX2F1
ZGlvU291cmNlSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc291cmNlc0luZm8uYXBwZW5kKFRy
YWNrU291cmNlSW5mbzo6Y3JlYXRlKGNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLCBUcmFj
a1NvdXJjZUluZm86OkF1ZGlvLCBjYXB0dXJlRGV2aWNlLm1fbG9jYWxpemVkTmFtZSwgY2FwdHVy
ZURldmljZS5tX2dyb3VwSUQsIGNhcHR1cmVEZXZpY2UubV9jYXB0dXJlRGV2aWNlSUQpKTsKICAg
ICB9Ci0gICAgCisKICAgICBMT0coTWVkaWEsICJBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRT
b3VyY2VzSW5mbyglcCksIGZvdW5kICVkIGFjdGl2ZSBkZXZpY2VzIiwgdGhpcywgc291cmNlc0lu
Zm8uc2l6ZSgpKTsKIAogICAgIHJldHVybiBzb3VyY2VzSW5mbzsKQEAgLTM1Miw2ICszNTQsOCBA
QCBib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZlcmlmeUNvbnN0CiAgICAgVmVjdG9yPE1l
ZGlhQ29uc3RyYWludD4gbWFuZGF0b3J5Q29uc3RyYWludHM7CiAgICAgY29uc3RyYWludHMtPmdl
dE1hbmRhdG9yeUNvbnN0cmFpbnRzKG1hbmRhdG9yeUNvbnN0cmFpbnRzKTsKICAgICBpZiAobWFu
ZGF0b3J5Q29uc3RyYWludHMuc2l6ZSgpKSB7CisKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgbWV0
aG9kIHNob3VsZCB0YWtlIGFuIEFWQ2FwdHVyZURldmljZSBhbmQgdXNlIGl0cyBBVkNhcHR1cmVT
ZXNzaW9uIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLgogICAgICAgICBSZXRhaW5QdHI8
QVZDYXB0dXJlU2Vzc2lvblR5cGU+IHNlc3Npb24gPSBhZG9wdE5TKFthbGxvY0FWQ2FwdHVyZVNl
c3Npb25JbnN0YW5jZSgpIGluaXRdKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YW5kYXRvcnlDb25zdHJhaW50cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTWVk
aWFDb25zdHJhaW50JiBjb25zdHJhaW50ID0gbWFuZGF0b3J5Q29uc3RyYWludHNbaV07CkBAIC0z
NjEsMTkgKzM2NSw2IEBAIGJvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3QK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBWZWN0b3I8TWVkaWFD
b25zdHJhaW50PiBvcHRpb25hbENvbnN0cmFpbnRzOwotICAgIGNvbnN0cmFpbnRzLT5nZXRPcHRp
b25hbENvbnN0cmFpbnRzKG9wdGlvbmFsQ29uc3RyYWludHMpOwotICAgIGlmICghb3B0aW9uYWxD
b25zdHJhaW50cy5zaXplKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvcHRpb25hbENvbnN0cmFpbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWludCA9IG9wdGlvbmFsQ29uc3RyYWludHNb
aV07Ci0gICAgICAgIGlmICghaXNWYWxpZENvbnN0cmFpbnQodHlwZSwgY29uc3RyYWludC5tX25h
bWUpKSB7Ci0gICAgICAgICAgICBpbnZhbGlkQ29uc3RyYWludCA9IGNvbnN0cmFpbnQubV9uYW1l
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0zOTIsMjggKzM4MywzMCBAQCBWZWN0b3I8UmVmUHRyPFJlYWx0aW1l
TWVkaWFTb3VyY2U+PiBBVkNhCiAgICAgICAgIH0KICAgICB9IHNvcnRCYXNlZE9mZkZpdG5lc3NT
Y29yZTsKIAotICAgIGZvciAoYXV0byYgY2FwdHVyZURldmljZSA6IGNhcHR1cmVEZXZpY2VMaXN0
KCkpIHsKKyAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRldmljZXMgPSBjYXB0dXJlRGV2aWNl
TGlzdCgpOworCisgICAgZm9yIChhdXRvJiBjYXB0dXJlRGV2aWNlIDogZGV2aWNlcykgewogICAg
ICAgICBpZiAoIWNhcHR1cmVEZXZpY2UubV9lbmFibGVkKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIHRoZSBjb25zdHJhaW50cyB3aGVuIGNob29z
aW5nIGFtb25nIG11bHRpcGxlIGRldmljZXMuIEZvciBub3cganVzdCBzZWxlY3QgdGhlIGZpcnN0
IGF2YWlsYWJsZQogICAgICAgICAvLyBkZXZpY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuCiAg
ICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvICYmICFjYXB0dXJl
RGV2aWNlLm1fYXVkaW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmICghY2Fw
dHVyZURldmljZS5tX2F1ZGlvU291cmNlKSB7CisgICAgICAgICAgICBpZiAoIWNhcHR1cmVEZXZp
Y2UubV9hdWRpb0FWTWVkaWFDYXB0dXJlU291cmNlKSB7CiAgICAgICAgICAgICAgICAgQVZDYXB0
dXJlRGV2aWNlVHlwZSAqZGV2aWNlID0gW0FWQ2FwdHVyZURldmljZSBkZXZpY2VXaXRoVW5pcXVl
SUQ6Y2FwdHVyZURldmljZS5tX2NhcHR1cmVEZXZpY2VJRF07CiAgICAgICAgICAgICAgICAgQVNT
RVJUKGRldmljZSk7Ci0gICAgICAgICAgICAgICAgY2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNl
ID0gQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV9h
dWRpb1NvdXJjZUlkLCBjb25zdHJhaW50cyk7CisgICAgICAgICAgICAgICAgY2FwdHVyZURldmlj
ZS5tX2F1ZGlvQVZNZWRpYUNhcHR1cmVTb3VyY2UgPSBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3Jl
YXRlKGRldmljZSwgY2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNlSWQsIGNvbnN0cmFpbnRzKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJlc3RTb3VyY2VzTGlzdC5hcHBlbmQoY2FwdHVy
ZURldmljZS5tX2F1ZGlvU291cmNlKTsKKyAgICAgICAgICAgIGJlc3RTb3VyY2VzTGlzdC5hcHBl
bmQoY2FwdHVyZURldmljZS5tX2F1ZGlvQVZNZWRpYUNhcHR1cmVTb3VyY2UpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8gJiYgIWNh
cHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYg
KCFjYXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2UpIHsKKyAgICAgICAgICAgIGlmICghY2FwdHVy
ZURldmljZS5tX3ZpZGVvQVZNZWRpYUNhcHR1cmVTb3VyY2UpIHsKICAgICAgICAgICAgICAgICBB
VkNhcHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBbQVZDYXB0dXJlRGV2aWNlIGRldmljZVdpdGhV
bmlxdWVJRDpjYXB0dXJlRGV2aWNlLm1fY2FwdHVyZURldmljZUlEXTsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoZGV2aWNlKTsKLSAgICAgICAgICAgICAgICBjYXB0dXJlRGV2aWNlLm1fdmlkZW9T
b3VyY2UgPSBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgY2FwdHVyZURldmlj
ZS5tX3ZpZGVvU291cmNlSWQsIGNvbnN0cmFpbnRzKTsKKyAgICAgICAgICAgICAgICBjYXB0dXJl
RGV2aWNlLm1fdmlkZW9BVk1lZGlhQ2FwdHVyZVNvdXJjZSA9IEFWVmlkZW9DYXB0dXJlU291cmNl
OjpjcmVhdGUoZGV2aWNlLCBjYXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2VJZCwgY29uc3RyYWlu
dHMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYmVzdFNvdXJjZXNMaXN0LmFwcGVuZChj
YXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2UpOworICAgICAgICAgICAgYmVzdFNvdXJjZXNMaXN0
LmFwcGVuZChjYXB0dXJlRGV2aWNlLm1fdmlkZW9BVk1lZGlhQ2FwdHVyZVNvdXJjZSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgc3RkOjpzb3J0KGJlc3RTb3VyY2VzTGlzdC5iZWdpbigpLCBiZXN0
U291cmNlc0xpc3QuZW5kKCksIHNvcnRCYXNlZE9mZkZpdG5lc3NTY29yZSk7CkBAIC00NDIsMTIg
KzQzNSwxNCBAQCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gQVZDYXB0dXJlRGV2CiAgICAg
ICAgIEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSA9IFtBVkNhcHR1cmVEZXZpY2UgZGV2aWNl
V2l0aFVuaXF1ZUlEOmNhcHR1cmVEZXZpY2UubV9jYXB0dXJlRGV2aWNlSURdOwogICAgICAgICBB
U1NFUlQoZGV2aWNlKTsKICAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6QXVkaW8gJiYgIWNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgY2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNlID0gQVZBdWRpb0NhcHR1
cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLCBj
b25zdHJhaW50cyk7Ci0gICAgICAgICAgICByZXR1cm4gY2FwdHVyZURldmljZS5tX2F1ZGlvU291
cmNlOworICAgICAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1fYXVkaW9BVk1lZGlhQ2FwdHVy
ZVNvdXJjZSkKKyAgICAgICAgICAgICAgICBjYXB0dXJlRGV2aWNlLm1fYXVkaW9BVk1lZGlhQ2Fw
dHVyZVNvdXJjZSA9IEFWQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoZGV2aWNlLCBjYXB0dXJl
RGV2aWNlLm1fYXVkaW9Tb3VyY2VJZCwgY29uc3RyYWludHMpOworICAgICAgICAgICAgcmV0dXJu
IGNhcHR1cmVEZXZpY2UubV9hdWRpb0FWTWVkaWFDYXB0dXJlU291cmNlOwogICAgICAgICB9CiAg
ICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvICYmICFj
YXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNh
cHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZSA9IEFWVmlkZW9DYXB0dXJlU291cmNlOjpjcmVhdGUo
ZGV2aWNlLCBjYXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2VJZCwgY29uc3RyYWludHMpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZTsKKyAgICAgICAgICAg
IGlmICghY2FwdHVyZURldmljZS5tX3ZpZGVvQVZNZWRpYUNhcHR1cmVTb3VyY2UpCisgICAgICAg
ICAgICAgICAgY2FwdHVyZURldmljZS5tX3ZpZGVvQVZNZWRpYUNhcHR1cmVTb3VyY2UgPSBBVlZp
ZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgY2FwdHVyZURldmljZS5tX3ZpZGVvU291
cmNlSWQsIGNvbnN0cmFpbnRzKTsKKyAgICAgICAgICAgIHJldHVybiBjYXB0dXJlRGV2aWNlLm1f
dmlkZW9BVk1lZGlhQ2FwdHVyZVNvdXJjZTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oCShyZXZpc2lvbiAxODk4NzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CiAKIE9CSkNfQ0xBU1MgQVZDYXB0dXJlQXVkaW9EYXRhT3V0cHV0OwogT0JKQ19DTEFTUyBB
VkNhcHR1cmVDb25uZWN0aW9uOwpAQCAtNTMsMTMgKzU0LDEzIEBAIHB1YmxpYzoKICAgICAKICAg
ICBBVkNhcHR1cmVTZXNzaW9uICpzZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uLmdl
dCgpOyB9CiAKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOworICAgIHZv
aWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsKKwogcHJvdGVjdGVkOgogICAgIEFWTWVk
aWFDYXB0dXJlU291cmNlKEFWQ2FwdHVyZURldmljZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOwog
Ci0gICAgdmlydHVhbCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzJiBzdGF0ZXMoKSBv
dmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsKKyAgICBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzJiBzdGF0ZXMoKSBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgdm9pZCBzZXR1cENhcHR1cmVTZXNzaW9uKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVTdGF0ZXMoKSA9IDA7CkBAIC02NywyMiArNjgsMjQgQEAgcHJvdGVjdGVkOgogICAg
IEFWQ2FwdHVyZURldmljZSAqZGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2UuZ2V0KCk7
IH0KICAgICBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzKiBjdXJyZW50U3RhdGVzKCkgeyByZXR1
cm4gJm1fY3VycmVudFN0YXRlczsgfQogICAgIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRz
KCkgeyByZXR1cm4gbV9jb25zdHJhaW50cy5nZXQoKTsgfQotICAgIENNU2FtcGxlQnVmZmVyUmVm
IGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNl
dFZpZGVvU2FtcGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0Kik7CiAg
ICAgdm9pZCBzZXRBdWRpb1NhbXBsZUJ1ZmZlckRlbGVnYXRlKEFWQ2FwdHVyZUF1ZGlvRGF0YU91
dHB1dCopOwotICAgIAotICAgIHZvaWQgc2V0QnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIGJ1ZmZl
cikgeyBtX2J1ZmZlciA9IGJ1ZmZlcjsgfQogCisgICAgdm9pZCBzY2hlZHVsZURlZmVycmVkVGFz
ayhzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KTsKKworICAgIHZvaWQgc3RhdGVzRGlkQ2hhbmdlZCgp
IHsgfQorICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldHVwU2Vzc2lvbigpOworICAgIFdlYWtQ
dHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQ
dHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCisgICAgV2Vha1B0ckZhY3Rvcnk8QVZNZWRp
YUNhcHR1cmVTb3VyY2U+IG1fd2Vha1B0ckZhY3Rvcnk7CiAgICAgUmV0YWluUHRyPFdlYkNvcmVB
Vk1lZGlhQ2FwdHVyZVNvdXJjZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKICAgICBSZWZQdHI8
TWVkaWFDb25zdHJhaW50cz4gbV9jb25zdHJhaW50czsKICAgICBSZWFsdGltZU1lZGlhU291cmNl
U3RhdGVzIG1fY3VycmVudFN0YXRlczsKICAgICBSZXRhaW5QdHI8QVZDYXB0dXJlU2Vzc2lvbj4g
bV9zZXNzaW9uOwogICAgIFJldGFpblB0cjxBVkNhcHR1cmVEZXZpY2U+IG1fZGV2aWNlOwotICAg
IFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9idWZmZXI7CiAgICAgCiAgICAgYm9vbCBt
X2lzUnVubmluZzsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLm1tCShyZXZp
c2lvbiAxODk4NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
QVZNZWRpYUNhcHR1cmVTb3VyY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMTEgKzI0LDExIEBACiAg
Ki8KIAogI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBVk1lZGlhQ2FwdHVyZVNvdXJjZS5o
IgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKIAotI2lt
cG9ydCAiQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCIKLQorI2ltcG9ydCAiQXVkaW9Tb3VyY2VQcm92
aWRlci5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5o
IgogI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlcy5oIgpAQCAtMTIzLDEyICsxMjMs
MTMgQEAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFWaWRlb0NhcHR1cgogCiBBVk1lZGlh
Q2FwdHVyZVNvdXJjZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2UoQVZDYXB0dXJlRGV2aWNlVHlwZSog
ZGV2aWNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBl
IHR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCiAgICAgOiBS
ZWFsdGltZU1lZGlhU291cmNlKGlkLCB0eXBlLCBlbXB0eVN0cmluZygpKQorICAgICwgbV93ZWFr
UHRyRmFjdG9yeSh0aGlzKQogICAgICwgbV9vYmpjT2JzZXJ2ZXIoYWRvcHROUyhbW1dlYkNvcmVB
Vk1lZGlhQ2FwdHVyZVNvdXJjZU9ic2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNd
KSkKICAgICAsIG1fY29uc3RyYWludHMoY29uc3RyYWludHMpCiAgICAgLCBtX2RldmljZShkZXZp
Y2UpCiAgICAgLCBtX2lzUnVubmluZyhmYWxzZSkKIHsKLSAgICBzZXROYW1lKFtkZXZpY2UgbG9j
YWxpemVkTmFtZV0pOworICAgIHNldE5hbWUoZGV2aWNlLmxvY2FsaXplZE5hbWUpOwogICAgIG1f
Y3VycmVudFN0YXRlcy5zZXRTb3VyY2VUeXBlKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VmlkZW8gPyBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpDYW1lcmEgOiBSZWFsdGltZU1lZGlh
U291cmNlU3RhdGVzOjpNaWNyb3Bob25lKTsKIH0KIApAQCAtMTk1LDYgKzE5NiwxOSBAQCB2b2lk
IEFWTWVkaWFDYXB0dXJlU291cmNlOjpzZXRBdWRpb1NhbXBsCiAgICAgW2F1ZGlvT3V0cHV0IHNl
dFNhbXBsZUJ1ZmZlckRlbGVnYXRlOm1fb2JqY09ic2VydmVyLmdldCgpIHF1ZXVlOmdsb2JhQXVk
aW9DYXB0dXJlU2VyaWFsUXVldWUoKV07CiB9CiAKK3ZvaWQgQVZNZWRpYUNhcHR1cmVTb3VyY2U6
OnNjaGVkdWxlRGVmZXJyZWRUYXNrKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCit7
CisgICAgQVNTRVJUKGZ1bmN0aW9uKTsKKworICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFr
UHRyKCk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3dl
YWtUaGlzLCBmdW5jdGlvbl0geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJj
ZU9ic2VydmVyCkBAIC0yMzIsMTIgKzI0Niw3IEBAIC0gKHZvaWQpY2FwdHVyZU91dHB1dDooQVZD
YXB0dXJlT3V0cHV0VHkKICAgICBpZiAoIW1fY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAot
ICAgIENGUmV0YWluKHNhbXBsZUJ1ZmZlcik7Ci0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hf
Z2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgaWYgKG1fY2FsbGJhY2spCi0gICAgICAgICAg
ICBtX2NhbGxiYWNrLT5jYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5l
Y3Rpb24oY2FwdHVyZU91dHB1dCwgc2FtcGxlQnVmZmVyLCBjb25uZWN0aW9uKTsKLSAgICAgICAg
Q0ZSZWxlYXNlKHNhbXBsZUJ1ZmZlcik7Ci0gICAgfSk7CisgICAgbV9jYWxsYmFjay0+Y2FwdHVy
ZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKGNhcHR1cmVPdXRwdXQs
IHNhbXBsZUJ1ZmZlciwgY29ubmVjdGlvbik7CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVv
Q2FwdHVyZVNvdXJjZS5oCShyZXZpc2lvbiAxODk4NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMywzNiArMzMsNDYgQEAKIE9CSkNfQ0xBU1MgQVZDYXB0dXJlVmlkZW9QcmV2aWV3TGF5ZXI7
CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24gKkNNRm9y
bWF0RGVzY3JpcHRpb25SZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAq
Q01TYW1wbGVCdWZmZXJSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRmxvYXRS
ZWN0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCiBjbGFzcyBBVlZpZGVvQ2FwdHVyZVNvdXJj
ZSA6IHB1YmxpYyBBVk1lZGlhQ2FwdHVyZVNvdXJjZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4gY3JlYXRlKEFWQ2FwdHVyZURldmljZSosIGNvbnN0
IEF0b21pY1N0cmluZyYsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOwogCi0gICAgdmly
dHVhbCBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0aWVz
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNhcHR1cmVPdXRwdXREaWRPdXRw
dXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNhcHR1cmVPdXRwdXQqLCBDTVNhbXBsZUJ1
ZmZlclJlZiwgQVZDYXB0dXJlQ29ubmVjdGlvbiopIG92ZXJyaWRlOwotICAgIAotICAgIHZpcnR1
YWwgaW50MzJfdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICB2aXJ0dWFs
IGludDMyX3QgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICBpbnQzMl90
IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIGludDMyX3QgaGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KIAogICAgIEFWQ2FwdHVyZVZpZGVvUHJldmlld0xh
eWVyKiBwcmV2aWV3TGF5ZXIoKSB7IHJldHVybiBtX3ZpZGVvUHJldmlld0xheWVyLmdldCgpOyB9
Ci0gICAgCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgY3VycmVudEZyYW1lU2FtcGxlQnVmZmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHBhaW50Q3VycmVudEZy
YW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBjdXJyZW50RnJhbWVJbWFnZSgpOworCiBwcml2YXRlOgogICAg
IEFWVmlkZW9DYXB0dXJlU291cmNlKEFWQ2FwdHVyZURldmljZSosIGNvbnN0IEF0b21pY1N0cmlu
ZyYsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOwogICAgIHZpcnR1YWwgfkFWVmlkZW9D
YXB0dXJlU291cmNlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0dXBDYXB0dXJlU2Vzc2lvbigp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZXMoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldHVwQ2FwdHVyZVNlc3Npb24oKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVN0
YXRlcygpIG92ZXJyaWRlOworCisgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmls
aXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBhcHBseUNv
bnN0cmFpbnRzKE1lZGlhQ29uc3RyYWludHMqKTsKICAgICBib29sIHNldEZyYW1lUmF0ZUNvbnN0
cmFpbnQoZmxvYXQgbWluRnJhbWVSYXRlLCBmbG9hdCBtYXhGcmFtZVJhdGUpOwogCi0gICAgdm9p
ZCBjYWxjdWxhdGVGcmFtZXJhdGUoQ01TYW1wbGVCdWZmZXJSZWYpOworICAgIGJvb2wgY2FsY3Vs
YXRlRnJhbWVyYXRlKENNU2FtcGxlQnVmZmVyUmVmKTsKKworICAgIHZvaWQgY2FwdHVyZU91dHB1
dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dCosIENN
U2FtcGxlQnVmZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0aW9uKikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwcm9jZXNzTmV3RnJhbWUoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPik7CiAKICAgICBS
ZXRhaW5QdHI8QVZDYXB0dXJlQ29ubmVjdGlvbj4gbV92aWRlb0Nvbm5lY3Rpb247Ci0gICAgUmV0
YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbjsK
ICAgICBSZXRhaW5QdHI8QVZDYXB0dXJlVmlkZW9QcmV2aWV3TGF5ZXI+IG1fdmlkZW9QcmV2aWV3
TGF5ZXI7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKKyAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9sYXN0SW1hZ2U7CiAgICAgVmVjdG9yPEZsb2F0NjQ+IG1f
dmlkZW9GcmFtZVRpbWVTdGFtcHM7CiAgICAgRmxvYXQ2NCBtX2ZyYW1lUmF0ZTsKICAgICBpbnQz
Ml90IG1fd2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCShyZXZpc2lv
biAxODk4NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZW
aWRlb0NhcHR1cmVTb3VyY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMTMgKzI0LDE1IEBA
CiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBVlZpZGVvQ2FwdHVyZVNvdXJj
ZS5oIgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKIAot
I2ltcG9ydCAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIKLQogI2ltcG9ydCAiQVZDYXB0dXJlRGV2
aWNlTWFuYWdlci5oIgogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkludFBvaW50LmgiCisjaW1wb3J0ICJJbnRSZWN0Lmgi
CiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCiAjaW1w
b3J0ICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMTU3LDcgKzE1OSw2IEBAIGJvb2wgQVZWaWRlb0Nh
cHR1cmVTb3VyY2U6OnNldEZyYW1lUmF0ZUMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotTlNMb2coQCJzZXQgZnJhbWUgcmF0ZSB0byAlZiIsIFtiZXN0RnJhbWVSYXRlUmFuZ2UgbWlu
RnJhbWVSYXRlXSk7CiAgICAgTE9HKE1lZGlhLCAiQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnNldEZy
YW1lUmF0ZUNvbnN0cmFpbnQoJXApIC0gc2V0IGZyYW1lIHJhdGUgcmFuZ2UgdG8gJWYuLiVmIiwg
dGhpcywgbWluRnJhbWVSYXRlLCBtYXhGcmFtZVJhdGUpOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMjA5LDI2ICsyMTAsMjkgQEAgdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0dXBDYXB0
dXJlUwogICAgIEFTU0VSVChbc2Vzc2lvbigpIGNhbkFkZElucHV0OnZpZGVvSW4uZ2V0KCldKTsK
ICAgICBpZiAoW3Nlc3Npb24oKSBjYW5BZGRJbnB1dDp2aWRlb0luLmdldCgpXSkKICAgICAgICAg
W3Nlc3Npb24oKSBhZGRJbnB1dDp2aWRlb0luLmdldCgpXTsKLSAgICAKKwogICAgIGlmIChjb25z
dHJhaW50cygpKQogICAgICAgICBhcHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKCkpOwogCiAg
ICAgUmV0YWluUHRyPEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dFR5cGU+IHZpZGVvT3V0cHV0ID0g
YWRvcHROUyhbYWxsb2NBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXRJbnN0YW5jZSgpIGluaXRdKTsK
KyAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBzZXR0aW5nc0RpY3Rpb25hcnkgPSBhZG9wdE5T
KFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6a0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQV0sIGtDVlBpeGVsQnVmZmVy
UGl4ZWxGb3JtYXRUeXBlS2V5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIG5pbF0pOworICAgIFt2aWRlb091dHB1dCBzZXRWaWRlb1Nl
dHRpbmdzOnNldHRpbmdzRGljdGlvbmFyeS5nZXQoKV07CiAgICAgc2V0VmlkZW9TYW1wbGVCdWZm
ZXJEZWxlZ2F0ZSh2aWRlb091dHB1dC5nZXQoKSk7CiAgICAgQVNTRVJUKFtzZXNzaW9uKCkgY2Fu
QWRkT3V0cHV0OnZpZGVvT3V0cHV0LmdldCgpXSk7CiAgICAgaWYgKFtzZXNzaW9uKCkgY2FuQWRk
T3V0cHV0OnZpZGVvT3V0cHV0LmdldCgpXSkKICAgICAgICAgW3Nlc3Npb24oKSBhZGRPdXRwdXQ6
dmlkZW9PdXRwdXQuZ2V0KCldOwotICAgIAorCiAgICAgbV92aWRlb0Nvbm5lY3Rpb24gPSBhZG9w
dE5TKFt2aWRlb091dHB1dC5nZXQoKSBjb25uZWN0aW9uV2l0aE1lZGlhVHlwZTpBVk1lZGlhVHlw
ZVZpZGVvXSk7Ci0gICAgCiAgICAgbV92aWRlb1ByZXZpZXdMYXllciA9IGFkb3B0TlMoW1tBVkNh
cHR1cmVWaWRlb1ByZXZpZXdMYXllciBhbGxvY10gaW5pdFdpdGhTZXNzaW9uOnNlc3Npb24oKV0p
OwogfQogCi12b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYWxjdWxhdGVGcmFtZXJhdGUoQ01T
YW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKQorYm9vbCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6
Y2FsY3VsYXRlRnJhbWVyYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcikKIHsKICAg
ICBDTVRpbWUgc2FtcGxlVGltZSA9IENNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0
YW1wKHNhbXBsZUJ1ZmZlcik7CiAgICAgaWYgKCFDTVRJTUVfSVNfTlVNRVJJQyhzYW1wbGVUaW1l
KSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdDY0
IGZyYW1lVGltZSA9IENNVGltZUdldFNlY29uZHMoc2FtcGxlVGltZSk7CiAgICAgRmxvYXQ2NCBv
bmVTZWNvbmRBZ28gPSBmcmFtZVRpbWUgLSAxOwpAQCAtMjM3LDI1ICsyNDEsODEgQEAgdm9pZCBB
VlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FsY3VsYXRlRnJhbQogICAgIAogICAgIHdoaWxlIChtX3Zp
ZGVvRnJhbWVUaW1lU3RhbXBzWzBdIDwgb25lU2Vjb25kQWdvKQogICAgICAgICBtX3ZpZGVvRnJh
bWVUaW1lU3RhbXBzLnJlbW92ZSgwKTsKLSAgICAKKworICAgIEZsb2F0NjQgZnJhbWVSYXRlID0g
bV9mcmFtZVJhdGU7CiAgICAgbV9mcmFtZVJhdGUgPSAobV9mcmFtZVJhdGUgKyBtX3ZpZGVvRnJh
bWVUaW1lU3RhbXBzLnNpemUoKSkgLyAyOworCisgICAgcmV0dXJuIGZyYW1lUmF0ZSAhPSBtX2Zy
YW1lUmF0ZTsKIH0KLSAgICAKLXZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRw
dXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNhcHR1cmVPdXRwdXRUeXBl
KiwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBBVkNhcHR1cmVDb25uZWN0aW9uVHlw
ZSopCisKK3ZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NOZXdGcmFtZShSZXRhaW5Q
dHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlcikKIHsKLSAgICBDTUZvcm1hdERlc2Ny
aXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNj
cmlwdGlvbihzYW1wbGVCdWZmZXIpOworICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0
RGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNhbXBsZUJ1
ZmZlci5nZXQoKSk7CiAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQ0ZSZXRhaW4oZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIG1fdmlkZW9Gb3JtYXRE
ZXNjcmlwdGlvbiA9IGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGNhbGN1bGF0ZUZy
YW1lcmF0ZShzYW1wbGVCdWZmZXIpOworICAgIGJvb2wgc3RhdGVzQ2hhbmdlZCA9IGZhbHNlOwor
CisgICAgc3RhdGVzQ2hhbmdlZCA9IGNhbGN1bGF0ZUZyYW1lcmF0ZShzYW1wbGVCdWZmZXIuZ2V0
KCkpOworICAgIG1fYnVmZmVyID0gc2FtcGxlQnVmZmVyOworICAgIG1fbGFzdEltYWdlID0gbnVs
bHB0cjsKIAogICAgIENNVmlkZW9EaW1lbnNpb25zIGRpbWVuc2lvbnMgPSBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25HZXREaW1lbnNpb25zKGZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBtX3dpZHRo
ID0gZGltZW5zaW9ucy53aWR0aDsKLSAgICBtX2hlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0Owot
ICAgIAotICAgIHNldEJ1ZmZlcihzYW1wbGVCdWZmZXIpOworICAgIGlmIChkaW1lbnNpb25zLndp
ZHRoICE9IG1fd2lkdGggfHwgZGltZW5zaW9ucy5oZWlnaHQgIT0gbV9oZWlnaHQpIHsKKyAgICAg
ICAgbV93aWR0aCA9IGRpbWVuc2lvbnMud2lkdGg7CisgICAgICAgIG1faGVpZ2h0ID0gZGltZW5z
aW9ucy5oZWlnaHQ7CisgICAgICAgIHN0YXRlc0NoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAg
IGlmIChzdGF0ZXNDaGFuZ2VkKQorICAgICAgICB0aGlzLT5zdGF0ZXNEaWRDaGFuZ2VkKCk7Cit9
CisKK3ZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1w
bGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNhcHR1cmVPdXRwdXRUeXBlKiwgQ01TYW1wbGVCdWZm
ZXJSZWYgc2FtcGxlQnVmZmVyLCBBVkNhcHR1cmVDb25uZWN0aW9uVHlwZSopCit7CisgICAgUmV0
YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBidWZmZXIgPSBzYW1wbGVCdWZmZXI7CisKKyAgICBz
Y2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywgYnVmZmVyXSB7CisgICAgICAgIHRoaXMtPnByb2Nl
c3NOZXdGcmFtZShidWZmZXIpOworICAgIH0pOworfQorCitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmN1cnJlbnRGcmFtZUltYWdlKCkKK3sKKyAgICBpZiAobV9s
YXN0SW1hZ2UpCisgICAgICAgIHJldHVybiBtX2xhc3RJbWFnZTsKKworICAgIGlmICghbV9idWZm
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ1ZJbWFnZUJ1ZmZlclJlZiBpbWFn
ZUJ1ZmZlciA9IHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0
SW1hZ2VCdWZmZXIobV9idWZmZXIuZ2V0KCkpKTsKKyAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VB
ZGRyZXNzKGltYWdlQnVmZmVyLCAwKTsKKworICAgIHZvaWQgKmJhc2VBZGRyZXNzID0gQ1ZQaXhl
bEJ1ZmZlckdldEJhc2VBZGRyZXNzKGltYWdlQnVmZmVyKTsKKyAgICBzaXplX3QgYnl0ZXNQZXJS
b3cgPSBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJSb3coaW1hZ2VCdWZmZXIpOworICAgIHNpemVf
dCB3aWR0aCA9IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZUJ1ZmZlcik7CisgICAgc2l6ZV90
IGhlaWdodCA9IENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2VCdWZmZXIpOworCisgICAgc3Rh
dGljIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoTlVMTCwgYmFzZUFkZHJlc3MsIGJ5
dGVzUGVyUm93ICogaGVpZ2h0LCBOVUxMKSk7CisgICAgbV9sYXN0SW1hZ2UgPSBhZG9wdENGKENH
SW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgOCwgMzIsIGJ5dGVzUGVyUm93LCBkZXZpY2VSR0JT
cGFjZSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZEZpcnN0LCBwcm92aWRlci5nZXQoKSwgTlVMTCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50
RGVmYXVsdCkpOworCisgICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKGltYWdlQnVm
ZmVyLCAwKTsKKworICAgIHJldHVybiBtX2xhc3RJbWFnZTsKK30KKwordm9pZCBBVlZpZGVvQ2Fw
dHVyZVNvdXJjZTo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGNvbnRleHQucGFpbnRp
bmdEaXNhYmxlZCgpIHx8ICFjdXJyZW50RnJhbWVJbWFnZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAg
Y29udGV4dC50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7Cisg
ICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0LnNldEltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkxvdyk7CisgICAgSW50UmVjdCBwYWlu
dFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIENH
UmVjdE1ha2UoMCwgMCwgcGFpbnRSZWN0LndpZHRoKCksIHBhaW50UmVjdC5oZWlnaHQoKSksIG1f
bGFzdEltYWdlLmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261335</attachid>
            <date>2015-09-16 16:07:55 -0700</date>
            <delta_ts>2015-09-17 08:39:09 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>av_capture_source_patch_1.txt</filename>
            <type>text/plain</type>
            <size>28997</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE1LTA5LTE2ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMgTWVkaWFTdHJl
YW1dIENsZWFudXAgY2FwdHVyZSBzb3VyY2UgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5jcHA6IFNvZnQtbGluayBDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uLAorICAgICAgICAgIENNU2FtcGxlQnVmZmVyR2V0QXVkaW9CdWZmZXJMaXN0V2l0
aFJldGFpbmVkQmxvY2tCdWZmZXIsIGFuZCBDTVNhbXBsZUJ1ZmZlckdldE51bVNhbXBsZXMuCisg
ICAgICAgICogcGxhdGZvcm0vY2YvQ29yZU1lZGlhU29mdExpbmsuaDoKKworICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oOgorICAgICAgICAo
V2ViQ29yZTo6QVZBdWRpb0NhcHR1cmVTb3VyY2U6Ok9ic2VydmVyOjp+T2JzZXJ2ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9DYXB0dXJlU291cmNlOjpBVkF1ZGlvQ2FwdHVyZVNv
dXJjZSk6IEluaXRpYWxpemUgbV9pbnB1dERlc2NyaXB0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
QVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcyk6IDAgLT4gbnVsbHB0ci4KKyAgICAg
ICAgKFdlYkNvcmU6OkFWQXVkaW9DYXB0dXJlU291cmNlOjphZGRPYnNlcnZlcik6IE5ldywgYWRk
IGFuIG9ic2VydmVyIGFuZCB0ZWxsIGl0IHRvIHByZXBhcmUuCisgICAgICAgIChXZWJDb3JlOjpB
VkF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlT2JzZXJ2ZXIpOiBOZXcuCisgICAgICAgIChXZWJD
b3JlOjpvcGVyYXRvcj09KTogQ29tcGFyZSBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkFWQXVkaW9D
YXB0dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5l
Y3Rpb24pOiBDYWxsIAorICAgICAgICAgIG9ic2VydmVyLT5wcmVwYXJlIHdoZW4gcGFzc2VkIGEg
bmV3IHN0cmVhbSBkZXNjcmlwdGlvbiwgY2FsbCBvYnNlcnZlci0+cHJvY2Vzcy4KKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6cmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KTogU2V0IG1fZ3JvdXBJ
RCBhbmQgbV9sb2NhbGl6ZWROYW1lLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludCk6IEludmFsaWQgY29uc3RyYWludCBu
YW1lcyBzaG91bGQKKyAgICAgICAgICBiZSBpZ25vcmVkLCBzbyByZXR1cm4gdHJ1ZSB3aGVuIHBh
c3NlZCBvbmUuCisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRT
b3VyY2VzSW5mbyk6IFRoaXMganVzdCBkaWRuJ3Qgd29yaywgZml4IGl0LgorICAgICAgICAoV2Vi
Q29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5
cGUpOiBPcHRpb25hbCBjb25zdHJhaW50cyBhcmUKKyAgICAgICAgICBvcHRpb25hbCBzbyB0aGV5
IGRvbid0IG5lZWQgdG8gYmUgdmFsaWRhdGVkLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3RyYWludHMpOiBtX2F1ZGlv
U291cmNlIC0+IG1fYXVkaW9BVk1lZGlhQ2FwdHVyZVNvdXJjZSwKKyAgICAgICAgICBtX3ZpZGVv
U291cmNlIC0+IG1fdmlkZW9BVk1lZGlhQ2FwdHVyZVNvdXJjZS4KKyAgICAgICAgKFdlYkNvcmU6
OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNvdXJjZVdpdGhVSUQpOiBEaXR0by4KKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2U6OnNlc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2U6OmRldmljZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6Y3VycmVudFN0YXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6Y29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6
QVZNZWRpYUNhcHR1cmVTb3VyY2U6OnN0YXRlc0RpZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2U6OmNyZWF0ZVdlYWtQdHIpOgorICAgICAgICAoV2ViQ29y
ZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2U6OmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6c2V0QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UubW06CisgICAg
ICAgIChXZWJDb3JlOjpBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2Up
OiBJbml0aWxpemUgbV93ZWFrUHRyRmFjdG9yeS4KKyAgICAgICAgKFdlYkNvcmU6OkFWTWVkaWFD
YXB0dXJlU291cmNlOjpzY2hlZHVsZURlZmVycmVkVGFzayk6IE5ldywgY2FsbCBhIGZ1bmN0aW9u
IGFzeW5jaHJvbm91c2x5IG9uCisgICAgICAgICAgdGhlIG1haW4gdGhyZWFkLgorICAgICAgICAo
LVtXZWJDb3JlQVZNZWRpYUNhcHR1cmVTb3VyY2VPYnNlcnZlciBjYXB0dXJlT3V0cHV0OmRpZE91
dHB1dFNhbXBsZUJ1ZmZlcjpmcm9tQ29ubmVjdGlvbjpdKTogRG9uJ3QKKyAgICAgICAgICBkaXNw
YXRjaCBjYWxscyB0byB0aGUgbWFpbiB0aHJlYWQsIGxldCB0aGUgZGVyaXZlZCBjbGFzc2VzIGRv
IHRoYXQgaWYgbmVjZXNzYXJ5LgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0FWVmlkZW9DYXB0dXJlU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVy
ZVNvdXJjZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6
OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJldmll
d0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFWVmlkZW9DYXB0dXJlU291cmNlOjpjdXJyZW50
RnJhbWVTYW1wbGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
VlZpZGVvQ2FwdHVyZVNvdXJjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFWVmlkZW9DYXB0dXJl
U291cmNlOjpzZXRGcmFtZVJhdGVDb25zdHJhaW50KTogUmVtb3ZlIHVud2FudGVkIGxvZ2dpbmcu
CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0dXBDYXB0dXJlU2Vz
c2lvbik6IENvbmZpZ3VyZSB0aGUgQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0IHNvCisgICAgICAg
ICAgaXQgZGVsaXZlcnMgMzItYml0IEJHUkEgc2FtcGxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkFW
VmlkZW9DYXB0dXJlU291cmNlOjpjYWxjdWxhdGVGcmFtZXJhdGUpOiBSZXR1cm4gYm9vbCB0byBz
aWduYWwgaWYgdGhlIGZyYW1lIHJhdGUKKyAgICAgICAgICBjaGFuZ2VkLgorICAgICAgICAoV2Vi
Q29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NOZXdGcmFtZSk6IE5ldy4gUHJvY2Vz
cyBzYW1wbGUgYnVmZmVyLCBpbnZhbGlkYXRlIGNhY2hlZAorICAgICAgICAgIGltYWdlLCBzaWdu
YWwgd2hlbiBjaGFyYWN0ZXJpc3RpY3MgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRl
b0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29u
bmVjdGlvbik6IFNjaGVkdWxlCisgICAgICAgICAgY2FsbCB0byBwcm9jZXNzTmV3RnJhbWUgb24g
dGhlIG1haW4gdGhyZWFkIHNvIHdlIGRvIGFsbCB2aWRlbyBwcm9jZXNzaW5nIG9uIG1haW4gdGhy
ZWFkLgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmN1cnJlbnRGcmFt
ZUltYWdlKTogQ3JlYXRlIGFuZCByZXR1cm4gYSBDVkltYWdlQnVmZmVyIG9mIHRoZQorICAgICAg
ICAgIGN1cnJlbnQgdmlkZW8gZnJhbWUuCisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVy
ZVNvdXJjZTo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQpOiBEcmF3IHRoZSBjdXJyZW50IGZy
YW1lIHRvIGEgY29udGV4dC4KKwogMjAxNS0wOS0xNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSB3aW5kb3cuaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
IHJldHVybiBhbiBJREJPcGVuREJSZXF1ZXN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNwcAkocmV2aXNpb24gMTg5ODc2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdl
YkNvcmUsIEMKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVNZWRp
YSwgQ01Gb3JtYXREZXNjcmlwdGlvbkdldEV4dGVuc2lvbnMsIENGRGljdGlvbmFyeVJlZiwgKENN
Rm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzYyksIChkZXNjKSkKIFNPRlRfTElOS19GVU5DVElPTl9G
T1JfU09VUkNFKFdlYkNvcmUsIENvcmVNZWRpYSwgQ01TYW1wbGVCdWZmZXJHZXREYXRhQnVmZmVy
LCBDTUJsb2NrQnVmZmVyUmVmLCAoQ01TYW1wbGVCdWZmZXJSZWYgc2J1ZiksIChzYnVmKSkKIFNP
RlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVNZWRpYSwgQ01TYW1wbGVC
dWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiwgKENNU2Ft
cGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RShXZWJDb3JlLCBDb3JlTWVkaWEsIENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJh
c2ljRGVzY3JpcHRpb24sIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAqLCAoQ01B
dWRpb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGRlc2MpLCAoZGVzYykpCitTT0ZUX0xJTktfRlVOQ1RJ
T05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlTWVkaWEsIENNU2FtcGxlQnVmZmVyR2V0QXVkaW9C
dWZmZXJMaXN0V2l0aFJldGFpbmVkQmxvY2tCdWZmZXIsIE9TU3RhdHVzLCAoQ01TYW1wbGVCdWZm
ZXJSZWYgc2J1Ziwgc2l6ZV90ICpidWZmZXJMaXN0U2l6ZU5lZWRlZE91dCwgQXVkaW9CdWZmZXJM
aXN0ICpidWZmZXJMaXN0T3V0LCBzaXplX3QgYnVmZmVyTGlzdFNpemUsIENGQWxsb2NhdG9yUmVm
IGJidWZTdHJ1Y3RBbGxvY2F0b3IsIENGQWxsb2NhdG9yUmVmIGJidWZNZW1vcnlBbGxvY2F0b3Is
IHVpbnQzMl90IGZsYWdzLCBDTUJsb2NrQnVmZmVyUmVmICpibG9ja0J1ZmZlck91dCksIChzYnVm
LCBidWZmZXJMaXN0U2l6ZU5lZWRlZE91dCwgYnVmZmVyTGlzdE91dCwgYnVmZmVyTGlzdFNpemUs
IGJidWZTdHJ1Y3RBbGxvY2F0b3IsIGJidWZNZW1vcnlBbGxvY2F0b3IsIGZsYWdzLCBibG9ja0J1
ZmZlck91dCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlTWVk
aWEsIENNU2FtcGxlQnVmZmVyR2V0TnVtU2FtcGxlcywgQ01JdGVtQ291bnQsIChDTVNhbXBsZUJ1
ZmZlclJlZiBzYnVmKSwgKHNidWYpKQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2Vi
Q29yZSwgQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm8sIE9TU3Rh
dHVzLCAoQ01TYW1wbGVCdWZmZXJSZWYgc2J1ZiwgQ01JdGVtSW5kZXggc2FtcGxlSW5kZXgsIENN
U2FtcGxlVGltaW5nSW5mbyogdGltaW5nSW5mb091dCksIChzYnVmLCBzYW1wbGVJbmRleCwgdGlt
aW5nSW5mb091dCkpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3Jl
TWVkaWEsIENNVGltZUNvbXBhcmUsIGludDMyX3QsIChDTVRpbWUgdGltZTEsIENNVGltZSB0aW1l
MiksICh0aW1lMSwgdGltZTIpKQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29y
ZSwgQ29yZU1lZGlhLCBDTVRpbWVHZXRTZWNvbmRzLCBGbG9hdDY0LCAoQ01UaW1lIHRpbWUpLCAo
dGltZSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0NvcmVNZWRpYVNv
ZnRMaW5rLmgJKHJldmlzaW9uIDE4OTg3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nm
L0NvcmVNZWRpYVNvZnRMaW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDEyIEBAIFNP
RlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIEMKICNkZWZpbmUgQ01TYW1wbGVC
dWZmZXJHZXREYXRhQnVmZmVyIHNvZnRMaW5rX0NvcmVNZWRpYV9DTVNhbXBsZUJ1ZmZlckdldERh
dGFCdWZmZXIKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVNZWRp
YSwgQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbiwgQ01Gb3JtYXREZXNjcmlwdGlv
blJlZiwgKENNU2FtcGxlQnVmZmVyUmVmIHNidWYpLCAoc2J1ZikpCiAjZGVmaW5lIENNU2FtcGxl
QnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24gc29mdExpbmtfQ29yZU1lZGlhX0NNU2FtcGxlQnVm
ZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24KK1NPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdl
YkNvcmUsIENvcmVNZWRpYSwgQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uICosIChDTUF1ZGlv
Rm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzYyksIChkZXNjKSkKKyNkZWZpbmUgQ01BdWRpb0Zvcm1h
dERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzb2Z0TGlua19Db3JlTWVkaWFf
Q01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbgorU09GVF9M
SU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZl
ckdldEF1ZGlvQnVmZmVyTGlzdFdpdGhSZXRhaW5lZEJsb2NrQnVmZmVyLCBPU1N0YXR1cywgKENN
U2FtcGxlQnVmZmVyUmVmIHNidWYsIHNpemVfdCAqYnVmZmVyTGlzdFNpemVOZWVkZWRPdXQsIEF1
ZGlvQnVmZmVyTGlzdCAqYnVmZmVyTGlzdE91dCwgc2l6ZV90IGJ1ZmZlckxpc3RTaXplLCBDRkFs
bG9jYXRvclJlZiBiYnVmU3RydWN0QWxsb2NhdG9yLCBDRkFsbG9jYXRvclJlZiBiYnVmTWVtb3J5
QWxsb2NhdG9yLCB1aW50MzJfdCBmbGFncywgQ01CbG9ja0J1ZmZlclJlZiAqYmxvY2tCdWZmZXJP
dXQpLCAoc2J1ZiwgYnVmZmVyTGlzdFNpemVOZWVkZWRPdXQsIGJ1ZmZlckxpc3RPdXQsIGJ1ZmZl
ckxpc3RTaXplLCBiYnVmU3RydWN0QWxsb2NhdG9yLCBiYnVmTWVtb3J5QWxsb2NhdG9yLCBmbGFn
cywgYmxvY2tCdWZmZXJPdXQpKQorI2RlZmluZSBDTVNhbXBsZUJ1ZmZlckdldEF1ZGlvQnVmZmVy
TGlzdFdpdGhSZXRhaW5lZEJsb2NrQnVmZmVyIHNvZnRMaW5rX0NvcmVNZWRpYV9DTVNhbXBsZUJ1
ZmZlckdldEF1ZGlvQnVmZmVyTGlzdFdpdGhSZXRhaW5lZEJsb2NrQnVmZmVyCitTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlTWVkaWEsIENNU2FtcGxlQnVmZmVyR2V0
TnVtU2FtcGxlcywgQ01JdGVtQ291bnQsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmKSwgKHNidWYp
KQorI2RlZmluZSBDTVNhbXBsZUJ1ZmZlckdldE51bVNhbXBsZXMgc29mdExpbmtfQ29yZU1lZGlh
X0NNU2FtcGxlQnVmZmVyR2V0TnVtU2FtcGxlcwogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFE
RVIoV2ViQ29yZSwgQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm8s
IE9TU3RhdHVzLCAoQ01TYW1wbGVCdWZmZXJSZWYgc2J1ZiwgQ01JdGVtSW5kZXggc2FtcGxlSW5k
ZXgsIENNU2FtcGxlVGltaW5nSW5mbyogdGltaW5nSW5mb091dCksIChzYnVmLCBzYW1wbGVJbmRl
eCwgdGltaW5nSW5mb091dCkpCiAjZGVmaW5lIENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5n
SW5mbyBzb2Z0TGlua19Db3JlTWVkaWFfQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZv
CiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlTWVkaWEsIENNVGlt
ZUNvbXBhcmUsIGludDMyX3QsIChDTVRpbWUgdGltZTEsIENNVGltZSB0aW1lMiksICh0aW1lMSwg
dGltZTIpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
QXVkaW9DYXB0dXJlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQXVkaW9DYXB0dXJlU291cmNlLmgJKHJldmlzaW9uIDE4OTg3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDI3ICsyOSw0NCBAQAogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCiAKICNpbmNsdWRlICJBVk1lZGlhQ2Fw
dHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKK3R5cGVkZWYgc3RydWN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb247CiB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERl
c2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIGNsYXNzIEFWQXVk
aW9DYXB0dXJlU291cmNlIDogcHVibGljIEFWTWVkaWFDYXB0dXJlU291cmNlIHsKIHB1YmxpYzoK
KworICAgIGNsYXNzIE9ic2VydmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9i
c2VydmVyKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiAqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bnByZXBh
cmUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKENNRm9ybWF0RGVzY3JpcHRp
b25SZWYsIENNU2FtcGxlQnVmZmVyUmVmKSA9IDA7CisgICAgfTsKKwogICAgIHN0YXRpYyBSZWZQ
dHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IGNyZWF0ZShBVkNhcHR1cmVEZXZpY2UqLCBjb25zdCBB
dG9taWNTdHJpbmcmLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKLSAgICAKKworICAg
IHZvaWQgYWRkT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKKyAgICB2b2lkIHJlbW92ZU9ic2VydmVyKE9i
c2VydmVyKik7CisKIHByaXZhdGU6CiAgICAgQVZBdWRpb0NhcHR1cmVTb3VyY2UoQVZDYXB0dXJl
RGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRz
Pik7CiAgICAgdmlydHVhbCB+QVZBdWRpb0NhcHR1cmVTb3VyY2UoKTsKICAgICAKLSAgICB2aXJ0
dWFsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1
dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVm
ZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0aW9uKikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFJlYWx0
aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0
aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVmZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0
aW9uKikgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldHVwQ2FwdHVyZVNlc3Np
b24oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGVzKCkgb3ZlcnJpZGU7
Ci0gICAgICAgIAorICAgIHZvaWQgc2V0dXBDYXB0dXJlU2Vzc2lvbigpIG92ZXJyaWRlOworICAg
IHZvaWQgdXBkYXRlU3RhdGVzKCkgb3ZlcnJpZGU7CisKICAgICBSZXRhaW5QdHI8QVZDYXB0dXJl
Q29ubmVjdGlvbj4gbV9hdWRpb0Nvbm5lY3Rpb247Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbjsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+IG1faW5wdXREZXNjcmlwdGlvbjsKKyAg
ICBWZWN0b3I8T2JzZXJ2ZXIqPiBtX29ic2VydmVyczsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2Uu
bW0JKHJldmlzaW9uIDE4OTg3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw5ICszNCwx
MCBAQAogI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgogI2ltcG9ydCAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXMuaCIKLSNpbXBvcnQgIlNv
ZnRMaW5raW5nLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+Ci0jaW1w
b3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5o
PgorI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAKIHR5
cGVkZWYgQVZDYXB0dXJlQ29ubmVjdGlvbiBBVkNhcHR1cmVDb25uZWN0aW9uVHlwZTsKIHR5cGVk
ZWYgQVZDYXB0dXJlRGV2aWNlIEFWQ2FwdHVyZURldmljZVR5cGU7CkBAIC02OCw2ICs2OSw3IEBA
IEFWQXVkaW9DYXB0dXJlU291cmNlOjpBVkF1ZGlvQ2FwdHVyZVNvdXIKIHsKICAgICBjdXJyZW50
U3RhdGVzKCktPnNldFNvdXJjZUlkKGlkKTsKICAgICBjdXJyZW50U3RhdGVzKCktPnNldFNvdXJj
ZVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6TWljcm9waG9uZSk7CisgICAgbV9pbnB1
dERlc2NyaXB0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24+KCk7CiB9CiAgICAgCiBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkFWQXVkaW9DYXB0dXJlU291
cmNlKCkKQEAgLTc3LDcgKzc5LDcgQEAgQVZBdWRpb0NhcHR1cmVTb3VyY2U6On5BVkF1ZGlvQ2Fw
dHVyZVNvdQogUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IEFWQXVkaW9D
YXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgQVZBdWRp
b0NhcHR1cmVTb3VyY2U6OnVwZGF0ZVN0YXRlcygpCkBAIC04NSw2ICs4NywyNSBAQCB2b2lkIEFW
QXVkaW9DYXB0dXJlU291cmNlOjp1cGRhdGVTdGF0ZXMoCiAgICAgLy8gRklYTUU6IHVzZSBbQVZD
YXB0dXJlQXVkaW9QcmV2aWV3T3V0cHV0IHZvbHVtZV0gZm9yIHZvbHVtZQogfQogCit2b2lkIEFW
QXVkaW9DYXB0dXJlU291cmNlOjphZGRPYnNlcnZlcihBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6T2Jz
ZXJ2ZXIqIG9ic2VydmVyKQoreworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fbG9j
ayk7CisgICAgICAgIG1fb2JzZXJ2ZXJzLmFwcGVuZChvYnNlcnZlcik7CisgICAgfQorCisgICAg
aWYgKG1faW5wdXREZXNjcmlwdGlvbi0+bVNhbXBsZVJhdGUpCisgICAgICAgIG9ic2VydmVyLT5w
cmVwYXJlKG1faW5wdXREZXNjcmlwdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgQVZBdWRpb0NhcHR1
cmVTb3VyY2U6OnJlbW92ZU9ic2VydmVyKEFWQXVkaW9DYXB0dXJlU291cmNlOjpPYnNlcnZlciog
b2JzZXJ2ZXIpCit7CisgICAgTG9ja0hvbGRlciBsb2NrKG1fbG9jayk7CisgICAgc2l6ZV90IHBv
cyA9IG1fb2JzZXJ2ZXJzLmZpbmQob2JzZXJ2ZXIpOworICAgIGlmIChwb3MgIT0gbm90Rm91bmQp
CisgICAgICAgIG1fb2JzZXJ2ZXJzLnJlbW92ZShwb3MpOworfQorCiB2b2lkIEFWQXVkaW9DYXB0
dXJlU291cmNlOjpzZXR1cENhcHR1cmVTZXNzaW9uKCkKIHsKICAgICBSZXRhaW5QdHI8QVZDYXB0
dXJlRGV2aWNlSW5wdXRUeXBlPiBhdWRpb0luID0gYWRvcHROUyhbYWxsb2NBVkNhcHR1cmVEZXZp
Y2VJbnB1dEluc3RhbmNlKCkgaW5pdFdpdGhEZXZpY2U6ZGV2aWNlKCkgZXJyb3I6bmlsXSk7CkBA
IC0xMDAsMTQgKzEyMSw0NyBAQCB2b2lkIEFWQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cENhcHR1
cmVTCiAgICAgbV9hdWRpb0Nvbm5lY3Rpb24gPSBhZG9wdE5TKFthdWRpb091dHB1dC5nZXQoKSBj
b25uZWN0aW9uV2l0aE1lZGlhVHlwZTpBVk1lZGlhVHlwZUF1ZGlvXSk7CiB9CiAKK3N0YXRpYyBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBhLCBjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGIpCit7CisgICAgcmV0dXJuIGEubVNhbXBs
ZVJhdGUgPT0gYi5tU2FtcGxlUmF0ZQorICAgICAgICAmJiBhLm1Gb3JtYXRJRCA9PSBiLm1Gb3Jt
YXRJRAorICAgICAgICAmJiBhLm1Gb3JtYXRGbGFncyA9PSBiLm1Gb3JtYXRGbGFncworICAgICAg
ICAmJiBhLm1CeXRlc1BlclBhY2tldCA9PSBiLm1CeXRlc1BlclBhY2tldAorICAgICAgICAmJiBh
Lm1GcmFtZXNQZXJQYWNrZXQgPT0gYi5tRnJhbWVzUGVyUGFja2V0CisgICAgICAgICYmIGEubUJ5
dGVzUGVyRnJhbWUgPT0gYi5tQnl0ZXNQZXJGcmFtZQorICAgICAgICAmJiBhLm1DaGFubmVsc1Bl
ckZyYW1lID09IGIubUNoYW5uZWxzUGVyRnJhbWUKKyAgICAgICAgJiYgYS5tQml0c1BlckNoYW5u
ZWwgPT0gYi5tQml0c1BlckNoYW5uZWw7Cit9CisKK3N0YXRpYyBib29sIG9wZXJhdG9yIT0oY29u
c3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBhLCBjb25zdCBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24mIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKwogdm9pZCBBVkF1
ZGlvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21D
b25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dFR5cGUqLCBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVC
dWZmZXIsIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlKikKIHsKKyAgICBWZWN0b3I8T2JzZXJ2ZXIq
PiBvYnNlcnZlcnM7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9sb2NrKTsKKyAg
ICAgICAgaWYgKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjb3B5VG9WZWN0b3IobV9vYnNlcnZlcnMsIG9ic2VydmVycyk7CisgICAgfQorCiAg
ICAgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IENNU2FtcGxlQnVm
ZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24oc2FtcGxlQnVmZmVyKTsKICAgICBpZiAoIWZvcm1hdERl
c2NyaXB0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBDRlJldGFpbihmb3JtYXREZXNjcmlw
dGlvbik7Ci0gICAgbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uID0gYWRvcHRDRihmb3JtYXREZXNj
cmlwdGlvbik7CisgICAgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKiBzdHJlYW1E
ZXNjcmlwdGlvbiA9IENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3Jp
cHRpb24oZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmICgqbV9pbnB1dERlc2NyaXB0aW9uICE9
ICpzdHJlYW1EZXNjcmlwdGlvbikgeworICAgICAgICBtX2lucHV0RGVzY3JpcHRpb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbj4oKnN0cmVhbURlc2NyaXB0
aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVycykKKyAgICAgICAg
ICAgIG9ic2VydmVyLT5wcmVwYXJlKG1faW5wdXREZXNjcmlwdGlvbi5nZXQoKSk7CisgICAgfQor
CisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVycykKKyAgICAgICAgb2JzZXJ2ZXIt
PnByb2Nlc3MoZm9ybWF0RGVzY3JpcHRpb24sIHNhbXBsZUJ1ZmZlcik7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCShy
ZXZpc2lvbiAxODk4NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQgKzI0
LDE0IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmgiCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFU
SU9OKQogCi0jaW1wb3J0ICJBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCi0KICNpbXBvcnQgIkFW
QXVkaW9DYXB0dXJlU291cmNlLmgiCiAjaW1wb3J0ICJBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oIgog
I2ltcG9ydCAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKyNpbXBvcnQgIkF1ZGlvU291cmNlUHJv
dmlkZXIuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMu
aCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKQEAgLTk5LDEyICs5OSwxNCBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgU3RyaW5nIG1fY2FwdHVyZURldmljZUlEOworICAgIFN0cmlu
ZyBtX2xvY2FsaXplZE5hbWU7CisgICAgU3RyaW5nIG1fZ3JvdXBJRDsKIAogICAgIFN0cmluZyBt
X2F1ZGlvU291cmNlSWQ7Ci0gICAgUmVmUHRyPEFWTWVkaWFDYXB0dXJlU291cmNlPiBtX2F1ZGlv
U291cmNlOworICAgIFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4gbV9hdWRpb0FWTWVkaWFD
YXB0dXJlU291cmNlOwogCiAgICAgU3RyaW5nIG1fdmlkZW9Tb3VyY2VJZDsKLSAgICBSZWZQdHI8
QVZNZWRpYUNhcHR1cmVTb3VyY2U+IG1fdmlkZW9Tb3VyY2U7CisgICAgUmVmUHRyPEFWTWVkaWFD
YXB0dXJlU291cmNlPiBtX3ZpZGVvQVZNZWRpYUNhcHR1cmVTb3VyY2U7CiAKICAgICBib29sIG1f
ZW5hYmxlZDsKIH07CkBAIC0xNTgsNiArMTYwLDkgQEAgc3RhdGljIHZvaWQgcmVmcmVzaENhcHR1
cmVEZXZpY2VMaXN0KCkKICAgICAgICAgICAgIGlmIChbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1l
ZGlhVHlwZVZpZGVvXSB8fCBbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZU11eGVkXSkK
ICAgICAgICAgICAgICAgICBzb3VyY2UubV92aWRlb1NvdXJjZUlkID0gY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZygpOwogCisgICAgICAgICAgICBzb3VyY2UubV9ncm91cElEID0gY3JlYXRlQ2Fu
b25pY2FsVVVJRFN0cmluZygpOworICAgICAgICAgICAgc291cmNlLm1fbG9jYWxpemVkTmFtZSA9
IGRldmljZS5sb2NhbGl6ZWROYW1lOworCiAgICAgICAgICAgICBkZXZpY2VzLmFwcGVuZChzb3Vy
Y2UpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjU4LDcgKzI2Myw3IEBAIGJvb2wgQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHAKIHsKICAgICBzaXplX3QgY29uc3RyYWludCA9IHZh
bGlkQ29uc3RyYWludE5hbWVzKCkuZmluZChuYW1lKTsKICAgICBpZiAoY29uc3RyYWludCA9PSBu
b3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAKICAgICBzd2l0Y2ggKGNvbnN0cmFpbnQpIHsKICAgICBjYXNlIFdpZHRoOgpAQCAtMzIyLDIw
ICszMjcsMTcgQEAgVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBBVkNhcHR1cgogICAg
ICAgICByZXR1cm4gc291cmNlc0luZm87CiAKICAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRl
dmljZXMgPSBjYXB0dXJlRGV2aWNlTGlzdCgpOwotICAgIHNpemVfdCBjb3VudCA9IGRldmljZXMu
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAg
ICBBVkNhcHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBbQVZDYXB0dXJlRGV2aWNlIGRldmljZVdp
dGhVbmlxdWVJRDpkZXZpY2VzW2ldLm1fY2FwdHVyZURldmljZUlEXTsKLSAgICAgICAgQVNTRVJU
KGRldmljZSk7CisgICAgZm9yIChhdXRvIGNhcHR1cmVEZXZpY2UgOiBkZXZpY2VzKSB7CiAKLSAg
ICAgICAgaWYgKCFkZXZpY2VzW2ldLm1fZW5hYmxlZCkKKyAgICAgICAgaWYgKCFjYXB0dXJlRGV2
aWNlLm1fZW5hYmxlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBGSVhNRTog
Q2hhbmdlIGdyb3VwSUQgZnJvbSBsb2NhbGl6ZWROYW1lIHRvIHNvbWV0aGluZyBtb3JlIG1lYW5p
bmdmdWwKLSAgICAgICAgaWYgKGRldmljZXNbaV0ubV92aWRlb1NvdXJjZSkKLSAgICAgICAgICAg
IHNvdXJjZXNJbmZvLmFwcGVuZChUcmFja1NvdXJjZUluZm86OmNyZWF0ZShkZXZpY2VzW2ldLm1f
dmlkZW9Tb3VyY2VJZCwgVHJhY2tTb3VyY2VJbmZvOjpWaWRlbywgZGV2aWNlLmxvY2FsaXplZE5h
bWUsIGRldmljZS5sb2NhbGl6ZWROYW1lLCBkZXZpY2VzW2ldLm1fY2FwdHVyZURldmljZUlEKSk7
Ci0gICAgICAgIGlmIChkZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2UpCi0gICAgICAgICAgICBzb3Vy
Y2VzSW5mby5hcHBlbmQoVHJhY2tTb3VyY2VJbmZvOjpjcmVhdGUoZGV2aWNlc1tpXS5tX2F1ZGlv
U291cmNlSWQsIFRyYWNrU291cmNlSW5mbzo6QXVkaW8sIGRldmljZS5sb2NhbGl6ZWROYW1lLCBk
ZXZpY2UubG9jYWxpemVkTmFtZSwgZGV2aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRCkpOworCisg
ICAgICAgIGlmICghY2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNlSWQuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgc291cmNlc0luZm8uYXBwZW5kKFRyYWNrU291cmNlSW5mbzo6Y3JlYXRlKGNhcHR1
cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLCBUcmFja1NvdXJjZUluZm86OlZpZGVvLCBjYXB0dXJl
RGV2aWNlLm1fbG9jYWxpemVkTmFtZSwgY2FwdHVyZURldmljZS5tX2dyb3VwSUQsIGNhcHR1cmVE
ZXZpY2UubV9jYXB0dXJlRGV2aWNlSUQpKTsKKyAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1f
YXVkaW9Tb3VyY2VJZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzb3VyY2VzSW5mby5hcHBlbmQo
VHJhY2tTb3VyY2VJbmZvOjpjcmVhdGUoY2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNlSWQsIFRy
YWNrU291cmNlSW5mbzo6QXVkaW8sIGNhcHR1cmVEZXZpY2UubV9sb2NhbGl6ZWROYW1lLCBjYXB0
dXJlRGV2aWNlLm1fZ3JvdXBJRCwgY2FwdHVyZURldmljZS5tX2NhcHR1cmVEZXZpY2VJRCkpOwog
ICAgIH0KLSAgICAKKwogICAgIExPRyhNZWRpYSwgIkFWQ2FwdHVyZURldmljZU1hbmFnZXI6Omdl
dFNvdXJjZXNJbmZvKCVwKSwgZm91bmQgJWQgYWN0aXZlIGRldmljZXMiLCB0aGlzLCBzb3VyY2Vz
SW5mby5zaXplKCkpOwogCiAgICAgcmV0dXJuIHNvdXJjZXNJbmZvOwpAQCAtMzUyLDYgKzM1NCw4
IEBAIGJvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3QKICAgICBWZWN0b3I8
TWVkaWFDb25zdHJhaW50PiBtYW5kYXRvcnlDb25zdHJhaW50czsKICAgICBjb25zdHJhaW50cy0+
Z2V0TWFuZGF0b3J5Q29uc3RyYWludHMobWFuZGF0b3J5Q29uc3RyYWludHMpOwogICAgIGlmICht
YW5kYXRvcnlDb25zdHJhaW50cy5zaXplKCkpIHsKKworICAgICAgICAvLyBGSVhNRTogdGhpcyBt
ZXRob2Qgc2hvdWxkIHRha2UgYW4gQVZDYXB0dXJlRGV2aWNlIGFuZCB1c2UgaXRzIEFWQ2FwdHVy
ZVNlc3Npb24gaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuCiAgICAgICAgIFJldGFpblB0
cjxBVkNhcHR1cmVTZXNzaW9uVHlwZT4gc2Vzc2lvbiA9IGFkb3B0TlMoW2FsbG9jQVZDYXB0dXJl
U2Vzc2lvbkluc3RhbmNlKCkgaW5pdF0pOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1hbmRhdG9yeUNvbnN0cmFpbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBN
ZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSBtYW5kYXRvcnlDb25zdHJhaW50c1tpXTsKQEAg
LTM2MSwxOSArMzY1LDYgQEAgYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2ZXJpZnlDb25z
dAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIFZlY3RvcjxNZWRp
YUNvbnN0cmFpbnQ+IG9wdGlvbmFsQ29uc3RyYWludHM7Ci0gICAgY29uc3RyYWludHMtPmdldE9w
dGlvbmFsQ29uc3RyYWludHMob3B0aW9uYWxDb25zdHJhaW50cyk7Ci0gICAgaWYgKCFvcHRpb25h
bENvbnN0cmFpbnRzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG9wdGlvbmFsQ29uc3RyYWludHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50ID0gb3B0aW9uYWxDb25zdHJhaW50
c1tpXTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkQ29uc3RyYWludCh0eXBlLCBjb25zdHJhaW50Lm1f
bmFtZSkpIHsKLSAgICAgICAgICAgIGludmFsaWRDb25zdHJhaW50ID0gY29uc3RyYWludC5tX25h
bWU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5MiwyOCArMzgzLDMwIEBAIFZlY3RvcjxSZWZQdHI8UmVhbHRp
bWVNZWRpYVNvdXJjZT4+IEFWQ2EKICAgICAgICAgfQogICAgIH0gc29ydEJhc2VkT2ZmRml0bmVz
c1Njb3JlOwogCi0gICAgZm9yIChhdXRvJiBjYXB0dXJlRGV2aWNlIDogY2FwdHVyZURldmljZUxp
c3QoKSkgeworICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZp
Y2VMaXN0KCk7CisKKyAgICBmb3IgKGF1dG8mIGNhcHR1cmVEZXZpY2UgOiBkZXZpY2VzKSB7CiAg
ICAgICAgIGlmICghY2FwdHVyZURldmljZS5tX2VuYWJsZWQpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgdGhlIGNvbnN0cmFpbnRzIHdoZW4gY2hv
b3NpbmcgYW1vbmcgbXVsdGlwbGUgZGV2aWNlcy4gRm9yIG5vdyBqdXN0IHNlbGVjdCB0aGUgZmly
c3QgYXZhaWxhYmxlCiAgICAgICAgIC8vIGRldmljZSBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4K
ICAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8gJiYgIWNhcHR1
cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKCFj
YXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2UpIHsKKyAgICAgICAgICAgIGlmICghY2FwdHVyZURl
dmljZS5tX2F1ZGlvQVZNZWRpYUNhcHR1cmVTb3VyY2UpIHsKICAgICAgICAgICAgICAgICBBVkNh
cHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBbQVZDYXB0dXJlRGV2aWNlIGRldmljZVdpdGhVbmlx
dWVJRDpjYXB0dXJlRGV2aWNlLm1fY2FwdHVyZURldmljZUlEXTsKICAgICAgICAgICAgICAgICBB
U1NFUlQoZGV2aWNlKTsKLSAgICAgICAgICAgICAgICBjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3Vy
Y2UgPSBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgY2FwdHVyZURldmljZS5t
X2F1ZGlvU291cmNlSWQsIGNvbnN0cmFpbnRzKTsKKyAgICAgICAgICAgICAgICBjYXB0dXJlRGV2
aWNlLm1fYXVkaW9BVk1lZGlhQ2FwdHVyZVNvdXJjZSA9IEFWQXVkaW9DYXB0dXJlU291cmNlOjpj
cmVhdGUoZGV2aWNlLCBjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZCwgY29uc3RyYWludHMp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYmVzdFNvdXJjZXNMaXN0LmFwcGVuZChjYXB0
dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2UpOworICAgICAgICAgICAgYmVzdFNvdXJjZXNMaXN0LmFw
cGVuZChjYXB0dXJlRGV2aWNlLm1fYXVkaW9BVk1lZGlhQ2FwdHVyZVNvdXJjZSk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlbyAmJiAh
Y2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNlSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZSkgeworICAgICAgICAgICAgaWYgKCFjYXB0
dXJlRGV2aWNlLm1fdmlkZW9BVk1lZGlhQ2FwdHVyZVNvdXJjZSkgewogICAgICAgICAgICAgICAg
IEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSA9IFtBVkNhcHR1cmVEZXZpY2UgZGV2aWNlV2l0
aFVuaXF1ZUlEOmNhcHR1cmVEZXZpY2UubV9jYXB0dXJlRGV2aWNlSURdOwogICAgICAgICAgICAg
ICAgIEFTU0VSVChkZXZpY2UpOwotICAgICAgICAgICAgICAgIGNhcHR1cmVEZXZpY2UubV92aWRl
b1NvdXJjZSA9IEFWVmlkZW9DYXB0dXJlU291cmNlOjpjcmVhdGUoZGV2aWNlLCBjYXB0dXJlRGV2
aWNlLm1fdmlkZW9Tb3VyY2VJZCwgY29uc3RyYWludHMpOworICAgICAgICAgICAgICAgIGNhcHR1
cmVEZXZpY2UubV92aWRlb0FWTWVkaWFDYXB0dXJlU291cmNlID0gQVZWaWRlb0NhcHR1cmVTb3Vy
Y2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLCBjb25zdHJh
aW50cyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBiZXN0U291cmNlc0xpc3QuYXBwZW5k
KGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZSk7CisgICAgICAgICAgICBiZXN0U291cmNlc0xp
c3QuYXBwZW5kKGNhcHR1cmVEZXZpY2UubV92aWRlb0FWTWVkaWFDYXB0dXJlU291cmNlKTsKICAg
ICAgICAgfQogICAgIH0KICAgICBzdGQ6OnNvcnQoYmVzdFNvdXJjZXNMaXN0LmJlZ2luKCksIGJl
c3RTb3VyY2VzTGlzdC5lbmQoKSwgc29ydEJhc2VkT2ZmRml0bmVzc1Njb3JlKTsKQEAgLTQ0Miwx
MiArNDM1LDE0IEBAIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBBVkNhcHR1cmVEZXYKICAg
ICAgICAgQVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlID0gW0FWQ2FwdHVyZURldmljZSBkZXZp
Y2VXaXRoVW5pcXVlSUQ6Y2FwdHVyZURldmljZS5tX2NhcHR1cmVEZXZpY2VJRF07CiAgICAgICAg
IEFTU0VSVChkZXZpY2UpOwogICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlOjpBdWRpbyAmJiAhY2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNlSWQuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2UgPSBBVkF1ZGlvQ2Fw
dHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgY2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNlSWQs
IGNvbnN0cmFpbnRzKTsKLSAgICAgICAgICAgIHJldHVybiBjYXB0dXJlRGV2aWNlLm1fYXVkaW9T
b3VyY2U7CisgICAgICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2UubV9hdWRpb0FWTWVkaWFDYXB0
dXJlU291cmNlKQorICAgICAgICAgICAgICAgIGNhcHR1cmVEZXZpY2UubV9hdWRpb0FWTWVkaWFD
YXB0dXJlU291cmNlID0gQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1
cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLCBjb25zdHJhaW50cyk7CisgICAgICAgICAgICByZXR1
cm4gY2FwdHVyZURldmljZS5tX2F1ZGlvQVZNZWRpYUNhcHR1cmVTb3VyY2U7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8gJiYg
IWNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
Y2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNlID0gQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0
ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLCBjb25zdHJhaW50cyk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNlOworICAgICAgICAg
ICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1fdmlkZW9BVk1lZGlhQ2FwdHVyZVNvdXJjZSkKKyAgICAg
ICAgICAgICAgICBjYXB0dXJlRGV2aWNlLm1fdmlkZW9BVk1lZGlhQ2FwdHVyZVNvdXJjZSA9IEFW
VmlkZW9DYXB0dXJlU291cmNlOjpjcmVhdGUoZGV2aWNlLCBjYXB0dXJlRGV2aWNlLm1fdmlkZW9T
b3VyY2VJZCwgY29uc3RyYWludHMpOworICAgICAgICAgICAgcmV0dXJuIGNhcHR1cmVEZXZpY2Uu
bV92aWRlb0FWTWVkaWFDYXB0dXJlU291cmNlOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJl
U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLmgJKHJldmlzaW9uIDE4OTg3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFT
b3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KIAogT0JKQ19DTEFTUyBBVkNhcHR1cmVBdWRpb0RhdGFPdXRwdXQ7CiBPQkpDX0NMQVNT
IEFWQ2FwdHVyZUNvbm5lY3Rpb247CkBAIC01MywxMyArNTQsMTMgQEAgcHVibGljOgogICAgIAog
ICAgIEFWQ2FwdHVyZVNlc3Npb24gKnNlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb24u
Z2V0KCk7IH0KIAorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOworCiBwcm90ZWN0ZWQ6CiAgICAgQVZN
ZWRpYUNhcHR1cmVTb3VyY2UoQVZDYXB0dXJlRGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7
CiAKLSAgICB2aXJ0dWFsIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXMmIHN0YXRlcygp
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOworICAg
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXMmIHN0YXRlcygpIG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNldHVwQ2FwdHVyZVNlc3Npb24oKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVN0YXRlcygpID0gMDsKQEAgLTY3LDIyICs2OCwyNCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgQVZDYXB0dXJlRGV2aWNlICpkZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2RldmljZS5nZXQo
KTsgfQogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXMqIGN1cnJlbnRTdGF0ZXMoKSB7IHJl
dHVybiAmbV9jdXJyZW50U3RhdGVzOyB9CiAgICAgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWlu
dHMoKSB7IHJldHVybiBtX2NvbnN0cmFpbnRzLmdldCgpOyB9Ci0gICAgQ01TYW1wbGVCdWZmZXJS
ZWYgYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7IH0KIAogICAgIHZvaWQg
c2V0VmlkZW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQqKTsK
ICAgICB2b2lkIHNldEF1ZGlvU2FtcGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0dXJlQXVkaW9EYXRh
T3V0cHV0Kik7Ci0gICAgCi0gICAgdm9pZCBzZXRCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYgYnVm
ZmVyKSB7IG1fYnVmZmVyID0gYnVmZmVyOyB9CiAKKyAgICB2b2lkIHNjaGVkdWxlRGVmZXJyZWRU
YXNrKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4pOworCisgICAgdm9pZCBzdGF0ZXNEaWRDaGFuZ2Vk
KCkgeyB9CisgICAgCiBwcml2YXRlOgogICAgIHZvaWQgc2V0dXBTZXNzaW9uKCk7CisgICAgV2Vh
a1B0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vh
a1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CiAKKyAgICBXZWFrUHRyRmFjdG9yeTxBVk1l
ZGlhQ2FwdHVyZVNvdXJjZT4gbV93ZWFrUHRyRmFjdG9yeTsKICAgICBSZXRhaW5QdHI8V2ViQ29y
ZUFWTWVkaWFDYXB0dXJlU291cmNlT2JzZXJ2ZXI+IG1fb2JqY09ic2VydmVyOwogICAgIFJlZlB0
cjxNZWRpYUNvbnN0cmFpbnRzPiBtX2NvbnN0cmFpbnRzOwogICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdGF0ZXMgbV9jdXJyZW50U3RhdGVzOwogICAgIFJldGFpblB0cjxBVkNhcHR1cmVTZXNzaW9u
PiBtX3Nlc3Npb247CiAgICAgUmV0YWluUHRyPEFWQ2FwdHVyZURldmljZT4gbV9kZXZpY2U7Ci0g
ICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKICAgICAKICAgICBib29s
IG1faXNSdW5uaW5nOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0JKHJl
dmlzaW9uIDE4OTg3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNCwxMSArMjQsMTEgQEAK
ICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkFWTWVkaWFDYXB0dXJlU291cmNl
LmgiCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCi0j
aW1wb3J0ICJBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oIgotCisjaW1wb3J0ICJBdWRpb1NvdXJjZVBy
b3ZpZGVyLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRz
LmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzLmgiCkBAIC0xMjMsMTIgKzEy
MywxMyBAQCBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYVZpZGVvQ2FwdHVyCiAKIEFWTWVk
aWFDYXB0dXJlU291cmNlOjpBVk1lZGlhQ2FwdHVyZVNvdXJjZShBVkNhcHR1cmVEZXZpY2VUeXBl
KiBkZXZpY2UsIGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGUgdHlwZSwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50cykKICAgICA6
IFJlYWx0aW1lTWVkaWFTb3VyY2UoaWQsIHR5cGUsIGVtcHR5U3RyaW5nKCkpCisgICAgLCBtX3dl
YWtQdHJGYWN0b3J5KHRoaXMpCiAgICAgLCBtX29iamNPYnNlcnZlcihhZG9wdE5TKFtbV2ViQ29y
ZUFWTWVkaWFDYXB0dXJlU291cmNlT2JzZXJ2ZXIgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhp
c10pKQogICAgICwgbV9jb25zdHJhaW50cyhjb25zdHJhaW50cykKICAgICAsIG1fZGV2aWNlKGRl
dmljZSkKICAgICAsIG1faXNSdW5uaW5nKGZhbHNlKQogewotICAgIHNldE5hbWUoW2RldmljZSBs
b2NhbGl6ZWROYW1lXSk7CisgICAgc2V0TmFtZShkZXZpY2UubG9jYWxpemVkTmFtZSk7CiAgICAg
bV9jdXJyZW50U3RhdGVzLnNldFNvdXJjZVR5cGUodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNl
OjpWaWRlbyA/IFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OkNhbWVyYSA6IFJlYWx0aW1lTWVk
aWFTb3VyY2VTdGF0ZXM6Ok1pY3JvcGhvbmUpOwogfQogCkBAIC0xOTUsNiArMTk2LDE5IEBAIHZv
aWQgQVZNZWRpYUNhcHR1cmVTb3VyY2U6OnNldEF1ZGlvU2FtcGwKICAgICBbYXVkaW9PdXRwdXQg
c2V0U2FtcGxlQnVmZmVyRGVsZWdhdGU6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgcXVldWU6Z2xvYmFB
dWRpb0NhcHR1cmVTZXJpYWxRdWV1ZSgpXTsKIH0KIAordm9pZCBBVk1lZGlhQ2FwdHVyZVNvdXJj
ZTo6c2NoZWR1bGVEZWZlcnJlZFRhc2soc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikK
K3sKKyAgICBBU1NFUlQoZnVuY3Rpb24pOworCisgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdl
YWtQdHIoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBb
d2Vha1RoaXMsIGZ1bmN0aW9uXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICB9KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiBAaW1wbGVtZW50YXRpb24gV2ViQ29yZUFWTWVkaWFDYXB0dXJlU291
cmNlT2JzZXJ2ZXIKQEAgLTIzMiwxMiArMjQ2LDcgQEAgLSAodm9pZCljYXB0dXJlT3V0cHV0OihB
VkNhcHR1cmVPdXRwdXRUeQogICAgIGlmICghbV9jYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ0ZSZXRhaW4oc2FtcGxlQnVmZmVyKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAobV9jYWxsYmFjaykKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2stPmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29u
bmVjdGlvbihjYXB0dXJlT3V0cHV0LCBzYW1wbGVCdWZmZXIsIGNvbm5lY3Rpb24pOwotICAgICAg
ICBDRlJlbGVhc2Uoc2FtcGxlQnVmZmVyKTsKLSAgICB9KTsKKyAgICBtX2NhbGxiYWNrLT5jYXB0
dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oY2FwdHVyZU91dHB1
dCwgc2FtcGxlQnVmZmVyLCBjb25uZWN0aW9uKTsKIH0KIAogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261392</attachid>
            <date>2015-09-17 07:47:06 -0700</date>
            <delta_ts>2015-09-17 07:47:06 -0700</delta_ts>
            <desc>Updated patch for landing</desc>
            <filename>av_capture_source_patch_2.txt</filename>
            <type>text/plain</type>
            <size>39435</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTkxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE1LTA5LTE3ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWMgTWVkaWFTdHJl
YW1dIENsZWFudXAgY2FwdHVyZSBzb3VyY2UgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SmVyIE5vYmxlLgorCisgICAgICAgICogcGxhdGZvcm0vY2YvQ29yZU1lZGlhU29mdExpbmsuY3Bw
OiBTb2Z0LWxpbmsgQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlw
dGlvbiwKKyAgICAgICAgICBDTVNhbXBsZUJ1ZmZlckdldEF1ZGlvQnVmZmVyTGlzdFdpdGhSZXRh
aW5lZEJsb2NrQnVmZmVyLCBhbmQgQ01TYW1wbGVCdWZmZXJHZXROdW1TYW1wbGVzLgorICAgICAg
ICAqIHBsYXRmb3JtL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg6CisKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFWQXVkaW9DYXB0dXJlU291cmNlOjpPYnNlcnZlcjo6fk9ic2VydmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2UubW06CisgICAg
ICAgIChXZWJDb3JlOjpBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6QVZBdWRpb0NhcHR1cmVTb3VyY2Up
OiBJbml0aWFsaXplIG1faW5wdXREZXNjcmlwdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkFWQXVk
aW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMpOiAwIC0+IG51bGxwdHIuCisgICAgICAgIChX
ZWJDb3JlOjpBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkT2JzZXJ2ZXIpOiBOZXcsIGFkZCBhbiBv
YnNlcnZlciBhbmQgdGVsbCBpdCB0byBwcmVwYXJlLgorICAgICAgICAoV2ViQ29yZTo6QVZBdWRp
b0NhcHR1cmVTb3VyY2U6OnJlbW92ZU9ic2VydmVyKTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I9PSk6IENvbXBhcmUgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpBVkF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6Y2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9u
KTogQ2FsbCAKKyAgICAgICAgICBvYnNlcnZlci0+cHJlcGFyZSB3aGVuIHBhc3NlZCBhIG5ldyBz
dHJlYW0gZGVzY3JpcHRpb24sIGNhbGwgb2JzZXJ2ZXItPnByb2Nlc3MuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCk6IFNldCBtX2dyb3VwSUQgYW5k
IG1fbG9jYWxpemVkTmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFn
ZXI6OnNlc3Npb25TdXBwb3J0c0NvbnN0cmFpbnQpOiBJbnZhbGlkIGNvbnN0cmFpbnQgbmFtZXMg
c2hvdWxkCisgICAgICAgICAgYmUgaWdub3JlZCwgc28gcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQg
b25lLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Z2V0U291cmNl
c0luZm8pOiBUaGlzIGp1c3QgZGlkbid0IHdvcmssIGZpeCBpdC4KKyAgICAgICAgKFdlYkNvcmU6
OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKTog
T3B0aW9uYWwgY29uc3RyYWludHMgYXJlCisgICAgICAgICAgb3B0aW9uYWwgc28gdGhleSBkb24n
dCBuZWVkIHRvIGJlIHZhbGlkYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OmJlc3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFpbnRzKTogbV9hdWRpb1NvdXJj
ZSAtPiBtX2F1ZGlvQVZNZWRpYUNhcHR1cmVTb3VyY2UsCisgICAgICAgICAgbV92aWRlb1NvdXJj
ZSAtPiBtX3ZpZGVvQVZNZWRpYUNhcHR1cmVTb3VyY2UuCisgICAgICAgIChXZWJDb3JlOjpBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpzb3VyY2VXaXRoVUlEKTogRGl0dG8uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkFWTWVkaWFDYXB0dXJlU291cmNlOjpzZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkFWTWVkaWFDYXB0dXJlU291cmNlOjpkZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6QVZN
ZWRpYUNhcHR1cmVTb3VyY2U6OmN1cnJlbnRTdGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QVZN
ZWRpYUNhcHR1cmVTb3VyY2U6OmNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFWTWVk
aWFDYXB0dXJlU291cmNlOjpzdGF0ZXNEaWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFW
TWVkaWFDYXB0dXJlU291cmNlOjpjcmVhdGVXZWFrUHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkFW
TWVkaWFDYXB0dXJlU291cmNlOjpidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QVZNZWRpYUNhcHR1cmVTb3VyY2U6OnNldEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLm1tOgorICAgICAgICAo
V2ViQ29yZTo6QVZNZWRpYUNhcHR1cmVTb3VyY2U6OkFWTWVkaWFDYXB0dXJlU291cmNlKTogSW5p
dGlsaXplIG1fd2Vha1B0ckZhY3RvcnkuCisgICAgICAgIChXZWJDb3JlOjpBVk1lZGlhQ2FwdHVy
ZVNvdXJjZTo6c2NoZWR1bGVEZWZlcnJlZFRhc2spOiBOZXcsIGNhbGwgYSBmdW5jdGlvbiBhc3lu
Y2hyb25vdXNseSBvbgorICAgICAgICAgIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgKC1bV2Vi
Q29yZUFWTWVkaWFDYXB0dXJlU291cmNlT2JzZXJ2ZXIgY2FwdHVyZU91dHB1dDpkaWRPdXRwdXRT
YW1wbGVCdWZmZXI6ZnJvbUNvbm5lY3Rpb246XSk6IERvbid0CisgICAgICAgICAgZGlzcGF0Y2gg
Y2FsbHMgdG8gdGhlIG1haW4gdGhyZWFkLCBsZXQgdGhlIGRlcml2ZWQgY2xhc3NlcyBkbyB0aGF0
IGlmIG5lY2Vzc2FyeS4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZp
ZGVvQ2FwdHVyZVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3Vy
Y2U6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkFWVmlkZW9DYXB0dXJlU291cmNlOjpoZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByZXZpZXdMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3VycmVudEZyYW1l
U2FtcGxlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRl
b0NhcHR1cmVTb3VyY2UubW06CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJj
ZTo6c2V0RnJhbWVSYXRlQ29uc3RyYWludCk6IFJlbW92ZSB1bndhbnRlZCBsb2dnaW5nLgorICAg
ICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnNldHVwQ2FwdHVyZVNlc3Npb24p
OiBDb25maWd1cmUgdGhlIEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dCBzbworICAgICAgICAgIGl0
IGRlbGl2ZXJzIDMyLWJpdCBCR1JBIHNhbXBsZXMuCisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVv
Q2FwdHVyZVNvdXJjZTo6Y2FsY3VsYXRlRnJhbWVyYXRlKTogUmV0dXJuIGJvb2wgdG8gc2lnbmFs
IGlmIHRoZSBmcmFtZSByYXRlCisgICAgICAgICAgY2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkFWVmlkZW9DYXB0dXJlU291cmNlOjpwcm9jZXNzTmV3RnJhbWUpOiBOZXcuIFByb2Nlc3Mgc2Ft
cGxlIGJ1ZmZlciwgaW52YWxpZGF0ZSBjYWNoZWQKKyAgICAgICAgICBpbWFnZSwgc2lnbmFsIHdo
ZW4gY2hhcmFjdGVyaXN0aWNzIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFWVmlkZW9DYXB0
dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rp
b24pOiBTY2hlZHVsZQorICAgICAgICAgIGNhbGwgdG8gcHJvY2Vzc05ld0ZyYW1lIG9uIHRoZSBt
YWluIHRocmVhZCBzbyB3ZSBkbyBhbGwgdmlkZW8gcHJvY2Vzc2luZyBvbiBtYWluIHRocmVhZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFWVmlkZW9DYXB0dXJlU291cmNlOjpjdXJyZW50RnJhbWVJbWFn
ZSk6IENyZWF0ZSBhbmQgcmV0dXJuIGEgQ1ZJbWFnZUJ1ZmZlciBvZiB0aGUKKyAgICAgICAgICBj
dXJyZW50IHZpZGVvIGZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3Vy
Y2U6OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KTogRHJhdyB0aGUgY3VycmVudCBmcmFtZSB0
byBhIGNvbnRleHQuCisKIDIwMTUtMDktMTUgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFy
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gIFVzaW5nIGF1dG9tYXRp
YyAoaW5zdGVhZCBvZiBtaW4tY29udGVudCkgbWluaW11bXMgZm9yICdhdXRvJyB0cmFja3MKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9Db3JlTWVkaWFTb2Z0TGluay5j
cHAJKHJldmlzaW9uIDE4OTg3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0NvcmVN
ZWRpYVNvZnRMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw5IEBAIFNPRlRf
TElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIEMKIAogI2lmIFBMQVRGT1JNKE1BQykK
IFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVNZWRpYSwgQ01BdWRp
b0RldmljZUNsb2NrQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwg
Q0ZTdHJpbmdSZWYgZGV2aWNlVUlELCBDTUNsb2NrUmVmICpjbG9ja091dCksIChhbGxvY2F0b3Is
IGRldmljZVVJRCwgY2xvY2tPdXQpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2Vi
Q29yZSwgQ29yZU1lZGlhLCBDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKiwgKENNQXVkaW9G
b3JtYXREZXNjcmlwdGlvblJlZiBkZXNjKSwgKGRlc2MpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0ZP
Ul9TT1VSQ0UoV2ViQ29yZSwgQ29yZU1lZGlhLCBDTVNhbXBsZUJ1ZmZlckdldEF1ZGlvQnVmZmVy
TGlzdFdpdGhSZXRhaW5lZEJsb2NrQnVmZmVyLCBPU1N0YXR1cywgKENNU2FtcGxlQnVmZmVyUmVm
IHNidWYsIHNpemVfdCAqYnVmZmVyTGlzdFNpemVOZWVkZWRPdXQsIEF1ZGlvQnVmZmVyTGlzdCAq
YnVmZmVyTGlzdE91dCwgc2l6ZV90IGJ1ZmZlckxpc3RTaXplLCBDRkFsbG9jYXRvclJlZiBiYnVm
U3RydWN0QWxsb2NhdG9yLCBDRkFsbG9jYXRvclJlZiBiYnVmTWVtb3J5QWxsb2NhdG9yLCB1aW50
MzJfdCBmbGFncywgQ01CbG9ja0J1ZmZlclJlZiAqYmxvY2tCdWZmZXJPdXQpLCAoc2J1ZiwgYnVm
ZmVyTGlzdFNpemVOZWVkZWRPdXQsIGJ1ZmZlckxpc3RPdXQsIGJ1ZmZlckxpc3RTaXplLCBiYnVm
U3RydWN0QWxsb2NhdG9yLCBiYnVmTWVtb3J5QWxsb2NhdG9yLCBmbGFncywgYmxvY2tCdWZmZXJP
dXQpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZU1lZGlhLCBD
TVNhbXBsZUJ1ZmZlckdldE51bVNhbXBsZXMsIENNSXRlbUNvdW50LCAoQ01TYW1wbGVCdWZmZXJS
ZWYgc2J1ZiksIChzYnVmKSkKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICNpZiBQTEFURk9S
TShXSU4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0NvcmVNZWRpYVNv
ZnRMaW5rLmgJKHJldmlzaW9uIDE4OTg3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nm
L0NvcmVNZWRpYVNvZnRMaW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw2ICsxOTUsMTIgQEAg
U09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQwogCiBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlTWVkaWEsIENNQXVkaW9EZXZpY2VDbG9ja0Ny
ZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGU3RyaW5nUmVmIGRl
dmljZVVJRCwgQ01DbG9ja1JlZiAqY2xvY2tPdXQpLCAoYWxsb2NhdG9yLCBkZXZpY2VVSUQsIGNs
b2NrT3V0KSkKICNkZWZpbmUgQ01BdWRpb0RldmljZUNsb2NrQ3JlYXRlICBzb2Z0TGlua19Db3Jl
TWVkaWFfQ01BdWRpb0RldmljZUNsb2NrQ3JlYXRlCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hF
QURFUihXZWJDb3JlLCBDb3JlTWVkaWEsIENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVh
bUJhc2ljRGVzY3JpcHRpb24sIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAqLCAo
Q01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGRlc2MpLCAoZGVzYykpCisjZGVmaW5lIENNQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24gc29mdExpbmtfQ29y
ZU1lZGlhX0NNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24K
K1NPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFdlYkNvcmUsIENvcmVNZWRpYSwgQ01TYW1w
bGVCdWZmZXJHZXRBdWRpb0J1ZmZlckxpc3RXaXRoUmV0YWluZWRCbG9ja0J1ZmZlciwgT1NTdGF0
dXMsIChDTVNhbXBsZUJ1ZmZlclJlZiBzYnVmLCBzaXplX3QgKmJ1ZmZlckxpc3RTaXplTmVlZGVk
T3V0LCBBdWRpb0J1ZmZlckxpc3QgKmJ1ZmZlckxpc3RPdXQsIHNpemVfdCBidWZmZXJMaXN0U2l6
ZSwgQ0ZBbGxvY2F0b3JSZWYgYmJ1ZlN0cnVjdEFsbG9jYXRvciwgQ0ZBbGxvY2F0b3JSZWYgYmJ1
Zk1lbW9yeUFsbG9jYXRvciwgdWludDMyX3QgZmxhZ3MsIENNQmxvY2tCdWZmZXJSZWYgKmJsb2Nr
QnVmZmVyT3V0KSwgKHNidWYsIGJ1ZmZlckxpc3RTaXplTmVlZGVkT3V0LCBidWZmZXJMaXN0T3V0
LCBidWZmZXJMaXN0U2l6ZSwgYmJ1ZlN0cnVjdEFsbG9jYXRvciwgYmJ1Zk1lbW9yeUFsbG9jYXRv
ciwgZmxhZ3MsIGJsb2NrQnVmZmVyT3V0KSkKKyNkZWZpbmUgQ01TYW1wbGVCdWZmZXJHZXRBdWRp
b0J1ZmZlckxpc3RXaXRoUmV0YWluZWRCbG9ja0J1ZmZlciBzb2Z0TGlua19Db3JlTWVkaWFfQ01T
YW1wbGVCdWZmZXJHZXRBdWRpb0J1ZmZlckxpc3RXaXRoUmV0YWluZWRCbG9ja0J1ZmZlcgorU09G
VF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29yZU1lZGlhLCBDTVNhbXBsZUJ1
ZmZlckdldE51bVNhbXBsZXMsIENNSXRlbUNvdW50LCAoQ01TYW1wbGVCdWZmZXJSZWYgc2J1Ziks
IChzYnVmKSkKKyNkZWZpbmUgQ01TYW1wbGVCdWZmZXJHZXROdW1TYW1wbGVzIHNvZnRMaW5rX0Nv
cmVNZWRpYV9DTVNhbXBsZUJ1ZmZlckdldE51bVNhbXBsZXMKIAogI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
QXVkaW9DYXB0dXJlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQXVkaW9DYXB0dXJlU291cmNlLmgJKHJldmlzaW9uIDE4OTg3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDI3ICsyOSw0NCBAQAogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCiAKICNpbmNsdWRlICJBVk1lZGlhQ2Fw
dHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKK3R5cGVkZWYgc3RydWN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb247CiB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERl
c2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIGNsYXNzIEFWQXVk
aW9DYXB0dXJlU291cmNlIDogcHVibGljIEFWTWVkaWFDYXB0dXJlU291cmNlIHsKIHB1YmxpYzoK
KworICAgIGNsYXNzIE9ic2VydmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9i
c2VydmVyKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiAqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bnByZXBh
cmUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKENNRm9ybWF0RGVzY3JpcHRp
b25SZWYsIENNU2FtcGxlQnVmZmVyUmVmKSA9IDA7CisgICAgfTsKKwogICAgIHN0YXRpYyBSZWZQ
dHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IGNyZWF0ZShBVkNhcHR1cmVEZXZpY2UqLCBjb25zdCBB
dG9taWNTdHJpbmcmLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+KTsKLSAgICAKKworICAg
IHZvaWQgYWRkT2JzZXJ2ZXIoT2JzZXJ2ZXIqKTsKKyAgICB2b2lkIHJlbW92ZU9ic2VydmVyKE9i
c2VydmVyKik7CisKIHByaXZhdGU6CiAgICAgQVZBdWRpb0NhcHR1cmVTb3VyY2UoQVZDYXB0dXJl
RGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRz
Pik7CiAgICAgdmlydHVhbCB+QVZBdWRpb0NhcHR1cmVTb3VyY2UoKTsKICAgICAKLSAgICB2aXJ0
dWFsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1
dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVm
ZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0aW9uKikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFJlYWx0
aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0
aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVmZmVyUmVmLCBBVkNhcHR1cmVDb25uZWN0
aW9uKikgb3ZlcnJpZGU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldHVwQ2FwdHVyZVNlc3Np
b24oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGVzKCkgb3ZlcnJpZGU7
Ci0gICAgICAgIAorICAgIHZvaWQgc2V0dXBDYXB0dXJlU2Vzc2lvbigpIG92ZXJyaWRlOworICAg
IHZvaWQgdXBkYXRlU3RhdGVzKCkgb3ZlcnJpZGU7CisKICAgICBSZXRhaW5QdHI8QVZDYXB0dXJl
Q29ubmVjdGlvbj4gbV9hdWRpb0Nvbm5lY3Rpb247Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbjsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+IG1faW5wdXREZXNjcmlwdGlvbjsKKyAg
ICBWZWN0b3I8T2JzZXJ2ZXIqPiBtX29ic2VydmVyczsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZBdWRpb0NhcHR1cmVTb3VyY2Uu
bW0JKHJldmlzaW9uIDE4OTg3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVkF1ZGlvQ2FwdHVyZVNvdXJjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNCwxOSArMjQs
MjAgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkFWQXVkaW9DYXB0dXJl
U291cmNlLmgiCiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9O
KQogCi0jaW1wb3J0ICJBVkF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgotCi0jaW1wb3J0ICJDb3JlTWVk
aWFTb2Z0TGluay5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFDb25zdHJh
aW50cy5oIgogI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVk
aWFTb3VyY2VTdGF0ZXMuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0IDxBVkZv
dW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBv
cnQgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4K
KworI2ltcG9ydCAiQ29yZU1lZGlhU29mdExpbmsuaCIKIAogdHlwZWRlZiBBVkNhcHR1cmVDb25u
ZWN0aW9uIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlOwogdHlwZWRlZiBBVkNhcHR1cmVEZXZpY2Ug
QVZDYXB0dXJlRGV2aWNlVHlwZTsKQEAgLTY4LDYgKzY5LDcgQEAgQVZBdWRpb0NhcHR1cmVTb3Vy
Y2U6OkFWQXVkaW9DYXB0dXJlU291cgogewogICAgIGN1cnJlbnRTdGF0ZXMoKS0+c2V0U291cmNl
SWQoaWQpOwogICAgIGN1cnJlbnRTdGF0ZXMoKS0+c2V0U291cmNlVHlwZShSZWFsdGltZU1lZGlh
U291cmNlU3RhdGVzOjpNaWNyb3Bob25lKTsKKyAgICBtX2lucHV0RGVzY3JpcHRpb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbj4oKTsKIH0KICAgICAKIEFW
QXVkaW9DYXB0dXJlU291cmNlOjp+QVZBdWRpb0NhcHR1cmVTb3VyY2UoKQpAQCAtNzcsNyArNzks
NyBAQCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkFWQXVkaW9DYXB0dXJlU291CiBSZWZQdHI8UmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFi
aWxpdGllcygpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6dXBk
YXRlU3RhdGVzKCkKQEAgLTg1LDYgKzg3LDI1IEBAIHZvaWQgQVZBdWRpb0NhcHR1cmVTb3VyY2U6
OnVwZGF0ZVN0YXRlcygKICAgICAvLyBGSVhNRTogdXNlIFtBVkNhcHR1cmVBdWRpb1ByZXZpZXdP
dXRwdXQgdm9sdW1lXSBmb3Igdm9sdW1lCiB9CiAKK3ZvaWQgQVZBdWRpb0NhcHR1cmVTb3VyY2U6
OmFkZE9ic2VydmVyKEFWQXVkaW9DYXB0dXJlU291cmNlOjpPYnNlcnZlciogb2JzZXJ2ZXIpCit7
CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9sb2NrKTsKKyAgICAgICAgbV9vYnNl
cnZlcnMuYXBwZW5kKG9ic2VydmVyKTsKKyAgICB9CisKKyAgICBpZiAobV9pbnB1dERlc2NyaXB0
aW9uLT5tU2FtcGxlUmF0ZSkKKyAgICAgICAgb2JzZXJ2ZXItPnByZXBhcmUobV9pbnB1dERlc2Ny
aXB0aW9uLmdldCgpKTsKK30KKwordm9pZCBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlT2Jz
ZXJ2ZXIoQVZBdWRpb0NhcHR1cmVTb3VyY2U6Ok9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICBM
b2NrSG9sZGVyIGxvY2sobV9sb2NrKTsKKyAgICBzaXplX3QgcG9zID0gbV9vYnNlcnZlcnMuZmlu
ZChvYnNlcnZlcik7CisgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9vYnNlcnZl
cnMucmVtb3ZlKHBvcyk7Cit9CisKIHZvaWQgQVZBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQ2Fw
dHVyZVNlc3Npb24oKQogewogICAgIFJldGFpblB0cjxBVkNhcHR1cmVEZXZpY2VJbnB1dFR5cGU+
IGF1ZGlvSW4gPSBhZG9wdE5TKFthbGxvY0FWQ2FwdHVyZURldmljZUlucHV0SW5zdGFuY2UoKSBp
bml0V2l0aERldmljZTpkZXZpY2UoKSBlcnJvcjpuaWxdKTsKQEAgLTEwMCwxNCArMTIxLDQ3IEBA
IHZvaWQgQVZBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQ2FwdHVyZVMKICAgICBtX2F1ZGlvQ29u
bmVjdGlvbiA9IGFkb3B0TlMoW2F1ZGlvT3V0cHV0LmdldCgpIGNvbm5lY3Rpb25XaXRoTWVkaWFU
eXBlOkFWTWVkaWFUeXBlQXVkaW9dKTsKIH0KIAorc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiYgYikKK3sKKyAgICByZXR1cm4gYS5tU2FtcGxlUmF0ZSA9PSBiLm1TYW1wbGVS
YXRlCisgICAgICAgICYmIGEubUZvcm1hdElEID09IGIubUZvcm1hdElECisgICAgICAgICYmIGEu
bUZvcm1hdEZsYWdzID09IGIubUZvcm1hdEZsYWdzCisgICAgICAgICYmIGEubUJ5dGVzUGVyUGFj
a2V0ID09IGIubUJ5dGVzUGVyUGFja2V0CisgICAgICAgICYmIGEubUZyYW1lc1BlclBhY2tldCA9
PSBiLm1GcmFtZXNQZXJQYWNrZXQKKyAgICAgICAgJiYgYS5tQnl0ZXNQZXJGcmFtZSA9PSBiLm1C
eXRlc1BlckZyYW1lCisgICAgICAgICYmIGEubUNoYW5uZWxzUGVyRnJhbWUgPT0gYi5tQ2hhbm5l
bHNQZXJGcmFtZQorICAgICAgICAmJiBhLm1CaXRzUGVyQ2hhbm5lbCA9PSBiLm1CaXRzUGVyQ2hh
bm5lbDsKK30KKworc3RhdGljIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYikKK3sK
KyAgICByZXR1cm4gIShhID09IGIpOworfQorCiB2b2lkIEFWQXVkaW9DYXB0dXJlU291cmNlOjpj
YXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYXB0dXJl
T3V0cHV0VHlwZSosIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlciwgQVZDYXB0dXJlQ29u
bmVjdGlvblR5cGUqKQogeworICAgIFZlY3RvcjxPYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX2xvY2spOworICAgICAgICBpZiAobV9vYnNlcnZl
cnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvcHlUb1ZlY3Rv
cihtX29ic2VydmVycywgb2JzZXJ2ZXJzKTsKKyAgICB9CisKICAgICBDTUZvcm1hdERlc2NyaXB0
aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlw
dGlvbihzYW1wbGVCdWZmZXIpOwogICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pCiAgICAgICAg
IHJldHVybjsKIAotICAgIENGUmV0YWluKGZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBtX2F1ZGlv
Rm9ybWF0RGVzY3JpcHRpb24gPSBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIHN0cmVhbURlc2NyaXB0aW9uID0gQ01BdWRp
b0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbihmb3JtYXREZXNjcmlw
dGlvbik7CisgICAgaWYgKCptX2lucHV0RGVzY3JpcHRpb24gIT0gKnN0cmVhbURlc2NyaXB0aW9u
KSB7CisgICAgICAgIG1faW5wdXREZXNjcmlwdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8QXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uPigqc3RyZWFtRGVzY3JpcHRpb24pOworICAgICAgICBmb3Ig
KGF1dG8mIG9ic2VydmVyIDogb2JzZXJ2ZXJzKQorICAgICAgICAgICAgb2JzZXJ2ZXItPnByZXBh
cmUobV9pbnB1dERlc2NyaXB0aW9uLmdldCgpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIG9i
c2VydmVyIDogb2JzZXJ2ZXJzKQorICAgICAgICBvYnNlcnZlci0+cHJvY2Vzcyhmb3JtYXREZXNj
cmlwdGlvbiwgc2FtcGxlQnVmZmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmlj
ZU1hbmFnZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0JKHJldmlzaW9uIDE4OTg3NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTQgQEAKICAqLwogCiAjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkFWQ2FwdHVyZURldmljZU1hbmFnZXIuaCIKIAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCiAKLSNpbXBvcnQgIkFW
Q2FwdHVyZURldmljZU1hbmFnZXIuaCIKLQogI2ltcG9ydCAiQVZBdWRpb0NhcHR1cmVTb3VyY2Uu
aCIKICNpbXBvcnQgIkFWTWVkaWFDYXB0dXJlU291cmNlLmgiCiAjaW1wb3J0ICJBVlZpZGVvQ2Fw
dHVyZVNvdXJjZS5oIgorI2ltcG9ydCAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2ltcG9ydCAi
TG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgogI2ltcG9ydCAiUmVhbHRp
bWVNZWRpYVNvdXJjZS5oIgpAQCAtOTksMTIgKzk5LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBTdHJpbmcgbV9jYXB0dXJlRGV2aWNlSUQ7CisgICAgU3RyaW5nIG1fbG9jYWxpemVkTmFtZTsK
KyAgICBTdHJpbmcgbV9ncm91cElEOwogCiAgICAgU3RyaW5nIG1fYXVkaW9Tb3VyY2VJZDsKLSAg
ICBSZWZQdHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IG1fYXVkaW9Tb3VyY2U7CisgICAgUmVmUHRy
PEFWTWVkaWFDYXB0dXJlU291cmNlPiBtX2F1ZGlvQVZNZWRpYUNhcHR1cmVTb3VyY2U7CiAKICAg
ICBTdHJpbmcgbV92aWRlb1NvdXJjZUlkOwotICAgIFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJj
ZT4gbV92aWRlb1NvdXJjZTsKKyAgICBSZWZQdHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IG1fdmlk
ZW9BVk1lZGlhQ2FwdHVyZVNvdXJjZTsKIAogICAgIGJvb2wgbV9lbmFibGVkOwogfTsKQEAgLTE1
OCw2ICsxNjAsOSBAQCBzdGF0aWMgdm9pZCByZWZyZXNoQ2FwdHVyZURldmljZUxpc3QoKQogICAg
ICAgICAgICAgaWYgKFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlVmlkZW9dIHx8IFtk
ZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlTXV4ZWRdKQogICAgICAgICAgICAgICAgIHNv
dXJjZS5tX3ZpZGVvU291cmNlSWQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CiAKKyAg
ICAgICAgICAgIHNvdXJjZS5tX2dyb3VwSUQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7
CisgICAgICAgICAgICBzb3VyY2UubV9sb2NhbGl6ZWROYW1lID0gZGV2aWNlLmxvY2FsaXplZE5h
bWU7CisKICAgICAgICAgICAgIGRldmljZXMuYXBwZW5kKHNvdXJjZSk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0yNTgsNyArMjYzLDcgQEAgYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXNz
aW9uU3VwcAogewogICAgIHNpemVfdCBjb25zdHJhaW50ID0gdmFsaWRDb25zdHJhaW50TmFtZXMo
KS5maW5kKG5hbWUpOwogICAgIGlmIChjb25zdHJhaW50ID09IG5vdEZvdW5kKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN3aXRjaCAoY29u
c3RyYWludCkgewogICAgIGNhc2UgV2lkdGg6CkBAIC0zMjIsMjAgKzMyNywxNyBAQCBWZWN0b3I8
UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IEFWQ2FwdHVyCiAgICAgICAgIHJldHVybiBzb3VyY2Vz
SW5mbzsKIAogICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZp
Y2VMaXN0KCk7Ci0gICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZVR5
cGUgKmRldmljZSA9IFtBVkNhcHR1cmVEZXZpY2UgZGV2aWNlV2l0aFVuaXF1ZUlEOmRldmljZXNb
aV0ubV9jYXB0dXJlRGV2aWNlSURdOwotICAgICAgICBBU1NFUlQoZGV2aWNlKTsKKyAgICBmb3Ig
KGF1dG8gY2FwdHVyZURldmljZSA6IGRldmljZXMpIHsKIAotICAgICAgICBpZiAoIWRldmljZXNb
aV0ubV9lbmFibGVkKQorICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2UubV9lbmFibGVkKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIEZJWE1FOiBDaGFuZ2UgZ3JvdXBJRCBmcm9t
IGxvY2FsaXplZE5hbWUgdG8gc29tZXRoaW5nIG1vcmUgbWVhbmluZ2Z1bAotICAgICAgICBpZiAo
ZGV2aWNlc1tpXS5tX3ZpZGVvU291cmNlKQotICAgICAgICAgICAgc291cmNlc0luZm8uYXBwZW5k
KFRyYWNrU291cmNlSW5mbzo6Y3JlYXRlKGRldmljZXNbaV0ubV92aWRlb1NvdXJjZUlkLCBUcmFj
a1NvdXJjZUluZm86OlZpZGVvLCBkZXZpY2UubG9jYWxpemVkTmFtZSwgZGV2aWNlLmxvY2FsaXpl
ZE5hbWUsIGRldmljZXNbaV0ubV9jYXB0dXJlRGV2aWNlSUQpKTsKLSAgICAgICAgaWYgKGRldmlj
ZXNbaV0ubV9hdWRpb1NvdXJjZSkKLSAgICAgICAgICAgIHNvdXJjZXNJbmZvLmFwcGVuZChUcmFj
a1NvdXJjZUluZm86OmNyZWF0ZShkZXZpY2VzW2ldLm1fYXVkaW9Tb3VyY2VJZCwgVHJhY2tTb3Vy
Y2VJbmZvOjpBdWRpbywgZGV2aWNlLmxvY2FsaXplZE5hbWUsIGRldmljZS5sb2NhbGl6ZWROYW1l
LCBkZXZpY2VzW2ldLm1fY2FwdHVyZURldmljZUlEKSk7CisKKyAgICAgICAgaWYgKCFjYXB0dXJl
RGV2aWNlLm1fdmlkZW9Tb3VyY2VJZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzb3VyY2VzSW5m
by5hcHBlbmQoVHJhY2tTb3VyY2VJbmZvOjpjcmVhdGUoY2FwdHVyZURldmljZS5tX3ZpZGVvU291
cmNlSWQsIFRyYWNrU291cmNlSW5mbzo6VmlkZW8sIGNhcHR1cmVEZXZpY2UubV9sb2NhbGl6ZWRO
YW1lLCBjYXB0dXJlRGV2aWNlLm1fZ3JvdXBJRCwgY2FwdHVyZURldmljZS5tX2NhcHR1cmVEZXZp
Y2VJRCkpOworICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHNvdXJjZXNJbmZvLmFwcGVuZChUcmFja1NvdXJjZUluZm86OmNy
ZWF0ZShjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZCwgVHJhY2tTb3VyY2VJbmZvOjpBdWRp
bywgY2FwdHVyZURldmljZS5tX2xvY2FsaXplZE5hbWUsIGNhcHR1cmVEZXZpY2UubV9ncm91cElE
LCBjYXB0dXJlRGV2aWNlLm1fY2FwdHVyZURldmljZUlEKSk7CiAgICAgfQotICAgIAorCiAgICAg
TE9HKE1lZGlhLCAiQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Z2V0U291cmNlc0luZm8oJXApLCBm
b3VuZCAlZCBhY3RpdmUgZGV2aWNlcyIsIHRoaXMsIHNvdXJjZXNJbmZvLnNpemUoKSk7CiAKICAg
ICByZXR1cm4gc291cmNlc0luZm87CkBAIC0zNTIsNiArMzU0LDggQEAgYm9vbCBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjp2ZXJpZnlDb25zdAogICAgIFZlY3RvcjxNZWRpYUNvbnN0cmFpbnQ+IG1h
bmRhdG9yeUNvbnN0cmFpbnRzOwogICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRvcnlDb25zdHJh
aW50cyhtYW5kYXRvcnlDb25zdHJhaW50cyk7CiAgICAgaWYgKG1hbmRhdG9yeUNvbnN0cmFpbnRz
LnNpemUoKSkgeworCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIG1ldGhvZCBzaG91bGQgdGFrZSBh
biBBVkNhcHR1cmVEZXZpY2UgYW5kIHVzZSBpdHMgQVZDYXB0dXJlU2Vzc2lvbiBpbnN0ZWFkIG9m
IGNyZWF0aW5nIGEgbmV3IG9uZS4KICAgICAgICAgUmV0YWluUHRyPEFWQ2FwdHVyZVNlc3Npb25U
eXBlPiBzZXNzaW9uID0gYWRvcHROUyhbYWxsb2NBVkNhcHR1cmVTZXNzaW9uSW5zdGFuY2UoKSBp
bml0XSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFuZGF0b3J5Q29uc3RyYWlu
dHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29u
c3RyYWludCA9IG1hbmRhdG9yeUNvbnN0cmFpbnRzW2ldOwpAQCAtMzYxLDE5ICszNjUsNiBAQCBi
b29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZlcmlmeUNvbnN0CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgVmVjdG9yPE1lZGlhQ29uc3RyYWludD4gb3B0aW9u
YWxDb25zdHJhaW50czsKLSAgICBjb25zdHJhaW50cy0+Z2V0T3B0aW9uYWxDb25zdHJhaW50cyhv
cHRpb25hbENvbnN0cmFpbnRzKTsKLSAgICBpZiAoIW9wdGlvbmFsQ29uc3RyYWludHMuc2l6ZSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3B0
aW9uYWxDb25zdHJhaW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBNZWRpYUNvbnN0
cmFpbnQmIGNvbnN0cmFpbnQgPSBvcHRpb25hbENvbnN0cmFpbnRzW2ldOwotICAgICAgICBpZiAo
IWlzVmFsaWRDb25zdHJhaW50KHR5cGUsIGNvbnN0cmFpbnQubV9uYW1lKSkgewotICAgICAgICAg
ICAgaW52YWxpZENvbnN0cmFpbnQgPSBjb25zdHJhaW50Lm1fbmFtZTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MzkyLDI4ICszODMsMzAgQEAgVmVjdG9yPFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPj4gQVZD
YQogICAgICAgICB9CiAgICAgfSBzb3J0QmFzZWRPZmZGaXRuZXNzU2NvcmU7CiAKLSAgICBmb3Ig
KGF1dG8mIGNhcHR1cmVEZXZpY2UgOiBjYXB0dXJlRGV2aWNlTGlzdCgpKSB7CisgICAgVmVjdG9y
PENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKKworICAgIGZv
ciAoYXV0byYgY2FwdHVyZURldmljZSA6IGRldmljZXMpIHsKICAgICAgICAgaWYgKCFjYXB0dXJl
RGV2aWNlLm1fZW5hYmxlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBjb25zaWRlciB0aGUgY29uc3RyYWludHMgd2hlbiBjaG9vc2luZyBhbW9uZyBtdWx0aXBs
ZSBkZXZpY2VzLiBGb3Igbm93IGp1c3Qgc2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUKICAgICAg
ICAgLy8gZGV2aWNlIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgogICAgICAgICBpZiAodHlwZSA9
PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbyAmJiAhY2FwdHVyZURldmljZS5tX2F1ZGlvU291
cmNlSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2UubV9hdWRp
b1NvdXJjZSkgeworICAgICAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1fYXVkaW9BVk1lZGlh
Q2FwdHVyZVNvdXJjZSkgewogICAgICAgICAgICAgICAgIEFWQ2FwdHVyZURldmljZVR5cGUgKmRl
dmljZSA9IFtBVkNhcHR1cmVEZXZpY2UgZGV2aWNlV2l0aFVuaXF1ZUlEOmNhcHR1cmVEZXZpY2Uu
bV9jYXB0dXJlRGV2aWNlSURdOwogICAgICAgICAgICAgICAgIEFTU0VSVChkZXZpY2UpOwotICAg
ICAgICAgICAgICAgIGNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZSA9IEFWQXVkaW9DYXB0dXJl
U291cmNlOjpjcmVhdGUoZGV2aWNlLCBjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZCwgY29u
c3RyYWludHMpOworICAgICAgICAgICAgICAgIGNhcHR1cmVEZXZpY2UubV9hdWRpb0FWTWVkaWFD
YXB0dXJlU291cmNlID0gQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1
cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLCBjb25zdHJhaW50cyk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBiZXN0U291cmNlc0xpc3QuYXBwZW5kKGNhcHR1cmVEZXZpY2UubV9hdWRpb1Nv
dXJjZSk7CisgICAgICAgICAgICBiZXN0U291cmNlc0xpc3QuYXBwZW5kKGNhcHR1cmVEZXZpY2Uu
bV9hdWRpb0FWTWVkaWFDYXB0dXJlU291cmNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0
eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvICYmICFjYXB0dXJlRGV2aWNlLm1fdmlk
ZW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmICghY2FwdHVyZURldmljZS5t
X3ZpZGVvU291cmNlKSB7CisgICAgICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2UubV92aWRlb0FW
TWVkaWFDYXB0dXJlU291cmNlKSB7CiAgICAgICAgICAgICAgICAgQVZDYXB0dXJlRGV2aWNlVHlw
ZSAqZGV2aWNlID0gW0FWQ2FwdHVyZURldmljZSBkZXZpY2VXaXRoVW5pcXVlSUQ6Y2FwdHVyZURl
dmljZS5tX2NhcHR1cmVEZXZpY2VJRF07CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldmljZSk7
Ci0gICAgICAgICAgICAgICAgY2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNlID0gQVZWaWRlb0Nh
cHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlk
LCBjb25zdHJhaW50cyk7CisgICAgICAgICAgICAgICAgY2FwdHVyZURldmljZS5tX3ZpZGVvQVZN
ZWRpYUNhcHR1cmVTb3VyY2UgPSBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwg
Y2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNlSWQsIGNvbnN0cmFpbnRzKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJlc3RTb3VyY2VzTGlzdC5hcHBlbmQoY2FwdHVyZURldmljZS5tX3Zp
ZGVvU291cmNlKTsKKyAgICAgICAgICAgIGJlc3RTb3VyY2VzTGlzdC5hcHBlbmQoY2FwdHVyZURl
dmljZS5tX3ZpZGVvQVZNZWRpYUNhcHR1cmVTb3VyY2UpOwogICAgICAgICB9CiAgICAgfQogICAg
IHN0ZDo6c29ydChiZXN0U291cmNlc0xpc3QuYmVnaW4oKSwgYmVzdFNvdXJjZXNMaXN0LmVuZCgp
LCBzb3J0QmFzZWRPZmZGaXRuZXNzU2NvcmUpOwpAQCAtNDQyLDEyICs0MzUsMTQgQEAgUmVmUHRy
PFJlYWx0aW1lTWVkaWFTb3VyY2U+IEFWQ2FwdHVyZURldgogICAgICAgICBBVkNhcHR1cmVEZXZp
Y2VUeXBlICpkZXZpY2UgPSBbQVZDYXB0dXJlRGV2aWNlIGRldmljZVdpdGhVbmlxdWVJRDpjYXB0
dXJlRGV2aWNlLm1fY2FwdHVyZURldmljZUlEXTsKICAgICAgICAgQVNTRVJUKGRldmljZSk7CiAg
ICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvICYmICFj
YXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNh
cHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZSA9IEFWQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUo
ZGV2aWNlLCBjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZCwgY29uc3RyYWludHMpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZTsKKyAgICAgICAgICAg
IGlmICghY2FwdHVyZURldmljZS5tX2F1ZGlvQVZNZWRpYUNhcHR1cmVTb3VyY2UpCisgICAgICAg
ICAgICAgICAgY2FwdHVyZURldmljZS5tX2F1ZGlvQVZNZWRpYUNhcHR1cmVTb3VyY2UgPSBBVkF1
ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgY2FwdHVyZURldmljZS5tX2F1ZGlvU291
cmNlSWQsIGNvbnN0cmFpbnRzKTsKKyAgICAgICAgICAgIHJldHVybiBjYXB0dXJlRGV2aWNlLm1f
YXVkaW9BVk1lZGlhQ2FwdHVyZVNvdXJjZTsKICAgICAgICAgfQogICAgICAgICBpZiAodHlwZSA9
PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbyAmJiAhY2FwdHVyZURldmljZS5tX3Zp
ZGVvU291cmNlSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjYXB0dXJlRGV2aWNlLm1fdmlk
ZW9Tb3VyY2UgPSBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgY2FwdHVyZURl
dmljZS5tX3ZpZGVvU291cmNlSWQsIGNvbnN0cmFpbnRzKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2U7CisgICAgICAgICAgICBpZiAoIWNhcHR1cmVEZXZp
Y2UubV92aWRlb0FWTWVkaWFDYXB0dXJlU291cmNlKQorICAgICAgICAgICAgICAgIGNhcHR1cmVE
ZXZpY2UubV92aWRlb0FWTWVkaWFDYXB0dXJlU291cmNlID0gQVZWaWRlb0NhcHR1cmVTb3VyY2U6
OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLCBjb25zdHJhaW50
cyk7CisgICAgICAgICAgICByZXR1cm4gY2FwdHVyZURldmljZS5tX3ZpZGVvQVZNZWRpYUNhcHR1
cmVTb3VyY2U7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1
cmVTb3VyY2UuaAkocmV2aXNpb24gMTg5ODc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
OCArMjgsMTEgQEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJ
T04pCiAKKyNpbmNsdWRlICJHZW5lcmljVGFza1F1ZXVlLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVN
ZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIE9CSkNfQ0xBU1MgQVZDYXB0dXJlQXVk
aW9EYXRhT3V0cHV0OwogT0JKQ19DTEFTUyBBVkNhcHR1cmVDb25uZWN0aW9uOwpAQCAtNTMsMTMg
KzU2LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICBBVkNhcHR1cmVTZXNzaW9uICpzZXNzaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zZXNzaW9uLmdldCgpOyB9CiAKKyAgICB2b2lkIHN0YXJ0UHJvZHVj
aW5nRGF0YSgpIG92ZXJyaWRlOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBvdmVycmlk
ZTsKKwogcHJvdGVjdGVkOgogICAgIEFWTWVkaWFDYXB0dXJlU291cmNlKEFWQ2FwdHVyZURldmlj
ZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIFBhc3NS
ZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOwogCi0gICAgdmlydHVhbCBjb25zdCBSZWFsdGltZU1l
ZGlhU291cmNlU3RhdGVzJiBzdGF0ZXMoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
dGFydFByb2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFByb2R1
Y2luZ0RhdGEoKSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVz
JiBzdGF0ZXMoKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXR1cENhcHR1cmVTZXNz
aW9uKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZXMoKSA9IDA7CkBAIC02Nywy
MiArNzAsMjQgQEAgcHJvdGVjdGVkOgogICAgIEFWQ2FwdHVyZURldmljZSAqZGV2aWNlKCkgY29u
c3QgeyByZXR1cm4gbV9kZXZpY2UuZ2V0KCk7IH0KICAgICBSZWFsdGltZU1lZGlhU291cmNlU3Rh
dGVzKiBjdXJyZW50U3RhdGVzKCkgeyByZXR1cm4gJm1fY3VycmVudFN0YXRlczsgfQogICAgIE1l
ZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKCkgeyByZXR1cm4gbV9jb25zdHJhaW50cy5nZXQo
KTsgfQotICAgIENNU2FtcGxlQnVmZmVyUmVmIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVm
ZmVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNldFZpZGVvU2FtcGxlQnVmZmVyRGVsZWdhdGUoQVZD
YXB0dXJlVmlkZW9EYXRhT3V0cHV0Kik7CiAgICAgdm9pZCBzZXRBdWRpb1NhbXBsZUJ1ZmZlckRl
bGVnYXRlKEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCopOwotICAgIAotICAgIHZvaWQgc2V0QnVm
ZmVyKENNU2FtcGxlQnVmZmVyUmVmIGJ1ZmZlcikgeyBtX2J1ZmZlciA9IGJ1ZmZlcjsgfQogCisg
ICAgdm9pZCBzY2hlZHVsZURlZmVycmVkVGFzayhzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KTsKKwor
ICAgIHZvaWQgc3RhdGVzRGlkQ2hhbmdlZCgpIHsgfQorICAgIAogcHJpdmF0ZToKICAgICB2b2lk
IHNldHVwU2Vzc2lvbigpOworICAgIFdlYWtQdHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IGNyZWF0
ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQog
CisgICAgV2Vha1B0ckZhY3Rvcnk8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IG1fd2Vha1B0ckZhY3Rv
cnk7CiAgICAgUmV0YWluUHRyPFdlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJjZU9ic2VydmVyPiBt
X29iamNPYnNlcnZlcjsKICAgICBSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gbV9jb25zdHJhaW50
czsKICAgICBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzIG1fY3VycmVudFN0YXRlczsKICAgICBS
ZXRhaW5QdHI8QVZDYXB0dXJlU2Vzc2lvbj4gbV9zZXNzaW9uOwogICAgIFJldGFpblB0cjxBVkNh
cHR1cmVEZXZpY2U+IG1fZGV2aWNlOwotICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4g
bV9idWZmZXI7CiAgICAgCiAgICAgYm9vbCBtX2lzUnVubmluZzsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
TWVkaWFDYXB0dXJlU291cmNlLm1tCShyZXZpc2lvbiAxODk4NzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjQsMTEgKzI0LDExIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJBVk1lZGlhQ2FwdHVyZVNvdXJjZS5oIgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgVVNFKEFWRk9VTkRBVElPTikKIAotI2ltcG9ydCAiQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCIK
LQorI2ltcG9ydCAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgog
I2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgogI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJj
ZVN0YXRlcy5oIgpAQCAtMTIzLDEyICsxMjMsMTMgQEAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3Qg
Z2xvYmFWaWRlb0NhcHR1cgogCiBBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6QVZNZWRpYUNhcHR1cmVT
b3VyY2UoQVZDYXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGlk
LCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJh
aW50cz4gY29uc3RyYWludHMpCiAgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKGlkLCB0eXBlLCBl
bXB0eVN0cmluZygpKQorICAgICwgbV93ZWFrUHRyRmFjdG9yeSh0aGlzKQogICAgICwgbV9vYmpj
T2JzZXJ2ZXIoYWRvcHROUyhbW1dlYkNvcmVBVk1lZGlhQ2FwdHVyZVNvdXJjZU9ic2VydmVyIGFs
bG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKSkKICAgICAsIG1fY29uc3RyYWludHMoY29uc3Ry
YWludHMpCiAgICAgLCBtX2RldmljZShkZXZpY2UpCiAgICAgLCBtX2lzUnVubmluZyhmYWxzZSkK
IHsKLSAgICBzZXROYW1lKFtkZXZpY2UgbG9jYWxpemVkTmFtZV0pOworICAgIHNldE5hbWUoZGV2
aWNlLmxvY2FsaXplZE5hbWUpOwogICAgIG1fY3VycmVudFN0YXRlcy5zZXRTb3VyY2VUeXBlKHR5
cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8gPyBSZWFsdGltZU1lZGlhU291cmNlU3Rh
dGVzOjpDYW1lcmEgOiBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpNaWNyb3Bob25lKTsKIH0K
IApAQCAtMTk1LDYgKzE5NiwxOSBAQCB2b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpzZXRBdWRp
b1NhbXBsCiAgICAgW2F1ZGlvT3V0cHV0IHNldFNhbXBsZUJ1ZmZlckRlbGVnYXRlOm1fb2JqY09i
c2VydmVyLmdldCgpIHF1ZXVlOmdsb2JhQXVkaW9DYXB0dXJlU2VyaWFsUXVldWUoKV07CiB9CiAK
K3ZvaWQgQVZNZWRpYUNhcHR1cmVTb3VyY2U6OnNjaGVkdWxlRGVmZXJyZWRUYXNrKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKGZ1bmN0aW9uKTsKKworICAg
IGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CisgICAgY2FsbE9uTWFpblRocmVhZChb
d2Vha1RoaXMsIGZ1bmN0aW9uXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICB9KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiBAaW1wbGVtZW50YXRpb24gV2ViQ29yZUFWTWVkaWFDYXB0dXJlU291
cmNlT2JzZXJ2ZXIKQEAgLTIzMiwxMiArMjQ2LDcgQEAgLSAodm9pZCljYXB0dXJlT3V0cHV0OihB
VkNhcHR1cmVPdXRwdXRUeQogICAgIGlmICghbV9jYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ0ZSZXRhaW4oc2FtcGxlQnVmZmVyKTsKLSAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAobV9jYWxsYmFjaykKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2stPmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29u
bmVjdGlvbihjYXB0dXJlT3V0cHV0LCBzYW1wbGVCdWZmZXIsIGNvbm5lY3Rpb24pOwotICAgICAg
ICBDRlJlbGVhc2Uoc2FtcGxlQnVmZmVyKTsKLSAgICB9KTsKKyAgICBtX2NhbGxiYWNrLT5jYXB0
dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oY2FwdHVyZU91dHB1
dCwgc2FtcGxlQnVmZmVyLCBjb25uZWN0aW9uKTsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlk
ZW9DYXB0dXJlU291cmNlLmgJKHJldmlzaW9uIDE4OTg3NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDM3ICszMiw0OCBAQAogCiBPQkpDX0NMQVNTIEFWQ2FwdHVyZVZpZGVvUHJldmlld0xh
eWVyOwogCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlICpDR0ltYWdlUmVmOwogdHlwZWRlZiBjb25z
dCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiAqQ01Gb3JtYXREZXNjcmlwdGlvblJl
ZjsKK3R5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJl
ZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CisKIGNsYXNzIEFWVmlkZW9DYXB0dXJlU291cmNlIDogcHVibGljIEFWTWVk
aWFDYXB0dXJlU291cmNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmUHRyPEFWTWVkaWFDYXB0
dXJlU291cmNlPiBjcmVhdGUoQVZDYXB0dXJlRGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwg
UGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CiAKLSAgICB2aXJ0dWFsIFJlZlB0cjxSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZy
b21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dCosIENNU2FtcGxlQnVmZmVyUmVmLCBBVkNhcHR1
cmVDb25uZWN0aW9uKikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgdmlydHVhbCBpbnQzMl90IHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgIHZpcnR1YWwgaW50MzJfdCBoZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQorICAgIGludDMyX3Qgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3dpZHRoOyB9CisgICAgaW50MzJfdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X2hlaWdodDsgfQogCiAgICAgQVZDYXB0dXJlVmlkZW9QcmV2aWV3TGF5ZXIqIHByZXZpZXdMYXll
cigpIHsgcmV0dXJuIG1fdmlkZW9QcmV2aWV3TGF5ZXIuZ2V0KCk7IH0KLSAgICAKKyAgICBDTVNh
bXBsZUJ1ZmZlclJlZiBjdXJyZW50RnJhbWVTYW1wbGVCdWZmZXIoKSBjb25zdCB7IHJldHVybiBt
X2J1ZmZlci5nZXQoKTsgfQorICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGN1cnJlbnRGcmFtZUltYWdlKCk7CisKIHByaXZhdGU6CiAgICAgQVZWaWRlb0NhcHR1cmVT
b3VyY2UoQVZDYXB0dXJlRGV2aWNlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgUGFzc1JlZlB0cjxN
ZWRpYUNvbnN0cmFpbnRzPik7CiAgICAgdmlydHVhbCB+QVZWaWRlb0NhcHR1cmVTb3VyY2UoKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBzZXR1cENhcHR1cmVTZXNzaW9uKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlcygpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0dXBDYXB0
dXJlU2Vzc2lvbigpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlU3RhdGVzKCkgb3ZlcnJpZGU7
CisKKyAgICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gY2FwYWJpbGl0
aWVzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIGFwcGx5Q29uc3RyYWludHMoTWVkaWFD
b25zdHJhaW50cyopOwogICAgIGJvb2wgc2V0RnJhbWVSYXRlQ29uc3RyYWludChmbG9hdCBtaW5G
cmFtZVJhdGUsIGZsb2F0IG1heEZyYW1lUmF0ZSk7CiAKLSAgICB2b2lkIGNhbGN1bGF0ZUZyYW1l
cmF0ZShDTVNhbXBsZUJ1ZmZlclJlZik7CisgICAgYm9vbCBjYWxjdWxhdGVGcmFtZXJhdGUoQ01T
YW1wbGVCdWZmZXJSZWYpOworCisgICAgdm9pZCBjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxl
QnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYXB0dXJlT3V0cHV0KiwgQ01TYW1wbGVCdWZmZXJSZWYs
IEFWQ2FwdHVyZUNvbm5lY3Rpb24qKSBvdmVycmlkZTsKKyAgICB2b2lkIHByb2Nlc3NOZXdGcmFt
ZShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+KTsKIAogICAgIFJldGFpblB0cjxBVkNhcHR1
cmVDb25uZWN0aW9uPiBtX3ZpZGVvQ29ubmVjdGlvbjsKLSAgICBSZXRhaW5QdHI8Q01Gb3JtYXRE
ZXNjcmlwdGlvblJlZj4gbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uOwogICAgIFJldGFpblB0cjxB
VkNhcHR1cmVWaWRlb1ByZXZpZXdMYXllcj4gbV92aWRlb1ByZXZpZXdMYXllcjsKKyAgICBSZXRh
aW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1fYnVmZmVyOworICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBtX2xhc3RJbWFnZTsKICAgICBWZWN0b3I8RmxvYXQ2ND4gbV92aWRlb0ZyYW1lVGltZVN0
YW1wczsKICAgICBGbG9hdDY0IG1fZnJhbWVSYXRlOwogICAgIGludDMyX3QgbV93aWR0aDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVy
ZVNvdXJjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0JKHJldmlzaW9uIDE4OTg3NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJj
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNCwxMyArMjQsMTQgQEAKICAqLwogCiAjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIkFWVmlkZW9DYXB0dXJlU291cmNlLmgiCiAKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCi0jaW1wb3J0ICJBVlZpZGVv
Q2FwdHVyZVNvdXJjZS5oIgotCiAjaW1wb3J0ICJBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCiAj
aW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgi
CisjaW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRp
YUNvbnN0cmFpbnRzLmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtNDgsNiArNDks
NyBAQCB0eXBlZGVmIEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dCBBVkNhcHR1CiB0eXBlZGVmIEFW
Q2FwdHVyZVZpZGVvUHJldmlld0xheWVyIEFWQ2FwdHVyZVZpZGVvUHJldmlld0xheWVyVHlwZTsK
IAogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCitTT0ZUX0xJTktf
RlJBTUVXT1JLX09QVElPTkFMKENvcmVWaWRlbykKIAogU09GVF9MSU5LX0NMQVNTKEFWRm91bmRh
dGlvbiwgQVZDYXB0dXJlQ29ubmVjdGlvbikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24s
IEFWQ2FwdHVyZURldmljZSkKQEAgLTc2LDYgKzc4LDE3IEBAIFNPRlRfTElOS19QT0lOVEVSKEFW
Rm91bmRhdGlvbiwgQVZDYXB0dXIKICNkZWZpbmUgQVZDYXB0dXJlU2Vzc2lvblByZXNldDM1Mngy
ODggZ2V0QVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODgoKQogI2RlZmluZSBBVkNhcHR1cmVT
ZXNzaW9uUHJlc2V0TG93IGdldEFWQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3coKQogCitTT0ZUX0xJ
TksoQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyR2V0V2lkdGgsIHNpemVfdCwgKENWUGl4ZWxCdWZm
ZXJSZWYgcGl4ZWxCdWZmZXIpLCAocGl4ZWxCdWZmZXIpKQorU09GVF9MSU5LKENvcmVWaWRlbywg
Q1ZQaXhlbEJ1ZmZlckdldEhlaWdodCwgc2l6ZV90LCAoQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1
ZmZlciksIChwaXhlbEJ1ZmZlcikpCitTT0ZUX0xJTksoQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVy
R2V0QmFzZUFkZHJlc3MsIHZvaWQqLCAoQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciksIChw
aXhlbEJ1ZmZlcikpCitTT0ZUX0xJTksoQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQ
ZXJSb3csIHNpemVfdCwgKENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIpLCAocGl4ZWxCdWZm
ZXIpKQorU09GVF9MSU5LKENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlw
ZSwgT1NUeXBlLCAoQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciksIChwaXhlbEJ1ZmZlcikp
CitTT0ZUX0xJTksoQ29yZVZpZGVvLCBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzLCBDVlJl
dHVybiwgKENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIsIENWT3B0aW9uRmxhZ3MgbG9ja0Zs
YWdzKSwgKHBpeGVsQnVmZmVyLCBsb2NrRmxhZ3MpKQorU09GVF9MSU5LKENvcmVWaWRlbywgQ1ZQ
aXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzLCBDVlJldHVybiwgKENWUGl4ZWxCdWZmZXJSZWYg
cGl4ZWxCdWZmZXIsIENWT3B0aW9uRmxhZ3MgbG9ja0ZsYWdzKSwgKHBpeGVsQnVmZmVyLCBsb2Nr
RmxhZ3MpKQorCitTT0ZUX0xJTktfUE9JTlRFUihDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyUGl4
ZWxGb3JtYXRUeXBlS2V5LCBOU1N0cmluZyAqKQorI2RlZmluZSBrQ1ZQaXhlbEJ1ZmZlclBpeGVs
Rm9ybWF0VHlwZUtleSBnZXRrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleSgpCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUmVmUHRyPEFWTWVkaWFDYXB0dXJlU291cmNlPiBBVlZpZGVv
Q2FwdHVyZVNvdXJjZTo6Y3JlYXRlKEFWQ2FwdHVyZURldmljZVR5cGUqIGRldmljZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50
KQpAQCAtMTU3LDcgKzE3MCw2IEBAIGJvb2wgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnNldEZyYW1l
UmF0ZUMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotTlNMb2coQCJzZXQgZnJhbWUg
cmF0ZSB0byAlZiIsIFtiZXN0RnJhbWVSYXRlUmFuZ2UgbWluRnJhbWVSYXRlXSk7CiAgICAgTE9H
KE1lZGlhLCAiQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoJXAp
IC0gc2V0IGZyYW1lIHJhdGUgcmFuZ2UgdG8gJWYuLiVmIiwgdGhpcywgbWluRnJhbWVSYXRlLCBt
YXhGcmFtZVJhdGUpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjA5LDI2ICsyMjEsMjkgQEAg
dm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0dXBDYXB0dXJlUwogICAgIEFTU0VSVChbc2Vz
c2lvbigpIGNhbkFkZElucHV0OnZpZGVvSW4uZ2V0KCldKTsKICAgICBpZiAoW3Nlc3Npb24oKSBj
YW5BZGRJbnB1dDp2aWRlb0luLmdldCgpXSkKICAgICAgICAgW3Nlc3Npb24oKSBhZGRJbnB1dDp2
aWRlb0luLmdldCgpXTsKLSAgICAKKwogICAgIGlmIChjb25zdHJhaW50cygpKQogICAgICAgICBh
cHBseUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKCkpOwogCiAgICAgUmV0YWluUHRyPEFWQ2FwdHVy
ZVZpZGVvRGF0YU91dHB1dFR5cGU+IHZpZGVvT3V0cHV0ID0gYWRvcHROUyhbYWxsb2NBVkNhcHR1
cmVWaWRlb0RhdGFPdXRwdXRJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBSZXRhaW5QdHI8TlNEaWN0
aW9uYXJ5PiBzZXR0aW5nc0RpY3Rpb25hcnkgPSBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6a0NWUGl4
ZWxGb3JtYXRUeXBlXzMyQkdSQV0sIGtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IG5pbF0pOworICAgIFt2aWRlb091dHB1dCBzZXRWaWRlb1NldHRpbmdzOnNldHRpbmdzRGljdGlv
bmFyeS5nZXQoKV07CiAgICAgc2V0VmlkZW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZSh2aWRlb091dHB1
dC5nZXQoKSk7CiAgICAgQVNTRVJUKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OnZpZGVvT3V0cHV0
LmdldCgpXSk7CiAgICAgaWYgKFtzZXNzaW9uKCkgY2FuQWRkT3V0cHV0OnZpZGVvT3V0cHV0Lmdl
dCgpXSkKICAgICAgICAgW3Nlc3Npb24oKSBhZGRPdXRwdXQ6dmlkZW9PdXRwdXQuZ2V0KCldOwot
ICAgIAorCiAgICAgbV92aWRlb0Nvbm5lY3Rpb24gPSBhZG9wdE5TKFt2aWRlb091dHB1dC5nZXQo
KSBjb25uZWN0aW9uV2l0aE1lZGlhVHlwZTpBVk1lZGlhVHlwZVZpZGVvXSk7Ci0gICAgCiAgICAg
bV92aWRlb1ByZXZpZXdMYXllciA9IGFkb3B0TlMoW1tBVkNhcHR1cmVWaWRlb1ByZXZpZXdMYXll
ciBhbGxvY10gaW5pdFdpdGhTZXNzaW9uOnNlc3Npb24oKV0pOwogfQogCi12b2lkIEFWVmlkZW9D
YXB0dXJlU291cmNlOjpjYWxjdWxhdGVGcmFtZXJhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxl
QnVmZmVyKQorYm9vbCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FsY3VsYXRlRnJhbWVyYXRlKENN
U2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcikKIHsKICAgICBDTVRpbWUgc2FtcGxlVGltZSA9
IENNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0YW1wKHNhbXBsZUJ1ZmZlcik7CiAg
ICAgaWYgKCFDTVRJTUVfSVNfTlVNRVJJQyhzYW1wbGVUaW1lKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdDY0IGZyYW1lVGltZSA9IENNVGltZUdl
dFNlY29uZHMoc2FtcGxlVGltZSk7CiAgICAgRmxvYXQ2NCBvbmVTZWNvbmRBZ28gPSBmcmFtZVRp
bWUgLSAxOwpAQCAtMjM3LDI1ICsyNTIsODEgQEAgdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6
Y2FsY3VsYXRlRnJhbQogICAgIAogICAgIHdoaWxlIChtX3ZpZGVvRnJhbWVUaW1lU3RhbXBzWzBd
IDwgb25lU2Vjb25kQWdvKQogICAgICAgICBtX3ZpZGVvRnJhbWVUaW1lU3RhbXBzLnJlbW92ZSgw
KTsKLSAgICAKKworICAgIEZsb2F0NjQgZnJhbWVSYXRlID0gbV9mcmFtZVJhdGU7CiAgICAgbV9m
cmFtZVJhdGUgPSAobV9mcmFtZVJhdGUgKyBtX3ZpZGVvRnJhbWVUaW1lU3RhbXBzLnNpemUoKSkg
LyAyOworCisgICAgcmV0dXJuIGZyYW1lUmF0ZSAhPSBtX2ZyYW1lUmF0ZTsKIH0KLSAgICAKLXZv
aWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZm
ZXJGcm9tQ29ubmVjdGlvbihBVkNhcHR1cmVPdXRwdXRUeXBlKiwgQ01TYW1wbGVCdWZmZXJSZWYg
c2FtcGxlQnVmZmVyLCBBVkNhcHR1cmVDb25uZWN0aW9uVHlwZSopCisKK3ZvaWQgQVZWaWRlb0Nh
cHR1cmVTb3VyY2U6OnByb2Nlc3NOZXdGcmFtZShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+
IHNhbXBsZUJ1ZmZlcikKIHsKLSAgICBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2Ny
aXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbihzYW1wbGVCdWZmZXIp
OworICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBDTVNhbXBs
ZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNhbXBsZUJ1ZmZlci5nZXQoKSk7CiAgICAgaWYg
KCFmb3JtYXREZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0ZSZXRhaW4oZm9y
bWF0RGVzY3JpcHRpb24pOwotICAgIG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbiA9IGFkb3B0Q0Yo
Zm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGNhbGN1bGF0ZUZyYW1lcmF0ZShzYW1wbGVCdWZmZXIp
OworICAgIGJvb2wgc3RhdGVzQ2hhbmdlZCA9IGZhbHNlOworCisgICAgc3RhdGVzQ2hhbmdlZCA9
IGNhbGN1bGF0ZUZyYW1lcmF0ZShzYW1wbGVCdWZmZXIuZ2V0KCkpOworICAgIG1fYnVmZmVyID0g
c2FtcGxlQnVmZmVyOworICAgIG1fbGFzdEltYWdlID0gbnVsbHB0cjsKIAogICAgIENNVmlkZW9E
aW1lbnNpb25zIGRpbWVuc2lvbnMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNp
b25zKGZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBtX3dpZHRoID0gZGltZW5zaW9ucy53aWR0aDsK
LSAgICBtX2hlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0OwotICAgIAotICAgIHNldEJ1ZmZlcihz
YW1wbGVCdWZmZXIpOworICAgIGlmIChkaW1lbnNpb25zLndpZHRoICE9IG1fd2lkdGggfHwgZGlt
ZW5zaW9ucy5oZWlnaHQgIT0gbV9oZWlnaHQpIHsKKyAgICAgICAgbV93aWR0aCA9IGRpbWVuc2lv
bnMud2lkdGg7CisgICAgICAgIG1faGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQ7CisgICAgICAg
IHN0YXRlc0NoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChzdGF0ZXNDaGFuZ2VkKQor
ICAgICAgICB0aGlzLT5zdGF0ZXNEaWRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgQVZWaWRlb0NhcHR1
cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlv
bihBVkNhcHR1cmVPdXRwdXRUeXBlKiwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBB
VkNhcHR1cmVDb25uZWN0aW9uVHlwZSopCit7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVy
UmVmPiBidWZmZXIgPSBzYW1wbGVCdWZmZXI7CisKKyAgICBzY2hlZHVsZURlZmVycmVkVGFzayhb
dGhpcywgYnVmZmVyXSB7CisgICAgICAgIHRoaXMtPnByb2Nlc3NOZXdGcmFtZShidWZmZXIpOwor
ICAgIH0pOworfQorCitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gQVZWaWRlb0NhcHR1cmVTb3VyY2U6
OmN1cnJlbnRGcmFtZUltYWdlKCkKK3sKKyAgICBpZiAobV9sYXN0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBtX2xhc3RJbWFnZTsKKworICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IHN0YXRpY19jYXN0
PENWUGl4ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIobV9idWZmZXIu
Z2V0KCkpKTsKKyAgICBBU1NFUlQoQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShwaXhl
bEJ1ZmZlcikgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQSk7CisKKyAgICBDVlBpeGVsQnVm
ZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKKyAgICB2b2lkICpiYXNlQWRkcmVz
cyA9IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7CisgICAgc2l6ZV90
IGJ5dGVzUGVyUm93ID0gQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KHBpeGVsQnVmZmVyKTsK
KyAgICBzaXplX3Qgd2lkdGggPSBDVlBpeGVsQnVmZmVyR2V0V2lkdGgocGl4ZWxCdWZmZXIpOwor
ICAgIHNpemVfdCBoZWlnaHQgPSBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyKTsK
KworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoTlVMTCwgYmFzZUFkZHJlc3MsIGJ5dGVzUGVyUm93
ICogaGVpZ2h0LCBOVUxMKSk7CisgICAgbV9sYXN0SW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVh
dGUod2lkdGgsIGhlaWdodCwgOCwgMzIsIGJ5dGVzUGVyUm93LCBkZXZpY2VSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCwgcHJvdmlkZXIuZ2V0KCksIE5VTEwsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVu
dERlZmF1bHQpKTsKKworICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1
ZmZlciwgMCk7CisKKyAgICByZXR1cm4gbV9sYXN0SW1hZ2U7Cit9CisKK3ZvaWQgQVZWaWRlb0Nh
cHR1cmVTb3VyY2U6OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChjb250ZXh0LnBhaW50
aW5nRGlzYWJsZWQoKSB8fCAhY3VycmVudEZyYW1lSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOworICAg
IGNvbnRleHQudHJhbnNsYXRlKHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwor
ICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgY29udGV4dC5zZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Mb3cpOworICAgIEludFJlY3QgcGFp
bnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBD
R1JlY3RNYWtlKDAsIDAsIHBhaW50UmVjdC53aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCkpLCBt
X2xhc3RJbWFnZS5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>