<?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>104969</bug_id>
          
          <creation_ts>2012-12-13 16:01:06 -0800</creation_ts>
          <short_desc>Merge MainResourceLoader into DocumentLoader</short_desc>
          <delta_ts>2013-03-21 08:29:06 -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>WebCore Misc.</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109757</dependson>
    
    <dependson>109952</dependson>
    
    <dependson>109971</dependson>
    
    <dependson>112593</dependson>
    
    <dependson>112722</dependson>
    
    <dependson>112776</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mifenton</cc>
    
    <cc>mkwst+watchlist</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>simonjam</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>791052</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-12-13 16:01:06 -0800</bug_when>
    <thetext>With bug 49246 landed, MainResourceLoader&apos;s purpose is no longer clearly defined, and is poorly named.  It isn&apos;t a ResourceLoader subclass (it implements the CachedRawResourceClient interface), and the organization of what DocumentLoader and MainResourceLoader each do is history rather than logical.  It&apos;s probably worth merging them into a single class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832300</commentid>
    <comment_count>1</comment_count>
      <attachid>188173</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2013-02-13 13:47:55 -0800</bug_when>
    <thetext>Created attachment 188173
Monolithic version

This monster patch is my current thought for merging these 2 classes.  I&apos;ll split it up before asking for review, just posting to get EWS data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832378</commentid>
    <comment_count>2</comment_count>
      <attachid>188173</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-13 14:55:46 -0800</bug_when>
    <thetext>Comment on attachment 188173
Monolithic version

Attachment 188173 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16514332</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832424</commentid>
    <comment_count>3</comment_count>
      <attachid>188173</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-13 15:40:32 -0800</bug_when>
    <thetext>Comment on attachment 188173
Monolithic version

Attachment 188173 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16536321</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832645</commentid>
    <comment_count>4</comment_count>
      <attachid>188173</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-02-13 18:35:31 -0800</bug_when>
    <thetext>Comment on attachment 188173
Monolithic version

Attachment 188173 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16514438</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858858</commentid>
    <comment_count>5</comment_count>
      <attachid>193949</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2013-03-19 16:27:34 -0700</bug_when>
    <thetext>Created attachment 193949
Finish the merger</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859038</commentid>
    <comment_count>6</comment_count>
      <attachid>193949</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-19 20:57:36 -0700</bug_when>
    <thetext>Comment on attachment 193949
Finish the merger

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

Amazing.

&gt; Source/WebCore/loader/DocumentLoader.cpp:1390
&gt; +    DEFINE_STATIC_LOCAL(ResourceLoaderOptions, mainResourceLoadOptions,
&gt; +        (SendCallbacks, SniffContent, BufferData, AllowStoredCredentials, AskClientForCrossOriginCredentials, SkipSecurityCheck));

I&apos;m surprised we use a static here.  This is just a struct...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859051</commentid>
    <comment_count>7</comment_count>
      <attachid>193949</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 21:24:01 -0700</bug_when>
    <thetext>Comment on attachment 193949
Finish the merger

Clearing flags on attachment: 193949

Committed r146301: &lt;http://trac.webkit.org/changeset/146301&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859052</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 21:24:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859079</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-19 22:46:47 -0700</bug_when>
    <thetext>It appears that this patch broke Windows (Debug) Tests:
http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50526
http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50527</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859081</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-19 22:48:41 -0700</bug_when>
    <thetext>To make sure this is a real regression, I&apos;ve ran the tests at the same revision on two distinct machines (apple-windows-3 and apple-windows-4 respectively):
http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50528
http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50529</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859084</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 22:50:19 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 112776</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859087</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-19 22:52:28 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; To make sure this is a real regression, I&apos;ve ran the tests at the same revision on two distinct machines (apple-windows-3 and apple-windows-4 respectively):
&gt; http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50528
&gt; http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50529

I&apos;ll also note that I&apos;ve rebooted those bots prior to running the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859088</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-19 22:53:43 -0700</bug_when>
    <thetext>It appears that this patch caused assertions to be hit on almost all tests:

animations/additive-transform-animations.html		
animations/animation-add-events-in-handler.html		
animations/animation-border-overflow.html		
animations/animation-controller-drt-api.html		
animations/animation-css-rule-types.html		
animations/animation-delay-changed.html		
animations/animation-direction-alternate-reverse.html		
animations/animation-direction-reverse-fill-mode-hardware.html		
animations/animation-direction-reverse-fill-mode.html		
animations/animation-direction-reverse-hardware-opacity.html		
animations/animation-direction-reverse-hardware.html		
animations/animation-direction-reverse-non-hardware.html		
animations/animation-direction-reverse-timing-functions-hardware.html		
animations/animation-direction-reverse-timing-functions.html		
animations/animation-direction-reverse.html		
animations/animation-direction.html		
animations/animation-end-event-destroy-renderer.html		
animations/animation-end-event-short-iterations.html		
animations/animation-events-create.html		
animations/animation-hit-test-transform.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859100</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-19 23:35:19 -0700</bug_when>
    <thetext>I&apos;m sorry but I&apos;m rolling out the patch for now as we&apos;re losing the entire test coverage on Windows Debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859101</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-19 23:36:03 -0700</bug_when>
    <thetext>Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859180</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-20 02:06:59 -0700</bug_when>
    <thetext>It appears that this was a build corruption issue.

http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50532
is the run that contains the rollout and this looks better but still a bunch of tests have failed. I&apos;ve triggered a clean build after this as http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50536 and this one appears to be running just fine.

Can we coordinate tomorrow to reland this patch so that we can trigger a clean build as needed tomorrow?  Alternatively, you don&apos;t do anything, I&apos;ll try to reland it tomorrow morning and start a clean build as needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859481</commentid>
    <comment_count>17</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2013-03-20 09:17:14 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; It appears that this was a build corruption issue.
&gt; 
&gt; http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50532
&gt; is the run that contains the rollout and this looks better but still a bunch of tests have failed. I&apos;ve triggered a clean build after this as http://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/50536 and this one appears to be running just fine.
&gt; 
&gt; Can we coordinate tomorrow to reland this patch so that we can trigger a clean build as needed tomorrow?  Alternatively, you don&apos;t do anything, I&apos;ll try to reland it tomorrow morning and start a clean build as needed.

If you want me around, it should probably wait until Thursday, as I&apos;m OOO today and won&apos;t have IRC access until this afternoon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860147</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-21 02:08:01 -0700</bug_when>
    <thetext>Committed r146449: &lt;http://trac.webkit.org/changeset/146449&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860149</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-21 02:09:02 -0700</bug_when>
    <thetext>Sorry about the unwanted noise.

I&apos;ve relanded your patch in http://trac.webkit.org/changeset/146449 after cleaning WebKitBuild directories in apple-windows-1 and apple-windows-2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860150</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-21 02:11:19 -0700</bug_when>
    <thetext>I&apos;m very excited to see this land!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860362</commentid>
    <comment_count>21</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2013-03-21 08:29:06 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Sorry about the unwanted noise.
&gt; 
&gt; I&apos;ve relanded your patch in http://trac.webkit.org/changeset/146449 after cleaning WebKitBuild directories in apple-windows-1 and apple-windows-2.

Thanks for relanding this! I really appreciate it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188173</attachid>
            <date>2013-02-13 13:47:55 -0800</date>
            <delta_ts>2013-03-19 16:27:34 -0700</delta_ts>
            <desc>Monolithic version</desc>
            <filename>dl_mrl_0213c.txt</filename>
            <type>text/plain</type>
            <size>121286</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAxNDI3NTQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1OSw5ICsxMjU5LDkgQEAKICAgICBy
