<?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>78067</bug_id>
          
          <creation_ts>2012-02-07 18:53:13 -0800</creation_ts>
          <short_desc>[chromium] Move geometry headers in Platform API to Platform directory</short_desc>
          <delta_ts>2012-02-08 12:02:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>fishd</cc>
    
    <cc>piman</cc>
    
    <cc>sadrul</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>551688</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-07 18:53:13 -0800</bug_when>
    <thetext>[chromium] Move geometry headers in Platform API to Platform directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551733</commentid>
    <comment_count>1</comment_count>
      <attachid>125989</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-07 20:17:43 -0800</bug_when>
    <thetext>Created attachment 125989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551736</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 20:22:09 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551742</commentid>
    <comment_count>3</comment_count>
      <attachid>125991</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-07 20:35:19 -0800</bug_when>
    <thetext>Created attachment 125991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551745</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 20:38:39 -0800</bug_when>
    <thetext>Attachment 125991 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1

Source/Platform/chromium/src/WebFloatQuad.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551766</commentid>
    <comment_count>5</comment_count>
      <attachid>125991</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-07 21:20:45 -0800</bug_when>
    <thetext>Comment on attachment 125991
Patch

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

We&apos;ve already talked this over with fishd and we&apos;re not actually changing anything in the API.  It&apos;s probably safe to land without round-tripping with him.

&gt; Source/Platform/Platform.gyp/copy_webcore_headers.py:37
&gt; +            raise e

You just want to say &quot;raise&quot; without the &quot;e&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551795</commentid>
    <comment_count>6</comment_count>
      <attachid>125991</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-07 22:12:55 -0800</bug_when>
    <thetext>Comment on attachment 125991
Patch

Whoops missed the comment, will update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551798</commentid>
    <comment_count>7</comment_count>
      <attachid>126002</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-07 22:20:01 -0800</bug_when>
    <thetext>Created attachment 126002
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551822</commentid>
    <comment_count>8</comment_count>
      <attachid>126002</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 22:56:40 -0800</bug_when>
    <thetext>Comment on attachment 126002
Patch for landing

Clearing flags on attachment: 126002

Committed r107042: &lt;http://trac.webkit.org/changeset/107042&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551823</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 22:56:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552204</commentid>
    <comment_count>10</comment_count>
    <who name="Sadrul Habib Chowdhury">sadrul</who>
    <bug_when>2012-02-08 09:28:51 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552205</commentid>
    <comment_count>11</comment_count>
      <attachid>126101</attachid>
    <who name="Sadrul Habib Chowdhury">sadrul</who>
    <bug_when>2012-02-08 09:28:54 -0800</bug_when>
    <thetext>Created attachment 126101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552206</commentid>
    <comment_count>12</comment_count>
    <who name="Sadrul Habib Chowdhury">sadrul</who>
    <bug_when>2012-02-08 09:30:39 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Reopening to attach new patch.

My bad. I failed webkit-patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552263</commentid>
    <comment_count>13</comment_count>
      <attachid>126002</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-08 10:29:34 -0800</bug_when>
    <thetext>Comment on attachment 126002
Patch for landing

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

&gt; Source/Platform/Platform.gyp/Platform.gyp:58
&gt; +                # Since Platform/ can&apos;t add WebCore/* to the include path, this build step
&gt; +                # copies these headers into the shared intermediate directory and adds that to the include path.

Copying the headers is OK, but forwarding headers are better.  Sometimes people edit the wrong file by accident when there&apos;s a copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552277</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-08 10:42:59 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 126002 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126002&amp;action=review
&gt; 
&gt; &gt; Source/Platform/Platform.gyp/Platform.gyp:58
&gt; &gt; +                # Since Platform/ can&apos;t add WebCore/* to the include path, this build step
&gt; &gt; +                # copies these headers into the shared intermediate directory and adds that to the include path.
&gt; 
&gt; Copying the headers is OK, but forwarding headers are better.  Sometimes people edit the wrong file by accident when there&apos;s a copy.

I disagree - forwarding headers run into all sorts of gross issues with relative paths and I really doubt anyone is going to accidentally edit a copy in out/Release/gen/webcore_headers/ instead of the real one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552339</commentid>
    <comment_count>15</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-08 11:44:24 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (From update of attachment 126002 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126002&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/Platform/Platform.gyp/Platform.gyp:58
&gt; &gt; &gt; +                # Since Platform/ can&apos;t add WebCore/* to the include path, this build step
&gt; &gt; &gt; +                # copies these headers into the shared intermediate directory and adds that to the include path.
&gt; &gt; 
&gt; &gt; Copying the headers is OK, but forwarding headers are better.  Sometimes people edit the wrong file by accident when there&apos;s a copy.
&gt; 
&gt; I disagree - forwarding headers run into all sorts of gross issues with relative paths and I really doubt anyone is going to accidentally edit a copy in out/Release/gen/webcore_headers/ instead of the real one.

People who use an IDE just right click on an include an open it.  It&apos;s easy to accidentally edit the wrong copy.  It&apos;s also not obvious where copies come from.

Here&apos;s a previous discussion where it confused people (which is when I switched the third_party webkit headers to use forwarding headers from a copy):
https://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/97f633fea1369fa/b42a06a0b5deea90?lnk=gst</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552353</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-08 11:54:40 -0800</bug_when>
    <thetext>That&apos;s a little different, in that case both copies were in the source directories. In this case the copy is in the SHARED_INTERMEDIATE_DIR. We should just teach IDEs not to open files in the output directory, if we haven&apos;t already.

I don&apos;t think anyone is using the xcode UI any more (at least not if they&apos;ve upgraded to 4.X).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552363</commentid>
    <comment_count>17</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-08 12:02:34 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; That&apos;s a little different, in that case both copies were in the source directories. In this case the copy is in the SHARED_INTERMEDIATE_DIR. We should just teach IDEs not to open files in the output directory, if we haven&apos;t already.

How do we teach IDEs not to open files in the output directory?

&gt; I don&apos;t think anyone is using the xcode UI any more (at least not if they&apos;ve upgraded to 4.X).

The same happens in MSVS.  If you open a header, it only has the filename, not the full path in the tab.  It&apos;s easy to edit the wrong file.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125989</attachid>
            <date>2012-02-07 20:17:43 -0800</date>
            <delta_ts>2012-02-07 20:35:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78067-20120207201742.patch</filename>
            <type>text/plain</type>
            <size>56637</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBmYzQ1MzQ3YjI1NmM2
YmIxZWQyNjViOTcxNmY4ZGJlYjcxYjg3ZDA3Li41OWFkNWQxNjllZWU4MTc3Mjc4NWUxNzJhMTg5
MjZmMTNmNGUxNDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxMi0wMi0wNyAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gTW92ZSBnZW9tZXRyeSBoZWFkZXJzIGluIFBsYXRmb3JtIEFQSSB0byBQbGF0Zm9ybSBkaXJl
Y3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
MDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBtb3ZlcyBzZXZlcmFsIGdlb21ldHJ5LXJlbGF0ZWQgaGVhZGVycyBpbiB0aGUgY2hyb21pdW0g
V2ViS2l0IHBsYXRmb3JtIEFQSSB0byBQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMuCisgICAgICAg
IFRoZXNlIHJlcXVpcmUgYSBiaXQgb2YgZXh0cmEgd29yayBzaW5jZSB3aGVuIFdFQktJVF9JTVBM
RU1FTlRBVElPTiBpcyBzZXQgdGhleSAjaW5jbHVkZSBoZWFkZXJzIGZyb20KKyAgICAgICAgV2Vi
Q29yZS9wbGF0Zm9ybSBzdWNoIGFzIEludFBvaW50IHNvIHRoYXQgdGhlIGltcGxlbWVudGF0aW9u
cyBvZiBzZXZlcmFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5saW5lZC4gU2luY2Ugd2UgZG8KKyAgICAg
ICAgbm90IHdhbnQgdG8gYWRkIGFueXRoaW5nIGluIFdlYkNvcmUgdG8gdGhlIGluY2x1ZGUgcGF0
aCBvZiBwcm9qZWN0cyB0aGF0IGRlcGVuZCBvbiB0aGUgUGxhdGZvcm0gQVBJIHRoaXMgcG9zZXMg
YQorICAgICAgICBiaXQgb2YgYW4gaXNzdWUuIEkndmUgYWRkZWQgYW4gZXh0cmEgYnVpbGQgc3Rl
cCB0byBjb3B5IHRoZSBzcGVjaWZpYyBoZWFkZXJzIHVzZWQgaW50byB0aGUKKyAgICAgICAgU0hB
UkVEX0lOVEVSTUVESUFURV9ESVIgdG8gcHJlc2VydmUgdGhpcyBpbmxpbmluZy4KKyAgICAgICAg
CisgICAgICAgIEV2ZW50dWFsbHkgd2UnbGwgbW92ZSB0aGUgY3Jvc3MtcGxhdGZvcm0gY29kZSwg
aW5jbHVkaW5nIHRoZXNlIGhlYWRlcnMsIGludG8gc29tZXdoZXJlIHVuZGVyIFBsYXRmb3JtLywg
YnV0IGRvaW5nCisgICAgICAgIHRoYXQgcmVxdWlyZXMgbm9uLXRyaXZpYWwgbW9kaWZpY2F0aW9u
cyB0byBldmVyeSBidWlsZCBzeXN0ZW0gaW4gV2ViS2l0LgorCisgICAgICAgICogUGxhdGZvcm0u
Z3lwL1BsYXRmb3JtLmd5cDoKKyAgICAgICAgKiBQbGF0Zm9ybS5neXAvY29weV93ZWJjb3JlX2hl
YWRlcnMucHk6IEFkZGVkLgorICAgICAgICAoQ29weUhlYWRlcnMpOgorICAgICAgICAoTWFpbik6
CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9pbnQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRQb2ludC5oLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkZsb2F0UG9pbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGbG9hdFBvaW50OjpXZWJGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RmxvYXRQb2ludDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRQb2ludDo6
b3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBjaHJvbWl1bS9w
dWJsaWMvV2ViRmxvYXRRdWFkLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkZsb2F0UXVhZC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYkZsb2F0UXVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UXVhZDo6V2ViRmxv
YXRRdWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRRdWFkOjpvcGVyYXRvcj0pOgorICAg
ICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRSZWN0LmguCisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViRmxvYXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RmxvYXRSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0OjpXZWJG
bG9hdFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdFJlY3Q6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UmVjdDo6b3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJh
dG9yIT0pOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJQb2ludC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQb2ludC5oLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UG9pbnQ6OldlYlBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9pbnQ6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBvaW50OjpvcGVyYXRvciBXZWJDb3JlOjpJbnRQb2ludCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBvaW50OjpvcGVyYXRvciBnZng6OlBvaW50KToKKyAgICAg
ICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJSZWN0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlJlY3QuaC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVjdDo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlY3Q6OldlYlJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZWN0OjpvcGVyYXRv
ciBXZWJDb3JlOjpJbnRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVjdDo6b3BlcmF0b3Ig
Z2Z4OjpSZWN0KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJL
aXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJTaXplLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNpemUu
aC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJTaXplKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2l6ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNpemU6OldlYlNpemUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTaXplOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJTaXplOjpvcGVyYXRvciBXZWJDb3JlOjpJbnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU2l6ZTo6b3BlcmF0b3IgZ2Z4OjpTaXplKToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorCiAyMDEyLTAxLTE5ICBKb2kgU2ln
dXJkc3NvbiAgPGpvaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRW5hYmxlIHVzZSBvZiBwcmVj
b21waWxlZCBoZWFkZXJzIGluIENocm9taXVtIHBvcnQgb24gV2luZG93cy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggOGNiOGM3NmE4YzEyODlhOTViZmZlZWI0ZjRlZDVkZjUwNzQ0N2E4
ZS4uYTU4YjA4ZjAwZGU0MmU4ZTVlNTk3MmE2Njg0YzM0M2E4ZmZkY2FjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wMi0wNyAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBnZW9t
ZXRyeSBoZWFkZXJzIGluIFBsYXRmb3JtIEFQSSB0byBQbGF0Zm9ybSBkaXJlY3RvcnkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MDY3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZvcndhcmRpbmcg
aGVhZGVycyBmb3Igc2V2ZXJhbCBBUEkgdHlwZXMgbW92ZWQgaW50byBQbGF0Zm9ybS4KKworICAg
ICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFBvaW50Lmg6CisgICAgICAgICogcHVibGlj
L3BsYXRmb3JtL1dlYkZsb2F0UXVhZC5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJG
bG9hdFJlY3QuaDoKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViUG9pbnQuaDoKKyAgICAg
ICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViUmVjdC5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9y
bS9XZWJTaXplLmg6CisKIDIwMTItMDItMDcgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFJFR1JFU1NJT04ocjEwMTg1NCk6IENhdXNp
bmcgbGFyZ2UgYW1vdW50cyBvZiB1bm5lY2Vzc2FyeSByZXBhaW50aW5nLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXAgYi9Tb3VyY2UvUGxhdGZv
cm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cAppbmRleCBkM2Q0YmJlMDc3MjUxZjc0MjUxMWY5
YzZmMzFlNTYwODUzNjkyOWQzLi41YWNjNTliODZiMzk4ZGI2MDljZDY2NGYxNGY2M2MwNzc3ZjQx
OWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5
cAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cApAQCAtNTAs
OSArNTAsMjcgQEAKICAgICAgICAgICAgICdzb3VyY2VzJzogWwogICAgICAgICAgICAgICAgICc8
QChwbGF0Zm9ybV9maWxlcyknLAogICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICd2YXJpYWJs
ZXMnOiB7CisgICAgICAgICAgICAgICAgIyBMaXN0IG9mIGhlYWRlcnMgdGhhdCBhcmUgI2luY2x1
ZGVkIGluIFBsYXRmb3JtIEFQSSBoZWFkZXJzIHRoYXQgZXhpc3QgaW5zaWRlCisgICAgICAgICAg
ICAgICAgIyB0aGUgV2ViQ29yZSBkaXJlY3RvcnkuIFRoZXNlIGFyZSBvbmx5IGluY2x1ZGVkIHdo
ZW4gV0VCS0lUX0lNUExFTUVOVEFUSU9OPTEuCisgICAgICAgICAgICAgICAgIyBTaW5jZSBQbGF0
Zm9ybS8gY2FuJ3QgYWRkIFdlYkNvcmUvKiB0byB0aGUgaW5jbHVkZSBwYXRoLCB0aGlzIGJ1aWxk
IHN0ZXAKKyAgICAgICAgICAgICAgICAjIGNvcGllcyB0aGVzZSBoZWFkZXJzIGludG8gdGhlIHNo
YXJlZCBpbnRlcm1lZGlhdGUgZGlyZWN0b3J5IGFuZCBhZGRzIHRoYXQgdG8gdGhlIGluY2x1ZGUg
cGF0aC4KKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdGVtcG9yYXJ5LCB0aGUgYmV0dGVyIHNv
bHV0aW9uIGlzIHRvIG1vdmUgdGhlc2UgaGVhZGVycyBpbnRvIHRoZSBQbGF0Zm9ybQorICAgICAg
ICAgICAgICAgICMgZGlyZWN0b3J5IGZvciBhbGwgcG9ydHMgYW5kIGp1c3QgdXNlIHRoZW0gYXMg
bm9ybWFsLgorICAgICAgICAgICAgICAgICd3ZWJjb3JlX2hlYWRlcnMnOiBbCisgICAgICAgICAg
ICAgICAgICAgICcuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAor
ICAgICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRS
ZWN0LmgnLAorICAgICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRTaXplLmgnLAorICAgICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgnLAorICAgICAgICAgICAgICAgICAgICAnLi4vLi4v
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCcsCisgICAgICAgICAgICAgICAg
ICAgICcuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oJywKKyAgICAg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICdvdXRwdXRfZGlyJzogJzwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmNvcmVfaGVhZGVycycKKyAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKICAgICAgICAgICAgICAgICAnaW5j
bHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0nLAorICAgICAg
ICAgICAgICAgICAgICAnPChvdXRwdXRfZGlyKScKICAgICAgICAgICAgICAgICBdLAogICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwpAQCAtNjUsNiArODMsMjQgQEAK
ICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgICAgICBdLAogICAg
ICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdhY3Rpb25zJzog
WworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzog
J3BsYXRmb3JtX2FwaV9jb3B5X3dlYmNvcmVfaGVhZGVycycsCisgICAgICAgICAgICAgICAgICAg
ICdpbnB1dHMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPEAod2ViY29yZV9oZWFkZXJz
KScKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMn
OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPChvdXRwdXRfZGlyKS9JbnRQb2ludC5oJyAj
IEp1c3QgaGF2ZSB0byBkZXBlbmQgb24gYW55IG9uZSBjb3BpZWQgaGVhZGVyCisgICAgICAgICAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbCisgICAgICAgICAg
ICAgICAgICAgICAgICAncHl0aG9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdjb3B5X3dl
YmNvcmVfaGVhZGVycy5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChTSEFSRURfSU5U
RVJNRURJQVRFX0RJUikvd2ViY29yZV9oZWFkZXJzJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICc8QCh3ZWJjb3JlX2hlYWRlcnMpJworICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgICAgICAnbWVzc2FnZSc6ICdDb3B5aW5nIFdlYkNvcmUgaGVhZGVycyBuZWVkZWQgYnkg
UGxhdGZvcm0gQVBJJworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIF0KICAgICAgICAg
fQogICAgIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAvY29weV93
ZWJjb3JlX2hlYWRlcnMucHkgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL2NvcHlfd2Vi
Y29yZV9oZWFkZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhNzcyNDg4ZTBmZDQ1ZjU0ZmFmZDEzYjFiZTUx
MDkyZjFjNjNmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0u
Z3lwL2NvcHlfd2ViY29yZV9oZWFkZXJzLnB5CkBAIC0wLDAgKzEsNDkgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIi
QSBoZWxwZXIgc2NyaXB0IGZvciBjb3B5aW5nIFdlYkNvcmUvcGxhdGZvcm0gaGVhZGVycyBpbnRv
IGEgbG9jYXRpb24gdGhlIFdlYktpdCBQbGF0Zm9ybSBBUEkgaGVhZGVycyBjYW4gaW5jbHVkZSIi
IgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cwor
CisKK2RlZiBDb3B5SGVhZGVycyhkZXN0X2RpciwgaGVhZGVycyk6CisgICAgdHJ5OgorICAgICAg
ICBvcy5tYWtlZGlycyhkZXN0X2RpcikKKyAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAg
aWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZSBlCisgICAgZm9y
IGhlYWRlciBpbiBoZWFkZXJzOgorICAgICAgICBkZXN0X2ZpbGVuYW1lID0gZGVzdF9kaXIgKyBv
cy5zZXAgKyBoZWFkZXIuc3BsaXQoJy8nKVstMV0KKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGhl
YWRlciwgZGVzdF9maWxlbmFtZSkKKworCitkZWYgTWFpbihhcmd2KToKKyAgICBkZXN0X2RpciA9
IGFyZ3ZbMV0KKyAgICBoZWFkZXJzID0gYXJndlsyOl0KKyAgICBDb3B5SGVhZGVycyhkZXN0X2Rp
ciwgaGVhZGVycykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChN
YWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViRmxvYXRQb2ludC5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJG
bG9hdFBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFmYzE2YjljODRlNmY1ZWEzMDQwM2ViM2U3N2VjNGYz
ZThmOWZiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViRmxvYXRQb2ludC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkZsb2F0UG9pbnRf
aAorI2RlZmluZSBXZWJGbG9hdFBvaW50X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViRmxvYXRQb2ludCB7CisgICAgZmxv
YXQgeDsKKyAgICBmbG9hdCB5OworCisgICAgV2ViRmxvYXRQb2ludCgpCisgICAgICAgIDogeCgw
LjBmKQorICAgICAgICAsIHkoMC4wZikKKyAgICB7CisgICAgfQorCisgICAgV2ViRmxvYXRQb2lu
dChmbG9hdCB4LCBmbG9hdCB5KQorICAgICAgICA6IHgoeCkKKyAgICAgICAgLCB5KHkpCisgICAg
eworICAgIH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZsb2F0UG9pbnQo
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcCkKKyAgICAgICAgOiB4KHAueCgpKQorICAgICAg
ICAsIHkocC55KCkpCisgICAgeworICAgIH0KKworICAgIFdlYkZsb2F0UG9pbnQmIG9wZXJhdG9y
PShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwKQorICAgIHsKKyAgICAgICAgeCA9IHAueCgp
OworICAgICAgICB5ID0gcC55KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBvcGVyYXRvciBXZWJDb3JlOjpGbG9hdFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpGbG9hdFBvaW50KHgsIHkpOworICAgIH0KKyNlbmRpZgorfTsKKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJGbG9hdFBvaW50JiBhLCBjb25zdCBXZWJGbG9h
dFBvaW50JiBiKQoreworICAgIHJldHVybiBhLnggPT0gYi54ICYmIGEueSA9PSBiLnk7Cit9CisK
K2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViRmxvYXRQb2ludCYgYSwgY29uc3QgV2Vi
RmxvYXRQb2ludCYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYkZsb2F0UXVhZC5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJGbG9hdFF1YWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYTVlYjA1NDIwMmZhZTVhYjcxYjdjODlkYjFm
MzE0NWNkNzY5M2MxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJGbG9hdFF1YWQuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdFF1
YWRfaAorI2RlZmluZSBXZWJGbG9hdFF1YWRfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisj
aW5jbHVkZSAiV2ViRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKKworI2luY2x1
ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjbWF0aD4KKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitzdHJ1Y3QgV2ViRmxvYXRRdWFkIHsKKyAgICBXZWJGbG9hdFBvaW50IHBbNF07CisKKyAg
ICBXZWJGbG9hdFF1YWQoKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFF1YWQoY29uc3Qg
V2ViRmxvYXRQb2ludCYgcDAsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIHAxLCBjb25zdCBXZWJGbG9h
dFBvaW50JiBwMiwgY29uc3QgV2ViRmxvYXRQb2ludCYgcDMpCisgICAgeworICAgICAgICBwWzBd
ID0gcDA7CisgICAgICAgIHBbMV0gPSBwMTsKKyAgICAgICAgcFsyXSA9IHAyOworICAgICAgICBw
WzNdID0gcDM7CisgICAgfQorCisgICAgV0VCS0lUX0VYUE9SVCBXZWJSZWN0IGVuY2xvc2luZ1Jl
Y3QoKSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZsb2F0UXVh
ZCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgcSkKKyAgICB7CisgICAgICAg
IHBbMF0gPSBxLnAxKCk7CisgICAgICAgIHBbMV0gPSBxLnAyKCk7CisgICAgICAgIHBbMl0gPSBx
LnAzKCk7CisgICAgICAgIHBbM10gPSBxLnA0KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisgICAgV2ViRmxvYXRRdWFkKGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgcSkKKyAgICB7
CisgICAgICAgICp0aGlzID0gcTsKKyAgICB9CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViRmxvYXRSZWN0LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YkZsb2F0UmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4ODM1MTNmY2RhYzU0M2U5MDAzNzcyZTU0MjIwNWIy
MWM3M2JhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYkZsb2F0UmVjdC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdFJlY3Rf
aAorI2RlZmluZSBXZWJGbG9hdFJlY3RfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYkZsb2F0UmVjdCB7CisgICAgZmxvYXQg
eDsKKyAgICBmbG9hdCB5OworICAgIGZsb2F0IHdpZHRoOworICAgIGZsb2F0IGhlaWdodDsKKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9
IDA7IH0KKworICAgIFdlYkZsb2F0UmVjdCgpCisgICAgICAgIDogeCgwLjBmKQorICAgICAgICAs
IHkoMC4wZikKKyAgICAgICAgLCB3aWR0aCgwLjBmKQorICAgICAgICAsIGhlaWdodCgwLjBmKQor
ICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
d2lkdGgsIGZsb2F0IGhlaWdodCkKKyAgICAgICAgOiB4KHgpCisgICAgICAgICwgeSh5KQorICAg
ICAgICAsIHdpZHRoKHdpZHRoKQorICAgICAgICAsIGhlaWdodChoZWlnaHQpCisgICAgeworICAg
IH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkZsb2F0UmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHIpCisgICAgICAgIDogeChyLngoKSkKKyAgICAgICAgLCB5KHIu
eSgpKQorICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKKyAgICAgICAgLCBoZWlnaHQoci5oZWln
aHQoKSkKKyAgICB7CisgICAgfQorCisgICAgV2ViRmxvYXRSZWN0JiBvcGVyYXRvcj0oY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiByKQorICAgIHsKKyAgICAgICAgeCA9IHIueCgpOworICAgICAg
ICB5ID0gci55KCk7CisgICAgICAgIHdpZHRoID0gci53aWR0aCgpOworICAgICAgICBoZWlnaHQg
PSByLmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0
b3IgV2ViQ29yZTo6RmxvYXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjpGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorI2VuZGlmCit9Owor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwgY29uc3QgV2Vi
RmxvYXRSZWN0JiBiKQoreworICAgIHJldHVybiBhLnggPT0gYi54ICYmIGEueSA9PSBiLnkgJiYg
YS53aWR0aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0OworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYkZsb2F0UmVjdCYgYSwgY29uc3QgV2ViRmxvYXRSZWN0
JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViUG9pbnQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViUG9pbnQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NjYyMzYzOThjYmM3MDM3NjBjOGE3Y2Y5YTA0ZTJjOTczOGY5MzBmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJQb2ludC5o
CkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQb2ludF9oCisjZGVmaW5lIFdlYlBvaW50X2gK
KworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisj
aW5jbHVkZSAiSW50UG9pbnQuaCIKKyNlbHNlCisjaW5jbHVkZSA8dWkvZ2Z4L3BvaW50Lmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJQb2ludCB7CisgICAgaW50
IHg7CisgICAgaW50IHk7CisKKyAgICBXZWJQb2ludCgpCisgICAgICAgIDogeCgwKQorICAgICAg
ICAsIHkoMCkKKyAgICB7CisgICAgfQorCisgICAgV2ViUG9pbnQoaW50IHgsIGludCB5KQorICAg
ICAgICA6IHgoeCkKKyAgICAgICAgLCB5KHkpCisgICAgeworICAgIH0KKworI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgorICAgIFdlYlBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwKQor
ICAgICAgICA6IHgocC54KCkpCisgICAgICAgICwgeShwLnkoKSkKKyAgICB7CisgICAgfQorCisg
ICAgV2ViUG9pbnQmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcCkKKyAgICB7
CisgICAgICAgIHggPSBwLngoKTsKKyAgICAgICAgeSA9IHAueSgpOworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6SW50UG9pbnQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KHgsIHkpOworICAgIH0KKyNl
bHNlCisgICAgV2ViUG9pbnQoY29uc3QgZ2Z4OjpQb2ludCYgcCkKKyAgICAgICAgOiB4KHAueCgp
KQorICAgICAgICAsIHkocC55KCkpCisgICAgeworICAgIH0KKworICAgIFdlYlBvaW50JiBvcGVy
YXRvcj0oY29uc3QgZ2Z4OjpQb2ludCYgcCkKKyAgICB7CisgICAgICAgIHggPSBwLngoKTsKKyAg
ICAgICAgeSA9IHAueSgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3Bl
cmF0b3IgZ2Z4OjpQb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2Z4OjpQb2lu
dCh4LCB5KTsKKyAgICB9CisjZW5kaWYKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgV2ViUG9pbnQmIGEsIGNvbnN0IFdlYlBvaW50JiBiKQoreworICAgIHJldHVybiBhLnggPT0g
Yi54ICYmIGEueSA9PSBiLnk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2Vi
UG9pbnQmIGEsIGNvbnN0IFdlYlBvaW50JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViUmVjdC5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJSZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQ1YjdhOGViMzc5YzRkZDZjMTBlODI0
Y2QxYjIyODQ4NDRlYzVhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViUmVjdC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJSZWN0X2gK
KyNkZWZpbmUgV2ViUmVjdF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJ
VF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNlbHNlCisjaW5jbHVkZSA8
dWkvZ2Z4L3JlY3QuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdl
YlJlY3QgeworICAgIGludCB4OworICAgIGludCB5OworICAgIGludCB3aWR0aDsKKyAgICBpbnQg
aGVpZ2h0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gd2lkdGggPD0gMCB8
fCBoZWlnaHQgPD0gMDsgfQorCisgICAgV2ViUmVjdCgpCisgICAgICAgIDogeCgwKQorICAgICAg
ICAsIHkoMCkKKyAgICAgICAgLCB3aWR0aCgwKQorICAgICAgICAsIGhlaWdodCgwKQorICAgIHsK
KyAgICB9CisKKyAgICBXZWJSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQorICAgICAgICA6IHgoeCkKKyAgICAgICAgLCB5KHkpCisgICAgICAgICwgd2lkdGgod2lkdGgp
CisgICAgICAgICwgaGVpZ2h0KGhlaWdodCkKKyAgICB7CisgICAgfQorCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgV2ViUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByKQorICAg
ICAgICA6IHgoci54KCkpCisgICAgICAgICwgeShyLnkoKSkKKyAgICAgICAgLCB3aWR0aChyLndp
ZHRoKCkpCisgICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0KCkpCisgICAgeworICAgIH0KKworICAg
IFdlYlJlY3QmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByKQorICAgIHsKKyAg
ICAgICAgeCA9IHIueCgpOworICAgICAgICB5ID0gci55KCk7CisgICAgICAgIHdpZHRoID0gci53
aWR0aCgpOworICAgICAgICBoZWlnaHQgPSByLmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6SW50UmVjdCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICB9CisjZWxzZQorICAgIFdlYlJlY3QoY29uc3QgZ2Z4OjpSZWN0JiByKQorICAgICAgICA6
IHgoci54KCkpCisgICAgICAgICwgeShyLnkoKSkKKyAgICAgICAgLCB3aWR0aChyLndpZHRoKCkp
CisgICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0KCkpCisgICAgeworICAgIH0KKworICAgIFdlYlJl
Y3QmIG9wZXJhdG9yPShjb25zdCBnZng6OlJlY3QmIHIpCisgICAgeworICAgICAgICB4ID0gci54
KCk7CisgICAgICAgIHkgPSByLnkoKTsKKyAgICAgICAgd2lkdGggPSByLndpZHRoKCk7CisgICAg
ICAgIGhlaWdodCA9IHIuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisK
KyAgICBvcGVyYXRvciBnZng6OlJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdm
eDo6UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisjZW5kaWYKK307CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViUmVjdCYgYSwgY29uc3QgV2ViUmVjdCYgYikKK3sK
KyAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55ICYmIGEud2lkdGggPT0gYi53aWR0
aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodDsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBXZWJSZWN0JiBhLCBjb25zdCBXZWJSZWN0JiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViU2l6ZS5oIGIvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJTaXplLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRhNTM2NTRkNTg3NDE0MjIz
MGZmM2VlODYxM2ViZWNmNTU2YWVlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViU2l6ZS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJT
aXplX2gKKyNkZWZpbmUgV2ViU2l6ZV9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNlbHNlCisjaW5j
bHVkZSA8dWkvZ2Z4L3NpemUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3Ry
dWN0IFdlYlNpemUgeworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworCisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQor
CisgICAgV2ViU2l6ZSgpCisgICAgICAgIDogd2lkdGgoMCkKKyAgICAgICAgLCBoZWlnaHQoMCkK
KyAgICB7CisgICAgfQorCisgICAgV2ViU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAg
ICAgIDogd2lkdGgod2lkdGgpCisgICAgICAgICwgaGVpZ2h0KGhlaWdodCkKKyAgICB7CisgICAg
fQorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViU2l6ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzKQorICAgICAgICA6IHdpZHRoKHMud2lkdGgoKSkKKyAgICAgICAgLCBoZWln
aHQocy5oZWlnaHQoKSkKKyAgICB7CisgICAgfQorCisgICAgV2ViU2l6ZSYgb3BlcmF0b3I9KGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHMpCisgICAgeworICAgICAgICB3aWR0aCA9IHMud2lkdGgo
KTsKKyAgICAgICAgaGVpZ2h0ID0gcy5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkludFNpemUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgfQorI2Vs
c2UKKyAgICBXZWJTaXplKGNvbnN0IGdmeDo6U2l6ZSYgcykKKyAgICAgICAgOiB3aWR0aChzLndp
ZHRoKCkpCisgICAgICAgICwgaGVpZ2h0KHMuaGVpZ2h0KCkpCisgICAgeworICAgIH0KKworICAg
IFdlYlNpemUmIG9wZXJhdG9yPShjb25zdCBnZng6OlNpemUmIHMpCisgICAgeworICAgICAgICB3
aWR0aCA9IHMud2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gcy5oZWlnaHQoKTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIGdmeDo6U2l6ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZ2Z4OjpTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIH0KKyNl
bmRpZgorfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJTaXplJiBhLCBjb25z
dCBXZWJTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoID09IGIud2lkdGggJiYgYS5oZWln
aHQgPT0gYi5oZWlnaHQ7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViU2l6
ZSYgYSwgY29uc3QgV2ViU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFBvaW50LmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFBvaW50LmgKaW5kZXggNGFmYzE2Yjlj
ODRlNmY1ZWEzMDQwM2ViM2U3N2VjNGYzZThmOWZiOS4uM2ZkNGM2Yzg2ZGM2NjE1YTIwMmY0Njg5
M2ZmMTJiODI1N2MwZDY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvcGxhdGZvcm0vV2ViRmxvYXRQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkZsb2F0UG9pbnQuaApAQCAtMSw5MSArMSwyNiBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViRmxvYXRQb2ludF9oCi0jZGVmaW5lIFdlYkZs
b2F0UG9pbnRfaAotCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0KLSNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXN0cnVjdCBXZWJGbG9hdFBvaW50IHsKLSAgICBmbG9hdCB4OwotICAgIGZsb2F0
IHk7Ci0KLSAgICBXZWJGbG9hdFBvaW50KCkKLSAgICAgICAgOiB4KDAuMGYpCi0gICAgICAgICwg
eSgwLjBmKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0
IHkpCi0gICAgICAgIDogeCh4KQotICAgICAgICAsIHkoeSkKLSAgICB7Ci0gICAgfQotCi0jaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViRmxvYXRQb2ludChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwKQotICAgICAgICA6IHgocC54KCkpCi0gICAgICAgICwgeShwLnkoKSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgV2ViRmxvYXRQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHApCi0gICAgewotICAgICAgICB4ID0gcC54KCk7Ci0gICAgICAgIHkgPSBw
LnkoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJhdG9yIFdlYkNv
cmU6OkZsb2F0UG9pbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZs
b2F0UG9pbnQoeCwgeSk7Ci0gICAgfQotI2VuZGlmCi19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGIpCi17Ci0g
ICAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIueTsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBXZWJGbG9hdFBvaW50JiBhLCBjb25zdCBXZWJGbG9hdFBvaW50JiBiKQot
ewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
RmxvYXRQb2ludC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViRmxvYXRRdWFkLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJGbG9hdFF1YWQuaAppbmRleCBkYTVlYjA1NDIwMmZhZTVhYjcxYjdjODlkYjFm
MzE0NWNkNzY5M2MxLi41ZDA3ZjkyYjUwNTBkY2FmN2IwMzQ5OTMxMThlMjcyYWE3YmU5MWE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9h
dFF1YWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJG
bG9hdFF1YWQuaApAQCAtMSw4MiArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgV2ViRmxvYXRRdWFkX2gKLSNkZWZpbmUgV2ViRmxvYXRRdWFkX2gKLQotI2luY2x1ZGUg
IldlYkNvbW1vbi5oIgotI2luY2x1ZGUgIldlYkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJXZWJS
ZWN0LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0KLSNpZiBX
RUJLSVRfSU1QTEVNRU5UQVRJT04KLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IFdlYkZsb2F0UXVhZCB7Ci0gICAgV2ViRmxvYXRQ
b2ludCBwWzRdOwotCi0gICAgV2ViRmxvYXRRdWFkKCkKLSAgICB7Ci0gICAgfQotCi0gICAgV2Vi
RmxvYXRRdWFkKGNvbnN0IFdlYkZsb2F0UG9pbnQmIHAwLCBjb25zdCBXZWJGbG9hdFBvaW50JiBw
MSwgY29uc3QgV2ViRmxvYXRQb2ludCYgcDIsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIHAzKQotICAg
IHsKLSAgICAgICAgcFswXSA9IHAwOwotICAgICAgICBwWzFdID0gcDE7Ci0gICAgICAgIHBbMl0g
PSBwMjsKLSAgICAgICAgcFszXSA9IHAzOwotICAgIH0KLQotICAgIFdFQktJVF9FWFBPUlQgV2Vi
UmVjdCBlbmNsb3NpbmdSZWN0KCkgY29uc3Q7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
LSAgICBXZWJGbG9hdFF1YWQmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIHEp
Ci0gICAgewotICAgICAgICBwWzBdID0gcS5wMSgpOwotICAgICAgICBwWzFdID0gcS5wMigpOwot
ICAgICAgICBwWzJdID0gcS5wMygpOwotICAgICAgICBwWzNdID0gcS5wNCgpOwotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFdlYkZsb2F0UXVhZChjb25zdCBXZWJDb3JlOjpGbG9h
dFF1YWQmIHEpCi0gICAgewotICAgICAgICAqdGhpcyA9IHE7Ci0gICAgfQotI2VuZGlmCi19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4v
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UXVhZC5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRSZWN0LmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFJlY3QuaAppbmRleCBh
ODgzNTEzZmNkYWM1NDNlOTAwMzc3MmU1NDIyMDViMjFjNzNiYTAzLi5jNmRkNTRmZGJiNzAwMTZl
NDE1YmJlMWRkNzI4NDM0YjkxMzAxNjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFJlY3QuaApAQCAtMSwxMDMgKzEsMjYgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgogICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYkZsb2F0UmVjdF9oCi0jZGVmaW5l
IFdlYkZsb2F0UmVjdF9oCi0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLQotI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1zdHJ1Y3QgV2ViRmxvYXRSZWN0IHsKLSAgICBmbG9hdCB4OwotICAgIGZs
b2F0IHk7Ci0gICAgZmxvYXQgd2lkdGg7Ci0gICAgZmxvYXQgaGVpZ2h0OwotCi0gICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQotCi0g
ICAgV2ViRmxvYXRSZWN0KCkKLSAgICAgICAgOiB4KDAuMGYpCi0gICAgICAgICwgeSgwLjBmKQot
ICAgICAgICAsIHdpZHRoKDAuMGYpCi0gICAgICAgICwgaGVpZ2h0KDAuMGYpCi0gICAgewotICAg
IH0KLQotICAgIFdlYkZsb2F0UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0KQotICAgICAgICA6IHgoeCkKLSAgICAgICAgLCB5KHkpCi0gICAgICAgICwgd2lk
dGgod2lkdGgpCi0gICAgICAgICwgaGVpZ2h0KGhlaWdodCkKLSAgICB7Ci0gICAgfQotCi0jaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViRmxvYXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgcikKLSAgICAgICAgOiB4KHIueCgpKQotICAgICAgICAsIHkoci55KCkpCi0gICAg
ICAgICwgd2lkdGgoci53aWR0aCgpKQotICAgICAgICAsIGhlaWdodChyLmhlaWdodCgpKQotICAg
IHsKLSAgICB9Ci0KLSAgICBXZWJGbG9hdFJlY3QmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIHIpCi0gICAgewotICAgICAgICB4ID0gci54KCk7Ci0gICAgICAgIHkgPSByLnko
KTsKLSAgICAgICAgd2lkdGggPSByLndpZHRoKCk7Ci0gICAgICAgIGhlaWdodCA9IHIuaGVpZ2h0
KCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBXZWJDb3Jl
OjpGbG9hdFJlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0jZW5kaWYKLX07Ci0KLWlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgV2ViRmxvYXRSZWN0JiBhLCBjb25zdCBXZWJGbG9hdFJlY3Qm
IGIpCi17Ci0gICAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIueSAmJiBhLndpZHRoID09
IGIud2lkdGggJiYgYS5oZWlnaHQgPT0gYi5oZWlnaHQ7Ci19Ci0KLWlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgV2ViRmxvYXRSZWN0JiBhLCBjb25zdCBXZWJGbG9hdFJlY3QmIGIpCi17Ci0g
ICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9h
dFJlY3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRm
b3JtL1dlYlBvaW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJQb2ludC5oCmluZGV4IDc2NjIzNjM5OGNiYzcwMzc2MGM4YTdjZjlhMDRlMmM5NzM4ZjkzMGYu
LjNlNjRlNDNjZWU5YWEzMzI5ODY1NmVlZDk2NWEwMTQxOTA2ZDllZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlBvaW50LmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUG9pbnQuaApAQCAtMSwxMTEg
KzEsMjcgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgogICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlBvaW50X2gKLSNk
ZWZpbmUgV2ViUG9pbnRfaAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJQb2ludC5oIgogCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0KLSNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2Vsc2UKLSNpbmNsdWRl
IDx1aS9nZngvcG9pbnQuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0
IFdlYlBvaW50IHsKLSAgICBpbnQgeDsKLSAgICBpbnQgeTsKLQotICAgIFdlYlBvaW50KCkKLSAg
ICAgICAgOiB4KDApCi0gICAgICAgICwgeSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJQb2lu
dChpbnQgeCwgaW50IHkpCi0gICAgICAgIDogeCh4KQotICAgICAgICAsIHkoeSkKLSAgICB7Ci0g
ICAgfQotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViUG9pbnQoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHApCi0gICAgICAgIDogeChwLngoKSkKLSAgICAgICAgLCB5KHAueSgp
KQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBwKQotICAgIHsKLSAgICAgICAgeCA9IHAueCgpOwotICAgICAgICB5ID0gcC55
KCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBXZWJDb3Jl
OjpJbnRQb2ludCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9p
bnQoeCwgeSk7Ci0gICAgfQotI2Vsc2UKLSAgICBXZWJQb2ludChjb25zdCBnZng6OlBvaW50JiBw
KQotICAgICAgICA6IHgocC54KCkpCi0gICAgICAgICwgeShwLnkoKSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgV2ViUG9pbnQmIG9wZXJhdG9yPShjb25zdCBnZng6OlBvaW50JiBwKQotICAgIHsKLSAg
ICAgICAgeCA9IHAueCgpOwotICAgICAgICB5ID0gcC55KCk7Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBnZng6OlBvaW50KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBnZng6OlBvaW50KHgsIHkpOwotICAgIH0KLSNlbmRpZgotfTsKLQotaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJQb2ludCYgYSwgY29uc3QgV2ViUG9pbnQmIGIpCi17
Ci0gICAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIueTsKLX0KLQotaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBXZWJQb2ludCYgYSwgY29uc3QgV2ViUG9pbnQmIGIpCi17Ci0gICAg
cmV0dXJuICEoYSA9PSBiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUmVj
dC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUmVjdC5oCmlu
ZGV4IDA0NWI3YThlYjM3OWM0ZGQ2YzEwZTgyNGNkMWIyMjg0ODQ0ZWM1YTguLmMxY2VkMDA3MTk1
YzQ2OWMzZDM5YWJhNDc5ODIwMWExMjg0NDQ1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlJlY3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJSZWN0LmgKQEAgLTEsMTI3ICsxLDI2IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKICAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJSZWN0X2gKLSNkZWZpbmUgV2ViUmVjdF9o
Ci0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNlbHNlCi0jaW5jbHVkZSA8dWkvZ2Z4L3JlY3QuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IFdlYlJlY3QgewotICAgIGludCB4
OwotICAgIGludCB5OwotICAgIGludCB3aWR0aDsKLSAgICBpbnQgaGVpZ2h0OwotCi0gICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQot
Ci0gICAgV2ViUmVjdCgpCi0gICAgICAgIDogeCgwKQotICAgICAgICAsIHkoMCkKLSAgICAgICAg
LCB3aWR0aCgwKQotICAgICAgICAsIGhlaWdodCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJS
ZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgICAgICA6IHgoeCkK
LSAgICAgICAgLCB5KHkpCi0gICAgICAgICwgd2lkdGgod2lkdGgpCi0gICAgICAgICwgaGVpZ2h0
KGhlaWdodCkKLSAgICB7Ci0gICAgfQotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAg
V2ViUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByKQotICAgICAgICA6IHgoci54KCkpCi0g
ICAgICAgICwgeShyLnkoKSkKLSAgICAgICAgLCB3aWR0aChyLndpZHRoKCkpCi0gICAgICAgICwg
aGVpZ2h0KHIuaGVpZ2h0KCkpCi0gICAgewotICAgIH0KLQotICAgIFdlYlJlY3QmIG9wZXJhdG9y
PShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByKQotICAgIHsKLSAgICAgICAgeCA9IHIueCgpOwot
ICAgICAgICB5ID0gci55KCk7Ci0gICAgICAgIHdpZHRoID0gci53aWR0aCgpOwotICAgICAgICBo
ZWlnaHQgPSByLmhlaWdodCgpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAg
b3BlcmF0b3IgV2ViQ29yZTo6SW50UmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
V2ViQ29yZTo6SW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0jZWxzZQotICAg
IFdlYlJlY3QoY29uc3QgZ2Z4OjpSZWN0JiByKQotICAgICAgICA6IHgoci54KCkpCi0gICAgICAg
ICwgeShyLnkoKSkKLSAgICAgICAgLCB3aWR0aChyLndpZHRoKCkpCi0gICAgICAgICwgaGVpZ2h0
KHIuaGVpZ2h0KCkpCi0gICAgewotICAgIH0KLQotICAgIFdlYlJlY3QmIG9wZXJhdG9yPShjb25z
dCBnZng6OlJlY3QmIHIpCi0gICAgewotICAgICAgICB4ID0gci54KCk7Ci0gICAgICAgIHkgPSBy
LnkoKTsKLSAgICAgICAgd2lkdGggPSByLndpZHRoKCk7Ci0gICAgICAgIGhlaWdodCA9IHIuaGVp
Z2h0KCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBnZng6
OlJlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGdmeDo6UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICB9Ci0jZW5kaWYKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgV2ViUmVjdCYgYSwgY29uc3QgV2ViUmVjdCYgYikKLXsKLSAgICByZXR1cm4gYS54ID09
IGIueCAmJiBhLnkgPT0gYi55ICYmIGEud2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PSBi
LmhlaWdodDsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJSZWN0JiBhLCBj
b25zdCBXZWJSZWN0JiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViUmVjdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViU2l6ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvcGxhdGZvcm0vV2ViU2l6ZS5oCmluZGV4IDk0YTUzNjU0ZDU4NzQxNDIyMzBmZjNlZTg2
MTNlYmVjZjU1NmFlZWUuLmI4NTI2YTExOGU3M2JkYWMxODNkYzBlMTU0YzA5YWJhZWFiYjZmZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNp
emUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTaXpl
LmgKQEAgLTEsMTEzICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKICAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBX
ZWJTaXplX2gKLSNkZWZpbmUgV2ViU2l6ZV9oCi0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLQot
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNlbHNlCi0j
aW5jbHVkZSA8dWkvZ2Z4L3NpemUuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RydWN0IFdlYlNpemUgewotICAgIGludCB3aWR0aDsKLSAgICBpbnQgaGVpZ2h0OwotCi0gICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsg
fQotCi0gICAgV2ViU2l6ZSgpCi0gICAgICAgIDogd2lkdGgoMCkKLSAgICAgICAgLCBoZWlnaHQo
MCkKLSAgICB7Ci0gICAgfQotCi0gICAgV2ViU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0g
ICAgICAgIDogd2lkdGgod2lkdGgpCi0gICAgICAgICwgaGVpZ2h0KGhlaWdodCkKLSAgICB7Ci0g
ICAgfQotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViU2l6ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzKQotICAgICAgICA6IHdpZHRoKHMud2lkdGgoKSkKLSAgICAgICAgLCBo
ZWlnaHQocy5oZWlnaHQoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgV2ViU2l6ZSYgb3BlcmF0b3I9
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHMpCi0gICAgewotICAgICAgICB3aWR0aCA9IHMud2lk
dGgoKTsKLSAgICAgICAgaGVpZ2h0ID0gcy5oZWlnaHQoKTsKLSAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgIH0KLQotICAgIG9wZXJhdG9yIFdlYkNvcmU6OkludFNpemUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgfQot
I2Vsc2UKLSAgICBXZWJTaXplKGNvbnN0IGdmeDo6U2l6ZSYgcykKLSAgICAgICAgOiB3aWR0aChz
LndpZHRoKCkpCi0gICAgICAgICwgaGVpZ2h0KHMuaGVpZ2h0KCkpCi0gICAgewotICAgIH0KLQot
ICAgIFdlYlNpemUmIG9wZXJhdG9yPShjb25zdCBnZng6OlNpemUmIHMpCi0gICAgewotICAgICAg
ICB3aWR0aCA9IHMud2lkdGgoKTsKLSAgICAgICAgaGVpZ2h0ID0gcy5oZWlnaHQoKTsKLSAgICAg
ICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJhdG9yIGdmeDo6U2l6ZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gZ2Z4OjpTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgIH0K
LSNlbmRpZgotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJTaXplJiBhLCBj
b25zdCBXZWJTaXplJiBiKQotewotICAgIHJldHVybiBhLndpZHRoID09IGIud2lkdGggJiYgYS5o
ZWlnaHQgPT0gYi5oZWlnaHQ7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2Vi
U2l6ZSYgYSwgY29uc3QgV2ViU2l6ZSYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4v
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNpemUuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125991</attachid>
            <date>2012-02-07 20:35:19 -0800</date>
            <delta_ts>2012-02-07 22:19:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78067-20120207203518.patch</filename>
            <type>text/plain</type>
            <size>63532</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBmYzQ1MzQ3YjI1NmM2
YmIxZWQyNjViOTcxNmY4ZGJlYjcxYjg3ZDA3Li41OWFkNWQxNjllZWU4MTc3Mjc4NWUxNzJhMTg5
MjZmMTNmNGUxNDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxMi0wMi0wNyAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gTW92ZSBnZW9tZXRyeSBoZWFkZXJzIGluIFBsYXRmb3JtIEFQSSB0byBQbGF0Zm9ybSBkaXJl
Y3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
MDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBtb3ZlcyBzZXZlcmFsIGdlb21ldHJ5LXJlbGF0ZWQgaGVhZGVycyBpbiB0aGUgY2hyb21pdW0g
V2ViS2l0IHBsYXRmb3JtIEFQSSB0byBQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMuCisgICAgICAg
IFRoZXNlIHJlcXVpcmUgYSBiaXQgb2YgZXh0cmEgd29yayBzaW5jZSB3aGVuIFdFQktJVF9JTVBM
RU1FTlRBVElPTiBpcyBzZXQgdGhleSAjaW5jbHVkZSBoZWFkZXJzIGZyb20KKyAgICAgICAgV2Vi
Q29yZS9wbGF0Zm9ybSBzdWNoIGFzIEludFBvaW50IHNvIHRoYXQgdGhlIGltcGxlbWVudGF0aW9u
cyBvZiBzZXZlcmFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5saW5lZC4gU2luY2Ugd2UgZG8KKyAgICAg
ICAgbm90IHdhbnQgdG8gYWRkIGFueXRoaW5nIGluIFdlYkNvcmUgdG8gdGhlIGluY2x1ZGUgcGF0
aCBvZiBwcm9qZWN0cyB0aGF0IGRlcGVuZCBvbiB0aGUgUGxhdGZvcm0gQVBJIHRoaXMgcG9zZXMg
YQorICAgICAgICBiaXQgb2YgYW4gaXNzdWUuIEkndmUgYWRkZWQgYW4gZXh0cmEgYnVpbGQgc3Rl
cCB0byBjb3B5IHRoZSBzcGVjaWZpYyBoZWFkZXJzIHVzZWQgaW50byB0aGUKKyAgICAgICAgU0hB
UkVEX0lOVEVSTUVESUFURV9ESVIgdG8gcHJlc2VydmUgdGhpcyBpbmxpbmluZy4KKyAgICAgICAg
CisgICAgICAgIEV2ZW50dWFsbHkgd2UnbGwgbW92ZSB0aGUgY3Jvc3MtcGxhdGZvcm0gY29kZSwg
aW5jbHVkaW5nIHRoZXNlIGhlYWRlcnMsIGludG8gc29tZXdoZXJlIHVuZGVyIFBsYXRmb3JtLywg
YnV0IGRvaW5nCisgICAgICAgIHRoYXQgcmVxdWlyZXMgbm9uLXRyaXZpYWwgbW9kaWZpY2F0aW9u
cyB0byBldmVyeSBidWlsZCBzeXN0ZW0gaW4gV2ViS2l0LgorCisgICAgICAgICogUGxhdGZvcm0u
Z3lwL1BsYXRmb3JtLmd5cDoKKyAgICAgICAgKiBQbGF0Zm9ybS5neXAvY29weV93ZWJjb3JlX2hl
YWRlcnMucHk6IEFkZGVkLgorICAgICAgICAoQ29weUhlYWRlcnMpOgorICAgICAgICAoTWFpbik6
CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9pbnQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRQb2ludC5oLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkZsb2F0UG9pbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGbG9hdFBvaW50OjpXZWJGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RmxvYXRQb2ludDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRQb2ludDo6
b3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBjaHJvbWl1bS9w
dWJsaWMvV2ViRmxvYXRRdWFkLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkZsb2F0UXVhZC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYkZsb2F0UXVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UXVhZDo6V2ViRmxv
YXRRdWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRRdWFkOjpvcGVyYXRvcj0pOgorICAg
ICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRSZWN0LmguCisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViRmxvYXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RmxvYXRSZWN0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0OjpXZWJG
bG9hdFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdFJlY3Q6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UmVjdDo6b3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJh
dG9yIT0pOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJQb2ludC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQb2ludC5oLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UG9pbnQ6OldlYlBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9pbnQ6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBvaW50OjpvcGVyYXRvciBXZWJDb3JlOjpJbnRQb2ludCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBvaW50OjpvcGVyYXRvciBnZng6OlBvaW50KToKKyAgICAg
ICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJSZWN0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlJlY3QuaC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVjdDo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlY3Q6OldlYlJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZWN0OjpvcGVyYXRv
ciBXZWJDb3JlOjpJbnRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVjdDo6b3BlcmF0b3Ig
Z2Z4OjpSZWN0KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJL
aXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJTaXplLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNpemUu
aC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJTaXplKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2l6ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNpemU6OldlYlNpemUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTaXplOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0
OjpXZWJTaXplOjpvcGVyYXRvciBXZWJDb3JlOjpJbnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU2l6ZTo6b3BlcmF0b3IgZ2Z4OjpTaXplKToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorCiAyMDEyLTAxLTE5ICBKb2kgU2ln
dXJkc3NvbiAgPGpvaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRW5hYmxlIHVzZSBvZiBwcmVj
b21waWxlZCBoZWFkZXJzIGluIENocm9taXVtIHBvcnQgb24gV2luZG93cy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggOGNiOGM3NmE4YzEyODlhOTViZmZlZWI0ZjRlZDVkZjUwNzQ0N2E4
ZS4uYTU4YjA4ZjAwZGU0MmU4ZTVlNTk3MmE2Njg0YzM0M2E4ZmZkY2FjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wMi0wNyAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBnZW9t
ZXRyeSBoZWFkZXJzIGluIFBsYXRmb3JtIEFQSSB0byBQbGF0Zm9ybSBkaXJlY3RvcnkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MDY3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZvcndhcmRpbmcg
aGVhZGVycyBmb3Igc2V2ZXJhbCBBUEkgdHlwZXMgbW92ZWQgaW50byBQbGF0Zm9ybS4KKworICAg
ICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFBvaW50Lmg6CisgICAgICAgICogcHVibGlj
L3BsYXRmb3JtL1dlYkZsb2F0UXVhZC5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJG
bG9hdFJlY3QuaDoKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViUG9pbnQuaDoKKyAgICAg
ICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViUmVjdC5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9y
bS9XZWJTaXplLmg6CisKIDIwMTItMDItMDcgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFJFR1JFU1NJT04ocjEwMTg1NCk6IENhdXNp
bmcgbGFyZ2UgYW1vdW50cyBvZiB1bm5lY2Vzc2FyeSByZXBhaW50aW5nLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXAgYi9Tb3VyY2UvUGxhdGZv
cm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cAppbmRleCBkM2Q0YmJlMDc3MjUxZjc0MjUxMWY5
YzZmMzFlNTYwODUzNjkyOWQzLi43YjY5ZjMzYWIxNjQ4NzJmOTdkZTE3NTU1ZTMwNzI3ZTE2ZTk0
Yjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5
cAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cApAQCAtNDMs
NiArNDMsNyBAQAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBb
CiAgICAgICAgICAgICAgICAgJy4uL2Nocm9taXVtJywKKyAgICAgICAgICAgICAgICAnPChvdXRw
dXRfZGlyKScsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2RlZmluZXMnOiBbCiAgICAg
ICAgICAgICAgICAgJ1dFQktJVF9JTVBMRU1FTlRBVElPTj0xJywKQEAgLTUwLDkgKzUxLDI4IEBA
CiAgICAgICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAgICAgICAgICAnPEAocGxhdGZvcm1f
ZmlsZXMpJywKICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAndmFyaWFibGVzJzogeworICAg
ICAgICAgICAgICAgICMgTGlzdCBvZiBoZWFkZXJzIHRoYXQgYXJlICNpbmNsdWRlZCBpbiBQbGF0
Zm9ybSBBUEkgaGVhZGVycyB0aGF0IGV4aXN0IGluc2lkZQorICAgICAgICAgICAgICAgICMgdGhl
IFdlYkNvcmUgZGlyZWN0b3J5LiBUaGVzZSBhcmUgb25seSBpbmNsdWRlZCB3aGVuIFdFQktJVF9J
TVBMRU1FTlRBVElPTj0xLgorICAgICAgICAgICAgICAgICMgU2luY2UgUGxhdGZvcm0vIGNhbid0
IGFkZCBXZWJDb3JlLyogdG8gdGhlIGluY2x1ZGUgcGF0aCwgdGhpcyBidWlsZCBzdGVwCisgICAg
ICAgICAgICAgICAgIyBjb3BpZXMgdGhlc2UgaGVhZGVycyBpbnRvIHRoZSBzaGFyZWQgaW50ZXJt
ZWRpYXRlIGRpcmVjdG9yeSBhbmQgYWRkcyB0aGF0IHRvIHRoZSBpbmNsdWRlIHBhdGguCisgICAg
ICAgICAgICAgICAgIyBUaGlzIGlzIHRlbXBvcmFyeSwgdGhlIGJldHRlciBzb2x1dGlvbiBpcyB0
byBtb3ZlIHRoZXNlIGhlYWRlcnMgaW50byB0aGUgUGxhdGZvcm0KKyAgICAgICAgICAgICAgICAj
IGRpcmVjdG9yeSBmb3IgYWxsIHBvcnRzIGFuZCBqdXN0IHVzZSB0aGVtIGFzIG5vcm1hbC4KKyAg
ICAgICAgICAgICAgICAnd2ViY29yZV9oZWFkZXJzJzogWworICAgICAgICAgICAgICAgICAgICAn
Li4vLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgnLAorICAgICAgICAg
ICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCcs
CisgICAgICAgICAgICAgICAgICAgICcuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5oJywKKyAgICAgICAgICAgICAgICAgICAgJy4uLy4uL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRTaXplLmgnLAorICAgICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oJywKKyAgICAgICAgICAgICAgICAgICAgJy4u
Ly4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oJywKKyAgICAgICAgICAgICAg
ICAgICAgJy4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50U2l6ZS5oJywKKyAgICAg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICdvdXRwdXRfZGlyJzogJzwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmNvcmVfaGVhZGVycycKKyAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKICAgICAgICAgICAgICAgICAnaW5j
bHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0nLAorICAgICAg
ICAgICAgICAgICAgICAnPChvdXRwdXRfZGlyKScKICAgICAgICAgICAgICAgICBdLAogICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwpAQCAtNjUsNiArODUsMjQgQEAK
ICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgICAgICBdLAogICAg
ICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdhY3Rpb25zJzog
WworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzog
J3BsYXRmb3JtX2FwaV9jb3B5X3dlYmNvcmVfaGVhZGVycycsCisgICAgICAgICAgICAgICAgICAg
ICdpbnB1dHMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPEAod2ViY29yZV9oZWFkZXJz
KScKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMn
OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPChvdXRwdXRfZGlyKS9JbnRQb2ludC5oJyAj
IEp1c3QgaGF2ZSB0byBkZXBlbmQgb24gYW55IG9uZSBjb3BpZWQgaGVhZGVyCisgICAgICAgICAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbCisgICAgICAgICAg
ICAgICAgICAgICAgICAncHl0aG9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdjb3B5X3dl
YmNvcmVfaGVhZGVycy5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChTSEFSRURfSU5U
RVJNRURJQVRFX0RJUikvd2ViY29yZV9oZWFkZXJzJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICc8QCh3ZWJjb3JlX2hlYWRlcnMpJworICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgICAgICAnbWVzc2FnZSc6ICdDb3B5aW5nIFdlYkNvcmUgaGVhZGVycyBuZWVkZWQgYnkg
UGxhdGZvcm0gQVBJJworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIF0KICAgICAgICAg
fQogICAgIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAvY29weV93
ZWJjb3JlX2hlYWRlcnMucHkgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL2NvcHlfd2Vi
Y29yZV9oZWFkZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhNzcyNDg4ZTBmZDQ1ZjU0ZmFmZDEzYjFiZTUx
MDkyZjFjNjNmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0u
Z3lwL2NvcHlfd2ViY29yZV9oZWFkZXJzLnB5CkBAIC0wLDAgKzEsNDkgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIi
QSBoZWxwZXIgc2NyaXB0IGZvciBjb3B5aW5nIFdlYkNvcmUvcGxhdGZvcm0gaGVhZGVycyBpbnRv
IGEgbG9jYXRpb24gdGhlIFdlYktpdCBQbGF0Zm9ybSBBUEkgaGVhZGVycyBjYW4gaW5jbHVkZSIi
IgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cwor
CisKK2RlZiBDb3B5SGVhZGVycyhkZXN0X2RpciwgaGVhZGVycyk6CisgICAgdHJ5OgorICAgICAg
ICBvcy5tYWtlZGlycyhkZXN0X2RpcikKKyAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAg
aWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZSBlCisgICAgZm9y
IGhlYWRlciBpbiBoZWFkZXJzOgorICAgICAgICBkZXN0X2ZpbGVuYW1lID0gZGVzdF9kaXIgKyBv
cy5zZXAgKyBoZWFkZXIuc3BsaXQoJy8nKVstMV0KKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGhl
YWRlciwgZGVzdF9maWxlbmFtZSkKKworCitkZWYgTWFpbihhcmd2KToKKyAgICBkZXN0X2RpciA9
IGFyZ3ZbMV0KKyAgICBoZWFkZXJzID0gYXJndlsyOl0KKyAgICBDb3B5SGVhZGVycyhkZXN0X2Rp
ciwgaGVhZGVycykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChN
YWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBp
IGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKaW5kZXggMTdlNTBhZGMxMjViZGIwNTli
ZTliNWEwY2RjY2MwYmY5ZjM0YWRmNy4uYzRkYTRkOWRjNDJhY2Y3NGZmOThjYmZhODYyMjZlZGZj
NWRjMzIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKKysrIGIv
U291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAgLTMzLDkgKzMzLDE2IEBACiAgICAgICAg
ICdwbGF0Zm9ybV9maWxlcyc6IFsKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQ1N0
cmluZy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uLmgnLAotICAg
ICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaCcsCisgICAgICAgICAgICAnY2hy
b21pdW0vcHVibGljL1dlYkZsb2F0UG9pbnQuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVi
bGljL1dlYkZsb2F0UXVhZC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxv
YXRSZWN0LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJNaW1lUmVnaXN0cnku
aCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlBvaW50LmgnLAorICAgICAgICAg
ICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJSZWN0LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJTaXplLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcu
aCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vc3JjL1dlYkNTdHJpbmcuY3BwJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9zcmMvV2ViRmxvYXRRdWFkLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vc3JjL1dlYlN0cmluZy5jcHAnLAogICAgICAgICBdCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFBvaW50LmggYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YWZjMTZi
OWM4NGU2ZjVlYTMwNDAzZWIzZTc3ZWM0ZjNlOGY5ZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFBvaW50LmgKQEAgLTAsMCArMSw5
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViRmxvYXRQb2ludF9oCisjZGVmaW5lIFdlYkZsb2F0UG9pbnRfaAorCisj
aW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVj
dCBXZWJGbG9hdFBvaW50IHsKKyAgICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisKKyAgICBXZWJG
bG9hdFBvaW50KCkKKyAgICAgICAgOiB4KDAuMGYpCisgICAgICAgICwgeSgwLjBmKQorICAgIHsK
KyAgICB9CisKKyAgICBXZWJGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpCisgICAgICAgIDog
eCh4KQorICAgICAgICAsIHkoeSkKKyAgICB7CisgICAgfQorCisjaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCisgICAgV2ViRmxvYXRQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwKQor
ICAgICAgICA6IHgocC54KCkpCisgICAgICAgICwgeShwLnkoKSkKKyAgICB7CisgICAgfQorCisg
ICAgV2ViRmxvYXRQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHAp
CisgICAgeworICAgICAgICB4ID0gcC54KCk7CisgICAgICAgIHkgPSBwLnkoKTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkZsb2F0UG9pbnQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UG9pbnQoeCwgeSk7
CisgICAgfQorI2VuZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkZs
b2F0UG9pbnQmIGEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCA9
PSBiLnggJiYgYS55ID09IGIueTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBX
ZWJGbG9hdFBvaW50JiBhLCBjb25zdCBXZWJGbG9hdFBvaW50JiBiKQoreworICAgIHJldHVybiAh
KGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRRdWFkLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UXVhZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRh
NWViMDU0MjAyZmFlNWFiNzFiN2M4OWRiMWYzMTQ1Y2Q3NjkzYzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UXVhZC5oCkBAIC0wLDAg
KzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkZsb2F0UXVhZF9oCisjZGVmaW5lIFdlYkZsb2F0UXVhZF9oCisK
KyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiV2ViUmVjdC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtYXRo
PgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJGbG9hdFF1YWQgeworICAg
IFdlYkZsb2F0UG9pbnQgcFs0XTsKKworICAgIFdlYkZsb2F0UXVhZCgpCisgICAgeworICAgIH0K
KworICAgIFdlYkZsb2F0UXVhZChjb25zdCBXZWJGbG9hdFBvaW50JiBwMCwgY29uc3QgV2ViRmxv
YXRQb2ludCYgcDEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIHAyLCBjb25zdCBXZWJGbG9hdFBvaW50
JiBwMykKKyAgICB7CisgICAgICAgIHBbMF0gPSBwMDsKKyAgICAgICAgcFsxXSA9IHAxOworICAg
ICAgICBwWzJdID0gcDI7CisgICAgICAgIHBbM10gPSBwMzsKKyAgICB9CisKKyAgICBXRUJLSVRf
RVhQT1JUIFdlYlJlY3QgZW5jbG9zaW5nUmVjdCgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisgICAgV2ViRmxvYXRRdWFkJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6Rmxv
YXRRdWFkJiBxKQorICAgIHsKKyAgICAgICAgcFswXSA9IHEucDEoKTsKKyAgICAgICAgcFsxXSA9
IHEucDIoKTsKKyAgICAgICAgcFsyXSA9IHEucDMoKTsKKyAgICAgICAgcFszXSA9IHEucDQoKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBXZWJGbG9hdFF1YWQoY29uc3QgV2Vi
Q29yZTo6RmxvYXRRdWFkJiBxKQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBxOworICAgIH0KKyNl
bmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaCBiL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRSZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg4MzUx
M2ZjZGFjNTQzZTkwMDM3NzJlNTQyMjA1YjIxYzczYmEwMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRSZWN0LmgKQEAgLTAsMCArMSwx
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYkZsb2F0UmVjdF9oCisjZGVmaW5lIFdlYkZsb2F0UmVjdF9oCisKKyNp
bmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3Qg
V2ViRmxvYXRSZWN0IHsKKyAgICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisgICAgZmxvYXQgd2lk
dGg7CisgICAgZmxvYXQgaGVpZ2h0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQorCisgICAgV2ViRmxvYXRSZWN0KCkKKyAg
ICAgICAgOiB4KDAuMGYpCisgICAgICAgICwgeSgwLjBmKQorICAgICAgICAsIHdpZHRoKDAuMGYp
CisgICAgICAgICwgaGVpZ2h0KDAuMGYpCisgICAgeworICAgIH0KKworICAgIFdlYkZsb2F0UmVj
dChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQorICAgICAgICA6
IHgoeCkKKyAgICAgICAgLCB5KHkpCisgICAgICAgICwgd2lkdGgod2lkdGgpCisgICAgICAgICwg
aGVpZ2h0KGhlaWdodCkKKyAgICB7CisgICAgfQorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
CisgICAgV2ViRmxvYXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcikKKyAgICAgICAg
OiB4KHIueCgpKQorICAgICAgICAsIHkoci55KCkpCisgICAgICAgICwgd2lkdGgoci53aWR0aCgp
KQorICAgICAgICAsIGhlaWdodChyLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJG
bG9hdFJlY3QmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHIpCisgICAgewor
ICAgICAgICB4ID0gci54KCk7CisgICAgICAgIHkgPSByLnkoKTsKKyAgICAgICAgd2lkdGggPSBy
LndpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHIuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpGbG9hdFJlY3QoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICB9CisjZW5kaWYKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
V2ViRmxvYXRSZWN0JiBhLCBjb25zdCBXZWJGbG9hdFJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEu
eCA9PSBiLnggJiYgYS55ID09IGIueSAmJiBhLndpZHRoID09IGIud2lkdGggJiYgYS5oZWlnaHQg
PT0gYi5oZWlnaHQ7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViRmxvYXRS
ZWN0JiBhLCBjb25zdCBXZWJGbG9hdFJlY3QmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJQb2ludC5oIGIvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJQb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2NjIzNjM5OGNiYzcwMzc2MGM4
YTdjZjlhMDRlMmM5NzM4ZjkzMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYlBvaW50LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlBv
aW50X2gKKyNkZWZpbmUgV2ViUG9pbnRfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2Vsc2UKKyNp
bmNsdWRlIDx1aS9nZngvcG9pbnQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RydWN0IFdlYlBvaW50IHsKKyAgICBpbnQgeDsKKyAgICBpbnQgeTsKKworICAgIFdlYlBvaW50
KCkKKyAgICAgICAgOiB4KDApCisgICAgICAgICwgeSgwKQorICAgIHsKKyAgICB9CisKKyAgICBX
ZWJQb2ludChpbnQgeCwgaW50IHkpCisgICAgICAgIDogeCh4KQorICAgICAgICAsIHkoeSkKKyAg
ICB7CisgICAgfQorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViUG9pbnQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHApCisgICAgICAgIDogeChwLngoKSkKKyAgICAgICAgLCB5
KHAueSgpKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwKQorICAgIHsKKyAgICAgICAgeCA9IHAueCgpOworICAgICAgICB5
ID0gcC55KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBX
ZWJDb3JlOjpJbnRQb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6
SW50UG9pbnQoeCwgeSk7CisgICAgfQorI2Vsc2UKKyAgICBXZWJQb2ludChjb25zdCBnZng6OlBv
aW50JiBwKQorICAgICAgICA6IHgocC54KCkpCisgICAgICAgICwgeShwLnkoKSkKKyAgICB7Cisg
ICAgfQorCisgICAgV2ViUG9pbnQmIG9wZXJhdG9yPShjb25zdCBnZng6OlBvaW50JiBwKQorICAg
IHsKKyAgICAgICAgeCA9IHAueCgpOworICAgICAgICB5ID0gcC55KCk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBnZng6OlBvaW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBnZng6OlBvaW50KHgsIHkpOworICAgIH0KKyNlbmRpZgorfTsKKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJQb2ludCYgYSwgY29uc3QgV2ViUG9pbnQm
IGIpCit7CisgICAgcmV0dXJuIGEueCA9PSBiLnggJiYgYS55ID09IGIueTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJQb2ludCYgYSwgY29uc3QgV2ViUG9pbnQmIGIpCit7
CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJSZWN0
LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlJlY3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wNDViN2E4ZWIzNzljNGRkNmMxMGU4MjRjZDFiMjI4NDg0NGVjNWE4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJSZWN0LmgKQEAgLTAsMCAr
MSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlJlY3RfaAorI2RlZmluZSBXZWJSZWN0X2gKKworI2luY2x1ZGUg
IldlYkNvbW1vbi5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2Vsc2UKKyNpbmNsdWRlIDx1aS9nZngvcmVjdC5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViUmVjdCB7CisgICAgaW50IHg7CisgICAgaW50IHk7
CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiB3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwOyB9CisKKyAgICBXZWJSZWN0
KCkKKyAgICAgICAgOiB4KDApCisgICAgICAgICwgeSgwKQorICAgICAgICAsIHdpZHRoKDApCisg
ICAgICAgICwgaGVpZ2h0KDApCisgICAgeworICAgIH0KKworICAgIFdlYlJlY3QoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgICAgIDogeCh4KQorICAgICAgICAsIHko
eSkKKyAgICAgICAgLCB3aWR0aCh3aWR0aCkKKyAgICAgICAgLCBoZWlnaHQoaGVpZ2h0KQorICAg
IHsKKyAgICB9CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJSZWN0KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHIpCisgICAgICAgIDogeChyLngoKSkKKyAgICAgICAgLCB5KHIu
eSgpKQorICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKKyAgICAgICAgLCBoZWlnaHQoci5oZWln
aHQoKSkKKyAgICB7CisgICAgfQorCisgICAgV2ViUmVjdCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHIpCisgICAgeworICAgICAgICB4ID0gci54KCk7CisgICAgICAgIHkgPSBy
LnkoKTsKKyAgICAgICAgd2lkdGggPSByLndpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHIuaGVp
Z2h0KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBXZWJD
b3JlOjpJbnRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRS
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKyNlbHNlCisgICAgV2ViUmVjdChjb25z
dCBnZng6OlJlY3QmIHIpCisgICAgICAgIDogeChyLngoKSkKKyAgICAgICAgLCB5KHIueSgpKQor
ICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKKyAgICAgICAgLCBoZWlnaHQoci5oZWlnaHQoKSkK
KyAgICB7CisgICAgfQorCisgICAgV2ViUmVjdCYgb3BlcmF0b3I9KGNvbnN0IGdmeDo6UmVjdCYg
cikKKyAgICB7CisgICAgICAgIHggPSByLngoKTsKKyAgICAgICAgeSA9IHIueSgpOworICAgICAg
ICB3aWR0aCA9IHIud2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gci5oZWlnaHQoKTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIGdmeDo6UmVjdCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZ2Z4OjpSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
ICAgIH0KKyNlbmRpZgorfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJSZWN0
JiBhLCBjb25zdCBXZWJSZWN0JiBiKQoreworICAgIHJldHVybiBhLnggPT0gYi54ICYmIGEueSA9
PSBiLnkgJiYgYS53aWR0aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0OworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYlJlY3QmIGEsIGNvbnN0IFdlYlJlY3Qm
IGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJTaXplLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNpemUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45NGE1MzY1NGQ1ODc0MTQyMjMwZmYzZWU4NjEzZWJlY2Y1NTZhZWVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTaXplLmgKQEAg
LTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNpemVfaAorI2RlZmluZSBXZWJTaXplX2gKKworI2lu
Y2x1ZGUgIldlYkNvbW1vbi5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDx1aS9nZngvc2l6ZS5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViU2l6ZSB7CisgICAgaW50IHdpZHRoOwor
ICAgIGludCBoZWlnaHQ7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB3aWR0
aCA8PSAwIHx8IGhlaWdodCA8PSAwOyB9CisKKyAgICBXZWJTaXplKCkKKyAgICAgICAgOiB3aWR0
aCgwKQorICAgICAgICAsIGhlaWdodCgwKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJTaXplKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICAgICAgOiB3aWR0aCh3aWR0aCkKKyAgICAgICAgLCBo
ZWlnaHQoaGVpZ2h0KQorICAgIHsKKyAgICB9CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
KyAgICBXZWJTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHMpCisgICAgICAgIDogd2lkdGgo
cy53aWR0aCgpKQorICAgICAgICAsIGhlaWdodChzLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisK
KyAgICBXZWJTaXplJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcykKKyAgICB7
CisgICAgICAgIHdpZHRoID0gcy53aWR0aCgpOworICAgICAgICBoZWlnaHQgPSBzLmhlaWdodCgp
OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6
SW50U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisjZWxzZQorICAgIFdlYlNpemUoY29uc3QgZ2Z4OjpTaXpl
JiBzKQorICAgICAgICA6IHdpZHRoKHMud2lkdGgoKSkKKyAgICAgICAgLCBoZWlnaHQocy5oZWln
aHQoKSkKKyAgICB7CisgICAgfQorCisgICAgV2ViU2l6ZSYgb3BlcmF0b3I9KGNvbnN0IGdmeDo6
U2l6ZSYgcykKKyAgICB7CisgICAgICAgIHdpZHRoID0gcy53aWR0aCgpOworICAgICAgICBoZWln
aHQgPSBzLmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3Bl
cmF0b3IgZ2Z4OjpTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZng6OlNpemUo
d2lkdGgsIGhlaWdodCk7CisgICAgfQorI2VuZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFdlYlNpemUmIGEsIGNvbnN0IFdlYlNpemUmIGIpCit7CisgICAgcmV0dXJuIGEu
d2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodDsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBXZWJTaXplJiBhLCBjb25zdCBXZWJTaXplJiBiKQoreworICAg
IHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViRmxvYXRRdWFkLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViRmxvYXRRdWFkLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42N2NiZGM2MDEwZTJmYmYyZmIzZGViMzE2Y2QwZmNmNDQ2ZjlhZmFhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJGbG9hdFF1YWQuY3BwCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkZs
b2F0UXVhZC5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hdGguaD4KKwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlJlY3QgV2Vi
RmxvYXRRdWFkOjplbmNsb3NpbmdSZWN0KCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRp
Y19jYXN0PGludD4oZmxvb3JmKG1pbihtaW4obWluKHBbMF0ueCwgcFsxXS54KSwgcFsyXS54KSwg
cFszXS54KSkpOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihtaW4obWlu
KG1pbihwWzBdLnksIHBbMV0ueSksIHBbMl0ueSksIHBbM10ueSkpKTsKKyAgICBpbnQgcmlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG1heChtYXgobWF4KHBbMF0ueCwgcFsxXS54KSwgcFsy
XS54KSwgcFszXS54KSkpOworICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxm
KG1heChtYXgobWF4KHBbMF0ueSwgcFsxXS55KSwgcFsyXS55KSwgcFszXS55KSkpOworCisgICAg
cmV0dXJuIFdlYlJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4
IDY4YzliYjJhNTk4YTY5NWNiZDYxMjk5OTBkOWIyZjk0ZjFkNzlhYWUuLjhkZDJkZGU2ZTYxMTBm
ZjBmNmIzYjQ5NmE5NWM5ZTMyZWRhZDk0YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTUzOCw3ICs1MzgsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmlsZUNob29zZXJD
b21wbGV0aW9uSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVTeXN0ZW1DYWxs
YmFja3NJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbC5oJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYkZsb2F0UXVhZC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViRm9udENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJGb250RGVzY3JpcHRpb24uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRJ
bXBsLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJGbG9hdFBvaW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJGbG9hdFBvaW50LmgKaW5kZXggNGFmYzE2YjljODRlNmY1ZWEzMDQwM2ViM2U3N2Vj
NGYzZThmOWZiOS4uM2ZkNGM2Yzg2ZGM2NjE1YTIwMmY0Njg5M2ZmMTJiODI1N2MwZDY0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRQ
b2ludC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkZs
b2F0UG9pbnQuaApAQCAtMSw5MSArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgV2ViRmxvYXRQb2ludF9oCi0jZGVmaW5lIFdlYkZsb2F0UG9pbnRfaAotCi0jaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCi0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBXZWJG
bG9hdFBvaW50IHsKLSAgICBmbG9hdCB4OwotICAgIGZsb2F0IHk7Ci0KLSAgICBXZWJGbG9hdFBv
aW50KCkKLSAgICAgICAgOiB4KDAuMGYpCi0gICAgICAgICwgeSgwLjBmKQotICAgIHsKLSAgICB9
Ci0KLSAgICBXZWJGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgICAgIDogeCh4KQot
ICAgICAgICAsIHkoeSkKLSAgICB7Ci0gICAgfQotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
Ci0gICAgV2ViRmxvYXRQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwKQotICAgICAg
ICA6IHgocC54KCkpCi0gICAgICAgICwgeShwLnkoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgV2Vi
RmxvYXRQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHApCi0gICAg
ewotICAgICAgICB4ID0gcC54KCk7Ci0gICAgICAgIHkgPSBwLnkoKTsKLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJhdG9yIFdlYkNvcmU6OkZsb2F0UG9pbnQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UG9pbnQoeCwgeSk7Ci0gICAg
fQotI2VuZGlmCi19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkZsb2F0UG9p
bnQmIGEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuIGEueCA9PSBiLngg
JiYgYS55ID09IGIueTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJGbG9h
dFBvaW50JiBhLCBjb25zdCBXZWJGbG9hdFBvaW50JiBiKQotewotICAgIHJldHVybiAhKGEgPT0g
Yik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKKyNpbmNsdWRlICIuLi8u
Li8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRQb2ludC5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRRdWFk
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFF1YWQu
aAppbmRleCBkYTVlYjA1NDIwMmZhZTVhYjcxYjdjODlkYjFmMzE0NWNkNzY5M2MxLi41ZDA3Zjky
YjUwNTBkY2FmN2IwMzQ5OTMxMThlMjcyYWE3YmU5MWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFF1YWQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFF1YWQuaApAQCAtMSw4MiAr
MSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViRmxvYXRRdWFkX2gK
LSNkZWZpbmUgV2ViRmxvYXRRdWFkX2gKLQotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotI2luY2x1
ZGUgIldlYkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJXZWJSZWN0LmgiCi0KLSNpbmNsdWRlIDxh
bGdvcml0aG0+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
LSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RydWN0IFdlYkZsb2F0UXVhZCB7Ci0gICAgV2ViRmxvYXRQb2ludCBwWzRdOwotCi0gICAgV2Vi
RmxvYXRRdWFkKCkKLSAgICB7Ci0gICAgfQotCi0gICAgV2ViRmxvYXRRdWFkKGNvbnN0IFdlYkZs
b2F0UG9pbnQmIHAwLCBjb25zdCBXZWJGbG9hdFBvaW50JiBwMSwgY29uc3QgV2ViRmxvYXRQb2lu
dCYgcDIsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIHAzKQotICAgIHsKLSAgICAgICAgcFswXSA9IHAw
OwotICAgICAgICBwWzFdID0gcDE7Ci0gICAgICAgIHBbMl0gPSBwMjsKLSAgICAgICAgcFszXSA9
IHAzOwotICAgIH0KLQotICAgIFdFQktJVF9FWFBPUlQgV2ViUmVjdCBlbmNsb3NpbmdSZWN0KCkg
Y29uc3Q7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJGbG9hdFF1YWQmIG9w
ZXJhdG9yPShjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIHEpCi0gICAgewotICAgICAgICBwWzBd
ID0gcS5wMSgpOwotICAgICAgICBwWzFdID0gcS5wMigpOwotICAgICAgICBwWzJdID0gcS5wMygp
OwotICAgICAgICBwWzNdID0gcS5wNCgpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
ICAgIFdlYkZsb2F0UXVhZChjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIHEpCi0gICAgewotICAg
ICAgICAqdGhpcyA9IHE7Ci0gICAgfQotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYkZsb2F0UXVhZC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRSZWN0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFJlY3QuaAppbmRleCBhODgzNTEzZmNkYWM1NDNlOTAwMzc3
MmU1NDIyMDViMjFjNzNiYTAzLi5jNmRkNTRmZGJiNzAwMTZlNDE1YmJlMWRkNzI4NDM0YjkxMzAx
Njg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJGbG9hdFJlY3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9y
bS9XZWJGbG9hdFJlY3QuaApAQCAtMSwxMDMgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgogICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIFdlYkZsb2F0UmVjdF9oCi0jZGVmaW5lIFdlYkZsb2F0UmVjdF9oCi0KLSNp
bmNsdWRlICJXZWJDb21tb24uaCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3Qg
V2ViRmxvYXRSZWN0IHsKLSAgICBmbG9hdCB4OwotICAgIGZsb2F0IHk7Ci0gICAgZmxvYXQgd2lk
dGg7Ci0gICAgZmxvYXQgaGVpZ2h0OwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQotCi0gICAgV2ViRmxvYXRSZWN0KCkKLSAg
ICAgICAgOiB4KDAuMGYpCi0gICAgICAgICwgeSgwLjBmKQotICAgICAgICAsIHdpZHRoKDAuMGYp
Ci0gICAgICAgICwgaGVpZ2h0KDAuMGYpCi0gICAgewotICAgIH0KLQotICAgIFdlYkZsb2F0UmVj
dChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQotICAgICAgICA6
IHgoeCkKLSAgICAgICAgLCB5KHkpCi0gICAgICAgICwgd2lkdGgod2lkdGgpCi0gICAgICAgICwg
aGVpZ2h0KGhlaWdodCkKLSAgICB7Ci0gICAgfQotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
Ci0gICAgV2ViRmxvYXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcikKLSAgICAgICAg
OiB4KHIueCgpKQotICAgICAgICAsIHkoci55KCkpCi0gICAgICAgICwgd2lkdGgoci53aWR0aCgp
KQotICAgICAgICAsIGhlaWdodChyLmhlaWdodCgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJG
bG9hdFJlY3QmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHIpCi0gICAgewot
ICAgICAgICB4ID0gci54KCk7Ci0gICAgICAgIHkgPSByLnkoKTsKLSAgICAgICAgd2lkdGggPSBy
LndpZHRoKCk7Ci0gICAgICAgIGhlaWdodCA9IHIuaGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBXZWJDb3JlOjpGbG9hdFJlY3QoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICB9Ci0jZW5kaWYKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
V2ViRmxvYXRSZWN0JiBhLCBjb25zdCBXZWJGbG9hdFJlY3QmIGIpCi17Ci0gICAgcmV0dXJuIGEu
eCA9PSBiLnggJiYgYS55ID09IGIueSAmJiBhLndpZHRoID09IGIud2lkdGggJiYgYS5oZWlnaHQg
PT0gYi5oZWlnaHQ7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViRmxvYXRS
ZWN0JiBhLCBjb25zdCBXZWJGbG9hdFJlY3QmIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgorI2luY2x1ZGUgIi4uLy4uLy4u
Ly4uL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlBvaW50LmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQb2ludC5oCmluZGV4IDc2NjIz
NjM5OGNiYzcwMzc2MGM4YTdjZjlhMDRlMmM5NzM4ZjkzMGYuLjNlNjRlNDNjZWU5YWEzMzI5ODY1
NmVlZDk2NWEwMTQxOTA2ZDllZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYlBvaW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvcGxhdGZvcm0vV2ViUG9pbnQuaApAQCAtMSwxMTEgKzEsMjcgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgogICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlBvaW50X2gKLSNkZWZpbmUgV2ViUG9pbnRfaAorI2lu
Y2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJQb2ludC5oIgog
Ci0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSNp
bmNsdWRlICJJbnRQb2ludC5oIgotI2Vsc2UKLSNpbmNsdWRlIDx1aS9nZngvcG9pbnQuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IFdlYlBvaW50IHsKLSAgICBpbnQg
eDsKLSAgICBpbnQgeTsKLQotICAgIFdlYlBvaW50KCkKLSAgICAgICAgOiB4KDApCi0gICAgICAg
ICwgeSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJQb2ludChpbnQgeCwgaW50IHkpCi0gICAg
ICAgIDogeCh4KQotICAgICAgICAsIHkoeSkKLSAgICB7Ci0gICAgfQotCi0jaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCi0gICAgV2ViUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHApCi0g
ICAgICAgIDogeChwLngoKSkKLSAgICAgICAgLCB5KHAueSgpKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBXZWJQb2ludCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwKQotICAgIHsK
LSAgICAgICAgeCA9IHAueCgpOwotICAgICAgICB5ID0gcC55KCk7Ci0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBXZWJDb3JlOjpJbnRQb2ludCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQoeCwgeSk7Ci0gICAgfQotI2Vs
c2UKLSAgICBXZWJQb2ludChjb25zdCBnZng6OlBvaW50JiBwKQotICAgICAgICA6IHgocC54KCkp
Ci0gICAgICAgICwgeShwLnkoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgV2ViUG9pbnQmIG9wZXJh
dG9yPShjb25zdCBnZng6OlBvaW50JiBwKQotICAgIHsKLSAgICAgICAgeCA9IHAueCgpOwotICAg
ICAgICB5ID0gcC55KCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBvcGVy
YXRvciBnZng6OlBvaW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZng6OlBvaW50
KHgsIHkpOwotICAgIH0KLSNlbmRpZgotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBXZWJQb2ludCYgYSwgY29uc3QgV2ViUG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuIGEueCA9PSBi
LnggJiYgYS55ID09IGIueTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJQ
b2ludCYgYSwgY29uc3QgV2ViUG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUmVjdC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUmVjdC5oCmluZGV4IDA0NWI3YThlYjM3OWM0ZGQ2
YzEwZTgyNGNkMWIyMjg0ODQ0ZWM1YTguLmMxY2VkMDA3MTk1YzQ2OWMzZDM5YWJhNDc5ODIwMWEx
Mjg0NDQ1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRm
b3JtL1dlYlJlY3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9y
bS9XZWJSZWN0LmgKQEAgLTEsMTI3ICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKICAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBXZWJSZWN0X2gKLSNkZWZpbmUgV2ViUmVjdF9oCi0KLSNpbmNsdWRlICJXZWJDb21t
b24uaCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNlbHNlCi0jaW5jbHVkZSA8dWkvZ2Z4L3JlY3QuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotc3RydWN0IFdlYlJlY3QgewotICAgIGludCB4OwotICAgIGludCB5OwotICAgIGlu
dCB3aWR0aDsKLSAgICBpbnQgaGVpZ2h0OwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQotCi0gICAgV2ViUmVjdCgpCi0gICAg
ICAgIDogeCgwKQotICAgICAgICAsIHkoMCkKLSAgICAgICAgLCB3aWR0aCgwKQotICAgICAgICAs
IGhlaWdodCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJSZWN0KGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQotICAgICAgICA6IHgoeCkKLSAgICAgICAgLCB5KHkpCi0gICAg
ICAgICwgd2lkdGgod2lkdGgpCi0gICAgICAgICwgaGVpZ2h0KGhlaWdodCkKLSAgICB7Ci0gICAg
fQotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViUmVjdChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByKQotICAgICAgICA6IHgoci54KCkpCi0gICAgICAgICwgeShyLnkoKSkKLSAg
ICAgICAgLCB3aWR0aChyLndpZHRoKCkpCi0gICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0KCkpCi0g
ICAgewotICAgIH0KLQotICAgIFdlYlJlY3QmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByKQotICAgIHsKLSAgICAgICAgeCA9IHIueCgpOwotICAgICAgICB5ID0gci55KCk7Ci0g
ICAgICAgIHdpZHRoID0gci53aWR0aCgpOwotICAgICAgICBoZWlnaHQgPSByLmhlaWdodCgpOwot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgb3BlcmF0b3IgV2ViQ29yZTo6SW50
UmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0jZWxzZQotICAgIFdlYlJlY3QoY29uc3QgZ2Z4OjpS
ZWN0JiByKQotICAgICAgICA6IHgoci54KCkpCi0gICAgICAgICwgeShyLnkoKSkKLSAgICAgICAg
LCB3aWR0aChyLndpZHRoKCkpCi0gICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0KCkpCi0gICAgewot
ICAgIH0KLQotICAgIFdlYlJlY3QmIG9wZXJhdG9yPShjb25zdCBnZng6OlJlY3QmIHIpCi0gICAg
ewotICAgICAgICB4ID0gci54KCk7Ci0gICAgICAgIHkgPSByLnkoKTsKLSAgICAgICAgd2lkdGgg
PSByLndpZHRoKCk7Ci0gICAgICAgIGhlaWdodCA9IHIuaGVpZ2h0KCk7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0KLSAgICBvcGVyYXRvciBnZng6OlJlY3QoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGdmeDo6UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0j
ZW5kaWYKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViUmVjdCYgYSwgY29u
c3QgV2ViUmVjdCYgYikKLXsKLSAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55ICYm
IGEud2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodDsKLX0KLQotaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJSZWN0JiBhLCBjb25zdCBXZWJSZWN0JiBiKQotewot
ICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViUmVj
dC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0v
V2ViU2l6ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViU2l6
ZS5oCmluZGV4IDk0YTUzNjU0ZDU4NzQxNDIyMzBmZjNlZTg2MTNlYmVjZjU1NmFlZWUuLmI4NTI2
YTExOGU3M2JkYWMxODNkYzBlMTU0YzA5YWJhZWFiYjZmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNpemUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJTaXplLmgKQEAgLTEsMTEzICsxLDI2IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKICAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJTaXplX2gKLSNkZWZpbmUgV2Vi
U2l6ZV9oCi0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNlbHNlCi0jaW5jbHVkZSA8dWkvZ2Z4L3NpemUu
aD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IFdlYlNpemUgewotICAg
IGludCB3aWR0aDsKLSAgICBpbnQgaGVpZ2h0OwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQotCi0gICAgV2ViU2l6ZSgpCi0g
ICAgICAgIDogd2lkdGgoMCkKLSAgICAgICAgLCBoZWlnaHQoMCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgV2ViU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIDogd2lkdGgod2lkdGgp
Ci0gICAgICAgICwgaGVpZ2h0KGhlaWdodCkKLSAgICB7Ci0gICAgfQotCi0jaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCi0gICAgV2ViU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzKQotICAg
ICAgICA6IHdpZHRoKHMud2lkdGgoKSkKLSAgICAgICAgLCBoZWlnaHQocy5oZWlnaHQoKSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgV2ViU2l6ZSYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHMpCi0gICAgewotICAgICAgICB3aWR0aCA9IHMud2lkdGgoKTsKLSAgICAgICAgaGVpZ2h0
ID0gcy5oZWlnaHQoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJh
dG9yIFdlYkNvcmU6OkludFNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkludFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgfQotI2Vsc2UKLSAgICBXZWJTaXplKGNv
bnN0IGdmeDo6U2l6ZSYgcykKLSAgICAgICAgOiB3aWR0aChzLndpZHRoKCkpCi0gICAgICAgICwg
aGVpZ2h0KHMuaGVpZ2h0KCkpCi0gICAgewotICAgIH0KLQotICAgIFdlYlNpemUmIG9wZXJhdG9y
PShjb25zdCBnZng6OlNpemUmIHMpCi0gICAgewotICAgICAgICB3aWR0aCA9IHMud2lkdGgoKTsK
LSAgICAgICAgaGVpZ2h0ID0gcy5oZWlnaHQoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IH0KLQotICAgIG9wZXJhdG9yIGdmeDo6U2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gZ2Z4OjpTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLSNlbmRpZgotfTsKLQotaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJTaXplJiBhLCBjb25zdCBXZWJTaXplJiBiKQotewot
ICAgIHJldHVybiBhLndpZHRoID09IGIud2lkdGggJiYgYS5oZWlnaHQgPT0gYi5oZWlnaHQ7Ci19
Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViU2l6ZSYgYSwgY29uc3QgV2ViU2l6
ZSYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYlNpemUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkZsb2F0UXVhZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdFF1YWQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTdkNjhhOThhYzQ1MTU5ZjFhZDE1
ZDMzOThhYzNmZTA5MTA1ODBmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0UXVhZC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
InBsYXRmb3JtL1dlYkZsb2F0UXVhZC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViUmVj
dCBXZWJGbG9hdFF1YWQ6OmVuY2xvc2luZ1JlY3QoKSBjb25zdAotewotICAgIGludCBsZWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihmbG9vcmYoc3RkOjptaW4oc3RkOjptaW4oc3RkOjptaW4ocFswXS54
LCBwWzFdLngpLCBwWzJdLngpLCBwWzNdLngpKSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0
PGludD4oZmxvb3JmKHN0ZDo6bWluKHN0ZDo6bWluKHN0ZDo6bWluKHBbMF0ueSwgcFsxXS55KSwg
cFsyXS55KSwgcFszXS55KSkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4oY2Vp
bGYoc3RkOjptYXgoc3RkOjptYXgoc3RkOjptYXgocFswXS54LCBwWzFdLngpLCBwWzJdLngpLCBw
WzNdLngpKSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjpt
YXgoc3RkOjptYXgoc3RkOjptYXgocFswXS55LCBwWzFdLnkpLCBwWzJdLnkpLCBwWzNdLnkpKSk7
Ci0KLSAgICByZXR1cm4gV2ViUmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0g
dG9wKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126002</attachid>
            <date>2012-02-07 22:20:01 -0800</date>
            <delta_ts>2012-02-08 10:29:34 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78067-20120207222000.patch</filename>
            <type>text/plain</type>
            <size>63492</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBmYzQ1MzQ3YjI1NmM2
YmIxZWQyNjViOTcxNmY4ZGJlYjcxYjg3ZDA3Li4zZjk2ZmYzZDA4YTFlYTRkZjhhMzg5MGNkZGMz
M2EyNzczNGRhYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxMi0wMi0wNyAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gTW92ZSBnZW9tZXRyeSBoZWFkZXJzIGluIFBsYXRmb3JtIEFQSSB0byBQbGF0Zm9ybSBkaXJl
Y3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
MDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBUaGlzIG1v
dmVzIHNldmVyYWwgZ2VvbWV0cnktcmVsYXRlZCBoZWFkZXJzIGluIHRoZSBjaHJvbWl1bSBXZWJL
aXQgcGxhdGZvcm0gQVBJIHRvIFBsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy4KKyAgICAgICAgVGhl
c2UgcmVxdWlyZSBhIGJpdCBvZiBleHRyYSB3b3JrIHNpbmNlIHdoZW4gV0VCS0lUX0lNUExFTUVO
VEFUSU9OIGlzIHNldCB0aGV5ICNpbmNsdWRlIGhlYWRlcnMgZnJvbQorICAgICAgICBXZWJDb3Jl
L3BsYXRmb3JtIHN1Y2ggYXMgSW50UG9pbnQgc28gdGhhdCB0aGUgaW1wbGVtZW50YXRpb25zIG9m
IHNldmVyYWwgZnVuY3Rpb25zIGNhbiBiZSBpbmxpbmVkLiBTaW5jZSB3ZSBkbworICAgICAgICBu
b3Qgd2FudCB0byBhZGQgYW55dGhpbmcgaW4gV2ViQ29yZSB0byB0aGUgaW5jbHVkZSBwYXRoIG9m
IHByb2plY3RzIHRoYXQgZGVwZW5kIG9uIHRoZSBQbGF0Zm9ybSBBUEkgdGhpcyBwb3NlcyBhCisg
ICAgICAgIGJpdCBvZiBhbiBpc3N1ZS4gSSd2ZSBhZGRlZCBhbiBleHRyYSBidWlsZCBzdGVwIHRv
IGNvcHkgdGhlIHNwZWNpZmljIGhlYWRlcnMgdXNlZCBpbnRvIHRoZQorICAgICAgICBTSEFSRURf
SU5URVJNRURJQVRFX0RJUiB0byBwcmVzZXJ2ZSB0aGlzIGlubGluaW5nLgorICAgICAgICAKKyAg
ICAgICAgRXZlbnR1YWxseSB3ZSdsbCBtb3ZlIHRoZSBjcm9zcy1wbGF0Zm9ybSBjb2RlLCBpbmNs
dWRpbmcgdGhlc2UgaGVhZGVycywgaW50byBzb21ld2hlcmUgdW5kZXIgUGxhdGZvcm0vLCBidXQg
ZG9pbmcKKyAgICAgICAgdGhhdCByZXF1aXJlcyBub24tdHJpdmlhbCBtb2RpZmljYXRpb25zIHRv
IGV2ZXJ5IGJ1aWxkIHN5c3RlbSBpbiBXZWJLaXQuCisKKyAgICAgICAgKiBQbGF0Zm9ybS5neXAv
UGxhdGZvcm0uZ3lwOgorICAgICAgICAqIFBsYXRmb3JtLmd5cC9jb3B5X3dlYmNvcmVfaGVhZGVy
cy5weTogQWRkZWQuCisgICAgICAgIChDb3B5SGVhZGVycyk6CisgICAgICAgIChNYWluKToKKyAg
ICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRQb2ludC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFBvaW50LmguCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZsb2F0UG9pbnQ6OldlYkZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9h
dFBvaW50OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdFBvaW50OjpvcGVy
YXRvciBXZWJDb3JlOjpGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIGNocm9taXVtL3B1Ymxp
Yy9XZWJGbG9hdFF1YWQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvcGxhdGZvcm0vV2ViRmxvYXRRdWFkLmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViRmxvYXRRdWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRRdWFkOjpXZWJGbG9hdFF1
YWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdFF1YWQ6Om9wZXJhdG9yPSk6CisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFJlY3QuaC4KKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJGbG9hdFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9h
dFJlY3Q6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdFJlY3Q6OldlYkZsb2F0
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UmVjdDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRmxvYXRSZWN0OjpvcGVyYXRvciBXZWJDb3JlOjpGbG9hdFJlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3Ih
PSk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlBvaW50Lmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlBvaW50LmguCisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb2lu
dDo6V2ViUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb2ludDo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9pbnQ6Om9wZXJhdG9yIFdlYkNvcmU6OkludFBvaW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9pbnQ6Om9wZXJhdG9yIGdmeDo6UG9pbnQpOgorICAgICAgICAo
V2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAg
ICAgICogY2hyb21pdW0vcHVibGljL1dlYlJlY3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUmVjdC5oLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYlJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZWN0Ojppc0VtcHR5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVjdDo6V2ViUmVjdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlY3Q6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlY3Q6Om9wZXJhdG9yIFdl
YkNvcmU6OkludFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZWN0OjpvcGVyYXRvciBnZng6
OlJlY3QpOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6
b3BlcmF0b3IhPSk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlNpemUuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViU2l6ZS5oLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlNpemUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJTaXplOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2l6ZTo6V2ViU2l6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNpemU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNpemU6Om9wZXJhdG9yIFdlYkNvcmU6OkludFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
aXplOjpvcGVyYXRvciBnZng6OlNpemUpOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisKIDIwMTItMDEtMTkgIEpvaSBTaWd1cmRz
c29uICA8am9pQGNocm9taXVtLm9yZz4KIAogICAgICAgICBFbmFibGUgdXNlIG9mIHByZWNvbXBp
bGVkIGhlYWRlcnMgaW4gQ2hyb21pdW0gcG9ydCBvbiBXaW5kb3dzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCBhNTNmZDFlZWJjM2E4YWFhOTBiMTIzYzI1ZGRiMGVmOWEzMWFiMWY5Li5h
MDQ2OGExNjNiN2ZkMDA4OTA3YWNiODNhNzdiZjkzMDVlNTA0ODkyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAyLTA3ICBKYW1lcyBSb2JpbnNvbiAg
PGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGdlb21ldHJ5
IGhlYWRlcnMgaW4gUGxhdGZvcm0gQVBJIHRvIFBsYXRmb3JtIGRpcmVjdG9yeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgwNjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgIEFkZCBmb3J3YXJkaW5nIGhlYWRlcnMg
Zm9yIHNldmVyYWwgQVBJIHR5cGVzIG1vdmVkIGludG8gUGxhdGZvcm0uCisKKyAgICAgICAgKiBw
dWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRQb2ludC5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9y
bS9XZWJGbG9hdFF1YWQuaDoKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViRmxvYXRSZWN0
Lmg6CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYlBvaW50Lmg6CisgICAgICAgICogcHVi
bGljL3BsYXRmb3JtL1dlYlJlY3QuaDoKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViU2l6
ZS5oOgorCiAyMDEyLTAyLTA3ICBHcmVnZyBUYXZhcmVzICA8Z21hbkBnb29nbGUuY29tPgogCiAg
ICAgICAgIFBsdW1iIHRocm91Z2ggd2ViR0xFcnJvcnNUb0NvbnNvbGVFbmFibGUgaW4gV2ViU2V0
dGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAvUGxhdGZvcm0u
Z3lwIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXAKaW5kZXggZDNk
NGJiZTA3NzI1MWY3NDI1MTFmOWM2ZjMxZTU2MDg1MzY5MjlkMy4uN2I2OWYzM2FiMTY0ODcyZjk3
ZGUxNzU1NWUzMDcyN2UxNmU5NGI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL1BsYXRm
b3JtLmd5cC9QbGF0Zm9ybS5neXAKKysrIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cC9Q
bGF0Zm9ybS5neXAKQEAgLTQzLDYgKzQzLDcgQEAKICAgICAgICAgICAgIF0sCiAgICAgICAgICAg
ICAnaW5jbHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAgICcuLi9jaHJvbWl1bScsCisgICAg
ICAgICAgICAgICAgJzwob3V0cHV0X2RpciknLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAg
ICdkZWZpbmVzJzogWwogICAgICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJT049MScs
CkBAIC01MCw5ICs1MSwyOCBAQAogICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCiAgICAgICAgICAg
ICAgICAgJzxAKHBsYXRmb3JtX2ZpbGVzKScsCiAgICAgICAgICAgICBdLAorICAgICAgICAgICAg
J3ZhcmlhYmxlcyc6IHsKKyAgICAgICAgICAgICAgICAjIExpc3Qgb2YgaGVhZGVycyB0aGF0IGFy
ZSAjaW5jbHVkZWQgaW4gUGxhdGZvcm0gQVBJIGhlYWRlcnMgdGhhdCBleGlzdCBpbnNpZGUKKyAg
ICAgICAgICAgICAgICAjIHRoZSBXZWJDb3JlIGRpcmVjdG9yeS4gVGhlc2UgYXJlIG9ubHkgaW5j
bHVkZWQgd2hlbiBXRUJLSVRfSU1QTEVNRU5UQVRJT049MS4KKyAgICAgICAgICAgICAgICAjIFNp
bmNlIFBsYXRmb3JtLyBjYW4ndCBhZGQgV2ViQ29yZS8qIHRvIHRoZSBpbmNsdWRlIHBhdGgsIHRo
aXMgYnVpbGQgc3RlcAorICAgICAgICAgICAgICAgICMgY29waWVzIHRoZXNlIGhlYWRlcnMgaW50
byB0aGUgc2hhcmVkIGludGVybWVkaWF0ZSBkaXJlY3RvcnkgYW5kIGFkZHMgdGhhdCB0byB0aGUg
aW5jbHVkZSBwYXRoLgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyB0ZW1wb3JhcnksIHRoZSBi
ZXR0ZXIgc29sdXRpb24gaXMgdG8gbW92ZSB0aGVzZSBoZWFkZXJzIGludG8gdGhlIFBsYXRmb3Jt
CisgICAgICAgICAgICAgICAgIyBkaXJlY3RvcnkgZm9yIGFsbCBwb3J0cyBhbmQganVzdCB1c2Ug
dGhlbSBhcyBub3JtYWwuCisgICAgICAgICAgICAgICAgJ3dlYmNvcmVfaGVhZGVycyc6IFsKKyAg
ICAgICAgICAgICAgICAgICAgJy4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oJywKKyAgICAgICAgICAgICAgICAgICAgJy4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRRdWFkLmgnLAorICAgICAgICAgICAgICAgICAgICAnLi4vLi4vV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCcsCisgICAgICAgICAgICAgICAgICAgICcuLi8u
Li9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oJywKKyAgICAgICAgICAgICAg
ICAgICAgJy4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCcsCisgICAg
ICAgICAgICAgICAgICAgICcuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3Qu
aCcsCisgICAgICAgICAgICAgICAgICAgICcuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFNpemUuaCcsCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAnb3V0cHV0
X2Rpcic6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlX2hlYWRlcnMnCisgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7CiAg
ICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKICAgICAgICAgICAgICAgICAgICAgJy4u
L2Nocm9taXVtJywKKyAgICAgICAgICAgICAgICAgICAgJzwob3V0cHV0X2RpciknCiAgICAgICAg
ICAgICAgICAgXSwKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsK
QEAgLTY1LDYgKzg1LDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAg
ICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAnYWN0aW9ucyc6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICdhY3Rpb25fbmFtZSc6ICdwbGF0Zm9ybV9hcGlfY29weV93ZWJjb3JlX2hlYWRlcnMnLAor
ICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzogWworICAgICAgICAgICAgICAgICAgICAgICAg
JzxAKHdlYmNvcmVfaGVhZGVycyknCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAgICAgICAgICdvdXRwdXRzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgJzwob3V0cHV0
X2RpcikvSW50UG9pbnQuaCcgIyBKdXN0IGhhdmUgdG8gZGVwZW5kIG9uIGFueSBvbmUgY29waWVk
IGhlYWRlcgorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAnYWN0
aW9uJzogWworICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbicsCisgICAgICAgICAgICAg
ICAgICAgICAgICAnY29weV93ZWJjb3JlX2hlYWRlcnMucHknLAorICAgICAgICAgICAgICAgICAg
ICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmVfaGVhZGVycycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAnPEAod2ViY29yZV9oZWFkZXJzKScKKyAgICAgICAgICAgICAg
ICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnQ29weWluZyBXZWJDb3Jl
IGhlYWRlcnMgbmVlZGVkIGJ5IFBsYXRmb3JtIEFQSScKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBdCiAgICAgICAgIH0KICAgICBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
UGxhdGZvcm0uZ3lwL2NvcHlfd2ViY29yZV9oZWFkZXJzLnB5IGIvU291cmNlL1BsYXRmb3JtL1Bs
YXRmb3JtLmd5cC9jb3B5X3dlYmNvcmVfaGVhZGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZDJhMzhkNGFm
ZDYyODlmMmM5NmZkZWZkODQ5MWZjNjA1YzRmYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL1BsYXRmb3JtLmd5cC9jb3B5X3dlYmNvcmVfaGVhZGVycy5weQpAQCAtMCwwICsx
LDQ5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyIiIkEgaGVscGVyIHNjcmlwdCBmb3IgY29weWluZyBXZWJDb3JlL3Bs
YXRmb3JtIGhlYWRlcnMgaW50byBhIGxvY2F0aW9uIHRoZSBXZWJLaXQgUGxhdGZvcm0gQVBJIGhl
YWRlcnMgY2FuIGluY2x1ZGUiIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBz
aHV0aWwKK2ltcG9ydCBzeXMKKworCitkZWYgQ29weUhlYWRlcnMoZGVzdF9kaXIsIGhlYWRlcnMp
OgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZGVzdF9kaXIpCisgICAgZXhjZXB0IE9T
RXJyb3IsIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAg
ICAgcmFpc2UKKyAgICBmb3IgaGVhZGVyIGluIGhlYWRlcnM6CisgICAgICAgIGRlc3RfZmlsZW5h
bWUgPSBkZXN0X2RpciArIG9zLnNlcCArIGhlYWRlci5zcGxpdCgnLycpWy0xXQorICAgICAgICBz
aHV0aWwuY29weWZpbGUoaGVhZGVyLCBkZXN0X2ZpbGVuYW1lKQorCisKK2RlZiBNYWluKGFyZ3Yp
OgorICAgIGRlc3RfZGlyID0gYXJndlsxXQorICAgIGhlYWRlcnMgPSBhcmd2WzI6XQorICAgIENv
cHlIZWFkZXJzKGRlc3RfZGlyLCBoZWFkZXJzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIHN5cy5leGl0KE1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL1BsYXRmb3JtLmd5cGkgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQppbmRleCAx
N2U1MGFkYzEyNWJkYjA1OWJlOWI1YTBjZGNjYzBiZjlmMzRhZGY3Li5jNGRhNGQ5ZGM0MmFjZjc0
ZmY5OGNiZmE4NjIyNmVkZmM1ZGMzMjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxh
dGZvcm0uZ3lwaQorKysgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQpAQCAtMzMsOSAr
MzMsMTYgQEAKICAgICAgICAgJ3BsYXRmb3JtX2ZpbGVzJzogWwogICAgICAgICAgICAgJ2Nocm9t
aXVtL3B1YmxpYy9XZWJDU3RyaW5nLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJDb21tb24uaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oJywK
KyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRQb2ludC5oJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRRdWFkLmgnLAorICAgICAgICAgICAgJ2Nocm9t
aXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGlj
L1dlYk1pbWVSZWdpc3RyeS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUG9p
bnQuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlJlY3QuaCcsCisgICAgICAg
ICAgICAnY2hyb21pdW0vcHVibGljL1dlYlNpemUuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0v
cHVibGljL1dlYlN0cmluZy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9zcmMvV2ViQ1N0cmlu
Zy5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9XZWJGbG9hdFF1YWQuY3BwJywKICAg
ICAgICAgICAgICdjaHJvbWl1bS9zcmMvV2ViU3RyaW5nLmNwcCcsCiAgICAgICAgIF0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9p
bnQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRQb2ludC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRhZmMxNmI5Yzg0ZTZmNWVhMzA0MDNlYjNlNzdlYzRmM2U4ZjlmYjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UG9p
bnQuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdFBvaW50X2gKKyNkZWZpbmUgV2Vi
RmxvYXRQb2ludF9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworc3RydWN0IFdlYkZsb2F0UG9pbnQgeworICAgIGZsb2F0IHg7CisgICAgZmxv
YXQgeTsKKworICAgIFdlYkZsb2F0UG9pbnQoKQorICAgICAgICA6IHgoMC4wZikKKyAgICAgICAg
LCB5KDAuMGYpCisgICAgeworICAgIH0KKworICAgIFdlYkZsb2F0UG9pbnQoZmxvYXQgeCwgZmxv
YXQgeSkKKyAgICAgICAgOiB4KHgpCisgICAgICAgICwgeSh5KQorICAgIHsKKyAgICB9CisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJGbG9hdFBvaW50KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHApCisgICAgICAgIDogeChwLngoKSkKKyAgICAgICAgLCB5KHAueSgpKQor
ICAgIHsKKyAgICB9CisKKyAgICBXZWJGbG9hdFBvaW50JiBvcGVyYXRvcj0oY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcCkKKyAgICB7CisgICAgICAgIHggPSBwLngoKTsKKyAgICAgICAgeSA9
IHAueSgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgV2Vi
Q29yZTo6RmxvYXRQb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6
RmxvYXRQb2ludCh4LCB5KTsKKyAgICB9CisjZW5kaWYKK307CisKK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgV2ViRmxvYXRQb2ludCYgYSwgY29uc3QgV2ViRmxvYXRQb2ludCYgYikKK3sK
KyAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55OworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGIp
Cit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJG
bG9hdFF1YWQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRRdWFk
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGE1ZWIwNTQyMDJmYWU1YWI3MWI3Yzg5ZGIxZjMxNDVjZDc2OTNjMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxv
YXRRdWFkLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRmxvYXRRdWFkX2gKKyNkZWZpbmUg
V2ViRmxvYXRRdWFkX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkZs
b2F0UG9pbnQuaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8Y21hdGg+CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdl
YkZsb2F0UXVhZCB7CisgICAgV2ViRmxvYXRQb2ludCBwWzRdOworCisgICAgV2ViRmxvYXRRdWFk
KCkKKyAgICB7CisgICAgfQorCisgICAgV2ViRmxvYXRRdWFkKGNvbnN0IFdlYkZsb2F0UG9pbnQm
IHAwLCBjb25zdCBXZWJGbG9hdFBvaW50JiBwMSwgY29uc3QgV2ViRmxvYXRQb2ludCYgcDIsIGNv
bnN0IFdlYkZsb2F0UG9pbnQmIHAzKQorICAgIHsKKyAgICAgICAgcFswXSA9IHAwOworICAgICAg
ICBwWzFdID0gcDE7CisgICAgICAgIHBbMl0gPSBwMjsKKyAgICAgICAgcFszXSA9IHAzOworICAg
IH0KKworICAgIFdFQktJVF9FWFBPUlQgV2ViUmVjdCBlbmNsb3NpbmdSZWN0KCkgY29uc3Q7CisK
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJGbG9hdFF1YWQmIG9wZXJhdG9yPShj
b25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIHEpCisgICAgeworICAgICAgICBwWzBdID0gcS5wMSgp
OworICAgICAgICBwWzFdID0gcS5wMigpOworICAgICAgICBwWzJdID0gcS5wMygpOworICAgICAg
ICBwWzNdID0gcS5wNCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIFdlYkZs
b2F0UXVhZChjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIHEpCisgICAgeworICAgICAgICAqdGhp
cyA9IHE7CisgICAgfQorI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0
UmVjdC5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hODgzNTEzZmNkYWM1NDNlOTAwMzc3MmU1NDIyMDViMjFjNzNiYTAzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFJl
Y3QuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRmxvYXRSZWN0X2gKKyNkZWZpbmUgV2Vi
RmxvYXRSZWN0X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3N0cnVjdCBXZWJGbG9hdFJlY3QgeworICAgIGZsb2F0IHg7CisgICAgZmxvYXQg
eTsKKyAgICBmbG9hdCB3aWR0aDsKKyAgICBmbG9hdCBoZWlnaHQ7CisKKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiB3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwOyB9CisKKyAgICBX
ZWJGbG9hdFJlY3QoKQorICAgICAgICA6IHgoMC4wZikKKyAgICAgICAgLCB5KDAuMGYpCisgICAg
ICAgICwgd2lkdGgoMC4wZikKKyAgICAgICAgLCBoZWlnaHQoMC4wZikKKyAgICB7CisgICAgfQor
CisgICAgV2ViRmxvYXRSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQpCisgICAgICAgIDogeCh4KQorICAgICAgICAsIHkoeSkKKyAgICAgICAgLCB3aWR0aCh3
aWR0aCkKKyAgICAgICAgLCBoZWlnaHQoaGVpZ2h0KQorICAgIHsKKyAgICB9CisKKyNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJGbG9hdFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiByKQorICAgICAgICA6IHgoci54KCkpCisgICAgICAgICwgeShyLnkoKSkKKyAgICAgICAg
LCB3aWR0aChyLndpZHRoKCkpCisgICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0KCkpCisgICAgewor
ICAgIH0KKworICAgIFdlYkZsb2F0UmVjdCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgcikKKyAgICB7CisgICAgICAgIHggPSByLngoKTsKKyAgICAgICAgeSA9IHIueSgpOwor
ICAgICAgICB3aWR0aCA9IHIud2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gci5oZWlnaHQoKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkZs
b2F0UmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKyNlbmRpZgorfTsKKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBXZWJGbG9hdFJlY3QmIGEsIGNvbnN0IFdlYkZsb2F0UmVjdCYgYikK
K3sKKyAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55ICYmIGEud2lkdGggPT0gYi53
aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodDsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBXZWJGbG9hdFJlY3QmIGEsIGNvbnN0IFdlYkZsb2F0UmVjdCYgYikKK3sKKyAgICBy
ZXR1cm4gIShhID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlBvaW50LmggYi9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlBvaW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzY2
MjM2Mzk4Y2JjNzAzNzYwYzhhN2NmOWEwNGUyYzk3MzhmOTMwZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViUG9pbnQuaApAQCAtMCwwICsxLDEx
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViUG9pbnRfaAorI2RlZmluZSBXZWJQb2ludF9oCisKKyNpbmNsdWRlICJX
ZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgIkludFBv
aW50LmgiCisjZWxzZQorI2luY2x1ZGUgPHVpL2dmeC9wb2ludC5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViUG9pbnQgeworICAgIGludCB4OworICAgIGludCB5
OworCisgICAgV2ViUG9pbnQoKQorICAgICAgICA6IHgoMCkKKyAgICAgICAgLCB5KDApCisgICAg
eworICAgIH0KKworICAgIFdlYlBvaW50KGludCB4LCBpbnQgeSkKKyAgICAgICAgOiB4KHgpCisg
ICAgICAgICwgeSh5KQorICAgIHsKKyAgICB9CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
KyAgICBXZWJQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcCkKKyAgICAgICAgOiB4KHAu
eCgpKQorICAgICAgICAsIHkocC55KCkpCisgICAgeworICAgIH0KKworICAgIFdlYlBvaW50JiBv
cGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHApCisgICAgeworICAgICAgICB4ID0g
cC54KCk7CisgICAgICAgIHkgPSBwLnkoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIG9wZXJhdG9yIFdlYkNvcmU6OkludFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KTsKKyAgICB9CisjZWxzZQorICAgIFdlYlBv
aW50KGNvbnN0IGdmeDo6UG9pbnQmIHApCisgICAgICAgIDogeChwLngoKSkKKyAgICAgICAgLCB5
KHAueSgpKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJQb2ludCYgb3BlcmF0b3I9KGNvbnN0IGdm
eDo6UG9pbnQmIHApCisgICAgeworICAgICAgICB4ID0gcC54KCk7CisgICAgICAgIHkgPSBwLnko
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIGdmeDo6UG9p
bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdmeDo6UG9pbnQoeCwgeSk7CisgICAg
fQorI2VuZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlBvaW50JiBh
LCBjb25zdCBXZWJQb2ludCYgYikKK3sKKyAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0g
Yi55OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYlBvaW50JiBhLCBjb25z
dCBXZWJQb2ludCYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlJlY3QuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
UmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA0NWI3YThlYjM3OWM0ZGQ2YzEwZTgyNGNkMWIyMjg0ODQ0ZWM1
YTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YlJlY3QuaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViUmVjdF9oCisjZGVmaW5lIFdlYlJl
Y3RfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjZWxzZQorI2luY2x1ZGUgPHVpL2dmeC9yZWN0Lmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJSZWN0IHsKKyAgICBp
bnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDA7
IH0KKworICAgIFdlYlJlY3QoKQorICAgICAgICA6IHgoMCkKKyAgICAgICAgLCB5KDApCisgICAg
ICAgICwgd2lkdGgoMCkKKyAgICAgICAgLCBoZWlnaHQoMCkKKyAgICB7CisgICAgfQorCisgICAg
V2ViUmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICAgICAgOiB4
KHgpCisgICAgICAgICwgeSh5KQorICAgICAgICAsIHdpZHRoKHdpZHRoKQorICAgICAgICAsIGhl
aWdodChoZWlnaHQpCisgICAgeworICAgIH0KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgor
ICAgIFdlYlJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcikKKyAgICAgICAgOiB4KHIueCgp
KQorICAgICAgICAsIHkoci55KCkpCisgICAgICAgICwgd2lkdGgoci53aWR0aCgpKQorICAgICAg
ICAsIGhlaWdodChyLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJSZWN0JiBvcGVy
YXRvcj0oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcikKKyAgICB7CisgICAgICAgIHggPSByLngo
KTsKKyAgICAgICAgeSA9IHIueSgpOworICAgICAgICB3aWR0aCA9IHIud2lkdGgoKTsKKyAgICAg
ICAgaGVpZ2h0ID0gci5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwor
ICAgIG9wZXJhdG9yIFdlYkNvcmU6OkludFJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorI2Vsc2UK
KyAgICBXZWJSZWN0KGNvbnN0IGdmeDo6UmVjdCYgcikKKyAgICAgICAgOiB4KHIueCgpKQorICAg
ICAgICAsIHkoci55KCkpCisgICAgICAgICwgd2lkdGgoci53aWR0aCgpKQorICAgICAgICAsIGhl
aWdodChyLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJSZWN0JiBvcGVyYXRvcj0o
Y29uc3QgZ2Z4OjpSZWN0JiByKQorICAgIHsKKyAgICAgICAgeCA9IHIueCgpOworICAgICAgICB5
ID0gci55KCk7CisgICAgICAgIHdpZHRoID0gci53aWR0aCgpOworICAgICAgICBoZWlnaHQgPSBy
LmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3Ig
Z2Z4OjpSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZng6OlJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CisgICAgfQorI2VuZGlmCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFdlYlJlY3QmIGEsIGNvbnN0IFdlYlJlY3QmIGIpCit7CisgICAgcmV0dXJuIGEu
eCA9PSBiLnggJiYgYS55ID09IGIueSAmJiBhLndpZHRoID09IGIud2lkdGggJiYgYS5oZWlnaHQg
PT0gYi5oZWlnaHQ7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViUmVjdCYg
YSwgY29uc3QgV2ViUmVjdCYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYlNpemUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViU2l6ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0YTUzNjU0ZDU4NzQxNDIyMzBmZjNlZTg2MTNlYmVj
ZjU1NmFlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYlNpemUuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU2l6ZV9oCisjZGVmaW5l
IFdlYlNpemVfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyNpbmNsdWRlICJJbnRTaXplLmgiCisjZWxzZQorI2luY2x1ZGUgPHVpL2dmeC9z
aXplLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJTaXplIHsK
KyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDA7IH0KKworICAgIFdlYlNpemUo
KQorICAgICAgICA6IHdpZHRoKDApCisgICAgICAgICwgaGVpZ2h0KDApCisgICAgeworICAgIH0K
KworICAgIFdlYlNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgICAgICA6IHdpZHRoKHdp
ZHRoKQorICAgICAgICAsIGhlaWdodChoZWlnaHQpCisgICAgeworICAgIH0KKworI2lmIFdFQktJ
VF9JTVBMRU1FTlRBVElPTgorICAgIFdlYlNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcykK
KyAgICAgICAgOiB3aWR0aChzLndpZHRoKCkpCisgICAgICAgICwgaGVpZ2h0KHMuaGVpZ2h0KCkp
CisgICAgeworICAgIH0KKworICAgIFdlYlNpemUmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzKQorICAgIHsKKyAgICAgICAgd2lkdGggPSBzLndpZHRoKCk7CisgICAgICAgIGhl
aWdodCA9IHMuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBv
cGVyYXRvciBXZWJDb3JlOjpJbnRTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIH0KKyNlbHNlCisgICAgV2ViU2l6
ZShjb25zdCBnZng6OlNpemUmIHMpCisgICAgICAgIDogd2lkdGgocy53aWR0aCgpKQorICAgICAg
ICAsIGhlaWdodChzLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJTaXplJiBvcGVy
YXRvcj0oY29uc3QgZ2Z4OjpTaXplJiBzKQorICAgIHsKKyAgICAgICAgd2lkdGggPSBzLndpZHRo
KCk7CisgICAgICAgIGhlaWdodCA9IHMuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKKyAgICBvcGVyYXRvciBnZng6OlNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdmeDo6U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisjZW5kaWYKK307CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViU2l6ZSYgYSwgY29uc3QgV2ViU2l6ZSYgYikK
K3sKKyAgICByZXR1cm4gYS53aWR0aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0
OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYlNpemUmIGEsIGNvbnN0IFdl
YlNpemUmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3Ny
Yy9XZWJGbG9hdFF1YWQuY3BwIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3NyYy9XZWJGbG9h
dFF1YWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3Y2JkYzYwMTBlMmZiZjJmYjNkZWIzMTZjZDBmY2Y0NDZm
OWFmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dl
YkZsb2F0UXVhZC5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlIDxwdWJsaWMvV2ViRmxvYXRRdWFkLmg+CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5j
bHVkZSA8bWF0aC5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViUmVjdCBXZWJGbG9hdFF1YWQ6OmVuY2xvc2luZ1JlY3QoKSBjb25zdAoreworICAg
IGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYobWluKG1pbihtaW4ocFswXS54LCBw
WzFdLngpLCBwWzJdLngpLCBwWzNdLngpKSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGlu
dD4oZmxvb3JmKG1pbihtaW4obWluKHBbMF0ueSwgcFsxXS55KSwgcFsyXS55KSwgcFszXS55KSkp
OworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYobWF4KG1heChtYXgocFsw
XS54LCBwWzFdLngpLCBwWzJdLngpLCBwWzNdLngpKSk7CisgICAgaW50IGJvdHRvbSA9IHN0YXRp
Y19jYXN0PGludD4oY2VpbGYobWF4KG1heChtYXgocFswXS55LCBwWzFdLnkpLCBwWzJdLnkpLCBw
WzNdLnkpKSk7CisKKyAgICByZXR1cm4gV2ViUmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwg
Ym90dG9tIC0gdG9wKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKaW5kZXggNjhjOWJiMmE1OThhNjk1Y2JkNjEyOTk5MGQ5YjJmOTRmMWQ3OWFh
ZS4uOGRkMmRkZTZlNjExMGZmMGY2YjNiNDk2YTk1YzllMzJlZGFkOTRhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cApAQCAtNTM4LDcgKzUzOCw2IEBACiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViRmxv
YXRRdWFkLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250Q2FjaGUuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkZvbnREZXNjcmlwdGlvbi5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViRm9udEltcGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkZsb2F0UG9pbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkZsb2F0UG9pbnQuaAppbmRleCA0YWZjMTZiOWM4NGU2
ZjVlYTMwNDAzZWIzZTc3ZWM0ZjNlOGY5ZmI5Li4zZmQ0YzZjODZkYzY2MTVhMjAyZjQ2ODkzZmYx
MmI4MjU3YzBkNjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJGbG9hdFBvaW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvcGxhdGZvcm0vV2ViRmxvYXRQb2ludC5oCkBAIC0xLDkxICsxLDI2IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKICAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJGbG9hdFBvaW50X2gKLSNkZWZpbmUgV2ViRmxvYXRQ
b2ludF9oCi0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotc3RydWN0IFdlYkZsb2F0UG9pbnQgewotICAgIGZsb2F0IHg7Ci0gICAgZmxvYXQgeTsK
LQotICAgIFdlYkZsb2F0UG9pbnQoKQotICAgICAgICA6IHgoMC4wZikKLSAgICAgICAgLCB5KDAu
MGYpCi0gICAgewotICAgIH0KLQotICAgIFdlYkZsb2F0UG9pbnQoZmxvYXQgeCwgZmxvYXQgeSkK
LSAgICAgICAgOiB4KHgpCi0gICAgICAgICwgeSh5KQotICAgIHsKLSAgICB9Ci0KLSNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJGbG9hdFBvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHApCi0gICAgICAgIDogeChwLngoKSkKLSAgICAgICAgLCB5KHAueSgpKQotICAgIHsK
LSAgICB9Ci0KLSAgICBXZWJGbG9hdFBvaW50JiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgcCkKLSAgICB7Ci0gICAgICAgIHggPSBwLngoKTsKLSAgICAgICAgeSA9IHAueSgp
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgb3BlcmF0b3IgV2ViQ29yZTo6
RmxvYXRQb2ludCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRQ
b2ludCh4LCB5KTsKLSAgICB9Ci0jZW5kaWYKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgV2ViRmxvYXRQb2ludCYgYSwgY29uc3QgV2ViRmxvYXRQb2ludCYgYikKLXsKLSAgICBy
ZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55OwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFdlYkZsb2F0UG9pbnQmIGEsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIGIpCi17Ci0g
ICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9h
dFBvaW50LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJGbG9hdFF1YWQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRm
b3JtL1dlYkZsb2F0UXVhZC5oCmluZGV4IGRhNWViMDU0MjAyZmFlNWFiNzFiN2M4OWRiMWYzMTQ1
Y2Q3NjkzYzEuLjVkMDdmOTJiNTA1MGRjYWY3YjAzNDk5MzExOGUyNzJhYTdiZTkxYTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkZsb2F0UXVh
ZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkZsb2F0
UXVhZC5oCkBAIC0xLDgyICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKICAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRl
ZiBXZWJGbG9hdFF1YWRfaAotI2RlZmluZSBXZWJGbG9hdFF1YWRfaAotCi0jaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIldlYlJlY3Qu
aCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjbWF0aD4KLQotI2lmIFdFQktJ
VF9JTVBMRU1FTlRBVElPTgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgV2ViRmxvYXRRdWFkIHsKLSAgICBXZWJGbG9hdFBvaW50
IHBbNF07Ci0KLSAgICBXZWJGbG9hdFF1YWQoKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJGbG9h
dFF1YWQoY29uc3QgV2ViRmxvYXRQb2ludCYgcDAsIGNvbnN0IFdlYkZsb2F0UG9pbnQmIHAxLCBj
b25zdCBXZWJGbG9hdFBvaW50JiBwMiwgY29uc3QgV2ViRmxvYXRQb2ludCYgcDMpCi0gICAgewot
ICAgICAgICBwWzBdID0gcDA7Ci0gICAgICAgIHBbMV0gPSBwMTsKLSAgICAgICAgcFsyXSA9IHAy
OwotICAgICAgICBwWzNdID0gcDM7Ci0gICAgfQotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJSZWN0
IGVuY2xvc2luZ1JlY3QoKSBjb25zdDsKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAg
IFdlYkZsb2F0UXVhZCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgcSkKLSAg
ICB7Ci0gICAgICAgIHBbMF0gPSBxLnAxKCk7Ci0gICAgICAgIHBbMV0gPSBxLnAyKCk7Ci0gICAg
ICAgIHBbMl0gPSBxLnAzKCk7Ci0gICAgICAgIHBbM10gPSBxLnA0KCk7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0gICAgV2ViRmxvYXRRdWFkKGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVh
ZCYgcSkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gcTsKLSAgICB9Ci0jZW5kaWYKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRRdWFkLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJGbG9hdFJlY3QuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkZsb2F0UmVjdC5oCmluZGV4IGE4ODM1
MTNmY2RhYzU0M2U5MDAzNzcyZTU0MjIwNWIyMWM3M2JhMDMuLmM2ZGQ1NGZkYmI3MDAxNmU0MTVi
YmUxZGQ3Mjg0MzRiOTEzMDE2ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkZsb2F0UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL3BsYXRmb3JtL1dlYkZsb2F0UmVjdC5oCkBAIC0xLDEwMyArMSwyNiBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViRmxvYXRSZWN0X2gKLSNkZWZpbmUgV2Vi
RmxvYXRSZWN0X2gKLQotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotCi0jaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXN0cnVjdCBXZWJGbG9hdFJlY3QgewotICAgIGZsb2F0IHg7Ci0gICAgZmxvYXQg
eTsKLSAgICBmbG9hdCB3aWR0aDsKLSAgICBmbG9hdCBoZWlnaHQ7Ci0KLSAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiB3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwOyB9Ci0KLSAgICBX
ZWJGbG9hdFJlY3QoKQotICAgICAgICA6IHgoMC4wZikKLSAgICAgICAgLCB5KDAuMGYpCi0gICAg
ICAgICwgd2lkdGgoMC4wZikKLSAgICAgICAgLCBoZWlnaHQoMC4wZikKLSAgICB7Ci0gICAgfQot
Ci0gICAgV2ViRmxvYXRSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQpCi0gICAgICAgIDogeCh4KQotICAgICAgICAsIHkoeSkKLSAgICAgICAgLCB3aWR0aCh3
aWR0aCkKLSAgICAgICAgLCBoZWlnaHQoaGVpZ2h0KQotICAgIHsKLSAgICB9Ci0KLSNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJGbG9hdFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiByKQotICAgICAgICA6IHgoci54KCkpCi0gICAgICAgICwgeShyLnkoKSkKLSAgICAgICAg
LCB3aWR0aChyLndpZHRoKCkpCi0gICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0KCkpCi0gICAgewot
ICAgIH0KLQotICAgIFdlYkZsb2F0UmVjdCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgcikKLSAgICB7Ci0gICAgICAgIHggPSByLngoKTsKLSAgICAgICAgeSA9IHIueSgpOwot
ICAgICAgICB3aWR0aCA9IHIud2lkdGgoKTsKLSAgICAgICAgaGVpZ2h0ID0gci5oZWlnaHQoKTsK
LSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJhdG9yIFdlYkNvcmU6OkZs
b2F0UmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLSNlbmRpZgotfTsKLQotaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBXZWJGbG9hdFJlY3QmIGEsIGNvbnN0IFdlYkZsb2F0UmVjdCYgYikK
LXsKLSAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55ICYmIGEud2lkdGggPT0gYi53
aWR0aCAmJiBhLmhlaWdodCA9PSBiLmhlaWdodDsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBXZWJGbG9hdFJlY3QmIGEsIGNvbnN0IFdlYkZsb2F0UmVjdCYgYikKLXsKLSAgICBy
ZXR1cm4gIShhID09IGIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCisj
aW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVj
dC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0v
V2ViUG9pbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlBv
aW50LmgKaW5kZXggNzY2MjM2Mzk4Y2JjNzAzNzYwYzhhN2NmOWEwNGUyYzk3MzhmOTMwZi4uM2U2
NGU0M2NlZTlhYTMzMjk4NjU2ZWVkOTY1YTAxNDE5MDZkOWVmZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUG9pbnQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJQb2ludC5oCkBAIC0xLDExMSArMSwy
NyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViUG9pbnRfaAotI2RlZmlu
ZSBXZWJQb2ludF9oCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYlBvaW50LmgiCiAKLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLQotI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jZWxzZQotI2luY2x1ZGUgPHVp
L2dmeC9wb2ludC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgV2Vi
UG9pbnQgewotICAgIGludCB4OwotICAgIGludCB5OwotCi0gICAgV2ViUG9pbnQoKQotICAgICAg
ICA6IHgoMCkKLSAgICAgICAgLCB5KDApCi0gICAgewotICAgIH0KLQotICAgIFdlYlBvaW50KGlu
dCB4LCBpbnQgeSkKLSAgICAgICAgOiB4KHgpCi0gICAgICAgICwgeSh5KQotICAgIHsKLSAgICB9
Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJQb2ludChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcCkKLSAgICAgICAgOiB4KHAueCgpKQotICAgICAgICAsIHkocC55KCkpCi0g
ICAgewotICAgIH0KLQotICAgIFdlYlBvaW50JiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHApCi0gICAgewotICAgICAgICB4ID0gcC54KCk7Ci0gICAgICAgIHkgPSBwLnkoKTsK
LSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJhdG9yIFdlYkNvcmU6Oklu
dFBvaW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRQb2ludCh4
LCB5KTsKLSAgICB9Ci0jZWxzZQotICAgIFdlYlBvaW50KGNvbnN0IGdmeDo6UG9pbnQmIHApCi0g
ICAgICAgIDogeChwLngoKSkKLSAgICAgICAgLCB5KHAueSgpKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBXZWJQb2ludCYgb3BlcmF0b3I9KGNvbnN0IGdmeDo6UG9pbnQmIHApCi0gICAgewotICAgICAg
ICB4ID0gcC54KCk7Ci0gICAgICAgIHkgPSBwLnkoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIH0KLQotICAgIG9wZXJhdG9yIGdmeDo6UG9pbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGdmeDo6UG9pbnQoeCwgeSk7Ci0gICAgfQotI2VuZGlmCi19OwotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFdlYlBvaW50JiBhLCBjb25zdCBXZWJQb2ludCYgYikKLXsKLSAg
ICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55OwotfQotCi1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFdlYlBvaW50JiBhLCBjb25zdCBXZWJQb2ludCYgYikKLXsKLSAgICByZXR1
cm4gIShhID09IGIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJSZWN0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJSZWN0LmgKaW5kZXgg
MDQ1YjdhOGViMzc5YzRkZDZjMTBlODI0Y2QxYjIyODQ4NDRlYzVhOC4uYzFjZWQwMDcxOTVjNDY5
YzNkMzlhYmE0Nzk4MjAxYTEyODQ0NDUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUmVjdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL3BsYXRmb3JtL1dlYlJlY3QuaApAQCAtMSwxMjcgKzEsMjYgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgogICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlJlY3RfaAotI2RlZmluZSBXZWJSZWN0X2gKLQot
I2luY2x1ZGUgIldlYkNvbW1vbi5oIgotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2Vsc2UKLSNpbmNsdWRlIDx1aS9nZngvcmVjdC5oPgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1Y3QgV2ViUmVjdCB7Ci0gICAgaW50IHg7Ci0g
ICAgaW50IHk7Ci0gICAgaW50IHdpZHRoOwotICAgIGludCBoZWlnaHQ7Ci0KLSAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiB3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwOyB9Ci0KLSAg
ICBXZWJSZWN0KCkKLSAgICAgICAgOiB4KDApCi0gICAgICAgICwgeSgwKQotICAgICAgICAsIHdp
ZHRoKDApCi0gICAgICAgICwgaGVpZ2h0KDApCi0gICAgewotICAgIH0KLQotICAgIFdlYlJlY3Qo
aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIDogeCh4KQotICAg
ICAgICAsIHkoeSkKLSAgICAgICAgLCB3aWR0aCh3aWR0aCkKLSAgICAgICAgLCBoZWlnaHQoaGVp
Z2h0KQotICAgIHsKLSAgICB9Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJS
ZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHIpCi0gICAgICAgIDogeChyLngoKSkKLSAgICAg
ICAgLCB5KHIueSgpKQotICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKLSAgICAgICAgLCBoZWln
aHQoci5oZWlnaHQoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgV2ViUmVjdCYgb3BlcmF0b3I9KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHIpCi0gICAgewotICAgICAgICB4ID0gci54KCk7Ci0gICAg
ICAgIHkgPSByLnkoKTsKLSAgICAgICAgd2lkdGggPSByLndpZHRoKCk7Ci0gICAgICAgIGhlaWdo
dCA9IHIuaGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBvcGVy
YXRvciBXZWJDb3JlOjpJbnRSZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJD
b3JlOjpJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLSNlbHNlCi0gICAgV2Vi
UmVjdChjb25zdCBnZng6OlJlY3QmIHIpCi0gICAgICAgIDogeChyLngoKSkKLSAgICAgICAgLCB5
KHIueSgpKQotICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKLSAgICAgICAgLCBoZWlnaHQoci5o
ZWlnaHQoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgV2ViUmVjdCYgb3BlcmF0b3I9KGNvbnN0IGdm
eDo6UmVjdCYgcikKLSAgICB7Ci0gICAgICAgIHggPSByLngoKTsKLSAgICAgICAgeSA9IHIueSgp
OwotICAgICAgICB3aWR0aCA9IHIud2lkdGgoKTsKLSAgICAgICAgaGVpZ2h0ID0gci5oZWlnaHQo
KTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9wZXJhdG9yIGdmeDo6UmVj
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2Z4OjpSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotICAgIH0KLSNlbmRpZgotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBXZWJSZWN0JiBhLCBjb25zdCBXZWJSZWN0JiBiKQotewotICAgIHJldHVybiBhLnggPT0gYi54
ICYmIGEueSA9PSBiLnkgJiYgYS53aWR0aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVp
Z2h0OwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYlJlY3QmIGEsIGNvbnN0
IFdlYlJlY3QmIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJSZWN0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9wbGF0Zm9ybS9XZWJTaXplLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJTaXplLmgKaW5kZXggOTRhNTM2NTRkNTg3NDE0MjIzMGZmM2VlODYxM2Vi
ZWNmNTU2YWVlZS4uYjg1MjZhMTE4ZTczYmRhYzE4M2RjMGUxNTRjMDlhYmFlYWJiNmZkYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViU2l6ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlNpemUuaApA
QCAtMSwxMTMgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgogICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgog
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlNp
emVfaAotI2RlZmluZSBXZWJTaXplX2gKLQotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotCi0jaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2Vsc2UKLSNpbmNs
dWRlIDx1aS9nZngvc2l6ZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdHJ1
Y3QgV2ViU2l6ZSB7Ci0gICAgaW50IHdpZHRoOwotICAgIGludCBoZWlnaHQ7Ci0KLSAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwOyB9Ci0K
LSAgICBXZWJTaXplKCkKLSAgICAgICAgOiB3aWR0aCgwKQotICAgICAgICAsIGhlaWdodCgwKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBXZWJTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKLSAgICAg
ICAgOiB3aWR0aCh3aWR0aCkKLSAgICAgICAgLCBoZWlnaHQoaGVpZ2h0KQotICAgIHsKLSAgICB9
Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJTaXplKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHMpCi0gICAgICAgIDogd2lkdGgocy53aWR0aCgpKQotICAgICAgICAsIGhlaWdo
dChzLmhlaWdodCgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJTaXplJiBvcGVyYXRvcj0oY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgcykKLSAgICB7Ci0gICAgICAgIHdpZHRoID0gcy53aWR0aCgp
OwotICAgICAgICBoZWlnaHQgPSBzLmhlaWdodCgpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0g
ICAgfQotCi0gICAgb3BlcmF0b3IgV2ViQ29yZTo6SW50U2l6ZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0jZWxz
ZQotICAgIFdlYlNpemUoY29uc3QgZ2Z4OjpTaXplJiBzKQotICAgICAgICA6IHdpZHRoKHMud2lk
dGgoKSkKLSAgICAgICAgLCBoZWlnaHQocy5oZWlnaHQoKSkKLSAgICB7Ci0gICAgfQotCi0gICAg
V2ViU2l6ZSYgb3BlcmF0b3I9KGNvbnN0IGdmeDo6U2l6ZSYgcykKLSAgICB7Ci0gICAgICAgIHdp
ZHRoID0gcy53aWR0aCgpOwotICAgICAgICBoZWlnaHQgPSBzLmhlaWdodCgpOwotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgb3BlcmF0b3IgZ2Z4OjpTaXplKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnZng6OlNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgfQotI2Vu
ZGlmCi19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlNpemUmIGEsIGNvbnN0
IFdlYlNpemUmIGIpCi17Ci0gICAgcmV0dXJuIGEud2lkdGggPT0gYi53aWR0aCAmJiBhLmhlaWdo
dCA9PSBiLmhlaWdodDsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJTaXpl
JiBhLCBjb25zdCBXZWJTaXplJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViU2l6ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRRdWFkLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZsb2F0UXVhZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlN2Q2
OGE5OGFjNDUxNTlmMWFkMTVkMzM5OGFjM2ZlMDkxMDU4MGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RmxvYXRRdWFkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRRdWFkLmgiCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1XZWJSZWN0IFdlYkZsb2F0UXVhZDo6ZW5jbG9zaW5nUmVjdCgpIGNvbnN0Ci17
Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihzdGQ6Om1pbihzdGQ6Om1p
bihzdGQ6Om1pbihwWzBdLngsIHBbMV0ueCksIHBbMl0ueCksIHBbM10ueCkpKTsKLSAgICBpbnQg
dG9wID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYoc3RkOjptaW4oc3RkOjptaW4oc3RkOjptaW4o
cFswXS55LCBwWzFdLnkpLCBwWzJdLnkpLCBwWzNdLnkpKSk7Ci0gICAgaW50IHJpZ2h0ID0gc3Rh
dGljX2Nhc3Q8aW50PihjZWlsZihzdGQ6Om1heChzdGQ6Om1heChzdGQ6Om1heChwWzBdLngsIHBb
MV0ueCksIHBbMl0ueCksIHBbM10ueCkpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8
aW50PihjZWlsZihzdGQ6Om1heChzdGQ6Om1heChzdGQ6Om1heChwWzBdLnksIHBbMV0ueSksIHBb
Ml0ueSksIHBbM10ueSkpKTsKLQotICAgIHJldHVybiBXZWJSZWN0KGxlZnQsIHRvcCwgcmlnaHQg
LSBsZWZ0LCBib3R0b20gLSB0b3ApOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126101</attachid>
            <date>2012-02-08 09:28:54 -0800</date>
            <delta_ts>2012-02-08 10:19:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78067-20120208122853.patch</filename>
            <type>text/plain</type>
            <size>11556</size>
            <attacher name="Sadrul Habib Chowdhury">sadrul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDhiNGQ1N2UyYWY1NjFhNzQ5MjgwZjY0OTU3OGZjNTQ4MzM4MTAzZmYuLmZkMWMzZjc1ODg3Zjg5
ZmNkZGY1OTJhZjQ3NjhkY2EwMjcyMzU3YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0yNzcsNiArMjc3LDI3IEBACiAgICAgICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5j
cHA6CiAgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6b3BlblRhZ1RvU3Ry
aW5nKTogYWNjZXNzIGF0dHJpYnV0ZXMgdmlhIEVsZW1lbnQgaW50ZXJmYWNlLgogCisyMDEyLTAy
LTA3ICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgcGluY2ggZ2VzdHVyZSBwcm9jZXNzaW5nIGluIHRoZSBNVCBj
b21wb3NpdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzc4MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHB1YmxpYy9XZWJJbnB1dEV2ZW50Lmg6CisgICAgICAgICogc3JjL1dlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGw6OldlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw6OmhhbmRsZUlucHV0RXZlbnQpOgor
ICAgICAgICAqIHNyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oOgorICAgICAgICAo
V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwpOgorICAgICAgICAqIHNyYy9XZWJJbnB1dEV2
ZW50Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtR2VzdHVyZUV2ZW50
QnVpbGRlcjo6UGxhdGZvcm1HZXN0dXJlRXZlbnRCdWlsZGVyKToKKyAgICAgICAgKiBzcmMvV2Vi
UG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6Omhh
bmRsZUlucHV0RXZlbnQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKiB0ZXN0
cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwOgorCiAyMDEyLTAyLTA0ICBT
aGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gQWRkIHN1cHBvcnQgdG8gZm9yY2UgZnVsbCBkYW1hZ2UgaW4gQ0NEYW1hZ2VUcmFja2VyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnB1dEV2ZW50LmgKaW5kZXggNTdi
MWY0YjVjOGNhNDFmOGM0MWJhNWJjN2ExZmU0ZTNhZTBlNWE1ZC4uODY4MGMyMjZjODE2ZGZkZjE1
NGQ5ZmYyNmIxNTAwMmIwOTMzMzQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSW5wdXRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklucHV0RXZlbnQuaApAQCAtMTA5LDYgKzEwOSw5IEBAIHB1YmxpYzoKICAgICAgICAg
R2VzdHVyZVRhcCwKICAgICAgICAgR2VzdHVyZVRhcERvd24sCiAgICAgICAgIEdlc3R1cmVEb3Vi
bGVUYXAsCisgICAgICAgIEdlc3R1cmVQaW5jaEJlZ2luLAorICAgICAgICBHZXN0dXJlUGluY2hF
bmQsCisgICAgICAgIEdlc3R1cmVQaW5jaFVwZGF0ZSwKIAogICAgICAgICAvLyBXZWJUb3VjaEV2
ZW50CiAgICAgICAgIFRvdWNoU3RhcnQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5jcHAKaW5kZXggMzY3
YmMzZTM0NjE3NjZkYTBiMGY4NjViMmVlMTkxYmQxZTI1YjZjZC4uNDBjMTUxZGZkMTljNzhlN2Rj
ZDRhYTljY2U1MDU1MjE3NTkzNDRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmNwcApAQCAtODMs
NiArODMsNyBAQCBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbDo6V2ViQ29tcG9zaXRvcklu
cHV0SGFuZGxlckltcGwoQ0NJbnB1dEhhbmRsZXJDbGllbgogICAgICwgbV9pbnB1dEhhbmRsZXJD
bGllbnQoaW5wdXRIYW5kbGVyQ2xpZW50KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fZXhwZWN0
U2Nyb2xsVXBkYXRlRW5kKGZhbHNlKQorICAgICwgbV9leHBlY3RQaW5jaFVwZGF0ZUVuZChmYWxz
ZSkKICNlbmRpZgogICAgICwgbV9zY3JvbGxTdGFydGVkKGZhbHNlKQogewpAQCAtMTczLDYgKzE3
NCwyOCBAQCB2b2lkIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpoYW5kbGVJbnB1dEV2
ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogICAgICAgICAgICAgbV9zY3JvbGxTdGFy
dGVkID0gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoQmVnaW4pIHsKKyAg
ICAgICAgQVNTRVJUKCFtX2V4cGVjdFBpbmNoVXBkYXRlRW5kKTsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQgPSB0cnVlOworI2VuZGlmCisgICAgICAgIG1f
aW5wdXRIYW5kbGVyQ2xpZW50LT5waW5jaEdlc3R1cmVCZWdpbigpOworICAgICAgICBtX2NsaWVu
dC0+ZGlkSGFuZGxlSW5wdXRFdmVudCgpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlm
IChldmVudC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEVuZCkgeworICAgICAg
ICBBU1NFUlQobV9leHBlY3RQaW5jaFVwZGF0ZUVuZCk7CisjaWZuZGVmIE5ERUJVRworICAgICAg
ICBtX2V4cGVjdFBpbmNoVXBkYXRlRW5kID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgbV9pbnB1
dEhhbmRsZXJDbGllbnQtPnBpbmNoR2VzdHVyZUVuZCgpOworICAgICAgICBtX2NsaWVudC0+ZGlk
SGFuZGxlSW5wdXRFdmVudCgpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChldmVu
dC50eXBlID09IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaFVwZGF0ZSkgeworICAgICAgICBB
U1NFUlQobV9leHBlY3RQaW5jaFVwZGF0ZUVuZCk7CisgICAgICAgIGNvbnN0IFdlYkdlc3R1cmVF
dmVudCYgZ2VzdHVyZUV2ZW50ID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYkdlc3R1cmVFdmVudCo+
KCZldmVudCk7CisgICAgICAgIG1faW5wdXRIYW5kbGVyQ2xpZW50LT5waW5jaEdlc3R1cmVVcGRh
dGUoZ2VzdHVyZUV2ZW50LmRlbHRhWCwgSW50UG9pbnQoZ2VzdHVyZUV2ZW50LngsIGdlc3R1cmVF
dmVudC55KSk7CisgICAgICAgIG1fY2xpZW50LT5kaWRIYW5kbGVJbnB1dEV2ZW50KCk7CisgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jbGllbnQtPmRpZE5vdEhhbmRsZUlucHV0RXZlbnQo
dHJ1ZSAvKiBzZW5kVG9XaWRnZXQgKi8pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsLmgKaW5kZXggN2E2
MzI2ODk5NDBhZDU2MzFlOGQxMTM0MDc3ODAzZDlmNjc4NGNjNS4uYTJmMTMwMjVkOWYxN2JmZDE4
YzE0NGY5MzE3ZDgyYTZlYTEwOWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbC5oCkBAIC03Miw2ICs3
Miw3IEBAIHByaXZhdGU6CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBtX2V4cGVjdFNjcm9s
bFVwZGF0ZUVuZDsKKyAgICBib29sIG1fZXhwZWN0UGluY2hVcGRhdGVFbmQ7CiAjZW5kaWYKICAg
ICBib29sIG1fc2Nyb2xsU3RhcnRlZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSW5wdXRFdmVudENvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSW5wdXRFdmVudENvbnZlcnNpb24uY3BwCmluZGV4IGRkZDQ3MzZhYjBlNjY1
ZmI1NTY3MWQ1YzcxNmY1YWY1NWYwOTY2OTYuLjY0YmEzMTE3MGNlOWNmNTlhZTVjZDBjODUyM2Vj
MjI1NThlODI4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklu
cHV0RXZlbnRDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5jcHAKQEAgLTE1NSw2ICsxNTUsMTEgQEAgUGxhdGZvcm1H
ZXN0dXJlRXZlbnRCdWlsZGVyOjpQbGF0Zm9ybUdlc3R1cmVFdmVudEJ1aWxkZXIoV2lkZ2V0KiB3
aWRnZXQsIGNvbnN0IFcKICAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVEb3VibGVUYXA6
CiAgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVEb3VibGVUYXA7CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoQmVnaW46Cisg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hFbmQ6CisgICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpHZXN0dXJlUGluY2hVcGRhdGU6CisgICAgICAgIC8vIEZJWE1FOiBPbmNlIFBsYXRm
b3JtR2VzdHVyZUV2ZW50IGlzIHVwZGF0ZWQgdG8gc3VwcG9ydCBwaW5jaCwgdGhpcyBzaG91bGQg
c2V0IG1fdHlwZSB0byBhcHByb3ByaWF0ZSBQbGF0Zm9ybUV2ZW50IHR5cGUuCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBvcHVwTWVudUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBN
ZW51SW1wbC5jcHAKaW5kZXggMDNmMzFkOGIwYmYyMzI1YTA4YWI2MWI2MDI3NTg5ZTUyOThkNGRi
MC4uM2YzMjhmNTViZmNmZGU1MDlmYjlkMGQxOTAxNGNlYjJkMWNmMGMyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTI3NSw2ICsy
NzUsMTIgQEAgYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdl
YklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiAgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZUVu
dGVyOgogICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6Q29udGV4dE1lbnU6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoQmVnaW46Cisg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hFbmQ6CisgICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpHZXN0dXJlUGluY2hVcGRhdGU6CisgICAgICAgIC8vIEZJWE1FOiBPbmNlIFBsYXRm
b3JtR2VzdHVyZUV2ZW50IGlzIHVwZGF0ZWQgdG8gc3VwcG9ydCBwaW5jaCwgdGhpcyBzaG91bGQg
Y2FsbCBoYW5kbGVHZXN0dXJlRXZlbnQsIGp1c3QgbGlrZSBpdCBjdXJyZW50bHkgZG9lcyBmb3Ig
Z2VzdHVyZSBzY3JvbGwuCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmlu
ZGV4IDgyNjlhMWRjZmVhZjYwMWE4ZWRlMDJlMTZiNTI4YjkwN2RjYTM5YTQuLmEwNWU5ODkyMDdl
MzkxNzMzMjFhMGU3MWNmMzY0NTNkNmEzYTM1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTE0MTYsNiArMTQxNiwxNSBAQCBib29sIFdlYlZpZXdJ
bXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiAg
ICAgICAgIGJyZWFrOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hCZWdpbjoKKyAgICBjYXNlIFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVQaW5jaEVuZDoKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQ
aW5jaFVwZGF0ZToKKyAgICAgICAgLy8gRklYTUU6IE9uY2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQg
aXMgdXBkYXRlZCB0byBzdXBwb3J0IHBpbmNoLCB0aGlzIHNob3VsZCBjYWxsIGhhbmRsZUdlc3R1
cmVFdmVudCwganVzdCBsaWtlIGl0IGN1cnJlbnRseSBkb2VzIGZvciBnZXN0dXJlIHNjcm9sbC4K
KyAgICAgICAgaGFuZGxlZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyNlbmRpZgorCiAgICAg
ZGVmYXVsdDoKICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQ29tcG9zaXRvcklucHV0
SGFuZGxlckltcGxUZXN0LmNwcAppbmRleCBjYzgzNTlmZmZmMjZmNGZlMDg0MmM2ZjcwMTY3ODI5
ZmU0ZmRhNmI4Li5mNzMyZGY3NjQ1MTg5YTJlMGI4Zjc2MGQzODgwN2UxYWJlNTA3ODI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhh
bmRsZXJJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJD
b21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwCkBAIC00NiwxMiArNDYsMjUgQEAgY2xh
c3MgTW9ja0lucHV0SGFuZGxlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0lucHV0SGFuZGxl
ckNsaWVudCB7CiBwdWJsaWM6CiAgICAgTW9ja0lucHV0SGFuZGxlckNsaWVudCgpCiAgICAgICAg
IDogbV9zY3JvbGxTdGF0dXMoU2Nyb2xsU3RhcnRlZCkKKyAgICAgICAgLCBtX3BpbmNoU3RhcnRl
ZChmYWxzZSkKKyAgICAgICAgLCBtX3BpbmNoRW5kZWQoZmFsc2UpCisgICAgICAgICwgbV9waW5j
aE1hZ25pZmljYXRpb24oMCkKICAgICB7CiAgICAgfQogICAgIHZpcnR1YWwgfk1vY2tJbnB1dEhh
bmRsZXJDbGllbnQoKSB7IH0KIAogICAgIHZvaWQgc2V0U2Nyb2xsU3RhdHVzKFNjcm9sbFN0YXR1
cyBzdGF0dXMpIHsgbV9zY3JvbGxTdGF0dXMgPSBzdGF0dXM7IH0KIAorICAgIGJvb2wgcGluY2hT
dGFydGVkKCkgY29uc3QgeyByZXR1cm4gbV9waW5jaFN0YXJ0ZWQ7IH0KKyAgICBib29sIHBpbmNo
RW5kZWQoKSBjb25zdCB7IHJldHVybiBtX3BpbmNoRW5kZWQ7IH0KKyAgICBmbG9hdCBwaW5jaE1h
Z2luaWZjYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BpbmNoTWFnbmlmaWNhdGlvbjsgfQorCisg
ICAgdm9pZCByZXNldFBpbmNoKCkKKyAgICB7CisgICAgICAgIG1fcGluY2hTdGFydGVkID0gbV9w
aW5jaFN0YXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9waW5jaE1hZ25pZmljYXRpb24gPSAwOwor
ICAgIH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKSBPVkVS
UklERSB7IH0KICAgICB2aXJ0dWFsIFNjcm9sbFN0YXR1cyBzY3JvbGxCZWdpbihjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpIE9WRVJSSURFCkBAIC02Miw5ICs3NSwxOCBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxFbmQoKSBPVkVSUklERSB7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBoYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGluY2hHZXN0dXJlQmVnaW4oKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgcGluY2hHZXN0dXJlVXBkYXRlKGZsb2F0IG1hZ25pZnlEZWx0YSwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGFuY2hvcikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBp
bmNoR2VzdHVyZUVuZCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1
cmVCZWdpbigpIE9WRVJSSURFCisgICAgeworICAgICAgICBtX3BpbmNoU3RhcnRlZCA9IHRydWU7
CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVVcGRhdGUoZmxvYXQgbWFnbmlm
eURlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgYW5jaG9yKSBPVkVSUklERQorICAgIHsK
KyAgICAgICAgbV9waW5jaE1hZ25pZmljYXRpb24gPSBtYWduaWZ5RGVsdGE7CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBwaW5jaEdlc3R1cmVFbmQoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAg
bV9waW5jaEVuZGVkID0gdHJ1ZTsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0UGFnZVNj
YWxlQW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRhcmdldFBvc2l0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFuY2hvclBvaW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBwYWdlU2NhbGUs
CkBAIC03Miw2ICs5NCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBkdXJhdGlvbk1zKSBPVkVSUklERSB7IH0KIAogICAgIFNjcm9s
bFN0YXR1cyBtX3Njcm9sbFN0YXR1czsKKyAgICBib29sIG1fcGluY2hTdGFydGVkOworICAgIGJv
b2wgbV9waW5jaEVuZGVkOworICAgIGZsb2F0IG1fcGluY2hNYWduaWZpY2F0aW9uOwogfTsKIAog
Y2xhc3MgTW9ja1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQgOiBwdWJsaWMgV2ViS2l0
OjpXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IHsKQEAgLTIwMCw0ICsyMjUsNjAgQEAg
VEVTVChXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCwgZ2VzdHVyZVNjcm9sbCkKICAgICBX
ZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7CiB9CiAKK1RFU1QoV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckltcGwsIGdlc3R1cmVQaW5jaCkKK3sKKyAgICBXZWJLaXQ6OldlYkNvbXBv
c2l0b3I6OmluaXRpYWxpemUoMCk7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXIgQVBJcyBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgY29tcG9zaXRv
ciB0aHJlYWQuCisgICAgV2ViQ29yZTo6RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGFsd2F5c0lt
cGxUaHJlYWQ7CisjZW5kaWYKKworICAgIE1vY2tJbnB1dEhhbmRsZXJDbGllbnQgbW9ja0lucHV0
SGFuZGxlcjsKKyAgICBPd25QdHI8V2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGw+IGlucHV0
SGFuZGxlciA9IFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsOjpjcmVhdGUoJm1vY2tJbnB1
dEhhbmRsZXIpOworICAgIE1vY2tXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50IG1vY2tD
bGllbnQ7CisgICAgaW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoJm1vY2tDbGllbnQpOworCisgICAg
V2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQgZ2VzdHVyZTsKKworICAgIGdlc3R1cmUudHlwZSA9IFdl
YktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoQmVnaW47CisgICAgaW5wdXRIYW5kbGVy
LT5oYW5kbGVJbnB1dEV2ZW50KGdlc3R1cmUpOworICAgIEVYUEVDVF9UUlVFKG1vY2tDbGllbnQu
aGFuZGxlZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobW9ja0NsaWVudC5zZW5kVG9XaWRnZXQoKSk7
CisgICAgRVhQRUNUX1RSVUUobW9ja0lucHV0SGFuZGxlci5waW5jaFN0YXJ0ZWQoKSk7CisgICAg
bW9ja0NsaWVudC5yZXNldCgpOworICAgIG1vY2tJbnB1dEhhbmRsZXIucmVzZXRQaW5jaCgpOwor
CisgICAgZ2VzdHVyZS50eXBlID0gV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpHZXN0dXJlUGluY2hV
cGRhdGU7CisgICAgZ2VzdHVyZS5kZWx0YVggPSAxLjVmOworICAgIGlucHV0SGFuZGxlci0+aGFu
ZGxlSW5wdXRFdmVudChnZXN0dXJlKTsKKyAgICBFWFBFQ1RfVFJVRShtb2NrQ2xpZW50LmhhbmRs
ZWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKG1vY2tDbGllbnQuc2VuZFRvV2lkZ2V0KCkpOworICAg
IEVYUEVDVF9GQUxTRShtb2NrSW5wdXRIYW5kbGVyLnBpbmNoRW5kZWQoKSk7CisgICAgRVhQRUNU
X0VRKDEuNWYsIG1vY2tJbnB1dEhhbmRsZXIucGluY2hNYWdpbmlmY2F0aW9uKCkpOworICAgIG1v
Y2tDbGllbnQucmVzZXQoKTsKKyAgICBtb2NrSW5wdXRIYW5kbGVyLnJlc2V0UGluY2goKTsKKwor
ICAgIGdlc3R1cmUudHlwZSA9IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoVXBk
YXRlOworICAgIGdlc3R1cmUuZGVsdGFYID0gMC41ZjsKKyAgICBpbnB1dEhhbmRsZXItPmhhbmRs
ZUlucHV0RXZlbnQoZ2VzdHVyZSk7CisgICAgRVhQRUNUX1RSVUUobW9ja0NsaWVudC5oYW5kbGVk
KCkpOworICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50LnNlbmRUb1dpZGdldCgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UobW9ja0lucHV0SGFuZGxlci5waW5jaEVuZGVkKCkpOworICAgIEVYUEVDVF9F
USgwLjVmLCBtb2NrSW5wdXRIYW5kbGVyLnBpbmNoTWFnaW5pZmNhdGlvbigpKTsKKyAgICBtb2Nr
Q2xpZW50LnJlc2V0KCk7CisgICAgbW9ja0lucHV0SGFuZGxlci5yZXNldFBpbmNoKCk7CisKKyAg
ICBnZXN0dXJlLnR5cGUgPSBXZWJLaXQ6OldlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEVuZDsK
KyAgICBpbnB1dEhhbmRsZXItPmhhbmRsZUlucHV0RXZlbnQoZ2VzdHVyZSk7CisgICAgRVhQRUNU
X1RSVUUobW9ja0NsaWVudC5oYW5kbGVkKCkpOworICAgIEVYUEVDVF9GQUxTRShtb2NrQ2xpZW50
LnNlbmRUb1dpZGdldCgpKTsKKyAgICBFWFBFQ1RfVFJVRShtb2NrSW5wdXRIYW5kbGVyLnBpbmNo
RW5kZWQoKSk7CisgICAgbW9ja0NsaWVudC5yZXNldCgpOworICAgIG1vY2tJbnB1dEhhbmRsZXIu
cmVzZXRQaW5jaCgpOworCisgICAgaW5wdXRIYW5kbGVyLT5zZXRDbGllbnQoMCk7CisKKyAgICBX
ZWJLaXQ6OldlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Cit9CisKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>