ZXR1cm4gIW1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbjsKIH0KIAotdm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKE1haW5SZXNv
dXJjZUxvYWRlciAqbWFpblJlc291cmNlTG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKERvY3VtZW50TG9h
ZGVyICpkb2N1bWVudExvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBtX2ZyYW1lLT5jb252ZXJ0TWFp
blJlc291cmNlTG9hZFRvRG93bmxvYWQobWFpblJlc291cmNlTG9hZGVyLCByZXF1ZXN0LCByZXNw
b25zZSk7CisgICAgbV9mcmFtZS0+Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKGRv
Y3VtZW50TG9hZGVyLCByZXF1ZXN0LCByZXNwb25zZSk7CiB9CiAKIFBhc3NSZWZQdHI8RnJhbWU+
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbmFtZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZEJlY29tZUZyYW1lc2V0KGJvb2wpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBi
b29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjb252
ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVy
KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0TWFpblJlc291
cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgT1ZF
UlJJREU7CiAgICAgCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjcmVh
dGVGcmFtZShjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgV2Vi
Q29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29s
IGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSBPVkVS
UklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5oCShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQAogICAgIHZvaWQg
ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKHVpbnQ2NF90IGxpc3RlbmVySUQsIFdlYkNvcmU6OlBv
bGljeUFjdGlvbiwgdWludDY0X3QgZG93bmxvYWRJRCk7CiAKICAgICB2b2lkIHN0YXJ0RG93bmxv
YWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjb252ZXJ0TWFp
blJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyKiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYpOworICAgIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogCiAgICAgU3RyaW5nIHNvdXJjZSgpIGNv
bnN0OwogICAgIFN0cmluZyBjb250ZW50c0FzU3RyaW5nKCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDE0
Mjc1NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDEzICs1MywxMyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSlND
U1NTdHlsZURlY2xhcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0VsZW1lbnQuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0pTUmFuZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01haW5SZXNvdXJj
ZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya2luZ0NvbnRleHQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL05vZGVUcmF2ZXJzYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUJ1ZmZlci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RleHRSZXNvdXJjZURlY29kZXIuaD4KQEAgLTI0OCw3ICsyNDgsNyBAQAog
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQo
cG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCk7CiB9CiAKLXZvaWQgV2ViRnJhbWU6OmNvbnZlcnRN
YWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChNYWluUmVzb3VyY2VMb2FkZXIqIG1haW5SZXNvdXJj
ZUxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgV2ViRnJhbWU6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2Fk
VG9Eb3dubG9hZChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAg
ICAgQVNTRVJUKG1fcG9saWN5RG93bmxvYWRJRCk7CiAKQEAgLTI2Miw3ICsyNjIsNyBAQAogICAg
IH0KICNlbmRpZgogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZG93bmxvYWRNYW5hZ2VyKCku
Y29udmVydEhhbmRsZVRvRG93bmxvYWQocG9saWN5RG93bmxvYWRJRCwgbWFpblJlc291cmNlTG9h
ZGVyLT5sb2FkZXIoKS0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5kb3dubG9hZE1hbmFnZXIoKS5jb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChw
b2xpY3lEb3dubG9hZElELCBkb2N1bWVudExvYWRlci0+bWFpblJlc291cmNlTG9hZGVyKCktPmhh
bmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSk7CiB9CiAKIFN0cmluZyBXZWJGcmFtZTo6c291cmNl
KCkgY29uc3QgCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAxNDI3NTQpCisrKyBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIkxhbmd1YWdlLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgot
I2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTExMDks
MTIgKzExMDgsMTIgQEAKICAgICBnX2Vycm9yX2ZyZWUod2ViRXJyb3IpOwogfQogCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50Ojpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoTWFpblJl
c291cmNlTG9hZGVyKiBtYWluUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50Ojpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2Fk
ZXIqIGRvY3VtZW50TG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIEdSZWZQdHI8V2ViS2l0TmV0d29y
a1JlcXVlc3Q+IG5ldHdvcmtSZXF1ZXN0KGFkb3B0R1JlZihraXROZXcocmVxdWVzdCkpKTsKICAg
ICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKIAotICAg
IHdlYmtpdF93ZWJfdmlld19yZXF1ZXN0X2Rvd25sb2FkKHZpZXcsIG5ldHdvcmtSZXF1ZXN0Lmdl
dCgpLCByZXNwb25zZSwgbWFpblJlc291cmNlTG9hZGVyLT5sb2FkZXIoKS0+aGFuZGxlKCkpOwor
ICAgIHdlYmtpdF93ZWJfdmlld19yZXF1ZXN0X2Rvd25sb2FkKHZpZXcsIG5ldHdvcmtSZXF1ZXN0
LmdldCgpLCByZXNwb25zZSwgZG9jdW1lbnRMb2FkZXItPm1haW5SZXNvdXJjZUxvYWRlcigpLT5o
YW5kbGUoKSk7CiB9CiAKIFJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxl
ZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
aAkocmV2aXNpb24gMTQyNzU0KQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBA
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEJlY29tZUZyYW1lc2V0KGJvb2wpOwog
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChXZWJDb3JlOjpNYWlu
UmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0
TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJik7CiAKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ+IGNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guaAko
cmV2aXNpb24gMTQyNzU0KQorKysgU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50V3guaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAg
ICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmFsbEJhY2soY29u
c3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2aXJ0dWFsIFdURjo6UGFzc1JlZlB0cjxEb2N1
bWVudExvYWRlcj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgU3Vic3RpdHV0ZURhdGEmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRNYWlu
UmVzb3VyY2VMb2FkVG9Eb3dubG9hZChNYWluUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3VyY2Uv
V2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcxMiw3ICs3MTIsNyBAQAogICAgIHJldHVybiBEb2N1bWVudExvYWRlcjo6Y3Jl
YXRlKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFd4Ojpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6TWFpblJlc291
cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9E
b3dubG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDE0Mjc1NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDcgKzcxLDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MigpIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQzKCkgT1ZFUlJJREU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFdl
YkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGFzc2ln
bklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBP
VkVSUklERTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDE0Mjc1NCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvSWNvbkRh
dGFiYXNlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvYWRlck5TVVJMRXh0cmFzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTWFpblJlc291
cmNlTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5WaWV3QmFzZS5oPgpAQCAtMjcx
LDkgKzI3MCw5IEBACiAgICAgbV93ZWJGcmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldyA9IG5p
bDsKIH0KIAotdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29udmVydE1haW5SZXNvdXJjZUxv
YWRUb0Rvd25sb2FkKE1haW5SZXNvdXJjZUxvYWRlciogbWFpblJlc291cmNlTG9hZGVyLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRU
b0Rvd25sb2FkKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAg
ICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gbWFpblJlc291cmNlTG9hZGVyLT5sb2FkZXIoKS0+
aGFuZGxlKCk7CisgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IGRvY3VtZW50TG9hZGVyLT5t
YWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxlKCk7CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAg
IEFTU0VSVChbV2ViRG93bmxvYWQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfZG93bmxv
YWRXaXRoTG9hZGluZ0NGVVJMQ29ubmVjdGlvbjpyZXF1ZXN0OnJlc3BvbnNlOmRlbGVnYXRlOnBy
b3h5OildKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXaW5DRS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luY2UvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5oCShyZXZpc2lvbiAxNDI3NTQpCisr
KyBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2lu
Q0UuaAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoYm9vbCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Q2FjaGVQYWdlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRNYWluUmVzb3VyY2VM
b2FkVG9Eb3dubG9hZChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHAJKHJldmlzaW9uIDE0Mjc1NCkKKysr
IFNvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5D
RS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6Y29udmVydE1haW5SZXNv
dXJjZUxvYWRUb0Rvd25sb2FkKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlciosIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
KQordm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRv
RG93bmxvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMTQy
NzU0KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MUGx1Z0luRWxlbWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJv
YXJkRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01haW5SZXNvdXJjZUxvYWRlci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTW91c2VSZWxhdGVkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CkBAIC05MCw2ICs4OSw3
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5WaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
cmludENvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CkBAIC0xNzkxLDcgKzE3OTEsNyBAQAogICAgIHBv
bGljeURlbGVnYXRlLT51bmFibGVUb0ltcGxlbWVudFBvbGljeVdpdGhFcnJvcihkLT53ZWJWaWV3
LCB3ZWJFcnJvci5nZXQoKSwgdGhpcyk7CiB9CiAKLXZvaWQgV2ViRnJhbWU6OmNvbnZlcnRNYWlu
UmVzb3VyY2VMb2FkVG9Eb3dubG9hZChNYWluUmVzb3VyY2VMb2FkZXIqIG1haW5SZXNvdXJjZUxv
YWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3ZvaWQgV2ViRnJhbWU6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9E
b3dubG9hZChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAg
Q09NUHRyPElXZWJEb3dubG9hZERlbGVnYXRlPiBkb3dubG9hZERlbGVnYXRlOwogICAgIENPTVB0
cjxJV2ViVmlldz4gd2ViVmlldzsKQEAgLTE4MDcsNyArMTgwNyw3IEBACiAgICAgLy8gSXRzIHRo
ZSBkZWxlZ2F0ZSdzIGpvYiB0byByZWYgdGhlIFdlYkRvd25sb2FkIHRvIGtlZXAgaXQgYWxpdmUg
LSBvdGhlcndpc2UgaXQgd2lsbCBiZSBkZXN0cm95ZWQKICAgICAvLyB3aGVuIHRoaXMgbWV0aG9k
IHJldHVybnMKICAgICBDT01QdHI8V2ViRG93bmxvYWQ+IGRvd25sb2FkOwotICAgIGRvd25sb2Fk
LmFkb3B0UmVmKFdlYkRvd25sb2FkOjpjcmVhdGVJbnN0YW5jZShtYWluUmVzb3VyY2VMb2FkZXIt
PmxvYWRlcigpLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UsIGRvd25sb2FkRGVsZWdhdGUu
Z2V0KCkpKTsKKyAgICBkb3dubG9hZC5hZG9wdFJlZihXZWJEb3dubG9hZDo6Y3JlYXRlSW5zdGFu
Y2UoZG9jdW1lbnRMb2FkZXItPm1haW5SZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUoKSwgcmVxdWVz
dCwgcmVzcG9uc2UsIGRvd25sb2FkRGVsZWdhdGUuZ2V0KCkpKTsKIH0KIAogYm9vbCBXZWJGcmFt
ZTo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50IC8q
bGVuZ3RoKi8pCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmgJKHJldmlzaW9uIDE0Mjc1NCkKKysrIFNv
dXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgs
NyBAQAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0Fj
dGlvbihXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpOYXZpZ2F0
aW9uQWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpGb3JtU3RhdGU+LCBjb25zdCBXVEY6OlN0cmluZyYgZnJhbWVOYW1lKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYkNv
cmU6OkZyYW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25BY3Rpb24m
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZv
cm1TdGF0ZT4pOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9s
aWN5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29u
dmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRU
b0Rvd25sb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogCiAgICAgdmly
dHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGludCBsZW5ndGgpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYpOwpJbmRleDogU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAkocmV2aXNpb24gMTQyNzU0KQorKysgU291
cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NTcsNyArODU3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnIuZmFpbGluZ1VSTCgpLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50RWZsOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoTWFpblJlc291
cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmNvbnZlcnRNYWluUmVzb3Vy
Y2VMb2FkVG9Eb3dubG9hZChEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCiB7CiAgICAgaWYgKCFtX3ZpZXcpCiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50RWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuaAkocmV2aXNpb24gMTQyNzU0KQorKysg
U291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkQmVjb21lRnJhbWVzZXQoYm9vbCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQ
YWdlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9E
b3dubG9hZChNYWluUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRNYWluUmVzb3Vy
Y2VMb2FkVG9Eb3dubG9hZChEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpOwog
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5o
CShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
NCw3ICsxNDQsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldChib29sKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKE1haW5SZXNvdXJjZUxvYWRlciosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRU
b0Rvd25sb2FkKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYs
IEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYsIGJvb2wsIGludCwgaW50KTsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2lkZ2V0PiBjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6
ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0Kik7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcAkocmV2aXNpb24gMTQyNzU0KQorKysg
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRl
ICJJbWFnZS5oIgogI2luY2x1ZGUgIklucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKLSNpbmNsdWRlICJNYWluUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJO
YXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJOZXR3b3JrTWFuYWdlci5oIgogI2luY2x1ZGUg
Ik5vZGVMaXN0LmgiCkBAIC01OSw2ICs1OCw3IEBACiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgog
I2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlByb3RlY3Rpb25TcGFjZS5o
IgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiU2NvcGVQb2ludGVyLmgi
CiAjaWYgRU5BQkxFKEJMQUNLQkVSUllfQ1JFREVOVElBTF9QRVJTSVNUKQogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCkBAIC0xMjI0LDkgKzEyMjQsOSBAQAogICAgIG1fd2ViUGFnZVByaXZhdGUtPmxv
YWQocmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZzo6
ZW1wdHlTdHJpbmcoKSwgIkdFVCIsIE5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90b2NvbENhY2hlUG9s
aWN5LCAwLCAwLCAwLCAwLCBmYWxzZSwgZmFsc2UsIHRydWUsICIiLCBzdWdnZXN0ZWROYW1lKTsK
IH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnk6OmNvbnZlcnRNYWluUmVzb3Vy
Y2VMb2FkVG9Eb3dubG9hZChNYWluUmVzb3VyY2VMb2FkZXIqIG1haW5SZXNvdXJjZUxvYWRlciwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Ojpjb252
ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9h
ZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByKQogewotICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0
ZXJTdHJlYW0qIHN0cmVhbSA9IE5ldHdvcmtNYW5hZ2VyOjppbnN0YW5jZSgpLT5zdHJlYW1Gb3JI
YW5kbGUobWFpblJlc291cmNlTG9hZGVyLT5sb2FkZXIoKS0+aGFuZGxlKCkpOworICAgIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJlYW0qIHN0cmVhbSA9IE5ldHdvcmtNYW5hZ2VyOjpp
bnN0YW5jZSgpLT5zdHJlYW1Gb3JIYW5kbGUoZG9jdW1lbnRMb2FkZXItPm1haW5SZXNvdXJjZUxv
YWRlcigpLT5oYW5kbGUoKSk7CiAgICAgQVNTRVJUKHN0cmVhbSk7CiAKICAgICBtX3dlYlBhZ2VQ
cml2YXRlLT5tX2NsaWVudC0+ZG93bmxvYWRSZXF1ZXN0ZWQoc3RyZWFtLCByLnN1Z2dlc3RlZEZp
bGVuYW1lKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJh
bWVMb2FkZXJDbGllbnRJbXBsLmgJKHJldmlzaW9uIDE0Mjc1NCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzMsNyArMTczLDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNl
dChib29sKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIGNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCgKLSAgICAgICAgV2Vi
Q29yZTo6TWFpblJlc291cmNlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwKKyAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLAogICAgICAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjcmVhdGVGcmFtZSgKICAg
ICAgICAgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmNwcAkocmV2aXNpb24gMTQyNzU0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1Myw3
ICsxNDUzLDcgQEAKIAogLy8gRG93bmxvYWRpbmcgaXMgaGFuZGxlZCBpbiB0aGUgYnJvd3NlciBw
cm9jZXNzLCBub3QgV2ViS2l0LiBJZiB3ZSBnZXQgdG8gdGhpcwogLy8gcG9pbnQsIG91ciBkb3du
bG9hZCBkZXRlY3Rpb24gY29kZSBpbiB0aGUgUmVzb3VyY2VEaXNwYXRjaGVySG9zdCBpcyBicm9r
ZW4hCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRU
b0Rvd25sb2FkKE1haW5SZXNvdXJjZUxvYWRlciogbWFpblJlc291cmNlTG9hZGVyLAordm9pZCBG
cmFtZUxvYWRlckNsaWVudEltcGw6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChE
b2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQogewpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmgJKHJldmlzaW9uIDE0Mjc1NCkKKysrIFNvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDQsNyArMjA0LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRCZWNvbWVGcmFt
ZXNldChib29sKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFdlYkNvcmU6
Ok1haW5SZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udmVy
dE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZyYW1lPiBjcmVhdGVGcmFtZShjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25z
dCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRo
LCBpbnQgbWFyZ2luSGVpZ2h0KTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2lkZ2V0PiBjcmVh
dGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgS1VSTCYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJp
bmcmLCBib29sKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gMTQyNzU0KQorKysgU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSAiSlNET01XaW5k
b3dCYXNlLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk1haW5S
ZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTY4LDYgKzY3LDcgQEAKICNpbmNs
dWRlICJSZW5kZXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNl
LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgpAQCAtOTgzLDEyICs5ODMsMTIgQEAK
ICAgICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0Ojpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6TWFpblJlc291
cmNlTG9hZGVyKiBtYWluUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKQordm9pZCBGcmFtZUxvYWRl
ckNsaWVudFF0Ojpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikKIHsKICAgICBpZiAoIW1fd2Vi
RnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKiBoYW5k
bGVyID0gbWFpblJlc291cmNlTG9hZGVyLT5sb2FkZXIoKS0+aGFuZGxlKCktPmdldEludGVybmFs
KCktPm1fam9iOworICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKiBoYW5kbGVyID0gZG9jdW1lbnRM
b2FkZXItPm1haW5SZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUoKS0+Z2V0SW50ZXJuYWwoKS0+bV9q
b2I7CiAgICAgUU5ldHdvcmtSZXBseSogcmVwbHkgPSBoYW5kbGVyLT5yZWxlYXNlKCk7CiAgICAg
aWYgKHJlcGx5KSB7CiAgICAgICAgIGlmIChtX3dlYkZyYW1lLT5wYWdlQWRhcHRlci0+Zm9yd2Fy
ZFVuc3VwcG9ydGVkQ29udGVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
cmV2aXNpb24gMTQyNzU0KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
d29ya2luZyBjb3B5KQpAQCAtNDAyNSw4ICs0MDI1LDYgQEAKIAlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvTGlua0xvYWRlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3Ry
YXRlZ3kuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTG9hZGVyU3RyYXRlZ3kuaCBcCi0J
U291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuaCBcCiAgICAgU291cmNlL1dlYkNvcmUv
bG9hZGVyL01peGVkQ29udGVudENoZWNrZXIuY3BwIFwKICAgICBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvTWl4ZWRDb250ZW50Q2hlY2tlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdh
dGlvbkFjdGlvbi5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9Eb2N1bWVu
dExvYWRlck1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9E
b2N1bWVudExvYWRlck1hYy5jcHAJKHJldmlzaW9uIDE0Mjc1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9tYWMvRG9jdW1lbnRMb2FkZXJNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgotI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KQEAgLTU1LDggKzU0LDggQEAKIAogdm9pZCBEb2N1bWVudExvYWRlcjo6c2No
ZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKQogewotICAgIGlmIChtX21haW5SZXNvdXJjZUxvYWRl
ciAmJiBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZGVyKCkgJiYgbV9tYWluUmVzb3VyY2VMb2Fk
ZXItPmxvYWRlcigpLT5oYW5kbGUoKSkKLSAgICAgICAgbV9tYWluUmVzb3VyY2VMb2FkZXItPmxv
YWRlcigpLT5oYW5kbGUoKS0+c2NoZWR1bGUocGFpcik7CisgICAgaWYgKG1haW5SZXNvdXJjZUxv
YWRlcigpICYmIG1haW5SZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUoKSkKKyAgICAgICAgbWFpblJl
c291cmNlTG9hZGVyKCktPmhhbmRsZSgpLT5zY2hlZHVsZShwYWlyKTsKICAgICBzY2hlZHVsZUFs
bChtX3N1YnJlc291cmNlTG9hZGVycywgcGFpcik7CiAgICAgc2NoZWR1bGVBbGwobV9wbHVnSW5T
dHJlYW1Mb2FkZXJzLCBwYWlyKTsKICAgICBzY2hlZHVsZUFsbChtX211bHRpcGFydFN1YnJlc291
cmNlTG9hZGVycywgcGFpcik7CkBAIC02NCw4ICs2Myw4IEBACiAKIHZvaWQgRG9jdW1lbnRMb2Fk
ZXI6OnVuc2NoZWR1bGUoU2NoZWR1bGVQYWlyKiBwYWlyKQogewotICAgIGlmIChtX21haW5SZXNv
dXJjZUxvYWRlciAmJiBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZGVyKCkgJiYgbV9tYWluUmVz
b3VyY2VMb2FkZXItPmxvYWRlcigpLT5oYW5kbGUoKSkKLSAgICAgICAgbV9tYWluUmVzb3VyY2VM
b2FkZXItPmxvYWRlcigpLT5oYW5kbGUoKS0+dW5zY2hlZHVsZShwYWlyKTsKKyAgICBpZiAobWFp
blJlc291cmNlTG9hZGVyKCkgJiYgbWFpblJlc291cmNlTG9hZGVyKCktPmhhbmRsZSgpKQorICAg
ICAgICBtYWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxlKCktPnVuc2NoZWR1bGUocGFpcik7CiAg
ICAgdW5zY2hlZHVsZUFsbChtX3N1YnJlc291cmNlTG9hZGVycywgcGFpcik7CiAgICAgdW5zY2hl
ZHVsZUFsbChtX3BsdWdJblN0cmVhbUxvYWRlcnMsIHBhaXIpOwogICAgIHVuc2NoZWR1bGVBbGwo
bV9tdWx0aXBhcnRTdWJyZXNvdXJjZUxvYWRlcnMsIHBhaXIpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE0Mjc1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDc0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNYWlu
UmVzb3VyY2VMb2FkZXIuaCIKLQotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0LmgiCi0j
aW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRl
ICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRUaW1pbmcuaCIKLSNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgotI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCi0jaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2FjaGUu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VCdWZmZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgotI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRl
ICJTdWJyZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotCi0j
aWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLSNlbmRpZgotCi0j
aWYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQotI2luY2x1ZGUgIkNvbnRlbnRGaWx0ZXIuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU1haW5SZXNvdXJjZUxvYWRlcjo6TWFpblJl
c291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKLSAgICA6IG1fZGF0
YUxvYWRUaW1lcih0aGlzLCAmTWFpblJlc291cmNlTG9hZGVyOjpoYW5kbGVTdWJzdGl0dXRlRGF0
YUxvYWROb3cpCi0gICAgLCBtX2RvY3VtZW50TG9hZGVyKGRvY3VtZW50TG9hZGVyKQotICAgICwg
bV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVudChmYWxzZSkKLSAgICAsIG1fd2FpdGluZ0ZvckNvbnRl
bnRQb2xpY3koZmFsc2UpCi0gICAgLCBtX3RpbWVPZkxhc3REYXRhUmVjZWl2ZWQoMC4wKQotICAg
ICwgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlcigwKQotewotfQotCi1N
YWluUmVzb3VyY2VMb2FkZXI6On5NYWluUmVzb3VyY2VMb2FkZXIoKQotewotICAgIGNsZWFyUmVz
b3VyY2UoKTsKLX0KLQotUGFzc1JlZlB0cjxNYWluUmVzb3VyY2VMb2FkZXI+IE1haW5SZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE1haW5SZXNvdXJjZUxvYWRlcihkb2N1bWVudExvYWRlcikpOwot
fQotCi12b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6cmVjZWl2ZWRFcnJvcihjb25zdCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikKLXsKLSAgICAvLyBDYWxsaW5nIHJlY2VpdmVkTWFpblJlc291cmNlRXJy
b3Igd2lsbCBsaWtlbHkgcmVzdWx0IGluIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVj
dCB0byBnbyBhd2F5LgotICAgIFJlZlB0cjxNYWluUmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhp
cyk7Ci0gICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0RnJhbWUobV9kb2N1bWVudExvYWRlci0+ZnJh
bWUoKSk7Ci0KLSAgICBpZiAobV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRl
cikgewotICAgICAgICBBU1NFUlQoIWxvYWRlcigpKTsKLSAgICAgICAgZnJhbWVMb2FkZXIoKS0+
Y2xpZW50KCktPmRpc3BhdGNoRGlkRmFpbExvYWRpbmcoZG9jdW1lbnRMb2FkZXIoKSwgbV9pZGVu
dGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciwgZXJyb3IpOwotICAgIH0KLQotICAg
IC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHdlIGNhbGwgRG9jdW1lbnRMb2FkZXI6Om1haW5SZWNl
aXZlZEVycm9yIGJlZm9yZSBjYWxsaW5nIAotICAgIC8vIFJlc291cmNlTG9hZE5vdGlmaWVyOjpk
aWRGYWlsVG9Mb2FkIGJlY2F1c2UgbWFpblJlY2VpdmVkRXJyb3IgY2xlYXJzIG91dCB0aGUgcmVs
ZXZhbnQKLSAgICAvLyBkb2N1bWVudCBsb2FkZXJzLiBBbHNvLCBtYWluUmVjZWl2ZWRFcnJvciBl
bmRzIHVwIGNhbGxpbmcgYSBGcmFtZUxvYWREZWxlZ2F0ZSBtZXRob2QKLSAgICAvLyBhbmQgZGlk
RmFpbFRvTG9hZCBjYWxscyBhIFJlc291cmNlTG9hZERlbGVnYXRlIG1ldGhvZCBhbmQgdGhleSBu
ZWVkIHRvIGJlIGluIHRoZSBjb3JyZWN0IG9yZGVyLgotICAgIGRvY3VtZW50TG9hZGVyKCktPm1h
aW5SZWNlaXZlZEVycm9yKGVycm9yKTsKLX0KLQotdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmNh
bmNlbCgpCi17Ci0gICAgY2FuY2VsKFJlc291cmNlRXJyb3IoKSk7Ci19Ci0KLXZvaWQgTWFpblJl
c291cmNlTG9hZGVyOjpjYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAg
UmVmUHRyPE1haW5SZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKLSAgICBSZXNvdXJjZUVy
cm9yIHJlc291cmNlRXJyb3IgPSBlcnJvci5pc051bGwoKSA/IGZyYW1lTG9hZGVyKCktPmNhbmNl
bGxlZEVycm9yKHJlcXVlc3QoKSkgOiBlcnJvcjsKLQotICAgIG1fZGF0YUxvYWRUaW1lci5zdG9w
KCk7Ci0KLSAgICBpZiAobV93YWl0aW5nRm9yQ29udGVudFBvbGljeSkgewotICAgICAgICBmcmFt
ZUxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPmNhbmNlbENoZWNrKCk7Ci0gICAgICAgIEFTU0VS
VChtX3dhaXRpbmdGb3JDb250ZW50UG9saWN5KTsKLSAgICAgICAgbV93YWl0aW5nRm9yQ29udGVu
dFBvbGljeSA9IGZhbHNlOwotICAgICAgICBkZXJlZigpOyAvLyBiYWxhbmNlcyByZWYgaW4gcmVz
cG9uc2VSZWNlaXZlZAotICAgIH0KLQotICAgIGlmIChsb2FkZXIoKSkKLSAgICAgICAgbG9hZGVy
KCktPmNhbmNlbChyZXNvdXJjZUVycm9yKTsKLQotICAgIGNsZWFyUmVzb3VyY2UoKTsKLSAgICBy
ZWNlaXZlZEVycm9yKHJlc291cmNlRXJyb3IpOwotfQotCi12b2lkIE1haW5SZXNvdXJjZUxvYWRl
cjo6Y2xlYXJSZXNvdXJjZSgpCi17Ci0gICAgaWYgKG1fcmVzb3VyY2UpIHsKLSAgICAgICAgbV9y
ZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgICAgICBtX3Jlc291cmNlID0gMDsKLSAg
ICB9Ci19Ci0KLUZyYW1lTG9hZGVyKiBNYWluUmVzb3VyY2VMb2FkZXI6OmZyYW1lTG9hZGVyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLX0K
LQotY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBNYWluUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3QoKSBj
b25zdAotewotICAgIHJldHVybiBtX3Jlc291cmNlID8gbV9yZXNvdXJjZS0+cmVzb3VyY2VSZXF1
ZXN0KCkgOiBtX2luaXRpYWxSZXF1ZXN0OwotfQotCi1SZXNvdXJjZUVycm9yIE1haW5SZXNvdXJj
ZUxvYWRlcjo6aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT5pbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5n
ZUVycm9yKHJlcXVlc3QoKSk7Ci19Ci0KLXZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpzdG9wTG9h
ZGluZ0ZvclBvbGljeUNoYW5nZSgpCi17Ci0gICAgUmVzb3VyY2VFcnJvciBlcnJvciA9IGludGVy
cnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoKTsKLSAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlv
bih0cnVlKTsKLSAgICBjYW5jZWwoZXJyb3IpOwotfQotCi12b2lkIE1haW5SZXNvdXJjZUxvYWRl
cjo6Y2FsbENvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KHZvaWQqIGFyZ3VtZW50LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBz
aG91bGRDb250aW51ZSkKLXsKLSAgICBzdGF0aWNfY2FzdDxNYWluUmVzb3VyY2VMb2FkZXIqPihh
cmd1bWVudCktPmNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KHJlcXVlc3QsIHNob3VsZENv
bnRpbnVlKTsKLX0KLQotdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJOYXZp
Z2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91bGRD
b250aW51ZSkKLXsKLSAgICBpZiAoIXNob3VsZENvbnRpbnVlKQotICAgICAgICBzdG9wTG9hZGlu
Z0ZvclBvbGljeUNoYW5nZSgpOwotICAgIGVsc2UgaWYgKG1fc3Vic3RpdHV0ZURhdGEuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIC8vIEEgcmVkaXJlY3QgcmVzdWx0ZWQgaW4gbG9hZGluZyBzdWJzdGl0
dXRlIGRhdGEuCi0gICAgICAgIEFTU0VSVChkb2N1bWVudExvYWRlcigpLT50aW1pbmcoKS0+cmVk
aXJlY3RDb3VudCgpKTsKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSBvdXIgcmVmZXJl
bmNlIHRvIHRoZSBDYWNoZWRSZXNvdXJjZSBpbiBmYXZvciBvZiBhIFN1YnN0aXR1dGVEYXRhIGxv
YWQuCi0gICAgICAgIC8vIFRoaXMgd2lsbCBwcm9iYWJseSB0cmlnZ2VyIHRoZSBjYW5jZWxsYXRp
b24gb2YgdGhlIENhY2hlZFJlc291cmNlJ3MgdW5kZXJseWluZyBSZXNvdXJjZUxvYWRlciwgdGhv
dWdoIHRoZXJlIGlzIGEKLSAgICAgICAgLy8gc21hbGwgY2hhbmNlIHRoYXQgdGhlIHJlc291cmNl
IGlzIGJlaW5nIGxvYWRlZCBieSBhIGRpZmZlcmVudCBGcmFtZSwgcHJldmVudGluZyB0aGUgUmVz
b3VyY2VMb2FkZXIgZnJvbSBiZWluZyBjYW5jZWxsZWQuCi0gICAgICAgIC8vIElmIHRoZSBSZXNv
dXJjZUxvYWRlciBpcyBpbmRlZWQgY2FuY2VsbGVkLCBpdCB3b3VsZCBub3JtYWxseSBzZW5kIHJl
c291cmNlIGxvYWQgY2FsbGJhY2tzLgotICAgICAgICAvLyBIb3dldmVyLCBmcm9tIGFuIEFQSSBw
ZXJzcGVjdGl2ZSwgdGhpcyBpc24ndCBhIGNhbmNlbGxhdGlvbi4gVGhlcmVmb3JlLCBzZXZlciBv
dXIgcmVsYXRpb25zaGlwIHdpdGggdGhlIG5ldHdvcmsgbG9hZCB2aWEgY2xlYXJSZXNvdXJjZSgp
LAotICAgICAgICAvLyBidXQgcHJldmVudCB0aGUgUmVzb3VyY2VMb2FkZXIgZnJvbSBzZW5kaW5n
IFJlc291cmNlTG9hZE5vdGlmaWVyIGNhbGxiYWNrcy4KLSAgICAgICAgUmVmUHRyPFJlc291cmNl
TG9hZGVyPiByZXNvdXJjZUxvYWRlciA9IGxvYWRlcigpOwotICAgICAgICBBU1NFUlQocmVzb3Vy
Y2VMb2FkZXItPnNob3VsZFNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7Ci0gICAgICAgIHJl
c291cmNlTG9hZGVyLT5zZXRTZW5kQ2FsbGJhY2tQb2xpY3koRG9Ob3RTZW5kQ2FsbGJhY2tzKTsK
LSAgICAgICAgY2xlYXJSZXNvdXJjZSgpOwotICAgICAgICByZXNvdXJjZUxvYWRlci0+c2V0U2Vu
ZENhbGxiYWNrUG9saWN5KFNlbmRDYWxsYmFja3MpOwotICAgICAgICBoYW5kbGVTdWJzdGl0dXRl
RGF0YUxvYWRTb29uKHJlcXVlc3QpOwotICAgIH0KLQotICAgIGRlcmVmKCk7IC8vIGJhbGFuY2Vz
IHJlZiBpbiB3aWxsU2VuZFJlcXVlc3QKLX0KLQotYm9vbCBNYWluUmVzb3VyY2VMb2FkZXI6Omlz
UG9zdE9yUmVkaXJlY3RBZnRlclBvc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQotewotICAgIGlmIChu
ZXdSZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgaW50IHN0YXR1cyA9IHJlZGlyZWN0UmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKLSAg
ICBpZiAoKChzdGF0dXMgPj0gMzAxICYmIHN0YXR1cyA8PSAzMDMpIHx8IHN0YXR1cyA9PSAzMDcp
Ci0gICAgICAgICYmIGZyYW1lTG9hZGVyKCktPmluaXRpYWxSZXF1ZXN0KCkuaHR0cE1ldGhvZCgp
ID09ICJQT1NUIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1QYXNzUmVmUHRyPFJlc291cmNlQnVmZmVyPiBNYWluUmVzb3VyY2VMb2FkZXI6OnJl
c291cmNlRGF0YSgpCi17Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlIHx8ICFtX3N1YnN0aXR1dGVE
YXRhLmlzVmFsaWQoKSk7Ci0gICAgaWYgKG1fcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiBtX3Jl
c291cmNlLT5yZXNvdXJjZUJ1ZmZlcigpOwotICAgIGlmIChtX3N1YnN0aXR1dGVEYXRhLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuIFJlc291cmNlQnVmZmVyOjpjcmVhdGUobV9zdWJzdGl0dXRl
RGF0YS5jb250ZW50KCktPmRhdGEoKSwgbV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPnNpemUo
KSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpyZWRpcmVj
dFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQotewotICAgIEFT
U0VSVF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOwotICAgIHdpbGxT
ZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKLX0KLQotdm9pZCBNYWluUmVz
b3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCi17Ci0gICAgLy8gTm90
ZSB0aGF0IHRoZXJlIGFyZSBubyBhc3NlcnRzIGhlcmUgYXMgdGhlcmUgYXJlIGZvciB0aGUgb3Ro
ZXIgY2FsbGJhY2tzLiBUaGlzIGlzIGR1ZSB0byB0aGUKLSAgICAvLyBmYWN0IHRoYXQgdGhpcyAi
Y2FsbGJhY2siIGlzIHNlbnQgd2hlbiBzdGFydGluZyBldmVyeSBsb2FkLCBhbmQgdGhlIHN0YXRl
IG9mIGNhbGxiYWNrCi0gICAgLy8gZGVmZXJyYWxzIHBsYXlzIGxlc3Mgb2YgYSBwYXJ0IGluIHRo
aXMgZnVuY3Rpb24gaW4gcHJldmVudGluZyB0aGUgYmFkIGJlaGF2aW9yIGRlZmVycmluZyAKLSAg
ICAvLyBjYWxsYmFja3MgaXMgbWVhbnQgdG8gcHJldmVudC4KLSAgICBBU1NFUlQoIW5ld1JlcXVl
c3QuaXNOdWxsKCkpOwotCi0gICAgLy8gVGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8g
YW55dGhpbmcgaW5jbHVkaW5nIHBvc3NpYmx5IHJlbW92aW5nIHRoZSBsYXN0Ci0gICAgLy8gcmVm
ZXJlbmNlIHRvIHRoaXMgb2JqZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYuCi0g
ICAgUmVmUHRyPE1haW5SZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmICgh
ZnJhbWVMb2FkZXIoKS0+Y2hlY2tJZkZvcm1BY3Rpb25BbGxvd2VkQnlDU1AobmV3UmVxdWVzdC51
cmwoKSkpIHsKLSAgICAgICAgY2FuY2VsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIoKS0+dGltaW5nKCktPmZldGNoU3RhcnQoKSk7Ci0gICAg
aWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIElmIHRoZSByZWRp
cmVjdGluZyB1cmwgaXMgbm90IGFsbG93ZWQgdG8gZGlzcGxheSBjb250ZW50IGZyb20gdGhlIHRh
cmdldCBvcmlnaW4sCi0gICAgICAgIC8vIHRoZW4gYmxvY2sgdGhlIHJlZGlyZWN0LgotICAgICAg
ICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJlZGlyZWN0aW5nT3JpZ2luID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZShyZWRpcmVjdFJlc3BvbnNlLnVybCgpKTsKLSAgICAgICAgaWYgKCFyZWRpcmVj
dGluZ09yaWdpbi0+Y2FuRGlzcGxheShuZXdSZXF1ZXN0LnVybCgpKSkgewotICAgICAgICAgICAg
RnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChtX2RvY3VtZW50TG9hZGVyLT5mcmFt
ZSgpLCBuZXdSZXF1ZXN0LnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgICAgIGNhbmNlbCgpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGRvY3VtZW50TG9hZGVyKCkt
PnRpbWluZygpLT5hZGRSZWRpcmVjdChyZWRpcmVjdFJlc3BvbnNlLnVybCgpLCBuZXdSZXF1ZXN0
LnVybCgpKTsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgY29va2llIHBvbGljeSBiYXNlIFVSTCBh
cyBVUkwgY2hhbmdlcywgZXhjZXB0IGZvciBzdWJmcmFtZXMsIHdoaWNoIHVzZSB0aGUKLSAgICAv
LyBVUkwgb2YgdGhlIG1haW4gZnJhbWUgd2hpY2ggZG9lc24ndCBjaGFuZ2Ugd2hlbiB3ZSByZWRp
cmVjdC4KLSAgICBpZiAoZnJhbWVMb2FkZXIoKS0+aXNMb2FkaW5nTWFpbkZyYW1lKCkpCi0gICAg
ICAgIG5ld1JlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMobmV3UmVxdWVzdC51cmwoKSk7
Ci0KLSAgICAvLyBJZiB3ZSdyZSBmaWVsZGluZyBhIHJlZGlyZWN0IGluIHJlc3BvbnNlIHRvIGEg
UE9TVCwgZm9yY2UgYSBsb2FkIGZyb20gb3JpZ2luLCBzaW5jZQotICAgIC8vIHRoaXMgaXMgYSBj
b21tb24gc2l0ZSB0ZWNobmlxdWUgdG8gcmV0dXJuIHRvIGEgcGFnZSB2aWV3aW5nIHNvbWUgZGF0
YSB0aGF0IHRoZSBQT1NUCi0gICAgLy8ganVzdCBtb2RpZmllZC4KLSAgICAvLyBBbHNvLCBQT1NU
IHJlcXVlc3RzIGFsd2F5cyBsb2FkIGZyb20gb3JpZ2luLCBidXQgdGhpcyBkb2VzIG5vdCBhZmZl
Y3Qgc3VicmVzb3VyY2VzLgotICAgIGlmIChuZXdSZXF1ZXN0LmNhY2hlUG9saWN5KCkgPT0gVXNl
UHJvdG9jb2xDYWNoZVBvbGljeSAmJiBpc1Bvc3RPclJlZGlyZWN0QWZ0ZXJQb3N0KG5ld1JlcXVl
c3QsIHJlZGlyZWN0UmVzcG9uc2UpKQotICAgICAgICBuZXdSZXF1ZXN0LnNldENhY2hlUG9saWN5
KFJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhKTsKLQotICAgIEZyYW1lKiB0b3AgPSBtX2RvY3VtZW50
TG9hZGVyLT5mcmFtZSgpLT50cmVlKCktPnRvcCgpOwotICAgIGlmICh0b3AgIT0gbV9kb2N1bWVu
dExvYWRlci0+ZnJhbWUoKSkgewotICAgICAgICBpZiAoIWZyYW1lTG9hZGVyKCktPm1peGVkQ29u
dGVudENoZWNrZXIoKS0+Y2FuRGlzcGxheUluc2VjdXJlQ29udGVudCh0b3AtPmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCksIG5ld1JlcXVlc3QudXJsKCkpKSB7Ci0gICAgICAgICAgICBjYW5j
ZWwoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIERv
bid0IHNldCB0aGlzIG9uIHRoZSBmaXJzdCByZXF1ZXN0LiBJdCBpcyBzZXQgd2hlbiB0aGUgbWFp
biBsb2FkIHdhcyBzdGFydGVkLgotICAgIG1fZG9jdW1lbnRMb2FkZXItPnNldFJlcXVlc3QobmV3
UmVxdWVzdCk7Ci0KLSAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpIHsKLSAgICAg
ICAgLy8gV2UgY2hlY2tlZCBhcHBsaWNhdGlvbiBjYWNoZSBmb3IgaW5pdGlhbCBVUkwsIG5vdyB3
ZSBuZWVkIHRvIGNoZWNrIGl0IGZvciByZWRpcmVjdGVkIG9uZS4KLSAgICAgICAgQVNTRVJUKCFt
X3N1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSk7Ci0gICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFw
cGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZE1haW5SZXNvdXJjZUZvclJlZGlyZWN0KG5l
d1JlcXVlc3QsIG1fc3Vic3RpdHV0ZURhdGEpOwotICAgICAgICBpZiAobV9zdWJzdGl0dXRlRGF0
YS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291
cmNlTG9hZGVyID0gaWRlbnRpZmllcigpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJZGVhbGx5
IHdlJ2Qgc3RvcCB0aGUgSS9PIHVudGlsIHdlIGhlYXIgYmFjayBmcm9tIHRoZSBuYXZpZ2F0aW9u
IHBvbGljeSBkZWxlZ2F0ZQotICAgIC8vIGxpc3RlbmVyLiBCdXQgdGhlcmUncyBubyB3YXkgdG8g
ZG8gdGhhdCBpbiBwcmFjdGljZS4gU28gaW5zdGVhZCB3ZSBjYW5jZWwgbGF0ZXIgaWYgdGhlCi0g
ICAgLy8gbGlzdGVuZXIgdGVsbHMgdXMgdG8uIEluIHByYWN0aWNlIHRoYXQgbWVhbnMgdGhlIG5h
dmlnYXRpb24gcG9saWN5IG5lZWRzIHRvIGJlIGRlY2lkZWQKLSAgICAvLyBzeW5jaHJvbm91c2x5
IGZvciB0aGVzZSByZWRpcmVjdCBjYXNlcy4KLSAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UuaXNO
dWxsKCkpIHsKLSAgICAgICAgcmVmKCk7IC8vIGJhbGFuY2VkIGJ5IGRlcmVmIGluIGNvbnRpbnVl
QWZ0ZXJOYXZpZ2F0aW9uUG9saWN5Ci0gICAgICAgIGZyYW1lTG9hZGVyKCktPnBvbGljeUNoZWNr
ZXIoKS0+Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KG5ld1JlcXVlc3QsIGNhbGxDb250aW51ZUFmdGVy
TmF2aWdhdGlvblBvbGljeSwgdGhpcyk7Ci0gICAgfQotfQotCi12b2lkIE1haW5SZXNvdXJjZUxv
YWRlcjo6Y29udGludWVBZnRlckNvbnRlbnRQb2xpY3koUG9saWN5QWN0aW9uIGNvbnRlbnRQb2xp
Y3ksIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIpCi17Ci0gICAgS1VSTCB1cmwgPSByZXF1ZXN0
KCkudXJsKCk7Ci0gICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSA9IHIubWltZVR5cGUoKTsKLSAg
ICAKLSAgICBzd2l0Y2ggKGNvbnRlbnRQb2xpY3kpIHsKLSAgICBjYXNlIFBvbGljeVVzZTogewot
ICAgICAgICAvLyBQcmV2ZW50IHJlbW90ZSB3ZWIgYXJjaGl2ZXMgZnJvbSBsb2FkaW5nIGJlY2F1
c2UgdGhleSBjYW4gY2xhaW0gdG8gYmUgZnJvbSBhbnkgZG9tYWluIGFuZCB0aHVzIGF2b2lkIGNy
b3NzLWRvbWFpbiBzZWN1cml0eSBjaGVja3MgKDQxMjAyNTUpLgotICAgICAgICBib29sIGlzUmVt
b3RlV2ViQXJjaGl2ZSA9IChlcXVhbElnbm9yaW5nQ2FzZSgiYXBwbGljYXRpb24veC13ZWJhcmNo
aXZlIiwgbWltZVR5cGUpCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZSgibWVzc2FnZS9yZmM4MjIiLCBtaW1l
VHlwZSkKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlcXVh
bElnbm9yaW5nQ2FzZSgibXVsdGlwYXJ0L3JlbGF0ZWQiLCBtaW1lVHlwZSkpCi0gICAgICAgICAg
ICAmJiAhbV9zdWJzdGl0dXRlRGF0YS5pc1ZhbGlkKCkgJiYgIVNjaGVtZVJlZ2lzdHJ5OjpzaG91
bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwodXJsLnByb3RvY29sKCkpOwotICAgICAgICBpZiAoIWZy
YW1lTG9hZGVyKCktPmNsaWVudCgpLT5jYW5TaG93TUlNRVR5cGUobWltZVR5cGUpIHx8IGlzUmVt
b3RlV2ViQXJjaGl2ZSkgewotICAgICAgICAgICAgZnJhbWVMb2FkZXIoKS0+cG9saWN5Q2hlY2tl
cigpLT5jYW5ub3RTaG93TUlNRVR5cGUocik7Ci0gICAgICAgICAgICAvLyBDaGVjayByZWFjaGVk
VGVybWluYWxTdGF0ZSBzaW5jZSB0aGUgbG9hZCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY2FuY2Vs
ZWQgaW5zaWRlIG9mIF9oYW5kbGVVbmltcGxlbWVudGFibGVQb2xpY3lXaXRoRXJyb3JDb2RlOjou
Ci0gICAgICAgICAgICBzdG9wTG9hZGluZ0ZvclBvbGljeUNoYW5nZSgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgUG9s
aWN5RG93bmxvYWQ6IHsKLSAgICAgICAgLy8gbV9yZXNvdXJjZSBjYW4gYmUgbnVsbCwgZS5nLiB3
aGVuIGxvYWRpbmcgYSBzdWJzdGl0dXRlIHJlc291cmNlIGZyb20gYXBwbGljYXRpb24gY2FjaGUu
Ci0gICAgICAgIGlmICghbV9yZXNvdXJjZSkgewotICAgICAgICAgICAgcmVjZWl2ZWRFcnJvcihm
cmFtZUxvYWRlcigpLT5jbGllbnQoKS0+Y2Fubm90U2hvd1VSTEVycm9yKHJlcXVlc3QoKSkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5RG93bmxvYWQobV9kb2N1bWVudExvYWRlci0+ZnJh
bWUoKSwgZG9jdW1lbnRMb2FkZXIoKSwgaWRlbnRpZmllcigpLCByKTsKLQotICAgICAgICAvLyBX
aGVuIHN0YXJ0aW5nIHRoZSByZXF1ZXN0LCB3ZSBkaWRuJ3Qga25vdyB0aGF0IGl0IHdvdWxkIHJl
c3VsdCBpbiBkb3dubG9hZCBhbmQgbm90IG5hdmlnYXRpb24uIE5vdyB3ZSBrbm93IHRoYXQgbWFp
biBkb2N1bWVudCBVUkwgZGlkbid0IGNoYW5nZS4KLSAgICAgICAgLy8gRG93bmxvYWQgbWF5IHVz
ZSB0aGlzIGtub3dsZWRnZSBmb3IgcHVycG9zZXMgdW5yZWxhdGVkIHRvIGNvb2tpZXMsIG5vdGFi
bHkgZm9yIHNldHRpbmcgZmlsZSBxdWFyYW50aW5lIGRhdGEuCi0gICAgICAgIFJlc291cmNlUmVx
dWVzdCByZXF1ZXN0ID0gdGhpcy0+cmVxdWVzdCgpOwotICAgICAgICBmcmFtZUxvYWRlcigpLT5z
ZXRPcmlnaW5hbFVSTEZvckRvd25sb2FkUmVxdWVzdChyZXF1ZXN0KTsKLQotICAgICAgICBmcmFt
ZUxvYWRlcigpLT5jbGllbnQoKS0+Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKHRo
aXMsIHJlcXVlc3QsIHIpOwotCi0gICAgICAgIC8vIEl0IG1pZ2h0IGhhdmUgZ29uZSBtaXNzaW5n
Ci0gICAgICAgIGlmIChsb2FkZXIoKSkKLSAgICAgICAgICAgIGxvYWRlcigpLT5kaWRGYWlsKGlu
dGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgY2FzZSBQb2xpY3lJZ25vcmU6Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6Y29udGludWVXaXRoUG9saWN5SWdub3JlKG1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCksIGRv
Y3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIoKSwgcik7Ci0gICAgICAgIHN0b3BMb2FkaW5nRm9y
UG9saWN5Q2hhbmdlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8TWFpblJlc291
cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgaWYgKHIuaXNIVFRQKCkpIHsKLSAgICAg
ICAgaW50IHN0YXR1cyA9IHIuaHR0cFN0YXR1c0NvZGUoKTsKLSAgICAgICAgaWYgKHN0YXR1cyA8
IDIwMCB8fCBzdGF0dXMgPj0gMzAwKSB7Ci0gICAgICAgICAgICBib29sIGhvc3RlZEJ5T2JqZWN0
ID0gZnJhbWVMb2FkZXIoKS0+aXNIb3N0ZWRCeU9iamVjdEVsZW1lbnQoKTsKLQotICAgICAgICAg
ICAgZnJhbWVMb2FkZXIoKS0+aGFuZGxlRmFsbGJhY2tDb250ZW50KCk7Ci0gICAgICAgICAgICAv
LyBvYmplY3QgZWxlbWVudHMgYXJlIG5vIGxvbmdlciByZW5kZXJlZCBhZnRlciB3ZSBmYWxsYmFj
aywgc28gZG9uJ3QKLSAgICAgICAgICAgIC8vIGtlZXAgdHJ5aW5nIHRvIHByb2Nlc3MgZGF0YSBm
cm9tIHRoZWlyIGxvYWQKLQotICAgICAgICAgICAgaWYgKGhvc3RlZEJ5T2JqZWN0KQotICAgICAg
ICAgICAgICAgIGNhbmNlbCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX2RvY3Vt
ZW50TG9hZGVyLT5pc1N0b3BwaW5nKCkgJiYgbV9zdWJzdGl0dXRlRGF0YS5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgaWYgKG1fc3Vic3RpdHV0ZURhdGEuY29udGVudCgpLT5zaXplKCkpCi0gICAgICAg
ICAgICBkYXRhUmVjZWl2ZWQoMCwgbV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPmRhdGEoKSwg
bV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPnNpemUoKSk7Ci0gICAgICAgIGlmICghbV9kb2N1
bWVudExvYWRlci0+aXNTdG9wcGluZygpKQotICAgICAgICAgICAgZGlkRmluaXNoTG9hZGluZygw
KTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpjYWxsQ29udGludWVBZnRl
ckNvbnRlbnRQb2xpY3kodm9pZCogYXJndW1lbnQsIFBvbGljeUFjdGlvbiBwb2xpY3kpCi17Ci0g
ICAgc3RhdGljX2Nhc3Q8TWFpblJlc291cmNlTG9hZGVyKj4oYXJndW1lbnQpLT5jb250aW51ZUFm
dGVyQ29udGVudFBvbGljeShwb2xpY3kpOwotfQotCi12b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6
Y29udGludWVBZnRlckNvbnRlbnRQb2xpY3koUG9saWN5QWN0aW9uIHBvbGljeSkKLXsKLSAgICBB
U1NFUlQobV93YWl0aW5nRm9yQ29udGVudFBvbGljeSk7Ci0gICAgbV93YWl0aW5nRm9yQ29udGVu
dFBvbGljeSA9IGZhbHNlOwotICAgIGlmICghbV9kb2N1bWVudExvYWRlci0+aXNTdG9wcGluZygp
KQotICAgICAgICBjb250aW51ZUFmdGVyQ29udGVudFBvbGljeShwb2xpY3ksIG1fcmVzcG9uc2Up
OwotICAgIGRlcmVmKCk7IC8vIGJhbGFuY2VzIHJlZiBpbiByZXNwb25zZVJlY2VpdmVkCi19Ci0K
LXZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcikKLXsKLSAgICBBU1NFUlRfVU5V
U0VEKHJlc291cmNlLCBtX3Jlc291cmNlID09IHJlc291cmNlKTsKLSAgICBib29sIHdpbGxMb2Fk
RmFsbGJhY2sgPSBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXli
ZUxvYWRGYWxsYmFja0Zvck1haW5SZXNwb25zZShyZXF1ZXN0KCksIHIpOwotCi0gICAgLy8gVGhl
IG1lbW9yeSBjYWNoZSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIG9y
IGl0cyBjYWNoaW5nIHJ1bGVzLiBTbyBpZiBhIG1haW4gcmVzb3VyY2UgaXMgc2VydmVkCi0gICAg
Ly8gZnJvbSB0aGUgYXBwbGljYXRpb24gY2FjaGUsIGVuc3VyZSB3ZSBkb24ndCBzYXZlIHRoZSBy
ZXN1bHQgZm9yIGZ1dHVyZSB1c2UuCi0gICAgYm9vbCBzaG91bGRSZW1vdmVSZXNvdXJjZUZyb21D
YWNoZSA9IHdpbGxMb2FkRmFsbGJhY2s7Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgLy8g
Y2hyb21pdW0ncyBBcHBsaWNhdGlvbkNhY2hlSG9zdCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcmV0
dXJucyB0cnVlIGZvciBtYXliZUxvYWRGYWxsYmFja0Zvck1haW5SZXNwb25zZSgpLiBIb3dldmVy
LCBhbGwgcmVzcG9uc2VzIGxvYWRlZAotICAgIC8vIGZyb20gYXBwY2FjaGUgd2lsbCBoYXZlIGEg
bm9uLXplcm8gYXBwQ2FjaGVJRCgpLgotICAgIGlmIChyLmFwcENhY2hlSUQoKSkKLSAgICAgICAg
c2hvdWxkUmVtb3ZlUmVzb3VyY2VGcm9tQ2FjaGUgPSB0cnVlOwotI2VuZGlmCi0gICAgaWYgKHNo
b3VsZFJlbW92ZVJlc291cmNlRnJvbUNhY2hlKQotICAgICAgICBtZW1vcnlDYWNoZSgpLT5yZW1v
dmUobV9yZXNvdXJjZS5nZXQoKSk7Ci0KLSAgICBpZiAod2lsbExvYWRGYWxsYmFjaykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHhGcmFt
ZU9wdGlvbkhlYWRlciwgKCJ4LWZyYW1lLW9wdGlvbnMiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7Ci0gICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBy
Lmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKHhGcmFtZU9wdGlvbkhlYWRlcik7Ci0gICAgaWYgKGl0
ICE9IHIuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpKSB7Ci0gICAgICAgIFN0cmluZyBjb250ZW50
ID0gaXQtPnZhbHVlOwotICAgICAgICBpZiAoZnJhbWVMb2FkZXIoKS0+c2hvdWxkSW50ZXJydXB0
TG9hZEZvclhGcmFtZU9wdGlvbnMoY29udGVudCwgci51cmwoKSwgaWRlbnRpZmllcigpKSkgewot
ICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpjb250aW51ZUFmdGVyWEZyYW1l
T3B0aW9uc0RlbmllZChtX2RvY3VtZW50TG9hZGVyLT5mcmFtZSgpLCBkb2N1bWVudExvYWRlcigp
LCBpZGVudGlmaWVyKCksIHIpOwotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiUmVmdXNl
ZCB0byBkaXNwbGF5ICciICsgci51cmwoKS5zdHJpbmcoKSArICInIGluIGEgZnJhbWUgYmVjYXVz
ZSBpdCBzZXQgJ1gtRnJhbWUtT3B0aW9ucycgdG8gJyIgKyBjb250ZW50ICsgIicuIjsKLSAgICAg
ICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCktPmRvY3VtZW50KCktPmFkZENvbnNvbGVN
ZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGlkZW50
aWZpZXIoKSk7Ci0KLSAgICAgICAgICAgIGNhbmNlbCgpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgaXMgYSBidWcgaW4gQ0ZOZXR3b3JrIHdo
ZXJlIGNhbGxiYWNrcyBjYW4gYmUgZGlzcGF0Y2hlZCBldmVuIHdoZW4gbG9hZHMgYXJlIGRlZmVy
cmVkLgotICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNjMwNDYwMD4gZm9yIG1vcmUgZGV0YWls
cy4KLSNpZiAhVVNFKENGKQotICAgIEFTU0VSVCghZGVmZXJzTG9hZGluZygpKTsKLSNlbmRpZgot
Ci0gICAgaWYgKG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQpIHsKLSAgICAgICAgbV9kb2N1bWVu
dExvYWRlci0+c2V0dXBGb3JSZXBsYWNlKCk7Ci0gICAgICAgIG1fcmVzb3VyY2UtPmNsZWFyKCk7
Ci0gICAgfQotICAgIAotICAgIGlmIChyLmlzTXVsdGlwYXJ0KCkpCi0gICAgICAgIG1fbG9hZGlu
Z011bHRpcGFydENvbnRlbnQgPSB0cnVlOwotICAgICAgICAKLSAgICAvLyBUaGUgYWRkaXRpb25h
bCBwcm9jZXNzaW5nIGNhbiBkbyBhbnl0aGluZyBpbmNsdWRpbmcgcG9zc2libHkgcmVtb3Zpbmcg
dGhlIGxhc3QKLSAgICAvLyByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3Q7IG9uZSBleGFtcGxlIG9m
IHRoaXMgaXMgMzI2NjIxNi4KLSAgICBSZWZQdHI8TWFpblJlc291cmNlTG9hZGVyPiBwcm90ZWN0
KHRoaXMpOwotCi0gICAgbV9kb2N1bWVudExvYWRlci0+c2V0UmVzcG9uc2Uocik7Ci0KLSAgICBt
X3Jlc3BvbnNlID0gcjsKLQotICAgIGlmIChtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291
cmNlTG9hZGVyKQotICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5kaXNwYXRjaERp
ZFJlY2VpdmVSZXNwb25zZShkb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVyKCksIG1fcmVzcG9u
c2UsIDApOwotCi0gICAgQVNTRVJUKCFtX3dhaXRpbmdGb3JDb250ZW50UG9saWN5KTsKLSAgICBt
X3dhaXRpbmdGb3JDb250ZW50UG9saWN5ID0gdHJ1ZTsKLSAgICByZWYoKTsgLy8gYmFsYW5jZWQg
YnkgZGVyZWYgaW4gY29udGludWVBZnRlckNvbnRlbnRQb2xpY3kgYW5kIGNhbmNlbAotCi0gICAg
Ly8gQWx3YXlzIHNob3cgY29udGVudCB3aXRoIHZhbGlkIHN1YnN0aXR1dGUgZGF0YS4KLSAgICBp
ZiAobV9kb2N1bWVudExvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgY2FsbENvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KHRoaXMsIFBvbGljeVVzZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoRlRQRElSKQotICAgIC8vIFJlc3BlY3Qg
dGhlIGhpZGRlbiBGVFAgRGlyZWN0b3J5IExpc3RpbmcgcHJlZiBzbyBpdCBjYW4gYmUgdGVzdGVk
IGV2ZW4gaWYgdGhlIHBvbGljeSBkZWxlZ2F0ZSBtaWdodCBvdGhlcndpc2UgZGlzYWxsb3cgaXQK
LSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2RvY3VtZW50TG9hZGVyLT5mcmFtZSgpLT5zZXR0
aW5ncygpOwotICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+Zm9yY2VGVFBEaXJlY3RvcnlM
aXN0aW5ncygpICYmIG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBwbGljYXRpb24veC1mdHAt
ZGlyZWN0b3J5IikgewotICAgICAgICBjYWxsQ29udGludWVBZnRlckNvbnRlbnRQb2xpY3kodGhp
cywgUG9saWN5VXNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0jaWYgVVNF
KENPTlRFTlRfRklMVEVSSU5HKQotICAgIGlmIChyLnVybCgpLnByb3RvY29sSXMoImh0dHBzIikg
JiYgQ29udGVudEZpbHRlcjo6aXNFbmFibGVkKCkpCi0gICAgICAgIG1fY29udGVudEZpbHRlciA9
IENvbnRlbnRGaWx0ZXI6OmNyZWF0ZShyKTsKLSNlbmRpZgotCi0gICAgZnJhbWVMb2FkZXIoKS0+
cG9saWN5Q2hlY2tlcigpLT5jaGVja0NvbnRlbnRQb2xpY3kobV9yZXNwb25zZSwgY2FsbENvbnRp
bnVlQWZ0ZXJDb250ZW50UG9saWN5LCB0aGlzKTsKLX0KLQotdm9pZCBNYWluUmVzb3VyY2VMb2Fk
ZXI6OmRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRhdGEpOwotICAgIEFTU0VSVChsZW5ndGgg
IT0gMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgcmVzb3VyY2UgPT0gbV9yZXNvdXJj
ZSk7Ci0gICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKLQotI2lmIFVTRShDRk5FVFdP
UkspIHx8IFBMQVRGT1JNKE1BQykKLSAgICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2Js
ZW0vNjA2MDc4Mj4KLSAgICBpZiAobV9yZXNwb25zZS5pc051bGwoKSkgewotICAgICAgICBtX3Jl
c3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShLVVJMKCksICJ0ZXh0L2h0bWwiLCAwLCBTdHJpbmco
KSwgU3RyaW5nKCkpOwotICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVy
ID0gbV9kb2N1bWVudExvYWRlci5nZXQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5z
ZXRSZXNwb25zZShtX3Jlc3BvbnNlKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFRoZXJlIGlz
IGEgYnVnIGluIENGTmV0d29yayB3aGVyZSBjYWxsYmFja3MgY2FuIGJlIGRpc3BhdGNoZWQgZXZl
biB3aGVuIGxvYWRzIGFyZSBkZWZlcnJlZC4KLSAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYz
MDQ2MDA+IGZvciBtb3JlIGRldGFpbHMuCi0jaWYgIVVTRShDRikKLSAgICBBU1NFUlQoIWRlZmVy
c0xvYWRpbmcoKSk7Ci0jZW5kaWYKLQotI2lmIFVTRShDT05URU5UX0ZJTFRFUklORykKLSAgICBi
b29sIGxvYWRXYXNCbG9ja2VkQmVmb3JlRmluaXNoaW5nID0gZmFsc2U7Ci0gICAgaWYgKG1fY29u
dGVudEZpbHRlciAmJiBtX2NvbnRlbnRGaWx0ZXItPm5lZWRzTW9yZURhdGEoKSkgewotICAgICAg
ICBtX2NvbnRlbnRGaWx0ZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKLQotICAgICAgICBpZiAo
bV9jb250ZW50RmlsdGVyLT5uZWVkc01vcmVEYXRhKCkpIHsKLSAgICAgICAgICAgIC8vIFNpbmNl
IHRoZSBmaWx0ZXIgc3RpbGwgbmVlZHMgbW9yZSBkYXRhIHRvIG1ha2UgYSBkZWNpc2lvbiwKLSAg
ICAgICAgICAgIC8vIHRyYW5zaXRpb24gYmFjayB0byB0aGUgY29tbWl0dGVkIHN0YXRlIHNvIHRo
YXQgd2UgZG9uJ3QgcGFydGlhbGx5Ci0gICAgICAgICAgICAvLyBsb2FkIGNvbnRlbnQgdGhhdCBt
aWdodCBsYXRlciBiZSBibG9ja2VkLgotICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+cmVj
ZWl2ZWREYXRhKDAsIDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZGF0YSA9IG1fY29udGVudEZpbHRlci0+Z2V0UmVwbGFjZW1lbnREYXRhKGxlbmd0aCk7Ci0g
ICAgICAgIGxvYWRXYXNCbG9ja2VkQmVmb3JlRmluaXNoaW5nID0gbV9jb250ZW50RmlsdGVyLT5k
aWRCbG9ja0RhdGEoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChtX2lkZW50aWZpZXJGb3JM
b2FkV2l0aG91dFJlc291cmNlTG9hZGVyKQotICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmll
cigpLT5kaXNwYXRjaERpZFJlY2VpdmVEYXRhKGRvY3VtZW50TG9hZGVyKCksIGlkZW50aWZpZXIo
KSwgZGF0YSwgbGVuZ3RoLCAtMSk7Ci0KLSAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5tYWluUmVzb3VyY2VEYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoLCAtMSwg
ZmFsc2UpOwotCi0gICAgLy8gVGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8gYW55dGhp
bmcgaW5jbHVkaW5nIHBvc3NpYmx5IHJlbW92aW5nIHRoZSBsYXN0Ci0gICAgLy8gcmVmZXJlbmNl
IHRvIHRoaXMgb2JqZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYuCi0gICAgUmVm
UHRyPE1haW5SZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKLQotICAgIG1fdGltZU9mTGFz
dERhdGFSZWNlaXZlZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotCi0gICAgZG9j
dW1lbnRMb2FkZXIoKS0+cmVjZWl2ZWREYXRhKGRhdGEsIGxlbmd0aCk7Ci0KLSNpZiBVU0UoQ09O
VEVOVF9GSUxURVJJTkcpCi0gICAgaWYgKGxvYWRXYXNCbG9ja2VkQmVmb3JlRmluaXNoaW5nKQot
ICAgICAgICBjYW5jZWwoKTsKLSNlbmRpZgotfQotCi12b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6
ZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSkKLXsKLSAgICAvLyBUaGVyZSBpcyBh
IGJ1ZyBpbiBDRk5ldHdvcmsgd2hlcmUgY2FsbGJhY2tzIGNhbiBiZSBkaXNwYXRjaGVkIGV2ZW4g
d2hlbiBsb2FkcyBhcmUgZGVmZXJyZWQuCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS82MzA0
NjAwPiBmb3IgbW9yZSBkZXRhaWxzLgotI2lmICFVU0UoQ0YpCi0gICAgQVNTRVJUKCFkZWZlcnNM
b2FkaW5nKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjppc0RlYnVnZ2VyUGF1c2VkKG1f
ZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkpKTsKLSNlbmRpZgotCi0gICAgLy8gVGhlIGFkZGl0aW9u
YWwgcHJvY2Vzc2luZyBjYW4gZG8gYW55dGhpbmcgaW5jbHVkaW5nIHBvc3NpYmx5IHJlbW92aW5n
IHRoZSBsYXN0Ci0gICAgLy8gcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0LgotICAgIFJlZlB0cjxN
YWluUmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7Ci0gICAgUmVmUHRyPERvY3VtZW50TG9h
ZGVyPiBkbCA9IGRvY3VtZW50TG9hZGVyKCk7Ci0KLSAgICBpZiAobV9pZGVudGlmaWVyRm9yTG9h
ZFdpdGhvdXRSZXNvdXJjZUxvYWRlcikgewotICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmll
cigpLT5kaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoZG9jdW1lbnRMb2FkZXIoKSwgaWRlbnRpZmll
cigpLCBmaW5pc2hUaW1lKTsKLSAgICAgICAgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNv
dXJjZUxvYWRlciA9IDA7Ci0gICAgfQotCi0jaWYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQotICAg
IGlmIChtX2NvbnRlbnRGaWx0ZXIgJiYgbV9jb250ZW50RmlsdGVyLT5uZWVkc01vcmVEYXRhKCkp
IHsKLSAgICAgICAgbV9jb250ZW50RmlsdGVyLT5maW5pc2hlZEFkZGluZ0RhdGEoKTsKLQotICAg
ICAgICBpbnQgbGVuZ3RoOwotICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gbV9jb250ZW50Rmls
dGVyLT5nZXRSZXBsYWNlbWVudERhdGEobGVuZ3RoKTsKLSAgICAgICAgaWYgKGRhdGEpCi0gICAg
ICAgICAgICBkYXRhUmVjZWl2ZWQobV9yZXNvdXJjZS5nZXQoKSwgZGF0YSwgbGVuZ3RoKTsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIGlmIChtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50KQotICAgICAg
ICBkbC0+bWF5YmVGaW5pc2hMb2FkaW5nTXVsdGlwYXJ0Q29udGVudCgpOwotCi0gICAgZG9jdW1l
bnRMb2FkZXIoKS0+dGltaW5nKCktPnNldFJlc3BvbnNlRW5kKGZpbmlzaFRpbWUgPyBmaW5pc2hU
aW1lIDogKG1fdGltZU9mTGFzdERhdGFSZWNlaXZlZCA/IG1fdGltZU9mTGFzdERhdGFSZWNlaXZl
ZCA6IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKSk7Ci0gICAgZG9jdW1lbnRMb2FkZXIo
KS0+ZmluaXNoZWRMb2FkaW5nKCk7Ci0KLSAgICAvLyBJZiB0aGUgZG9jdW1lbnQgc3BlY2lmaWVk
IGFuIGFwcGxpY2F0aW9uIGNhY2hlIG1hbmlmZXN0LCBpdCB2aW9sYXRlcyB0aGUgYXV0aG9yJ3Mg
aW50ZW50IGlmIHdlIHN0b3JlIGl0IGluIHRoZSBtZW1vcnkgY2FjaGUKLSAgICAvLyBhbmQgZGVu
eSB0aGUgYXBwY2FjaGUgdGhlIGNoYW5jZSB0byBpbnRlcmNlcHQgaXQgaW4gdGhlIGZ1dHVyZSwg
c28gcmVtb3ZlIGZyb20gdGhlIG1lbW9yeSBjYWNoZS4KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnRMb2FkZXIoKS0+ZnJhbWUoKSkgewotICAgICAgICBpZiAobV9yZXNvdXJjZSAmJiBm
cmFtZS0+ZG9jdW1lbnQoKS0+aGFzTWFuaWZlc3QoKSkKLSAgICAgICAgICAgIG1lbW9yeUNhY2hl
KCktPnJlbW92ZShtX3Jlc291cmNlLmdldCgpKTsKLSAgICB9Ci0KLSAgICBkbC0+YXBwbGljYXRp
b25DYWNoZUhvc3QoKS0+ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNlKCk7Ci19Ci0KLXZvaWQg
TWFpblJlc291cmNlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgbV9yZXNvdXJjZSA9PSByZXNvdXJj
ZSk7Ci0gICAgQVNTRVJUKG1fcmVzb3VyY2UpOwotICAgIGlmICghbV9yZXNvdXJjZS0+ZXJyb3JP
Y2N1cnJlZCgpICYmICFtX3Jlc291cmNlLT53YXNDYW5jZWxlZCgpKSB7Ci0gICAgICAgIGRpZEZp
bmlzaExvYWRpbmcobV9yZXNvdXJjZS0+bG9hZEZpbmlzaFRpbWUoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGZpeCB0aGUgZGVzaWduIHRvIGVs
aW1pbmF0ZSB0aGUgbmVlZCBmb3IgYSBwbGF0Zm9ybSBpZmRlZiBoZXJlCi0jaWYgIVBMQVRGT1JN
KENIUk9NSVVNKQotICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5yZXF1ZXN0KCkuY2FjaGVQb2xp
Y3koKSA9PSBSZXR1cm5DYWNoZURhdGFEb250TG9hZCAmJiAhbV9yZXNvdXJjZS0+d2FzQ2FuY2Vs
ZWQoKSkgewotICAgICAgICBmcmFtZUxvYWRlcigpLT5yZXRyeUFmdGVyRmFpbGVkQ2FjaGVPbmx5
TWFpblJlc291cmNlTG9hZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciA9IG1fcmVzb3VyY2UtPnJlc291cmNlRXJyb3Io
KTsKLSAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5
YmVMb2FkRmFsbGJhY2tGb3JNYWluRXJyb3IocmVxdWVzdCgpLCBlcnJvcikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFRoZXJlIGlzIGEgYnVnIGluIENGTmV0d29yayB3aGVyZSBjYWxsYmFj
a3MgY2FuIGJlIGRpc3BhdGNoZWQgZXZlbiB3aGVuIGxvYWRzIGFyZSBkZWZlcnJlZC4KLSAgICAv
LyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYzMDQ2MDA+IGZvciBtb3JlIGRldGFpbHMuCi0jaWYgIVVT
RShDRikKLSAgICBBU1NFUlQoIWRlZmVyc0xvYWRpbmcoKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBy
ZWNlaXZlZEVycm9yKGVycm9yKTsKLX0KLQotdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OnJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Ci17
Ci0gICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29y
ZU1lbW9yeVR5cGVzOjpMb2FkZXIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fcmVzb3VyY2UsICJy
ZXNvdXJjZSIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1faW5pdGlhbFJlcXVlc3QsICJpbml0aWFs
UmVxdWVzdCIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fc3Vic3RpdHV0ZURhdGEsICJzdWJzdGl0
dXRlRGF0YSIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fZGF0YUxvYWRUaW1lciwgImRhdGFMb2Fk
VGltZXIiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2RvY3VtZW50TG9hZGVyLCAiZG9jdW1lbnRM
b2FkZXIiKTsKLX0KLQotdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmhhbmRsZVN1YnN0aXR1dGVE
YXRhTG9hZE5vdyhNYWluUmVzb3VyY2VMb2FkZXJUaW1lciopCi17Ci0gICAgUmVmUHRyPE1haW5S
ZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKLQotICAgIEtVUkwgdXJsID0gbV9zdWJzdGl0
dXRlRGF0YS5yZXNwb25zZVVSTCgpOwotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICB1
cmwgPSBtX2luaXRpYWxSZXF1ZXN0LnVybCgpOwotCi0gICAgLy8gQ2xlYXIgdGhlIGluaXRpYWwg
cmVxdWVzdCBoZXJlIHNvIHRoYXQgc3Vic2VxdWVudCBlbnRyaWVzIGludG8gdGhlCi0gICAgLy8g
bG9hZGVyIHdpbGwgbm90IHRoaW5rIHRoZXJlJ3Mgc3RpbGwgYSBkZWZlcnJlZCBsb2FkIGxlZnQg
dG8gZG8uCi0gICAgbV9pbml0aWFsUmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdCgpOwotICAgICAg
ICAKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbV9zdWJzdGl0dXRlRGF0YS5t
aW1lVHlwZSgpLCBtX3N1YnN0aXR1dGVEYXRhLmNvbnRlbnQoKS0+c2l6ZSgpLCBtX3N1YnN0aXR1
dGVEYXRhLnRleHRFbmNvZGluZygpLCAiIik7Ci0gICAgcmVzcG9uc2VSZWNlaXZlZCgwLCByZXNw
b25zZSk7Ci19Ci0KLXZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpzdGFydERhdGFMb2FkVGltZXIo
KQotewotICAgIG1fZGF0YUxvYWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0KLSNpZiBIQVZFKFJV
TkxPT1BfVElNRVIpCi0gICAgaWYgKFNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxlZFBhaXJz
ID0gbV9kb2N1bWVudExvYWRlci0+ZnJhbWUoKS0+cGFnZSgpLT5zY2hlZHVsZWRSdW5Mb29wUGFp
cnMoKSkKLSAgICAgICAgbV9kYXRhTG9hZFRpbWVyLnNjaGVkdWxlKCpzY2hlZHVsZWRQYWlycyk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmhhbmRsZVN1YnN0aXR1dGVE
YXRhTG9hZFNvb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByKQotewotICAgIG1faW5pdGlhbFJl
cXVlc3QgPSByOwotICAgIAotICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5kZWZlck1haW5SZXNv
dXJjZURhdGFMb2FkKCkpCi0gICAgICAgIHN0YXJ0RGF0YUxvYWRUaW1lcigpOwotICAgIGVsc2UK
LSAgICAgICAgaGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkTm93KDApOwotfQotCi12b2lkIE1haW5S
ZXNvdXJjZUxvYWRlcjo6bG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGluaXRpYWxSZXF1ZXN0
LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCi17Ci0gICAgLy8gSXQgYXBw
ZWFycyB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciB0aGlzIGxvYWQgdG8gYmUgY2FuY2VsbGVkIGFu
ZCBkZXJlZmVuY2VkIGJ5IHRoZSBEb2N1bWVudExvYWRlcgotICAgIC8vIGluIHdpbGxTZW5kUmVx
dWVzdCgpIGlmIGxvYWROb3coKSBpcyBjYWxsZWQuCi0gICAgUmVmUHRyPE1haW5SZXNvdXJjZUxv
YWRlcj4gcHJvdGVjdCh0aGlzKTsKLQotICAgIG1fc3Vic3RpdHV0ZURhdGEgPSBzdWJzdGl0dXRl
RGF0YTsKLQotICAgIEFTU0VSVChkb2N1bWVudExvYWRlcigpLT50aW1pbmcoKS0+bmF2aWdhdGlv
blN0YXJ0KCkpOwotICAgIEFTU0VSVCghZG9jdW1lbnRMb2FkZXIoKS0+dGltaW5nKCktPmZldGNo
U3RhcnQoKSk7Ci0gICAgZG9jdW1lbnRMb2FkZXIoKS0+dGltaW5nKCktPm1hcmtGZXRjaFN0YXJ0
KCk7Ci0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoaW5pdGlhbFJlcXVlc3QpOwotCi0gICAg
Ly8gU2VuZCB0aGlzIHN5bnRoZXRpYyBkZWxlZ2F0ZSBjYWxsYmFjayBzaW5jZSBjbGllbnRzIGV4
cGVjdCBpdCwgYW5kCi0gICAgLy8gd2Ugbm8gbG9uZ2VyIHNlbmQgdGhlIGNhbGxiYWNrIGZyb20g
d2l0aGluIE5TVVJMQ29ubmVjdGlvbiBmb3IKLSAgICAvLyBpbml0aWFsIHJlcXVlc3RzLgotICAg
IHdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlKCkpOwotICAgIEFTU0VS
VCghZGVsZXRpb25IYXNCZWd1bigpKTsKLQotICAgIC8vIHdpbGxTZW5kUmVxdWVzdCgpIG1heSBs
ZWFkIHRvIG91ciBEb2N1bWVudExvYWRlciBiZWluZyBkZXRhY2hlZCBvciBjYW5jZWxsaW5nIHRo
ZSBsb2FkIHZpYSBudWxsaW5nIHRoZSBSZXNvdXJjZVJlcXVlc3QuCi0gICAgaWYgKCFkb2N1bWVu
dExvYWRlcigpLT5mcmFtZSgpIHx8IHJlcXVlc3QuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9h
ZE1haW5SZXNvdXJjZShyZXF1ZXN0LCBtX3N1YnN0aXR1dGVEYXRhKTsKLQotICAgIGlmIChtX3N1
YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSkgewotICAgICAgICBtX2lkZW50aWZpZXJGb3JMb2FkV2l0
aG91dFJlc291cmNlTG9hZGVyID0gbV9kb2N1bWVudExvYWRlci0+ZnJhbWUoKS0+cGFnZSgpLT5w
cm9ncmVzcygpLT5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7Ci0gICAgICAgIGZyYW1lTG9hZGVy
KCktPm5vdGlmaWVyKCktPmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KG1faWRlbnRp
ZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIsIGRvY3VtZW50TG9hZGVyKCksIHJlcXVl
c3QpOwotICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5kaXNwYXRjaFdpbGxTZW5k
UmVxdWVzdChkb2N1bWVudExvYWRlcigpLCBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291
cmNlTG9hZGVyLCByZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlKCkpOwotICAgICAgICBoYW5kbGVT
dWJzdGl0dXRlRGF0YUxvYWRTb29uKHJlcXVlc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXNvdXJjZUxvYWRlck9wdGlvbnMsIG1haW5SZXNv
dXJjZUxvYWRPcHRpb25zLAotICAgICAgICAoU2VuZENhbGxiYWNrcywgU25pZmZDb250ZW50LCBC
dWZmZXJEYXRhLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBc2tDbGllbnRGb3JDcm9zc09yaWdp
bkNyZWRlbnRpYWxzLCBTa2lwU2VjdXJpdHlDaGVjaykpOwotICAgIENhY2hlZFJlc291cmNlUmVx
dWVzdCBjYWNoZWRSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCwgbWFpblJlc291cmNlTG9hZE9wdGlv
bnMpOwotICAgIG1fcmVzb3VyY2UgPSBkb2N1bWVudExvYWRlcigpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpLT5yZXF1ZXN0TWFpblJlc291cmNlKGNhY2hlZFJlc291cmNlUmVxdWVzdCk7Ci0gICAg
aWYgKCFtX3Jlc291cmNlKSB7Ci0gICAgICAgIGRvY3VtZW50TG9hZGVyKCktPnNldFJlcXVlc3Qo
UmVzb3VyY2VSZXF1ZXN0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbG9h
ZGVyKCkpIHsKLSAgICAgICAgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRl
ciA9IG1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCktPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+Y3JlYXRl
VW5pcXVlSWRlbnRpZmllcigpOwotICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5h
c3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdChtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91
dFJlc291cmNlTG9hZGVyLCBkb2N1bWVudExvYWRlcigpLCByZXF1ZXN0KTsKLSAgICAgICAgZnJh
bWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoZG9jdW1lbnRM
b2FkZXIoKSwgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciwgcmVxdWVz
dCwgUmVzb3VyY2VSZXNwb25zZSgpKTsKLSAgICB9Ci0gICAgbV9yZXNvdXJjZS0+YWRkQ2xpZW50
KHRoaXMpOwotCi0gICAgLy8gQSBidW5jaCBvZiBoZWFkZXJzIGFyZSBzZXQgd2hlbiB0aGUgdW5k
ZXJseWluZyBSZXNvdXJjZUxvYWRlciBpcyBjcmVhdGVkLCBhbmQgRG9jdW1lbnRMb2FkZXI6Om1f
cmVxdWVzdCBuZWVkcyB0byBpbmNsdWRlIHRob3NlLgotICAgIGlmIChsb2FkZXIoKSkKLSAgICAg
ICAgcmVxdWVzdCA9IGxvYWRlcigpLT5vcmlnaW5hbFJlcXVlc3QoKTsKLSAgICAvLyBJZiB0aGVy
ZSB3YXMgYSBmcmFnbWVudCBpZGVudGlmaWVyIG9uIGluaXRpYWxSZXF1ZXN0LCB0aGUgY2FjaGUg
d2lsbCBoYXZlIHN0cmlwcGVkIGl0LiBEb2N1bWVudExvYWRlcjo6bV9yZXF1ZXN0IHNob3VsZCBp
bmNsdWRlCi0gICAgLy8gdGhlIGZyYWdtZW50IGlkZW50aWZpZXIsIHNvIGFkZCB0aGF0IGJhY2sg
aW4uCi0gICAgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoaW5pdGlhbFJlcXVl
c3QudXJsKCksIHJlcXVlc3QudXJsKCkpKQotICAgICAgICByZXF1ZXN0LnNldFVSTChpbml0aWFs
UmVxdWVzdC51cmwoKSk7Ci0gICAgZG9jdW1lbnRMb2FkZXIoKS0+c2V0UmVxdWVzdChyZXF1ZXN0
KTsKLX0KLQotdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBk
ZWZlcnMpCi17Ci0gICAgaWYgKGxvYWRlcigpKQotICAgICAgICBsb2FkZXIoKS0+c2V0RGVmZXJz
TG9hZGluZyhkZWZlcnMpOwotfQotCi1ib29sIE1haW5SZXNvdXJjZUxvYWRlcjo6ZGVmZXJzTG9h
ZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxvYWRlcigpID8gbG9hZGVyKCktPmRlZmVyc0xv
YWRpbmcoKSA6IGZhbHNlOwotfQotCi12b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6c2V0RGF0YUJ1
ZmZlcmluZ1BvbGljeShEYXRhQnVmZmVyaW5nUG9saWN5IGRhdGFCdWZmZXJpbmdQb2xpY3kpCi17
Ci0gICAgQVNTRVJUKG1fcmVzb3VyY2UpOwotICAgIG1fcmVzb3VyY2UtPnNldERhdGFCdWZmZXJp
bmdQb2xpY3koZGF0YUJ1ZmZlcmluZ1BvbGljeSk7Ci19Ci0KLVJlc291cmNlTG9hZGVyKiBNYWlu
UmVzb3VyY2VMb2FkZXI6OmxvYWRlcigpIGNvbnN0Ci17IAotICAgIHJldHVybiBtX3Jlc291cmNl
ID8gbV9yZXNvdXJjZS0+bG9hZGVyKCkgOiAwOwotfQotCi11bnNpZ25lZCBsb25nIE1haW5SZXNv
dXJjZUxvYWRlcjo6aWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lkZW50aWZp
ZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyIHx8ICFsb2FkZXIoKSB8fCAhbG9hZGVyKCkt
PmlkZW50aWZpZXIoKSk7Ci0gICAgaWYgKG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3Vy
Y2VMb2FkZXIpCi0gICAgICAgIHJldHVybiBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291
cmNlTG9hZGVyOwotICAgIGlmIChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIgPSBsb2Fk
ZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVyKCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ckNsaWVudC5oCShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBAQAogICAgIGNs
YXNzIEhUTUxQbHVnSW5FbGVtZW50OwogICAgIGNsYXNzIEludFNpemU7CiAgICAgY2xhc3MgS1VS
TDsKLSAgICBjbGFzcyBNYWluUmVzb3VyY2VMb2FkZXI7CiAgICAgY2xhc3MgTWVzc2FnZUV2ZW50
OwogICAgIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247CiAgICAgY2xhc3MgUGFnZTsKQEAgLTkyLDcg
KzkxLDYgQEAKICAgICBjbGFzcyBQb2xpY3lDaGVja2VyOwogICAgIGNsYXNzIFJlc291cmNlRXJy
b3I7CiAgICAgY2xhc3MgUmVzb3VyY2VIYW5kbGU7Ci0gICAgY2xhc3MgUmVzb3VyY2VMb2FkZXI7
CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKQEAgLTI2NCw3ICsyNjIsNyBAQAogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRCZWNvbWVGcmFtZXNldChib29sKSA9IDA7IC8vIENhbiBj
aGFuZ2UgZHVlIHRvIG5hdmlnYXRpb24gb3IgRE9NIG1vZGlmaWNhdGlvbi4KIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKE1haW5SZXNvdXJjZUxvYWRlcios
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoRG9j
dW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJikgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGcmFtZT4gY3JlYXRlRnJh
bWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogb3duZXJFbGVtZW50LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Nj
cm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KSA9IDA7CiAgICAgICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxXaWRnZXQ+IGNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwg
SFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wgbG9hZE1hbnVhbGx5KSA9
IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxNDI3
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyOCw3ICsyMjgsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJl
bnQyKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKSB7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoTWFpblJl
c291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0TWFpblJlc291cmNl
TG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikgT1ZFUlJJREUgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZywgRG9jdW1lbnRM
b2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKSB7
IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw2IEBACiAjaW5jbHVkZSAiTG9hZGVyU3Ry
YXRlZ3kuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgotI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRlICJQYWdlVHJhbnNpdGlvbkV2ZW50Lmgi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9u
IDE0Mjc1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDExICs0NiwxMyBAQAogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIk1lbW9yeUNh
Y2hlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgog
I2luY2x1ZGUgIlJlc291cmNlQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAj
aW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJ
bnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNjUsNiAr
NjcsMTAgQEAKICNpbmNsdWRlICJBcmNoaXZlRmFjdG9yeS5oIgogI2VuZGlmCiAKKyNpZiBVU0Uo
Q09OVEVOVF9GSUxURVJJTkcpCisjaW5jbHVkZSAiQ29udGVudEZpbHRlci5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgY2FuY2VsQWxsKGNvbnN0IFJlc291
cmNlTG9hZGVyU2V0JiBsb2FkZXJzKQpAQCAtOTgsMTEgKzEwNCwxNiBAQAogICAgICwgbV9pc1N0
b3BwaW5nKGZhbHNlKQogICAgICwgbV9nb3RGaXJzdEJ5dGUoZmFsc2UpCiAgICAgLCBtX2lzQ2xp
ZW50UmVkaXJlY3QoZmFsc2UpCi0gICAgLCBtX2xvYWRpbmdFbXB0eURvY3VtZW50KGZhbHNlKQor
ICAgICwgbV9pc0xvYWRpbmdNdWx0aXBhcnRDb250ZW50KGZhbHNlKQogICAgICwgbV93YXNPbmxv
YWRIYW5kbGVkKGZhbHNlKQogICAgICwgbV9zdG9wUmVjb3JkaW5nUmVzcG9uc2VzKGZhbHNlKQog
ICAgICwgbV9zdWJzdGl0dXRlUmVzb3VyY2VEZWxpdmVyeVRpbWVyKHRoaXMsICZEb2N1bWVudExv
YWRlcjo6c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKQogICAgICwgbV9kaWRD
cmVhdGVHbG9iYWxIaXN0b3J5RW50cnkoZmFsc2UpCisgICAgLCBtX2xvYWRpbmdNYWluUmVzb3Vy
Y2UoZmFsc2UpCisgICAgLCBtX3RpbWVPZkxhc3REYXRhUmVjZWl2ZWQoMC4wKQorICAgICwgbV9p
ZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlcigwKQorICAgICwgbV9kYXRhTG9h
ZFRpbWVyKHRoaXMsICZEb2N1bWVudExvYWRlcjo6aGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkTm93
KQorICAgICwgbV93YWl0aW5nRm9yQ29udGVudFBvbGljeShmYWxzZSkKICAgICAsIG1fYXBwbGlj
YXRpb25DYWNoZUhvc3QoYWRvcHRQdHIobmV3IEFwcGxpY2F0aW9uQ2FjaGVIb3N0KHRoaXMpKSkK
IHsKIH0KQEAgLTExNCw2ICsxMjUsMTYgQEAKICAgICByZXR1cm4gbV9mcmFtZS0+bG9hZGVyKCk7
CiB9CiAKK0NhY2hlZFJhd1Jlc291cmNlKiBEb2N1bWVudExvYWRlcjo6Y2FjaGVkTWFpblJlc291
cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tYWluUmVzb3VyY2UuZ2V0KCk7Cit9CisKK1Jl
c291cmNlTG9hZGVyKiBEb2N1bWVudExvYWRlcjo6bWFpblJlc291cmNlTG9hZGVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9tYWluUmVzb3VyY2UgPyBtX21haW5SZXNvdXJjZS0+bG9hZGVyKCkg
OiAwOworfQorCiBEb2N1bWVudExvYWRlcjo6fkRvY3VtZW50TG9hZGVyKCkKIHsKICAgICBBU1NF
UlQoIW1fZnJhbWUgfHwgZnJhbWVMb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAhPSB0
aGlzIHx8ICFpc0xvYWRpbmcoKSk7CkBAIC0xMjIsMTQgKzE0MywxOSBAQAogICAgIGlmIChtX2lj
b25EYXRhQ2FsbGJhY2spCiAgICAgICAgIG1faWNvbkRhdGFDYWxsYmFjay0+aW52YWxpZGF0ZSgp
OwogICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPmNsZWFyRG9jdW1lbnRMb2FkZXIoKTsKKyAg
ICAKKyAgICBpZiAobV9tYWluUmVzb3VyY2UpIHsKKyAgICAgICAgbV9tYWluUmVzb3VyY2UtPnJl
bW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9tYWluUmVzb3VyY2UgPSAwOworICAgIH0KIH0K
IAogUGFzc1JlZlB0cjxSZXNvdXJjZUJ1ZmZlcj4gRG9jdW1lbnRMb2FkZXI6Om1haW5SZXNvdXJj
ZURhdGEoKSBjb25zdAogewotICAgIGlmIChtX21haW5SZXNvdXJjZURhdGEpCi0gICAgICAgIHJl
dHVybiBtX21haW5SZXNvdXJjZURhdGE7Ci0gICAgaWYgKG1fbWFpblJlc291cmNlTG9hZGVyKQot
ICAgICAgICByZXR1cm4gbV9tYWluUmVzb3VyY2VMb2FkZXItPnJlc291cmNlRGF0YSgpOworICAg
IGlmIChtX3N1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFJlc291cmNl
QnVmZmVyOjpjcmVhdGUobV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPmRhdGEoKSwgbV9zdWJz
dGl0dXRlRGF0YS5jb250ZW50KCktPnNpemUoKSk7CisgICAgaWYgKG1fbWFpblJlc291cmNlKQor
ICAgICAgICByZXR1cm4gbV9tYWluUmVzb3VyY2UtPnJlc291cmNlQnVmZmVyKCk7CiAgICAgcmV0
dXJuIDA7CiB9CiAKQEAgLTE5Miw3ICsyMTgsMTUgQEAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6Om1h
aW5SZWNlaXZlZEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIEFTU0VS
VCghZXJyb3IuaXNOdWxsKCkpOworICAgIGlmIChtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0LT5tYXli
ZUxvYWRGYWxsYmFja0Zvck1haW5FcnJvcihyZXF1ZXN0KCksIGVycm9yKSkKKyAgICAgICAgcmV0
dXJuOwogCisgICAgLy8gVGhlcmUgaXMgYSBidWcgaW4gQ0ZOZXR3b3JrIHdoZXJlIGNhbGxiYWNr
cyBjYW4gYmUgZGlzcGF0Y2hlZCBldmVuIHdoZW4gbG9hZHMgYXJlIGRlZmVycmVkLgorICAgIC8v
IFNlZSA8cmRhcjovL3Byb2JsZW0vNjMwNDYwMD4gZm9yIG1vcmUgZGV0YWlscy4KKyNpZiAhVVNF
KENGKQorICAgIEFTU0VSVCghbV9mcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkpOworI2Vu
ZGlmCisKICAgICBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0LT5mYWlsZWRMb2FkaW5nTWFpblJlc291
cmNlKCk7CiAKICAgICBpZiAoIWZyYW1lTG9hZGVyKCkpCkBAIC0yNTIsOSArMjg2LDkgQEAKIAog
ICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IERvY3VtZW50TG9hZGVyOjpmcmFtZUxvYWRl
cigpOwogICAgIAotICAgIGlmIChtX21haW5SZXNvdXJjZUxvYWRlcikKKyAgICBpZiAoaXNMb2Fk
aW5nTWFpblJlc291cmNlKCkpCiAgICAgICAgIC8vIFN0b3AgdGhlIG1haW4gcmVzb3VyY2UgbG9h
ZGVyIGFuZCBsZXQgaXQgc2VuZCB0aGUgY2FuY2VsbGVkIG1lc3NhZ2UuCi0gICAgICAgIG1fbWFp
blJlc291cmNlTG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgY2FuY2VsTWFpblJlc291cmNlTG9h
ZCgpOwogICAgIGVsc2UgaWYgKCFtX3N1YnJlc291cmNlTG9hZGVycy5pc0VtcHR5KCkpCiAgICAg
ICAgIC8vIFRoZSBtYWluIHJlc291cmNlIGxvYWRlciBhbHJlYWR5IGZpbmlzaGVkIGxvYWRpbmcu
IFNldCB0aGUgY2FuY2VsbGVkIGVycm9yIG9uIHRoZSAKICAgICAgICAgLy8gZG9jdW1lbnQgYW5k
IGxldCB0aGUgc3VicmVzb3VyY2VMb2FkZXJzIHNlbmQgaW5kaXZpZHVhbCBjYW5jZWxsZWQgbWVz
c2FnZXMgYmVsb3cuCkBAIC0yNzgsOCArMzEyLDU0IEBACiAgICAgfQogfQogCi12b2lkIERvY3Vt
ZW50TG9hZGVyOjpmaW5pc2hlZExvYWRpbmcoKQordm9pZCBEb2N1bWVudExvYWRlcjo6bm90aWZ5
RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogeworICAgIEFTU0VSVF9VTlVTRUQo
cmVzb3VyY2UsIG1fbWFpblJlc291cmNlID09IHJlc291cmNlKTsKKyAgICBBU1NFUlQobV9tYWlu
UmVzb3VyY2UpOworICAgIGlmICghbV9tYWluUmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSAmJiAh
bV9tYWluUmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpIHsKKyAgICAgICAgZmluaXNoZWRMb2FkaW5n
KG1fbWFpblJlc291cmNlLT5sb2FkRmluaXNoVGltZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgZml4IHRoZSBkZXNpZ24gdG8gZWxpbWluYXRl
IHRoZSBuZWVkIGZvciBhIHBsYXRmb3JtIGlmZGVmIGhlcmUKKyNpZiAhUExBVEZPUk0oQ0hST01J
VU0pCisgICAgaWYgKG1fcmVxdWVzdC5jYWNoZVBvbGljeSgpID09IFJldHVybkNhY2hlRGF0YURv
bnRMb2FkICYmICFtX21haW5SZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkgeworICAgICAgICBmcmFt
ZUxvYWRlcigpLT5yZXRyeUFmdGVyRmFpbGVkQ2FjaGVPbmx5TWFpblJlc291cmNlTG9hZCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBtYWluUmVjZWl2ZWRFcnJvciht
X21haW5SZXNvdXJjZS0+cmVzb3VyY2VFcnJvcigpKTsKK30KKwordm9pZCBEb2N1bWVudExvYWRl
cjo6ZmluaXNoZWRMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKQoreworICAgIC8vIFRoZXJlIGlz
IGEgYnVnIGluIENGTmV0d29yayB3aGVyZSBjYWxsYmFja3MgY2FuIGJlIGRpc3BhdGNoZWQgZXZl
biB3aGVuIGxvYWRzIGFyZSBkZWZlcnJlZC4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYz
MDQ2MDA+IGZvciBtb3JlIGRldGFpbHMuCisjaWYgIVVTRShDRikKKyAgICBBU1NFUlQoISFtX2Zy
YW1lLT5wYWdlKCktPmRlZmVyc0xvYWRpbmcoKSB8fCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmlzRGVidWdnZXJQYXVzZWQobV9mcmFtZSkpOworI2VuZGlmCisKKyAgICBSZWZQdHI8RG9jdW1l
bnRMb2FkZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBpZiAobV9pZGVudGlmaWVyRm9yTG9hZFdp
dGhvdXRSZXNvdXJjZUxvYWRlcikgeworICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigp
LT5kaXNwYXRjaERpZEZpbmlzaExvYWRpbmcodGhpcywgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhv
dXRSZXNvdXJjZUxvYWRlciwgZmluaXNoVGltZSk7CisgICAgICAgIG1faWRlbnRpZmllckZvckxv
YWRXaXRob3V0UmVzb3VyY2VMb2FkZXIgPSAwOworICAgIH0KKworI2lmIFVTRShDT05URU5UX0ZJ
TFRFUklORykKKyAgICBpZiAobV9jb250ZW50RmlsdGVyICYmIG1fY29udGVudEZpbHRlci0+bmVl
ZHNNb3JlRGF0YSgpKSB7CisgICAgICAgIG1fY29udGVudEZpbHRlci0+ZmluaXNoZWRBZGRpbmdE
YXRhKCk7CisgICAgICAgIGludCBsZW5ndGg7CisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBt
X2NvbnRlbnRGaWx0ZXItPmdldFJlcGxhY2VtZW50RGF0YShsZW5ndGgpOworICAgICAgICBpZiAo
ZGF0YSkKKyAgICAgICAgICAgIGRhdGFSZWNlaXZlZChtX21haW5SZXNvdXJjZS5nZXQoKSwgZGF0
YSwgbGVuZ3RoKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1heWJlRmluaXNoTG9hZGluZ011bHRp
cGFydENvbnRlbnQoKTsKKyAgICB0aW1pbmcoKS0+c2V0UmVzcG9uc2VFbmQoZmluaXNoVGltZSA/
IGZpbmlzaFRpbWUgOiAobV90aW1lT2ZMYXN0RGF0YVJlY2VpdmVkID8gbV90aW1lT2ZMYXN0RGF0
YVJlY2VpdmVkIDogbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpKTsKKwogICAgIGNvbW1p
dElmUmVhZHkoKTsKICAgICBpZiAoIWZyYW1lTG9hZGVyKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTI5OCw4ICszNzgsMzE3IEBACiAgICAgY2xlYXJNYWluUmVzb3VyY2VMb2FkZXIoKTsKICAgICBp
ZiAoIWZyYW1lTG9hZGVyKCktPnN0YXRlTWFjaGluZSgpLT5jcmVhdGluZ0luaXRpYWxFbXB0eURv
Y3VtZW50KCkpCiAgICAgICAgIGZyYW1lTG9hZGVyKCktPmNoZWNrTG9hZENvbXBsZXRlKCk7CisK
KyAgICAvLyBJZiB0aGUgZG9jdW1lbnQgc3BlY2lmaWVkIGFuIGFwcGxpY2F0aW9uIGNhY2hlIG1h
bmlmZXN0LCBpdCB2aW9sYXRlcyB0aGUgYXV0aG9yJ3MgaW50ZW50IGlmIHdlIHN0b3JlIGl0IGlu
IHRoZSBtZW1vcnkgY2FjaGUKKyAgICAvLyBhbmQgZGVueSB0aGUgYXBwY2FjaGUgdGhlIGNoYW5j
ZSB0byBpbnRlcmNlcHQgaXQgaW4gdGhlIGZ1dHVyZSwgc28gcmVtb3ZlIGZyb20gdGhlIG1lbW9y
eSBjYWNoZS4KKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBpZiAobV9tYWluUmVzb3VyY2Ug
JiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aGFzTWFuaWZlc3QoKSkKKyAgICAgICAgICAgIG1lbW9y
eUNhY2hlKCktPnJlbW92ZShtX21haW5SZXNvdXJjZS5nZXQoKSk7CisgICAgfQorICAgIG1fYXBw
bGljYXRpb25DYWNoZUhvc3QtPmZpbmlzaGVkTG9hZGluZ01haW5SZXNvdXJjZSgpOwogfQogCisK
K2Jvb2wgRG9jdW1lbnRMb2FkZXI6OmlzUG9zdE9yUmVkaXJlY3RBZnRlclBvc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKQoreworICAgIGlmIChuZXdSZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiUE9TVCIp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaW50IHN0YXR1cyA9IHJlZGlyZWN0UmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKTsKKyAgICBpZiAoKChzdGF0dXMgPj0gMzAxICYmIHN0YXR1cyA8
PSAzMDMpIHx8IHN0YXR1cyA9PSAzMDcpCisgICAgICAgICYmIG1fb3JpZ2luYWxSZXF1ZXN0Lmh0
dHBNZXRob2QoKSA9PSAiUE9TVCIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIERvY3VtZW50TG9hZGVyOjpoYW5kbGVTdWJzdGl0dXRlRGF0YUxv
YWROb3coRG9jdW1lbnRMb2FkZXJUaW1lciopCit7CisgICAgS1VSTCB1cmwgPSBtX3N1YnN0aXR1
dGVEYXRhLnJlc3BvbnNlVVJMKCk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHVy
bCA9IG1fcmVxdWVzdC51cmwoKTsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwg
bV9zdWJzdGl0dXRlRGF0YS5taW1lVHlwZSgpLCBtX3N1YnN0aXR1dGVEYXRhLmNvbnRlbnQoKS0+
c2l6ZSgpLCBtX3N1YnN0aXR1dGVEYXRhLnRleHRFbmNvZGluZygpLCAiIik7CisgICAgcmVzcG9u
c2VSZWNlaXZlZCgwLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgRG9jdW1lbnRMb2FkZXI6OnN0YXJ0
RGF0YUxvYWRUaW1lcigpCit7CisgICAgbV9kYXRhTG9hZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
KworI2lmIEhBVkUoUlVOTE9PUF9USU1FUikKKyAgICBpZiAoU2NoZWR1bGVQYWlySGFzaFNldCog
c2NoZWR1bGVkUGFpcnMgPSBtX2ZyYW1lLT5wYWdlKCktPnNjaGVkdWxlZFJ1bkxvb3BQYWlycygp
KQorICAgICAgICBtX2RhdGFMb2FkVGltZXIuc2NoZWR1bGUoKnNjaGVkdWxlZFBhaXJzKTsKKyNl
bmRpZgorfQorCit2b2lkIERvY3VtZW50TG9hZGVyOjpoYW5kbGVTdWJzdGl0dXRlRGF0YUxvYWRT
b29uKCkKK3sKKyAgICBpZiAoZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCgpKQorICAgICAgICBz
dGFydERhdGFMb2FkVGltZXIoKTsKKyAgICBlbHNlCisgICAgICAgIGhhbmRsZVN1YnN0aXR1dGVE
YXRhTG9hZE5vdygwKTsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6cmVkaXJlY3RSZWNlaXZl
ZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBBU1NFUlRfVU5V
U0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX21haW5SZXNvdXJjZSk7CisgICAgd2lsbFNlbmRS
ZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworfQorCit2b2lkIERvY3VtZW50TG9h
ZGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIC8vIE5vdGUgdGhhdCB0
aGVyZSBhcmUgbm8gYXNzZXJ0cyBoZXJlIGFzIHRoZXJlIGFyZSBmb3IgdGhlIG90aGVyIGNhbGxi
YWNrcy4gVGhpcyBpcyBkdWUgdG8gdGhlCisgICAgLy8gZmFjdCB0aGF0IHRoaXMgImNhbGxiYWNr
IiBpcyBzZW50IHdoZW4gc3RhcnRpbmcgZXZlcnkgbG9hZCwgYW5kIHRoZSBzdGF0ZSBvZiBjYWxs
YmFjaworICAgIC8vIGRlZmVycmFscyBwbGF5cyBsZXNzIG9mIGEgcGFydCBpbiB0aGlzIGZ1bmN0
aW9uIGluIHByZXZlbnRpbmcgdGhlIGJhZCBiZWhhdmlvciBkZWZlcnJpbmcgCisgICAgLy8gY2Fs
bGJhY2tzIGlzIG1lYW50IHRvIHByZXZlbnQuCisgICAgQVNTRVJUKCFuZXdSZXF1ZXN0LmlzTnVs
bCgpKTsKKworICAgIGlmICghZnJhbWVMb2FkZXIoKS0+Y2hlY2tJZkZvcm1BY3Rpb25BbGxvd2Vk
QnlDU1AobmV3UmVxdWVzdC51cmwoKSkpIHsKKyAgICAgICAgY2FuY2VsTWFpblJlc291cmNlTG9h
ZChmcmFtZUxvYWRlcigpLT5jYW5jZWxsZWRFcnJvcihuZXdSZXF1ZXN0KSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQodGltaW5nKCktPmZldGNoU3RhcnQoKSk7CisgICAg
aWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIElmIHRoZSByZWRp
cmVjdGluZyB1cmwgaXMgbm90IGFsbG93ZWQgdG8gZGlzcGxheSBjb250ZW50IGZyb20gdGhlIHRh
cmdldCBvcmlnaW4sCisgICAgICAgIC8vIHRoZW4gYmxvY2sgdGhlIHJlZGlyZWN0LgorICAgICAg
ICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJlZGlyZWN0aW5nT3JpZ2luID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZShyZWRpcmVjdFJlc3BvbnNlLnVybCgpKTsKKyAgICAgICAgaWYgKCFyZWRpcmVj
dGluZ09yaWdpbi0+Y2FuRGlzcGxheShuZXdSZXF1ZXN0LnVybCgpKSkgeworICAgICAgICAgICAg
RnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChtX2ZyYW1lLCBuZXdSZXF1ZXN0LnVy
bCgpLnN0cmluZygpKTsKKyAgICAgICAgICAgIGNhbmNlbE1haW5SZXNvdXJjZUxvYWQoZnJhbWVM
b2FkZXIoKS0+Y2FuY2VsbGVkRXJyb3IobmV3UmVxdWVzdCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHRpbWluZygpLT5hZGRSZWRpcmVjdChyZWRpcmVjdFJlc3Bv
bnNlLnVybCgpLCBuZXdSZXF1ZXN0LnVybCgpKTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgY29v
a2llIHBvbGljeSBiYXNlIFVSTCBhcyBVUkwgY2hhbmdlcywgZXhjZXB0IGZvciBzdWJmcmFtZXMs
IHdoaWNoIHVzZSB0aGUKKyAgICAvLyBVUkwgb2YgdGhlIG1haW4gZnJhbWUgd2hpY2ggZG9lc24n
dCBjaGFuZ2Ugd2hlbiB3ZSByZWRpcmVjdC4KKyAgICBpZiAoZnJhbWVMb2FkZXIoKS0+aXNMb2Fk
aW5nTWFpbkZyYW1lKCkpCisgICAgICAgIG5ld1JlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tp
ZXMobmV3UmVxdWVzdC51cmwoKSk7CisKKyAgICAvLyBJZiB3ZSdyZSBmaWVsZGluZyBhIHJlZGly
ZWN0IGluIHJlc3BvbnNlIHRvIGEgUE9TVCwgZm9yY2UgYSBsb2FkIGZyb20gb3JpZ2luLCBzaW5j
ZQorICAgIC8vIHRoaXMgaXMgYSBjb21tb24gc2l0ZSB0ZWNobmlxdWUgdG8gcmV0dXJuIHRvIGEg
cGFnZSB2aWV3aW5nIHNvbWUgZGF0YSB0aGF0IHRoZSBQT1NUCisgICAgLy8ganVzdCBtb2RpZmll
ZC4KKyAgICAvLyBBbHNvLCBQT1NUIHJlcXVlc3RzIGFsd2F5cyBsb2FkIGZyb20gb3JpZ2luLCBi
dXQgdGhpcyBkb2VzIG5vdCBhZmZlY3Qgc3VicmVzb3VyY2VzLgorICAgIGlmIChuZXdSZXF1ZXN0
LmNhY2hlUG9saWN5KCkgPT0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSAmJiBpc1Bvc3RPclJlZGly
ZWN0QWZ0ZXJQb3N0KG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpKQorICAgICAgICBuZXdS
ZXF1ZXN0LnNldENhY2hlUG9saWN5KFJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhKTsKKworICAgIEZy
YW1lKiB0b3AgPSBtX2ZyYW1lLT50cmVlKCktPnRvcCgpOworICAgIGlmICh0b3AgIT0gbV9mcmFt
ZSkgeworICAgICAgICBpZiAoIWZyYW1lTG9hZGVyKCktPm1peGVkQ29udGVudENoZWNrZXIoKS0+
Y2FuRGlzcGxheUluc2VjdXJlQ29udGVudCh0b3AtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCksIG5ld1JlcXVlc3QudXJsKCkpKSB7CisgICAgICAgICAgICBjYW5jZWxNYWluUmVzb3VyY2VM
b2FkKGZyYW1lTG9hZGVyKCktPmNhbmNlbGxlZEVycm9yKG5ld1JlcXVlc3QpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNldFJlcXVlc3QobmV3UmVxdWVz
dCk7CisKKyAgICBpZiAoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8g
V2UgY2hlY2tlZCBhcHBsaWNhdGlvbiBjYWNoZSBmb3IgaW5pdGlhbCBVUkwsIG5vdyB3ZSBuZWVk
IHRvIGNoZWNrIGl0IGZvciByZWRpcmVjdGVkIG9uZS4KKyAgICAgICAgQVNTRVJUKCFtX3N1YnN0
aXR1dGVEYXRhLmlzVmFsaWQoKSk7CisgICAgICAgIG1fYXBwbGljYXRpb25DYWNoZUhvc3QtPm1h
eWJlTG9hZE1haW5SZXNvdXJjZUZvclJlZGlyZWN0KG5ld1JlcXVlc3QsIG1fc3Vic3RpdHV0ZURh
dGEpOworICAgICAgICBpZiAobV9zdWJzdGl0dXRlRGF0YS5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyID0gbWFpblJlc291cmNl
TG9hZGVyKCktPmlkZW50aWZpZXIoKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSWRlYWxseSB3
ZSdkIHN0b3AgdGhlIEkvTyB1bnRpbCB3ZSBoZWFyIGJhY2sgZnJvbSB0aGUgbmF2aWdhdGlvbiBw
b2xpY3kgZGVsZWdhdGUKKyAgICAvLyBsaXN0ZW5lci4gQnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIGRv
IHRoYXQgaW4gcHJhY3RpY2UuIFNvIGluc3RlYWQgd2UgY2FuY2VsIGxhdGVyIGlmIHRoZQorICAg
IC8vIGxpc3RlbmVyIHRlbGxzIHVzIHRvLiBJbiBwcmFjdGljZSB0aGF0IG1lYW5zIHRoZSBuYXZp
Z2F0aW9uIHBvbGljeSBuZWVkcyB0byBiZSBkZWNpZGVkCisgICAgLy8gc3luY2hyb25vdXNseSBm
b3IgdGhlc2UgcmVkaXJlY3QgY2FzZXMuCisgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVs
bCgpKQorICAgICAgICBmcmFtZUxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPmNoZWNrTmF2aWdh
dGlvblBvbGljeShuZXdSZXF1ZXN0LCBjYWxsQ29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3ks
IHRoaXMpOworfQorCit2b2lkIERvY3VtZW50TG9hZGVyOjpjYWxsQ29udGludWVBZnRlck5hdmln
YXRpb25Qb2xpY3kodm9pZCogYXJndW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBib29sIHNob3VsZENvbnRpbnVlKQoreworICAgIHN0
YXRpY19jYXN0PERvY3VtZW50TG9hZGVyKj4oYXJndW1lbnQpLT5jb250aW51ZUFmdGVyTmF2aWdh
dGlvblBvbGljeShyZXF1ZXN0LCBzaG91bGRDb250aW51ZSk7Cit9CisKK3ZvaWQgRG9jdW1lbnRM
b2FkZXI6OmNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIGJvb2wgc2hvdWxkQ29udGludWUpCit7CisgICAgaWYgKCFzaG91bGRDb250aW51ZSkKKyAg
ICAgICAgc3RvcExvYWRpbmdGb3JQb2xpY3lDaGFuZ2UoKTsKKyAgICBlbHNlIGlmIChtX3N1YnN0
aXR1dGVEYXRhLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBBIHJlZGlyZWN0IHJlc3VsdGVkIGlu
IGxvYWRpbmcgc3Vic3RpdHV0ZSBkYXRhLgorICAgICAgICBBU1NFUlQodGltaW5nKCktPnJlZGly
ZWN0Q291bnQoKSk7CisKKyAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgb3VyIHJlZmVyZW5j
ZSB0byB0aGUgQ2FjaGVkUmVzb3VyY2UgaW4gZmF2b3Igb2YgYSBTdWJzdGl0dXRlRGF0YSBsb2Fk
LgorICAgICAgICAvLyBUaGlzIHdpbGwgcHJvYmFibHkgdHJpZ2dlciB0aGUgY2FuY2VsbGF0aW9u
IG9mIHRoZSBDYWNoZWRSZXNvdXJjZSdzIHVuZGVybHlpbmcgUmVzb3VyY2VMb2FkZXIsIHRob3Vn
aCB0aGVyZSBpcyBhCisgICAgICAgIC8vIHNtYWxsIGNoYW5jZSB0aGF0IHRoZSByZXNvdXJjZSBp
cyBiZWluZyBsb2FkZWQgYnkgYSBkaWZmZXJlbnQgRnJhbWUsIHByZXZlbnRpbmcgdGhlIFJlc291
cmNlTG9hZGVyIGZyb20gYmVpbmcgY2FuY2VsbGVkLgorICAgICAgICAvLyBJZiB0aGUgUmVzb3Vy
Y2VMb2FkZXIgaXMgaW5kZWVkIGNhbmNlbGxlZCwgaXQgd291bGQgbm9ybWFsbHkgc2VuZCByZXNv
dXJjZSBsb2FkIGNhbGxiYWNrcy4KKyAgICAgICAgLy8gSG93ZXZlciwgZnJvbSBhbiBBUEkgcGVy
c3BlY3RpdmUsIHRoaXMgaXNuJ3QgYSBjYW5jZWxsYXRpb24uIFRoZXJlZm9yZSwgc2V2ZXIgb3Vy
IHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBuZXR3b3JrIGxvYWQsCisgICAgICAgIC8vIGJ1dCBwcmV2
ZW50IHRoZSBSZXNvdXJjZUxvYWRlciBmcm9tIHNlbmRpbmcgUmVzb3VyY2VMb2FkTm90aWZpZXIg
Y2FsbGJhY2tzLgorICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVy
ID0gbWFpblJlc291cmNlTG9hZGVyKCk7CisgICAgICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlci0+
c2hvdWxkU2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKKyAgICAgICAgcmVzb3VyY2VMb2Fk
ZXItPnNldFNlbmRDYWxsYmFja1BvbGljeShEb05vdFNlbmRDYWxsYmFja3MpOworICAgICAgICBp
ZiAobV9tYWluUmVzb3VyY2UpIHsKKyAgICAgICAgICAgIG1fbWFpblJlc291cmNlLT5yZW1vdmVD
bGllbnQodGhpcyk7CisgICAgICAgICAgICBtX21haW5SZXNvdXJjZSA9IDA7CisgICAgICAgIH0K
KyAgICAgICAgcmVzb3VyY2VMb2FkZXItPnNldFNlbmRDYWxsYmFja1BvbGljeShTZW5kQ2FsbGJh
Y2tzKTsKKyAgICAgICAgaGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkU29vbigpOworICAgIH0KK30K
Kwordm9pZCBEb2N1bWVudExvYWRlcjo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VS
VF9VTlVTRUQocmVzb3VyY2UsIG1fbWFpblJlc291cmNlID09IHJlc291cmNlKTsKKyAgICBib29s
IHdpbGxMb2FkRmFsbGJhY2sgPSBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0LT5tYXliZUxvYWRGYWxs
YmFja0Zvck1haW5SZXNwb25zZShyZXF1ZXN0KCksIHJlc3BvbnNlKTsKKworICAgIC8vIFRoZSBt
ZW1vcnkgY2FjaGUgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBvciBp
dHMgY2FjaGluZyBydWxlcy4gU28gaWYgYSBtYWluIHJlc291cmNlIGlzIHNlcnZlZAorICAgIC8v
IGZyb20gdGhlIGFwcGxpY2F0aW9uIGNhY2hlLCBlbnN1cmUgd2UgZG9uJ3Qgc2F2ZSB0aGUgcmVz
dWx0IGZvciBmdXR1cmUgdXNlLgorICAgIGJvb2wgc2hvdWxkUmVtb3ZlUmVzb3VyY2VGcm9tQ2Fj
aGUgPSB3aWxsTG9hZEZhbGxiYWNrOworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIGNo
cm9taXVtJ3MgQXBwbGljYXRpb25DYWNoZUhvc3QgaW1wbGVtZW50YXRpb24gYWx3YXlzIHJldHVy
bnMgdHJ1ZSBmb3IgbWF5YmVMb2FkRmFsbGJhY2tGb3JNYWluUmVzcG9uc2UoKS4gSG93ZXZlciwg
YWxsIHJlc3BvbnNlcyBsb2FkZWQKKyAgICAvLyBmcm9tIGFwcGNhY2hlIHdpbGwgaGF2ZSBhIG5v
bi16ZXJvIGFwcENhY2hlSUQoKS4KKyAgICBpZiAoci5hcHBDYWNoZUlEKCkpCisgICAgICAgIHNo
b3VsZFJlbW92ZVJlc291cmNlRnJvbUNhY2hlID0gdHJ1ZTsKKyNlbmRpZgorICAgIGlmIChzaG91
bGRSZW1vdmVSZXNvdXJjZUZyb21DYWNoZSkKKyAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmVtb3Zl
KG1fbWFpblJlc291cmNlLmdldCgpKTsKKworICAgIGlmICh3aWxsTG9hZEZhbGxiYWNrKQorICAg
ICAgICByZXR1cm47CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgeEZy
YW1lT3B0aW9uSGVhZGVyLCAoIngtZnJhbWUtb3B0aW9ucyIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKTsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5maW5kKHhGcmFtZU9wdGlvbkhlYWRlcik7Cisg
ICAgaWYgKGl0ICE9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKSkgeworICAgICAg
ICBTdHJpbmcgY29udGVudCA9IGl0LT52YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyID0gbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciA/IG1faWRl
bnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIgOiBtYWluUmVzb3VyY2VMb2FkZXIo
KS0+aWRlbnRpZmllcigpOworICAgICAgICBpZiAoZnJhbWVMb2FkZXIoKS0+c2hvdWxkSW50ZXJy
dXB0TG9hZEZvclhGcmFtZU9wdGlvbnMoY29udGVudCwgcmVzcG9uc2UudXJsKCksIGlkZW50aWZp
ZXIpKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmNvbnRpbnVlQWZ0
ZXJYRnJhbWVPcHRpb25zRGVuaWVkKG1fZnJhbWUsIHRoaXMsIGlkZW50aWZpZXIsIHJlc3BvbnNl
KTsKKyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gIlJlZnVzZWQgdG8gZGlzcGxheSAnIiAr
IHJlc3BvbnNlLnVybCgpLnN0cmluZygpICsgIicgaW4gYSBmcmFtZSBiZWNhdXNlIGl0IHNldCAn
WC1GcmFtZS1PcHRpb25zJyB0byAnIiArIGNvbnRlbnQgKyAiJy4iOworICAgICAgICAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBFcnJv
ck1lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgaWRlbnRpZmllcik7CisgICAgICAgICAgICBjYW5jZWxN
YWluUmVzb3VyY2VMb2FkKGZyYW1lTG9hZGVyKCktPmNhbmNlbGxlZEVycm9yKG1fcmVxdWVzdCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlcmUg
aXMgYSBidWcgaW4gQ0ZOZXR3b3JrIHdoZXJlIGNhbGxiYWNrcyBjYW4gYmUgZGlzcGF0Y2hlZCBl
dmVuIHdoZW4gbG9hZHMgYXJlIGRlZmVycmVkLgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0v
NjMwNDYwMD4gZm9yIG1vcmUgZGV0YWlscy4KKyNpZiAhVVNFKENGKQorICAgIEFTU0VSVCghbV9m
cmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkpOworI2VuZGlmCisKKyAgICBpZiAobV9pc0xv
YWRpbmdNdWx0aXBhcnRDb250ZW50KSB7CisgICAgICAgIHNldHVwRm9yUmVwbGFjZSgpOworICAg
ICAgICBtX21haW5SZXNvdXJjZS0+Y2xlYXIoKTsKKyAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmlz
TXVsdGlwYXJ0KCkpCisgICAgICAgIG1faXNMb2FkaW5nTXVsdGlwYXJ0Q29udGVudCA9IHRydWU7
CisgICAgICAgIAorICAgIHNldFJlc3BvbnNlKHJlc3BvbnNlKTsKKworICAgIGlmIChtX2lkZW50
aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyKQorICAgICAgICBmcmFtZUxvYWRlcigp
LT5ub3RpZmllcigpLT5kaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCBtX2lkZW50aWZp
ZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyLCBtX3Jlc3BvbnNlLCAwKTsKKworICAgIEFT
U0VSVCghbV93YWl0aW5nRm9yQ29udGVudFBvbGljeSk7CisgICAgbV93YWl0aW5nRm9yQ29udGVu
dFBvbGljeSA9IHRydWU7CisKKyAgICAvLyBBbHdheXMgc2hvdyBjb250ZW50IHdpdGggdmFsaWQg
c3Vic3RpdHV0ZSBkYXRhLgorICAgIGlmIChtX3N1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSkgewor
ICAgICAgICBjb250aW51ZUFmdGVyQ29udGVudFBvbGljeShQb2xpY3lVc2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKEZUUERJUikKKyAgICAvLyBSZXNwZWN0IHRoZSBo
aWRkZW4gRlRQIERpcmVjdG9yeSBMaXN0aW5nIHByZWYgc28gaXQgY2FuIGJlIHRlc3RlZCBldmVu
IGlmIHRoZSBwb2xpY3kgZGVsZWdhdGUgbWlnaHQgb3RoZXJ3aXNlIGRpc2FsbG93IGl0CisgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoc2V0dGlu
Z3MgJiYgc2V0dGluZ3MtPmZvcmNlRlRQRGlyZWN0b3J5TGlzdGluZ3MoKSAmJiBtX3Jlc3BvbnNl
Lm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3gtZnRwLWRpcmVjdG9yeSIpIHsKKyAgICAgICAg
Y29udGludWVBZnRlckNvbnRlbnRQb2xpY3koUG9saWN5VXNlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorCisjaWYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQorICAgIGlmIChtX3Jl
c3BvbnNlLnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgQ29udGVudEZpbHRlcjo6aXNFbmFi
bGVkKCkpCisgICAgICAgIG1fY29udGVudEZpbHRlciA9IENvbnRlbnRGaWx0ZXI6OmNyZWF0ZSht
X3Jlc3BvbnNlKTsKKyNlbmRpZgorCisgICAgZnJhbWVMb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigp
LT5jaGVja0NvbnRlbnRQb2xpY3kobV9yZXNwb25zZSwgY2FsbENvbnRpbnVlQWZ0ZXJDb250ZW50
UG9saWN5LCB0aGlzKTsKK30KKwordm9pZCBEb2N1bWVudExvYWRlcjo6Y2FsbENvbnRpbnVlQWZ0
ZXJDb250ZW50UG9saWN5KHZvaWQqIGFyZ3VtZW50LCBQb2xpY3lBY3Rpb24gcG9saWN5KQorewor
ICAgIHN0YXRpY19jYXN0PERvY3VtZW50TG9hZGVyKj4oYXJndW1lbnQpLT5jb250aW51ZUFmdGVy
Q29udGVudFBvbGljeShwb2xpY3kpOworfQorCit2b2lkIERvY3VtZW50TG9hZGVyOjpjb250aW51
ZUFmdGVyQ29udGVudFBvbGljeShQb2xpY3lBY3Rpb24gcG9saWN5KQoreworICAgIEFTU0VSVCht
X3dhaXRpbmdGb3JDb250ZW50UG9saWN5KTsKKyAgICBtX3dhaXRpbmdGb3JDb250ZW50UG9saWN5
ID0gZmFsc2U7CisgICAgaWYgKGlzU3RvcHBpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
S1VSTCB1cmwgPSBtX3JlcXVlc3QudXJsKCk7CisgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSA9
IG1fcmVzcG9uc2UubWltZVR5cGUoKTsKKyAgICAKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAg
IGNhc2UgUG9saWN5VXNlOiB7CisgICAgICAgIC8vIFByZXZlbnQgcmVtb3RlIHdlYiBhcmNoaXZl
cyBmcm9tIGxvYWRpbmcgYmVjYXVzZSB0aGV5IGNhbiBjbGFpbSB0byBiZSBmcm9tIGFueSBkb21h
aW4gYW5kIHRodXMgYXZvaWQgY3Jvc3MtZG9tYWluIHNlY3VyaXR5IGNoZWNrcyAoNDEyMDI1NSku
CisgICAgICAgIGJvb2wgaXNSZW1vdGVXZWJBcmNoaXZlID0gKGVxdWFsSWdub3JpbmdDYXNlKCJh
cHBsaWNhdGlvbi94LXdlYmFyY2hpdmUiLCBtaW1lVHlwZSkKKyNpZiBQTEFURk9STShHVEspCisg
ICAgICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZSgibWVzc2FnZS9yZmM4MjIiLCBtaW1lVHlw
ZSkKKyNlbmRpZgorICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoIm11bHRpcGFydC9y
ZWxhdGVkIiwgbWltZVR5cGUpKQorICAgICAgICAgICAgJiYgIW1fc3Vic3RpdHV0ZURhdGEuaXNW
YWxpZCgpICYmICFTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVBc0xvY2FsKHVy
bC5wcm90b2NvbCgpKTsKKyAgICAgICAgaWYgKCFmcmFtZUxvYWRlcigpLT5jbGllbnQoKS0+Y2Fu
U2hvd01JTUVUeXBlKG1pbWVUeXBlKSB8fCBpc1JlbW90ZVdlYkFyY2hpdmUpIHsKKyAgICAgICAg
ICAgIGZyYW1lTG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+Y2Fubm90U2hvd01JTUVUeXBlKG1f
cmVzcG9uc2UpOworICAgICAgICAgICAgLy8gQ2hlY2sgcmVhY2hlZFRlcm1pbmFsU3RhdGUgc2lu
Y2UgdGhlIGxvYWQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGVkIGluc2lkZSBvZiBfaGFu
ZGxlVW5pbXBsZW1lbnRhYmxlUG9saWN5V2l0aEVycm9yQ29kZTo6LgorICAgICAgICAgICAgc3Rv
cExvYWRpbmdGb3JQb2xpY3lDaGFuZ2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFBvbGljeURvd25sb2FkOiB7Cisg
ICAgICAgIC8vIG1fbWFpblJlc291cmNlIGNhbiBiZSBudWxsLCBlLmcuIHdoZW4gbG9hZGluZyBh
IHN1YnN0aXR1dGUgcmVzb3VyY2UgZnJvbSBhcHBsaWNhdGlvbiBjYWNoZS4KKyAgICAgICAgaWYg
KCFtX21haW5SZXNvdXJjZSkgeworICAgICAgICAgICAgbWFpblJlY2VpdmVkRXJyb3IoZnJhbWVM
b2FkZXIoKS0+Y2xpZW50KCktPmNhbm5vdFNob3dVUkxFcnJvcihtX3JlcXVlc3QpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmNvbnRpbnVlV2l0aFBvbGljeURvd25sb2FkKG1fZnJhbWUsIHRoaXMsIG1haW5SZXNvdXJj
ZUxvYWRlcigpLT5pZGVudGlmaWVyKCksIG1fcmVzcG9uc2UpOworCisgICAgICAgIC8vIFdoZW4g
c3RhcnRpbmcgdGhlIHJlcXVlc3QsIHdlIGRpZG4ndCBrbm93IHRoYXQgaXQgd291bGQgcmVzdWx0
IGluIGRvd25sb2FkIGFuZCBub3QgbmF2aWdhdGlvbi4gTm93IHdlIGtub3cgdGhhdCBtYWluIGRv
Y3VtZW50IFVSTCBkaWRuJ3QgY2hhbmdlLgorICAgICAgICAvLyBEb3dubG9hZCBtYXkgdXNlIHRo
aXMga25vd2xlZGdlIGZvciBwdXJwb3NlcyB1bnJlbGF0ZWQgdG8gY29va2llcywgbm90YWJseSBm
b3Igc2V0dGluZyBmaWxlIHF1YXJhbnRpbmUgZGF0YS4KKyAgICAgICAgZnJhbWVMb2FkZXIoKS0+
c2V0T3JpZ2luYWxVUkxGb3JEb3dubG9hZFJlcXVlc3QobV9yZXF1ZXN0KTsKKyAgICAgICAgZnJh
bWVMb2FkZXIoKS0+Y2xpZW50KCktPmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCh0
aGlzLCBtX3JlcXVlc3QsIG1fcmVzcG9uc2UpOworCisgICAgICAgIC8vIEl0IG1pZ2h0IGhhdmUg
Z29uZSBtaXNzaW5nCisgICAgICAgIGlmIChtYWluUmVzb3VyY2VMb2FkZXIoKSkKKyAgICAgICAg
ICAgIG1haW5SZXNvdXJjZUxvYWRlcigpLT5kaWRGYWlsKGludGVycnVwdGVkRm9yUG9saWN5Q2hh
bmdlRXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBQb2xpY3lJZ25v
cmU6CisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Y29udGludWVXaXRoUG9saWN5
SWdub3JlKG1fZnJhbWUsIHRoaXMsIG1haW5SZXNvdXJjZUxvYWRlcigpLT5pZGVudGlmaWVyKCks
IG1fcmVzcG9uc2UpOworICAgICAgICBzdG9wTG9hZGluZ0ZvclBvbGljeUNoYW5nZSgpOworICAg
ICAgICByZXR1cm47CisgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgaWYgKG1fcmVzcG9uc2UuaXNIVFRQKCkpIHsKKyAgICAgICAg
aW50IHN0YXR1cyA9IG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKKyAgICAgICAgaWYgKHN0
YXR1cyA8IDIwMCB8fCBzdGF0dXMgPj0gMzAwKSB7CisgICAgICAgICAgICBib29sIGhvc3RlZEJ5
T2JqZWN0ID0gZnJhbWVMb2FkZXIoKS0+aXNIb3N0ZWRCeU9iamVjdEVsZW1lbnQoKTsKKworICAg
ICAgICAgICAgZnJhbWVMb2FkZXIoKS0+aGFuZGxlRmFsbGJhY2tDb250ZW50KCk7CisgICAgICAg
ICAgICAvLyBvYmplY3QgZWxlbWVudHMgYXJlIG5vIGxvbmdlciByZW5kZXJlZCBhZnRlciB3ZSBm
YWxsYmFjaywgc28gZG9uJ3QKKyAgICAgICAgICAgIC8vIGtlZXAgdHJ5aW5nIHRvIHByb2Nlc3Mg
ZGF0YSBmcm9tIHRoZWlyIGxvYWQKKworICAgICAgICAgICAgaWYgKGhvc3RlZEJ5T2JqZWN0KQor
ICAgICAgICAgICAgICAgIGNhbmNlbE1haW5SZXNvdXJjZUxvYWQoZnJhbWVMb2FkZXIoKS0+Y2Fu
Y2VsbGVkRXJyb3IobV9yZXF1ZXN0KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlz
U3RvcHBpbmcoKSAmJiBtX3N1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSkgeworICAgICAgICBpZiAo
bV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPnNpemUoKSkKKyAgICAgICAgICAgIGRhdGFSZWNl
aXZlZCgwLCBtX3N1YnN0aXR1dGVEYXRhLmNvbnRlbnQoKS0+ZGF0YSgpLCBtX3N1YnN0aXR1dGVE
YXRhLmNvbnRlbnQoKS0+c2l6ZSgpKTsKKyAgICAgICAgaWYgKCFpc1N0b3BwaW5nKCkpCisgICAg
ICAgICAgICBmaW5pc2hlZExvYWRpbmcoMCk7CisgICAgfQorfQorCiB2b2lkIERvY3VtZW50TG9h
ZGVyOjpjb21taXRMb2FkKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgLy8g
Qm90aCB1bmxvYWRpbmcgdGhlIG9sZCBwYWdlIGFuZCBwYXJzaW5nIHRoZSBuZXcgcGFnZSBtYXkg
ZXhlY3V0ZSBKYXZhU2NyaXB0IHdoaWNoIGRlc3Ryb3lzIHRoZSBkYXRhc291cmNlCkBAIC0zMTgs
NiArNzA3LDE4IEBACiAgICAgZnJhbWVMb2FkZXItPmNsaWVudCgpLT5jb21taXR0ZWRMb2FkKHRo
aXMsIGRhdGEsIGxlbmd0aCk7CiB9CiAKK1Jlc291cmNlRXJyb3IgRG9jdW1lbnRMb2FkZXI6Omlu
dGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoKSBjb25zdAoreworICAgIHJldHVybiBmcmFt
ZUxvYWRlcigpLT5jbGllbnQoKS0+aW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihyZXF1
ZXN0KCkpOworfQorCit2b2lkIERvY3VtZW50TG9hZGVyOjpzdG9wTG9hZGluZ0ZvclBvbGljeUNo
YW5nZSgpCit7CisgICAgUmVzb3VyY2VFcnJvciBlcnJvciA9IGludGVycnVwdGVkRm9yUG9saWN5
Q2hhbmdlRXJyb3IoKTsKKyAgICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICBj
YW5jZWxNYWluUmVzb3VyY2VMb2FkKGVycm9yKTsKK30KKwogdm9pZCBEb2N1bWVudExvYWRlcjo6
Y29tbWl0RGF0YShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAo
IW1fZ290Rmlyc3RCeXRlKSB7CkBAIC0zNjEsOCArNzYyLDcgQEAKICAgICBNZW1vcnlDbGFzc0lu
Zm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkxvYWRl
cik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9mcmFtZSwgImZyYW1lIik7CiAgICAgaW5mby5hZGRN
ZW1iZXIobV9jYWNoZWRSZXNvdXJjZUxvYWRlciwgImNhY2hlZFJlc291cmNlTG9hZGVyIik7Ci0g
ICAgaW5mby5hZGRNZW1iZXIobV9tYWluUmVzb3VyY2VMb2FkZXIsICJtYWluUmVzb3VyY2VMb2Fk
ZXIiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX21haW5SZXNvdXJjZURhdGEsICJtYWluUmVzb3Vy
Y2VEYXRhIik7CisgICAgaW5mby5hZGRNZW1iZXIobV9tYWluUmVzb3VyY2UsICJtYWluUmVzb3Vy
Y2UiKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3N1YnJlc291cmNlTG9hZGVycywgInN1YnJlc291
cmNlTG9hZGVycyIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbXVsdGlwYXJ0U3VicmVzb3VyY2VM
b2FkZXJzLCAibXVsdGlwYXJ0U3VicmVzb3VyY2VMb2FkZXJzIik7CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9wbHVnSW5TdHJlYW1Mb2FkZXJzLCAicGx1Z0luU3RyZWFtTG9hZGVycyIpOwpAQCAtMzkx
LDEwICs3OTEsNTYgQEAKICAgICBpbmZvLmFkZE1lbWJlcihtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0
LCAiYXBwbGljYXRpb25DYWNoZUhvc3QiKTsKIH0KIAotdm9pZCBEb2N1bWVudExvYWRlcjo6cmVj
ZWl2ZWREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit2b2lkIERvY3VtZW50TG9h
ZGVyOjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQogeworICAgIEFTU0VSVChkYXRhKTsKKyAgICBBU1NFUlQobGVuZ3Ro
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX21haW5SZXNvdXJj
ZSk7CisgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKKworI2lmIFVTRShDRk5FVFdP
UkspIHx8IFBMQVRGT1JNKE1BQykKKyAgICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2Js
ZW0vNjA2MDc4Mj4KKyAgICBpZiAobV9yZXNwb25zZS5pc051bGwoKSkKKyAgICAgICAgc2V0UmVz
cG9uc2UoUmVzb3VyY2VSZXNwb25zZShLVVJMKCksICJ0ZXh0L2h0bWwiLCAwLCBTdHJpbmcoKSwg
U3RyaW5nKCkpKTsKKyNlbmRpZgorCisgICAgLy8gVGhlcmUgaXMgYSBidWcgaW4gQ0ZOZXR3b3Jr
IHdoZXJlIGNhbGxiYWNrcyBjYW4gYmUgZGlzcGF0Y2hlZCBldmVuIHdoZW4gbG9hZHMgYXJlIGRl
ZmVycmVkLgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNjMwNDYwMD4gZm9yIG1vcmUgZGV0
YWlscy4KKyNpZiAhVVNFKENGKQorICAgIEFTU0VSVCghbV9mcmFtZS0+cGFnZSgpLT5kZWZlcnNM
b2FkaW5nKCkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09OVEVOVF9GSUxURVJJTkcpCisgICAgYm9v
bCBsb2FkV2FzQmxvY2tlZEJlZm9yZUZpbmlzaGluZyA9IGZhbHNlOworICAgIGlmIChtX2NvbnRl
bnRGaWx0ZXIgJiYgbV9jb250ZW50RmlsdGVyLT5uZWVkc01vcmVEYXRhKCkpIHsKKyAgICAgICAg
bV9jb250ZW50RmlsdGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisKKyAgICAgICAgaWYgKG1f
Y29udGVudEZpbHRlci0+bmVlZHNNb3JlRGF0YSgpKSB7CisgICAgICAgICAgICAvLyBTaW5jZSB0
aGUgZmlsdGVyIHN0aWxsIG5lZWRzIG1vcmUgZGF0YSB0byBtYWtlIGEgZGVjaXNpb24sCisgICAg
ICAgICAgICAvLyB0cmFuc2l0aW9uIGJhY2sgdG8gdGhlIGNvbW1pdHRlZCBzdGF0ZSBzbyB0aGF0
IHdlIGRvbid0IHBhcnRpYWxseQorICAgICAgICAgICAgLy8gbG9hZCBjb250ZW50IHRoYXQgbWln
aHQgbGF0ZXIgYmUgYmxvY2tlZC4KKyAgICAgICAgICAgIGNvbW1pdExvYWQoMCwgMCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkYXRhID0gbV9jb250ZW50Rmls
dGVyLT5nZXRSZXBsYWNlbWVudERhdGEobGVuZ3RoKTsKKyAgICAgICAgbG9hZFdhc0Jsb2NrZWRC
ZWZvcmVGaW5pc2hpbmcgPSBtX2NvbnRlbnRGaWx0ZXItPmRpZEJsb2NrRGF0YSgpOworICAgIH0K
KyNlbmRpZgorCisgICAgaWYgKG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2Fk
ZXIpCisgICAgICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmRpc3BhdGNoRGlkUmVjZWl2
ZURhdGEodGhpcywgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciwgZGF0
YSwgbGVuZ3RoLCAtMSk7CisKKyAgICBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0LT5tYWluUmVzb3Vy
Y2VEYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoLCAtMSwgZmFsc2UpOworICAgIG1fdGltZU9mTGFz
dERhdGFSZWNlaXZlZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworCiAgICAgaWYg
KCFpc011bHRpcGFydFJlcGxhY2luZ0xvYWQoKSkKICAgICAgICAgY29tbWl0TG9hZChkYXRhLCBs
ZW5ndGgpOworCisjaWYgVVNFKENPTlRFTlRfRklMVEVSSU5HKQorICAgIGlmIChsb2FkV2FzQmxv
Y2tlZEJlZm9yZUZpbmlzaGluZykKKyAgICAgICAgY2FuY2VsTWFpblJlc291cmNlTG9hZCgpOwor
I2VuZGlmCiB9CiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldHVwRm9yUmVwbGFjZSgpCkBAIC00
NTUsMTIgKzkwMSw3IEBACiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmNsZWFyTWFpblJlc291cmNl
TG9hZGVyKCkKIHsKLSAgICBpZiAobV9tYWluUmVzb3VyY2VMb2FkZXIpIHsKLSAgICAgICAgbV9t
YWluUmVzb3VyY2VEYXRhID0gbV9tYWluUmVzb3VyY2VMb2FkZXItPnJlc291cmNlRGF0YSgpOwot
ICAgICAgICBtX21haW5SZXNvdXJjZUxvYWRlciA9IDA7Ci0gICAgfQotICAgIG1fbG9hZGluZ0Vt
cHR5RG9jdW1lbnQgPSBmYWxzZTsKLQorICAgIG1fbG9hZGluZ01haW5SZXNvdXJjZSA9IGZhbHNl
OwogICAgIGlmICh0aGlzID09IGZyYW1lTG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkp
CiAgICAgICAgIGNoZWNrTG9hZENvbXBsZXRlKCk7CiB9CkBAIC03OTcsOCArMTIzOCw4IEBACiAK
IHZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7Ci0g
ICAgaWYgKG1fbWFpblJlc291cmNlTG9hZGVyKQotICAgICAgICBtX21haW5SZXNvdXJjZUxvYWRl
ci0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworICAgIGlmIChtYWluUmVzb3VyY2VMb2FkZXIo
KSkKKyAgICAgICAgbWFpblJlc291cmNlTG9hZGVyKCktPnNldERlZmVyc0xvYWRpbmcoZGVmZXJz
KTsKICAgICBzZXRBbGxEZWZlcnNMb2FkaW5nKG1fc3VicmVzb3VyY2VMb2FkZXJzLCBkZWZlcnMp
OwogICAgIHNldEFsbERlZmVyc0xvYWRpbmcobV9wbHVnSW5TdHJlYW1Mb2FkZXJzLCBkZWZlcnMp
OwogICAgIGlmICghZGVmZXJzKQpAQCAtODE5LDEzICsxMjYwLDEzIEBACiB7CiAgICAgLy8gVGhl
IG1haW4gcmVzb3VyY2UncyB1bmRlcmx5aW5nIFJlc291cmNlTG9hZGVyIHdpbGwgYXNrIHRvIGJl
IGFkZGVkIGhlcmUuCiAgICAgLy8gSXQgaXMgbXVjaCBzaW1wbGVyIHRvIGhhbmRsZSBzcGVjaWFs
IGNhc2luZyBvZiBtYWluIHJlc291cmNlIGxvYWRzIGlmIHdlIGRvbid0Ci0gICAgLy8gbGV0IGl0
IGJlIGFkZGVkLiBJbiB0aGUgbWFpbiByZXNvdXJjZSBsb2FkIGNhc2UsIG1fbWFpblJlc291cmNl
TG9hZGVyLT5sb2FkZXIoKQorICAgIC8vIGxldCBpdCBiZSBhZGRlZC4gSW4gdGhlIG1haW4gcmVz
b3VyY2UgbG9hZCBjYXNlLCBtYWluUmVzb3VyY2VMb2FkZXIoKQogICAgIC8vIHdpbGwgc3RpbGwg
YmUgbnVsbCBhdCB0aGlzIHBvaW50LCBidXQgbV9nb3RGaXJzdEJ5dGUgc2hvdWxkIGJlIGZhbHNl
IGhlcmUgaWYgYW5kIG9ubHkKICAgICAvLyBpZiB3ZSBhcmUganVzdCBzdGFydGluZyB0aGUgbWFp
biByZXNvdXJjZSBsb2FkLgogICAgIGlmICghbV9nb3RGaXJzdEJ5dGUpCiAgICAgICAgIHJldHVy
bjsKICAgICBBU1NFUlQoIW1fc3VicmVzb3VyY2VMb2FkZXJzLmNvbnRhaW5zKGxvYWRlcikpOwot
ICAgIEFTU0VSVCghbV9tYWluUmVzb3VyY2VMb2FkZXIgfHwgbV9tYWluUmVzb3VyY2VMb2FkZXIt
PmxvYWRlcigpICE9IGxvYWRlcik7CisgICAgQVNTRVJUKCFtYWluUmVzb3VyY2VMb2FkZXIoKSB8
fCBtYWluUmVzb3VyY2VMb2FkZXIoKSAhPSBsb2FkZXIpOwogICAgIG1fc3VicmVzb3VyY2VMb2Fk
ZXJzLmFkZChsb2FkZXIpOwogfQogCkBAIC04NTAsMTYgKzEyOTEsNiBAQAogICAgIGNoZWNrTG9h
ZENvbXBsZXRlKCk7CiB9CiAKLWJvb2wgRG9jdW1lbnRMb2FkZXI6OmlzTG9hZGluZ01haW5SZXNv
dXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9tYWluUmVzb3VyY2VMb2FkZXIgfHwgbV9s
b2FkaW5nRW1wdHlEb2N1bWVudDsKLX0KLQotYm9vbCBEb2N1bWVudExvYWRlcjo6aXNMb2FkaW5n
TXVsdGlwYXJ0Q29udGVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWFpblJlc291cmNlTG9h
ZGVyICYmIG1fbWFpblJlc291cmNlTG9hZGVyLT5pc0xvYWRpbmdNdWx0aXBhcnRDb250ZW50KCk7
Ci19Ci0KIGJvb2wgRG9jdW1lbnRMb2FkZXI6OmlzTXVsdGlwYXJ0UmVwbGFjaW5nTG9hZCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGlzTG9hZGluZ011bHRpcGFydENvbnRlbnQoKSAmJiBmcmFtZUxv
YWRlcigpLT5pc1JlcGxhY2luZygpOwpAQCAtODcxLDEyICsxMzAyLDExIEBACiAgICAgaWYgKCFz
aG91bGRMb2FkRW1wdHkgJiYgIWZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT5yZXByZXNlbnRhdGlv
bkV4aXN0c0ZvclVSTFNjaGVtZShtX3JlcXVlc3QudXJsKCkucHJvdG9jb2woKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fbG9hZGluZ0VtcHR5RG9jdW1lbnQgPSB0cnVlOwogICAg
IGlmIChtX3JlcXVlc3QudXJsKCkuaXNFbXB0eSgpICYmICFmcmFtZUxvYWRlcigpLT5zdGF0ZU1h
Y2hpbmUoKS0+Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpKQogICAgICAgICBtX3JlcXVl
c3Quc2V0VVJMKGJsYW5rVVJMKCkpOwogICAgIFN0cmluZyBtaW1lVHlwZSA9IHNob3VsZExvYWRF
bXB0eSA/ICJ0ZXh0L2h0bWwiIDogZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCktPmdlbmVyYXRlZE1J
TUVUeXBlRm9yVVJMU2NoZW1lKG1fcmVxdWVzdC51cmwoKS5wcm90b2NvbCgpKTsKICAgICBzZXRS
ZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlKG1fcmVxdWVzdC51cmwoKSwgbWltZVR5cGUsIDAsIFN0
cmluZygpLCBTdHJpbmcoKSkpOwotICAgIGZpbmlzaGVkTG9hZGluZygpOworICAgIGZpbmlzaGVk
TG9hZGluZygwKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODg0LDMzICsxMzE0LDg4IEBA
CiB7CiAgICAgbV9tYWluRG9jdW1lbnRFcnJvciA9IFJlc291cmNlRXJyb3IoKTsKICAgICB0aW1p
bmcoKS0+bWFya05hdmlnYXRpb25TdGFydCgpOwotICAgIEFTU0VSVCghbV9tYWluUmVzb3VyY2VM
b2FkZXIpOworICAgIEFTU0VSVCghbV9tYWluUmVzb3VyY2UpOworICAgIEFTU0VSVCghbV9sb2Fk
aW5nTWFpblJlc291cmNlKTsKKyAgICBtX2xvYWRpbmdNYWluUmVzb3VyY2UgPSB0cnVlOwogCiAg
ICAgaWYgKG1heWJlTG9hZEVtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbWFpblJl
c291cmNlTG9hZGVyID0gTWFpblJlc291cmNlTG9hZGVyOjpjcmVhdGUodGhpcyk7Ci0KICAgICAv
LyBGSVhNRTogSXMgdGhlcmUgYW55IHdheSB0aGUgZXh0cmEgZmllbGRzIGNvdWxkIGhhdmUgbm90
IGJlZW4gYWRkZWQgYnkgbm93PwogICAgIC8vIElmIG5vdCwgaXQgd291bGQgYmUgZ3JlYXQgdG8g
cmVtb3ZlIHRoaXMgbGluZSBvZiBjb2RlLgogICAgIC8vIE5vdGUgdGhhdCBjdXJyZW50bHksIHNv
bWUgcmVxdWVzdHMgbWF5IGhhdmUgaW5jb3JyZWN0IGV4dHJhIGZpZWxkcyBldmVuIGlmIHRoaXMg
ZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLAogICAgIC8vIGJlY2F1c2Ugd2UgcGFzcyBhIHdyb25n
IGxvYWRUeXBlIChzZWUgRklYTUUgaW4gYWRkRXh0cmFGaWVsZHNUb01haW5SZXNvdXJjZVJlcXVl
c3QoKSkuCiAgICAgZnJhbWVMb2FkZXIoKS0+YWRkRXh0cmFGaWVsZHNUb01haW5SZXNvdXJjZVJl
cXVlc3QobV9yZXF1ZXN0KTsKLSAgICBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZChtX3JlcXVl
c3QsIG1fc3Vic3RpdHV0ZURhdGEpOwogCi0gICAgaWYgKG1fcmVxdWVzdC5pc051bGwoKSkgewot
ICAgICAgICBtX21haW5SZXNvdXJjZUxvYWRlciA9IDA7CisgICAgQVNTRVJUKHRpbWluZygpLT5u
YXZpZ2F0aW9uU3RhcnQoKSk7CisgICAgQVNTRVJUKCF0aW1pbmcoKS0+ZmV0Y2hTdGFydCgpKTsK
KyAgICB0aW1pbmcoKS0+bWFya0ZldGNoU3RhcnQoKTsKKworICAgIC8vIFNlbmQgdGhpcyBzeW50
aGV0aWMgZGVsZWdhdGUgY2FsbGJhY2sgc2luY2UgY2xpZW50cyBleHBlY3QgaXQsIGFuZAorICAg
IC8vIHdlIG5vIGxvbmdlciBzZW5kIHRoZSBjYWxsYmFjayBmcm9tIHdpdGhpbiBOU1VSTENvbm5l
Y3Rpb24gZm9yCisgICAgLy8gaW5pdGlhbCByZXF1ZXN0cy4KKyAgICB3aWxsU2VuZFJlcXVlc3Qo
bV9yZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlKCkpOworCisgICAgbV9hcHBsaWNhdGlvbkNhY2hl
SG9zdC0+bWF5YmVMb2FkTWFpblJlc291cmNlKG1fcmVxdWVzdCwgbV9zdWJzdGl0dXRlRGF0YSk7
CisKKyAgICBpZiAobV9zdWJzdGl0dXRlRGF0YS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgbV9pZGVu
dGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciA9IG1fZnJhbWUtPnBhZ2UoKS0+cHJv
Z3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOworICAgICAgICBmcmFtZUxvYWRlcigp
LT5ub3RpZmllcigpLT5hc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdChtX2lkZW50aWZp
ZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyLCB0aGlzLCBtX3JlcXVlc3QpOworICAgICAg
ICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5kaXNwYXRjaFdpbGxTZW5kUmVxdWVzdCh0aGlz
LCBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyLCBtX3JlcXVlc3QsIFJl
c291cmNlUmVzcG9uc2UoKSk7CisgICAgICAgIGhhbmRsZVN1YnN0aXR1dGVEYXRhTG9hZFNvb24o
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KG1fcmVxdWVzdCk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXNvdXJjZUxvYWRlck9wdGlv
bnMsIG1haW5SZXNvdXJjZUxvYWRPcHRpb25zLAorICAgICAgICAoU2VuZENhbGxiYWNrcywgU25p
ZmZDb250ZW50LCBCdWZmZXJEYXRhLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBc2tDbGllbnRG
b3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzLCBTa2lwU2VjdXJpdHlDaGVjaykpOworICAgIENhY2hl
ZFJlc291cmNlUmVxdWVzdCBjYWNoZWRSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCwgbWFpblJlc291
cmNlTG9hZE9wdGlvbnMpOworICAgIG1fbWFpblJlc291cmNlID0gbV9jYWNoZWRSZXNvdXJjZUxv
YWRlci0+cmVxdWVzdE1haW5SZXNvdXJjZShjYWNoZWRSZXNvdXJjZVJlcXVlc3QpOworICAgIGlm
ICghbV9tYWluUmVzb3VyY2UpIHsKKyAgICAgICAgc2V0UmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qo
KSk7CiAgICAgICAgIC8vIElmIHRoZSBsb2FkIHdhcyBhYm9ydGVkIGJ5IGNsZWFyaW5nIG1fcmVx
dWVzdCwgaXQncyBwb3NzaWJsZSB0aGUgQXBwbGljYXRpb25DYWNoZUhvc3QKICAgICAgICAgLy8g
aXMgbm93IGluIGEgc3RhdGUgd2hlcmUgc3RhcnRpbmcgYW4gZW1wdHkgbG9hZCB3aWxsIGJlIGlu
Y29uc2lzdGVudC4gUmVwbGFjZSBpdCB3aXRoCiAgICAgICAgIC8vIGEgbmV3IEFwcGxpY2F0aW9u
Q2FjaGVIb3N0LgogICAgICAgICBtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0ID0gYWRvcHRQdHIobmV3
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0KHRoaXMpKTsKICAgICAgICAgbWF5YmVMb2FkRW1wdHkoKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmICghbWFpblJlc291cmNlTG9hZGVyKCkp
IHsKKyAgICAgICAgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciA9IG1f
ZnJhbWUtPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOworICAg
ICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5hc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFs
UmVxdWVzdChtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyLCB0aGlzLCBy
ZXF1ZXN0KTsKKyAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+ZGlzcGF0Y2hXaWxs
U2VuZFJlcXVlc3QodGhpcywgbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRl
ciwgcmVxdWVzdCwgUmVzb3VyY2VSZXNwb25zZSgpKTsKKyAgICB9CisgICAgbV9tYWluUmVzb3Vy
Y2UtPmFkZENsaWVudCh0aGlzKTsKKworICAgIC8vIEEgYnVuY2ggb2YgaGVhZGVycyBhcmUgc2V0
IHdoZW4gdGhlIHVuZGVybHlpbmcgUmVzb3VyY2VMb2FkZXIgaXMgY3JlYXRlZCwgYW5kIG1fcmVx
dWVzdCBuZWVkcyB0byBpbmNsdWRlIHRob3NlLgorICAgIGlmIChtYWluUmVzb3VyY2VMb2FkZXIo
KSkKKyAgICAgICAgcmVxdWVzdCA9IG1haW5SZXNvdXJjZUxvYWRlcigpLT5vcmlnaW5hbFJlcXVl
c3QoKTsKKyAgICAvLyBJZiB0aGVyZSB3YXMgYSBmcmFnbWVudCBpZGVudGlmaWVyIG9uIG1fcmVx
dWVzdCwgdGhlIGNhY2hlIHdpbGwgaGF2ZSBzdHJpcHBlZCBpdC4gbV9yZXF1ZXN0IHNob3VsZCBp
bmNsdWRlCisgICAgLy8gdGhlIGZyYWdtZW50IGlkZW50aWZpZXIsIHNvIGFkZCB0aGF0IGJhY2sg
aW4uCisgICAgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIobV9yZXF1ZXN0LnVy
bCgpLCByZXF1ZXN0LnVybCgpKSkKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwobV9yZXF1ZXN0LnVy
bCgpKTsKKyAgICBzZXRSZXF1ZXN0KHJlcXVlc3QpOwogfQogCiB2b2lkIERvY3VtZW50TG9hZGVy
OjpjYW5jZWxNYWluUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewot
ICAgIG1fbWFpblJlc291cmNlTG9hZGVyLT5jYW5jZWwoZXJyb3IpOworICAgIFJlc291cmNlRXJy
b3IgcmVzb3VyY2VFcnJvciA9IGVycm9yLmlzTnVsbCgpID8gZnJhbWVMb2FkZXIoKS0+Y2FuY2Vs
bGVkRXJyb3IocmVxdWVzdCgpKSA6IGVycm9yOworICAgIG1fZGF0YUxvYWRUaW1lci5zdG9wKCk7
CisgICAgaWYgKG1fd2FpdGluZ0ZvckNvbnRlbnRQb2xpY3kpIHsKKyAgICAgICAgZnJhbWVMb2Fk
ZXIoKS0+cG9saWN5Q2hlY2tlcigpLT5jYW5jZWxDaGVjaygpOworICAgICAgICBBU1NFUlQobV93
YWl0aW5nRm9yQ29udGVudFBvbGljeSk7CisgICAgICAgIG1fd2FpdGluZ0ZvckNvbnRlbnRQb2xp
Y3kgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobWFpblJlc291cmNlTG9hZGVyKCkpCisgICAg
ICAgIG1haW5SZXNvdXJjZUxvYWRlcigpLT5jYW5jZWwocmVzb3VyY2VFcnJvcik7CisKKyAgICBp
ZiAobV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlcikgeworICAgICAgICBB
U1NFUlQoIW1haW5SZXNvdXJjZUxvYWRlcigpKTsKKyAgICAgICAgZnJhbWVMb2FkZXIoKS0+Y2xp
ZW50KCktPmRpc3BhdGNoRGlkRmFpbExvYWRpbmcodGhpcywgbV9pZGVudGlmaWVyRm9yTG9hZFdp
dGhvdXRSZXNvdXJjZUxvYWRlciwgcmVzb3VyY2VFcnJvcik7CisgICAgfQorICAgIG1haW5SZWNl
aXZlZEVycm9yKHJlc291cmNlRXJyb3IpOwogfQogCiB2b2lkIERvY3VtZW50TG9hZGVyOjpzdWJy
ZXNvdXJjZUxvYWRlckZpbmlzaGVkTG9hZGluZ09uZVBhcnQoUmVzb3VyY2VMb2FkZXIqIGxvYWRl
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmgJKHJl
dmlzaW9uIDE0Mjc1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBNYWluUmVzb3VyY2VMb2FkZXJfaAotI2RlZmluZSBNYWluUmVzb3VyY2VMb2FkZXJfaAot
Ci0jaW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCi0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLQotI2lmIEhBVkUoUlVOTE9PUF9USU1FUikKLSNpbmNsdWRlICJSdW5Mb29w
VGltZXIuaCIKLSNlbHNlCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEZvcm1TdGF0ZTsKLWNsYXNzIFJlc291cmNlUmVxdWVzdDsKLSAg
ICAKLSNpZiBVU0UoQ09OVEVOVF9GSUxURVJJTkcpCi1jbGFzcyBDb250ZW50RmlsdGVyOwotI2Vu
ZGlmCi0KLWNsYXNzIE1haW5SZXNvdXJjZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPE1haW5S
ZXNvdXJjZUxvYWRlcj4sIHB1YmxpYyBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWFp
blJlc291cmNlTG9hZGVyPiBjcmVhdGUoRG9jdW1lbnRMb2FkZXIqKTsKLSAgICB2aXJ0dWFsIH5N
YWluUmVzb3VyY2VMb2FkZXIoKTsKLQotICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYpOwotICAgIHZvaWQgY2FuY2VsKCk7Ci0gICAgdm9p
ZCBjYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgIFJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFJlc291cmNlQnVmZmVyPiByZXNvdXJjZURhdGEo
KTsKLQotICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKLSAgICB2b2lkIHNldERhdGFC
dWZmZXJpbmdQb2xpY3koRGF0YUJ1ZmZlcmluZ1BvbGljeSk7Ci0KLSNpZiBIQVZFKFJVTkxPT1Bf
VElNRVIpCi0gICAgdHlwZWRlZiBSdW5Mb29wVGltZXI8TWFpblJlc291cmNlTG9hZGVyPiBNYWlu
UmVzb3VyY2VMb2FkZXJUaW1lcjsKLSNlbHNlCi0gICAgdHlwZWRlZiBUaW1lcjxNYWluUmVzb3Vy
Y2VMb2FkZXI+IE1haW5SZXNvdXJjZUxvYWRlclRpbWVyOwotI2VuZGlmCi0KLSAgICB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIoKSBjb25zdDsKLSAgICBib29sIGlzTG9hZGluZ011bHRpcGFydENv
bnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50OyB9Ci0KLSAg
ICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBNYWluUmVzb3VyY2VMb2FkZXIoRG9jdW1lbnRMb2FkZXIqKTsK
LQotICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCByZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkYXRhUmVjZWl2ZWQoQ2Fj
aGVkUmVzb3VyY2UqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikgT1ZFUlJJ
REU7Ci0KLSAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKLSAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpOwotICAgIHZvaWQgaGFuZGxlU3Vic3RpdHV0ZURhdGFM
b2FkU29vbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICB2b2lkIGhhbmRsZVN1YnN0aXR1
dGVEYXRhTG9hZE5vdyhNYWluUmVzb3VyY2VMb2FkZXJUaW1lciopOwotCi0gICAgdm9pZCBzdGFy
dERhdGFMb2FkVGltZXIoKTsKLQotICAgIHZvaWQgcmVjZWl2ZWRFcnJvcihjb25zdCBSZXNvdXJj
ZUVycm9yJik7Ci0gICAgUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVy
cm9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzdG9wTG9hZGluZ0ZvclBvbGljeUNoYW5nZSgpOwotICAg
IGJvb2wgaXNQb3N0T3JSZWRpcmVjdEFmdGVyUG9zdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwotCi0g
ICAgc3RhdGljIHZvaWQgY2FsbENvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KHZvaWQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGJvb2wgc2hvdWxk
Q29udGludWUpOwotICAgIHZvaWQgY29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3koY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzaG91bGRDb250aW51ZSk7Ci0KLSAgICBzdGF0aWMgdm9p
ZCBjYWxsQ29udGludWVBZnRlckNvbnRlbnRQb2xpY3kodm9pZCosIFBvbGljeUFjdGlvbik7Ci0g
ICAgdm9pZCBjb250aW51ZUFmdGVyQ29udGVudFBvbGljeShQb2xpY3lBY3Rpb24pOwotICAgIHZv
aWQgY29udGludWVBZnRlckNvbnRlbnRQb2xpY3koUG9saWN5QWN0aW9uLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7Ci0gICAgCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBzdWJzdGl0dXRl
TUlNRVR5cGVGcm9tUGx1Z2luRGF0YWJhc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotI2Vu
ZGlmCi0KLSAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIoKSBjb25zdDsKLSAgICBEb2N1bWVu
dExvYWRlciogZG9jdW1lbnRMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TG9hZGVy
LmdldCgpOyB9Ci0KLSAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBjb25zdDsK
LSAgICB2b2lkIGNsZWFyUmVzb3VyY2UoKTsKLQotICAgIGJvb2wgZGVmZXJzTG9hZGluZygpIGNv
bnN0OwotCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IG1fcmVz
b3VyY2U7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9pbml0aWFsUmVxdWVzdDsKLSAgICBTdWJz
dGl0dXRlRGF0YSBtX3N1YnN0aXR1dGVEYXRhOwotICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNw
b25zZTsKLQotICAgIE1haW5SZXNvdXJjZUxvYWRlclRpbWVyIG1fZGF0YUxvYWRUaW1lcjsKLSAg
ICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IG1fZG9jdW1lbnRMb2FkZXI7Ci0KLSAgICBib29sIG1f
bG9hZGluZ011bHRpcGFydENvbnRlbnQ7Ci0gICAgYm9vbCBtX3dhaXRpbmdGb3JDb250ZW50UG9s
aWN5OwotICAgIGRvdWJsZSBtX3RpbWVPZkxhc3REYXRhUmVjZWl2ZWQ7Ci0gICAgdW5zaWduZWQg
bG9uZyBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9hZGVyOwotCi0jaWYgVVNF
KENPTlRFTlRfRklMVEVSSU5HKQotICAgIFJlZlB0cjxDb250ZW50RmlsdGVyPiBtX2NvbnRlbnRG
aWx0ZXI7Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gMTQyNzU0KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAK
ICNpZm5kZWYgRG9jdW1lbnRMb2FkZXJfaAogI2RlZmluZSBEb2N1bWVudExvYWRlcl9oCiAKKyNp
bmNsdWRlICJDYWNoZWRSYXdSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkVGltaW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRXcml0ZXIuaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2VCYXNlLmgiCkBAIC00NCw2ICs0Niwx
MCBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
KyNpZiBIQVZFKFJVTkxPT1BfVElNRVIpCisjaW5jbHVkZSAiUnVuTG9vcFRpbWVyLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhv
c3Q7CkBAIC01Myw5ICs1OSwxMiBAQAogICAgIGNsYXNzIEFyY2hpdmVSZXNvdXJjZTsKICAgICBj
bGFzcyBBcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uOwogICAgIGNsYXNzIENhY2hlZFJlc291cmNl
TG9hZGVyOworI2lmIFVTRShDT05URU5UX0ZJTFRFUklORykKKyAgICBjbGFzcyBDb250ZW50Rmls
dGVyOworI2VuZGlmCisgICAgY2xhc3MgRm9ybVN0YXRlOwogICAgIGNsYXNzIEZyYW1lOwogICAg
IGNsYXNzIEZyYW1lTG9hZGVyOwotICAgIGNsYXNzIE1haW5SZXNvdXJjZUxvYWRlcjsKICAgICBj
bGFzcyBQYWdlOwogICAgIGNsYXNzIFJlc291cmNlQnVmZmVyOwogICAgIGNsYXNzIFJlc291cmNl
TG9hZGVyOwpAQCAtNjYsNyArNzUsOCBAQAogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVz
b3VyY2VMb2FkZXI+ID4gUmVzb3VyY2VMb2FkZXJTZXQ7CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVz
b3VyY2VSZXNwb25zZT4gUmVzcG9uc2VWZWN0b3I7CiAKLSAgICBjbGFzcyBEb2N1bWVudExvYWRl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50TG9hZGVyPiB7CisgICAgY2xhc3MgRG9jdW1l
bnRMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudExvYWRlcj4sIHByaXZhdGUgQ2Fj
aGVkUmF3UmVzb3VyY2VDbGllbnQgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBj
cmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRlRGF0
YSYgZGF0YSkKICAgICAgICAgewpAQCAtODEsNyArOTEsOCBAQAogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoRnJvbUZyYW1lKCk7CiAKICAgICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVy
KCkgY29uc3Q7Ci0gICAgICAgIE1haW5SZXNvdXJjZUxvYWRlciogbWFpblJlc291cmNlTG9hZGVy
KCkgY29uc3QgeyByZXR1cm4gbV9tYWluUmVzb3VyY2VMb2FkZXIuZ2V0KCk7IH0KKyAgICAgICAg
UmVzb3VyY2VMb2FkZXIqIG1haW5SZXNvdXJjZUxvYWRlcigpIGNvbnN0OworICAgICAgICBDYWNo
ZWRSYXdSZXNvdXJjZSogY2FjaGVkTWFpblJlc291cmNlKCkgY29uc3Q7CiAgICAgICAgIFBhc3NS
ZWZQdHI8UmVzb3VyY2VCdWZmZXI+IG1haW5SZXNvdXJjZURhdGEoKSBjb25zdDsKICAgICAgICAg
CiAgICAgICAgIERvY3VtZW50V3JpdGVyKiB3cml0ZXIoKSBjb25zdCB7IHJldHVybiAmbV93cml0
ZXI7IH0KQEAgLTExNyw3ICsxMjgsNyBAQAogICAgICAgICBib29sIGlzTG9hZGluZygpIGNvbnN0
IHsgcmV0dXJuIGlzTG9hZGluZ01haW5SZXNvdXJjZSgpIHx8ICFtX3N1YnJlc291cmNlTG9hZGVy
cy5pc0VtcHR5KCkgfHwgIW1fcGx1Z0luU3RyZWFtTG9hZGVycy5pc0VtcHR5KCk7IH0KICAgICAg
ICAgdm9pZCByZWNlaXZlZERhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAgICAgIHZvaWQgc2V0
dXBGb3JSZXBsYWNlKCk7Ci0gICAgICAgIHZvaWQgZmluaXNoZWRMb2FkaW5nKCk7CisgICAgICAg
IHZvaWQgZmluaXNoZWRMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICAgICAgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9
CiAgICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3ImIG1haW5Eb2N1bWVudEVycm9yKCkgY29uc3Qg
eyByZXR1cm4gbV9tYWluRG9jdW1lbnRFcnJvcjsgfQogICAgICAgICB2b2lkIG1haW5SZWNlaXZl
ZEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKQEAgLTE5NCw3ICsyMDUsNyBAQAogICAgICAg
ICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAKICAgICAgICAgdm9pZCBzdGFydExvYWRp
bmdNYWluUmVzb3VyY2UoKTsKLSAgICAgICAgdm9pZCBjYW5jZWxNYWluUmVzb3VyY2VMb2FkKGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdm9pZCBjYW5jZWxNYWluUmVzb3VyY2VMb2Fk
KGNvbnN0IFJlc291cmNlRXJyb3ImID0gUmVzb3VyY2VFcnJvcigpKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIFN1cHBvcnQgaWNvbkRhdGFiYXNlIGluIHN5bmNocm9ub3VzIG1vZGUuCiAgICAgICAg
IHZvaWQgaWNvbkxvYWREZWNpc2lvbkF2YWlsYWJsZSgpOwpAQCAtMjA0LDggKzIxNSw4IEBACiAg
ICAgICAgIHZvaWQgZ2V0SWNvbkxvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJik7
CiAgICAgICAgIHZvaWQgZ2V0SWNvbkRhdGFGb3JJY29uVVJMKGNvbnN0IFN0cmluZyYpOwogICAg
ICAgICAKLSAgICAgICAgYm9vbCBpc0xvYWRpbmdNYWluUmVzb3VyY2UoKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBpc0xvYWRpbmdNdWx0aXBhcnRDb250ZW50KCkgY29uc3Q7CisgICAgICAgIGJvb2wg
aXNMb2FkaW5nTWFpblJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkaW5nTWFpblJlc291
cmNlOyB9CisgICAgICAgIGJvb2wgaXNMb2FkaW5nTXVsdGlwYXJ0Q29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNMb2FkaW5nTXVsdGlwYXJ0Q29udGVudDsgfQogCiAgICAgICAgIHZvaWQgc3Rv
cExvYWRpbmdQbHVnSW5zKCk7CiAgICAgICAgIHZvaWQgc3RvcExvYWRpbmdTdWJyZXNvdXJjZXMo
KTsKQEAgLTI2NSwyMiArMjc2LDQ1IEBACiAgICAgICAgIHZvaWQgY2xlYXJBcmNoaXZlUmVzb3Vy
Y2VzKCk7CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzcG9u
c2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBPVkVS
UklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSos
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSBPVkVSUklERTsKKwogICAgICAg
ICBib29sIG1heWJlTG9hZEVtcHR5KCk7CiAKICAgICAgICAgYm9vbCBpc011bHRpcGFydFJlcGxh
Y2luZ0xvYWQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc1Bvc3RPclJlZGlyZWN0QWZ0ZXJQb3N0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAorICAg
ICAgICBzdGF0aWMgdm9pZCBjYWxsQ29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3kodm9pZCos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91
bGRDb250aW51ZSk7CisgICAgICAgIHZvaWQgY29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3ko
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzaG91bGRDb250aW51ZSk7CisKKyAgICAgICAg
c3RhdGljIHZvaWQgY2FsbENvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KHZvaWQqLCBQb2xpY3lB
Y3Rpb24pOworICAgICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KFBvbGljeUFj
dGlvbik7CisKKyAgICAgICAgdm9pZCBzdG9wTG9hZGluZ0ZvclBvbGljeUNoYW5nZSgpOworICAg
ICAgICBSZXNvdXJjZUVycm9yIGludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoKSBjb25z
dDsKKworI2lmIEhBVkUoUlVOTE9PUF9USU1FUikKKyAgICAgICAgdHlwZWRlZiBSdW5Mb29wVGlt
ZXI8RG9jdW1lbnRMb2FkZXI+IERvY3VtZW50TG9hZGVyVGltZXI7CisjZWxzZQorICAgICAgICB0
eXBlZGVmIFRpbWVyPERvY3VtZW50TG9hZGVyPiBEb2N1bWVudExvYWRlclRpbWVyOworI2VuZGlm
CisgICAgICAgIHZvaWQgaGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkU29vbigpOworICAgICAgICB2
b2lkIGhhbmRsZVN1YnN0aXR1dGVEYXRhTG9hZE5vdyhEb2N1bWVudExvYWRlclRpbWVyKik7Cisg
ICAgICAgIHZvaWQgc3RhcnREYXRhTG9hZFRpbWVyKCk7CisKICAgICAgICAgdm9pZCBkZWxpdmVy
U3Vic3RpdHV0ZVJlc291cmNlc0FmdGVyRGVsYXkoKTsKICAgICAgICAgdm9pZCBzdWJzdGl0dXRl
UmVzb3VyY2VEZWxpdmVyeVRpbWVyRmlyZWQoVGltZXI8RG9jdW1lbnRMb2FkZXI+Kik7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgICAgICBSZWZQdHI8Q2Fj
aGVkUmVzb3VyY2VMb2FkZXI+IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAKLSAgICAgICAgUmVm
UHRyPE1haW5SZXNvdXJjZUxvYWRlcj4gbV9tYWluUmVzb3VyY2VMb2FkZXI7CisgICAgICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBtX21haW5SZXNvdXJjZTsKICAg
ICAgICAgUmVzb3VyY2VMb2FkZXJTZXQgbV9zdWJyZXNvdXJjZUxvYWRlcnM7CiAgICAgICAgIFJl
c291cmNlTG9hZGVyU2V0IG1fbXVsdGlwYXJ0U3VicmVzb3VyY2VMb2FkZXJzOwogICAgICAgICBS
ZXNvdXJjZUxvYWRlclNldCBtX3BsdWdJblN0cmVhbUxvYWRlcnM7Ci0KLSAgICAgICAgUmVmUHRy
PFJlc291cmNlQnVmZmVyPiBtX21haW5SZXNvdXJjZURhdGE7CiAgICAgICAgIAogICAgICAgICBt
dXRhYmxlIERvY3VtZW50V3JpdGVyIG1fd3JpdGVyOwogCkBAIC0zMDksNyArMzQzLDcgQEAKICAg
ICAgICAgYm9vbCBtX2lzU3RvcHBpbmc7CiAgICAgICAgIGJvb2wgbV9nb3RGaXJzdEJ5dGU7CiAg
ICAgICAgIGJvb2wgbV9pc0NsaWVudFJlZGlyZWN0OwotICAgICAgICBib29sIG1fbG9hZGluZ0Vt
cHR5RG9jdW1lbnQ7CisgICAgICAgIGJvb2wgbV9pc0xvYWRpbmdNdWx0aXBhcnRDb250ZW50Owog
CiAgICAgICAgIC8vIEZJWE1FOiBEb2N1bWVudDo6bV9wcm9jZXNzaW5nTG9hZEV2ZW50IGFuZCBE
b2N1bWVudExvYWRlcjo6bV93YXNPbmxvYWRIYW5kbGVkIGFyZSByb3VnaGx5IHRoZSBzYW1lCiAg
ICAgICAgIC8vIGFuZCBzaG91bGQgYmUgbWVyZ2VkLgpAQCAtMzQ5LDEzICszODMsMjQgQEAKICAg
ICAgICAgU3RyaW5nIG1fY2xpZW50UmVkaXJlY3RTb3VyY2VGb3JIaXN0b3J5OwogICAgICAgICBi
b29sIG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5OwogCisgICAgICAgIGJvb2wgbV9sb2Fk
aW5nTWFpblJlc291cmNlOwogICAgICAgICBEb2N1bWVudExvYWRUaW1pbmcgbV9kb2N1bWVudExv
YWRUaW1pbmc7CisKKyAgICAgICAgZG91YmxlIG1fdGltZU9mTGFzdERhdGFSZWNlaXZlZDsKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZpZXJGb3JMb2FkV2l0aG91dFJlc291cmNlTG9h
ZGVyOworCisgICAgICAgIERvY3VtZW50TG9hZGVyVGltZXIgbV9kYXRhTG9hZFRpbWVyOworICAg
ICAgICBib29sIG1fd2FpdGluZ0ZvckNvbnRlbnRQb2xpY3k7CiAgICAgCiAgICAgICAgIFJlZlB0
cjxJY29uTG9hZERlY2lzaW9uQ2FsbGJhY2s+IG1faWNvbkxvYWREZWNpc2lvbkNhbGxiYWNrOwog
ICAgICAgICBSZWZQdHI8SWNvbkRhdGFDYWxsYmFjaz4gbV9pY29uRGF0YUNhbGxiYWNrOwogCiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9zdDsgIC8vIGZvciBzdWJzdGl0
dXRlIHJlc291cmNlIGRlbGl2ZXJ5CiAgICAgICAgIE93blB0cjxBcHBsaWNhdGlvbkNhY2hlSG9z
dD4gbV9hcHBsaWNhdGlvbkNhY2hlSG9zdDsKKworI2lmIFVTRShDT05URU5UX0ZJTFRFUklORykK
KyAgICAgICAgUmVmUHRyPENvbnRlbnRGaWx0ZXI+IG1fY29udGVudEZpbHRlcjsKKyNlbmRpZgog
ICAgIH07CiAKICAgICBpbmxpbmUgdm9pZCBEb2N1bWVudExvYWRlcjo6cmVjb3JkTWVtb3J5Q2Fj
aGVMb2FkRm9yRnV0dXJlQ2xpZW50Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYgdXJsKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUhvc3QuY3BwCShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw2IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgotI2lu
Y2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5o
IgpAQCAtMTAzLDcgKzEwMiw3IEBACiAgICAgICAgIGlmIChpc0FwcGxpY2F0aW9uQ2FjaGVFbmFi
bGVkKCkpIHsKICAgICAgICAgICAgIG1fbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSA9IEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0KHJlcXVlc3Qs
IGRvY3VtZW50TG9hZGVyKCkpOwogCi0gICAgICAgICAgICBpZiAoc2NoZWR1bGVMb2FkRmFsbGJh
Y2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKGRvY3VtZW50TG9hZGVyKCktPm1haW5SZXNv
dXJjZUxvYWRlcigpLT5sb2FkZXIoKSwgbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlLmdl
dCgpKSkKKyAgICAgICAgICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFw
cGxpY2F0aW9uQ2FjaGUoZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291cmNlTG9hZGVyKCksIG1f
bWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTcsNyArMTE2LDcgQEAKICAgICAgICAg
aWYgKGlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSkgewogICAgICAgICAgICAgbV9tYWluUmVz
b3VyY2VBcHBsaWNhdGlvbkNhY2hlID0gQXBwbGljYXRpb25DYWNoZUdyb3VwOjpmYWxsYmFja0Nh
Y2hlRm9yTWFpblJlcXVlc3QocmVxdWVzdCwgbV9kb2N1bWVudExvYWRlcik7CiAKLSAgICAgICAg
ICAgIGlmIChzY2hlZHVsZUxvYWRGYWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUo
ZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291cmNlTG9hZGVyKCktPmxvYWRlcigpLCBtX21haW5S
ZXNvdXJjZUFwcGxpY2F0aW9uQ2FjaGUuZ2V0KCkpKQorICAgICAgICAgICAgaWYgKHNjaGVkdWxl
TG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZShkb2N1bWVudExvYWRlcigp
LT5tYWluUmVzb3VyY2VMb2FkZXIoKSwgbV9tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNhY2hlLmdl
dCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuY3BwCShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
LSNpbmNsdWRlICJNYWluUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJNYW5pZmVzdFBhcnNl
ci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZUJ1ZmZlci5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTQyNzU0KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYwLDggKzE5NjAsNiBAQAogICAgICAgICAg
ICAgJ2xvYWRlci9MaW5rTG9hZGVyQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9Mb2Fk
ZXJTdHJhdGVneS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oJywK
LSAgICAgICAgICAgICdsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcCcsCi0gICAgICAgICAg
ICAnbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvTWl4
ZWRDb250ZW50Q2hlY2tlci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9NaXhlZENvbnRlbnRD
aGVja2VyLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcCcsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAJKHJldmlzaW9uIDE0Mjc1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDkgKzM5LDkgQEAKICNpbmNsdWRlICJIVE1MU291cmNlRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5j
bHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJSYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5o
IgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMTA1LDcgKzEwNSw3IEBACiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VM
b2FkZXIoKS0+c2V0RGF0YUJ1ZmZlcmluZ1BvbGljeShEb05vdEJ1ZmZlckRhdGEpOworICAgIGZy
YW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+Y2FjaGVkTWFpblJlc291cmNl
KCktPnNldERhdGFCdWZmZXJpbmdQb2xpY3koRG9Ob3RCdWZmZXJEYXRhKTsKIH0KIAogdm9pZCBN
ZWRpYURvY3VtZW50UGFyc2VyOjphcHBlbmRCeXRlcyhEb2N1bWVudFdyaXRlciosIGNvbnN0IGNo
YXIqLCBzaXplX3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcAko
cmV2aXNpb24gMTQyNzU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxMSBAQAogI2luY2x1ZGUgIkhUTUxFbWJl
ZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKLSNpbmNsdWRlICJNYWluUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJOb2Rl
TGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYXdEYXRhRG9jdW1lbnRQYXJz
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgICAgICAvLyBJbiBhIHBsdWdpbiBkb2N1bWVu
dCwgdGhlIG1haW4gcmVzb3VyY2UgaXMgdGhlIHBsdWdpbi4gSWYgd2UgaGF2ZSBhIG51bGwgd2lk
Z2V0LCB0aGF0IG1lYW5zCiAgICAgICAgICAgICAvLyB0aGUgbG9hZGluZyBvZiB0aGUgcGx1Z2lu
IHdhcyBjYW5jZWxsZWQsIHdoaWNoIGdpdmVzIHVzIGEgbnVsbCBtYWluUmVzb3VyY2VMb2FkZXIo
KSwgc28gd2UKICAgICAgICAgICAgIC8vIG5lZWQgdG8gaGF2ZSB0aGlzIGNhbGwgaW4gYSBudWxs
IGNoZWNrIG9mIHRoZSB3aWRnZXQgb3Igb2YgbWFpblJlc291cmNlTG9hZGVyKCkuCi0gICAgICAg
ICAgICBmcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJj
ZUxvYWRlcigpLT5zZXREYXRhQnVmZmVyaW5nUG9saWN5KERvTm90QnVmZmVyRGF0YSk7CisgICAg
ICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPmNhY2hlZE1h
aW5SZXNvdXJjZSgpLT5zZXREYXRhQnVmZmVyaW5nUG9saWN5KERvTm90QnVmZmVyRGF0YSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICBpZiAoIXNob3VsZExv
YWRQbHVnaW5NYW51YWxseSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmcmFtZSgpLT5sb2Fk
ZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291cmNlTG9hZGVyKCktPmNhbmNl
bCgpOworICAgIGZyYW1lKCktPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5jYW5j
ZWxNYWluUmVzb3VyY2VMb2FkKCk7CiAgICAgc2V0U2hvdWxkTG9hZFBsdWdpbk1hbnVhbGx5KGZh
bHNlKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFy
c2VySWRpb21zLmgiCi0jaW5jbHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAi
UGx1Z2luRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckltYWdlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTQyNzU0KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTE2NzgsNyArMTY3OCw2IEBACiAgICAgbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAogICAgIGxv
YWRlci9MaW5rTG9hZGVyLmNwcAogICAgIGxvYWRlci9Mb2FkZXJTdHJhdGVneS5jcHAKLSAgICBs
b2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAogICAgIGxvYWRlci9NaXhlZENvbnRlbnRDaGVj
a2VyLmNwcAogICAgIGxvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcAogICAgIGxvYWRlci9OZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMTQyNzU0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw2IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFy
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUxpc3QuaCIKICNpbmNsdWRlICJNZWRp
YVF1ZXJ5TWF0Y2hlci5oIgpAQCAtMTM2LDYgKzEzNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4
dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lk
Z2V0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJT
Y29wZWRFdmVudFF1ZXVlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0Mjc1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTg3Nyw3ICs4Nzcs
NiBAQAogICAgIGxvYWRlci9JbWFnZUxvYWRlci5jcHAgXAogICAgIGxvYWRlci9MaW5rTG9hZGVy
LmNwcCBcCiAgICAgbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmNwcCBcCi0gICAgbG9hZGVyL01haW5S
ZXNvdXJjZUxvYWRlci5jcHAgXAogICAgIGxvYWRlci9NaXhlZENvbnRlbnRDaGVja2VyLmNwcCBc
CiAgICAgbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uY3BwIFwKICAgICBsb2FkZXIvTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIuY3BwIFwKQEAgLTIwNjMsNyArMjA2Miw2IEBACiAgICAgbG9hZGVy
L0xpbmtMb2FkZXIuaCBcCiAgICAgbG9hZGVyL0xpbmtMb2FkZXJDbGllbnQuaCBcCiAgICAgbG9h
ZGVyL0xvYWRlclN0cmF0ZWd5LmggXAotICAgIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuaCBc
CiAgICAgbG9hZGVyL01peGVkQ29udGVudENoZWNrZXIuaCBcCiAgICAgbG9hZGVyL05hdmlnYXRp
b25BY3Rpb24uaCBcCiAgICAgbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmggXApJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE0Mjc1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsOCArMjY4LDEyIEBACiBf
X1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzFFdgogX19aTjdXZWJDb3JlMTRDbGllbnRSZWN0
TGlzdEQxRXYKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxMGNvbW1pdERhdGFFUEtjbQor
X19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlcjEyZGF0YVJlY2VpdmVkRVBOU18xNENhY2hlZFJl
c291cmNlRVBLY2kKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxM2F0dGFjaFRvRnJhbWVF
dgorX19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE0bm90aWZ5RmluaXNoZWRFUE5TXzE0Q2Fj
aGVkUmVzb3VyY2VFCiBfX1pON1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTVkZXRhY2hGcm9tRnJh
bWVFdgorX19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE2cmVkaXJlY3RSZWNlaXZlZEVQTlNf
MTRDYWNoZWRSZXNvdXJjZUVSTlNfMTVSZXNvdXJjZVJlcXVlc3RFUktOU18xNlJlc291cmNlUmVz
cG9uc2VFCitfX1pON1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTZyZXNwb25zZVJlY2VpdmVkRVBO
U18xNENhY2hlZFJlc291cmNlRVJLTlNfMTZSZXNvdXJjZVJlc3BvbnNlRQogX19aTjdXZWJDb3Jl
MTREb2N1bWVudExvYWRlcjE4YWRkQXJjaGl2ZVJlc291cmNlRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzE1QXJjaGl2ZVJlc291cmNlRUVFCiBfX1pON1dlYkNvcmUxNFJlc291cmNlTG9hZGVyMzJkaWRD
YW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUVSS05TXzIzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VFCiBfX1pON1dlYkNvcmUxNGNvb2tpZXNFbmFibGVkRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNl
c3Npb25FUktOU180S1VSTEVTNV8KQEAgLTEyNjQsMTAgKzEyNjgsMTAgQEAKIF9fWk5LN1dlYkNv
cmUxNERvY3VtZW50TG9hZGVyMTZtYWluUmVzb3VyY2VEYXRhRXYKIF9fWk5LN1dlYkNvcmUxNERv
Y3VtZW50TG9hZGVyMTdwYXJzZWRBcmNoaXZlRGF0YUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVu
dExvYWRlcjE3cmVwb3J0TWVtb3J5VXNhZ2VFUE4zV1RGMTZNZW1vcnlPYmplY3RJbmZvRQorX19a
Tks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxOG1haW5SZXNvdXJjZUxvYWRlckV2CiBfX1pOSzdX
ZWJDb3JlMTREb2N1bWVudExvYWRlcjE5aXNMb2FkaW5nSW5BUElTZW5zZUV2CiBfX1pOSzdXZWJD
b3JlMTREb2N1bWVudExvYWRlcjE5b3JpZ2luYWxSZXF1ZXN0Q29weUV2CiBfX1pOSzdXZWJDb3Jl
MTREb2N1bWVudExvYWRlcjIxYXJjaGl2ZVJlc291cmNlRm9yVVJMRVJLTlNfNEtVUkxFCi1fX1pO
SzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjIxaXNMb2FkaW5nTWFpblJlc291cmNlRXYKIF9fWk5L
N1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMjh1cmxGb3JIaXN0b3J5UmVmbGVjdHNGYWlsdXJlRXYK
IF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyM3VybEV2CiBfX1pOSzdXZWJDb3JlMTREb2N1
bWVudE1hcmtlcjExZGVzY3JpcHRpb25FdgpAQCAtMTM0MSw3ICsxMzQ1LDYgQEAKIF9fWk5LN1dl
YkNvcmUxN1JlZ3VsYXJFeHByZXNzaW9uNW1hdGNoRVJLTjNXVEY2U3RyaW5nRWlQaQogX19aTks3
V2ViQ29yZTE3UmVndWxhckV4cHJlc3Npb245c2VhcmNoUmV2RVJLTjNXVEY2U3RyaW5nRQogX19a
Tks3V2ViQ29yZTE3UmVzb3VyY2VFcnJvckJhc2U4bGF6eUluaXRFdgotX19aTks3V2ViQ29yZTE4
TWFpblJlc291cmNlTG9hZGVyNmxvYWRlckV2CiBfX1pOSzdXZWJDb3JlMThQbGF0Zm9ybVBhc3Rl
Ym9hcmQxMWNoYW5nZUNvdW50RXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIy
NG51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0VQTlNfOERvY3VtZW50RQogX19aTks3V2ViQ29yZTE5
SW5zcGVjdG9yQ29udHJvbGxlcjEyZ2V0SGlnaGxpZ2h0RVBOU185SGlnaGxpZ2h0RQpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZp
c2lvbiAxNDI3NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot77u/PD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0
Zi04Ij8+CiA8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4w
IiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8y
MDAzIj4KICAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KICAgICA8
UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgpAQCAtMjA4Miw3ICsy
MDgyLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxJbWFnZUxvYWRlci5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcTGlua0xvYWRlci5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcTG9hZGVyU3RyYXRlZ3kuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXE1haW5SZXNvdXJjZUxvYWRl
ci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcTWl4ZWRDb250ZW50
Q2hlY2tlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcTmF2aWdh
dGlvbkFjdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcTmF2
aWdhdGlvblNjaGVkdWxlci5jcHAiIC8+CkBAIC02NjExLDcgKzY2MTAsNiBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXExpbmtMb2FkZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGxvYWRlclxMaW5rTG9hZGVyQ2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxsb2FkZXJcTG9hZGVyU3RyYXRlZ3kuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGxvYWRlclxNYWluUmVzb3VyY2VMb2FkZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxNaXhlZENvbnRlbnRDaGVja2VyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcTmF2aWdhdGlvbkFjdGlvbi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXE5hdmlnYXRpb25TY2hlZHVsZXIuaCIgLz4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVy
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE0Mjc1NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMSw0
ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgVG9vbHNWZXJzaW9u
PSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1
aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwPgogICAgIDxGaWx0ZXIgSW5jbHVkZT0iRGVyaXZlZFNv
dXJjZXMiPgpAQCAtMjI2NSw5ICsyMjY1LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGxvYWRlclxMb2FkZXJTdHJhdGVneS5jcHAiPgogICAgICAgPEZpbHRlcj5sb2FkZXI8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxN
YWluUmVzb3VyY2VMb2FkZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+bG9hZGVyPC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJcTWl4ZWRD
b250ZW50Q2hlY2tlci5jcHAiPgogICAgICAgPEZpbHRlcj5sb2FkZXI8L0ZpbHRlcj4KICAgICA8
L0NsQ29tcGlsZT4KQEAgLTg5OTcsOSArODk5NCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxsb2FkZXJcTG9hZGVyU3RyYXRlZ3kuaCI+CiAgICAgICA8RmlsdGVyPmxvYWRlcjwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVy
XE1haW5SZXNvdXJjZUxvYWRlci5oIj4KLSAgICAgIDxGaWx0ZXI+bG9hZGVyPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcTWl4ZWRD
b250ZW50Q2hlY2tlci5oIj4KICAgICAgIDxGaWx0ZXI+bG9hZGVyPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDI3NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4MDksNyAr
MTgwOSw2IEBACiAJCTY1NkQzNzNDMEFEQkE1REUwMEE0NTU0RCAvKiBGcmFtZUxvYWRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2RDM3MjQwQURC
QTVERTAwQTQ1NTREIC8qIEZyYW1lTG9hZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU2RDM3M0UwQURCQTVERTAwQTQ1NTREIC8qIEZyYW1l
TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NTZEMzcyNjBBREJBNURFMDBBNDU1NEQgLyogRnJhbWVMb2FkZXJDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTZEMzczRjBB
REJBNURFMDBBNDU1NEQgLyogUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQzNzI3MEFEQkE1REUwMEE0NTU0RCAvKiBSZXNv
dXJjZUxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTY1NkQzNzQxMEFEQkE1REUwMEE0NTU0RCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQzNzI5MEFE
QkE1REUwMEE0NTU0RCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTZEMzc0MzBBREJBNURFMDBBNDU1NEQg
LyogTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQzNzJCMEFEQkE1REUwMEE0NTU0RCAvKiBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTY1NkQzNzQ4MEFEQkE1REUwMEE0NTU0RCAvKiBTdWJyZXNvdXJjZUxv
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2
RDM3MzAwQURCQTVERTAwQTQ1NTREIC8qIFN1YnJlc291cmNlTG9hZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU3MURDQzgxMzg1RTZBNDAw
NzAyREQwIC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3RURBMDcxMzg1Q0I5NzAwNEUwNjQ1IC8qIE1lbW9y
eVByZXNzdXJlSGFuZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0zMzkzLDcgKzMzOTIsNiBAQAogCQk5M0QzQzE3RDBGOTdBQTc2MDA1M0Mw
MTMgLyogRE9NSFRNTENhbnZhc0VsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRDNDMTU4MEY5N0E5RDcwMDUzQzAx
MyAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5oICovOyB9OwogCQk5M0Q5RDUzQzBEQTI3RTE4MDA3
NzIxNkMgLyogUmFuZ2VCb3VuZGFyeVBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Q5RDUzQjBEQTI3RTE4MDA3NzIxNkMgLyogUmFuZ2VCb3Vu
ZGFyeVBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOTNFMjI3RTAwQUY1ODlBRDAwRDQ4MzI0IC8qIERvY3VtZW50TG9hZGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTIyN0RCMEFGNTg5
QUQwMEQ0ODMyNCAvKiBEb2N1bWVudExvYWRlci5jcHAgKi87IH07Ci0JCTkzRTIyN0UxMEFGNTg5
QUQwMEQ0ODMyNCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3REMwQUY1ODlBRDAwRDQ4MzI0IC8qIE1h
aW5SZXNvdXJjZUxvYWRlci5jcHAgKi87IH07CiAJCTkzRTIyN0UzMEFGNTg5QUQwMEQ0ODMyNCAv
KiBSZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0UyMjdERTBBRjU4OUFEMDBENDgzMjQgLyogUmVzb3VyY2VMb2FkZXIuY3Bw
ICovOyB9OwogCQk5M0UyMjdFNDBBRjU4OUFEMDBENDgzMjQgLyogU3VicmVzb3VyY2VMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3
REYwQUY1ODlBRDAwRDQ4MzI0IC8qIFN1YnJlc291cmNlTG9hZGVyLmNwcCAqLzsgfTsKIAkJOTNF
MjQxRkYwQjJCNEU0MDAwQzczMkExIC8qIEhUTUxGcmFtZU93bmVyRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjQxRkUwQjJCNEU0MDAw
QzczMkExIC8qIEhUTUxGcmFtZU93bmVyRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjQzLDcgKzkyNDEsNiBAQAogCQk2NTZEMzcy
NDBBREJBNURFMDBBNDU1NEQgLyogRnJhbWVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZyYW1lTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTY1NkQzNzI2MEFEQkE1REUwMEE0NTU0RCAvKiBGcmFtZUxvYWRlckNsaWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVMb2FkZXJDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2RDM3MjcwQURCQTVERTAwQTQ1NTREIC8qIFJlc291cmNl
TG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NTZEMzcyOTBBREJBNURFMDBBNDU1
NEQgLyogTWFpblJlc291cmNlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWluUmVzb3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU2RDM3MkIwQURCQTVERTAwQTQ1NTREIC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTZEMzczMDBBREJBNURFMDBB
NDU1NEQgLyogU3VicmVzb3VyY2VMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN1YnJlc291cmNlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTY1N0VEQTA2MTM4NUNCOTcwMDRFMDY0NSAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwODMzLDcgKzEwODMwLDYgQEAK
IAkJOTNEM0MxNTgwRjk3QTlENzAwNTNDMDEzIC8qIERPTUhUTUxDYW52YXNFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUhUTUxDYW52YXNFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDlENTNCMERBMjdFMTgwMDc3MjE2QyAvKiBS
YW5nZUJvdW5kYXJ5UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFu
Z2VCb3VuZGFyeVBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRTIyN0RC
MEFGNTg5QUQwMEQ0ODMyNCAvKiBEb2N1bWVudExvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudExvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTkzRTIyN0RDMEFGNTg5QUQwMEQ0ODMyNCAvKiBNYWluUmVzb3VyY2VMb2Fk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFpblJlc291cmNl
TG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMjI3REQwQUY1ODlB
RDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMjI3REUwQUY1ODlBRDAwRDQ4MzI0IC8q
IFJlc291cmNlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMjI3
REYwQUY1ODlBRDAwRDQ4MzI0IC8qIFN1YnJlc291cmNlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN1YnJlc291cmNlTG9hZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMzM3LDggKzIxMzMzLDYgQEAKIAkJCQk5ODQyNjRFRjEy
RDUyODBBMDAwRDg4QTQgLyogTGlua0xvYWRlckNsaWVudC5oICovLAogCQkJCTUxQUJGNjRDMTYz
OTJFMjgwMDEzMkE3QSAvKiBMb2FkZXJTdHJhdGVneS5jcHAgKi8sCiAJCQkJNTFFNjgyMEYxNjM4
NzMwMjAwM0JCRjNDIC8qIExvYWRlclN0cmF0ZWd5LmggKi8sCi0JCQkJOTNFMjI3REMwQUY1ODlB
RDAwRDQ4MzI0IC8qIE1haW5SZXNvdXJjZUxvYWRlci5jcHAgKi8sCi0JCQkJNjU2RDM3MjkwQURC
QTVERTAwQTQ1NTREIC8qIE1haW5SZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTUyRjEwODYyMTYy
QjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCAqLywKIAkJCQk1MkYxMDg2
MzE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oICovLAogCQkJCTkzQ0NG
MDVGMEFGNkNBNzYwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmNwcCAqLywKQEAgLTI1MzA4
LDcgKzI1MzAyLDYgQEAKIAkJCQk5MzUyMDdCRTA5QkQ0MTBBMDBGMjAzOEQgLyogTG9jYWxpemVk
U3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFMUM0MUIwRDk4Mjk4MDAwM0IwMkYyIC8q
IExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODIzOUUwMTA5QjNDRjhBMDBCNjA2NDEg
LyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjU2RDM3NDEwQURCQTVERTAwQTQ1NTRE
IC8qIE1haW5SZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4RjZCQzYwREI1
NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMw
OURGODA5OUU2NDkyMDA1NkU1ODEgLyogbWFya3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzI4
QzMxNDEyNjhFNDM5MDA0MUU4OUIgLyogTWFya3VwQWNjdW11bGF0b3IuaCBpbiBIZWFkZXJzICov
LApAQCAtMjg3MDYsNyArMjg2OTksNiBAQAogCQkJCUJDRTFDNDFDMEQ5ODI5ODEwMDNCMDJGMiAv
KiBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODIzOUUwMDA5QjNDRjhBMDBCNjA2
NDEgLyogTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDAyNjQ1RTBBRkRDMTlCMDA1
OTE5RTIgLyogTG9nZ2luZ01hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzRTIyN0UxMEFGNTg5
QUQwMEQ0ODMyNCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUE4RjZCQzUwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMzA5REY3MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTcyOEMzMTMxMjY4RTQzOTAwNDFFODlCIC8qIE1hcmt1cEFjY3VtdWxhdG9y
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDE0Mjc1NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzkxNSwxNCAr
Mjc5MTUsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcTWFpblJlc291cmNlTG9hZGVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXE1haW5SZXNvdXJjZUxvYWRlci5o
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2Fk
ZXJcTWl4ZWRDb250ZW50Q2hlY2tlci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgo=
</data>
<flag name="commit-queue"
          id="208236"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193949</attachid>
            <date>2013-03-19 16:27:34 -0700</date>
            <delta_ts>2013-03-19 21:24:01 -0700</delta_ts>
            <desc>Finish the merger</desc>
            <filename>dl_mrl.txt</filename>
            <type>text/plain</type>
            <size>46303</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agkocmV2aXNpb24gMTQ2MjY3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLe+7vzw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNp
b249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21z
YnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+
CiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnU3VmZml4fFdpbjMyIj4K
QEAgLTM5OTMsNyArMzk5Myw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsb2FkZXJc
SW1hZ2VMb2FkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXExp
bmtMb2FkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVyXExvYWRl
clN0cmF0ZWd5LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxNYWlu
UmVzb3VyY2VMb2FkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbG9hZGVy
XE1peGVkQ29udGVudENoZWNrZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
bG9hZGVyXE5hdmlnYXRpb25BY3Rpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cbG9hZGVyXE5hdmlnYXRpb25TY2hlZHVsZXIuY3BwIiAvPgpAQCAtMTE0OTQsNyArMTE0OTMs
NiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXExpbmtMb2FkZXIuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxMaW5rTG9hZGVyQ2xpZW50LmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcTG9hZGVyU3RyYXRlZ3kuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxNYWluUmVzb3VyY2VMb2FkZXIuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxvYWRlclxNaXhlZENvbnRlbnRDaGVja2Vy
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcTmF2aWdhdGlvbkFjdGlv
bi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbG9hZGVyXE5hdmlnYXRpb25TY2hl
ZHVsZXIuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE0NjI2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
InV0Zi04Ij8+Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2pl
Y3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29t
L2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwPgogICAgIDxGaWx0ZXIgSW5j
bHVkZT0iRGVyaXZlZFNvdXJjZXMiPgpAQCAtMjI3NCw5ICsyMjc0LDYgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGxvYWRlclxMb2FkZXJTdHJhdGVneS5jcHAiPgogICAgICAgPEZpbHRl
cj5sb2FkZXI8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGxvYWRlclxNYWluUmVzb3VyY2VMb2FkZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+bG9h
ZGVyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
Llxsb2FkZXJcTWl4ZWRDb250ZW50Q2hlY2tlci5jcHAiPgogICAgICAgPEZpbHRlcj5sb2FkZXI8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTkwNjksOSArOTA2Niw2IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxsb2FkZXJcTG9hZGVyU3RyYXRlZ3kuaCI+CiAgICAgICA8Rmls
dGVyPmxvYWRlcjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cbG9hZGVyXE1haW5SZXNvdXJjZUxvYWRlci5oIj4KLSAgICAgIDxGaWx0ZXI+bG9h
ZGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llxsb2FkZXJcTWl4ZWRDb250ZW50Q2hlY2tlci5oIj4KICAgICAgIDxGaWx0ZXI+bG9hZGVyPC9G
aWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDYyNjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MjYsNyArMTgyNiw2IEBACiAJCTY1NkQzNzNDMEFEQkE1REUwMEE0NTU0RCAvKiBG
cmFtZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjU2RDM3MjQwQURCQTVERTAwQTQ1NTREIC8qIEZyYW1lTG9hZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU2RDM3M0UwQURCQTVERTAw
QTQ1NTREIC8qIEZyYW1lTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTZEMzcyNjBBREJBNURFMDBBNDU1NEQgLyogRnJhbWVMb2Fk
ZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2NTZEMzczRjBBREJBNURFMDBBNDU1NEQgLyogUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQzNzI3MEFEQkE1REUw
MEE0NTU0RCAvKiBSZXNvdXJjZUxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTY1NkQzNzQxMEFEQkE1REUwMEE0NTU0RCAvKiBNYWluUmVz
b3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDY1NkQzNzI5MEFEQkE1REUwMEE0NTU0RCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTZEMzc0MzBB
REJBNURFMDBBNDU1NEQgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQzNzJCMEFEQkE1REUwMEE0
NTU0RCAvKiBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NkQzNzQ4MEFEQkE1REUwMEE0NTU0RCAv
KiBTdWJyZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU2RDM3MzAwQURCQTVERTAwQTQ1NTREIC8qIFN1YnJlc291cmNlTG9hZGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU3
MURDQzgxMzg1RTZBNDAwNzAyREQwIC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3RURBMDcxMzg1Q0I5NzAw
NEUwNjQ1IC8qIE1lbW9yeVByZXNzdXJlSGFuZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNDA5LDcgKzM0MDgsNiBAQAogCQk5M0QzQzE3
RDBGOTdBQTc2MDA1M0MwMTMgLyogRE9NSFRNTENhbnZhc0VsZW1lbnQuaCBpbiBDb3B5IEdlbmVy
YXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRDNDMTU4
MEY5N0E5RDcwMDUzQzAxMyAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5oICovOyB9OwogCQk5M0Q5
RDUzQzBEQTI3RTE4MDA3NzIxNkMgLyogUmFuZ2VCb3VuZGFyeVBvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Q5RDUzQjBEQTI3RTE4MDA3NzIx
NkMgLyogUmFuZ2VCb3VuZGFyeVBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNFMjI3RTAwQUY1ODlBRDAwRDQ4MzI0IC8qIERvY3VtZW50
TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzRTIyN0RCMEFGNTg5QUQwMEQ0ODMyNCAvKiBEb2N1bWVudExvYWRlci5jcHAgKi87IH07Ci0J
CTkzRTIyN0UxMEFGNTg5QUQwMEQ0ODMyNCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3REMwQUY1ODlB
RDAwRDQ4MzI0IC8qIE1haW5SZXNvdXJjZUxvYWRlci5jcHAgKi87IH07CiAJCTkzRTIyN0UzMEFG
NTg5QUQwMEQ0ODMyNCAvKiBSZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0UyMjdERTBBRjU4OUFEMDBENDgzMjQgLyogUmVz
b3VyY2VMb2FkZXIuY3BwICovOyB9OwogCQk5M0UyMjdFNDBBRjU4OUFEMDBENDgzMjQgLyogU3Vi
cmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNFMjI3REYwQUY1ODlBRDAwRDQ4MzI0IC8qIFN1YnJlc291cmNlTG9hZGVyLmNw
cCAqLzsgfTsKIAkJOTNFMjQxRkYwQjJCNEU0MDAwQzczMkExIC8qIEhUTUxGcmFtZU93bmVyRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNF
MjQxRkUwQjJCNEU0MDAwQzczMkExIC8qIEhUTUxGcmFtZU93bmVyRWxlbWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MzE5LDcgKzkzMTcs
NiBAQAogCQk2NTZEMzcyNDBBREJBNURFMDBBNDU1NEQgLyogRnJhbWVMb2FkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY1NkQzNzI2MEFEQkE1REUwMEE0NTU0RCAvKiBGcmFtZUxvYWRlckNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVMb2FkZXJDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2RDM3MjcwQURCQTVERTAwQTQ1
NTREIC8qIFJlc291cmNlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZXNvdXJjZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NTZEMzcy
OTBBREJBNURFMDBBNDU1NEQgLyogTWFpblJlc291cmNlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWluUmVzb3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNjU2RDM3MkIwQURCQTVERTAwQTQ1NTREIC8qIE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTZE
MzczMDBBREJBNURFMDBBNDU1NEQgLyogU3VicmVzb3VyY2VMb2FkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YnJlc291cmNlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY1N0VEQTA2MTM4NUNCOTcwMDRFMDY0NSAvKiBNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTI5
LDcgKzEwOTI2LDYgQEAKIAkJOTNEM0MxNTgwRjk3QTlENzAwNTNDMDEzIC8qIERPTUhUTUxDYW52
YXNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUhUTUxDYW52
YXNFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDlENTNCMERBMjdF
MTgwMDc3MjE2QyAvKiBSYW5nZUJvdW5kYXJ5UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmFuZ2VCb3VuZGFyeVBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzRTIyN0RCMEFGNTg5QUQwMEQ0ODMyNCAvKiBEb2N1bWVudExvYWRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudExvYWRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzRTIyN0RDMEFGNTg5QUQwMEQ0ODMyNCAvKiBN
YWluUmVzb3VyY2VMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWFpblJlc291cmNlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNFMjI3REQwQUY1ODlBRDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMjI3REUwQUY1
ODlBRDAwRDQ4MzI0IC8qIFJlc291cmNlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNFMjI3REYwQUY1ODlBRDAwRDQ4MzI0IC8qIFN1YnJlc291cmNlTG9hZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN1YnJlc291cmNlTG9hZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTUwLDggKzIxNTQ2LDYgQEAK
IAkJCQk5ODQyNjRFRjEyRDUyODBBMDAwRDg4QTQgLyogTGlua0xvYWRlckNsaWVudC5oICovLAog
CQkJCTUxQUJGNjRDMTYzOTJFMjgwMDEzMkE3QSAvKiBMb2FkZXJTdHJhdGVneS5jcHAgKi8sCiAJ
CQkJNTFFNjgyMEYxNjM4NzMwMjAwM0JCRjNDIC8qIExvYWRlclN0cmF0ZWd5LmggKi8sCi0JCQkJ
OTNFMjI3REMwQUY1ODlBRDAwRDQ4MzI0IC8qIE1haW5SZXNvdXJjZUxvYWRlci5jcHAgKi8sCi0J
CQkJNjU2RDM3MjkwQURCQTVERTAwQTQ1NTREIC8qIE1haW5SZXNvdXJjZUxvYWRlci5oICovLAog
CQkJCTUyRjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCAq
LywKIAkJCQk1MkYxMDg2MzE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5o
ICovLAogCQkJCTkzQ0NGMDVGMEFGNkNBNzYwMDAxOEU4OSAvKiBOYXZpZ2F0aW9uQWN0aW9uLmNw
cCAqLywKQEAgLTI1NTU5LDcgKzI1NTUzLDYgQEAKIAkJCQk5MzUyMDdCRTA5QkQ0MTBBMDBGMjAz
OEQgLyogTG9jYWxpemVkU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFMUM0MUIwRDk4
Mjk4MDAwM0IwMkYyIC8qIExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODIzOUUwMTA5
QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjU2RDM3NDEw
QURCQTVERTAwQTQ1NTREIC8qIE1haW5SZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTE4NzA1NjMxNkU1NEEwRDAwNTg1RTk3IC8qIE1haW5UaHJlYWRUYXNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQThGNkJDNjBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMzA5REY4MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAuaCBp
biBIZWFkZXJzICovLApAQCAtMjg5ODEsNyArMjg5NzQsNiBAQAogCQkJCUJDRTFDNDFDMEQ5ODI5
ODEwMDNCMDJGMiAvKiBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODIzOUUwMDA5
QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDAyNjQ1
RTBBRkRDMTlCMDA1OTE5RTIgLyogTG9nZ2luZ01hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkz
RTIyN0UxMEFGNTg5QUQwMEQ0ODMyNCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE4RjZCQzUwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REY3MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcyOEMzMTMxMjY4RTQzOTAwNDFFODlCIC8qIE1hcmt1
cEFjY3VtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gMTQ2MjY3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDgzLDggKzIwODMsNiBAQAogICAgICAgICAgICAgJ2xvYWRlci9MaW5rTG9hZGVy
Q2xpZW50LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9Mb2FkZXJTdHJhdGVneS5jcHAnLAogICAg
ICAgICAgICAgJ2xvYWRlci9Mb2FkZXJTdHJhdGVneS5oJywKLSAgICAgICAgICAgICdsb2FkZXIv
TWFpblJlc291cmNlTG9hZGVyLmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL01haW5SZXNvdXJj
ZUxvYWRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvTWl4ZWRDb250ZW50Q2hlY2tlci5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9NaXhlZENvbnRlbnRDaGVja2VyLmgnLAogICAgICAgICAg
ICAgJ2xvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHJldmlzaW9uIDE0NjI2NykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQwNzQsOCArNDA3NCw2IEBACiAJU291cmNl
L1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXJDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0xvYWRlclN0cmF0ZWd5LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL0xvYWRlclN0
cmF0ZWd5LmggXAotCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9NaXhlZENvbnRlbnRDaGVja2VyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvbG9hZGVyL01peGVkQ29udGVudENoZWNrZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVy
L05hdmlnYXRpb25BY3Rpb24uY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAxNDYyNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTY4NSw3ICsxNjg1LDYgQEAKICAgICBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCiAgICAg
bG9hZGVyL0xpbmtMb2FkZXIuY3BwCiAgICAgbG9hZGVyL0xvYWRlclN0cmF0ZWd5LmNwcAotICAg
IGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCiAgICAgbG9hZGVyL01peGVkQ29udGVudENo
ZWNrZXIuY3BwCiAgICAgbG9hZGVyL05hdmlnYXRpb25BY3Rpb24uY3BwCiAgICAgbG9hZGVyL05l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ2
Mjc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNTMgQEAKKzIwMTMtMDMtMTkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4K
KworICAgICAgICBNZXJnZSBNYWluUmVzb3VyY2VMb2FkZXIgaW50byBEb2N1bWVudExvYWRlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTY5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCByZWZhY3RvciBvbmx5LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ou
ZmlsdGVyczoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyOjpEb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dExvYWRlcjo6bWFpblJlc291cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyOjp+RG9jdW1lbnRMb2FkZXIpOiBNb3ZlIG1haW4gcmVzb3VyY2UgY2xlYXJpbmcgZnJv
bQorICAgICAgICAgICAgfk1haW5SZXNvdXJjZUxvYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyOjptYWluUmVzb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRl
cjo6bm90aWZ5RmluaXNoZWQpOiBNb3ZlZCBmcm9tIE1haW5SZXNvdXJjZUxvYWRlcjo6bm90aWZ5
RmluaXNoZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyOjpmaW5pc2hlZExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXI6OmhhbmRsZVN1YnN0aXR1dGVEYXRhTG9hZE5vdyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudExvYWRlcjo6cmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dExvYWRlcjo6Y29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI6OnJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudExvYWRlcjo6ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyOjpjbGVhck1haW5SZXNvdXJjZUxvYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudExvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudExvYWRlcjo6c2V0TWFpblJlc291cmNlRGF0YUJ1ZmZlcmluZ1BvbGljeSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6YWRkU3VicmVzb3VyY2VMb2FkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6Om1heWJlTG9hZEVtcHR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzdGFydExvYWRpbmdNYWluUmVzb3VyY2UpOiBEb24n
dCBrZWVwIHNlcGFyYXRlIGNoZWNrcworICAgICAgICAgICAgIGZvciBub3JtYWwgYW5kIGVtcHR5
IGxvYWRzLCBqdXN0IHVzZSBhIHNpbmdsZSBib29sZWFuLgorICAgICAgICAqIGxvYWRlci9Eb2N1
bWVudExvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmlzTG9hZGlu
Z01haW5SZXNvdXJjZSk6CisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIGxvYWRlci9tYWMvRG9jdW1lbnRMb2FkZXJNYWMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNjaGVkdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyOjp1bnNjaGVkdWxlKToKKwogMjAxMy0wMy0xOSAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBbm90aGVyIGJ1aWxkIGZpeCBhZnRlciByMTQ2
MjIwLgpJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNDYyNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC04ODQsNyArODg0LDYgQEAKICAgICBsb2Fk
ZXIvSW1hZ2VMb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvTGlua0xvYWRlci5jcHAgXAogICAgIGxv
YWRlci9Mb2FkZXJTdHJhdGVneS5jcHAgXAotICAgIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIu
Y3BwIFwKICAgICBsb2FkZXIvTWl4ZWRDb250ZW50Q2hlY2tlci5jcHAgXAogICAgIGxvYWRlci9O
YXZpZ2F0aW9uQWN0aW9uLmNwcCBcCiAgICAgbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyLmNwcCBcCkBAIC0yMDgyLDcgKzIwODEsNiBAQAogICAgIGxvYWRlci9MaW5rTG9hZGVyLmgg
XAogICAgIGxvYWRlci9MaW5rTG9hZGVyQ2xpZW50LmggXAogICAgIGxvYWRlci9Mb2FkZXJTdHJh
dGVneS5oIFwKLSAgICBsb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmggXAogICAgIGxvYWRlci9N
aXhlZENvbnRlbnRDaGVja2VyLmggXAogICAgIGxvYWRlci9OYXZpZ2F0aW9uQWN0aW9uLmggXAog
ICAgIGxvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIFwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCShyZXZpc2lvbiAxNDYyNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjc4LDggKzI3OCwxMiBAQAogX19aTjdXZWJDb3JlMTRD
bGllbnRSZWN0TGlzdEMxRXYKIF9fWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3REMUV2CiBfX1pO
N1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTBjb21taXREYXRhRVBLY20KK19fWk43V2ViQ29yZTE0
RG9jdW1lbnRMb2FkZXIxMmRhdGFSZWNlaXZlZEVQTlNfMTRDYWNoZWRSZXNvdXJjZUVQS2NpCiBf
X1pON1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTNhdHRhY2hUb0ZyYW1lRXYKK19fWk43V2ViQ29y
ZTE0RG9jdW1lbnRMb2FkZXIxNG5vdGlmeUZpbmlzaGVkRVBOU18xNENhY2hlZFJlc291cmNlRQog
X19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE1ZGV0YWNoRnJvbUZyYW1lRXYKK19fWk43V2Vi
Q29yZTE0RG9jdW1lbnRMb2FkZXIxNnJlZGlyZWN0UmVjZWl2ZWRFUE5TXzE0Q2FjaGVkUmVzb3Vy
Y2VFUk5TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMTZSZXNvdXJjZVJlc3BvbnNlRQorX19aTjdX
ZWJDb3JlMTREb2N1bWVudExvYWRlcjE2cmVzcG9uc2VSZWNlaXZlZEVQTlNfMTRDYWNoZWRSZXNv
dXJjZUVSS05TXzE2UmVzb3VyY2VSZXNwb25zZUUKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2Fk
ZXIxOGFkZEFyY2hpdmVSZXNvdXJjZUVOM1dURjEwUGFzc1JlZlB0cklOU18xNUFyY2hpdmVSZXNv
dXJjZUVFRQogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjMyZGlkQ2FuY2VsQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VFUktOU18yM0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRQogX19aTjdXZWJD
b3JlMTRjb29raWVzRW5hYmxlZEVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfNEtV
UkxFUzVfCkBAIC0xMjkyLDcgKzEyOTYsNiBAQAogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2Fk
ZXIxOWlzTG9hZGluZ0luQVBJU2Vuc2VFdgogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIx
OW9yaWdpbmFsUmVxdWVzdENvcHlFdgogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIyMWFy
Y2hpdmVSZXNvdXJjZUZvclVSTEVSS05TXzRLVVJMRQotX19aTks3V2ViQ29yZTE0RG9jdW1lbnRM
b2FkZXIyMWlzTG9hZGluZ01haW5SZXNvdXJjZUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExv
YWRlcjI4dXJsRm9ySGlzdG9yeVJlZmxlY3RzRmFpbHVyZUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1
bWVudExvYWRlcjN1cmxFdgogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRNYXJrZXIxMWRlc2NyaXB0
aW9uRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCShyZXZpc2lvbiAxNDYyNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgwNzUsMTQgKzI4MDc1LDYgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXE1h
aW5SZXNvdXJjZUxvYWRlci5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxNYWluUmVzb3VyY2VMb2FkZXIuaCIKLQkJCQk+Ci0JCQk8
L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXE1peGVkQ29udGVu
dENoZWNrZXIuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lvbiAxNDYyNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAog
I2lmbmRlZiBEb2N1bWVudExvYWRlcl9oCiAjZGVmaW5lIERvY3VtZW50TG9hZGVyX2gKIAorI2lu
Y2x1ZGUgIkNhY2hlZFJhd1Jlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5k
bGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRUaW1pbmcuaCIKICNpbmNsdWRlICJEb2N1bWVu
dFdyaXRlci5oIgogI2luY2x1ZGUgIkljb25EYXRhYmFzZUJhc2UuaCIKQEAgLTY1LDcgKzY3LDYg
QEAKICAgICBjbGFzcyBGb3JtU3RhdGU7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgRnJh
bWVMb2FkZXI7Ci0gICAgY2xhc3MgTWFpblJlc291cmNlTG9hZGVyOwogICAgIGNsYXNzIFBhZ2U7
CiAgICAgY2xhc3MgUmVzb3VyY2VCdWZmZXI7CiAgICAgY2xhc3MgUmVzb3VyY2VMb2FkZXI7CkBA
IC03NSw3ICs3Niw4IEBACiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxSZXNvdXJjZUxvYWRl
cj4gPiBSZXNvdXJjZUxvYWRlclNldDsKICAgICB0eXBlZGVmIFZlY3RvcjxSZXNvdXJjZVJlc3Bv
bnNlPiBSZXNwb25zZVZlY3RvcjsKIAotICAgIGNsYXNzIERvY3VtZW50TG9hZGVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8RG9jdW1lbnRMb2FkZXI+IHsKKyAgICBjbGFzcyBEb2N1bWVudExvYWRlciA6
IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50TG9hZGVyPiwgcHJpdmF0ZSBDYWNoZWRSYXdSZXNv
dXJjZUNsaWVudCB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1Ymxp
YzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBkYXRhKQog
ICAgICAgICB7CkBAIC0yMTQsOCArMjE2LDggQEAKICAgICAgICAgdm9pZCBjb250aW51ZUljb25M
b2FkV2l0aERlY2lzaW9uKEljb25Mb2FkRGVjaXNpb24pOwogICAgICAgICB2b2lkIGdldEljb25M
b2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYpOwogICAgICAgICB2b2lkIGdldElj
b25EYXRhRm9ySWNvblVSTChjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wg
aXNMb2FkaW5nTWFpblJlc291cmNlKCkgY29uc3Q7CisKKyAgICAgICAgYm9vbCBpc0xvYWRpbmdN
YWluUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xvYWRpbmdNYWluUmVzb3VyY2U7IH0KICAg
ICAgICAgYm9vbCBpc0xvYWRpbmdNdWx0aXBhcnRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9p
c0xvYWRpbmdNdWx0aXBhcnRDb250ZW50OyB9CiAKICAgICAgICAgdm9pZCBzdG9wTG9hZGluZ1Bs
dWdJbnMoKTsKQEAgLTI2Miw5ICsyNjQsNiBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogICAgICAgICB2b2lkIGNoZWNr
TG9hZENvbXBsZXRlKCk7CiAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHByaXZh
dGUgb25jZSBEb2N1bWVudExvYWRlciBhbmQgTWFpblJlc291cmNlTG9hZGVyIGFyZSBtZXJnZWQu
Ci0gICAgICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKLQogICAgIHByb3RlY3RlZDoKICAgICAgICAgRG9jdW1lbnRMb2Fk
ZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmKTsKIApAQCAt
MjgxLDYgKzI4MCwxMiBAQAogICAgICAgICB2b2lkIGNsZWFyQXJjaGl2ZVJlc291cmNlcygpOwog
I2VuZGlmCiAKKyAgICAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3RS
ZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc3BvbnNlUmVjZWl2
ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgT1ZFUlJJREU7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikgT1ZFUlJJREU7CisKICAgICAgICAgYm9vbCBt
YXliZUxvYWRFbXB0eSgpOwogCiAgICAgICAgIGJvb2wgaXNNdWx0aXBhcnRSZXBsYWNpbmdMb2Fk
KCkgY29uc3Q7CkBAIC0zMTAsMTIgKzMxNSwxMCBAQAogICAgICAgICBGcmFtZSogbV9mcmFtZTsK
ICAgICAgICAgUmVmUHRyPENhY2hlZFJlc291cmNlTG9hZGVyPiBtX2NhY2hlZFJlc291cmNlTG9h
ZGVyOwogCi0gICAgICAgIFJlZlB0cjxNYWluUmVzb3VyY2VMb2FkZXI+IG1fbWFpblJlc291cmNl
TG9hZGVyOworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4g
bV9tYWluUmVzb3VyY2U7CiAgICAgICAgIFJlc291cmNlTG9hZGVyU2V0IG1fc3VicmVzb3VyY2VM
b2FkZXJzOwogICAgICAgICBSZXNvdXJjZUxvYWRlclNldCBtX211bHRpcGFydFN1YnJlc291cmNl
TG9hZGVyczsKICAgICAgICAgUmVzb3VyY2VMb2FkZXJTZXQgbV9wbHVnSW5TdHJlYW1Mb2FkZXJz
OwotCi0gICAgICAgIFJlZlB0cjxSZXNvdXJjZUJ1ZmZlcj4gbV9tYWluUmVzb3VyY2VEYXRhOwog
ICAgICAgICAKICAgICAgICAgbXV0YWJsZSBEb2N1bWVudFdyaXRlciBtX3dyaXRlcjsKIApAQCAt
MzQ1LDcgKzM0OCw2IEBACiAgICAgICAgIGJvb2wgbV9nb3RGaXJzdEJ5dGU7CiAgICAgICAgIGJv
b2wgbV9pc0NsaWVudFJlZGlyZWN0OwogICAgICAgICBib29sIG1faXNMb2FkaW5nTXVsdGlwYXJ0
Q29udGVudDsKLSAgICAgICAgYm9vbCBtX2xvYWRpbmdFbXB0eURvY3VtZW50OwogCiAgICAgICAg
IC8vIEZJWE1FOiBEb2N1bWVudDo6bV9wcm9jZXNzaW5nTG9hZEV2ZW50IGFuZCBEb2N1bWVudExv
YWRlcjo6bV93YXNPbmxvYWRIYW5kbGVkIGFyZSByb3VnaGx5IHRoZSBzYW1lCiAgICAgICAgIC8v
IGFuZCBzaG91bGQgYmUgbWVyZ2VkLgpAQCAtMzg1LDYgKzM4Nyw3IEBACiAgICAgICAgIFN0cmlu
ZyBtX2NsaWVudFJlZGlyZWN0U291cmNlRm9ySGlzdG9yeTsKICAgICAgICAgYm9vbCBtX2RpZENy
ZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeTsKIAorICAgICAgICBib29sIG1fbG9hZGluZ01haW5SZXNv
dXJjZTsKICAgICAgICAgRG9jdW1lbnRMb2FkVGltaW5nIG1fZG9jdW1lbnRMb2FkVGltaW5nOwog
CiAgICAgICAgIGRvdWJsZSBtX3RpbWVPZkxhc3REYXRhUmVjZWl2ZWQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTQ2MjY3
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ik1haW5SZXNvdXJjZUxvYWRlci5oIgotCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3Qu
aCIKLSNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDYWNoZWRS
YXdSZXNvdXJjZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiQ29uc29sZS5oIgotI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnRMb2FkVGltaW5nLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJG
ZWF0dXJlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJIVE1MRm9y
bUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgotI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCi0jaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgotI2luY2x1ZGUgIlJlc291cmNl
QnVmZmVyLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgotI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCi0jaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3VicmVzb3VyY2VM
b2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotI2lmIFBMQVRGT1JNKFFU
KQotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1NYWluUmVzb3VyY2VMb2FkZXI6Ok1haW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIpCi0gICAgOiBtX2RvY3VtZW50TG9hZGVyKGRvY3VtZW50TG9h
ZGVyKQotewotfQotCi1NYWluUmVzb3VyY2VMb2FkZXI6On5NYWluUmVzb3VyY2VMb2FkZXIoKQot
ewotICAgIGNsZWFyUmVzb3VyY2UoKTsKLX0KLQotUGFzc1JlZlB0cjxNYWluUmVzb3VyY2VMb2Fk
ZXI+IE1haW5SZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExv
YWRlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1haW5SZXNvdXJjZUxvYWRlcihkb2N1
bWVudExvYWRlcikpOwotfQotCi12b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6Y2xlYXJSZXNvdXJj
ZSgpCi17Ci0gICAgaWYgKG1fcmVzb3VyY2UpIHsKLSAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3Zl
Q2xpZW50KHRoaXMpOwotICAgICAgICBtX3Jlc291cmNlID0gMDsKLSAgICB9Ci19Ci0KLUZyYW1l
TG9hZGVyKiBNYWluUmVzb3VyY2VMb2FkZXI6OmZyYW1lTG9hZGVyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9kb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLX0KLQotY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiBNYWluUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3QoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3Jlc291cmNlID8gbV9yZXNvdXJjZS0+cmVzb3VyY2VSZXF1ZXN0KCkgOiBtX2luaXRp
YWxSZXF1ZXN0OwotfQotCi1QYXNzUmVmUHRyPFJlc291cmNlQnVmZmVyPiBNYWluUmVzb3VyY2VM
b2FkZXI6OnJlc291cmNlRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVzb3VyY2UpCi0gICAgICAgIHJl
dHVybiBtX3Jlc291cmNlLT5yZXNvdXJjZUJ1ZmZlcigpOwotICAgIHJldHVybiAwOwotfQotCi12
b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6cmVkaXJlY3RSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNv
dXJjZSA9PSBtX3Jlc291cmNlKTsKLSAgICBtX2RvY3VtZW50TG9hZGVyLT53aWxsU2VuZFJlcXVl
c3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Ci19Ci0KLXZvaWQgTWFpblJlc291cmNlTG9h
ZGVyOjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCBtX3Jlc291
cmNlID09IHJlc291cmNlKTsKLSAgICBtX2RvY3VtZW50TG9hZGVyLT5yZXNwb25zZVJlY2VpdmVk
KHIpOwotfQotCi12b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6ZGF0YVJlY2VpdmVkKENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBB
U1NFUlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX3Jlc291cmNlKTsKLSAgICBkb2N1
bWVudExvYWRlcigpLT5yZWNlaXZlZERhdGEoZGF0YSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBNYWlu
UmVzb3VyY2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkK
LXsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCBtX3Jlc291cmNlID09IHJlc291cmNlKTsK
LSAgICBBU1NFUlQobV9yZXNvdXJjZSk7Ci0gICAgaWYgKCFtX3Jlc291cmNlLT5lcnJvck9jY3Vy
cmVkKCkgJiYgIW1fcmVzb3VyY2UtPndhc0NhbmNlbGVkKCkpIHsKLSAgICAgICAgZG9jdW1lbnRM
b2FkZXIoKS0+ZmluaXNoZWRMb2FkaW5nKG1fcmVzb3VyY2UtPmxvYWRGaW5pc2hUaW1lKCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBmaXggdGhl
IGRlc2lnbiB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIGEgcGxhdGZvcm0gaWZkZWYgaGVyZQot
I2lmICFQTEFURk9STShDSFJPTUlVTSkKLSAgICBpZiAobV9kb2N1bWVudExvYWRlci0+cmVxdWVz
dCgpLmNhY2hlUG9saWN5KCkgPT0gUmV0dXJuQ2FjaGVEYXRhRG9udExvYWQgJiYgIW1fcmVzb3Vy
Y2UtPndhc0NhbmNlbGVkKCkpIHsKLSAgICAgICAgZnJhbWVMb2FkZXIoKS0+cmV0cnlBZnRlckZh
aWxlZENhY2hlT25seU1haW5SZXNvdXJjZUxvYWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgotICAgIG1fZG9jdW1lbnRMb2FkZXItPm1haW5SZWNlaXZlZEVycm9yKG1fcmVzb3Vy
Y2UtPnJlc291cmNlRXJyb3IoKSk7Ci19Ci0KLXZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpyZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAot
ewotICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNv
cmVNZW1vcnlUeXBlczo6TG9hZGVyKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3Jlc291cmNlLCAi
cmVzb3VyY2UiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2luaXRpYWxSZXF1ZXN0LCAiaW5pdGlh
bFJlcXVlc3QiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2RvY3VtZW50TG9hZGVyLCAiZG9jdW1l
bnRMb2FkZXIiKTsKLX0KLQotdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmxvYWQoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiBpbml0aWFsUmVxdWVzdCkKLXsKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVx
dWVzdChpbml0aWFsUmVxdWVzdCk7Ci0KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlc291cmNl
TG9hZGVyT3B0aW9ucywgbWFpblJlc291cmNlTG9hZE9wdGlvbnMsCi0gICAgICAgIChTZW5kQ2Fs
bGJhY2tzLCBTbmlmZkNvbnRlbnQsIEJ1ZmZlckRhdGEsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMs
IEFza0NsaWVudEZvckNyb3NzT3JpZ2luQ3JlZGVudGlhbHMsIFNraXBTZWN1cml0eUNoZWNrKSk7
Ci0gICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IGNhY2hlZFJlc291cmNlUmVxdWVzdChyZXF1ZXN0
LCBtYWluUmVzb3VyY2VMb2FkT3B0aW9ucyk7Ci0gICAgbV9yZXNvdXJjZSA9IGRvY3VtZW50TG9h
ZGVyKCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RNYWluUmVzb3VyY2UoY2FjaGVk
UmVzb3VyY2VSZXF1ZXN0KTsKLSAgICBpZiAoIW1fcmVzb3VyY2UpIHsKLSAgICAgICAgZG9jdW1l
bnRMb2FkZXIoKS0+c2V0UmVxdWVzdChSZXNvdXJjZVJlcXVlc3QoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9yZXNvdXJjZS0+YWRkQ2xpZW50KHRoaXMpOwotfQotCi12b2lkIE1h
aW5SZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKLXsKLSAgICBp
ZiAobG9hZGVyKCkpCi0gICAgICAgIGxvYWRlcigpLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7
Ci19Ci0KLWJvb2wgTWFpblJlc291cmNlTG9hZGVyOjpkZWZlcnNMb2FkaW5nKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbG9hZGVyKCkgPyBsb2FkZXIoKS0+ZGVmZXJzTG9hZGluZygpIDogZmFsc2U7
Ci19Ci0KLXZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpzZXREYXRhQnVmZmVyaW5nUG9saWN5KERh
dGFCdWZmZXJpbmdQb2xpY3kgZGF0YUJ1ZmZlcmluZ1BvbGljeSkKLXsKLSAgICBpZiAobV9yZXNv
dXJjZSkKLSAgICAgICAgbV9yZXNvdXJjZS0+c2V0RGF0YUJ1ZmZlcmluZ1BvbGljeShkYXRhQnVm
ZmVyaW5nUG9saWN5KTsKLX0KLQotUmVzb3VyY2VMb2FkZXIqIE1haW5SZXNvdXJjZUxvYWRlcjo6
bG9hZGVyKCkgY29uc3QKLXsgCi0gICAgcmV0dXJuIG1fcmVzb3VyY2UgPyBtX3Jlc291cmNlLT5s
b2FkZXIoKSA6IDA7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgTWFpblJlc291cmNlTG9hZGVyOjppZGVu
dGlmaWVyKCkgY29uc3QKLXsKLSAgICBpZiAoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVy
ID0gbG9hZGVyKCkpCi0gICAgICAgIHJldHVybiByZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigp
OwotICAgIHJldHVybiAwOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDE0NjI2NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxMyBAQAog
I2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRl
ci5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUg
IlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgog
I2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgpAQCAtMTA3LDExICsxMDcsMTEgQEAKICAgICAsIG1fZ290Rmlyc3RCeXRl
KGZhbHNlKQogICAgICwgbV9pc0NsaWVudFJlZGlyZWN0KGZhbHNlKQogICAgICwgbV9pc0xvYWRp
bmdNdWx0aXBhcnRDb250ZW50KGZhbHNlKQotICAgICwgbV9sb2FkaW5nRW1wdHlEb2N1bWVudChm
YWxzZSkKICAgICAsIG1fd2FzT25sb2FkSGFuZGxlZChmYWxzZSkKICAgICAsIG1fc3RvcFJlY29y
ZGluZ1Jlc3BvbnNlcyhmYWxzZSkKICAgICAsIG1fc3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlU
aW1lcih0aGlzLCAmRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZURlbGl2ZXJ5VGlt
ZXJGaXJlZCkKICAgICAsIG1fZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KGZhbHNlKQorICAg
ICwgbV9sb2FkaW5nTWFpblJlc291cmNlKGZhbHNlKQogICAgICwgbV90aW1lT2ZMYXN0RGF0YVJl
Y2VpdmVkKDAuMCkKICAgICAsIG1faWRlbnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2Fk
ZXIoMCkKICAgICAsIG1fZGF0YUxvYWRUaW1lcih0aGlzLCAmRG9jdW1lbnRMb2FkZXI6OmhhbmRs
ZVN1YnN0aXR1dGVEYXRhTG9hZE5vdykKQEAgLTEyOSw3ICsxMjksNyBAQAogCiBSZXNvdXJjZUxv
YWRlciogRG9jdW1lbnRMb2FkZXI6Om1haW5SZXNvdXJjZUxvYWRlcigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fbWFpblJlc291cmNlTG9hZGVyID8gbV9tYWluUmVzb3VyY2VMb2FkZXItPmxvYWRl
cigpIDogMDsKKyAgICByZXR1cm4gbV9tYWluUmVzb3VyY2UgPyBtX21haW5SZXNvdXJjZS0+bG9h
ZGVyKCkgOiAwOwogfQogCiBEb2N1bWVudExvYWRlcjo6fkRvY3VtZW50TG9hZGVyKCkKQEAgLTE0
MCwxNiArMTQwLDE5IEBACiAgICAgaWYgKG1faWNvbkRhdGFDYWxsYmFjaykKICAgICAgICAgbV9p
Y29uRGF0YUNhbGxiYWNrLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRl
ci0+Y2xlYXJEb2N1bWVudExvYWRlcigpOworICAgIAorICAgIGlmIChtX21haW5SZXNvdXJjZSkg
eworICAgICAgICBtX21haW5SZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgICAgICBt
X21haW5SZXNvdXJjZSA9IDA7CisgICAgfQogfQogCiBQYXNzUmVmUHRyPFJlc291cmNlQnVmZmVy
PiBEb2N1bWVudExvYWRlcjo6bWFpblJlc291cmNlRGF0YSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
bWFpblJlc291cmNlRGF0YSkKLSAgICAgICAgcmV0dXJuIG1fbWFpblJlc291cmNlRGF0YTsKICAg
ICBpZiAobV9zdWJzdGl0dXRlRGF0YS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBSZXNvdXJj
ZUJ1ZmZlcjo6Y3JlYXRlKG1fc3Vic3RpdHV0ZURhdGEuY29udGVudCgpLT5kYXRhKCksIG1fc3Vi
c3RpdHV0ZURhdGEuY29udGVudCgpLT5zaXplKCkpOwotICAgIGlmIChtX21haW5SZXNvdXJjZUxv
YWRlcikKLSAgICAgICAgcmV0dXJuIG1fbWFpblJlc291cmNlTG9hZGVyLT5yZXNvdXJjZURhdGEo
KTsKKyAgICBpZiAobV9tYWluUmVzb3VyY2UpCisgICAgICAgIHJldHVybiBtX21haW5SZXNvdXJj
ZS0+cmVzb3VyY2VCdWZmZXIoKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjkyLDcgKzI5NSw3
IEBACiAKICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBEb2N1bWVudExvYWRlcjo6ZnJh
bWVMb2FkZXIoKTsKICAgICAKLSAgICBpZiAobV9tYWluUmVzb3VyY2VMb2FkZXIpCisgICAgaWYg
KGlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQogICAgICAgICAvLyBTdG9wIHRoZSBtYWluIHJlc291
cmNlIGxvYWRlciBhbmQgbGV0IGl0IHNlbmQgdGhlIGNhbmNlbGxlZCBtZXNzYWdlLgogICAgICAg
ICBjYW5jZWxNYWluUmVzb3VyY2VMb2FkKGZyYW1lTG9hZGVyLT5jYW5jZWxsZWRFcnJvcihtX3Jl
cXVlc3QpKTsKICAgICBlbHNlIGlmICghbV9zdWJyZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpKQpA
QCAtMzMwLDYgKzMzMywyNiBAQAogICAgIHJldHVybiBpc0xvYWRpbmdNYWluUmVzb3VyY2UoKSB8
fCAhbV9zdWJyZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpIHx8ICFtX3BsdWdJblN0cmVhbUxvYWRl
cnMuaXNFbXB0eSgpOwogfQogCit2b2lkIERvY3VtZW50TG9hZGVyOjpub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwg
bV9tYWluUmVzb3VyY2UgPT0gcmVzb3VyY2UpOworICAgIEFTU0VSVChtX21haW5SZXNvdXJjZSk7
CisgICAgaWYgKCFtX21haW5SZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpICYmICFtX21haW5SZXNv
dXJjZS0+d2FzQ2FuY2VsZWQoKSkgeworICAgICAgICBmaW5pc2hlZExvYWRpbmcobV9tYWluUmVz
b3VyY2UtPmxvYWRGaW5pc2hUaW1lKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gRklYTUU6IHdlIHNob3VsZCBmaXggdGhlIGRlc2lnbiB0byBlbGltaW5hdGUgdGhlIG5lZWQg
Zm9yIGEgcGxhdGZvcm0gaWZkZWYgaGVyZQorI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyAgICBp
ZiAobV9yZXF1ZXN0LmNhY2hlUG9saWN5KCkgPT0gUmV0dXJuQ2FjaGVEYXRhRG9udExvYWQgJiYg
IW1fbWFpblJlc291cmNlLT53YXNDYW5jZWxlZCgpKSB7CisgICAgICAgIGZyYW1lTG9hZGVyKCkt
PnJldHJ5QWZ0ZXJGYWlsZWRDYWNoZU9ubHlNYWluUmVzb3VyY2VMb2FkKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIG1haW5SZWNlaXZlZEVycm9yKG1fbWFpblJlc291
cmNlLT5yZXNvdXJjZUVycm9yKCkpOworfQorCiB2b2lkIERvY3VtZW50TG9hZGVyOjpmaW5pc2hl
ZExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpCiB7CiAgICAgLy8gVGhlcmUgaXMgYSBidWcgaW4g
Q0ZOZXR3b3JrIHdoZXJlIGNhbGxiYWNrcyBjYW4gYmUgZGlzcGF0Y2hlZCBldmVuIHdoZW4gbG9h
ZHMgYXJlIGRlZmVycmVkLgpAQCAtMzUxLDcgKzM3NCw3IEBACiAgICAgICAgIGludCBsZW5ndGg7
CiAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBtX2NvbnRlbnRGaWx0ZXItPmdldFJlcGxhY2Vt
ZW50RGF0YShsZW5ndGgpOwogICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIHJlY2VpdmVk
RGF0YShkYXRhLCBsZW5ndGgpOworICAgICAgICAgICAgZGF0YVJlY2VpdmVkKG1fbWFpblJlc291
cmNlLmdldCgpLCBkYXRhLCBsZW5ndGgpOwogICAgIH0KICNlbmRpZgogCkBAIC0zODUsOSArNDA4
LDkgQEAKIAogICAgIC8vIElmIHRoZSBkb2N1bWVudCBzcGVjaWZpZWQgYW4gYXBwbGljYXRpb24g
Y2FjaGUgbWFuaWZlc3QsIGl0IHZpb2xhdGVzIHRoZSBhdXRob3IncyBpbnRlbnQgaWYgd2Ugc3Rv
cmUgaXQgaW4gdGhlIG1lbW9yeSBjYWNoZQogICAgIC8vIGFuZCBkZW55IHRoZSBhcHBjYWNoZSB0
aGUgY2hhbmNlIHRvIGludGVyY2VwdCBpdCBpbiB0aGUgZnV0dXJlLCBzbyByZW1vdmUgZnJvbSB0
aGUgbWVtb3J5IGNhY2hlLgotICAgIGlmIChmcmFtZSgpICYmIG1fbWFpblJlc291cmNlTG9hZGVy
KSB7Ci0gICAgICAgIGlmIChtX21haW5SZXNvdXJjZUxvYWRlci0+Y2FjaGVkTWFpblJlc291cmNl
KCkgJiYgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aGFzTWFuaWZlc3QoKSkKLSAgICAgICAgICAgIG1l
bW9yeUNhY2hlKCktPnJlbW92ZShtX21haW5SZXNvdXJjZUxvYWRlci0+Y2FjaGVkTWFpblJlc291
cmNlKCkpOworICAgIGlmIChtX2ZyYW1lKSB7CisgICAgICAgIGlmIChtX21haW5SZXNvdXJjZSAm
JiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5oYXNNYW5pZmVzdCgpKQorICAgICAgICAgICAgbWVtb3J5
Q2FjaGUoKS0+cmVtb3ZlKG1fbWFpblJlc291cmNlLmdldCgpKTsKICAgICB9CiAgICAgbV9hcHBs
aWNhdGlvbkNhY2hlSG9zdC0+ZmluaXNoZWRMb2FkaW5nTWFpblJlc291cmNlKCk7CiB9CkBAIC00
MTEsNyArNDM0LDcgQEAKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAgdXJsID0gbV9y
ZXF1ZXN0LnVybCgpOwogICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtX3N1YnN0
aXR1dGVEYXRhLm1pbWVUeXBlKCksIG1fc3Vic3RpdHV0ZURhdGEuY29udGVudCgpLT5zaXplKCks
IG1fc3Vic3RpdHV0ZURhdGEudGV4dEVuY29kaW5nKCksICIiKTsKLSAgICByZXNwb25zZVJlY2Vp
dmVkKHJlc3BvbnNlKTsKKyAgICByZXNwb25zZVJlY2VpdmVkKDAsIHJlc3BvbnNlKTsKIH0KIAog
dm9pZCBEb2N1bWVudExvYWRlcjo6c3RhcnREYXRhTG9hZFRpbWVyKCkKQEAgLTQzMiw2ICs0NTUs
MTIgQEAKICAgICAgICAgaGFuZGxlU3Vic3RpdHV0ZURhdGFMb2FkTm93KDApOwogfQogCit2b2lk
IERvY3VtZW50TG9hZGVyOjpyZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsIHJlc291cmNlID09
IG1fbWFpblJlc291cmNlKTsKKyAgICB3aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RS
ZXNwb25zZSk7Cit9CisKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChSZXNv
dXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0
UmVzcG9uc2UpCiB7CiAgICAgLy8gTm90ZSB0aGF0IHRoZXJlIGFyZSBubyBhc3NlcnRzIGhlcmUg
YXMgdGhlcmUgYXJlIGZvciB0aGUgb3RoZXIgY2FsbGJhY2tzLiBUaGlzIGlzIGR1ZSB0byB0aGUK
QEAgLTUxNSwxNyArNTQ0LDIxIEBACiAgICAgICAgIC8vIElmIHRoZSBSZXNvdXJjZUxvYWRlciBp
cyBpbmRlZWQgY2FuY2VsbGVkLCBpdCB3b3VsZCBub3JtYWxseSBzZW5kIHJlc291cmNlIGxvYWQg
Y2FsbGJhY2tzLgogICAgICAgICAvLyBIb3dldmVyLCBmcm9tIGFuIEFQSSBwZXJzcGVjdGl2ZSwg
dGhpcyBpc24ndCBhIGNhbmNlbGxhdGlvbi4gVGhlcmVmb3JlLCBzZXZlciBvdXIgcmVsYXRpb25z
aGlwIHdpdGggdGhlIG5ldHdvcmsgbG9hZCwKICAgICAgICAgLy8gYnV0IHByZXZlbnQgdGhlIFJl
c291cmNlTG9hZGVyIGZyb20gc2VuZGluZyBSZXNvdXJjZUxvYWROb3RpZmllciBjYWxsYmFja3Mu
Ci0gICAgICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gcmVzb3VyY2VMb2FkZXIgPSBtX21haW5S
ZXNvdXJjZUxvYWRlci0+bG9hZGVyKCk7CisgICAgICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4g
cmVzb3VyY2VMb2FkZXIgPSBtYWluUmVzb3VyY2VMb2FkZXIoKTsKICAgICAgICAgQVNTRVJUKHJl
c291cmNlTG9hZGVyLT5zaG91bGRTZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpOwogICAgICAg
ICByZXNvdXJjZUxvYWRlci0+c2V0U2VuZENhbGxiYWNrUG9saWN5KERvTm90U2VuZENhbGxiYWNr
cyk7Ci0gICAgICAgIG1fbWFpblJlc291cmNlTG9hZGVyLT5jbGVhclJlc291cmNlKCk7CisgICAg
ICAgIGlmIChtX21haW5SZXNvdXJjZSkgeworICAgICAgICAgICAgbV9tYWluUmVzb3VyY2UtPnJl
bW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fbWFpblJlc291cmNlID0gMDsKKyAgICAg
ICAgfQogICAgICAgICByZXNvdXJjZUxvYWRlci0+c2V0U2VuZENhbGxiYWNrUG9saWN5KFNlbmRD
YWxsYmFja3MpOwogICAgICAgICBoYW5kbGVTdWJzdGl0dXRlRGF0YUxvYWRTb29uKCk7CiAgICAg
fQogfQogCi12b2lkIERvY3VtZW50TG9hZGVyOjpyZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBEb2N1bWVudExvYWRlcjo6cmVzcG9uc2VSZWNl
aXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQogeworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsIG1fbWFpblJlc291cmNlID09
IHJlc291cmNlKTsKICAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IHByb3RlY3QodGhpcyk7CiAg
ICAgYm9vbCB3aWxsTG9hZEZhbGxiYWNrID0gbV9hcHBsaWNhdGlvbkNhY2hlSG9zdC0+bWF5YmVM
b2FkRmFsbGJhY2tGb3JNYWluUmVzcG9uc2UocmVxdWVzdCgpLCByZXNwb25zZSk7CiAKQEAgLTUz
OSw3ICs1NzIsNyBAQAogICAgICAgICBzaG91bGRSZW1vdmVSZXNvdXJjZUZyb21DYWNoZSA9IHRy
dWU7CiAjZW5kaWYKICAgICBpZiAoc2hvdWxkUmVtb3ZlUmVzb3VyY2VGcm9tQ2FjaGUpCi0gICAg
ICAgIG1lbW9yeUNhY2hlKCktPnJlbW92ZShtX21haW5SZXNvdXJjZUxvYWRlci0+Y2FjaGVkTWFp
blJlc291cmNlKCkpOworICAgICAgICBtZW1vcnlDYWNoZSgpLT5yZW1vdmUobV9tYWluUmVzb3Vy
Y2UuZ2V0KCkpOwogCiAgICAgaWYgKHdpbGxMb2FkRmFsbGJhY2spCiAgICAgICAgIHJldHVybjsK
QEAgLTU2Niw3ICs1OTksNyBAQAogCiAgICAgaWYgKG1faXNMb2FkaW5nTXVsdGlwYXJ0Q29udGVu
dCkgewogICAgICAgICBzZXR1cEZvclJlcGxhY2UoKTsKLSAgICAgICAgbV9tYWluUmVzb3VyY2VM
b2FkZXItPmNhY2hlZE1haW5SZXNvdXJjZSgpLT5jbGVhcigpOworICAgICAgICBtX21haW5SZXNv
dXJjZS0+Y2xlYXIoKTsKICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmlzTXVsdGlwYXJ0KCkpIHsK
ICAgICAgICAgRmVhdHVyZU9ic2VydmVyOjpvYnNlcnZlKG1fZnJhbWUtPmRvY3VtZW50KCksIEZl
YXR1cmVPYnNlcnZlcjo6TXVsdGlwYXJ0TWFpblJlc291cmNlKTsKICAgICAgICAgbV9pc0xvYWRp
bmdNdWx0aXBhcnRDb250ZW50ID0gdHJ1ZTsKQEAgLTYzNyw4ICs2NzAsOCBAQAogICAgIH0KIAog
ICAgIGNhc2UgUG9saWN5RG93bmxvYWQ6IHsKLSAgICAgICAgLy8gVGhlIG1haW4gQ2FjaGVkUmVz
b3VyY2UgY2FuIGJlIG51bGwsIGUuZy4gd2hlbiBsb2FkaW5nIGEgc3Vic3RpdHV0ZSByZXNvdXJj
ZSBmcm9tIGFwcGxpY2F0aW9uIGNhY2hlLgotICAgICAgICBpZiAoIW1fbWFpblJlc291cmNlTG9h
ZGVyLT5jYWNoZWRNYWluUmVzb3VyY2UoKSkgeworICAgICAgICAvLyBtX21haW5SZXNvdXJjZSBj
YW4gYmUgbnVsbCwgZS5nLiB3aGVuIGxvYWRpbmcgYSBzdWJzdGl0dXRlIHJlc291cmNlIGZyb20g
YXBwbGljYXRpb24gY2FjaGUuCisgICAgICAgIGlmICghbV9tYWluUmVzb3VyY2UpIHsKICAgICAg
ICAgICAgIG1haW5SZWNlaXZlZEVycm9yKGZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT5jYW5ub3RT
aG93VVJMRXJyb3IobV9yZXF1ZXN0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
QEAgLTY3OSw3ICs3MTIsNyBAQAogCiAgICAgaWYgKCFpc1N0b3BwaW5nKCkgJiYgbV9zdWJzdGl0
dXRlRGF0YS5pc1ZhbGlkKCkpIHsKICAgICAgICAgaWYgKG1fc3Vic3RpdHV0ZURhdGEuY29udGVu
dCgpLT5zaXplKCkpCi0gICAgICAgICAgICByZWNlaXZlZERhdGEobV9zdWJzdGl0dXRlRGF0YS5j
b250ZW50KCktPmRhdGEoKSwgbV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPnNpemUoKSk7Cisg
ICAgICAgICAgICBkYXRhUmVjZWl2ZWQoMCwgbV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPmRh
dGEoKSwgbV9zdWJzdGl0dXRlRGF0YS5jb250ZW50KCktPnNpemUoKSk7CiAgICAgICAgIGlmIChp
c0xvYWRpbmdNYWluUmVzb3VyY2UoKSkKICAgICAgICAgICAgIGZpbmlzaGVkTG9hZGluZygwKTsK
ICAgICB9CkBAIC03NTgsOCArNzkxLDcgQEAKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1v
cnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkxvYWRlcik7CiAgICAgaW5m
by5hZGRNZW1iZXIobV9mcmFtZSwgImZyYW1lIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9jYWNo
ZWRSZXNvdXJjZUxvYWRlciwgImNhY2hlZFJlc291cmNlTG9hZGVyIik7Ci0gICAgaW5mby5hZGRN
ZW1iZXIobV9tYWluUmVzb3VyY2VMb2FkZXIsICJtYWluUmVzb3VyY2VMb2FkZXIiKTsKLSAgICBp
bmZvLmFkZE1lbWJlcihtX21haW5SZXNvdXJjZURhdGEsICJtYWluUmVzb3VyY2VEYXRhIik7Cisg
ICAgaW5mby5hZGRNZW1iZXIobV9tYWluUmVzb3VyY2UsICJtYWluUmVzb3VyY2UiKTsKICAgICBp
bmZvLmFkZE1lbWJlcihtX3N1YnJlc291cmNlTG9hZGVycywgInN1YnJlc291cmNlTG9hZGVycyIp
OwogICAgIGluZm8uYWRkTWVtYmVyKG1fbXVsdGlwYXJ0U3VicmVzb3VyY2VMb2FkZXJzLCAibXVs
dGlwYXJ0U3VicmVzb3VyY2VMb2FkZXJzIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9wbHVnSW5T
dHJlYW1Mb2FkZXJzLCAicGx1Z0luU3RyZWFtTG9hZGVycyIpOwpAQCAtNzg4LDEwICs4MjAsMTEg
QEAKICAgICBpbmZvLmFkZE1lbWJlcihtX2FwcGxpY2F0aW9uQ2FjaGVIb3N0LCAiYXBwbGljYXRp
b25DYWNoZUhvc3QiKTsKIH0KIAotdm9pZCBEb2N1bWVudExvYWRlcjo6cmVjZWl2ZWREYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit2b2lkIERvY3VtZW50TG9hZGVyOjpkYXRhUmVj
ZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKQogewogICAgIEFTU0VSVChkYXRhKTsKICAgICBBU1NFUlQobGVuZ3RoKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHJlc291cmNlLCByZXNvdXJjZSA9PSBtX21haW5SZXNvdXJjZSk7CiAgICAgQVNT
RVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKIAogI2lmIFVTRShDRk5FVFdPUkspIHx8IFBMQVRG
T1JNKE1BQykKQEAgLTkwMSwxMiArOTM0LDcgQEAKIAogdm9pZCBEb2N1bWVudExvYWRlcjo6Y2xl
YXJNYWluUmVzb3VyY2VMb2FkZXIoKQogewotICAgIGlmIChtX21haW5SZXNvdXJjZUxvYWRlcikg
ewotICAgICAgICBtX21haW5SZXNvdXJjZURhdGEgPSBtX21haW5SZXNvdXJjZUxvYWRlci0+cmVz
b3VyY2VEYXRhKCk7Ci0gICAgICAgIG1fbWFpblJlc291cmNlTG9hZGVyID0gMDsKLSAgICB9Ci0g
ICAgbV9sb2FkaW5nRW1wdHlEb2N1bWVudCA9IGZhbHNlOwotCisgICAgbV9sb2FkaW5nTWFpblJl
c291cmNlID0gZmFsc2U7CiAgICAgaWYgKHRoaXMgPT0gZnJhbWVMb2FkZXIoKS0+YWN0aXZlRG9j
dW1lbnRMb2FkZXIoKSkKICAgICAgICAgY2hlY2tMb2FkQ29tcGxldGUoKTsKIH0KQEAgLTEyNDMs
OCArMTI3MSw4IEBACiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9v
bCBkZWZlcnMpCiB7Ci0gICAgaWYgKG1fbWFpblJlc291cmNlTG9hZGVyKQotICAgICAgICBtX21h
aW5SZXNvdXJjZUxvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworICAgIGlmIChtYWlu
UmVzb3VyY2VMb2FkZXIoKSkKKyAgICAgICAgbWFpblJlc291cmNlTG9hZGVyKCktPnNldERlZmVy
c0xvYWRpbmcoZGVmZXJzKTsKICAgICBzZXRBbGxEZWZlcnNMb2FkaW5nKG1fc3VicmVzb3VyY2VM
b2FkZXJzLCBkZWZlcnMpOwogICAgIHNldEFsbERlZmVyc0xvYWRpbmcobV9wbHVnSW5TdHJlYW1M
b2FkZXJzLCBkZWZlcnMpOwogICAgIGlmICghZGVmZXJzKQpAQCAtMTI1Myw4ICsxMjgxLDggQEAK
IAogdm9pZCBEb2N1bWVudExvYWRlcjo6c2V0TWFpblJlc291cmNlRGF0YUJ1ZmZlcmluZ1BvbGlj
eShEYXRhQnVmZmVyaW5nUG9saWN5IGRhdGFCdWZmZXJpbmdQb2xpY3kpCiB7Ci0gICAgaWYgKG1f
bWFpblJlc291cmNlTG9hZGVyKQotICAgICAgICBtX21haW5SZXNvdXJjZUxvYWRlci0+c2V0RGF0
YUJ1ZmZlcmluZ1BvbGljeShkYXRhQnVmZmVyaW5nUG9saWN5KTsKKyAgICBpZiAobV9tYWluUmVz
b3VyY2UpCisgICAgICAgIG1fbWFpblJlc291cmNlLT5zZXREYXRhQnVmZmVyaW5nUG9saWN5KGRh
dGFCdWZmZXJpbmdQb2xpY3kpOwogfQogCiB2b2lkIERvY3VtZW50TG9hZGVyOjpzdG9wTG9hZGlu
Z1BsdWdJbnMoKQpAQCAtMTI3MSwxMyArMTI5OSwxMyBAQAogewogICAgIC8vIFRoZSBtYWluIHJl
c291cmNlJ3MgdW5kZXJseWluZyBSZXNvdXJjZUxvYWRlciB3aWxsIGFzayB0byBiZSBhZGRlZCBo
ZXJlLgogICAgIC8vIEl0IGlzIG11Y2ggc2ltcGxlciB0byBoYW5kbGUgc3BlY2lhbCBjYXNpbmcg
b2YgbWFpbiByZXNvdXJjZSBsb2FkcyBpZiB3ZSBkb24ndAotICAgIC8vIGxldCBpdCBiZSBhZGRl
ZC4gSW4gdGhlIG1haW4gcmVzb3VyY2UgbG9hZCBjYXNlLCBtX21haW5SZXNvdXJjZUxvYWRlci0+
bG9hZGVyKCkKKyAgICAvLyBsZXQgaXQgYmUgYWRkZWQuIEluIHRoZSBtYWluIHJlc291cmNlIGxv
YWQgY2FzZSwgbWFpblJlc291cmNlTG9hZGVyKCkKICAgICAvLyB3aWxsIHN0aWxsIGJlIG51bGwg
YXQgdGhpcyBwb2ludCwgYnV0IG1fZ290Rmlyc3RCeXRlIHNob3VsZCBiZSBmYWxzZSBoZXJlIGlm
IGFuZCBvbmx5CiAgICAgLy8gaWYgd2UgYXJlIGp1c3Qgc3RhcnRpbmcgdGhlIG1haW4gcmVzb3Vy
Y2UgbG9hZC4KICAgICBpZiAoIW1fZ290Rmlyc3RCeXRlKQogICAgICAgICByZXR1cm47CiAgICAg
QVNTRVJUKCFtX3N1YnJlc291cmNlTG9hZGVycy5jb250YWlucyhsb2FkZXIpKTsKLSAgICBBU1NF
UlQoIW1fbWFpblJlc291cmNlTG9hZGVyIHx8IG1fbWFpblJlc291cmNlTG9hZGVyLT5sb2FkZXIo
KSAhPSBsb2FkZXIpOworICAgIEFTU0VSVCghbWFpblJlc291cmNlTG9hZGVyKCkgfHwgbWFpblJl
c291cmNlTG9hZGVyKCkgIT0gbG9hZGVyKTsKICAgICBtX3N1YnJlc291cmNlTG9hZGVycy5hZGQo
bG9hZGVyKTsKIH0KIApAQCAtMTMwMiwxMSArMTMzMCw2IEBACiAgICAgY2hlY2tMb2FkQ29tcGxl
dGUoKTsKIH0KIAotYm9vbCBEb2N1bWVudExvYWRlcjo6aXNMb2FkaW5nTWFpblJlc291cmNlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gISFtX21haW5SZXNvdXJjZUxvYWRlciB8fCBtX2xvYWRpbmdF
bXB0eURvY3VtZW50OwotfQotCiBib29sIERvY3VtZW50TG9hZGVyOjppc011bHRpcGFydFJlcGxh
Y2luZ0xvYWQoKSBjb25zdAogewogICAgIHJldHVybiBpc0xvYWRpbmdNdWx0aXBhcnRDb250ZW50
KCkgJiYgZnJhbWVMb2FkZXIoKS0+aXNSZXBsYWNpbmcoKTsKQEAgLTEzMTgsNyArMTM0MSw2IEBA
CiAgICAgaWYgKCFzaG91bGRMb2FkRW1wdHkgJiYgIWZyYW1lTG9hZGVyKCktPmNsaWVudCgpLT5y
ZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShtX3JlcXVlc3QudXJsKCkucHJvdG9jb2wo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fbG9hZGluZ0VtcHR5RG9jdW1lbnQg
PSB0cnVlOwogICAgIGlmIChtX3JlcXVlc3QudXJsKCkuaXNFbXB0eSgpICYmICFmcmFtZUxvYWRl
cigpLT5zdGF0ZU1hY2hpbmUoKS0+Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpKQogICAg
ICAgICBtX3JlcXVlc3Quc2V0VVJMKGJsYW5rVVJMKCkpOwogICAgIFN0cmluZyBtaW1lVHlwZSA9
IHNob3VsZExvYWRFbXB0eSA/ICJ0ZXh0L2h0bWwiIDogZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCkt
PmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKG1fcmVxdWVzdC51cmwoKS5wcm90b2NvbCgp
KTsKQEAgLTEzMzEsMTMgKzEzNTMsMTMgQEAKIHsKICAgICBtX21haW5Eb2N1bWVudEVycm9yID0g
UmVzb3VyY2VFcnJvcigpOwogICAgIHRpbWluZygpLT5tYXJrTmF2aWdhdGlvblN0YXJ0KCk7Ci0g
ICAgQVNTRVJUKCFtX21haW5SZXNvdXJjZUxvYWRlcik7CisgICAgQVNTRVJUKCFtX21haW5SZXNv
dXJjZSk7CisgICAgQVNTRVJUKCFtX2xvYWRpbmdNYWluUmVzb3VyY2UpOworICAgIG1fbG9hZGlu
Z01haW5SZXNvdXJjZSA9IHRydWU7CiAKICAgICBpZiAobWF5YmVMb2FkRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9tYWluUmVzb3VyY2VMb2FkZXIgPSBNYWluUmVzb3VyY2VMb2Fk
ZXI6OmNyZWF0ZSh0aGlzKTsKLQogICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhbnkgd2F5IHRoZSBl
eHRyYSBmaWVsZHMgY291bGQgaGF2ZSBub3QgYmVlbiBhZGRlZCBieSBub3c/CiAgICAgLy8gSWYg
bm90LCBpdCB3b3VsZCBiZSBncmVhdCB0byByZW1vdmUgdGhpcyBsaW5lIG9mIGNvZGUuCiAgICAg
Ly8gTm90ZSB0aGF0IGN1cnJlbnRseSwgc29tZSByZXF1ZXN0cyBtYXkgaGF2ZSBpbmNvcnJlY3Qg
ZXh0cmEgZmllbGRzIGV2ZW4gaWYgdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQsCkBAIC0x
MzY0LDEwICsxMzg2LDEyIEBACiAgICAgfQogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
bV9yZXF1ZXN0KTsKLSAgICBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZChtX3JlcXVlc3QpOwot
Ci0gICAgaWYgKG1fcmVxdWVzdC5pc051bGwoKSkgewotICAgICAgICBtX21haW5SZXNvdXJjZUxv
YWRlciA9IDA7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXNvdXJjZUxvYWRlck9wdGlvbnMs
IG1haW5SZXNvdXJjZUxvYWRPcHRpb25zLAorICAgICAgICAoU2VuZENhbGxiYWNrcywgU25pZmZD
b250ZW50LCBCdWZmZXJEYXRhLCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBBc2tDbGllbnRGb3JD
cm9zc09yaWdpbkNyZWRlbnRpYWxzLCBTa2lwU2VjdXJpdHlDaGVjaykpOworICAgIENhY2hlZFJl
c291cmNlUmVxdWVzdCBjYWNoZWRSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCwgbWFpblJlc291cmNl
TG9hZE9wdGlvbnMpOworICAgIG1fbWFpblJlc291cmNlID0gbV9jYWNoZWRSZXNvdXJjZUxvYWRl
ci0+cmVxdWVzdE1haW5SZXNvdXJjZShjYWNoZWRSZXNvdXJjZVJlcXVlc3QpOworICAgIGlmICgh
bV9tYWluUmVzb3VyY2UpIHsKKyAgICAgICAgc2V0UmVxdWVzdChSZXNvdXJjZVJlcXVlc3QoKSk7
CiAgICAgICAgIC8vIElmIHRoZSBsb2FkIHdhcyBhYm9ydGVkIGJ5IGNsZWFyaW5nIG1fcmVxdWVz
dCwgaXQncyBwb3NzaWJsZSB0aGUgQXBwbGljYXRpb25DYWNoZUhvc3QKICAgICAgICAgLy8gaXMg
bm93IGluIGEgc3RhdGUgd2hlcmUgc3RhcnRpbmcgYW4gZW1wdHkgbG9hZCB3aWxsIGJlIGluY29u
c2lzdGVudC4gUmVwbGFjZSBpdCB3aXRoCiAgICAgICAgIC8vIGEgbmV3IEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0LgpAQCAtMTM4MSw2ICsxNDA1LDcgQEAKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90
aWZpZXIoKS0+YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QobV9pZGVudGlmaWVyRm9y
TG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciwgdGhpcywgcmVxdWVzdCk7CiAgICAgICAgIGZyYW1l
TG9hZGVyKCktPm5vdGlmaWVyKCktPmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KHRoaXMsIG1faWRl
bnRpZmllckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIsIHJlcXVlc3QsIFJlc291cmNlUmVz
cG9uc2UoKSk7CiAgICAgfQorICAgIG1fbWFpblJlc291cmNlLT5hZGRDbGllbnQodGhpcyk7CiAK
ICAgICAvLyBBIGJ1bmNoIG9mIGhlYWRlcnMgYXJlIHNldCB3aGVuIHRoZSB1bmRlcmx5aW5nIFJl
c291cmNlTG9hZGVyIGlzIGNyZWF0ZWQsIGFuZCBtX3JlcXVlc3QgbmVlZHMgdG8gaW5jbHVkZSB0
aG9zZS4KICAgICBpZiAobWFpblJlc291cmNlTG9hZGVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvbWFjL0RvY3VtZW50TG9hZGVyTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvbWFjL0RvY3VtZW50TG9hZGVyTWFjLmNwcAkocmV2aXNpb24gMTQ2MjY3
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9Eb2N1bWVudExvYWRlck1hYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5o
IgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtNTUsOCArNTQsOCBAQAogCiB2b2lk
IERvY3VtZW50TG9hZGVyOjpzY2hlZHVsZShTY2hlZHVsZVBhaXIqIHBhaXIpCiB7Ci0gICAgaWYg
KG1fbWFpblJlc291cmNlTG9hZGVyICYmIG1fbWFpblJlc291cmNlTG9hZGVyLT5sb2FkZXIoKSAm
JiBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZGVyKCktPmhhbmRsZSgpKQotICAgICAgICBtX21h
aW5SZXNvdXJjZUxvYWRlci0+bG9hZGVyKCktPmhhbmRsZSgpLT5zY2hlZHVsZShwYWlyKTsKKyAg
ICBpZiAobWFpblJlc291cmNlTG9hZGVyKCkgJiYgbWFpblJlc291cmNlTG9hZGVyKCktPmhhbmRs
ZSgpKQorICAgICAgICBtYWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxlKCktPnNjaGVkdWxlKHBh
aXIpOwogICAgIHNjaGVkdWxlQWxsKG1fc3VicmVzb3VyY2VMb2FkZXJzLCBwYWlyKTsKICAgICBz
Y2hlZHVsZUFsbChtX3BsdWdJblN0cmVhbUxvYWRlcnMsIHBhaXIpOwogICAgIHNjaGVkdWxlQWxs
KG1fbXVsdGlwYXJ0U3VicmVzb3VyY2VMb2FkZXJzLCBwYWlyKTsKQEAgLTY0LDggKzYzLDggQEAK
IAogdm9pZCBEb2N1bWVudExvYWRlcjo6dW5zY2hlZHVsZShTY2hlZHVsZVBhaXIqIHBhaXIpCiB7
Ci0gICAgaWYgKG1fbWFpblJlc291cmNlTG9hZGVyICYmIG1fbWFpblJlc291cmNlTG9hZGVyLT5s
b2FkZXIoKSAmJiBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZGVyKCktPmhhbmRsZSgpKQotICAg
ICAgICBtX21haW5SZXNvdXJjZUxvYWRlci0+bG9hZGVyKCktPmhhbmRsZSgpLT51bnNjaGVkdWxl
KHBhaXIpOworICAgIGlmIChtYWluUmVzb3VyY2VMb2FkZXIoKSAmJiBtYWluUmVzb3VyY2VMb2Fk
ZXIoKS0+aGFuZGxlKCkpCisgICAgICAgIG1haW5SZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUoKS0+
dW5zY2hlZHVsZShwYWlyKTsKICAgICB1bnNjaGVkdWxlQWxsKG1fc3VicmVzb3VyY2VMb2FkZXJz
LCBwYWlyKTsKICAgICB1bnNjaGVkdWxlQWxsKG1fcGx1Z0luU3RyZWFtTG9hZGVycywgcGFpcik7
CiAgICAgdW5zY2hlZHVsZUFsbChtX211bHRpcGFydFN1YnJlc291cmNlTG9hZGVycywgcGFpcik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5oCShyZXZp
c2lvbiAxNDYyNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBNYWluUmVzb3VyY2VMb2FkZXJfaAotI2RlZmluZSBNYWluUmVzb3VyY2VMb2FkZXJfaAotCi0j
aW5jbHVkZSAiQ2FjaGVkUmF3UmVzb3VyY2UuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhh
bmRsZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRlci5oIgotI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCi0jaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7
Ci0KLWNsYXNzIE1haW5SZXNvdXJjZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPE1haW5SZXNv
dXJjZUxvYWRlcj4sIHB1YmxpYyBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWFpblJl
c291cmNlTG9hZGVyPiBjcmVhdGUoRG9jdW1lbnRMb2FkZXIqKTsKLSAgICB2aXJ0dWFsIH5NYWlu
UmVzb3VyY2VMb2FkZXIoKTsKLQotICAgIHZvaWQgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KTsKLSAgICBSZXNvdXJjZUxvYWRlciogbG9hZGVyKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxS
ZXNvdXJjZUJ1ZmZlcj4gcmVzb3VyY2VEYXRhKCk7Ci0KLSAgICB2b2lkIHNldERlZmVyc0xvYWRp
bmcoYm9vbCk7Ci0gICAgdm9pZCBzZXREYXRhQnVmZmVyaW5nUG9saWN5KERhdGFCdWZmZXJpbmdQ
b2xpY3kpOwotCi0gICAgQ2FjaGVkUmF3UmVzb3VyY2UqIGNhY2hlZE1haW5SZXNvdXJjZSgpIHsg
cmV0dXJuIG1fcmVzb3VyY2UuZ2V0KCk7IH0KLQotICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cigpIGNvbnN0OwotCi0gICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KikgY29uc3Q7Ci0KLSAgICB2b2lkIGNsZWFyUmVzb3VyY2UoKTsKLQotcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBNYWluUmVzb3VyY2VMb2FkZXIoRG9jdW1lbnRMb2FkZXIqKTsKLQotICAgIHZpcnR1
YWwgdm9pZCByZWRpcmVjdFJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2Uq
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikgT1ZFUlJJREU7Ci0KLSAgICBG
cmFtZUxvYWRlciogZnJhbWVMb2FkZXIoKSBjb25zdDsKLSAgICBEb2N1bWVudExvYWRlciogZG9j
dW1lbnRMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TG9hZGVyLmdldCgpOyB9Ci0K
LSAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBjb25zdDsKLQotICAgIGJvb2wg
ZGVmZXJzTG9hZGluZygpIGNvbnN0OwotCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmF3UmVzb3VyY2U+IG1fcmVzb3VyY2U7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9pbml0aWFs
UmVxdWVzdDsKLQotICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbV9kb2N1bWVudExvYWRlcjsK
LX07Ci0KLX0KLQotI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>