<?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>90005</bug_id>
          
          <creation_ts>2012-06-26 13:03:26 -0700</creation_ts>
          <short_desc>[Qt][Linux][WK2] Putting QtWebProcess into a chrooted sandbox</short_desc>
          <delta_ts>2013-01-28 01:56:04 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Linux</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>
          
          <blocked>89874</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Renata Hodovan">rhodovan.u-szeged</reporter>
          <assigned_to name="Renata Hodovan">rhodovan.u-szeged</assigned_to>
          <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>ahf</cc>
    
    <cc>akiss</cc>
    
    <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>evan</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>guijemont</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>hnandor</cc>
    
    <cc>jarkko.sakkinen</cc>
    
    <cc>jesus</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>loki</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>peter</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>rakuco</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>657893</commentid>
    <comment_count>0</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-06-26 13:03:26 -0700</bug_when>
    <thetext>Putting QtWebProcess into a chrooted sandbox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657900</commentid>
    <comment_count>1</comment_count>
      <attachid>149593</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-06-26 13:07:33 -0700</bug_when>
    <thetext>Created attachment 149593
Completely incomplete, just to get feedback :)

This is a preliminary patch for sandboxing the QtWebProcess. In this approach WebProcess is started in a separated chroot.
The chroot environment is generated in runtime (into /mnt/wk-sandbox). Currently most of the needed directories are simply bound (mount --rbind) into the appropriate place in the sandbox. These directories are enumerated in a constant list. Later, this will be replaced with a dynamic generation process what will adapt the libraries to an arbitrary target. Furthermore, instead of binding, we will be able to use hard links (this way the clean-up of the chroot env will also be easy). I already have a function that carries out an ldd-like functionality and also follows symbolic links, but this is an incomplete solution yet so I don&apos;t upload it this time.
This approach uses the standard chroot functionality of linux what needs superuser rights. To avoid running MiniBrowser with sudo we can modify the installation process by changing the owner of MiniBrowser to root and setting the effective userid to the owner. This way MiniBrowser will run with superuser rights until the creation of WebProcess. At this point we perform the chrooting and afterwards we don&apos;t need special rigths anymore so we change back to the real user (who is actually logged in) or to the &quot;nobody&quot; user (this needs further investigation, since nobody doesn&apos;t have a home directory but some of the resources (e.g. caches) are often stored there.
Any comments or feedback are much appreciated! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658272</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-26 19:43:24 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; This approach uses the standard chroot functionality of linux what needs superuser rights. To avoid running MiniBrowser with sudo we can modify the installation process by changing the owner of MiniBrowser to root and setting the effective userid to the owner. This way MiniBrowser will run with superuser rights until the creation of WebProcess. At this point we perform the chrooting and afterwards we don&apos;t need special rigths anymore so we change back to the real user (who is actually logged in) or to the &quot;nobody&quot; user (this needs further investigation, since nobody doesn&apos;t have a home directory but some of the resources (e.g. caches) are often stored there.

I think the traditional approach to dealing with superuser rights in this case would be to make itself QtWebProcess suid root, make it set up the chroot as the first thing and then drop down to nobody.

However I&apos;m not sure how well that approach plays together with the pile of C++ code we have that might end up executing global constructors before we reach the part in main() where we can chroot and drop privileges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659298</commentid>
    <comment_count>3</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2012-06-28 00:32:54 -0700</bug_when>
    <thetext>Just a quick comment. I think using chroot sandbox is a kind of deprecated pattern to sandbox processes although it is easy to implement. It also adds a new security concern for distributions since it adds a SUID binary.

Seccomp filters is the approach to which rest of the world is moving into.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660075</commentid>
    <comment_count>4</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-06-28 19:46:41 -0700</bug_when>
    <thetext>Is anyone familiar with how Chromium implements sandboxing on Unix? With my FreeBSD packager hat on, I&apos;d really appreciate it if the actual implementation was not heavily tied to Linux stuff (the chroot approach probably works on other Unix flavors as well, for example). I also remember Google funded/funds research on Capsicum for this kind of sandboxing capabilities, but I dunno how far things are on Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660152</commentid>
    <comment_count>5</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2012-06-28 23:03:41 -0700</bug_when>
    <thetext>Hi Raphael,

Linux sandbox in Chrome uses two sandboxing methods in Linux, which can be also stacked:

- Chroot sandbox that also uses Linux namespaces so that renderer process cannot espace from the chroot cage.

- Seccomp sandbox that prevents malicious system calls to be called from the renderer process.

If I was implementing webkit 2 Linux sandbox, I would aim for solution that would be only based seccomp filters in order to create simple and maintainable solution. Chroot sandbox in Chrome is ugly and complex beast that requires SUID enabled wrapper program.

At this point, at least in the mainline kernel, there&apos;s no Capsicum for Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660183</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-06-28 23:43:52 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Hi Raphael,
&gt; 
&gt; Linux sandbox in Chrome uses two sandboxing methods in Linux, which can be also stacked:
&gt; 
&gt; - Chroot sandbox that also uses Linux namespaces so that renderer process cannot espace from the chroot cage.
&gt; 
&gt; - Seccomp sandbox that prevents malicious system calls to be called from the renderer process.
&gt; 
&gt; If I was implementing webkit 2 Linux sandbox, I would aim for solution that would be only based seccomp filters in order to create simple and maintainable solution. Chroot sandbox in Chrome is ugly and complex beast that requires SUID enabled wrapper program.
&gt; 
&gt; At this point, at least in the mainline kernel, there&apos;s no Capsicum for Linux.

seccomp also disallows you to open new files so how are they handling fonts? I know they have a separate &quot;fontconfig&quot; process as their chroot&apos;ed environment cannot load the fonts which are outside of the chroot, and because they cannot block the UI process (font-config only supports running in one thread and it already running in the main ui process).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660206</commentid>
    <comment_count>7</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-06-29 00:12:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; With my FreeBSD packager hat on, I&apos;d really appreciate it if the actual implementation was not heavily tied to Linux stuff (the chroot approach probably works on other Unix flavors as well, for example).

Yeah, we were talking about it on IRC too and it seems there is no obstacle that stand in the way in keeping both solutions in the trunk. The approach with chroot will work on any linux platform and if somebody has the claim to use seccomp filter he or she can choose it via a feature flag.

&gt; Chroot sandbox in Chrome is ugly and complex beast that requires SUID enabled wrapper program.

Right, it really needs SUID flag but the chrooting, what requires this, is the very first thing in the life of webprocess and after it every permissions are taken away and the user runs with &quot;nobody&quot; rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660212</commentid>
    <comment_count>8</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-06-29 00:16:42 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Hi Raphael,
&gt; &gt; 
&gt; &gt; Linux sandbox in Chrome uses two sandboxing methods in Linux, which can be also stacked:
&gt; &gt; 
&gt; &gt; - Chroot sandbox that also uses Linux namespaces so that renderer process cannot espace from the chroot cage.
&gt; &gt; 
&gt; &gt; - Seccomp sandbox that prevents malicious system calls to be called from the renderer process.
&gt; &gt; 
&gt; &gt; If I was implementing webkit 2 Linux sandbox, I would aim for solution that would be only based seccomp filters in order to create simple and maintainable solution. Chroot sandbox in Chrome is ugly and complex beast that requires SUID enabled wrapper program.
&gt; &gt; 
&gt; &gt; At this point, at least in the mainline kernel, there&apos;s no Capsicum for Linux.
&gt; 
&gt; seccomp also disallows you to open new files so how are they handling fonts? I know they have a separate &quot;fontconfig&quot; process as their chroot&apos;ed environment cannot load the fonts which are outside of the chroot, and because they cannot block the UI process (font-config only supports running in one thread and it already running in the main ui process).

They use a much stricter seccomp sandbox than what we are proposing. At the time they created their sandbox, seccomp filters were not available.

Chromium has to proxy everything through the UIProcess, since they can only do read and write. Things get even more complicated when you think about how a proccess like this can allocate memory? On Chromium this is delegated to a separated thread.

Fontconfig is handled in a separate process (used to be on the UI though):
http://code.google.com/p/chromium/wiki/LinuxSandboxIPC

Another point here is, like Chromium provides both seccomp and chroot, I don&apos;t see a problem in offering both for WK2 Linux. But I guess that for both implementations, would be much better to delegate the file opening to the UIProcess.

This has to be done for the file picker. Chromium assumes that the UIProcess is trusted. Honestly, I only see this happening if we do the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660282</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-29 01:52:21 -0700</bug_when>
    <thetext>Very interesting article about Chromium&apos;s use of seccomp and the use of a separate _thread_ in the renderer process given that seccomp&apos;s afinity is per thread : http://www.imperialviolet.org/2009/08/26/seccomp.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660285</commentid>
    <comment_count>10</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-06-29 02:00:24 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Very interesting article about Chromium&apos;s use of seccomp and the use of a separate _thread_ in the renderer process given that seccomp&apos;s afinity is per thread : http://www.imperialviolet.org/2009/08/26/seccomp.html

The thread is used for memory allocation, as I said before. I think this is the one of the few things that another process cannot do in your behalf.

But remember that this article is pretty old. Chromium guys were behind seccomp filters for a reason. If they haven&apos;t changed to filters yet, they will do soon and this separated thread for memory allocation is one the things that will be deprecated, since you can let the renderer perform brk() and mmap(MAP_ANONYMOUS).

Many overcomplex design decisions were made at that time because seccomp was way too restrict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660789</commentid>
    <comment_count>11</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2012-06-29 14:32:25 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; With my FreeBSD packager hat on, I&apos;d really appreciate it if the actual implementation was not heavily tied to Linux stuff (the chroot approach probably works on other Unix flavors as well, for example).
&gt; 
&gt; Yeah, we were talking about it on IRC too and it seems there is no obstacle that stand in the way in keeping both solutions in the trunk. The approach with chroot will work on any linux platform and if somebody has the claim to use seccomp filter he or she can choose it via a feature flag.

There is no obstacle to do it but it does not make sense to make complex solution either.

Seccomp filters are mainline kernel feature in 3.5. 

&gt; 
&gt; &gt; Chroot sandbox in Chrome is ugly and complex beast that requires SUID enabled wrapper program.
&gt; 
&gt; Right, it really needs SUID flag but the chrooting, what requires this, is the very first thing in the life of webprocess and after it every permissions are taken away and the user runs with &quot;nobody&quot; rights.

In any case this increases attack vector. IMHO, no matter how sandbox is implemented, it should only decrease attack vector. It is kind of point why sandboxing is done in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660792</commentid>
    <comment_count>12</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2012-06-29 14:40:44 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Very interesting article about Chromium&apos;s use of seccomp and the use of a separate _thread_ in the renderer process given that seccomp&apos;s afinity is per thread : http://www.imperialviolet.org/2009/08/26/seccomp.html

Before seccomp filters were accepted to the mainline kernel Chrome has implemented seccomp filters in user space using two threads where privileged thread does the system call whitelisting for the unprivileged thread. Starting from Linux 3.5 mainline kernel has seccomp filters implemented in kernel where you can whitelist system calls with a packet filter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661033</commentid>
    <comment_count>13</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-06-30 05:43:40 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #9)
&gt; &gt; Very interesting article about Chromium&apos;s use of seccomp and the use of a separate _thread_ in the renderer process given that seccomp&apos;s afinity is per thread : http://www.imperialviolet.org/2009/08/26/seccomp.html
&gt; 
&gt; Before seccomp filters were accepted to the mainline kernel Chrome has implemented seccomp filters in user space using two threads where privileged thread does the system call whitelisting for the unprivileged thread. Starting from Linux 3.5 mainline kernel has seccomp filters implemented in kernel where you can whitelist system calls with a packet filter.

Yes, you are right. The 3.5 kernel has Seccomp filter support. However this kernel is just 2 weeks old. And I&apos;m still sure that the user base of chroot is much bigger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662767</commentid>
    <comment_count>14</comment_count>
    <who name="Jarkko Sakkinen">jarkko.sakkinen</who>
    <bug_when>2012-07-04 02:06:07 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; Very interesting article about Chromium&apos;s use of seccomp and the use of a separate _thread_ in the renderer process given that seccomp&apos;s afinity is per thread : http://www.imperialviolet.org/2009/08/26/seccomp.html
&gt; &gt; 
&gt; &gt; Before seccomp filters were accepted to the mainline kernel Chrome has implemented seccomp filters in user space using two threads where privileged thread does the system call whitelisting for the unprivileged thread. Starting from Linux 3.5 mainline kernel has seccomp filters implemented in kernel where you can whitelist system calls with a packet filter.
&gt; 
&gt; Yes, you are right. The 3.5 kernel has Seccomp filter support. However this kernel is just 2 weeks old. And I&apos;m still sure that the user base of chroot is much bigger.

Having a trivial chroot as a sandbox is almost the same as not having sandbox at all. It is a known fact that trivial chroot jail is a weak protection. This kind of method would require similar measures as are taken in Chromium SUID sandbox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662782</commentid>
    <comment_count>15</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-07-04 02:27:29 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Before seccomp filters were accepted to the mainline kernel Chrome has implemented seccomp filters in user space using two threads where privileged thread does the system call whitelisting for the unprivileged thread. Starting from Linux 3.5 mainline kernel has seccomp filters implemented in kernel where you can whitelist system calls with a packet filter.
&gt; &gt; 
&gt; &gt; Yes, you are right. The 3.5 kernel has Seccomp filter support. However this kernel is just 2 weeks old. And I&apos;m still sure that the user base of chroot is much bigger.
&gt; 
&gt; Having a trivial chroot as a sandbox is almost the same as not having sandbox at all. It is a known fact that trivial chroot jail is a weak protection. This kind of method would require similar measures as are taken in Chromium SUID sandbox.

But having a solution, what works just on a few targets, isn&apos;t better. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663068</commentid>
    <comment_count>16</comment_count>
      <attachid>150823</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-07-04 11:02:15 -0700</bug_when>
    <thetext>Created attachment 150823
Completely incomplete, just to get feedback :)

This is still a draft patch.
From this version only QtWebProcess needs the suid flag. Its first tasks are: chrooting itself and dropping away all the suid rights. We are going to fall back to the &quot;nobdoy&quot; user (btw this is the only user defined inside the sandbox environment).
Furthermore the patch contains a new feature flag: QtWebProcess will run in sandbox only if we build it with --suid-linux-sandbox flag. (All layout tests are passing with this option too.)
Task in progress: I still have problem with the dynamic generation of the dependencies because some environment variable (e.g.: LD_LIBRARY_PATH) - what are needed by ldd - are cleared through the suid flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663653</commentid>
    <comment_count>17</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-07-05 11:08:43 -0700</bug_when>
    <thetext>FYI: two weeks ago chromium has released a new stable version with security updates. Few words about this:

&quot;So why have just one Flash sandbox if you can have two? A bit of double-bagging if you like. Assuming you&apos;re running 64-bit Ubuntu 12.04 and Chrome 20 or newer, you&apos;ll also have a seccomp filter policy slapped on Flash -- in additional to the chroot() and PID namespace. This may impede attackers trying to perform a local privilege escalation, who can no longer call crazy brand-new syscalls or use socket() to load crazy protocol modules, etc.

No sandbox or combination of sandboxes will ever be perfect, but &quot;some&quot; is better than &quot;none&quot;.&quot;

I cited from here: http://scarybeastsecurity.blogspot.hu/2012/07/chrome-20-on-linux-and-flash-sandboxing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663792</commentid>
    <comment_count>18</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-07-05 17:16:52 -0700</bug_when>
    <thetext>Without discussing the merits of whether chroot is the best approach, wouldn&apos;t it make sense to make it easier to have multiple backends here (with my packager hat on again)? This way one could have chroot, seccomp, capsicum etc backends to use without having to clutter WebProcessMainQt with a lot of ifdef&apos;ed code and it&apos;d make the whole implementation less tied to Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673403</commentid>
    <comment_count>19</comment_count>
      <attachid>153232</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-07-19 05:12:08 -0700</bug_when>
    <thetext>Created attachment 153232
Still not complete, but makes more sense :)

The patch contains the following updates:
* The number of mounted directories are strongly reduced.
* An ldd funcionality is included. It gathers the shared libraries what are needed by QtWebProcess.
** It is placed into UIProcess because glibc prevent us from calling ldd from suid binary (they have security reasons to do it).
** After gathering this library list we pass it to QtWebProcess what hard links them into the sandbox environment. To do this the command line of QtWebProcess has got a third parameter with a pointer to the library list.
* Unfortunatelly ldd doesn&apos;t detect all the needed libaries because some of them are dynamically loaded. So we should determine them manually. For this I&apos;m stepping through the alexa top100 list and checking what are missing (this list is incomplete yet).
Furthermore, since the different linux distrubions and versions could have these libaries with different versions and paths, we have to obtain the actually installed versions. One possible way is the `ldconfig -p` command. I implemented this one and also linked the result into the sandbox.

Further plans, questions and problems:
* To decrease the attack surface, what was raised by putting the suid flag to QtWebProcess, I intend to outsource the code of sandboxing into a sepatated binary. This way only this binary would have suid flag and it would be an intermediate step between UIProcess and QtWebProcess (if --suid-sandbox-linux flag is enabled ofc). Any objections? Opinions?
* Using hard links raises a limitation: since hard links only works if the link and the target are on the same partition so the installed webkit should be on the OS partition. Any ideas how to workaround it are appreciated!
** Although copying the files instead hard linking them would solve this problem I&apos;m not sure whether it worths the overhead (currently it would effect ~100 files and ~30Mb data).
* An other plan is to remove all mounting step and using copy, link, etc instead. This way the cleanup also will be easier, since we don&apos;t have to wait until all the mounted resource will be free and ready to unmount. Btw what do you think, what would be the better way: building up and destroying the sandbox environment every time the WebProcess born and die or only once and using it later too? The second one is quicker but has security concerns if someone compromise the sandbox directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675496</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-23 00:48:03 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Created an attachment (id=153232) [details]
&gt; Still not complete, but makes more sense :)
&gt; 
&gt; The patch contains the following updates:
&gt; * The number of mounted directories are strongly reduced.
&gt; * An ldd funcionality is included. It gathers the shared libraries what are needed by QtWebProcess.
&gt; ** It is placed into UIProcess because glibc prevent us from calling ldd from suid binary (they have security reasons to do it).
&gt; ** After gathering this library list we pass it to QtWebProcess what hard links them into the sandbox environment. To do this the command line of QtWebProcess has got a third parameter with a pointer to the library list.
&gt; * Unfortunatelly ldd doesn&apos;t detect all the needed libaries because some of them are dynamically loaded. So we should determine them manually. For this I&apos;m stepping through the alexa top100 list and checking what are missing (this list is incomplete yet).
&gt; Furthermore, since the different linux distrubions and versions could have these libaries with different versions and paths, we have to obtain the actually installed versions. One possible way is the `ldconfig -p` command. I implemented this one and also linked the result into the sandbox.
&gt; 
&gt; Further plans, questions and problems:
&gt; * To decrease the attack surface, what was raised by putting the suid flag to QtWebProcess, I intend to outsource the code of sandboxing into a sepatated binary. This way only this binary would have suid flag and it would be an intermediate step between UIProcess and QtWebProcess (if --suid-sandbox-linux flag is enabled ofc). Any objections? Opinions?

I don&apos;t understand how this makes any attack harder. Can you explain a bit?

&gt; * Using hard links raises a limitation: since hard links only works if the link and the target are on the same partition so the installed webkit should be on the OS partition. Any ideas how to workaround it are appreciated!
&gt; ** Although copying the files instead hard linking them would solve this problem I&apos;m not sure whether it worths the overhead (currently it would effect ~100 files and ~30Mb data).
&gt; * An other plan is to remove all mounting step and using copy, link, etc instead. This way the cleanup also will be easier, since we don&apos;t have to wait until all the mounted resource will be free and ready to unmount. Btw what do you think, what would be the better way: building up and destroying the sandbox environment every time the WebProcess born and die or only once and using it later too? The second one is quicker but has security concerns if someone compromise the sandbox directory.

The mount man page claims that you can bind-mount also files, but I haven&apos;t managed to get that working. But this particular issue of file visibility goes away if QtWebProcess itself is suid or if alternatively you do the chroot _after_ loading the depending shared libraries.

Plugins are indeed trickier, but I don&apos;t think those would be so big that copying would be an issue. What plugins could there be?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675611</commentid>
    <comment_count>21</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-07-23 04:24:27 -0700</bug_when>
    <thetext>(In reply to comment #20)

&gt; &gt; Further plans, questions and problems:
&gt; &gt; * To decrease the attack surface, what was raised by putting the suid flag to QtWebProcess, I intend to outsource the code of sandboxing into a sepatated binary. This way only this binary would have suid flag and it would be an intermediate step between UIProcess and QtWebProcess (if --suid-sandbox-linux flag is enabled ofc). Any objections? Opinions?
&gt; 
&gt; I don&apos;t understand how this makes any attack harder. Can you explain a bit?
The shorter time the attacker has suid rights, the less possibility to do something really bad. (At least IMHO.) And for sandboxing we only need this right by setting up the environment.

&gt; The mount man page claims that you can bind-mount also files, but I haven&apos;t managed to get that working. But this particular issue of file visibility goes away if QtWebProcess itself is suid or if alternatively you do the chroot _after_ loading the depending shared libraries.
Actually I do chrooting after the dependency load right now. My problem with binding is not binding direcorties or files, but the binding itself. Let&apos;s say I bind /proc. Then I cannot umount it after WebProcess ended because it&apos;s still busy (lazy unmount could be a solution, but the containing directory won&apos;t be deleted that way).
Copying can work except persistent storages like caches, where the user desires to keep the data.

&gt; Plugins are indeed trickier, but I don&apos;t think those would be so big that copying would be an issue. What plugins could there be?
Adding all possible plugins and its dependencies to the sandbox seems an operable solution. We can get their paths with PluginDatabase::defaultPluginDirectories().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677973</commentid>
    <comment_count>22</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-07-25 06:13:29 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; 
&gt; &gt; &gt; Further plans, questions and problems:
&gt; &gt; &gt; * To decrease the attack surface, what was raised by putting the suid flag to QtWebProcess, I intend to outsource the code of sandboxing into a sepatated binary. This way only this binary would have suid flag and it would be an intermediate step between UIProcess and QtWebProcess (if --suid-sandbox-linux flag is enabled ofc). Any objections? Opinions?
&gt; &gt; 
&gt; &gt; I don&apos;t understand how this makes any attack harder. Can you explain a bit?
&gt; The shorter time the attacker has suid rights, the less possibility to do something really bad. (At least IMHO.) And for sandboxing we only need this right by setting up the environment.

So, what do you think? Do we want to have such separation or not? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693148</commentid>
    <comment_count>23</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-11 14:25:47 -0700</bug_when>
    <thetext>I&apos;m back from holiday. Let&apos;s continue the work! Comments are still welcomed ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703171</commentid>
    <comment_count>24</comment_count>
      <attachid>160200</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-23 11:20:06 -0700</bug_when>
    <thetext>Created attachment 160200
Proposed patch

Introducing the new SUIDSandboxHelper process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703172</commentid>
    <comment_count>25</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-23 11:20:25 -0700</bug_when>
    <thetext>Basically the patch contains the following changes:
* It moves the suid sandbox functionality into a new binary, named SUIDSandboxHelper. This process contains all operations that need sudoer rights. This way only this short code snippet will have suid flag and WebProcess runs with nobody rights already. So a malicious attacker has less opportunity to gain root rights.
* Due to this modification, the sandbox environment also had to be changed.
* Only special directories (file systems): /proc and /run/shm are &quot;mount --bind&quot;-ed right now, the others are simply hard linked. (Binding them still raises security problems. The next step is to solve them.)

These are the substantive changes. Details are in the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703176</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-23 11:22:50 -0700</bug_when>
    <thetext>Attachment 160200 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/Configurations/FeatureDefin...&quot; exit_code: 1
Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:22:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:24:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703303</commentid>
    <comment_count>27</comment_count>
      <attachid>160200</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-23 13:27:11 -0700</bug_when>
    <thetext>Comment on attachment 160200
Proposed patch

Attachment 160200 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13571747</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703873</commentid>
    <comment_count>28</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-24 01:19:30 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 160200 [details])
&gt; Attachment 160200 [details] did not pass qt-wk2-ews (qt):
&gt; Output: http://queues.webkit.org/results/13571747

The reason of this fail (besides I missed to write back the ENABLE(SUID_SANDBOX_LINUX) macros into the new files too) is that the glibc version on qt-wk2-ews is 2.11.3-3 however the definition of MS_MOVE and MS_REC are only supported from 2.12.
Besides it&apos;s quite hard to test the patch with ews because it has only effect if the build was called with --suid-linux-sandbox flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704848</commentid>
    <comment_count>29</comment_count>
      <attachid>160200</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-26 08:29:12 -0700</bug_when>
    <thetext>Comment on attachment 160200
Proposed patch

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

Just a quick look though.. so no comments on the actual implementation.

I don&apos;t understand why this is so tied to Qt. It doesn&apos;t really need to.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:43
&gt; +SandboxEnvironmentHandlerQt::SandboxEnvironmentHandlerQt(QString chrootDir)

Why not SandboxEnvironementLinux or so

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:75
&gt; +            mknod((sandboxRoot + devices.at(i)).toLocal8Bit().data(),
&gt; +                  S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, makedev(major(dev), minor(dev)));
&gt; +        }

Maybe some description what this means? or what you are attempting

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:96
&gt; +void SandboxEnvironmentHandlerQt::addNobodyUser()

addNobodyUserToPasswd?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:106
&gt; +    struct passwd* nobodyUser = getpwnam(&quot;nobody&quot;);
&gt; +    QString passwordContent = QLatin1String(nobodyUser-&gt;pw_name) + QLatin1Char(&apos;:&apos;) +
&gt; +                              QLatin1String(nobodyUser-&gt;pw_passwd) + QLatin1Char(&apos;:&apos;) +
&gt; +                              QString::number(nobodyUser-&gt;pw_uid) + QLatin1Char(&apos;:&apos;) +
&gt; +                              QString::number(nobodyUser-&gt;pw_gid) + QLatin1Char(&apos;:&apos;) +
&gt; +                              QLatin1String(nobodyUser-&gt;pw_gecos) + QLatin1Char(&apos;:&apos;) +

Why making all this so Qt dependent for no apparent reason? The WebKit string methods are probably a lot faster and cross platform (http://trac.webkit.org/wiki/EfficientStrings) and maybe GTK and EFL would be interested in the same functionality at some point

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:114
&gt; +void SandboxEnvironmentHandlerQt::createLink(QString src, QString target)

sourcePath, targetPath? or linkPath, sourcePath.

Why not call it linkFile when you already have a linkDirectory. Currently it is inconsistent

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.h:32
&gt; +    QStringList directoriesToBeBinded;

Binded? Isn&apos;t it called bound (http://en.wiktionary.org/wiki/bind)

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.h:42
&gt; +    void addNobodyUser();

Add it where?

&gt; Source/WebKit2/SandboxProcess/SandboxProcess.pro:23
&gt; +
&gt; +
&gt; +

why all these newlines

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:112
&gt; +static void collectDepencednies(QString &amp;dependenyList, QString process, char params[])

Dependencies*

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:144
&gt; +                      dependenyList += QLatin1String(pathOfTheLibrary);

dependencyList*

I think some of this code should be split out into methods, that would also make it a lot easier to understand

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:278
&gt; -            delete webProcess;
&gt; +            delete webProcessOrSUIDHelper;

Could this be an OwnPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707502</commentid>
    <comment_count>30</comment_count>
      <attachid>161242</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-29 09:05:37 -0700</bug_when>
    <thetext>Created attachment 161242
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707504</commentid>
    <comment_count>31</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-29 09:06:35 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 160200 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160200&amp;action=review
&gt; 
&gt; Just a quick look though.. so no comments on the actual implementation.
First of all, thank you for the quick review. :)

&gt; I don&apos;t understand why this is so tied to Qt. It doesn&apos;t really need to.
Indeed. It was easier to use the tools what Qt supplied (I think  here of the file operation functions and not strings). Now they are rewritten: mkpath, mkdir, linkFileRecursively, linkDirectory, etc... They are part of the sandboxhandler now. Is it right?

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:43
&gt; &gt; +SandboxEnvironmentHandlerQt::SandboxEnvironmentHandlerQt(QString chrootDir)
&gt; 
&gt; Why not SandboxEnvironementLinux or so
Right. Renamed.

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:75
&gt; &gt; +            mknod((sandboxRoot + devices.at(i)).toLocal8Bit().data(),
&gt; &gt; +                  S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, makedev(major(dev), minor(dev)));
&gt; &gt; +        }
&gt; 
&gt; Maybe some description what this means? or what you are attempting
The device files, what we have to use (random and urandom), are character devices and their permissions should be: rw-rw-rw. The formula above describes this. Explanation comment is added to the source.

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:96
&gt; &gt; +void SandboxEnvironmentHandlerQt::addNobodyUser()
&gt; 
&gt; addNobodyUserToPasswd?
Okay, changed.

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:106
&gt; &gt; +    struct passwd* nobodyUser = getpwnam(&quot;nobody&quot;);
&gt; &gt; +    QString passwordContent = QLatin1String(nobodyUser-&gt;pw_name) + QLatin1Char(&apos;:&apos;) +
&gt; &gt; +                              QLatin1String(nobodyUser-&gt;pw_passwd) + QLatin1Char(&apos;:&apos;) +
&gt; &gt; +                              QString::number(nobodyUser-&gt;pw_uid) + QLatin1Char(&apos;:&apos;) +
&gt; &gt; +                              QString::number(nobodyUser-&gt;pw_gid) + QLatin1Char(&apos;:&apos;) +
&gt; &gt; +                              QLatin1String(nobodyUser-&gt;pw_gecos) + QLatin1Char(&apos;:&apos;) +
&gt; 
&gt; Why making all this so Qt dependent for no apparent reason? The WebKit string methods are probably a lot faster and cross platform (http://trac.webkit.org/wiki/EfficientStrings) and maybe GTK and EFL would be interested in the same functionality at some point
Right. QStrings are changed to WTFStrings. The only Qt-specific thing is the QProcess (QtWebProcess) now.

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.cpp:114
&gt; &gt; +void SandboxEnvironmentHandlerQt::createLink(QString src, QString target)
&gt; 
&gt; sourcePath, targetPath? or linkPath, sourcePath.
&gt; Why not call it linkFile when you already have a linkDirectory. Currently it is inconsistent
Done.

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.h:32
&gt; &gt; +    QStringList directoriesToBeBinded;
&gt; 
&gt; Binded? Isn&apos;t it called bound (http://en.wiktionary.org/wiki/bind)
OK.

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentHandlerQt.h:42
&gt; &gt; +    void addNobodyUser();
&gt; 
&gt; Add it where?
Renamed. 

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxProcess.pro:23
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +
&gt; 
&gt; why all these newlines
Removed.

&gt; &gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:112
&gt; &gt; +static void collectDepencednies(QString &amp;dependenyList, QString process, char params[])
&gt; 
&gt; Dependencies*
OK.
 
&gt; &gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:144
&gt; &gt; +                      dependenyList += QLatin1String(pathOfTheLibrary);
&gt; 
&gt; dependencyList*
OK.

&gt; I think some of this code should be split out into methods, that would also make it a lot easier to understand
Done.
 
&gt; &gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:278
&gt; &gt; -            delete webProcess;
&gt; &gt; +            delete webProcessOrSUIDHelper;
&gt; 
&gt; Could this be an OwnPtr?
I didn&apos;t want to change the original implementation at all (this is just a renaming too). But if you think I can change it ofc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707716</commentid>
    <comment_count>32</comment_count>
      <attachid>161242</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-29 12:05:25 -0700</bug_when>
    <thetext>Comment on attachment 161242
Proposed patch

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

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:57
&gt; +    m_devices.append(&quot;/dev/urandom&quot;);

appendLiteral(&quot;/dev/urandom&quot;); is more effective

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:69
&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.local/share/Nokia/&quot;);
&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.cache/Nokia/&quot;);

if PLATFORM(QT) ?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:75
&gt; +    m_directoriesToBeLinked.append(ASCIILiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;);

appendLiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;) &lt;- but there is a method for adding dirs String pathByAppendingComponent(const String&amp; path, const String&amp; component) defined in FileSystem.h

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:79
&gt; +void SandboxEnvironmentLinux::mkDir(const char *path, mode_t mode)

I wonder whether it is better to call this createDirectory or so? Where are you using mode?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:92
&gt; +    char* clonePath = (char*)malloc(sizeof(char*) * strlen(path));

All buffers containing strings input by the user should be explicitly terminated with \0 before a call to strlen()

Why not just use mkPath(const String &amp;) That is safer

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:93
&gt; +    strcpy(clonePath, path);

strcpy can be a security issue. https://buildsecurityin.us-cert.gov/bsi-rules/home/g1/848-BSI.html

strlcpy/strncpy can be a replacement

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:107
&gt; +    startOfSubPath = endOfSubPath;
&gt; +    while ((endOfSubPath = strchr(startOfSubPath, &apos;/&apos;))) {
&gt; +        if (endOfSubPath != startOfSubPath) {
&gt; +            *endOfSubPath = &apos;\0&apos;;
&gt; +            mkDir(clonePath, mode);
&gt; +            *endOfSubPath = &apos;/&apos;;
&gt; +        }
&gt; +        startOfSubPath = endOfSubPath + 1;
&gt; +    }
&gt; +    free(endOfSubPath);
&gt; +    free(clonePath);
&gt; +    // Create the last directory.
&gt; +    mkDir(path, mode);

Why not something like

  if (!path || !*path))
      return false;

  bool ok = true;

  char* ptr = path;
  while (ptr = strchr(ptr + 1, &apos;/&apos;)) {
      *ptr = &apos;\0&apos;;
      ok = mkdir(path, mode) != -1;
      *ptr = &apos;/&apos;;

      if (!ok)
         break;
  }

  return ok;
}

It modified in the link and avoids malloc

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:113
&gt; +    mkPath(devDirectory.utf8().data(), 0777);

0777 could use a comment

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:169
&gt; +    if (link(sourceFile.latin1().data(), targetFile.latin1().data()) == -1 &amp;&amp; errno != EEXIST)

why latin1?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:254
&gt; +    String xauthorityOfRealUser = String::fromUTF8(getenv(&quot;HOME&quot;)) + &quot;/.Xauthority&quot;;
&gt; +    String xauthorityInSandbox = m_sandboxRoot + m_homeDirectory + &quot;/.Xauthority&quot;;

What if not running under X ?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:278
&gt; +    const String sandboxDirectory = String::fromUTF8(getpwuid(getpwuid(getuid())-&gt;pw_uid)-&gt;pw_dir) + String::fromUTF8(&quot;/.wk-sandbox102&quot;);

the latter seems like a literal.. .why from UTF8?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.h:36
&gt; +    Vector&lt;String&gt; m_filesToBeLinked;

I dont like this tobe much... why not just m_linkedFiles, m_linkedDirectories, m_linkedHomeDirectories

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.h:40
&gt; +    String m_webkitDirectory;

Why not binaryDirectory?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.h:42
&gt; +    SandboxEnvironmentLinux(String, String);

const STring &amp;?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.h:44
&gt; +    void addDependencies(String);

why nost const String&amp; ?

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:114
&gt; +static void filterDependenciesFromLddOutput(char* buffer, String&amp; dependencyList)

LDD would be the correct style.

libraryDependencies

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:118
&gt; +    // The output of ldd can have two formats:
&gt; +    // 1) \tname_of_the_library =&gt; path_of_library (address_of_the_libary)
&gt; +    // 2) path_of_the_library (address_of_the_libary)

What if ldd gets compromised?

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:126
&gt; +    if (numberOfmatchingCharacters &gt; 0) {
&gt; +      dependencyList.append(pathOfTheLibrary);
&gt; +      dependencyList.append(&apos;;&apos;);
&gt; +    }

Why not use a vector

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:131
&gt; +    String library(buffer);

What is this is really long? not a security issue? :-), why no limit

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:133
&gt; +    // The list of emirically gathered dependency libraries.

emirically? empirically? &quot;library dependencies&quot; maybe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707721</commentid>
    <comment_count>33</comment_count>
      <attachid>161242</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-29 12:11:55 -0700</bug_when>
    <thetext>Comment on attachment 161242
Proposed patch

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

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:105
&gt; +    free(endOfSubPath);
&gt; +    free(clonePath);

Do you really need to do all this manual memory management?  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708276</commentid>
    <comment_count>34</comment_count>
      <attachid>161242</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-29 21:17:36 -0700</bug_when>
    <thetext>Comment on attachment 161242
Proposed patch

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

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:69
&gt;&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.local/share/Nokia/&quot;);
&gt;&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.cache/Nokia/&quot;);
&gt; 
&gt; if PLATFORM(QT) ?

How about ./cache/org.webkit ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708409</commentid>
    <comment_count>35</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-30 01:25:55 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 161242 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161242&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:57
&gt; &gt; +    m_devices.append(&quot;/dev/urandom&quot;);
&gt; 
&gt; appendLiteral(&quot;/dev/urandom&quot;); is more effective
m_devices and the others are WTFVectors right now and appendLiteral is for StringBuilders. Should I change the type of these members?

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:79
&gt; &gt; +void SandboxEnvironmentLinux::mkDir(const char *path, mode_t mode)
&gt; 
&gt; I wonder whether it is better to call this createDirectory or so? Where are you using mode?
Actually nowhere right now. I created all directories with 0777 for simplicity, but I&apos;m thinking of the right solution. The permissions of the most system directories are 0755 and their owner is root ofc. In the other hand, directories in home directory have different permissions (and owner). So what should I do? Ask the permissions of the original directories and set the same to the &quot;mirror&quot; directories in the sandbox? Or since we only have a nobody user should I care only with this and set system dirs to 0050 and nobodys home to 0700? (I have to change the owner of the nobodys home folder too ofc.)

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:254
&gt; &gt; +    String xauthorityOfRealUser = String::fromUTF8(getenv(&quot;HOME&quot;)) + &quot;/.Xauthority&quot;;
&gt; &gt; +    String xauthorityInSandbox = m_sandboxRoot + m_homeDirectory + &quot;/.Xauthority&quot;;
&gt; 
&gt; What if not running under X ?
I guess you think of using webkit on embedded systems. But unfortunatelly I&apos;m not really sure what should I take care of. Any hints would be appreciated.

&gt; &gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:118
&gt; &gt; +    // The output of ldd can have two formats:
&gt; &gt; +    // 1) \tname_of_the_library =&gt; path_of_library (address_of_the_libary)
&gt; &gt; +    // 2) path_of_the_library (address_of_the_libary)
&gt; 
&gt; What if ldd gets compromised?
If ldd is compromised that means the enemy is &quot;in the house&quot; already. Should/can we stop him?

&gt; &gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:126
&gt; &gt; +    if (numberOfmatchingCharacters &gt; 0) {
&gt; &gt; +      dependencyList.append(pathOfTheLibrary);
&gt; &gt; +      dependencyList.append(&apos;;&apos;);
&gt; &gt; +    }
&gt; 
&gt; Why not use a vector
Because I should send this list to the sandboxProcess and the commandline (QString::arg()) only operates with strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708412</commentid>
    <comment_count>36</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-30 01:34:11 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 161242 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161242&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:69
&gt; &gt;&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.local/share/Nokia/&quot;);
&gt; &gt;&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.cache/Nokia/&quot;);
&gt; &gt; 
&gt; &gt; if PLATFORM(QT) ?
&gt; 
&gt; How about ./cache/org.webkit ?
Actually I don&apos;t have cache directory with this name in my home :$. Should I?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708435</commentid>
    <comment_count>37</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-30 02:19:35 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #34)
&gt; &gt; (From update of attachment 161242 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161242&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:69
&gt; &gt; &gt;&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.local/share/Nokia/&quot;);
&gt; &gt; &gt;&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.cache/Nokia/&quot;);
&gt; &gt; &gt; 
&gt; &gt; &gt; if PLATFORM(QT) ?
&gt; &gt; 
&gt; &gt; How about ./cache/org.webkit ?
&gt; Actually I don&apos;t have cache directory with this name in my home :$. Should I?

I think he is suggesting that you change Qt, EFL, GTK etc to use that name instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708436</commentid>
    <comment_count>38</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-30 02:20:03 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #32)
&gt; &gt; (From update of attachment 161242 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161242&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:57
&gt; &gt; &gt; +    m_devices.append(&quot;/dev/urandom&quot;);
&gt; &gt; 
&gt; &gt; appendLiteral(&quot;/dev/urandom&quot;); is more effective
&gt; m_devices and the others are WTFVectors right now and appendLiteral is for StringBuilders. Should I change the type of these members?

Then you can use ASCIILiteral</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708475</commentid>
    <comment_count>39</comment_count>
      <attachid>161242</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-08-30 03:56:18 -0700</bug_when>
    <thetext>Comment on attachment 161242
Proposed patch

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

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:32
&gt; +#include &lt;QCoreApplication&gt;
&gt; +#include &lt;QDebug&gt;
&gt; +#include &lt;QDir&gt;
&gt; +#include &lt;QFile&gt;
&gt; +#include &lt;QFileInfo&gt;
&gt; +#include &lt;QProcess&gt;

I would not call it SandboxEnvironment_Linux_.cpp with these Qt dependencies. It is misleading and some might think it will work on GTK or EFL (which would be nice).

&gt;&gt;&gt;&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:69
&gt;&gt;&gt;&gt;&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.cache/Nokia/&quot;);
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; if PLATFORM(QT) ?
&gt;&gt;&gt; 
&gt;&gt;&gt; How about ./cache/org.webkit ?
&gt;&gt; 
&gt;&gt; Actually I don&apos;t have cache directory with this name in my home :$. Should I?
&gt; 
&gt; I think he is suggesting that you change Qt, EFL, GTK etc to use that name instead

Why not use the ::platformInitialize() pattern here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708479</commentid>
    <comment_count>40</comment_count>
      <attachid>161242</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-30 04:01:31 -0700</bug_when>
    <thetext>Comment on attachment 161242
Proposed patch

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

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:32
&gt;&gt; +#include &lt;QProcess&gt;
&gt; 
&gt; I would not call it SandboxEnvironment_Linux_.cpp with these Qt dependencies. It is misleading and some might think it will work on GTK or EFL (which would be nice).

Yeah... I forgot to remove them. Only QProcess is what we need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708566</commentid>
    <comment_count>41</comment_count>
      <attachid>161242</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-30 06:38:12 -0700</bug_when>
    <thetext>Comment on attachment 161242
Proposed patch

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

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:75
&gt;&gt; +    m_directoriesToBeLinked.append(ASCIILiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;);
&gt; 
&gt; appendLiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;) &lt;- but there is a method for adding dirs String pathByAppendingComponent(const String&amp; path, const String&amp; component) defined in FileSystem.h

Yes. I checked it. There are few useful methods what I could use (makeAllDirectories, fileExist, directoryName, etc...). But w/o linking the whole libWebCore to my sandbox it won&apos;t work. However if I do this then the sandbox conception would lose its original purpose. We discussed about it with bbandix on IRC and it&apos;s possible to link just a few source from webcore to the sandbox. Unfortunatelly it would need a lot of hack and MACROs and I guess it doesn&apos;t worth for just few functions. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708570</commentid>
    <comment_count>42</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-30 06:49:22 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 161242 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161242&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:75
&gt; &gt;&gt; +    m_directoriesToBeLinked.append(ASCIILiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;);
&gt; &gt; 
&gt; &gt; appendLiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;) &lt;- but there is a method for adding dirs String pathByAppendingComponent(const String&amp; path, const String&amp; component) defined in FileSystem.h
&gt; 
&gt; Yes. I checked it. There are few useful methods what I could use (makeAllDirectories, fileExist, directoryName, etc...). But w/o linking the whole libWebCore to my sandbox it won&apos;t work. However if I do this then the sandbox conception would lose its original purpose. We discussed about it with bbandix on IRC and it&apos;s possible to link just a few source from webcore to the sandbox. Unfortunatelly it would need a lot of hack and MACROs and I guess it doesn&apos;t worth for just few functions. What do you think?

That is fine reasoning. Still reusing the method names makes sense</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708582</commentid>
    <comment_count>43</comment_count>
      <attachid>161242</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-30 07:00:34 -0700</bug_when>
    <thetext>Comment on attachment 161242
Proposed patch

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

&gt;&gt;&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:75
&gt;&gt;&gt;&gt; +    m_directoriesToBeLinked.append(ASCIILiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;);
&gt;&gt;&gt; 
&gt;&gt;&gt; appendLiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;) &lt;- but there is a method for adding dirs String pathByAppendingComponent(const String&amp; path, const String&amp; component) defined in FileSystem.h
&gt;&gt; 
&gt;&gt; Yes. I checked it. There are few useful methods what I could use (makeAllDirectories, fileExist, directoryName, etc...). But w/o linking the whole libWebCore to my sandbox it won&apos;t work. However if I do this then the sandbox conception would lose its original purpose. We discussed about it with bbandix on IRC and it&apos;s possible to link just a few source from webcore to the sandbox. Unfortunatelly it would need a lot of hack and MACROs and I guess it doesn&apos;t worth for just few functions. What do you think?
&gt; 
&gt; That is fine reasoning. Still reusing the method names makes sense

Well, the other option is to not have a separate binary for the sandbox. What does it _really_ buy us?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708617</commentid>
    <comment_count>44</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-30 07:55:04 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 161242 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161242&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:75
&gt; &gt;&gt;&gt;&gt; +    m_directoriesToBeLinked.append(ASCIILiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;);
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; appendLiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;) &lt;- but there is a method for adding dirs String pathByAppendingComponent(const String&amp; path, const String&amp; component) defined in FileSystem.h
&gt; &gt;&gt; 
&gt; &gt;&gt; Yes. I checked it. There are few useful methods what I could use (makeAllDirectories, fileExist, directoryName, etc...). But w/o linking the whole libWebCore to my sandbox it won&apos;t work. However if I do this then the sandbox conception would lose its original purpose. We discussed about it with bbandix on IRC and it&apos;s possible to link just a few source from webcore to the sandbox. Unfortunatelly it would need a lot of hack and MACROs and I guess it doesn&apos;t worth for just few functions. What do you think?
&gt; &gt; 
&gt; &gt; That is fine reasoning. Still reusing the method names makes sense
&gt; 
&gt; Well, the other option is to not have a separate binary for the sandbox. What does it _really_ buy us?
The basic problem with chrooted sandbox is that the process that performs the chroot() call needs superuser permissions. For this, the process should be run with sudo or it should have its SUID flag set. That&apos;s, if WebProcess calls the chroot() then it will live with suid rights from the beginnig until its end, even if we change back its effective user to nobody. Then again, if we push all the problematic tasks into a separated binary and give rights only to this binary, then we have to take care of this little codebase only security-wise, not of the whole WebProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708702</commentid>
    <comment_count>45</comment_count>
      <attachid>161242</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-30 09:17:08 -0700</bug_when>
    <thetext>Comment on attachment 161242
Proposed patch

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

&gt;&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:114
&gt;&gt; +static void filterDependenciesFromLddOutput(char* buffer, String&amp; dependencyList)
&gt; 
&gt; LDD would be the correct style.
&gt; 
&gt; libraryDependencies

Did you think of &quot;filterLibraryDependenciesFromLDDOutput&quot; or &quot;String&amp; libraryDependencies&quot; by your second naming suggestion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709419</commentid>
    <comment_count>46</comment_count>
      <attachid>161645</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-31 02:33:25 -0700</bug_when>
    <thetext>Created attachment 161645
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709420</commentid>
    <comment_count>47</comment_count>
      <attachid>161242</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-31 02:33:57 -0700</bug_when>
    <thetext>Comment on attachment 161242
Proposed patch

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

&gt;&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:32
&gt;&gt;&gt; +#include &lt;QProcess&gt;
&gt;&gt; 
&gt;&gt; I would not call it SandboxEnvironment_Linux_.cpp with these Qt dependencies. It is misleading and some might think it will work on GTK or EFL (which would be nice).
&gt; 
&gt; Yeah... I forgot to remove them. Only QProcess is what we need.

Removed.

&gt;&gt;&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:57
&gt;&gt;&gt;&gt; +    m_devices.append(&quot;/dev/urandom&quot;);
&gt;&gt;&gt; 
&gt;&gt;&gt; appendLiteral(&quot;/dev/urandom&quot;); is more effective
&gt;&gt; 
&gt;&gt; m_devices and the others are WTFVectors right now and appendLiteral is for StringBuilders. Should I change the type of these members?
&gt; 
&gt; Then you can use ASCIILiteral

OK.

&gt;&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:79
&gt;&gt;&gt; +void SandboxEnvironmentLinux::mkDir(const char *path, mode_t mode)
&gt;&gt; 
&gt;&gt; I wonder whether it is better to call this createDirectory or so? Where are you using mode?
&gt; 
&gt; Actually nowhere right now. I created all directories with 0777 for simplicity, but I&apos;m thinking of the right solution. The permissions of the most system directories are 0755 and their owner is root ofc. In the other hand, directories in home directory have different permissions (and owner). So what should I do? Ask the permissions of the original directories and set the same to the &quot;mirror&quot; directories in the sandbox? Or since we only have a nobody user should I care only with this and set system dirs to 0050 and nobodys home to 0700? (I have to change the owner of the nobodys home folder too ofc.)

I&apos;ve added the permissions() function what obtain the protection information of the original directory and set the same in the sandbox too.

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:92
&gt;&gt; +    char* clonePath = (char*)malloc(sizeof(char*) * strlen(path));
&gt; 
&gt; All buffers containing strings input by the user should be explicitly terminated with \0 before a call to strlen()
&gt; 
&gt; Why not just use mkPath(const String &amp;) That is safer

This function is rewritten in the new version according to your suggestions.

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:93
&gt;&gt; +    strcpy(clonePath, path);
&gt; 
&gt; strcpy can be a security issue. https://buildsecurityin.us-cert.gov/bsi-rules/home/g1/848-BSI.html
&gt; 
&gt; strlcpy/strncpy can be a replacement

I don&apos;t need such functionality anymore.

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:105
&gt;&gt; +    free(clonePath);
&gt; 
&gt; Do you really need to do all this manual memory management?  :(

Not anymore. :)

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:169
&gt;&gt; +    if (link(sourceFile.latin1().data(), targetFile.latin1().data()) == -1 &amp;&amp; errno != EEXIST)
&gt; 
&gt; why latin1?

Mistake.

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:278
&gt;&gt; +    const String sandboxDirectory = String::fromUTF8(getpwuid(getpwuid(getuid())-&gt;pw_uid)-&gt;pw_dir) + String::fromUTF8(&quot;/.wk-sandbox102&quot;);
&gt; 
&gt; the latter seems like a literal.. .why from UTF8?

Yeah, it&apos;s a literal.

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.h:36
&gt;&gt; +    Vector&lt;String&gt; m_filesToBeLinked;
&gt; 
&gt; I dont like this tobe much... why not just m_linkedFiles, m_linkedDirectories, m_linkedHomeDirectories

Renamed.

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.h:40
&gt;&gt; +    String m_webkitDirectory;
&gt; 
&gt; Why not binaryDirectory?

Renamed.

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.h:42
&gt;&gt; +    SandboxEnvironmentLinux(String, String);
&gt; 
&gt; const STring &amp;?

Ok.

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.h:44
&gt;&gt; +    void addDependencies(String);
&gt; 
&gt; why nost const String&amp; ?

Ok.

&gt;&gt;&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:114
&gt;&gt;&gt; +static void filterDependenciesFromLddOutput(char* buffer, String&amp; dependencyList)
&gt;&gt; 
&gt;&gt; LDD would be the correct style.
&gt;&gt; 
&gt;&gt; libraryDependencies
&gt; 
&gt; Did you think of &quot;filterLibraryDependenciesFromLDDOutput&quot; or &quot;String&amp; libraryDependencies&quot; by your second naming suggestion?

I&apos;ve changed both of them :P

&gt;&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:131
&gt;&gt; +    String library(buffer);
&gt; 
&gt; What is this is really long? not a security issue? :-), why no limit

Limited.

&gt;&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:133
&gt;&gt; +    // The list of emirically gathered dependency libraries.
&gt; 
&gt; emirically? empirically? &quot;library dependencies&quot; maybe

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709464</commentid>
    <comment_count>48</comment_count>
      <attachid>161645</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-31 03:55:41 -0700</bug_when>
    <thetext>Comment on attachment 161645
Proposed patch

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

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:77
&gt; +{
&gt; +    char* clone = const_cast&lt;char*&gt;(path.utf8().data());

I think this would be nicer (and more safe; modifying a local copy):

String copy = path;

char* ptr = copy.utf8().data();

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:92
&gt; +    ok = mkdir(path.utf8().data(), mode) || errno == EEXIST;
&gt; +    if (ok)
&gt; +        return true;
&gt; +    return false;

why not return ok?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:95
&gt; +static mode_t permissions(String directory)

const String&amp; ?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:222
&gt; +            source.insert(&quot;/&quot;, 0);

isn&apos;t there an insert(&apos;/&apos;, 0)?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:274
&gt; +int main(int argc, char *argv[])
&gt; +{
&gt; +    const String sandboxDirectory = ASCIILiteral(getpwuid(getpwuid(getuid())-&gt;pw_uid)-&gt;pw_dir) + &quot;/.wk-sandbox&quot;;
&gt; +    SandboxEnvironmentLinux* sandboxHandler = new SandboxEnvironmentLinux(sandboxDirectory, ASCIILiteral(argv[0]));
&gt; +    sandboxHandler-&gt;initializeSandbox(ASCIILiteral(argv[3]));

Don&apos;t you want to varify the args ?

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:305
&gt; +    // Calling WebProcess with nobody rights.
&gt; +    QString commandLine = QLatin1String(&quot;%1 %2&quot;);
&gt; +    commandLine = commandLine.arg(QLatin1String(argv[1]));
&gt; +    commandLine = commandLine.arg(QLatin1String(argv[2]));
&gt; +
&gt; +    QProcess* webProcess = new QProcess();
&gt; +    webProcess-&gt;setProcessChannelMode(QProcess::ForwardedChannels);
&gt; +    webProcess-&gt;start(commandLine);
&gt; +

This should be in some platform method. Or the whole main should be in a different file per platform.

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:126
&gt; +    if (!numberOfmatchingCharacters)
&gt; +      numberOfmatchingCharacters = sscanf(buffer, &quot;\t/%s %*s\n&quot;, pathOfTheLibrary);
&gt; +    if (numberOfmatchingCharacters &gt; 0) {
&gt; +      libraryDependencies.append(pathOfTheLibrary);
&gt; +      libraryDependencies.append(&apos;;&apos;);
&gt; +    }

weird indentation

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:137
&gt; +    dynamicDependencies.append(&quot;libcrypto.so&quot;);
&gt; +    dynamicDependencies.append(&quot;libexpat.so&quot;);
&gt; +    dynamicDependencies.append(&quot;libfontconfig.so&quot;);
&gt; +    dynamicDependencies.append(&quot;libfreetype.so&quot;);

Can&apos;t these be gotten from the build system deps? or like pkgconfig ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709556</commentid>
    <comment_count>49</comment_count>
      <attachid>161645</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-31 06:08:58 -0700</bug_when>
    <thetext>Comment on attachment 161645
Proposed patch

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

&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:305
&gt;&gt; +
&gt; 
&gt; This should be in some platform method. Or the whole main should be in a different file per platform.

Yeah, it would make sense to take apart the platform specific codes (as Thiago mentioned it in #39 too). The question is what we want to have in those platform files? Do we really need to move out the whole main? It seems to me that the first part is common in all platforms and just the calling of WebPrcoess differs. Furthermore we could add an addPlaformSpecificDependencies() virtual method. This way SandboxEnvironmentLinux won&apos;t contain any Qt or platformdependent code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709560</commentid>
    <comment_count>50</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-31 06:12:29 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 161645 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161645&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:305
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; This should be in some platform method. Or the whole main should be in a different file per platform.
&gt; 
&gt; Yeah, it would make sense to take apart the platform specific codes (as Thiago mentioned it in #39 too). The question is what we want to have in those platform files? Do we really need to move out the whole main? It seems to me that the first part is common in all platforms and just the calling of WebPrcoess differs. Furthermore we could add an addPlaformSpecificDependencies() virtual method. This way SandboxEnvironmentLinux won&apos;t contain any Qt or platformdependent code.

Platform methods in webkit usually start with platform. like say there was a scrollBy() there might be a platformScrollby() as well called from it. Check WebKit for examples</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709563</commentid>
    <comment_count>51</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-08-31 06:15:41 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #49)
&gt; &gt; (From update of attachment 161645 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161645&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:305
&gt; &gt; &gt;&gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; This should be in some platform method. Or the whole main should be in a different file per platform.
&gt; &gt; 
&gt; &gt; Yeah, it would make sense to take apart the platform specific codes (as Thiago mentioned it in #39 too). The question is what we want to have in those platform files? Do we really need to move out the whole main? It seems to me that the first part is common in all platforms and just the calling of WebPrcoess differs. Furthermore we could add an addPlaformSpecificDependencies() virtual method. This way SandboxEnvironmentLinux won&apos;t contain any Qt or platformdependent code.
&gt; 
&gt; Platform methods in webkit usually start with platform. like say there was a scrollBy() there might be a platformScrollby() as well called from it. Check WebKit for examples
Okay. The mentioned name is just an example, we can change it ofc. The point is what we have in its body.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710442</commentid>
    <comment_count>52</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-03 00:08:17 -0700</bug_when>
    <thetext>Hmm... I was thinking about where is the best place for the new SandboxProcess directory and I guess I should have placed it into WebKit2/Shared instead of the root of WebKit2. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710547</commentid>
    <comment_count>53</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-03 04:48:08 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 161242 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161242&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:69
&gt; &gt;&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.local/share/Nokia/&quot;);
&gt; &gt;&gt; +    m_directoriesToBeLinkedFromHome.append(&quot;/.cache/Nokia/&quot;);
&gt; &gt; 
&gt; &gt; if PLATFORM(QT) ?
&gt; 
&gt; How about ./cache/org.webkit ?
I&apos;ve checked where this cache path comes from (at least in Qt): there is a dataLocation variable in QtDefaultDataLocation.cpp what requests the following:
QStandardPaths::writableLocation(QStandardPaths::DataLocation);

According to the specification it is equialent with the concatenation of QCoreApplication::organizationName() and QCoreApplication::applicationName(). These variables are set in the constructor of MiniBrowserApplication. At first sight, gtk and efl work similar. The question is: do we still want to use a common cache path? In this case all the three platform should agree on this ofc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710692</commentid>
    <comment_count>54</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-03 09:21:24 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 161645 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161645&amp;action=review

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:222
&gt; &gt; +            source.insert(&quot;/&quot;, 0);
&gt; 
&gt; isn&apos;t there an insert(&apos;/&apos;, 0)?
WTFString only supports the inserting of const String&amp; and const UChar*, not single chars.

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:274
&gt; &gt; +int main(int argc, char *argv[])
&gt; &gt; +{
&gt; &gt; +    const String sandboxDirectory = ASCIILiteral(getpwuid(getpwuid(getuid())-&gt;pw_uid)-&gt;pw_dir) + &quot;/.wk-sandbox&quot;;
&gt; &gt; +    SandboxEnvironmentLinux* sandboxHandler = new SandboxEnvironmentLinux(sandboxDirectory, ASCIILiteral(argv[0]));
&gt; &gt; +    sandboxHandler-&gt;initializeSandbox(ASCIILiteral(argv[3]));
&gt; 
&gt; Don&apos;t you want to varify the args ?
Hmm... What do you think of here exactly? Is it enough to check the number of the parameters? Or the types? Or what else?

&gt; &gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:305
&gt; &gt; +    // Calling WebProcess with nobody rights.
&gt; &gt; +    QString commandLine = QLatin1String(&quot;%1 %2&quot;);
&gt; &gt; +    commandLine = commandLine.arg(QLatin1String(argv[1]));
&gt; &gt; +    commandLine = commandLine.arg(QLatin1String(argv[2]));
&gt; &gt; +
&gt; &gt; +    QProcess* webProcess = new QProcess();
&gt; &gt; +    webProcess-&gt;setProcessChannelMode(QProcess::ForwardedChannels);
&gt; &gt; +    webProcess-&gt;start(commandLine);
&gt; &gt; +
&gt; 
&gt; This should be in some platform method. Or the whole main should be in a different file per platform.
Okay. I separated the platformdependent parts into two functions: platformInitialize() and platformRunWebProcess(). Is it all rigth?

&gt; &gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:137
&gt; &gt; +    dynamicDependencies.append(&quot;libcrypto.so&quot;);
&gt; &gt; +    dynamicDependencies.append(&quot;libexpat.so&quot;);
&gt; &gt; +    dynamicDependencies.append(&quot;libfontconfig.so&quot;);
&gt; &gt; +    dynamicDependencies.append(&quot;libfreetype.so&quot;);
&gt; 
&gt; Can&apos;t these be gotten from the build system deps? or like pkgconfig ?
Hm... I see that the build system uses pkgconfig to determine the paths of some libraries. But I cannot see clearly how could I use this in my source :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716031</commentid>
    <comment_count>55</comment_count>
      <attachid>163116</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-10 06:47:23 -0700</bug_when>
    <thetext>Created attachment 163116
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716032</commentid>
    <comment_count>56</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-10 06:48:40 -0700</bug_when>
    <thetext>In this patch the platform dependent parts are refactored into separated files. Besides Qt, I&apos;ve added the skeleton of such codes for efl and gtk.
Furthermore the permissions of all created directory are checked and set properly according to the original one. If the original owner was a simple user, then its owner inside the sandbox will be the nobody user.
Finally it&apos;s rebased to the current repository and to the latest qt. At some points you can also see more refactored parts but they don&apos;t have functional effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716039</commentid>
    <comment_count>57</comment_count>
      <attachid>163118</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-10 06:59:45 -0700</bug_when>
    <thetext>Created attachment 163118
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716045</commentid>
    <comment_count>58</comment_count>
      <attachid>163118</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-10 07:05:36 -0700</bug_when>
    <thetext>Comment on attachment 163118
Proposed patch

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

&gt; Source/WebCore/storage/StorageTracker.cpp:143
&gt; +

I will remove this.

&gt; Source/WebKit2/GNUmakefile.list.am:281
&gt; +        Source/WebKit2/SandboxProcess/SandboxEnvironmentLinuxGtk.cpp \

Oops. I&apos;ve used tabs instead of spaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716049</commentid>
    <comment_count>59</comment_count>
      <attachid>163118</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-10 07:08:15 -0700</bug_when>
    <thetext>Comment on attachment 163118
Proposed patch

Attachment 163118 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13796896</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716120</commentid>
    <comment_count>60</comment_count>
      <attachid>163118</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-09-10 08:44:51 -0700</bug_when>
    <thetext>Comment on attachment 163118
Proposed patch

Attachment 163118 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13811185</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719049</commentid>
    <comment_count>61</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-12 22:20:57 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (In reply to comment #43)
&gt; &gt; (From update of attachment 161242 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161242&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt;&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:75
&gt; &gt; &gt;&gt;&gt;&gt; +    m_directoriesToBeLinked.append(ASCIILiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;);
&gt; &gt; &gt;&gt;&gt; 
&gt; &gt; &gt;&gt;&gt; appendLiteral(getenv(&quot;QTDIR&quot;)) + &quot;/plugins&quot;) &lt;- but there is a method for adding dirs String pathByAppendingComponent(const String&amp; path, const String&amp; component) defined in FileSystem.h
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Yes. I checked it. There are few useful methods what I could use (makeAllDirectories, fileExist, directoryName, etc...). But w/o linking the whole libWebCore to my sandbox it won&apos;t work. However if I do this then the sandbox conception would lose its original purpose. We discussed about it with bbandix on IRC and it&apos;s possible to link just a few source from webcore to the sandbox. Unfortunatelly it would need a lot of hack and MACROs and I guess it doesn&apos;t worth for just few functions. What do you think?
&gt; &gt; &gt; 
&gt; &gt; &gt; That is fine reasoning. Still reusing the method names makes sense
&gt; &gt; 
&gt; &gt; Well, the other option is to not have a separate binary for the sandbox. What does it _really_ buy us?
&gt; The basic problem with chrooted sandbox is that the process that performs the chroot() call needs superuser permissions. For this, the process should be run with sudo or it should have its SUID flag set. That&apos;s, if WebProcess calls the chroot() then it will live with suid rights from the beginnig until its end, even if we change back its effective user to nobody. Then again, if we push all the problematic tasks into a separated binary and give rights only to this binary, then we have to take care of this little codebase only security-wise, not of the whole WebProcess.

You&apos;re right. We don&apos;t want the WebProcess to be SUID, also considering that it links against the rest of WebKit, which has global object constructors that may be executed before main() enters. That code will be executed with full super user rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719051</commentid>
    <comment_count>62</comment_count>
      <attachid>163118</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-12 22:27:59 -0700</bug_when>
    <thetext>Comment on attachment 163118
Proposed patch

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

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:281
&gt; +    String libraryDependencies;
&gt; +    // There are two way how we gather the dependencies:
&gt; +    // 1) Using ldd to obtain the static dependencies of QtWebProcess.
&gt; +    // 2) Using a develeper defined list of dynamic dependencies (it&apos;s gathered empirical way).
&gt; +    collectLibraryDependencies(libraryDependencies, &quot;/lib64/ld-linux-x86-64.so.2&quot;, (char*)(executablePathOfWebProcess().utf8().data()));
&gt; +    collectLibraryDependencies(libraryDependencies, &quot;/sbin/ldconfig&quot;, (char*)(&quot;-p&quot;));

This part bugs me a little, because I think it&apos;s going to be rather error prone due to many hard-coded paths and assumptions. Did you see the approach that Google took? It seems rather elegant:

    (1) Your suid startup process fires off a second process before exec&apos;ing into the WebProcess. That secondary process was cloned with CLONE_FS, to share the file system namespace. It first sits and waits there on a pipe.
    (2) Then the suid startup process drops privileges altogether and exec()s into the WebProcess.
    (3) The web process is loaded by the dynamic linker and the necessary libraries are loaded automatically. The process is not chroot&apos;ed yet, but it&apos;s also not running with root rights.
    (4) Directly after entering main(), the WebProcess writes into a pipe to notify the chroot-me process earlier to _now_ change the root of the filesystem, which it can promptly do and exit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719053</commentid>
    <comment_count>63</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-12 22:31:26 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; You&apos;re right. We don&apos;t want the WebProcess to be SUID, also considering that it links against the rest of WebKit, which has global object constructors that may be executed before main() enters. That code will be executed with full super user rights.

On second thought, I think the code for the suid sandbox helper should ideally be written in plain C and not link against any big libraries (not even WTF). It should be a goal to minimize the amount of code executed before dropping uid zero, and  in a nutshell all that code needs to do is to do a few system calls with a few string operations, nothing that fundamentally requires C++ libraries (or requires even calling another process such as LDD to be also executed with root rights!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719966</commentid>
    <comment_count>64</comment_count>
    <who name="Guillaume Emont">guijemont</who>
    <bug_when>2012-09-13 14:45:28 -0700</bug_when>
    <thetext>(In reply to comment #63)
&gt; (In reply to comment #61)
&gt; &gt; You&apos;re right. We don&apos;t want the WebProcess to be SUID, also considering that it links against the rest of WebKit, which has global object constructors that may be executed before main() enters. That code will be executed with full super user rights.
&gt; 
&gt; On second thought, I think the code for the suid sandbox helper should ideally be written in plain C and not link against any big libraries (not even WTF). It should be a goal to minimize the amount of code executed before dropping uid zero, and  in a nutshell all that code needs to do is to do a few system calls with a few string operations, nothing that fundamentally requires C++ libraries (or requires even calling another process such as LDD to be also executed with root rights!)

Also, note that the system used by google to do that is available as a separate reusable project:
http://code.google.com/p/setuid-sandbox/
How about reusing that code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720441</commentid>
    <comment_count>65</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-14 01:46:08 -0700</bug_when>
    <thetext>Okay, I feel like it&apos;s time to discuss the next step. I agree with Simon on that using ldd, wtf and constatly burned dependencies are not the best solutions. Moreover, it&apos;s useful taking over ideas from google too. But how should we carry out this?
If I&apos;m not wrong, what Guillaume alluded to is just a script what you can chroot a process with, after you have installed the sandboxme tool on your system:

&quot;Example :
   $ /usr/sbin/sandboxme -- /bin/sh&quot;

But how do we want to use this? The script itself? Or its source? Or ideas from its source? Or what the community want to have in WK2 as chroot sandbox? I&apos;m waiting for everybody&apos;s opinion, especially for the security  experts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720476</commentid>
    <comment_count>66</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-14 02:32:40 -0700</bug_when>
    <thetext>(In reply to comment #65)
&gt; Okay, I feel like it&apos;s time to discuss the next step.

Agreed :). New interesting things have come up.

&gt; I agree with Simon on that using ldd, wtf and constatly burned dependencies are not the best solutions. Moreover, it&apos;s useful taking over ideas from google too. But how should we carry out this?
&gt; If I&apos;m not wrong, what Guillaume alluded to is just a script what you can chroot a process with, after you have installed the sandboxme tool on your system:
&gt; 
&gt; &quot;Example :
&gt;    $ /usr/sbin/sandboxme -- /bin/sh&quot;
&gt; 
&gt; But how do we want to use this? The script itself? Or its source? Or ideas from its source? Or what the community want to have in WK2 as chroot sandbox? I&apos;m waiting for everybody&apos;s opinion, especially for the security  experts.

I think what Guillaume might be referring to is to use the sandboxme binary directly to start the QtWebProcess and then inside QtWebProcess use libsandboxme to complete the chroot&apos;ing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720819</commentid>
    <comment_count>67</comment_count>
    <who name="Guillaume Emont">guijemont</who>
    <bug_when>2012-09-14 09:05:19 -0700</bug_when>
    <thetext>(In reply to comment #66)
&gt; (In reply to comment #65)
&gt; &gt; Okay, I feel like it&apos;s time to discuss the next step.
&gt; 
&gt; Agreed :). New interesting things have come up.
&gt; 
&gt; &gt; I agree with Simon on that using ldd, wtf and constatly burned dependencies are not the best solutions. Moreover, it&apos;s useful taking over ideas from google too. But how should we carry out this?
&gt; &gt; If I&apos;m not wrong, what Guillaume alluded to is just a script what you can chroot a process with, after you have installed the sandboxme tool on your system:
&gt; &gt; 
&gt; &gt; &quot;Example :
&gt; &gt;    $ /usr/sbin/sandboxme -- /bin/sh&quot;
&gt; &gt; 
&gt; &gt; But how do we want to use this? The script itself? Or its source? Or ideas from its source? Or what the community want to have in WK2 as chroot sandbox? I&apos;m waiting for everybody&apos;s opinion, especially for the security  experts.
&gt; 
&gt; I think what Guillaume might be referring to is to use the sandboxme binary directly to start the QtWebProcess and then inside QtWebProcess use libsandboxme to complete the chroot&apos;ing.


Yes, that&apos;s what I meant. I don&apos;t really have an opinion (yet?) on whether to have setuid-sandbox as a dependency or to copy it in the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723578</commentid>
    <comment_count>68</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-19 08:21:38 -0700</bug_when>
    <thetext>&gt; &gt; I think what Guillaume might be referring to is to use the sandboxme binary directly to start the QtWebProcess and then inside QtWebProcess use libsandboxme to complete the chroot&apos;ing.
&gt; 
&gt; Yes, that&apos;s what I meant. I don&apos;t really have an opinion (yet?) on whether to have setuid-sandbox as a dependency or to copy it in the tree.

I&apos;ve checked this project and tried the example attached to it. My experiences are the followings:
* The last commit in this git repo is one year old and it contains a lot of FIXMEs. It seems to me that it was taken out from the implementation of chromium and while the original solution is maintained and improved, this version didn&apos;t change.
* However it&apos;s a very good base and it would be useful to take over parts from it. E.g.: according to this we could avoid the ldd call.

Let&apos;s have a closer look to the project:
* The package contains the setup of the setuid environment and an example for the target executable.
* The main steps of the environment creation are:
  (1) sanity checks whether we are suid or not?
  (2) set the capabilities of the process to SETUID, SETGID, SYS_ADMIN, SYS_CHROOT
  (3) create new PID namespace with sys_clone system call (with CLONE_NEWPID and SIGCHLD flags). We need the previously set SYS_ADMIN capability to be able to do this. From this point every single process inherits from this will live in this new namespace.
  (4) do the chroot:
      * do a sys_clone() again with filesystem-sharing (CLONE_FS flag)
      * restrict the limit of resources to (0,0) in the _untrusted process_
      * wait for the chrootme msg (actually a &apos;C&apos; character) from the child process (in our case this would be the WebProcess) via a socketpair.
      * if the msg has arrived we chroot ourself into our proc-directory (/proc/self/fd) and send an acknowledgement.
      * in the trused process we save the pid of the untrusted process and the socket into environment variables.
  (5) changing uid/gid in the sandbox: there are 4 possible ways to do this:
      (a) using the uid/gid of the real user (that&apos;s no change)
      (b) using the gid of the SANDBOXUSER (this should be added by the administrator of the OS)
      (c) using only the gid of ths SANDBOXUSER
      (d) using a uniqe uid/gid pair but it&apos;s unsupported right now (commented out)
  (6) execute the target process (e.g: WebProcess)

The task of the target process is to call the chrootme() function, what simple reads the previously set environment variables and send the &apos;C&apos; msg to the sandbox process.

The requirements of this solutions are:
  * libcap_dev package should be installed
  * a new SANDBOXUSER should be added to the system (except if we don&apos;t want to change uid/gid)

Finally, here is what I suggest: according to this project I can alter my solution for SandboxProcess. It will remain a separated suid binary, just like the sandboxme binary. I would take over the PID NS and the file system NS restrictons (and the other missing security settings too).
However I still prefer &quot;nobody&quot; as the user of the sandbox environment. But anyway, we have to agree on only one uid/gid option and don&apos;t need the possibilty of choice.
Furthermore, WebProcess would call the chrootme() function to notify the SandboxProcess to perform the chroot. Hopefully this way the only modification in the current source will be the branch of calling Sandbox or WebProcess (so no ldd, no ldconfig, etc). At the same time, I have a hunch that we will need a special handling for the runtime dependencies...

What do you think? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726472</commentid>
    <comment_count>69</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-24 02:04:51 -0700</bug_when>
    <thetext>(In reply to comment #68)
&gt; &gt; &gt; I think what Guillaume might be referring to is to use the sandboxme binary directly to start the QtWebProcess and then inside QtWebProcess use libsandboxme to complete the chroot&apos;ing.
&gt; &gt; 
&gt; &gt; Yes, that&apos;s what I meant. I don&apos;t really have an opinion (yet?) on whether to have setuid-sandbox as a dependency or to copy it in the tree.
&gt; 
&gt; I&apos;ve checked this project and tried the example attached to it. My experiences are the followings:
&gt; * The last commit in this git repo is one year old and it contains a lot of FIXMEs. It seems to me that it was taken out from the implementation of chromium and while the original solution is maintained and improved, this version didn&apos;t change.

Are there any differences between the code in Chromium and the separate project? Perhaps the Chrome folks would be up for sharing this code specifically with us, i.e. allowing for maintenance out of the Chromium tree?

&gt; * However it&apos;s a very good base and it would be useful to take over parts from it. E.g.: according to this we could avoid the ldd call.
[...]

&gt; The requirements of this solutions are:
&gt;   * libcap_dev package should be installed
&gt;   * a new SANDBOXUSER should be added to the system (except if we don&apos;t want to change uid/gid)

Do you know if we can also use nobody for this if there is no dedicated user defined?

Also it seems Chrome is using something else, because I don&apos;t have a special user in my /etc/passwd after installing Chrome.
 
&gt; Finally, here is what I suggest: according to this project I can alter my solution for SandboxProcess. It will remain a separated suid binary, just like the sandboxme binary. I would take over the PID NS and the file system NS restrictons (and the other missing security settings too).
&gt; However I still prefer &quot;nobody&quot; as the user of the sandbox environment. But anyway, we have to agree on only one uid/gid option and don&apos;t need the possibilty of choice.
&gt; Furthermore, WebProcess would call the chrootme() function to notify the SandboxProcess to perform the chroot. Hopefully this way the only modification in the current source will be the branch of calling Sandbox or WebProcess (so no ldd, no ldconfig, etc). At the same time, I have a hunch that we will need a special handling for the runtime dependencies...
&gt; 
&gt; What do you think? :)

Sounds good. I think overall it would be great if we can really share code with the Chromium folks. The less duplicated security sensitive code the more eyes auditing it and the better (safer) the outcome :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>726594</commentid>
    <comment_count>70</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-24 06:08:26 -0700</bug_when>
    <thetext>(In reply to comment #69)
&gt; (In reply to comment #68)
&gt; &gt; &gt; &gt; I think what Guillaume might be referring to is to use the sandboxme binary directly to start the QtWebProcess and then inside QtWebProcess use libsandboxme to complete the chroot&apos;ing.
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes, that&apos;s what I meant. I don&apos;t really have an opinion (yet?) on whether to have setuid-sandbox as a dependency or to copy it in the tree.
&gt; &gt; 
&gt; &gt; I&apos;ve checked this project and tried the example attached to it. My experiences are the followings:
&gt; &gt; * The last commit in this git repo is one year old and it contains a lot of FIXMEs. It seems to me that it was taken out from the implementation of chromium and while the original solution is maintained and improved, this version didn&apos;t change.
&gt; 
&gt; Are there any differences between the code in Chromium and the separate project? Perhaps the Chrome folks would be up for sharing this code specifically with us, i.e. allowing for maintenance out of the Chromium tree?
What Chromium does is more sophisitcated but based on this solution. As I mentioned before this is an one year old project (what means that it hasn&apos;t changed in the last year). So while the equivalent code was improved inside the trunk of chromium, this version remained the same.
Although I can update it to the current version, but it&apos;s clear that we cannot use the same version like Chromium does, because the structure of the projects are different. They have one broker process and more renderer processes. These renderers are sandboxed separatelly. But since the design of chromium project aims to be secure from the beginning, these renderers don&apos;t need to access any resources in the filesystem. In spite of this, WebProcess uses font files, cache directories, etc.
And this is where I stand right now. Sandboxme is built into WebKit2, but due to some missing runtime dependencies (and missing resource directories) it crashes. So I think the best thing would be merging somehow the two solutions. And I&apos;m working on it now.

&gt; &gt; * However it&apos;s a very good base and it would be useful to take over parts from it. E.g.: according to this we could avoid the ldd call.
&gt; [...]
&gt; 
&gt; &gt; The requirements of this solutions are:
&gt; &gt;   * libcap_dev package should be installed
&gt; &gt;   * a new SANDBOXUSER should be added to the system (except if we don&apos;t want to change uid/gid)
&gt; 
&gt; Do you know if we can also use nobody for this if there is no dedicated user defined?
I cannot see any objections why we couldn&apos;t do this.

&gt; Also it seems Chrome is using something else, because I don&apos;t have a special user in my /etc/passwd after installing Chrome.
Yes, this project contains a lot of options how to drop the privileges. However chromium simply falls back to the original uid/gid pair.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727654</commentid>
    <comment_count>71</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-25 08:08:27 -0700</bug_when>
    <thetext>(In reply to comment #70)
&gt; And this is where I stand right now. Sandboxme is built into WebKit2, but due to some missing runtime dependencies (and missing resource directories) it crashes. So I think the best thing would be merging somehow the two solutions. And I&apos;m working on it now.
Well... I&apos;m a bit confused right now. I&apos;ve found the reason of the crash but I don&apos;t know how to solve it. The problem is the following:
First we cloned the suidhelper process with CLONE_NEWPID flag. This way the current process got the PID 1 in a new namespace and its every children live in this namespace. OK. This way we eliminated our processes from the others. In the second turn we cloned ourself again, with CLONE_FS flag, what resulted that both the calling process and its children will share the same filesystem, regarding the results of several FS operations called either from parent or from a child process (such functions are chroot, chdir, umask). This way if we call chroot() in suidhelper, webprocess also will be sandboxed. Furthermore we have also done a resource restricion with setrlimit (with RLIMIT_NOFILE flag), this way the child (webprocess) cannot access more than 0 filedescriptor (it cannot read anyhing by mistake).
To summarize, we created a pure PID NS, &quot;merged&quot; the FS of suidhelper and webprocess, started the webprocess (it loaded its static dependencies), after starting it sends immadiately the &quot;chrootme&quot; signal to suidhelper and gets sandboxed. However, we don&apos;t have our runtime depdendencies, the cache directories and the plugins. How could we solve this? Ideas?
I tried the follwoing: I took a proper sandbox environment from my previous solution without /proc and /run/shm directories and tried to chroot ourself here instead of /proc/self/fdinfo. However I still had the crash.
My next idea was to create a new /proc inside this chroot and bind just the proc directory of WebProcess. The problem with this is, when we start the webprocess we are in a new pid namespace. And if I get the pid of webprocess here and mount it into my /proc then I&apos;d do a mistake because they are in different namespaces.
Contrarly, if i mount the whole original /proc directory into the sandbox environment, then it works. :O
Well... I hope that I was clear enough. Does anybody have any bright idea? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727661</commentid>
    <comment_count>72</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-25 08:17:06 -0700</bug_when>
    <thetext>(In reply to comment #71)
&gt; (In reply to comment #70)
&gt; &gt; And this is where I stand right now. Sandboxme is built into WebKit2, but due to some missing runtime dependencies (and missing resource directories) it crashes. So I think the best thing would be merging somehow the two solutions. And I&apos;m working on it now.
&gt; Well... I&apos;m a bit confused right now. I&apos;ve found the reason of the crash but I don&apos;t know how to solve it. The problem is the following:
&gt; First we cloned the suidhelper process with CLONE_NEWPID flag. This way the current process got the PID 1 in a new namespace and its every children live in this namespace. OK. This way we eliminated our processes from the others. In the second turn we cloned ourself again, with CLONE_FS flag, what resulted that both the calling process and its children will share the same filesystem, regarding the results of several FS operations called either from parent or from a child process (such functions are chroot, chdir, umask). This way if we call chroot() in suidhelper, webprocess also will be sandboxed. Furthermore we have also done a resource restricion with setrlimit (with RLIMIT_NOFILE flag), this way the child (webprocess) cannot access more than 0 filedescriptor (it cannot read anyhing by mistake).
&gt; To summarize, we created a pure PID NS, &quot;merged&quot; the FS of suidhelper and webprocess, started the webprocess (it loaded its static dependencies), after starting it sends immadiately the &quot;chrootme&quot; signal to suidhelper and gets sandboxed. However, we don&apos;t have our runtime depdendencies, the cache directories and the plugins. How could we solve this? Ideas?
&gt; I tried the follwoing: I took a proper sandbox environment from my previous solution without /proc and /run/shm directories and tried to chroot ourself here instead of /proc/self/fdinfo. However I still had the crash.
&gt; My next idea was to create a new /proc inside this chroot and bind just the proc directory of WebProcess. The problem with this is, when we start the webprocess we are in a new pid namespace. And if I get the pid of webprocess here and mount it into my /proc then I&apos;d do a mistake because they are in different namespaces.
&gt; Contrarly, if i mount the whole original /proc directory into the sandbox environment, then it works. :O
&gt; Well... I hope that I was clear enough. Does anybody have any bright idea? :)

Let&apos;s see if I get this right. This approach could work, but it has two problems:

    (1) We&apos;re missing the plugins and their dependencies
    (2) We won&apos;t share the disk cache directories (as well as icondb, appcache, etc.)

Regarding the plugins I suggest we ignore them for the moment. They&apos;re fortunately becoming less and less relevant.

Regarding the disk cache directories we do have a problem, but in a way that&apos;s generic to the web process trying to access any file, isn&apos;t it?

So do we need a way of allowing fine-grained file access from this sand-box (perhaps using a request pattern where the uiprocess returns file handles), or could this be also done by bind-mounting the cache directory into the chroot?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727673</commentid>
    <comment_count>73</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-25 08:32:18 -0700</bug_when>
    <thetext>(In reply to comment #72)
&gt; (In reply to comment #71)
&gt; &gt; (In reply to comment #70)
&gt; &gt; &gt; And this is where I stand right now. Sandboxme is built into WebKit2, but due to some missing runtime dependencies (and missing resource directories) it crashes. So I think the best thing would be merging somehow the two solutions. And I&apos;m working on it now.
&gt; &gt; Well... I&apos;m a bit confused right now. I&apos;ve found the reason of the crash but I don&apos;t know how to solve it. The problem is the following:
&gt; &gt; First we cloned the suidhelper process with CLONE_NEWPID flag. This way the current process got the PID 1 in a new namespace and its every children live in this namespace. OK. This way we eliminated our processes from the others. In the second turn we cloned ourself again, with CLONE_FS flag, what resulted that both the calling process and its children will share the same filesystem, regarding the results of several FS operations called either from parent or from a child process (such functions are chroot, chdir, umask). This way if we call chroot() in suidhelper, webprocess also will be sandboxed. Furthermore we have also done a resource restricion with setrlimit (with RLIMIT_NOFILE flag), this way the child (webprocess) cannot access more than 0 filedescriptor (it cannot read anyhing by mistake).
&gt; &gt; To summarize, we created a pure PID NS, &quot;merged&quot; the FS of suidhelper and webprocess, started the webprocess (it loaded its static dependencies), after starting it sends immadiately the &quot;chrootme&quot; signal to suidhelper and gets sandboxed. However, we don&apos;t have our runtime depdendencies, the cache directories and the plugins. How could we solve this? Ideas?
&gt; &gt; I tried the follwoing: I took a proper sandbox environment from my previous solution without /proc and /run/shm directories and tried to chroot ourself here instead of /proc/self/fdinfo. However I still had the crash.
&gt; &gt; My next idea was to create a new /proc inside this chroot and bind just the proc directory of WebProcess. The problem with this is, when we start the webprocess we are in a new pid namespace. And if I get the pid of webprocess here and mount it into my /proc then I&apos;d do a mistake because they are in different namespaces.
&gt; &gt; Contrarly, if i mount the whole original /proc directory into the sandbox environment, then it works. :O
&gt; &gt; Well... I hope that I was clear enough. Does anybody have any bright idea? :)
&gt; 
&gt; Let&apos;s see if I get this right. This approach could work, but it has two problems:
&gt; 
&gt;     (1) We&apos;re missing the plugins and their dependencies
Not just the dependencies of plugins but such libaries like libresolv, libdbus, etc (up to ~11 libraries)... actually what were added as constants in my previous solution (you can see the list in the last uploaded patch).
&gt;     (2) We won&apos;t share the disk cache directories (as well as icondb, appcache, etc.)
Right.

&gt; Regarding the plugins I suggest we ignore them for the moment. They&apos;re fortunately becoming less and less relevant.
Ok.
&gt; Regarding the disk cache directories we do have a problem, but in a way that&apos;s generic to the web process trying to access any file, isn&apos;t it?
Yes.
I would describe the problem like: if we chroot ourself into /proc/self then we  miss runtime dependencies. Contrarly, if we are chrooted into a generated environment, then we miss our needed /proc/self entries (because of the different namespaces). At least I just think that this it the problem, because I don&apos;t have a working solution yet.
&gt; So do we need a way of allowing fine-grained file access from this sand-box (perhaps using a request pattern where the uiprocess returns file handles), or could this be also done by bind-mounting the cache directory into the chroot?
Maybe. Altogheter, we need the ~11 libraries mentioned above and 2 libraries from the users home (caches). Theoretically...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728428</commentid>
    <comment_count>74</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-09-26 05:07:20 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; I would describe the problem like: if we chroot ourself into /proc/self then we  miss runtime dependencies. Contrarly, if we are chrooted into a generated environment, then we miss our needed /proc/self entries (because of the different namespaces). At least I just think that this it the problem, because I don&apos;t have a working solution yet.
&gt; &gt; So do we need a way of allowing fine-grained file access from this sand-box (perhaps using a request pattern where the uiprocess returns file handles), or could this be also done by bind-mounting the cache directory into the chroot?
&gt; Maybe. Altogheter, we need the ~11 libraries mentioned above and 2 libraries from the users home (caches). Theoretically...
Well, I debugged a bit and I have more than a theory already. So after &quot;strace&quot;-ing QtWebProcess we can see that it operates on the followings:
* /run/shm (shared memyory): maybe we could mount a new empty tmpfs here? (with a limited memorysize)
* /proc/self (in our case this is a symlink to the proc entry of QtWebprocess)
* /proc/meminfo (file, not directory): no idea how to recreate/copy/whatever it into the sandbox environment without mount --bind the whole /proc
* /proc/net (symlink to /proc/self/net)
* $HOME/.local (I can hard link them into the sandbox)
* $HOME/.cache (ditto)
* /dev/random  and urandom (i can recreate them easily. simple, quick, secure, no problem)
* font directories in /etc and /usr/share (hard link them too)
* a few runtime libraries: libnss, libresolv, libssl (link them too). To locate them i can still use ldconfig (or maybe pkgconfig?)

So my only real problem is the binding of /proc FS. But since WebProcess runs in a separated PID namespace maybe we can live with this until we don&apos;t have a better idea. (Or does anybody have it already?)

Anyway... I&apos;ll upload the current version with the built-in sandboxme soon, but &apos;till then I&apos;m open for any good suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739159</commentid>
    <comment_count>75</comment_count>
      <attachid>168044</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-10 11:28:58 -0700</bug_when>
    <thetext>Created attachment 168044
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739728</commentid>
    <comment_count>76</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-11 02:02:52 -0700</bug_when>
    <thetext>Last night I was too tired to write a comment to the patch. So I do it now:
Basically it contains the modification we talked about earlier:
* The creation of the sandbox environment is similar to the one in previous versions, but we don&apos;t need parsing ldd anymore (however ldconfig is still needed to detect the path of 4 runtime libraries).
* After this we restrict the process capabilities to a minmal needed set (CAP_SETUID, CAP_SETGID, CAP_SYS_ADMIN, CAP_SYS_CHROOT).
* Next, we clone ourself twice what will bring us into a new PID NS and will share the FS with the sandbox with restrictions. This last step causes that if we call the chroot() in the sandbox helper process, then its child (that&apos;s the WebProcess) also will be chrooted.
* Drop the privileges (we fallback to the original user uid/gid right now).
* Start the WebProcess.
* In the WebProcess we call the chrootMe() function what sends a message to the helper, who call the chroot() in turn. And tadaaaam! We are sandboxed :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739730</commentid>
    <comment_count>77</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-11 02:05:12 -0700</bug_when>
    <thetext>Some further notes:
* Since we only used plain C functions, this patch is totally platform independent. Even the WebProcess itself is called via execl().
* The patch contains a lot of string manipulation operation. To avoid the using of iostream, WTFString or QString, etc I had to wrote a few string manipulator functions.
* Many ideas are taken from sandboxMe project but its strongly refactored, adapted to our specific needs and style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739816</commentid>
    <comment_count>78</comment_count>
      <attachid>168044</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-11 04:47:03 -0700</bug_when>
    <thetext>Comment on attachment 168044
Proposed patch

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

&gt; Tools/qmake/mkspecs/features/default_post.prf:290
&gt; +QMAKE_LIBS_OPENGL += -lcap

I almost forgot... I know this is totally not the right place to add a linker flag to the SandboxProcess, but temporarly it worked and I&apos;m sure that you can quickly tell me how to do it properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739990</commentid>
    <comment_count>79</comment_count>
      <attachid>168044</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2012-10-11 08:17:57 -0700</bug_when>
    <thetext>Comment on attachment 168044
Proposed patch

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

&gt;&gt; Tools/qmake/mkspecs/features/default_post.prf:290
&gt;&gt; +QMAKE_LIBS_OPENGL += -lcap
&gt; 
&gt; I almost forgot... I know this is totally not the right place to add a linker flag to the SandboxProcess, but temporarly it worked and I&apos;m sure that you can quickly tell me how to do it properly.

You&apos;re already doing it in SandboxProcess.pro, shouldn&apos;t be needed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740047</commentid>
    <comment_count>80</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-10-11 09:31:16 -0700</bug_when>
    <thetext>Here are some comments:

* SandboxProcess seems very Unix/Linux specific, so It shouldn&apos;t go into its own toplevel directory. Mac will never use anything from SandboxProcess for example.

* Don&apos;t use &quot;using namespace std&quot;. STL functions should be prefixed by std::

* SandboxEnvironmentLinux.cpp looks like it&apos;s reinventing a bunch of string functions. Is there a reason why WTF::CString can&apos;t be used? (Or at least std::string?)

* Comments like

// Get a new PID namespace.
static bool moveToNewPIDNamespace()

aren&apos;t useful. 

* The code in general lacks comments and is very hard to follow for someone not familiar with how Linux sandboxing works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740186</commentid>
    <comment_count>81</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-11 12:54:01 -0700</bug_when>
    <thetext>(In reply to comment #79)
&gt; (From update of attachment 168044 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168044&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/qmake/mkspecs/features/default_post.prf:290
&gt; &gt;&gt; +QMAKE_LIBS_OPENGL += -lcap
&gt; &gt; 
&gt; &gt; I almost forgot... I know this is totally not the right place to add a linker flag to the SandboxProcess, but temporarly it worked and I&apos;m sure that you can quickly tell me how to do it properly.
&gt; 
&gt; You&apos;re already doing it in SandboxProcess.pro, shouldn&apos;t be needed here.

Yes, the plan was simply adding LIBS += -lcap to SandboxProcess.pro but this way the linker failed because it couldn&apos;t find the libcap library.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740234</commentid>
    <comment_count>82</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-11 13:42:58 -0700</bug_when>
    <thetext>(In reply to comment #80)
&gt; Here are some comments:
&gt; 
&gt; * SandboxProcess seems very Unix/Linux specific, so It shouldn&apos;t go into its own toplevel directory. Mac will never use anything from SandboxProcess for example.
Yeah, I thought it&apos;s not the best place for this. What about WebKit2/Shared/linux?

&gt; * Don&apos;t use &quot;using namespace std&quot;. STL functions should be prefixed by std::
Auch. In a previous local version I used std::string-s, but they are completly abolished already, so this line is superfluous.
 
&gt; * SandboxEnvironmentLinux.cpp looks like it&apos;s reinventing a bunch of string functions. Is there a reason why WTF::CString can&apos;t be used? (Or at least std::string?)
We&apos;ve talked about it earlier. The conclusion from #63 is:
&quot;the code for the suid sandbox helper should ideally be written in plain C and not link against any big libraries (not even WTF).&quot; 

&gt; * Comments like
&gt; 
&gt; // Get a new PID namespace.
&gt; static bool moveToNewPIDNamespace()
&gt; 
&gt; aren&apos;t useful. 
All right, I&apos;ll remove them.

&gt; * The code in general lacks comments and is very hard to follow for someone not familiar with how Linux sandboxing works.
Ofc, this is just a &quot;hey guys, here is what I have&quot; patch. I&apos;ll add comments later. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740362</commentid>
    <comment_count>83</comment_count>
      <attachid>168044</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-10-11 16:05:19 -0700</bug_when>
    <thetext>Comment on attachment 168044
Proposed patch

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

Some quick notes from scrolling through the patch.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:126
&gt; +    if (!stat(SAFEDIR, &amp;safedirInfo) &amp;&amp; S_ISDIR(safedirInfo.st_mode))

You probably want to use lstat() instead of stat() everywhere in this code to protect against symlink attacks.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:146
&gt; +    // Child.

I think this code would be a bit clearer if you move the logic that executes in the child process to a separate functions.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:301
&gt; +    if (mkdir(pathToCreateInSandbox, 0777) == -1 &amp;&amp; errno != EEXIST) {

777 seems like a poor choice of permissions.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:474
&gt; +static bool filterAndLinkLibraryDependenciesFromLdconfigOutput(char* buffer, int bufferLength)

I want to believe that there&apos;s a better way of doing this than parsing output from a shell command.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:564
&gt; +    if (mkdir(SAFEDIR, 0777) == -1 &amp;&amp; errno != EEXIST)

777 seems like a poor choice of permissions.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:573
&gt; +    const char* home = getenv(&quot;HOME&quot;);

I would look up the home directory via getpw() instead of reading environment variable.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:656
&gt; +    stringConcat(safedir, getenv(&quot;HOME&quot;), &quot;/.wk2-sandbox&quot;, PATHSIZE);

I would look up the home directory via getpw() instead of reading environment variable.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.cpp:707
&gt; +    if (!geteuid() || !getegid() || !setuid(0) || !setgid(0)) {
&gt; +        fprintf(stderr, &quot;My euid or egid is 0! Something went really wrong\n&quot;);

This logic could be more readable.

&gt; Source/WebKit2/SandboxProcess/SandboxEnvironmentLinux.h:46
&gt; +class SandboxEnvironmentLinux {
&gt; +public:
&gt; +    static int launchChrootHelper(void);
&gt; +    static int dropPrivileges(uid_t, gid_t);
&gt; +    static int moveToNewPIDNamespace(void);
&gt; +    static int setDumpable(void);
&gt; +    static int setCapabilities(cap_value_t capablityList[], int ncap);
&gt; +};

None of this class is actually implemented in the .cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743400</commentid>
    <comment_count>84</comment_count>
      <attachid>168993</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-16 12:11:21 -0700</bug_when>
    <thetext>Created attachment 168993
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743486</commentid>
    <comment_count>85</comment_count>
      <attachid>168993</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-16 13:35:48 -0700</bug_when>
    <thetext>Comment on attachment 168993
Proposed patch

Attachment 168993 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14384298</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743946</commentid>
    <comment_count>86</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-17 00:21:52 -0700</bug_when>
    <thetext>Stupid ews... she knew the -lcap flag in the previous version. In spite of this I &apos;d say a few words about this patch because it contains two important new parts. First, the whole sandboxprocess is moved into WebKit2/Shared/linux/ directory. Secondly, calling the ldconfig is dropped out and we use a dlopen magic instead of it now. This dlopen opens the given runtime library and got as a result a handle. With this dlinfo is able to obtain the path of the library and we can link it into the sandbox environment.
The further changes tends to fulfill the previous requests except the comments. I will add more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744291</commentid>
    <comment_count>87</comment_count>
      <attachid>169192</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-17 09:05:47 -0700</bug_when>
    <thetext>Created attachment 169192
Proposed patch

Fixed the previous build issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746456</commentid>
    <comment_count>88</comment_count>
      <attachid>169652</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-19 11:09:13 -0700</bug_when>
    <thetext>Created attachment 169652
Proposed patch

In this patch WebProcess runs as &quot;nobody&quot; inside the jail.
Furthermore it contains a bigger refactor: stringoperations went into separated files and the code was formed to webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749518</commentid>
    <comment_count>89</comment_count>
      <attachid>170358</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-24 04:04:08 -0700</bug_when>
    <thetext>Created attachment 170358
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749570</commentid>
    <comment_count>90</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-24 05:17:41 -0700</bug_when>
    <thetext>The new patch aims to avoid the ews failure (the actual revision was broken and probably it was the problem). Furthermore, I&apos;ve removed the workaround from the build environment. The problem was that the new source files were added to Target.pri, but since SandboxProcess isn&apos; t part of WK2, it was wrong. And this is why I had to add the linker flags globally. So it&apos;s fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754438</commentid>
    <comment_count>91</comment_count>
      <attachid>170358</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-10-30 09:34:04 -0700</bug_when>
    <thetext>Comment on attachment 170358
Proposed patch

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

&gt; Source/WebKit2/Shared/linux/SandboxProcess/StringOperations.h:31
&gt; +// Secure string operations.
&gt; +bool stringCopy(char*, const char*, int);
&gt; +bool stringCopy(char*, const char*, const int, int);
&gt; +bool stringConcat(char*, const char*, const char*, int);
&gt; +bool stringConcat(char*, const char*, const char*, const char*, int);
&gt; +bool stringAppend(char*, const char*, int);

I don&apos;t see what&apos;s &quot;secure&quot; about these functions.
Please use the standard C library string functions instead.
You&apos;re already using memcpy() from string.h to implement them.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:72
&gt; +#define SBX_D &quot;SBX_D&quot;
&gt; +#define SBX_HELPER_PID &quot;SBX_HELPER_PID&quot;
&gt; +
&gt; +#define MSG_CHROOTME &apos;C&apos;
&gt; +#define MSG_CHROOTED &apos;O&apos;

You probably want to put these in a common header file instead of copy-pasting them across the codebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754502</commentid>
    <comment_count>92</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-10-30 10:43:59 -0700</bug_when>
    <thetext>(In reply to comment #91)
&gt; (From update of attachment 170358 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170358&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/linux/SandboxProcess/StringOperations.h:31
&gt; &gt; +// Secure string operations.
&gt; &gt; +bool stringCopy(char*, const char*, int);
&gt; &gt; +bool stringCopy(char*, const char*, const int, int);
&gt; &gt; +bool stringConcat(char*, const char*, const char*, int);
&gt; &gt; +bool stringConcat(char*, const char*, const char*, const char*, int);
&gt; &gt; +bool stringAppend(char*, const char*, int);
&gt; 
&gt; I don&apos;t see what&apos;s &quot;secure&quot; about these functions.
&gt; Please use the standard C library string functions instead.
&gt; You&apos;re already using memcpy() from string.h to implement them.

The reason why I reimplemented these concat functions: Let&apos;s take a look at strncat(dest, src, n) in string.h. What if the number of characters to append is more that n? The reference says: &quot;If the length of the C string in source is less than num, only the content up to the terminating null-character is copied.&quot; But it doesn&apos;t say a word about the case if the length of src &gt; n. So the result is implementation dependent and not deterministic. What&apos;s more you don&apos;t get any error messages. And since our primary goal is security we cannot rely on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754548</commentid>
    <comment_count>93</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-10-30 11:58:21 -0700</bug_when>
    <thetext>(In reply to comment #92)

&gt; The reason why I reimplemented these concat functions: Let&apos;s take a look at strncat(dest, src, n) in string.h. What if the number of characters to append is more that n? The reference says: &quot;If the length of the C string in source is less than num, only the content up to the terminating null-character is copied.&quot; But it doesn&apos;t say a word about the case if the length of src &gt; n. So the result is implementation dependent and not deterministic. What&apos;s more you don&apos;t get any error messages. And since our primary goal is security we cannot rely on this.

I don&apos;t understand what you&apos;re talking about here. Could you give a concrete example in code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754883</commentid>
    <comment_count>94</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2012-10-30 19:33:58 -0700</bug_when>
    <thetext>I only read the first 20 or so comments, so sorry if there&apos;s a repeat, but the Chrome suid sandbox (the non-seccomp one) relies on a helper binary to reduce complexity in the high-privilege process.

You can see the code here:
http://code.google.com/searchframe#OAMlx_jo-ck/src/sandbox/linux/suid/sandbox.c&amp;exact_package=chromium&amp;q=sandbox.c
and the other files in that directory.

You can read more about it here:
http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox

There&apos;s a bunch of tricky details in there, worth taking a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754915</commentid>
    <comment_count>95</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-10-30 20:39:31 -0700</bug_when>
    <thetext>&gt; I don&apos;t understand what you&apos;re talking about here. Could you give a concrete example in code?

I understand her, and it seems a smart approach. What is happening, if you do strncat(a, b, 5), where a = &quot;abc&quot; b = &quot;cde&quot;? The answer is: implementation dependent. The behaviour of her code is defined: it displays an error message, and returns with an error code. So there is no random behaviour accross platforms, and it does not process a string further, if there is not enough space in the buffer (like creating wrong files, when you concat a path and a filename).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754919</commentid>
    <comment_count>96</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-10-30 20:43:12 -0700</bug_when>
    <thetext>&gt; I only read the first 20 or so comments, so sorry if there&apos;s a repeat, but the Chrome suid sandbox (the non-seccomp one) relies on a helper binary to reduce complexity in the high-privilege process.

This patch also creates a helper binary. But its purpose is not &quot;reducing complexity&quot; (???) it creates a separate pid namespace and drop privileges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756051</commentid>
    <comment_count>97</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-01 03:46:38 -0700</bug_when>
    <thetext>(In reply to comment #94)
&gt; I only read the first 20 or so comments, so sorry if there&apos;s a repeat, but the Chrome suid sandbox (the non-seccomp one) relies on a helper binary to reduce complexity in the high-privilege process.
&gt; 
&gt; You can see the code here:
&gt; http://code.google.com/searchframe#OAMlx_jo-ck/src/sandbox/linux/suid/sandbox.c&amp;exact_package=chromium&amp;q=sandbox.c
&gt; and the other files in that directory.
&gt; 
&gt; You can read more about it here:
&gt; http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox
&gt; 
&gt; There&apos;s a bunch of tricky details in there, worth taking a look.

Thanks, I&apos;ve checked it already and I also took a few ideas from there. Unfortunatelly we couldn&apos;t use it in its current form because the architecture of webkit is different from chrome. AFAIK chrome has a broker process and sandboxed render processes what don&apos;t need file system access at all. However webprocess, what should be sandboxed here, opens fonts, caches, loads runtime dependencies (eg. with dlopen) and these resources have to be present in the sandbox environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759441</commentid>
    <comment_count>98</comment_count>
      <attachid>172529</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-06 02:29:01 -0800</bug_when>
    <thetext>Created attachment 172529
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759443</commentid>
    <comment_count>99</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 02:32:14 -0800</bug_when>
    <thetext>Attachment 172529 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/QtWebKit.pro&apos;, u&apos;Source/WebKit2/Con...&quot; exit_code: 1
Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit2/Shared/linux/SandboxProcess/StringOperations.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 12 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>759448</commentid>
    <comment_count>100</comment_count>
      <attachid>172532</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-06 02:37:00 -0800</bug_when>
    <thetext>Created attachment 172532
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759449</commentid>
    <comment_count>101</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-06 02:38:12 -0800</bug_when>
    <thetext>(In reply to comment #91)
&gt; (From update of attachment 170358 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170358&amp;action=review

&gt; I don&apos;t see what&apos;s &quot;secure&quot; about these functions.
&gt; Please use the standard C library string functions instead.
&gt; You&apos;re already using memcpy() from string.h to implement them.

Since we don&apos;t get any objections after the explanation of string operations, I&apos;ve left them in the code.

&gt; &gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:72
&gt; &gt; +#define SBX_D &quot;SBX_D&quot;
&gt; &gt; +#define SBX_HELPER_PID &quot;SBX_HELPER_PID&quot;
&gt; &gt; +
&gt; &gt; +#define MSG_CHROOTME &apos;C&apos;
&gt; &gt; +#define MSG_CHROOTED &apos;O&apos;
&gt; 
&gt; You probably want to put these in a common header file instead of copy-pasting them across the codebase.

Right, done. Both WebProcess and SandboxProcess use a common header right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759452</commentid>
    <comment_count>102</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-06 02:40:38 -0800</bug_when>
    <thetext>Style checker will fail, because config.h isn&apos;t included. The reason of this is that Sandboxprocess shouldn&apos;t use anything from webkit at all, neither classes, functions nor macros. We&apos;d only need config.h to be able to use the ENABLE macro (from platform.h), however in QtWebKit.pro we already ensured that sandboxprocess will be only built if sandbox is enabled, so we don&apos;t need to do it again in the source too. Ofc I could create a dummy config.h to make stylechecker happy, but I don&apos;t see much sense in that.

I runned layout tests inside sandbox. The only failing tests are gstreamer-related (e.g. tests with video content). The problem is caused by few missing libraries from the sandbox. Although the &quot;main&quot; gstreamer libraries are loaded before WebProcess get sandboxed, it seems that gstreamer also has a plugin system. It means that it opens further shared libraries with dlopen() what also have dependencies. This way the library list could be long, so it doesn&apos;t worth to add them one-by-one to the sandbox. But since it only affects ~10 tests, I don&apos;t intend to solve it in this first patch.

Furthermore, I&apos;ve measured the pageloads with methanol (with and without sandbox). For this I used a collection of real world websites from alexa top50. The results are shown below. You can see that the difference is ~0.05% (every tests were runned 20 times and the variance was up to 4%).

		TEST		W/O SB	W/ SB	DIFF
sample/baidu/baidu.html		7,35	7,3	0,05
sample/bing/bing.html		12,45	12,4	0,05
sample/blogger/blogger.html	19,9	19,7	0,2
sample/conduit/conduit.html	88,25	86,65	1,6
sample/ebay/ebay.html		51,7	51,95	-0,25
sample/facebook/facebook.html	37,35	37,45	-0,1
sample/fc2/fc2.html		87,65	88,45	-0,8
sample/google/google.html	10,3	10,3	0
sample/linkedin/linkedin.html	56,45	53,65	2,8
sample/live/live.html		12,15	12,05	0,1
sample/mail/mail.html		65,35	68,25	-2,9
sample/microsoft/microsoft.html	79,3	80,05	-0,75
sample/msn/msn.html		153,55	152,8	0,75
sample/qq/qq.html		88,35	89,65	-1,3
sample/sina/sina.html		275,6	275,6	0
sample/taobao/taobao.html	502	503,3	-1,3
sample/twitter/twitter.html	70,2	71,05	-0,85
sample/wikipedia/Wikipedia.html	36,25	36,5	-0,25
sample/wordpress/wordpress.html	79,05	85,55	-6,5
sample/yahoo/yahoo.html		63,05	63,35	-0,3
sample/yandex/yandex.html	101,6	102,1	-0,5
sample/youtube/youtube.html	105,1	106,45	-1,35
------------------------------------------------------
SUMMARY:			2002,95	2014,55	-11,6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759455</commentid>
    <comment_count>103</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 02:41:14 -0800</bug_when>
    <thetext>Attachment 172532 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/QtWebKit.pro&apos;, u&apos;Source/WebKit2/Con...&quot; exit_code: 1
Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit2/Shared/linux/SandboxProcess/StringOperations.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 12 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>762110</commentid>
    <comment_count>104</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-08 13:22:35 -0800</bug_when>
    <thetext>(In reply to comment #95)
&gt; &gt; I don&apos;t understand what you&apos;re talking about here. Could you give a concrete example in code?
&gt; 
&gt; I understand her, and it seems a smart approach. What is happening, if you do strncat(a, b, 5), where a = &quot;abc&quot; b = &quot;cde&quot;? The answer is: implementation dependent. The behaviour of her code is defined: it displays an error message, and returns with an error code. So there is no random behaviour accross platforms, and it does not process a string further, if there is not enough space in the buffer (like creating wrong files, when you concat a path and a filename).

So you&apos;re writing _new_ code to do raw string manipulation (one of the most error prone operations when it comes to buffer overflow), to get around the fact that there may be _platform differences_ on code that will only run on Linux? Even using the STL would be better than that.

I&apos;ms till not convinced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762126</commentid>
    <comment_count>105</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-08 13:34:06 -0800</bug_when>
    <thetext>(In reply to comment #104)
&gt; So you&apos;re writing _new_ code to do raw string manipulation (one of the most error prone operations when it comes to buffer overflow)...

For example, this code stores the return value from strlen() in int variables. strlen() returns size_t. What happens if a string is longer than std::numeric_limits&lt;int&gt;::max()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762209</commentid>
    <comment_count>106</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-08 14:52:12 -0800</bug_when>
    <thetext>&gt; For example, this code stores the return value from strlen() in int variables. strlen() returns size_t. What happens if a string is longer than std::numeric_limits&lt;int&gt;::max()?

So you suggest to replace strlen with our own code? That is a good idea! It could have a max value, and returns with that if the string is longer than that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762217</commentid>
    <comment_count>107</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-08 14:59:48 -0800</bug_when>
    <thetext>(In reply to comment #105)
&gt; (In reply to comment #104)
&gt; &gt; So you&apos;re writing _new_ code to do raw string manipulation (one of the most error prone operations when it comes to buffer overflow)...
&gt; 
&gt; For example, this code stores the return value from strlen() in int variables. strlen() returns size_t. What happens if a string is longer than std::numeric_limits&lt;int&gt;::max()?

Maybe we should use the

size_t strnlen(const char *s, size_t maxlen)

function. (?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762582</commentid>
    <comment_count>108</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-08 22:41:50 -0800</bug_when>
    <thetext>&gt; size_t strnlen(const char *s, size_t maxlen)

This function is even more strict than what we need. It is a good idea to use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764184</commentid>
    <comment_count>109</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-12 02:53:54 -0800</bug_when>
    <thetext>Checking the comments it seems the only remaining issue is string manipulation functions. The problem with strncat, it does not report an error, if the concatenation is unsuccessful. Consider the following example: sandbox creates files using a directory, which was passed as an argument. You concatenate the dir and the name of the file: strncat(&quot;dir_path&quot;, &quot;/file&quot;, maxlen - strlen(dest) - 1). However, if n = 0, the result will be the dir_path, which can be a tricky name of a file, e.g: path/././././i_want_to_create_this_file And nothing is reported by strncat! Or even worse, n can be negative, which will be converted as a huge positive number, since n is unsigned. We want to avoid these, we want to know if a concatenation is not successful!

I think Reni did a great job here, so if nothing else comes up, I think this work is ready to land. We can still fix things later, e.g if we invent a better idea for strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764408</commentid>
    <comment_count>110</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-12 07:38:38 -0800</bug_when>
    <thetext>I broke up the first paragraph in multiple lines so I could more easy answer everything:

(In reply to comment #109)
&gt; Checking the comments it seems the only remaining issue is string manipulation functions.

This is not true. I haven&apos;t looked closely at the rest of the patch. I focused on the string manipulation functions because I think it&apos;s a mistake to reimplement string functions that already exist in WTF, STL and Libc.

&gt; The problem with strncat, it does not report an error, if the concatenation is unsuccessful. Consider the following example: sandbox creates files using a directory, which was passed as an argument. You concatenate the dir and the name of the file: strncat(&quot;dir_path&quot;, &quot;/file&quot;, maxlen - strlen(dest) - 1). However, if n = 0, the result will be the dir_path, which can be a tricky name of a file, e.g: path/././././i_want_to_create_this_file And nothing is reported by strncat!

Thanks for the explanation. I still don&apos;t see why either std::string or even WTF::CString can be used for this. Reading the bug, it seems that Reni used std::string in a previous version of this patch.

&gt; I think Reni did a great job here, so if nothing else comes up, I think this work is ready to land. 

I agree that the patch is a good start, but it has not yet been fully reviewed and neither mine nor Andreas&apos;s comments have been fully addressed so I don&apos;t think this patch is ready to land just yet.

&gt; We can still fix things later, e.g if we invent a better idea for strings.

Landing patches where multiple reviewers have addressed concerns with the promise of &quot;we&apos;ll fix things later!&quot; is not something we aim to do in the WebKit project because most likely things will not be fixed later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764514</commentid>
    <comment_count>111</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-12 09:50:05 -0800</bug_when>
    <thetext>&gt; Thanks for the explanation. I still don&apos;t see why either std::string or even WTF::CString can be used for this. Reading the bug, it seems that Reni used std::string in a previous version of this patch.

I am worried about out-of-memory conditions. It would be better if the process with root privileges would never crash.

&gt; I agree that the patch is a good start, but it has not yet been fully reviewed and neither mine nor Andreas&apos;s comments have been fully addressed so I don&apos;t think this patch is ready to land just yet.

Fair enough. Please help us and fully review the patch.

&gt; Landing patches where multiple reviewers have addressed concerns with the promise of &quot;we&apos;ll fix things later!&quot; is not something we aim to do in the WebKit project because most likely things will not be fixed later.

Sorry, I used a wrong word. Bugs needs fixing. This is not a bug. It is a completely safe approach. We can improve it further in the future, if we find a better solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765351</commentid>
    <comment_count>112</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-13 00:36:16 -0800</bug_when>
    <thetext>Any further objections against string operations?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765382</commentid>
    <comment_count>113</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-13 01:15:29 -0800</bug_when>
    <thetext>(In reply to comment #112)
&gt; Any further objections against string operations?

And any other comments, idea, etc. are appreciated!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766843</commentid>
    <comment_count>114</comment_count>
      <attachid>174148</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-14 06:43:51 -0800</bug_when>
    <thetext>Created attachment 174148
Proposed patch

Since I haven&apos;t got further objections after Zoltan&apos;s explanation, I dare to upload the patch with StringOperations again. I only made a fix according to Andreas observation, so we don&apos;t use the risky strlen() function anymore (instead strnlen() is used).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766844</commentid>
    <comment_count>115</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-14 06:47:20 -0800</bug_when>
    <thetext>Attachment 174148 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/QtWebKit.pro&apos;, u&apos;Source/WebKit2/Con...&quot; exit_code: 1
Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit2/Shared/linux/SandboxProcess/StringOperations.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 12 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>767095</commentid>
    <comment_count>116</comment_count>
      <attachid>174148</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-14 11:25:42 -0800</bug_when>
    <thetext>Comment on attachment 174148
Proposed patch

Hi Reni, I think the patch is good in overall, but I have some comments:

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

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:55
&gt; +enum { PathSize = 512 };
&gt; +char sandboxDirectory[PathSize];
&gt; +uid_t sandboxUserUid;
&gt; +uid_t sandboxUserGid;

These variables could be static.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:57
&gt; +static void launchChrootHelper(int socketPair[])

A little comment is needed here that this function does not return on success.

And you have a lot of variable names with chroot, I would prefer ChangeRoot. Short names are not preferred in WebKit.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:181
&gt; +// Set capabilities in all three sets.

Please a little more explanation about these 3 sets.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:304
&gt; +    char dev[] = &quot;/dev/&quot;;

Why this variable is not const as the other below it. And why it is char[] instead of char*?
And some newlines could help in this function the make the code readable.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:332
&gt; +    char proc[] = &quot;/proc/&quot;;

Ditto.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:404
&gt; +        // Making difference between relative and absolute paths.

Little more explanation please.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:570
&gt; +    if (mkdir(sandboxDirectory, 0100)) {

Isn&apos;t there a named constant for this 0100?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:673
&gt; +    return false;

Same &quot;never reached&quot; thing here as above.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.h:27
&gt; +#ifndef CLONE_NEWPID
&gt; +#define CLONE_NEWPID  0x20000000
&gt; +#endif

A littel explanation why this is needed, and why this is safe to define it if it is not defined (this is a system call argument after all).

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:154
&gt; +    long int fd = -1;

Full names please.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:158
&gt; +    ssize_t cnt;

Ditto.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:222
&gt;  #endif
&gt; -
&gt;      // Create the connection.

Do not remove this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767988</commentid>
    <comment_count>117</comment_count>
      <attachid>174415</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-15 05:45:28 -0800</bug_when>
    <thetext>Created attachment 174415
Proposed patch

Patch according to Zoltan&apos;s requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767991</commentid>
    <comment_count>118</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 05:48:55 -0800</bug_when>
    <thetext>Attachment 174415 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/QtWebKit.pro&apos;, u&apos;Sour...&quot; exit_code: 1
Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit2/Shared/linux/SandboxProcess/StringOperations.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 15 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>768073</commentid>
    <comment_count>119</comment_count>
      <attachid>174415</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-15 07:56:28 -0800</bug_when>
    <thetext>Comment on attachment 174415
Proposed patch

Thanks for fixing everything. Since there was no other comments, r=me But before land, please fix the style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768093</commentid>
    <comment_count>120</comment_count>
      <attachid>174415</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-15 08:20:46 -0800</bug_when>
    <thetext>Comment on attachment 174415
Proposed patch

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

I&apos;m still of the opinion that rolling your own string functions for code whose sole purpose is increasing security is insane.

This version is *still* storing the size_t result of str(n)len in int variables, leaving the code open to arithmetic overflow bugs. And this is just one problem, I&apos;m sure there are more of them hiding in the code.

Also, why do you need to send messages back and forth to communicate with the clone() child? Can&apos;t you just waitpid() for it and check the exit code? Seems like that would decrease the attack surface of this helper considerably.

&gt; Source/WebKit2/Configurations/FeatureDefines.xcconfig:136
&gt; +ENABLE_SUID_SANDBOX_LINUX = ;

Why add this to the XCode build? It&apos;s not ENABLE_SUID_SANDBOX_LINUX will ever be used on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768163</commentid>
    <comment_count>121</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-15 09:16:30 -0800</bug_when>
    <thetext>(In reply to comment #120)
&gt; (From update of attachment 174415 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174415&amp;action=review
&gt; 
&gt; I&apos;m still of the opinion that rolling your own string functions for code whose sole purpose is increasing security is insane.
Okay-okay... I&apos;m going to remove them...

&gt; This version is *still* storing the size_t result of str(n)len in int variables, leaving the code open to arithmetic overflow bugs. And this is just one problem, I&apos;m sure there are more of them hiding in the code.
Well, I&apos;m here and I gladly fix anything. Just review it pls :P

&gt; Also, why do you need to send messages back and forth to communicate with the clone() child? Can&apos;t you just waitpid() for it and check the exit code? Seems like that would decrease the attack surface of this helper considerably.
The reason of this communication is to notify SandboxProcess that WebProcess is ready to be sandboxed. If I&apos;d use waitpid(1) (&apos;1&apos; will be the PID of WebProcess inside the new pid namespace) then WebProcess would be jailed before its static libraries are loaded  (I&apos;m speaking out of experience: I tried it out and it crashes).

&gt; &gt; Source/WebKit2/Configurations/FeatureDefines.xcconfig:136
&gt; &gt; +ENABLE_SUID_SANDBOX_LINUX = ;
&gt; 
&gt; Why add this to the XCode build? It&apos;s not ENABLE_SUID_SANDBOX_LINUX will ever be used on Mac.
Right. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768421</commentid>
    <comment_count>122</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-15 13:08:32 -0800</bug_when>
    <thetext>&gt; This version is *still* storing the size_t result of str(n)len in int variables, leaving the code open to arithmetic overflow bugs. And this is just one problem, I&apos;m sure there are more of them hiding in the code.

What is the purpose of this game? You are smart enough to know that overflow is not possible. Strnlen returns a value between 0 and n (512). Even 2 * n (512) is way less than 2G. Even if we increase it to 10000, we will have no problem. The root process is intended to run without many dependencies. It does not use WK or STL or other utilities, only system calls. You disappeared from IRC, you did not say anything here. I suspect there is something you don&apos;t want to tell us. At least tell me in privately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768439</commentid>
    <comment_count>123</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-15 13:41:36 -0800</bug_when>
    <thetext>(In reply to comment #122)
&gt; &gt; This version is *still* storing the size_t result of str(n)len in int variables, leaving the code open to arithmetic overflow bugs. And this is just one problem, I&apos;m sure there are more of them hiding in the code.
&gt; 
&gt; What is the purpose of this game? You are smart enough to know that overflow is not possible. Strnlen returns a value between 0 and n (512). Even 2 * n (512) is way less than 2G. Even if we increase it to 10000, we will have no problem. The root process is intended to run without many dependencies. It does not use WK or STL or other utilities, only system calls.

This is not about strnlen() specifically. This is about having a sane approach to writing secure software.

You should keep the amount of code that runs in a privileged state to an absolute minimum.
You should re-use well tested library functionality instead of writing your own things.
You should handle any and all errors. (There&apos;s tons of missing error handling: fclose(), fwrite(), stat(), lstat(), execl(), ...)

As for the &quot;out of memory conditions&quot; argument - this code is for Linux, where malloc() never returns NULL. In the absolute worst-case scenario the OOM killer will just kill your process.

&gt; You disappeared from IRC, you did not say anything here. I suspect there is something you don&apos;t want to tell us.

wat</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768465</commentid>
    <comment_count>124</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-15 14:04:47 -0800</bug_when>
    <thetext>&gt; As for the &quot;out of memory conditions&quot; argument - this code is for Linux, where malloc() never returns NULL. In the absolute worst-case scenario the OOM killer will just kill your process.

Source:
http://www.kernel.org/doc/man-pages/online/pages/man3/malloc.3.html

RETURN VALUE
       For  calloc()  and  malloc(), return a pointer to the allocated memory,
       which is suitably aligned for any kind of variable.   On  error,  these
       functions  return NULL.  NULL may also be returned by a successful call
       to malloc() with a size of zero, or by a successful  call  to  calloc()
       with nmemb or size equal to zero.

NOTES  By default, Linux follows an optimistic memory allocation strategy.  This
       means that when malloc() returns non-NULL there is no guarantee that the
       memory really is available.  In case it turns out that the system is out of
       memory, one or more processes will be killed by the OOM killer.  For more
       information, see the description of /proc/sys/vm/overcommit_memory and
       /proc/sys/vm/oom_adj in proc(5), and the kernel source file
       Documentation/vm/overcommit-accounting.

So malloc can return with NULL. OOM only handles those cases, where malloc returns non-NULL, and still the memory is not available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768479</commentid>
    <comment_count>125</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-15 14:15:55 -0800</bug_when>
    <thetext>&gt; You should handle any and all errors. (There&apos;s tons of missing error handling: fclose(), fwrite(), stat(), lstat(), execl(), ...)

This is a valid point.

However:

http://linux.die.net/man/3/execl
The exec() functions only return if an error has have occurred. The return value is -1, and errno is set to indicate the error. 

So we just return with fail if the function returns with anything.

Also checking the error code of fclose() and other free like functions can throw warnings, but these are not exactly errors, since the process can continue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768496</commentid>
    <comment_count>126</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-15 14:29:03 -0800</bug_when>
    <thetext>(In reply to comment #124)
&gt; 
&gt; So malloc can return with NULL. OOM only handles those cases, where malloc returns non-NULL, and still the memory is not available.

In that case, if you use the WTF::CString class and we can&apos;t allocate memory we&apos;ll crash. If you use std::string, it&apos;ll throw an std::bad_alloc exception and terminate (through a call to std::terminate). I remain unconvinced that you need custom string functions for security.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768514</commentid>
    <comment_count>127</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-15 14:43:23 -0800</bug_when>
    <thetext>&gt; In that case, if you use the WTF::CString class and we can&apos;t allocate memory we&apos;ll crash. If you use std::string, it&apos;ll throw an std::bad_alloc exception and terminate (through a call to std::terminate). I remain unconvinced that you need custom string functions for security.

For simplicity the process with root priveliges does not use anything from WebKit, STL or Qt at the moment. For example, if you add Qt libs, the fork with a new process namespace does not work (don&apos;t ask me why, probably Qt initializes something, which conflicts with the fork). I am not sure you can add anything from WebKit without Qt (due to the config.h/Platform.h dependency). STL is huge as well, and you need to use exception handling, which is uncommon in WebKit. Anyway, I don&apos;t care about string manipulations anymore. Probably std::string is the only viable way then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769455</commentid>
    <comment_count>128</comment_count>
      <attachid>174722</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-16 10:58:09 -0800</bug_when>
    <thetext>Created attachment 174722
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769458</commentid>
    <comment_count>129</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-16 10:58:54 -0800</bug_when>
    <thetext>Here is a cool new version of suid sandbox! Without my little string operations, only with cstrings! All functions return values are double checked! Only here, only now, only for you! ;)

Love and kisses! ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769461</commentid>
    <comment_count>130</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 11:01:01 -0800</bug_when>
    <thetext>Attachment 174722 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/QtWebKit.pro&apos;, u&apos;Sour...&quot; exit_code: 1
Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 12 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>770613</commentid>
    <comment_count>131</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-19 04:48:14 -0800</bug_when>
    <thetext>@kling, @andersca: did you think of something similar?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772528</commentid>
    <comment_count>132</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-20 23:58:39 -0800</bug_when>
    <thetext>As mentioned above, all mod requests have been addressed. Could those, who made those requests, please, review the latest version of the patch? Or should we review it in-house?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773018</commentid>
    <comment_count>133</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-21 09:19:21 -0800</bug_when>
    <thetext>(In reply to comment #132)
&gt; As mentioned above, all mod requests have been addressed. Could those, who made those requests, please, review the latest version of the patch? Or should we review it in-house?

Everyone at Apple has the thanksgiving week off so we&apos;re not really around. I&apos;ll try to review it anyway later this week though. Thanks for addressing our comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773162</commentid>
    <comment_count>134</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-21 12:02:00 -0800</bug_when>
    <thetext>(In reply to comment #133)
&gt; (In reply to comment #132)
&gt; &gt; As mentioned above, all mod requests have been addressed. Could those, who made those requests, please, review the latest version of the patch? Or should we review it in-house?
&gt; 
&gt; Everyone at Apple has the thanksgiving week off so we&apos;re not really around. I&apos;ll try to review it anyway later this week though. Thanks for addressing our comments!

Ooh, I didn&apos;t know about that. Thank you and happy thanksgiving!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775244</commentid>
    <comment_count>135</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-26 01:24:14 -0800</bug_when>
    <thetext>(In reply to comment #133)
&gt; (In reply to comment #132)
&gt; &gt; As mentioned above, all mod requests have been addressed. Could those, who made those requests, please, review the latest version of the patch? Or should we review it in-house?
&gt; 
&gt; Everyone at Apple has the thanksgiving week off so we&apos;re not really around. I&apos;ll try to review it anyway later this week though. Thanks for addressing our comments!

If you have a little time, don&apos;t forget about me pls :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777468</commentid>
    <comment_count>136</comment_count>
      <attachid>174722</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-27 19:44:45 -0800</bug_when>
    <thetext>Comment on attachment 174722
Proposed patch

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

&gt; ChangeLog:6
&gt; +        Reviewed by Zoltan Herczeg.

And me!

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:52
&gt; +static char sandboxDirectory[PathSize];

Doesn&apos;t Linux have a MAX_PATH #define?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:54
&gt; +static uid_t sandboxUserUid;
&gt; +static uid_t sandboxUserGid;

Please make UID and GID all caps.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:65
&gt; +#define strlcpy(destination, source, maxLength)  \
&gt; +    do { \
&gt; +        (destination)[0] = &apos;\0&apos;; \
&gt; +        strncat((destination), (source), (maxLength) - 1); \
&gt; +    } while (0)
&gt; +
&gt; +#define strlcat(destination, source, maxLength) \
&gt; +    do { \
&gt; +        strncat((destination), (source), (maxLength) - 1 - strnlen((destination), (maxLength) - 1)); \
&gt; +    } while (0)

Why are these macros and not inline functions?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:70
&gt; +static void launchChangeRootHelper(int socketPair[])

I think it&apos;d be more clear for this function to take two parameters instead of a pointer.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:73
&gt; +    // a file by mistake. However, CAP_SYS_RESSOURCE capability should be dropped

Spelling error: CAP_SYS_RESOURCE.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:76
&gt; +    if (setrlimit(RLIMIT_NOFILE, &amp;restrictedResource)) {

Please explicitly check for -1 here instead of just any nonzero value.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:77
&gt; +        fprintf(stderr, &quot;Helper couldn&apos;t set the resourcelimit: %s.\n&quot;, strerror(errno));

resourcelimit -&gt; resource limit.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:81
&gt; +    if (close(socketPair[1])) {

Please explicitly check for -1 here instead of just any nonzero value.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:82
&gt; +        fprintf(stderr, &quot;Couldn&apos;t close socket %d: %s\n&quot;, socketPair[1], strerror(errno));

Missing period before the newline in the format string. Maybe &quot;Failed to close socket&quot; is a better message?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:86
&gt; +    // We expect a &apos;C&apos; (ChrootMe) message from the WebProcess.

I think this comment is better suited for the if statement below this one.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:89
&gt; +        fprintf(stderr, &quot;Couldn&apos;t read the proper chrootme msg: %s\n&quot;, strerror(errno));

I suggest making this error message more generic, something like &quot;Failed to read message from the web process.&quot;

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:94
&gt; +        fprintf(stderr, &quot;Wrong message recieved.\n&quot;);

Maybe print out the message as a hex character here?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:99
&gt; +    if (lstat(sandboxDirectory, &amp;sandboxDirectoryInfo) &amp;&amp; S_ISDIR(sandboxDirectoryInfo.st_mode)) {

I think you want to check whether lstat returns -1 here. Also, if lstat fails, then i don&apos;t think you can count on sandboxDirectoryInfo.st_mode being initialized.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:104
&gt; +    if (chroot(sandboxDirectory)) {

You should check for a -1 return value here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:112
&gt; +    if (chdir(&quot;/&quot;)) {

Please explicitly check for -1 here instead of just any nonzero value.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:126
&gt; +static bool setEnvironmentVariablesForChangeRootHelper(pid_t pid, int socketPair[])

Same comment about the socketPair array.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:130
&gt; +    char sandboxHelperPid[descriptorSize];

The correct WebKit style guidelines name for this would be sandboxHelperPID.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:134
&gt; +        fprintf(stderr, &quot;Converting the pid to string is failed: %s\n&quot;, strerror(errno));

snprintf doesn&apos;t sett errno. Maybe just print out &quot;Failed to convert the sandbox helper PID to a string.\n&quot;.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:138
&gt; +    if (setenv(SANDBOX_HELPER_PID, sandboxHelperPid, 1)) {

Please check for -1 here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:139
&gt; +        fprintf(stderr, &quot;Couldn&apos;t set the SBX_HELPER_PID env variable: %s\n&quot;, strerror(errno));

env -&gt; environment.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:145
&gt; +        fprintf(stderr, &quot;Converting the file descriptor to string is failed: %s.\n&quot;, strerror(errno));

Same comment about snprintf not setting errno.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:149
&gt; +    if (setenv(SANDBOX_DESCRIPTOR, socketDescriptor, 1)) {

Please check for -1 here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:150
&gt; +        fprintf(stderr, &quot;Saving the helpers filedescriptor into an env variable failed: %s\n&quot;, strerror(errno));

&quot;Failed to store the helper&apos;s file descriptor into an environment variable: %s.\n&quot;

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:154
&gt; +    if (close(socketPair[0])) {

Please check for -1 here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:155
&gt; +        fprintf(stderr, &quot;Closing of %d failed: %s\n&quot;, socketPair[0], strerror(errno));

Missing period.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:164
&gt; +    pid_t pid;

You can just declare and initialize pid on the same row.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:166
&gt; +    if (socketpair(AF_UNIX, SOCK_STREAM, 0, socketPair)) {

Please check for -1 here. Also, do you really need to create a socket pair? Wouldn&apos;t pipe be OK here?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:171
&gt; +    pid = syscall(SYS_clone, CLONE_FS | SIGCHLD, 0, 0, 0);

Why are you calling syscall here instead of clone directly?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:173
&gt; +    switch (pid) {

I think just using two if statements instead of this switch statement would be clearer.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:182
&gt; +        // We shouldn&apos;t reach this part, because launchChrootHelper() should exit in every cases.

I don&apos;t think this comment is correct. launchChrootHelper only exists in the success case.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:191
&gt; +    // We should never reach here.

Missing newline.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:199
&gt; +static bool setCapabilities(cap_value_t* capabilityList, int length)

I think this should take a Vector&lt;cap_value_t&gt; instead of a pointer + length.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:201
&gt; +    cap_t capabilities;

Please put the declaration on the same line as the initialization.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:206
&gt; +        fprintf(stderr, &quot;Process capabilities init failed: %s\n&quot;, strerror(errno));

&quot;Failed to initialize process capabilities&quot;

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:210
&gt; +    if (cap_clear(capabilities)) {

Please check for -1 here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:218
&gt; +        if (cap_set_flag(capabilities, CAP_EFFECTIVE, length, capabilityList, CAP_SET)
&gt; +            || cap_set_flag(capabilities, CAP_INHERITABLE, length, capabilityList, CAP_SET)
&gt; +            || cap_set_flag(capabilities, CAP_PERMITTED, length, capabilityList, CAP_SET)) {

Please check for -1 here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:219
&gt; +            fprintf(stderr, &quot;Cannot set process capability flags: %s\n&quot;, strerror(errno));

&quot;Failed to ...&quot;

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:226
&gt; +        fprintf(stderr, &quot;Cannot set process capabilities: %s\n&quot;, strerror(errno));

&quot;Failed to ...&quot;

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:231
&gt; +    if (cap_free(capabilities) == -1) {

I don&apos;t think you need to check if cap_free succeeds here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:232
&gt; +        fprintf(stderr, &quot;Liberating capabilities failed: %s\n&quot;, strerror(errno));

&quot;Failed to ...&quot;

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:242
&gt; +    if (prctl(PR_SET_DUMPABLE, 0, 0, 0, 0)) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:243
&gt; +        fprintf(stderr, &quot;Setting dumplable is failed: %s\n&quot;, strerror(errno));

Spelling error.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:248
&gt; +    if (setresgid(sandboxUserGid, sandboxUserGid, sandboxUserGid)
&gt; +        || setresuid(sandboxUserUid, sandboxUserUid, sandboxUserUid)) {

These should be two separate calls so you can better pinpoint which call failed in case of failure.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:252
&gt; +    // Drop all capabilities. Again, setuid() normally takes care of this if we had euid 0.

Please add an extra newline before the comment.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:259
&gt; +    struct stat fileStat;
&gt; +    return !(lstat(path, &amp;fileStat) &amp;&amp; errno == ENOENT);

Please rewrite this as two if statements to make it more clear.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:265
&gt; +    if (lstat(directory, &amp;fileStat)) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:278
&gt; +    strlcpy(pathToCreateInSandbox, sandboxDirectory, PathSize);
&gt; +    strlcat(pathToCreateInSandbox, pathToCreate, PathSize);

It looks like this strlcpy/strlcat pattern is common, so I suggest you factor it out into a &quot;appendDirectoryComponent&quot; function that takes a path and a name and returns them concatenated.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:281
&gt; +    if (mkdir(pathToCreateInSandbox, mode)) {

Please check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:289
&gt; +    if (lstat(pathToCreate, &amp;fileInfo)) {

Please check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:296
&gt; +    if (fileInfo.st_uid == getuid()) {
&gt; +        if (chown(pathToCreateInSandbox, sandboxUserUid, sandboxUserGid))
&gt; +            return false;
&gt; +    }

This could use some error reporting/explanation.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:298
&gt; +    if (chmod(pathToCreateInSandbox, fileInfo.st_mode))
&gt; +        return false;

Ditto.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:302
&gt; +static bool createDirectoryPath(const char* path)

I don&apos;t think this name fully clarifies what the function does. Maybe something to indicate that it creates all intermediate directories as well.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:306
&gt; +    char fullPathInSandbox[PathSize];
&gt; +    strlcpy(fullPathInSandbox, sandboxDirectory, PathSize);
&gt; +    strlcat(fullPathInSandbox, path, PathSize);

This is why I think you should have gone with C++ style strings...

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:318
&gt; +        strlcpy(nextDirectoryToCreate, startPos - 1, strnlen(startPos - 1, endPos - startPos + 1) + 1);

Again, C++ style strings would have made this more clear.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:324
&gt; +    // Create the last directory of the directorypath.

missing space between directory and path.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:331
&gt; +    const char* dev = &quot;/dev/&quot;;

I don&apos;t think you need the trailing slash here. I think devDirectory or devPath would be a better variable name.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:336
&gt; +    for (int i = 0; i &lt; 2; ++i) {

Might want to use the num-elements-in-array trick here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:339
&gt; +            fprintf(stderr, &quot;Error by obtaining information about device file (%s): %s\n&quot;, devices[i], strerror(errno));

&quot;Failed to stat device file&quot;

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:345
&gt; +        // their permissions should be: rw-rw-rw-.

No need for this comment to be on a separate line.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:350
&gt; +        if (mknod(device, S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, makedev(major(dev), minor(dev)))) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:362
&gt; +    const char* proc = &quot;/proc/&quot;;

Trailing slash. procPath.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:369
&gt; +    if (mount(proc, procPathInSandbox, &quot;proc&quot;, 0, 0)) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:376
&gt; +    const char* sharedMemory = &quot;/run/shm/&quot;;

Trailing slash. sharedMemoryPath.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:378
&gt; +    if (!createDirectoryPath(sharedMemory))
&gt; +        return false;

Don&apos;t you want to print out an error message in this case?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:383
&gt; +    if (mount(sharedMemory, sharedMemoryPathInSandbox, &quot;tmpfs&quot;, 0, 0)) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:385
&gt; +            fprintf(stderr, &quot;Error by mounting %s: %s\n&quot;, sharedMemory, strerror(errno));

&quot;Failed to mount &apos;%s&apos;: %s.\n&quot;

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:392
&gt; +static bool linkFile(char* sourceFile, char* targetFile)

These should be const char*.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:395
&gt; +    bool isSymlink = true;
&gt; +    while (isSymlink) {

It looks like you can just do while (true) here since isSymlink is only set once inside the loop and then you immediately break out of it.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:397
&gt; +        if (lstat(sourceFile, &amp;fileInfo)) {

-1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:406
&gt; +        char* endOfBaseDirectoryInSource = strrchr(sourceFile, &apos;/&apos;);

const char.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:413
&gt; +        strlcpy(baseDirectoryOfSource, sourceFile, endOfBaseDirectoryInSource - sourceFile + 2);

Why +2?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:420
&gt; +        if (link(sourceFile, targetFile)) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:431
&gt; +        isSymlink = (fileInfo.st_mode &amp; S_IFMT) == S_IFLNK;
&gt; +        if (!isSymlink)
&gt; +            break;

Again, you can just break directly here if this is false - no need to assign it.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:438
&gt; +        char symlinkTargetInRealWorld[PathSize];

What does real world mean here?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:440
&gt; +        // Making difference between relative and absolute paths.

Please add an extra newline before the comment.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:458
&gt; +            strlcat(symlinkTargetInRealWorld, symlinkTarget, PathSize);
&gt; +
&gt; +            strlcat(symlinkTargetInSandbox, sandboxDirectory, PathSize);
&gt; +            strlcat(symlinkTargetInSandbox, symlinkTarget, PathSize);
&gt; +        } else {
&gt; +            strlcat(symlinkTargetInRealWorld, baseDirectoryOfSource, PathSize);
&gt; +            strlcat(symlinkTargetInRealWorld, &quot;/&quot;, PathSize);
&gt; +            strlcat(symlinkTargetInRealWorld, symlinkTarget, PathSize);
&gt; +
&gt; +            strlcat(symlinkTargetInSandbox, sandboxDirectory, PathSize);
&gt; +            strlcat(symlinkTargetInSandbox, &quot;/&quot;, PathSize);
&gt; +            strlcat(symlinkTargetInSandbox, symlinkTargetInRealWorld, PathSize);

Again, having a helper function for concatenating paths together would simplify this a lot.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:465
&gt; +        sourceFile[0] = &apos;\0&apos;;
&gt; +        targetFile[0] = &apos;\0&apos;;
&gt; +        strlcat(sourceFile, symlinkTargetInRealWorld, PathSize);
&gt; +        strlcat(targetFile, symlinkTargetInSandbox, PathSize);

I see now why sourceFile and targetFile are not const pointers. I suggest that you don&apos;t use the parameters like this but instead use your own variables inside the function.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:470
&gt; +static bool linkDirectory(const char* sourceDirectoryPath, const char* targetDirectoryPath)

I think this function could use a comment indicating what it does or a better name.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:481
&gt; +    struct dirent *directoryInfo = 0;
&gt; +    while ((directoryInfo = readdir(directory))) {

You can put the declaration iside the while statement here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:482
&gt; +        char* nextFileInDirectory = directoryInfo-&gt;d_name;

I don&apos;t think &quot;next&quot; adds anything here. Maybe just fileName?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:485
&gt; +        if (!strncmp(nextFileInDirectory, &quot;.&quot;, strnlen(nextFileInDirectory, PathSize)) || !strncmp(nextFileInDirectory, &quot;..&quot;, 2))
&gt; +            continue;

It&apos;d be more clear to just call strcmp directly here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:489
&gt; +        strlcpy(sourceFile, sourceDirectoryPath, PathSize);
&gt; +        strlcat(sourceFile, &quot;/&quot;, PathSize);
&gt; +        strlcat(sourceFile, nextFileInDirectory, PathSize);

Same comment about adding a helper function.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:496
&gt; +        bool ok = true;

Give this a more descriptive name, such as &quot;returnValue&quot;. No need to initialize it.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:497
&gt; +        if ((directoryInfo-&gt;d_type == DT_DIR))

No need for the extra parentheses.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:506
&gt; +    // it could have meaning e.g. in the hashgeneration of cache files.

hash generation.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:508
&gt; +    if (lstat(sourceDirectoryPath, &amp;fileStat)) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:512
&gt; +    struct utimbuf times = { fileStat.st_atime, fileStat.st_mtime };

Please don&apos;t use aggregate initialization for this.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:513
&gt; +    if (utime(targetDirectoryPath, &amp;times)) {

Check for -1 here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:514
&gt; +        fprintf(stderr, &quot;Couldn&apos;t set back the last modification time of %s: %s\n&quot;, targetDirectoryPath, strerror(errno));

It&apos;s always good to quote paths, so &apos;%s&apos;.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:532
&gt; +    while (*currentRuntimeDependency) {

Instead of null terminating this I think you should use a for-loop and count up to the number of elements in the array.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:543
&gt; +        if (dlinfo(handle, RTLD_DI_LINKMAP, &amp;linkMap)) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:552
&gt; +        char pathOfTheLibrary[PathSize];

I don&apos;t think this variable is needed, you can just access linkMap-&gt;l_name directly.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:557
&gt; +        strlcpy(pathOfTheLibraryInSandbox, sandboxDirectory, PathSize);
&gt; +        strlcat(pathOfTheLibraryInSandbox, pathOfTheLibrary, PathSize);

Same comment about a helper function.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:560
&gt; +            if (dlclose(handle))

Check for -1 (or just remove the error handling altogether).

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:564
&gt; +        if (dlclose(handle)) {

Check for -1 (or just remove the error handling altogether).

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:578
&gt; +    char buffer[BUFSIZ];

What&apos;s BUFSIZ here?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:589
&gt; +    strlcpy(xauthorityOfRealUser, realUser-&gt;pw_dir, PathSize);
&gt; +    strlcat(xauthorityOfRealUser, &quot;/.Xauthority&quot;, PathSize);

Same comment about a helper function.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:592
&gt; +    strlcpy(xauthorityInSandbox, sandboxDirectory, PathSize);
&gt; +    strlcat(xauthorityInSandbox, xauthorityOfRealUser, PathSize);

Same comment about a helper function.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:606
&gt; +    // We copy the .Xauthority file of the real user (instead of linking) because nobody user

the &apos;nobody&apos; user.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:609
&gt; +    while ((size = fread(buffer, 1, BUFSIZ, source)))
&gt; +        fwrite(buffer, 1, size, dest);

Don&apos;t you want to check that the write was successful here?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:621
&gt; +    if (chown(xauthorityInSandbox, sandboxUserUid, sandboxUserGid)) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:626
&gt; +    if (setenv(&quot;XAUTHORITY&quot;, xauthorityInSandbox, 1)) {

Check for -1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:633
&gt; +static bool initSandbox()

Maybe initializeSandbox?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:636
&gt; +    // Create the sandbox directory. We only need to step into it, so
&gt; +    // the executable permission is needed only.

&quot;step into it&quot; is oddly worded.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:637
&gt; +    if (mkdir(sandboxDirectory, S_IFDIR | S_IXUSR | S_IXOTH)) {

-1.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:656
&gt; +    char localDirectory[PathSize];
&gt; +    strlcpy(localDirectory, home, PathSize);
&gt; +    strlcat(localDirectory, &quot;/.local/share/Nokia/&quot;, PathSize);

Helper function!

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:660
&gt; +    char cacheDirectory[PathSize];
&gt; +    strlcpy(cacheDirectory, home, PathSize);
&gt; +    strlcat(cacheDirectory, &quot;/.cache/Nokia/&quot;, PathSize);

Helper function!!

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:664
&gt; +    char fontDirectory[PathSize];
&gt; +    strlcpy(fontDirectory, home, PathSize);
&gt; +    strlcat(fontDirectory, &quot;/.fontconfig/&quot;, PathSize);

Helper function!!!

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:678
&gt; +    const char** currentLinkedDirectory = linkedDirectories;
&gt; +    while (*currentLinkedDirectory) {

For loop instead of null terminating.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:681
&gt; +        strlcpy(linkedDirectoryInSandbox, sandboxDirectory, PathSize);
&gt; +        strlcat(linkedDirectoryInSandbox, *currentLinkedDirectory, PathSize);

Helper function!!!!

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:697
&gt; +    cap_value_t capabiltyList[4];

capabiltyList is misspelled. Please do use aggregate initialization here and use [] instead of a fixed size.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:714
&gt; +static bool moveToNewPidNamespace()

moveToNewPIDNamespace.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:717
&gt; +    // We can&apos;t share FS accross namespaces.

FS -&gt; filesystems.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:718
&gt; +    pid_t pid, expectedPid;

expectedPid-&gt; expectedPID. (And both variables should be declared where they are used).

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:720
&gt; +    pid = syscall(SYS_clone, CLONE_NEWPID | SIGCHLD, 0, 0, 0);

Again, you can initialize pid directly and why is syscall used instead of just calling clone directly?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:722
&gt; +    switch (pid) {

Again, two if statements would be clearer.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:738
&gt; +            fprintf(stderr, &quot;Waitpid is failed with: %s\n&quot;, strerror(errno));

It&apos;s not waitpid that fails here, you should indicate that in your error message.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:749
&gt; +static bool run(int argc, char *const argv[])

Why does this need to be a separate function? Why can&apos;t this code just live in main?

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:758
&gt; +    strlcpy(sandboxDirectory, userInfo-&gt;pw_dir, PathSize);
&gt; +    strlcat(sandboxDirectory, &quot;/.wk2-sandbox&quot;, PathSize);

Helper function!

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:760
&gt; +    // Currently we use nobody user as the sandbox user and fallback to the real user

The &apos;nobody&apos; user. fallback -&gt; fall back.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:761
&gt; +    // if it&apos;s failed. (We could extend this in the future with a specific restricted user.)

if it&apos;s failed -&gt; if we failed do get it? I think the period should go after the ).

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:763
&gt; +    struct passwd* nobodyUser = getpwnam(&quot;nobody&quot;);
&gt; +    if (nobodyUser) {

Variable declaration can go inside the if statement.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:818
&gt; +    if (execl(argv[1], argv[1], argv[2], reinterpret_cast&lt;char*&gt;(0)) == -1) {

Check for -1. Oh wait! :)

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:175
&gt; +    QProcess* webProcessOrSUIDHelper;
&gt; +    webProcessOrSUIDHelper = new QtWebProcess();

Can just initialize the variable on the same line.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:159
&gt; +    long int sandboxSocketDescriptor = -1;
&gt; +    char* sandboxSocketDescriptorString;
&gt; +    char* helperPid;
&gt; +    char sandboxMeMessage = MSG_CHROOTME;
&gt; +    ssize_t numberOfCharacters;
&gt; +    pid_t helper = -1;

Please move these to where they&apos;re actually initialized.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:166
&gt; +    errno = 0;

No need to set errno here.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:167
&gt; +    sandboxSocketDescriptor = strtol(sandboxSocketDescriptorString, (char **) 0, 10);

Extra space before the ** and the 0.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:168
&gt; +    if (errno || (sandboxSocketDescriptor == -1))

Actually, it&apos;d be better to pass a second parameter to strtol and check that it&apos;s \0 instead of checking the return value like this.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:172
&gt; +    helperPid = getenv(SANDBOX_HELPER_PID);

This variable should be called helperPID, or maybe sandboxHelperPID.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:178
&gt; +        errno = 0;
&gt; +        helper = strtol(helperPid, (char **) 0, 10);
&gt; +        if (errno || (helper == -1))

Same comment here about passing a parameter to strtol.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:181
&gt; +    // Send the chrootMe message to the helper.

Newline before the comment.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:187
&gt; +    // Read the acknowledgement message from the helper.

Newline before the comment.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:189
&gt; +    if ((numberOfCharacters != 1) || (sandboxMeMessage != MSG_CHROOTED)) {

No need for the extra parentheses.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:194
&gt; +    // Wait for the helper process.

Newline before the comment.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:195
&gt; +    int expectedPid = waitpid(helper, 0, 0);

expectedPID.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:196
&gt; +    if (expectedPid != -1 &amp;&amp; ((helper == -1) || (expectedPid == helper)))

No need for the extra parentheses.

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:207
&gt; +    pid_t helper;
&gt; +    helper = chrootMe();

Put the initialization and declaration on the same line.

&gt; Tools/ChangeLog:6
&gt; +        Reviewed by Zoltan Herczeg.

And me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780262</commentid>
    <comment_count>137</comment_count>
      <attachid>174722</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-30 11:43:33 -0800</bug_when>
    <thetext>Comment on attachment 174722
Proposed patch

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

&gt;&gt; ChangeLog:6
&gt;&gt; +        Reviewed by Zoltan Herczeg.
&gt; 
&gt; And me!

Ofc! Sorry! This line remained from the previous, almost-committed version :)

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:22
&gt;&gt; +#include &quot;SandboxEnvironmentLinux.h&quot;
&gt; 
&gt; Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]

Should I create a dummy config.h? Because if I use the config.h of WebKit2 then it&apos;d require further dependencies (e.g. Qt libraries) and the base concept is to keep this code as small as possible.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:52
&gt;&gt; +static char sandboxDirectory[PathSize];
&gt; 
&gt; Doesn&apos;t Linux have a MAX_PATH #define?

limits.h contains the PATH_MAX constant, but from the linux manual:

&quot;According to POSIX.1-2001 a buffer of size PATH_MAX suffices, but PATH_MAX need not be a defined constant, and may have to be obtained using pathconf(3).&quot;

Because of this many functions based on PATH_MAX constant is pronounced as insecure, deprecated or broken (e.g.: getcwd(), realpath(), etc.). I guess we neither should have to trust in it.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:54
&gt;&gt; +static uid_t sandboxUserGid;
&gt; 
&gt; Please make UID and GID all caps.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:65
&gt;&gt; +    } while (0)
&gt; 
&gt; Why are these macros and not inline functions?

Right. Updated.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:70
&gt;&gt; +static void launchChangeRootHelper(int socketPair[])
&gt; 
&gt; I think it&apos;d be more clear for this function to take two parameters instead of a pointer.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:73
&gt;&gt; +    // a file by mistake. However, CAP_SYS_RESSOURCE capability should be dropped
&gt; 
&gt; Spelling error: CAP_SYS_RESOURCE.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:76
&gt;&gt; +    if (setrlimit(RLIMIT_NOFILE, &amp;restrictedResource)) {
&gt; 
&gt; Please explicitly check for -1 here instead of just any nonzero value.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:77
&gt;&gt; +        fprintf(stderr, &quot;Helper couldn&apos;t set the resourcelimit: %s.\n&quot;, strerror(errno));
&gt; 
&gt; resourcelimit -&gt; resource limit.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:81
&gt;&gt; +    if (close(socketPair[1])) {
&gt; 
&gt; Please explicitly check for -1 here instead of just any nonzero value.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:82
&gt;&gt; +        fprintf(stderr, &quot;Couldn&apos;t close socket %d: %s\n&quot;, socketPair[1], strerror(errno));
&gt; 
&gt; Missing period before the newline in the format string. Maybe &quot;Failed to close socket&quot; is a better message?

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:86
&gt;&gt; +    // We expect a &apos;C&apos; (ChrootMe) message from the WebProcess.
&gt; 
&gt; I think this comment is better suited for the if statement below this one.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:89
&gt;&gt; +        fprintf(stderr, &quot;Couldn&apos;t read the proper chrootme msg: %s\n&quot;, strerror(errno));
&gt; 
&gt; I suggest making this error message more generic, something like &quot;Failed to read message from the web process.&quot;

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:94
&gt;&gt; +        fprintf(stderr, &quot;Wrong message recieved.\n&quot;);
&gt; 
&gt; Maybe print out the message as a hex character here?

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:99
&gt;&gt; +    if (lstat(sandboxDirectory, &amp;sandboxDirectoryInfo) &amp;&amp; S_ISDIR(sandboxDirectoryInfo.st_mode)) {
&gt; 
&gt; I think you want to check whether lstat returns -1 here. Also, if lstat fails, then i don&apos;t think you can count on sandboxDirectoryInfo.st_mode being initialized.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:104
&gt;&gt; +    if (chroot(sandboxDirectory)) {
&gt; 
&gt; You should check for a -1 return value here.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:112
&gt;&gt; +    if (chdir(&quot;/&quot;)) {
&gt; 
&gt; Please explicitly check for -1 here instead of just any nonzero value.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:126
&gt;&gt; +static bool setEnvironmentVariablesForChangeRootHelper(pid_t pid, int socketPair[])
&gt; 
&gt; Same comment about the socketPair array.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:130
&gt;&gt; +    char sandboxHelperPid[descriptorSize];
&gt; 
&gt; The correct WebKit style guidelines name for this would be sandboxHelperPID.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:134
&gt;&gt; +        fprintf(stderr, &quot;Converting the pid to string is failed: %s\n&quot;, strerror(errno));
&gt; 
&gt; snprintf doesn&apos;t sett errno. Maybe just print out &quot;Failed to convert the sandbox helper PID to a string.\n&quot;.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:138
&gt;&gt; +    if (setenv(SANDBOX_HELPER_PID, sandboxHelperPid, 1)) {
&gt; 
&gt; Please check for -1 here.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:139
&gt;&gt; +        fprintf(stderr, &quot;Couldn&apos;t set the SBX_HELPER_PID env variable: %s\n&quot;, strerror(errno));
&gt; 
&gt; env -&gt; environment.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:145
&gt;&gt; +        fprintf(stderr, &quot;Converting the file descriptor to string is failed: %s.\n&quot;, strerror(errno));
&gt; 
&gt; Same comment about snprintf not setting errno.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:149
&gt;&gt; +    if (setenv(SANDBOX_DESCRIPTOR, socketDescriptor, 1)) {
&gt; 
&gt; Please check for -1 here.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:150
&gt;&gt; +        fprintf(stderr, &quot;Saving the helpers filedescriptor into an env variable failed: %s\n&quot;, strerror(errno));
&gt; 
&gt; &quot;Failed to store the helper&apos;s file descriptor into an environment variable: %s.\n&quot;

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:154
&gt;&gt; +    if (close(socketPair[0])) {
&gt; 
&gt; Please check for -1 here.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:155
&gt;&gt; +        fprintf(stderr, &quot;Closing of %d failed: %s\n&quot;, socketPair[0], strerror(errno));
&gt; 
&gt; Missing period.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:164
&gt;&gt; +    pid_t pid;
&gt; 
&gt; You can just declare and initialize pid on the same row.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:166
&gt;&gt; +    if (socketpair(AF_UNIX, SOCK_STREAM, 0, socketPair)) {
&gt; 
&gt; Please check for -1 here. Also, do you really need to create a socket pair? Wouldn&apos;t pipe be OK here?

The communication between the SandboxProcess and the WebProcess (what is bidirectional) goes through this socket pair. This way pipe, what is unidirectional, is not suitable here (IMHO).

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:171
&gt;&gt; +    pid = syscall(SYS_clone, CLONE_FS | SIGCHLD, 0, 0, 0);
&gt; 
&gt; Why are you calling syscall here instead of clone directly?

I do not use clone() with syscall here, but I call sys_clone() system call. They are different:

Usually clone(int (*child_main)(void *), void *child_stack, int flags, void *main_arg, ...) is used to run an approriate function in a separate thread.

sys_clone(void *child_stack, int flags) corresponds more to fork(), the new task continues its execution by returning from clone() so the child_main function and its argument are not needed.

And our goal with this cloning is to run our current process with additional abilities.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:173
&gt;&gt; +    switch (pid) {
&gt; 
&gt; I think just using two if statements instead of this switch statement would be clearer.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:182
&gt;&gt; +        // We shouldn&apos;t reach this part, because launchChrootHelper() should exit in every cases.
&gt; 
&gt; I don&apos;t think this comment is correct. launchChrootHelper only exists in the success case.

Indeed. Comment is updated to

&quot;// We reach this part only if launchChrootHelper() failed, instead it should have exited.&quot;

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:191
&gt;&gt; +    // We should never reach here.
&gt; 
&gt; Missing newline.

This part is removed when switch statement was changed to if statement.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:201
&gt;&gt; +    cap_t capabilities;
&gt; 
&gt; Please put the declaration on the same line as the initialization.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:206
&gt;&gt; +        fprintf(stderr, &quot;Process capabilities init failed: %s\n&quot;, strerror(errno));
&gt; 
&gt; &quot;Failed to initialize process capabilities&quot;

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:210
&gt;&gt; +    if (cap_clear(capabilities)) {
&gt; 
&gt; Please check for -1 here.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:218
&gt;&gt; +            || cap_set_flag(capabilities, CAP_PERMITTED, length, capabilityList, CAP_SET)) {
&gt; 
&gt; Please check for -1 here.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:219
&gt;&gt; +            fprintf(stderr, &quot;Cannot set process capability flags: %s\n&quot;, strerror(errno));
&gt; 
&gt; &quot;Failed to ...&quot;

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:226
&gt;&gt; +        fprintf(stderr, &quot;Cannot set process capabilities: %s\n&quot;, strerror(errno));
&gt; 
&gt; &quot;Failed to ...&quot;

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:231
&gt;&gt; +    if (cap_free(capabilities) == -1) {
&gt; 
&gt; I don&apos;t think you need to check if cap_free succeeds here.

Ok, removed.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:232
&gt;&gt; +        fprintf(stderr, &quot;Liberating capabilities failed: %s\n&quot;, strerror(errno));
&gt; 
&gt; &quot;Failed to ...&quot;

Removed too.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:242
&gt;&gt; +    if (prctl(PR_SET_DUMPABLE, 0, 0, 0, 0)) {
&gt; 
&gt; Check for -1.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:243
&gt;&gt; +        fprintf(stderr, &quot;Setting dumplable is failed: %s\n&quot;, strerror(errno));
&gt; 
&gt; Spelling error.

Fixed.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:248
&gt;&gt; +        || setresuid(sandboxUserUid, sandboxUserUid, sandboxUserUid)) {
&gt; 
&gt; These should be two separate calls so you can better pinpoint which call failed in case of failure.

Right. Separated.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:252
&gt;&gt; +    // Drop all capabilities. Again, setuid() normally takes care of this if we had euid 0.
&gt; 
&gt; Please add an extra newline before the comment.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:259
&gt;&gt; +    return !(lstat(path, &amp;fileStat) &amp;&amp; errno == ENOENT);
&gt; 
&gt; Please rewrite this as two if statements to make it more clear.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:265
&gt;&gt; +    if (lstat(directory, &amp;fileStat)) {
&gt; 
&gt; Check for -1.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:278
&gt;&gt; +    strlcat(pathToCreateInSandbox, pathToCreate, PathSize);
&gt; 
&gt; It looks like this strlcpy/strlcat pattern is common, so I suggest you factor it out into a &quot;appendDirectoryComponent&quot; function that takes a path and a name and returns them concatenated.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:281
&gt;&gt; +    if (mkdir(pathToCreateInSandbox, mode)) {
&gt; 
&gt; Please check for -1.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:289
&gt;&gt; +    if (lstat(pathToCreate, &amp;fileInfo)) {
&gt; 
&gt; Please check for -1.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:296
&gt;&gt; +    }
&gt; 
&gt; This could use some error reporting/explanation.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:298
&gt;&gt; +        return false;
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:302
&gt;&gt; +static bool createDirectoryPath(const char* path)
&gt; 
&gt; I don&apos;t think this name fully clarifies what the function does. Maybe something to indicate that it creates all intermediate directories as well.

What about createDirecoryChain ?

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:324
&gt;&gt; +    // Create the last directory of the directorypath.
&gt; 
&gt; missing space between directory and path.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:331
&gt;&gt; +    const char* dev = &quot;/dev/&quot;;
&gt; 
&gt; I don&apos;t think you need the trailing slash here. I think devDirectory or devPath would be a better variable name.

Indeed.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:339
&gt;&gt; +            fprintf(stderr, &quot;Error by obtaining information about device file (%s): %s\n&quot;, devices[i], strerror(errno));
&gt; 
&gt; &quot;Failed to stat device file&quot;

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:345
&gt;&gt; +        // their permissions should be: rw-rw-rw-.
&gt; 
&gt; No need for this comment to be on a separate line.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:350
&gt;&gt; +        if (mknod(device, S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, makedev(major(dev), minor(dev)))) {
&gt; 
&gt; Check for -1.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:362
&gt;&gt; +    const char* proc = &quot;/proc/&quot;;
&gt; 
&gt; Trailing slash. procPath.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:369
&gt;&gt; +    if (mount(proc, procPathInSandbox, &quot;proc&quot;, 0, 0)) {
&gt; 
&gt; Check for -1.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:376
&gt;&gt; +    const char* sharedMemory = &quot;/run/shm/&quot;;
&gt; 
&gt; Trailing slash. sharedMemoryPath.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:378
&gt;&gt; +        return false;
&gt; 
&gt; Don&apos;t you want to print out an error message in this case?

I do :) Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:383
&gt;&gt; +    if (mount(sharedMemory, sharedMemoryPathInSandbox, &quot;tmpfs&quot;, 0, 0)) {
&gt; 
&gt; Check for -1.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:385
&gt;&gt; +            fprintf(stderr, &quot;Error by mounting %s: %s\n&quot;, sharedMemory, strerror(errno));
&gt; 
&gt; &quot;Failed to mount &apos;%s&apos;: %s.\n&quot;

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:392
&gt;&gt; +static bool linkFile(char* sourceFile, char* targetFile)
&gt; 
&gt; These should be const char*.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:395
&gt;&gt; +    while (isSymlink) {
&gt; 
&gt; It looks like you can just do while (true) here since isSymlink is only set once inside the loop and then you immediately break out of it.

Right. Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:397
&gt;&gt; +        if (lstat(sourceFile, &amp;fileInfo)) {
&gt; 
&gt; -1.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:406
&gt;&gt; +        char* endOfBaseDirectoryInSource = strrchr(sourceFile, &apos;/&apos;);
&gt; 
&gt; const char.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:413
&gt;&gt; +        strlcpy(baseDirectoryOfSource, sourceFile, endOfBaseDirectoryInSource - sourceFile + 2);
&gt; 
&gt; Why +2?

+1 is for the trailing slash (we need is because file names will be concatenated later).

The second +1 is because of the implementation of strlcpy:
strlcpy(dest, src, maxLength) copies (maxLength - 1) characters from the src to dst to make sure not to overflow. So if we add the length of the string - without the &apos;\0&apos; - the last character will be cutted. In all other cases maxLength is the PathSize constant and don&apos;t require such trick. Maybe I should put a comment here to explain what happens.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:420
&gt;&gt; +        if (link(sourceFile, targetFile)) {
&gt; 
&gt; Check for -1.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:431
&gt;&gt; +            break;
&gt; 
&gt; Again, you can just break directly here if this is false - no need to assign it.

Right. Fixed.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:438
&gt;&gt; +        char symlinkTargetInRealWorld[PathSize];
&gt; 
&gt; What does real world mean here?

It&apos;s the users file system, that&apos;s not the sandbox environment. Should I change it? Maybe to symlinkTarget or originalSymlinkTarget?

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:440
&gt;&gt; +        // Making difference between relative and absolute paths.
&gt; 
&gt; Please add an extra newline before the comment.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:458
&gt;&gt; +            strlcat(symlinkTargetInSandbox, symlinkTargetInRealWorld, PathSize);
&gt; 
&gt; Again, having a helper function for concatenating paths together would simplify this a lot.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:465
&gt;&gt; +        strlcat(targetFile, symlinkTargetInSandbox, PathSize);
&gt; 
&gt; I see now why sourceFile and targetFile are not const pointers. I suggest that you don&apos;t use the parameters like this but instead use your own variables inside the function.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:470
&gt;&gt; +static bool linkDirectory(const char* sourceDirectoryPath, const char* targetDirectoryPath)
&gt; 
&gt; I think this function could use a comment indicating what it does or a better name.

Comment is added.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:481
&gt;&gt; +    while ((directoryInfo = readdir(directory))) {
&gt; 
&gt; You can put the declaration iside the while statement here.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:482
&gt;&gt; +        char* nextFileInDirectory = directoryInfo-&gt;d_name;
&gt; 
&gt; I don&apos;t think &quot;next&quot; adds anything here. Maybe just fileName?

fileName is fine.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:485
&gt;&gt; +            continue;
&gt; 
&gt; It&apos;d be more clear to just call strcmp directly here.

ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:489
&gt;&gt; +        strlcat(sourceFile, nextFileInDirectory, PathSize);
&gt; 
&gt; Same comment about adding a helper function.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:496
&gt;&gt; +        bool ok = true;
&gt; 
&gt; Give this a more descriptive name, such as &quot;returnValue&quot;. No need to initialize it.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:497
&gt;&gt; +        if ((directoryInfo-&gt;d_type == DT_DIR))
&gt; 
&gt; No need for the extra parentheses.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:506
&gt;&gt; +    // it could have meaning e.g. in the hashgeneration of cache files.
&gt; 
&gt; hash generation.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:508
&gt;&gt; +    if (lstat(sourceDirectoryPath, &amp;fileStat)) {
&gt; 
&gt; Check for -1.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:512
&gt;&gt; +    struct utimbuf times = { fileStat.st_atime, fileStat.st_mtime };
&gt; 
&gt; Please don&apos;t use aggregate initialization for this.

Ok. Separated.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:513
&gt;&gt; +    if (utime(targetDirectoryPath, &amp;times)) {
&gt; 
&gt; Check for -1 here.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:514
&gt;&gt; +        fprintf(stderr, &quot;Couldn&apos;t set back the last modification time of %s: %s\n&quot;, targetDirectoryPath, strerror(errno));
&gt; 
&gt; It&apos;s always good to quote paths, so &apos;%s&apos;.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:532
&gt;&gt; +    while (*currentRuntimeDependency) {
&gt; 
&gt; Instead of null terminating this I think you should use a for-loop and count up to the number of elements in the array.

What about a for loop from 0 to (sizeof(runtimeDependencies) / sizeof(runtimeDependencies[0])) ?

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:543
&gt;&gt; +        if (dlinfo(handle, RTLD_DI_LINKMAP, &amp;linkMap)) {
&gt; 
&gt; Check for -1.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:552
&gt;&gt; +        char pathOfTheLibrary[PathSize];
&gt; 
&gt; I don&apos;t think this variable is needed, you can just access linkMap-&gt;l_name directly.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:557
&gt;&gt; +        strlcat(pathOfTheLibraryInSandbox, pathOfTheLibrary, PathSize);
&gt; 
&gt; Same comment about a helper function.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:560
&gt;&gt; +            if (dlclose(handle))
&gt; 
&gt; Check for -1 (or just remove the error handling altogether).

Ok, removed.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:564
&gt;&gt; +        if (dlclose(handle)) {
&gt; 
&gt; Check for -1 (or just remove the error handling altogether).

Removed too.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:578
&gt;&gt; +    char buffer[BUFSIZ];
&gt; 
&gt; What&apos;s BUFSIZ here?

It&apos;s a constant from stdio.h. It contains the optimal size of buffers to make I/O operations more effective.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:589
&gt;&gt; +    strlcat(xauthorityOfRealUser, &quot;/.Xauthority&quot;, PathSize);
&gt; 
&gt; Same comment about a helper function.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:592
&gt;&gt; +    strlcat(xauthorityInSandbox, xauthorityOfRealUser, PathSize);
&gt; 
&gt; Same comment about a helper function.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:606
&gt;&gt; +    // We copy the .Xauthority file of the real user (instead of linking) because nobody user
&gt; 
&gt; the &apos;nobody&apos; user.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:609
&gt;&gt; +        fwrite(buffer, 1, size, dest);
&gt; 
&gt; Don&apos;t you want to check that the write was successful here?

I do. :) Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:621
&gt;&gt; +    if (chown(xauthorityInSandbox, sandboxUserUid, sandboxUserGid)) {
&gt; 
&gt; Check for -1.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:626
&gt;&gt; +    if (setenv(&quot;XAUTHORITY&quot;, xauthorityInSandbox, 1)) {
&gt; 
&gt; Check for -1.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:633
&gt;&gt; +static bool initSandbox()
&gt; 
&gt; Maybe initializeSandbox?

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:636
&gt;&gt; +    // the executable permission is needed only.
&gt; 
&gt; &quot;step into it&quot; is oddly worded.

&quot;We only need to enter it, ...&quot;  ?

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:637
&gt;&gt; +    if (mkdir(sandboxDirectory, S_IFDIR | S_IXUSR | S_IXOTH)) {
&gt; 
&gt; -1.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:656
&gt;&gt; +    strlcat(localDirectory, &quot;/.local/share/Nokia/&quot;, PathSize);
&gt; 
&gt; Helper function!

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:660
&gt;&gt; +    strlcat(cacheDirectory, &quot;/.cache/Nokia/&quot;, PathSize);
&gt; 
&gt; Helper function!!

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:664
&gt;&gt; +    strlcat(fontDirectory, &quot;/.fontconfig/&quot;, PathSize);
&gt; 
&gt; Helper function!!!

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:678
&gt;&gt; +    while (*currentLinkedDirectory) {
&gt; 
&gt; For loop instead of null terminating.

Ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:697
&gt;&gt; +    cap_value_t capabiltyList[4];
&gt; 
&gt; capabiltyList is misspelled. Please do use aggregate initialization here and use [] instead of a fixed size.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:714
&gt;&gt; +static bool moveToNewPidNamespace()
&gt; 
&gt; moveToNewPIDNamespace.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:717
&gt;&gt; +    // We can&apos;t share FS accross namespaces.
&gt; 
&gt; FS -&gt; filesystems.

ok.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:718
&gt;&gt; +    pid_t pid, expectedPid;
&gt; 
&gt; expectedPid-&gt; expectedPID. (And both variables should be declared where they are used).

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:720
&gt;&gt; +    pid = syscall(SYS_clone, CLONE_NEWPID | SIGCHLD, 0, 0, 0);
&gt; 
&gt; Again, you can initialize pid directly and why is syscall used instead of just calling clone directly?

Answer is above.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:722
&gt;&gt; +    switch (pid) {
&gt; 
&gt; Again, two if statements would be clearer.

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:738
&gt;&gt; +            fprintf(stderr, &quot;Waitpid is failed with: %s\n&quot;, strerror(errno));
&gt; 
&gt; It&apos;s not waitpid that fails here, you should indicate that in your error message.

Right. Updated.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:749
&gt;&gt; +static bool run(int argc, char *const argv[])
&gt; 
&gt; Why does this need to be a separate function? Why can&apos;t this code just live in main?

I&apos;ve followed the template of PluginProcess main function (Qt, Gtk, etc.). Both of them have just a minimal main() function.
Furhermore, this way it&apos;s easy to modify the return value of SandboxProcess. I mean if we have an error then run() returns with false and in main() we can simply change the error code from 1 to anything.
But I can put this code to main ofc.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:758
&gt;&gt; +    strlcat(sandboxDirectory, &quot;/.wk2-sandbox&quot;, PathSize);
&gt; 
&gt; Helper function!

Done.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:760
&gt;&gt; +    // Currently we use nobody user as the sandbox user and fallback to the real user
&gt; 
&gt; The &apos;nobody&apos; user. fallback -&gt; fall back.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:761
&gt;&gt; +    // if it&apos;s failed. (We could extend this in the future with a specific restricted user.)
&gt; 
&gt; if it&apos;s failed -&gt; if we failed do get it? I think the period should go after the ).

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:763
&gt;&gt; +    if (nobodyUser) {
&gt; 
&gt; Variable declaration can go inside the if statement.

OK.

&gt;&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:818
&gt;&gt; +    if (execl(argv[1], argv[1], argv[2], reinterpret_cast&lt;char*&gt;(0)) == -1) {
&gt; 
&gt; Check for -1. Oh wait! :)

:)

&gt;&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherQt.cpp:175
&gt;&gt; +    webProcessOrSUIDHelper = new QtWebProcess();
&gt; 
&gt; Can just initialize the variable on the same line.

OK.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:159
&gt;&gt; +    pid_t helper = -1;
&gt; 
&gt; Please move these to where they&apos;re actually initialized.

OK.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:166
&gt;&gt; +    errno = 0;
&gt; 
&gt; No need to set errno here.

OK.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:167
&gt;&gt; +    sandboxSocketDescriptor = strtol(sandboxSocketDescriptorString, (char **) 0, 10);
&gt; 
&gt; Extra space before the ** and the 0.

ok.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:168
&gt;&gt; +    if (errno || (sandboxSocketDescriptor == -1))
&gt; 
&gt; Actually, it&apos;d be better to pass a second parameter to strtol and check that it&apos;s \0 instead of checking the return value like this.

Ok.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:172
&gt;&gt; +    helperPid = getenv(SANDBOX_HELPER_PID);
&gt; 
&gt; This variable should be called helperPID, or maybe sandboxHelperPID.

Ok.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:178
&gt;&gt; +        if (errno || (helper == -1))
&gt; 
&gt; Same comment here about passing a parameter to strtol.

OK.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:181
&gt;&gt; +    // Send the chrootMe message to the helper.
&gt; 
&gt; Newline before the comment.

OK.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:187
&gt;&gt; +    // Read the acknowledgement message from the helper.
&gt; 
&gt; Newline before the comment.

OK.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:189
&gt;&gt; +    if ((numberOfCharacters != 1) || (sandboxMeMessage != MSG_CHROOTED)) {
&gt; 
&gt; No need for the extra parentheses.

OK.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:194
&gt;&gt; +    // Wait for the helper process.
&gt; 
&gt; Newline before the comment.

OK.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:195
&gt;&gt; +    int expectedPid = waitpid(helper, 0, 0);
&gt; 
&gt; expectedPID.

Ok.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:196
&gt;&gt; +    if (expectedPid != -1 &amp;&amp; ((helper == -1) || (expectedPid == helper)))
&gt; 
&gt; No need for the extra parentheses.

Ok.

&gt;&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:207
&gt;&gt; +    helper = chrootMe();
&gt; 
&gt; Put the initialization and declaration on the same line.

OK.

&gt;&gt; Tools/ChangeLog:6
&gt;&gt; +        Reviewed by Zoltan Herczeg.
&gt; 
&gt; And me!

Added! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780263</commentid>
    <comment_count>138</comment_count>
      <attachid>177000</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-30 11:44:42 -0800</bug_when>
    <thetext>Created attachment 177000
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780270</commentid>
    <comment_count>139</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-30 11:48:09 -0800</bug_when>
    <thetext>Attachment 177000 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/QtWebKit.pro&apos;, u&apos;Sour...&quot; exit_code: 1
Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 12 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>780292</commentid>
    <comment_count>140</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-11-30 12:13:32 -0800</bug_when>
    <thetext>@andersca: And thank you very, very much for the detailed review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789731</commentid>
    <comment_count>141</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-12-12 11:24:05 -0800</bug_when>
    <thetext>@andersca: What do you think? Are there any further suggestion or objection?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790812</commentid>
    <comment_count>142</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-12-13 12:15:33 -0800</bug_when>
    <thetext>(In reply to comment #141)
&gt; @andersca: What do you think? Are there any further suggestion or objection?

Sorry for not responding earlier, I haven&apos;t forgotten about you! :) I&apos;ll try to do another review pass during the weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793595</commentid>
    <comment_count>143</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-12-18 06:44:00 -0800</bug_when>
    <thetext>(In reply to comment #142)
&gt; (In reply to comment #141)
&gt; &gt; @andersca: What do you think? Are there any further suggestion or objection?
&gt; 
&gt; Sorry for not responding earlier, I haven&apos;t forgotten about you! :) I&apos;ll try to do another review pass during the weekend.

Thanks. I&apos;m waiting :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797379</commentid>
    <comment_count>144</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2012-12-26 13:24:42 -0800</bug_when>
    <thetext>It seems the end of the world hasn&apos;t happened yet. So we could probably use this little sandbox in webkit. I just need somebody to review it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812417</commentid>
    <comment_count>145</comment_count>
      <attachid>177000</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-01-21 15:31:26 -0800</bug_when>
    <thetext>Comment on attachment 177000
Proposed patch

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

Looks much better, only a couple of minor nits left to fix! ;)

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:52
&gt; +enum { PathSize = 512 };

It&apos;s a little weird to use an enum here, can&apos;t you just use a const unsigned? Also, globals should still start with a lowercase letter. I think a better name would be maximumPathLength.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:114
&gt; +    if (lstat(sandboxDirectory, &amp;sandboxDirectoryInfo) != -1) {
&gt; +        if (!S_ISDIR(sandboxDirectoryInfo.st_mode)) {
&gt; +            fprintf(stderr, &quot;%s is not a directory!\n&quot;, sandboxDirectory);
&gt; +            return;
&gt; +        }
&gt; +    } else {
&gt; +        fprintf(stderr, &quot;Sandbox directory (%s) is not available: %s.\n&quot;, sandboxDirectory, strerror(errno));
&gt; +        return;
&gt; +    }

I think this would look better as checking if lstat returns -1 and returning early, and then checking the ISDIR flag.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:150
&gt; +    if (setenv(SANDBOX_HELPER_PID, sandboxHelperPID , 1) == -1) {

Extra space before the comma.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:170
&gt; +    return true;

I think there should be an extra newline before this return statement.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:221
&gt; +        if (cap_set_flag(capabilities, CAP_EFFECTIVE, length, capabilityList, CAP_SET)
&gt; +            || cap_set_flag(capabilities, CAP_INHERITABLE, length, capabilityList, CAP_SET)
&gt; +            || cap_set_flag(capabilities, CAP_PERMITTED, length, capabilityList, CAP_SET) == -1) {

I think you need to check each cap_set_flag value for -1 here.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:313
&gt; +static bool createDirectoryChain(const char* path)

I think this could use a comment detailing what it does.

&gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:655
&gt; +    appendDirectoryComponent(localDirectory, home, &quot;/.local/share/Nokia/&quot;);
&gt; +    appendDirectoryComponent(cacheDirectory, home, &quot;/.cache/Nokia/&quot;);

Nokia?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812747</commentid>
    <comment_count>146</comment_count>
      <attachid>183918</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2013-01-22 01:06:46 -0800</bug_when>
    <thetext>Created attachment 183918
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812751</commentid>
    <comment_count>147</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2013-01-22 01:08:44 -0800</bug_when>
    <thetext>(In reply to comment #145)
&gt; (From update of attachment 177000 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177000&amp;action=review
&gt; 
&gt; Looks much better, only a couple of minor nits left to fix! ;)
Thank you for the review :)

&gt; &gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:52
&gt; &gt; +enum { PathSize = 512 };
&gt; 
&gt; It&apos;s a little weird to use an enum here, can&apos;t you just use a const unsigned? Also, globals should still start with a lowercase letter. I think a better name would be maximumPathLength.
OK.

&gt; &gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:114
&gt; &gt; +    if (lstat(sandboxDirectory, &amp;sandboxDirectoryInfo) != -1) {
&gt; &gt; +        if (!S_ISDIR(sandboxDirectoryInfo.st_mode)) {
&gt; &gt; +            fprintf(stderr, &quot;%s is not a directory!\n&quot;, sandboxDirectory);
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; &gt; +    } else {
&gt; &gt; +        fprintf(stderr, &quot;Sandbox directory (%s) is not available: %s.\n&quot;, sandboxDirectory, strerror(errno));
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; I think this would look better as checking if lstat returns -1 and returning early, and then checking the ISDIR flag.
OK.

&gt; &gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:150
&gt; &gt; +    if (setenv(SANDBOX_HELPER_PID, sandboxHelperPID , 1) == -1) {
&gt; 
&gt; Extra space before the comma.
OK.

UIProcess/Launcher/qt/ProcessLauncherQt.cpp
&gt; &gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:170
&gt; &gt; +    return true;
&gt; 
&gt; I think there should be an extra newline before this return statement.
&gt; 
&gt; &gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:221
&gt; &gt; +        if (cap_set_flag(capabilities, CAP_EFFECTIVE, length, capabilityList, CAP_SET)
&gt; &gt; +            || cap_set_flag(capabilities, CAP_INHERITABLE, length, capabilityList, CAP_SET)
&gt; &gt; +            || cap_set_flag(capabilities, CAP_PERMITTED, length, capabilityList, CAP_SET) == -1) {
&gt; 
&gt; I think you need to check each cap_set_flag value for -1 here.
OK.

&gt; &gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:313
&gt; &gt; +static bool createDirectoryChain(const char* path)
&gt; 
&gt; I think this could use a comment detailing what it does.
&gt; 
&gt; &gt; Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:655
&gt; &gt; +    appendDirectoryComponent(localDirectory, home, &quot;/.local/share/Nokia/&quot;);
&gt; &gt; +    appendDirectoryComponent(cacheDirectory, home, &quot;/.cache/Nokia/&quot;);
&gt; 
&gt; Nokia?

This is a built-in directory of Qt where WebKit can store its local resources. This path is different on every linux-based ports.
We plan to organize them to use a common directory later. But you were right, it&apos;s weird right now, so I&apos;ve removed the last Nokia directory, this way it will work on every linux platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812754</commentid>
    <comment_count>148</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 01:11:45 -0800</bug_when>
    <thetext>Attachment 183918 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/QtWebKit.pro&apos;, u&apos;Sour...&quot; exit_code: 1
Source/WebKit2/Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp:22:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 12 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>817375</commentid>
    <comment_count>149</comment_count>
      <attachid>183918</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-01-27 08:59:17 -0800</bug_when>
    <thetext>Comment on attachment 183918
Proposed patch

Looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817618</commentid>
    <comment_count>150</comment_count>
      <attachid>183918</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2013-01-28 01:55:46 -0800</bug_when>
    <thetext>Comment on attachment 183918
Proposed patch

Clearing flags on attachment: 183918

Committed r140957: &lt;http://trac.webkit.org/changeset/140957&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817619</commentid>
    <comment_count>151</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2013-01-28 01:56:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149593</attachid>
            <date>2012-06-26 13:07:33 -0700</date>
            <delta_ts>2012-07-04 11:02:15 -0700</delta_ts>
            <desc>Completely incomplete, just to get feedback :)</desc>
            <filename>0001-sandbox-send.patch</filename>
            <type>text/plain</type>
            <size>7419</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA1YTY5NzdiMTUwMWUyZTg5ZmI5ZDA0MjRlMzA2OWRkM2U1ZWNhNTU3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUdWUsIDI2IEp1biAyMDEyIDIxOjU1OjMwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gc2FuZGJv
eCBzZW5kCgotLS0KIFNvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgMiArCiAuLi4vVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hl
clF0LmNwcCAgICB8ICAgMTUgKysrLQogLi4uL0xhdW5jaGVyL3F0L1NhbmRib3hFbnZpcm9ubWVu
dEhhbmRsZXJRdC5jcHAgICAgfCAgIDc1ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vTGF1bmNo
ZXIvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmggICAgICB8ICAgMjEgKysrKysrCiA0
IGZpbGVzIGNoYW5nZWQsIDExMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1NhbmRib3hF
bnZpcm9ubWVudEhhbmRsZXJRdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmgKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaQppbmRleCAzY2JlOTFmLi41NGU3NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTIxMCw2ICsy
MTAsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdFByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIu
aCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmggXAorICAgIFVJUHJv
Y2Vzcy9MYXVuY2hlci9xdC9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuaCBcCiAgICAgVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9u
cy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIFwKICAgICBVSVByb2Nlc3MvTm90aWZp
Y2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIFwKQEAg
LTU1Myw2ICs1NTQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJv
Y2Vzc0xhdW5jaGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVy
LmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCBc
CisgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1NhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdC5j
cHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcCBcCiAg
ICAgVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9Ob3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hl
clF0LmNwcAppbmRleCBjNWMzZjcxLi40ZTk0ZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKQEAg
LTUxLDggKzUxLDEwIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBk
ZWZpbmVkKFFfT1NfTElOVVgpCi0jaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSAiU2Fu
ZGJveEVudmlyb25tZW50SGFuZGxlclF0LmgiCisjaW5jbHVkZSA8Z3JwLmg+CiAjaW5jbHVkZSA8
c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAjZW5kaWYKIAogI2lmIE9TKERBUldJ
TikKQEAgLTcyLDYgKzc0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCit1c2luZyBuYW1lc3BhY2Ugc3RkOworY29uc3Qgc3RhdGljIFFTdHJpbmcg
c2FuZGJveERpcmVjdG9yeSA9IFFMYXRpbjFTdHJpbmcoIi9tbnQvd2stc2FuZGJveCIpOworCiBj
bGFzcyBRdFdlYlByb2Nlc3MgOiBwdWJsaWMgUVByb2Nlc3MKIHsKICAgICBRX09CSkVDVApAQCAt
ODgsNiArOTMsMTIgQEAgcHJvdGVjdGVkOgogdm9pZCBRdFdlYlByb2Nlc3M6OnNldHVwQ2hpbGRQ
cm9jZXNzKCkKIHsKICNpZiBkZWZpbmVkKFFfT1NfTElOVVgpCisgICAgOjpzZXRncm91cHMoMCwg
MCk7CisgICAgaWYgKDo6Y2hyb290KHNhbmRib3hEaXJlY3RvcnkudG9Mb2NhbDhCaXQoKS5kYXRh
KCkpID09IC0xKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNocm9vdGluZyBmYWlsZWQ6ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIDo6c2V0ZXVpZChnZXR1aWQoKSk7CisgICAgOjpz
ZXRlZ2lkKGdldGdpZCgpKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICBpZiAocWdldGVudigiUVRf
V0VCS0lUMl9ERUJVRyIpID09ICIxIikKICAgICAgICAgcmV0dXJuOwpAQCAtMTAxLDYgKzExMiw4
IEBAIHZvaWQgUXRXZWJQcm9jZXNzOjpzZXR1cENoaWxkUHJvY2VzcygpCiAKIHZvaWQgUHJvY2Vz
c0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKIHsKKyAgICBTYW5kYm94RW52aXJvbm1lbnRIYW5k
bGVyUXQqIHNhbmRib3hIYW5kbGVyID0gbmV3IFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdChz
YW5kYm94RGlyZWN0b3J5KTsKKyAgICBzYW5kYm94SGFuZGxlci0+aW5pdGlhbGl6ZVNhbmRib3go
KTsKICAgICBRU3RyaW5nIGNvbW1hbmRMaW5lID0gUUxhdGluMVN0cmluZygiJTEgJTIiKTsKICAg
ICBjb21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLmFyZyhtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5
cGUgPT0gV2ViUHJvY2VzcyA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhl
Y3V0YWJsZVBhdGhPZldlYlByb2Nlc3MoKSA6IGV4ZWN1dGFibGVQYXRoT2ZQbHVnaW5Qcm9jZXNz
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Nh
bmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGE2ZTVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1NhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJR
dC5jcHAKQEAgLTAsMCArMSw3NSBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNh
bmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdC5oIgorCisjaW5jbHVkZSA8UURpcj4KKyNpbmNsdWRl
IDxRRmlsZT4KKyNpbmNsdWRlIDxRRmlsZUluZm8+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgor
I2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK1NhbmRib3hF
bnZpcm9ubWVudEhhbmRsZXJRdDo6U2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0KFFTdHJpbmcg
Y2hyb290RGlyKQoreworICAgIHNhbmRib3hSb290ID0gY2hyb290RGlyOworICAgIGhvbWVEaXJl
Y3RvcnkgPSBRTGF0aW4xU3RyaW5nKGdldHB3dWlkKGdldHVpZCgpKS0+cHdfZGlyKTsKKyAgICBi
aW5kYWJsZURpcmVjdG9yaWVzIDw8IGhvbWVEaXJlY3RvcnkgKyBRTGF0aW4xU3RyaW5nKCIvLmZv
bnRjb25maWcvIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IGhvbWVEaXJlY3RvcnkgKyBR
TGF0aW4xU3RyaW5nKCIvLmxvY2FsL3NoYXJlL05va2lhLyIpCisgICAgICAgICAgICAgICAgICAg
ICAgICA8PCBob21lRGlyZWN0b3J5ICsgUUxhdGluMVN0cmluZygiLy5jYWNoZS8iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgUURpcigpLmN1cnJlbnRQYXRoKCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmcoIi9saWIvIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDw8IFFMYXRpbjFTdHJpbmcoIi9saWIzMi8iKQorICAgICAgICAgICAgICAgICAgICAgICAg
PDwgUUxhdGluMVN0cmluZygiL2xpYjY0LyIpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBR
TGF0aW4xU3RyaW5nKCIvcHJvYy8iKQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgUUxhdGlu
MVN0cmluZygiL3J1bi9zaG0vIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IFFMYXRpbjFT
dHJpbmcoIi9zeXMvZnMvZnVzZS8iKQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgUUxhdGlu
MVN0cmluZygiL3N5cy9rZXJuZWwvc2VjdXJpdHkvIikKKyAgICAgICAgICAgICAgICAgICAgICAg
IDw8IFFMYXRpbjFTdHJpbmcoIi90bXAvIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IFFM
YXRpbjFTdHJpbmcoIi91c3IvbGliLyIpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBRTGF0
aW4xU3RyaW5nKCIvdXNyL2xvY2FsLyIpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBRTGF0
aW4xU3RyaW5nKCIvdXNyL3NoYXJlLyIpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBRTGF0
aW4xU3RyaW5nKCIvdmFyL2NhY2hlLyIpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBRTGF0
aW4xU3RyaW5nKCIvdmFyL2xpYi8iKQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgUUxhdGlu
MVN0cmluZygiL3Zhci90bXAvIik7CisKKyAgICBkZXZpY2VzIDw8IFFMYXRpbjFTdHJpbmcoIi9k
ZXYvdXJhbmRvbSIpCisgICAgICAgICAgICA8PCBRTGF0aW4xU3RyaW5nKCIvZGV2L3JhbmRvbSIp
OworfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdDo6Y3JlYXRlRGV2aWNlRmls
ZXMoKQoreworICAgIGlmICghUURpcigpLm1rcGF0aChzYW5kYm94Um9vdCArIFFMYXRpbjFTdHJp
bmcoIi9kZXYvIikpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IGNyZWF0aW5n
IC9kZXYgZGlyZWN0b3J5LiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZGV2aWNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBz
dGF0dXM7CisgICAgICAgIGlmIChzdGF0KGRldmljZXMuYXQoaSkudG9Mb2NhbDhCaXQoKS5kYXRh
KCksICZzdGF0dXMpICE9IC0xKSB7CisgICAgICAgICAgICBkZXZfdCBkZXYgPSBzdGF0dXMuc3Rf
cmRldjsKKyAgICAgICAgICAgIG1rbm9kKChzYW5kYm94Um9vdCArIGRldmljZXMuYXQoaSkpLnRv
TG9jYWw4Qml0KCkuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgU19JRkNIUiB8IFNfSVJVU1Ig
fCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lST1RIIHwgU19JV09USCwgbWFrZWRl
dihtYWpvcihkZXYpLCBtaW5vcihkZXYpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBT
YW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQ6OmNyZWF0ZUFuZEJpbmRTYW5kYm94RGlyZWN0b3Jp
ZXMoKQoreworICAgIGlmICghUURpcigpLm1rcGF0aChzYW5kYm94Um9vdCkpCisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRXJyb3IgYnkgY3JlYXRpbmcgJXMuICVzIiwgc2FuZGJveFJvb3QudG9M
b2NhbDhCaXQoKS5kYXRhKCksIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGJpbmRhYmxlRGlyZWN0b3JpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUVN0cmlu
ZyBzYW5kYm94UGF0aCA9IHNhbmRib3hSb290ICsgYmluZGFibGVEaXJlY3Rvcmllcy5hdChpKTsK
KyAgICAgICAgaWYgKCFRRGlyKHNhbmRib3hQYXRoKS5leGlzdHMoKSkKKyAgICAgICAgICAgIFFE
aXIoKS5ta3BhdGgoc2FuZGJveFBhdGgpOworICAgICAgICBpZiAobW91bnQoYmluZGFibGVEaXJl
Y3Rvcmllcy5hdChpKS50b0xvY2FsOEJpdCgpLmRhdGEoKSwgc2FuZGJveFBhdGgudG9Mb2NhbDhC
aXQoKS5kYXRhKCksICIiLCBNU19CSU5EIHwgTVNfUkVDIHwgTVNfTU9WRSwgIiIpID09IC0xKQor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBtb3VudGluZyAlcy4gJXMiLCAo
c2FuZGJveFJvb3QgKyBiaW5kYWJsZURpcmVjdG9yaWVzLmF0KGkpKS50b0xvY2FsOEJpdCgpLmRh
dGEoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
U2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0Ojppbml0aWFsaXplU2FuZGJveCgpCit7CisgICAg
Y3JlYXRlQW5kQmluZFNhbmRib3hEaXJlY3RvcmllcygpOworICAgIGNyZWF0ZURldmljZUZpbGVz
KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQv
U2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyOGQ5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQu
aApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdF9o
CisjZGVmaW5lIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdF9oCisKKyNpbmNsdWRlIDxRU3Ry
aW5nPgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorCitjbGFzcyBTYW5kYm94RW52aXJvbm1lbnRI
YW5kbGVyUXQgeworcHVibGljOgorICAgIFFTdHJpbmcgc2FuZGJveFJvb3Q7CisgICAgUVN0cmlu
Z0xpc3QgYmluZGFibGVEaXJlY3RvcmllczsKKyAgICBRU3RyaW5nTGlzdCBkZXZpY2VzOworICAg
IFFTdHJpbmcgaG9tZURpcmVjdG9yeTsKKworICAgIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJR
dChRU3RyaW5nKTsKKworICAgIHZvaWQgY3JlYXRlRGV2aWNlRmlsZXMoKTsKKyAgICBpbnQgY3Jl
YXRlQW5kQmluZFNhbmRib3hEaXJlY3RvcmllcygpOworICAgIHZvaWQgaW5pdGlhbGl6ZVNhbmRi
b3goKTsKK307CisKKyNlbmRpZiAvLyBTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXRfaAotLSAK
MS43LjkuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150823</attachid>
            <date>2012-07-04 11:02:15 -0700</date>
            <delta_ts>2012-07-19 05:12:08 -0700</delta_ts>
            <desc>Completely incomplete, just to get feedback :)</desc>
            <filename>0001-second-up.patch</filename>
            <type>text/plain</type>
            <size>15250</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBmY2M3Zjk4MzI2NjM3ZDM1OTVjMjc4MTJhOTYzMWI1ODQyNzY0ZTg5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBXZWQsIDQgSnVsIDIwMTIgMTk6MjI6MTkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBzZWNvbmQg
dXAKCi0tLQogLi4uL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25m
aWcgfCAgICAzICstCiBTb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgIDIgKwogLi4uL1dlYlByb2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFu
ZGxlclF0LmNwcCAgfCAgMTI3ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vV2ViUHJvY2Vzcy9x
dC9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuaCAgICB8ICAgMjcgKysrKysKIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgIHwgICAyMSArKysrCiBU
b29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gICAgICAgICAgICB8ICAgIDQg
KwogNiBmaWxlcyBjaGFuZ2VkLCAxODMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvU2FuZGJveEVudmly
b25tZW50SGFuZGxlclF0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmgKCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1Nv
dXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4
IDNjMTRkZDMuLmMxMGY4ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRp
b25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3Vy
YXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0xMTAsNiArMTEwLDcgQEAgRU5BQkxF
X1FVT1RBID0gOwogRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVIgPSA7CiBFTkFCTEVf
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU7
CiBFTkFCTEVfU0NSSVBURURfU1BFRUNIID0gOworRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCA9
IDsKIEVOQUJMRV9TSEFET1dfRE9NID0gOwogRU5BQkxFX1NIQVJFRF9XT1JLRVJTID0gRU5BQkxF
X1NIQVJFRF9XT1JLRVJTOwogRU5BQkxFX1NRTF9EQVRBQkFTRSA9IEVOQUJMRV9TUUxfREFUQUJB
U0U7CkBAIC0xMzEsNCArMTMyLDQgQEAgRU5BQkxFX1dFQl9USU1JTkcgPSA7CiBFTkFCTEVfV09S
S0VSUyA9IEVOQUJMRV9XT1JLRVJTOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVB
VFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5B
QkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1MzX0ZMRVhCT1gpICQoRU5BQkxFX0NT
U19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0VYQ0xVU0lPTlMpICQoRU5BQkxF
X0NTU19GSUxURVJTKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NT
X1JFR0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9DU1NfVkFSSUFCTEVTKSAk
KEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JU
KSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFC
TEVfREVUQUlMUykgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ESVJFQ1RP
UllfVVBMT0FEKSAkKEVOQUJMRV9GSUxFX1NZU1RFTSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFC
TEVfRk9OVF9CT09TVElORykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQ
QUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5B
QkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRF
WEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9T
UEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRF
VElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9U
WVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVf
V0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19W
RU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9M
SU5LX1BSRUZFVENIKSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFCTEVfTUFUSE1MKSAk
KEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxF
X01FVEVSX1RBRykgJChFTkFCTEVfTUlDUk9EQVRBKSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZF
UlMpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkp
ICQoRU5BQkxFX1BST0dSRVNTX1RBRykgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFR0lTVEVS
X1BST1RPQ09MX0hBTkRMRVIpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVO
QUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJF
RF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkg
JChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NW
R19GT05UUykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNI
X0lDT05fTE9BRElORykgJChFTkFCTEVfVU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURFTykgJChF
TkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQo
RU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XT1JLRVJT
KSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklO
RykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05fQVBJ
KSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NT
M19GTEVYQk9YKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NT
U19FWENMVVNJT05TKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0lNQUdFX1JF
U09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0hBREVSUykgJChF
TkFCTEVfQ1NTX1ZBUklBQkxFUykgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVO
QUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RBVEFf
VFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFMpICQoRU5BQkxFX0RFVklDRV9PUklFTlRB
VElPTikgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVfRklMRV9TWVNURU0pICQo
RU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZPTlRfQk9PU1RJTkcpICQoRU5BQkxFX0ZVTExTQ1JF
RU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVf
SElHSF9EUElfQ0FOVkFTKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9T
RUFNTEVTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9D
T0xPUikgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVM
T0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1F
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIp
ICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9U
SUZJQ0FUSU9OUykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTElOS19QUkVSRU5E
RVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJ
QV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRVRFUl9UQUcpICQoRU5BQkxFX01JQ1JPREFUQSkgJChF
TkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJM
RV9QQUdFX1ZJU0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QUk9HUkVTU19UQUcpICQoRU5BQkxFX1FV
T1RBKSAkKEVOQUJMRV9SRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSKSAkKEVOQUJMRV9SRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkgJChFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYKSAkKEVOQUJMRV9T
Q1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JL
RVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFC
TEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05U
UykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lDT05f
TE9BRElORykgJChFTkFCTEVfVU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVf
VklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxF
X1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XT1JLRVJTKSAkKEVO
QUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDNjYmU5MWYuLjNiMjU2OTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aQpAQCAtMzcyLDYgKzM3Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9MYXllclRyZWVIb3N0UXQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb25uZWN0aW9uVG9V
SVByb2Nlc3MuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggXAorICAgIFdlYlByb2Nl
c3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmggXAogICAgIFdlYlByb2Nlc3MvcXQv
UXRCdWlsdGluQnVuZGxlLmggXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFn
ZS5oIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCBcCkBAIC03
NDMsNiArNzQ0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dl
YlBhZ2VRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzLmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9xdC9T
YW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0QnVp
bHRpbkJ1bmRsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5j
cHAgXAogICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFuYWdlci5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9TYW5kYm94RW52aXJvbm1lbnRI
YW5kbGVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9TYW5kYm94RW52aXJv
bm1lbnRIYW5kbGVyUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2
Y2NlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1Nh
bmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdC5jcHAKQEAgLTAsMCArMSwxMjcgQEAKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuaCIKKwor
I2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisKKyNpbmNsdWRlIDxRRGlyPgorI2luY2x1
ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFGaWxlSW5mbz4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lu
Y2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+
CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRl
IDxRRGVidWc+CisjaW5jbHVkZSAiUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmgiCisjaW5jbHVkZSA8
aW9zdHJlYW0+CisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKworU2Fu
ZGJveEVudmlyb25tZW50SGFuZGxlclF0OjpTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQoUVN0
cmluZyBjaHJvb3REaXIpCit7CisgICAgc2FuZGJveFJvb3QgPSBjaHJvb3REaXI7CisKKyAgICBw
YXNzd2QqIG5vYm9keSA9IGdldHB3bmFtKCJub2JvZHkiKTsKKyAgICBob21lRGlyZWN0b3J5ID0g
UUxhdGluMVN0cmluZyhnZXRwd3VpZChub2JvZHktPnB3X3VpZCktPnB3X2Rpcik7CisgICAgYmlu
ZGFibGVEaXJlY3RvcmllcyA8PCBRTGF0aW4xU3RyaW5nKCIvbGliLyIpCisgICAgICAgICAgICAg
ICAgICAgICAgICA8PCBRTGF0aW4xU3RyaW5nKCIvbGliMzIvIikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IFFMYXRpbjFTdHJpbmcoIi9saWI2NC8iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgPDwgUUxhdGluMVN0cmluZygiL3Byb2MvIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8
IFFMYXRpbjFTdHJpbmcoIi9ydW4vc2htLyIpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBR
TGF0aW4xU3RyaW5nKCIvc3lzL2ZzL2Z1c2UvIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8
IFFMYXRpbjFTdHJpbmcoIi9zeXMva2VybmVsL3NlY3VyaXR5LyIpCisgICAgICAgICAgICAgICAg
ICAgICAgICA8PCBRTGF0aW4xU3RyaW5nKCIvdG1wLyIpCisgICAgICAgICAgICAgICAgICAgICAg
ICA8PCBRTGF0aW4xU3RyaW5nKCIvdXNyL2xpYi8iKQorICAgICAgICAgICAgICAgICAgICAgICAg
PDwgUUxhdGluMVN0cmluZygiL3Vzci9sb2NhbC8iKQorICAgICAgICAgICAgICAgICAgICAgICAg
PDwgUUxhdGluMVN0cmluZygiL3Vzci9zaGFyZS8iKQorICAgICAgICAgICAgICAgICAgICAgICAg
PDwgUUxhdGluMVN0cmluZygiL3Zhci9jYWNoZS8iKQorICAgICAgICAgICAgICAgICAgICAgICAg
PDwgUUxhdGluMVN0cmluZygiL3Zhci9saWIvIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8
IFFMYXRpbjFTdHJpbmcoIi92YXIvdG1wLyIpOworICAgIGJpbmRhYmxlRGlyZWN0b3JpZXNJbkhv
bWUgIDw8IFFMYXRpbjFTdHJpbmcoIi8uZm9udGNvbmZpZy8iKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8PCBRTGF0aW4xU3RyaW5nKCIvLmxvY2FsL3NoYXJlL05va2lhLyIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmcoIi8uY2FjaGUvIik7CisK
KyAgICBkZXZpY2VzIDw8IFFMYXRpbjFTdHJpbmcoIi9kZXYvdXJhbmRvbSIpCisgICAgICAgICAg
ICA8PCBRTGF0aW4xU3RyaW5nKCIvZGV2L3JhbmRvbSIpOworfQorCit2b2lkIFNhbmRib3hFbnZp
cm9ubWVudEhhbmRsZXJRdDo6Y3JlYXRlRGV2aWNlRmlsZXMoKQoreworICAgIGlmICghUURpcigp
Lm1rcGF0aChzYW5kYm94Um9vdCArIFFMYXRpbjFTdHJpbmcoIi9kZXYvIikpKQorICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IGNyZWF0aW5nIC9kZXYgZGlyZWN0b3J5LiAlc1xuIiwg
c3RyZXJyb3IoZXJybm8pKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGV2aWNlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7CisgICAgICAgIGlmIChzdGF0
KGRldmljZXMuYXQoaSkudG9Mb2NhbDhCaXQoKS5kYXRhKCksICZzdGF0dXMpICE9IC0xKSB7Cisg
ICAgICAgICAgICBkZXZfdCBkZXYgPSBzdGF0dXMuc3RfcmRldjsKKyAgICAgICAgICAgIG1rbm9k
KChzYW5kYm94Um9vdCArIGRldmljZXMuYXQoaSkpLnRvTG9jYWw4Qml0KCkuZGF0YSgpLAorICAg
ICAgICAgICAgICAgICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNf
SVdHUlAgfCBTX0lST1RIIHwgU19JV09USCwgbWFrZWRldihtYWpvcihkZXYpLCBtaW5vcihkZXYp
KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVy
UXQ6OmNyZWF0ZUFuZEJpbmRTYW5kYm94RGlyZWN0b3JpZXMoKQoreworICAgIGlmICghUURpcigp
Lm1rcGF0aChzYW5kYm94Um9vdCkpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkg
Y3JlYXRpbmcgJXMuICVzXG4iLCBzYW5kYm94Um9vdC50b0xvY2FsOEJpdCgpLmRhdGEoKSwgc3Ry
ZXJyb3IoZXJybm8pKTsKKworICAgIC8vIE1vdW50aW5nIHRoZSBuZWVkZWQgbGlicmFyeSBkaXJl
Y3Rvcmllcy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpbmRhYmxlRGlyZWN0b3JpZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgUVN0cmluZyBzYW5kYm94UGF0aCA9IHNhbmRib3hSb290ICsg
YmluZGFibGVEaXJlY3Rvcmllcy5hdChpKTsKKyAgICAgICAgaWYgKCFRRGlyKHNhbmRib3hQYXRo
KS5leGlzdHMoKSkKKyAgICAgICAgICAgIFFEaXIoKS5ta3BhdGgoc2FuZGJveFBhdGgpOworICAg
ICAgICBpZiAobW91bnQoYmluZGFibGVEaXJlY3Rvcmllcy5hdChpKS50b0xvY2FsOEJpdCgpLmRh
dGEoKSwgc2FuZGJveFBhdGgudG9Mb2NhbDhCaXQoKS5kYXRhKCksICIiLCBNU19CSU5EIHwgTVNf
UkVDIHwgTVNfTU9WRSwgIiIpID09IC0xKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJF
cnJvciBieSBtb3VudGluZyAlcy4gJXNcbiIsIChzYW5kYm94Um9vdCArIGJpbmRhYmxlRGlyZWN0
b3JpZXMuYXQoaSkpLnRvTG9jYWw4Qml0KCkuZGF0YSgpLCBzdHJlcnJvcihlcnJubykpOworICAg
IH0KKworICAgIC8vIE1vdW50aW5nIHRoZSBiaW5hcnkgZGlyZWN0b3JpZXMgb2YgV2ViS2l0Lgor
ICAgIFFTdHJpbmcgcmVhbEhvbWVEaXJlY3RvcnkgPSBRTGF0aW4xU3RyaW5nKGdldHB3dWlkKGdl
dHB3dWlkKGdldHVpZCgpKS0+cHdfdWlkKS0+cHdfZGlyKTsKKyAgICBRU3RyaW5nIHdlYmtpdFBh
dGggPSBRRGlyKCkuY3VycmVudFBhdGgoKTsKKyAgICBRU3RyaW5nIHdlYktpdEJpbmFyeURpciA9
IHNhbmRib3hSb290ICsgd2Via2l0UGF0aDsKKyAgICBpZiAod2ViS2l0QmluYXJ5RGlyLmNvbnRh
aW5zKHJlYWxIb21lRGlyZWN0b3J5LCBRdDo6Q2FzZVNlbnNpdGl2ZSkpCisgICAgICAgIHdlYmtp
dFBhdGgucmVwbGFjZShyZWFsSG9tZURpcmVjdG9yeSwgaG9tZURpcmVjdG9yeSwgUXQ6OkNhc2VT
ZW5zaXRpdmUpOworCisgICAgaWYgKCFRRGlyKHdlYktpdEJpbmFyeURpcikuZXhpc3RzKCkpCisg
ICAgICAgIFFEaXIoKS5ta3BhdGgod2ViS2l0QmluYXJ5RGlyKTsKKyAgICBpZiAobW91bnQoUURp
cigpLmN1cnJlbnRQYXRoKCkudG9Mb2NhbDhCaXQoKS5kYXRhKCksIHdlYktpdEJpbmFyeURpci50
b0xvY2FsOEJpdCgpLmRhdGEoKSwgIiIsIE1TX0JJTkQgfCBNU19SRUMgfCBNU19NT1ZFLCAiIikg
PT0gLTEpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkgbW91bnRpbmcgJXMuICVz
XG4iLCB3ZWJLaXRCaW5hcnlEaXIudG9Mb2NhbDhCaXQoKS5kYXRhKCksIHN0cmVycm9yKGVycm5v
KSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpbmRhYmxlRGlyZWN0b3JpZXNJbkhvbWUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUVN0cmluZyByZWFsUGF0aCA9IHJlYWxIb21lRGlyZWN0
b3J5ICsgYmluZGFibGVEaXJlY3Rvcmllc0luSG9tZS5hdChpKTsKKyAgICAgICAgUVN0cmluZyBz
YW5kYm94UGF0aCA9IHNhbmRib3hSb290ICsgaG9tZURpcmVjdG9yeSArIGJpbmRhYmxlRGlyZWN0
b3JpZXNJbkhvbWUuYXQoaSk7CisgICAgICAgIGlmICghUURpcihzYW5kYm94UGF0aCkuZXhpc3Rz
KCkpCisgICAgICAgICAgICBRRGlyKCkubWtwYXRoKHNhbmRib3hQYXRoKTsKKyAgICAgICAgaWYg
KG1vdW50KGJpbmRhYmxlRGlyZWN0b3JpZXMuYXQoaSkudG9Mb2NhbDhCaXQoKS5kYXRhKCksIHNh
bmRib3hQYXRoLnRvTG9jYWw4Qml0KCkuZGF0YSgpLCAiIiwgTVNfQklORCB8IE1TX1JFQyB8IE1T
X01PVkUsICIiKSA9PSAtMSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkg
bW91bnRpbmcgJXMuICVzXG4iLCAoc2FuZGJveFJvb3QgKyBiaW5kYWJsZURpcmVjdG9yaWVzLmF0
KGkpKS50b0xvY2FsOEJpdCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQ6OmFkZE5v
Ym9keVVzZXIoKQoreworICAgIFFEaXIoKS5ta3BhdGgoc2FuZGJveFJvb3QgKyBRTGF0aW4xU3Ry
aW5nKCIvZXRjIikpOworICAgIFFGaWxlIHBhc3N3ZChzYW5kYm94Um9vdCArIFFMYXRpbjFTdHJp
bmcoIi9ldGMvcGFzc3dkIikpOworICAgIHBhc3N3ZC5vcGVuKFFJT0RldmljZTo6V3JpdGVPbmx5
KTsKKyAgICBzdHJ1Y3QgcGFzc3dkKiBub2JvZHlVc2VyID0gZ2V0cHduYW0oIm5vYm9keSIpOwor
ICAgIFFTdHJpbmcgcGFzc3dvcmRDb250ZW50ID0gUUxhdGluMVN0cmluZyhub2JvZHlVc2VyLT5w
d19uYW1lKSArIFFMYXRpbjFDaGFyKCc6JykgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUUxhdGluMVN0cmluZyhub2JvZHlVc2VyLT5wd19wYXNzd2QpICsgUUxhdGluMUNoYXIoJzon
KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nOjpudW1iZXIobm9ib2R5
VXNlci0+cHdfdWlkKSArIFFMYXRpbjFDaGFyKCc6JykgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUVN0cmluZzo6bnVtYmVyKG5vYm9keVVzZXItPnB3X2dpZCkgKyBRTGF0aW4xQ2hh
cignOicpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFMYXRpbjFTdHJpbmcobm9i
b2R5VXNlci0+cHdfZ2Vjb3MpICsgUUxhdGluMUNoYXIoJzonKSArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBRTGF0aW4xU3RyaW5nKG5vYm9keVVzZXItPnB3X2RpcikgKyBRTGF0aW4x
Q2hhcignOicpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFMYXRpbjFTdHJpbmco
bm9ib2R5VXNlci0+cHdfc2hlbGwpOworICAgIHBhc3N3ZC53cml0ZShwYXNzd29yZENvbnRlbnQu
dG9MYXRpbjEoKSk7CisgICAgcGFzc3dkLmZsdXNoKCk7CisgICAgcGFzc3dkLmNsb3NlKCk7Cit9
CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0Ojppbml0aWFsaXplU2FuZGJveCgp
Cit7CisgICAgY3JlYXRlQW5kQmluZFNhbmRib3hEaXJlY3RvcmllcygpOworICAgIGNyZWF0ZURl
dmljZUZpbGVzKCk7CisgICAgYWRkTm9ib2R5VXNlcigpOworfQorCisjZW5kaWYgLy8gRU5BQkxF
KFNVSURfU0FOREJPWF9MSU5VWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3F0L1NhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA4MmVkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1NhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdC5oCkBAIC0wLDAg
KzEsMjcgQEAKKyNpZm5kZWYgU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0X2gKKyNkZWZpbmUg
U2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0X2gKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hf
TElOVVgpCisKKyNpbmNsdWRlIDxRU3RyaW5nPgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorCitj
bGFzcyBTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQgeworcHVibGljOgorICAgIFFTdHJpbmcg
c2FuZGJveFJvb3Q7CisgICAgUVN0cmluZ0xpc3QgYmluZGFibGVEaXJlY3RvcmllczsKKyAgICBR
U3RyaW5nTGlzdCBiaW5kYWJsZURpcmVjdG9yaWVzSW5Ib21lOworICAgIFFTdHJpbmdMaXN0IGRl
dmljZXM7CisgICAgUVN0cmluZyBob21lRGlyZWN0b3J5OworCisgICAgU2FuZGJveEVudmlyb25t
ZW50SGFuZGxlclF0KFFTdHJpbmcpOworCisgICAgdm9pZCBjcmVhdGVEZXZpY2VGaWxlcygpOwor
ICAgIGludCBjcmVhdGVBbmRCaW5kU2FuZGJveERpcmVjdG9yaWVzKCk7CisgICAgdm9pZCBhZGRO
b2JvZHlVc2VyKCk7CisgICAgdm9pZCBpbml0aWFsaXplU2FuZGJveCgpOworfTsKKworI2VuZGlm
IC8vIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisKKyNlbmRpZiAvLyBTYW5kYm94RW52aXJv
bm1lbnRIYW5kbGVyUXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9x
dC9XZWJQcm9jZXNzTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2Vi
UHJvY2Vzc01haW5RdC5jcHAKaW5kZXggOTllYjY4MS4uZWNmYTM5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCkBAIC0yNSw2ICsy
NSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNhbmRib3hFbnZp
cm9ubWVudEhhbmRsZXJRdC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKIAogI2luY2x1ZGUg
PFFHdWlBcHBsaWNhdGlvbj4KQEAgLTM0LDcgKzM1LDEzIEBACiAjaW5jbHVkZSA8UVN0cmluZ0xp
c3Q+CiAjaW5jbHVkZSA8UVVybD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNs
dWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGdycC5oPgorI2lu
Y2x1ZGUgPHB3ZC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTE0
MSw2ICsxNDgsMjAgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVByb3h5KCkKIAogUV9ERUNMX0VY
UE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChRR3VpQXBwbGljYXRpb24qIGFwcCkKIHsKKyNpZiBF
TkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIGNvbnN0IFFTdHJpbmcgc2FuZGJveERpcmVj
dG9yeSA9IFFMYXRpbjFTdHJpbmcoIi9tbnQvd2stc2FuZGJveCIpOworICAgIFNhbmRib3hFbnZp
cm9ubWVudEhhbmRsZXJRdCogc2FuZGJveEhhbmRsZXIgPSBuZXcgU2FuZGJveEVudmlyb25tZW50
SGFuZGxlclF0KHNhbmRib3hEaXJlY3RvcnkpOworICAgIHNhbmRib3hIYW5kbGVyLT5pbml0aWFs
aXplU2FuZGJveCgpOworCisgICAgOjpzZXRncm91cHMoMCwgMCk7CisgICAgaWYgKDo6Y2hyb290
KHNhbmRib3hEaXJlY3RvcnkudG9Mb2NhbDhCaXQoKS5kYXRhKCkpID09IC0xKQorICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNocm9vdGluZyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykp
OworICAgIGlmICg6OmNoZGlyKCIvIikpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90
IGNoYW5nZSBkaXJlY3RvcnlcbiIpOworICAgIHBhc3N3ZCogbm9ib2R5ID0gZ2V0cHduYW0oIm5v
Ym9keSIpOworICAgIDo6c2V0Z2lkKG5vYm9keS0+cHdfdWlkKTsKKyAgICA6OnNldHVpZChub2Jv
ZHktPnB3X2dpZCk7CisjZW5kaWYKICAgICBpbml0aWFsaXplUHJveHkoKTsKIAogICAgIHNyYW5k
b20odGltZSgwKSk7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVy
ZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXgg
MTg3ZWI3OC4uZDkxM2I5YSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0Zl
YXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5w
bQpAQCAtMTExLDYgKzExMSw3IEBAIG15ICgKICAgICAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAg
ICAgJHNxbERhdGFiYXNlU3VwcG9ydCwKICAgICAkc3R5bGVTY29wZWRTdXBwb3J0LAorICAgICRz
dWlkTGludXhTYW5kYm94LAogICAgICRzdmdET01PYmpDQmluZGluZ3NTdXBwb3J0LAogICAgICRz
dmdGb250c1N1cHBvcnQsCiAgICAgJHN2Z1N1cHBvcnQsCkBAIC0zMzUsNiArMzM2LDkgQEAgbXkg
QGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICJzdHlsZS1zY29wZWQiLCBkZXNjID0+ICJU
b2dnbGUgU3R5bGUgU2NvcGVkIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1RZ
TEVfU0NPUEVEIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHN0eWxlU2NvcGVkU3VwcG9ydCB9
LAogCisgICAgeyBvcHRpb24gPT4gInN1aWQtbGludXgtc2FuZGJveCIsIGRlc2MgPT4gIlRvZ2ds
ZSBzdWlkIHNhbmRib3ggZm9yIGxpbnV4IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NVSURf
U0FOREJPWF9MSU5VWCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRzdWlkTGludXhTYW5kYm94
IH0sCisKICAgICB7IG9wdGlvbiA9PiAic3ZnIiwgZGVzYyA9PiAiVG9nZ2xlIFNWRyBzdXBwb3J0
IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWRyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4g
XCRzdmdTdXBwb3J0IH0sCiAKLS0gCjEuNy45LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153232</attachid>
            <date>2012-07-19 05:12:08 -0700</date>
            <delta_ts>2012-08-23 11:20:06 -0700</delta_ts>
            <desc>Still not complete, but makes more sense :)</desc>
            <filename>0001-sandbox_turn_3.patch</filename>
            <type>text/plain</type>
            <size>22140</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA4ZGZjMGQ3YzA3MGY2ZGUxMzFiZmJjYjVjYzEwZmExMGNiZDQ4NTUxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogVGh1
LCAxOSBKdWwgMjAxMiAxMzo1NDo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIHNhbmRib3hfdHVy
bl8zCgotLS0KIC4uLi9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnIHwgICAgMyArLQogU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAyICsKIC4uLi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5j
aGVyUXQuY3BwICAgIHwgIDEwNCArKysrKysrKysrKysrLQogLi4uL1dlYlByb2Nlc3MvcXQvU2Fu
ZGJveEVudmlyb25tZW50SGFuZGxlclF0LmNwcCAgfCAgMTQzICsrKysrKysrKysrKysrKysrKysr
CiAuLi4vV2ViUHJvY2Vzcy9xdC9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuaCAgICB8ICAg
MjkgKysrKwogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNw
cCAgfCAgIDIxICsrKwogVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtICAg
ICAgICAgICAgfCAgICA0ICsKIDggZmlsZXMgY2hhbmdlZCwgMzUzIGluc2VydGlvbnMoKyksIDUx
IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0
LmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnCmluZGV4IDFmYzgyNTkuLjEzNWYyNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0xMTMs
NiArMTEzLDcgQEAgRU5BQkxFX1FVT1RBID0gOwogRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hB
TkRMRVIgPSA7CiBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVT
VF9BTklNQVRJT05fRlJBTUU7CiBFTkFCTEVfU0NSSVBURURfU1BFRUNIID0gOworRU5BQkxFX1NV
SURfU0FOREJPWF9MSU5VWCA9IDsKIEVOQUJMRV9TSEFET1dfRE9NID0gOwogRU5BQkxFX1NIQVJF
RF9XT1JLRVJTID0gRU5BQkxFX1NIQVJFRF9XT1JLRVJTOwogRU5BQkxFX1NRTF9EQVRBQkFTRSA9
IEVOQUJMRV9TUUxfREFUQUJBU0U7CkBAIC0xMzUsNCArMTM2LDQgQEAgRU5BQkxFX1dFQl9USU1J
TkcgPSA7CiBFTkFCTEVfV09SS0VSUyA9IEVOQUJMRV9XT1JLRVJTOwogRU5BQkxFX1hTTFQgPSBF
TkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAk
KEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQo
RU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVY
VCkgJChFTkFCTEVfQ1NTM19GTEVYQk9YKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJF
QUspICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFC
TEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikg
JChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9DU1Nf
VkFSSUFCTEVTKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hC
T0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9J
VEVNUykgJChFTkFCTEVfREVUQUlMUykgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVO
QUJMRV9ESUFMT0dfRUxFTUVOVCkgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVf
RklMRV9TWVNURU0pICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAk
KEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElHSF9EUElf
Q0FOVkFTKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykg
JChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChF
TkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfREFURVRJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChF
TkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxF
X0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9O
UykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTElOS19QUkVSRU5ERVIpICQoRU5B
QkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNU
SUNTKSAkKEVOQUJMRV9NRVRFUl9UQUcpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVU
QVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QQUdFX1ZJ
U0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QUk9HUkVTU19UQUcpICQoRU5BQkxFX1FVT1RBKSAkKEVO
QUJMRV9SRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAk
KEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9T
VFlMRV9TQ09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdT
KSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVf
VEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChF
TkFCTEVfVU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0sp
ICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRT
KSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9YU0xUKTsK
K0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05fQVBJKSAkKEVOQUJMRV9CTE9CKSAk
KEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NT
UzNfRkxFWEJPWCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9D
U1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NTU19JTUFHRV9P
UklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19S
RUdJT05TKSAkKEVOQUJMRV9DU1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX1ZBUklBQkxFUykgJChF
TkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkg
JChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxF
X0RFVEFJTFMpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VM
RU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAk
KEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBB
RCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJR0hfRFBJX0NBTlZBUykgJChFTkFC
TEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJBTUVfU0VBTUxFU1MpICQoRU5BQkxFX0lOREVY
RURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1NQ
RUVDSCkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVU
SU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9X
RUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZF
TkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xJ
TktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRITUwpICQo
RU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVf
TUVURVJfVEFHKSAkKEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01VVEFUSU9OX09CU0VSVkVS
UykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkg
JChFTkFCTEVfUFJPR1JFU1NfVEFHKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVHSVNURVJf
UFJPVE9DT0xfSEFORExFUikgJChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5B
QkxFX1NDUklQVEVEX1NQRUVDSCkgJChFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYKSAkKEVOQUJM
RV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FMX0RBVEFC
QVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RP
TV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJ
WklORykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lD
T05fTE9BRElORykgJChFTkFCTEVfVU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURFTykgJChFTkFC
TEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5B
QkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XT1JLRVJTKSAk
KEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDgwZTVhNjUuLmQwNmE2NDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaQpAQCAtMzk2LDYgKzM5Niw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJVbmRvU3RlcC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvbm5lY3Rpb25Ub1VJUHJv
Y2Vzcy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBcCisgICAgV2ViUHJvY2Vzcy9x
dC9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuaCBcCiAgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1
aWx0aW5CdW5kbGUuaCBcCiAgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmgg
XAogICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFuYWdlci5oIFwKQEAgLTc5NCw2
ICs3OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFn
ZVF0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIFwKKyAgICBXZWJQcm9jZXNzL3F0L1NhbmRi
b3hFbnZpcm9ubWVudEhhbmRsZXJRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGlu
QnVuZGxlLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmNwcCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVu
Y2hlclF0LmNwcAppbmRleCBjNWMzZjcxLi42YmYxZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAK
QEAgLTU1LDYgKzU1LDE1IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8UURpcj4KKyNpbmNsdWRlIDxRU3Ry
aW5nTGlzdD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl
IDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNlbmRpZgorCiAj
aWYgT1MoREFSV0lOKQogI2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+CiAjaW5jbHVkZSA8c2Vy
dmVycy9ib290c3RyYXAuaD4KQEAgLTk4LDEwICsxMDcsOTMgQEAgdm9pZCBRdFdlYlByb2Nlc3M6
OnNldHVwQ2hpbGRQcm9jZXNzKCkKICAgICBxcHV0ZW52KCJRVF9NQUNfRElTQUJMRV9GT1JFR1JP
VU5EX0FQUExJQ0FUSU9OX1RSQU5TRk9STSIsIFFCeXRlQXJyYXkoIjEiKSk7CiAjZW5kaWYKIH0K
KyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorc3RhdGljIHZvaWQgY29sbGVjdERlcGVu
Y2VkbmllcyhRU3RyaW5nICZkZXBlbmRlbnlMaXN0LCBRU3RyaW5nIHByb2Nlc3MsIGNoYXIgcGFy
YW1zW10pCit7CisgICAgaW50IHN0YXR1czsKKyAgICBpbnQgcGlwZWZkWzJdOworCisgICAgaWYg
KHBpcGUocGlwZWZkKSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBwaXBpbmc6
ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgIHN3aXRjaCAoZm9yaygpKSB7CisgICAg
Y2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBmb3JraW5nOiAlcy5c
biIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGNsb3NlKHBpcGVmZFsxXSk7IC8vIGNsb3NlIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUg
aW4gdGhlIHBhcmVudAorICAgICAgICBGSUxFKiBmaWxlOworICAgICAgICBmaWxlID0gZmRvcGVu
KHBpcGVmZFswXSwgInIiKTsKKworICAgICAgICBjaGFyIGJ1ZmZlclsyMDBdOworICAgICAgICB3
aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZmlsZSkpIHsKKyAgICAgICAgICAg
ICAgaW50IGxlbiA9IHN0cmxlbihidWZmZXIpLTE7CisgICAgICAgICAgICAgIGlmIChidWZmZXJb
bGVuXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgYnVmZmVyW2xlbl0gPSAwOworCisgICAg
ICAgICAgICAgIGlmIChwcm9jZXNzLmNvbnRhaW5zKFFMYXRpbjFTdHJpbmcoImxkLWxpbnV4Iiks
IFF0OjpDYXNlU2Vuc2l0aXZlKSkgeworICAgICAgICAgICAgICAgICAgLy8gVGhlIG91dHB1dCBv
ZiBsZGQgY2FuIGhhdmUgdHdvIGZvcm1hdHM6CisgICAgICAgICAgICAgICAgICAvLyAxKSBcdG5h
bWVfb2ZfdGhlX2xpYnJhcnkgPT4gcGF0aF9vZl9saWJyYXJ5IChhZGRyZXNzX29mX3RoZV9saWJh
cnkpCisgICAgICAgICAgICAgICAgICAvLyAyKSBwYXRoX29mX3RoZV9saWJyYXJ5IChhZGRyZXNz
X29mX3RoZV9saWJhcnkpCisgICAgICAgICAgICAgICAgICBjaGFyKiBwYXRoT2ZUaGVMaWJyYXJ5
ID0gKGNoYXIqKW1hbGxvYygyMDAgKiBzaXplb2YoY2hhcikpOworICAgICAgICAgICAgICAgICAg
aW50IG51bWJlck9mbWF0Y2hpbmdDaGFyYWN0ZXJzID0gc3NjYW5mKGJ1ZmZlciwgIlx0JSpzID0+
IC8lcyAlKnNcbiIsIHBhdGhPZlRoZUxpYnJhcnkpOworICAgICAgICAgICAgICAgICAgaWYgKCFu
dW1iZXJPZm1hdGNoaW5nQ2hhcmFjdGVycykKKyAgICAgICAgICAgICAgICAgICAgICBudW1iZXJP
Zm1hdGNoaW5nQ2hhcmFjdGVycyA9IHNzY2FuZihidWZmZXIsICJcdC8lcyAlKnNcbiIsIHBhdGhP
ZlRoZUxpYnJhcnkpOworICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mbWF0Y2hpbmdDaGFy
YWN0ZXJzID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVueUxpc3QgKz0gUUxh
dGluMVN0cmluZyhwYXRoT2ZUaGVMaWJyYXJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICBkZXBl
bmRlbnlMaXN0ICs9IFFMYXRpbjFDaGFyKCc7Jyk7CisgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbGlicmFyeSA9
IFFMYXRpbjFTdHJpbmcoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCBk
eW5hbWljRGVwZW5kZW5jaWVzOworICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsaXN0IG9mIGVt
aXJpY2FsbHkgZ2F0aGVyZWQgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAg
ICAgZHluYW1pY0RlcGVuZGVuY2llcyA8PCBRTGF0aW4xU3RyaW5nKCJsaWJjcnlwdG8uc28iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgUUxhdGluMVN0cmluZygi
bGlibnNzX2Rucy5zbyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
PCBRTGF0aW4xU3RyaW5nKCJsaWJyZXNvbHYuc28iKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPDwgUUxhdGluMVN0cmluZygibGlic3NsLnNvIik7CisKKyAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGR5bmFtaWNEZXBlbmRlbmNpZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpYnJhcnkuY29udGFpbnMoZHlu
YW1pY0RlcGVuZGVuY2llcy5hdChpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFT
dHJpbmdNYXRjaGVyIG1hdGNoZXIoUUxhdGluMVN0cmluZygiLyIpLCBRdDo6Q2FzZVNlbnNpdGl2
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHBhdGhPZlRoZUxpYnJhcnkg
PSBsaWJyYXJ5Lm1pZChtYXRjaGVyLmluZGV4SW4obGlicmFyeSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhdGhPZlRoZUxpYnJhcnkuc2l6ZSgpID4gMCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVueUxpc3QgKz0gcGF0aE9mVGhlTGlicmFyeTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnlMaXN0ICs9IFFMYXRpbjFD
aGFyKCc7Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAod2FpdCgmc3RhdHVzKSA8PSAwKQorICAgICAgICAgICAgd2Fybigi
V2FpdC4iKTsKKyAgICAgICAgZWxzZSBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiU2lnbmFsZWQ6IHNpZ25hbCAlZFxuIiwgV1RFUk1TSUcoc3Rh
dHVzKSk7CisgICAgICAgIGVsc2UgaWYgKFdJRkVYSVRFRChzdGF0dXMpICYmIFdFWElUU1RBVFVT
KHN0YXR1cykpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkV4aXRlZDogZXhpdCBzdGF0
dXMgJWRcbiIsIFdFWElUU1RBVFVTKHN0YXR1cykpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IDA6CisgICAgICAgIGNsb3NlKHBpcGVmZFswXSk7CisKKyAgICAgICAgZHVwMihwaXBlZmRbMV0s
IDEpOyAvLyBzZW5kIHN0ZG91dCB0byB0aGUgcGlwZQorICAgICAgICBkdXAyKHBpcGVmZFsxXSwg
Mik7IC8vIHNlbmQgc3RkZXJyIHRvIHRoZSBwaXBlCisKKyAgICAgICAgaWYgKHByb2Nlc3MuY29u
dGFpbnMoUUxhdGluMVN0cmluZygibGQtbGludXgiKSwgUXQ6OkNhc2VJbnNlbnNpdGl2ZSkpIHsK
KyAgICAgICAgICAgIC8vIFVzaW5nIGxkZCBtZWFucyB0aGF0IHdlIGNhbGwgbGQtbGludXggd2hp
bGUgTERfVFJBQ0VfTE9BREVEX09CSkVDVFMgaXMgc2V0LgorICAgICAgICAgICAgLy8gVGhpcyB3
YXkgdGhlICJwcm9jZXNzIiB3b24ndCBydW4gb25seSBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgYmUg
ZGV0ZXJtaW5lZC4KKyAgICAgICAgICAgIHNldGVudigiTERfVFJBQ0VfTE9BREVEX09CSkVDVFMi
LCAieWVzIiwgMSk7CisgICAgICAgICAgICBleGVjbChwcm9jZXNzLnRvTG9jYWw4Qml0KCksIHBy
b2Nlc3MudG9Mb2NhbDhCaXQoKSwgcGFyYW1zLCAoY2hhciAqKTApOworICAgICAgICAgICAgdW5z
ZXRlbnYoIkxEX1RSQUNFX0xPQURFRF9PQkpFQ1RTIik7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZXhlY2wocHJvY2Vzcy50b0xvY2FsOEJpdCgpLCBwcm9jZXNzLnRvTG9jYWw4Qml0KCks
IHBhcmFtcywgKGNoYXIgKikwKTsKKyAgICAgICAgY2xvc2UocGlwZWZkWzFdKTsgLy8gdGhpcyBk
ZXNjcmlwdG9yIGlzIG5vIGxvbmdlciBuZWVkZWQKKyAgICB9Cit9CisjZW5kaWYKIAogdm9pZCBQ
cm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogewotICAgIFFTdHJpbmcgY29tbWFuZExp
bmUgPSBRTGF0aW4xU3RyaW5nKCIlMSAlMiIpOworICAgIFFTdHJpbmcgY29tbWFuZExpbmUgPSBR
TGF0aW4xU3RyaW5nKCIlMSAlMiAlMyIpOwogICAgIGNvbW1hbmRMaW5lID0gY29tbWFuZExpbmUu
YXJnKG1fbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9PSBXZWJQcm9jZXNzID8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlUGF0aE9mV2ViUHJvY2VzcygpIDog
ZXhlY3V0YWJsZVBhdGhPZlBsdWdpblByb2Nlc3MoKSk7CiAKQEAgLTE0Miw2ICsyMzQsMTYgQEAg
dm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgIGNvbW1hbmRMaW5lID0g
Y29tbWFuZExpbmUuYXJnKHNvY2tldHNbMF0pOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU1VJRF9T
QU5EQk9YX0xJTlVYKQorICAgIFFTdHJpbmcgZGVwZW5kZW5jeUxpc3Q7CisgICAgLy8gVGhlcmUg
YXJlIHR3byB3YXkgaG93IHdlIGdhdGhlciB0aGUgZGVwZW5kZW5jaWVzOgorICAgIC8vIDEpIFVz
aW5nIGxkZCB0byBvYnRhaW4gdGhlIHN0YXRpYyBkZXBlbmRlbmNpZXMgb2YgUXRXZWJQcm9jZXNz
LgorICAgIC8vIDIpIFVzaW5nIGEgZGV2ZWxlcGVyIGRlZmluZWQgbGlzdCBvZiBkeW5hbWljIGRl
cGVuZGVuY2llcyAoaXQncyBnYXRoZXJlZCBlbXBpcmljYWwgd2F5KS4KKyAgICBjb2xsZWN0RGVw
ZW5jZWRuaWVzKGRlcGVuZGVuY3lMaXN0LCBRTGF0aW4xU3RyaW5nKCIvbGliNjQvbGQtbGludXgt
eDg2LTY0LnNvLjIiKSwgKGNoYXIqKShleGVjdXRhYmxlUGF0aE9mV2ViUHJvY2VzcygpLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICBjb2xsZWN0RGVwZW5jZWRuaWVzKGRlcGVuZGVuY3lMaXN0LCBRTGF0
aW4xU3RyaW5nKCIvc2Jpbi9sZGNvbmZpZyIpLCAoY2hhciopKCItcCIpKTsKKyAgICBjb21tYW5k
TGluZSA9IGNvbW1hbmRMaW5lLmFyZyhkZXBlbmRlbmN5TGlzdCk7CisjZW5kaWYKKwogICAgIFFQ
cm9jZXNzKiB3ZWJQcm9jZXNzID0gbmV3IFF0V2ViUHJvY2VzcygpOwogICAgIHdlYlByb2Nlc3Mt
PnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6Rm9yd2FyZGVkQ2hhbm5lbHMpOwogICAg
IHdlYlByb2Nlc3MtPnN0YXJ0KGNvbW1hbmRMaW5lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQwYTdkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9TYW5kYm94RW52aXJvbm1lbnRIYW5k
bGVyUXQuY3BwCkBAIC0wLDAgKzEsMTQzIEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmgiCisKKyNpZiBFTkFCTEUoU1VJRF9TQU5E
Qk9YX0xJTlVYKQorCisjaW5jbHVkZSAiUHJvY2Vzc0V4ZWN1dGFibGVQYXRoLmgiCisjaW5jbHVk
ZSA8UURlYnVnPgorI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8
UUZpbGVJbmZvPgorI2luY2x1ZGUgPFFTdHJpbmdNYXRjaGVyPgorI2luY2x1ZGUgPGVyci5oPgor
I2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg
PHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKK1NhbmRib3hFbnZpcm9ubWVu
dEhhbmRsZXJRdDo6U2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0KFFTdHJpbmcgY2hyb290RGly
KQoreworICAgIHNhbmRib3hSb290ID0gY2hyb290RGlyOworCisgICAgaG9tZURpcmVjdG9yeSA9
IFFMYXRpbjFTdHJpbmcoIi9ob21lL25vYm9keSIpOworICAgIGJpbmRhYmxlRGlyZWN0b3JpZXMg
PDwgUUxhdGluMVN0cmluZygiL3Byb2MvIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IFFM
YXRpbjFTdHJpbmcoIi9ydW4vc2htLyIpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCBRTGF0
aW4xU3RyaW5nKCIvdXNyL3NoYXJlL2ZvbnRzIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8
IFFMYXRpbjFTdHJpbmcoIi92YXIvbGliL2RidXMvIik7IC8vIC92YXIvbGliL2RidXMvbWFjaGlu
ZS1pZAorICAgIGJpbmRhYmxlRGlyZWN0b3JpZXNJbkhvbWUgPDwgUUxhdGluMVN0cmluZygiLy5m
b250Y29uZmlnLyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBRTGF0aW4xU3Ry
aW5nKCIvLmxvY2FsL3NoYXJlL05va2lhLyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8PCBRTGF0aW4xU3RyaW5nKCIvLmNhY2hlLyIpOworICAgIGRldmljZXMgPDwgUUxhdGluMVN0
cmluZygiL2Rldi91cmFuZG9tIikKKyAgICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmcoIi9kZXYv
cmFuZG9tIik7Cit9CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0OjpjcmVhdGVE
ZXZpY2VGaWxlcygpCit7CisgICAgaWYgKCFRRGlyKCkubWtwYXRoKHNhbmRib3hSb290ICsgUUxh
dGluMVN0cmluZygiL2Rldi8iKSkpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkg
Y3JlYXRpbmcgL2RldiBkaXJlY3RvcnkuICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBkZXZpY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHN0cnVj
dCBzdGF0IHN0YXR1czsKKyAgICAgICAgaWYgKHN0YXQoZGV2aWNlcy5hdChpKS50b0xvY2FsOEJp
dCgpLmRhdGEoKSwgJnN0YXR1cykgIT0gLTEpIHsKKyAgICAgICAgICAgIGRldl90IGRldiA9IHN0
YXR1cy5zdF9yZGV2OworICAgICAgICAgICAgbWtub2QoKHNhbmRib3hSb290ICsgZGV2aWNlcy5h
dChpKSkudG9Mb2NhbDhCaXQoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICBTX0lGQ0hSIHwg
U19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEggfCBTX0lXT1RI
LCBtYWtlZGV2KG1ham9yKGRldiksIG1pbm9yKGRldikpKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworaW50IFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdDo6YmluZFNhbmRib3hEaXJlY3Rvcmll
cygpCit7CisgICAgaWYgKCFRRGlyKCkubWtwYXRoKHNhbmRib3hSb290KSkKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJFcnJvciBieSBjcmVhdGluZyAlcy4gJXNcbiIsIHNhbmRib3hSb290LnRv
TG9jYWw4Qml0KCkuZGF0YSgpLCBzdHJlcnJvcihlcnJubykpOworCisgICAgLy8gTW91bnRpbmcg
dGhlIG5lZWRlZCBzeXN0ZW0gZGlyZWN0b3JpZXMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBi
aW5kYWJsZURpcmVjdG9yaWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFFTdHJpbmcgc2FuZGJv
eFBhdGggPSBzYW5kYm94Um9vdCArIGJpbmRhYmxlRGlyZWN0b3JpZXMuYXQoaSk7CisgICAgICAg
IGlmICghUURpcihzYW5kYm94UGF0aCkuZXhpc3RzKCkpCisgICAgICAgICAgICBRRGlyKCkubWtw
YXRoKHNhbmRib3hQYXRoKTsKKyAgICAgICAgaWYgKG1vdW50KGJpbmRhYmxlRGlyZWN0b3JpZXMu
YXQoaSkudG9Mb2NhbDhCaXQoKS5kYXRhKCksIHNhbmRib3hQYXRoLnRvTG9jYWw4Qml0KCkuZGF0
YSgpLCAiIiwgTVNfQklORCB8IE1TX1JFQyB8IE1TX01PVkUsICIiKSA9PSAtMSkKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkgbW91bnRpbmcgJXMuICVzXG4iLCAoc2FuZGJv
eFJvb3QgKyBiaW5kYWJsZURpcmVjdG9yaWVzLmF0KGkpKS50b0xvY2FsOEJpdCgpLmRhdGEoKSwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisKKyAgICAvLyBNb3VudGluZyB0aGUgYmluYXJ5IGRp
cmVjdG9yaWVzIG9mIFdlYktpdC4KKyAgICBRU3RyaW5nIHJlYWxIb21lRGlyZWN0b3J5ID0gUUxh
dGluMVN0cmluZyhnZXRwd3VpZChnZXRwd3VpZChnZXR1aWQoKSktPnB3X3VpZCktPnB3X2Rpcik7
CisgICAgUVN0cmluZyB3ZWJraXRQYXRoID0gUURpcigpLmN1cnJlbnRQYXRoKCk7CisgICAgaWYg
KHdlYmtpdFBhdGguY29udGFpbnMocmVhbEhvbWVEaXJlY3RvcnksIFF0OjpDYXNlU2Vuc2l0aXZl
KSkKKyAgICAgICAgd2Via2l0UGF0aC5yZXBsYWNlKHJlYWxIb21lRGlyZWN0b3J5LCBob21lRGly
ZWN0b3J5LCBRdDo6Q2FzZVNlbnNpdGl2ZSk7CisgICAgUVN0cmluZyB3ZWJLaXRCaW5hcnlEaXIg
PSBzYW5kYm94Um9vdCArIHdlYmtpdFBhdGg7CisgICAgaWYgKCFRRGlyKHdlYktpdEJpbmFyeURp
cikuZXhpc3RzKCkpCisgICAgICAgIFFEaXIoKS5ta3BhdGgod2ViS2l0QmluYXJ5RGlyKTsKKyAg
ICBpZiAobW91bnQoUURpcigpLmN1cnJlbnRQYXRoKCkudG9Mb2NhbDhCaXQoKS5kYXRhKCksIHdl
YktpdEJpbmFyeURpci50b0xvY2FsOEJpdCgpLmRhdGEoKSwgIiIsIE1TX0JJTkQgfCBNU19SRUMg
fCBNU19NT1ZFLCAiIikgPT0gLTEpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkg
bW91bnRpbmcgJXMuICVzXG4iLCB3ZWJLaXRCaW5hcnlEaXIudG9Mb2NhbDhCaXQoKS5kYXRhKCks
IHN0cmVycm9yKGVycm5vKSk7CisKKyAgICAvLyBNb3VudGluZyB0aGUgY2FjaGUgZGlyZWN0b3Jp
ZXMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaW5kYWJsZURpcmVjdG9yaWVzSW5Ib21lLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFFTdHJpbmcgcmVhbFBhdGggPSByZWFsSG9tZURpcmVjdG9y
eSArIGJpbmRhYmxlRGlyZWN0b3JpZXNJbkhvbWUuYXQoaSk7CisgICAgICAgIFFTdHJpbmcgc2Fu
ZGJveFBhdGggPSBzYW5kYm94Um9vdCArIGhvbWVEaXJlY3RvcnkgKyBiaW5kYWJsZURpcmVjdG9y
aWVzSW5Ib21lLmF0KGkpOworICAgICAgICBpZiAoIVFEaXIoc2FuZGJveFBhdGgpLmV4aXN0cygp
KQorICAgICAgICAgICAgUURpcigpLm1rcGF0aChzYW5kYm94UGF0aCk7CisgICAgICAgIGlmICht
b3VudChiaW5kYWJsZURpcmVjdG9yaWVzLmF0KGkpLnRvTG9jYWw4Qml0KCkuZGF0YSgpLCBzYW5k
Ym94UGF0aC50b0xvY2FsOEJpdCgpLmRhdGEoKSwgIiIsIE1TX0JJTkQgfCBNU19SRUMgfCBNU19N
T1ZFLCAiIikgPT0gLTEpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG1v
dW50aW5nICVzLiAlc1xuIiwgKHNhbmRib3hSb290ICsgYmluZGFibGVEaXJlY3Rvcmllcy5hdChp
KSkudG9Mb2NhbDhCaXQoKS5kYXRhKCksIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdDo6YWRkTm9ib2R5
VXNlcigpCit7CisgICAgUURpcigpLm1rcGF0aChzYW5kYm94Um9vdCArIFFMYXRpbjFTdHJpbmco
Ii9ldGMiKSk7CisgICAgUUZpbGUgcGFzc3dkKHNhbmRib3hSb290ICsgUUxhdGluMVN0cmluZygi
L2V0Yy9wYXNzd2QiKSk7CisgICAgcGFzc3dkLm9wZW4oUUlPRGV2aWNlOjpXcml0ZU9ubHkpOwor
ICAgIHN0cnVjdCBwYXNzd2QqIG5vYm9keVVzZXIgPSBnZXRwd25hbSgibm9ib2R5Iik7CisgICAg
UVN0cmluZyBwYXNzd29yZENvbnRlbnQgPSBRTGF0aW4xU3RyaW5nKG5vYm9keVVzZXItPnB3X25h
bWUpICsgUUxhdGluMUNoYXIoJzonKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR
TGF0aW4xU3RyaW5nKG5vYm9keVVzZXItPnB3X3Bhc3N3ZCkgKyBRTGF0aW4xQ2hhcignOicpICsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmc6Om51bWJlcihub2JvZHlVc2Vy
LT5wd191aWQpICsgUUxhdGluMUNoYXIoJzonKSArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBRU3RyaW5nOjpudW1iZXIobm9ib2R5VXNlci0+cHdfZ2lkKSArIFFMYXRpbjFDaGFyKCc6
JykgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUxhdGluMVN0cmluZyhub2JvZHlV
c2VyLT5wd19nZWNvcykgKyBRTGF0aW4xQ2hhcignOicpICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFFMYXRpbjFTdHJpbmcoIi9ob21lL25vYm9keSIpICsgUUxhdGluMUNoYXIoJzon
KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRTGF0aW4xU3RyaW5nKG5vYm9keVVz
ZXItPnB3X3NoZWxsKTsKKyAgICBwYXNzd2Qud3JpdGUocGFzc3dvcmRDb250ZW50LnRvTGF0aW4x
KCkpOworICAgIHBhc3N3ZC5mbHVzaCgpOworICAgIHBhc3N3ZC5jbG9zZSgpOworfQorCit2b2lk
IFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdDo6Y3JlYXRlTGluayhjaGFyKiB0YXJnZXQpCit7
CisgICAgUVN0cmluZyByZWFsUGF0aDsKKyAgICBpZiAodGFyZ2V0WzBdICE9ICcvJykKKyAgICAg
ICAgcmVhbFBhdGggPSBRTGF0aW4xQ2hhcignLycpICsgUUxhdGluMVN0cmluZyh0YXJnZXQpOwor
ICAgIGVsc2UKKyAgICAgICAgcmVhbFBhdGggPSBRTGF0aW4xU3RyaW5nKHRhcmdldCk7CisgICAg
UVN0cmluZyByZWFsSG9tZURpcmVjdG9yeSA9IFFMYXRpbjFTdHJpbmcoZ2V0cHd1aWQoZ2V0cHd1
aWQoZ2V0dWlkKCkpLT5wd191aWQpLT5wd19kaXIpOworICAgIGlmIChyZWFsUGF0aC5jb250YWlu
cyhyZWFsSG9tZURpcmVjdG9yeSwgUXQ6OkNhc2VTZW5zaXRpdmUpKQorICAgICAgICByZWFsUGF0
aC5yZXBsYWNlKHJlYWxIb21lRGlyZWN0b3J5LCBob21lRGlyZWN0b3J5LCBRdDo6Q2FzZVNlbnNp
dGl2ZSk7CisgICAgUVN0cmluZyBzYW5kYm94UGF0aCA9IHNhbmRib3hSb290ICsgcmVhbFBhdGg7
CisgICAgUUZpbGVJbmZvIGluZm8oc2FuZGJveFBhdGgpOworICAgIGlmICghUURpcihpbmZvLnBh
dGgoKSkuZXhpc3RzKCkpCisgICAgICAgIFFEaXIoKS5ta3BhdGgoaW5mby5wYXRoKCkpOworICAg
IGlmIChsaW5rKHJlYWxQYXRoLnRvTG9jYWw4Qml0KCksIHNhbmRib3hQYXRoLnRvTG9jYWw4Qml0
KCkpID09IC0xKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IGxpbmtpbmcgJXM6
ICVzXG4iLCByZWFsUGF0aC50b0xvY2FsOEJpdCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICBRRmlsZUluZm8gb2xkSW5mbyhyZWFsUGF0aCk7CisgICAgaWYgKG9sZEluZm8uaXNTeW1M
aW5rKCkpCisgICAgICAgIGNyZWF0ZUxpbmsob2xkSW5mby5zeW1MaW5rVGFyZ2V0KCkudG9Mb2Nh
bDhCaXQoKS5kYXRhKCkpOworfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdDo6
YWRkRGVwZW5kZW5jaWVzKFFTdHJpbmcgc3RhdGljRGVwZW5kZW5jaWVzKQoreworICAgIFFTdHJp
bmdMaXN0IGRlcGVuZGVuY3lMaXN0ID0gc3RhdGljRGVwZW5kZW5jaWVzLnNwbGl0KCc7Jyk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXBlbmRlbmN5TGlzdC5zaXplKCk7ICsraSkKKyAgICAg
ICAgY3JlYXRlTGluayhkZXBlbmRlbmN5TGlzdC5hdChpKS50b0xvY2FsOEJpdCgpLmRhdGEoKSk7
Cit9CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0Ojppbml0aWFsaXplU2FuZGJv
eChRU3RyaW5nIHN0YXRpY0RlcGVuZGVuY2llcykKK3sKKyAgICBhZGROb2JvZHlVc2VyKCk7Cisg
ICAgYWRkRGVwZW5kZW5jaWVzKHN0YXRpY0RlcGVuZGVuY2llcyk7CisgICAgYmluZFNhbmRib3hE
aXJlY3RvcmllcygpOworICAgIGNyZWF0ZURldmljZUZpbGVzKCk7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9xdC9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNzliMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmgKQEAg
LTAsMCArMSwyOSBAQAorI2lmbmRlZiBTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXRfaAorI2Rl
ZmluZSBTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXRfaAorCisjaWYgRU5BQkxFKFNVSURfU0FO
REJPWF9MSU5VWCkKKworI2luY2x1ZGUgPFFTdHJpbmc+CisjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+
CisKK2NsYXNzIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdCB7CitwdWJsaWM6CisgICAgUVN0
cmluZ0xpc3QgYmluZGFibGVEaXJlY3RvcmllczsKKyAgICBRU3RyaW5nTGlzdCBiaW5kYWJsZURp
cmVjdG9yaWVzSW5Ib21lOworICAgIFFTdHJpbmdMaXN0IGRldmljZXM7CisgICAgUVN0cmluZyBo
b21lRGlyZWN0b3J5OworICAgIFFTdHJpbmcgc2FuZGJveFJvb3Q7CisKKyAgICBTYW5kYm94RW52
aXJvbm1lbnRIYW5kbGVyUXQoUVN0cmluZyk7CisKKyAgICB2b2lkIGFkZERlcGVuZGVuY2llcyhR
U3RyaW5nKTsKKyAgICB2b2lkIGFkZE5vYm9keVVzZXIoKTsKKyAgICBpbnQgYmluZFNhbmRib3hE
aXJlY3RvcmllcygpOworICAgIHZvaWQgY3JlYXRlRGV2aWNlRmlsZXMoKTsKKyAgICB2b2lkIGNy
ZWF0ZUxpbmsoY2hhciopOworICAgIHZvaWQgaW5pdGlhbGl6ZVNhbmRib3goUVN0cmluZyk7Cit9
OworCisjZW5kaWYgLy8gRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKworI2VuZGlmIC8vIFNh
bmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAppbmRleCBjYjcyY2I5Li4wZjQ1Njc0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAK
QEAgLTI1LDYgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgog
CiAjaW5jbHVkZSA8UUd1aUFwcGxpY2F0aW9uPgpAQCAtMzQsNyArMzUsMTMgQEAKICNpbmNsdWRl
IDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDxRVXJsPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9v
cC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8
Z3JwLmg+CisjaW5jbHVkZSA8cHdkLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpAQCAtMTQ0LDYgKzE1MSwyMCBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplUHJveHkoKQog
CiBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpblF0KFFHdWlBcHBsaWNhdGlvbiogYXBw
KQogeworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisgICAgY29uc3QgUVN0cmluZyBz
YW5kYm94RGlyZWN0b3J5ID0gUUxhdGluMVN0cmluZyhnZXRwd3VpZChnZXRwd3VpZChnZXR1aWQo
KSktPnB3X3VpZCktPnB3X2RpcikgKyBRTGF0aW4xU3RyaW5nKCIvLndrLXNhbmRib3gyMCIpOwor
ICAgIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdCogc2FuZGJveEhhbmRsZXIgPSBuZXcgU2Fu
ZGJveEVudmlyb25tZW50SGFuZGxlclF0KHNhbmRib3hEaXJlY3RvcnkpOworICAgIHNhbmRib3hI
YW5kbGVyLT5pbml0aWFsaXplU2FuZGJveChhcHAtPmFyZ3VtZW50cygpLmF0KDIpKTsKKworICAg
IDo6c2V0Z3JvdXBzKDAsIDApOworICAgIGlmICg6OmNocm9vdChzYW5kYm94RGlyZWN0b3J5LnRv
TG9jYWw4Qml0KCkuZGF0YSgpKSA9PSAtMSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJv
b3RpbmcgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBpZiAoOjpjaGRpcigi
LyIpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBjaGFuZ2UgZGlyZWN0b3J5XG4i
KTsKKyAgICBwYXNzd2QqIG5vYm9keSA9IGdldHB3bmFtKCJub2JvZHkiKTsKKyAgICA6OnNldGdp
ZChub2JvZHktPnB3X3VpZCk7CisgICAgOjpzZXR1aWQobm9ib2R5LT5wd19naWQpOworI2VuZGlm
CiAgICAgaW5pdGlhbGl6ZVByb3h5KCk7CiAKICAgICBzcmFuZG9tKHRpbWUoMCkpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IDFjYTY3YTAuLjE5ZjAxYWYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTExMyw2ICsxMTMsNyBA
QCBteSAoCiAgICAgJHNoYXJlZFdvcmtlcnNTdXBwb3J0LAogICAgICRzcWxEYXRhYmFzZVN1cHBv
cnQsCiAgICAgJHN0eWxlU2NvcGVkU3VwcG9ydCwKKyAgICAkc3VpZExpbnV4U2FuZGJveCwKICAg
ICAkc3ZnRE9NT2JqQ0JpbmRpbmdzU3VwcG9ydCwKICAgICAkc3ZnRm9udHNTdXBwb3J0LAogICAg
ICRzdmdTdXBwb3J0LApAQCAtMzQ0LDYgKzM0NSw5IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICB7
IG9wdGlvbiA9PiAic3R5bGUtc2NvcGVkIiwgZGVzYyA9PiAiVG9nZ2xlIFN0eWxlIFNjb3BlZCBz
dXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NUWUxFX1NDT1BFRCIsIGRlZmF1bHQg
PT4gaXNCbGFja0JlcnJ5KCksIHZhbHVlID0+IFwkc3R5bGVTY29wZWRTdXBwb3J0IH0sCiAKKyAg
ICB7IG9wdGlvbiA9PiAic3VpZC1saW51eC1zYW5kYm94IiwgZGVzYyA9PiAiVG9nZ2xlIHN1aWQg
c2FuZGJveCBmb3IgbGludXgiLAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1VJRF9TQU5EQk9Y
X0xJTlVYIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHN1aWRMaW51eFNhbmRib3ggfSwKKwog
ICAgIHsgb3B0aW9uID0+ICJzdmciLCBkZXNjID0+ICJUb2dnbGUgU1ZHIHN1cHBvcnQiLAogICAg
ICAgZGVmaW5lID0+ICJFTkFCTEVfU1ZHIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJHN2Z1N1
cHBvcnQgfSwKIAotLSAKMS43LjkuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160200</attachid>
            <date>2012-08-23 11:20:06 -0700</date>
            <delta_ts>2012-08-29 09:05:37 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-4.2.patch</filename>
            <type>text/plain</type>
            <size>37238</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSAwZDgyMTdiZDlkNzkzMTYxNDIzOThjNmFjOWE5ZTEzM2Y2Y2FkMzQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogVGh1
LCAyMyBBdWcgMjAxMiAxOTo1NDoxNCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGZlbHRvbHQgNC4y
CgotLS0KIFNvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYuc2xuICAgICAgICAgICAgICAgICAgICAg
IHwgICA5OCArKysrLS0tLQogLi4uL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcgfCAgICAzICstCiAuLi4vU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25t
ZW50SGFuZGxlclF0LmNwcCB8ICAyNTAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9TYW5kYm94
UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuaCAgIHwgICA1MCArKysrCiBTb3Vy
Y2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94UHJvY2Vzcy5wcm8gICB8ICAgMjMgKysK
IFNvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MiArCiAuLi4vVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCAgICB8
ICAxNDEgKysrKysrKysrKy0KIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgMyArLQogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8gICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0
L1dlYlByb2Nlc3NNYWluUXQuY3BwICB8ICAgIDcgKwogVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJs
L0ZlYXR1cmVMaXN0LnBtICAgICAgICAgICAgfCAgICA0ICsKIDExIGZpbGVzIGNoYW5nZWQsIDUy
NCBpbnNlcnRpb25zKCspLCA2MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJv
eEVudmlyb25tZW50SGFuZGxlclF0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94UHJvY2Vzcy5wcm8KCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL1dURi52Y3Byb2ovV1RGLnNsbiBiL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYuc2xuCmlu
ZGV4IDc2ZGM2MzEuLjM5NmQxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9X
VEYuc2xuCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYuc2xuCkBAIC0xLDQ5ICsxLDQ5
IEBACi3vu78NCi1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQg
VmVyc2lvbiA5LjAwDQotIyBWaXN1YWwgU3R1ZGlvIDIwMDUNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgt
OEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIldURkdlbmVyYXRlZCIsICJXVEZHZW5l
cmF0ZWQudmNwcm9qIiwgIns1QUU1RjVFNC03ODJELTRGNjMtQjRENy0zOTc3QjUyQjk5NTB9Ig0K
LUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJD
OTQyfSIpID0gIldURiIsICJXVEYudmNwcm9qIiwgIntBQThBNUE4NS01OTJCLTQzNTctQkM2MC1F
MEU5MUUwMjZBRjZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBv
c3RQcm9qZWN0DQotCQl7NUFFNUY1RTQtNzgyRC00RjYzLUI0RDctMzk3N0I1MkI5OTUwfSA9IHs1
QUU1RjVFNC03ODJELTRGNjMtQjRENy0zOTc3QjUyQjk5NTB9DQotCUVuZFByb2plY3RTZWN0aW9u
DQotRW5kUHJvamVjdA0KLUdsb2JhbA0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJh
dGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KLQkJRGVidWdfQWxsfFdpbjMyID0gRGVidWdf
QWxsfFdpbjMyDQotCQlEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIgPSBEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzINCi0JCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzINCi0JCVByb2R1Y3Rpb258V2lu
MzIgPSBQcm9kdWN0aW9ufFdpbjMyDQotCQlSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiA9IFJl
bGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyDQotCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4z
Mg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRp
b25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uDQotCQl7NUFFNUY1RTQtNzgyRC00RjYzLUI0RDct
Mzk3N0I1MkI5OTUwfS5EZWJ1Z19BbGx8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWdfQWxsfFdpbjMy
DQotCQl7NUFFNUY1RTQtNzgyRC00RjYzLUI0RDctMzk3N0I1MkI5OTUwfS5EZWJ1Z19BbGx8V2lu
MzIuQnVpbGQuMCA9IERlYnVnX0FsbHxXaW4zMg0KLQkJezVBRTVGNUU0LTc4MkQtNEY2My1CNEQ3
LTM5NzdCNTJCOTk1MH0uRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVn
X0NhaXJvX0NGTGl0ZXxXaW4zMg0KLQkJezVBRTVGNUU0LTc4MkQtNEY2My1CNEQ3LTM5NzdCNTJC
OTk1MH0uRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzINCi0JCXs1QUU1RjVFNC03ODJELTRGNjMtQjRENy0zOTc3QjUyQjk5NTB9LkRlYnVn
fFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NUFFNUY1RTQtNzgyRC00RjYzLUI0
RDctMzk3N0I1MkI5OTUwfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs1
QUU1RjVFNC03ODJELTRGNjMtQjRENy0zOTc3QjUyQjk5NTB9LlByb2R1Y3Rpb258V2luMzIuQWN0
aXZlQ2ZnID0gUHJvZHVjdGlvbnxXaW4zMg0KLQkJezVBRTVGNUU0LTc4MkQtNEY2My1CNEQ3LTM5
NzdCNTJCOTk1MH0uUHJvZHVjdGlvbnxXaW4zMi5CdWlsZC4wID0gUHJvZHVjdGlvbnxXaW4zMg0K
LQkJezVBRTVGNUU0LTc4MkQtNEY2My1CNEQ3LTM5NzdCNTJCOTk1MH0uUmVsZWFzZV9DYWlyb19D
RkxpdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzINCi0JCXs1
QUU1RjVFNC03ODJELTRGNjMtQjRENy0zOTc3QjUyQjk5NTB9LlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRl
fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMg0KLQkJezVBRTVGNUU0
LTc4MkQtNEY2My1CNEQ3LTM5NzdCNTJCOTk1MH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBS
ZWxlYXNlfFdpbjMyDQotCQl7NUFFNUY1RTQtNzgyRC00RjYzLUI0RDctMzk3N0I1MkI5OTUwfS5S
ZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QUE4QTVBODUtNTkyQi00
MzU3LUJDNjAtRTBFOTFFMDI2QUY2fS5EZWJ1Z19BbGx8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWdf
QWxsfFdpbjMyDQotCQl7QUE4QTVBODUtNTkyQi00MzU3LUJDNjAtRTBFOTFFMDI2QUY2fS5EZWJ1
Z19BbGx8V2luMzIuQnVpbGQuMCA9IERlYnVnX0FsbHxXaW4zMg0KLQkJe0FBOEE1QTg1LTU5MkIt
NDM1Ny1CQzYwLUUwRTkxRTAyNkFGNn0uRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyLkFjdGl2ZUNm
ZyA9IERlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMg0KLQkJe0FBOEE1QTg1LTU5MkItNDM1Ny1CQzYw
LUUwRTkxRTAyNkFGNn0uRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z19D
YWlyb19DRkxpdGV8V2luMzINCi0JCXtBQThBNUE4NS01OTJCLTQzNTctQkM2MC1FMEU5MUUwMjZB
RjZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QUE4QTVBODUtNTky
Qi00MzU3LUJDNjAtRTBFOTFFMDI2QUY2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2lu
MzINCi0JCXtBQThBNUE4NS01OTJCLTQzNTctQkM2MC1FMEU5MUUwMjZBRjZ9LlByb2R1Y3Rpb258
V2luMzIuQWN0aXZlQ2ZnID0gUHJvZHVjdGlvbnxXaW4zMg0KLQkJe0FBOEE1QTg1LTU5MkItNDM1
Ny1CQzYwLUUwRTkxRTAyNkFGNn0uUHJvZHVjdGlvbnxXaW4zMi5CdWlsZC4wID0gUHJvZHVjdGlv
bnxXaW4zMg0KLQkJe0FBOEE1QTg1LTU5MkItNDM1Ny1CQzYwLUUwRTkxRTAyNkFGNn0uUmVsZWFz
ZV9DYWlyb19DRkxpdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZV9DYWlyb19DRkxpdGV8V2lu
MzINCi0JCXtBQThBNUE4NS01OTJCLTQzNTctQkM2MC1FMEU5MUUwMjZBRjZ9LlJlbGVhc2VfQ2Fp
cm9fQ0ZMaXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMg0KLQkJ
e0FBOEE1QTg1LTU5MkItNDM1Ny1CQzYwLUUwRTkxRTAyNkFGNn0uUmVsZWFzZXxXaW4zMi5BY3Rp
dmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QUE4QTVBODUtNTkyQi00MzU3LUJDNjAtRTBFOTFF
MDI2QUY2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCUVuZEdsb2Jh
bFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRp
b24NCi0JCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KLQlFbmRHbG9iYWxTZWN0aW9uDQotRW5k
R2xvYmFsDQor77u/CitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3Jt
YXQgVmVyc2lvbiA5LjAwCisjIFZpc3VhbCBTdHVkaW8gMjAwNQorUHJvamVjdCgiezhCQzlDRUI4
LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJXVEZHZW5lcmF0ZWQiLCAiV1RGR2Vu
ZXJhdGVkLnZjcHJvaiIsICJ7NUFFNUY1RTQtNzgyRC00RjYzLUI0RDctMzk3N0I1MkI5OTUwfSIK
K0VuZFByb2plY3QKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5
NDJ9IikgPSAiV1RGIiwgIldURi52Y3Byb2oiLCAie0FBOEE1QTg1LTU5MkItNDM1Ny1CQzYwLUUw
RTkxRTAyNkFGNn0iCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0
UHJvamVjdAorCQl7NUFFNUY1RTQtNzgyRC00RjYzLUI0RDctMzk3N0I1MkI5OTUwfSA9IHs1QUU1
RjVFNC03ODJELTRGNjMtQjRENy0zOTc3QjUyQjk5NTB9CisJRW5kUHJvamVjdFNlY3Rpb24KK0Vu
ZFByb2plY3QKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxh
dGZvcm1zKSA9IHByZVNvbHV0aW9uCisJCURlYnVnX0FsbHxXaW4zMiA9IERlYnVnX0FsbHxXaW4z
MgorCQlEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIgPSBEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIK
KwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMgorCQlQcm9kdWN0aW9ufFdpbjMyID0gUHJvZHVj
dGlvbnxXaW4zMgorCQlSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiA9IFJlbGVhc2VfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyCisJCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFs
U2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0g
cG9zdFNvbHV0aW9uCisJCXs1QUU1RjVFNC03ODJELTRGNjMtQjRENy0zOTc3QjUyQjk5NTB9LkRl
YnVnX0FsbHxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z19BbGx8V2luMzIKKwkJezVBRTVGNUU0LTc4
MkQtNEY2My1CNEQ3LTM5NzdCNTJCOTk1MH0uRGVidWdfQWxsfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1
Z19BbGx8V2luMzIKKwkJezVBRTVGNUU0LTc4MkQtNEY2My1CNEQ3LTM5NzdCNTJCOTk1MH0uRGVi
dWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnX0NhaXJvX0NGTGl0ZXxXaW4z
MgorCQl7NUFFNUY1RTQtNzgyRC00RjYzLUI0RDctMzk3N0I1MkI5OTUwfS5EZWJ1Z19DYWlyb19D
RkxpdGV8V2luMzIuQnVpbGQuMCA9IERlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMgorCQl7NUFFNUY1
RTQtNzgyRC00RjYzLUI0RDctMzk3N0I1MkI5OTUwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBE
ZWJ1Z3xXaW4zMgorCQl7NUFFNUY1RTQtNzgyRC00RjYzLUI0RDctMzk3N0I1MkI5OTUwfS5EZWJ1
Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJezVBRTVGNUU0LTc4MkQtNEY2My1CNEQ3
LTM5NzdCNTJCOTk1MH0uUHJvZHVjdGlvbnxXaW4zMi5BY3RpdmVDZmcgPSBQcm9kdWN0aW9ufFdp
bjMyCisJCXs1QUU1RjVFNC03ODJELTRGNjMtQjRENy0zOTc3QjUyQjk5NTB9LlByb2R1Y3Rpb258
V2luMzIuQnVpbGQuMCA9IFByb2R1Y3Rpb258V2luMzIKKwkJezVBRTVGNUU0LTc4MkQtNEY2My1C
NEQ3LTM5NzdCNTJCOTk1MH0uUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIuQWN0aXZlQ2ZnID0g
UmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIKKwkJezVBRTVGNUU0LTc4MkQtNEY2My1CNEQ3LTM5
NzdCNTJCOTk1MH0uUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2Vf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyCisJCXs1QUU1RjVFNC03ODJELTRGNjMtQjRENy0zOTc3QjUyQjk5
NTB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7NUFFNUY1RTQt
NzgyRC00RjYzLUI0RDctMzk3N0I1MkI5OTUwfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxl
YXNlfFdpbjMyCisJCXtBQThBNUE4NS01OTJCLTQzNTctQkM2MC1FMEU5MUUwMjZBRjZ9LkRlYnVn
X0FsbHxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z19BbGx8V2luMzIKKwkJe0FBOEE1QTg1LTU5MkIt
NDM1Ny1CQzYwLUUwRTkxRTAyNkFGNn0uRGVidWdfQWxsfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z19B
bGx8V2luMzIKKwkJe0FBOEE1QTg1LTU5MkItNDM1Ny1CQzYwLUUwRTkxRTAyNkFGNn0uRGVidWdf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMgor
CQl7QUE4QTVBODUtNTkyQi00MzU3LUJDNjAtRTBFOTFFMDI2QUY2fS5EZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIuQnVpbGQuMCA9IERlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMgorCQl7QUE4QTVBODUt
NTkyQi00MzU3LUJDNjAtRTBFOTFFMDI2QUY2fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1
Z3xXaW4zMgorCQl7QUE4QTVBODUtNTkyQi00MzU3LUJDNjAtRTBFOTFFMDI2QUY2fS5EZWJ1Z3xX
aW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0FBOEE1QTg1LTU5MkItNDM1Ny1CQzYwLUUw
RTkxRTAyNkFGNn0uUHJvZHVjdGlvbnxXaW4zMi5BY3RpdmVDZmcgPSBQcm9kdWN0aW9ufFdpbjMy
CisJCXtBQThBNUE4NS01OTJCLTQzNTctQkM2MC1FMEU5MUUwMjZBRjZ9LlByb2R1Y3Rpb258V2lu
MzIuQnVpbGQuMCA9IFByb2R1Y3Rpb258V2luMzIKKwkJe0FBOEE1QTg1LTU5MkItNDM1Ny1CQzYw
LUUwRTkxRTAyNkFGNn0uUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVs
ZWFzZV9DYWlyb19DRkxpdGV8V2luMzIKKwkJe0FBOEE1QTg1LTU5MkItNDM1Ny1CQzYwLUUwRTkx
RTAyNkFGNn0uUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2VfQ2Fp
cm9fQ0ZMaXRlfFdpbjMyCisJCXtBQThBNUE4NS01OTJCLTQzNTctQkM2MC1FMEU5MUUwMjZBRjZ9
LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7QUE4QTVBODUtNTky
Qi00MzU3LUJDNjAtRTBFOTFFMDI2QUY2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNl
fFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0
aWVzKSA9IHByZVNvbHV0aW9uCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQorCUVuZEdsb2Jh
bFNlY3Rpb24KK0VuZEdsb2JhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ29uZmlndXJh
dGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCAxNmNlMDBlLi5hMmM3NjA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZwpAQCAtMTE2LDYgKzExNiw3IEBAIEVOQUJMRV9RVU9UQSA9IDsKIEVOQUJMRV9SRUdJ
U1RFUl9QUk9UT0NPTF9IQU5ETEVSID0gOwogRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
ID0gRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FOwogRU5BQkxFX1NDUklQVEVEX1NQRUVD
SCA9IDsKK0VOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVggPSA7CiBFTkFCTEVfU0hBRE9XX0RPTSA9
IDsKIEVOQUJMRV9TSEFSRURfV09SS0VSUyA9IEVOQUJMRV9TSEFSRURfV09SS0VSUzsKIEVOQUJM
RV9TUUxfREFUQUJBU0UgPSBFTkFCTEVfU1FMX0RBVEFCQVNFOwpAQCAtMTQwLDQgKzE0MSw0IEBA
IEVOQUJMRV9XSURHRVRfUkVHSU9OX21hY29zeCA9IEVOQUJMRV9XSURHRVRfUkVHSU9OOwogRU5B
QkxFX1dPUktFUlMgPSBFTkFCTEVfV09SS0VSUzsKIEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7
CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUND
RUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05fQVBJKSAkKEVOQUJMRV9CTE9C
KSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxF
X0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0VYQ0xVU0lPTlMpICQoRU5B
QkxFX0NTU19GSUxURVJTKSAkKEVOQUJMRV9DU1NfSElFUkFSQ0hJRVMpICQoRU5BQkxFX0NTU19J
TUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxF
X0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX1NUSUNLWV9Q
T1NJVElPTikgJChFTkFCTEVfQ1NTX1ZBUklBQkxFUykgJChFTkFCTEVfQ1NTM19GTEVYQk9YKSAk
KEVOQUJMRV9DU1MzX1RFWFRfREVDT1JBVElPTikgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5E
TEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVO
VCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5U
KSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RJQUxPR19FTEVNRU5UKSAk
KEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAkKEVOQUJMRV9GSUxFX1NZU1RFTSkgJChFTkFCTEVf
RklMVEVSUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5B
QkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05E
QVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFC
QVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQo
RU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChF
TkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRI
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJF
RklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9MSU5LX1BSRUZF
VENIKSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9N
RURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVSX0VM
RU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01VVEFU
SU9OX09CU0VSVkVSUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJ
QklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQo
RU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVIpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00p
ICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxF
X1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElO
R1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJM
RV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAk
KEVOQUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFD
SykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tF
VFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dJREdFVF9SRUdJT04pICQoRU5BQkxF
X1dPUktFUlMpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0Rf
UkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1B
VElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVO
QUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJM
RV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NTU19ISUVS
QVJDSElFUykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1B
R0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJT
KSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9DU1NfVkFSSUFCTEVTKSAk
KEVOQUJMRV9DU1MzX0ZMRVhCT1gpICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVO
QUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAk
KEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAk
KEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChF
TkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxF
X0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkg
JChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJR0hfRFBJ
X0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJBTUVfU0VBTUxFU1Mp
ICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1NQRUVDSCkgJChFTkFC
TEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQo
RU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJM
RV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElP
TlMpICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVO
QUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElT
VElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01J
Q1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OT1RJRklDQVRJ
T05TKSAkKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QUk9HUkVTU19FTEVN
RU5UKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVHSVNURVJfUFJPVE9DT0xfSEFORExFUikg
JChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1NDUklQVEVEX1NQRUVD
SCkgJChFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVO
QUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlM
RV9TQ09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAk
KEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVEVY
VF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFC
TEVfVU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQo
RU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAk
KEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XSURHRVRfUkVHSU9OKSAkKEVOQUJMRV9XT1JL
RVJTKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQ
cm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
YW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjMyNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuY3Bw
CkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkg
b2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5m
LnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworLy8jaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuaCIKKworI2luY2x1
ZGUgPFFDb3JlQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPFFEaXI+
CisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UUZpbGVJbmZvPgorI2luY2x1ZGUgPFFQcm9j
ZXNzPgorI2luY2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z3Jw
Lmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKK1NhbmRib3hFbnZp
cm9ubWVudEhhbmRsZXJRdDo6U2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0KFFTdHJpbmcgY2hy
b290RGlyKQoreworICAgIHNhbmRib3hSb290ID0gY2hyb290RGlyOworICAgIGhvbWVEaXJlY3Rv
cnkgPSBRTGF0aW4xU3RyaW5nKCIvaG9tZS9ub2JvZHkiKTsKKworICAgIGRldmljZXMgPDwgUUxh
dGluMVN0cmluZygiL2Rldi91cmFuZG9tIikKKyAgICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmco
Ii9kZXYvcmFuZG9tIik7CisgICAgZGlyZWN0b3JpZXNUb0JlQmluZGVkIDw8IFFMYXRpbjFTdHJp
bmcoIi9wcm9jLyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmco
Ii9ydW4vc2htLyIpOworICAgIGZpbGVzVG9CZUxpbmtlZCA8PCBRTGF0aW4xU3RyaW5nKCIvZXRj
L2xkLnNvLmNhY2hlIikKKyAgICAgICAgICAgICAgICAgICAgPDwgUUxhdGluMVN0cmluZygiL2V0
Yy9sZC5zby5jb25mIikKKyAgICAgICAgICAgICAgICAgICAgPDwgUUxhdGluMVN0cmluZygiL3Zh
ci9saWIvZGJ1cy9tYWNoaW5lLWlkIik7CisgICAgZGlyZWN0b3JpZXNUb0JlTGlua2VkRnJvbUhv
bWUgPDwgUUxhdGluMVN0cmluZygiLy5mb250Y29uZmlnLyIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmcoIi8ubG9jYWwvc2hhcmUvTm9raWEvIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgUUxhdGluMVN0cmluZygiLy5jYWNoZS9O
b2tpYS8iKTsKKyAgICBkaXJlY3Rvcmllc1RvQmVMaW5rZWQgPDwgUUxhdGluMVN0cmluZygiL2V0
Yy9sZC5zby5jb25mLmQiKQorICAgICAgICAgICAgICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmco
Ii91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvZ2NvbnYiKQorICAgICAgICAgICAgICAgICAgICAg
IDw8IFFMYXRpbjFTdHJpbmcoIi91c3Ivc2hhcmUvZm9udHMiKQorICAgICAgICAgICAgICAgICAg
ICAgIDw8IFFDb3JlQXBwbGljYXRpb246OmxpYnJhcnlQYXRocygpOworfQorCit2b2lkIFNhbmRi
b3hFbnZpcm9ubWVudEhhbmRsZXJRdDo6Y3JlYXRlRGV2aWNlRmlsZXMoKQoreworICAgIGlmICgh
UURpcigpLm1rcGF0aChzYW5kYm94Um9vdCArIFFMYXRpbjFTdHJpbmcoIi9kZXYvIikpKQorICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IGNyZWF0aW5nIC9kZXYgZGlyZWN0b3J5LiAl
c1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGV2aWNl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7CisgICAgICAgIGlm
IChzdGF0KGRldmljZXMuYXQoaSkudG9Mb2NhbDhCaXQoKS5kYXRhKCksICZzdGF0dXMpICE9IC0x
KSB7CisgICAgICAgICAgICBkZXZfdCBkZXYgPSBzdGF0dXMuc3RfcmRldjsKKyAgICAgICAgICAg
IG1rbm9kKChzYW5kYm94Um9vdCArIGRldmljZXMuYXQoaSkpLnRvTG9jYWw4Qml0KCkuZGF0YSgp
LAorICAgICAgICAgICAgICAgICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdS
UCB8IFNfSVdHUlAgfCBTX0lST1RIIHwgU19JV09USCwgbWFrZWRldihtYWpvcihkZXYpLCBtaW5v
cihkZXYpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBTYW5kYm94RW52aXJvbm1lbnRI
YW5kbGVyUXQ6OmJpbmRTYW5kYm94RGlyZWN0b3JpZXMoKQoreworICAgIGlmICghUURpcigpLm1r
cGF0aChzYW5kYm94Um9vdCkpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkgY3Jl
YXRpbmcgJXMuICVzXG4iLCBzYW5kYm94Um9vdC50b0xvY2FsOEJpdCgpLmRhdGEoKSwgc3RyZXJy
b3IoZXJybm8pKTsKKworICAgIC8vIE1vdW50aW5nIHRoZSBuZWVkZWQgc3lzdGVtIGRpcmVjdG9y
aWVzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlyZWN0b3JpZXNUb0JlQmluZGVkLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFFTdHJpbmcgc2FuZGJveFBhdGggPSBzYW5kYm94Um9vdCArIGRp
cmVjdG9yaWVzVG9CZUJpbmRlZC5hdChpKTsKKyAgICAgICAgaWYgKCFRRGlyKHNhbmRib3hQYXRo
KS5leGlzdHMoKSkKKyAgICAgICAgICAgIFFEaXIoKS5ta3BhdGgoc2FuZGJveFBhdGgpOworICAg
ICAgICBpZiAobW91bnQoZGlyZWN0b3JpZXNUb0JlQmluZGVkLmF0KGkpLnRvTG9jYWw4Qml0KCku
ZGF0YSgpLCBzYW5kYm94UGF0aC50b0xvY2FsOEJpdCgpLmRhdGEoKSwgIiIsIE1TX0JJTkQgfCBN
U19SRUMgfCBNU19NT1ZFLCAiIikgPT0gLTEpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkVycm9yIGJ5IG1vdW50aW5nICVzLiAlc1xuIiwgKHNhbmRib3hSb290ICsgZGlyZWN0b3JpZXNU
b0JlQmluZGVkLmF0KGkpKS50b0xvY2FsOEJpdCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBTYW5kYm94RW52aXJvbm1lbnRIYW5k
bGVyUXQ6OmFkZE5vYm9keVVzZXIoKQoreworICAgIFFEaXIoKS5ta3BhdGgoc2FuZGJveFJvb3Qg
KyBRTGF0aW4xU3RyaW5nKCIvZXRjIikpOworICAgIFFGaWxlIHBhc3N3ZChzYW5kYm94Um9vdCAr
IFFMYXRpbjFTdHJpbmcoIi9ldGMvcGFzc3dkIikpOworICAgIHBhc3N3ZC5vcGVuKFFJT0Rldmlj
ZTo6V3JpdGVPbmx5KTsKKyAgICBzdHJ1Y3QgcGFzc3dkKiBub2JvZHlVc2VyID0gZ2V0cHduYW0o
Im5vYm9keSIpOworICAgIFFTdHJpbmcgcGFzc3dvcmRDb250ZW50ID0gUUxhdGluMVN0cmluZyhu
b2JvZHlVc2VyLT5wd19uYW1lKSArIFFMYXRpbjFDaGFyKCc6JykgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUUxhdGluMVN0cmluZyhub2JvZHlVc2VyLT5wd19wYXNzd2QpICsgUUxh
dGluMUNoYXIoJzonKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nOjpu
dW1iZXIobm9ib2R5VXNlci0+cHdfdWlkKSArIFFMYXRpbjFDaGFyKCc6JykgKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUVN0cmluZzo6bnVtYmVyKG5vYm9keVVzZXItPnB3X2dpZCkg
KyBRTGF0aW4xQ2hhcignOicpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFMYXRp
bjFTdHJpbmcobm9ib2R5VXNlci0+cHdfZ2Vjb3MpICsgUUxhdGluMUNoYXIoJzonKSArCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBRTGF0aW4xU3RyaW5nKCIvaG9tZS9ub2JvZHkiKSAr
IFFMYXRpbjFDaGFyKCc6JykgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUxhdGlu
MVN0cmluZyhub2JvZHlVc2VyLT5wd19zaGVsbCk7CisgICAgcGFzc3dkLndyaXRlKHBhc3N3b3Jk
Q29udGVudC50b0xhdGluMSgpKTsKKyAgICBwYXNzd2QuZmx1c2goKTsKKyAgICBwYXNzd2QuY2xv
c2UoKTsKK30KKwordm9pZCBTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQ6OmNyZWF0ZUxpbmso
UVN0cmluZyBzcmMsIFFTdHJpbmcgdGFyZ2V0KQoreworICAgIFFGaWxlSW5mbyBpbmZvKHRhcmdl
dCk7CisgICAgaWYgKCFRRGlyKGluZm8ucGF0aCgpKS5leGlzdHMoKSkKKyAgICAgICAgUURpcigp
Lm1rcGF0aChpbmZvLnBhdGgoKSk7CisgICAgaWYgKGxpbmsoc3JjLnRvTG9jYWw4Qml0KCksIHRh
cmdldC50b0xvY2FsOEJpdCgpKSA9PSAtMSAmJiBlcnJubyAhPSBFRVhJU1QpCisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRXJyb3IgYnkgbGlua2luZyAlczogJXNcbiIsIHNyYy50b0xvY2FsOEJp
dCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBRRmlsZUluZm8gb2xkSW5mbyhzcmMp
OworICAgIGlmIChvbGRJbmZvLmlzU3ltTGluaygpKSB7CisgICAgICAgIFFTdHJpbmcgb2xkUGF0
aCA9IG9sZEluZm8uc3ltTGlua1RhcmdldCgpOworICAgICAgICBRU3RyaW5nIHRhcmdldFBhdGgg
PSBzYW5kYm94Um9vdCArIG9sZFBhdGg7CisgICAgICAgIGNyZWF0ZUxpbmsob2xkUGF0aCwgdGFy
Z2V0UGF0aCk7CisgICAgfQorfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdDo6
bGlua0RpcmVjdG9yeShRU3RyaW5nIHNvdXJjZUZvbGRlciwgUVN0cmluZyBkZXN0Rm9sZGVyKQor
eworICAgIFFEaXIgc291cmNlRGlyKHNvdXJjZUZvbGRlcik7CisgICAgaWYgKCFzb3VyY2VEaXIu
ZXhpc3RzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFEaXIgZGVzdERpcihkZXN0Rm9sZGVy
KTsKKyAgICBpZiAoIWRlc3REaXIuZXhpc3RzKCkpCisgICAgICAgIGRlc3REaXIubWtkaXIoZGVz
dEZvbGRlcik7CisKKyAgICBRU3RyaW5nTGlzdCBmaWxlcyA9IHNvdXJjZURpci5lbnRyeUxpc3Qo
UURpcjo6RmlsZXMpOworICAgIGZvciAoaW50IGkgPSAwOyBpPCBmaWxlcy5jb3VudCgpOyBpKysp
IHsKKyAgICAgICAgUVN0cmluZyBzcmNOYW1lID0gc291cmNlRm9sZGVyICsgUURpcjo6c2VwYXJh
dG9yKCkgKyBmaWxlc1tpXTsKKyAgICAgICAgUVN0cmluZyBkc3ROYW1lID0gZGVzdEZvbGRlciAr
IFFEaXI6OnNlcGFyYXRvcigpICsgZmlsZXNbaV07CisgICAgICAgIGNyZWF0ZUxpbmsoc3JjTmFt
ZSwgZHN0TmFtZSk7CisgICAgfQorICAgIGZpbGVzLmNsZWFyKCk7CisgICAgZmlsZXMgPSBzb3Vy
Y2VEaXIuZW50cnlMaXN0KFFEaXI6OkFsbERpcnMgfCBRRGlyOjpOb0RvdEFuZERvdERvdCk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGk8IGZpbGVzLmNvdW50KCk7IGkrKykgeworICAgICAgICBRU3Ry
aW5nIHNyY05hbWUgPSBzb3VyY2VGb2xkZXIgKyBRRGlyOjpzZXBhcmF0b3IoKSArIGZpbGVzW2ld
OworICAgICAgICBRU3RyaW5nIGRlc3ROYW1lID0gZGVzdEZvbGRlciArIFFEaXI6OnNlcGFyYXRv
cigpICsgZmlsZXNbaV07CisgICAgICAgIGxpbmtEaXJlY3Rvcnkoc3JjTmFtZSwgZGVzdE5hbWUp
OworICAgIH0KK30KKwordm9pZCBTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQ6OmFkZERlcGVu
ZGVuY2llcyhRU3RyaW5nIGRlcGVuZGVuY3lMaXN0KQoreworICAgIC8vIExpbmsgZGVwZW5kZW5j
aWVzIG9idGFpbmVkIHdpdGggbGRkLgorICAgIFFTdHJpbmdMaXN0IHNwbGl0dGVkTGlzdCA9IGRl
cGVuZGVuY3lMaXN0LnNwbGl0KCc7Jyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcGxpdHRl
ZExpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUVN0cmluZyBzb3VyY2UgPSBzcGxpdHRlZExp
c3QuYXQoaSk7CisgICAgICAgIGlmIChzb3VyY2VbMF0gIT0gJy8nKQorICAgICAgICAgICAgc291
cmNlLmluc2VydCgwLCBRTGF0aW4xQ2hhcignLycpKTsKKyAgICAgICAgY3JlYXRlTGluayhzb3Vy
Y2UsIHNhbmRib3hSb290ICsgc291cmNlKTsKKyAgICB9CisKKyAgICAvLyBMaW5rIHNpbmdsZSBm
aWxlcy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzVG9CZUxpbmtlZC5zaXplKCk7ICsr
aSkKKyAgICAgICAgY3JlYXRlTGluayhmaWxlc1RvQmVMaW5rZWQuYXQoaSksIHNhbmRib3hSb290
ICsgZmlsZXNUb0JlTGlua2VkLmF0KGkpKTsKKworICAgIC8vIExpbmsgdGhlIGRpcmVjdG9yaWVz
IG5vdCBwbGFjZWQgaW4gdXNlcnMgaG9tZS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpcmVj
dG9yaWVzVG9CZUxpbmtlZC5zaXplKCk7ICsraSkKKyAgICAgICAgbGlua0RpcmVjdG9yeShkaXJl
Y3Rvcmllc1RvQmVMaW5rZWQuYXQoaSksIHNhbmRib3hSb290ICsgZGlyZWN0b3JpZXNUb0JlTGlu
a2VkLmF0KGkpKTsKKworICAgIC8vIExpbmsgdGhlIGNhY2hlIGRpcmVjdG9yaWVzIGZyb20gdXNl
cnMgaG9tZS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpcmVjdG9yaWVzVG9CZUxpbmtlZEZy
b21Ib21lLnNpemUoKTsgKytpKSB7CisgICAgICAgIFFTdHJpbmcgcmVhbFBhdGggPSBRRGlyOjpo
b21lUGF0aCgpICsgZGlyZWN0b3JpZXNUb0JlTGlua2VkRnJvbUhvbWUuYXQoaSk7CisgICAgICAg
IFFTdHJpbmcgc2FuZGJveFBhdGggPSBzYW5kYm94Um9vdCArIGhvbWVEaXJlY3RvcnkgKyBkaXJl
Y3Rvcmllc1RvQmVMaW5rZWRGcm9tSG9tZS5hdChpKTsKKyAgICAgICAgaWYgKCFRRGlyKHNhbmRi
b3hQYXRoKS5leGlzdHMoKSkKKyAgICAgICAgICAgIFFEaXIoKS5ta3BhdGgoc2FuZGJveFBhdGgp
OworICAgICAgICBsaW5rRGlyZWN0b3J5KHJlYWxQYXRoLCBzYW5kYm94UGF0aCk7CisgICAgfQor
CisgICAgLy8gTGluayB0aGUgYmluYXJ5IGRpcmVjdG9yaWVzIG9mIFdlYktpdC4KKyAgICBRU3Ry
aW5nIHdlYmtpdEJpbmFyeURpciA9IFFGaWxlSW5mbyhRQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNh
dGlvbkRpclBhdGgoKSkuZGlyKCkucGF0aCgpOworICAgIFFTdHJpbmcgd2ViS2l0QmluYXJ5RGly
SW5TYW5kYm94ID0gc2FuZGJveFJvb3QgKyB3ZWJraXRCaW5hcnlEaXI7CisgICAgaWYgKCFRRGly
KHdlYktpdEJpbmFyeURpckluU2FuZGJveCkuZXhpc3RzKCkpCisgICAgICAgIFFEaXIoKS5ta3Bh
dGgod2ViS2l0QmluYXJ5RGlySW5TYW5kYm94KTsKKyAgICBsaW5rRGlyZWN0b3J5KHdlYmtpdEJp
bmFyeURpciwgd2ViS2l0QmluYXJ5RGlySW5TYW5kYm94KTsKKworICAgIC8vIC5YYXV0aG9yaXR5
IGZpbGUgc2hvdWxkIGJlIGNvcGllZCBiZWNhdXNlIGl0cyBvd25lciB3aWxsIGNoYW5nZSBidXQg
dGhlIG9yaWdpbmFsCisgICAgLy8gb25lIG11c3Qgbm90IGFsdGVyLgorICAgIFFEaXIoKS5ta2Rp
cihzYW5kYm94Um9vdCArIFFMYXRpbjFTdHJpbmcoIi9ob21lL25vYm9keSIpKTsKKyAgICBpZiAo
IVFGaWxlOjpjb3B5KFFEaXI6OmhvbWVQYXRoKCkgKyBRTGF0aW4xU3RyaW5nKCIvLlhhdXRob3Jp
dHkiKSwgc2FuZGJveFJvb3QgKyBRTGF0aW4xU3RyaW5nKCIvaG9tZS9ub2JvZHkvLlhhdXRob3Jp
dHkiKSkpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29weWluZyAuWGF1dGhvcml0eSBmYWls
ZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVu
dEhhbmRsZXJRdDo6aW5pdGlhbGl6ZVNhbmRib3goUVN0cmluZyBkZXBlbmRlbmN5TGlzdCkKK3sK
KyAgICBhZGROb2JvZHlVc2VyKCk7CisgICAgYWRkRGVwZW5kZW5jaWVzKGRlcGVuZGVuY3lMaXN0
KTsKKyAgICBiaW5kU2FuZGJveERpcmVjdG9yaWVzKCk7CisgICAgY3JlYXRlRGV2aWNlRmlsZXMo
KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBRQ29yZUFw
cGxpY2F0aW9uIGEoYXJnYywgYXJndik7CisgICAgY29uc3QgUVN0cmluZyBzYW5kYm94RGlyZWN0
b3J5ID0gUUxhdGluMVN0cmluZyhnZXRwd3VpZChnZXRwd3VpZChnZXR1aWQoKSktPnB3X3VpZCkt
PnB3X2RpcikgKyBRTGF0aW4xU3RyaW5nKCIvLndrLXNhbmRib3g3NiIpOworICAgIFNhbmRib3hF
bnZpcm9ubWVudEhhbmRsZXJRdCogc2FuZGJveEhhbmRsZXIgPSBuZXcgU2FuZGJveEVudmlyb25t
ZW50SGFuZGxlclF0KHNhbmRib3hEaXJlY3RvcnkpOworICAgIHNhbmRib3hIYW5kbGVyLT5pbml0
aWFsaXplU2FuZGJveChRTGF0aW4xU3RyaW5nKGFyZ3ZbM10pKTsKKworICAgIDo6c2V0Z3JvdXBz
KDAsIDApOworCisgICAgaWYgKDo6Y2hyb290KHNhbmRib3hEaXJlY3RvcnkudG9Mb2NhbDhCaXQo
KS5kYXRhKCkpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2hyb290aW5nIGZh
aWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9
CisgICAgaWYgKDo6Y2hkaXIoIi8iKSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3Qg
Y2hhbmdlIGRpcmVjdG9yeVxuIik7CisKKyAgICBwYXNzd2QqIG5vYm9keSA9IGdldHB3bmFtKCJu
b2JvZHkiKTsKKworICAgIC8vICJOb2JvZHkiIHNob3VsZCBvd24gdGhlIC5YYXV0aG9yaXR5IHRv
IGJlIGFibGUgdG8gcnVuIFggaW5zaWRlIHRoZSBzYW5kYm94LgorICAgIGlmIChjaG93bigiL2hv
bWUvbm9ib2R5Ly5YYXV0aG9yaXR5Iiwgbm9ib2R5LT5wd191aWQsIG5vYm9keS0+cHdfZ2lkKSA9
PSAtMSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaG93biAuWGF1dGhvcml0eSBmYWlsZWQ6
ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBzZXRlbnYoIlhBVVRIT1JJVFkiLCAiL2hv
bWUvbm9ib2R5Ly5YYXV0aG9yaXR5IiwgMSk7CisgICAgc2V0ZW52KCJIT01FIiwgIi9ob21lL25v
Ym9keS8iLCAxKTsKKworICAgIC8vIERyb3AgYWxsIHByaXZpbGVnZXMuCisgICAgOjpzZXRnaWQo
bm9ib2R5LT5wd19naWQpOworICAgIDo6c2V0dWlkKG5vYm9keS0+cHdfdWlkKTsKKyAgICA6OnVt
YXNrKDApOworCisgICAgLy8gQ2FsbGluZyBXZWJQcm9jZXNzIHdpdGggbm9ib2R5IHJpZ2h0cy4K
KyAgICBRU3RyaW5nIGNvbW1hbmRMaW5lID0gUUxhdGluMVN0cmluZygiJTEgJTIiKTsKKyAgICBj
b21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLmFyZyhRTGF0aW4xU3RyaW5nKGFyZ3ZbMV0pKTsKKyAg
ICBjb21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLmFyZyhRTGF0aW4xU3RyaW5nKGFyZ3ZbMl0pKTsK
KworICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNzID0gbmV3IFFQcm9jZXNzKCk7CisgICAgd2ViUHJv
Y2Vzcy0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFubmVscyk7
CisgICAgd2ViUHJvY2Vzcy0+c3RhcnQoY29tbWFuZExpbmUpOworCisgICAgaWYgKCF3ZWJQcm9j
ZXNzLT53YWl0Rm9yU3RhcnRlZCgpKSB7CisgICAgICAgIHFEZWJ1ZygpIDw8ICJGYWlsZWQgdG8g
c3RhcnQiIDw8IGNvbW1hbmRMaW5lOworICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICB9
CisKKyAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlByb2Nlc3MtPnBpZCgpLCAxMCk7
CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQ
cm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdC5oIGIvU291cmNlL1dlYktpdDIvU2Fu
ZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50SGFuZGxlclF0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmODAzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdC5oCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVn
ZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNhbmRib3hFbnZpcm9ubWVu
dEhhbmRsZXJRdF9oCisjZGVmaW5lIFNhbmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdF9oCisKKyNp
bmNsdWRlIDxRU3RyaW5nPgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorCitjbGFzcyBTYW5kYm94
RW52aXJvbm1lbnRIYW5kbGVyUXQgeworCitwdWJsaWM6CisgICAgUVN0cmluZ0xpc3QgZGV2aWNl
czsKKyAgICBRU3RyaW5nTGlzdCBkaXJlY3Rvcmllc1RvQmVCaW5kZWQ7CisgICAgUVN0cmluZ0xp
c3QgZGlyZWN0b3JpZXNUb0JlTGlua2VkRnJvbUhvbWU7CisgICAgUVN0cmluZ0xpc3QgZmlsZXNU
b0JlTGlua2VkOworICAgIFFTdHJpbmdMaXN0IGRpcmVjdG9yaWVzVG9CZUxpbmtlZDsKKyAgICBR
U3RyaW5nIGhvbWVEaXJlY3Rvcnk7CisgICAgUVN0cmluZyBzYW5kYm94Um9vdDsKKworICAgIFNh
bmRib3hFbnZpcm9ubWVudEhhbmRsZXJRdChRU3RyaW5nKTsKKworICAgIHZvaWQgYWRkRGVwZW5k
ZW5jaWVzKFFTdHJpbmcpOworICAgIHZvaWQgYWRkTm9ib2R5VXNlcigpOworICAgIGludCBiaW5k
U2FuZGJveERpcmVjdG9yaWVzKCk7CisgICAgdm9pZCBjcmVhdGVEZXZpY2VGaWxlcygpOworICAg
IHZvaWQgY3JlYXRlTGluayhRU3RyaW5nLCBRU3RyaW5nKTsKKyAgICB2b2lkIGluaXRpYWxpemVT
YW5kYm94KFFTdHJpbmcpOworICAgIHZvaWQgbGlua0RpcmVjdG9yeShRU3RyaW5nLCBRU3RyaW5n
KTsKK307CisKKyNlbmRpZiAvLyBTYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveFByb2Nlc3MucHJvIGIv
U291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveFByb2Nlc3MucHJvCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OGQ3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94UHJvY2Vzcy5wcm8KQEAgLTAsMCAr
MSwyMyBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMKKyMgUHJvamVjdCBjcmVhdGVkIGJ5IFF0Q3JlYXRvciAyMDEyLTA3LTI0VDEwOjAxOjMz
CisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CitURU1QTEFURSA9IGFwcAorCitUQVJHRVQgPSBTVUlEU2FuZGJveEhlbHBlcgorREVTVERJUiA9
ICQke1JPT1RfQlVJTERfRElSfS9iaW4KKworU09VUkNFUyArPSBTYW5kYm94RW52aXJvbm1lbnRI
YW5kbGVyUXQuY3BwCisKK0hFQURFUlMgKz0gXAorICAgIFNhbmRib3hFbnZpcm9ubWVudEhhbmRs
ZXJRdC5oCisKK1FUICAgICAgICs9IGNvcmUKK1FUICAgICAgIC09IGd1aQorCitJTlNUQUxMUyAr
PSB0YXJnZXQKKworCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDM3MzM2NTAuLjEzMmI1ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaQpAQCAtMzYsNiArMzYsNyBAQCBIRUFERVJTICs9IFwKICAgICBQbHVnaW5Qcm9jZXNzL1Bs
dWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nl
c3MuaCBcCiAgICAgUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oIFwKKyAgICBT
YW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuaCBcCiAgICAgU2hhcmVk
L0FQSS9jL1dLQmFzZS5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDZXJ0aWZpY2F0ZUluZm8uaCBc
CiAgICAgU2hhcmVkL0FQSS9jL1dLQ29ubmVjdGlvblJlZi5oIFwKQEAgLTM4OCw2ICszODksNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBQbHVnaW5Qcm9jZXNzL3F0L1BsdWdpbkNvbnRyb2xsZXJQcm94
eVF0LmNwcCBcCiAgICAgUGx1Z2luUHJvY2Vzcy9xdC9QbHVnaW5Qcm9jZXNzTWFpblF0LmNwcCBc
CiAgICAgUGx1Z2luUHJvY2Vzcy9xdC9QbHVnaW5Qcm9jZXNzUXQuY3BwIFwKKyAgICBTYW5kYm94
UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRIYW5kbGVyUXQuY3BwIFwKICAgICBTaGFyZWQvQVBJ
L2MvV0tBcnJheS5jcHAgXAogICAgIFNoYXJlZC9BUEkvYy9XS0NlcnRpZmljYXRlSW5mby5jcHAg
XAogICAgIFNoYXJlZC9BUEkvYy9XS0Nvbm5lY3Rpb25SZWYuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQu
Y3BwCmluZGV4IGYwOTlkNjIuLjljMDM5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcApAQCAtNTUs
NiArNTUsMTYgQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNlbmRpZgogCisjaWYgRU5BQkxFKFNV
SURfU0FOREJPWF9MSU5VWCkKKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUg
PFFEaXI+CisjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjZW5kaWYKKwogI2lmIE9TKERBUldJTikKICNpbmNsdWRlIDxtYWNoL21hY2hf
aW5pdC5oPgogI2luY2x1ZGUgPHNlcnZlcnMvYm9vdHN0cmFwLmg+CkBAIC05OCw2ICsxMDgsOTQg
QEAgdm9pZCBRdFdlYlByb2Nlc3M6OnNldHVwQ2hpbGRQcm9jZXNzKCkKICAgICBxcHV0ZW52KCJR
VF9NQUNfRElTQUJMRV9GT1JFR1JPVU5EX0FQUExJQ0FUSU9OX1RSQU5TRk9STSIsIFFCeXRlQXJy
YXkoIjEiKSk7CiAjZW5kaWYKIH0KKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorc3Rh
dGljIHZvaWQgY29sbGVjdERlcGVuY2VkbmllcyhRU3RyaW5nICZkZXBlbmRlbnlMaXN0LCBRU3Ry
aW5nIHByb2Nlc3MsIGNoYXIgcGFyYW1zW10pCit7CisgICAgaW50IHN0YXR1czsKKyAgICBpbnQg
cGlwZWZkWzJdOworCisgICAgaWYgKHBpcGUocGlwZWZkKSkKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJFcnJvciBieSBwaXBpbmc6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgIHN3
aXRjaCAoZm9yaygpKSB7CisgICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJF
cnJvciBieSBmb3JraW5nOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGNsb3NlKHBpcGVmZFsxXSk7IC8vIGNsb3NlIHRoZSB3
cml0ZSBlbmQgb2YgdGhlIHBpcGUgaW4gdGhlIHBhcmVudAorICAgICAgICBGSUxFKiBmaWxlOwor
ICAgICAgICBmaWxlID0gZmRvcGVuKHBpcGVmZFswXSwgInIiKTsKKworICAgICAgICBjaGFyIGJ1
ZmZlclsyMDBdOworICAgICAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwg
ZmlsZSkpIHsKKyAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihidWZmZXIpLTE7CisgICAg
ICAgICAgICAgIGlmIChidWZmZXJbbGVuXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgYnVm
ZmVyW2xlbl0gPSAwOworCisgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmNvbnRhaW5zKFFMYXRp
bjFTdHJpbmcoImxkLWxpbnV4IiksIFF0OjpDYXNlU2Vuc2l0aXZlKSkgeworICAgICAgICAgICAg
ICAgICAgLy8gVGhlIG91dHB1dCBvZiBsZGQgY2FuIGhhdmUgdHdvIGZvcm1hdHM6CisgICAgICAg
ICAgICAgICAgICAvLyAxKSBcdG5hbWVfb2ZfdGhlX2xpYnJhcnkgPT4gcGF0aF9vZl9saWJyYXJ5
IChhZGRyZXNzX29mX3RoZV9saWJhcnkpCisgICAgICAgICAgICAgICAgICAvLyAyKSBwYXRoX29m
X3RoZV9saWJyYXJ5IChhZGRyZXNzX29mX3RoZV9saWJhcnkpCisgICAgICAgICAgICAgICAgICBj
aGFyKiBwYXRoT2ZUaGVMaWJyYXJ5ID0gKGNoYXIqKW1hbGxvYygyMDAgKiBzaXplb2YoY2hhcikp
OworICAgICAgICAgICAgICAgICAgaW50IG51bWJlck9mbWF0Y2hpbmdDaGFyYWN0ZXJzID0gc3Nj
YW5mKGJ1ZmZlciwgIlx0JSpzID0+IC8lcyAlKnNcbiIsIHBhdGhPZlRoZUxpYnJhcnkpOworICAg
ICAgICAgICAgICAgICAgaWYgKCFudW1iZXJPZm1hdGNoaW5nQ2hhcmFjdGVycykKKyAgICAgICAg
ICAgICAgICAgICAgICBudW1iZXJPZm1hdGNoaW5nQ2hhcmFjdGVycyA9IHNzY2FuZihidWZmZXIs
ICJcdC8lcyAlKnNcbiIsIHBhdGhPZlRoZUxpYnJhcnkpOworICAgICAgICAgICAgICAgICAgaWYg
KG51bWJlck9mbWF0Y2hpbmdDaGFyYWN0ZXJzID4gMCkgeworICAgICAgICAgICAgICAgICAgICAg
IGRlcGVuZGVueUxpc3QgKz0gUUxhdGluMVN0cmluZyhwYXRoT2ZUaGVMaWJyYXJ5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICBkZXBlbmRlbnlMaXN0ICs9IFFMYXRpbjFDaGFyKCc7Jyk7CisgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgIFFTdHJpbmcgbGlicmFyeSA9IFFMYXRpbjFTdHJpbmcoYnVmZmVyKTsKKyAgICAgICAgICAg
ICAgICAgICBRU3RyaW5nTGlzdCBkeW5hbWljRGVwZW5kZW5jaWVzOworICAgICAgICAgICAgICAg
ICAgIC8vIFRoZSBsaXN0IG9mIGVtaXJpY2FsbHkgZ2F0aGVyZWQgZGVwZW5kZW5jeSBsaWJyYXJp
ZXMuCisgICAgICAgICAgICAgICAgICAgZHluYW1pY0RlcGVuZGVuY2llcyA8PCBRTGF0aW4xU3Ry
aW5nKCJsaWJjcnlwdG8uc28iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPDwgUUxhdGluMVN0cmluZygibGliZXhwYXQuc28iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgUUxhdGluMVN0cmluZygibGliZm9udGNvbmZpZy5zbyIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBRTGF0aW4xU3RyaW5nKCJs
aWJmcmVldHlwZS5zbyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
PCBRTGF0aW4xU3RyaW5nKCJsaWJuc3NfZG5zLnNvIikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDw8IFFMYXRpbjFTdHJpbmcoImxpYnJlc29sdi5zbyIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBRTGF0aW4xU3RyaW5nKCJsaWJzc2wu
c28iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgUUxhdGluMVN0
cmluZygibGliWHJlbmRlci5zbyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8PCBRTGF0aW4xU3RyaW5nKCJsaWJ4Y2IiKTsKKworICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZHluYW1pY0RlcGVuZGVuY2llcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobGlicmFyeS5jb250YWlucyhkeW5hbWljRGVwZW5kZW5j
aWVzLmF0KGkpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZ01hdGNoZXIg
bWF0Y2hlcihRTGF0aW4xU3RyaW5nKCIvIiksIFF0OjpDYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcGF0aE9mVGhlTGlicmFyeSA9IGxpYnJhcnkubWlk
KG1hdGNoZXIuaW5kZXhJbihsaWJyYXJ5KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocGF0aE9mVGhlTGlicmFyeS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVwZW5kZW55TGlzdCArPSBwYXRoT2ZUaGVMaWJyYXJ5OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlcGVuZGVueUxpc3QgKz0gUUxhdGluMUNoYXIoJzsnKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmICh3YWl0KCZzdGF0dXMpIDw9IDApCisgICAgICAgICAgICB3YXJuKCJXYWl0LiIpOworICAg
ICAgICBlbHNlIGlmIChXSUZTSUdOQUxFRChzdGF0dXMpKQorICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJTaWduYWxlZDogc2lnbmFsICVkXG4iLCBXVEVSTVNJRyhzdGF0dXMpKTsKKyAgICAg
ICAgZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykgJiYgV0VYSVRTVEFUVVMoc3RhdHVzKSkKKyAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXhpdGVkOiBleGl0IHN0YXR1cyAlZFxuIiwgV0VY
SVRTVEFUVVMoc3RhdHVzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMDoKKyAgICAgICAg
Y2xvc2UocGlwZWZkWzBdKTsKKworICAgICAgICBkdXAyKHBpcGVmZFsxXSwgMSk7IC8vIHNlbmQg
c3Rkb3V0IHRvIHRoZSBwaXBlCisgICAgICAgIGR1cDIocGlwZWZkWzFdLCAyKTsgLy8gc2VuZCBz
dGRlcnIgdG8gdGhlIHBpcGUKKworICAgICAgICBpZiAocHJvY2Vzcy5jb250YWlucyhRTGF0aW4x
U3RyaW5nKCJsZC1saW51eCIpLCBRdDo6Q2FzZUluc2Vuc2l0aXZlKSkgeworICAgICAgICAgICAg
Ly8gVXNpbmcgbGRkIG1lYW5zIHRoYXQgd2UgY2FsbCBsZC1saW51eCB3aGlsZSBMRF9UUkFDRV9M
T0FERURfT0JKRUNUUyBpcyBzZXQuCisgICAgICAgICAgICAvLyBUaGlzIHdheSB0aGUgInByb2Nl
c3MiIHdvbid0IHJ1biBvbmx5IGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBiZSBkZXRlcm1pbmVkLgor
ICAgICAgICAgICAgc2V0ZW52KCJMRF9UUkFDRV9MT0FERURfT0JKRUNUUyIsICJ5ZXMiLCAxKTsK
KyAgICAgICAgICAgIGV4ZWNsKHByb2Nlc3MudG9Mb2NhbDhCaXQoKSwgcHJvY2Vzcy50b0xvY2Fs
OEJpdCgpLCBwYXJhbXMsIChjaGFyICopMCk7CisgICAgICAgICAgICB1bnNldGVudigiTERfVFJB
Q0VfTE9BREVEX09CSkVDVFMiKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBleGVjbChw
cm9jZXNzLnRvTG9jYWw4Qml0KCksIHByb2Nlc3MudG9Mb2NhbDhCaXQoKSwgcGFyYW1zLCAoY2hh
ciAqKTApOworICAgICAgICBjbG9zZShwaXBlZmRbMV0pOyAvLyB0aGlzIGRlc2NyaXB0b3IgaXMg
bm8gbG9uZ2VyIG5lZWRlZAorICAgIH0KK30KKyNlbmRpZgogCiB2b2lkIFByb2Nlc3NMYXVuY2hl
cjo6bGF1bmNoUHJvY2VzcygpCiB7CkBAIC0xNDgsMzUgKzI0Niw2MiBAQCB2b2lkIFByb2Nlc3NM
YXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCiAgICAgY29tbWFuZExpbmUgPSBjb21tYW5kTGluZS5h
cmcoc29ja2V0c1swXSk7CiAjZW5kaWYKIAotICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNzID0gbmV3
IFF0V2ViUHJvY2VzcygpOwotICAgIHdlYlByb2Nlc3MtPnNldFByb2Nlc3NDaGFubmVsTW9kZShR
UHJvY2Vzczo6Rm9yd2FyZGVkQ2hhbm5lbHMpOwotICAgIHdlYlByb2Nlc3MtPnN0YXJ0KGNvbW1h
bmRMaW5lKTsKKyAgICBRUHJvY2Vzcyogd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKKyNpZiBFTkFC
TEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIFFTdHJpbmcgZGVwZW5kZW5jeUxpc3Q7CisgICAg
Ly8gVGhlcmUgYXJlIHR3byB3YXkgaG93IHdlIGdhdGhlciB0aGUgZGVwZW5kZW5jaWVzOgorICAg
IC8vIDEpIFVzaW5nIGxkZCB0byBvYnRhaW4gdGhlIHN0YXRpYyBkZXBlbmRlbmNpZXMgb2YgUXRX
ZWJQcm9jZXNzLgorICAgIC8vIDIpIFVzaW5nIGEgZGV2ZWxlcGVyIGRlZmluZWQgbGlzdCBvZiBk
eW5hbWljIGRlcGVuZGVuY2llcyAoaXQncyBnYXRoZXJlZCBlbXBpcmljYWwgd2F5KS4KKyAgICBj
b2xsZWN0RGVwZW5jZWRuaWVzKGRlcGVuZGVuY3lMaXN0LCBRTGF0aW4xU3RyaW5nKCIvbGliNjQv
bGQtbGludXgteDg2LTY0LnNvLjIiKSwgKGNoYXIqKShleGVjdXRhYmxlUGF0aE9mV2ViUHJvY2Vz
cygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBjb2xsZWN0RGVwZW5jZWRuaWVzKGRlcGVuZGVuY3lM
aXN0LCBRTGF0aW4xU3RyaW5nKCIvc2Jpbi9sZGNvbmZpZyIpLCAoY2hhciopKCItcCIpKTsKKwor
ICAgIFFTdHJpbmcgc2FuZGJveENvbW1hbmRMaW5lID0gUUxhdGluMVN0cmluZygiJTEgJTIgJTMg
JTQiKTsKKyAgICBzYW5kYm94Q29tbWFuZExpbmUgPSBzYW5kYm94Q29tbWFuZExpbmUuYXJnKFFD
b3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9uRGlyUGF0aCgpICsgUUxhdGluMVN0cmluZygiL1NV
SURTYW5kYm94SGVscGVyIikpOworICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21t
YW5kTGluZS5hcmcoZXhlY3V0YWJsZVBhdGhPZldlYlByb2Nlc3MoKSk7CisgICAgc2FuZGJveENv
bW1hbmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKKyAgICBzYW5k
Ym94Q29tbWFuZExpbmUgPSBzYW5kYm94Q29tbWFuZExpbmUuYXJnKGRlcGVuZGVuY3lMaXN0KTsK
KworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXIgPSBuZXcgUVByb2Nlc3MoKTsKKyAgICB3ZWJQ
cm9jZXNzT3JTVUlESGVscGVyLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZvcndh
cmRlZENoYW5uZWxzKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChzYW5kYm94
Q29tbWFuZExpbmUpOworI2Vsc2UKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyID0gbmV3IFF0
V2ViUHJvY2VzcygpOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnNldFByb2Nlc3NDaGFu
bmVsTW9kZShRUHJvY2Vzczo6TWVyZ2VkQ2hhbm5lbHMpOworICAgIHdlYlByb2Nlc3NPclNVSURI
ZWxwZXItPnN0YXJ0KGNvbW1hbmRMaW5lKTsKKyNlbmRpZgogCiAjaWYgIU9TKERBUldJTikKICAg
ICAvLyBEb24ndCBleHBvc2UgdGhlIHdlYiBzb2NrZXQgdG8gcG9zc2libGUgZnV0dXJlIHdlYiBw
cm9jZXNzZXMKICAgICB3aGlsZSAoZmNudGwoc29ja2V0c1swXSwgRl9TRVRGRCwgRkRfQ0xPRVhF
QykgPT0gLTEpIHsKICAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAg
ICAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotICAgIGlmICghd2ViUHJvY2Vzcy0+d2Fp
dEZvclN0YXJ0ZWQoKSkgeworICAgIGlmICghd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZv
clN0YXJ0ZWQoKSkgewogICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8PCBj
b21tYW5kTGluZTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjaWYgT1MoREFSV0lO
KQogICAgICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBjb25uZWN0
b3IpOwogICAgICAgICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgY29ubmVj
dG9yLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwogI2VuZGlmCi0gICAgICAgIGRlbGV0
ZSB3ZWJQcm9jZXNzOworICAgICAgICBkZWxldGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgd2Vi
UHJvY2Vzcy0+cGlkKCksIDEwKTsKKyAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlBy
b2Nlc3NPclNVSURIZWxwZXItPnBpZCgpLCAxMCk7CisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9Y
X0xJTlVYKQorICAgIGlmICghd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZvckZpbmlzaGVk
KCkpIHsKKyAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKIAotICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmlu
ZCgmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRo
aXMsIHdlYlByb2Nlc3MsIGNvbm5lY3RvcikpOworICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0
Y2goYmluZCgmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nl
c3MsIHRoaXMsIHdlYlByb2Nlc3NPclNVSURIZWxwZXIsIGNvbm5lY3RvcikpOwogfQogCiB2b2lk
IFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDkx
NjY4NzQuLmE3MDFlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC02MSw3ICs2MSw4IEBAIElOQ0xVREVQ
QVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlIFwKICAgICAkJFNP
VVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAgICQk
U09VUkNFX0RJUi9XZWJQcm9jZXNzL3F0IFwKLSAgICAkJFNPVVJDRV9ESVIvUGx1Z2luUHJvY2Vz
cworICAgICQkU09VUkNFX0RJUi9QbHVnaW5Qcm9jZXNzIFwKKyAgICAkJFNPVVJDRV9ESVIvU2Fu
ZGJveFByb2Nlc3MKIAogIyBUaGUgV2ViS2l0MiBRdCBBUElzIGRlcGVuZCBvbiBxd2Via2l0Z2xv
YmFsLmgsIHdoaWNoIGxpdmVzIGluIFdlYktpdAogSU5DTFVERVBBVEggKz0gJCR7Uk9PVF9XRUJL
SVRfRElSfS9Tb3VyY2UvV2ViS2l0L3F0L0FwaQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCA2NjEyOWQzLi5m
Mzg5OTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpAQCAtOSw2ICs5LDcgQEAgVEVNUExBVEUgPSBzdWJkaXJz
CiBkZXJpdmVkX3NvdXJjZXMuZmlsZSA9IERlcml2ZWRTb3VyY2VzLnByaQogdGFyZ2V0LmZpbGUg
PSBUYXJnZXQucHJpCiAKLVNVQkRJUlMgKz0gZGVyaXZlZF9zb3VyY2VzIHRhcmdldAorU1VCRElS
UyArPSBkZXJpdmVkX3NvdXJjZXMgdGFyZ2V0IFwKKyAgICBTYW5kYm94UHJvY2VzcwogCiBhZGRT
dHJpY3RTdWJkaXJPcmRlckJldHdlZW4oZGVyaXZlZF9zb3VyY2VzLCB0YXJnZXQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAppbmRleCAy
OGIyMDBkLi4zMzFjM2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0
L1dlYlByb2Nlc3NNYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQv
V2ViUHJvY2Vzc01haW5RdC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCisKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAKICNpbmNsdWRlIDxRR3VpQXBw
bGljYXRpb24+CkBAIC0zNCw3ICszNSwxMyBAQAogI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgogI2lu
Y2x1ZGUgPFFVcmw+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8ZGly
ZW50Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxw
d2QuaD4KICNpbmNsdWRlIDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggYTE4MWQ4NS4uYTg3NjliNCAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMTE3LDYgKzExNyw3IEBAIG15ICgK
ICAgICAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAgICAgJHNxbERhdGFiYXNlU3VwcG9ydCwKICAg
ICAkc3R5bGVTY29wZWRTdXBwb3J0LAorICAgICRzdWlkTGludXhTYW5kYm94LAogICAgICRzdmdE
T01PYmpDQmluZGluZ3NTdXBwb3J0LAogICAgICRzdmdGb250c1N1cHBvcnQsCiAgICAgJHN2Z1N1
cHBvcnQsCkBAIC0zNjMsNiArMzY0LDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9u
ID0+ICJzdHlsZS1zY29wZWQiLCBkZXNjID0+ICJUb2dnbGUgU3R5bGUgU2NvcGVkIHN1cHBvcnQi
LAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1RZTEVfU0NPUEVEIiwgZGVmYXVsdCA9PiBpc0Js
YWNrQmVycnkoKSwgdmFsdWUgPT4gXCRzdHlsZVNjb3BlZFN1cHBvcnQgfSwKIAorICAgIHsgb3B0
aW9uID0+ICJzdWlkLWxpbnV4LXNhbmRib3giLCBkZXNjID0+ICJUb2dnbGUgc3VpZCBzYW5kYm94
IGZvciBsaW51eCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVgi
LCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkc3VpZExpbnV4U2FuZGJveCB9LAorCiAgICAgeyBv
cHRpb24gPT4gInN2ZyIsIGRlc2MgPT4gIlRvZ2dsZSBTVkcgc3VwcG9ydCIsCiAgICAgICBkZWZp
bmUgPT4gIkVOQUJMRV9TVkciLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkc3ZnU3VwcG9ydCB9
LAogCi0tIAoxLjcuOS41Cgo=
</data>
<flag name="commit-queue"
          id="170710"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161242</attachid>
            <date>2012-08-29 09:05:37 -0700</date>
            <delta_ts>2012-08-31 04:15:50 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-5.5.patch</filename>
            <type>text/plain</type>
            <size>32703</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA4MTYxODRkNTMyOTM2YmY3ZmQ5ODgzNzA4NzJhMWUxMGNlODA4YmUwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogV2Vk
LCAyOSBBdWcgMjAxMiAxNzozOToxMSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGZlbHRvbHQgNS41
CgotLS0KIFNvdXJjZS9RdFdlYktpdC5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgNSArCiBTb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnNsbiAgICAgICAgICAgICAgICAg
ICAgICB8ICAgOTggKysrLS0tCiAuLi4vV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZyB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBy
byAgICAgICAgICAgICAgICAgIHwgICAyOSArKwogLi4uL1NhbmRib3hQcm9jZXNzL1NhbmRib3hF
bnZpcm9ubWVudExpbnV4LmNwcCAgICAgfCAgMzIxICsrKysrKysrKysrKysrKysrKysrCiAuLi4v
U2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCAgICAgICB8ICAgNTcgKysr
KwogU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAyICsKIC4uLi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwICAg
IHwgIDE1MCArKysrKysrKy0KIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgMyArLQogVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtICAgICAgICAgICAgfCAgICA0ICsKIDEwIGZpbGVzIGNoYW5nZWQsIDYxMyBpbnNlcnRp
b25zKCspLCA1OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9TYW5kYm94UHJvY2Vzcy5wcm8KIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9T
YW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51
eC5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1F0V2ViS2l0LnBybyBiL1NvdXJjZS9RdFdlYktpdC5w
cm8KaW5kZXggYjEwYzdhYy4uNGFiZGY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1F0V2ViS2l0LnBy
bworKysgYi9Tb3VyY2UvUXRXZWJLaXQucHJvCkBAIC0xNyw2ICsxNywxMSBAQCBTVUJESVJTICs9
IGFwaQogICAgICAgICBwbHVnaW5wcm9jZXNzLmZpbGUgPSBXZWJLaXQyL1BsdWdpblByb2Nlc3Mu
cHJvCiAgICAgICAgIFNVQkRJUlMgKz0gcGx1Z2lucHJvY2VzcwogICAgIH0KKworICAgIGNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVg9MSkgeworICAgICAgICBzYW5k
Ym94cHJvY2Vzcy5maWxlID0gV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KKyAgICAgICAgU1VC
RElSUyArPSBzYW5kYm94cHJvY2VzcworICAgIH0KIH0KIAogaW5jbHVkZShXZWJLaXQvcXQvZG9j
cy9kb2NzLnByaSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0Zl
YXR1cmVEZWZpbmVzLnhjY29uZmlnIGIvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVh
dHVyZURlZmluZXMueGNjb25maWcKaW5kZXggOGM3NzMyOC4uYWI4NTQ0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysr
IGIvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcK
QEAgLTExNyw2ICsxMTcsNyBAQCBFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCA9IEVOQUJMRV9QUk9H
UkVTU19FTEVNRU5UOwogRU5BQkxFX1FVT1RBID0gOwogRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FID0gRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FOwogRU5BQkxFX1NDUklQVEVE
X1NQRUVDSCA9IDsKK0VOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVggPSA7CiBFTkFCTEVfU0hBRE9X
X0RPTSA9IDsKIEVOQUJMRV9TSEFSRURfV09SS0VSUyA9IEVOQUJMRV9TSEFSRURfV09SS0VSUzsK
IEVOQUJMRV9TUUxfREFUQUJBU0UgPSBFTkFCTEVfU1FMX0RBVEFCQVNFOwpAQCAtMTQxLDQgKzE0
Miw0IEBAIEVOQUJMRV9XSURHRVRfUkVHSU9OX21hY29zeCA9IEVOQUJMRV9XSURHRVRfUkVHSU9O
OwogRU5BQkxFX1dPUktFUlMgPSBFTkFCTEVfV09SS0VSUzsKIEVOQUJMRV9YU0xUID0gRU5BQkxF
X1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFC
TEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05fQVBJKSAkKEVOQUJM
RV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQo
RU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0VYQ0xVU0lPTlMp
ICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxF
X0NTU19ISUVSQVJDSElFUykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJM
RV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NT
U19TSEFERVJTKSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9DU1NfVkFS
SUFCTEVTKSAkKEVOQUJMRV9DU1MzX0ZMRVhCT1gpICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFU
SU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9T
VVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVS
X0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRB
VElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQp
ICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NS
RUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxF
X0hJR0hfRFBJX0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJBTUVf
U0VBTUxFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1NQRUVD
SCkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAk
KEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1F
TE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElN
RSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VS
KSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05P
VElGSUNBVElPTlMpICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVO
REVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVE
SUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQo
RU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9O
QVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVf
UEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVf
UVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRF
RF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAk
KEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZH
KSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChF
TkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkg
JChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFHRVIpICQoRU5B
QkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxF
X1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQo
RU5BQkxFX1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hTTFQpOwor
RkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQo
RU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NT
X0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVf
Q1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJB
UkNISUVTKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFH
RV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMp
ICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQo
RU5BQkxFX0NTUzNfRkxFWEJPWCkgJChFTkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJT04pICQoRU5B
QkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQo
RU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQo
RU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVO
QUJMRV9ESUFMT0dfRUxFTUVOVCkgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVf
RklMRV9TWVNURU0pICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAk
KEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElHSF9EUElf
Q0FOVkFTKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykg
JChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfREFURVRJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChF
TkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxF
X0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9O
UykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTElOS19QUkVSRU5ERVIpICQoRU5B
QkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNU
SUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTUlD
Uk9EQVRBKSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMpICQoRU5BQkxFX05BVklHQVRPUl9D
T05URU5UX1VUSUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QQUdFX1ZJU0lC
SUxJVFlfQVBJKSAkKEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UKSAkKEVOQUJMRV9RVU9UQSkgJChF
TkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCkg
JChFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJM
RV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9T
Q09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVO
QUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVEVYVF9O
T1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVf
VU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5B
QkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVO
QUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XSURHRVRfUkVHSU9OKSAkKEVOQUJMRV9XT1JLRVJT
KSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9j
ZXNzLnBybyBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODlhMTM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvCkBAIC0wLDAgKzEsMjkgQEAKKyMtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFByb2plY3QgY3Jl
YXRlZCBieSBRdENyZWF0b3IgMjAxMi0wNy0yNFQxMDowMTozMworIworIy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVEVNUExBVEUgPSBhcHAKKwor
VEFSR0VUID0gU1VJRFNhbmRib3hIZWxwZXIKK0RFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0v
YmluCisKK1NPVVJDRVMgKz0gU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXgu
Y3BwCisKK0hFQURFUlMgKz0gU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXgu
aAorCitRVCAgICAgICArPSBjb3JlIHdlYmtpdAorUVQgICAgICAgLT0gZ3VpCisKK0lOQ0xVREVQ
QVRIID0gXAorICAgICQkUFdELy4uLy4uL1dURiBcCisgICAgJCRJTkNMVURFUEFUSAorCitJTlNU
QUxMUyArPSB0YXJnZXQKKworaXNFbXB0eShJTlNUQUxMX0JJTlMpIHsKKyAgICB0YXJnZXQucGF0
aCA9ICQkW1FUX0lOU1RBTExfQklOU10KK30gZWxzZSB7CisgICAgdGFyZ2V0LnBhdGggPSAkJElO
U1RBTExfQklOUworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3Mv
U2FuZGJveEVudmlyb25tZW50TGludXguY3BwIGIvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nl
c3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjE2Mjc4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TYW5k
Ym94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKQEAgLTAsMCArMSwzMjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHly
aWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJTYW5k
Ym94RW52aXJvbm1lbnRMaW51eC5oIgorCisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkK
KyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRl
IDxRRGlyPgorI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFGaWxlSW5mbz4KKyNpbmNsdWRl
IDxRUHJvY2Vzcz4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+
CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRl
IDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK1NhbmRib3hFbnZpcm9ubWVudExpbnV4OjpTYW5kYm94RW52aXJvbm1l
bnRMaW51eChTdHJpbmcgY2hyb290RGlyZWN0b3J5LCBTdHJpbmcgd2Via2l0QmluYXJ5RGlyZWN0
b3J5KQoreworICAgIG1fc2FuZGJveFJvb3QgPSBjaHJvb3REaXJlY3Rvcnk7CisgICAgc2l6ZV90
IGVuZE9mRGlyZWN0b3J5UGF0aCA9IHdlYmtpdEJpbmFyeURpcmVjdG9yeS5yZXZlcnNlRmluZCgn
LycpOworICAgIGlmIChlbmRPZkRpcmVjdG9yeVBhdGggPT0gbm90Rm91bmQpCisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiSW52YWxpZCB3ZWJraXQgZGlyZWN0b3J5OiAlcy5cbiIsIHdlYmtpdEJp
bmFyeURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKTsKKworICAgIG1fd2Via2l0RGlyZWN0b3J5ID0g
d2Via2l0QmluYXJ5RGlyZWN0b3J5LmxlZnQoZW5kT2ZEaXJlY3RvcnlQYXRoKTsKKyAgICBtX2hv
bWVEaXJlY3RvcnkgPSBBU0NJSUxpdGVyYWwoIi9ob21lL25vYm9keSIpOworCisgICAgbV9kZXZp
Y2VzLmFwcGVuZCgiL2Rldi91cmFuZG9tIik7CisgICAgbV9kZXZpY2VzLmFwcGVuZCgiL2Rldi9y
YW5kb20iKTsKKworICAgIG1fZGlyZWN0b3JpZXNUb0JlQm91bmQuYXBwZW5kKCIvcHJvYy8iKTsK
KyAgICBtX2RpcmVjdG9yaWVzVG9CZUJvdW5kLmFwcGVuZCgiL3J1bi9zaG0vIik7CisKKyAgICBt
X2ZpbGVzVG9CZUxpbmtlZC5hcHBlbmQoIi9ldGMvbGQuc28uY2FjaGUiKTsKKyAgICBtX2ZpbGVz
VG9CZUxpbmtlZC5hcHBlbmQoIi9ldGMvbGQuc28uY29uZiIpOworICAgIG1fZmlsZXNUb0JlTGlu
a2VkLmFwcGVuZCgiL3Zhci9saWIvZGJ1cy9tYWNoaW5lLWlkIik7CisKKyAgICBtX2RpcmVjdG9y
aWVzVG9CZUxpbmtlZEZyb21Ib21lLmFwcGVuZCgiLy5mb250Y29uZmlnLyIpOworICAgIG1fZGly
ZWN0b3JpZXNUb0JlTGlua2VkRnJvbUhvbWUuYXBwZW5kKCIvLmxvY2FsL3NoYXJlL05va2lhLyIp
OworICAgIG1fZGlyZWN0b3JpZXNUb0JlTGlua2VkRnJvbUhvbWUuYXBwZW5kKCIvLmNhY2hlL05v
a2lhLyIpOworCisgICAgbV9kaXJlY3Rvcmllc1RvQmVMaW5rZWQuYXBwZW5kKCIvZXRjL2ZvbnRz
Iik7CisgICAgbV9kaXJlY3Rvcmllc1RvQmVMaW5rZWQuYXBwZW5kKCIvZXRjL2xkLnNvLmNvbmYu
ZCIpOworICAgIG1fZGlyZWN0b3JpZXNUb0JlTGlua2VkLmFwcGVuZCgiL3Vzci9saWIveDg2XzY0
LWxpbnV4LWdudS9nY29udiIpOworICAgIG1fZGlyZWN0b3JpZXNUb0JlTGlua2VkLmFwcGVuZCgi
L3Vzci9zaGFyZS9mb250cyIpOworICAgIG1fZGlyZWN0b3JpZXNUb0JlTGlua2VkLmFwcGVuZChB
U0NJSUxpdGVyYWwoZ2V0ZW52KCJRVERJUiIpKSArICIvcGx1Z2lucyIpOworICAgIG1fZGlyZWN0
b3JpZXNUb0JlTGlua2VkLmFwcGVuZChtX3dlYmtpdERpcmVjdG9yeSk7Cit9CisKK3ZvaWQgU2Fu
ZGJveEVudmlyb25tZW50TGludXg6Om1rRGlyKGNvbnN0IGNoYXIgKnBhdGgsIG1vZGVfdCBtb2Rl
KQoreworICAgIHN0cnVjdCBzdGF0IHN0OworICAgIGlmICghc3RhdChwYXRoLCAmc3QpKSB7Cisg
ICAgICAgIGlmIChta2RpcihwYXRoLCAwNzc3KSA9PSAtMSAmJiBlcnJubyAhPSBFRVhJU1QpCisg
ICAgICAgICAgICBwcmludGYoIkVycm9yIGJ5IGNyZWF0aW5nICVzIGRpcmVjdG9yeTogJXNcbiIs
IHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorfQorCit2b2lkIFNhbmRib3hFbnZpcm9u
bWVudExpbnV4Ojpta1BhdGgoY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpCit7CisgICAg
Y2hhciogc3RhcnRPZlN1YlBhdGg7CisgICAgY2hhciogZW5kT2ZTdWJQYXRoID0gKGNoYXIqKW1h
bGxvYyhzaXplb2YoY2hhciopKTsKKyAgICBjaGFyKiBjbG9uZVBhdGggPSAoY2hhciopbWFsbG9j
KHNpemVvZihjaGFyKikgKiBzdHJsZW4ocGF0aCkpOworICAgIHN0cmNweShjbG9uZVBhdGgsIHBh
dGgpOworCisgICAgc3RhcnRPZlN1YlBhdGggPSBlbmRPZlN1YlBhdGg7CisgICAgd2hpbGUgKChl
bmRPZlN1YlBhdGggPSBzdHJjaHIoc3RhcnRPZlN1YlBhdGgsICcvJykpKSB7CisgICAgICAgIGlm
IChlbmRPZlN1YlBhdGggIT0gc3RhcnRPZlN1YlBhdGgpIHsKKyAgICAgICAgICAgICplbmRPZlN1
YlBhdGggPSAnXDAnOworICAgICAgICAgICAgbWtEaXIoY2xvbmVQYXRoLCBtb2RlKTsKKyAgICAg
ICAgICAgICplbmRPZlN1YlBhdGggPSAnLyc7CisgICAgICAgIH0KKyAgICAgICAgc3RhcnRPZlN1
YlBhdGggPSBlbmRPZlN1YlBhdGggKyAxOworICAgIH0KKyAgICBmcmVlKGVuZE9mU3ViUGF0aCk7
CisgICAgZnJlZShjbG9uZVBhdGgpOworICAgIC8vIENyZWF0ZSB0aGUgbGFzdCBkaXJlY3Rvcnku
CisgICAgbWtEaXIocGF0aCwgbW9kZSk7Cit9CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGlu
dXg6OmNyZWF0ZURldmljZUZpbGVzKCkKK3sKKyAgICBTdHJpbmcgZGV2RGlyZWN0b3J5ID0gbV9z
YW5kYm94Um9vdCArICIvZGV2IjsKKyAgICBta1BhdGgoZGV2RGlyZWN0b3J5LnV0ZjgoKS5kYXRh
KCksIDA3NzcpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2RldmljZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgc3RydWN0IHN0YXQgc3RhdHVzOworICAgICAgICBpZiAoc3RhdChtX2Rl
dmljZXMuYXQoaSkudXRmOCgpLmRhdGEoKSwgJnN0YXR1cykgIT0gLTEpIHsKKyAgICAgICAgICAg
IGRldl90IGRldiA9IHN0YXR1cy5zdF9yZGV2OworICAgICAgICAgICAgLy8gQm90aCBuZWVkZWQg
ZGV2aWNlIGZpbGVzICgvZGV2L3JhbmRvbSBhbmQgL2Rldi91cmFuZG9tKSBhcmUgY2hhcmFjdGVy
IG1fZGV2aWNlcyBhbmQKKyAgICAgICAgICAgIC8vIHRoZWlyIHBlcm1pc3Npb25zIHNob3VsZCBi
ZTogcnctcnctcncuCisgICAgICAgICAgICBTdHJpbmcgZGV2aWNlID0gbV9zYW5kYm94Um9vdCAr
IG1fZGV2aWNlcy5hdChpKTsKKyAgICAgICAgICAgIG1rbm9kKGRldmljZS51dGY4KCkuZGF0YSgp
LCBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJP
VEggfCBTX0lXT1RILCBtYWtlZGV2KG1ham9yKGRldiksIG1pbm9yKGRldikpKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworaW50IFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjpiaW5kU2FuZGJveERp
cmVjdG9yaWVzKCkKK3sKKyAgICBta1BhdGgobV9zYW5kYm94Um9vdC51dGY4KCkuZGF0YSgpLCAw
Nzc3KTsKKworICAgIC8vIE1vdW50aW5nIHRoZSBuZWVkZWQgc3lzdGVtIGRpcmVjdG9yaWVzLgor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9kaXJlY3Rvcmllc1RvQmVCb3VuZC5zaXplKCk7ICsr
aSkgeworICAgICAgICBTdHJpbmcgZGlyZWN0b3J5UGF0aCA9IG1fc2FuZGJveFJvb3QgKyBtX2Rp
cmVjdG9yaWVzVG9CZUJvdW5kLmF0KGkpOworICAgICAgICBta1BhdGgoZGlyZWN0b3J5UGF0aC51
dGY4KCkuZGF0YSgpLCA3NzcpOworICAgICAgICBpZiAobW91bnQobV9kaXJlY3Rvcmllc1RvQmVC
b3VuZC5hdChpKS51dGY4KCkuZGF0YSgpLCBkaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCksICIi
LCBNU19CSU5EIHwgTVNfUkVDIHwgTVNfTU9WRSwgIiIpID09IC0xKQorICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJFcnJvciBieSBtb3VudGluZyAlcy4gJXNcbiIsIGRpcmVjdG9yeVBhdGgu
dXRmOCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGludXg6OmFkZE5vYm9keVVzZXJUb1Bhc3N3ZCgp
Cit7CisgICAgU3RyaW5nIGV0Y0RpcmVjdG9yeSA9IG1fc2FuZGJveFJvb3QgKyAiL2V0YyI7Cisg
ICAgbWtQYXRoKGV0Y0RpcmVjdG9yeS51dGY4KCkuZGF0YSgpLCAwNzc3KTsKKyAgICBTdHJpbmcg
cGFzc3dkUGF0aCA9IG1fc2FuZGJveFJvb3QgKyAiL2V0Yy9wYXNzd2QiOworICAgIEZJTEUqIHBh
c3N3ZEZpbGUgPSBmb3BlbihwYXNzd2RQYXRoLnV0ZjgoKS5kYXRhKCksICJ3KyIpOworICAgIGlm
ICghcGFzc3dkRmlsZSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDcmVhdGluZyBwYXNzd2Qg
ZmlsZSBmYWlsZWQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBzdHJ1Y3QgcGFzc3dk
KiBub2JvZHlVc2VyID0gZ2V0cHduYW0oIm5vYm9keSIpOworICAgIFN0cmluZyBwYXNzd29yZENv
bnRlbnQgPSBTdHJpbmc6OmZyb21VVEY4KG5vYm9keVVzZXItPnB3X25hbWUpICsgJzonICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChub2JvZHlVc2VyLT5w
d19wYXNzd2QpICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpu
dW1iZXIobm9ib2R5VXNlci0+cHdfdWlkKSArICc6JyArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZzo6bnVtYmVyKG5vYm9keVVzZXItPnB3X2dpZCkgKyAnOicgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG5vYm9keVVzZXItPnB3X2dl
Y29zKSArICc6JyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS9ub2JvZHki
ICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChu
b2JvZHlVc2VyLT5wd19zaGVsbCk7CisgICAgZnB1dHMocGFzc3dvcmRDb250ZW50LnV0ZjgoKS5k
YXRhKCksIHBhc3N3ZEZpbGUpOworICAgIGZjbG9zZShwYXNzd2RGaWxlKTsKK30KKwordm9pZCBT
YW5kYm94RW52aXJvbm1lbnRMaW51eDo6bGlua0ZpbGVSZWN1cnNpdmVseShTdHJpbmcgc291cmNl
RmlsZSwgU3RyaW5nIHRhcmdldEZpbGUpCit7CisgICAgc2l6ZV90IGVuZE9mQmFzZURpcmVjdG9y
eUluVGFyZ2V0ID0gdGFyZ2V0RmlsZS5yZXZlcnNlRmluZCgnLycpOworICAgIGlmIChlbmRPZkJh
c2VEaXJlY3RvcnlJblRhcmdldCA9PSBub3RGb3VuZCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJJbnZhbGlkIHRhcmdldDogJXMuXG4iLCB0YXJnZXRGaWxlLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgU3RyaW5nIGJhc2VEaXJlY3RvcnlPZlRhcmdldCA9IHRhcmdldEZpbGUubGVmdChlbmRPZkJh
c2VEaXJlY3RvcnlJblRhcmdldCk7CisgICAgbWtQYXRoKGJhc2VEaXJlY3RvcnlPZlRhcmdldC51
dGY4KCkuZGF0YSgpLCAwNzc3KTsKKyAgICBpZiAobGluayhzb3VyY2VGaWxlLmxhdGluMSgpLmRh
dGEoKSwgdGFyZ2V0RmlsZS5sYXRpbjEoKS5kYXRhKCkpID09IC0xICYmIGVycm5vICE9IEVFWElT
VCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJMaW5raW5nICVzIGZhaWxlZC5cbiIsIHNvdXJj
ZUZpbGUudXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBIYW5kbGUgc3ltbGlua3MuCisgICAgc3Ry
dWN0IHN0YXQgZmlsZUluZm87CisgICAgaWYgKGxzdGF0KHNvdXJjZUZpbGUubGF0aW4xKCkuZGF0
YSgpLCAmZmlsZUluZm8pIDwgMCAmJiBlcnJubyAhPSBFTk9FTlQpCisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiRXJyb3IgYnkgb2J0YWluaW5nIHRoZSBmaWxlaW5mbyBvZiAlczogJXMuXG4iLCBz
b3VyY2VGaWxlLmxhdGluMSgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBpZiAoKGZp
bGVJbmZvLnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZMTkspIHsKKyAgICAgICAgY2hhciBzeW1s
aW5rVGFyZ2V0WzUxMl07CisgICAgICAgIGludCBsZW5ndGhPZlRoZUxpbmsgPSByZWFkbGluayhz
b3VyY2VGaWxlLmxhdGluMSgpLmRhdGEoKSwgc3ltbGlua1RhcmdldCwgc2l6ZW9mKHN5bWxpbmtU
YXJnZXQpKTsKKyAgICAgICAgaWYgKGxlbmd0aE9mVGhlTGluayA+IDApCisgICAgICAgICAgICBz
eW1saW5rVGFyZ2V0W2xlbmd0aE9mVGhlTGlua10gPSAnXDAnOworICAgICAgICBTdHJpbmcgc3lt
bGlua1RhcmdldEluUmVhbFdvcmxkOworICAgICAgICBTdHJpbmcgc3ltbGlua1RhcmdldEluU2Fu
ZGJveDsKKyAgICAgICAgLy8gTWFraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiByZWxhdGl2ZSBhbmQg
YWJzb2x1dGUgcGF0aHMuCisgICAgICAgIGlmIChzeW1saW5rVGFyZ2V0WzBdICE9ICcvJykgewor
ICAgICAgICAgICAgc2l6ZV90IGVuZE9mQmFzZURpcmVjdG9yeUluU291cmNlID0gc291cmNlRmls
ZS5yZXZlcnNlRmluZCgnLycpOworICAgICAgICAgICAgaWYgKGVuZE9mQmFzZURpcmVjdG9yeUlu
U291cmNlID09IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52
YWxpZCBzb3VyY2U6ICVzLlxuIiwgc291cmNlRmlsZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIFN0cmluZyBiYXNlRGlyZWN0b3J5T2ZTb3VyY2UgPSBzb3VyY2VGaWxlLmxlZnQoZW5kT2ZC
YXNlRGlyZWN0b3J5SW5Tb3VyY2UpOworICAgICAgICAgICAgc3ltbGlua1RhcmdldEluUmVhbFdv
cmxkID0gYmFzZURpcmVjdG9yeU9mU291cmNlICsgJy8nICsgc3ltbGlua1RhcmdldDsKKyAgICAg
ICAgICAgIHN5bWxpbmtUYXJnZXRJblNhbmRib3ggPSBtX3NhbmRib3hSb290ICsgJy8nICsgc3lt
bGlua1RhcmdldEluUmVhbFdvcmxkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3lt
bGlua1RhcmdldEluUmVhbFdvcmxkID0gc3ltbGlua1RhcmdldDsKKyAgICAgICAgICAgIHN5bWxp
bmtUYXJnZXRJblNhbmRib3ggPSBtX3NhbmRib3hSb290ICsgc3ltbGlua1RhcmdldDsKKyAgICAg
ICAgfQorICAgICAgICBsaW5rRmlsZVJlY3Vyc2l2ZWx5KHN5bWxpbmtUYXJnZXRJblJlYWxXb3Js
ZCwgc3ltbGlua1RhcmdldEluU2FuZGJveCk7CisgICAgfQorfQorCit2b2lkIFNhbmRib3hFbnZp
cm9ubWVudExpbnV4OjpsaW5rRGlyZWN0b3J5KFN0cmluZyBzb3VyY2VEaXJlY3RvcnlQYXRoLCBT
dHJpbmcgdGFyZ2V0RGlyZWN0b3J5UGF0aCkKK3sKKyAgICBta1BhdGgodGFyZ2V0RGlyZWN0b3J5
UGF0aC51dGY4KCkuZGF0YSgpLCAwNzc3KTsKKyAgICBESVIqIGRpcmVjdG9yeSA9IG9wZW5kaXIo
c291cmNlRGlyZWN0b3J5UGF0aC5sYXRpbjEoKS5kYXRhKCkpOworICAgIGlmIChkaXJlY3Rvcnkp
IHsKKyAgICAgICAgc3RydWN0IGRpcmVudCAqZGlyZWN0b3J5SW5mbyA9IDA7CisgICAgICAgIHdo
aWxlICgoZGlyZWN0b3J5SW5mbyA9IHJlYWRkaXIoZGlyZWN0b3J5KSkpIHsKKyAgICAgICAgICAg
IFN0cmluZyBuZXh0RmlsZUluRGlyZWN0b3J5ID0gZGlyZWN0b3J5SW5mby0+ZF9uYW1lOworICAg
ICAgICAgICAgaWYgKG5leHRGaWxlSW5EaXJlY3RvcnkgPT0gIi4iIHx8IG5leHRGaWxlSW5EaXJl
Y3RvcnkgPT0gIi4uIikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBTdHJpbmcgc291cmNlRmlsZSA9IHNvdXJjZURpcmVjdG9yeVBhdGggKyAnLycgKyBuZXh0Rmls
ZUluRGlyZWN0b3J5OworICAgICAgICAgICAgU3RyaW5nIHRhcmdldEZpbGUgPSB0YXJnZXREaXJl
Y3RvcnlQYXRoICsgJy8nICsgbmV4dEZpbGVJbkRpcmVjdG9yeTsKKworICAgICAgICAgICAgaWYg
KGRpcmVjdG9yeUluZm8tPmRfdHlwZSA9PSBEVF9ESVIpCisgICAgICAgICAgICAgICAgbGlua0Rp
cmVjdG9yeShzb3VyY2VGaWxlLCB0YXJnZXRGaWxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBsaW5rRmlsZVJlY3Vyc2l2ZWx5KHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjphZGRE
ZXBlbmRlbmNpZXMoU3RyaW5nIGRlcGVuZGVuY3lMaXN0KQoreworICAgIC8vIExpbmsgZGVwZW5k
ZW5jaWVzIG9idGFpbmVkIHdpdGggbGRkLgorICAgIFZlY3RvcjxTdHJpbmc+IHNwbGl0dGVkTGlz
dDsKKyAgICBkZXBlbmRlbmN5TGlzdC5zcGxpdCgnOycsIHNwbGl0dGVkTGlzdCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzcGxpdHRlZExpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3Ry
aW5nIHNvdXJjZSA9IHNwbGl0dGVkTGlzdC5hdChpKTsKKyAgICAgICAgaWYgKHNvdXJjZVswXSAh
PSAnLycpCisgICAgICAgICAgICBzb3VyY2UuaW5zZXJ0KCIvIiwgMCk7CisgICAgICAgIGxpbmtG
aWxlUmVjdXJzaXZlbHkoc291cmNlLCBtX3NhbmRib3hSb290ICsgc291cmNlKTsKKyAgICB9CisK
KyAgICAvLyBMaW5rIHNpbmdsZSBmaWxlcy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fZmls
ZXNUb0JlTGlua2VkLnNpemUoKTsgKytpKQorICAgICAgICBsaW5rRmlsZVJlY3Vyc2l2ZWx5KG1f
ZmlsZXNUb0JlTGlua2VkLmF0KGkpLCBtX3NhbmRib3hSb290ICsgbV9maWxlc1RvQmVMaW5rZWQu
YXQoaSkpOworCisgICAgLy8gTGluayB0aGUgZGlyZWN0b3JpZXMgbm90IHBsYWNlZCBpbiB1c2Vy
cyBob21lLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9kaXJlY3Rvcmllc1RvQmVMaW5rZWQu
c2l6ZSgpOyArK2kpCisgICAgICAgIGxpbmtEaXJlY3RvcnkobV9kaXJlY3Rvcmllc1RvQmVMaW5r
ZWQuYXQoaSksIG1fc2FuZGJveFJvb3QgKyBtX2RpcmVjdG9yaWVzVG9CZUxpbmtlZC5hdChpKSk7
CisKKyAgICAvLyBMaW5rIHRoZSBjYWNoZSBkaXJlY3RvcmllcyBmcm9tIHVzZXJzIGhvbWUuCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2RpcmVjdG9yaWVzVG9CZUxpbmtlZEZyb21Ib21lLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBzb3VyY2VQYXRoID0gQVNDSUlMaXRlcmFsKGdl
dGVudigiSE9NRSIpKSArIG1fZGlyZWN0b3JpZXNUb0JlTGlua2VkRnJvbUhvbWUuYXQoaSk7Cisg
ICAgICAgIFN0cmluZyBzYW5kYm94UGF0aCA9IG1fc2FuZGJveFJvb3QgKyBtX2hvbWVEaXJlY3Rv
cnkgKyBtX2RpcmVjdG9yaWVzVG9CZUxpbmtlZEZyb21Ib21lLmF0KGkpOworICAgICAgICBsaW5r
RGlyZWN0b3J5KHNvdXJjZVBhdGgsIHNhbmRib3hQYXRoKTsKKyAgICB9CisKKyAgICAvLyBMaW5r
IHRoZSBiaW5hcnkgZGlyZWN0b3JpZXMgb2YgV2ViS2l0LgorICAgIFN0cmluZyB3ZWJLaXRCaW5h
cnlEaXJJblNhbmRib3ggPSBtX3NhbmRib3hSb290ICsgbV93ZWJraXREaXJlY3Rvcnk7CisgICAg
bGlua0RpcmVjdG9yeShtX3dlYmtpdERpcmVjdG9yeSwgd2ViS2l0QmluYXJ5RGlySW5TYW5kYm94
KTsKKworICAgIC8vIC5YYXV0aG9yaXR5IGZpbGUgc2hvdWxkIGJlIGNvcGllZCBiZWNhdXNlIGl0
cyBvd25lciB3aWxsIGNoYW5nZSBidXQgdGhlIG9yaWdpbmFsCisgICAgLy8gb25lIG11c3Qgbm90
IGFsdGVyLgorICAgIFN0cmluZyB4YXV0aG9yaXR5T2ZSZWFsVXNlciA9IFN0cmluZzo6ZnJvbVVU
RjgoZ2V0ZW52KCJIT01FIikpICsgIi8uWGF1dGhvcml0eSI7CisgICAgU3RyaW5nIHhhdXRob3Jp
dHlJblNhbmRib3ggPSBtX3NhbmRib3hSb290ICsgbV9ob21lRGlyZWN0b3J5ICsgIi8uWGF1dGhv
cml0eSI7CisgICAgY2hhciBidWZmZXJbQlVGU0laXTsKKyAgICBzaXplX3Qgc2l6ZTsKKworICAg
IEZJTEUqIHNvdXJjZSA9IGZvcGVuKHhhdXRob3JpdHlPZlJlYWxVc2VyLnV0ZjgoKS5kYXRhKCks
ICJyYiIpOworICAgIEZJTEUqIGRlc3QgPSBmb3Blbih4YXV0aG9yaXR5SW5TYW5kYm94LnV0Zjgo
KS5kYXRhKCksICJ3YiIpOworCisgICAgd2hpbGUgKChzaXplID0gZnJlYWQoYnVmZmVyLCAxLCBC
VUZTSVosIHNvdXJjZSkpKQorICAgICAgICBmd3JpdGUoYnVmZmVyLCAxLCBzaXplLCBkZXN0KTsK
KworICAgIGZjbG9zZShzb3VyY2UpOworICAgIGZjbG9zZShkZXN0KTsKK30KKwordm9pZCBTYW5k
Ym94RW52aXJvbm1lbnRMaW51eDo6aW5pdGlhbGl6ZVNhbmRib3goU3RyaW5nIGRlcGVuZGVuY3lM
aXN0KQoreworICAgIGJpbmRTYW5kYm94RGlyZWN0b3JpZXMoKTsKKyAgICBhZGROb2JvZHlVc2Vy
VG9QYXNzd2QoKTsKKyAgICBhZGREZXBlbmRlbmNpZXMoZGVwZW5kZW5jeUxpc3QpOworICAgIGNy
ZWF0ZURldmljZUZpbGVzKCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p
Cit7CisgICAgY29uc3QgU3RyaW5nIHNhbmRib3hEaXJlY3RvcnkgPSBTdHJpbmc6OmZyb21VVEY4
KGdldHB3dWlkKGdldHB3dWlkKGdldHVpZCgpKS0+cHdfdWlkKS0+cHdfZGlyKSArIFN0cmluZzo6
ZnJvbVVURjgoIi8ud2stc2FuZGJveDEwMiIpOworICAgIFNhbmRib3hFbnZpcm9ubWVudExpbnV4
KiBzYW5kYm94SGFuZGxlciA9IG5ldyBTYW5kYm94RW52aXJvbm1lbnRMaW51eChzYW5kYm94RGly
ZWN0b3J5LCBTdHJpbmc6OmZyb21VVEY4KGFyZ3ZbMF0pKTsKKyAgICBzYW5kYm94SGFuZGxlci0+
aW5pdGlhbGl6ZVNhbmRib3goQVNDSUlMaXRlcmFsKGFyZ3ZbM10pKTsKKworICAgIDo6c2V0Z3Jv
dXBzKDAsIDApOworICAgIGlmICg6OmNocm9vdChzYW5kYm94RGlyZWN0b3J5LmxhdGluMSgpLmRh
dGEoKSkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJvb3RpbmcgZmFpbGVk
OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg
ICBpZiAoOjpjaGRpcigiLyIpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBjaGFu
Z2UgZGlyZWN0b3J5XG4iKTsKKworICAgIHBhc3N3ZCogbm9ib2R5ID0gZ2V0cHduYW0oIm5vYm9k
eSIpOworCisgICAgLy8gIk5vYm9keSIgc2hvdWxkIG93biB0aGUgLlhhdXRob3JpdHkgdG8gYmUg
YWJsZSB0byBydW4gWCBpbnNpZGUgdGhlIHNhbmRib3guCisgICAgaWYgKGNob3duKCIvaG9tZS9u
b2JvZHkvLlhhdXRob3JpdHkiLCBub2JvZHktPnB3X3VpZCwgbm9ib2R5LT5wd19naWQpID09IC0x
KQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNob3duIC5YYXV0aG9yaXR5IGZhaWxlZDogJXMu
XG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIHNldGVudigiWEFVVEhPUklUWSIsICIvaG9tZS9u
b2JvZHkvLlhhdXRob3JpdHkiLCAxKTsKKyAgICBzZXRlbnYoIkhPTUUiLCAiL2hvbWUvbm9ib2R5
LyIsIDEpOworCisgICAgLy8gRHJvcCBhbGwgcHJpdmlsZWdlcy4KKyAgICA6OnNldGdpZChub2Jv
ZHktPnB3X2dpZCk7CisgICAgOjpzZXR1aWQobm9ib2R5LT5wd191aWQpOworICAgIDo6dW1hc2so
MCk7CisKKyAgICAvLyBDYWxsaW5nIFdlYlByb2Nlc3Mgd2l0aCBub2JvZHkgcmlnaHRzLgorICAg
IFFTdHJpbmcgY29tbWFuZExpbmUgPSBRTGF0aW4xU3RyaW5nKCIlMSAlMiIpOworICAgIGNvbW1h
bmRMaW5lID0gY29tbWFuZExpbmUuYXJnKFFMYXRpbjFTdHJpbmcoYXJndlsxXSkpOworICAgIGNv
bW1hbmRMaW5lID0gY29tbWFuZExpbmUuYXJnKFFMYXRpbjFTdHJpbmcoYXJndlsyXSkpOworCisg
ICAgUVByb2Nlc3MqIHdlYlByb2Nlc3MgPSBuZXcgUVByb2Nlc3MoKTsKKyAgICB3ZWJQcm9jZXNz
LT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxzKTsKKyAg
ICB3ZWJQcm9jZXNzLT5zdGFydChjb21tYW5kTGluZSk7CisKKyAgICBpZiAoIXdlYlByb2Nlc3Mt
PndhaXRGb3JTdGFydGVkKCkpIHsKKyAgICAgICAgcURlYnVnKCkgPDwgIkZhaWxlZCB0byBzdGFy
dCIgPDwgY29tbWFuZExpbmU7CisgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAgIH0KKwor
ICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgd2ViUHJvY2Vzcy0+cGlkKCksIDEwKTsKKyAg
ICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5k
Ym94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIGIvU291cmNlL1dlYktpdDIvU2Fu
ZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45OTIzYzYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaApAQCAtMCwwICsxLDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1Pgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9o
CisjZGVmaW5lIFNhbmRib3hFbnZpcm9ubWVudExpbnV4X2gKKworI2lmIEVOQUJMRShTVUlEX1NB
TkRCT1hfTElOVVgpCisjaW5jbHVkZSA8UVN0cmluZz4KKyNpbmNsdWRlIDxRU3RyaW5nTGlzdD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK2NsYXNzIFNhbmRib3hFbnZpcm9ubWVudExpbnV4IHsKK3B1YmxpYzoKKyAgICBWZWN0b3I8
U3RyaW5nPiBtX2RldmljZXM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9kaXJlY3Rvcmllc1RvQmVC
b3VuZDsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2RpcmVjdG9yaWVzVG9CZUxpbmtlZEZyb21Ib21l
OworICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZXNUb0JlTGlua2VkOworICAgIFZlY3RvcjxTdHJp
bmc+IG1fZGlyZWN0b3JpZXNUb0JlTGlua2VkOworICAgIFN0cmluZyBtX2hvbWVEaXJlY3Rvcnk7
CisgICAgU3RyaW5nIG1fc2FuZGJveFJvb3Q7CisgICAgU3RyaW5nIG1fd2Via2l0RGlyZWN0b3J5
OworCisgICAgU2FuZGJveEVudmlyb25tZW50TGludXgoU3RyaW5nLCBTdHJpbmcpOworCisgICAg
dm9pZCBhZGREZXBlbmRlbmNpZXMoU3RyaW5nKTsKKyAgICB2b2lkIGFkZE5vYm9keVVzZXJUb1Bh
c3N3ZCgpOworICAgIGludCBiaW5kU2FuZGJveERpcmVjdG9yaWVzKCk7CisgICAgdm9pZCBjcmVh
dGVEZXZpY2VGaWxlcygpOworICAgIHZvaWQgaW5pdGlhbGl6ZVNhbmRib3goU3RyaW5nKTsKKyAg
ICB2b2lkIGxpbmtEaXJlY3RvcnkoU3RyaW5nLCBTdHJpbmcpOworICAgIHZvaWQgbGlua0ZpbGVS
ZWN1cnNpdmVseShTdHJpbmcsIFN0cmluZyk7CisgICAgdm9pZCBta0Rpcihjb25zdCBjaGFyKiwg
bW9kZV90KTsKKyAgICB2b2lkIG1rUGF0aChjb25zdCBjaGFyKnBhdGgsIG1vZGVfdCk7Cit9Owor
CisjZW5kaWYgLy8gU2FuZGJveEVudmlyb25tZW50TGludXhfaAorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CmluZGV4IDM3MzM2NTAuLmMyMzI5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzYsNiArMzYsNyBAQCBI
RUFERVJTICs9IFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5o
IFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuaCBcCiAgICAgUGx1Z2luUHJvY2Vz
cy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oIFwKKyAgICBTYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52
aXJvbm1lbnRMaW51eC5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tCYXNlLmggXAogICAgIFNoYXJl
ZC9BUEkvYy9XS0NlcnRpZmljYXRlSW5mby5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDb25uZWN0
aW9uUmVmLmggXApAQCAtMzg4LDYgKzM4OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsdWdpblBy
b2Nlc3MvcXQvUGx1Z2luQ29udHJvbGxlclByb3h5UXQuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNz
L3F0L1BsdWdpblByb2Nlc3NNYWluUXQuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL3F0L1BsdWdp
blByb2Nlc3NRdC5jcHAgXAorICAgIFNhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExp
bnV4LmNwcCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLQXJyYXkuY3BwIFwKICAgICBTaGFyZWQvQVBJ
L2MvV0tDZXJ0aWZpY2F0ZUluZm8uY3BwIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDb25uZWN0aW9u
UmVmLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
cXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAppbmRleCBmMDk5ZDYyLi5iYWRmYjNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5j
aGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9j
ZXNzTGF1bmNoZXJRdC5jcHAKQEAgLTU1LDYgKzU1LDE3IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8UUNv
cmVBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRRGlyPgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0Pgor
I2luY2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy93YWl0
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNlbmRpZgorCiAjaWYgT1MoREFSV0lOKQogI2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+
CiAjaW5jbHVkZSA8c2VydmVycy9ib290c3RyYXAuaD4KQEAgLTk4LDYgKzEwOSwxMDIgQEAgdm9p
ZCBRdFdlYlByb2Nlc3M6OnNldHVwQ2hpbGRQcm9jZXNzKCkKICAgICBxcHV0ZW52KCJRVF9NQUNf
RElTQUJMRV9GT1JFR1JPVU5EX0FQUExJQ0FUSU9OX1RSQU5TRk9STSIsIFFCeXRlQXJyYXkoIjEi
KSk7CiAjZW5kaWYKIH0KKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorCitzdGF0aWMg
dm9pZCBmaWx0ZXJEZXBlbmRlbmNpZXNGcm9tTGRkT3V0cHV0KGNoYXIqIGJ1ZmZlciwgU3RyaW5n
JiBkZXBlbmRlbmN5TGlzdCkKK3sKKyAgICAvLyBUaGUgb3V0cHV0IG9mIGxkZCBjYW4gaGF2ZSB0
d28gZm9ybWF0czoKKyAgICAvLyAxKSBcdG5hbWVfb2ZfdGhlX2xpYnJhcnkgPT4gcGF0aF9vZl9s
aWJyYXJ5IChhZGRyZXNzX29mX3RoZV9saWJhcnkpCisgICAgLy8gMikgcGF0aF9vZl90aGVfbGli
cmFyeSAoYWRkcmVzc19vZl90aGVfbGliYXJ5KQorICAgIGNoYXIqIHBhdGhPZlRoZUxpYnJhcnkg
PSAoY2hhciopbWFsbG9jKDIwMCAqIHNpemVvZihjaGFyKSk7CisgICAgaW50IG51bWJlck9mbWF0
Y2hpbmdDaGFyYWN0ZXJzID0gc3NjYW5mKGJ1ZmZlciwgIlx0JSpzID0+IC8lcyAlKnNcbiIsIHBh
dGhPZlRoZUxpYnJhcnkpOworICAgIGlmICghbnVtYmVyT2ZtYXRjaGluZ0NoYXJhY3RlcnMpCisg
ICAgICBudW1iZXJPZm1hdGNoaW5nQ2hhcmFjdGVycyA9IHNzY2FuZihidWZmZXIsICJcdC8lcyAl
KnNcbiIsIHBhdGhPZlRoZUxpYnJhcnkpOworICAgIGlmIChudW1iZXJPZm1hdGNoaW5nQ2hhcmFj
dGVycyA+IDApIHsKKyAgICAgIGRlcGVuZGVuY3lMaXN0LmFwcGVuZChwYXRoT2ZUaGVMaWJyYXJ5
KTsKKyAgICAgIGRlcGVuZGVuY3lMaXN0LmFwcGVuZCgnOycpOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgZmlsdGVyRGVwZW5kZW5jaWVzRnJvbUxkY29uZmlnT3V0cHV0KGNoYXIqIGJ1ZmZlciwg
U3RyaW5nJiBkZXBlbmRlbmN5TGlzdCkKK3sKKyAgICBTdHJpbmcgbGlicmFyeShidWZmZXIpOwor
ICAgIFZlY3RvcjxTdHJpbmc+IGR5bmFtaWNEZXBlbmRlbmNpZXM7CisgICAgLy8gVGhlIGxpc3Qg
b2YgZW1pcmljYWxseSBnYXRoZXJlZCBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyAgICBkeW5hbWlj
RGVwZW5kZW5jaWVzLmFwcGVuZCgibGliY3J5cHRvLnNvIik7CisgICAgZHluYW1pY0RlcGVuZGVu
Y2llcy5hcHBlbmQoImxpYmV4cGF0LnNvIik7CisgICAgZHluYW1pY0RlcGVuZGVuY2llcy5hcHBl
bmQoImxpYmZvbnRjb25maWcuc28iKTsKKyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVuZCgi
bGliZnJlZXR5cGUuc28iKTsKKyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVuZCgibGlibnNz
X2Rucy5zbyIpOworICAgIGR5bmFtaWNEZXBlbmRlbmNpZXMuYXBwZW5kKCJsaWJyZXNvbHYuc28i
KTsKKyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVuZCgibGlic3NsLnNvIik7CisgICAgZHlu
YW1pY0RlcGVuZGVuY2llcy5hcHBlbmQoImxpYlhyZW5kZXIuc28iKTsKKyAgICBkeW5hbWljRGVw
ZW5kZW5jaWVzLmFwcGVuZCgibGlieGNiIik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGR5
bmFtaWNEZXBlbmRlbmNpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGxpYnJhcnkuY29u
dGFpbnMoZHluYW1pY0RlcGVuZGVuY2llcy5hdChpKSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBw
YXRoT2ZUaGVMaWJyYXJ5ID0gbGlicmFyeS5zdWJzdHJpbmcobGlicmFyeS5maW5kKCcvJykpOwor
ICAgICAgICAgICAgaWYgKHBhdGhPZlRoZUxpYnJhcnkubGVuZ3RoKCkgPiAwKSB7CisgICAgICAg
ICAgICAgICAgZGVwZW5kZW5jeUxpc3QuYXBwZW5kKHBhdGhPZlRoZUxpYnJhcnkpOworICAgICAg
ICAgICAgICAgIGRlcGVuZGVuY3lMaXN0LmFwcGVuZCgnOycpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0RGVwZW5kZW5jaWVzKFN0cmlu
ZyAmZGVwZW5kZW5jeUxpc3QsIFN0cmluZyBwcm9jZXNzLCBjaGFyIHBhcmFtZXRlcnNbXSkKK3sK
KyAgICBpbnQgc3RhdHVzOworICAgIGludCBwaXBlZmRbMl07CisKKyAgICBpZiAocGlwZShwaXBl
ZmQpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IHBpcGluZzogJXMuXG4iLCBz
dHJlcnJvcihlcnJubykpOworCisgICAgc3dpdGNoIChmb3JrKCkpIHsKKyAgICBjYXNlIC0xOgor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IGZvcmtpbmc6ICVzLlxuIiwgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgY2xvc2Uo
cGlwZWZkWzFdKTsgLy8gY2xvc2UgdGhlIHdyaXRlIGVuZCBvZiB0aGUgcGlwZSBpbiB0aGUgcGFy
ZW50CisgICAgICAgIEZJTEUqIGZpbGU7CisgICAgICAgIGZpbGUgPSBmZG9wZW4ocGlwZWZkWzBd
LCAiciIpOworCisgICAgICAgIGNoYXIgYnVmZmVyWzIwMF07CisgICAgICAgIHdoaWxlIChmZ2V0
cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmaWxlKSkgeworICAgICAgICAgICAgICBpbnQgbGVu
ID0gc3RybGVuKGJ1ZmZlcikgLSAxOworICAgICAgICAgICAgICBpZiAoYnVmZmVyW2xlbl0gPT0g
J1xuJykKKyAgICAgICAgICAgICAgICAgIGJ1ZmZlcltsZW5dID0gMDsKKyAgICAgICAgICAgICAg
aWYgKHByb2Nlc3MuY29udGFpbnMoU3RyaW5nKCJsZC1saW51eCIpKSkKKyAgICAgICAgICAgICAg
ICAgIGZpbHRlckRlcGVuZGVuY2llc0Zyb21MZGRPdXRwdXQoYnVmZmVyLCBkZXBlbmRlbmN5TGlz
dCk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGZpbHRlckRlcGVuZGVu
Y2llc0Zyb21MZGNvbmZpZ091dHB1dChidWZmZXIsIGRlcGVuZGVuY3lMaXN0KTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh3YWl0KCZzdGF0dXMpIDw9IDApCisgICAgICAgICAgICB3YXJuKCJX
YWl0LiIpOworICAgICAgICBlbHNlIGlmIChXSUZTSUdOQUxFRChzdGF0dXMpKQorICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJTaWduYWxlZDogc2lnbmFsICVkXG4iLCBXVEVSTVNJRyhzdGF0
dXMpKTsKKyAgICAgICAgZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykgJiYgV0VYSVRTVEFUVVMo
c3RhdHVzKSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXhpdGVkOiBleGl0IHN0YXR1
cyAlZFxuIiwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
MDoKKyAgICAgICAgY2xvc2UocGlwZWZkWzBdKTsKKworICAgICAgICBkdXAyKHBpcGVmZFsxXSwg
MSk7IC8vIFNlbmQgc3Rkb3V0IHRvIHRoZSBwaXBlLgorICAgICAgICBkdXAyKHBpcGVmZFsxXSwg
Mik7IC8vIFNlbmQgc3RkZXJyIHRvIHRoZSBwaXBlLgorCisgICAgICAgIGlmIChwcm9jZXNzLmNv
bnRhaW5zKCJsZC1saW51eCIsIGZhbHNlKSkgeworICAgICAgICAgICAgLy8gVXNpbmcgbGRkIG1l
YW5zIHRoYXQgd2UgY2FsbCBsZC1saW51eCB3aGlsZSBMRF9UUkFDRV9MT0FERURfT0JKRUNUUyBp
cyBzZXQuCisgICAgICAgICAgICAvLyBUaGlzIHdheSB0aGUgInByb2Nlc3MiIHdvbid0IHJ1biBv
bmx5IGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBiZSBkZXRlcm1pbmVkLgorICAgICAgICAgICAgc2V0
ZW52KCJMRF9UUkFDRV9MT0FERURfT0JKRUNUUyIsICJ5ZXMiLCAxKTsKKyAgICAgICAgICAgIGV4
ZWNsKHByb2Nlc3MuYXNjaWkoKS5kYXRhKCksIHByb2Nlc3MudXRmOCgpLmRhdGEoKSwgcGFyYW1l
dGVycywgKGNoYXIgKikwKTsKKyAgICAgICAgICAgIHVuc2V0ZW52KCJMRF9UUkFDRV9MT0FERURf
T0JKRUNUUyIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGV4ZWNsKHByb2Nlc3MuYXNj
aWkoKS5kYXRhKCksIHByb2Nlc3MudXRmOCgpLmRhdGEoKSwgcGFyYW1ldGVycywgKGNoYXIgKikw
KTsKKyAgICAgICAgY2xvc2UocGlwZWZkWzFdKTsKKyAgICB9Cit9CisjZW5kaWYKIAogdm9pZCBQ
cm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogewpAQCAtMTQ4LDM1ICsyNTUsNjIgQEAg
dm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgIGNvbW1hbmRMaW5lID0g
Y29tbWFuZExpbmUuYXJnKHNvY2tldHNbMF0pOwogI2VuZGlmCiAKLSAgICBRUHJvY2Vzcyogd2Vi
UHJvY2VzcyA9IG5ldyBRdFdlYlByb2Nlc3MoKTsKLSAgICB3ZWJQcm9jZXNzLT5zZXRQcm9jZXNz
Q2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxzKTsKLSAgICB3ZWJQcm9jZXNz
LT5zdGFydChjb21tYW5kTGluZSk7CisgICAgUVByb2Nlc3MqIHdlYlByb2Nlc3NPclNVSURIZWxw
ZXI7CisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKyAgICBTdHJpbmcgZGVwZW5kZW5j
eUxpc3Q7CisgICAgLy8gVGhlcmUgYXJlIHR3byB3YXkgaG93IHdlIGdhdGhlciB0aGUgZGVwZW5k
ZW5jaWVzOgorICAgIC8vIDEpIFVzaW5nIGxkZCB0byBvYnRhaW4gdGhlIHN0YXRpYyBkZXBlbmRl
bmNpZXMgb2YgUXRXZWJQcm9jZXNzLgorICAgIC8vIDIpIFVzaW5nIGEgZGV2ZWxlcGVyIGRlZmlu
ZWQgbGlzdCBvZiBkeW5hbWljIGRlcGVuZGVuY2llcyAoaXQncyBnYXRoZXJlZCBlbXBpcmljYWwg
d2F5KS4KKyAgICBjb2xsZWN0RGVwZW5kZW5jaWVzKGRlcGVuZGVuY3lMaXN0LCAiL2xpYjY0L2xk
LWxpbnV4LXg4Ni02NC5zby4yIiwgKGNoYXIqKShleGVjdXRhYmxlUGF0aE9mV2ViUHJvY2Vzcygp
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBjb2xsZWN0RGVwZW5kZW5jaWVzKGRlcGVuZGVuY3lMaXN0
LCAiL3NiaW4vbGRjb25maWciLCAoY2hhciopKCItcCIpKTsKKworICAgIFFTdHJpbmcgc2FuZGJv
eENvbW1hbmRMaW5lID0gUUxhdGluMVN0cmluZygiJTEgJTIgJTMgJTQiKTsKKyAgICBzYW5kYm94
Q29tbWFuZExpbmUgPSBzYW5kYm94Q29tbWFuZExpbmUuYXJnKFFDb3JlQXBwbGljYXRpb246OmFw
cGxpY2F0aW9uRGlyUGF0aCgpICsgUUxhdGluMVN0cmluZygiL1NVSURTYW5kYm94SGVscGVyIikp
OworICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoZXhlY3V0
YWJsZVBhdGhPZldlYlByb2Nlc3MoKSk7CisgICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJv
eENvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKKyAgICBzYW5kYm94Q29tbWFuZExpbmUgPSBz
YW5kYm94Q29tbWFuZExpbmUuYXJnKGRlcGVuZGVuY3lMaXN0KTsKKworICAgIHdlYlByb2Nlc3NP
clNVSURIZWxwZXIgPSBuZXcgUVByb2Nlc3MoKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVy
LT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxzKTsKKyAg
ICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChzYW5kYm94Q29tbWFuZExpbmUpOworI2Vs
c2UKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyID0gbmV3IFF0V2ViUHJvY2VzcygpOworICAg
IHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6
TWVyZ2VkQ2hhbm5lbHMpOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnN0YXJ0KGNvbW1h
bmRMaW5lKTsKKyNlbmRpZgogCiAjaWYgIU9TKERBUldJTikKICAgICAvLyBEb24ndCBleHBvc2Ug
dGhlIHdlYiBzb2NrZXQgdG8gcG9zc2libGUgZnV0dXJlIHdlYiBwcm9jZXNzZXMKICAgICB3aGls
ZSAoZmNudGwoc29ja2V0c1swXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQykgPT0gLTEpIHsKICAgICAg
ICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAgICAgICAgICAgZGVsZXRlIHdl
YlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CiAjZW5kaWYKIAotICAgIGlmICghd2ViUHJvY2Vzcy0+d2FpdEZvclN0YXJ0ZWQoKSkgewor
ICAgIGlmICghd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZvclN0YXJ0ZWQoKSkgewogICAg
ICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8PCBjb21tYW5kTGluZTsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjaWYgT1MoREFSV0lOKQogICAgICAgICBtYWNoX3Bv
cnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBjb25uZWN0b3IpOwogICAgICAgICBtYWNo
X3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgY29ubmVjdG9yLCBNQUNIX1BPUlRfUklH
SFRfUkVDRUlWRSwgLTEpOwogI2VuZGlmCi0gICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAg
ICAgICBkZWxldGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgd2ViUHJvY2Vzcy0+cGlkKCksIDEw
KTsKKyAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlByb2Nlc3NPclNVSURIZWxwZXIt
PnBpZCgpLCAxMCk7CisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIGlmICgh
d2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZvckZpbmlzaGVkKCkpIHsKKyAgICAgICAgZGVs
ZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKIAotICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmV2ViS2l0OjpQcm9jZXNz
TGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMsIHdlYlByb2Nlc3MsIGNv
bm5lY3RvcikpOworICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmV2ViS2l0OjpQ
cm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMsIHdlYlByb2Nl
c3NPclNVSURIZWxwZXIsIGNvbm5lY3RvcikpOwogfQogCiB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6
dGVybWluYXRlUHJvY2VzcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBy
aSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDkxNjY4NzQuLmE3MDFlNjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIucHJpCkBAIC02MSw3ICs2MSw4IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNP
VVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9j
ZXNzL3F0IFwKLSAgICAkJFNPVVJDRV9ESVIvUGx1Z2luUHJvY2VzcworICAgICQkU09VUkNFX0RJ
Ui9QbHVnaW5Qcm9jZXNzIFwKKyAgICAkJFNPVVJDRV9ESVIvU2FuZGJveFByb2Nlc3MKIAogIyBU
aGUgV2ViS2l0MiBRdCBBUElzIGRlcGVuZCBvbiBxd2Via2l0Z2xvYmFsLmgsIHdoaWNoIGxpdmVz
IGluIFdlYktpdAogSU5DTFVERVBBVEggKz0gJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IGJm
ZDlmMGEuLjI2YjJiNGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0
dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0K
QEAgLTExNyw2ICsxMTcsNyBAQCBteSAoCiAgICAgJHNoYXJlZFdvcmtlcnNTdXBwb3J0LAogICAg
ICRzcWxEYXRhYmFzZVN1cHBvcnQsCiAgICAgJHN0eWxlU2NvcGVkU3VwcG9ydCwKKyAgICAkc3Vp
ZExpbnV4U2FuZGJveCwKICAgICAkc3ZnRE9NT2JqQ0JpbmRpbmdzU3VwcG9ydCwKICAgICAkc3Zn
Rm9udHNTdXBwb3J0LAogICAgICRzdmdTdXBwb3J0LApAQCAtMzYzLDYgKzM2NCw5IEBAIG15IEBm
ZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAic3R5bGUtc2NvcGVkIiwgZGVzYyA9PiAiVG9n
Z2xlIFN0eWxlIFNjb3BlZCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NUWUxF
X1NDT1BFRCIsIGRlZmF1bHQgPT4gaXNCbGFja0JlcnJ5KCksIHZhbHVlID0+IFwkc3R5bGVTY29w
ZWRTdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAic3VpZC1saW51eC1zYW5kYm94IiwgZGVz
YyA9PiAiVG9nZ2xlIHN1aWQgc2FuZGJveCBmb3IgbGludXgiLAorICAgICAgZGVmaW5lID0+ICJF
TkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHN1aWRM
aW51eFNhbmRib3ggfSwKKwogICAgIHsgb3B0aW9uID0+ICJzdmciLCBkZXNjID0+ICJUb2dnbGUg
U1ZHIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1ZHIiwgZGVmYXVsdCA9PiAx
LCB2YWx1ZSA9PiBcJHN2Z1N1cHBvcnQgfSwKIAotLSAKMS43LjkuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161645</attachid>
            <date>2012-08-31 02:33:25 -0700</date>
            <delta_ts>2012-09-10 06:47:23 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-6.2.patch</filename>
            <type>text/plain</type>
            <size>32941</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA1YTUyNGJiNzg3YzQyYzI2ZWUyYmIyNWFkNDFkNmNkOGY4OGI1OGUzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogRnJp
LCAzMSBBdWcgMjAxMiAxMToyMTo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGZlbHRvbHQgNi4y
CgotLS0KIFNvdXJjZS9RdFdlYktpdC5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgNSArCiBTb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnNsbiAgICAgICAgICAgICAgICAg
ICAgICB8ICAgOTggKysrLS0tCiAuLi4vV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZyB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBy
byAgICAgICAgICAgICAgICAgIHwgICAyOCArKwogLi4uL1NhbmRib3hQcm9jZXNzL1NhbmRib3hF
bnZpcm9ubWVudExpbnV4LmNwcCAgICAgfCAgMzE1ICsrKysrKysrKysrKysrKysrKysrCiAuLi4v
U2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCAgICAgICB8ICAgNTcgKysr
KwogU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAyICsKIC4uLi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwICAg
IHwgIDE1MCArKysrKysrKystCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgIDMgKy0KIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJl
TGlzdC5wbSAgICAgICAgICAgIHwgICAgNCArCiAxMCBmaWxlcyBjaGFuZ2VkLCA2MDYgaW5zZXJ0
aW9ucygrKSwgNTkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dDIvU2FuZGJveFByb2Nlc3MucHJvCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIv
U2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGlu
dXguaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdFdlYktpdC5wcm8gYi9Tb3VyY2UvUXRXZWJLaXQu
cHJvCmluZGV4IGIxMGM3YWMuLjRhYmRmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdFdlYktpdC5w
cm8KKysrIGIvU291cmNlL1F0V2ViS2l0LnBybwpAQCAtMTcsNiArMTcsMTEgQEAgU1VCRElSUyAr
PSBhcGkKICAgICAgICAgcGx1Z2lucHJvY2Vzcy5maWxlID0gV2ViS2l0Mi9QbHVnaW5Qcm9jZXNz
LnBybwogICAgICAgICBTVUJESVJTICs9IHBsdWdpbnByb2Nlc3MKICAgICB9CisKKyAgICBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYPTEpIHsKKyAgICAgICAgc2Fu
ZGJveHByb2Nlc3MuZmlsZSA9IFdlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvCisgICAgICAgIFNV
QkRJUlMgKz0gc2FuZGJveHByb2Nlc3MKKyAgICB9CiB9CiAKIGluY2x1ZGUoV2ViS2l0L3F0L2Rv
Y3MvZG9jcy5wcmkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9G
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0Zl
YXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IDhjNzczMjguLmFiODU0NDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmln
CkBAIC0xMTcsNiArMTE3LDcgQEAgRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQgPSBFTkFCTEVfUFJP
R1JFU1NfRUxFTUVOVDsKIEVOQUJMRV9RVU9UQSA9IDsKIEVOQUJMRV9SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSA9IEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRTsKIEVOQUJMRV9TQ1JJUFRF
RF9TUEVFQ0ggPSA7CitFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYID0gOwogRU5BQkxFX1NIQURP
V19ET00gPSA7CiBFTkFCTEVfU0hBUkVEX1dPUktFUlMgPSBFTkFCTEVfU0hBUkVEX1dPUktFUlM7
CiBFTkFCTEVfU1FMX0RBVEFCQVNFID0gRU5BQkxFX1NRTF9EQVRBQkFTRTsKQEAgLTE0MSw0ICsx
NDIsNCBAQCBFTkFCTEVfV0lER0VUX1JFR0lPTl9tYWNvc3ggPSBFTkFCTEVfV0lER0VUX1JFR0lP
TjsKIEVOQUJMRV9XT1JLRVJTID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVfWFNMVCA9IEVOQUJM
RV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5B
QkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQU5JTUFUSU9OX0FQSSkgJChFTkFC
TEVfQkxPQikgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAk
KEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19FWENMVVNJT05T
KSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19GSUxURVJTKSAkKEVOQUJM
RV9DU1NfSElFUkFSQ0hJRVMpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChFTkFC
TEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9D
U1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTikgJChFTkFCTEVfQ1NTX1ZB
UklBQkxFUykgJChFTkFCTEVfQ1NTM19GTEVYQk9YKSAkKEVOQUJMRV9DU1MzX1RFWFRfREVDT1JB
VElPTikgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRf
U1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZF
Ul9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5U
QVRJT04pICQoRU5BQkxFX0RJQUxPR19FTEVNRU5UKSAkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FE
KSAkKEVOQUJMRV9GSUxFX1NZU1RFTSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfRlVMTFND
UkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJM
RV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1F
X1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVF
Q0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkg
JChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElN
RUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJ
TUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dF
UikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9O
T1RJRklDQVRJT05TKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9MSU5LX1BSRVJF
TkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01F
RElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAk
KEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01VVEFUSU9OX09CU0VSVkVSUykgJChFTkFCTEVf
TkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxF
X1BBR0VfVklTSUJJTElUWV9BUEkpICQoRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQpICQoRU5BQkxF
X1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJChFTkFCTEVfU0NSSVBU
RURfU1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykg
JChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5BQkxFX1NW
RykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQo
RU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkp
ICQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfVU5ET19NQU5BR0VSKSAkKEVO
QUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJM
RV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAk
KEVOQUJMRV9XSURHRVRfUkVHSU9OKSAkKEVOQUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9YU0xUKTsK
K0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05fQVBJKSAkKEVOQUJMRV9CTE9CKSAk
KEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NT
U19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0VYQ0xVU0lPTlMpICQoRU5BQkxF
X0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NTU19ISUVS
QVJDSElFUykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1B
R0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJT
KSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9DU1NfVkFSSUFCTEVTKSAk
KEVOQUJMRV9DU1MzX0ZMRVhCT1gpICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVO
QUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAk
KEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAk
KEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChF
TkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxF
X0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkg
JChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJR0hfRFBJ
X0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJBTUVfU0VBTUxFU1Mp
ICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1NQRUVDSCkgJChFTkFC
TEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQo
RU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJM
RV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElP
TlMpICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVO
QUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElT
VElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01J
Q1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FUT1Jf
Q09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJ
QklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQo
RU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gp
ICQoRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCkgJChFTkFCTEVfU0hBRE9XX0RPTSkgJChFTkFC
TEVfU0hBUkVEX1dPUktFUlMpICQoRU5BQkxFX1NRTF9EQVRBQkFTRSkgJChFTkFCTEVfU1RZTEVf
U0NPUEVEKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChF
TkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RFWFRf
Tk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQoRU5BQkxF
X1VORE9fTUFOQUdFUikgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVO
QUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChF
TkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV0lER0VUX1JFR0lPTikgJChFTkFCTEVfV09SS0VS
UykgJChFTkFCTEVfWFNMVCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJv
Y2Vzcy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlYjFhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwpAQCAtMCwwICsxLDI4IEBACisjIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgUHJvamVjdCBmaWxlIGZvciB0aGUgV2ViS2l0MiBzYW5kYm94IHByb2Nlc3MgYmluYXJ5
CisjCisjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1
aWxkIHN5c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RFTVBMQVRFID0gYXBwCisKK1FUICAgICAgICs9
IHdlYmtpdAorCitUQVJHRVQgPSBTVUlEU2FuZGJveEhlbHBlcgorREVTVERJUiA9ICQke1JPT1Rf
QlVJTERfRElSfS9iaW4KKworU09VUkNFUyArPSBTYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJv
bm1lbnRMaW51eC5jcHAKKworSEVBREVSUyArPSBTYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJv
bm1lbnRMaW51eC5oCisKK0lOQ0xVREVQQVRIID0gXAorICAgICQkUFdELy4uLy4uL1dURiBcCisg
ICAgJCRJTkNMVURFUEFUSAorCitJTlNUQUxMUyArPSB0YXJnZXQKKworaXNFbXB0eShJTlNUQUxM
X0JJTlMpIHsKKyAgICB0YXJnZXQucGF0aCA9ICQkW1FUX0lOU1RBTExfQklOU10KK30gZWxzZSB7
CisgICAgdGFyZ2V0LnBhdGggPSAkJElOU1RBTExfQklOUworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwIGIvU291
cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNmQxMmQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51
eC5jcHAKQEAgLTAsMCArMSwzMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVy
c2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVu
aUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIgorCisjaWYgRU5B
QkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKyNpbmNsdWRlIDxRUHJvY2Vzcz4KKyNpbmNsdWRlIDxk
aXJlbnQuaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUg
PGdycC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8
c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4K
KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK1NhbmRib3hF
bnZpcm9ubWVudExpbnV4OjpTYW5kYm94RW52aXJvbm1lbnRMaW51eChjb25zdCBTdHJpbmcmIGNo
cm9vdERpcmVjdG9yeSwgY29uc3QgU3RyaW5nJiB3ZWJraXRCaW5hcnlEaXJlY3RvcnkpCit7Cisg
ICAgbV9zYW5kYm94Um9vdCA9IGNocm9vdERpcmVjdG9yeTsKKyAgICBzaXplX3QgZW5kT2ZEaXJl
Y3RvcnlQYXRoID0gd2Via2l0QmluYXJ5RGlyZWN0b3J5LnJldmVyc2VGaW5kKCcvJyk7CisgICAg
aWYgKGVuZE9mRGlyZWN0b3J5UGF0aCA9PSBub3RGb3VuZCkKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJJbnZhbGlkIHdlYmtpdCBkaXJlY3Rvcnk6ICVzLlxuIiwgd2Via2l0QmluYXJ5RGlyZWN0
b3J5LnV0ZjgoKS5kYXRhKCkpOworCisgICAgbV9iaW5hcnlEaXJlY3RvcnkgPSB3ZWJraXRCaW5h
cnlEaXJlY3RvcnkubGVmdChlbmRPZkRpcmVjdG9yeVBhdGgpOworICAgIG1faG9tZURpcmVjdG9y
eSA9IEFTQ0lJTGl0ZXJhbCgiL2hvbWUvbm9ib2R5Iik7CisKKyAgICBtX2RldmljZXMuYXBwZW5k
KEFTQ0lJTGl0ZXJhbCgiL2Rldi91cmFuZG9tIikpOworICAgIG1fZGV2aWNlcy5hcHBlbmQoQVND
SUlMaXRlcmFsKCIvZGV2L3JhbmRvbSIpKTsKKworICAgIG1fYm91bmRlZERpcmVjdG9yaWVzLmFw
cGVuZChBU0NJSUxpdGVyYWwoIi9wcm9jLyIpKTsKKyAgICBtX2JvdW5kZWREaXJlY3Rvcmllcy5h
cHBlbmQoQVNDSUlMaXRlcmFsKCIvcnVuL3NobS8iKSk7CisKKyAgICBtX2xpbmtlZEZpbGVzLmFw
cGVuZChBU0NJSUxpdGVyYWwoIi9ldGMvbGQuc28uY2FjaGUiKSk7CisgICAgbV9saW5rZWRGaWxl
cy5hcHBlbmQoQVNDSUlMaXRlcmFsKCIvZXRjL2xkLnNvLmNvbmYiKSk7CisgICAgbV9saW5rZWRG
aWxlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCIvdmFyL2xpYi9kYnVzL21hY2hpbmUtaWQiKSk7CisK
KyAgICBtX2xpbmtlZERpcmVjdG9yaWVzRnJvbUhvbWUuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgiLy5m
b250Y29uZmlnLyIpKTsKKyNpZiBQTEFURk9STShRVCkKKyAgICBtX2xpbmtlZERpcmVjdG9yaWVz
RnJvbUhvbWUuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgiLy5sb2NhbC9zaGFyZS9Ob2tpYS8iKSk7Cisg
ICAgbV9saW5rZWREaXJlY3Rvcmllc0Zyb21Ib21lLmFwcGVuZChBU0NJSUxpdGVyYWwoIi8uY2Fj
aGUvTm9raWEvIikpOworI2VuZGlmCisgICAgbV9saW5rZWREaXJlY3Rvcmllcy5hcHBlbmQoQVND
SUlMaXRlcmFsKCIvZXRjL2ZvbnRzIikpOworICAgIG1fbGlua2VkRGlyZWN0b3JpZXMuYXBwZW5k
KEFTQ0lJTGl0ZXJhbCgiL2V0Yy9sZC5zby5jb25mLmQiKSk7CisgICAgbV9saW5rZWREaXJlY3Rv
cmllcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCIvdXNyL2xpYi94ODZfNjQtbGludXgtZ251L2djb252
IikpOworICAgIG1fbGlua2VkRGlyZWN0b3JpZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgiL3Vzci9z
aGFyZS9mb250cyIpKTsKKyAgICBtX2xpbmtlZERpcmVjdG9yaWVzLmFwcGVuZChBU0NJSUxpdGVy
YWwoZ2V0ZW52KCJRVERJUiIpKSArICIvcGx1Z2lucyIpOworICAgIG1fbGlua2VkRGlyZWN0b3Jp
ZXMuYXBwZW5kKG1fYmluYXJ5RGlyZWN0b3J5KTsKK30KKworYm9vbCBTYW5kYm94RW52aXJvbm1l
bnRMaW51eDo6Y3JlYXRlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIG1vZGVfdCBt
b2RlKQoreworICAgIGNoYXIqIGNsb25lID0gY29uc3RfY2FzdDxjaGFyKj4ocGF0aC51dGY4KCku
ZGF0YSgpKTsKKyAgICBib29sIG9rID0gdHJ1ZTsKKworICAgIGNoYXIqIHB0ciA9IGNsb25lOwor
ICAgIHdoaWxlICgocHRyID0gc3RyY2hyKHB0ciArIDEsICcvJykpKSB7CisgICAgICAgICpwdHIg
PSAnXDAnOworICAgICAgICBvayA9IG1rZGlyKGNsb25lLCBtb2RlKSAhPSAtMSB8fCBlcnJubyA9
PSBFRVhJU1Q7CisgICAgICAgICpwdHIgPSAnLyc7CisKKyAgICAgICAgaWYgKCFvaykKKyAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIG9rID0gbWtkaXIocGF0aC51dGY4KCkuZGF0YSgpLCBt
b2RlKSB8fCBlcnJubyA9PSBFRVhJU1Q7CisgICAgaWYgKG9rKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBtb2RlX3QgcGVybWlzc2lvbnMoU3Ry
aW5nIGRpcmVjdG9yeSkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICBzdGF0KGRp
cmVjdG9yeS51dGY4KCkuZGF0YSgpLCAmZmlsZVN0YXQpOworICAgIHJldHVybiBmaWxlU3RhdC5z
dF9tb2RlOworfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjpjcmVhdGVEZXZpY2VG
aWxlcygpCit7CisgICAgU3RyaW5nIGRldkRpcmVjdG9yeSA9IG1fc2FuZGJveFJvb3QgKyAiL2Rl
diI7CisgICAgY3JlYXRlRGlyZWN0b3J5UGF0aChkZXZEaXJlY3RvcnksIHBlcm1pc3Npb25zKEFT
Q0lJTGl0ZXJhbCgiL2RldiIpKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fZGV2aWNl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7CisgICAgICAgIGlm
IChzdGF0KG1fZGV2aWNlcy5hdChpKS51dGY4KCkuZGF0YSgpLCAmc3RhdHVzKSAhPSAtMSkgewor
ICAgICAgICAgICAgZGV2X3QgZGV2ID0gc3RhdHVzLnN0X3JkZXY7CisgICAgICAgICAgICAvLyBC
b3RoIG5lZWRlZCBkZXZpY2UgZmlsZXMgKC9kZXYvcmFuZG9tIGFuZCAvZGV2L3VyYW5kb20pIGFy
ZSBjaGFyYWN0ZXIgbV9kZXZpY2VzIGFuZAorICAgICAgICAgICAgLy8gdGhlaXIgcGVybWlzc2lv
bnMgc2hvdWxkIGJlOiBydy1ydy1ydy4KKyAgICAgICAgICAgIFN0cmluZyBkZXZpY2UgPSBtX3Nh
bmRib3hSb290ICsgbV9kZXZpY2VzLmF0KGkpOworICAgICAgICAgICAgbWtub2QoZGV2aWNlLnV0
ZjgoKS5kYXRhKCksIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lX
R1JQIHwgU19JUk9USCB8IFNfSVdPVEgsIG1ha2VkZXYobWFqb3IoZGV2KSwgbWlub3IoZGV2KSkp
OworICAgICAgICB9CisgICAgfQorfQorCitpbnQgU2FuZGJveEVudmlyb25tZW50TGludXg6OmJp
bmRTYW5kYm94RGlyZWN0b3JpZXMoKQoreworICAgIGNyZWF0ZURpcmVjdG9yeVBhdGgobV9zYW5k
Ym94Um9vdCwgMDc3Nyk7CisKKyAgICAvLyBNb3VudGluZyB0aGUgbmVlZGVkIHN5c3RlbSBkaXJl
Y3Rvcmllcy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYm91bmRlZERpcmVjdG9yaWVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBkaXJlY3RvcnlQYXRoID0gbV9zYW5kYm94Um9v
dCArIG1fYm91bmRlZERpcmVjdG9yaWVzLmF0KGkpOworICAgICAgICBjcmVhdGVEaXJlY3RvcnlQ
YXRoKGRpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSwgcGVybWlzc2lvbnMobV9ib3VuZGVkRGly
ZWN0b3JpZXMuYXQoaSkpKTsKKyAgICAgICAgaWYgKG1vdW50KG1fYm91bmRlZERpcmVjdG9yaWVz
LmF0KGkpLnV0ZjgoKS5kYXRhKCksIGRpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSwgIiIsIE1T
X0JJTkQgfCBNU19SRUMgfCBNU19NT1ZFLCAiIikgPT0gLTEpCisgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkVycm9yIGJ5IG1vdW50aW5nICVzLiAlc1xuIiwgZGlyZWN0b3J5UGF0aC51dGY4
KCkuZGF0YSgpLCBzdHJlcnJvcihlcnJubykpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBTYW5kYm94RW52aXJvbm1lbnRMaW51eDo6YWRkTm9ib2R5VXNlclRvUGFzc3dkKCkKK3sK
KyAgICBTdHJpbmcgZXRjRGlyZWN0b3J5ID0gbV9zYW5kYm94Um9vdCArICIvZXRjIjsKKyAgICBj
cmVhdGVEaXJlY3RvcnlQYXRoKGV0Y0RpcmVjdG9yeS51dGY4KCkuZGF0YSgpLCBwZXJtaXNzaW9u
cyhBU0NJSUxpdGVyYWwoIi9ldGMiKSkpOworICAgIFN0cmluZyBwYXNzd2RQYXRoID0gbV9zYW5k
Ym94Um9vdCArICIvZXRjL3Bhc3N3ZCI7CisgICAgRklMRSogcGFzc3dkRmlsZSA9IGZvcGVuKHBh
c3N3ZFBhdGgudXRmOCgpLmRhdGEoKSwgIncrIik7CisgICAgaWYgKCFwYXNzd2RGaWxlKQorICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5nIHBhc3N3ZCBmaWxlIGZhaWxlZDogJXMuXG4i
LCBzdHJlcnJvcihlcnJubykpOworICAgIHN0cnVjdCBwYXNzd2QqIG5vYm9keVVzZXIgPSBnZXRw
d25hbSgibm9ib2R5Iik7CisgICAgU3RyaW5nIHBhc3N3b3JkQ29udGVudCA9IFN0cmluZzo6ZnJv
bVVURjgobm9ib2R5VXNlci0+cHdfbmFtZSkgKyAnOicgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG5vYm9keVVzZXItPnB3X3Bhc3N3ZCkgKyAnOicgKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6Om51bWJlcihub2JvZHlVc2VyLT5w
d191aWQpICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpudW1i
ZXIobm9ib2R5VXNlci0+cHdfZ2lkKSArICc6JyArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZzo6ZnJvbVVURjgobm9ib2R5VXNlci0+cHdfZ2Vjb3MpICsgJzonICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lL25vYm9keSIgKyAnOicgKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG5vYm9keVVzZXItPnB3X3NoZWxs
KTsKKyAgICBmcHV0cyhwYXNzd29yZENvbnRlbnQudXRmOCgpLmRhdGEoKSwgcGFzc3dkRmlsZSk7
CisgICAgZmNsb3NlKHBhc3N3ZEZpbGUpOworfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudExp
bnV4OjpsaW5rRmlsZVJlY3Vyc2l2ZWx5KGNvbnN0IFN0cmluZyYgc291cmNlRmlsZSwgY29uc3Qg
U3RyaW5nJiB0YXJnZXRGaWxlKQoreworICAgIHNpemVfdCBlbmRPZkJhc2VEaXJlY3RvcnlJblNv
dXJjZSA9IHNvdXJjZUZpbGUucmV2ZXJzZUZpbmQoJy8nKTsKKyAgICBpZiAoZW5kT2ZCYXNlRGly
ZWN0b3J5SW5Tb3VyY2UgPT0gbm90Rm91bmQpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52
YWxpZCBzb3VyY2U6ICVzLlxuIiwgc291cmNlRmlsZS51dGY4KCkuZGF0YSgpKTsKKyAgICBTdHJp
bmcgYmFzZURpcmVjdG9yeU9mU291cmNlID0gc291cmNlRmlsZS5sZWZ0KGVuZE9mQmFzZURpcmVj
dG9yeUluU291cmNlKTsKKworICAgIHNpemVfdCBlbmRPZkJhc2VEaXJlY3RvcnlJblRhcmdldCA9
IHRhcmdldEZpbGUucmV2ZXJzZUZpbmQoJy8nKTsKKyAgICBpZiAoZW5kT2ZCYXNlRGlyZWN0b3J5
SW5UYXJnZXQgPT0gbm90Rm91bmQpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB0
YXJnZXQ6ICVzLlxuIiwgdGFyZ2V0RmlsZS51dGY4KCkuZGF0YSgpKTsKKyAgICBTdHJpbmcgYmFz
ZURpcmVjdG9yeU9mVGFyZ2V0ID0gdGFyZ2V0RmlsZS5sZWZ0KGVuZE9mQmFzZURpcmVjdG9yeUlu
VGFyZ2V0KTsKKyAgICBjcmVhdGVEaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlPZlRhcmdldC51
dGY4KCkuZGF0YSgpLCBwZXJtaXNzaW9ucyhiYXNlRGlyZWN0b3J5T2ZTb3VyY2UpKTsKKworICAg
IGlmIChsaW5rKHNvdXJjZUZpbGUudXRmOCgpLmRhdGEoKSwgdGFyZ2V0RmlsZS51dGY4KCkuZGF0
YSgpKSA9PSAtMSAmJiBlcnJubyAhPSBFRVhJU1QpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
TGlua2luZyAlcyBmYWlsZWQuXG4iLCBzb3VyY2VGaWxlLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
Ly8gSGFuZGxlIHN5bWxpbmtzLgorICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChs
c3RhdChzb3VyY2VGaWxlLnV0ZjgoKS5kYXRhKCksICZmaWxlSW5mbykgPCAwICYmIGVycm5vICE9
IEVOT0VOVCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBvYnRhaW5pbmcgdGhl
IGZpbGVpbmZvIG9mICVzOiAlcy5cbiIsIHNvdXJjZUZpbGUudXRmOCgpLmRhdGEoKSwgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICBpZiAoKGZpbGVJbmZvLnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZM
TkspIHsKKyAgICAgICAgY2hhciBzeW1saW5rVGFyZ2V0WzUxMl07CisgICAgICAgIGludCBsZW5n
dGhPZlRoZUxpbmsgPSByZWFkbGluayhzb3VyY2VGaWxlLnV0ZjgoKS5kYXRhKCksIHN5bWxpbmtU
YXJnZXQsIHNpemVvZihzeW1saW5rVGFyZ2V0KSk7CisgICAgICAgIGlmIChsZW5ndGhPZlRoZUxp
bmsgPiAwKQorICAgICAgICAgICAgc3ltbGlua1RhcmdldFtsZW5ndGhPZlRoZUxpbmtdID0gJ1ww
JzsKKyAgICAgICAgU3RyaW5nIHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZDsKKyAgICAgICAgU3Ry
aW5nIHN5bWxpbmtUYXJnZXRJblNhbmRib3g7CisgICAgICAgIC8vIE1ha2luZyBkaWZmZXJlbmNl
IGJldHdlZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzLgorICAgICAgICBpZiAoc3ltbGlu
a1RhcmdldFswXSAhPSAnLycpIHsKKyAgICAgICAgICAgIHN5bWxpbmtUYXJnZXRJblJlYWxXb3Js
ZCA9IGJhc2VEaXJlY3RvcnlPZlNvdXJjZSArICcvJyArIHN5bWxpbmtUYXJnZXQ7CisgICAgICAg
ICAgICBzeW1saW5rVGFyZ2V0SW5TYW5kYm94ID0gbV9zYW5kYm94Um9vdCArICcvJyArIHN5bWxp
bmtUYXJnZXRJblJlYWxXb3JsZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bWxp
bmtUYXJnZXRJblJlYWxXb3JsZCA9IHN5bWxpbmtUYXJnZXQ7CisgICAgICAgICAgICBzeW1saW5r
VGFyZ2V0SW5TYW5kYm94ID0gbV9zYW5kYm94Um9vdCArIHN5bWxpbmtUYXJnZXQ7CisgICAgICAg
IH0KKyAgICAgICAgbGlua0ZpbGVSZWN1cnNpdmVseShzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGQs
IHN5bWxpbmtUYXJnZXRJblNhbmRib3gpOworICAgIH0KK30KKworCit2b2lkIFNhbmRib3hFbnZp
cm9ubWVudExpbnV4OjpsaW5rRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgc291cmNlRGlyZWN0b3J5
UGF0aCwgY29uc3QgU3RyaW5nJiB0YXJnZXREaXJlY3RvcnlQYXRoKQoreworICAgIGNyZWF0ZURp
cmVjdG9yeVBhdGgodGFyZ2V0RGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpLCBwZXJtaXNzaW9u
cyhzb3VyY2VEaXJlY3RvcnlQYXRoKSk7CisgICAgRElSKiBkaXJlY3RvcnkgPSBvcGVuZGlyKHNv
dXJjZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKGRpcmVjdG9yeSkgewor
ICAgICAgICBzdHJ1Y3QgZGlyZW50ICpkaXJlY3RvcnlJbmZvID0gMDsKKyAgICAgICAgd2hpbGUg
KChkaXJlY3RvcnlJbmZvID0gcmVhZGRpcihkaXJlY3RvcnkpKSkgeworICAgICAgICAgICAgU3Ry
aW5nIG5leHRGaWxlSW5EaXJlY3RvcnkgPSBkaXJlY3RvcnlJbmZvLT5kX25hbWU7CisgICAgICAg
ICAgICBpZiAobmV4dEZpbGVJbkRpcmVjdG9yeSA9PSAiLiIgfHwgbmV4dEZpbGVJbkRpcmVjdG9y
eSA9PSAiLi4iKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFN0
cmluZyBzb3VyY2VGaWxlID0gc291cmNlRGlyZWN0b3J5UGF0aCArICcvJyArIG5leHRGaWxlSW5E
aXJlY3Rvcnk7CisgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0RmlsZSA9IHRhcmdldERpcmVjdG9y
eVBhdGggKyAnLycgKyBuZXh0RmlsZUluRGlyZWN0b3J5OworCisgICAgICAgICAgICBpZiAoZGly
ZWN0b3J5SW5mby0+ZF90eXBlID09IERUX0RJUikKKyAgICAgICAgICAgICAgICBsaW5rRGlyZWN0
b3J5KHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGxpbmtGaWxlUmVjdXJzaXZlbHkoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGludXg6OmFkZERlcGVu
ZGVuY2llcyhjb25zdCBTdHJpbmcmIGRlcGVuZGVuY3lMaXN0KQoreworICAgIC8vIExpbmsgZGVw
ZW5kZW5jaWVzIG9idGFpbmVkIHdpdGggbGRkLgorICAgIFZlY3RvcjxTdHJpbmc+IHNwbGl0dGVk
TGlzdDsKKyAgICBkZXBlbmRlbmN5TGlzdC5zcGxpdCgnOycsIHNwbGl0dGVkTGlzdCk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzcGxpdHRlZExpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
U3RyaW5nIHNvdXJjZSA9IHNwbGl0dGVkTGlzdC5hdChpKTsKKyAgICAgICAgaWYgKHNvdXJjZVsw
XSAhPSAnLycpCisgICAgICAgICAgICBzb3VyY2UuaW5zZXJ0KCIvIiwgMCk7CisgICAgICAgIGxp
bmtGaWxlUmVjdXJzaXZlbHkoc291cmNlLCBtX3NhbmRib3hSb290ICsgc291cmNlKTsKKyAgICB9
CisKKyAgICAvLyBMaW5rIHNpbmdsZSBmaWxlcy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
bGlua2VkRmlsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGxpbmtGaWxlUmVjdXJzaXZlbHkobV9s
aW5rZWRGaWxlcy5hdChpKSwgbV9zYW5kYm94Um9vdCArIG1fbGlua2VkRmlsZXMuYXQoaSkpOwor
CisgICAgLy8gTGluayB0aGUgZGlyZWN0b3JpZXMgbm90IHBsYWNlZCBpbiB1c2VycyBob21lLgor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9saW5rZWREaXJlY3Rvcmllcy5zaXplKCk7ICsraSkK
KyAgICAgICAgbGlua0RpcmVjdG9yeShtX2xpbmtlZERpcmVjdG9yaWVzLmF0KGkpLCBtX3NhbmRi
b3hSb290ICsgbV9saW5rZWREaXJlY3Rvcmllcy5hdChpKSk7CisKKyAgICAvLyBMaW5rIHRoZSBj
YWNoZSBkaXJlY3RvcmllcyBmcm9tIHVzZXJzIGhvbWUuCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBtX2xpbmtlZERpcmVjdG9yaWVzRnJvbUhvbWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3Ry
aW5nIHNvdXJjZVBhdGggPSBBU0NJSUxpdGVyYWwoZ2V0ZW52KCJIT01FIikpICsgbV9saW5rZWRE
aXJlY3Rvcmllc0Zyb21Ib21lLmF0KGkpOworICAgICAgICBTdHJpbmcgc2FuZGJveFBhdGggPSBt
X3NhbmRib3hSb290ICsgbV9ob21lRGlyZWN0b3J5ICsgbV9saW5rZWREaXJlY3Rvcmllc0Zyb21I
b21lLmF0KGkpOworICAgICAgICBsaW5rRGlyZWN0b3J5KHNvdXJjZVBhdGgsIHNhbmRib3hQYXRo
KTsKKyAgICB9CisKKyAgICAvLyBMaW5rIHRoZSBiaW5hcnkgZGlyZWN0b3JpZXMgb2YgV2ViS2l0
LgorICAgIFN0cmluZyB3ZWJLaXRCaW5hcnlEaXJJblNhbmRib3ggPSBtX3NhbmRib3hSb290ICsg
bV9iaW5hcnlEaXJlY3Rvcnk7CisgICAgbGlua0RpcmVjdG9yeShtX2JpbmFyeURpcmVjdG9yeSwg
d2ViS2l0QmluYXJ5RGlySW5TYW5kYm94KTsKKworICAgIC8vIC5YYXV0aG9yaXR5IGZpbGUgc2hv
dWxkIGJlIGNvcGllZCBiZWNhdXNlIGl0cyBvd25lciB3aWxsIGNoYW5nZSBidXQgdGhlIG9yaWdp
bmFsCisgICAgLy8gb25lIG11c3Qgbm90IGFsdGVyLgorICAgIFN0cmluZyB4YXV0aG9yaXR5T2ZS
ZWFsVXNlciA9IFN0cmluZzo6ZnJvbVVURjgoZ2V0ZW52KCJIT01FIikpICsgIi8uWGF1dGhvcml0
eSI7CisgICAgU3RyaW5nIHhhdXRob3JpdHlJblNhbmRib3ggPSBtX3NhbmRib3hSb290ICsgbV9o
b21lRGlyZWN0b3J5ICsgIi8uWGF1dGhvcml0eSI7CisgICAgY2hhciBidWZmZXJbQlVGU0laXTsK
KyAgICBzaXplX3Qgc2l6ZTsKKworICAgIEZJTEUqIHNvdXJjZSA9IGZvcGVuKHhhdXRob3JpdHlP
ZlJlYWxVc2VyLnV0ZjgoKS5kYXRhKCksICJyYiIpOworICAgIEZJTEUqIGRlc3QgPSBmb3Blbih4
YXV0aG9yaXR5SW5TYW5kYm94LnV0ZjgoKS5kYXRhKCksICJ3YiIpOworCisgICAgd2hpbGUgKChz
aXplID0gZnJlYWQoYnVmZmVyLCAxLCBCVUZTSVosIHNvdXJjZSkpKQorICAgICAgICBmd3JpdGUo
YnVmZmVyLCAxLCBzaXplLCBkZXN0KTsKKworICAgIGZjbG9zZShzb3VyY2UpOworICAgIGZjbG9z
ZShkZXN0KTsKK30KKwordm9pZCBTYW5kYm94RW52aXJvbm1lbnRMaW51eDo6aW5pdGlhbGl6ZVNh
bmRib3goY29uc3QgU3RyaW5nJiBkZXBlbmRlbmN5TGlzdCkKK3sKKyAgICBiaW5kU2FuZGJveERp
cmVjdG9yaWVzKCk7CisgICAgYWRkTm9ib2R5VXNlclRvUGFzc3dkKCk7CisgICAgYWRkRGVwZW5k
ZW5jaWVzKGRlcGVuZGVuY3lMaXN0KTsKKyAgICBjcmVhdGVEZXZpY2VGaWxlcygpOworfQorCitp
bnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNvbnN0IFN0cmluZyBzYW5k
Ym94RGlyZWN0b3J5ID0gQVNDSUlMaXRlcmFsKGdldHB3dWlkKGdldHB3dWlkKGdldHVpZCgpKS0+
cHdfdWlkKS0+cHdfZGlyKSArICIvLndrLXNhbmRib3giOworICAgIFNhbmRib3hFbnZpcm9ubWVu
dExpbnV4KiBzYW5kYm94SGFuZGxlciA9IG5ldyBTYW5kYm94RW52aXJvbm1lbnRMaW51eChzYW5k
Ym94RGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoYXJndlswXSkpOworICAgIHNhbmRib3hIYW5kbGVy
LT5pbml0aWFsaXplU2FuZGJveChBU0NJSUxpdGVyYWwoYXJndlszXSkpOworCisgICAgOjpzZXRn
cm91cHMoMCwgMCk7CisgICAgaWYgKDo6Y2hyb290KHNhbmRib3hEaXJlY3RvcnkudXRmOCgpLmRh
dGEoKSkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJvb3RpbmcgZmFpbGVk
OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg
ICBpZiAoOjpjaGRpcigiLyIpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBjaGFu
Z2UgZGlyZWN0b3J5XG4iKTsKKworICAgIHBhc3N3ZCogbm9ib2R5ID0gZ2V0cHduYW0oIm5vYm9k
eSIpOworCisgICAgLy8gIk5vYm9keSIgc2hvdWxkIG93biB0aGUgLlhhdXRob3JpdHkgdG8gYmUg
YWJsZSB0byBydW4gWCBpbnNpZGUgdGhlIHNhbmRib3guCisgICAgaWYgKGNob3duKCIvaG9tZS9u
b2JvZHkvLlhhdXRob3JpdHkiLCBub2JvZHktPnB3X3VpZCwgbm9ib2R5LT5wd19naWQpID09IC0x
KQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNob3duIC5YYXV0aG9yaXR5IGZhaWxlZDogJXMu
XG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIHNldGVudigiWEFVVEhPUklUWSIsICIvaG9tZS9u
b2JvZHkvLlhhdXRob3JpdHkiLCAxKTsKKyAgICBzZXRlbnYoIkhPTUUiLCAiL2hvbWUvbm9ib2R5
LyIsIDEpOworCisgICAgLy8gRHJvcCBhbGwgcHJpdmlsZWdlcy4KKyAgICA6OnNldGdpZChub2Jv
ZHktPnB3X2dpZCk7CisgICAgOjpzZXR1aWQobm9ib2R5LT5wd191aWQpOworICAgIDo6dW1hc2so
MCk7CisKKyAgICAvLyBDYWxsaW5nIFdlYlByb2Nlc3Mgd2l0aCBub2JvZHkgcmlnaHRzLgorICAg
IFFTdHJpbmcgY29tbWFuZExpbmUgPSBRTGF0aW4xU3RyaW5nKCIlMSAlMiIpOworICAgIGNvbW1h
bmRMaW5lID0gY29tbWFuZExpbmUuYXJnKFFMYXRpbjFTdHJpbmcoYXJndlsxXSkpOworICAgIGNv
bW1hbmRMaW5lID0gY29tbWFuZExpbmUuYXJnKFFMYXRpbjFTdHJpbmcoYXJndlsyXSkpOworCisg
ICAgUVByb2Nlc3MqIHdlYlByb2Nlc3MgPSBuZXcgUVByb2Nlc3MoKTsKKyAgICB3ZWJQcm9jZXNz
LT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxzKTsKKyAg
ICB3ZWJQcm9jZXNzLT5zdGFydChjb21tYW5kTGluZSk7CisKKyAgICBpZiAoIXdlYlByb2Nlc3Mt
PndhaXRGb3JTdGFydGVkKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8g
c3RhcnQgJXMuXG4iLCBjb21tYW5kTGluZS50b0xvY2FsOEJpdCgpLmRhdGEoKSk7CisgICAgICAg
IGRlbGV0ZSB3ZWJQcm9jZXNzOworICAgIH0KKworICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VT
Uywgd2ViUHJvY2Vzcy0+cGlkKCksIDEwKTsKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1l
bnRMaW51eC5oIGIvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25t
ZW50TGludXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjFlNGVhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVu
dmlyb25tZW50TGludXguaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhv
ZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisjZGVmaW5lIFNhbmRib3hFbnZpcm9ubWVu
dExpbnV4X2gKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8UVN0
cmluZz4KKyNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK2NsYXNzIFNhbmRib3hFbnZpcm9ubWVu
dExpbnV4IHsKK3B1YmxpYzoKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2RldmljZXM7CisgICAgVmVj
dG9yPFN0cmluZz4gbV9ib3VuZGVkRGlyZWN0b3JpZXM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9s
aW5rZWREaXJlY3RvcmllczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2xpbmtlZERpcmVjdG9yaWVz
RnJvbUhvbWU7CisgICAgVmVjdG9yPFN0cmluZz4gbV9saW5rZWRGaWxlczsKKworICAgIFN0cmlu
ZyBtX2hvbWVEaXJlY3Rvcnk7CisgICAgU3RyaW5nIG1fc2FuZGJveFJvb3Q7CisgICAgU3RyaW5n
IG1fYmluYXJ5RGlyZWN0b3J5OworCisgICAgU2FuZGJveEVudmlyb25tZW50TGludXgoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIGFkZERlcGVuZGVuY2llcyhjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIGFkZE5vYm9keVVzZXJUb1Bhc3N3ZCgpOworICAgIGludCBi
aW5kU2FuZGJveERpcmVjdG9yaWVzKCk7CisgICAgdm9pZCBjcmVhdGVEZXZpY2VGaWxlcygpOwor
ICAgIHZvaWQgaW5pdGlhbGl6ZVNhbmRib3goY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBsaW5r
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgbGlua0Zp
bGVSZWN1cnNpdmVseShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNy
ZWF0ZURpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiwgbW9kZV90KTsKK307CisKKyNlbmRpZiAv
LyBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggMjFl
MmRjMS4uYWFkMDQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0zNiw2ICszNiw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggXAogICAgIFBs
dWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nl
c3NDb25uZWN0aW9uLmggXAorICAgIFNhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExp
bnV4LmggXAogICAgIFNoYXJlZC9BUEkvYy9XS0FycmF5LmggXAogICAgIFNoYXJlZC9BUEkvYy9X
S0Jhc2UuaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLQ2VydGlmaWNhdGVJbmZvLmggXApAQCAtMzkw
LDYgKzM5MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsdWdpblByb2Nlc3MvcXQvUGx1Z2luQ29u
dHJvbGxlclByb3h5UXQuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL3F0L1BsdWdpblByb2Nlc3NN
YWluUXQuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL3F0L1BsdWdpblByb2Nlc3NRdC5jcHAgXAor
ICAgIFNhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcCBcCiAgICAgU2hh
cmVkL0FQSS9jL1dLQXJyYXkuY3BwIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDZXJ0aWZpY2F0ZUlu
Zm8uY3BwIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDb25uZWN0aW9uUmVmLmNwcCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVu
Y2hlclF0LmNwcAppbmRleCBmMDk5ZDYyLi4wODdmZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAK
QEAgLTU1LDYgKzU1LDE3IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNp
bmNsdWRlIDxRRGlyPgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorI2luY2x1ZGUgPGVyci5oPgor
I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNlbmRpZgorCiAjaWYg
T1MoREFSV0lOKQogI2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+CiAjaW5jbHVkZSA8c2VydmVy
cy9ib290c3RyYXAuaD4KQEAgLTk4LDYgKzEwOSwxMDIgQEAgdm9pZCBRdFdlYlByb2Nlc3M6OnNl
dHVwQ2hpbGRQcm9jZXNzKCkKICAgICBxcHV0ZW52KCJRVF9NQUNfRElTQUJMRV9GT1JFR1JPVU5E
X0FQUExJQ0FUSU9OX1RSQU5TRk9STSIsIFFCeXRlQXJyYXkoIjEiKSk7CiAjZW5kaWYKIH0KKyNp
ZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorCitzdGF0aWMgdm9pZCBmaWx0ZXJMaWJyYXJ5
RGVwZW5kZW5jaWVzRnJvbUxERE91dHB1dChjaGFyKiBidWZmZXIsIGludCBidWZmZXJMZW5ndGgs
IFN0cmluZyYgbGlicmFyeURlcGVuZGVuY2llcykKK3sKKyAgICAvLyBUaGUgb3V0cHV0IG9mIGxk
ZCBjYW4gaGF2ZSB0d28gZm9ybWF0czoKKyAgICAvLyAxKSBcdG5hbWVfb2ZfdGhlX2xpYnJhcnkg
PT4gcGF0aF9vZl9saWJyYXJ5IChhZGRyZXNzX29mX3RoZV9saWJhcnkpCisgICAgLy8gMikgcGF0
aF9vZl90aGVfbGlicmFyeSAoYWRkcmVzc19vZl90aGVfbGliYXJ5KQorICAgIGNoYXIqIHBhdGhP
ZlRoZUxpYnJhcnkgPSAoY2hhciopbWFsbG9jKGJ1ZmZlckxlbmd0aCAqIHNpemVvZihjaGFyKSk7
CisgICAgaW50IG51bWJlck9mbWF0Y2hpbmdDaGFyYWN0ZXJzID0gc3NjYW5mKGJ1ZmZlciwgIlx0
JSpzID0+IC8lcyAlKnNcbiIsIHBhdGhPZlRoZUxpYnJhcnkpOworICAgIGlmICghbnVtYmVyT2Zt
YXRjaGluZ0NoYXJhY3RlcnMpCisgICAgICBudW1iZXJPZm1hdGNoaW5nQ2hhcmFjdGVycyA9IHNz
Y2FuZihidWZmZXIsICJcdC8lcyAlKnNcbiIsIHBhdGhPZlRoZUxpYnJhcnkpOworICAgIGlmIChu
dW1iZXJPZm1hdGNoaW5nQ2hhcmFjdGVycyA+IDApIHsKKyAgICAgIGxpYnJhcnlEZXBlbmRlbmNp
ZXMuYXBwZW5kKHBhdGhPZlRoZUxpYnJhcnkpOworICAgICAgbGlicmFyeURlcGVuZGVuY2llcy5h
cHBlbmQoJzsnKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlckxpYnJhcnlEZXBlbmRl
bmNpZXNGcm9tTGRjb25maWdPdXRwdXQoY2hhciogYnVmZmVyLCBpbnQgYnVmZmVyTGVuZ3RoLCBT
dHJpbmcmIGxpYnJhcnlEZXBlbmRlbmNpZXMpCit7CisgICAgU3RyaW5nIGxpYnJhcnkoYnVmZmVy
LCBidWZmZXJMZW5ndGgpOworICAgIFZlY3RvcjxTdHJpbmc+IGR5bmFtaWNEZXBlbmRlbmNpZXM7
CisgICAgLy8gVGhlIGxpc3Qgb2YgZW1waXJpY2FsbHkgZ2F0aGVyZWQgbGlicmFyeSBkZXBlbmRl
bmNpZXMuCisgICAgZHluYW1pY0RlcGVuZGVuY2llcy5hcHBlbmQoImxpYmNyeXB0by5zbyIpOwor
ICAgIGR5bmFtaWNEZXBlbmRlbmNpZXMuYXBwZW5kKCJsaWJleHBhdC5zbyIpOworICAgIGR5bmFt
aWNEZXBlbmRlbmNpZXMuYXBwZW5kKCJsaWJmb250Y29uZmlnLnNvIik7CisgICAgZHluYW1pY0Rl
cGVuZGVuY2llcy5hcHBlbmQoImxpYmZyZWV0eXBlLnNvIik7CisgICAgZHluYW1pY0RlcGVuZGVu
Y2llcy5hcHBlbmQoImxpYm5zc19kbnMuc28iKTsKKyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFw
cGVuZCgibGlicmVzb2x2LnNvIik7CisgICAgZHluYW1pY0RlcGVuZGVuY2llcy5hcHBlbmQoImxp
YnNzbC5zbyIpOworICAgIGR5bmFtaWNEZXBlbmRlbmNpZXMuYXBwZW5kKCJsaWJYcmVuZGVyLnNv
Iik7CisgICAgZHluYW1pY0RlcGVuZGVuY2llcy5hcHBlbmQoImxpYnhjYiIpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBkeW5hbWljRGVwZW5kZW5jaWVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChsaWJyYXJ5LmNvbnRhaW5zKGR5bmFtaWNEZXBlbmRlbmNpZXMuYXQoaSkpKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgcGF0aE9mVGhlTGlicmFyeSA9IGxpYnJhcnkuc3Vic3RyaW5nKGxp
YnJhcnkuZmluZCgnLycpKTsKKyAgICAgICAgICAgIGlmIChwYXRoT2ZUaGVMaWJyYXJ5Lmxlbmd0
aCgpID4gMCkgeworICAgICAgICAgICAgICAgIGxpYnJhcnlEZXBlbmRlbmNpZXMuYXBwZW5kKHBh
dGhPZlRoZUxpYnJhcnkpOworICAgICAgICAgICAgICAgIGxpYnJhcnlEZXBlbmRlbmNpZXMuYXBw
ZW5kKCc7Jyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGNvbGxlY3RMaWJyYXJ5RGVwZW5kZW5jaWVzKFN0cmluZyAmbGlicmFyeURlcGVuZGVuY2ll
cywgU3RyaW5nIHByb2Nlc3MsIGNoYXIgcGFyYW1ldGVyc1tdKQoreworICAgIGludCBzdGF0dXM7
CisgICAgaW50IHBpcGVmZFsyXTsKKworICAgIGlmIChwaXBlKHBpcGVmZCkpCisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRXJyb3IgYnkgcGlwaW5nOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7
CisKKyAgICBzd2l0Y2ggKGZvcmsoKSkgeworICAgIGNhc2UgLTE6CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiRXJyb3IgYnkgZm9ya2luZzogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBjbG9zZShwaXBlZmRbMV0pOyAvLyBj
bG9zZSB0aGUgd3JpdGUgZW5kIG9mIHRoZSBwaXBlIGluIHRoZSBwYXJlbnQKKyAgICAgICAgRklM
RSogZmlsZTsKKyAgICAgICAgZmlsZSA9IGZkb3BlbihwaXBlZmRbMF0sICJyIik7CisKKyAgICAg
ICAgY2hhciBidWZmZXJbMjAwXTsKKyAgICAgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9m
KGJ1ZmZlciksIGZpbGUpKSB7CisgICAgICAgICAgICAgIGludCBsZW5ndGggPSBzdHJsZW4oYnVm
ZmVyKSAtIDE7CisgICAgICAgICAgICAgIGlmIChidWZmZXJbbGVuZ3RoXSA9PSAnXG4nKQorICAg
ICAgICAgICAgICAgICAgYnVmZmVyW2xlbmd0aF0gPSAwOworICAgICAgICAgICAgICBpZiAocHJv
Y2Vzcy5jb250YWlucyhTdHJpbmcoImxkLWxpbnV4IikpKQorICAgICAgICAgICAgICAgICAgZmls
dGVyTGlicmFyeURlcGVuZGVuY2llc0Zyb21MRERPdXRwdXQoYnVmZmVyLCBsZW5ndGgsIGxpYnJh
cnlEZXBlbmRlbmNpZXMpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBm
aWx0ZXJMaWJyYXJ5RGVwZW5kZW5jaWVzRnJvbUxkY29uZmlnT3V0cHV0KGJ1ZmZlciwgbGVuZ3Ro
LCBsaWJyYXJ5RGVwZW5kZW5jaWVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3YWl0KCZz
dGF0dXMpIDw9IDApCisgICAgICAgICAgICB3YXJuKCJXYWl0LiIpOworICAgICAgICBlbHNlIGlm
IChXSUZTSUdOQUxFRChzdGF0dXMpKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTaWdu
YWxlZDogc2lnbmFsICVkXG4iLCBXVEVSTVNJRyhzdGF0dXMpKTsKKyAgICAgICAgZWxzZSBpZiAo
V0lGRVhJVEVEKHN0YXR1cykgJiYgV0VYSVRTVEFUVVMoc3RhdHVzKSkKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRXhpdGVkOiBleGl0IHN0YXR1cyAlZFxuIiwgV0VYSVRTVEFUVVMoc3Rh
dHVzKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMDoKKyAgICAgICAgY2xvc2UocGlwZWZk
WzBdKTsKKworICAgICAgICBkdXAyKHBpcGVmZFsxXSwgMSk7IC8vIFNlbmQgc3Rkb3V0IHRvIHRo
ZSBwaXBlLgorICAgICAgICBkdXAyKHBpcGVmZFsxXSwgMik7IC8vIFNlbmQgc3RkZXJyIHRvIHRo
ZSBwaXBlLgorCisgICAgICAgIGlmIChwcm9jZXNzLmNvbnRhaW5zKCJsZC1saW51eCIsIGZhbHNl
KSkgeworICAgICAgICAgICAgLy8gVXNpbmcgbGRkIG1lYW5zIHRoYXQgd2UgY2FsbCBsZC1saW51
eCB3aGlsZSBMRF9UUkFDRV9MT0FERURfT0JKRUNUUyBpcyBzZXQuCisgICAgICAgICAgICAvLyBU
aGlzIHdheSB0aGUgInByb2Nlc3MiIHdvbid0IHJ1biBvbmx5IGl0cyBkZXBlbmRlbmNpZXMgd2ls
bCBiZSBkZXRlcm1pbmVkLgorICAgICAgICAgICAgc2V0ZW52KCJMRF9UUkFDRV9MT0FERURfT0JK
RUNUUyIsICJ5ZXMiLCAxKTsKKyAgICAgICAgICAgIGV4ZWNsKHByb2Nlc3MuYXNjaWkoKS5kYXRh
KCksIHByb2Nlc3MudXRmOCgpLmRhdGEoKSwgcGFyYW1ldGVycywgKGNoYXIgKikwKTsKKyAgICAg
ICAgICAgIHVuc2V0ZW52KCJMRF9UUkFDRV9MT0FERURfT0JKRUNUUyIpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGV4ZWNsKHByb2Nlc3MuYXNjaWkoKS5kYXRhKCksIHByb2Nlc3MudXRm
OCgpLmRhdGEoKSwgcGFyYW1ldGVycywgKGNoYXIgKikwKTsKKyAgICAgICAgY2xvc2UocGlwZWZk
WzFdKTsKKyAgICB9Cit9CisjZW5kaWYKIAogdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFBy
b2Nlc3MoKQogewpAQCAtMTQ4LDM1ICsyNTUsNjIgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6Omxh
dW5jaFByb2Nlc3MoKQogICAgIGNvbW1hbmRMaW5lID0gY29tbWFuZExpbmUuYXJnKHNvY2tldHNb
MF0pOwogI2VuZGlmCiAKLSAgICBRUHJvY2Vzcyogd2ViUHJvY2VzcyA9IG5ldyBRdFdlYlByb2Nl
c3MoKTsKLSAgICB3ZWJQcm9jZXNzLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZv
cndhcmRlZENoYW5uZWxzKTsKLSAgICB3ZWJQcm9jZXNzLT5zdGFydChjb21tYW5kTGluZSk7Cisg
ICAgUVByb2Nlc3MqIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CisjaWYgRU5BQkxFKFNVSURfU0FO
REJPWF9MSU5VWCkKKyAgICBTdHJpbmcgbGlicmFyeURlcGVuZGVuY2llczsKKyAgICAvLyBUaGVy
ZSBhcmUgdHdvIHdheSBob3cgd2UgZ2F0aGVyIHRoZSBkZXBlbmRlbmNpZXM6CisgICAgLy8gMSkg
VXNpbmcgbGRkIHRvIG9idGFpbiB0aGUgc3RhdGljIGRlcGVuZGVuY2llcyBvZiBRdFdlYlByb2Nl
c3MuCisgICAgLy8gMikgVXNpbmcgYSBkZXZlbGVwZXIgZGVmaW5lZCBsaXN0IG9mIGR5bmFtaWMg
ZGVwZW5kZW5jaWVzIChpdCdzIGdhdGhlcmVkIGVtcGlyaWNhbCB3YXkpLgorICAgIGNvbGxlY3RM
aWJyYXJ5RGVwZW5kZW5jaWVzKGxpYnJhcnlEZXBlbmRlbmNpZXMsICIvbGliNjQvbGQtbGludXgt
eDg2LTY0LnNvLjIiLCAoY2hhciopKGV4ZWN1dGFibGVQYXRoT2ZXZWJQcm9jZXNzKCkudXRmOCgp
LmRhdGEoKSkpOworICAgIGNvbGxlY3RMaWJyYXJ5RGVwZW5kZW5jaWVzKGxpYnJhcnlEZXBlbmRl
bmNpZXMsICIvc2Jpbi9sZGNvbmZpZyIsIChjaGFyKikoIi1wIikpOworCisgICAgUVN0cmluZyBz
YW5kYm94Q29tbWFuZExpbmUgPSBRTGF0aW4xU3RyaW5nKCIlMSAlMiAlMyAlNCIpOworICAgIHNh
bmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoUUNvcmVBcHBsaWNhdGlv
bjo6YXBwbGljYXRpb25EaXJQYXRoKCkgKyBRTGF0aW4xU3RyaW5nKCIvU1VJRFNhbmRib3hIZWxw
ZXIiKSk7CisgICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFyZyhl
eGVjdXRhYmxlUGF0aE9mV2ViUHJvY2VzcygpKTsKKyAgICBzYW5kYm94Q29tbWFuZExpbmUgPSBz
YW5kYm94Q29tbWFuZExpbmUuYXJnKHNvY2tldHNbMF0pOworICAgIHNhbmRib3hDb21tYW5kTGlu
ZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcobGlicmFyeURlcGVuZGVuY2llcyk7CisKKyAgICB3
ZWJQcm9jZXNzT3JTVUlESGVscGVyID0gbmV3IFFQcm9jZXNzKCk7CisgICAgd2ViUHJvY2Vzc09y
U1VJREhlbHBlci0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFu
bmVscyk7CisgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c3RhcnQoc2FuZGJveENvbW1hbmRM
aW5lKTsKKyNlbHNlCisgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlciA9IG5ldyBRdFdlYlByb2Nl
c3MoKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUo
UVByb2Nlc3M6Ok1lcmdlZENoYW5uZWxzKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5z
dGFydChjb21tYW5kTGluZSk7CisjZW5kaWYKIAogI2lmICFPUyhEQVJXSU4pCiAgICAgLy8gRG9u
J3QgZXhwb3NlIHRoZSB3ZWIgc29ja2V0IHRvIHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJvY2Vzc2Vz
CiAgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNbMF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0x
KSB7CiAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewogICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgICAg
IGRlbGV0ZSB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoIXdlYlByb2Nlc3MtPndhaXRGb3JTdGFy
dGVkKCkpIHsKKyAgICBpZiAoIXdlYlByb2Nlc3NPclNVSURIZWxwZXItPndhaXRGb3JTdGFydGVk
KCkpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkZhaWxlZCB0byBzdGFydCIgPDwgY29tbWFuZExp
bmU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2lmIE9TKERBUldJTikKICAgICAg
ICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgY29ubmVjdG9yKTsKICAg
ICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGNvbm5lY3RvciwgTUFD
SF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKICNlbmRpZgotICAgICAgICBkZWxldGUgd2ViUHJv
Y2VzczsKKyAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlByb2Nlc3Mt
PnBpZCgpLCAxMCk7CisgICAgc2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCB3ZWJQcm9jZXNzT3JT
VUlESGVscGVyLT5waWQoKSwgMTApOworCisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkK
KyAgICBpZiAoIXdlYlByb2Nlc3NPclNVSURIZWxwZXItPndhaXRGb3JGaW5pc2hlZCgpKSB7Cisg
ICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmCiAKLSAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKGJpbmQoJldlYktp
dDo6UHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCB0aGlzLCB3ZWJQ
cm9jZXNzLCBjb25uZWN0b3IpKTsKKyAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKGJpbmQo
JldlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCB0aGlz
LCB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLCBjb25uZWN0b3IpKTsKIH0KIAogdm9pZCBQcm9jZXNz
TGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQppbmRleCA5MTY2ODc0Li5h
NzAxZTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnByaQpAQCAtNjEsNyArNjEsOCBAQCBJTkNMVURFUEFUSCArPSBc
CiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZSBcCiAgICAgJCRTT1VSQ0VfRElS
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIFwKICAgICAkJFNPVVJDRV9E
SVIvV2ViUHJvY2Vzcy9xdCBcCi0gICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MKKyAgICAk
JFNPVVJDRV9ESVIvUGx1Z2luUHJvY2VzcyBcCisgICAgJCRTT1VSQ0VfRElSL1NhbmRib3hQcm9j
ZXNzCiAKICMgVGhlIFdlYktpdDIgUXQgQVBJcyBkZXBlbmQgb24gcXdlYmtpdGdsb2JhbC5oLCB3
aGljaCBsaXZlcyBpbiBXZWJLaXQKIElOQ0xVREVQQVRIICs9ICQke1JPT1RfV0VCS0lUX0RJUn0v
U291cmNlL1dlYktpdC9xdC9BcGkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVy
bC9GZWF0dXJlTGlzdC5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5w
bQppbmRleCBiZmQ5ZjBhLi4yNmIyYjRmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHBlcmwvRmVhdHVyZUxpc3QucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1
cmVMaXN0LnBtCkBAIC0xMTcsNiArMTE3LDcgQEAgbXkgKAogICAgICRzaGFyZWRXb3JrZXJzU3Vw
cG9ydCwKICAgICAkc3FsRGF0YWJhc2VTdXBwb3J0LAogICAgICRzdHlsZVNjb3BlZFN1cHBvcnQs
CisgICAgJHN1aWRMaW51eFNhbmRib3gsCiAgICAgJHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBvcnQs
CiAgICAgJHN2Z0ZvbnRzU3VwcG9ydCwKICAgICAkc3ZnU3VwcG9ydCwKQEAgLTM2Myw2ICszNjQs
OSBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4gInN0eWxlLXNjb3BlZCIsIGRl
c2MgPT4gIlRvZ2dsZSBTdHlsZSBTY29wZWQgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9TVFlMRV9TQ09QRUQiLCBkZWZhdWx0ID0+IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBc
JHN0eWxlU2NvcGVkU3VwcG9ydCB9LAogCisgICAgeyBvcHRpb24gPT4gInN1aWQtbGludXgtc2Fu
ZGJveCIsIGRlc2MgPT4gIlRvZ2dsZSBzdWlkIHNhbmRib3ggZm9yIGxpbnV4IiwKKyAgICAgIGRl
ZmluZSA9PiAiRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUg
PT4gXCRzdWlkTGludXhTYW5kYm94IH0sCisKICAgICB7IG9wdGlvbiA9PiAic3ZnIiwgZGVzYyA9
PiAiVG9nZ2xlIFNWRyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWRyIsIGRl
ZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRzdmdTdXBwb3J0IH0sCiAKLS0gCjEuNy45LjUKCg==
</data>
<flag name="commit-queue"
          id="172526"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163116</attachid>
            <date>2012-09-10 06:47:23 -0700</date>
            <delta_ts>2012-09-10 06:59:45 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-up-7.3.patch</filename>
            <type>text/plain</type>
            <size>42970</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBiMDBhODI4MjMzNDkxMDAwZDQ0OTA5ZThhZTdjZTVhMjE0ODMwMjdiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHdlYmtpdC5vcmc+CkRhdGU6IE1vbiwgMTAg
U2VwIDIwMTIgMTU6MjM6NDQgKzAyMDAKU3ViamVjdDogW1BBVENIXSB1cCA3LjMKCi0tLQogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsK
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgICAgICAgICAgICAgICAgICAgIHwgICAg
NiArCiBTb3VyY2UvUXRXZWJLaXQucHJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDUgKwogU291cmNlL1dURi9XVEYudmNwcm9qL1dURi5zbG4gICAgICAgICAgICAgICAgICAg
ICAgfCAgIDk4ICsrKy0tLQogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5j
cHAgICAgICAgICAgfCAgICAyICstCiAuLi4vV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZyB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNCArLQogU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQyL1NhbmRi
b3hQcm9jZXNzLnBybyAgICAgICAgICAgICAgICAgIHwgICAyOSArKwogLi4uL1NhbmRib3hQcm9j
ZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcCAgICAgfCAgMzE1ICsrKysrKysrKysrKysr
KysrKysrCiAuLi4vU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCAgICAg
ICB8ICAgNTkgKysrKwogLi4uL2VmbC9TYW5kYm94RW52aXJvbm1lbnRMaW51eEVmbC5jcHAgICAg
ICAgICAgICAgfCAgIDM2ICsrKwogLi4uL2d0ay9TYW5kYm94RW52aXJvbm1lbnRMaW51eEd0ay5j
cHAgICAgICAgICAgICAgfCAgIDM2ICsrKwogLi4uL3F0L1NhbmRib3hFbnZpcm9ubWVudExpbnV4
UXQuY3BwICAgICAgICAgICAgICAgfCAgIDU5ICsrKysKIFNvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiAuLi4vVUlQcm9jZXNzL0xhdW5j
aGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCAgICB8ICAxNDkgKysrKysrKystCiBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnByaSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgIHwgICAgMSAt
CiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gICAgICAgICAgICB8ICAg
IDQgKwogMTkgZmlsZXMgY2hhbmdlZCwgNzU5IGluc2VydGlvbnMoKyksIDYyIGRlbGV0aW9ucygt
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL1NhbmRib3hF
bnZpcm9ubWVudExpbnV4LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1Nh
bmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9lZmwvU2FuZGJveEVudmlyb25tZW50TGlu
dXhFZmwuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nl
c3MvZ3RrL1NhbmRib3hFbnZpcm9ubWVudExpbnV4R3RrLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL3F0L1NhbmRib3hFbnZpcm9ubWVudExpbnV4
UXQuY3BwCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGIwNzU3YTkuLmExZTUwNjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5IEBACisy
MDEyLTA5LTA5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XSBVbnJldmlld2VkIGdhcmRlbmluZywgc2tpcCBuZXcgZmFpbGluZyB0ZXN0cyB0byBw
YWludCB0aGUgYm90cyBncmVlbi4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisK
IDIwMTItMDktMDkgIEt5dW5nVGFlIEtpbSAgPGt0Zi5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF0gV3JvbmcgcmVuZGVyaW5nIHJlc3VsdHMgZm9yIHNxdWFyZS1idXR0b24tYXBwZWFy
YW5jZS5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCA2ZDRhNjllLi45MjI3YWQxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTI3ODksMyArMjc4OSw5IEBAIGZhc3QvaW5uZXJI
VE1ML2lubmVySFRNTC1pZnJhbWUuaHRtbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTU5NTIKIGZhc3Qvdmlld3BvcnQvdmlld3BvcnQtbGltaXRzLWFkanVzdGVk
LWZvci1uby11c2VyLXNjYWxlLWNvbnRyb2wuaHRtbAogZmFzdC92aWV3cG9ydC92aWV3cG9ydC1s
aW1pdHMtYWRqdXN0ZWQtZm9yLW5vLXVzZXItc2NhbGUuaHRtbAorCisjIFJFR1JFU1NJT04gKHIx
MjgwMDYpOiBUaHJlZSBzcGF0aWFsIG5hdmlnYXRpb24gdGVzdHMgYXJlIGZhaWxpbmcKKyMgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2MjI2CitmYXN0L3NwYXRpYWwt
bmF2aWdhdGlvbi9zbmF2LWNvbnRhaW5lci13aGl0ZS1zcGFjZS5odG1sCitmYXN0L3NwYXRpYWwt
bmF2aWdhdGlvbi9zbmF2LWRpdi1vdmVyZmxvdy1zY3JvbC1oaWRkZW4uaHRtbAorZmFzdC9zcGF0
aWFsLW5hdmlnYXRpb24vc25hdi1pbWFnZW1hcC1vdmVybGFwcGVkLWFyZWFzLmh0bWwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9RdFdlYktpdC5wcm8gYi9Tb3VyY2UvUXRXZWJLaXQucHJvCmluZGV4IGIx
MGM3YWMuLjRhYmRmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdFdlYktpdC5wcm8KKysrIGIvU291
cmNlL1F0V2ViS2l0LnBybwpAQCAtMTcsNiArMTcsMTEgQEAgU1VCRElSUyArPSBhcGkKICAgICAg
ICAgcGx1Z2lucHJvY2Vzcy5maWxlID0gV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzLnBybwogICAgICAg
ICBTVUJESVJTICs9IHBsdWdpbnByb2Nlc3MKICAgICB9CisKKyAgICBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYPTEpIHsKKyAgICAgICAgc2FuZGJveHByb2Nlc3Mu
ZmlsZSA9IFdlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvCisgICAgICAgIFNVQkRJUlMgKz0gc2Fu
ZGJveHByb2Nlc3MKKyAgICB9CiB9CiAKIGluY2x1ZGUoV2ViS2l0L3F0L2RvY3MvZG9jcy5wcmkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCmluZGV4IDQyYTUzNmYu
LmUzMzhjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCkBA
IC0xNDAsNyArMTQwLDcgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFz
ZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
U3RyaW5nIGRhdGFiYXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICAKKwogICAg
IGlmICghU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNl
UGF0aCwgY3JlYXRlSWZEb2VzTm90RXhpc3QpKSB7CiAgICAgICAgIGlmIChjcmVhdGVJZkRvZXNO
b3RFeGlzdCkKICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkYXRhYmFz
ZSBmaWxlICclcyciLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9T
b3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRl
eCA4YWE5Y2QzLi42OTI3ZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMTE2LDYgKzExNiw3IEBAIEVOQUJM
RV9QUk9HUkVTU19FTEVNRU5UID0gRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQ7CiBFTkFCTEVfUVVP
VEEgPSA7CiBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVTVF9B
TklNQVRJT05fRlJBTUU7CiBFTkFCTEVfU0NSSVBURURfU1BFRUNIID0gOworRU5BQkxFX1NVSURf
U0FOREJPWF9MSU5VWCA9IDsKIEVOQUJMRV9TSEFET1dfRE9NID0gOwogRU5BQkxFX1NIQVJFRF9X
T1JLRVJTID0gRU5BQkxFX1NIQVJFRF9XT1JLRVJTOwogRU5BQkxFX1NRTF9EQVRBQkFTRSA9IEVO
QUJMRV9TUUxfREFUQUJBU0U7CkBAIC0xNDAsNCArMTQxLDQgQEAgRU5BQkxFX1dJREdFVF9SRUdJ
T05fbWFjb3N4ID0gRU5BQkxFX1dJREdFVF9SRUdJT047CiBFTkFCTEVfV09SS0VSUyA9IEVOQUJM
RV9XT1JLRVJTOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJTkVT
ID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
ICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5ORUxf
TUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9O
X0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5H
KSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVOQUJM
RV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAk
KEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0NTU19T
VElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNfVEVY
VF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RB
U0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRB
X1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklD
RV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9S
WV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJM
RV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04p
ICQoRU5BQkxFX0hJR0hfRFBJX0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJM
RV9JRlJBTUVfU0VBTUxFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lO
UFVUX1NQRUVDSCkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQ
RV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVU
X1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBU
X0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVf
TEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJ
TktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChF
TkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVf
TUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAk
KEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykg
JChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkg
JChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJM
RV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9X
T1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChF
TkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19G
T05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElP
TlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFH
RVIpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wp
ICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9U
SU1JTkcpICQoRU5BQkxFX1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJM
RV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxF
X0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChF
TkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykg
JChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVf
Q1NTX0hJRVJBUkNISUVTKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxF
X0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NT
X1NIQURFUlMpICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJ
QUJMRVMpICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NI
RU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElT
VF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxT
X0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VM
RU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAk
KEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBB
RCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJR0hfRFBJX0NBTlZBUykgJChFTkFC
TEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJBTUVfU0VBTUxFU1MpICQoRU5BQkxFX0lOREVY
RURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1NQRUVDSCkgJChFTkFCTEVfSU5QVVRfVFlQRV9D
T0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVU
SU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9X
RUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZF
TkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xJ
TktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRITUwpICQo
RU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVf
TUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFC
TEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykg
JChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkgJChF
TkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NVSURf
U0FOREJPWF9MSU5VWCkgJChFTkFCTEVfU0hBRE9XX0RPTSkgJChFTkFCTEVfU0hBUkVEX1dPUktF
UlMpICQoRU5BQkxFX1NRTF9EQVRBQkFTRSkgJChFTkFCTEVfU1RZTEVfU0NPUEVEKSAkKEVOQUJM
RV9TVkcpICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRT
KSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19P
TkxZKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX1VORE9fTUFOQUdFUikg
JChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChF
TkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlO
RykgJChFTkFCTEVfV0lER0VUX1JFR0lPTikgJChFTkFCTEVfV09SS0VSUykgJChFTkFCTEVfWFNM
VCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBlZDE1ZDAzLi5iMjkyYzYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI3Niw3ICsyNzYsOSBAQCB3ZWJraXQy
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nv
bm5lY3Rpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3ND
b25uZWN0aW9uLmggXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvZ3RrL1BsdWdpbkNv
bnRyb2xsZXJQcm94eUd0ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvZ3Rr
L1BsdWdpblByb2Nlc3NHdGsuY3BwIFwKKyAgICAgICAgU291cmNlL1dlYktpdDIvUGx1Z2luUHJv
Y2Vzcy9ndGsvUGx1Z2luUHJvY2Vzc0d0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1NhbmRib3hQ
cm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4R3RrLmNwcCBcCisgICAgICAgIFNvdXJjZS9X
ZWJLaXQyL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4R3RrLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvU2hhcmVkL0RyYWdDb250cm9sbGVyQWN0aW9uLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Gb250SW5mby5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSFRUUENv
b2tpZUFjY2VwdFBvbGljeS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYjQ5MjQ3
Zi4uN2QzNzQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UK
KysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTE1LDYgKzE1LDggQEAg
TElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nv
bm5lY3Rpb25Vbml4LmNwcAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9BdHRhY2htZW50VW5p
eC5jcHAKIAorICAgIFNhbmRib3hQcm9jZXNzL2VmbC9TYW5kYm94RW52aXJvbm1lbnRMaW51eEVm
bC5jcHAKKwogICAgIFNoYXJlZC9BUEkvYy9jYWlyby9XS0ltYWdlQ2Fpcm8uY3BwCiAKICAgICBT
aGFyZWQvQVBJL2MvZ3RrL1dLR3JhcGhpY3NDb250ZXh0R3RrLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvIGIvU291cmNlL1dlYktpdDIvU2FuZGJveFBy
b2Nlc3MucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MzRkYzcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KQEAgLTAs
MCArMSwyOSBAQAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2plY3QgZmlsZSBmb3IgdGhlIFdlYktpdDIg
c2FuZGJveCBwcm9jZXNzIGJpbmFyeQorIworIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9y
IGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitURU1QTEFU
RSA9IGFwcAorCitRVCAgICAgICArPSB3ZWJraXQKKworVEFSR0VUID0gU1VJRFNhbmRib3hIZWxw
ZXIKK0RFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0vYmluCisKK1NPVVJDRVMgKz0gU2FuZGJv
eFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwIFwKKyAgICAgICAgICAgU2FuZGJv
eFByb2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50TGludXhRdC5jcHAKKworSEVBREVSUyArPSBT
YW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oCisKK0lOQ0xVREVQQVRIID0g
XAorICAgICQkUFdELy4uLy4uL1dURiBcCisgICAgJCRJTkNMVURFUEFUSAorCitJTlNUQUxMUyAr
PSB0YXJnZXQKKworaXNFbXB0eShJTlNUQUxMX0JJTlMpIHsKKyAgICB0YXJnZXQucGF0aCA9ICQk
W1FUX0lOU1RBTExfQklOU10KK30gZWxzZSB7CisgICAgdGFyZ2V0LnBhdGggPSAkJElOU1RBTExf
QklOUworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJv
eEVudmlyb25tZW50TGludXguY3BwIGIvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2Fu
ZGJveEVudmlyb25tZW50TGludXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmY2MGI1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJv
Y2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKQEAgLTAsMCArMSwzMTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJTYW5kYm94RW52
aXJvbm1lbnRMaW51eC5oIgorCisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKyNpbmNs
dWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lu
Y2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3lzL21vdW50Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCitTYW5kYm94RW52aXJvbm1lbnRMaW51eDo6U2FuZGJveEVudmlyb25tZW50TGlu
dXgoY29uc3QgU3RyaW5nJiBjaHJvb3REaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgd2Via2l0Qmlu
YXJ5RGlyZWN0b3J5KQoreworICAgIG1fc2FuZGJveFJvb3QgPSBjaHJvb3REaXJlY3Rvcnk7Cisg
ICAgc2l6ZV90IGVuZE9mRGlyZWN0b3J5UGF0aCA9IHdlYmtpdEJpbmFyeURpcmVjdG9yeS5yZXZl
cnNlRmluZCgnLycpOworICAgIGlmIChlbmRPZkRpcmVjdG9yeVBhdGggPT0gbm90Rm91bmQpCisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB3ZWJraXQgZGlyZWN0b3J5OiAlcy5cbiIs
IHdlYmtpdEJpbmFyeURpcmVjdG9yeS51dGY4KCkuZGF0YSgpKTsKKworICAgIG1fYmluYXJ5RGly
ZWN0b3J5ID0gd2Via2l0QmluYXJ5RGlyZWN0b3J5LmxlZnQoZW5kT2ZEaXJlY3RvcnlQYXRoKTsK
KyAgICBtX2hvbWVEaXJlY3RvcnkgPSBBU0NJSUxpdGVyYWwoZ2V0cHd1aWQoZ2V0cHd1aWQoZ2V0
dWlkKCkpLT5wd191aWQpLT5wd19kaXIpOworCisgICAgbV9kZXZpY2VzLmFwcGVuZChBU0NJSUxp
dGVyYWwoIi9kZXYvdXJhbmRvbSIpKTsKKyAgICBtX2RldmljZXMuYXBwZW5kKEFTQ0lJTGl0ZXJh
bCgiL2Rldi9yYW5kb20iKSk7CisKKyAgICBtX2JvdW5kZWREaXJlY3Rvcmllcy5hcHBlbmQoQVND
SUlMaXRlcmFsKCIvcHJvYy8iKSk7CisgICAgbV9ib3VuZGVkRGlyZWN0b3JpZXMuYXBwZW5kKEFT
Q0lJTGl0ZXJhbCgiL3J1bi9zaG0vIikpOworCisgICAgbV9saW5rZWRGaWxlcy5hcHBlbmQoQVND
SUlMaXRlcmFsKCIvZXRjL2xkLnNvLmNhY2hlIikpOworICAgIG1fbGlua2VkRmlsZXMuYXBwZW5k
KEFTQ0lJTGl0ZXJhbCgiL2V0Yy9sZC5zby5jb25mIikpOworICAgIG1fbGlua2VkRmlsZXMuYXBw
ZW5kKEFTQ0lJTGl0ZXJhbCgiL3Zhci9saWIvZGJ1cy9tYWNoaW5lLWlkIikpOworICAgIG1fbGlu
a2VkRGlyZWN0b3JpZXMuYXBwZW5kKG1faG9tZURpcmVjdG9yeSArICIvLmZvbnRjb25maWcvIik7
CisKKyAgICBtX2xpbmtlZERpcmVjdG9yaWVzLmFwcGVuZChBU0NJSUxpdGVyYWwoIi9ldGMvZm9u
dHMiKSk7CisgICAgbV9saW5rZWREaXJlY3Rvcmllcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCIvZXRj
L2xkLnNvLmNvbmYuZCIpKTsKKyAgICBtX2xpbmtlZERpcmVjdG9yaWVzLmFwcGVuZChBU0NJSUxp
dGVyYWwoIi91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvZ2NvbnYiKSk7CisgICAgbV9saW5rZWRE
aXJlY3Rvcmllcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCIvdXNyL3NoYXJlL2ZvbnRzIikpOworICAg
IG1fbGlua2VkRGlyZWN0b3JpZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgiL2hvbWUvcmVuaS9yZXBv
cy93ZWJraXQvV2ViS2l0QnVpbGQvUmVsZWFzZS9saWIvcGx1Z2lucyIpKTsKKyAgICBtX2xpbmtl
ZERpcmVjdG9yaWVzLmFwcGVuZChtX2JpbmFyeURpcmVjdG9yeSk7CisKKyAgICBwbGF0Zm9ybUlu
aXRpYWxpemUoKTsKK30KKworYm9vbCBzdGF0aWMgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgc3RydWN0IHN0YXQgZmlsZVN0YXQ7CisgICAgaWYgKHN0YXQocGF0aC51dGY4
KCkuZGF0YSgpLCAmZmlsZVN0YXQpID09IC0xICYmIGVycm5vID09IEVOT0VOVCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNhbmRib3hFbnZpcm9u
bWVudExpbnV4OjpjcmVhdGVEaXJlY3RvcnkoU3RyaW5nJiBmdWxscGF0aCwgY29uc3QgU3RyaW5n
JiBzdWJzdHIpCit7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgZnVsbHBhdGguYXBwZW5kKHN1
YnN0cik7CisgICAgb2sgPSBta2RpcihTdHJpbmcobV9zYW5kYm94Um9vdCArIGZ1bGxwYXRoKS51
dGY4KCkuZGF0YSgpLCAwNzc3KSAhPSAtMSB8fCBlcnJubyA9PSBFRVhJU1Q7CisKKyAgICBpZiAo
IW9rKSB7CisgICAgICAgIHByaW50ZigiQ3JlYXRpb24gb2YgJXMgZmFpbGVkOiAlc1xuIiwgZnVs
bHBhdGgudXRmOCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIG9r
OworICAgIH0KKworICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIHN0YXQoZnVsbHBhdGgu
dXRmOCgpLmRhdGEoKSwgJmZpbGVTdGF0KTsKKyAgICBpZiAoZmlsZVN0YXQuc3RfdWlkID09IGdl
dHVpZCgpKSB7CisgICAgICAgIHN0cnVjdCBwYXNzd2QqIG5vYm9keVVzZXIgPSBnZXRwd25hbSgi
bm9ib2R5Iik7CisgICAgICAgIGlmICg6OmNob3duKFN0cmluZyhtX3NhbmRib3hSb290ICsgZnVs
bHBhdGgpLnV0ZjgoKS5kYXRhKCksIG5vYm9keVVzZXItPnB3X3VpZCwgbm9ib2R5VXNlci0+cHdf
Z2lkKSA9PSAtMSkKKyAgICAgICAgICAgIHByaW50ZigiRXJyb3IgYnkgb3duaW5nOiAlcy5cbiIs
IHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICAgIHJldHVybiBvazsKK30KKworYm9vbCBTYW5k
Ym94RW52aXJvbm1lbnRMaW51eDo6Y3JlYXRlRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgaWYgKGZpbGVFeGlzdHMoKG1fc2FuZGJveFJvb3QgKyBwYXRoKSkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaW50IHN0YXJ0UG9zID0gMDsKKyAgICBpbnQgZW5kUG9z
ID0gMDsKKyAgICBTdHJpbmcgZnVsbHBhdGggPSAiIjsKKyAgICB3aGlsZSAoKGVuZFBvcyA9IHBh
dGguZmluZCgnLycsIHN0YXJ0UG9zKSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgU3RyaW5nIHN1
YnN0ciA9IHBhdGguc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcyArIDEpOwor
ICAgICAgICBjcmVhdGVEaXJlY3RvcnkoZnVsbHBhdGgsIHN1YnN0cik7CisgICAgICAgIHN0YXJ0
UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisgICAgY3JlYXRlRGlyZWN0b3J5KGZ1bGxwYXRoLCBw
YXRoLnN1YnN0cmluZyhzdGFydFBvcywgcGF0aC5sZW5ndGgoKSkpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjpjcmVhdGVEZXZpY2VGaWxlcygp
Cit7CisgICAgY3JlYXRlRGlyZWN0b3J5UGF0aChBU0NJSUxpdGVyYWwoIi9kZXYvIikpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbV9kZXZpY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHN0
cnVjdCBzdGF0IHN0YXR1czsKKyAgICAgICAgaWYgKHN0YXQobV9kZXZpY2VzLmF0KGkpLnV0Zjgo
KS5kYXRhKCksICZzdGF0dXMpICE9IC0xKSB7CisgICAgICAgICAgICBkZXZfdCBkZXYgPSBzdGF0
dXMuc3RfcmRldjsKKyAgICAgICAgICAgIC8vIEJvdGggbmVlZGVkIGRldmljZSBmaWxlcyAoL2Rl
di9yYW5kb20gYW5kIC9kZXYvdXJhbmRvbSkgYXJlIGNoYXJhY3RlciBtX2RldmljZXMgYW5kCisg
ICAgICAgICAgICAvLyB0aGVpciBwZXJtaXNzaW9ucyBzaG91bGQgYmU6IHJ3LXJ3LXJ3LS4KKyAg
ICAgICAgICAgIFN0cmluZyBkZXZpY2UgPSBtX3NhbmRib3hSb290ICsgbV9kZXZpY2VzLmF0KGkp
OworICAgICAgICAgICAgbWtub2QoZGV2aWNlLnV0ZjgoKS5kYXRhKCksIFNfSUZDSFIgfCBTX0lS
VVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgsIG1h
a2VkZXYobWFqb3IoZGV2KSwgbWlub3IoZGV2KSkpOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjpiaW5kU2FuZGJveERpcmVjdG9yaWVzKCkKK3sK
KyAgICAvLyBNb3VudGluZyB0aGUgbmVlZGVkIHN5c3RlbSBkaXJlY3Rvcmllcy4KKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fYm91bmRlZERpcmVjdG9yaWVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGNyZWF0ZURpcmVjdG9yeVBhdGgobV9ib3VuZGVkRGlyZWN0b3JpZXMuYXQoaSkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIFN0cmluZyBkaXJlY3RvcnlQYXRoID0gbV9zYW5kYm94Um9vdCAr
IG1fYm91bmRlZERpcmVjdG9yaWVzLmF0KGkpOworICAgICAgICBpZiAoIW1vdW50KG1fYm91bmRl
ZERpcmVjdG9yaWVzLmF0KGkpLnV0ZjgoKS5kYXRhKCksIGRpcmVjdG9yeVBhdGgudXRmOCgpLmRh
dGEoKSwgIiIsIE1TX0JJTkQgfCBNU19SRUMgfCBNU19NT1ZFLCAiIikgPT0gLTEpCisgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG1vdW50aW5nICVzLiAlc1xuIiwgZGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpLCBzdHJlcnJvcihlcnJubykpOworICAgIH0KK30KKwordm9p
ZCBTYW5kYm94RW52aXJvbm1lbnRMaW51eDo6YWRkTm9ib2R5VXNlclRvUGFzc3dkKCkKK3sKKyAg
ICBjcmVhdGVEaXJlY3RvcnlQYXRoKCIvZXRjLyIpOworICAgIEZJTEUqIHBhc3N3ZEZpbGUgPSBm
b3BlbihTdHJpbmcobV9zYW5kYm94Um9vdCArICIvZXRjL3Bhc3N3ZCIpLnV0ZjgoKS5kYXRhKCks
ICJ3KyIpOworICAgIGlmICghcGFzc3dkRmlsZSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
cmVhdGluZyBwYXNzd2QgZmlsZSBmYWlsZWQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAg
ICBzdHJ1Y3QgcGFzc3dkKiBub2JvZHlVc2VyID0gZ2V0cHduYW0oIm5vYm9keSIpOworICAgIFN0
cmluZyBwYXNzd29yZENvbnRlbnQgPSBTdHJpbmc6OmZyb21VVEY4KG5vYm9keVVzZXItPnB3X25h
bWUpICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRG
OChub2JvZHlVc2VyLT5wd19wYXNzd2QpICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nOjpudW1iZXIobm9ib2R5VXNlci0+cHdfdWlkKSArICc6JyArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzo6bnVtYmVyKG5vYm9keVVzZXItPnB3X2dpZCkg
KyAnOicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG5v
Ym9keVVzZXItPnB3X2dlY29zKSArICc6JyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIvaG9tZS9ub2JvZHkiICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nOjpmcm9tVVRGOChub2JvZHlVc2VyLT5wd19zaGVsbCk7CisgICAgZnB1dHMocGFzc3dvcmRD
b250ZW50LnV0ZjgoKS5kYXRhKCksIHBhc3N3ZEZpbGUpOworICAgIGZjbG9zZShwYXNzd2RGaWxl
KTsKK30KKwordm9pZCBTYW5kYm94RW52aXJvbm1lbnRMaW51eDo6bGlua0ZpbGVSZWN1cnNpdmVs
eShjb25zdCBTdHJpbmcmIHNvdXJjZUZpbGUsIGNvbnN0IFN0cmluZyYgdGFyZ2V0RmlsZSkKK3sK
KyAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKKyAgICBpZiAobHN0YXQoc291cmNlRmlsZS51dGY4
KCkuZGF0YSgpLCAmZmlsZUluZm8pID09IC0xICYmIGVycm5vID09IEVOT0VOVCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc2l6ZV90IGVuZE9mQmFzZURpcmVjdG9yeUluU291cmNlID0gc291cmNl
RmlsZS5yZXZlcnNlRmluZCgnLycpOworICAgIGlmIChlbmRPZkJhc2VEaXJlY3RvcnlJblNvdXJj
ZSA9PSBub3RGb3VuZCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgc291cmNl
OiAlcy5cbiIsIHNvdXJjZUZpbGUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgU3RyaW5nIGJhc2VEaXJlY3RvcnlPZlNvdXJjZSA9IHNvdXJjZUZpbGUubGVmdChl
bmRPZkJhc2VEaXJlY3RvcnlJblNvdXJjZSArIDEpOworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5
UGF0aChiYXNlRGlyZWN0b3J5T2ZTb3VyY2UudXRmOCgpLmRhdGEoKSkpIHsKKyAgICAgICAgcHJp
bnRmKCJDcmVhdGluZyAlcyBmYWlsZWQ6ICVzLlxuIiwgYmFzZURpcmVjdG9yeU9mU291cmNlLnV0
ZjgoKS5kYXRhKCksIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChsaW5rKHNvdXJjZUZpbGUudXRmOCgpLmRhdGEoKSwgdGFyZ2V0RmlsZS51dGY4KCku
ZGF0YSgpKSA9PSAtMSAmJiBlcnJubyAhPSBFRVhJU1QpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJMaW5raW5nICVzIGZhaWxlZDogJXMuXG4iLCBzb3VyY2VGaWxlLnV0ZjgoKS5kYXRhKCks
IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBIYW5k
bGUgc3ltbGlua3MuCisgICAgaWYgKChmaWxlSW5mby5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lG
TE5LKSB7CisgICAgICAgIGNoYXIgc3ltbGlua1RhcmdldFs1MTJdOworICAgICAgICBpbnQgbGVu
Z3RoT2ZUaGVMaW5rID0gcmVhZGxpbmsoc291cmNlRmlsZS51dGY4KCkuZGF0YSgpLCBzeW1saW5r
VGFyZ2V0LCBzaXplb2Yoc3ltbGlua1RhcmdldCkpOworICAgICAgICBpZiAobGVuZ3RoT2ZUaGVM
aW5rID4gMCkKKyAgICAgICAgICAgIHN5bWxpbmtUYXJnZXRbbGVuZ3RoT2ZUaGVMaW5rXSA9ICdc
MCc7CisgICAgICAgIFN0cmluZyBzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGQ7CisgICAgICAgIFN0
cmluZyBzeW1saW5rVGFyZ2V0SW5TYW5kYm94OworICAgICAgICAvLyBNYWtpbmcgZGlmZmVyZW5j
ZSBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocy4KKyAgICAgICAgaWYgKHN5bWxp
bmtUYXJnZXRbMF0gIT0gJy8nKSB7CisgICAgICAgICAgICBzeW1saW5rVGFyZ2V0SW5SZWFsV29y
bGQgPSBiYXNlRGlyZWN0b3J5T2ZTb3VyY2UgKyAnLycgKyBzeW1saW5rVGFyZ2V0OworICAgICAg
ICAgICAgc3ltbGlua1RhcmdldEluU2FuZGJveCA9IG1fc2FuZGJveFJvb3QgKyAnLycgKyBzeW1s
aW5rVGFyZ2V0SW5SZWFsV29ybGQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzeW1s
aW5rVGFyZ2V0SW5SZWFsV29ybGQgPSBzeW1saW5rVGFyZ2V0OworICAgICAgICAgICAgc3ltbGlu
a1RhcmdldEluU2FuZGJveCA9IG1fc2FuZGJveFJvb3QgKyBzeW1saW5rVGFyZ2V0OworICAgICAg
ICB9CisgICAgICAgIGxpbmtGaWxlUmVjdXJzaXZlbHkoc3ltbGlua1RhcmdldEluUmVhbFdvcmxk
LCBzeW1saW5rVGFyZ2V0SW5TYW5kYm94KTsKKyAgICB9Cit9CisKK3ZvaWQgU2FuZGJveEVudmly
b25tZW50TGludXg6OmxpbmtEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBzb3VyY2VEaXJlY3RvcnlQ
YXRoLCBjb25zdCBTdHJpbmcmIHRhcmdldERpcmVjdG9yeVBhdGgpCit7CisgICAgaWYgKCFjcmVh
dGVEaXJlY3RvcnlQYXRoKHNvdXJjZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSkpCisgICAg
ICAgIHByaW50ZigiQ3JlYXRpbmcgJXMgZmFpbGVkOiAlcy5cbiIsIHRhcmdldERpcmVjdG9yeVBh
dGgudXRmOCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBESVIqIGRpcmVjdG9yeSA9
IG9wZW5kaXIoc291cmNlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoZGly
ZWN0b3J5KSB7CisgICAgICAgIHN0cnVjdCBkaXJlbnQgKmRpcmVjdG9yeUluZm8gPSAwOworICAg
ICAgICB3aGlsZSAoKGRpcmVjdG9yeUluZm8gPSByZWFkZGlyKGRpcmVjdG9yeSkpKSB7CisgICAg
ICAgICAgICBTdHJpbmcgbmV4dEZpbGVJbkRpcmVjdG9yeSA9IGRpcmVjdG9yeUluZm8tPmRfbmFt
ZTsKKyAgICAgICAgICAgIGlmIChuZXh0RmlsZUluRGlyZWN0b3J5ID09ICIuIiB8fCBuZXh0Rmls
ZUluRGlyZWN0b3J5ID09ICIuLiIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgU3RyaW5nIHNvdXJjZUZpbGUgPSBzb3VyY2VEaXJlY3RvcnlQYXRoICsgJy8nICsg
bmV4dEZpbGVJbkRpcmVjdG9yeTsKKyAgICAgICAgICAgIFN0cmluZyB0YXJnZXRGaWxlID0gdGFy
Z2V0RGlyZWN0b3J5UGF0aCArICcvJyArIG5leHRGaWxlSW5EaXJlY3Rvcnk7CisKKyAgICAgICAg
ICAgIGlmIChkaXJlY3RvcnlJbmZvLT5kX3R5cGUgPT0gRFRfRElSKQorICAgICAgICAgICAgICAg
IGxpbmtEaXJlY3Rvcnkoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbGlua0ZpbGVSZWN1cnNpdmVseShzb3VyY2VGaWxlLCB0YXJnZXRG
aWxlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTYW5kYm94RW52aXJvbm1lbnRMaW51
eDo6YWRkRGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluZyYgZGVwZW5kZW5jeUxpc3QpCit7CisgICAg
Ly8gTGluayBkZXBlbmRlbmNpZXMgb2J0YWluZWQgd2l0aCBsZGQuCisgICAgVmVjdG9yPFN0cmlu
Zz4gc3BsaXR0ZWRMaXN0OworICAgIGRlcGVuZGVuY3lMaXN0LnNwbGl0KCc7Jywgc3BsaXR0ZWRM
aXN0KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNwbGl0dGVkTGlzdC5zaXplKCk7ICsraSkg
eworICAgICAgICBTdHJpbmcgc291cmNlID0gc3BsaXR0ZWRMaXN0LmF0KGkpOworICAgICAgICBp
ZiAoc291cmNlWzBdICE9ICcvJykKKyAgICAgICAgICAgIHNvdXJjZS5pbnNlcnQoIi8iLCAwKTsK
KyAgICAgICAgbGlua0ZpbGVSZWN1cnNpdmVseShzb3VyY2UsIG1fc2FuZGJveFJvb3QgKyBzb3Vy
Y2UpOworICAgIH0KKworICAgIC8vIExpbmsgc2luZ2xlIGZpbGVzLgorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbV9saW5rZWRGaWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbGlua0ZpbGVSZWN1
cnNpdmVseShtX2xpbmtlZEZpbGVzLmF0KGkpLCBtX3NhbmRib3hSb290ICsgbV9saW5rZWRGaWxl
cy5hdChpKSk7CisKKyAgICAvLyBMaW5rIHRoZSBkaXJlY3RvcmllcyBub3QgcGxhY2VkIGluIHVz
ZXJzIGhvbWUuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2xpbmtlZERpcmVjdG9yaWVzLnNp
emUoKTsgKytpKQorICAgICAgICBsaW5rRGlyZWN0b3J5KG1fbGlua2VkRGlyZWN0b3JpZXMuYXQo
aSksIG1fc2FuZGJveFJvb3QgKyBtX2xpbmtlZERpcmVjdG9yaWVzLmF0KGkpKTsKKworICAgIHBh
c3N3ZCogbm9ib2R5ID0gZ2V0cHduYW0oIm5vYm9keSIpOworICAgIFN0cmluZyBzdHIgPSBtX3Nh
bmRib3hSb290ICsgbV9ob21lRGlyZWN0b3J5OworICAgIGlmICg6OmNob3duKHN0ci51dGY4KCku
ZGF0YSgpLCBub2JvZHktPnB3X3VpZCwgbm9ib2R5LT5wd19naWQpID09IC0xKQorICAgICAgICBw
cmludGYoIkNvdWxkbid0IG93biAlczogJXNcbiIsIHN0ci51dGY4KCkuZGF0YSgpLCBzdHJlcnJv
cihlcnJubykpOworCisgICAgLy8gTGluayB0aGUgYmluYXJ5IGRpcmVjdG9yaWVzIG9mIFdlYktp
dC4KKyAgICBTdHJpbmcgd2ViS2l0QmluYXJ5RGlySW5TYW5kYm94ID0gbV9zYW5kYm94Um9vdCAr
IG1fYmluYXJ5RGlyZWN0b3J5OworICAgIGxpbmtEaXJlY3RvcnkobV9iaW5hcnlEaXJlY3Rvcnks
IHdlYktpdEJpbmFyeURpckluU2FuZGJveCk7CisKKyAgICAvLyAuWGF1dGhvcml0eSBmaWxlIHNo
b3VsZCBiZSBjb3BpZWQgYmVjYXVzZSBpdHMgb3duZXIgd2lsbCBjaGFuZ2UgYnV0IHRoZSBvcmln
aW5hbAorICAgIC8vIG9uZSBtdXN0IG5vdCBhbHRlci4KKyAgICBTdHJpbmcgeGF1dGhvcml0eU9m
UmVhbFVzZXIgPSBtX2hvbWVEaXJlY3RvcnkgKyAiLy5YYXV0aG9yaXR5IjsKKyAgICBTdHJpbmcg
eGF1dGhvcml0eUluU2FuZGJveCA9IG1fc2FuZGJveFJvb3QgKyB4YXV0aG9yaXR5T2ZSZWFsVXNl
cjsKKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworICAgIHNpemVfdCBzaXplOworCisgICAgRklM
RSogc291cmNlID0gZm9wZW4oeGF1dGhvcml0eU9mUmVhbFVzZXIudXRmOCgpLmRhdGEoKSwgInJi
Iik7CisgICAgRklMRSogZGVzdCA9IGZvcGVuKHhhdXRob3JpdHlJblNhbmRib3gudXRmOCgpLmRh
dGEoKSwgIndiIik7CisKKyAgICB3aGlsZSAoKHNpemUgPSBmcmVhZChidWZmZXIsIDEsIEJVRlNJ
Wiwgc291cmNlKSkpCisgICAgICAgIGZ3cml0ZShidWZmZXIsIDEsIHNpemUsIGRlc3QpOworCisg
ICAgZmNsb3NlKHNvdXJjZSk7CisgICAgZmNsb3NlKGRlc3QpOworfQorCit2b2lkIFNhbmRib3hF
bnZpcm9ubWVudExpbnV4Ojppbml0aWFsaXplU2FuZGJveChjb25zdCBTdHJpbmcmIGRlcGVuZGVu
Y3lMaXN0KQoreworICAgIG1rZGlyKG1fc2FuZGJveFJvb3QudXRmOCgpLmRhdGEoKSwgMDc3Nyk7
CisgICAgYmluZFNhbmRib3hEaXJlY3RvcmllcygpOworICAgIGFkZE5vYm9keVVzZXJUb1Bhc3N3
ZCgpOworICAgIGFkZERlcGVuZGVuY2llcyhkZXBlbmRlbmN5TGlzdCk7CisgICAgY3JlYXRlRGV2
aWNlRmlsZXMoKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAg
ICBpZiAoYXJnYyAhPSA0KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcgU2Fu
ZGJveFByb2Nlc3MgcmVxdWlyZXMgNCBwYXJhbWV0ZXJzISBFeGl0aW5nLlxuIik7CisgICAgICAg
IHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcgc2FuZGJveERpcmVjdG9yeSA9
IEFTQ0lJTGl0ZXJhbChnZXRwd3VpZChnZXRwd3VpZChnZXR1aWQoKSktPnB3X3VpZCktPnB3X2Rp
cikgKyAiLy53ay1zYW5kYm94IjsKKyAgICBTYW5kYm94RW52aXJvbm1lbnRMaW51eCogc2FuZGJv
eEhhbmRsZXIgPSBuZXcgU2FuZGJveEVudmlyb25tZW50TGludXgoc2FuZGJveERpcmVjdG9yeSwg
QVNDSUlMaXRlcmFsKGFyZ3ZbMF0pKTsKKyAgICBzYW5kYm94SGFuZGxlci0+aW5pdGlhbGl6ZVNh
bmRib3goQVNDSUlMaXRlcmFsKGFyZ3ZbM10pKTsKKworICAgIDo6c2V0Z3JvdXBzKDAsIDApOwor
ICAgIGlmICg6OmNocm9vdChzYW5kYm94RGlyZWN0b3J5LnV0ZjgoKS5kYXRhKCkpID09IC0xKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2hyb290aW5nIGZhaWxlZDogJXNcbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKDo6Y2hkaXIo
Ii8iKSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3QgY2hhbmdlIGRpcmVjdG9yeVxu
Iik7CisKKyAgICBwYXNzd2QqIG5vYm9keSA9IGdldHB3bmFtKCJub2JvZHkiKTsKKyAgICAvLyAi
Tm9ib2R5IiBzaG91bGQgb3duIHRoZSAuWGF1dGhvcml0eSB0byBiZSBhYmxlIHRvIHJ1biBYIGlu
c2lkZSB0aGUgc2FuZGJveC4KKyAgICBjb25zdCBTdHJpbmcgeGF1dGhvcml0eSA9IHNhbmRib3hI
YW5kbGVyLT5tX2hvbWVEaXJlY3RvcnkgKyAiLy5YYXV0aG9yaXR5IjsKKyAgICBpZiAoY2hvd24o
eGF1dGhvcml0eS51dGY4KCkuZGF0YSgpLCBub2JvZHktPnB3X3VpZCwgbm9ib2R5LT5wd19naWQp
ID09IC0xKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNob3duIC5YYXV0aG9yaXR5ICglcykg
ZmFpbGVkOiAlcy5cbiIsIHhhdXRob3JpdHkudXRmOCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICBzZXRlbnYoIlhBVVRIT1JJVFkiLCB4YXV0aG9yaXR5LnV0ZjgoKS5kYXRhKCksIDEp
OworICAgIHNldGVudigiSE9NRSIsIHNhbmRib3hIYW5kbGVyLT5tX2hvbWVEaXJlY3RvcnkudXRm
OCgpLmRhdGEoKSwgMSk7CisKKyAgICAvLyBEcm9wIGFsbCBwcml2aWxlZ2VzLgorICAgIDo6c2V0
Z2lkKG5vYm9keS0+cHdfZ2lkKTsKKyAgICA6OnNldHVpZChub2JvZHktPnB3X3VpZCk7CisgICAg
Ojp1bWFzaygwKTsKKworICAgIHNhbmRib3hIYW5kbGVyLT5wbGF0Zm9ybVJ1bldlYlByb2Nlc3Mo
QVNDSUlMaXRlcmFsKGFyZ3ZbMV0pLCBBU0NJSUxpdGVyYWwoYXJndlsyXSkpOworICAgIHJldHVy
biAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9j
ZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmggYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJv
Y2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY2MWYxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TYW5k
Ym94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNhbmRib3hFbnZpcm9ubWVudExpbnV4X2gKKyNkZWZp
bmUgU2FuZGJveEVudmlyb25tZW50TGludXhfaAorCisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9M
SU5VWCkKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK2NsYXNzIFNhbmRib3hFbnZpcm9ubWVudExpbnV4IHsKK3B1YmxpYzoKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtX2RldmljZXM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9ib3VuZGVkRGly
ZWN0b3JpZXM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9saW5rZWREaXJlY3RvcmllczsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtX2xpbmtlZERpcmVjdG9yaWVzRnJvbUhvbWU7CisgICAgVmVjdG9yPFN0
cmluZz4gbV9saW5rZWRGaWxlczsKKworICAgIFN0cmluZyBtX2hvbWVEaXJlY3Rvcnk7CisgICAg
U3RyaW5nIG1fc2FuZGJveFJvb3Q7CisgICAgU3RyaW5nIG1fYmluYXJ5RGlyZWN0b3J5OworCisg
ICAgU2FuZGJveEVudmlyb25tZW50TGludXgoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7
CisKKyAgICB2b2lkIGFkZERlcGVuZGVuY2llcyhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGFk
ZE5vYm9keVVzZXJUb1Bhc3N3ZCgpOworICAgIHZvaWQgYmluZFNhbmRib3hEaXJlY3Rvcmllcygp
OworICAgIHZvaWQgY3JlYXRlRGV2aWNlRmlsZXMoKTsKKyAgICB2b2lkIGluaXRpYWxpemVTYW5k
Ym94KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgbGlua0RpcmVjdG9yeShjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGxpbmtGaWxlUmVjdXJzaXZlbHkoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBjcmVhdGVEaXJlY3RvcnlQYXRoKGNvbnN0
IFN0cmluZyYpOworICAgIGJvb2wgY3JlYXRlRGlyZWN0b3J5KFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpOworCisgICAgdm9pZCBwbGF0Zm9ybVJ1bldlYlByb2Nlc3MoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJik7CisgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKK307CisKKyNlbmRp
ZiAvLyBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvZWZsL1NhbmRib3hFbnZpcm9ubWVudExpbnV4RWZs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL2VmbC9TYW5kYm94RW52aXJvbm1l
bnRMaW51eEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhODYx
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL2VmbC9T
YW5kYm94RW52aXJvbm1lbnRMaW51eEVmbC5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAy
MDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlNhbmRib3hFbnZpcm9u
bWVudExpbnV4LmgiCisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorCit2b2lkIFNh
bmRib3hFbnZpcm9ubWVudExpbnV4OjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworfQorCit2b2lk
IFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjpwbGF0Zm9ybVJ1bldlYlByb2Nlc3MoY29uc3QgU3Ry
aW5nJiB3ZWJQcm9jZXNzUGF0aCwgY29uc3QgU3RyaW5nJiBzb2NrZXQpCit7Cit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvZ3RrL1NhbmRib3hF
bnZpcm9ubWVudExpbnV4R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL2d0
ay9TYW5kYm94RW52aXJvbm1lbnRMaW51eEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNTBhODYxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Nh
bmRib3hQcm9jZXNzL2d0ay9TYW5kYm94RW52aXJvbm1lbnRMaW51eEd0ay5jcHAKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlNhbmRib3hFbnZpcm9ubWVudExpbnV4LmgiCisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9Y
X0xJTlVYKQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjpwbGF0Zm9ybUluaXRpYWxp
emUoKQoreworfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjpwbGF0Zm9ybVJ1bldl
YlByb2Nlc3MoY29uc3QgU3RyaW5nJiB3ZWJQcm9jZXNzUGF0aCwgY29uc3QgU3RyaW5nJiBzb2Nr
ZXQpCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2FuZGJveFBy
b2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50TGludXhRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
YW5kYm94UHJvY2Vzcy9xdC9TYW5kYm94RW52aXJvbm1lbnRMaW51eFF0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjIwMjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvcXQvU2FuZGJveEVudmlyb25tZW50TGludXhRdC5j
cHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGlu
Zi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIlNhbmRib3hFbnZpcm9ubWVudExpbnV4LmgiCisKKyNpZiBFTkFCTEUo
U1VJRF9TQU5EQk9YX0xJTlVYKQorI2luY2x1ZGUgPFFQcm9jZXNzPgorI2luY2x1ZGUgPGVycm5v
Lmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMv
cmVzb3VyY2UuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3ZvaWQgU2FuZGJv
eEVudmlyb25tZW50TGludXg6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7CisgICAgbV9saW5rZWRE
aXJlY3Rvcmllcy5hcHBlbmQobV9ob21lRGlyZWN0b3J5ICsgIi8ubG9jYWwvc2hhcmUvTm9raWEv
Iik7CisgICAgbV9saW5rZWREaXJlY3Rvcmllcy5hcHBlbmQobV9ob21lRGlyZWN0b3J5ICsgIi8u
Y2FjaGUvTm9raWEvIik7CisgICAgbV9saW5rZWREaXJlY3Rvcmllcy5hcHBlbmQoQVNDSUlMaXRl
cmFsKGdldGVudigiUVRESVIiKSkgKyAicGx1Z2lucyIpOworfQorCit2b2lkIFNhbmRib3hFbnZp
cm9ubWVudExpbnV4OjpwbGF0Zm9ybVJ1bldlYlByb2Nlc3MoY29uc3QgU3RyaW5nJiB3ZWJQcm9j
ZXNzUGF0aCwgY29uc3QgU3RyaW5nJiBzb2NrZXQpCit7CisgICAgLy8gQ2FsbGluZyBXZWJQcm9j
ZXNzIHdpdGggbm9ib2R5IHJpZ2h0cy4KKyAgICBRU3RyaW5nIGNvbW1hbmRMaW5lID0gUUxhdGlu
MVN0cmluZygiJTEgJTIiKTsKKyAgICBjb21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLmFyZyhRTGF0
aW4xU3RyaW5nKHdlYlByb2Nlc3NQYXRoLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBjb21tYW5kTGlu
ZSA9IGNvbW1hbmRMaW5lLmFyZyhRTGF0aW4xU3RyaW5nKHNvY2tldC51dGY4KCkuZGF0YSgpKSk7
CisKKyAgICBRUHJvY2Vzcyogd2ViUHJvY2VzcyA9IG5ldyBRUHJvY2VzcygpOworICAgIHdlYlBy
b2Nlc3MtPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6Rm9yd2FyZGVkQ2hhbm5lbHMp
OworICAgIHdlYlByb2Nlc3MtPnN0YXJ0KGNvbW1hbmRMaW5lKTsKKworICAgIGlmICghd2ViUHJv
Y2Vzcy0+d2FpdEZvclN0YXJ0ZWQoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxl
ZCB0byBzdGFydCAlcy5cbiIsIGNvbW1hbmRMaW5lLnRvTG9jYWw4Qml0KCkuZGF0YSgpKTsKKyAg
ICAgICAgZGVsZXRlIHdlYlByb2Nlc3M7CisgICAgfQorICAgIHNldHByaW9yaXR5KFBSSU9fUFJP
Q0VTUywgd2ViUHJvY2Vzcy0+cGlkKCksIDEwKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRl
eCA4ZDcwMzY3Li45NWJkZDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM2LDYgKzM2LDcgQEAgSEVBREVS
UyArPSBcCiAgICAgUGx1Z2luUHJvY2Vzcy9QbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCBcCiAg
ICAgUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmggXAogICAgIFBsdWdpblByb2Nlc3MvV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb24uaCBcCisgICAgU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25t
ZW50TGludXguaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLQXJyYXkuaCBcCiAgICAgU2hhcmVkL0FQ
SS9jL1dLQmFzZS5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDZXJ0aWZpY2F0ZUluZm8uaCBcCkBA
IC0zOTEsNiArMzkyLDggQEAgU09VUkNFUyArPSBcCiAgICAgUGx1Z2luUHJvY2Vzcy9xdC9QbHVn
aW5Db250cm9sbGVyUHJveHlRdC5jcHAgXAogICAgIFBsdWdpblByb2Nlc3MvcXQvUGx1Z2luUHJv
Y2Vzc01haW5RdC5jcHAgXAogICAgIFBsdWdpblByb2Nlc3MvcXQvUGx1Z2luUHJvY2Vzc1F0LmNw
cCBcCisgICAgU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwIFwKKyAg
ICBTYW5kYm94UHJvY2Vzcy9xdC9TYW5kYm94RW52aXJvbm1lbnRMaW51eFF0LmNwcCBcCiAgICAg
U2hhcmVkL0FQSS9jL1dLQXJyYXkuY3BwIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDZXJ0aWZpY2F0
ZUluZm8uY3BwIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDb25uZWN0aW9uUmVmLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5j
aGVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NM
YXVuY2hlclF0LmNwcAppbmRleCAzY2FjZjA0Li4zYjAyMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5j
cHAKQEAgLTYyLDYgKzYyLDE0IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+
CisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2VuZGlmCisKICNpZiBP
UyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC9tYWNoX2luaXQuaD4KICNpbmNsdWRlIDxzZXJ2ZXJz
L2Jvb3RzdHJhcC5oPgpAQCAtMTA2LDYgKzExNCwxMDQgQEAgdm9pZCBRdFdlYlByb2Nlc3M6OnNl
dHVwQ2hpbGRQcm9jZXNzKCkKICAgICBxcHV0ZW52KCJRVF9NQUNfRElTQUJMRV9GT1JFR1JPVU5E
X0FQUExJQ0FUSU9OX1RSQU5TRk9STSIsIFFCeXRlQXJyYXkoIjEiKSk7CiAjZW5kaWYKIH0KKyNp
ZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorCitzdGF0aWMgdm9pZCBmaWx0ZXJMaWJyYXJ5
RGVwZW5kZW5jaWVzRnJvbUxERE91dHB1dChjaGFyKiBidWZmZXIsIGludCBidWZmZXJMZW5ndGgs
IFN0cmluZyYgbGlicmFyeURlcGVuZGVuY2llcykKK3sKKyAgICAvLyBUaGUgb3V0cHV0IG9mIGxk
ZCBjYW4gaGF2ZSB0d28gZm9ybWF0czoKKyAgICAvLyAxKSBcdG5hbWVfb2ZfdGhlX2xpYnJhcnkg
PT4gcGF0aF9vZl9saWJyYXJ5IChhZGRyZXNzX29mX3RoZV9saWJhcnkpCisgICAgLy8gMikgcGF0
aF9vZl90aGVfbGlicmFyeSAoYWRkcmVzc19vZl90aGVfbGliYXJ5KQorICAgIGNoYXIqIHBhdGhP
ZlRoZUxpYnJhcnkgPSAoY2hhciopbWFsbG9jKGJ1ZmZlckxlbmd0aCAqIHNpemVvZihjaGFyKSk7
CisgICAgaW50IG51bWJlck9mbWF0Y2hpbmdDaGFyYWN0ZXJzID0gc3NjYW5mKGJ1ZmZlciwgIlx0
JSpzID0+IC8lcyAlKnNcbiIsIHBhdGhPZlRoZUxpYnJhcnkpOworICAgIGlmICghbnVtYmVyT2Zt
YXRjaGluZ0NoYXJhY3RlcnMpCisgICAgICAgIG51bWJlck9mbWF0Y2hpbmdDaGFyYWN0ZXJzID0g
c3NjYW5mKGJ1ZmZlciwgIlx0LyVzICUqc1xuIiwgcGF0aE9mVGhlTGlicmFyeSk7CisgICAgaWYg
KG51bWJlck9mbWF0Y2hpbmdDaGFyYWN0ZXJzID4gMCkgeworICAgICAgICBsaWJyYXJ5RGVwZW5k
ZW5jaWVzLmFwcGVuZChwYXRoT2ZUaGVMaWJyYXJ5KTsKKyAgICAgICAgbGlicmFyeURlcGVuZGVu
Y2llcy5hcHBlbmQoJzsnKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlckxpYnJhcnlE
ZXBlbmRlbmNpZXNGcm9tTGRjb25maWdPdXRwdXQoY2hhciogYnVmZmVyLCBpbnQgYnVmZmVyTGVu
Z3RoLCBTdHJpbmcmIGxpYnJhcnlEZXBlbmRlbmNpZXMpCit7CisgICAgU3RyaW5nIGxpYnJhcnko
YnVmZmVyLCBidWZmZXJMZW5ndGgpOworICAgIFZlY3RvcjxTdHJpbmc+IGR5bmFtaWNEZXBlbmRl
bmNpZXM7CisgICAgLy8gVGhlIGxpc3Qgb2YgZW1waXJpY2FsbHkgZ2F0aGVyZWQgbGlicmFyeSBk
ZXBlbmRlbmNpZXMuCisgICAgZHluYW1pY0RlcGVuZGVuY2llcy5hcHBlbmQoImxpYmNyeXB0by5z
byIpOworICAgIGR5bmFtaWNEZXBlbmRlbmNpZXMuYXBwZW5kKCJsaWJkYnVzLnNvIik7CisgICAg
ZHluYW1pY0RlcGVuZGVuY2llcy5hcHBlbmQoImxpYmV4cGF0LnNvIik7CisgICAgZHluYW1pY0Rl
cGVuZGVuY2llcy5hcHBlbmQoImxpYmZvbnRjb25maWcuc28iKTsKKyAgICBkeW5hbWljRGVwZW5k
ZW5jaWVzLmFwcGVuZCgibGliZnJlZXR5cGUuc28iKTsKKyAgICBkeW5hbWljRGVwZW5kZW5jaWVz
LmFwcGVuZCgibGlibnNzX2Rucy5zbyIpOworICAgIGR5bmFtaWNEZXBlbmRlbmNpZXMuYXBwZW5k
KCJsaWJyZXNvbHYuc28iKTsKKyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVuZCgibGlic3Ns
LnNvIik7CisgICAgZHluYW1pY0RlcGVuZGVuY2llcy5hcHBlbmQoImxpYlhyZW5kZXIuc28iKTsK
KyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVuZCgibGlieGNiIik7CisgICAgZHluYW1pY0Rl
cGVuZGVuY2llcy5hcHBlbmQoImxpYlhpIik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGR5
bmFtaWNEZXBlbmRlbmNpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGxpYnJhcnkuY29u
dGFpbnMoZHluYW1pY0RlcGVuZGVuY2llcy5hdChpKSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBw
YXRoT2ZUaGVMaWJyYXJ5ID0gbGlicmFyeS5zdWJzdHJpbmcobGlicmFyeS5maW5kKCcvJykpOwor
ICAgICAgICAgICAgaWYgKHBhdGhPZlRoZUxpYnJhcnkubGVuZ3RoKCkgPiAwKSB7CisgICAgICAg
ICAgICAgICAgbGlicmFyeURlcGVuZGVuY2llcy5hcHBlbmQocGF0aE9mVGhlTGlicmFyeSk7Cisg
ICAgICAgICAgICAgICAgbGlicmFyeURlcGVuZGVuY2llcy5hcHBlbmQoJzsnKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgY29sbGVjdExpYnJhcnlE
ZXBlbmRlbmNpZXMoU3RyaW5nICZsaWJyYXJ5RGVwZW5kZW5jaWVzLCBTdHJpbmcgcHJvY2Vzcywg
Y2hhciBwYXJhbWV0ZXJzW10pCit7CisgICAgaW50IHN0YXR1czsKKyAgICBpbnQgcGlwZWZkWzJd
OworCisgICAgaWYgKHBpcGUocGlwZWZkKSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
ciBieSBwaXBpbmc6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKworICAgIHN3aXRjaCAoZm9y
aygpKSB7CisgICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBm
b3JraW5nOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGNsb3NlKHBpcGVmZFsxXSk7IC8vIENsb3NlIHRoZSB3cml0ZSBlbmQg
b2YgdGhlIHBpcGUgaW4gdGhlIHBhcmVudC4KKyAgICAgICAgRklMRSogZmlsZTsKKyAgICAgICAg
ZmlsZSA9IGZkb3BlbihwaXBlZmRbMF0sICJyIik7CisKKyAgICAgICAgY2hhciBidWZmZXJbMjAw
XTsKKyAgICAgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZpbGUpKSB7
CisgICAgICAgICAgICAgIGludCBsZW5ndGggPSBzdHJsZW4oYnVmZmVyKSAtIDE7CisgICAgICAg
ICAgICAgIGlmIChidWZmZXJbbGVuZ3RoXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgYnVm
ZmVyW2xlbmd0aF0gPSAwOworICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5jb250YWlucyhTdHJp
bmcoImxkLWxpbnV4IikpKQorICAgICAgICAgICAgICAgICAgZmlsdGVyTGlicmFyeURlcGVuZGVu
Y2llc0Zyb21MRERPdXRwdXQoYnVmZmVyLCBsZW5ndGgsIGxpYnJhcnlEZXBlbmRlbmNpZXMpOwor
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBmaWx0ZXJMaWJyYXJ5RGVwZW5k
ZW5jaWVzRnJvbUxkY29uZmlnT3V0cHV0KGJ1ZmZlciwgbGVuZ3RoLCBsaWJyYXJ5RGVwZW5kZW5j
aWVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3YWl0KCZzdGF0dXMpIDw9IDApCisgICAg
ICAgICAgICB3YXJuKCJXYWl0LiIpOworICAgICAgICBlbHNlIGlmIChXSUZTSUdOQUxFRChzdGF0
dXMpKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTaWduYWxlZDogc2lnbmFsICVkXG4i
LCBXVEVSTVNJRyhzdGF0dXMpKTsKKyAgICAgICAgZWxzZSBpZiAoV0lGRVhJVEVEKHN0YXR1cykg
JiYgV0VYSVRTVEFUVVMoc3RhdHVzKSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXhp
dGVkOiBleGl0IHN0YXR1cyAlZFxuIiwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgMDoKKyAgICAgICAgY2xvc2UocGlwZWZkWzBdKTsKKworICAgICAgICBk
dXAyKHBpcGVmZFsxXSwgMSk7IC8vIFNlbmQgc3Rkb3V0IHRvIHRoZSBwaXBlLgorICAgICAgICBk
dXAyKHBpcGVmZFsxXSwgMik7IC8vIFNlbmQgc3RkZXJyIHRvIHRoZSBwaXBlLgorCisgICAgICAg
IGlmIChwcm9jZXNzLmNvbnRhaW5zKCJsZC1saW51eCIsIGZhbHNlKSkgeworICAgICAgICAgICAg
Ly8gVXNpbmcgbGRkIG1lYW5zIHRoYXQgd2UgY2FsbCBsZC1saW51eCB3aGlsZSBMRF9UUkFDRV9M
T0FERURfT0JKRUNUUyBpcyBzZXQuCisgICAgICAgICAgICAvLyBUaGlzIHdheSB0aGUgInByb2Nl
c3MiIHdvbid0IHJ1biBvbmx5IGl0cyBkZXBlbmRlbmNpZXMgd2lsbCBiZSBkZXRlcm1pbmVkLgor
ICAgICAgICAgICAgc2V0ZW52KCJMRF9UUkFDRV9MT0FERURfT0JKRUNUUyIsICJ5ZXMiLCAxKTsK
KyAgICAgICAgICAgIGV4ZWNsKHByb2Nlc3MuYXNjaWkoKS5kYXRhKCksIHByb2Nlc3MudXRmOCgp
LmRhdGEoKSwgcGFyYW1ldGVycywgKGNoYXIgKikwKTsKKyAgICAgICAgICAgIHVuc2V0ZW52KCJM
RF9UUkFDRV9MT0FERURfT0JKRUNUUyIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGV4
ZWNsKHByb2Nlc3MuYXNjaWkoKS5kYXRhKCksIHByb2Nlc3MudXRmOCgpLmRhdGEoKSwgcGFyYW1l
dGVycywgKGNoYXIgKikwKTsKKyAgICAgICAgY2xvc2UocGlwZWZkWzFdKTsKKyAgICB9Cit9Cisj
ZW5kaWYKIAogdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogewpAQCAtMTY1
LDM3ICsyNzEsNjQgQEAgdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAg
IGNvbW1hbmRMaW5lID0gY29tbWFuZExpbmUuYXJnKHNvY2tldHNbMF0pOwogI2VuZGlmCiAKLSAg
ICBRUHJvY2Vzcyogd2ViUHJvY2VzcyA9IG5ldyBRdFdlYlByb2Nlc3MoKTsKLSAgICB3ZWJQcm9j
ZXNzLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxzKTsK
LSAgICB3ZWJQcm9jZXNzLT5zdGFydChjb21tYW5kTGluZSk7CisgICAgUVByb2Nlc3MqIHdlYlBy
b2Nlc3NPclNVSURIZWxwZXI7CisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKyAgICBT
dHJpbmcgbGlicmFyeURlcGVuZGVuY2llczsKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHdheSBob3cg
d2UgZ2F0aGVyIHRoZSBkZXBlbmRlbmNpZXM6CisgICAgLy8gMSkgVXNpbmcgbGRkIHRvIG9idGFp
biB0aGUgc3RhdGljIGRlcGVuZGVuY2llcyBvZiBRdFdlYlByb2Nlc3MuCisgICAgLy8gMikgVXNp
bmcgYSBkZXZlbGVwZXIgZGVmaW5lZCBsaXN0IG9mIGR5bmFtaWMgZGVwZW5kZW5jaWVzIChpdCdz
IGdhdGhlcmVkIGVtcGlyaWNhbCB3YXkpLgorICAgIGNvbGxlY3RMaWJyYXJ5RGVwZW5kZW5jaWVz
KGxpYnJhcnlEZXBlbmRlbmNpZXMsICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiLCAoY2hh
ciopKGV4ZWN1dGFibGVQYXRoT2ZXZWJQcm9jZXNzKCkudXRmOCgpLmRhdGEoKSkpOworICAgIGNv
bGxlY3RMaWJyYXJ5RGVwZW5kZW5jaWVzKGxpYnJhcnlEZXBlbmRlbmNpZXMsICIvc2Jpbi9sZGNv
bmZpZyIsIChjaGFyKikoIi1wIikpOworCisgICAgUVN0cmluZyBzYW5kYm94Q29tbWFuZExpbmUg
PSBRTGF0aW4xU3RyaW5nKCIlMSAlMiAlMyAlNCIpOworICAgIHNhbmRib3hDb21tYW5kTGluZSA9
IHNhbmRib3hDb21tYW5kTGluZS5hcmcoUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQ
YXRoKCkgKyBRTGF0aW4xU3RyaW5nKCIvU1VJRFNhbmRib3hIZWxwZXIiKSk7CisgICAgc2FuZGJv
eENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFyZyhleGVjdXRhYmxlUGF0aE9mV2Vi
UHJvY2VzcygpKTsKKyAgICBzYW5kYm94Q29tbWFuZExpbmUgPSBzYW5kYm94Q29tbWFuZExpbmUu
YXJnKHNvY2tldHNbMF0pOworICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5k
TGluZS5hcmcobGlicmFyeURlcGVuZGVuY2llcyk7CisKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVs
cGVyID0gbmV3IFFQcm9jZXNzKCk7CisgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c2V0UHJv
Y2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFubmVscyk7CisgICAgd2ViUHJv
Y2Vzc09yU1VJREhlbHBlci0+c3RhcnQoc2FuZGJveENvbW1hbmRMaW5lKTsKKyNlbHNlCisgICAg
d2ViUHJvY2Vzc09yU1VJREhlbHBlciA9IG5ldyBRdFdlYlByb2Nlc3MoKTsKKyAgICB3ZWJQcm9j
ZXNzT3JTVUlESGVscGVyLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6Ok1lcmdlZENo
YW5uZWxzKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChjb21tYW5kTGluZSk7
CisjZW5kaWYKIAogI2lmIE9TKFVOSVgpICYmICFPUyhEQVJXSU4pCiAgICAgLy8gRG9uJ3QgZXhw
b3NlIHRoZSB3ZWIgc29ja2V0IHRvIHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJvY2Vzc2VzCiAgICAg
d2hpbGUgKGZjbnRsKHNvY2tldHNbMF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKSB7CiAg
ICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgICAgIGRlbGV0
ZSB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoIXdlYlByb2Nlc3MtPndhaXRGb3JTdGFydGVkKCkp
IHsKKyAgICBpZiAoIXdlYlByb2Nlc3NPclNVSURIZWxwZXItPndhaXRGb3JTdGFydGVkKCkpIHsK
ICAgICAgICAgcURlYnVnKCkgPDwgIkZhaWxlZCB0byBzdGFydCIgPDwgY29tbWFuZExpbmU7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2lmIE9TKERBUldJTikKICAgICAgICAgbWFj
aF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgY29ubmVjdG9yKTsKICAgICAgICAg
bWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGNvbm5lY3RvciwgTUFDSF9QT1JU
X1JJR0hUX1JFQ0VJVkUsIC0xKTsKICNlbmRpZgotICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsK
KyAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyNpZiBPUyhVTklYKSAmJiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAg
IGlmICghd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZvckZpbmlzaGVkKCkpIHsKKyAgICAg
ICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYKKwogI2lmIE9TKFVOSVgpCi0gICAgc2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCB3
ZWJQcm9jZXNzLT5waWQoKSwgMTApOworICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgd2Vi
UHJvY2Vzc09yU1VJREhlbHBlci0+cGlkKCksIDEwKTsKICNlbmRpZgogCi0gICAgUnVuTG9vcDo6
bWFpbigpLT5kaXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6ZGlkRmluaXNo
TGF1bmNoaW5nUHJvY2VzcywgdGhpcywgd2ViUHJvY2VzcywgY29ubmVjdG9yKSk7CisgICAgUnVu
TG9vcDo6bWFpbigpLT5kaXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6ZGlk
RmluaXNoTGF1bmNoaW5nUHJvY2VzcywgdGhpcywgd2ViUHJvY2Vzc09yU1VJREhlbHBlciwgY29u
bmVjdG9yKSk7CiB9CiAKIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcmkKaW5kZXggOTE2Njg3NC4uZTViNmM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTYx
LDcgKzYxLDkgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNz
L1dlYlBhZ2UgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcyBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvcXQgXAotICAgICQkU09V
UkNFX0RJUi9QbHVnaW5Qcm9jZXNzCisgICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MgXAor
ICAgICQkU09VUkNFX0RJUi9TYW5kYm94UHJvY2VzcyBcCisgICAgJCRTT1VSQ0VfRElSL1NhbmRi
b3hQcm9jZXNzL3F0CiAKICMgVGhlIFdlYktpdDIgUXQgQVBJcyBkZXBlbmQgb24gcXdlYmtpdGds
b2JhbC5oLCB3aGljaCBsaXZlcyBpbiBXZWJLaXQKIElOQ0xVREVQQVRIICs9ICQke1JPT1RfV0VC
S0lUX0RJUn0vU291cmNlL1dlYktpdC9xdC9BcGkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCmluZGV4IDE4ZjMwMzk0Li5jZGM1MjkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5j
cHAKQEAgLTE0NSw3ICsxNDUsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplUHJveHkoKQogUV9E
RUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChRR3VpQXBwbGljYXRpb24qIGFwcCkKIHsK
ICAgICBpbml0aWFsaXplUHJveHkoKTsKLQogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygp
OwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFs
aXplTWFpblJ1bkxvb3AoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9G
ZWF0dXJlTGlzdC5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpp
bmRleCA5ZTEzZmI2Li42NjAzMTU2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBl
cmwvRmVhdHVyZUxpc3QucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtCkBAIC0xMTYsNiArMTE2LDcgQEAgbXkgKAogICAgICRzaGFyZWRXb3JrZXJzU3VwcG9y
dCwKICAgICAkc3FsRGF0YWJhc2VTdXBwb3J0LAogICAgICRzdHlsZVNjb3BlZFN1cHBvcnQsCisg
ICAgJHN1aWRMaW51eFNhbmRib3gsCiAgICAgJHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBvcnQsCiAg
ICAgJHN2Z0ZvbnRzU3VwcG9ydCwKICAgICAkc3ZnU3VwcG9ydCwKQEAgLTM1OSw2ICszNjAsOSBA
QCBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4gInN0eWxlLXNjb3BlZCIsIGRlc2Mg
PT4gIlRvZ2dsZSBTdHlsZSBTY29wZWQgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9TVFlMRV9TQ09QRUQiLCBkZWZhdWx0ID0+IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBcJHN0
eWxlU2NvcGVkU3VwcG9ydCB9LAogCisgICAgeyBvcHRpb24gPT4gInN1aWQtbGludXgtc2FuZGJv
eCIsIGRlc2MgPT4gIlRvZ2dsZSBzdWlkIHNhbmRib3ggZm9yIGxpbnV4IiwKKyAgICAgIGRlZmlu
ZSA9PiAiRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4g
XCRzdWlkTGludXhTYW5kYm94IH0sCisKICAgICB7IG9wdGlvbiA9PiAic3ZnIiwgZGVzYyA9PiAi
VG9nZ2xlIFNWRyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWRyIsIGRlZmF1
bHQgPT4gMSwgdmFsdWUgPT4gXCRzdmdTdXBwb3J0IH0sCiAKLS0gCjEuNy45LjUKCg==
</data>
<flag name="commit-queue"
          id="174455"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163118</attachid>
            <date>2012-09-10 06:59:45 -0700</date>
            <delta_ts>2012-10-10 11:28:58 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-up-7.3.patch</filename>
            <type>text/plain</type>
            <size>41787</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBiMDBhODI4MjMzNDkxMDAwZDQ0OTA5ZThhZTdjZTVhMjE0ODMwMjdiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHdlYmtpdC5vcmc+CkRhdGU6IE1vbiwgMTAg
U2VwIDIwMTIgMTU6MjM6NDQgKzAyMDAKU3ViamVjdDogW1BBVENIXSB1cCA3LjMKCi0tLQogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsK
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgICAgICAgICAgICAgICAgICAgIHwgICAg
NiArCiBTb3VyY2UvUXRXZWJLaXQucHJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDUgKwogU291cmNlL1dURi9XVEYudmNwcm9qL1dURi5zbG4gICAgICAgICAgICAgICAgICAg
ICAgfCAgIDk4ICsrKy0tLQogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5j
cHAgICAgICAgICAgfCAgICAyICstCiAuLi4vV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZyB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNCArLQogU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJLaXQyL1NhbmRi
b3hQcm9jZXNzLnBybyAgICAgICAgICAgICAgICAgIHwgICAyOSArKwogLi4uL1NhbmRib3hQcm9j
ZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcCAgICAgfCAgMzE1ICsrKysrKysrKysrKysr
KysrKysrCiAuLi4vU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCAgICAg
ICB8ICAgNTkgKysrKwogLi4uL2VmbC9TYW5kYm94RW52aXJvbm1lbnRMaW51eEVmbC5jcHAgICAg
ICAgICAgICAgfCAgIDM2ICsrKwogLi4uL2d0ay9TYW5kYm94RW52aXJvbm1lbnRMaW51eEd0ay5j
cHAgICAgICAgICAgICAgfCAgIDM2ICsrKwogLi4uL3F0L1NhbmRib3hFbnZpcm9ubWVudExpbnV4
UXQuY3BwICAgICAgICAgICAgICAgfCAgIDU5ICsrKysKIFNvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiAuLi4vVUlQcm9jZXNzL0xhdW5j
aGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCAgICB8ICAxNDkgKysrKysrKystCiBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnByaSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgIHwgICAgMSAt
CiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gICAgICAgICAgICB8ICAg
IDQgKwogMTkgZmlsZXMgY2hhbmdlZCwgNzU5IGluc2VydGlvbnMoKyksIDYyIGRlbGV0aW9ucygt
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL1NhbmRib3hF
bnZpcm9ubWVudExpbnV4LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1Nh
bmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9lZmwvU2FuZGJveEVudmlyb25tZW50TGlu
dXhFZmwuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nl
c3MvZ3RrL1NhbmRib3hFbnZpcm9ubWVudExpbnV4R3RrLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL3F0L1NhbmRib3hFbnZpcm9ubWVudExpbnV4
UXQuY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1F0V2ViS2l0LnBybyBiL1NvdXJjZS9RdFdlYktp
dC5wcm8KaW5kZXggYjEwYzdhYy4uNGFiZGY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1F0V2ViS2l0
LnBybworKysgYi9Tb3VyY2UvUXRXZWJLaXQucHJvCkBAIC0xNyw2ICsxNywxMSBAQCBTVUJESVJT
ICs9IGFwaQogICAgICAgICBwbHVnaW5wcm9jZXNzLmZpbGUgPSBXZWJLaXQyL1BsdWdpblByb2Nl
c3MucHJvCiAgICAgICAgIFNVQkRJUlMgKz0gcGx1Z2lucHJvY2VzcwogICAgIH0KKworICAgIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVg9MSkgeworICAgICAgICBz
YW5kYm94cHJvY2Vzcy5maWxlID0gV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KKyAgICAgICAg
U1VCRElSUyArPSBzYW5kYm94cHJvY2VzcworICAgIH0KIH0KIAogaW5jbHVkZShXZWJLaXQvcXQv
ZG9jcy9kb2NzLnByaSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAK
aW5kZXggNDJhNTM2Zi4uZTMzOGM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
VHJhY2tlci5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpvcGVu
VHJhY2tlckRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0aCgp
OwotICAgIAorCiAgICAgaWYgKCFTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZpbGVF
eGlzdHMoZGF0YWJhc2VQYXRoLCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkpIHsKICAgICAgICAgaWYg
KGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
Y3JlYXRlIGRhdGFiYXNlIGZpbGUgJyVzJyIsIGRhdGFiYXNlUGF0aC5hc2NpaSgpLmRhdGEoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVz
LnhjY29uZmlnCmluZGV4IDhhYTljZDMuLjY5MjdlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0xMTYsNiAr
MTE2LDcgQEAgRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQgPSBFTkFCTEVfUFJPR1JFU1NfRUxFTUVO
VDsKIEVOQUJMRV9RVU9UQSA9IDsKIEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSA9IEVO
QUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRTsKIEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0ggPSA7
CitFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYID0gOwogRU5BQkxFX1NIQURPV19ET00gPSA7CiBF
TkFCTEVfU0hBUkVEX1dPUktFUlMgPSBFTkFCTEVfU0hBUkVEX1dPUktFUlM7CiBFTkFCTEVfU1FM
X0RBVEFCQVNFID0gRU5BQkxFX1NRTF9EQVRBQkFTRTsKQEAgLTE0MCw0ICsxNDEsNCBAQCBFTkFC
TEVfV0lER0VUX1JFR0lPTl9tYWNvc3ggPSBFTkFCTEVfV0lER0VUX1JFR0lPTjsKIEVOQUJMRV9X
T1JLRVJTID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1G
RUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0FDQ0VMRVJB
VEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQU5JTUFUSU9OX0FQSSkgJChFTkFCTEVfQkxPQikgJChF
TkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJMRV9DU1Nf
Qk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVOQUJMRV9D
U1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19GSUxURVJTKSAkKEVOQUJMRV9DU1NfSElFUkFS
Q0hJRVMpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdF
X1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0hBREVSUykg
JChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTikgJChFTkFCTEVfQ1NTX1ZBUklBQkxFUykgJChF
TkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJT04pICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExF
UikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQp
ICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkg
JChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ESUFMT0dfRUxFTUVOVCkgJChF
TkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVfRklMRV9TWVNURU0pICQoRU5BQkxFX0ZJ
TFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJM
RV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVOQUJMRV9JQ09OREFU
QUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFT
RSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVO
QUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUUpICQoRU5B
QkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkg
JChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5B
QkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJ
WEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfTElOS19QUkVGRVRD
SCkgJChFTkFCTEVfTElOS19QUkVSRU5ERVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVE
SUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVN
RU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTUlDUk9EQVRBKSAkKEVOQUJMRV9NVVRBVElP
Tl9PQlNFUlZFUlMpICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9O
T1RJRklDQVRJT05TKSAkKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QUk9H
UkVTU19FTEVNRU5UKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpICQoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCkgJChFTkFCTEVfU0hBRE9XX0RPTSkgJChF
TkFCTEVfU0hBUkVEX1dPUktFUlMpICQoRU5BQkxFX1NRTF9EQVRBQkFTRSkgJChFTkFCTEVfU1RZ
TEVfU0NPUEVEKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykg
JChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RF
WFRfTk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQoRU5B
QkxFX1VORE9fTUFOQUdFUikgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAk
KEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfU09DS0VUUykg
JChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV0lER0VUX1JFR0lPTikgJChFTkFCTEVfV09S
S0VSUykgJChFTkFCTEVfWFNMVCk7CitGRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5E
RVJJTkcpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQU5JTUFUSU9O
X0FQSSkgJChFTkFCTEVfQkxPQikgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxF
X0NTUF9ORVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NT
U19FWENMVVNJT05TKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19GSUxU
RVJTKSAkKEVOQUJMRV9DU1NfSElFUkFSQ0hJRVMpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRB
VElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05T
KSAkKEVOQUJMRV9DU1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTikgJChF
TkFCTEVfQ1NTX1ZBUklBQkxFUykgJChFTkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJT04pICQoRU5B
QkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQo
RU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQo
RU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVO
QUJMRV9ESUFMT0dfRUxFTUVOVCkgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVf
RklMRV9TWVNURU0pICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAk
KEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElHSF9EUElf
Q0FOVkFTKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykg
JChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfREFURVRJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChF
TkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxF
X0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9O
UykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTElOS19QUkVSRU5ERVIpICQoRU5B
QkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNU
SUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTUlD
Uk9EQVRBKSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMpICQoRU5BQkxFX05BVklHQVRPUl9D
T05URU5UX1VUSUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QQUdFX1ZJU0lC
SUxJVFlfQVBJKSAkKEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UKSAkKEVOQUJMRV9RVU9UQSkgJChF
TkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCkg
JChFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJM
RV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9T
Q09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVO
QUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVEVYVF9O
T1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVf
VU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5B
QkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVO
QUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XSURHRVRfUkVHSU9OKSAkKEVOQUJMRV9XT1JLRVJT
KSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGVkMTVk
MDMuLmIyOTJjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjc2LDcgKzI3
Niw5IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vz
cy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nl
c3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaCBcCiAJU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vz
cy9ndGsvUGx1Z2luQ29udHJvbGxlclByb3h5R3RrLmNwcCBcCi0JU291cmNlL1dlYktpdDIvUGx1
Z2luUHJvY2Vzcy9ndGsvUGx1Z2luUHJvY2Vzc0d0ay5jcHAgXAorICAgICAgICBTb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL2d0ay9QbHVnaW5Qcm9jZXNzR3RrLmNwcCBcCisJU291cmNlL1dl
YktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXhHdGsuY3BwIFwKKyAg
ICAgICAgU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGlu
dXhHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRHJhZ0NvbnRyb2xsZXJBY3Rpb24u
aCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ZvbnRJbmZvLmggXAogCVNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9IVFRQQ29va2llQWNjZXB0UG9saWN5LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCBiNDkyNDdmLi43ZDM3NDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
MTUsNiArMTUsOCBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBQbGF0Zm9ybS9D
b3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCiAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4
L0F0dGFjaG1lbnRVbml4LmNwcAogCisgICAgU2FuZGJveFByb2Nlc3MvZWZsL1NhbmRib3hFbnZp
cm9ubWVudExpbnV4RWZsLmNwcAorCiAgICAgU2hhcmVkL0FQSS9jL2NhaXJvL1dLSW1hZ2VDYWly
by5jcHAKIAogICAgIFNoYXJlZC9BUEkvYy9ndGsvV0tHcmFwaGljc0NvbnRleHRHdGsuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8gYi9Tb3VyY2UvV2Vi
S2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTQzNGRjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9j
ZXNzLnBybwpAQCAtMCwwICsxLDI5IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCBmaWxlIGZv
ciB0aGUgV2ViS2l0MiBzYW5kYm94IHByb2Nlc3MgYmluYXJ5CisjCisjIFNlZSAnVG9vbHMvcW1h
a2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQorIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK1RFTVBMQVRFID0gYXBwCisKK1FUICAgICAgICs9IHdlYmtpdAorCitUQVJHRVQgPSBT
VUlEU2FuZGJveEhlbHBlcgorREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9iaW4KKworU09V
UkNFUyArPSBTYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAgXAorICAg
ICAgICAgICBTYW5kYm94UHJvY2Vzcy9xdC9TYW5kYm94RW52aXJvbm1lbnRMaW51eFF0LmNwcAor
CitIRUFERVJTICs9IFNhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKKwor
SU5DTFVERVBBVEggPSBcCisgICAgJCRQV0QvLi4vLi4vV1RGIFwKKyAgICAkJElOQ0xVREVQQVRI
CisKK0lOU1RBTExTICs9IHRhcmdldAorCitpc0VtcHR5KElOU1RBTExfQklOUykgeworICAgIHRh
cmdldC5wYXRoID0gJCRbUVRfSU5TVEFMTF9CSU5TXQorfSBlbHNlIHsKKyAgICB0YXJnZXQucGF0
aCA9ICQkSU5TVEFMTF9CSU5TCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94
UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TYW5k
Ym94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZjYwYjU4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcApAQCAtMCwwICsx
LDMxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlNhbmRib3hFbnZpcm9ubWVudExpbnV4LmgiCisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9Y
X0xJTlVYKQorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGVyci5oPgorI2luY2x1ZGUg
PGVycm5vLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK1NhbmRib3hFbnZpcm9ubWVudExpbnV4OjpTYW5kYm94
RW52aXJvbm1lbnRMaW51eChjb25zdCBTdHJpbmcmIGNocm9vdERpcmVjdG9yeSwgY29uc3QgU3Ry
aW5nJiB3ZWJraXRCaW5hcnlEaXJlY3RvcnkpCit7CisgICAgbV9zYW5kYm94Um9vdCA9IGNocm9v
dERpcmVjdG9yeTsKKyAgICBzaXplX3QgZW5kT2ZEaXJlY3RvcnlQYXRoID0gd2Via2l0QmluYXJ5
RGlyZWN0b3J5LnJldmVyc2VGaW5kKCcvJyk7CisgICAgaWYgKGVuZE9mRGlyZWN0b3J5UGF0aCA9
PSBub3RGb3VuZCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHdlYmtpdCBkaXJl
Y3Rvcnk6ICVzLlxuIiwgd2Via2l0QmluYXJ5RGlyZWN0b3J5LnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgbV9iaW5hcnlEaXJlY3RvcnkgPSB3ZWJraXRCaW5hcnlEaXJlY3RvcnkubGVmdChlbmRPZkRp
cmVjdG9yeVBhdGgpOworICAgIG1faG9tZURpcmVjdG9yeSA9IEFTQ0lJTGl0ZXJhbChnZXRwd3Vp
ZChnZXRwd3VpZChnZXR1aWQoKSktPnB3X3VpZCktPnB3X2Rpcik7CisKKyAgICBtX2RldmljZXMu
YXBwZW5kKEFTQ0lJTGl0ZXJhbCgiL2Rldi91cmFuZG9tIikpOworICAgIG1fZGV2aWNlcy5hcHBl
bmQoQVNDSUlMaXRlcmFsKCIvZGV2L3JhbmRvbSIpKTsKKworICAgIG1fYm91bmRlZERpcmVjdG9y
aWVzLmFwcGVuZChBU0NJSUxpdGVyYWwoIi9wcm9jLyIpKTsKKyAgICBtX2JvdW5kZWREaXJlY3Rv
cmllcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCIvcnVuL3NobS8iKSk7CisKKyAgICBtX2xpbmtlZEZp
bGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoIi9ldGMvbGQuc28uY2FjaGUiKSk7CisgICAgbV9saW5r
ZWRGaWxlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCIvZXRjL2xkLnNvLmNvbmYiKSk7CisgICAgbV9s
aW5rZWRGaWxlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCIvdmFyL2xpYi9kYnVzL21hY2hpbmUtaWQi
KSk7CisgICAgbV9saW5rZWREaXJlY3Rvcmllcy5hcHBlbmQobV9ob21lRGlyZWN0b3J5ICsgIi8u
Zm9udGNvbmZpZy8iKTsKKworICAgIG1fbGlua2VkRGlyZWN0b3JpZXMuYXBwZW5kKEFTQ0lJTGl0
ZXJhbCgiL2V0Yy9mb250cyIpKTsKKyAgICBtX2xpbmtlZERpcmVjdG9yaWVzLmFwcGVuZChBU0NJ
SUxpdGVyYWwoIi9ldGMvbGQuc28uY29uZi5kIikpOworICAgIG1fbGlua2VkRGlyZWN0b3JpZXMu
YXBwZW5kKEFTQ0lJTGl0ZXJhbCgiL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9nY29udiIpKTsK
KyAgICBtX2xpbmtlZERpcmVjdG9yaWVzLmFwcGVuZChBU0NJSUxpdGVyYWwoIi91c3Ivc2hhcmUv
Zm9udHMiKSk7CisgICAgbV9saW5rZWREaXJlY3Rvcmllcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCIv
aG9tZS9yZW5pL3JlcG9zL3dlYmtpdC9XZWJLaXRCdWlsZC9SZWxlYXNlL2xpYi9wbHVnaW5zIikp
OworICAgIG1fbGlua2VkRGlyZWN0b3JpZXMuYXBwZW5kKG1fYmluYXJ5RGlyZWN0b3J5KTsKKwor
ICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworfQorCitib29sIHN0YXRpYyBmaWxlRXhpc3RzKGNv
bnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICBpZiAo
c3RhdChwYXRoLnV0ZjgoKS5kYXRhKCksICZmaWxlU3RhdCkgPT0gLTEgJiYgZXJybm8gPT0gRU5P
RU5UKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U2FuZGJveEVudmlyb25tZW50TGludXg6OmNyZWF0ZURpcmVjdG9yeShTdHJpbmcmIGZ1bGxwYXRo
LCBjb25zdCBTdHJpbmcmIHN1YnN0cikKK3sKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBmdWxs
cGF0aC5hcHBlbmQoc3Vic3RyKTsKKyAgICBvayA9IG1rZGlyKFN0cmluZyhtX3NhbmRib3hSb290
ICsgZnVsbHBhdGgpLnV0ZjgoKS5kYXRhKCksIDA3NzcpICE9IC0xIHx8IGVycm5vID09IEVFWElT
VDsKKworICAgIGlmICghb2spIHsKKyAgICAgICAgcHJpbnRmKCJDcmVhdGlvbiBvZiAlcyBmYWls
ZWQ6ICVzXG4iLCBmdWxscGF0aC51dGY4KCkuZGF0YSgpLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICByZXR1cm4gb2s7CisgICAgfQorCisgICAgc3RydWN0IHN0YXQgZmlsZVN0YXQ7CisgICAg
c3RhdChmdWxscGF0aC51dGY4KCkuZGF0YSgpLCAmZmlsZVN0YXQpOworICAgIGlmIChmaWxlU3Rh
dC5zdF91aWQgPT0gZ2V0dWlkKCkpIHsKKyAgICAgICAgc3RydWN0IHBhc3N3ZCogbm9ib2R5VXNl
ciA9IGdldHB3bmFtKCJub2JvZHkiKTsKKyAgICAgICAgaWYgKDo6Y2hvd24oU3RyaW5nKG1fc2Fu
ZGJveFJvb3QgKyBmdWxscGF0aCkudXRmOCgpLmRhdGEoKSwgbm9ib2R5VXNlci0+cHdfdWlkLCBu
b2JvZHlVc2VyLT5wd19naWQpID09IC0xKQorICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBieSBv
d25pbmc6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisgICAgcmV0dXJuIG9rOwor
fQorCitib29sIFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjpjcmVhdGVEaXJlY3RvcnlQYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBpZiAoZmlsZUV4aXN0cygobV9zYW5kYm94Um9vdCAr
IHBhdGgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpbnQgc3RhcnRQb3MgPSAwOwor
ICAgIGludCBlbmRQb3MgPSAwOworICAgIFN0cmluZyBmdWxscGF0aCA9ICIiOworICAgIHdoaWxl
ICgoZW5kUG9zID0gcGF0aC5maW5kKCcvJywgc3RhcnRQb3MpKSAhPSBub3RGb3VuZCkgeworICAg
ICAgICBTdHJpbmcgc3Vic3RyID0gcGF0aC5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0
YXJ0UG9zICsgMSk7CisgICAgICAgIGNyZWF0ZURpcmVjdG9yeShmdWxscGF0aCwgc3Vic3RyKTsK
KyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKyAgICBjcmVhdGVEaXJlY3Rv
cnkoZnVsbHBhdGgsIHBhdGguc3Vic3RyaW5nKHN0YXJ0UG9zLCBwYXRoLmxlbmd0aCgpKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGludXg6OmNyZWF0
ZURldmljZUZpbGVzKCkKK3sKKyAgICBjcmVhdGVEaXJlY3RvcnlQYXRoKEFTQ0lJTGl0ZXJhbCgi
L2Rldi8iKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2RldmljZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgc3RydWN0IHN0YXQgc3RhdHVzOworICAgICAgICBpZiAoc3RhdChtX2Rldmlj
ZXMuYXQoaSkudXRmOCgpLmRhdGEoKSwgJnN0YXR1cykgIT0gLTEpIHsKKyAgICAgICAgICAgIGRl
dl90IGRldiA9IHN0YXR1cy5zdF9yZGV2OworICAgICAgICAgICAgLy8gQm90aCBuZWVkZWQgZGV2
aWNlIGZpbGVzICgvZGV2L3JhbmRvbSBhbmQgL2Rldi91cmFuZG9tKSBhcmUgY2hhcmFjdGVyIG1f
ZGV2aWNlcyBhbmQKKyAgICAgICAgICAgIC8vIHRoZWlyIHBlcm1pc3Npb25zIHNob3VsZCBiZTog
cnctcnctcnctLgorICAgICAgICAgICAgU3RyaW5nIGRldmljZSA9IG1fc2FuZGJveFJvb3QgKyBt
X2RldmljZXMuYXQoaSk7CisgICAgICAgICAgICBta25vZChkZXZpY2UudXRmOCgpLmRhdGEoKSwg
U19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lST1RI
IHwgU19JV09USCwgbWFrZWRldihtYWpvcihkZXYpLCBtaW5vcihkZXYpKSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGludXg6OmJpbmRTYW5kYm94RGly
ZWN0b3JpZXMoKQoreworICAgIC8vIE1vdW50aW5nIHRoZSBuZWVkZWQgc3lzdGVtIGRpcmVjdG9y
aWVzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9ib3VuZGVkRGlyZWN0b3JpZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgY3JlYXRlRGlyZWN0b3J5UGF0aChtX2JvdW5kZWREaXJlY3Rvcmll
cy5hdChpKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgU3RyaW5nIGRpcmVjdG9yeVBhdGggPSBt
X3NhbmRib3hSb290ICsgbV9ib3VuZGVkRGlyZWN0b3JpZXMuYXQoaSk7CisgICAgICAgIGlmICgh
bW91bnQobV9ib3VuZGVkRGlyZWN0b3JpZXMuYXQoaSkudXRmOCgpLmRhdGEoKSwgZGlyZWN0b3J5
UGF0aC51dGY4KCkuZGF0YSgpLCAiIiwgTVNfQklORCB8IE1TX1JFQyB8IE1TX01PVkUsICIiKSA9
PSAtMSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkgbW91bnRpbmcgJXMu
ICVzXG4iLCBkaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCksIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgfQorfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjphZGROb2JvZHlVc2VyVG9Q
YXNzd2QoKQoreworICAgIGNyZWF0ZURpcmVjdG9yeVBhdGgoIi9ldGMvIik7CisgICAgRklMRSog
cGFzc3dkRmlsZSA9IGZvcGVuKFN0cmluZyhtX3NhbmRib3hSb290ICsgIi9ldGMvcGFzc3dkIiku
dXRmOCgpLmRhdGEoKSwgIncrIik7CisgICAgaWYgKCFwYXNzd2RGaWxlKQorICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkNyZWF0aW5nIHBhc3N3ZCBmaWxlIGZhaWxlZDogJXMuXG4iLCBzdHJlcnJv
cihlcnJubykpOworICAgIHN0cnVjdCBwYXNzd2QqIG5vYm9keVVzZXIgPSBnZXRwd25hbSgibm9i
b2R5Iik7CisgICAgU3RyaW5nIHBhc3N3b3JkQ29udGVudCA9IFN0cmluZzo6ZnJvbVVURjgobm9i
b2R5VXNlci0+cHdfbmFtZSkgKyAnOicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmc6OmZyb21VVEY4KG5vYm9keVVzZXItPnB3X3Bhc3N3ZCkgKyAnOicgKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmc6Om51bWJlcihub2JvZHlVc2VyLT5wd191aWQpICsg
JzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpudW1iZXIobm9ib2R5
VXNlci0+cHdfZ2lkKSArICc6JyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Zzo6ZnJvbVVURjgobm9ib2R5VXNlci0+cHdfZ2Vjb3MpICsgJzonICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIi9ob21lL25vYm9keSIgKyAnOicgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG5vYm9keVVzZXItPnB3X3NoZWxsKTsKKyAgICBm
cHV0cyhwYXNzd29yZENvbnRlbnQudXRmOCgpLmRhdGEoKSwgcGFzc3dkRmlsZSk7CisgICAgZmNs
b3NlKHBhc3N3ZEZpbGUpOworfQorCit2b2lkIFNhbmRib3hFbnZpcm9ubWVudExpbnV4OjpsaW5r
RmlsZVJlY3Vyc2l2ZWx5KGNvbnN0IFN0cmluZyYgc291cmNlRmlsZSwgY29uc3QgU3RyaW5nJiB0
YXJnZXRGaWxlKQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChsc3RhdChz
b3VyY2VGaWxlLnV0ZjgoKS5kYXRhKCksICZmaWxlSW5mbykgPT0gLTEgJiYgZXJybm8gPT0gRU5P
RU5UKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgZW5kT2ZCYXNlRGlyZWN0b3J5SW5T
b3VyY2UgPSBzb3VyY2VGaWxlLnJldmVyc2VGaW5kKCcvJyk7CisgICAgaWYgKGVuZE9mQmFzZURp
cmVjdG9yeUluU291cmNlID09IG5vdEZvdW5kKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
SW52YWxpZCBzb3VyY2U6ICVzLlxuIiwgc291cmNlRmlsZS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBTdHJpbmcgYmFzZURpcmVjdG9yeU9mU291cmNlID0gc291
cmNlRmlsZS5sZWZ0KGVuZE9mQmFzZURpcmVjdG9yeUluU291cmNlICsgMSk7CisgICAgaWYgKCFj
cmVhdGVEaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlPZlNvdXJjZS51dGY4KCkuZGF0YSgpKSkg
eworICAgICAgICBwcmludGYoIkNyZWF0aW5nICVzIGZhaWxlZDogJXMuXG4iLCBiYXNlRGlyZWN0
b3J5T2ZTb3VyY2UudXRmOCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGxpbmsoc291cmNlRmlsZS51dGY4KCkuZGF0YSgpLCB0YXJn
ZXRGaWxlLnV0ZjgoKS5kYXRhKCkpID09IC0xICYmIGVycm5vICE9IEVFWElTVCkgeworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkxpbmtpbmcgJXMgZmFpbGVkOiAlcy5cbiIsIHNvdXJjZUZpbGUu
dXRmOCgpLmRhdGEoKSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEhhbmRsZSBzeW1saW5rcy4KKyAgICBpZiAoKGZpbGVJbmZvLnN0X21vZGUgJiBT
X0lGTVQpID09IFNfSUZMTkspIHsKKyAgICAgICAgY2hhciBzeW1saW5rVGFyZ2V0WzUxMl07Cisg
ICAgICAgIGludCBsZW5ndGhPZlRoZUxpbmsgPSByZWFkbGluayhzb3VyY2VGaWxlLnV0ZjgoKS5k
YXRhKCksIHN5bWxpbmtUYXJnZXQsIHNpemVvZihzeW1saW5rVGFyZ2V0KSk7CisgICAgICAgIGlm
IChsZW5ndGhPZlRoZUxpbmsgPiAwKQorICAgICAgICAgICAgc3ltbGlua1RhcmdldFtsZW5ndGhP
ZlRoZUxpbmtdID0gJ1wwJzsKKyAgICAgICAgU3RyaW5nIHN5bWxpbmtUYXJnZXRJblJlYWxXb3Js
ZDsKKyAgICAgICAgU3RyaW5nIHN5bWxpbmtUYXJnZXRJblNhbmRib3g7CisgICAgICAgIC8vIE1h
a2luZyBkaWZmZXJlbmNlIGJldHdlZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzLgorICAg
ICAgICBpZiAoc3ltbGlua1RhcmdldFswXSAhPSAnLycpIHsKKyAgICAgICAgICAgIHN5bWxpbmtU
YXJnZXRJblJlYWxXb3JsZCA9IGJhc2VEaXJlY3RvcnlPZlNvdXJjZSArICcvJyArIHN5bWxpbmtU
YXJnZXQ7CisgICAgICAgICAgICBzeW1saW5rVGFyZ2V0SW5TYW5kYm94ID0gbV9zYW5kYm94Um9v
dCArICcvJyArIHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCA9IHN5bWxpbmtUYXJnZXQ7CisgICAg
ICAgICAgICBzeW1saW5rVGFyZ2V0SW5TYW5kYm94ID0gbV9zYW5kYm94Um9vdCArIHN5bWxpbmtU
YXJnZXQ7CisgICAgICAgIH0KKyAgICAgICAgbGlua0ZpbGVSZWN1cnNpdmVseShzeW1saW5rVGFy
Z2V0SW5SZWFsV29ybGQsIHN5bWxpbmtUYXJnZXRJblNhbmRib3gpOworICAgIH0KK30KKwordm9p
ZCBTYW5kYm94RW52aXJvbm1lbnRMaW51eDo6bGlua0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHNv
dXJjZURpcmVjdG9yeVBhdGgsIGNvbnN0IFN0cmluZyYgdGFyZ2V0RGlyZWN0b3J5UGF0aCkKK3sK
KyAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeVBhdGgoc291cmNlRGlyZWN0b3J5UGF0aC51dGY4KCku
ZGF0YSgpKSkKKyAgICAgICAgcHJpbnRmKCJDcmVhdGluZyAlcyBmYWlsZWQ6ICVzLlxuIiwgdGFy
Z2V0RGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpLCBzdHJlcnJvcihlcnJubykpOworICAgIERJ
UiogZGlyZWN0b3J5ID0gb3BlbmRpcihzb3VyY2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkp
OworICAgIGlmIChkaXJlY3RvcnkpIHsKKyAgICAgICAgc3RydWN0IGRpcmVudCAqZGlyZWN0b3J5
SW5mbyA9IDA7CisgICAgICAgIHdoaWxlICgoZGlyZWN0b3J5SW5mbyA9IHJlYWRkaXIoZGlyZWN0
b3J5KSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBuZXh0RmlsZUluRGlyZWN0b3J5ID0gZGlyZWN0
b3J5SW5mby0+ZF9uYW1lOworICAgICAgICAgICAgaWYgKG5leHRGaWxlSW5EaXJlY3RvcnkgPT0g
Ii4iIHx8IG5leHRGaWxlSW5EaXJlY3RvcnkgPT0gIi4uIikKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBTdHJpbmcgc291cmNlRmlsZSA9IHNvdXJjZURpcmVjdG9y
eVBhdGggKyAnLycgKyBuZXh0RmlsZUluRGlyZWN0b3J5OworICAgICAgICAgICAgU3RyaW5nIHRh
cmdldEZpbGUgPSB0YXJnZXREaXJlY3RvcnlQYXRoICsgJy8nICsgbmV4dEZpbGVJbkRpcmVjdG9y
eTsKKworICAgICAgICAgICAgaWYgKGRpcmVjdG9yeUluZm8tPmRfdHlwZSA9PSBEVF9ESVIpCisg
ICAgICAgICAgICAgICAgbGlua0RpcmVjdG9yeShzb3VyY2VGaWxlLCB0YXJnZXRGaWxlKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaW5rRmlsZVJlY3Vyc2l2ZWx5KHNvdXJj
ZUZpbGUsIHRhcmdldEZpbGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFNhbmRib3hF
bnZpcm9ubWVudExpbnV4OjphZGREZXBlbmRlbmNpZXMoY29uc3QgU3RyaW5nJiBkZXBlbmRlbmN5
TGlzdCkKK3sKKyAgICAvLyBMaW5rIGRlcGVuZGVuY2llcyBvYnRhaW5lZCB3aXRoIGxkZC4KKyAg
ICBWZWN0b3I8U3RyaW5nPiBzcGxpdHRlZExpc3Q7CisgICAgZGVwZW5kZW5jeUxpc3Quc3BsaXQo
JzsnLCBzcGxpdHRlZExpc3QpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BsaXR0ZWRMaXN0
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBzb3VyY2UgPSBzcGxpdHRlZExpc3QuYXQo
aSk7CisgICAgICAgIGlmIChzb3VyY2VbMF0gIT0gJy8nKQorICAgICAgICAgICAgc291cmNlLmlu
c2VydCgiLyIsIDApOworICAgICAgICBsaW5rRmlsZVJlY3Vyc2l2ZWx5KHNvdXJjZSwgbV9zYW5k
Ym94Um9vdCArIHNvdXJjZSk7CisgICAgfQorCisgICAgLy8gTGluayBzaW5nbGUgZmlsZXMuCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2xpbmtlZEZpbGVzLnNpemUoKTsgKytpKQorICAgICAg
ICBsaW5rRmlsZVJlY3Vyc2l2ZWx5KG1fbGlua2VkRmlsZXMuYXQoaSksIG1fc2FuZGJveFJvb3Qg
KyBtX2xpbmtlZEZpbGVzLmF0KGkpKTsKKworICAgIC8vIExpbmsgdGhlIGRpcmVjdG9yaWVzIG5v
dCBwbGFjZWQgaW4gdXNlcnMgaG9tZS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbGlua2Vk
RGlyZWN0b3JpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGxpbmtEaXJlY3RvcnkobV9saW5rZWRE
aXJlY3Rvcmllcy5hdChpKSwgbV9zYW5kYm94Um9vdCArIG1fbGlua2VkRGlyZWN0b3JpZXMuYXQo
aSkpOworCisgICAgcGFzc3dkKiBub2JvZHkgPSBnZXRwd25hbSgibm9ib2R5Iik7CisgICAgU3Ry
aW5nIHN0ciA9IG1fc2FuZGJveFJvb3QgKyBtX2hvbWVEaXJlY3Rvcnk7CisgICAgaWYgKDo6Y2hv
d24oc3RyLnV0ZjgoKS5kYXRhKCksIG5vYm9keS0+cHdfdWlkLCBub2JvZHktPnB3X2dpZCkgPT0g
LTEpCisgICAgICAgIHByaW50ZigiQ291bGRuJ3Qgb3duICVzOiAlc1xuIiwgc3RyLnV0ZjgoKS5k
YXRhKCksIHN0cmVycm9yKGVycm5vKSk7CisKKyAgICAvLyBMaW5rIHRoZSBiaW5hcnkgZGlyZWN0
b3JpZXMgb2YgV2ViS2l0LgorICAgIFN0cmluZyB3ZWJLaXRCaW5hcnlEaXJJblNhbmRib3ggPSBt
X3NhbmRib3hSb290ICsgbV9iaW5hcnlEaXJlY3Rvcnk7CisgICAgbGlua0RpcmVjdG9yeShtX2Jp
bmFyeURpcmVjdG9yeSwgd2ViS2l0QmluYXJ5RGlySW5TYW5kYm94KTsKKworICAgIC8vIC5YYXV0
aG9yaXR5IGZpbGUgc2hvdWxkIGJlIGNvcGllZCBiZWNhdXNlIGl0cyBvd25lciB3aWxsIGNoYW5n
ZSBidXQgdGhlIG9yaWdpbmFsCisgICAgLy8gb25lIG11c3Qgbm90IGFsdGVyLgorICAgIFN0cmlu
ZyB4YXV0aG9yaXR5T2ZSZWFsVXNlciA9IG1faG9tZURpcmVjdG9yeSArICIvLlhhdXRob3JpdHki
OworICAgIFN0cmluZyB4YXV0aG9yaXR5SW5TYW5kYm94ID0gbV9zYW5kYm94Um9vdCArIHhhdXRo
b3JpdHlPZlJlYWxVc2VyOworICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CisgICAgc2l6ZV90IHNp
emU7CisKKyAgICBGSUxFKiBzb3VyY2UgPSBmb3Blbih4YXV0aG9yaXR5T2ZSZWFsVXNlci51dGY4
KCkuZGF0YSgpLCAicmIiKTsKKyAgICBGSUxFKiBkZXN0ID0gZm9wZW4oeGF1dGhvcml0eUluU2Fu
ZGJveC51dGY4KCkuZGF0YSgpLCAid2IiKTsKKworICAgIHdoaWxlICgoc2l6ZSA9IGZyZWFkKGJ1
ZmZlciwgMSwgQlVGU0laLCBzb3VyY2UpKSkKKyAgICAgICAgZndyaXRlKGJ1ZmZlciwgMSwgc2l6
ZSwgZGVzdCk7CisKKyAgICBmY2xvc2Uoc291cmNlKTsKKyAgICBmY2xvc2UoZGVzdCk7Cit9CisK
K3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGludXg6OmluaXRpYWxpemVTYW5kYm94KGNvbnN0IFN0
cmluZyYgZGVwZW5kZW5jeUxpc3QpCit7CisgICAgbWtkaXIobV9zYW5kYm94Um9vdC51dGY4KCku
ZGF0YSgpLCAwNzc3KTsKKyAgICBiaW5kU2FuZGJveERpcmVjdG9yaWVzKCk7CisgICAgYWRkTm9i
b2R5VXNlclRvUGFzc3dkKCk7CisgICAgYWRkRGVwZW5kZW5jaWVzKGRlcGVuZGVuY3lMaXN0KTsK
KyAgICBjcmVhdGVEZXZpY2VGaWxlcygpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq
YXJndltdKQoreworICAgIGlmIChhcmdjICE9IDQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJTdGFydGluZyBTYW5kYm94UHJvY2VzcyByZXF1aXJlcyA0IHBhcmFtZXRlcnMhIEV4aXRpbmcu
XG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNvbnN0IFN0cmluZyBzYW5k
Ym94RGlyZWN0b3J5ID0gQVNDSUlMaXRlcmFsKGdldHB3dWlkKGdldHB3dWlkKGdldHVpZCgpKS0+
cHdfdWlkKS0+cHdfZGlyKSArICIvLndrLXNhbmRib3giOworICAgIFNhbmRib3hFbnZpcm9ubWVu
dExpbnV4KiBzYW5kYm94SGFuZGxlciA9IG5ldyBTYW5kYm94RW52aXJvbm1lbnRMaW51eChzYW5k
Ym94RGlyZWN0b3J5LCBBU0NJSUxpdGVyYWwoYXJndlswXSkpOworICAgIHNhbmRib3hIYW5kbGVy
LT5pbml0aWFsaXplU2FuZGJveChBU0NJSUxpdGVyYWwoYXJndlszXSkpOworCisgICAgOjpzZXRn
cm91cHMoMCwgMCk7CisgICAgaWYgKDo6Y2hyb290KHNhbmRib3hEaXJlY3RvcnkudXRmOCgpLmRh
dGEoKSkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJvb3RpbmcgZmFpbGVk
OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg
ICBpZiAoOjpjaGRpcigiLyIpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBjaGFu
Z2UgZGlyZWN0b3J5XG4iKTsKKworICAgIHBhc3N3ZCogbm9ib2R5ID0gZ2V0cHduYW0oIm5vYm9k
eSIpOworICAgIC8vICJOb2JvZHkiIHNob3VsZCBvd24gdGhlIC5YYXV0aG9yaXR5IHRvIGJlIGFi
bGUgdG8gcnVuIFggaW5zaWRlIHRoZSBzYW5kYm94LgorICAgIGNvbnN0IFN0cmluZyB4YXV0aG9y
aXR5ID0gc2FuZGJveEhhbmRsZXItPm1faG9tZURpcmVjdG9yeSArICIvLlhhdXRob3JpdHkiOwor
ICAgIGlmIChjaG93bih4YXV0aG9yaXR5LnV0ZjgoKS5kYXRhKCksIG5vYm9keS0+cHdfdWlkLCBu
b2JvZHktPnB3X2dpZCkgPT0gLTEpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2hvd24gLlhh
dXRob3JpdHkgKCVzKSBmYWlsZWQ6ICVzLlxuIiwgeGF1dGhvcml0eS51dGY4KCkuZGF0YSgpLCBz
dHJlcnJvcihlcnJubykpOworICAgIHNldGVudigiWEFVVEhPUklUWSIsIHhhdXRob3JpdHkudXRm
OCgpLmRhdGEoKSwgMSk7CisgICAgc2V0ZW52KCJIT01FIiwgc2FuZGJveEhhbmRsZXItPm1faG9t
ZURpcmVjdG9yeS51dGY4KCkuZGF0YSgpLCAxKTsKKworICAgIC8vIERyb3AgYWxsIHByaXZpbGVn
ZXMuCisgICAgOjpzZXRnaWQobm9ib2R5LT5wd19naWQpOworICAgIDo6c2V0dWlkKG5vYm9keS0+
cHdfdWlkKTsKKyAgICA6OnVtYXNrKDApOworCisgICAgc2FuZGJveEhhbmRsZXItPnBsYXRmb3Jt
UnVuV2ViUHJvY2VzcyhBU0NJSUxpdGVyYWwoYXJndlsxXSksIEFTQ0lJTGl0ZXJhbChhcmd2WzJd
KSk7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCBiL1NvdXJjZS9XZWJL
aXQyL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxZjEwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdl
ZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU2FuZGJveEVudmlyb25tZW50
TGludXhfaAorI2RlZmluZSBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisKKyNpZiBFTkFCTEUo
U1VJRF9TQU5EQk9YX0xJTlVYKQorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworY2xhc3MgU2FuZGJveEVudmlyb25tZW50TGludXggewor
cHVibGljOgorICAgIFZlY3RvcjxTdHJpbmc+IG1fZGV2aWNlczsKKyAgICBWZWN0b3I8U3RyaW5n
PiBtX2JvdW5kZWREaXJlY3RvcmllczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2xpbmtlZERpcmVj
dG9yaWVzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fbGlua2VkRGlyZWN0b3JpZXNGcm9tSG9tZTsK
KyAgICBWZWN0b3I8U3RyaW5nPiBtX2xpbmtlZEZpbGVzOworCisgICAgU3RyaW5nIG1faG9tZURp
cmVjdG9yeTsKKyAgICBTdHJpbmcgbV9zYW5kYm94Um9vdDsKKyAgICBTdHJpbmcgbV9iaW5hcnlE
aXJlY3Rvcnk7CisKKyAgICBTYW5kYm94RW52aXJvbm1lbnRMaW51eChjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgYWRkRGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluZyYp
OworICAgIHZvaWQgYWRkTm9ib2R5VXNlclRvUGFzc3dkKCk7CisgICAgdm9pZCBiaW5kU2FuZGJv
eERpcmVjdG9yaWVzKCk7CisgICAgdm9pZCBjcmVhdGVEZXZpY2VGaWxlcygpOworICAgIHZvaWQg
aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBsaW5rRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgbGlua0ZpbGVSZWN1cnNp
dmVseShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNyZWF0ZURpcmVj
dG9yeVBhdGgoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBjcmVhdGVEaXJlY3RvcnkoU3RyaW5n
JiwgY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIHBsYXRmb3JtUnVuV2ViUHJvY2Vzcyhjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgp
OworfTsKKworI2VuZGlmIC8vIFNhbmRib3hFbnZpcm9ubWVudExpbnV4X2gKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9lZmwvU2FuZGJveEVudmly
b25tZW50TGludXhFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvZWZsL1Nh
bmRib3hFbnZpcm9ubWVudExpbnV4RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41MGE4NjE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2FuZGJv
eFByb2Nlc3MvZWZsL1NhbmRib3hFbnZpcm9ubWVudExpbnV4RWZsLmNwcApAQCAtMCwwICsxLDM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1Pgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
U2FuZGJveEVudmlyb25tZW50TGludXguaCIKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElO
VVgpCisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGludXg6OnBsYXRmb3JtSW5pdGlhbGl6ZSgp
Cit7Cit9CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGludXg6OnBsYXRmb3JtUnVuV2ViUHJv
Y2Vzcyhjb25zdCBTdHJpbmcmIHdlYlByb2Nlc3NQYXRoLCBjb25zdCBTdHJpbmcmIHNvY2tldCkK
K3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vz
cy9ndGsvU2FuZGJveEVudmlyb25tZW50TGludXhHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2Fu
ZGJveFByb2Nlc3MvZ3RrL1NhbmRib3hFbnZpcm9ubWVudExpbnV4R3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGE4NjE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvZ3RrL1NhbmRib3hFbnZpcm9ubWVudExpbnV4R3Rr
LmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlA
aW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiU2FuZGJveEVudmlyb25tZW50TGludXguaCIKKworI2lmIEVOQUJM
RShTVUlEX1NBTkRCT1hfTElOVVgpCisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGludXg6OnBs
YXRmb3JtSW5pdGlhbGl6ZSgpCit7Cit9CisKK3ZvaWQgU2FuZGJveEVudmlyb25tZW50TGludXg6
OnBsYXRmb3JtUnVuV2ViUHJvY2Vzcyhjb25zdCBTdHJpbmcmIHdlYlByb2Nlc3NQYXRoLCBjb25z
dCBTdHJpbmcmIHNvY2tldCkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TYW5kYm94UHJvY2Vzcy9xdC9TYW5kYm94RW52aXJvbm1lbnRMaW51eFF0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL3F0L1NhbmRib3hFbnZpcm9ubWVudExpbnV4UXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMjAyNTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy9xdC9TYW5kYm94RW52aXJv
bm1lbnRMaW51eFF0LmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhv
ZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU2FuZGJveEVudmlyb25tZW50TGludXguaCIK
KworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8UVByb2Nlc3M+Cisj
aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
Kwordm9pZCBTYW5kYm94RW52aXJvbm1lbnRMaW51eDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sK
KyAgICBtX2xpbmtlZERpcmVjdG9yaWVzLmFwcGVuZChtX2hvbWVEaXJlY3RvcnkgKyAiLy5sb2Nh
bC9zaGFyZS9Ob2tpYS8iKTsKKyAgICBtX2xpbmtlZERpcmVjdG9yaWVzLmFwcGVuZChtX2hvbWVE
aXJlY3RvcnkgKyAiLy5jYWNoZS9Ob2tpYS8iKTsKKyAgICBtX2xpbmtlZERpcmVjdG9yaWVzLmFw
cGVuZChBU0NJSUxpdGVyYWwoZ2V0ZW52KCJRVERJUiIpKSArICJwbHVnaW5zIik7Cit9CisKK3Zv
aWQgU2FuZGJveEVudmlyb25tZW50TGludXg6OnBsYXRmb3JtUnVuV2ViUHJvY2Vzcyhjb25zdCBT
dHJpbmcmIHdlYlByb2Nlc3NQYXRoLCBjb25zdCBTdHJpbmcmIHNvY2tldCkKK3sKKyAgICAvLyBD
YWxsaW5nIFdlYlByb2Nlc3Mgd2l0aCBub2JvZHkgcmlnaHRzLgorICAgIFFTdHJpbmcgY29tbWFu
ZExpbmUgPSBRTGF0aW4xU3RyaW5nKCIlMSAlMiIpOworICAgIGNvbW1hbmRMaW5lID0gY29tbWFu
ZExpbmUuYXJnKFFMYXRpbjFTdHJpbmcod2ViUHJvY2Vzc1BhdGgudXRmOCgpLmRhdGEoKSkpOwor
ICAgIGNvbW1hbmRMaW5lID0gY29tbWFuZExpbmUuYXJnKFFMYXRpbjFTdHJpbmcoc29ja2V0LnV0
ZjgoKS5kYXRhKCkpKTsKKworICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNzID0gbmV3IFFQcm9jZXNz
KCk7CisgICAgd2ViUHJvY2Vzcy0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3
YXJkZWRDaGFubmVscyk7CisgICAgd2ViUHJvY2Vzcy0+c3RhcnQoY29tbWFuZExpbmUpOworCisg
ICAgaWYgKCF3ZWJQcm9jZXNzLT53YWl0Rm9yU3RhcnRlZCgpKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiRmFpbGVkIHRvIHN0YXJ0ICVzLlxuIiwgY29tbWFuZExpbmUudG9Mb2NhbDhCaXQo
KS5kYXRhKCkpOworICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICB9CisgICAgc2V0cHJp
b3JpdHkoUFJJT19QUk9DRVNTLCB3ZWJQcm9jZXNzLT5waWQoKSwgMTApOworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpCmluZGV4IDhkNzAzNjcuLjk1YmRkNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzYsNiAr
MzYsNyBAQCBIRUFERVJTICs9IFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFy
YW1ldGVycy5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuaCBcCiAgICAgUGx1
Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oIFwKKyAgICBTYW5kYm94UHJvY2Vzcy9T
YW5kYm94RW52aXJvbm1lbnRMaW51eC5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tBcnJheS5oIFwK
ICAgICBTaGFyZWQvQVBJL2MvV0tCYXNlLmggXAogICAgIFNoYXJlZC9BUEkvYy9XS0NlcnRpZmlj
YXRlSW5mby5oIFwKQEAgLTM5MSw2ICszOTIsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBQbHVnaW5Q
cm9jZXNzL3F0L1BsdWdpbkNvbnRyb2xsZXJQcm94eVF0LmNwcCBcCiAgICAgUGx1Z2luUHJvY2Vz
cy9xdC9QbHVnaW5Qcm9jZXNzTWFpblF0LmNwcCBcCiAgICAgUGx1Z2luUHJvY2Vzcy9xdC9QbHVn
aW5Qcm9jZXNzUXQuY3BwIFwKKyAgICBTYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRM
aW51eC5jcHAgXAorICAgIFNhbmRib3hQcm9jZXNzL3F0L1NhbmRib3hFbnZpcm9ubWVudExpbnV4
UXQuY3BwIFwKICAgICBTaGFyZWQvQVBJL2MvV0tBcnJheS5jcHAgXAogICAgIFNoYXJlZC9BUEkv
Yy9XS0NlcnRpZmljYXRlSW5mby5jcHAgXAogICAgIFNoYXJlZC9BUEkvYy9XS0Nvbm5lY3Rpb25S
ZWYuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9x
dC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNo
ZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4IDNjYWNmMDQuLjNiMDIzOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNo
ZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nl
c3NMYXVuY2hlclF0LmNwcApAQCAtNjIsNiArNjIsMTQgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8UUNv
cmVBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
ZW5kaWYKKwogI2lmIE9TKERBUldJTikKICNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgogI2lu
Y2x1ZGUgPHNlcnZlcnMvYm9vdHN0cmFwLmg+CkBAIC0xMDYsNiArMTE0LDEwNCBAQCB2b2lkIFF0
V2ViUHJvY2Vzczo6c2V0dXBDaGlsZFByb2Nlc3MoKQogICAgIHFwdXRlbnYoIlFUX01BQ19ESVNB
QkxFX0ZPUkVHUk9VTkRfQVBQTElDQVRJT05fVFJBTlNGT1JNIiwgUUJ5dGVBcnJheSgiMSIpKTsK
ICNlbmRpZgogfQorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisKK3N0YXRpYyB2b2lk
IGZpbHRlckxpYnJhcnlEZXBlbmRlbmNpZXNGcm9tTERET3V0cHV0KGNoYXIqIGJ1ZmZlciwgaW50
IGJ1ZmZlckxlbmd0aCwgU3RyaW5nJiBsaWJyYXJ5RGVwZW5kZW5jaWVzKQoreworICAgIC8vIFRo
ZSBvdXRwdXQgb2YgbGRkIGNhbiBoYXZlIHR3byBmb3JtYXRzOgorICAgIC8vIDEpIFx0bmFtZV9v
Zl90aGVfbGlicmFyeSA9PiBwYXRoX29mX2xpYnJhcnkgKGFkZHJlc3Nfb2ZfdGhlX2xpYmFyeSkK
KyAgICAvLyAyKSBwYXRoX29mX3RoZV9saWJyYXJ5IChhZGRyZXNzX29mX3RoZV9saWJhcnkpCisg
ICAgY2hhciogcGF0aE9mVGhlTGlicmFyeSA9IChjaGFyKiltYWxsb2MoYnVmZmVyTGVuZ3RoICog
c2l6ZW9mKGNoYXIpKTsKKyAgICBpbnQgbnVtYmVyT2ZtYXRjaGluZ0NoYXJhY3RlcnMgPSBzc2Nh
bmYoYnVmZmVyLCAiXHQlKnMgPT4gLyVzICUqc1xuIiwgcGF0aE9mVGhlTGlicmFyeSk7CisgICAg
aWYgKCFudW1iZXJPZm1hdGNoaW5nQ2hhcmFjdGVycykKKyAgICAgICAgbnVtYmVyT2ZtYXRjaGlu
Z0NoYXJhY3RlcnMgPSBzc2NhbmYoYnVmZmVyLCAiXHQvJXMgJSpzXG4iLCBwYXRoT2ZUaGVMaWJy
YXJ5KTsKKyAgICBpZiAobnVtYmVyT2ZtYXRjaGluZ0NoYXJhY3RlcnMgPiAwKSB7CisgICAgICAg
IGxpYnJhcnlEZXBlbmRlbmNpZXMuYXBwZW5kKHBhdGhPZlRoZUxpYnJhcnkpOworICAgICAgICBs
aWJyYXJ5RGVwZW5kZW5jaWVzLmFwcGVuZCgnOycpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
ZmlsdGVyTGlicmFyeURlcGVuZGVuY2llc0Zyb21MZGNvbmZpZ091dHB1dChjaGFyKiBidWZmZXIs
IGludCBidWZmZXJMZW5ndGgsIFN0cmluZyYgbGlicmFyeURlcGVuZGVuY2llcykKK3sKKyAgICBT
dHJpbmcgbGlicmFyeShidWZmZXIsIGJ1ZmZlckxlbmd0aCk7CisgICAgVmVjdG9yPFN0cmluZz4g
ZHluYW1pY0RlcGVuZGVuY2llczsKKyAgICAvLyBUaGUgbGlzdCBvZiBlbXBpcmljYWxseSBnYXRo
ZXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVu
ZCgibGliY3J5cHRvLnNvIik7CisgICAgZHluYW1pY0RlcGVuZGVuY2llcy5hcHBlbmQoImxpYmRi
dXMuc28iKTsKKyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVuZCgibGliZXhwYXQuc28iKTsK
KyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVuZCgibGliZm9udGNvbmZpZy5zbyIpOworICAg
IGR5bmFtaWNEZXBlbmRlbmNpZXMuYXBwZW5kKCJsaWJmcmVldHlwZS5zbyIpOworICAgIGR5bmFt
aWNEZXBlbmRlbmNpZXMuYXBwZW5kKCJsaWJuc3NfZG5zLnNvIik7CisgICAgZHluYW1pY0RlcGVu
ZGVuY2llcy5hcHBlbmQoImxpYnJlc29sdi5zbyIpOworICAgIGR5bmFtaWNEZXBlbmRlbmNpZXMu
YXBwZW5kKCJsaWJzc2wuc28iKTsKKyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVuZCgibGli
WHJlbmRlci5zbyIpOworICAgIGR5bmFtaWNEZXBlbmRlbmNpZXMuYXBwZW5kKCJsaWJ4Y2IiKTsK
KyAgICBkeW5hbWljRGVwZW5kZW5jaWVzLmFwcGVuZCgibGliWGkiKTsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZHluYW1pY0RlcGVuZGVuY2llcy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobGlicmFyeS5jb250YWlucyhkeW5hbWljRGVwZW5kZW5jaWVzLmF0KGkpKSkgeworICAgICAg
ICAgICAgU3RyaW5nIHBhdGhPZlRoZUxpYnJhcnkgPSBsaWJyYXJ5LnN1YnN0cmluZyhsaWJyYXJ5
LmZpbmQoJy8nKSk7CisgICAgICAgICAgICBpZiAocGF0aE9mVGhlTGlicmFyeS5sZW5ndGgoKSA+
IDApIHsKKyAgICAgICAgICAgICAgICBsaWJyYXJ5RGVwZW5kZW5jaWVzLmFwcGVuZChwYXRoT2ZU
aGVMaWJyYXJ5KTsKKyAgICAgICAgICAgICAgICBsaWJyYXJ5RGVwZW5kZW5jaWVzLmFwcGVuZCgn
OycpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBj
b2xsZWN0TGlicmFyeURlcGVuZGVuY2llcyhTdHJpbmcgJmxpYnJhcnlEZXBlbmRlbmNpZXMsIFN0
cmluZyBwcm9jZXNzLCBjaGFyIHBhcmFtZXRlcnNbXSkKK3sKKyAgICBpbnQgc3RhdHVzOworICAg
IGludCBwaXBlZmRbMl07CisKKyAgICBpZiAocGlwZShwaXBlZmQpKQorICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkVycm9yIGJ5IHBpcGluZzogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworCisg
ICAgc3dpdGNoIChmb3JrKCkpIHsKKyAgICBjYXNlIC0xOgorICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkVycm9yIGJ5IGZvcmtpbmc6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgY2xvc2UocGlwZWZkWzFdKTsgLy8gQ2xvc2Ug
dGhlIHdyaXRlIGVuZCBvZiB0aGUgcGlwZSBpbiB0aGUgcGFyZW50LgorICAgICAgICBGSUxFKiBm
aWxlOworICAgICAgICBmaWxlID0gZmRvcGVuKHBpcGVmZFswXSwgInIiKTsKKworICAgICAgICBj
aGFyIGJ1ZmZlclsyMDBdOworICAgICAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVm
ZmVyKSwgZmlsZSkpIHsKKyAgICAgICAgICAgICAgaW50IGxlbmd0aCA9IHN0cmxlbihidWZmZXIp
IC0gMTsKKyAgICAgICAgICAgICAgaWYgKGJ1ZmZlcltsZW5ndGhdID09ICdcbicpCisgICAgICAg
ICAgICAgICAgICBidWZmZXJbbGVuZ3RoXSA9IDA7CisgICAgICAgICAgICAgIGlmIChwcm9jZXNz
LmNvbnRhaW5zKFN0cmluZygibGQtbGludXgiKSkpCisgICAgICAgICAgICAgICAgICBmaWx0ZXJM
aWJyYXJ5RGVwZW5kZW5jaWVzRnJvbUxERE91dHB1dChidWZmZXIsIGxlbmd0aCwgbGlicmFyeURl
cGVuZGVuY2llcyk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGZpbHRl
ckxpYnJhcnlEZXBlbmRlbmNpZXNGcm9tTGRjb25maWdPdXRwdXQoYnVmZmVyLCBsZW5ndGgsIGxp
YnJhcnlEZXBlbmRlbmNpZXMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdhaXQoJnN0YXR1
cykgPD0gMCkKKyAgICAgICAgICAgIHdhcm4oIldhaXQuIik7CisgICAgICAgIGVsc2UgaWYgKFdJ
RlNJR05BTEVEKHN0YXR1cykpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNpZ25hbGVk
OiBzaWduYWwgJWRcbiIsIFdURVJNU0lHKHN0YXR1cykpOworICAgICAgICBlbHNlIGlmIChXSUZF
WElURUQoc3RhdHVzKSAmJiBXRVhJVFNUQVRVUyhzdGF0dXMpKQorICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJFeGl0ZWQ6IGV4aXQgc3RhdHVzICVkXG4iLCBXRVhJVFNUQVRVUyhzdGF0dXMp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAwOgorICAgICAgICBjbG9zZShwaXBlZmRbMF0p
OworCisgICAgICAgIGR1cDIocGlwZWZkWzFdLCAxKTsgLy8gU2VuZCBzdGRvdXQgdG8gdGhlIHBp
cGUuCisgICAgICAgIGR1cDIocGlwZWZkWzFdLCAyKTsgLy8gU2VuZCBzdGRlcnIgdG8gdGhlIHBp
cGUuCisKKyAgICAgICAgaWYgKHByb2Nlc3MuY29udGFpbnMoImxkLWxpbnV4IiwgZmFsc2UpKSB7
CisgICAgICAgICAgICAvLyBVc2luZyBsZGQgbWVhbnMgdGhhdCB3ZSBjYWxsIGxkLWxpbnV4IHdo
aWxlIExEX1RSQUNFX0xPQURFRF9PQkpFQ1RTIGlzIHNldC4KKyAgICAgICAgICAgIC8vIFRoaXMg
d2F5IHRoZSAicHJvY2VzcyIgd29uJ3QgcnVuIG9ubHkgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGJl
IGRldGVybWluZWQuCisgICAgICAgICAgICBzZXRlbnYoIkxEX1RSQUNFX0xPQURFRF9PQkpFQ1RT
IiwgInllcyIsIDEpOworICAgICAgICAgICAgZXhlY2wocHJvY2Vzcy5hc2NpaSgpLmRhdGEoKSwg
cHJvY2Vzcy51dGY4KCkuZGF0YSgpLCBwYXJhbWV0ZXJzLCAoY2hhciAqKTApOworICAgICAgICAg
ICAgdW5zZXRlbnYoIkxEX1RSQUNFX0xPQURFRF9PQkpFQ1RTIik7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgZXhlY2wocHJvY2Vzcy5hc2NpaSgpLmRhdGEoKSwgcHJvY2Vzcy51dGY4KCku
ZGF0YSgpLCBwYXJhbWV0ZXJzLCAoY2hhciAqKTApOworICAgICAgICBjbG9zZShwaXBlZmRbMV0p
OworICAgIH0KK30KKyNlbmRpZgogCiB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vz
cygpCiB7CkBAIC0xNjUsMzcgKzI3MSw2NCBAQCB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNo
UHJvY2VzcygpCiAgICAgY29tbWFuZExpbmUgPSBjb21tYW5kTGluZS5hcmcoc29ja2V0c1swXSk7
CiAjZW5kaWYKIAotICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNzID0gbmV3IFF0V2ViUHJvY2Vzcygp
OwotICAgIHdlYlByb2Nlc3MtPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6Rm9yd2Fy
ZGVkQ2hhbm5lbHMpOwotICAgIHdlYlByb2Nlc3MtPnN0YXJ0KGNvbW1hbmRMaW5lKTsKKyAgICBR
UHJvY2Vzcyogd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9Y
X0xJTlVYKQorICAgIFN0cmluZyBsaWJyYXJ5RGVwZW5kZW5jaWVzOworICAgIC8vIFRoZXJlIGFy
ZSB0d28gd2F5IGhvdyB3ZSBnYXRoZXIgdGhlIGRlcGVuZGVuY2llczoKKyAgICAvLyAxKSBVc2lu
ZyBsZGQgdG8gb2J0YWluIHRoZSBzdGF0aWMgZGVwZW5kZW5jaWVzIG9mIFF0V2ViUHJvY2Vzcy4K
KyAgICAvLyAyKSBVc2luZyBhIGRldmVsZXBlciBkZWZpbmVkIGxpc3Qgb2YgZHluYW1pYyBkZXBl
bmRlbmNpZXMgKGl0J3MgZ2F0aGVyZWQgZW1waXJpY2FsIHdheSkuCisgICAgY29sbGVjdExpYnJh
cnlEZXBlbmRlbmNpZXMobGlicmFyeURlcGVuZGVuY2llcywgIi9saWI2NC9sZC1saW51eC14ODYt
NjQuc28uMiIsIChjaGFyKikoZXhlY3V0YWJsZVBhdGhPZldlYlByb2Nlc3MoKS51dGY4KCkuZGF0
YSgpKSk7CisgICAgY29sbGVjdExpYnJhcnlEZXBlbmRlbmNpZXMobGlicmFyeURlcGVuZGVuY2ll
cywgIi9zYmluL2xkY29uZmlnIiwgKGNoYXIqKSgiLXAiKSk7CisKKyAgICBRU3RyaW5nIHNhbmRi
b3hDb21tYW5kTGluZSA9IFFMYXRpbjFTdHJpbmcoIiUxICUyICUzICU0Iik7CisgICAgc2FuZGJv
eENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFyZyhRQ29yZUFwcGxpY2F0aW9uOjph
cHBsaWNhdGlvbkRpclBhdGgoKSArIFFMYXRpbjFTdHJpbmcoIi9TVUlEU2FuZGJveEhlbHBlciIp
KTsKKyAgICBzYW5kYm94Q29tbWFuZExpbmUgPSBzYW5kYm94Q29tbWFuZExpbmUuYXJnKGV4ZWN1
dGFibGVQYXRoT2ZXZWJQcm9jZXNzKCkpOworICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRi
b3hDb21tYW5kTGluZS5hcmcoc29ja2V0c1swXSk7CisgICAgc2FuZGJveENvbW1hbmRMaW5lID0g
c2FuZGJveENvbW1hbmRMaW5lLmFyZyhsaWJyYXJ5RGVwZW5kZW5jaWVzKTsKKworICAgIHdlYlBy
b2Nlc3NPclNVSURIZWxwZXIgPSBuZXcgUVByb2Nlc3MoKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlE
SGVscGVyLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxz
KTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChzYW5kYm94Q29tbWFuZExpbmUp
OworI2Vsc2UKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyID0gbmV3IFF0V2ViUHJvY2Vzcygp
OworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJv
Y2Vzczo6TWVyZ2VkQ2hhbm5lbHMpOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnN0YXJ0
KGNvbW1hbmRMaW5lKTsKKyNlbmRpZgogCiAjaWYgT1MoVU5JWCkgJiYgIU9TKERBUldJTikKICAg
ICAvLyBEb24ndCBleHBvc2UgdGhlIHdlYiBzb2NrZXQgdG8gcG9zc2libGUgZnV0dXJlIHdlYiBw
cm9jZXNzZXMKICAgICB3aGlsZSAoZmNudGwoc29ja2V0c1swXSwgRl9TRVRGRCwgRkRfQ0xPRVhF
QykgPT0gLTEpIHsKICAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAg
ICAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotICAgIGlmICghd2ViUHJvY2Vzcy0+d2Fp
dEZvclN0YXJ0ZWQoKSkgeworICAgIGlmICghd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZv
clN0YXJ0ZWQoKSkgewogICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8PCBj
b21tYW5kTGluZTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjaWYgT1MoREFSV0lO
KQogICAgICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBjb25uZWN0
b3IpOwogICAgICAgICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgY29ubmVj
dG9yLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwogI2VuZGlmCi0gICAgICAgIGRlbGV0
ZSB3ZWJQcm9jZXNzOworICAgICAgICBkZWxldGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmIE9TKFVOSVgpICYmIEVOQUJMRShTVUlEX1NBTkRC
T1hfTElOVVgpCisgICAgaWYgKCF3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT53YWl0Rm9yRmluaXNo
ZWQoKSkgeworICAgICAgICBkZWxldGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAjaWYgT1MoVU5JWCkKLSAgICBzZXRwcmlvcml0eShQ
UklPX1BST0NFU1MsIHdlYlByb2Nlc3MtPnBpZCgpLCAxMCk7CisgICAgc2V0cHJpb3JpdHkoUFJJ
T19QUk9DRVNTLCB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5waWQoKSwgMTApOwogI2VuZGlmCiAK
LSAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKGJpbmQoJldlYktpdDo6UHJvY2Vzc0xhdW5j
aGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCB0aGlzLCB3ZWJQcm9jZXNzLCBjb25uZWN0
b3IpKTsKKyAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKGJpbmQoJldlYktpdDo6UHJvY2Vz
c0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCB0aGlzLCB3ZWJQcm9jZXNzT3JT
VUlESGVscGVyLCBjb25uZWN0b3IpKTsKIH0KIAogdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1p
bmF0ZVByb2Nlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQppbmRleCA5MTY2ODc0Li5lNWI2YzUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnByaQpAQCAtNjEsNyArNjEsOSBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0Vf
RElSL1dlYlByb2Nlc3MvV2ViUGFnZSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9x
dCBcCi0gICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MKKyAgICAkJFNPVVJDRV9ESVIvUGx1
Z2luUHJvY2VzcyBcCisgICAgJCRTT1VSQ0VfRElSL1NhbmRib3hQcm9jZXNzIFwKKyAgICAkJFNP
VVJDRV9ESVIvU2FuZGJveFByb2Nlc3MvcXQKIAogIyBUaGUgV2ViS2l0MiBRdCBBUElzIGRlcGVu
ZCBvbiBxd2Via2l0Z2xvYmFsLmgsIHdoaWNoIGxpdmVzIGluIFdlYktpdAogSU5DTFVERVBBVEgg
Kz0gJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViS2l0L3F0L0FwaQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKaW5kZXggMThmMzAz
OTQuLmNkYzUyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2Vi
UHJvY2Vzc01haW5RdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQ
cm9jZXNzTWFpblF0LmNwcApAQCAtMTQ1LDcgKzE0NSw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVQcm94eSgpCiBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpblF0KFFHdWlBcHBsaWNh
dGlvbiogYXBwKQogewogICAgIGluaXRpYWxpemVQcm94eSgpOwotCiAgICAgSlNDOjppbml0aWFs
aXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIFJ1
bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0Zl
YXR1cmVMaXN0LnBtCmluZGV4IDllMTNmYjYuLjY2MDMxNTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHBlcmwvRmVhdHVyZUxpc3QucG0KQEAgLTExNiw2ICsxMTYsNyBAQCBteSAoCiAgICAgJHNoYXJl
ZFdvcmtlcnNTdXBwb3J0LAogICAgICRzcWxEYXRhYmFzZVN1cHBvcnQsCiAgICAgJHN0eWxlU2Nv
cGVkU3VwcG9ydCwKKyAgICAkc3VpZExpbnV4U2FuZGJveCwKICAgICAkc3ZnRE9NT2JqQ0JpbmRp
bmdzU3VwcG9ydCwKICAgICAkc3ZnRm9udHNTdXBwb3J0LAogICAgICRzdmdTdXBwb3J0LApAQCAt
MzU5LDYgKzM2MCw5IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAic3R5bGUt
c2NvcGVkIiwgZGVzYyA9PiAiVG9nZ2xlIFN0eWxlIFNjb3BlZCBzdXBwb3J0IiwKICAgICAgIGRl
ZmluZSA9PiAiRU5BQkxFX1NUWUxFX1NDT1BFRCIsIGRlZmF1bHQgPT4gaXNCbGFja0JlcnJ5KCks
IHZhbHVlID0+IFwkc3R5bGVTY29wZWRTdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAic3Vp
ZC1saW51eC1zYW5kYm94IiwgZGVzYyA9PiAiVG9nZ2xlIHN1aWQgc2FuZGJveCBmb3IgbGludXgi
LAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYIiwgZGVmYXVsdCA9
PiAwLCB2YWx1ZSA9PiBcJHN1aWRMaW51eFNhbmRib3ggfSwKKwogICAgIHsgb3B0aW9uID0+ICJz
dmciLCBkZXNjID0+ICJUb2dnbGUgU1ZHIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFC
TEVfU1ZHIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJHN2Z1N1cHBvcnQgfSwKIAotLSAKMS43
LjkuNQoK
</data>
<flag name="commit-queue"
          id="174457"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168044</attachid>
            <date>2012-10-10 11:28:58 -0700</date>
            <delta_ts>2012-10-16 12:11:21 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-8.7.patch</filename>
            <type>text/plain</type>
            <size>43712</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA3NjQ2Nzg5NTAzNDk3MjdhMmU3M2M3NzI1OTNlNTk2NGUyOGZiZjE0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogV2Vk
LCAxMCBPY3QgMjAxMiAyMDoyNjowOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGZlbHRvbHQgOC43
CgotLS0KIFNvdXJjZS9RdFdlYktpdC5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgNSArCiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCAgICAg
ICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVz
LnhjY29uZmlnIHwgICAgMyArLQogU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvICAg
ICAgICAgICAgICAgICAgfCAgIDI1ICsKIC4uLi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJv
bm1lbnRMaW51eC5jcHAgICAgIHwgIDcxNiArKysrKysrKysrKysrKysrKysrKwogLi4uL1NhbmRi
b3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmggICAgICAgfCAgIDUwICsrCiBTb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwog
Li4uL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgICAgfCAgIDM0
ICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5j
cHAgIHwgICA3OCArKy0KIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSAg
ICAgICAgICAgIHwgICAgNCArCiBUb29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRf
cG9zdC5wcmYgICAgICB8ICAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgOTA3IGluc2VydGlvbnMo
KyksIDE2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1Nh
bmRib3hQcm9jZXNzLnBybwogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NhbmRi
b3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUXRXZWJLaXQucHJvIGIvU291cmNlL1F0V2ViS2l0LnBybwpp
bmRleCBiMTU4NjI1Li5mYTU2ZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvUXRXZWJLaXQucHJvCisr
KyBiL1NvdXJjZS9RdFdlYktpdC5wcm8KQEAgLTE3LDYgKzE3LDExIEBAIGJ1aWxkPyh3ZWJraXQy
KSB7CiAgICAgICAgIHBsdWdpbnByb2Nlc3MuZmlsZSA9IFdlYktpdDIvUGx1Z2luUHJvY2Vzcy5w
cm8KICAgICAgICAgU1VCRElSUyArPSBwbHVnaW5wcm9jZXNzCiAgICAgfQorCisgICAgZW5hYmxl
PyhTVUlEX1NBTkRCT1hfTElOVVgpIHsKKyAgICAgICAgc2FuZGJveHByb2Nlc3MuZmlsZSA9IFdl
YktpdDIvU2FuZGJveFByb2Nlc3MucHJvCisgICAgICAgIFNVQkRJUlMgKz0gc2FuZGJveHByb2Nl
c3MKKyAgICB9CiB9CiAKIGluY2x1ZGUoV2ViS2l0L3F0L2RvY3MvZG9jcy5wcmkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCmluZGV4IDQyYTUzNmYuLmUzMzhjOGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuY3BwCkBAIC0xNDAsNyAr
MTQwLDcgQEAgdm9pZCBTdG9yYWdlVHJhY2tlcjo6b3BlblRyYWNrZXJEYXRhYmFzZShib29sIGNy
ZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgU3RyaW5nIGRh
dGFiYXNlUGF0aCA9IHRyYWNrZXJEYXRhYmFzZVBhdGgoKTsKLSAgICAKKwogICAgIGlmICghU1FM
aXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3RzKGRhdGFiYXNlUGF0aCwgY3Jl
YXRlSWZEb2VzTm90RXhpc3QpKSB7CiAgICAgICAgIGlmIChjcmVhdGVJZkRvZXNOb3RFeGlzdCkK
ICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkYXRhYmFzZSBmaWxlICcl
cyciLCBkYXRhYmFzZVBhdGguYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2Vi
S2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCBjZTQxZDMw
Li4zNjhiMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9G
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMTIwLDYgKzEyMCw3IEBAIEVOQUJMRV9QUk9HUkVT
U19FTEVNRU5UID0gRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQ7CiBFTkFCTEVfUVVPVEEgPSA7CiBF
TkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05f
RlJBTUU7CiBFTkFCTEVfU0NSSVBURURfU1BFRUNIID0gOworRU5BQkxFX1NVSURfU0FOREJPWF9M
SU5VWCA9IDsKIEVOQUJMRV9TSEFET1dfRE9NID0gOwogRU5BQkxFX1NIQVJFRF9XT1JLRVJTID0g
RU5BQkxFX1NIQVJFRF9XT1JLRVJTOwogRU5BQkxFX1NRTF9EQVRBQkFTRSA9IEVOQUJMRV9TUUxf
REFUQUJBU0U7CkBAIC0xNDMsNCArMTQ0LDQgQEAgRU5BQkxFX1dJREdFVF9SRUdJT04gPSA7CiBF
TkFCTEVfV09SS0VSUyA9IEVOQUJMRV9XT1JLRVJTOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNM
VDsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9B
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JM
T0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFC
TEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChF
TkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NT
X0hJRVJBUkNISUVTKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NT
U19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NI
QURFUlMpICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJM
RVMpICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1F
X0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9F
TEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VM
RU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1F
TlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVO
QUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkg
JChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJP
VFRMSU5HKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkg
JChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVO
QUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lO
UFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFW
QVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQo
RU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQo
RU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxF
X0xJTktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkg
JChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFC
TEVfTUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJT
KSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9O
UykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVO
VCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVO
QUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJF
RF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkg
JChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NW
R19GT05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNB
VElPTlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01B
TkFHRVIpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VC
R0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dF
Ql9USU1JTkcpICQoRU5BQkxFX1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktFUlMpICQoRU5B
QkxFX1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVO
QUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5B
QkxFX0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkg
JChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9O
UykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFC
TEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5B
QkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVf
Q1NTX1NIQURFUlMpICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19W
QVJJQUJMRVMpICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01f
U0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRB
TElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRB
SUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9H
X0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVN
KSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FN
RVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1F
Ul9USFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRB
QkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNF
KSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5B
QkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAk
KEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFC
TEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklY
RVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklY
RVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQo
RU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NP
VVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkg
JChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JT
RVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJ
Q0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1Nf
RUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCkg
JChFTkFCTEVfU0hBRE9XX0RPTSkgJChFTkFCTEVfU0hBUkVEX1dPUktFUlMpICQoRU5BQkxFX1NR
TF9EQVRBQkFTRSkgJChFTkFCTEVfU1RZTEVfU0NPUEVEKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxF
X1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URVhU
X0FVVE9TSVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9U
T1VDSF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX1VORE9fTUFOQUdFUikgJChFTkFCTEVfVklERU8p
ICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElP
KSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV0lE
R0VUX1JFR0lPTikgJChFTkFCTEVfV09SS0VSUykgJChFTkFCTEVfWFNMVCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9TYW5k
Ym94UHJvY2Vzcy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlMzU3
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwpA
QCAtMCwwICsxLDI1IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCBmaWxlIGZvciB0aGUgV2Vi
S2l0MiBzYW5kYm94IHByb2Nlc3MgYmluYXJ5CisjCisjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1F
JyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RF
TVBMQVRFID0gYXBwCisKK1RBUkdFVCA9IFNVSURTYW5kYm94SGVscGVyCitERVNURElSID0gJCR7
Uk9PVF9CVUlMRF9ESVJ9L2JpbgorCitDT05GSUcgKz0gY29uc29sZQorQ09ORklHIC09IHF0CisK
K1NPVVJDRVMgKz0gU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCitI
RUFERVJTICs9IFNhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKKworSU5T
VEFMTFMgKz0gdGFyZ2V0CitMSUJTICs9IC1sY2FwCisKK2lzRW1wdHkoSU5TVEFMTF9CSU5TKSB7
CisgICAgdGFyZ2V0LnBhdGggPSAkJFtRVF9JTlNUQUxMX0JJTlNdCit9IGVsc2UgeworICAgIHRh
cmdldC5wYXRoID0gJCRJTlNUQUxMX0JJTlMKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmM4OGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCkBA
IC0wLDAgKzEsNzE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUt
c3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiU2FuZGJveEVudmlyb25tZW50TGludXguaCIKKworI2lmIEVOQUJMRShTVUlE
X1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZXJyLmg+Cisj
aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdycC5oPgor
I2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHNjaGVkLmg+
CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgor
I2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUg
PHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMv
c3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4K
KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUg
PHVuaXN0ZC5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisKKyNpZm5kZWYgQ0xPTkVfTkVXUElECisj
ZGVmaW5lIENMT05FX05FV1BJRCAgMHgyMDAwMDAwMAorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBTQUZFRElSOworc3RhdGljIGNvbnN0IGludCBQ
QVRIU0laRSA9IDUxMjsKKworc3RhdGljIGJvb2wgc3RyaW5nQ29weShjaGFyKiBkZXN0aW5hdGlv
biwgY29uc3QgY2hhciogc291cmNlLCBjb25zdCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVu
Z3RoID0gc3RybGVuKHNvdXJjZSk7CisgICAgaWYgKGxlbmd0aCA+IG1heFNpemUgLSAxKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IFRvbyBsb25nIHN0cmluZy5cbiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNl
LCBsZW5ndGgpOworICAgIGRlc3RpbmF0aW9uW2xlbmd0aF0gPSAnXDAnOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgYm9vbCBzdHJpbmdDb3B5KGNoYXIqIGRlc3RpbmF0aW9uLCBjb25z
dCBjaGFyKiBzb3VyY2UsIGNvbnN0IGludCBsZW5ndGgsIGNvbnN0IGludCBtYXhTaXplKQorewor
ICAgIGlmIChsZW5ndGggPiBtYXhTaXplIC0gMSB8fCBsZW5ndGggPiBzdHJsZW4oc291cmNlKSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBUb28gbG9uZyBzdHJpbmcuXG4iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNv
dXJjZSwgbGVuZ3RoKTsKKyAgICBkZXN0aW5hdGlvbltsZW5ndGhdID0gJ1wwJzsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgc3RyaW5nQ29uY2F0KGNoYXIqIGRlc3RpbmF0aW9u
LCBjb25zdCBjaGFyKiBzb3VyY2UxLCBjb25zdCBjaGFyKiBzb3VyY2UyLCBjb25zdCBpbnQgbWF4
U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3RoMSA9IHN0cmxlbihzb3VyY2UxKTsKKyAgICBpbnQgbGVu
Z3RoMiA9IHN0cmxlbihzb3VyY2UyKTsKKyAgICBpZiAobGVuZ3RoMSArIGxlbmd0aDIgPiBtYXhT
aXplIC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBUb28gbG9uZyBzdHJp
bmcuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVzdGlu
YXRpb24sIHNvdXJjZTEsIGxlbmd0aDEpOworICAgIG1lbWNweShkZXN0aW5hdGlvbiArIGxlbmd0
aDEsIHNvdXJjZTIsIGxlbmd0aDIpOworICAgIGRlc3RpbmF0aW9uW2xlbmd0aDEgKyBsZW5ndGgy
XSA9ICdcMCc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHN0cmluZ0NvbmNh
dChjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlMSwgY29uc3QgY2hhciogc291
cmNlMiwgY29uc3QgY2hhciogc291cmNlMywgY29uc3QgaW50IG1heFNpemUpCit7CisgICAgaW50
IGxlbmd0aDEgPSBzdHJsZW4oc291cmNlMSk7CisgICAgaW50IGxlbmd0aDIgPSBzdHJsZW4oc291
cmNlMik7CisgICAgaW50IGxlbmd0aDMgPSBzdHJsZW4oc291cmNlMyk7CisgICAgaWYgKGxlbmd0
aDEgKyBsZW5ndGgyICsgbGVuZ3RoMyA+IG1heFNpemUgLSAxKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiRXJyb3I6IFRvbyBsb25nIHN0cmluZy5cbiIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlMSwgbGVuZ3RoMSk7Cisg
ICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSwgc291cmNlMiwgbGVuZ3RoMik7CisgICAg
bWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSArIGxlbmd0aDIsIHNvdXJjZTMsIGxlbmd0aDMp
OworICAgIGRlc3RpbmF0aW9uW2xlbmd0aDEgKyBsZW5ndGgyICsgbGVuZ3RoM10gPSAnXDAnOwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IGxhdW5jaENocm9vdEhlbHBlcigpCit7
CisgICAgaW50IHN2WzJdOworICAgIHNzaXplX3QgY250OworICAgIHJlZ2lzdGVyIHBpZF90IHBp
ZDsKKyAgICBjb25zdCBpbnQgZGVzY3JpcHRvclNpemUgPSAxMTsKKyAgICBjaGFyIHNvY2tldERl
c2NyaXB0b3JbZGVzY3JpcHRvclNpemVdOworICAgIGNoYXIgc2FuZGJveEhlbHBlclBJRFtkZXNj
cmlwdG9yU2l6ZV07CisgICAgY2hhciBtc2c7CisgICAgY2hhciogc2FmZWRpciA9IDA7CisgICAg
c3RydWN0IHN0YXQgc2FmZWRpckluZm87CisKKyAgICBpZiAoIXN0YXQoU0FGRURJUiwgJnNhZmVk
aXJJbmZvKSAmJiBTX0lTRElSKHNhZmVkaXJJbmZvLnN0X21vZGUpKQorICAgICAgICBzYWZlZGly
ID0gY29uc3RfY2FzdDxjaGFyKj4oU0FGRURJUik7CisgICAgZWxzZSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiSGVscGVyOiAlcyBkb2VzIG5vdCBleGlzdCFcbiIsIFNBRkVESVIpOworICAg
ICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09D
S19TVFJFQU0sIDAsIHN2KSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxk
bid0IGNyZWF0ZSBzb2NrZXRwYWlyOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIH0KKworICAgIHBpZCA9IHN5c2NhbGwoU1lTX2Nsb25lLCBDTE9ORV9G
UyB8IFNJR0NITEQsIDAsIDAsIDApOworCisgICAgc3RydWN0IHJsaW1pdCBub0ZpbGUgPSB7MCwg
MH07CisgICAgc3dpdGNoIChwaWQpIHsKKyAgICBjYXNlIC0xOgorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNsb25lIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJl
dHVybiAtMTsKKworICAgIC8vIENoaWxkLgorICAgIGNhc2UgMDoKKyAgICAgICAgLy8gV2Ugc2hh
cmUgb3VyIEZTIHdpdGggYW4gdW50cnVzdGVkIHByb2Nlc3MsIHNvCisgICAgICAgIC8vIHdlIGhh
dmUgdG8gbWFrZSBzdXJlIHdlIGNhbid0IG9wZW4gYW55dGhpbmcgYnkgbWlzdGFrZS4KKyAgICAg
ICAgLy8gSG93ZXZlciwgaWYgd2UgZG9uJ3QgZHJvcCBDQVBfU1lTX1JFU1NPVVJDRSBpdCdzIHVz
ZWxlc3MKKyAgICAgICAgaWYgKHNldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmbm9GaWxlKSkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJIZWxwZXIgY291bGRuJ3Qgc2V0IHRoZSByZXNv
dXJjZWxpbWl0OiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBleGl0KEVY
SVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xvc2Uoc3ZbMV0pID09IC0x
KSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNsb3NlIHNvY2tldCAl
ZDogJXNcbiIsIHN2WzFdLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVhZCB0aGUgImNocm9vdG1lIiBt
ZXNzYWdlICgnQycpIGZyb20gdGhlIHNvY2tldC4KKyAgICAgICAgY250ID0gcmVhZChzdlswXSwg
Jm1zZywgMSk7CisgICAgICAgIGlmICghY250KQorICAgICAgICAgICAgZXhpdChFWElUX1NVQ0NF
U1MpOworICAgICAgICBlbHNlIGlmIChjbnQgIT0gMSkgeworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDb3VsZG4ndCByZWFkIHRoZSBwcm9wZXIgY2hyb290bWUgbXNnOiAlc1xuIiwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChtc2cgIT0gTVNHX0NIUk9PVE1FKSB7CisgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkhlbHBlcjogUmVjaWV2ZWQgd3JvbmcgbWVzc2FnZVxuIik7CisgICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hyb290
KHNhZmVkaXIpID09IC0xKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNocm9vdGlu
ZyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoZGlyKCIvIikgPT0gLTEpIHsK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY2hhbmdlIHRoZSB3b3JraW5n
IGRpcmVjdG9yeSB0byAvLjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZW5kaW5nIGFja25v
d2xlZGdlbWVudCB0byB0aGUgV2ViUHJvY2VzcyB0aGF0IGl0J3MgaW5zaWRlIHRoZSBzYW5kYm94
IGFscmVhZHkuCisgICAgICAgIG1zZyA9IE1TR19DSFJPT1RFRDsKKyAgICAgICAgY250ID0gd3Jp
dGUoc3ZbMF0sICZtc2csIDEpOworICAgICAgICBpZiAoY250ID09IDEpCisgICAgICAgICAgICBl
eGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJIZWxwZXI6IGNvdWxkbid0IHdyaXRlIGFja25vd2xlZGdlbWVudDogJXMuXG4iLCBz
dHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAg
ICB9CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSGVscGVyOiBjb2RlcGF0aCBlcnJvcjogJXNc
biIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIC8vIEV4cG9ydCB0aGUgUElEIG9mIHRoZSBoZWxwZXIgYW5kIHRo
ZSBzb2NrZXRkZXNjcmlwdG9yIHRvIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgaW50IGNudCA9
IHNucHJpbnRmKHNhbmRib3hIZWxwZXJQSUQsIHNpemVvZihzYW5kYm94SGVscGVyUElEKSwgIiV1
IiwgcGlkKTsKKyAgICAgICAgaWYgKGNudCA8IDAgfHwgY250ID49IHNpemVvZihzYW5kYm94SGVs
cGVyUElEKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzbnByaW50ZiBvZiB0aGUg
UElEIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0ZW52KFNCWF9IRUxQRVJfUElELCBzYW5k
Ym94SGVscGVyUElELCAxKSA9PSAtMSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
b3VsZG4ndCBzZXQgdGhlIFNCWF9IRUxQRVJfUElEIGVudiB2YXJpYWJsZTogJXNcbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAg
ICBjbnQgPSBzbnByaW50Zihzb2NrZXREZXNjcmlwdG9yLCBzaXplb2Yoc29ja2V0RGVzY3JpcHRv
ciksICIldSIsIHN2WzFdKTsKKyAgICAgICAgaWYgKGNudCA8IDAgfHwgY250ID49IHNpemVvZihz
b2NrZXREZXNjcmlwdG9yKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzbnByaW50
ZiBvZiB0aGUgZmlsZWRlc2NyaXB0b3IgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXRlbnYo
U0JYX0QsIHNvY2tldERlc2NyaXB0b3IsIDEpID09IC0xKSB7CisgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIlNhdmluZyB0aGUgaGVscGVycyBmaWxlZGVzY3JpcHRvciBpbnRvIGFuIGVudiB2
YXJpYWJsZSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNsb3NlKHN2WzBdKSA9PSAtMSkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9zaW5nIG9mICVkIGZhaWxlZDogJXNcbiIs
IHN2WzBdLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLy8gU2V0IGNhcGFiaWxpdGllcyBp
biBhbGwgdGhyZWUgc2V0cy4KK3N0YXRpYyBib29sIHNldENhcGFiaWxpdGllcyhjYXBfdmFsdWVf
dCogY2FwYWJpbGl0eUxpc3QsIGludCBsZW5ndGgpCit7CisgICAgY2FwX3QgY2FwYWJpbGl0aWVz
OworCisgICAgLy8gQ2FwYWJpbGl0aWVzIHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRob3V0IGZs
YWdzLgorICAgIGNhcGFiaWxpdGllcyA9IGNhcF9pbml0KCk7CisgICAgaWYgKCFjYXBhYmlsaXRp
ZXMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJQcm9jZXNzIGNhcGFiaWxpdGllcyBpbml0
IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoY2FwX2NsZWFyKGNhcGFiaWxpdGllcykpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDbGVhcmluZyBwcm9jZXNzIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzXG4i
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKGNhcGFiaWxpdHlMaXN0ICYmIGxlbmd0aCkgeworICAgICAgICBpZiAoY2FwX3NldF9mbGFn
KGNhcGFiaWxpdGllcywgQ0FQX0VGRkVDVElWRSwgbGVuZ3RoLCBjYXBhYmlsaXR5TGlzdCwgQ0FQ
X1NFVCkKKyAgICAgICAgICAgIHx8IGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9JTkhF
UklUQUJMRSwgbGVuZ3RoLCBjYXBhYmlsaXR5TGlzdCwgQ0FQX1NFVCkKKyAgICAgICAgICAgIHx8
IGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9QRVJNSVRURUQsIGxlbmd0aCwgY2FwYWJp
bGl0eUxpc3QsIENBUF9TRVQpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5v
dCBzZXQgcHJvY2VzcyBjYXBhYmlsaXR5IGZsYWdzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgICAgIGNhcF9mcmVlKGNhcGFiaWxpdGllcyk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2FwX3NldF9wcm9jKGNhcGFiaWxp
dGllcykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgc2V0IHByb2Nlc3MgY2Fw
YWJpbGl0aWVzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgY2FwX2ZyZWUoY2Fw
YWJpbGl0aWVzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjYXBfZnJlZShj
YXBhYmlsaXRpZXMpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHNldER1bXBh
YmxlKHZvaWQpCit7CisgICAgaWYgKHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkg
PT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZXR0aW5nIGR1bXBsYWJsZSBpcyBm
YWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAg
fQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRyb3BQcml2aWxlZ2VzKHVpZF90IHVp
ZCwgZ2lkX3QgZ2lkKQoreworICAgIC8vIFdlIGJlY29tZSBleHBsaWNpdGVseSBub24gZHVtcGFi
bGUuIE5vdGUgdGhhdCBub3JtYWxseSBzZXR1aWQoKSB0YWtlcyBjYXJlCisgICAgLy8gb2YgdGhp
cyB3aGVuIHdlIHN3aXRjaCBldWlkLCBidXQgd2Ugd2FudCB0byBzdXBwb3J0IGNhcGFiaWxpdHkg
RlMuCisgICAgaWYgKHNldER1bXBhYmxlKCkKKyAgICAgICAgfHwgc2V0cmVzZ2lkKGdpZCwgZ2lk
LCBnaWQpCisgICAgICAgIHx8IHNldHJlc3VpZCh1aWQsIHVpZCwgdWlkKSkKKyAgICAgICAgcmV0
dXJuIC0xOworCisgICAgLy8gRHJvcCBhbGwgY2FwYWJpbGl0aWVzLiBBZ2Fpbiwgc2V0dWlkKCkg
bm9ybWFsbHkgdGFrZXMgY2FyZSBvZiB0aGlzIGlmIHdlIGhhZCBldWlkIDAuCisgICAgcmV0dXJu
IHNldENhcGFiaWxpdGllcygwLCAwKTsKK30KKworc3RhdGljIGJvb2wgZmlsZUV4aXN0cyhjb25z
dCBjaGFyKiBwYXRoKQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIGlmIChzdGF0
KHBhdGgsICZmaWxlU3RhdCkgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZURpcmVj
dG9yeShjaGFyKiBwYXRoVG9DcmVhdGUsIGNvbnN0IGNoYXIqIG5leHREaXJlY3RvcnlUb0NyZWF0
ZSkKK3sKKyAgICBjaGFyIHBhdGhUb0NyZWF0ZUluU2FuZGJveFtQQVRIU0laRV07CisgICAgc3Ry
bmNhdChwYXRoVG9DcmVhdGUsIG5leHREaXJlY3RvcnlUb0NyZWF0ZSwgc3RybGVuKG5leHREaXJl
Y3RvcnlUb0NyZWF0ZSkpOworICAgIHN0cmluZ0NvbmNhdChwYXRoVG9DcmVhdGVJblNhbmRib3gs
IFNBRkVESVIsIHBhdGhUb0NyZWF0ZSwgUEFUSFNJWkUpOworCisgICAgaWYgKG1rZGlyKHBhdGhU
b0NyZWF0ZUluU2FuZGJveCwgMDc3NykgPT0gLTEgJiYgZXJybm8gIT0gRUVYSVNUKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpb24gb2YgJXMgZmFpbGVkOiAlc1xuIiwgcGF0aFRv
Q3JlYXRlSW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAgc3RhdChwYXRoVG9DcmVh
dGUsICZmaWxlSW5mbyk7CisgICAgaWYgKDo6Y2hvd24ocGF0aFRvQ3JlYXRlSW5TYW5kYm94LCBm
aWxlSW5mby5zdF91aWQsIGZpbGVJbmZvLnN0X2dpZCkgPT0gLTEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoOjpjaG1vZChwYXRoVG9DcmVhdGVJblNhbmRib3gsIGZpbGVJbmZvLnN0
X21vZGUpID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBib29sIGNyZWF0ZURpcmVjdG9yeVBhdGgoY2hhciogcGF0aCkKK3sKKyAgICBj
aGFyIGZ1bGxQYXRoSW5TYW5kYm94W1BBVEhTSVpFXTsKKyAgICBzdHJpbmdDb25jYXQoZnVsbFBh
dGhJblNhbmRib3gsIFNBRkVESVIsIHBhdGgsIFBBVEhTSVpFKTsKKworICAgIGlmIChmaWxlRXhp
c3RzKGZ1bGxQYXRoSW5TYW5kYm94KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjaGFy
IGFscmVhZHlDcmVhdGVkUGF0aFtQQVRIU0laRV07CisgICAgYWxyZWFkeUNyZWF0ZWRQYXRoWzBd
ID0gJ1wwJzsKKyAgICAvLyBzdGFydFBvcyBpcyAocGF0aCArIDEpIGJlY2F1c2Ugd2Ugc2tpcCB0
aGUgZmlyc3QgJy8nLgorICAgIGNoYXIqIHN0YXJ0UG9zID0gcGF0aCArIDE7CisgICAgY2hhciog
ZW5kUG9zOworICAgIHdoaWxlICgoZW5kUG9zID0gc3RyY2hyKHN0YXJ0UG9zLCAnLycpKSkgewor
ICAgICAgICBjaGFyIG5leHREaXJlY3RvcnlUb0NyZWF0ZVsyNTZdOworICAgICAgICBzdHJpbmdD
b3B5KG5leHREaXJlY3RvcnlUb0NyZWF0ZSwgc3RhcnRQb3MgLSAxLCBlbmRQb3MgLSBzdGFydFBv
cyArIDEsIDI1Nik7CisgICAgICAgIGlmICghY3JlYXRlRGlyZWN0b3J5KGFscmVhZHlDcmVhdGVk
UGF0aCwgbmV4dERpcmVjdG9yeVRvQ3JlYXRlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKyAgICAvLyBDcmVhdGUgdGhl
IGxhc3QgZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnlwYXRoLgorICAgIGFscmVhZHlDcmVhdGVk
UGF0aFswXSA9ICdcMCc7CisgICAgcmV0dXJuIGNyZWF0ZURpcmVjdG9yeShhbHJlYWR5Q3JlYXRl
ZFBhdGgsIHBhdGgpOworfQorCitzdGF0aWMgYm9vbCBjcmVhdGVEZXZpY2VGaWxlcygpCit7Cisg
ICAgY2hhciBkZXZbXSA9ICIvZGV2LyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKGRl
dikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBjaGFyKiBkZXZpY2VzWzJdID0g
eyAiL2Rldi9yYW5kb20iLCAiL2Rldi91cmFuZG9tIiB9OworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMjsgKytpKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0YXR1czsKKyAgICAgICAgaWYgKHN0
YXQoZGV2aWNlc1tpXSwgJnN0YXR1cykgPT0gLTEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRXJyb3IgYnkgb2J0YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGRldmljZSBmaWxlICgl
cyk6ICVzXG4iLCBkZXZpY2VzW2ldLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRldl90IGRldiA9IHN0YXR1cy5zdF9yZGV2
OworICAgICAgICAvLyBCb3RoIG5lZWRlZCBkZXZpY2UgZmlsZXMgKC9kZXYvcmFuZG9tIGFuZCAv
ZGV2L3VyYW5kb20pIGFyZSBjaGFyYWN0ZXIgbV9kZXZpY2VzIGFuZAorICAgICAgICAvLyB0aGVp
ciBwZXJtaXNzaW9ucyBzaG91bGQgYmU6IHJ3LXJ3LXJ3LS4KKyAgICAgICAgY2hhciBkZXZpY2Vb
UEFUSFNJWkVdOworICAgICAgICBzdHJpbmdDb25jYXQoZGV2aWNlLCBTQUZFRElSLCBkZXZpY2Vz
W2ldLCBQQVRIU0laRSk7CisgICAgICAgIG1rbm9kKGRldmljZSwgU19JRkNIUiB8IFNfSVJVU1Ig
fCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lST1RIIHwgU19JV09USCwgbWFrZWRl
dihtYWpvcihkZXYpLCBtaW5vcihkZXYpKSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgYm9vbCBtb3VudEZpbGVTeXN0ZW1zKCkKK3sKKyAgICBjaGFyIHByb2NbXSA9ICIv
cHJvYy8iOworICAgIGlmIChjcmVhdGVEaXJlY3RvcnlQYXRoKHByb2MpID09IC0xKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBwcm9jUGF0aEluU2FuZGJveFtQQVRIU0laRV07Cisg
ICAgc3RyaW5nQ29uY2F0KHByb2NQYXRoSW5TYW5kYm94LCBTQUZFRElSLCBwcm9jLCBQQVRIU0la
RSk7CisgICAgaWYgKCFtb3VudChwcm9jLCBwcm9jUGF0aEluU2FuZGJveCwgInByb2MiLCAwLCAw
KSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG1vdW50aW5nICVz
LiAlc1xuIiwgcHJvYywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGNoYXIgc2hhcmVkTWVtb3J5W10gPSAiL3J1bi9zaG0vIjsKKyAgICBpZiAo
IWNyZWF0ZURpcmVjdG9yeVBhdGgoc2hhcmVkTWVtb3J5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNoYXIgc2hhcmVkTWVtb3J5UGF0aEluU2FuZGJveFtQQVRIU0laRV07CisgICAgc3Ry
aW5nQ29uY2F0KHNoYXJlZE1lbW9yeVBhdGhJblNhbmRib3gsIFNBRkVESVIsIHNoYXJlZE1lbW9y
eSwgUEFUSFNJWkUpOworICAgIGlmICghbW91bnQoc2hhcmVkTWVtb3J5LCBzaGFyZWRNZW1vcnlQ
YXRoSW5TYW5kYm94LCAidG1wZnMiLCAwLCAwKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yIGJ5IG1vdW50aW5nICVzLiAlc1xuIiwgc2hhcmVkTWVtb3J5LCBzdHJlcnJv
cihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgYm9vbCBsaW5rRmlsZShjaGFyKiBzb3VyY2VGaWxlLCBjaGFyKiB0YXJn
ZXRGaWxlKQoreworICAgIGJvb2wgaXNTeW1saW5rID0gdHJ1ZTsKKyAgICB3aGlsZSAoaXNTeW1s
aW5rKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgICAgICBpZiAobHN0YXQo
c291cmNlRmlsZSwgJmZpbGVJbmZvKSA9PSAtMSkgeworICAgICAgICAgICAgaWYgKGVycm5vID09
IEVOT0VOVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgY2hhciogZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UgPSBzdHJyY2hyKHNvdXJjZUZpbGUs
ICcvJyk7CisgICAgICAgIGlmICghZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UpIHsKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBzb3VyY2U6ICVzLlxuIiwgc291cmNlRmls
ZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2hhciBi
YXNlRGlyZWN0b3J5T2ZTb3VyY2VbUEFUSFNJWkVdOworICAgICAgICBzdHJpbmdDb3B5KGJhc2VE
aXJlY3RvcnlPZlNvdXJjZSwgc291cmNlRmlsZSwgZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2Ug
LSBzb3VyY2VGaWxlICsgMSwgUEFUSFNJWkUpOworICAgICAgICBpZiAoIWNyZWF0ZURpcmVjdG9y
eVBhdGgoYmFzZURpcmVjdG9yeU9mU291cmNlKSkgeworICAgICAgICAgICAgcHJpbnRmKCJDcmVh
dGluZyAlcyBmYWlsZWQ6ICVzLlxuIiwgYmFzZURpcmVjdG9yeU9mU291cmNlLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlm
IChsaW5rKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpID09IC0xKSB7CisgICAgICAgICAgICBpZiAo
ZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJMaW5r
aW5nICVzIGZhaWxlZDogJXMuXG4iLCBzb3VyY2VGaWxlLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEhhbmRsZSBzeW1saW5rcy4KKyAgICAgICAgaXNTeW1saW5rID0gKGZpbGVJbmZv
LnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZMTks7CisgICAgICAgIGlmICghaXNTeW1saW5rKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2hhciBzeW1saW5rVGFyZ2V0W1BBVEhTSVpF
XTsKKyAgICAgICAgaW50IGxlbmd0aE9mVGhlTGluayA9IHJlYWRsaW5rKHNvdXJjZUZpbGUsIHN5
bWxpbmtUYXJnZXQsIHNpemVvZihzeW1saW5rVGFyZ2V0KSAtIDEpOworICAgICAgICBpZiAobGVu
Z3RoT2ZUaGVMaW5rID4gMCkKKyAgICAgICAgICAgIHN5bWxpbmtUYXJnZXRbbGVuZ3RoT2ZUaGVM
aW5rXSA9ICdcMCc7CisgICAgICAgIGNoYXIgc3ltbGlua1RhcmdldEluUmVhbFdvcmxkW1BBVEhT
SVpFXTsKKyAgICAgICAgY2hhciBzeW1saW5rVGFyZ2V0SW5TYW5kYm94W1BBVEhTSVpFXTsKKyAg
ICAgICAgLy8gTWFraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUg
cGF0aHMuCisgICAgICAgIGlmIChzeW1saW5rVGFyZ2V0WzBdICE9ICcvJykgeworICAgICAgICAg
ICAgc3RyaW5nQ29uY2F0KHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCwgYmFzZURpcmVjdG9yeU9m
U291cmNlLCAiLyIsIHN5bWxpbmtUYXJnZXQsIFBBVEhTSVpFKTsKKyAgICAgICAgICAgIHN0cmlu
Z0NvbmNhdChzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBTQUZFRElSLCAiLyIsIHN5bWxpbmtUYXJn
ZXRJblJlYWxXb3JsZCwgUEFUSFNJWkUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
c3RyaW5nQ29weShzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGQsIHN5bWxpbmtUYXJnZXQsIFBBVEhT
SVpFKTsKKyAgICAgICAgICAgIHN0cmluZ0NvbmNhdChzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBT
QUZFRElSLCBzeW1saW5rVGFyZ2V0LCBQQVRIU0laRSk7CisgICAgICAgIH0KKyAgICAgICAgc3Ry
aW5nQ29weShzb3VyY2VGaWxlLCBzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGQsIFBBVEhTSVpFKTsK
KyAgICAgICAgc3RyaW5nQ29weSh0YXJnZXRGaWxlLCBzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBQ
QVRIU0laRSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBsaW5r
RGlyZWN0b3J5KGNoYXIqIHNvdXJjZURpcmVjdG9yeVBhdGgsIGNoYXIqIHRhcmdldERpcmVjdG9y
eVBhdGgpCit7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKHNvdXJjZURpcmVjdG9yeVBh
dGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgRElSKiBkaXJlY3RvcnkgPSBvcGVuZGly
KHNvdXJjZURpcmVjdG9yeVBhdGgpOworICAgIGlmIChkaXJlY3RvcnkpIHsKKyAgICAgICAgc3Ry
dWN0IGRpcmVudCAqZGlyZWN0b3J5SW5mbyA9IDA7CisgICAgICAgIHdoaWxlICgoZGlyZWN0b3J5
SW5mbyA9IHJlYWRkaXIoZGlyZWN0b3J5KSkpIHsKKyAgICAgICAgICAgIGNoYXIqIG5leHRGaWxl
SW5EaXJlY3RvcnkgPSBkaXJlY3RvcnlJbmZvLT5kX25hbWU7CisgICAgICAgICAgICBpZiAoIXN0
cm5jbXAobmV4dEZpbGVJbkRpcmVjdG9yeSwgIi4iLCBzdHJsZW4obmV4dEZpbGVJbkRpcmVjdG9y
eSkpIHx8ICFzdHJuY21wKG5leHRGaWxlSW5EaXJlY3RvcnksICIuLiIsIDIpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2hhciBzb3VyY2VGaWxlW1BBVEhTSVpFXTsK
KyAgICAgICAgICAgIHN0cmluZ0NvbmNhdChzb3VyY2VGaWxlLCBzb3VyY2VEaXJlY3RvcnlQYXRo
LCAiLyIsIG5leHRGaWxlSW5EaXJlY3RvcnksIFBBVEhTSVpFKTsKKworICAgICAgICAgICAgY2hh
ciB0YXJnZXRGaWxlW1BBVEhTSVpFXTsKKyAgICAgICAgICAgIHN0cmluZ0NvbmNhdCh0YXJnZXRG
aWxlLCB0YXJnZXREaXJlY3RvcnlQYXRoLCAiLyIsIG5leHRGaWxlSW5EaXJlY3RvcnksIFBBVEhT
SVpFKTsKKworICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAgICBpZiAoKGRp
cmVjdG9yeUluZm8tPmRfdHlwZSA9PSBEVF9ESVIpKQorICAgICAgICAgICAgICAgIG9rID0gbGlu
a0RpcmVjdG9yeShzb3VyY2VGaWxlLCB0YXJnZXRGaWxlKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBvayA9IGxpbmtGaWxlKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpOworICAg
ICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBtb2RpZmljYXRpb24gdGltZSBv
ZiB0aGUgZGlyZWN0b3JpZXMgYmVjYXVzZQorICAgICAgICAvLyBpdCBjb3VsZCBoYXZlIHJvbGUg
ZS5nLiBpbiB0aGUgaGFzaGdlbmVyYXRpb24gb2YgY2FjaGUgZmlsZXMuCisgICAgICAgIHN0cnVj
dCBzdGF0IGZpbGVTdGF0OworICAgICAgICBzdGF0KHNvdXJjZURpcmVjdG9yeVBhdGgsICZmaWxl
U3RhdCk7CisgICAgICAgIHN0cnVjdCB1dGltYnVmIHRpbWVzID0geyBmaWxlU3RhdC5zdF9hdGlt
ZSwgZmlsZVN0YXQuc3RfbXRpbWUgfTsKKyAgICAgICAgOjp1dGltZSh0YXJnZXREaXJlY3RvcnlQ
YXRoLCAmdGltZXMpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
ZmlsdGVyQW5kTGlua0xpYnJhcnlEZXBlbmRlbmNpZXNGcm9tTGRjb25maWdPdXRwdXQoY2hhciog
YnVmZmVyLCBpbnQgYnVmZmVyTGVuZ3RoKQoreworICAgIC8vIFRoZSBsaXN0IG9mIGVtcGlyaWNh
bGx5IGdhdGhlcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLgorICAgIGNvbnN0IGNoYXIqIHJ1bnRp
bWVEZXBlbmRlbmNpZXNbXSA9IHsKKyAgICAgICAgImxpYm5zc19kbnMuc28iLAorICAgICAgICAi
bGlicmVzb2x2LnNvIiwKKyAgICAgICAgImxpYnNzbC5zbyIsCisgICAgICAgICJsaWJjcnlwdG8u
c28iLAorICAgICAgICAwCisgICAgfTsKKworICAgIGNoYXIgbGRjb25maWdFbnRyeVtQQVRIU0la
RV07CisgICAgc3RyaW5nQ29weShsZGNvbmZpZ0VudHJ5LCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwg
UEFUSFNJWkUpOworICAgIGNvbnN0IGNoYXIqKiBjdXJyZW50UnVudGltZURlcGVuZGVuY3kgPSBy
dW50aW1lRGVwZW5kZW5jaWVzOworICAgIHdoaWxlICgqY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5
KSB7CisgICAgICAgIGNoYXIgcHJlZml4U3RyaW5nW1BBVEhTSVpFXTsKKyAgICAgICAgLy8gVGFr
aW5nIG91dCB0aGUgZmlyc3Qgc3RybGVuKCpjdXJyZW50UnVudGltZURlcGVuZGVuY3kpIGNoYXJh
Y3RlciBmcm9tIHRoZSBsZGNvbmZpZyBsaW5lCisgICAgICAgIC8vIHRvIGJlIGFibGUgdG8gY29t
cGFyZSB3aGV0aGVyIGl0IGNvbnRhaW5zIHRoYXQgb3Igbm90LiBTaW5jZSBldmVyeSBlbnRyeSBp
biBsZGNvbmZpZyBzdGFydAorICAgICAgICAvLyB3aXRoIGEgW1RBQl0sIHdlIGFsc28gc3RhcnQg
bWVtY3B5IGZyb20gdGhlIGZpcnN0IGJ5dGUuCisgICAgICAgIHN0cmluZ0NvcHkocHJlZml4U3Ry
aW5nLCBsZGNvbmZpZ0VudHJ5ICsgMSwgc3RybGVuKCpjdXJyZW50UnVudGltZURlcGVuZGVuY3kp
LCBQQVRIU0laRSk7CisgICAgICAgIGlmICghc3RybmNtcChwcmVmaXhTdHJpbmcsICpjdXJyZW50
UnVudGltZURlcGVuZGVuY3ksIHN0cmxlbigqY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5KSkpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBvdXRwdXQgb2YgbGRjb25maWcgaXMgdGhlIGZvbGxvd2luZzoK
KyAgICAgICAgICAgIC8vIFtUQUJdbmFtZV9vZl90aGVfbGlicmFyeSAoZGVzY3JpcHRpb24pID0+
IGFic29sdXRlX3BhdGgKKyAgICAgICAgICAgIC8vIGFic29sdWx0ZV9wYXRoIHN0YXJ0cyB3aXRo
ICcvJy4KKyAgICAgICAgICAgIGNoYXIgcGF0aE9mVGhlTGlicmFyeVtQQVRIU0laRV07CisgICAg
ICAgICAgICBjaGFyKiBzdGFydFBvcyA9IHN0cmNocihsZGNvbmZpZ0VudHJ5LCAnLycpOworICAg
ICAgICAgICAgaW50IGxlbmd0aCA9IGxkY29uZmlnRW50cnkgKyBzdHJsZW4obGRjb25maWdFbnRy
eSkgLSBzdGFydFBvczsKKyAgICAgICAgICAgIHN0cmluZ0NvcHkocGF0aE9mVGhlTGlicmFyeSwg
c3RhcnRQb3MsIGxlbmd0aCwgUEFUSFNJWkUpOworICAgICAgICAgICAgaWYgKHN0cmxlbihwYXRo
T2ZUaGVMaWJyYXJ5KSA+IDApIHsKKyAgICAgICAgICAgICAgICBjaGFyIHBhdGhJblNhbmRib3hb
UEFUSFNJWkVdOworICAgICAgICAgICAgICAgIHN0cmluZ0NvbmNhdChwYXRoSW5TYW5kYm94LCBT
QUZFRElSLCBwYXRoT2ZUaGVMaWJyYXJ5LCBQQVRIU0laRSk7CisgICAgICAgICAgICAgICAgaWYg
KCFsaW5rRmlsZShwYXRoT2ZUaGVMaWJyYXJ5LCBwYXRoSW5TYW5kYm94KSkKKyAgICAgICAgICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJMaW5raW5nICclcycgJyVzJyBmYWlsZWQ6ICVzXG4i
LCBwYXRoT2ZUaGVMaWJyYXJ5LCBwYXRoSW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICsrY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY29sbGVjdFJ1blRp
bWVEZXBlbmRlbmNpZXMoKQoreworICAgIGludCBzdGF0dXM7CisgICAgaW50IHBpcGVmZFsyXTsK
KworICAgIGlmIChwaXBlKHBpcGVmZCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
cjogQ2Fubm90IG9wZW4gcGlwZTogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgRklMRSogZmlsZTsKKyAgICBzd2l0Y2ggKGZvcmso
KSkgeworICAgIGNhc2UgLTE6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IENhbm5v
dCBmb3JrIHRoZSBwcm9jZXNzOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNs
b3NlKHBpcGVmZFswXSk7CisgICAgICAgIGNsb3NlKHBpcGVmZFsxXSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjYXNlIDA6CisgICAgICAgIGNsb3NlKHBpcGVmZFswXSk7CisKKyAgICAg
ICAgZHVwMihwaXBlZmRbMV0sIDEpOyAvLyBTZW5kIHN0ZG91dCB0byB0aGUgcGlwZS4KKyAgICAg
ICAgZHVwMihwaXBlZmRbMV0sIDIpOyAvLyBTZW5kIHN0ZGVyciB0byB0aGUgcGlwZS4KKworICAg
ICAgICBleGVjbCgiL3NiaW4vbGRjb25maWciLCAiL3NiaW4vbGRjb25maWciLCAoY2hhciopKCIt
cCIpLCAoY2hhciopMCk7CisgICAgICAgIGNsb3NlKHBpcGVmZFsxXSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIENsb3NlIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBp
cGUgaW4gdGhlIHBhcmVudC4KKyAgICAgICAgY2xvc2UocGlwZWZkWzFdKTsKKyAgICAgICAgZmls
ZSA9IGZkb3BlbihwaXBlZmRbMF0sICJyIik7CisKKyAgICAgICAgY2hhciBidWZmZXJbMjU2XTsK
KyAgICAgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZpbGUpKSB7Cisg
ICAgICAgICAgICBpbnQgbGVuZ3RoID0gc3RybGVuKGJ1ZmZlcikgLSAxOworICAgICAgICAgICAg
aWYgKGJ1ZmZlcltsZW5ndGhdID09ICdcbicpCisgICAgICAgICAgICAgICAgYnVmZmVyW2xlbmd0
aF0gPSAwOworICAgICAgICAgICAgaWYgKCFmaWx0ZXJBbmRMaW5rTGlicmFyeURlcGVuZGVuY2ll
c0Zyb21MZGNvbmZpZ091dHB1dChidWZmZXIsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBj
bG9zZShwaXBlZmRbMF0pOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAod2FpdCgmc3RhdHVzKSA8PSAwKQorICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogd2FpdCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJv
cihlcnJubykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBib29sIGluaXRTYW5kYm94KCkKK3sKKyAgICBpZiAobWtkaXIoU0FGRURJUiwgMDc3
NykgPT0gLTEgJiYgZXJybm8gIT0gRUVYSVNUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIWNyZWF0ZURldmljZUZpbGVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghbW91bnRGaWxlU3lzdGVtcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
b25zdCBjaGFyKiBob21lID0gZ2V0ZW52KCJIT01FIik7CisgICAgY2hhciBsb2NhbERpcltQQVRI
U0laRV07CisgICAgc3RyaW5nQ29uY2F0KGxvY2FsRGlyLCBob21lLCAiLy5sb2NhbC9zaGFyZS9O
b2tpYS8iLCBQQVRIU0laRSk7CisgICAgY2hhciBjYWNoZURpcltQQVRIU0laRV07CisgICAgc3Ry
aW5nQ29uY2F0KGNhY2hlRGlyLCBob21lLCAiLy5jYWNoZS9Ob2tpYS8iLCBQQVRIU0laRSk7Cisg
ICAgY2hhciBmb250RGlyW1BBVEhTSVpFXTsKKyAgICBzdHJpbmdDb25jYXQoZm9udERpciwgaG9t
ZSwgIi8uZm9udGNvbmZpZy8iLCBQQVRIU0laRSk7CisgICAgY29uc3QgY2hhciogbGlua2VkRGly
ZWN0b3JpZXNbXSA9IHsKKyAgICAgICAgY2FjaGVEaXIsCisgICAgICAgIGZvbnREaXIsCisgICAg
ICAgIGxvY2FsRGlyLAorICAgICAgICAiL2V0Yy9mb250cy8iLAorICAgICAgICAiL3Zhci9jYWNo
ZS9mb250Y29uZmlnLyIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzLyIsCisgICAgICAgIDAK
KyAgICB9OworCisgICAgY29uc3QgY2hhcioqIGN1cnJlbnRMaW5rZWREaXJlY3RvcnkgPSBsaW5r
ZWREaXJlY3RvcmllczsKKyAgICB3aGlsZSAoKmN1cnJlbnRMaW5rZWREaXJlY3RvcnkpIHsKKyAg
ICAgICAgY2hhciBsaW5rZWREaXJlY3RvcnlJblNhbmRib3hbUEFUSFNJWkVdOworICAgICAgICBz
dHJpbmdDb25jYXQobGlua2VkRGlyZWN0b3J5SW5TYW5kYm94LCBTQUZFRElSLCAqY3VycmVudExp
bmtlZERpcmVjdG9yeSwgUEFUSFNJWkUpOworICAgICAgICBpZiAobGlua0RpcmVjdG9yeShjb25z
dF9jYXN0PGNoYXIqPigqY3VycmVudExpbmtlZERpcmVjdG9yeSksIGxpbmtlZERpcmVjdG9yeUlu
U2FuZGJveCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsrY3Vy
cmVudExpbmtlZERpcmVjdG9yeTsKKyAgICB9CisgICAgcmV0dXJuIGNvbGxlY3RSdW5UaW1lRGVw
ZW5kZW5jaWVzKCkgIT0gLTE7Cit9CisKK3N0YXRpYyBib29sIHJlc3RyaWN0Q2FwYWJpbGl0aWVz
KCkKK3sKKyAgICBjYXBfdmFsdWVfdCBjYXBhYmlsdHlMaXN0WzRdOworICAgIC8vIENhcGFiaWxp
dGllcyB3ZSBuZWVkLgorICAgIGNhcGFiaWx0eUxpc3RbMF0gPSBDQVBfU0VUVUlEOworICAgIGNh
cGFiaWx0eUxpc3RbMV0gPSBDQVBfU0VUR0lEOworICAgIGNhcGFiaWx0eUxpc3RbMl0gPSBDQVBf
U1lTX0FETUlOOworICAgIGNhcGFiaWx0eUxpc3RbM10gPSBDQVBfU1lTX0NIUk9PVDsKKworICAg
IC8vIFJlZHVjZSBjYXBhYmlsaXRpZXMgdG8gd2hhdCB3ZSBuZWVkLiBUaGlzIGlzIGdlbmVyYWxs
eSB1c2VsZXNzIGJlY2F1c2U6CisgICAgLy8gMS4gd2Ugd2lsbCBzdGlsbCBoYXZlIHJvb3QgZXVp
ZCAodW5sZXNzIGNhcGFiaWxpdHkgRlMgaXMgdXNlZCkKKyAgICAvLyAyLiB0aGUgY2FwYWJpbGl0
aWVzIHdlIGtlZXAgYXJlIHJvb3QgZXF1aXZhbGVudAorICAgIC8vIEl0J3MgdXNlZnVsIHRvIGRy
b3AgQ0FQX1NZU19SRVNTT1VSQ0Ugc28gdGhhdCBSTElNSVRfTk9GSUxFIGJlY29tZXMKKyAgICAv
LyBlZmZlY3RpdmUgdGhvdWdoCisgICAgaWYgKCFzZXRDYXBhYmlsaXRpZXMoY2FwYWJpbHR5TGlz
dCwgc2l6ZW9mKGNhcGFiaWx0eUxpc3QpIC8gc2l6ZW9mKGNhcGFiaWx0eUxpc3RbMF0pKSkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhZGp1c3QgcHJvY2VzcyBjYXBhYmls
aXRpZXMsIGFib3J0aW5nXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8gR2V0IGEgbmV3IFBJRCBuYW1lc3BhY2UuCitzdGF0aWMgYm9v
bCBtb3ZlVG9OZXdQSUROYW1lc3BhY2UoKQoreworICAgIC8vIENMT05FX05FV1BJRCBhbmQgQ0xP
TkVfRlMgc2hvdWxkIGJlIGluIHRoYXQgb3JkZXIhCisgICAgLy8gWW91IGNhbid0IHNoYXJlIEZT
IGFjY3Jvc3MgbmFtZXNwYWNlcy4KKyAgICBwaWRfdCBwaWQsIHdhaXRlZDsKKyAgICBpbnQgc3Rh
dHVzOworICAgIHBpZCA9IHN5c2NhbGwoU1lTX2Nsb25lLCBDTE9ORV9ORVdQSUQgfCBTSUdDSExE
LCAwLCAwLCAwKTsKKworICAgIHN3aXRjaCAocGlkKSB7CisgICAgY2FzZSAtMToKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDbG9uaW5nIGlzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBDaGlsZDogd2UgYXJlIHBpZCBudW1i
ZXIgMSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4KKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBn
ZXRwaWQoKSA9PSAxOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFdlIGFyZSB3YWl0aW5nIGZv
ciBvdXIgY2hpbGQuCisgICAgICAgIC8vIElmIHRoaXMgd2FpdCBpcyBzdWNjZXNzZnVsIGl0IG1l
YW5zIHRoYXQgb3VyIGNoaWxkIGlzIHRlcm1pbmF0ZWQuCisgICAgICAgIHdhaXRlZCA9IHdhaXRw
aWQocGlkLCAmc3RhdHVzLCAwKTsKKyAgICAgICAgaWYgKHdhaXRlZCAhPSBwaWQpIHsKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiV3JvbmcgUElEOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoV0lGRVhJVEVEKHN0YXR1cykpCisgICAgICAgICAgICBleGl0KFdFWElUU1RBVFVTKHN0YXR1
cykpOworICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25z
dCBlbnZwW10pCit7CisgICAgY2hhciBzYWZlZGlyW1BBVEhTSVpFXTsKKyAgICBzdHJpbmdDb25j
YXQoc2FmZWRpciwgZ2V0ZW52KCJIT01FIiksICIvLndrMi1zYW5kYm94IiwgUEFUSFNJWkUpOwor
ICAgIFNBRkVESVIgPSBzYWZlZGlyOworCisgICAgdWlkX3Qgb2xkdWlkID0gZ2V0dWlkKCk7Cisg
ICAgZ2lkX3Qgb2xkZ2lkID0gZ2V0Z2lkKCk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2tzLgorICAg
IGlmIChhcmdjICE9IDMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTdGFydGluZyBTYW5k
Ym94UHJvY2VzcyByZXF1aXJlcyAzIHBhcmFtZXRlcnMhIEV4aXRpbmcuXG4iKTsKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChnZXRldWlkKCkpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJUaGUgc2FuZGJveCBpcyBub3Qgc2V0ZXVpZCByb290LCBhYm9ydGluZ1xuIik7
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIW9sZHVpZCkgeworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBzYW5kYm94IGlzIG5vdCBkZXNpZ25lZCB0byBiZSBydW4g
Ynkgcm9vdCwgYWJvcnRpbmdcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg
Ly8gU2V0dXAgdGhlIHNhbmRib3ggZW52aXJvbm1lbnQuCisgICAgaWYgKCFpbml0U2FuZGJveCgp
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGhlIGluaXRpYWxpemF0aW9uIG9mIHNhbmRi
b3ggZW52aXJvbm1lbnQgZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisK
KyAgICBpZiAoIXJlc3RyaWN0Q2FwYWJpbGl0aWVzKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJTZXR0aW5nIHRoZSBjYXBhYmlsaXRpZXMgZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVy
biAtMTsKKyAgICB9CisKKyAgICBpZiAoIW1vdmVUb05ld1BJRE5hbWVzcGFjZSgpKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgbW92ZSB0byBuZXcgUElEIG5hbWVzcGFjZS5c
biIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLy8gTGF1bmNoIGNocm9vdCBo
ZWxwZXIuCisgICAgaWYgKGxhdW5jaENocm9vdEhlbHBlcigpID09IC0xKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ2hyb290SGVscGVyIGNvdWxkbid0IHN0YXJ0ZWQuXG4iKTsKKyAgICAg
ICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vIENoYW5nZSB1aWQvaWQuCisgICAgaWYgKGRy
b3BQcml2aWxlZ2VzKG9sZHVpZCwgb2xkZ2lkKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkbid0IGRyb3AgdGhlIHByaXZpbGVnZXMuXG4iKTsKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH0KKworICAgIGlmICghZ2V0ZXVpZCgpIHx8ICFnZXRlZ2lkKCkgfHwgIXNldHVp
ZCgwKSB8fCAhc2V0Z2lkKDApKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTXkgZXVpZCBv
ciBlZ2lkIGlzIDAhIFNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZ1xuIik7CisgICAgICAgIHJl
dHVybiAtMTsKKyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgV2ViUHJvY2Vzcy4KKyAgICBleGVj
bChhcmd2WzFdLCBhcmd2WzFdLCBhcmd2WzJdLCAoY2hhciopMCk7CisgICAgcmV0dXJuIDA7Cit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MvU2Fu
ZGJveEVudmlyb25tZW50TGludXguaCBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzL1Nh
bmRib3hFbnZpcm9ubWVudExpbnV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNWRlYzc5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9j
ZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAy
MDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgU2FuZGJveEVudmlyb25tZW50TGludXhfaAorI2RlZmluZSBTYW5k
Ym94RW52aXJvbm1lbnRMaW51eF9oCisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQor
LyoKKyNpZm5kZWYgQ0xPTkVfTkVXUElECisjZGVmaW5lIENMT05FX05FV1BJRCAgMHgyMDAwMDAw
MAorI2VuZGlmCisqLworI2RlZmluZSBTQlhfRCAiU0JYX0QiCisjZGVmaW5lIFNCWF9IRUxQRVJf
UElEICJTQlhfSEVMUEVSX1BJRCIKKworI2RlZmluZSBNU0dfQ0hST09UTUUgJ0MnCisjZGVmaW5l
IE1TR19DSFJPT1RFRCAnTycKKworI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CisKK2NsYXNz
IFNhbmRib3hFbnZpcm9ubWVudExpbnV4IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgaW50IGxhdW5j
aENocm9vdEhlbHBlcih2b2lkKTsKKyAgICBzdGF0aWMgaW50IGRyb3BQcml2aWxlZ2VzKHVpZF90
LCBnaWRfdCk7CisgICAgc3RhdGljIGludCBtb3ZlVG9OZXdQSUROYW1lc3BhY2Uodm9pZCk7Cisg
ICAgc3RhdGljIGludCBzZXREdW1wYWJsZSh2b2lkKTsKKyAgICBzdGF0aWMgaW50IHNldENhcGFi
aWxpdGllcyhjYXBfdmFsdWVfdCBjYXBhYmxpdHlMaXN0W10sIGludCBuY2FwKTsKK307CisKKyNl
bmRpZiAvLyBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5k
ZXggNGYzOTMwNy4uMzRlYTIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0zOCw2ICszOCw3IEBAIEhFQURF
UlMgKz0gXAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggXAog
ICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1dl
YlByb2Nlc3NDb25uZWN0aW9uLmggXAorICAgIFNhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9u
bWVudExpbnV4LmggXAogICAgIFNoYXJlZC9BUEkvYy9XS0FycmF5LmggXAogICAgIFNoYXJlZC9B
UEkvYy9XS0Jhc2UuaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLQ2VydGlmaWNhdGVJbmZvLmggXApA
QCAtMzk3LDYgKzM5OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsdWdpblByb2Nlc3MvcXQvUGx1
Z2luQ29udHJvbGxlclByb3h5UXQuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL3F0L1BsdWdpblBy
b2Nlc3NNYWluUXQuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL3F0L1BsdWdpblByb2Nlc3NRdC5j
cHAgXAorICAgIFNhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcCBcCiAg
ICAgU2hhcmVkL0FQSS9jL1dLQXJyYXkuY3BwIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDZXJ0aWZp
Y2F0ZUluZm8uY3BwIFwKICAgICBTaGFyZWQvQVBJL2MvV0tDb25uZWN0aW9uUmVmLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xh
dW5jaGVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nl
c3NMYXVuY2hlclF0LmNwcAppbmRleCA2MGNkZTVmLi5hZDMyNjE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJR
dC5jcHAKQEAgLTYyLDYgKzYyLDEwIEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRp
b24+CisjZW5kaWYKKwogI2lmIE9TKERBUldJTikKICNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5o
PgogI2luY2x1ZGUgPHNlcnZlcnMvYm9vdHN0cmFwLmg+CkBAIC0xNjUsMzcgKzE2OSw0NyBAQCB2
b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCiAgICAgY29tbWFuZExpbmUgPSBj
b21tYW5kTGluZS5hcmcoc29ja2V0c1swXSk7CiAjZW5kaWYKIAotICAgIFFQcm9jZXNzKiB3ZWJQ
cm9jZXNzID0gbmV3IFF0V2ViUHJvY2VzcygpOwotICAgIHdlYlByb2Nlc3MtPnNldFByb2Nlc3ND
aGFubmVsTW9kZShRUHJvY2Vzczo6Rm9yd2FyZGVkQ2hhbm5lbHMpOwotICAgIHdlYlByb2Nlc3Mt
PnN0YXJ0KGNvbW1hbmRMaW5lKTsKKyAgICBRUHJvY2Vzcyogd2ViUHJvY2Vzc09yU1VJREhlbHBl
cjsKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIFFTdHJpbmcgc2FuZGJveENv
bW1hbmRMaW5lID0gUUxhdGluMVN0cmluZygiJTEgJTIgJTMiKTsKKyAgICBzYW5kYm94Q29tbWFu
ZExpbmUgPSBzYW5kYm94Q29tbWFuZExpbmUuYXJnKFFDb3JlQXBwbGljYXRpb246OmFwcGxpY2F0
aW9uRGlyUGF0aCgpICsgUUxhdGluMVN0cmluZygiL1NVSURTYW5kYm94SGVscGVyIikpOworICAg
IHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoZXhlY3V0YWJsZVBh
dGhPZldlYlByb2Nlc3MoKSk7CisgICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1h
bmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKKworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXIgPSBu
ZXcgUVByb2Nlc3MoKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zZXRQcm9jZXNzQ2hh
bm5lbE1vZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxzKTsKKyAgICB3ZWJQcm9jZXNzT3JT
VUlESGVscGVyLT5zdGFydChzYW5kYm94Q29tbWFuZExpbmUpOworI2Vsc2UKKyAgICB3ZWJQcm9j
ZXNzT3JTVUlESGVscGVyID0gbmV3IFF0V2ViUHJvY2VzcygpOworICAgIHdlYlByb2Nlc3NPclNV
SURIZWxwZXItPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6TWVyZ2VkQ2hhbm5lbHMp
OworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnN0YXJ0KGNvbW1hbmRMaW5lKTsKKyNlbmRp
ZgogCiAjaWYgT1MoVU5JWCkgJiYgIU9TKERBUldJTikKICAgICAvLyBEb24ndCBleHBvc2UgdGhl
IHdlYiBzb2NrZXQgdG8gcG9zc2libGUgZnV0dXJlIHdlYiBwcm9jZXNzZXMKICAgICB3aGlsZSAo
ZmNudGwoc29ja2V0c1swXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQykgPT0gLTEpIHsKICAgICAgICAg
aWYgKGVycm5vICE9IEVJTlRSKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAgICAgICAgICAgZGVsZXRlIHdlYlBy
b2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CiAjZW5kaWYKIAotICAgIGlmICghd2ViUHJvY2Vzcy0+d2FpdEZvclN0YXJ0ZWQoKSkgeworICAg
IGlmICghd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZvclN0YXJ0ZWQoKSkgewogICAgICAg
ICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8PCBjb21tYW5kTGluZTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjaWYgT1MoREFSV0lOKQogICAgICAgICBtYWNoX3BvcnRf
ZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBjb25uZWN0b3IpOwogICAgICAgICBtYWNoX3Bv
cnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgY29ubmVjdG9yLCBNQUNIX1BPUlRfUklHSFRf
UkVDRUlWRSwgLTEpOwogI2VuZGlmCi0gICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAgICAg
ICBkZWxldGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LQogI2lmIE9TKFVOSVgpCi0gICAgc2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCB3ZWJQcm9jZXNz
LT5waWQoKSwgMTApOworICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgd2ViUHJvY2Vzc09y
U1VJREhlbHBlci0+cGlkKCksIDEwKTsKICNlbmRpZgotCi0gICAgUnVuTG9vcDo6bWFpbigpLT5k
aXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5n
UHJvY2VzcywgdGhpcywgd2ViUHJvY2VzcywgY29ubmVjdG9yKSk7CisgICAgUnVuTG9vcDo6bWFp
bigpLT5kaXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6ZGlkRmluaXNoTGF1
bmNoaW5nUHJvY2VzcywgdGhpcywgd2ViUHJvY2Vzc09yU1VJREhlbHBlciwgY29ubmVjdG9yKSk7
CiB9CiAKIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cmkKaW5kZXggNTM2Yjc3OS4uNzQ1Yjg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTYxLDcgKzYxLDgg
QEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2Ug
XAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cyBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvcXQgXAotICAgICQkU09VUkNFX0RJUi9Q
bHVnaW5Qcm9jZXNzCisgICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MgXAorICAgICQkU09V
UkNFX0RJUi9TYW5kYm94UHJvY2VzcyBcCiAKICMgVGhlIFdlYktpdDIgUXQgQVBJcyBkZXBlbmQg
b24gcXdlYmtpdGdsb2JhbC5oLCB3aGljaCBsaXZlcyBpbiBXZWJLaXQKIElOQ0xVREVQQVRIICs9
ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktpdC9xdC9BcGkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCmluZGV4IDE4ZjMwMzk0
Li42N2ZkNWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlBy
b2Nlc3NNYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJv
Y2Vzc01haW5RdC5jcHAKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4K
ICNpbmNsdWRlIDxRVXJsPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUg
PGVycm5vLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNjIsNiArNjQsMTQgQEAgZXh0ZXJuICJDIiBr
ZXJuX3JldHVybl90IGJvb3RzdHJhcF9sb29rX3VwMihtYWNoX3BvcnRfdCwgY29uc3QgbmFtZV90
LCBtYWNoX3BvcnQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKyNpZiBFTkFCTEUoU1VJ
RF9TQU5EQk9YX0xJTlVYKQorI2RlZmluZSBTQlhfRCAiU0JYX0QiCisjZGVmaW5lIFNCWF9IRUxQ
RVJfUElEICJTQlhfSEVMUEVSX1BJRCIKKworI2RlZmluZSBNU0dfQ0hST09UTUUgJ0MnCisjZGVm
aW5lIE1TR19DSFJPT1RFRCAnTycKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKICNpZm5k
ZWYgTkRFQlVHCiAjaWYgT1MoV0lORE9XUykKQEAgLTE0MiwxOCArMTUyLDgwIEBAIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVQcm94eSgpCiAgICAgUU5ldHdvcmtQcm94eUZhY3Rvcnk6OnNldFVzZVN5
c3RlbUNvbmZpZ3VyYXRpb24odHJ1ZSk7CiB9CiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJ
TlVYKQorcGlkX3QgY2hyb290TWUoKQoreworICAgIGxvbmcgaW50IGZkID0gLTE7CisgICAgY2hh
ciogc2FuZGJveFNvY2tldERlc2NyaXB0b3I7CisgICAgY2hhciogaGVscGVyUGlkOworICAgIGNo
YXIgc2FuZGJveE1lTXNnID0gTVNHX0NIUk9PVE1FOworICAgIHNzaXplX3QgY250OworICAgIHBp
ZF90IGhlbHBlciA9IC0xOworCisgICAgLy8gR2V0IHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhl
IHNvY2tldHBhaXIuCisgICAgc2FuZGJveFNvY2tldERlc2NyaXB0b3IgPSBnZXRlbnYoU0JYX0Qp
OworICAgIGlmICghc2FuZGJveFNvY2tldERlc2NyaXB0b3IpCisgICAgICAgIHJldHVybiAtMTsK
KworICAgIGVycm5vID0gMDsKKyAgICBmZCA9IHN0cnRvbChzYW5kYm94U29ja2V0RGVzY3JpcHRv
ciwgKGNoYXIgKiopIDAsIDEwKTsKKyAgICBpZiAoZXJybm8gfHwgKGZkID09IC0xKSkKKyAgICAg
ICAgcmV0dXJuIC0xOworCisgICAgLy8gR2V0IHRoZSBQSUQgb2YgdGhlIHNldHVpZCBoZWxwZXIu
CisgICAgaGVscGVyUGlkID0gZ2V0ZW52KFNCWF9IRUxQRVJfUElEKTsKKworICAgIC8vIElmIG5v
IFBJRCBpcyBhdmFpbGFibGUsIHRoZSBkZWZhdWx0IG9mIC0xIHdpbGwgZG8uCisgICAgaWYgKGhl
bHBlclBpZCkgeworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIGhlbHBlciA9IHN0cnRvbCho
ZWxwZXJQaWQsIChjaGFyICoqKSAwLCAxMCk7CisgICAgICAgIGlmIChlcnJubyB8fCAoaGVscGVy
ID09IC0xKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLyBTZW5kIHRo
ZSBjaHJvb3RtZSBtZXNzYWdlIHRvIHRoZSBoZWxwZXIuCisgICAgY250ID0gd3JpdGUoZmQsICZz
YW5kYm94TWVNc2csIDEpOworICAgIGlmIChjbnQgIT0gMSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNocm9vdG1lIG1zZyBmYWlsZWQgdG8gd3JpdGU6ICVzLlxuIiwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vIFJlYWQgdGhlIGFja25v
d2xlZGdlbWVudCBtZXNzYWdlIGZyb20gdGhlIGhlbHBlci4KKyAgICBjbnQgPSByZWFkKGZkLCAm
c2FuZGJveE1lTXNnLCAxKTsKKyAgICBpZiAoKGNudCAhPSAxKSB8fCAoc2FuZGJveE1lTXNnICE9
IE1TR19DSFJPT1RFRCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciByZWFkaW5n
IGNvbmZpcm1hdGlvbiBtZXNzYWdlXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg
ICBjbG9zZShmZCk7CisKKyAgICAvLyBXYWl0IGZvciBoZWxwZXIgcHJvY2Vzcy4KKyAgICBpbnQg
d2FpdGVkUGlkPSB3YWl0cGlkKGhlbHBlciwgMCwgMCk7CisgICAgaWYgKHdhaXRlZFBpZCAhPSAt
MSAmJiAoKGhlbHBlciA9PSAtMSkgfHwgKHdhaXRlZFBpZCA9PSBoZWxwZXIpKSkKKyAgICAgICAg
cmV0dXJuIHdhaXRlZFBpZDsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHdhaXQgZm9y
IHRoZSBoZWxwZXIgcHJvY2VzczogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJu
IC0xOworfQorI2VuZGlmCisKIFFfREVDTF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoUUd1
aUFwcGxpY2F0aW9uKiBhcHApCiB7Ci0gICAgaW5pdGlhbGl6ZVByb3h5KCk7CisjaWYgRU5BQkxF
KFNVSURfU0FOREJPWF9MSU5VWCkKKyAgICBwaWRfdCBoZWxwZXI7CisgICAgaGVscGVyID0gY2hy
b290TWUoKTsKIAorICAgIGlmIChoZWxwZXIgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJBc2tpbmcgZm9yIGNocm9vdCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKyNlbmRpZgorICAgIGluaXRpYWxpemVQcm94eSgpOwogICAgIEpTQzo6aW5pdGlhbGl6
ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5M
b29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAgICAKKwogI2lmIFVTRShRVEtJVCkKICAg
ICBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZUZvcldLMigpOwogI2VuZGlmCi0KICAgICAvLyBD
cmVhdGUgdGhlIGNvbm5lY3Rpb24uCiAgICAgaWYgKGFwcC0+YXJndW1lbnRzKCkuc2l6ZSgpIDw9
IDEpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkVycm9yOiB3cm9uZyBudW1iZXIgb2YgYXJndW1l
bnRzLiI7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggY2I1M2Iy
NS4uNzRiZTA3MyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAt
MTE3LDYgKzExNyw3IEBAIG15ICgKICAgICAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAgICAgJHNx
bERhdGFiYXNlU3VwcG9ydCwKICAgICAkc3R5bGVTY29wZWRTdXBwb3J0LAorICAgICRzdWlkTGlu
dXhTYW5kYm94LAogICAgICRzdmdET01PYmpDQmluZGluZ3NTdXBwb3J0LAogICAgICRzdmdGb250
c1N1cHBvcnQsCiAgICAgJHN2Z1N1cHBvcnQsCkBAIC0zNjMsNiArMzY0LDkgQEAgbXkgQGZlYXR1
cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICJzdHlsZS1zY29wZWQiLCBkZXNjID0+ICJUb2dnbGUg
U3R5bGUgU2NvcGVkIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1RZTEVfU0NP
UEVEIiwgZGVmYXVsdCA9PiBpc0JsYWNrQmVycnkoKSwgdmFsdWUgPT4gXCRzdHlsZVNjb3BlZFN1
cHBvcnQgfSwKIAorICAgIHsgb3B0aW9uID0+ICJzdWlkLWxpbnV4LXNhbmRib3giLCBkZXNjID0+
ICJUb2dnbGUgc3VpZCBzYW5kYm94IGZvciBsaW51eCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9TVUlEX1NBTkRCT1hfTElOVVgiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkc3VpZExpbnV4
U2FuZGJveCB9LAorCiAgICAgeyBvcHRpb24gPT4gInN2ZyIsIGRlc2MgPT4gIlRvZ2dsZSBTVkcg
c3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVkciLCBkZWZhdWx0ID0+IDEsIHZh
bHVlID0+IFwkc3ZnU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNz
L2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVz
L2RlZmF1bHRfcG9zdC5wcmYKaW5kZXggODc1MzhlNS4uMTE0MjUzMyAxMDA2NDQKLS0tIGEvVG9v
bHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJmCisrKyBiL1Rvb2xzL3Ft
YWtlL21rc3BlY3MvZmVhdHVyZXMvZGVmYXVsdF9wb3N0LnByZgpAQCAtMjg3LDMgKzI4Nyw0IEBA
IGZvcih0YXJnZXQsICQkbGlzdCgkJHVuaXF1ZShERUZBVUxUX1RBUkdFVFMpKSkgewogREVTVERJ
UiA9ICQkcmVwbGFjZShERVNURElSLCBeJCR7Uk9PVF9CVUlMRF9ESVJ9LCAkJHtCVUlMRF9ST09U
X1JFTEFUSVZFX1RPX09VVF9QV0R9KQogCiBsb2FkKGRlZmF1bHRfcG9zdCkgIyBMb2FkIFF0J3Mg
ZGVmYXVsdHMKK1FNQUtFX0xJQlNfT1BFTkdMICs9IC1sY2FwCi0tIAoxLjcuOS41Cgo=
</data>
<flag name="review"
          id="180921"
          type_id="1"
          status="-"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="180922"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168993</attachid>
            <date>2012-10-16 12:11:21 -0700</date>
            <delta_ts>2012-10-17 09:05:47 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-9.3.patch</filename>
            <type>text/plain</type>
            <size>44423</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBlMzNkZDQ1MzZjMDg2ODA3MDBkNTY4ZjUwN2U3YzQxZWUzYTU1ODMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogVHVl
LCAxNiBPY3QgMjAxMiAyMTowODozNSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGZlbHRvbHQgOS4z
CgotLS0KIFNvdXJjZS9RdFdlYktpdC5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgNSArCiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2VyLmNwcCAgICAg
ICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVz
LnhjY29uZmlnIHwgICAgMyArLQogU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvICAg
ICAgICAgICAgICAgICAgfCAgIDI1ICsKIC4uLi9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJv
bm1lbnRMaW51eC5jcHAgICAgIHwgIDcwMiArKysrKysrKysrKysrKysrKysrKwogLi4uL2xpbnV4
L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmggfCAgIDY3ICsrCiBTb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwog
Li4uL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgICAgfCAgIDM0
ICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5j
cHAgIHwgICA3OCArKy0KIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSAg
ICAgICAgICAgIHwgICAgNCArCiBUb29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRf
cG9zdC5wcmYgICAgICB8ICAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgOTEwIGluc2VydGlvbnMo
KyksIDE2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1Nh
bmRib3hQcm9jZXNzLnBybwogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3Mv
U2FuZGJveEVudmlyb25tZW50TGludXguaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdFdlYktpdC5w
cm8gYi9Tb3VyY2UvUXRXZWJLaXQucHJvCmluZGV4IGIxNTg2MjUuLmZhNTZlMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9RdFdlYktpdC5wcm8KKysrIGIvU291cmNlL1F0V2ViS2l0LnBybwpAQCAtMTcs
NiArMTcsMTEgQEAgYnVpbGQ/KHdlYmtpdDIpIHsKICAgICAgICAgcGx1Z2lucHJvY2Vzcy5maWxl
ID0gV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzLnBybwogICAgICAgICBTVUJESVJTICs9IHBsdWdpbnBy
b2Nlc3MKICAgICB9CisKKyAgICBlbmFibGU/KFNVSURfU0FOREJPWF9MSU5VWCkgeworICAgICAg
ICBzYW5kYm94cHJvY2Vzcy5maWxlID0gV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KKyAgICAg
ICAgU1VCRElSUyArPSBzYW5kYm94cHJvY2VzcworICAgIH0KIH0KIAogaW5jbHVkZShXZWJLaXQv
cXQvZG9jcy9kb2NzLnByaSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5j
cHAKaW5kZXggNDJhNTM2Zi4uZTMzOGM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlVHJhY2tlci5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFN0b3JhZ2VUcmFja2VyOjpv
cGVuVHJhY2tlckRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gdHJhY2tlckRhdGFiYXNlUGF0
aCgpOwotICAgIAorCiAgICAgaWYgKCFTUUxpdGVGaWxlU3lzdGVtOjplbnN1cmVEYXRhYmFzZUZp
bGVFeGlzdHMoZGF0YWJhc2VQYXRoLCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkpIHsKICAgICAgICAg
aWYgKGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY3JlYXRlIGRhdGFiYXNlIGZpbGUgJyVzJyIsIGRhdGFiYXNlUGF0aC5hc2NpaSgpLmRhdGEo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnCmluZGV4IDNmNDBjNzEuLmZiMjEwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0xMjUs
NiArMTI1LDcgQEAgRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQgPSBFTkFCTEVfUFJPR1JFU1NfRUxF
TUVOVDsKIEVOQUJMRV9RVU9UQSA9IDsKIEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSA9
IEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRTsKIEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gg
PSA7CitFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYID0gOwogRU5BQkxFX1NIQURPV19ET00gPSA7
CiBFTkFCTEVfU0hBUkVEX1dPUktFUlMgPSBFTkFCTEVfU0hBUkVEX1dPUktFUlM7CiBFTkFCTEVf
U1FMX0RBVEFCQVNFID0gRU5BQkxFX1NRTF9EQVRBQkFTRTsKQEAgLTE0OCw0ICsxNDksNCBAQCBF
TkFCTEVfV0lER0VUX1JFR0lPTiA9IDsKIEVOQUJMRV9XT1JLRVJTID0gRU5BQkxFX1dPUktFUlM7
CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJM
RV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVf
QU5JTUFUSU9OX0FQSSkgJChFTkFCTEVfQkxPQikgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcp
ICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQo
RU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxF
X0NTU19GSUxURVJTKSAkKEVOQUJMRV9DU1NfSElFUkFSQ0hJRVMpICQoRU5BQkxFX0NTU19JTUFH
RV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NT
U19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJ
VElPTikgJChFTkFCTEVfQ1NTX1ZBUklBQkxFUykgJChFTkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJ
T04pICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NV
UFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJf
SVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFU
SU9OKSAkKEVOQUJMRV9ESUFMT0dfRUxFTUVOVCkgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkg
JChFTkFCTEVfRklMRV9TWVNURU0pICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JF
RU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVf
SElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJTkcpICQoRU5BQkxFX0hJR0hfRFBJX0NBTlZB
UykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJBTUVfU0VBTUxFU1MpICQoRU5B
QkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1NQRUVDSCkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9U
WVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxF
X0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdB
Q1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQo
TEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFC
TEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTElOS19QUkVSRU5ERVIpICQoRU5BQkxFX01BVEhN
TCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVO
QUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTUlDUk9EQVRBKSAk
KEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMpICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VU
SUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJ
KSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UKSAkKEVO
QUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1ND
UklQVEVEX1NQRUVDSCkgJChFTkFCTEVfU0hBRE9XX0RPTSkgJChFTkFCTEVfU0hBUkVEX1dPUktF
UlMpICQoRU5BQkxFX1NRTF9EQVRBQkFTRSkgJChFTkFCTEVfU1RZTEVfU0NPUEVEKSAkKEVOQUJM
RV9TVkcpICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRT
KSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19P
TkxZKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX1VORE9fTUFOQUdFUikg
JChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChF
TkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlO
RykgJChFTkFCTEVfV0lER0VUX1JFR0lPTikgJChFTkFCTEVfV09SS0VSUykgJChFTkFCTEVfWFNM
VCk7CitGRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0FD
Q0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQU5JTUFUSU9OX0FQSSkgJChFTkFCTEVfQkxP
QikgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJM
RV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVO
QUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19GSUxURVJTKSAkKEVOQUJMRV9DU1Nf
SElFUkFSQ0hJRVMpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NT
X0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0hB
REVSUykgJChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTikgJChFTkFCTEVfQ1NTX1ZBUklBQkxF
UykgJChFTkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJT04pICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVf
SEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VM
RU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxF
TUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ESUFMT0dfRUxFTUVO
VCkgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVfRklMRV9TWVNURU0pICQoRU5B
QkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9U
VExJTkcpICQoRU5BQkxFX0hJR0hfRFBJX0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAk
KEVOQUJMRV9JRlJBTUVfU0VBTUxFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5B
QkxFX0lOUFVUX1NQRUVDSCkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5Q
VVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxF
X0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZB
U0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChF
TkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykgJChF
TkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVf
TElOS19QUkVSRU5ERVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAk
KEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJM
RV9NSFRNTCkgJChFTkFCTEVfTUlDUk9EQVRBKSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMp
ICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05T
KSAkKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAk
KEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCkgJChFTkFCTEVfU1VJ
RF9TQU5EQk9YX0xJTlVYKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09S
S0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5B
QkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9O
VFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05T
X09OTFkpICQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfVU5ET19NQU5BR0VS
KSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAk
KEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElN
SU5HKSAkKEVOQUJMRV9XSURHRVRfUkVHSU9OKSAkKEVOQUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9Y
U0xUKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybyBiL1Nv
dXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lNGIwNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2Fu
ZGJveFByb2Nlc3MucHJvCkBAIC0wLDAgKzEsMjUgQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9qZWN0
IGZpbGUgZm9yIHRoZSBXZWJLaXQyIHNhbmRib3ggcHJvY2VzcyBiaW5hcnkKKyMKKyMgU2VlICdU
b29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworVEVNUExBVEUgPSBhcHAKKworVEFSR0VUID0gU1VJRFNhbmRib3hIZWxw
ZXIKK0RFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0vYmluCisKK0NPTkZJRyArPSBjb25zb2xl
CitDT05GSUcgLT0gcXQKKworU09VUkNFUyArPSBTaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3Mv
U2FuZGJveEVudmlyb25tZW50TGludXguY3BwCitIRUFERVJTICs9IFNoYXJlZC9saW51eC9TYW5k
Ym94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oCisKK0lOU1RBTExTICs9IHRhcmdl
dAorTElCUyArPSAtbGNhcCAtbGRsCisKK2lzRW1wdHkoSU5TVEFMTF9CSU5TKSB7CisgICAgdGFy
Z2V0LnBhdGggPSAkJFtRVF9JTlNUQUxMX0JJTlNdCit9IGVsc2UgeworICAgIHRhcmdldC5wYXRo
ID0gJCRJTlNUQUxMX0JJTlMKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGlu
dXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTdkYmEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3Mv
U2FuZGJveEVudmlyb25tZW50TGludXguY3BwCkBAIC0wLDAgKzEsNzAyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiU2FuZGJveEVudmlyb25t
ZW50TGludXguaCIKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8
ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRl
IDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVk
ZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGluay5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1
ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvY2Fw
YWJpbGl0eS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2luY2x1ZGUgPHN5cy9wcmN0bC5o
PgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNp
bmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8
c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisKKyNpZm5kZWYgX0dO
VV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hh
ciogU0FGRURJUjsKK3N0YXRpYyBjb25zdCBpbnQgUEFUSFNJWkUgPSA1MTI7CisKK3N0YXRpYyBi
b29sIHN0cmluZ0NvcHkoY2hhciogZGVzdGluYXRpb24sIGNvbnN0IGNoYXIqIHNvdXJjZSwgY29u
c3QgaW50IG1heFNpemUpCit7CisgICAgaW50IGxlbmd0aCA9IHN0cmxlbihzb3VyY2UpOworICAg
IGlmIChsZW5ndGggPiBtYXhTaXplIC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVy
cm9yOiBUb28gbG9uZyBzdHJpbmcuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgbGVuZ3RoKTsKKyAgICBkZXN0aW5hdGlv
bltsZW5ndGhdID0gJ1wwJzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgc3Ry
aW5nQ29weShjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlLCBjb25zdCBpbnQg
bGVuZ3RoLCBjb25zdCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpZiAobGVuZ3RoID4gbWF4U2l6ZSAt
IDEgfHwgbGVuZ3RoID4gc3RybGVuKHNvdXJjZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJFcnJvcjogVG9vIGxvbmcgc3RyaW5nLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIGxlbmd0aCk7CisgICAgZGVzdGlu
YXRpb25bbGVuZ3RoXSA9ICdcMCc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s
IHN0cmluZ0NvbmNhdChjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlMSwgY29u
c3QgY2hhciogc291cmNlMiwgY29uc3QgaW50IG1heFNpemUpCit7CisgICAgaW50IGxlbmd0aDEg
PSBzdHJsZW4oc291cmNlMSk7CisgICAgaW50IGxlbmd0aDIgPSBzdHJsZW4oc291cmNlMik7Cisg
ICAgaWYgKGxlbmd0aDEgKyBsZW5ndGgyID4gbWF4U2l6ZSAtIDEpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJFcnJvcjogVG9vIGxvbmcgc3RyaW5nLlxuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UxLCBsZW5ndGgxKTsK
KyAgICBtZW1jcHkoZGVzdGluYXRpb24gKyBsZW5ndGgxLCBzb3VyY2UyLCBsZW5ndGgyKTsKKyAg
ICBkZXN0aW5hdGlvbltsZW5ndGgxICsgbGVuZ3RoMl0gPSAnXDAnOworICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgYm9vbCBzdHJpbmdDb25jYXQoY2hhciogZGVzdGluYXRpb24sIGNvbnN0
IGNoYXIqIHNvdXJjZTEsIGNvbnN0IGNoYXIqIHNvdXJjZTIsIGNvbnN0IGNoYXIqIHNvdXJjZTMs
IGNvbnN0IGludCBtYXhTaXplKQoreworICAgIGludCBsZW5ndGgxID0gc3RybGVuKHNvdXJjZTEp
OworICAgIGludCBsZW5ndGgyID0gc3RybGVuKHNvdXJjZTIpOworICAgIGludCBsZW5ndGgzID0g
c3RybGVuKHNvdXJjZTMpOworICAgIGlmIChsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDMgPiBt
YXhTaXplIC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBUb28gbG9uZyBz
dHJpbmcuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVz
dGluYXRpb24sIHNvdXJjZTEsIGxlbmd0aDEpOworICAgIG1lbWNweShkZXN0aW5hdGlvbiArIGxl
bmd0aDEsIHNvdXJjZTIsIGxlbmd0aDIpOworICAgIG1lbWNweShkZXN0aW5hdGlvbiArIGxlbmd0
aDEgKyBsZW5ndGgyLCBzb3VyY2UzLCBsZW5ndGgzKTsKKyAgICBkZXN0aW5hdGlvbltsZW5ndGgx
ICsgbGVuZ3RoMiArIGxlbmd0aDNdID0gJ1wwJzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIHZvaWQgbGF1bmNoQ2hyb290SGVscGVyKGNvbnN0IGNoYXIqIHNhZmVkaXIsIGludCBzdltd
KQoreworICAgIHN0cnVjdCBybGltaXQgbm9GaWxlID0gezAsIDB9OworICAgIC8vIFdlIHNoYXJl
IG91ciBGUyB3aXRoIGFuIHVudHJ1c3RlZCBwcm9jZXNzLCBzbworICAgIC8vIHdlIGhhdmUgdG8g
bWFrZSBzdXJlIHdlIGNhbid0IG9wZW4gYW55dGhpbmcgYnkgbWlzdGFrZS4KKyAgICAvLyBIb3dl
dmVyLCBpZiB3ZSBkb24ndCBkcm9wIENBUF9TWVNfUkVTU09VUkNFIGl0J3MgdXNlbGVzcworICAg
IGlmIChzZXRybGltaXQoUkxJTUlUX05PRklMRSwgJm5vRmlsZSkpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJIZWxwZXIgY291bGRuJ3Qgc2V0IHRoZSByZXNvdXJjZWxpbWl0OiAlcy5cbiIs
IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisK
KyAgICBpZiAoY2xvc2Uoc3ZbMV0pID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q291bGRuJ3QgY2xvc2Ugc29ja2V0ICVkOiAlc1xuIiwgc3ZbMV0sIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICAvLyBSZWFkIHRoZSAi
Y2hyb290bWUiIG1lc3NhZ2UgKCdDJykgZnJvbSB0aGUgc29ja2V0LgorICAgIGNoYXIgbXNnOwor
ICAgIHNzaXplX3QgY250ID0gcmVhZChzdlswXSwgJm1zZywgMSk7CisgICAgaWYgKCFjbnQpCisg
ICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICBlbHNlIGlmIChjbnQgIT0gMSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHJlYWQgdGhlIHByb3BlciBjaHJvb3RtZSBt
c2c6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
CisgICAgfQorCisgICAgaWYgKG1zZyAhPSBNU0dfQ0hST09UTUUpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJIZWxwZXI6IFJlY2lldmVkIHdyb25nIG1lc3NhZ2VcbiIpOworICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgaWYgKGNoZGlyKHNhZmVkaXIpID09IC0x
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY2hhbmdlIHRoZSB3b3JraW5n
IGRpcmVjdG9yeSB0byAlcy46ICVzXG4iLCBzYWZlZGlyLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgaWYgKGNocm9vdChzYWZlZGly
KSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNocm9vdGluZyBmYWlsZWQ6ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAg
fQorCisgICAgaWYgKGNoZGlyKCIvIikgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDb3VsZG4ndCBjaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIC8uOiAlc1xuIiwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAg
IC8vIFNlbmRpbmcgYWNrbm93bGVkZ2VtZW50IHRvIHRoZSBXZWJQcm9jZXNzIHRoYXQgaXQncyBp
bnNpZGUgdGhlIHNhbmRib3ggYWxyZWFkeS4KKyAgICBtc2cgPSBNU0dfQ0hST09URUQ7CisgICAg
Y250ID0gd3JpdGUoc3ZbMF0sICZtc2csIDEpOworICAgIGlmIChjbnQgPT0gMSkKKyAgICAgICAg
ZXhpdChFWElUX1NVQ0NFU1MpOworICAgIGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkhlbHBlcjogY291bGRuJ3Qgd3JpdGUgYWNrbm93bGVkZ2VtZW50OiAlcy5cbiIsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgZnByaW50
ZihzdGRlcnIsICJIZWxwZXI6IGNvZGVwYXRoIGVycm9yOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyBib29sIHNldEVudmlyb25t
ZW50VmFyaWFibGVzRm9yQ2hyb290SGVscGVyKHBpZF90IHBpZCwgaW50IHN2W10pCit7CisgICAg
Y29uc3QgaW50IGRlc2NyaXB0b3JTaXplID0gMTE7CisgICAgY2hhciBzb2NrZXREZXNjcmlwdG9y
W2Rlc2NyaXB0b3JTaXplXTsKKyAgICBjaGFyIHNhbmRib3hIZWxwZXJQSURbZGVzY3JpcHRvclNp
emVdOworICAgIC8vIEV4cG9ydCB0aGUgUElEIG9mIHRoZSBoZWxwZXIgYW5kIHRoZSBzb2NrZXRk
ZXNjcmlwdG9yIHRvIHRoZSBlbnZpcm9ubWVudC4KKyAgICBpbnQgY250ID0gc25wcmludGYoc2Fu
ZGJveEhlbHBlclBJRCwgc2l6ZW9mKHNhbmRib3hIZWxwZXJQSUQpLCAiJXUiLCBwaWQpOworICAg
IGlmIChjbnQgPCAwIHx8IGNudCA+PSBzaXplb2Yoc2FuZGJveEhlbHBlclBJRCkpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJzbnByaW50ZiBvZiB0aGUgUElEIGZhaWxlZDogJXNcbiIsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
c2V0ZW52KFNCWF9IRUxQRVJfUElELCBzYW5kYm94SGVscGVyUElELCAxKSA9PSAtMSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHNldCB0aGUgU0JYX0hFTFBFUl9QSUQgZW52
IHZhcmlhYmxlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGNudCA9IHNucHJpbnRmKHNvY2tldERlc2NyaXB0b3IsIHNpemVvZihz
b2NrZXREZXNjcmlwdG9yKSwgIiV1Iiwgc3ZbMV0pOworICAgIGlmIChjbnQgPCAwIHx8IGNudCA+
PSBzaXplb2Yoc29ja2V0RGVzY3JpcHRvcikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJz
bnByaW50ZiBvZiB0aGUgZmlsZWRlc2NyaXB0b3IgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzZXRlbnYoU0JY
X0QsIHNvY2tldERlc2NyaXB0b3IsIDEpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiU2F2aW5nIHRoZSBoZWxwZXJzIGZpbGVkZXNjcmlwdG9yIGludG8gYW4gZW52IHZhcmlhYmxl
IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoY2xvc2Uoc3ZbMF0pID09IC0xKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ2xvc2luZyBvZiAlZCBmYWlsZWQ6ICVzXG4iLCBzdlswXSwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIGJvb2wgcHJlcGFyZUFuZFN0YXJ0Q2hyb290SGVscGVyKCkKK3sKKyAgICBpbnQg
c3ZbMl07CisgICAgcmVnaXN0ZXIgcGlkX3QgcGlkOworICAgIGNoYXIqIHNhZmVkaXIgPSAwOwor
ICAgIHN0cnVjdCBzdGF0IHNhZmVkaXJJbmZvOworCisgICAgaWYgKCFsc3RhdChTQUZFRElSLCAm
c2FmZWRpckluZm8pICYmIFNfSVNESVIoc2FmZWRpckluZm8uc3RfbW9kZSkpCisgICAgICAgIHNh
ZmVkaXIgPSBjb25zdF9jYXN0PGNoYXIqPihTQUZFRElSKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJIZWxwZXI6ICVzIGRvZXMgbm90IGV4aXN0IVxuIiwgU0FGRURJUik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc29ja2V0cGFpcihBRl9V
TklYLCBTT0NLX1NUUkVBTSwgMCwgc3YpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ291bGRuJ3QgY3JlYXRlIHNvY2tldHBhaXI6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcGlkID0gc3lzY2FsbChTWVNfY2xv
bmUsIENMT05FX0ZTIHwgU0lHQ0hMRCwgMCwgMCwgMCk7CisKKyAgICBzd2l0Y2ggKHBpZCkgewor
ICAgIGNhc2UgLTE6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xvbmUgZmFpbGVkOiAlc1xu
Iiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSW4g
dGhlIGNoaWxkIHByb2Nlc3Mgd2Ugc3RhcnQgdGhlIGNocm9vdCBoZWxwZXIgd2hhdCB3YWl0cyBm
b3IgdGhlICdDJyAoc2FuZGJveG1lISkKKyAgICAvLyBtZXNzYWdlIGZyb20gdGhlIFdlYlByb2Nl
c3MuCisgICAgLy8gSW4gdGhlIHBhcmVudCBwcm9jZXNzIHRoZSBwaWQgb2YgdGhlIGhlbHBlciBh
bmQgdGhlIHNvY2tldCB3aGF0IHRoZSBoZWxwZXIgYW5kIHRoZSBXZWJQcm9jZXNzCisgICAgLy8g
Y2FuIGNvbW11bmljYXRlIG9uIGFyZSBleHBvcnRlZCBpbnRvIGVudmlyb25tZW50IHZhcmlhYmxl
cy4gVGhpcyB3YXkgdGhleSB3aWxsIGJlIGF2YWlsYWJsZQorICAgIC8vIGZyb20gdGhlIFdlYlBy
b2Nlc3MgdG9vLgorICAgIGNhc2UgMDoKKyAgICAgICAgbGF1bmNoQ2hyb290SGVscGVyKHNhZmVk
aXIsIHN2KTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gc2V0RW52aXJvbm1lbnRWYXJp
YWJsZXNGb3JDaHJvb3RIZWxwZXIocGlkLCBzdik7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCisvLyBTZXQgY2FwYWJpbGl0aWVzIGluIGFsbCB0aHJlZSBzZXRzLgorc3RhdGljIGJvb2wg
c2V0Q2FwYWJpbGl0aWVzKGNhcF92YWx1ZV90KiBjYXBhYmlsaXR5TGlzdCwgaW50IGxlbmd0aCkK
K3sKKyAgICBjYXBfdCBjYXBhYmlsaXRpZXM7CisKKyAgICAvLyBDYXBhYmlsaXRpZXMgc2hvdWxk
IGJlIGluaXRpYWxpemVkIHdpdGhvdXQgZmxhZ3MuCisgICAgY2FwYWJpbGl0aWVzID0gY2FwX2lu
aXQoKTsKKyAgICBpZiAoIWNhcGFiaWxpdGllcykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlByb2Nlc3MgY2FwYWJpbGl0aWVzIGluaXQgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjYXBfY2xlYXIoY2Fw
YWJpbGl0aWVzKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNsZWFyaW5nIHByb2Nlc3Mg
Y2FwYWJpbGl0aWVzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY2FwYWJpbGl0eUxpc3QgJiYgbGVuZ3RoKSB7
CisgICAgICAgIGlmIChjYXBfc2V0X2ZsYWcoY2FwYWJpbGl0aWVzLCBDQVBfRUZGRUNUSVZFLCBs
ZW5ndGgsIGNhcGFiaWxpdHlMaXN0LCBDQVBfU0VUKQorICAgICAgICAgICAgfHwgY2FwX3NldF9m
bGFnKGNhcGFiaWxpdGllcywgQ0FQX0lOSEVSSVRBQkxFLCBsZW5ndGgsIGNhcGFiaWxpdHlMaXN0
LCBDQVBfU0VUKQorICAgICAgICAgICAgfHwgY2FwX3NldF9mbGFnKGNhcGFiaWxpdGllcywgQ0FQ
X1BFUk1JVFRFRCwgbGVuZ3RoLCBjYXBhYmlsaXR5TGlzdCwgQ0FQX1NFVCkpIHsKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IHNldCBwcm9jZXNzIGNhcGFiaWxpdHkgZmxhZ3M6
ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgY2FwX2ZyZWUoY2FwYWJpbGl0
aWVzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChjYXBfc2V0X3Byb2MoY2FwYWJpbGl0aWVzKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNhbm5vdCBzZXQgcHJvY2VzcyBjYXBhYmlsaXRpZXM6ICVzXG4iLCBzdHJlcnJvcihlcnJu
bykpOworICAgICAgICBjYXBfZnJlZShjYXBhYmlsaXRpZXMpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGNhcF9mcmVlKGNhcGFiaWxpdGllcyk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBpbnQgc2V0RHVtcGFibGUodm9pZCkKK3sKKyAgICBpZiAocHJjdGwoUFJf
U0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIlNldHRpbmcgZHVtcGxhYmxlIGlzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBi
b29sIGRyb3BQcml2aWxlZ2VzKHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQoreworICAgIC8vIFdlIGJl
Y29tZSBleHBsaWNpdGVseSBub24gZHVtcGFibGUuIE5vdGUgdGhhdCBub3JtYWxseSBzZXR1aWQo
KSB0YWtlcyBjYXJlCisgICAgLy8gb2YgdGhpcyB3aGVuIHdlIHN3aXRjaCBldWlkLCBidXQgd2Ug
d2FudCB0byBzdXBwb3J0IGNhcGFiaWxpdHkgRlMuCisgICAgaWYgKHNldER1bXBhYmxlKCkKKyAg
ICAgICAgfHwgc2V0cmVzZ2lkKGdpZCwgZ2lkLCBnaWQpCisgICAgICAgIHx8IHNldHJlc3VpZCh1
aWQsIHVpZCwgdWlkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIERyb3AgYWxsIGNh
cGFiaWxpdGllcy4gQWdhaW4sIHNldHVpZCgpIG5vcm1hbGx5IHRha2VzIGNhcmUgb2YgdGhpcyBp
ZiB3ZSBoYWQgZXVpZCAwLgorICAgIHJldHVybiBzZXRDYXBhYmlsaXRpZXMoMCwgMCk7Cit9CisK
K3N0YXRpYyBib29sIGZpbGVFeGlzdHMoY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBzdHJ1Y3Qg
c3RhdCBmaWxlU3RhdDsKKyAgICBpZiAobHN0YXQocGF0aCwgJmZpbGVTdGF0KSA9PSAtMSAmJiBl
cnJubyA9PSBFTk9FTlQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIG1vZGVfdCBwZXJtaXNzaW9ucyhjb25zdCBjaGFyKiBkaXJlY3RvcnkpCit7
CisgICAgc3RydWN0IHN0YXQgZmlsZVN0YXQ7CisgICAgc3RhdChkaXJlY3RvcnksICZmaWxlU3Rh
dCk7CisgICAgcmV0dXJuIGZpbGVTdGF0LnN0X21vZGU7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0
ZURpcmVjdG9yeShjaGFyKiBwYXRoVG9DcmVhdGUsIGNvbnN0IGNoYXIqIG5leHREaXJlY3RvcnlU
b0NyZWF0ZSkKK3sKKyAgICBjaGFyIHBhdGhUb0NyZWF0ZUluU2FuZGJveFtQQVRIU0laRV07Cisg
ICAgc3RybmNhdChwYXRoVG9DcmVhdGUsIG5leHREaXJlY3RvcnlUb0NyZWF0ZSwgc3RybGVuKG5l
eHREaXJlY3RvcnlUb0NyZWF0ZSkpOworICAgIG1vZGVfdCBtb2RlID0gcGVybWlzc2lvbnMocGF0
aFRvQ3JlYXRlKTsKKworICAgIHN0cmluZ0NvbmNhdChwYXRoVG9DcmVhdGVJblNhbmRib3gsIFNB
RkVESVIsIHBhdGhUb0NyZWF0ZSwgUEFUSFNJWkUpOworCisgICAgaWYgKG1rZGlyKHBhdGhUb0Ny
ZWF0ZUluU2FuZGJveCwgbW9kZSkgPT0gLTEgJiYgZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpb24gb2YgJXMgZmFpbGVkOiAlc1xuIiwgcGF0aFRvQ3Jl
YXRlSW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAgbHN0YXQocGF0aFRvQ3JlYXRl
LCAmZmlsZUluZm8pOworICAgIGlmICg6OmNob3duKHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgZmls
ZUluZm8uc3RfdWlkLCBmaWxlSW5mby5zdF9naWQpID09IC0xKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKDo6Y2htb2QocGF0aFRvQ3JlYXRlSW5TYW5kYm94LCBmaWxlSW5mby5zdF9t
b2RlKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgYm9vbCBjcmVhdGVEaXJlY3RvcnlQYXRoKGNoYXIqIHBhdGgpCit7CisgICAgY2hh
ciBmdWxsUGF0aEluU2FuZGJveFtQQVRIU0laRV07CisgICAgc3RyaW5nQ29uY2F0KGZ1bGxQYXRo
SW5TYW5kYm94LCBTQUZFRElSLCBwYXRoLCBQQVRIU0laRSk7CisKKyAgICBpZiAoZmlsZUV4aXN0
cyhmdWxsUGF0aEluU2FuZGJveCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2hhciBh
bHJlYWR5Q3JlYXRlZFBhdGhbUEFUSFNJWkVdOworICAgIGFscmVhZHlDcmVhdGVkUGF0aFswXSA9
ICdcMCc7CisgICAgLy8gc3RhcnRQb3MgaXMgKHBhdGggKyAxKSBiZWNhdXNlIHdlIHNraXAgdGhl
IGZpcnN0ICcvJy4KKyAgICBjaGFyKiBzdGFydFBvcyA9IHBhdGggKyAxOworICAgIGNoYXIqIGVu
ZFBvczsKKyAgICB3aGlsZSAoKGVuZFBvcyA9IHN0cmNocihzdGFydFBvcywgJy8nKSkpIHsKKyAg
ICAgICAgY2hhciBuZXh0RGlyZWN0b3J5VG9DcmVhdGVbMjU2XTsKKyAgICAgICAgc3RyaW5nQ29w
eShuZXh0RGlyZWN0b3J5VG9DcmVhdGUsIHN0YXJ0UG9zIC0gMSwgZW5kUG9zIC0gc3RhcnRQb3Mg
KyAxLCAyNTYpOworICAgICAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeShhbHJlYWR5Q3JlYXRlZFBh
dGgsIG5leHREaXJlY3RvcnlUb0NyZWF0ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisgICAgLy8gQ3JlYXRlIHRoZSBs
YXN0IGRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5cGF0aC4KKyAgICBhbHJlYWR5Q3JlYXRlZFBh
dGhbMF0gPSAnXDAnOworICAgIHJldHVybiBjcmVhdGVEaXJlY3RvcnkoYWxyZWFkeUNyZWF0ZWRQ
YXRoLCBwYXRoKTsKK30KKworc3RhdGljIGJvb2wgY3JlYXRlRGV2aWNlRmlsZXMoKQoreworICAg
IGNoYXIgZGV2W10gPSAiL2Rldi8iOworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5UGF0aChkZXYp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgY2hhciogZGV2aWNlc1syXSA9IHsg
Ii9kZXYvcmFuZG9tIiwgIi9kZXYvdXJhbmRvbSIgfTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDI7ICsraSkgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7CisgICAgICAgIGlmIChsc3Rh
dChkZXZpY2VzW2ldLCAmc3RhdHVzKSA9PSAtMSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJFcnJvciBieSBvYnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlIGZpbGUgKCVz
KTogJXNcbiIsIGRldmljZXNbaV0sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGV2X3QgZGV2ID0gc3RhdHVzLnN0X3JkZXY7
CisgICAgICAgIC8vIEJvdGggbmVlZGVkIGRldmljZSBmaWxlcyAoL2Rldi9yYW5kb20gYW5kIC9k
ZXYvdXJhbmRvbSkgYXJlIGNoYXJhY3RlciBtX2RldmljZXMgYW5kCisgICAgICAgIC8vIHRoZWly
IHBlcm1pc3Npb25zIHNob3VsZCBiZTogcnctcnctcnctLgorICAgICAgICBjaGFyIGRldmljZVtQ
QVRIU0laRV07CisgICAgICAgIHN0cmluZ0NvbmNhdChkZXZpY2UsIFNBRkVESVIsIGRldmljZXNb
aV0sIFBBVEhTSVpFKTsKKyAgICAgICAgbWtub2QoZGV2aWNlLCBTX0lGQ0hSIHwgU19JUlVTUiB8
IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEggfCBTX0lXT1RILCBtYWtlZGV2
KG1ham9yKGRldiksIG1pbm9yKGRldikpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBib29sIG1vdW50RmlsZVN5c3RlbXMoKQoreworICAgIGNoYXIgcHJvY1tdID0gIi9w
cm9jLyI7CisgICAgaWYgKGNyZWF0ZURpcmVjdG9yeVBhdGgocHJvYykgPT0gLTEpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjaGFyIHByb2NQYXRoSW5TYW5kYm94W1BBVEhTSVpFXTsKKyAg
ICBzdHJpbmdDb25jYXQocHJvY1BhdGhJblNhbmRib3gsIFNBRkVESVIsIHByb2MsIFBBVEhTSVpF
KTsKKyAgICBpZiAoIW1vdW50KHByb2MsIHByb2NQYXRoSW5TYW5kYm94LCAicHJvYyIsIDAsIDAp
ID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkgbW91bnRpbmcgJXMu
ICVzXG4iLCBwcm9jLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgY2hhciBzaGFyZWRNZW1vcnlbXSA9ICIvcnVuL3NobS8iOworICAgIGlmICgh
Y3JlYXRlRGlyZWN0b3J5UGF0aChzaGFyZWRNZW1vcnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2hhciBzaGFyZWRNZW1vcnlQYXRoSW5TYW5kYm94W1BBVEhTSVpFXTsKKyAgICBzdHJp
bmdDb25jYXQoc2hhcmVkTWVtb3J5UGF0aEluU2FuZGJveCwgU0FGRURJUiwgc2hhcmVkTWVtb3J5
LCBQQVRIU0laRSk7CisgICAgaWYgKCFtb3VudChzaGFyZWRNZW1vcnksIHNoYXJlZE1lbW9yeVBh
dGhJblNhbmRib3gsICJ0bXBmcyIsIDAsIDApID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRXJyb3IgYnkgbW91bnRpbmcgJXMuICVzXG4iLCBzaGFyZWRNZW1vcnksIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIGxpbmtGaWxlKGNoYXIqIHNvdXJjZUZpbGUsIGNoYXIqIHRhcmdl
dEZpbGUpCit7CisgICAgYm9vbCBpc1N5bWxpbmsgPSB0cnVlOworICAgIHdoaWxlIChpc1N5bWxp
bmspIHsKKyAgICAgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAgICAgIGlmIChsc3RhdChz
b3VyY2VGaWxlLCAmZmlsZUluZm8pID09IC0xKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0g
RU5PRU5UKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBjaGFyKiBlbmRPZkJhc2VEaXJlY3RvcnlJblNvdXJjZSA9IHN0cnJjaHIoc291cmNlRmlsZSwg
Jy8nKTsKKyAgICAgICAgaWYgKCFlbmRPZkJhc2VEaXJlY3RvcnlJblNvdXJjZSkgeworICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHNvdXJjZTogJXMuXG4iLCBzb3VyY2VGaWxl
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjaGFyIGJh
c2VEaXJlY3RvcnlPZlNvdXJjZVtQQVRIU0laRV07CisgICAgICAgIHN0cmluZ0NvcHkoYmFzZURp
cmVjdG9yeU9mU291cmNlLCBzb3VyY2VGaWxlLCBlbmRPZkJhc2VEaXJlY3RvcnlJblNvdXJjZSAt
IHNvdXJjZUZpbGUgKyAxLCBQQVRIU0laRSk7CisgICAgICAgIGlmICghY3JlYXRlRGlyZWN0b3J5
UGF0aChiYXNlRGlyZWN0b3J5T2ZTb3VyY2UpKSB7CisgICAgICAgICAgICBwcmludGYoIkNyZWF0
aW5nICVzIGZhaWxlZDogJXMuXG4iLCBiYXNlRGlyZWN0b3J5T2ZTb3VyY2UsIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGxpbmsoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChl
cnJubyAhPSBFRVhJU1QpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxpbmtp
bmcgJXMgZmFpbGVkOiAlcy5cbiIsIHNvdXJjZUZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gSGFuZGxlIHN5bWxpbmtzLgorICAgICAgICBpc1N5bWxpbmsgPSAoZmlsZUluZm8u
c3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkxOSzsKKyAgICAgICAgaWYgKCFpc1N5bWxpbmspCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjaGFyIHN5bWxpbmtUYXJnZXRbUEFUSFNJWkVd
OworICAgICAgICBpbnQgbGVuZ3RoT2ZUaGVMaW5rID0gcmVhZGxpbmsoc291cmNlRmlsZSwgc3lt
bGlua1RhcmdldCwgc2l6ZW9mKHN5bWxpbmtUYXJnZXQpIC0gMSk7CisgICAgICAgIGlmIChsZW5n
dGhPZlRoZUxpbmsgPiAwKQorICAgICAgICAgICAgc3ltbGlua1RhcmdldFtsZW5ndGhPZlRoZUxp
bmtdID0gJ1wwJzsKKyAgICAgICAgY2hhciBzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGRbUEFUSFNJ
WkVdOworICAgICAgICBjaGFyIHN5bWxpbmtUYXJnZXRJblNhbmRib3hbUEFUSFNJWkVdOworICAg
ICAgICAvLyBNYWtpbmcgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBw
YXRocy4KKyAgICAgICAgaWYgKHN5bWxpbmtUYXJnZXRbMF0gIT0gJy8nKSB7CisgICAgICAgICAg
ICBzdHJpbmdDb25jYXQoc3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBiYXNlRGlyZWN0b3J5T2ZT
b3VyY2UsICIvIiwgc3ltbGlua1RhcmdldCwgUEFUSFNJWkUpOworICAgICAgICAgICAgc3RyaW5n
Q29uY2F0KHN5bWxpbmtUYXJnZXRJblNhbmRib3gsIFNBRkVESVIsICIvIiwgc3ltbGlua1Rhcmdl
dEluUmVhbFdvcmxkLCBQQVRIU0laRSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
dHJpbmdDb3B5KHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCwgc3ltbGlua1RhcmdldCwgUEFUSFNJ
WkUpOworICAgICAgICAgICAgc3RyaW5nQ29uY2F0KHN5bWxpbmtUYXJnZXRJblNhbmRib3gsIFNB
RkVESVIsIHN5bWxpbmtUYXJnZXQsIFBBVEhTSVpFKTsKKyAgICAgICAgfQorICAgICAgICBzdHJp
bmdDb3B5KHNvdXJjZUZpbGUsIHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCwgUEFUSFNJWkUpOwor
ICAgICAgICBzdHJpbmdDb3B5KHRhcmdldEZpbGUsIHN5bWxpbmtUYXJnZXRJblNhbmRib3gsIFBB
VEhTSVpFKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGxpbmtE
aXJlY3RvcnkoY2hhciogc291cmNlRGlyZWN0b3J5UGF0aCwgY2hhciogdGFyZ2V0RGlyZWN0b3J5
UGF0aCkKK3sKKyAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeVBhdGgoc291cmNlRGlyZWN0b3J5UGF0
aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBESVIqIGRpcmVjdG9yeSA9IG9wZW5kaXIo
c291cmNlRGlyZWN0b3J5UGF0aCk7CisgICAgaWYgKGRpcmVjdG9yeSkgeworICAgICAgICBzdHJ1
Y3QgZGlyZW50ICpkaXJlY3RvcnlJbmZvID0gMDsKKyAgICAgICAgd2hpbGUgKChkaXJlY3RvcnlJ
bmZvID0gcmVhZGRpcihkaXJlY3RvcnkpKSkgeworICAgICAgICAgICAgY2hhciogbmV4dEZpbGVJ
bkRpcmVjdG9yeSA9IGRpcmVjdG9yeUluZm8tPmRfbmFtZTsKKyAgICAgICAgICAgIGlmICghc3Ry
bmNtcChuZXh0RmlsZUluRGlyZWN0b3J5LCAiLiIsIHN0cmxlbihuZXh0RmlsZUluRGlyZWN0b3J5
KSkgfHwgIXN0cm5jbXAobmV4dEZpbGVJbkRpcmVjdG9yeSwgIi4uIiwgMikpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBjaGFyIHNvdXJjZUZpbGVbUEFUSFNJWkVdOwor
ICAgICAgICAgICAgc3RyaW5nQ29uY2F0KHNvdXJjZUZpbGUsIHNvdXJjZURpcmVjdG9yeVBhdGgs
ICIvIiwgbmV4dEZpbGVJbkRpcmVjdG9yeSwgUEFUSFNJWkUpOworCisgICAgICAgICAgICBjaGFy
IHRhcmdldEZpbGVbUEFUSFNJWkVdOworICAgICAgICAgICAgc3RyaW5nQ29uY2F0KHRhcmdldEZp
bGUsIHRhcmdldERpcmVjdG9yeVBhdGgsICIvIiwgbmV4dEZpbGVJbkRpcmVjdG9yeSwgUEFUSFNJ
WkUpOworCisgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICgoZGly
ZWN0b3J5SW5mby0+ZF90eXBlID09IERUX0RJUikpCisgICAgICAgICAgICAgICAgb2sgPSBsaW5r
RGlyZWN0b3J5KHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG9rID0gbGlua0ZpbGUoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7CisgICAg
ICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIG1vZGlmaWNhdGlvbiB0aW1lIG9m
IHRoZSBkaXJlY3RvcmllcyBiZWNhdXNlCisgICAgICAgIC8vIGl0IGNvdWxkIGhhdmUgcm9sZSBl
LmcuIGluIHRoZSBoYXNoZ2VuZXJhdGlvbiBvZiBjYWNoZSBmaWxlcy4KKyAgICAgICAgc3RydWN0
IHN0YXQgZmlsZVN0YXQ7CisgICAgICAgIGxzdGF0KHNvdXJjZURpcmVjdG9yeVBhdGgsICZmaWxl
U3RhdCk7CisgICAgICAgIHN0cnVjdCB1dGltYnVmIHRpbWVzID0geyBmaWxlU3RhdC5zdF9hdGlt
ZSwgZmlsZVN0YXQuc3RfbXRpbWUgfTsKKyAgICAgICAgOjp1dGltZSh0YXJnZXREaXJlY3RvcnlQ
YXRoLCAmdGltZXMpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
Y29sbGVjdFJ1blRpbWVEZXBlbmRlbmNpZXMoKQoreworICAgIC8vIFRoZSBsaXN0IG9mIGVtcGly
aWNhbGx5IGdhdGhlcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLgorICAgIGNvbnN0IGNoYXIqIHJ1
bnRpbWVEZXBlbmRlbmNpZXNbXSA9IHsKKyAgICAgICAgImxpYm5zc19kbnMuc28iLAorICAgICAg
ICAibGlicmVzb2x2LnNvIiwKKyAgICAgICAgImxpYnNzbC5zbyIsCisgICAgICAgICJsaWJjcnlw
dG8uc28iLAorICAgICAgICAwCisgICAgfTsKKworICAgIGNvbnN0IGNoYXIqKiBjdXJyZW50UnVu
dGltZURlcGVuZGVuY3kgPSBydW50aW1lRGVwZW5kZW5jaWVzOworICAgIHdoaWxlICgqY3VycmVu
dFJ1bnRpbWVEZXBlbmRlbmN5KSB7CisgICAgICAgIC8vIFRvIG9idGFpbiB0aGUgcGF0aCBvZiB0
aGUgcnVudGltZSBkZXBlbmRlbmNpZXMgd2Ugb3BlbiB0aGVtIHdpdGggZGxvcGVuLgorICAgICAg
ICAvLyBXaXRoIHRoZSBoYW5kbGUgc3VwcGxpZWQgYnkgZGxvcGVuIHdlIGNhbiBvYnRhaW4gaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGR5bmFtaWNhbGx5CisgICAgICAgIC8vIGxpbmtlZCBsaWJyYXJp
ZXMsIHNvIHRoZSBwYXRoIHdoZXJlIGFyZSB0aGV5IGluc3RhbGxlZC4KKyAgICAgICAgdm9pZCog
aGFuZGxlID0gZGxvcGVuKCpjdXJyZW50UnVudGltZURlcGVuZGVuY3ksIFJUTERfTEFaWSk7Cisg
ICAgICAgIGlmICghaGFuZGxlKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxk
bid0IGdldCB0aGUgaGFuZGxlciBvZiAlczogJXNcbiIsICpjdXJyZW50UnVudGltZURlcGVuZGVu
Y3ksIGRsZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBzdHJ1Y3QgbGlua19tYXAqIGxpbmttYXA7CisgICAgICAgIGRsaW5mbyhoYW5kbGUs
IFJUTERfRElfTElOS01BUCwgJmxpbmttYXApOworCisgICAgICAgIGlmICghbGlua21hcCkgewor
ICAgICAgICAgICAgcHJpbnRmKCJDb3VsZG4ndCBnZXQgdGhlIGxpbmttYXAgb2YgJXM6ICVzLlxu
IiwgKmN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgcGF0aE9mVGhlTGli
cmFyeVtQQVRIU0laRV07CisgICAgICAgIGNoYXIgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJveFtQ
QVRIU0laRV07CisgICAgICAgIHN0cmluZ0NvcHkocGF0aE9mVGhlTGlicmFyeSwgbGlua21hcC0+
bF9uYW1lLCBQQVRIU0laRSk7CisgICAgICAgIHN0cmluZ0NvbmNhdChwYXRoT2ZUaGVMaWJyYXJ5
SW5TYW5kYm94LCBTQUZFRElSLCBwYXRoT2ZUaGVMaWJyYXJ5LCBQQVRIU0laRSk7CisgICAgICAg
IGlmICghbGlua0ZpbGUocGF0aE9mVGhlTGlicmFyeSwgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJv
eCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGlua2luZyBydW50aW1lIGRlcGVu
ZGVuY3k6ICVzIGZhaWxlZDogJXNcbiIsIHBhdGhPZlRoZUxpYnJhcnksIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgICAgICBkbGNsb3NlKGhhbmRsZSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgZGxjbG9zZShoYW5kbGUpOworICAgICAgICArK2N1cnJl
bnRSdW50aW1lRGVwZW5kZW5jeTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBib29sIGluaXRTYW5kYm94KCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIHNhbmRib3ggZGlyZWN0
b3J5LiBXZSBvbmx5IG5lZWQgdG8gc3RlcCBpbnRvIGl0LCBzbworICAgIC8vIHRoZSBleGVjdXRh
YmxlIHBlcm1pc3Npb24gaXMgbmVlZGVkIG9ubHkuCisgICAgaWYgKG1rZGlyKFNBRkVESVIsIDAx
MTApID09IC0xICYmIGVycm5vICE9IEVFWElTVCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFjcmVhdGVEZXZpY2VGaWxlcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIW1vdW50RmlsZVN5c3RlbXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gSGFyZCBsaW5rIGNhY2hlIGFuZCBmb250IGRpcmVjdG9yaWVzIGludG8gdGhlIHNhbmRib3gg
ZW52aXJvbm1lbnQuCisgICAgc3RydWN0IHBhc3N3ZCogdXNlckluZm8gPSBnZXRwd3VpZChnZXR1
aWQoKSk7CisgICAgY29uc3QgY2hhciogaG9tZSA9IHVzZXJJbmZvLT5wd19kaXI7CisgICAgY2hh
ciBsb2NhbERpcltQQVRIU0laRV07CisgICAgc3RyaW5nQ29uY2F0KGxvY2FsRGlyLCBob21lLCAi
Ly5sb2NhbC9zaGFyZS9Ob2tpYS8iLCBQQVRIU0laRSk7CisgICAgY2hhciBjYWNoZURpcltQQVRI
U0laRV07CisgICAgc3RyaW5nQ29uY2F0KGNhY2hlRGlyLCBob21lLCAiLy5jYWNoZS9Ob2tpYS8i
LCBQQVRIU0laRSk7CisgICAgY2hhciBmb250RGlyW1BBVEhTSVpFXTsKKyAgICBzdHJpbmdDb25j
YXQoZm9udERpciwgaG9tZSwgIi8uZm9udGNvbmZpZy8iLCBQQVRIU0laRSk7CisgICAgY29uc3Qg
Y2hhciogbGlua2VkRGlyZWN0b3JpZXNbXSA9IHsKKyAgICAgICAgY2FjaGVEaXIsCisgICAgICAg
IGZvbnREaXIsCisgICAgICAgIGxvY2FsRGlyLAorICAgICAgICAiL2V0Yy9mb250cy8iLAorICAg
ICAgICAiL3Zhci9jYWNoZS9mb250Y29uZmlnLyIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
LyIsCisgICAgICAgIDAKKyAgICB9OworCisgICAgY29uc3QgY2hhcioqIGN1cnJlbnRMaW5rZWRE
aXJlY3RvcnkgPSBsaW5rZWREaXJlY3RvcmllczsKKyAgICB3aGlsZSAoKmN1cnJlbnRMaW5rZWRE
aXJlY3RvcnkpIHsKKyAgICAgICAgY2hhciBsaW5rZWREaXJlY3RvcnlJblNhbmRib3hbUEFUSFNJ
WkVdOworICAgICAgICBzdHJpbmdDb25jYXQobGlua2VkRGlyZWN0b3J5SW5TYW5kYm94LCBTQUZF
RElSLCAqY3VycmVudExpbmtlZERpcmVjdG9yeSwgUEFUSFNJWkUpOworICAgICAgICBpZiAobGlu
a0RpcmVjdG9yeShjb25zdF9jYXN0PGNoYXIqPigqY3VycmVudExpbmtlZERpcmVjdG9yeSksIGxp
bmtlZERpcmVjdG9yeUluU2FuZGJveCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICsrY3VycmVudExpbmtlZERpcmVjdG9yeTsKKyAgICB9CisgICAgcmV0dXJuIGNv
bGxlY3RSdW5UaW1lRGVwZW5kZW5jaWVzKCk7Cit9CisKK3N0YXRpYyBib29sIHJlc3RyaWN0Q2Fw
YWJpbGl0aWVzKCkKK3sKKyAgICAvLyBDYXBhYmlsaXRpZXMgd2UgbmVlZC4KKyAgICBjYXBfdmFs
dWVfdCBjYXBhYmlsdHlMaXN0WzRdOworICAgIGNhcGFiaWx0eUxpc3RbMF0gPSBDQVBfU0VUVUlE
OworICAgIGNhcGFiaWx0eUxpc3RbMV0gPSBDQVBfU0VUR0lEOworICAgIGNhcGFiaWx0eUxpc3Rb
Ml0gPSBDQVBfU1lTX0FETUlOOworICAgIGNhcGFiaWx0eUxpc3RbM10gPSBDQVBfU1lTX0NIUk9P
VDsKKworICAgIC8vIFJlZHVjZSBjYXBhYmlsaXRpZXMgdG8gd2hhdCB3ZSBuZWVkLgorICAgIC8v
IEFsdGhvdWdoIHdlIHN0aWxsIGhhdmUgcm9vdCBldWlkIGFuZCB3ZSBrZWVwIHJvb3QgZXF1aXZh
bGVudCBjYXBhYmlsaXRpZXMsCisgICAgLy8gd2UgcmVtb3ZlZCAoPSBkaWRuJ3QgYWRkKSBDQVBf
U1lTX1JFU1NPVVJDRSBjYXBhYmlsaXRlcyBhbmQgdGhpcyByZXN1bHRlZCB0aGF0CisgICAgLy8g
dGhlIHNldHJsaW1pdCBmdW5jdGlvbiB3aXRoIFJMSU1JVF9OT0ZJTEUgd2lsbCBiZSBlZmZlY3Rp
dmUgbGF0ZXIuCisgICAgaWYgKCFzZXRDYXBhYmlsaXRpZXMoY2FwYWJpbHR5TGlzdCwgc2l6ZW9m
KGNhcGFiaWx0eUxpc3QpIC8gc2l6ZW9mKGNhcGFiaWx0eUxpc3RbMF0pKSkgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhZGp1c3QgcHJvY2VzcyBjYXBhYmlsaXRpZXM6ICVz
LlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbW92ZVRvTmV3UElETmFtZXNwYWNlKCkK
K3sKKyAgICAvLyBDTE9ORV9ORVdQSUQgYW5kIENMT05FX0ZTIHNob3VsZCBiZSBpbiB0aGF0IG9y
ZGVyLgorICAgIC8vIFdlIGNhbid0IHNoYXJlIEZTIGFjY3Jvc3MgbmFtZXNwYWNlcy4KKyAgICBw
aWRfdCBwaWQsIHdhaXRlZDsKKyAgICBpbnQgc3RhdHVzOworICAgIHBpZCA9IHN5c2NhbGwoU1lT
X2Nsb25lLCBDTE9ORV9ORVdQSUQgfCBTSUdDSExELCAwLCAwLCAwKTsKKworICAgIHN3aXRjaCAo
cGlkKSB7CisgICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9uaW5nIGlz
IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjYXNlIDA6CisgICAgICAgIC8vIENoaWxkIHNob3VsZCBydW4gd2l0aCBwaWQgbnVtYmVy
IDEgaW4gdGhlIG5ldyBuYW1lc3BhY2UuCisgICAgICAgIHJldHVybiBnZXRwaWQoKSA9PSAxOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFdlIGFyZSB3YWl0aW5nIGZvciBvdXIgY2hpbGQgKFdl
YlByb2Nlc3MpLgorICAgICAgICAvLyBJZiB0aGlzIHdhaXQgaXMgc3VjY2Vzc2Z1bCBpdCBtZWFu
cyB0aGF0IG91ciBjaGlsZCBpcyB0ZXJtaW5hdGVkLgorICAgICAgICB3YWl0ZWQgPSB3YWl0cGlk
KHBpZCwgJnN0YXR1cywgMCk7CisgICAgICAgIGlmICh3YWl0ZWQgIT0gcGlkKSB7CisgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIldyb25nIFBJRDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KFdJRkVYSVRFRChzdGF0dXMpKQorICAgICAgICAgICAgZXhpdChXRVhJVFNUQVRVUyhzdGF0dXMp
KTsKKyAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3Qg
ZW52cFtdKQoreworICAgIGNoYXIgc2FmZWRpcltQQVRIU0laRV07CisgICAgc3RydWN0IHBhc3N3
ZCogdXNlckluZm8gPSBnZXRwd3VpZChnZXR1aWQoKSk7CisgICAgc3RyaW5nQ29uY2F0KHNhZmVk
aXIsIHVzZXJJbmZvLT5wd19kaXIsICIvLndrMi1zYW5kYm94IiwgUEFUSFNJWkUpOworICAgIFNB
RkVESVIgPSBzYWZlZGlyOworCisgICAgdWlkX3Qgb2xkdWlkID0gZ2V0dWlkKCk7CisgICAgZ2lk
X3Qgb2xkZ2lkID0gZ2V0Z2lkKCk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2tzLgorICAgIGlmIChh
cmdjICE9IDMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTdGFydGluZyBTYW5kYm94UHJv
Y2VzcyByZXF1aXJlcyAzIHBhcmFtZXRlcnMhIEV4aXRpbmcuXG4iKTsKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH0KKworICAgIGlmIChnZXRldWlkKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJUaGUgc2FuZGJveCBpcyBub3Qgc2V0ZXVpZCByb290LCBhYm9ydGluZ1xuIik7CisgICAg
ICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIW9sZHVpZCkgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlRoZSBzYW5kYm94IGlzIG5vdCBkZXNpZ25lZCB0byBiZSBydW4gYnkgcm9v
dC5cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLy8gU2V0dXAgdGhlIHNh
bmRib3ggZW52aXJvbm1lbnQuCisgICAgaWYgKCFpbml0U2FuZGJveCgpKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiVGhlIGluaXRpYWxpemF0aW9uIG9mIHNhbmRib3ggZW52aXJvbm1lbnQg
ZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIXJlc3Ry
aWN0Q2FwYWJpbGl0aWVzKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZXR0aW5nIHRo
ZSBjYXBhYmlsaXRpZXMgZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisK
KyAgICBpZiAoIW1vdmVUb05ld1BJRE5hbWVzcGFjZSgpKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ291bGRuJ3QgbW92ZSB0byBuZXcgUElEIG5hbWVzcGFjZS5cbiIpOworICAgICAgICBy
ZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFwcmVwYXJlQW5kU3RhcnRDaHJvb3RIZWxwZXIo
KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNocm9vdEhlbHBlciBjb3VsZG4ndCBzdGFy
dGVkLlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIWRyb3BQcml2
aWxlZ2VzKG9sZHVpZCwgb2xkZ2lkKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxk
bid0IGRyb3AgdGhlIHByaXZpbGVnZXMuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K
KworICAgIC8vIElmIG91ciBlZmZlY3RpdmUgb3IgcmVhbCB1aWQvZ2lkIGlzIHN0aWxsIDAgKHRo
YXQncyByb290KSBvcgorICAgIC8vIHdlIGNhbiBzZXQgdGhlbSB0byAwLCB0aGVuIHRoZSBkcm9w
cGluZyBvZiBwcml2aWxlZ2VzIGZhaWxlZC4KKyAgICBpZiAoIWdldGV1aWQoKSB8fCAhZ2V0ZWdp
ZCgpIHx8ICFzZXR1aWQoMCkgfHwgIXNldGdpZCgwKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkRyb3BwaW5nIHByaXZpbGVnZXMgZmFpbGVkISAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vIFN0YXJ0IHRoZSBXZWJQcm9jZXNz
LgorICAgIGV4ZWNsKGFyZ3ZbMV0sIGFyZ3ZbMV0sIGFyZ3ZbMl0sIChjaGFyKikwKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51
eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDZhMjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2Fu
ZGJveEVudmlyb25tZW50TGludXguaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVu
YXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisjZGVmaW5lIFNhbmRib3hFbnZp
cm9ubWVudExpbnV4X2gKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisKKyNpZm5k
ZWYgQ0xPTkVfTkVXUElECisjZGVmaW5lIENMT05FX05FV1BJRCAgMHgyMDAwMDAwMAorI2VuZGlm
CisKKyNkZWZpbmUgU0JYX0QgIlNCWF9EIgorI2RlZmluZSBTQlhfSEVMUEVSX1BJRCAiU0JYX0hF
TFBFUl9QSUQiCisKKyNkZWZpbmUgTVNHX0NIUk9PVE1FICdDJworI2RlZmluZSBNU0dfQ0hST09U
RUQgJ08nCisKKyNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorCitjbGFzcyBTYW5kYm94RW52
aXJvbm1lbnRMaW51eCB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgc3RyaW5nQ29weShjaGFy
KiwgY29uc3QgY2hhciosIGNvbnN0IGludCk7CisgICAgc3RhdGljIGJvb2wgc3RyaW5nQ29weShj
aGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGludCwgY29uc3QgaW50KTsKKyAgICBzdGF0aWMgYm9v
bCBzdHJpbmdDb25jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgaW50
KTsKKyAgICBzdGF0aWMgYm9vbCBzdHJpbmdDb25jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBjb25z
dCBjaGFyKiwgY29uc3QgY2hhciogLCBjb25zdCBpbnQpOworICAgIHN0YXRpYyBib29sIGxhdW5j
aENocm9vdEhlbHBlcihjb25zdCBjaGFyKiwgaW50W10pOworICAgIHN0YXRpYyB2b2lkIHNldEVu
dmlyb25tZW50VmFyaWFibGVzRm9yQ2hyb290SGVscGVyKHBpZF90LCBpbnRbXSk7CisgICAgc3Rh
dGljIGJvb2wgc2V0Q2FwYWJpbGl0aWVzKGNhcF92YWx1ZV90KiwgaW50KTsKKyAgICBzdGF0aWMg
aW50IHNldER1bXBhYmxlKCk7CisgICAgc3RhdGljIGludCBkcm9wUHJpdmlsZWdlcyh1aWRfdCwg
Z2lkX3QpOworICAgIHN0YXRpYyBib29sIGZpbGVFeGlzdHMoY29uc3QgY2hhciopOworICAgIHN0
YXRpYyBtb2RlX3QgcGVybWlzc2lvbnMoY29uc3QgY2hhciopOworICAgIHN0YXRpYyBib29sIGNy
ZWF0ZURpcmVjdG9yeShjaGFyKiwgY29uc3QgY2hhciopOworICAgIHN0YXRpYyBib29sIGNyZWF0
ZURpcmVjdG9yeVBhdGgoY2hhciopOworICAgIHN0YXRpYyBib29sIGNyZWF0ZURldmljZUZpbGVz
KCk7CisgICAgc3RhdGljIGJvb2wgbW91bnRGaWxlU3lzdGVtcygpOworICAgIHN0YXRpYyBib29s
IGxpbmtGaWxlKGNoYXIqIHNvdXJjZUZpbGUsIGNoYXIqKTsKKyAgICBzdGF0aWMgYm9vbCBsaW5r
RGlyZWN0b3J5KGNoYXIqLCBjaGFyKik7CisgICAgc3RhdGljIGJvb2wgZmlsdGVyQW5kTGlua0xp
YnJhcnlEZXBlbmRlbmNpZXNGcm9tTGRjb25maWdPdXRwdXQoY2hhciosIGludCk7CisgICAgc3Rh
dGljIGJvb2wgY29sbGVjdFJ1blRpbWVEZXBlbmRlbmNpZXMoKTsKKyAgICBzdGF0aWMgYm9vbCBp
bml0U2FuZGJveCgpOworICAgIHN0YXRpYyBib29sIHJlc3RyaWN0Q2FwYWJpbGl0aWVzKCk7Cisg
ICAgc3RhdGljIGJvb2wgbW92ZVRvTmV3UElETmFtZXNwYWNlKCk7Cit9OworCisjZW5kaWYgLy8g
U2FuZGJveEVudmlyb25tZW50TGludXhfaAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDRmMzkz
MDcuLmY0Yjc3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMTMwLDYgKzEzMCw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFNoYXJlZC9XZWJVUkxSZXF1ZXN0LmggXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25z
ZS5oIFwKICAgICBTaGFyZWQvV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggXAorICAgIFNoYXJl
ZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIFwKICAgICBT
aGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oIFwKICAgICBTaGFy
ZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUElk
ZW50aWZpZXJEYXRhLmggXApAQCAtNDIyLDYgKzQyMyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFNo
YXJlZC9BUEkvYy9xdC9XS0ltYWdlUXQuY3BwIFwKICAgICBTaGFyZWQvQVBJQ2xpZW50VHJhaXRz
LmNwcCBcCiAgICAgU2hhcmVkL0FQSU9iamVjdC5jcHAgXAorICAgIFNoYXJlZC9saW51eC9TYW5k
Ym94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAgXAogICAgIFNoYXJlZC9QbHVn
aW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcCBcCiAgICAgU2hhcmVkL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGVOb25lLmNwcCBcCiAgICAgU2hhcmVkL1Bs
dWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVu
Y2hlclF0LmNwcAppbmRleCA2MGNkZTVmLi5hZDMyNjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAK
QEAgLTYyLDYgKzYyLDEwIEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+Cisj
ZW5kaWYKKwogI2lmIE9TKERBUldJTikKICNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgogI2lu
Y2x1ZGUgPHNlcnZlcnMvYm9vdHN0cmFwLmg+CkBAIC0xNjUsMzcgKzE2OSw0NyBAQCB2b2lkIFBy
b2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCiAgICAgY29tbWFuZExpbmUgPSBjb21tYW5k
TGluZS5hcmcoc29ja2V0c1swXSk7CiAjZW5kaWYKIAotICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNz
ID0gbmV3IFF0V2ViUHJvY2VzcygpOwotICAgIHdlYlByb2Nlc3MtPnNldFByb2Nlc3NDaGFubmVs
TW9kZShRUHJvY2Vzczo6Rm9yd2FyZGVkQ2hhbm5lbHMpOwotICAgIHdlYlByb2Nlc3MtPnN0YXJ0
KGNvbW1hbmRMaW5lKTsKKyAgICBRUHJvY2Vzcyogd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKKyNp
ZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIFFTdHJpbmcgc2FuZGJveENvbW1hbmRM
aW5lID0gUUxhdGluMVN0cmluZygiJTEgJTIgJTMiKTsKKyAgICBzYW5kYm94Q29tbWFuZExpbmUg
PSBzYW5kYm94Q29tbWFuZExpbmUuYXJnKFFDb3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9uRGly
UGF0aCgpICsgUUxhdGluMVN0cmluZygiL1NVSURTYW5kYm94SGVscGVyIikpOworICAgIHNhbmRi
b3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoZXhlY3V0YWJsZVBhdGhPZldl
YlByb2Nlc3MoKSk7CisgICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5l
LmFyZyhzb2NrZXRzWzBdKTsKKworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXIgPSBuZXcgUVBy
b2Nlc3MoKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zZXRQcm9jZXNzQ2hhbm5lbE1v
ZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxzKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVs
cGVyLT5zdGFydChzYW5kYm94Q29tbWFuZExpbmUpOworI2Vsc2UKKyAgICB3ZWJQcm9jZXNzT3JT
VUlESGVscGVyID0gbmV3IFF0V2ViUHJvY2VzcygpOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxw
ZXItPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6TWVyZ2VkQ2hhbm5lbHMpOworICAg
IHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnN0YXJ0KGNvbW1hbmRMaW5lKTsKKyNlbmRpZgogCiAj
aWYgT1MoVU5JWCkgJiYgIU9TKERBUldJTikKICAgICAvLyBEb24ndCBleHBvc2UgdGhlIHdlYiBz
b2NrZXQgdG8gcG9zc2libGUgZnV0dXJlIHdlYiBwcm9jZXNzZXMKICAgICB3aGlsZSAoZmNudGwo
c29ja2V0c1swXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQykgPT0gLTEpIHsKICAgICAgICAgaWYgKGVy
cm5vICE9IEVJTlRSKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAgICAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NP
clNVSURIZWxwZXI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAjZW5k
aWYKIAotICAgIGlmICghd2ViUHJvY2Vzcy0+d2FpdEZvclN0YXJ0ZWQoKSkgeworICAgIGlmICgh
d2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZvclN0YXJ0ZWQoKSkgewogICAgICAgICBxRGVi
dWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8PCBjb21tYW5kTGluZTsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAjaWYgT1MoREFSV0lOKQogICAgICAgICBtYWNoX3BvcnRfZGVhbGxv
Y2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBjb25uZWN0b3IpOwogICAgICAgICBtYWNoX3BvcnRfbW9k
X3JlZnMobWFjaF90YXNrX3NlbGYoKSwgY29ubmVjdG9yLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlW
RSwgLTEpOwogI2VuZGlmCi0gICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAgICAgICBkZWxl
dGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogI2lm
IE9TKFVOSVgpCi0gICAgc2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCB3ZWJQcm9jZXNzLT5waWQo
KSwgMTApOworICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgd2ViUHJvY2Vzc09yU1VJREhl
bHBlci0+cGlkKCksIDEwKTsKICNlbmRpZgotCi0gICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRj
aChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2Vz
cywgdGhpcywgd2ViUHJvY2VzcywgY29ubmVjdG9yKSk7CisgICAgUnVuTG9vcDo6bWFpbigpLT5k
aXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5n
UHJvY2VzcywgdGhpcywgd2ViUHJvY2Vzc09yU1VJREhlbHBlciwgY29ubmVjdG9yKSk7CiB9CiAK
IHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5k
ZXggNTM2Yjc3OS4uNzQ1Yjg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTYxLDcgKzYxLDggQEAgSU5D
TFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UgXAogICAg
ICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcyBcCiAg
ICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvcXQgXAotICAgICQkU09VUkNFX0RJUi9QbHVnaW5Q
cm9jZXNzCisgICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MgXAorICAgICQkU09VUkNFX0RJ
Ui9TYW5kYm94UHJvY2VzcyBcCiAKICMgVGhlIFdlYktpdDIgUXQgQVBJcyBkZXBlbmQgb24gcXdl
YmtpdGdsb2JhbC5oLCB3aGljaCBsaXZlcyBpbiBXZWJLaXQKIElOQ0xVREVQQVRIICs9ICQke1JP
T1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktpdC9xdC9BcGkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCmluZGV4IDE4ZjMwMzk0Li42N2Zk
NWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NN
YWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01h
aW5RdC5jcHAKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KICNpbmNs
dWRlIDxRVXJsPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPGVycm5v
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
c3lzL3dhaXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNjIsNiArNjQsMTQgQEAgZXh0ZXJuICJDIiBrZXJuX3Jl
dHVybl90IGJvb3RzdHJhcF9sb29rX3VwMihtYWNoX3BvcnRfdCwgY29uc3QgbmFtZV90LCBtYWNo
X3BvcnQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5E
Qk9YX0xJTlVYKQorI2RlZmluZSBTQlhfRCAiU0JYX0QiCisjZGVmaW5lIFNCWF9IRUxQRVJfUElE
ICJTQlhfSEVMUEVSX1BJRCIKKworI2RlZmluZSBNU0dfQ0hST09UTUUgJ0MnCisjZGVmaW5lIE1T
R19DSFJPT1RFRCAnTycKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKICNpZm5kZWYgTkRF
QlVHCiAjaWYgT1MoV0lORE9XUykKQEAgLTE0MiwxOCArMTUyLDgwIEBAIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVQcm94eSgpCiAgICAgUU5ldHdvcmtQcm94eUZhY3Rvcnk6OnNldFVzZVN5c3RlbUNv
bmZpZ3VyYXRpb24odHJ1ZSk7CiB9CiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQor
cGlkX3QgY2hyb290TWUoKQoreworICAgIGxvbmcgaW50IGZkID0gLTE7CisgICAgY2hhciogc2Fu
ZGJveFNvY2tldERlc2NyaXB0b3I7CisgICAgY2hhciogaGVscGVyUGlkOworICAgIGNoYXIgc2Fu
ZGJveE1lTXNnID0gTVNHX0NIUk9PVE1FOworICAgIHNzaXplX3QgY250OworICAgIHBpZF90IGhl
bHBlciA9IC0xOworCisgICAgLy8gR2V0IHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHNvY2tl
dHBhaXIuCisgICAgc2FuZGJveFNvY2tldERlc2NyaXB0b3IgPSBnZXRlbnYoU0JYX0QpOworICAg
IGlmICghc2FuZGJveFNvY2tldERlc2NyaXB0b3IpCisgICAgICAgIHJldHVybiAtMTsKKworICAg
IGVycm5vID0gMDsKKyAgICBmZCA9IHN0cnRvbChzYW5kYm94U29ja2V0RGVzY3JpcHRvciwgKGNo
YXIgKiopIDAsIDEwKTsKKyAgICBpZiAoZXJybm8gfHwgKGZkID09IC0xKSkKKyAgICAgICAgcmV0
dXJuIC0xOworCisgICAgLy8gR2V0IHRoZSBQSUQgb2YgdGhlIHNldHVpZCBoZWxwZXIuCisgICAg
aGVscGVyUGlkID0gZ2V0ZW52KFNCWF9IRUxQRVJfUElEKTsKKworICAgIC8vIElmIG5vIFBJRCBp
cyBhdmFpbGFibGUsIHRoZSBkZWZhdWx0IG9mIC0xIHdpbGwgZG8uCisgICAgaWYgKGhlbHBlclBp
ZCkgeworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIGhlbHBlciA9IHN0cnRvbChoZWxwZXJQ
aWQsIChjaGFyICoqKSAwLCAxMCk7CisgICAgICAgIGlmIChlcnJubyB8fCAoaGVscGVyID09IC0x
KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLyBTZW5kIHRoZSBjaHJv
b3RtZSBtZXNzYWdlIHRvIHRoZSBoZWxwZXIuCisgICAgY250ID0gd3JpdGUoZmQsICZzYW5kYm94
TWVNc2csIDEpOworICAgIGlmIChjbnQgIT0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNocm9vdG1lIG1zZyBmYWlsZWQgdG8gd3JpdGU6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vIFJlYWQgdGhlIGFja25vd2xlZGdl
bWVudCBtZXNzYWdlIGZyb20gdGhlIGhlbHBlci4KKyAgICBjbnQgPSByZWFkKGZkLCAmc2FuZGJv
eE1lTXNnLCAxKTsKKyAgICBpZiAoKGNudCAhPSAxKSB8fCAoc2FuZGJveE1lTXNnICE9IE1TR19D
SFJPT1RFRCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciByZWFkaW5nIGNvbmZp
cm1hdGlvbiBtZXNzYWdlXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjbG9z
ZShmZCk7CisKKyAgICAvLyBXYWl0IGZvciBoZWxwZXIgcHJvY2Vzcy4KKyAgICBpbnQgd2FpdGVk
UGlkPSB3YWl0cGlkKGhlbHBlciwgMCwgMCk7CisgICAgaWYgKHdhaXRlZFBpZCAhPSAtMSAmJiAo
KGhlbHBlciA9PSAtMSkgfHwgKHdhaXRlZFBpZCA9PSBoZWxwZXIpKSkKKyAgICAgICAgcmV0dXJu
IHdhaXRlZFBpZDsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHdhaXQgZm9yIHRoZSBo
ZWxwZXIgcHJvY2VzczogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuIC0xOwor
fQorI2VuZGlmCisKIFFfREVDTF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxp
Y2F0aW9uKiBhcHApCiB7Ci0gICAgaW5pdGlhbGl6ZVByb3h5KCk7CisjaWYgRU5BQkxFKFNVSURf
U0FOREJPWF9MSU5VWCkKKyAgICBwaWRfdCBoZWxwZXI7CisgICAgaGVscGVyID0gY2hyb290TWUo
KTsKIAorICAgIGlmIChoZWxwZXIgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJB
c2tpbmcgZm9yIGNocm9vdCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K
KyNlbmRpZgorICAgIGluaXRpYWxpemVQcm94eSgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjpp
bml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAgICAKKwogI2lmIFVTRShRVEtJVCkKICAgICBJbml0
V2ViQ29yZVN5c3RlbUludGVyZmFjZUZvcldLMigpOwogI2VuZGlmCi0KICAgICAvLyBDcmVhdGUg
dGhlIGNvbm5lY3Rpb24uCiAgICAgaWYgKGFwcC0+YXJndW1lbnRzKCkuc2l6ZSgpIDw9IDEpIHsK
ICAgICAgICAgcURlYnVnKCkgPDwgIkVycm9yOiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiI7
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9U
b29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggY2I1M2IyNS4uNzRi
ZTA3MyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBt
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMTE3LDYg
KzExNyw3IEBAIG15ICgKICAgICAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAgICAgJHNxbERhdGFi
YXNlU3VwcG9ydCwKICAgICAkc3R5bGVTY29wZWRTdXBwb3J0LAorICAgICRzdWlkTGludXhTYW5k
Ym94LAogICAgICRzdmdET01PYmpDQmluZGluZ3NTdXBwb3J0LAogICAgICRzdmdGb250c1N1cHBv
cnQsCiAgICAgJHN2Z1N1cHBvcnQsCkBAIC0zNjMsNiArMzY0LDkgQEAgbXkgQGZlYXR1cmVzID0g
KAogICAgIHsgb3B0aW9uID0+ICJzdHlsZS1zY29wZWQiLCBkZXNjID0+ICJUb2dnbGUgU3R5bGUg
U2NvcGVkIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1RZTEVfU0NPUEVEIiwg
ZGVmYXVsdCA9PiBpc0JsYWNrQmVycnkoKSwgdmFsdWUgPT4gXCRzdHlsZVNjb3BlZFN1cHBvcnQg
fSwKIAorICAgIHsgb3B0aW9uID0+ICJzdWlkLWxpbnV4LXNhbmRib3giLCBkZXNjID0+ICJUb2dn
bGUgc3VpZCBzYW5kYm94IGZvciBsaW51eCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVUlE
X1NBTkRCT1hfTElOVVgiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkc3VpZExpbnV4U2FuZGJv
eCB9LAorCiAgICAgeyBvcHRpb24gPT4gInN2ZyIsIGRlc2MgPT4gIlRvZ2dsZSBTVkcgc3VwcG9y
dCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVkciLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+
IFwkc3ZnU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1
cmVzL2RlZmF1bHRfcG9zdC5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1
bHRfcG9zdC5wcmYKaW5kZXggYWEyMWI1ZC4uYWU3YTMwMSAxMDA2NDQKLS0tIGEvVG9vbHMvcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21r
c3BlY3MvZmVhdHVyZXMvZGVmYXVsdF9wb3N0LnByZgpAQCAtMjg3LDMgKzI4Nyw0IEBAIGZvcih0
YXJnZXQsICQkbGlzdCgkJHVuaXF1ZShERUZBVUxUX1RBUkdFVFMpKSkgewogREVTVERJUiA9ICQk
cmVwbGFjZShERVNURElSLCBeJCR7Uk9PVF9CVUlMRF9ESVJ9LCAkJHtCVUlMRF9ST09UX1JFTEFU
SVZFX1RPX09VVF9QV0R9KQogCiBsb2FkKGRlZmF1bHRfcG9zdCkgIyBMb2FkIFF0J3MgZGVmYXVs
dHMKK1FNQUtFX0xJQlNfT1BFTkdMICs9IC1sY2FwIC1sZGwKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCi0tIAoxLjcuOS41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169192</attachid>
            <date>2012-10-17 09:05:47 -0700</date>
            <delta_ts>2012-10-19 11:09:13 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-9.5.patch</filename>
            <type>text/plain</type>
            <size>43196</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA3MTU3NjNlODI2MzZiNWZhYTY1Zjg2MDQ2ZDQ3Mzc3MTlhODNiNDk2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBXZWQsIDE3IE9jdCAyMDEyIDE3OjQ2OjAyICswMjAwClN1YmplY3Q6IFtQQVRDSF0gZmVsdG9s
dCA5LjUKCi0tLQogLi4uL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcgfCAgICAzICstCiBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8gICAgICAg
ICAgICAgICAgICB8ICAgMjUgKwogLi4uL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVu
dExpbnV4LmNwcCAgICAgfCAgNzAzICsrKysrKysrKysrKysrKysrKysrCiAuLi4vbGludXgvU2Fu
ZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCB8ICAgNjYgKysKIFNvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAuLi4v
VUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCAgICB8ICAgMzQgKy0K
IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MyArLQogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcCAg
fCAgIDc4ICsrKy0KIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSAgICAg
ICAgICAgIHwgICAgNCArCiBUb29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9z
dC5wcmYgICAgICB8ICAgIDEgKwogMTAgZmlsZXMgY2hhbmdlZCwgOTA0IGluc2VydGlvbnMoKyks
IDE1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NhbmRi
b3hQcm9jZXNzLnBybwogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9s
aW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2Fu
ZGJveEVudmlyb25tZW50TGludXguaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIvU291cmNlL1dlYktpdDIvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5kZXggMDE2NDBmNC4uYTJkZjExNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMu
eGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcKQEAgLTEyNiw2ICsxMjYsNyBAQCBFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCA9
IEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UOwogRU5BQkxFX1FVT1RBID0gOwogRU5BQkxFX1JFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FID0gRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FOwogRU5B
QkxFX1NDUklQVEVEX1NQRUVDSCA9IDsKK0VOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVggPSA7CiBF
TkFCTEVfU0hBRE9XX0RPTSA9IDsKIEVOQUJMRV9TSEFSRURfV09SS0VSUyA9IEVOQUJMRV9TSEFS
RURfV09SS0VSUzsKIEVOQUJMRV9TUUxfREFUQUJBU0UgPSBFTkFCTEVfU1FMX0RBVEFCQVNFOwpA
QCAtMTQ4LDQgKzE0OSw0IEBAIEVOQUJMRV9XRUJfVElNSU5HID0gOwogRU5BQkxFX1dPUktFUlMg
PSBFTkFCTEVfV09SS0VSUzsKIEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVf
REVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRf
Q0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05fQVBJKSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9D
SEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVD
T1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0VYQ0xVU0lPTlMpICQoRU5BQkxFX0NTU19DT01Q
T1NJVElORykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NTU19ISUVSQVJDSElFUykg
JChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xV
VElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJM
RV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9DU1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9D
U1MzX1RFWFRfREVDT1JBVElPTikgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVO
QUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFC
TEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJM
RV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RJQUxPR19FTEVNRU5UKSAkKEVOQUJMRV9E
SVJFQ1RPUllfVVBMT0FEKSAkKEVOQUJMRV9EUkFHR0FCTEVfUkVHSU9OKSAkKEVOQUJMRV9GSUxF
X1NZU1RFTSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5B
QkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFHRV9E
T01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVOQUJMRV9J
Q09OREFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykgJChFTkFCTEVfSU5ERVhFRF9E
QVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9S
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUUp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9N
T05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUsp
ICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9S
X1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChMRUdBQ1lfVkVORE9S
X1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MSU5LX1BSRUZF
VENIKSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9N
RURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVSX0VM
RU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01VVEFU
SU9OX09CU0VSVkVSUykgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxF
X05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkpICQoRU5BQkxFX1BE
RktJVF9QTFVHSU4pICQoRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQpICQoRU5BQkxFX1FVT1RBKSAk
KEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNI
KSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVf
U1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFC
TEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RF
WFRfQVVUT1NJWklORykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxF
X1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfVU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURF
TykgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVE
SU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9X
T1JLRVJTKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JF
TkRFUklORykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJ
T05fQVBJKSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFC
TEVfQ1NQX05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVf
Q1NTX0VYQ0xVU0lPTlMpICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0ZJ
TFRFUlMpICQoRU5BQkxFX0NTU19ISUVSQVJDSElFUykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVO
VEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lP
TlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAk
KEVOQUJMRV9DU1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9DU1MzX1RFWFRfREVDT1JBVElPTikgJChF
TkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkg
JChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykg
JChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQo
RU5BQkxFX0RJQUxPR19FTEVNRU5UKSAkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAkKEVOQUJM
RV9EUkFHR0FCTEVfUkVHSU9OKSAkKEVOQUJMRV9GSUxFX1NZU1RFTSkgJChFTkFCTEVfRklMVEVS
UykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dF
T0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElORykgJChF
TkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lG
UkFNRV9TRUFNTEVTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5QVVRf
U1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RB
VEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQ
RV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdB
Q1lfTk9USUZJQ0FUSU9OUykgJChMRUdBQ1lfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdB
Q1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9MSU5LX1BSRVJF
TkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01F
RElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAk
KEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01VVEFUSU9OX09CU0VSVkVSUykgJChFTkFCTEVf
TkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxF
X1BBR0VfVklTSUJJTElUWV9BUEkpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BS
T0dSRVNTX0VMRU1FTlQpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNIKSAkKEVOQUJMRV9TVUlEX1NBTkRCT1hf
TElOVVgpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVO
QUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAk
KEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFC
TEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChF
TkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxF
X1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dF
Ql9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5B
QkxFX1dPUktFUlMpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2FuZGJveFByb2Nlc3MucHJvIGIvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjA1OTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KQEAgLTAsMCArMSwyNSBAQAor
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisjIFByb2plY3QgZmlsZSBmb3IgdGhlIFdlYktpdDIgc2FuZGJveCBwcm9j
ZXNzIGJpbmFyeQorIworIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3
IG9mIHRoZSBidWlsZCBzeXN0ZW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitURU1QTEFURSA9IGFwcAorCitU
QVJHRVQgPSBTVUlEU2FuZGJveEhlbHBlcgorREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9i
aW4KKworQ09ORklHICs9IGNvbnNvbGUKK0NPTkZJRyAtPSBxdAorCitTT1VSQ0VTICs9IFNoYXJl
ZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKK0hFQURF
UlMgKz0gU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4
LmgKKworSU5TVEFMTFMgKz0gdGFyZ2V0CitMSUJTICs9IC1sY2FwIC1sZGwKKworaXNFbXB0eShJ
TlNUQUxMX0JJTlMpIHsKKyAgICB0YXJnZXQucGF0aCA9ICQkW1FUX0lOU1RBTExfQklOU10KK30g
ZWxzZSB7CisgICAgdGFyZ2V0LnBhdGggPSAkJElOU1RBTExfQklOUworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9u
bWVudExpbnV4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vz
cy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjViY2M3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKQEAgLTAs
MCArMSw3MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVn
ZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIgorCisjaWYgRU5BQkxFKFNVSURfU0FO
REJPWF9MSU5VWCkKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2lu
Y2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNp
bmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxsaW5rLmg+Cisj
aW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+
CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5j
bHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lz
L3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8
dXRpbWUuaD4KKworI2lmbmRlZiBfR05VX1NPVVJDRQorI2RlZmluZSBfR05VX1NPVVJDRQorI2Vu
ZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyKiBTQUZFRElSOworc3RhdGljIGNvbnN0IGludCBQQVRI
U0laRSA9IDUxMjsKKworc3RhdGljIGJvb2wgc3RyaW5nQ29weShjaGFyKiBkZXN0aW5hdGlvbiwg
Y29uc3QgY2hhciogc291cmNlLCBjb25zdCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3Ro
ID0gc3RybGVuKHNvdXJjZSk7CisgICAgaWYgKGxlbmd0aCA+IG1heFNpemUgLSAxKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IFRvbyBsb25nIHN0cmluZy5cbiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBs
ZW5ndGgpOworICAgIGRlc3RpbmF0aW9uW2xlbmd0aF0gPSAnXDAnOworICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgYm9vbCBzdHJpbmdDb3B5KGNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBj
aGFyKiBzb3VyY2UsIGNvbnN0IGludCBsZW5ndGgsIGNvbnN0IGludCBtYXhTaXplKQoreworICAg
IGlmIChsZW5ndGggPiBtYXhTaXplIC0gMSB8fCBsZW5ndGggPiBzdHJsZW4oc291cmNlKSkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBUb28gbG9uZyBzdHJpbmcuXG4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJj
ZSwgbGVuZ3RoKTsKKyAgICBkZXN0aW5hdGlvbltsZW5ndGhdID0gJ1wwJzsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworc3RhdGljIGJvb2wgc3RyaW5nQ29uY2F0KGNoYXIqIGRlc3RpbmF0aW9uLCBj
b25zdCBjaGFyKiBzb3VyY2UxLCBjb25zdCBjaGFyKiBzb3VyY2UyLCBjb25zdCBpbnQgbWF4U2l6
ZSkKK3sKKyAgICBpbnQgbGVuZ3RoMSA9IHN0cmxlbihzb3VyY2UxKTsKKyAgICBpbnQgbGVuZ3Ro
MiA9IHN0cmxlbihzb3VyY2UyKTsKKyAgICBpZiAobGVuZ3RoMSArIGxlbmd0aDIgPiBtYXhTaXpl
IC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBUb28gbG9uZyBzdHJpbmcu
XG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVzdGluYXRp
b24sIHNvdXJjZTEsIGxlbmd0aDEpOworICAgIG1lbWNweShkZXN0aW5hdGlvbiArIGxlbmd0aDEs
IHNvdXJjZTIsIGxlbmd0aDIpOworICAgIGRlc3RpbmF0aW9uW2xlbmd0aDEgKyBsZW5ndGgyXSA9
ICdcMCc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHN0cmluZ0NvbmNhdChj
aGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlMSwgY29uc3QgY2hhciogc291cmNl
MiwgY29uc3QgY2hhciogc291cmNlMywgY29uc3QgaW50IG1heFNpemUpCit7CisgICAgaW50IGxl
bmd0aDEgPSBzdHJsZW4oc291cmNlMSk7CisgICAgaW50IGxlbmd0aDIgPSBzdHJsZW4oc291cmNl
Mik7CisgICAgaW50IGxlbmd0aDMgPSBzdHJsZW4oc291cmNlMyk7CisgICAgaWYgKGxlbmd0aDEg
KyBsZW5ndGgyICsgbGVuZ3RoMyA+IG1heFNpemUgLSAxKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRXJyb3I6IFRvbyBsb25nIHN0cmluZy5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlMSwgbGVuZ3RoMSk7CisgICAg
bWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSwgc291cmNlMiwgbGVuZ3RoMik7CisgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSArIGxlbmd0aDIsIHNvdXJjZTMsIGxlbmd0aDMpOwor
ICAgIGRlc3RpbmF0aW9uW2xlbmd0aDEgKyBsZW5ndGgyICsgbGVuZ3RoM10gPSAnXDAnOworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBsYXVuY2hDaHJvb3RIZWxwZXIoY29uc3Qg
Y2hhciogc2FmZWRpciwgaW50IHN2W10pCit7CisgICAgc3RydWN0IHJsaW1pdCBub0ZpbGUgPSB7
MCwgMH07CisgICAgLy8gV2Ugc2hhcmUgb3VyIEZTIHdpdGggYW4gdW50cnVzdGVkIHByb2Nlc3Ms
IHNvCisgICAgLy8gd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgY2FuJ3Qgb3BlbiBhbnl0aGluZyBi
eSBtaXN0YWtlLgorICAgIC8vIEhvd2V2ZXIsIGlmIHdlIGRvbid0IGRyb3AgQ0FQX1NZU19SRVNT
T1VSQ0UgaXQncyB1c2VsZXNzCisgICAgaWYgKHNldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmbm9G
aWxlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkhlbHBlciBjb3VsZG4ndCBzZXQgdGhl
IHJlc291cmNlbGltaXQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChF
WElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIGlmIChjbG9zZShzdlsxXSkgPT0gLTEpIHsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjbG9zZSBzb2NrZXQgJWQ6ICVzXG4iLCBz
dlsxXSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAg
IH0KKworICAgIC8vIFJlYWQgdGhlICJjaHJvb3RtZSIgbWVzc2FnZSAoJ0MnKSBmcm9tIHRoZSBz
b2NrZXQuCisgICAgY2hhciBtc2c7CisgICAgc3NpemVfdCBjbnQgPSByZWFkKHN2WzBdLCAmbXNn
LCAxKTsKKyAgICBpZiAoIWNudCkKKyAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIGVs
c2UgaWYgKGNudCAhPSAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcmVh
ZCB0aGUgcHJvcGVyIGNocm9vdG1lIG1zZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBpZiAobXNnICE9IE1TR19DSFJP
T1RNRSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkhlbHBlcjogUmVjaWV2ZWQgd3Jvbmcg
bWVzc2FnZVxuIik7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBp
ZiAoY2hkaXIoc2FmZWRpcikgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3Vs
ZG4ndCBjaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvICVzLjogJXNcbiIsIHNhZmVkaXIs
IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisK
KyAgICBpZiAoY2hyb290KHNhZmVkaXIpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ2hyb290aW5nIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4
aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBpZiAoY2hkaXIoIi8iKSA9PSAtMSkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNoYW5nZSB0aGUgd29ya2luZyBkaXJl
Y3RvcnkgdG8gLy46ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7CisgICAgfQorCisgICAgLy8gU2VuZGluZyBhY2tub3dsZWRnZW1lbnQgdG8gdGhl
IFdlYlByb2Nlc3MgdGhhdCBpdCdzIGluc2lkZSB0aGUgc2FuZGJveCBhbHJlYWR5LgorICAgIG1z
ZyA9IE1TR19DSFJPT1RFRDsKKyAgICBjbnQgPSB3cml0ZShzdlswXSwgJm1zZywgMSk7CisgICAg
aWYgKGNudCA9PSAxKQorICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiSGVscGVyOiBjb3VsZG4ndCB3cml0ZSBhY2tub3dsZWRn
ZW1lbnQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIkhlbHBlcjogY29kZXBhdGggZXJyb3I6
ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKwor
c3RhdGljIGJvb2wgc2V0RW52aXJvbm1lbnRWYXJpYWJsZXNGb3JDaHJvb3RIZWxwZXIocGlkX3Qg
cGlkLCBpbnQgc3ZbXSkKK3sKKyAgICBjb25zdCBpbnQgZGVzY3JpcHRvclNpemUgPSAxMTsKKyAg
ICBjaGFyIHNvY2tldERlc2NyaXB0b3JbZGVzY3JpcHRvclNpemVdOworICAgIGNoYXIgc2FuZGJv
eEhlbHBlclBJRFtkZXNjcmlwdG9yU2l6ZV07CisgICAgLy8gRXhwb3J0IHRoZSBQSUQgb2YgdGhl
IGhlbHBlciBhbmQgdGhlIHNvY2tldGRlc2NyaXB0b3IgdG8gdGhlIGVudmlyb25tZW50LgorICAg
IGludCBjbnQgPSBzbnByaW50ZihzYW5kYm94SGVscGVyUElELCBzaXplb2Yoc2FuZGJveEhlbHBl
clBJRCksICIldSIsIHBpZCk7CisgICAgaWYgKGNudCA8IDAgfHwgY250ID49IHNpemVvZihzYW5k
Ym94SGVscGVyUElEKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNucHJpbnRmIG9mIHRo
ZSBQSUQgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChzZXRlbnYoU0JYX0hFTFBFUl9QSUQsIHNhbmRib3hIZWxw
ZXJQSUQsIDEpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgc2V0
IHRoZSBTQlhfSEVMUEVSX1BJRCBlbnYgdmFyaWFibGU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY250ID0gc25wcmludGYoc29j
a2V0RGVzY3JpcHRvciwgc2l6ZW9mKHNvY2tldERlc2NyaXB0b3IpLCAiJXUiLCBzdlsxXSk7Cisg
ICAgaWYgKGNudCA8IDAgfHwgY250ID49IHNpemVvZihzb2NrZXREZXNjcmlwdG9yKSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgInNucHJpbnRmIG9mIHRoZSBmaWxlZGVzY3JpcHRvciBmYWls
ZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKHNldGVudihTQlhfRCwgc29ja2V0RGVzY3JpcHRvciwgMSkgPT0gLTEpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTYXZpbmcgdGhlIGhlbHBlcnMgZmlsZWRlc2NyaXB0
b3IgaW50byBhbiBlbnYgdmFyaWFibGUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjbG9zZShzdlswXSkgPT0g
LTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9zaW5nIG9mICVkIGZhaWxlZDogJXNc
biIsIHN2WzBdLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBwcmVwYXJlQW5kU3RhcnRDaHJv
b3RIZWxwZXIoKQoreworICAgIGludCBzdlsyXTsKKyAgICByZWdpc3RlciBwaWRfdCBwaWQ7Cisg
ICAgY2hhciogc2FmZWRpciA9IDA7CisgICAgc3RydWN0IHN0YXQgc2FmZWRpckluZm87CisKKyAg
ICBpZiAoIWxzdGF0KFNBRkVESVIsICZzYWZlZGlySW5mbykgJiYgU19JU0RJUihzYWZlZGlySW5m
by5zdF9tb2RlKSkKKyAgICAgICAgc2FmZWRpciA9IGNvbnN0X2Nhc3Q8Y2hhcio+KFNBRkVESVIp
OworICAgIGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkhlbHBlcjogJXMgZG9lcyBu
b3QgZXhpc3QhXG4iLCBTQUZFRElSKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzdikgPT0gLTEpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgc29ja2V0cGFpcjogJXNc
biIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBwaWQgPSBzeXNjYWxsKFNZU19jbG9uZSwgQ0xPTkVfRlMgfCBTSUdDSExELCAwLCAwLCAwKTsK
KworICAgIHN3aXRjaCAocGlkKSB7CisgICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJDbG9uZSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBJbiB0aGUgY2hpbGQgcHJvY2VzcyB3ZSBzdGFydCB0aGUgY2hy
b290IGhlbHBlciB3aGF0IHdhaXRzIGZvciB0aGUgJ0MnIChzYW5kYm94bWUhKQorICAgIC8vIG1l
c3NhZ2UgZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKyAgICAvLyBJbiB0aGUgcGFyZW50IHByb2Nlc3Mg
dGhlIHBpZCBvZiB0aGUgaGVscGVyIGFuZCB0aGUgc29ja2V0IHdoYXQgdGhlIGhlbHBlciBhbmQg
dGhlIFdlYlByb2Nlc3MKKyAgICAvLyBjYW4gY29tbXVuaWNhdGUgb24gYXJlIGV4cG9ydGVkIGlu
dG8gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzIHdheSB0aGV5IHdpbGwgYmUgYXZhaWxhYmxl
CisgICAgLy8gZnJvbSB0aGUgV2ViUHJvY2VzcyB0b28uCisgICAgY2FzZSAwOgorICAgICAgICBs
YXVuY2hDaHJvb3RIZWxwZXIoc2FmZWRpciwgc3YpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBzZXRFbnZpcm9ubWVudFZhcmlhYmxlc0ZvckNocm9vdEhlbHBlcihwaWQsIHN2KTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFNldCBjYXBhYmlsaXRpZXMgaW4gYWxsIHRo
cmVlIHNldHMuCitzdGF0aWMgYm9vbCBzZXRDYXBhYmlsaXRpZXMoY2FwX3ZhbHVlX3QqIGNhcGFi
aWxpdHlMaXN0LCBpbnQgbGVuZ3RoKQoreworICAgIGNhcF90IGNhcGFiaWxpdGllczsKKworICAg
IC8vIENhcGFiaWxpdGllcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBmbGFncy4KKyAg
ICBjYXBhYmlsaXRpZXMgPSBjYXBfaW5pdCgpOworICAgIGlmICghY2FwYWJpbGl0aWVzKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHJvY2VzcyBjYXBhYmlsaXRpZXMgaW5pdCBmYWlsZWQ6
ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKGNhcF9jbGVhcihjYXBhYmlsaXRpZXMpKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ2xlYXJpbmcgcHJvY2VzcyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjYXBh
YmlsaXR5TGlzdCAmJiBsZW5ndGgpIHsKKyAgICAgICAgaWYgKGNhcF9zZXRfZmxhZyhjYXBhYmls
aXRpZXMsIENBUF9FRkZFQ1RJVkUsIGxlbmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9TRVQpCisg
ICAgICAgICAgICB8fCBjYXBfc2V0X2ZsYWcoY2FwYWJpbGl0aWVzLCBDQVBfSU5IRVJJVEFCTEUs
IGxlbmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9TRVQpCisgICAgICAgICAgICB8fCBjYXBfc2V0
X2ZsYWcoY2FwYWJpbGl0aWVzLCBDQVBfUEVSTUlUVEVELCBsZW5ndGgsIGNhcGFiaWxpdHlMaXN0
LCBDQVBfU0VUKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgc2V0IHBy
b2Nlc3MgY2FwYWJpbGl0eSBmbGFnczogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAg
ICAgICBjYXBfZnJlZShjYXBhYmlsaXRpZXMpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNhcF9zZXRfcHJvYyhjYXBhYmlsaXRpZXMpKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IHNldCBwcm9jZXNzIGNhcGFiaWxpdGll
czogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNhcF9mcmVlKGNhcGFiaWxpdGll
cyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY2FwX2ZyZWUoY2FwYWJpbGl0
aWVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBzZXREdW1wYWJsZSh2b2lk
KQoreworICAgIGlmIChwcmN0bChQUl9TRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApID09IC0xKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2V0dGluZyBkdW1wbGFibGUgaXMgZmFpbGVkOiAl
c1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgZHJvcFByaXZpbGVnZXModWlkX3QgdWlkLCBnaWRf
dCBnaWQpCit7CisgICAgLy8gV2UgYmVjb21lIGV4cGxpY2l0ZWx5IG5vbiBkdW1wYWJsZS4gTm90
ZSB0aGF0IG5vcm1hbGx5IHNldHVpZCgpIHRha2VzIGNhcmUKKyAgICAvLyBvZiB0aGlzIHdoZW4g
d2Ugc3dpdGNoIGV1aWQsIGJ1dCB3ZSB3YW50IHRvIHN1cHBvcnQgY2FwYWJpbGl0eSBGUy4KKyAg
ICBpZiAoc2V0RHVtcGFibGUoKQorICAgICAgICB8fCBzZXRyZXNnaWQoZ2lkLCBnaWQsIGdpZCkK
KyAgICAgICAgfHwgc2V0cmVzdWlkKHVpZCwgdWlkLCB1aWQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gRHJvcCBhbGwgY2FwYWJpbGl0aWVzLiBBZ2Fpbiwgc2V0dWlkKCkgbm9ybWFs
bHkgdGFrZXMgY2FyZSBvZiB0aGlzIGlmIHdlIGhhZCBldWlkIDAuCisgICAgcmV0dXJuIHNldENh
cGFiaWxpdGllcygwLCAwKTsKK30KKworc3RhdGljIGJvb2wgZmlsZUV4aXN0cyhjb25zdCBjaGFy
KiBwYXRoKQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIGlmIChsc3RhdChwYXRo
LCAmZmlsZVN0YXQpID09IC0xICYmIGVycm5vID09IEVOT0VOVCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgbW9kZV90IHBlcm1pc3Npb25zKGNv
bnN0IGNoYXIqIGRpcmVjdG9yeSkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICBz
dGF0KGRpcmVjdG9yeSwgJmZpbGVTdGF0KTsKKyAgICByZXR1cm4gZmlsZVN0YXQuc3RfbW9kZTsK
K30KKworc3RhdGljIGJvb2wgY3JlYXRlRGlyZWN0b3J5KGNoYXIqIHBhdGhUb0NyZWF0ZSwgY29u
c3QgY2hhciogbmV4dERpcmVjdG9yeVRvQ3JlYXRlKQoreworICAgIGNoYXIgcGF0aFRvQ3JlYXRl
SW5TYW5kYm94W1BBVEhTSVpFXTsKKyAgICBzdHJuY2F0KHBhdGhUb0NyZWF0ZSwgbmV4dERpcmVj
dG9yeVRvQ3JlYXRlLCBzdHJsZW4obmV4dERpcmVjdG9yeVRvQ3JlYXRlKSk7CisgICAgbW9kZV90
IG1vZGUgPSBwZXJtaXNzaW9ucyhwYXRoVG9DcmVhdGUpOworCisgICAgc3RyaW5nQ29uY2F0KHBh
dGhUb0NyZWF0ZUluU2FuZGJveCwgU0FGRURJUiwgcGF0aFRvQ3JlYXRlLCBQQVRIU0laRSk7CisK
KyAgICBpZiAobWtkaXIocGF0aFRvQ3JlYXRlSW5TYW5kYm94LCBtb2RlKSA9PSAtMSAmJiBlcnJu
byAhPSBFRVhJU1QpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDcmVhdGlvbiBvZiAlcyBm
YWlsZWQ6ICVzXG4iLCBwYXRoVG9DcmVhdGVJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsK
KyAgICBsc3RhdChwYXRoVG9DcmVhdGUsICZmaWxlSW5mbyk7CisgICAgaWYgKDo6Y2hvd24ocGF0
aFRvQ3JlYXRlSW5TYW5kYm94LCBmaWxlSW5mby5zdF91aWQsIGZpbGVJbmZvLnN0X2dpZCkgPT0g
LTEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoOjpjaG1vZChwYXRoVG9DcmVhdGVJ
blNhbmRib3gsIGZpbGVJbmZvLnN0X21vZGUpID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZURpcmVjdG9yeVBhdGgo
Y2hhciogcGF0aCkKK3sKKyAgICBjaGFyIGZ1bGxQYXRoSW5TYW5kYm94W1BBVEhTSVpFXTsKKyAg
ICBzdHJpbmdDb25jYXQoZnVsbFBhdGhJblNhbmRib3gsIFNBRkVESVIsIHBhdGgsIFBBVEhTSVpF
KTsKKworICAgIGlmIChmaWxlRXhpc3RzKGZ1bGxQYXRoSW5TYW5kYm94KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBjaGFyIGFscmVhZHlDcmVhdGVkUGF0aFtQQVRIU0laRV07CisgICAg
YWxyZWFkeUNyZWF0ZWRQYXRoWzBdID0gJ1wwJzsKKyAgICAvLyBzdGFydFBvcyBpcyAocGF0aCAr
IDEpIGJlY2F1c2Ugd2Ugc2tpcCB0aGUgZmlyc3QgJy8nLgorICAgIGNoYXIqIHN0YXJ0UG9zID0g
cGF0aCArIDE7CisgICAgY2hhciogZW5kUG9zOworICAgIHdoaWxlICgoZW5kUG9zID0gc3RyY2hy
KHN0YXJ0UG9zLCAnLycpKSkgeworICAgICAgICBjaGFyIG5leHREaXJlY3RvcnlUb0NyZWF0ZVsy
NTZdOworICAgICAgICBzdHJpbmdDb3B5KG5leHREaXJlY3RvcnlUb0NyZWF0ZSwgc3RhcnRQb3Mg
LSAxLCBlbmRQb3MgLSBzdGFydFBvcyArIDEsIDI1Nik7CisgICAgICAgIGlmICghY3JlYXRlRGly
ZWN0b3J5KGFscmVhZHlDcmVhdGVkUGF0aCwgbmV4dERpcmVjdG9yeVRvQ3JlYXRlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAg
IH0KKyAgICAvLyBDcmVhdGUgdGhlIGxhc3QgZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnlwYXRo
LgorICAgIGFscmVhZHlDcmVhdGVkUGF0aFswXSA9ICdcMCc7CisgICAgcmV0dXJuIGNyZWF0ZURp
cmVjdG9yeShhbHJlYWR5Q3JlYXRlZFBhdGgsIHBhdGgpOworfQorCitzdGF0aWMgYm9vbCBjcmVh
dGVEZXZpY2VGaWxlcygpCit7CisgICAgY2hhciBkZXZbXSA9ICIvZGV2LyI7CisgICAgaWYgKCFj
cmVhdGVEaXJlY3RvcnlQYXRoKGRldikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25z
dCBjaGFyKiBkZXZpY2VzWzJdID0geyAiL2Rldi9yYW5kb20iLCAiL2Rldi91cmFuZG9tIiB9Owor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0
YXR1czsKKyAgICAgICAgaWYgKGxzdGF0KGRldmljZXNbaV0sICZzdGF0dXMpID09IC0xKSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG9idGFpbmluZyBpbmZvcm1hdGlv
biBhYm91dCBkZXZpY2UgZmlsZSAoJXMpOiAlc1xuIiwgZGV2aWNlc1tpXSwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBkZXZf
dCBkZXYgPSBzdGF0dXMuc3RfcmRldjsKKyAgICAgICAgLy8gQm90aCBuZWVkZWQgZGV2aWNlIGZp
bGVzICgvZGV2L3JhbmRvbSBhbmQgL2Rldi91cmFuZG9tKSBhcmUgY2hhcmFjdGVyIG1fZGV2aWNl
cyBhbmQKKyAgICAgICAgLy8gdGhlaXIgcGVybWlzc2lvbnMgc2hvdWxkIGJlOiBydy1ydy1ydy0u
CisgICAgICAgIGNoYXIgZGV2aWNlW1BBVEhTSVpFXTsKKyAgICAgICAgc3RyaW5nQ29uY2F0KGRl
dmljZSwgU0FGRURJUiwgZGV2aWNlc1tpXSwgUEFUSFNJWkUpOworICAgICAgICBta25vZChkZXZp
Y2UsIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19J
Uk9USCB8IFNfSVdPVEgsIG1ha2VkZXYobWFqb3IoZGV2KSwgbWlub3IoZGV2KSkpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbW91bnRGaWxlU3lzdGVtcygpCit7
CisgICAgY2hhciBwcm9jW10gPSAiL3Byb2MvIjsKKyAgICBpZiAoY3JlYXRlRGlyZWN0b3J5UGF0
aChwcm9jKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNoYXIgcHJvY1BhdGhJ
blNhbmRib3hbUEFUSFNJWkVdOworICAgIHN0cmluZ0NvbmNhdChwcm9jUGF0aEluU2FuZGJveCwg
U0FGRURJUiwgcHJvYywgUEFUSFNJWkUpOworICAgIGlmICghbW91bnQocHJvYywgcHJvY1BhdGhJ
blNhbmRib3gsICJwcm9jIiwgMCwgMCkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJFcnJvciBieSBtb3VudGluZyAlcy4gJXNcbiIsIHByb2MsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyIHNoYXJlZE1lbW9yeVtdID0g
Ii9ydW4vc2htLyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKHNoYXJlZE1lbW9yeSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjaGFyIHNoYXJlZE1lbW9yeVBhdGhJblNhbmRi
b3hbUEFUSFNJWkVdOworICAgIHN0cmluZ0NvbmNhdChzaGFyZWRNZW1vcnlQYXRoSW5TYW5kYm94
LCBTQUZFRElSLCBzaGFyZWRNZW1vcnksIFBBVEhTSVpFKTsKKyAgICBpZiAoIW1vdW50KHNoYXJl
ZE1lbW9yeSwgc2hhcmVkTWVtb3J5UGF0aEluU2FuZGJveCwgInRtcGZzIiwgMCwgMCkgPT0gLTEp
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBtb3VudGluZyAlcy4gJXNcbiIs
IHNoYXJlZE1lbW9yeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbGlua0ZpbGUoY2hhciog
c291cmNlRmlsZSwgY2hhciogdGFyZ2V0RmlsZSkKK3sKKyAgICBib29sIGlzU3ltbGluayA9IHRy
dWU7CisgICAgd2hpbGUgKGlzU3ltbGluaykgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5m
bzsKKyAgICAgICAgaWYgKGxzdGF0KHNvdXJjZUZpbGUsICZmaWxlSW5mbykgPT0gLTEpIHsKKyAg
ICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGNoYXIqIGVuZE9mQmFzZURpcmVjdG9yeUluU291cmNl
ID0gc3RycmNocihzb3VyY2VGaWxlLCAnLycpOworICAgICAgICBpZiAoIWVuZE9mQmFzZURpcmVj
dG9yeUluU291cmNlKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgc291
cmNlOiAlcy5cbiIsIHNvdXJjZUZpbGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGNoYXIgYmFzZURpcmVjdG9yeU9mU291cmNlW1BBVEhTSVpFXTsKKyAg
ICAgICAgc3RyaW5nQ29weShiYXNlRGlyZWN0b3J5T2ZTb3VyY2UsIHNvdXJjZUZpbGUsIGVuZE9m
QmFzZURpcmVjdG9yeUluU291cmNlIC0gc291cmNlRmlsZSArIDEsIFBBVEhTSVpFKTsKKyAgICAg
ICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlPZlNvdXJjZSkpIHsKKyAg
ICAgICAgICAgIHByaW50ZigiQ3JlYXRpbmcgJXMgZmFpbGVkOiAlcy5cbiIsIGJhc2VEaXJlY3Rv
cnlPZlNvdXJjZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAobGluayhzb3VyY2VGaWxlLCB0YXJnZXRGaWxlKSA9PSAt
MSkgeworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkgeworICAgICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiTGlua2luZyAlcyBmYWlsZWQ6ICVzLlxuIiwgc291cmNlRmlsZSwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgc3ltbGlua3MuCisgICAgICAg
IGlzU3ltbGluayA9IChmaWxlSW5mby5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGTE5LOworICAg
ICAgICBpZiAoIWlzU3ltbGluaykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNoYXIg
c3ltbGlua1RhcmdldFtQQVRIU0laRV07CisgICAgICAgIGludCBsZW5ndGhPZlRoZUxpbmsgPSBy
ZWFkbGluayhzb3VyY2VGaWxlLCBzeW1saW5rVGFyZ2V0LCBzaXplb2Yoc3ltbGlua1RhcmdldCkg
LSAxKTsKKyAgICAgICAgaWYgKGxlbmd0aE9mVGhlTGluayA+IDApCisgICAgICAgICAgICBzeW1s
aW5rVGFyZ2V0W2xlbmd0aE9mVGhlTGlua10gPSAnXDAnOworICAgICAgICBjaGFyIHN5bWxpbmtU
YXJnZXRJblJlYWxXb3JsZFtQQVRIU0laRV07CisgICAgICAgIGNoYXIgc3ltbGlua1RhcmdldElu
U2FuZGJveFtQQVRIU0laRV07CisgICAgICAgIC8vIE1ha2luZyBkaWZmZXJlbmNlIGJldHdlZW4g
cmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzLgorICAgICAgICBpZiAoc3ltbGlua1RhcmdldFsw
XSAhPSAnLycpIHsKKyAgICAgICAgICAgIHN0cmluZ0NvbmNhdChzeW1saW5rVGFyZ2V0SW5SZWFs
V29ybGQsIGJhc2VEaXJlY3RvcnlPZlNvdXJjZSwgIi8iLCBzeW1saW5rVGFyZ2V0LCBQQVRIU0la
RSk7CisgICAgICAgICAgICBzdHJpbmdDb25jYXQoc3ltbGlua1RhcmdldEluU2FuZGJveCwgU0FG
RURJUiwgIi8iLCBzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGQsIFBBVEhTSVpFKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHN0cmluZ0NvcHkoc3ltbGlua1RhcmdldEluUmVhbFdvcmxk
LCBzeW1saW5rVGFyZ2V0LCBQQVRIU0laRSk7CisgICAgICAgICAgICBzdHJpbmdDb25jYXQoc3lt
bGlua1RhcmdldEluU2FuZGJveCwgU0FGRURJUiwgc3ltbGlua1RhcmdldCwgUEFUSFNJWkUpOwor
ICAgICAgICB9CisgICAgICAgIHN0cmluZ0NvcHkoc291cmNlRmlsZSwgc3ltbGlua1RhcmdldElu
UmVhbFdvcmxkLCBQQVRIU0laRSk7CisgICAgICAgIHN0cmluZ0NvcHkodGFyZ2V0RmlsZSwgc3lt
bGlua1RhcmdldEluU2FuZGJveCwgUEFUSFNJWkUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGJvb2wgbGlua0RpcmVjdG9yeShjaGFyKiBzb3VyY2VEaXJlY3RvcnlQYXRo
LCBjaGFyKiB0YXJnZXREaXJlY3RvcnlQYXRoKQoreworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5
UGF0aChzb3VyY2VEaXJlY3RvcnlQYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIERJ
UiogZGlyZWN0b3J5ID0gb3BlbmRpcihzb3VyY2VEaXJlY3RvcnlQYXRoKTsKKyAgICBpZiAoZGly
ZWN0b3J5KSB7CisgICAgICAgIHN0cnVjdCBkaXJlbnQgKmRpcmVjdG9yeUluZm8gPSAwOworICAg
ICAgICB3aGlsZSAoKGRpcmVjdG9yeUluZm8gPSByZWFkZGlyKGRpcmVjdG9yeSkpKSB7CisgICAg
ICAgICAgICBjaGFyKiBuZXh0RmlsZUluRGlyZWN0b3J5ID0gZGlyZWN0b3J5SW5mby0+ZF9uYW1l
OworICAgICAgICAgICAgaWYgKCFzdHJuY21wKG5leHRGaWxlSW5EaXJlY3RvcnksICIuIiwgc3Ry
bGVuKG5leHRGaWxlSW5EaXJlY3RvcnkpKSB8fCAhc3RybmNtcChuZXh0RmlsZUluRGlyZWN0b3J5
LCAiLi4iLCAyKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNoYXIg
c291cmNlRmlsZVtQQVRIU0laRV07CisgICAgICAgICAgICBzdHJpbmdDb25jYXQoc291cmNlRmls
ZSwgc291cmNlRGlyZWN0b3J5UGF0aCwgIi8iLCBuZXh0RmlsZUluRGlyZWN0b3J5LCBQQVRIU0la
RSk7CisKKyAgICAgICAgICAgIGNoYXIgdGFyZ2V0RmlsZVtQQVRIU0laRV07CisgICAgICAgICAg
ICBzdHJpbmdDb25jYXQodGFyZ2V0RmlsZSwgdGFyZ2V0RGlyZWN0b3J5UGF0aCwgIi8iLCBuZXh0
RmlsZUluRGlyZWN0b3J5LCBQQVRIU0laRSk7CisKKyAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVl
OworICAgICAgICAgICAgaWYgKChkaXJlY3RvcnlJbmZvLT5kX3R5cGUgPT0gRFRfRElSKSkKKyAg
ICAgICAgICAgICAgICBvayA9IGxpbmtEaXJlY3Rvcnkoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb2sgPSBsaW5rRmlsZShzb3VyY2VG
aWxlLCB0YXJnZXRGaWxlKTsKKyAgICAgICAgICAgIGlmICghb2spCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2lu
YWwgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGRpcmVjdG9yaWVzIGJlY2F1c2UKKyAgICAgICAg
Ly8gaXQgY291bGQgaGF2ZSByb2xlIGUuZy4gaW4gdGhlIGhhc2hnZW5lcmF0aW9uIG9mIGNhY2hl
IGZpbGVzLgorICAgICAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICAgICAgbHN0YXQoc291
cmNlRGlyZWN0b3J5UGF0aCwgJmZpbGVTdGF0KTsKKyAgICAgICAgc3RydWN0IHV0aW1idWYgdGlt
ZXMgPSB7IGZpbGVTdGF0LnN0X2F0aW1lLCBmaWxlU3RhdC5zdF9tdGltZSB9OworICAgICAgICA6
OnV0aW1lKHRhcmdldERpcmVjdG9yeVBhdGgsICZ0aW1lcyk7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgYm9vbCBjb2xsZWN0UnVuVGltZURlcGVuZGVuY2llcygpCit7Cisg
ICAgLy8gVGhlIGxpc3Qgb2YgZW1waXJpY2FsbHkgZ2F0aGVyZWQgbGlicmFyeSBkZXBlbmRlbmNp
ZXMuCisgICAgY29uc3QgY2hhciogcnVudGltZURlcGVuZGVuY2llc1tdID0geworICAgICAgICAi
bGlibnNzX2Rucy5zbyIsCisgICAgICAgICJsaWJyZXNvbHYuc28iLAorICAgICAgICAibGlic3Ns
LnNvIiwKKyAgICAgICAgImxpYmNyeXB0by5zbyIsCisgICAgICAgIDAKKyAgICB9OworCisgICAg
Y29uc3QgY2hhcioqIGN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSA9IHJ1bnRpbWVEZXBlbmRlbmNp
ZXM7CisgICAgd2hpbGUgKCpjdXJyZW50UnVudGltZURlcGVuZGVuY3kpIHsKKyAgICAgICAgLy8g
VG8gb2J0YWluIHRoZSBwYXRoIG9mIHRoZSBydW50aW1lIGRlcGVuZGVuY2llcyB3ZSBvcGVuIHRo
ZW0gd2l0aCBkbG9wZW4uCisgICAgICAgIC8vIFdpdGggdGhlIGhhbmRsZSBzdXBwbGllZCBieSBk
bG9wZW4gd2UgY2FuIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHluYW1pY2FsbHkKKyAg
ICAgICAgLy8gbGlua2VkIGxpYnJhcmllcywgc28gdGhlIHBhdGggd2hlcmUgYXJlIHRoZXkgaW5z
dGFsbGVkLgorICAgICAgICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oKmN1cnJlbnRSdW50aW1lRGVw
ZW5kZW5jeSwgUlRMRF9MQVpZKTsKKyAgICAgICAgaWYgKCFoYW5kbGUpIHsKKyAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZ2V0IHRoZSBoYW5kbGVyIG9mICVzOiAlc1xuIiwg
KmN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSwgZGxlcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBsaW5rX21hcCogbGlua21hcDsK
KyAgICAgICAgZGxpbmZvKGhhbmRsZSwgUlRMRF9ESV9MSU5LTUFQLCAmbGlua21hcCk7CisKKyAg
ICAgICAgaWYgKCFsaW5rbWFwKSB7CisgICAgICAgICAgICBwcmludGYoIkNvdWxkbid0IGdldCB0
aGUgbGlua21hcCBvZiAlczogJXMuXG4iLCAqY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5LCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgY2hhciBwYXRoT2ZUaGVMaWJyYXJ5W1BBVEhTSVpFXTsKKyAgICAgICAgY2hhciBwYXRo
T2ZUaGVMaWJyYXJ5SW5TYW5kYm94W1BBVEhTSVpFXTsKKyAgICAgICAgc3RyaW5nQ29weShwYXRo
T2ZUaGVMaWJyYXJ5LCBsaW5rbWFwLT5sX25hbWUsIFBBVEhTSVpFKTsKKyAgICAgICAgc3RyaW5n
Q29uY2F0KHBhdGhPZlRoZUxpYnJhcnlJblNhbmRib3gsIFNBRkVESVIsIHBhdGhPZlRoZUxpYnJh
cnksIFBBVEhTSVpFKTsKKyAgICAgICAgaWYgKCFsaW5rRmlsZShwYXRoT2ZUaGVMaWJyYXJ5LCBw
YXRoT2ZUaGVMaWJyYXJ5SW5TYW5kYm94KSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJMaW5raW5nIHJ1bnRpbWUgZGVwZW5kZW5jeTogJXMgZmFpbGVkOiAlc1xuIiwgcGF0aE9mVGhl
TGlicmFyeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGRsY2xvc2UoaGFuZGxlKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBkbGNsb3NlKGhh
bmRsZSk7CisgICAgICAgICsrY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5OworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW5pdFNhbmRib3goKQoreworICAgIC8vIENy
ZWF0ZSB0aGUgc2FuZGJveCBkaXJlY3RvcnkuIFdlIG9ubHkgbmVlZCB0byBzdGVwIGludG8gaXQs
IHNvCisgICAgLy8gdGhlIGV4ZWN1dGFibGUgcGVybWlzc2lvbiBpcyBuZWVkZWQgb25seS4KKyAg
ICBpZiAobWtkaXIoU0FGRURJUiwgMDExMCkgPT0gLTEgJiYgZXJybm8gIT0gRUVYSVNUKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNyZWF0ZURldmljZUZpbGVzKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbW91bnRGaWxlU3lzdGVtcygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBIYXJkIGxpbmsgY2FjaGUgYW5kIGZvbnQgZGlyZWN0
b3JpZXMgaW50byB0aGUgc2FuZGJveCBlbnZpcm9ubWVudC4KKyAgICBzdHJ1Y3QgcGFzc3dkKiB1
c2VySW5mbyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKyAgICBjb25zdCBjaGFyKiBob21lID0gdXNl
ckluZm8tPnB3X2RpcjsKKyAgICBjaGFyIGxvY2FsRGlyW1BBVEhTSVpFXTsKKyAgICBzdHJpbmdD
b25jYXQobG9jYWxEaXIsIGhvbWUsICIvLmxvY2FsL3NoYXJlL05va2lhLyIsIFBBVEhTSVpFKTsK
KyAgICBjaGFyIGNhY2hlRGlyW1BBVEhTSVpFXTsKKyAgICBzdHJpbmdDb25jYXQoY2FjaGVEaXIs
IGhvbWUsICIvLmNhY2hlL05va2lhLyIsIFBBVEhTSVpFKTsKKyAgICBjaGFyIGZvbnREaXJbUEFU
SFNJWkVdOworICAgIHN0cmluZ0NvbmNhdChmb250RGlyLCBob21lLCAiLy5mb250Y29uZmlnLyIs
IFBBVEhTSVpFKTsKKyAgICBjb25zdCBjaGFyKiBsaW5rZWREaXJlY3Rvcmllc1tdID0geworICAg
ICAgICBjYWNoZURpciwKKyAgICAgICAgZm9udERpciwKKyAgICAgICAgbG9jYWxEaXIsCisgICAg
ICAgICIvZXRjL2ZvbnRzLyIsCisgICAgICAgICIvZXRjL3NzbC9jZXJ0cy8iLAorICAgICAgICAi
L3Zhci9jYWNoZS9mb250Y29uZmlnLyIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzLyIsCisg
ICAgICAgIDAKKyAgICB9OworCisgICAgY29uc3QgY2hhcioqIGN1cnJlbnRMaW5rZWREaXJlY3Rv
cnkgPSBsaW5rZWREaXJlY3RvcmllczsKKyAgICB3aGlsZSAoKmN1cnJlbnRMaW5rZWREaXJlY3Rv
cnkpIHsKKyAgICAgICAgY2hhciBsaW5rZWREaXJlY3RvcnlJblNhbmRib3hbUEFUSFNJWkVdOwor
ICAgICAgICBzdHJpbmdDb25jYXQobGlua2VkRGlyZWN0b3J5SW5TYW5kYm94LCBTQUZFRElSLCAq
Y3VycmVudExpbmtlZERpcmVjdG9yeSwgUEFUSFNJWkUpOworICAgICAgICBpZiAobGlua0RpcmVj
dG9yeShjb25zdF9jYXN0PGNoYXIqPigqY3VycmVudExpbmtlZERpcmVjdG9yeSksIGxpbmtlZERp
cmVjdG9yeUluU2FuZGJveCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICsrY3VycmVudExpbmtlZERpcmVjdG9yeTsKKyAgICB9CisgICAgcmV0dXJuIGNvbGxlY3RS
dW5UaW1lRGVwZW5kZW5jaWVzKCk7Cit9CisKK3N0YXRpYyBib29sIHJlc3RyaWN0Q2FwYWJpbGl0
aWVzKCkKK3sKKyAgICAvLyBDYXBhYmlsaXRpZXMgd2UgbmVlZC4KKyAgICBjYXBfdmFsdWVfdCBj
YXBhYmlsdHlMaXN0WzRdOworICAgIGNhcGFiaWx0eUxpc3RbMF0gPSBDQVBfU0VUVUlEOworICAg
IGNhcGFiaWx0eUxpc3RbMV0gPSBDQVBfU0VUR0lEOworICAgIGNhcGFiaWx0eUxpc3RbMl0gPSBD
QVBfU1lTX0FETUlOOworICAgIGNhcGFiaWx0eUxpc3RbM10gPSBDQVBfU1lTX0NIUk9PVDsKKwor
ICAgIC8vIFJlZHVjZSBjYXBhYmlsaXRpZXMgdG8gd2hhdCB3ZSBuZWVkLgorICAgIC8vIEFsdGhv
dWdoIHdlIHN0aWxsIGhhdmUgcm9vdCBldWlkIGFuZCB3ZSBrZWVwIHJvb3QgZXF1aXZhbGVudCBj
YXBhYmlsaXRpZXMsCisgICAgLy8gd2UgcmVtb3ZlZCAoPSBkaWRuJ3QgYWRkKSBDQVBfU1lTX1JF
U1NPVVJDRSBjYXBhYmlsaXRlcyBhbmQgdGhpcyByZXN1bHRlZCB0aGF0CisgICAgLy8gdGhlIHNl
dHJsaW1pdCBmdW5jdGlvbiB3aXRoIFJMSU1JVF9OT0ZJTEUgd2lsbCBiZSBlZmZlY3RpdmUgbGF0
ZXIuCisgICAgaWYgKCFzZXRDYXBhYmlsaXRpZXMoY2FwYWJpbHR5TGlzdCwgc2l6ZW9mKGNhcGFi
aWx0eUxpc3QpIC8gc2l6ZW9mKGNhcGFiaWx0eUxpc3RbMF0pKSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNvdWxkIG5vdCBhZGp1c3QgcHJvY2VzcyBjYXBhYmlsaXRpZXM6ICVzLlxuIiwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbW92ZVRvTmV3UElETmFtZXNwYWNlKCkKK3sKKyAg
ICAvLyBDTE9ORV9ORVdQSUQgYW5kIENMT05FX0ZTIHNob3VsZCBiZSBpbiB0aGF0IG9yZGVyLgor
ICAgIC8vIFdlIGNhbid0IHNoYXJlIEZTIGFjY3Jvc3MgbmFtZXNwYWNlcy4KKyAgICBwaWRfdCBw
aWQsIHdhaXRlZDsKKyAgICBpbnQgc3RhdHVzOworICAgIHBpZCA9IHN5c2NhbGwoU1lTX2Nsb25l
LCBDTE9ORV9ORVdQSUQgfCBTSUdDSExELCAwLCAwLCAwKTsKKworICAgIHN3aXRjaCAocGlkKSB7
CisgICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9uaW5nIGlzIGZhaWxl
ZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBj
YXNlIDA6CisgICAgICAgIC8vIENoaWxkIHNob3VsZCBydW4gd2l0aCBwaWQgbnVtYmVyIDEgaW4g
dGhlIG5ldyBuYW1lc3BhY2UuCisgICAgICAgIHJldHVybiBnZXRwaWQoKSA9PSAxOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIC8vIFdlIGFyZSB3YWl0aW5nIGZvciBvdXIgY2hpbGQgKFdlYlByb2Nl
c3MpLgorICAgICAgICAvLyBJZiB0aGlzIHdhaXQgaXMgc3VjY2Vzc2Z1bCBpdCBtZWFucyB0aGF0
IG91ciBjaGlsZCBpcyB0ZXJtaW5hdGVkLgorICAgICAgICB3YWl0ZWQgPSB3YWl0cGlkKHBpZCwg
JnN0YXR1cywgMCk7CisgICAgICAgIGlmICh3YWl0ZWQgIT0gcGlkKSB7CisgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIldyb25nIFBJRDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFdJRkVY
SVRFRChzdGF0dXMpKQorICAgICAgICAgICAgZXhpdChXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKyAg
ICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtd
KQoreworICAgIGNoYXIgc2FmZWRpcltQQVRIU0laRV07CisgICAgc3RydWN0IHBhc3N3ZCogdXNl
ckluZm8gPSBnZXRwd3VpZChnZXR1aWQoKSk7CisgICAgc3RyaW5nQ29uY2F0KHNhZmVkaXIsIHVz
ZXJJbmZvLT5wd19kaXIsICIvLndrMi1zYW5kYm94IiwgUEFUSFNJWkUpOworICAgIFNBRkVESVIg
PSBzYWZlZGlyOworCisgICAgdWlkX3Qgb2xkdWlkID0gZ2V0dWlkKCk7CisgICAgZ2lkX3Qgb2xk
Z2lkID0gZ2V0Z2lkKCk7CisKKyAgICAvLyBTYW5pdHkgY2hlY2tzLgorICAgIGlmIChhcmdjICE9
IDMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTdGFydGluZyBTYW5kYm94UHJvY2VzcyBy
ZXF1aXJlcyAzIHBhcmFtZXRlcnMhIEV4aXRpbmcuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKworICAgIGlmIChnZXRldWlkKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJU
aGUgc2FuZGJveCBpcyBub3Qgc2V0ZXVpZCByb290LCBhYm9ydGluZ1xuIik7CisgICAgICAgIHJl
dHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIW9sZHVpZCkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIlRoZSBzYW5kYm94IGlzIG5vdCBkZXNpZ25lZCB0byBiZSBydW4gYnkgcm9vdC5cbiIp
OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLy8gU2V0dXAgdGhlIHNhbmRib3gg
ZW52aXJvbm1lbnQuCisgICAgaWYgKCFpbml0U2FuZGJveCgpKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiVGhlIGluaXRpYWxpemF0aW9uIG9mIHNhbmRib3ggZW52aXJvbm1lbnQgZmFpbGVk
LlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIXJlc3RyaWN0Q2Fw
YWJpbGl0aWVzKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZXR0aW5nIHRoZSBjYXBh
YmlsaXRpZXMgZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBp
ZiAoIW1vdmVUb05ld1BJRE5hbWVzcGFjZSgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q291bGRuJ3QgbW92ZSB0byBuZXcgUElEIG5hbWVzcGFjZS5cbiIpOworICAgICAgICByZXR1cm4g
LTE7CisgICAgfQorCisgICAgaWYgKCFwcmVwYXJlQW5kU3RhcnRDaHJvb3RIZWxwZXIoKSkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNocm9vdEhlbHBlciBjb3VsZG4ndCBzdGFydGVkLlxu
Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIWRyb3BQcml2aWxlZ2Vz
KG9sZHVpZCwgb2xkZ2lkKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGRy
b3AgdGhlIHByaXZpbGVnZXMuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAg
IC8vIElmIG91ciBlZmZlY3RpdmUgb3IgcmVhbCB1aWQvZ2lkIGlzIHN0aWxsIDAgKHRoYXQncyBy
b290KSBvcgorICAgIC8vIHdlIGNhbiBzZXQgdGhlbSB0byAwLCB0aGVuIHRoZSBkcm9wcGluZyBv
ZiBwcml2aWxlZ2VzIGZhaWxlZC4KKyAgICBpZiAoIWdldGV1aWQoKSB8fCAhZ2V0ZWdpZCgpIHx8
ICFzZXR1aWQoMCkgfHwgIXNldGdpZCgwKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRy
b3BwaW5nIHByaXZpbGVnZXMgZmFpbGVkISAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAg
ICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vIFN0YXJ0IHRoZSBXZWJQcm9jZXNzLgorICAg
IGV4ZWNsKGFyZ3ZbMV0sIGFyZ3ZbMV0sIGFyZ3ZbMl0sIChjaGFyKikwKTsKKyAgICByZXR1cm4g
MDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgv
U2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZGY4NDEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVu
dmlyb25tZW50TGludXguaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhv
ZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisjZGVmaW5lIFNhbmRib3hFbnZpcm9ubWVu
dExpbnV4X2gKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisKKyNpZm5kZWYgQ0xP
TkVfTkVXUElECisjZGVmaW5lIENMT05FX05FV1BJRCAgMHgyMDAwMDAwMAorI2VuZGlmCisKKyNk
ZWZpbmUgU0JYX0QgIlNCWF9EIgorI2RlZmluZSBTQlhfSEVMUEVSX1BJRCAiU0JYX0hFTFBFUl9Q
SUQiCisKKyNkZWZpbmUgTVNHX0NIUk9PVE1FICdDJworI2RlZmluZSBNU0dfQ0hST09URUQgJ08n
CisKKyNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorCitjbGFzcyBTYW5kYm94RW52aXJvbm1l
bnRMaW51eCB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgc3RyaW5nQ29weShjaGFyKiwgY29u
c3QgY2hhciosIGNvbnN0IGludCk7CisgICAgc3RhdGljIGJvb2wgc3RyaW5nQ29weShjaGFyKiwg
Y29uc3QgY2hhciosIGNvbnN0IGludCwgY29uc3QgaW50KTsKKyAgICBzdGF0aWMgYm9vbCBzdHJp
bmdDb25jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgaW50KTsKKyAg
ICBzdGF0aWMgYm9vbCBzdHJpbmdDb25jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFy
KiwgY29uc3QgY2hhciogLCBjb25zdCBpbnQpOworICAgIHN0YXRpYyBib29sIGxhdW5jaENocm9v
dEhlbHBlcihjb25zdCBjaGFyKiwgaW50W10pOworICAgIHN0YXRpYyB2b2lkIHNldEVudmlyb25t
ZW50VmFyaWFibGVzRm9yQ2hyb290SGVscGVyKHBpZF90LCBpbnRbXSk7CisgICAgc3RhdGljIGJv
b2wgc2V0Q2FwYWJpbGl0aWVzKGNhcF92YWx1ZV90KiwgaW50KTsKKyAgICBzdGF0aWMgaW50IHNl
dER1bXBhYmxlKCk7CisgICAgc3RhdGljIGludCBkcm9wUHJpdmlsZWdlcyh1aWRfdCwgZ2lkX3Qp
OworICAgIHN0YXRpYyBib29sIGZpbGVFeGlzdHMoY29uc3QgY2hhciopOworICAgIHN0YXRpYyBt
b2RlX3QgcGVybWlzc2lvbnMoY29uc3QgY2hhciopOworICAgIHN0YXRpYyBib29sIGNyZWF0ZURp
cmVjdG9yeShjaGFyKiwgY29uc3QgY2hhciopOworICAgIHN0YXRpYyBib29sIGNyZWF0ZURpcmVj
dG9yeVBhdGgoY2hhciopOworICAgIHN0YXRpYyBib29sIGNyZWF0ZURldmljZUZpbGVzKCk7Cisg
ICAgc3RhdGljIGJvb2wgbW91bnRGaWxlU3lzdGVtcygpOworICAgIHN0YXRpYyBib29sIGxpbmtG
aWxlKGNoYXIqIHNvdXJjZUZpbGUsIGNoYXIqKTsKKyAgICBzdGF0aWMgYm9vbCBsaW5rRGlyZWN0
b3J5KGNoYXIqLCBjaGFyKik7CisgICAgc3RhdGljIGJvb2wgY29sbGVjdFJ1blRpbWVEZXBlbmRl
bmNpZXMoKTsKKyAgICBzdGF0aWMgYm9vbCBpbml0U2FuZGJveCgpOworICAgIHN0YXRpYyBib29s
IHJlc3RyaWN0Q2FwYWJpbGl0aWVzKCk7CisgICAgc3RhdGljIGJvb2wgbW92ZVRvTmV3UElETmFt
ZXNwYWNlKCk7Cit9OworCisjZW5kaWYgLy8gU2FuZGJveEVudmlyb25tZW50TGludXhfaAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCmluZGV4IDRmMzkzMDcuLmY0Yjc3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAt
MTMwLDYgKzEzMCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9XZWJVUkxSZXF1ZXN0Lmgg
XAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5oIFwKICAgICBTaGFyZWQvV2ViVXNlckNvbnRl
bnRVUkxQYXR0ZXJuLmggXAorICAgIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94
RW52aXJvbm1lbnRMaW51eC5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbk1vZHVsZS5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1hcC5o
IFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUElkZW50aWZpZXJEYXRhLmggXApAQCAtNDIyLDYgKzQy
Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9BUEkvYy9xdC9XS0ltYWdlUXQuY3BwIFwK
ICAgICBTaGFyZWQvQVBJQ2xpZW50VHJhaXRzLmNwcCBcCiAgICAgU2hhcmVkL0FQSU9iamVjdC5j
cHAgXAorICAgIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRM
aW51eC5jcHAgXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9k
dWxlLmNwcCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1
bGVOb25lLmNwcCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1
Z2luTW9kdWxlWDExLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAppbmRleCA2MGNkZTVmLi5hZDMy
NjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJv
Y2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKQEAgLTYyLDYgKzYyLDEwIEBACiAjaW5jbHVkZSA8
d2luZG93cy5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorI2lu
Y2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CisjZW5kaWYKKwogI2lmIE9TKERBUldJTikKICNpbmNs
dWRlIDxtYWNoL21hY2hfaW5pdC5oPgogI2luY2x1ZGUgPHNlcnZlcnMvYm9vdHN0cmFwLmg+CkBA
IC0xNjUsMzcgKzE2OSw0NyBAQCB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vzcygp
CiAgICAgY29tbWFuZExpbmUgPSBjb21tYW5kTGluZS5hcmcoc29ja2V0c1swXSk7CiAjZW5kaWYK
IAotICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNzID0gbmV3IFF0V2ViUHJvY2VzcygpOwotICAgIHdl
YlByb2Nlc3MtPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6Rm9yd2FyZGVkQ2hhbm5l
bHMpOwotICAgIHdlYlByb2Nlc3MtPnN0YXJ0KGNvbW1hbmRMaW5lKTsKKyAgICBRUHJvY2Vzcyog
d2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQor
ICAgIFFTdHJpbmcgc2FuZGJveENvbW1hbmRMaW5lID0gUUxhdGluMVN0cmluZygiJTEgJTIgJTMi
KTsKKyAgICBzYW5kYm94Q29tbWFuZExpbmUgPSBzYW5kYm94Q29tbWFuZExpbmUuYXJnKFFDb3Jl
QXBwbGljYXRpb246OmFwcGxpY2F0aW9uRGlyUGF0aCgpICsgUUxhdGluMVN0cmluZygiL1NVSURT
YW5kYm94SGVscGVyIikpOworICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5k
TGluZS5hcmcoZXhlY3V0YWJsZVBhdGhPZldlYlByb2Nlc3MoKSk7CisgICAgc2FuZGJveENvbW1h
bmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKKworICAgIHdlYlBy
b2Nlc3NPclNVSURIZWxwZXIgPSBuZXcgUVByb2Nlc3MoKTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlE
SGVscGVyLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxz
KTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChzYW5kYm94Q29tbWFuZExpbmUp
OworI2Vsc2UKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyID0gbmV3IFF0V2ViUHJvY2Vzcygp
OworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJv
Y2Vzczo6TWVyZ2VkQ2hhbm5lbHMpOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnN0YXJ0
KGNvbW1hbmRMaW5lKTsKKyNlbmRpZgogCiAjaWYgT1MoVU5JWCkgJiYgIU9TKERBUldJTikKICAg
ICAvLyBEb24ndCBleHBvc2UgdGhlIHdlYiBzb2NrZXQgdG8gcG9zc2libGUgZnV0dXJlIHdlYiBw
cm9jZXNzZXMKICAgICB3aGlsZSAoZmNudGwoc29ja2V0c1swXSwgRl9TRVRGRCwgRkRfQ0xPRVhF
QykgPT0gLTEpIHsKICAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAg
ICAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotICAgIGlmICghd2ViUHJvY2Vzcy0+d2Fp
dEZvclN0YXJ0ZWQoKSkgeworICAgIGlmICghd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZv
clN0YXJ0ZWQoKSkgewogICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8PCBj
b21tYW5kTGluZTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjaWYgT1MoREFSV0lO
KQogICAgICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBjb25uZWN0
b3IpOwogICAgICAgICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgY29ubmVj
dG9yLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwogI2VuZGlmCi0gICAgICAgIGRlbGV0
ZSB3ZWJQcm9jZXNzOworICAgICAgICBkZWxldGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLQogI2lmIE9TKFVOSVgpCi0gICAgc2V0cHJpb3JpdHkoUFJJ
T19QUk9DRVNTLCB3ZWJQcm9jZXNzLT5waWQoKSwgMTApOworICAgIHNldHByaW9yaXR5KFBSSU9f
UFJPQ0VTUywgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+cGlkKCksIDEwKTsKICNlbmRpZgotCi0g
ICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hl
cjo6ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2VzcywgdGhpcywgd2ViUHJvY2VzcywgY29ubmVjdG9y
KSk7CisgICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NM
YXVuY2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2VzcywgdGhpcywgd2ViUHJvY2Vzc09yU1VJ
REhlbHBlciwgY29ubmVjdG9yKSk7CiB9CiAKIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5h
dGVQcm9jZXNzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5kZXggNTM2Yjc3OS4uNzQ1Yjg4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi5wcmkKQEAgLTYxLDcgKzYxLDggQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJ
Ui9XZWJQcm9jZXNzL1dlYlBhZ2UgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcyBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvcXQg
XAotICAgICQkU09VUkNFX0RJUi9QbHVnaW5Qcm9jZXNzCisgICAgJCRTT1VSQ0VfRElSL1BsdWdp
blByb2Nlc3MgXAorICAgICQkU09VUkNFX0RJUi9TYW5kYm94UHJvY2VzcyBcCiAKICMgVGhlIFdl
YktpdDIgUXQgQVBJcyBkZXBlbmQgb24gcXdlYmtpdGdsb2JhbC5oLCB3aGljaCBsaXZlcyBpbiBX
ZWJLaXQKIElOQ0xVREVQQVRIICs9ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktpdC9x
dC9BcGkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vz
c01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWlu
UXQuY3BwCmluZGV4IDE4ZjMwMzk0Li42N2ZkNWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKQEAgLTM0LDcgKzM0LDkgQEAKICNp
bmNsdWRlIDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDxRVXJsPgogI2luY2x1ZGUgPFdlYkNvcmUv
UnVuTG9vcC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNjIsNiAr
NjQsMTQgQEAgZXh0ZXJuICJDIiBrZXJuX3JldHVybl90IGJvb3RzdHJhcF9sb29rX3VwMihtYWNo
X3BvcnRfdCwgY29uc3QgbmFtZV90LCBtYWNoX3BvcnQKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorI2RlZmluZSBTQlhfRCAiU0JY
X0QiCisjZGVmaW5lIFNCWF9IRUxQRVJfUElEICJTQlhfSEVMUEVSX1BJRCIKKworI2RlZmluZSBN
U0dfQ0hST09UTUUgJ0MnCisjZGVmaW5lIE1TR19DSFJPT1RFRCAnTycKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKICNpZm5kZWYgTkRFQlVHCiAjaWYgT1MoV0lORE9XUykKQEAgLTE0Miwx
OCArMTUyLDgwIEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQcm94eSgpCiAgICAgUU5ldHdvcmtQ
cm94eUZhY3Rvcnk6OnNldFVzZVN5c3RlbUNvbmZpZ3VyYXRpb24odHJ1ZSk7CiB9CiAKKyNpZiBF
TkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorcGlkX3QgY2hyb290TWUoKQoreworICAgIGxvbmcg
aW50IGZkID0gLTE7CisgICAgY2hhciogc2FuZGJveFNvY2tldERlc2NyaXB0b3I7CisgICAgY2hh
ciogaGVscGVyUGlkOworICAgIGNoYXIgc2FuZGJveE1lTXNnID0gTVNHX0NIUk9PVE1FOworICAg
IHNzaXplX3QgY250OworICAgIHBpZF90IGhlbHBlciA9IC0xOworCisgICAgLy8gR2V0IHRoZSBm
aWxlIGRlc2NyaXB0b3Igb2YgdGhlIHNvY2tldHBhaXIuCisgICAgc2FuZGJveFNvY2tldERlc2Ny
aXB0b3IgPSBnZXRlbnYoU0JYX0QpOworICAgIGlmICghc2FuZGJveFNvY2tldERlc2NyaXB0b3Ip
CisgICAgICAgIHJldHVybiAtMTsKKworICAgIGVycm5vID0gMDsKKyAgICBmZCA9IHN0cnRvbChz
YW5kYm94U29ja2V0RGVzY3JpcHRvciwgKGNoYXIgKiopIDAsIDEwKTsKKyAgICBpZiAoZXJybm8g
fHwgKGZkID09IC0xKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLy8gR2V0IHRoZSBQSUQg
b2YgdGhlIHNldHVpZCBoZWxwZXIuCisgICAgaGVscGVyUGlkID0gZ2V0ZW52KFNCWF9IRUxQRVJf
UElEKTsKKworICAgIC8vIElmIG5vIFBJRCBpcyBhdmFpbGFibGUsIHRoZSBkZWZhdWx0IG9mIC0x
IHdpbGwgZG8uCisgICAgaWYgKGhlbHBlclBpZCkgeworICAgICAgICBlcnJubyA9IDA7CisgICAg
ICAgIGhlbHBlciA9IHN0cnRvbChoZWxwZXJQaWQsIChjaGFyICoqKSAwLCAxMCk7CisgICAgICAg
IGlmIChlcnJubyB8fCAoaGVscGVyID09IC0xKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg
ICB9CisKKyAgICAvLyBTZW5kIHRoZSBjaHJvb3RtZSBtZXNzYWdlIHRvIHRoZSBoZWxwZXIuCisg
ICAgY250ID0gd3JpdGUoZmQsICZzYW5kYm94TWVNc2csIDEpOworICAgIGlmIChjbnQgIT0gMSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNocm9vdG1lIG1zZyBmYWlsZWQgdG8gd3JpdGU6
ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwor
ICAgIC8vIFJlYWQgdGhlIGFja25vd2xlZGdlbWVudCBtZXNzYWdlIGZyb20gdGhlIGhlbHBlci4K
KyAgICBjbnQgPSByZWFkKGZkLCAmc2FuZGJveE1lTXNnLCAxKTsKKyAgICBpZiAoKGNudCAhPSAx
KSB8fCAoc2FuZGJveE1lTXNnICE9IE1TR19DSFJPT1RFRCkpIHsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJFcnJvciByZWFkaW5nIGNvbmZpcm1hdGlvbiBtZXNzYWdlXG4iKTsKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIH0KKyAgICBjbG9zZShmZCk7CisKKyAgICAvLyBXYWl0IGZvciBoZWxw
ZXIgcHJvY2Vzcy4KKyAgICBpbnQgd2FpdGVkUGlkPSB3YWl0cGlkKGhlbHBlciwgMCwgMCk7Cisg
ICAgaWYgKHdhaXRlZFBpZCAhPSAtMSAmJiAoKGhlbHBlciA9PSAtMSkgfHwgKHdhaXRlZFBpZCA9
PSBoZWxwZXIpKSkKKyAgICAgICAgcmV0dXJuIHdhaXRlZFBpZDsKKyAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNvdWxkbid0IHdhaXQgZm9yIHRoZSBoZWxwZXIgcHJvY2VzczogJXNcbiIsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgcmV0dXJuIC0xOworfQorI2VuZGlmCisKIFFfREVDTF9FWFBPUlQgaW50
IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxpY2F0aW9uKiBhcHApCiB7Ci0gICAgaW5pdGlhbGl6
ZVByb3h5KCk7CisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKyAgICBwaWRfdCBoZWxw
ZXI7CisgICAgaGVscGVyID0gY2hyb290TWUoKTsKIAorICAgIGlmIChoZWxwZXIgPT0gLTEpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJBc2tpbmcgZm9yIGNocm9vdCBmYWlsZWQuXG4iKTsK
KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorICAgIGluaXRpYWxpemVQcm94eSgp
OwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1h
aW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAgICAK
KwogI2lmIFVTRShRVEtJVCkKICAgICBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZUZvcldLMigp
OwogI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24uCiAgICAgaWYgKGFwcC0+
YXJndW1lbnRzKCkuc2l6ZSgpIDw9IDEpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkVycm9yOiB3
cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiI7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVy
ZUxpc3QucG0KaW5kZXggY2I1M2IyNS4uNzRiZTA3MyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVy
bC9GZWF0dXJlTGlzdC5wbQpAQCAtMTE3LDYgKzExNyw3IEBAIG15ICgKICAgICAkc2hhcmVkV29y
a2Vyc1N1cHBvcnQsCiAgICAgJHNxbERhdGFiYXNlU3VwcG9ydCwKICAgICAkc3R5bGVTY29wZWRT
dXBwb3J0LAorICAgICRzdWlkTGludXhTYW5kYm94LAogICAgICRzdmdET01PYmpDQmluZGluZ3NT
dXBwb3J0LAogICAgICRzdmdGb250c1N1cHBvcnQsCiAgICAgJHN2Z1N1cHBvcnQsCkBAIC0zNjMs
NiArMzY0LDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICJzdHlsZS1zY29w
ZWQiLCBkZXNjID0+ICJUb2dnbGUgU3R5bGUgU2NvcGVkIHN1cHBvcnQiLAogICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfU1RZTEVfU0NPUEVEIiwgZGVmYXVsdCA9PiBpc0JsYWNrQmVycnkoKSwgdmFs
dWUgPT4gXCRzdHlsZVNjb3BlZFN1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9uID0+ICJzdWlkLWxp
bnV4LXNhbmRib3giLCBkZXNjID0+ICJUb2dnbGUgc3VpZCBzYW5kYm94IGZvciBsaW51eCIsCisg
ICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVgiLCBkZWZhdWx0ID0+IDAs
IHZhbHVlID0+IFwkc3VpZExpbnV4U2FuZGJveCB9LAorCiAgICAgeyBvcHRpb24gPT4gInN2ZyIs
IGRlc2MgPT4gIlRvZ2dsZSBTVkcgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9T
VkciLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkc3ZnU3VwcG9ydCB9LAogCmRpZmYgLS1naXQg
YS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYgYi9Ub29scy9x
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYKaW5kZXggYWEyMWI1ZC4uYWU3
YTMwMSAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bv
c3QucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZGVmYXVsdF9wb3N0LnBy
ZgpAQCAtMjg3LDMgKzI4Nyw0IEBAIGZvcih0YXJnZXQsICQkbGlzdCgkJHVuaXF1ZShERUZBVUxU
X1RBUkdFVFMpKSkgewogREVTVERJUiA9ICQkcmVwbGFjZShERVNURElSLCBeJCR7Uk9PVF9CVUlM
RF9ESVJ9LCAkJHtCVUlMRF9ST09UX1JFTEFUSVZFX1RPX09VVF9QV0R9KQogCiBsb2FkKGRlZmF1
bHRfcG9zdCkgIyBMb2FkIFF0J3MgZGVmYXVsdHMKK1FNQUtFX0xJQlNfT1BFTkdMICs9IC1sY2Fw
IC1sZGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoxLjcuMi41Cgo=
</data>
<flag name="commit-queue"
          id="182399"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169652</attachid>
            <date>2012-10-19 11:09:13 -0700</date>
            <delta_ts>2012-10-24 04:04:08 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-10.3.patch</filename>
            <type>text/plain</type>
            <size>51644</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA2NTIzMmM1YjFhMDhhZGQ1YTQ3NDdiODFjYTBiZDEzMmM5MWI5NjMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogRnJp
LCAxOSBPY3QgMjAxMiAxOTo0NDoyNiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGZlbHRvbHQgMTAu
MwoKLS0tCiBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICA2MDAgKysrKysrKysrKysrKysrLQogU291cmNlL1F0V2ViS2l0LnBybyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIC4uLi9XZWJLaXQyL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIHwgICAgMyArLQogU291cmNlL1dlYktpdDIvU2FuZGJv
eFByb2Nlc3MucHJvICAgICAgICAgICAgICAgICAgfCAgIDI3ICsKIC4uLi9TYW5kYm94UHJvY2Vz
cy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAgICAgIHwgIDc1NiArKysrKysrKysrKysrKysr
KysrKwogLi4uL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4Lmgg
fCAgIDQ5ICsrCiAuLi4vbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAg
ICAgICB8ICAgOTQgKysrCiAuLi4vU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09w
ZXJhdGlvbnMuaCB8ICAgMzUgKwogU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICA0ICsKIC4uLi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vz
c0xhdW5jaGVyUXQuY3BwICAgIHwgICAzNCArLQogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwICB8ICAgNzggKy0KIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cGVybC9GZWF0dXJlTGlzdC5wbSAgICAgICAgICAgIHwgICAgNCArCiBUb29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYgICAgICB8ICAgIDEgKwogMTQgZmlsZXMg
Y2hhbmdlZCwgMTY2NSBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVu
dmlyb25tZW50TGludXguY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3Mv
U3RyaW5nT3BlcmF0aW9ucy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5oCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1F0V2ViS2l0LnBybyBiL1NvdXJjZS9RdFdlYktpdC5wcm8KaW5kZXggNTlmOWEw
ZC4uYjA5ZDFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1F0V2ViS2l0LnBybworKysgYi9Tb3VyY2Uv
UXRXZWJLaXQucHJvCkBAIC0xNyw2ICsxNywxMSBAQCBidWlsZD8od2Via2l0MikgewogICAgICAg
ICBwbHVnaW5wcm9jZXNzLmZpbGUgPSBXZWJLaXQyL1BsdWdpblByb2Nlc3MucHJvCiAgICAgICAg
IFNVQkRJUlMgKz0gcGx1Z2lucHJvY2VzcwogICAgIH0KKworICAgIGVuYWJsZT8oU1VJRF9TQU5E
Qk9YX0xJTlVYKSB7CisgICAgICAgIHNhbmRib3hwcm9jZXNzLmZpbGUgPSBXZWJLaXQyL1NhbmRi
b3hQcm9jZXNzLnBybworICAgICAgICBTVUJESVJTICs9IHNhbmRib3hwcm9jZXNzCisgICAgfQog
fQogCiBkZWNsYXJhdGl2ZS5maWxlID0gV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xhcmF0aXZl
LnBybwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURl
ZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZwppbmRleCA2M2E1YmFiLi5iMTJmMzI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMTI3
LDYgKzEyNyw3IEBAIEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UID0gRU5BQkxFX1BST0dSRVNTX0VM
RU1FTlQ7CiBFTkFCTEVfUVVPVEEgPSA7CiBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUg
PSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU7CiBFTkFCTEVfU0NSSVBURURfU1BFRUNI
ID0gOworRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCA9IDsKIEVOQUJMRV9TSEFET1dfRE9NID0g
OwogRU5BQkxFX1NIQVJFRF9XT1JLRVJTID0gRU5BQkxFX1NIQVJFRF9XT1JLRVJTOwogRU5BQkxF
X1NRTF9EQVRBQkFTRSA9IEVOQUJMRV9TUUxfREFUQUJBU0U7CkBAIC0xNDksNCArMTUwLDQgQEAg
RU5BQkxFX1dFQl9USU1JTkcgPSA7CiBFTkFCTEVfV09SS0VSUyA9IEVOQUJMRV9XT1JLRVJTOwog
RU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVf
M0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FO
SU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAk
KEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVO
QUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9D
U1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVOQUJMRV9DU1NfSU1BR0Vf
T1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1Nf
UkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJ
T04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNfQ09ORElUSU9OQUxfUlVM
RVMpICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1F
X0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9F
TEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VM
RU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1F
TlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0RSQUdHQUJMRV9SRUdJT04p
ICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NS
RUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxF
X0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5W
QVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVO
QUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lO
UFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVH
QUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAk
KExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5B
QkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRI
TUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChF
TkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkg
JChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9V
VElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQ
SSkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChF
TkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9T
Q1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JL
RVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFC
TEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05U
UykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNf
T05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFHRVIp
ICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQo
RU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1J
TkcpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0g
JChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQo
RU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVT
U0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JS
RUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAk
KEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVOQUJMRV9D
U1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVO
QUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0NTU19TVElD
S1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNfQ09ORElU
SU9OQUxfUlVMRVMpICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNU
T01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9E
QVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9E
RVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElB
TE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0RSQUdHQUJM
RV9SRUdJT04pICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJM
RV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04p
ICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdI
X0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1M
RVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQo
RU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FM
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChF
TkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklD
QVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVE
SU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVO
QUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElT
VElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01J
Q1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FUT1Jf
Q09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJ
QklMSVRZX0FQSSkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUFJPR1JFU1NfRUxF
TUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAk
KEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCkgJChF
TkFCTEVfU0hBRE9XX0RPTSkgJChFTkFCTEVfU0hBUkVEX1dPUktFUlMpICQoRU5BQkxFX1NRTF9E
QVRBQkFTRSkgJChFTkFCTEVfU1RZTEVfU0NPUEVEKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NW
R19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URVhUX0FV
VE9TSVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9UT1VD
SF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX1VORE9fTUFOQUdFUikgJChFTkFCTEVfVklERU8pICQo
RU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElPKSAk
KEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV09SS0VS
UykgJChFTkFCTEVfWFNMVCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJv
Y2Vzcy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjMGUyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwpAQCAtMCwwICsxLDI3IEBACisjIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgUHJvamVjdCBmaWxlIGZvciB0aGUgV2ViS2l0MiBzYW5kYm94IHByb2Nlc3MgYmluYXJ5
CisjCisjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1
aWxkIHN5c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RFTVBMQVRFID0gYXBwCisKK1RBUkdFVCA9IFNV
SURTYW5kYm94SGVscGVyCitERVNURElSID0gJCR7Uk9PVF9CVUlMRF9ESVJ9L2JpbgorCitDT05G
SUcgKz0gY29uc29sZQorQ09ORklHIC09IHF0CisKK1NPVVJDRVMgKz0gU2hhcmVkL2xpbnV4L1Nh
bmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcCBcCisgICAgICAgICAgIFNo
YXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcAorSEVBREVSUyAr
PSBTaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCBc
CisgICAgICAgICAgIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25z
LmgKKworSU5TVEFMTFMgKz0gdGFyZ2V0CitMSUJTICs9IC1sY2FwIC1sZGwKKworaXNFbXB0eShJ
TlNUQUxMX0JJTlMpIHsKKyAgICB0YXJnZXQucGF0aCA9ICQkW1FUX0lOU1RBTExfQklOU10KK30g
ZWxzZSB7CisgICAgdGFyZ2V0LnBhdGggPSAkJElOU1RBTExfQklOUworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9u
bWVudExpbnV4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vz
cy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZWU3ZDM4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKQEAgLTAs
MCArMSw3NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVn
ZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIgorCisjaWYgRU5BQkxFKFNVSURfU0FO
REJPWF9MSU5VWCkKKyNpbmNsdWRlICJTdHJpbmdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8ZGly
ZW50Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxl
cnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8
bGltaXRzLmg+CisjaW5jbHVkZSA8bGluay5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUg
PHNjaGVkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvY2FwYWJp
bGl0eS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgor
I2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNs
dWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8c3lz
L3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisKK2VudW0geyBQYXRoU2l6
ZSA9IDUxMiB9OworY2hhciBzYW5kYm94RGlyZWN0b3J5W1BhdGhTaXplXTsKK3VpZF90IHNhbmRi
b3hVc2VyVWlkOwordWlkX3Qgc2FuZGJveFVzZXJHaWQ7CisKK3N0YXRpYyB2b2lkIGxhdW5jaENo
cm9vdEhlbHBlcihpbnQgc29ja2V0UGFpcltdKQoreworICAgIHN0cnVjdCBybGltaXQgbm9GaWxl
ID0geyAwLCAwIH07CisgICAgLy8gV2UgbmVlZCB0byByZXN0cmljdCB0aGUgcmVzb3VyY2VzIGF2
YWlsYWJsZSB0byBvdXIgcHJvY2VzcyB0byBhdm9pZCBvcGVuaW5nCisgICAgLy8gYSBmaWxlIGJ5
IG1pc3Rha2UuIEhvd2V2ZXIsIENBUF9TWVNfUkVTU09VUkNFIGNhcGFiaWxpdHkgc2hvdWxkIGJl
IGRyb3BwZWQKKyAgICAvLyBvdGhlcndpc2UgaXQgd29uJ3Qgd29yay4KKyAgICBpZiAoc2V0cmxp
bWl0KFJMSU1JVF9OT0ZJTEUsICZub0ZpbGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
SGVscGVyIGNvdWxkbid0IHNldCB0aGUgcmVzb3VyY2VsaW1pdDogJXMuXG4iLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNsb3NlKHNvY2tldFBh
aXJbMV0pKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY2xvc2Ugc29ja2V0
ICVkOiAlc1xuIiwgc29ja2V0UGFpclsxXSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFdlIGV4cGVjdCBhICdDJyAoQ2hyb290TWUpIG1lc3NhZ2Ug
ZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKyAgICBjaGFyIG1lc3NhZ2U7CisgICAgaWYgKHJlYWQoc29j
a2V0UGFpclswXSwgJm1lc3NhZ2UsIDEpICE9IDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDb3VsZG4ndCByZWFkIHRoZSBwcm9wZXIgY2hyb290bWUgbXNnOiAlc1xuIiwgc3RyZXJyb3Io
ZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtZXNzYWdlICE9IE1T
R19DSFJPT1RNRSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldyb25nIG1lc3NhZ2UgcmVj
aWV2ZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0cnVjdCBzdGF0IHNh
bmRib3hEaXJlY3RvcnlJbmZvOworICAgIGlmIChsc3RhdChzYW5kYm94RGlyZWN0b3J5LCAmc2Fu
ZGJveERpcmVjdG9yeUluZm8pICYmIFNfSVNESVIoc2FuZGJveERpcmVjdG9yeUluZm8uc3RfbW9k
ZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTYW5kYm94IGRpcmVjdG9yeSAoJXMpIGRv
ZXMgbm90IGV4aXN0IVxuIiwgc2FuZGJveERpcmVjdG9yeSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoY2hyb290KHNhbmRib3hEaXJlY3RvcnkpKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ2hyb290aW5nIGZhaWxlZDogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2hyb290IG9ubHkgY2hhbmdlcyB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGNhbGxpbmcgcHJvY2VzcyBidXQgZG9lc24ndCBjaGFuZ2UK
KyAgICAvLyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhlcmVmb3JlLCBpZiB3ZSBk
b24ndCBkbyBpdCBtYW51YWxseSBhIG1hbGljaW91cyB1c2VyCisgICAgLy8gY291bGQgYnJlYWsg
b3V0IHRoZSBqYWlsIHdpdGggcmVsYXRpdmUgcGF0aHMuCisgICAgaWYgKGNoZGlyKCIvIikpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjaGFuZ2UgdGhlIHdvcmtpbmcgZGly
ZWN0b3J5IHRvIC8uOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFNlbmRpbmcgYWNrbm93bGVkZ2VtZW50IHRvIHRoZSBXZWJQcm9jZXNz
IHRoYXQgdGhlIHNhbmRib3hpbmcgd2FzIHN1Y2Nlc3NmdWxsLgorICAgIG1lc3NhZ2UgPSBNU0df
Q0hST09URUQ7CisgICAgaWYgKHdyaXRlKHNvY2tldFBhaXJbMF0sICZtZXNzYWdlLCAxKSAhPSAx
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgc2VuZCBhY2tub3dsZWRnZW1l
bnQgdG8gV2ViUHJvY2VzczogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKK30KKworc3RhdGljIGJvb2wgc2V0
RW52aXJvbm1lbnRWYXJpYWJsZXNGb3JDaHJvb3RIZWxwZXIocGlkX3QgcGlkLCBpbnQgc29ja2V0
UGFpcltdKQoreworICAgIGNvbnN0IGludCBkZXNjcmlwdG9yU2l6ZSA9IDMyOworICAgIGNoYXIg
c29ja2V0RGVzY3JpcHRvcltkZXNjcmlwdG9yU2l6ZV07CisgICAgY2hhciBzYW5kYm94SGVscGVy
UGlkW2Rlc2NyaXB0b3JTaXplXTsKKworICAgIGludCBsZW5ndGggPSBzbnByaW50ZihzYW5kYm94
SGVscGVyUGlkLCBzaXplb2Yoc2FuZGJveEhlbHBlclBpZCksICIldSIsIHBpZCk7CisgICAgaWYg
KGxlbmd0aCA8IDAgfHwgbGVuZ3RoID49IHNpemVvZihzYW5kYm94SGVscGVyUGlkKSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbnZlcnRpbmcgdGhlIHBpZCB0byBzdHJpbmcgaXMgZmFp
bGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGlmIChzZXRlbnYoU0JYX0hFTFBFUl9QSUQsIHNhbmRib3hIZWxwZXJQaWQsIDEp
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgc2V0IHRoZSBTQlhfSEVMUEVS
X1BJRCBlbnYgdmFyaWFibGU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgbGVuZ3RoID0gc25wcmludGYoc29ja2V0RGVzY3JpcHRv
ciwgc2l6ZW9mKHNvY2tldERlc2NyaXB0b3IpLCAiJXUiLCBzb2NrZXRQYWlyWzFdKTsKKyAgICBp
ZiAobGVuZ3RoIDwgMCB8fCBsZW5ndGggPj0gc2l6ZW9mKHNvY2tldERlc2NyaXB0b3IpKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29udmVydGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRv
IHN0cmluZyBpcyBmYWlsZWQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzZXRlbnYoU0JYX0QsIHNvY2tldERlc2NyaXB0
b3IsIDEpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2F2aW5nIHRoZSBoZWxwZXJzIGZp
bGVkZXNjcmlwdG9yIGludG8gYW4gZW52IHZhcmlhYmxlIGZhaWxlZDogJXNcbiIsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY2xvc2Uo
c29ja2V0UGFpclswXSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9zaW5nIG9mICVk
IGZhaWxlZDogJXNcbiIsIHNvY2tldFBhaXJbMF0sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s
IHByZXBhcmVBbmRTdGFydENocm9vdEhlbHBlcigpCit7CisgICAgaW50IHNvY2tldFBhaXJbMl07
CisgICAgcGlkX3QgcGlkOworCisgICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJF
QU0sIDAsIHNvY2tldFBhaXIpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qg
Y3JlYXRlIHNvY2tldHBhaXI6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcGlkID0gc3lzY2FsbChTWVNfY2xvbmUsIENMT05FX0ZT
IHwgU0lHQ0hMRCwgMCwgMCwgMCk7CisKKyAgICBzd2l0Y2ggKHBpZCkgeworICAgIGNhc2UgLTE6
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xvbmUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3Io
ZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSAwOgorICAgICAgICAv
LyBDaGlsZCBwcm9jZXNzOiB3ZSBzdGFydCB0aGUgY2hyb290IGhlbHBlciB3aGljaCB3YWl0cyBm
b3IgdGhlICJDaHJvb3RNZSIKKyAgICAgICAgLy8gbWVzc2FnZSBmcm9tIHRoZSBXZWJQcm9jZXNz
LiBJZiB3ZSBhcmUgc3VjY2Vzc2VkLCB0aGVuIHdlIHdvbid0IHJldHVybi4KKyAgICAgICAgbGF1
bmNoQ2hyb290SGVscGVyKHNvY2tldFBhaXIpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFBhcmVu
dCBwcm9jZXNzOiBleHBvcnRzIHRoZSBwaWQgb2YgdGhlIGhlbHBlciBhbmQgdGhlIHNvY2tldCBp
ZCBzbyB0aGUKKyAgICAgICAgLy8gaGVscGVyIGFuZCB0aGUgV2ViUHJvY2VzcyBjYW4gY29tbXVu
aWNhdGUuCisgICAgICAgIHJldHVybiBzZXRFbnZpcm9ubWVudFZhcmlhYmxlc0ZvckNocm9vdEhl
bHBlcihwaWQsIHNvY2tldFBhaXIpOworICAgIH0KKyAgICAvLyBXZSBzaG91bGQgbmV2ZXIgcmVh
Y2ggaGVyZS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFNldCBjYXBhYmlsaXRpZXMgaW4g
YWxsIHRocmVlIHNldHMuCitzdGF0aWMgYm9vbCBzZXRDYXBhYmlsaXRpZXMoY2FwX3ZhbHVlX3Qq
IGNhcGFiaWxpdHlMaXN0LCBpbnQgbGVuZ3RoKQoreworICAgIGNhcF90IGNhcGFiaWxpdGllczsK
KworICAgIC8vIENhcGFiaWxpdGllcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBmbGFn
cy4KKyAgICBjYXBhYmlsaXRpZXMgPSBjYXBfaW5pdCgpOworICAgIGlmICghY2FwYWJpbGl0aWVz
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHJvY2VzcyBjYXBhYmlsaXRpZXMgaW5pdCBm
YWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKGNhcF9jbGVhcihjYXBhYmlsaXRpZXMpKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ2xlYXJpbmcgcHJvY2VzcyBjYXBhYmlsaXRpZXMgZmFpbGVkOiAlc1xuIiwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
IChjYXBhYmlsaXR5TGlzdCAmJiBsZW5ndGgpIHsKKyAgICAgICAgaWYgKGNhcF9zZXRfZmxhZyhj
YXBhYmlsaXRpZXMsIENBUF9FRkZFQ1RJVkUsIGxlbmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9T
RVQpCisgICAgICAgICAgICB8fCBjYXBfc2V0X2ZsYWcoY2FwYWJpbGl0aWVzLCBDQVBfSU5IRVJJ
VEFCTEUsIGxlbmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9TRVQpCisgICAgICAgICAgICB8fCBj
YXBfc2V0X2ZsYWcoY2FwYWJpbGl0aWVzLCBDQVBfUEVSTUlUVEVELCBsZW5ndGgsIGNhcGFiaWxp
dHlMaXN0LCBDQVBfU0VUKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3Qg
c2V0IHByb2Nlc3MgY2FwYWJpbGl0eSBmbGFnczogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgICAgICBjYXBfZnJlZShjYXBhYmlsaXRpZXMpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNhcF9zZXRfcHJvYyhjYXBhYmlsaXRp
ZXMpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IHNldCBwcm9jZXNzIGNhcGFi
aWxpdGllczogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGNhcF9mcmVlKGNhcGFi
aWxpdGllcyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY2FwX2ZyZWUoY2Fw
YWJpbGl0aWVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZHJvcFByaXZp
bGVnZXMoKQoreworICAgIC8vIFdlIGJlY29tZSBleHBsaWNpdGVseSBub24gZHVtcGFibGUuCisg
ICAgaWYgKHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMCwgMCwgMCwgMCkpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJTZXR0aW5nIGR1bXBsYWJsZSBpcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJv
cihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNldHJl
c2dpZChzYW5kYm94VXNlckdpZCwgc2FuZGJveFVzZXJHaWQsIHNhbmRib3hVc2VyR2lkKQorICAg
ICAgICB8fCBzZXRyZXN1aWQoc2FuZGJveFVzZXJVaWQsIHNhbmRib3hVc2VyVWlkLCBzYW5kYm94
VXNlclVpZCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBmYWxsYmFjayB0
byB1c2VyOiAlZC5cbiIsIHNhbmRib3hVc2VyVWlkKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAvLyBEcm9wIGFsbCBjYXBhYmlsaXRpZXMuIEFnYWluLCBzZXR1aWQoKSBub3Jt
YWxseSB0YWtlcyBjYXJlIG9mIHRoaXMgaWYgd2UgaGFkIGV1aWQgMC4KKyAgICByZXR1cm4gc2V0
Q2FwYWJpbGl0aWVzKDAsIDApOworfQorCitzdGF0aWMgYm9vbCBmaWxlRXhpc3RzKGNvbnN0IGNo
YXIqIHBhdGgpCit7CisgICAgc3RydWN0IHN0YXQgZmlsZVN0YXQ7CisgICAgcmV0dXJuICEobHN0
YXQocGF0aCwgJmZpbGVTdGF0KSAmJiBlcnJubyA9PSBFTk9FTlQpOworfQorCitzdGF0aWMgbW9k
ZV90IGRpcmVjdG9yeVBlcm1pc3Npb25zKGNvbnN0IGNoYXIqIGRpcmVjdG9yeSkKK3sKKyAgICBz
dHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICBzdGF0KGRpcmVjdG9yeSwgJmZpbGVTdGF0KTsKKyAg
ICByZXR1cm4gZmlsZVN0YXQuc3RfbW9kZTsKK30KKworc3RhdGljIGJvb2wgY3JlYXRlRGlyZWN0
b3J5KGNoYXIqIHBhdGhUb0NyZWF0ZSwgY29uc3QgY2hhciogbmV4dERpcmVjdG9yeVRvQ3JlYXRl
KQoreworICAgIGlmICghc3RyaW5nQXBwZW5kKHBhdGhUb0NyZWF0ZSwgbmV4dERpcmVjdG9yeVRv
Q3JlYXRlLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNoYXIgcGF0
aFRvQ3JlYXRlSW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICBpZiAoIXN0cmluZ0NvbmNhdChwYXRo
VG9DcmVhdGVJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksIHBhdGhUb0NyZWF0ZSwgUGF0aFNp
emUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtb2RlX3QgbW9kZSA9IGRpcmVjdG9y
eVBlcm1pc3Npb25zKHBhdGhUb0NyZWF0ZSk7CisgICAgaWYgKG1rZGlyKHBhdGhUb0NyZWF0ZUlu
U2FuZGJveCwgbW9kZSkpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkgeworICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJDcmVhdGlvbiBvZiAlcyBmYWlsZWQ6ICVzXG4iLCBwYXRo
VG9DcmVhdGVJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKKyAg
ICBsc3RhdChwYXRoVG9DcmVhdGUsICZmaWxlSW5mbyk7CisgICAgaWYgKGZpbGVJbmZvLnN0X3Vp
ZCA9PSBnZXR1aWQoKSkgeworICAgICAgICBpZiAoY2hvd24ocGF0aFRvQ3JlYXRlSW5TYW5kYm94
LCBzYW5kYm94VXNlclVpZCwgc2FuZGJveFVzZXJHaWQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoY2htb2QocGF0aFRvQ3JlYXRlSW5TYW5kYm94LCBmaWxlSW5m
by5zdF9tb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgYm9vbCBjcmVhdGVEaXJlY3RvcnlQYXRoKGNoYXIqIHBhdGgpCit7CisgICAgY2hh
ciBmdWxsUGF0aEluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoZnVs
bFBhdGhJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksIHBhdGgsIFBhdGhTaXplKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZpbGVFeGlzdHMoZnVsbFBhdGhJblNhbmRib3gp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNoYXIgYWxyZWFkeUNyZWF0ZWRQYXRoW1Bh
dGhTaXplXTsKKyAgICBhbHJlYWR5Q3JlYXRlZFBhdGhbMF0gPSAnXDAnOworICAgIC8vIHN0YXJ0
UG9zIGlzIChwYXRoICsgMSkgYmVjYXVzZSB3ZSBza2lwIHRoZSBmaXJzdCAnLycuCisgICAgY2hh
ciogc3RhcnRQb3MgPSBwYXRoICsgMTsKKyAgICBjaGFyKiBlbmRQb3M7CisgICAgd2hpbGUgKChl
bmRQb3MgPSBzdHJjaHIoc3RhcnRQb3MsICcvJykpKSB7CisgICAgICAgIGNoYXIgbmV4dERpcmVj
dG9yeVRvQ3JlYXRlW1BhdGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb3B5KG5leHREaXJl
Y3RvcnlUb0NyZWF0ZSwgc3RhcnRQb3MgLSAxLCBlbmRQb3MgLSBzdGFydFBvcyArIDEsIFBhdGhT
aXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjcmVhdGVEaXJl
Y3RvcnkoYWxyZWFkeUNyZWF0ZWRQYXRoLCBuZXh0RGlyZWN0b3J5VG9DcmVhdGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7CisgICAg
fQorICAgIC8vIENyZWF0ZSB0aGUgbGFzdCBkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeXBhdGgu
CisgICAgYWxyZWFkeUNyZWF0ZWRQYXRoWzBdID0gJ1wwJzsKKyAgICByZXR1cm4gY3JlYXRlRGly
ZWN0b3J5KGFscmVhZHlDcmVhdGVkUGF0aCwgcGF0aCk7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0
ZURldmljZUZpbGVzKCkKK3sKKyAgICBjaGFyIGRldltdID0gIi9kZXYvIjsKKyAgICBpZiAoIWNy
ZWF0ZURpcmVjdG9yeVBhdGgoZGV2KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0
IGNoYXIqIGRldmljZXNbMl0gPSB7ICIvZGV2L3JhbmRvbSIsICIvZGV2L3VyYW5kb20iIH07Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgc3RydWN0IHN0YXQgc3Rh
dHVzOworICAgICAgICBpZiAobHN0YXQoZGV2aWNlc1tpXSwgJnN0YXR1cykpIHsKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkgb2J0YWluaW5nIGluZm9ybWF0aW9uIGFib3V0
IGRldmljZSBmaWxlICglcyk6ICVzXG4iLCBkZXZpY2VzW2ldLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRldl90IGRldiA9
IHN0YXR1cy5zdF9yZGV2OworICAgICAgICAvLyBCb3RoIG5lZWRlZCBkZXZpY2UgZmlsZXMgKC9k
ZXYvcmFuZG9tIGFuZCAvZGV2L3VyYW5kb20pIGFyZSBjaGFyYWN0ZXIgbV9kZXZpY2VzIGFuZAor
ICAgICAgICAvLyB0aGVpciBwZXJtaXNzaW9ucyBzaG91bGQgYmU6IHJ3LXJ3LXJ3LS4KKyAgICAg
ICAgY2hhciBkZXZpY2VbUGF0aFNpemVdOworICAgICAgICBpZiAoIXN0cmluZ0NvbmNhdChkZXZp
Y2UsIHNhbmRib3hEaXJlY3RvcnksIGRldmljZXNbaV0sIFBhdGhTaXplKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1rbm9kKGRldmljZSwgU19JRkNIUiB8IFNfSVJV
U1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lST1RIIHwgU19JV09USCwgbWFr
ZWRldihtYWpvcihkZXYpLCBtaW5vcihkZXYpKSkpIHsKKyAgICAgICAgICAgIGlmIChlcnJubyAh
PSBFRVhJU1QpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNy
ZWF0ZSBkZXZpY2UgZmlsZSAlczogJXNcbiIsIGRldmljZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIG1vdW50RmlsZVN5c3RlbXMo
KQoreworICAgIGNoYXIgcHJvY1tdID0gIi9wcm9jLyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3Rv
cnlQYXRoKHByb2MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBwcm9jUGF0aElu
U2FuZGJveFtQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQocHJvY1BhdGhJblNhbmRi
b3gsIHNhbmRib3hEaXJlY3RvcnksIHByb2MsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtb3VudChwcm9jLCBwcm9jUGF0aEluU2FuZGJveCwgInByb2MiLCAwLCAw
KSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUJVU1kpIHsKKyAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiRXJyb3IgYnkgbW91bnRpbmcgJXMuICVzXG4iLCBwcm9jLCBzdHJlcnJvcihlcnJu
bykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
Y2hhciBzaGFyZWRNZW1vcnlbXSA9ICIvcnVuL3NobS8iOworICAgIGlmICghY3JlYXRlRGlyZWN0
b3J5UGF0aChzaGFyZWRNZW1vcnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBz
aGFyZWRNZW1vcnlQYXRoSW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICBpZiAoIXN0cmluZ0NvbmNh
dChzaGFyZWRNZW1vcnlQYXRoSW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBzaGFyZWRNZW1v
cnksIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtb3VudChzaGFy
ZWRNZW1vcnksIHNoYXJlZE1lbW9yeVBhdGhJblNhbmRib3gsICJ0bXBmcyIsIDAsIDApKSB7Cisg
ICAgICAgIGlmIChlcnJubyAhPSBFQlVTWSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJFcnJvciBieSBtb3VudGluZyAlczogJXNcbiIsIHNoYXJlZE1lbW9yeSwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbGlua0ZpbGUoY2hhciogc291cmNlRmlsZSwg
Y2hhciogdGFyZ2V0RmlsZSkKK3sKKyAgICBib29sIGlzU3ltbGluayA9IHRydWU7CisgICAgd2hp
bGUgKGlzU3ltbGluaykgeworICAgICAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKKyAgICAgICAg
aWYgKGxzdGF0KHNvdXJjZUZpbGUsICZmaWxlSW5mbykpIHsKKyAgICAgICAgICAgIGlmIChlcnJu
byAhPSBFTk9FTlQpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0
IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCAlczogJXNcbiIsIHNvdXJjZUZpbGUsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gSWYgdGhlIG9yaWdpbmFsIGZpbGUgZG9lc24ndCBleGlzdCAoZS5nLiBk
YW5nbGluZyBsaW5rcykgdGhlbiB3ZSBjYW4gaWdub3JlIGl0CisgICAgICAgICAgICAvLyBpbiB0
aGUgc2FuZGJveCB0b28uCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBjaGFyKiBlbmRPZkJhc2VEaXJlY3RvcnlJblNvdXJjZSA9IHN0cnJjaHIoc291cmNlRmls
ZSwgJy8nKTsKKyAgICAgICAgaWYgKCFlbmRPZkJhc2VEaXJlY3RvcnlJblNvdXJjZSkgeworICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHNvdXJjZTogJXMuXG4iLCBzb3VyY2VG
aWxlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjaGFy
IGJhc2VEaXJlY3RvcnlPZlNvdXJjZVtQYXRoU2l6ZV07CisgICAgICAgIGlmICghc3RyaW5nQ29w
eShiYXNlRGlyZWN0b3J5T2ZTb3VyY2UsIHNvdXJjZUZpbGUsIGVuZE9mQmFzZURpcmVjdG9yeUlu
U291cmNlIC0gc291cmNlRmlsZSArIDEsIFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlPZlNv
dXJjZSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpbmcgJXMgZmFpbGVk
OiAlcy5cbiIsIGJhc2VEaXJlY3RvcnlPZlNvdXJjZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGluayhzb3VyY2VG
aWxlLCB0YXJnZXRGaWxlKSkgeworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCAmJiBl
cnJubyAhPSBFTk9FTlQpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxpbmtp
bmcgJXMgZmFpbGVkOiAlcy5cbiIsIHNvdXJjZUZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gSGFuZGxlIHN5bWxpbmtzLgorICAgICAgICBpc1N5bWxpbmsgPSAoZmlsZUluZm8u
c3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkxOSzsKKyAgICAgICAgaWYgKCFpc1N5bWxpbmspCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjaGFyIHN5bWxpbmtUYXJnZXRbUGF0aFNpemVd
OworICAgICAgICBpbnQgbGVuZ3RoT2ZUaGVMaW5rID0gcmVhZGxpbmsoc291cmNlRmlsZSwgc3lt
bGlua1RhcmdldCwgc2l6ZW9mKHN5bWxpbmtUYXJnZXQpIC0gMSk7CisgICAgICAgIGlmIChsZW5n
dGhPZlRoZUxpbmsgPiAwKQorICAgICAgICAgICAgc3ltbGlua1RhcmdldFtsZW5ndGhPZlRoZUxp
bmtdID0gJ1wwJzsKKyAgICAgICAgY2hhciBzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGRbUGF0aFNp
emVdOworICAgICAgICBjaGFyIHN5bWxpbmtUYXJnZXRJblNhbmRib3hbUGF0aFNpemVdOworICAg
ICAgICAvLyBNYWtpbmcgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBw
YXRocy4KKyAgICAgICAgaWYgKHN5bWxpbmtUYXJnZXRbMF0gPT0gJy8nKSB7CisgICAgICAgICAg
ICBpZiAoIXN0cmluZ0NvcHkoc3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBzeW1saW5rVGFyZ2V0
LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKCFzdHJpbmdDb25jYXQoc3ltbGlua1RhcmdldEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9y
eSwgc3ltbGlua1RhcmdldCwgUGF0aFNpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc3RyaW5nQ29uY2F0KHN5bWxp
bmtUYXJnZXRJblJlYWxXb3JsZCwgYmFzZURpcmVjdG9yeU9mU291cmNlLCAiLyIsIHN5bWxpbmtU
YXJnZXQsIFBhdGhTaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIXN0cmluZ0NvbmNhdChzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBzYW5kYm94RGly
ZWN0b3J5LCAiLyIsIHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCwgUGF0aFNpemUpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXN0cmluZ0Nv
cHkoc291cmNlRmlsZSwgc3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBQYXRoU2l6ZSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghc3RyaW5nQ29weSh0YXJnZXRGaWxl
LCBzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBsaW5rRGly
ZWN0b3J5KGNoYXIqIHNvdXJjZURpcmVjdG9yeVBhdGgsIGNoYXIqIHRhcmdldERpcmVjdG9yeVBh
dGgpCit7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKHNvdXJjZURpcmVjdG9yeVBhdGgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgRElSKiBkaXJlY3RvcnkgPSBvcGVuZGlyKHNv
dXJjZURpcmVjdG9yeVBhdGgpOworICAgIGlmICghZGlyZWN0b3J5KSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiBkaXJlY3RvcnkgJXM6ICVzXG4iLCBzb3VyY2VEaXJl
Y3RvcnlQYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgc3RydWN0IGRpcmVudCAqZGlyZWN0b3J5SW5mbyA9IDA7CisgICAgd2hpbGUgKChk
aXJlY3RvcnlJbmZvID0gcmVhZGRpcihkaXJlY3RvcnkpKSkgeworICAgICAgICBjaGFyKiBuZXh0
RmlsZUluRGlyZWN0b3J5ID0gZGlyZWN0b3J5SW5mby0+ZF9uYW1lOworICAgICAgICAvLyBXZSBt
dXN0IG5vdCBsaW5rICcuJyBhbmQgIi4uIiBpbnRvIHRoZSBzYW5kYm94LgorICAgICAgICBpZiAo
IXN0cm5jbXAobmV4dEZpbGVJbkRpcmVjdG9yeSwgIi4iLCBzdHJsZW4obmV4dEZpbGVJbkRpcmVj
dG9yeSkpIHx8ICFzdHJuY21wKG5leHRGaWxlSW5EaXJlY3RvcnksICIuLiIsIDIpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNoYXIgc291cmNlRmlsZVtQYXRoU2l6ZV07CisgICAg
ICAgIGlmICghc3RyaW5nQ29uY2F0KHNvdXJjZUZpbGUsIHNvdXJjZURpcmVjdG9yeVBhdGgsICIv
IiwgbmV4dEZpbGVJbkRpcmVjdG9yeSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGNoYXIgdGFyZ2V0RmlsZVtQYXRoU2l6ZV07CisgICAgICAgIGlmICgh
c3RyaW5nQ29uY2F0KHRhcmdldEZpbGUsIHRhcmdldERpcmVjdG9yeVBhdGgsICIvIiwgbmV4dEZp
bGVJbkRpcmVjdG9yeSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICBpZiAoKGRpcmVjdG9yeUluZm8tPmRfdHlw
ZSA9PSBEVF9ESVIpKQorICAgICAgICAgICAgb2sgPSBsaW5rRGlyZWN0b3J5KHNvdXJjZUZpbGUs
IHRhcmdldEZpbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvayA9IGxpbmtGaWxlKHNv
dXJjZUZpbGUsIHRhcmdldEZpbGUpOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIG1vZGlmaWNh
dGlvbiB0aW1lIG9mIHRoZSBkaXJlY3RvcmllcyBiZWNhdXNlCisgICAgLy8gaXQgY291bGQgaGF2
ZSBtZWFuaW5nIGUuZy4gaW4gdGhlIGhhc2hnZW5lcmF0aW9uIG9mIGNhY2hlIGZpbGVzLgorICAg
IHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIGlmIChsc3RhdChzb3VyY2VEaXJlY3RvcnlQYXRo
LCAmZmlsZVN0YXQpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkgb2J0YWlu
aW5nIGluZm9ybWF0aW9uIGFib3V0IGRpcmVjdG9yeSAoJXMpOiAlc1xuIiwgc291cmNlRGlyZWN0
b3J5UGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBzdHJ1Y3QgdXRpbWJ1ZiB0aW1lcyA9IHsgZmlsZVN0YXQuc3RfYXRpbWUsIGZpbGVTdGF0
LnN0X210aW1lIH07CisgICAgaWYgKHV0aW1lKHRhcmdldERpcmVjdG9yeVBhdGgsICZ0aW1lcykp
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBzZXQgYmFjayB0aGUgbGFzdCBt
b2RpZmljYXRpb24gdGltZSBvZiAlczogJXNcbiIsIHRhcmdldERpcmVjdG9yeVBhdGgsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBib29sIGNvbGxlY3RSdW5UaW1lRGVwZW5kZW5jaWVzKCkKK3sKKyAg
ICAvLyBUaGUgbGlzdCBvZiBlbXBpcmljYWxseSBnYXRoZXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2ll
cy4KKyAgICBjb25zdCBjaGFyKiBydW50aW1lRGVwZW5kZW5jaWVzW10gPSB7CisgICAgICAgICJs
aWJuc3NfZG5zLnNvIiwKKyAgICAgICAgImxpYnJlc29sdi5zbyIsCisgICAgICAgICJsaWJzc2wu
c28iLAorICAgICAgICAibGliY3J5cHRvLnNvIiwKKyAgICAgICAgMAorICAgIH07CisKKyAgICBj
b25zdCBjaGFyKiogY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5ID0gcnVudGltZURlcGVuZGVuY2ll
czsKKyAgICB3aGlsZSAoKmN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSkgeworICAgICAgICAvLyBU
byBvYnRhaW4gdGhlIHBhdGggb2YgdGhlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIHdlIG9wZW4gdGhl
bSB3aXRoIGRsb3Blbi4KKyAgICAgICAgLy8gV2l0aCB0aGUgaGFuZGxlIHN1cHBsaWVkIGJ5IGRs
b3BlbiB3ZSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkeW5hbWljYWxseQorICAg
ICAgICAvLyBsaW5rZWQgbGlicmFyaWVzLCBzbyB0aGUgcGF0aCB3aGVyZSBhcmUgdGhleSBpbnN0
YWxsZWQuCisgICAgICAgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigqY3VycmVudFJ1bnRpbWVEZXBl
bmRlbmN5LCBSVExEX0xBWlkpOworICAgICAgICBpZiAoIWhhbmRsZSkgeworICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGhhbmRsZXIgb2YgJXM6ICVzXG4iLCAq
Y3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5LCBkbGVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IGxpbmtfbWFwKiBsaW5rTWFwOwor
ICAgICAgICBpZiAoZGxpbmZvKGhhbmRsZSwgUlRMRF9ESV9MSU5LTUFQLCAmbGlua01hcCkpIHsK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZ2V0IGluZm9ybWF0aW9uIGFi
b3V0ICVzOiAlc1xuIiwgKmN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxp
bmtNYXApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZ2V0IHRoZSBs
aW5rbWFwIG9mICVzOiAlcy5cbiIsICpjdXJyZW50UnVudGltZURlcGVuZGVuY3ksIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBjaGFyIHBhdGhPZlRoZUxpYnJhcnlbUGF0aFNpemVdOworICAgICAgICBjaGFyIHBhdGhPZlRo
ZUxpYnJhcnlJblNhbmRib3hbUGF0aFNpemVdOworICAgICAgICBpZiAoIXN0cmluZ0NvcHkocGF0
aE9mVGhlTGlicmFyeSwgbGlua01hcC0+bF9uYW1lLCBQYXRoU2l6ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghc3RyaW5nQ29uY2F0KHBhdGhPZlRoZUxpYnJhcnlJ
blNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksIHBhdGhPZlRoZUxpYnJhcnksIFBhdGhTaXplKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFsaW5rRmlsZShwYXRoT2ZU
aGVMaWJyYXJ5LCBwYXRoT2ZUaGVMaWJyYXJ5SW5TYW5kYm94KSkgeworICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJMaW5raW5nIHJ1bnRpbWUgZGVwZW5kZW5jeTogJXMgZmFpbGVkOiAlc1xu
IiwgcGF0aE9mVGhlTGlicmFyeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGRsY2xv
c2UoaGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBkbGNsb3NlKGhhbmRsZSk7CisgICAgICAgICsrY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5Owor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgc2V0dXBYYXV0aG9yaXR5
Rm9yTm9ib2R5VXNlcigpCit7CisgICAgLy8gVG8gYmUgYWJsZSB1c2UgWCBpbnNpZGUgdGhlIHNh
bmRib3ggYW4gLlhhdXRob3JpdHkgZmlsZSBtdXN0IGJlIGV4aXN0IGluc2lkZSBpdCwKKyAgICAv
LyBvd25lZCBieSB0aGUgc2FuZGJveHVzZXIuIEZ1cnRoZXJtb3JlLCBYQVVUSE9SSVRZIGVudmly
b25tZW50IHZhcmlhYmxlIG11c3QgcG9pbnQgdG8gaXQuCisgICAgY2hhciBidWZmZXJbQlVGU0la
XTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzdHJ1Y3QgcGFzc3dkKiByZWFsVXNlciA9IGdldHB3
dWlkKGdldGdpZCgpKTsKKyAgICBjaGFyIHhhdXRob3JpdHlPZlJlYWxVc2VyW1BhdGhTaXplXTsK
KyAgICBjaGFyIHhhdXRob3JpdHlJblNhbmRib3hbUGF0aFNpemVdOworICAgIGlmICghc3RyaW5n
Q29uY2F0KHhhdXRob3JpdHlPZlJlYWxVc2VyLCByZWFsVXNlci0+cHdfZGlyLCAiLy5YYXV0aG9y
aXR5IiwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzdHJpbmdD
b25jYXQoeGF1dGhvcml0eUluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgeGF1dGhvcml0eU9m
UmVhbFVzZXIsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRklMRSog
c291cmNlID0gZm9wZW4oeGF1dGhvcml0eU9mUmVhbFVzZXIsICJyYiIpOworICAgIGlmICghc291
cmNlKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiAlczogJXNcbiIs
IHhhdXRob3JpdHlPZlJlYWxVc2VyLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgRklMRSogZGVzdCA9IGZvcGVuKHhhdXRob3JpdHlJblNhbmRi
b3gsICJ3YiIpOworICAgIGlmICghZGVzdCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNv
dWxkbid0IG9wZW4gJXM6ICVzXG4iLCB4YXV0aG9yaXR5SW5TYW5kYm94LCBzdHJlcnJvcihlcnJu
bykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2UgY29weSB0aGUg
LlhhdXRob3JpdHkgZmlsZSBvZiB0aGUgcmVhbCB1c2VyIChpbnN0ZWFkIG9mIGxpbmtpbmcpIGJl
Y2F1c2Ugbm9ib2R5IHVzZXIKKyAgICAvLyBzaG91bGQgb3duIGl0IGJ1dCB3ZSBkb24ndCB3YW50
IHRvIGNoYW5nZSB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIG9yaWdpbmFsIGZpbGUuCisgICAgd2hp
bGUgKChzaXplID0gZnJlYWQoYnVmZmVyLCAxLCBCVUZTSVosIHNvdXJjZSkpKQorICAgICAgICBm
d3JpdGUoYnVmZmVyLCAxLCBzaXplLCBkZXN0KTsKKworICAgIGZjbG9zZShzb3VyY2UpOworICAg
IGZjbG9zZShkZXN0KTsKKworICAgIGlmIChjaG93bih4YXV0aG9yaXR5SW5TYW5kYm94LCBzYW5k
Ym94VXNlclVpZCwgc2FuZGJveFVzZXJHaWQpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q2hvd25pbmcgLlhhdXRob3JpdHkgKCVzKSBmYWlsZWQ6ICVzLlxuIiwgeGF1dGhvcml0eUluU2Fu
ZGJveCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBpZiAoc2V0ZW52KCJYQVVUSE9SSVRZIiwgeGF1dGhvcml0eUluU2FuZGJveCwgMSkpIHsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBzZXQgdGhlIFhBVVRIT1JJVFkgZW52cmlv
bm1lbnQgdmFyaWFibGU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBpbml0U2Fu
ZGJveCgpCit7CisgICAgLy8gQ3JlYXRlIHRoZSBzYW5kYm94IGRpcmVjdG9yeS4gV2Ugb25seSBu
ZWVkIHRvIHN0ZXAgaW50byBpdCwgc28KKyAgICAvLyB0aGUgZXhlY3V0YWJsZSBwZXJtaXNzaW9u
IGlzIG5lZWRlZCBvbmx5LgorICAgIGlmIChta2RpcihzYW5kYm94RGlyZWN0b3J5LCAwMTAwKSkg
eworICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkbid0IGNyZWF0ZSB0aGUgc2FuZGJveCBkaXJlY3Rvcnk6ICVzXG4iLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFjcmVhdGVEZXZpY2VGaWxlcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIW1vdW50RmlsZVN5c3RlbXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gSGFyZCBsaW5rIGNhY2hlIGFuZCBmb250IGRpcmVjdG9yaWVzIGludG8gdGhlIHNh
bmRib3ggZW52aXJvbm1lbnQuCisgICAgc3RydWN0IHBhc3N3ZCogdXNlckluZm8gPSBnZXRwd3Vp
ZChnZXR1aWQoKSk7CisgICAgY29uc3QgY2hhciogaG9tZSA9IHVzZXJJbmZvLT5wd19kaXI7Cisg
ICAgY2hhciBsb2NhbERpcltQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQobG9jYWxE
aXIsIGhvbWUsICIvLmxvY2FsL3NoYXJlL05va2lhLyIsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGNoYXIgY2FjaGVEaXJbUGF0aFNpemVdOworICAgIGlmICghc3RyaW5n
Q29uY2F0KGNhY2hlRGlyLCBob21lLCAiLy5jYWNoZS9Ob2tpYS8iLCBQYXRoU2l6ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBjaGFyIGZvbnREaXJbUGF0aFNpemVdOworICAgIGlmICgh
c3RyaW5nQ29uY2F0KGZvbnREaXIsIGhvbWUsICIvLmZvbnRjb25maWcvIiwgUGF0aFNpemUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgY2hhciogbGlua2VkRGlyZWN0b3JpZXNb
XSA9IHsKKyAgICAgICAgY2FjaGVEaXIsCisgICAgICAgIGZvbnREaXIsCisgICAgICAgIGxvY2Fs
RGlyLAorICAgICAgICAiL2V0Yy9mb250cy8iLAorICAgICAgICAiL2V0Yy9zc2wvY2VydHMvIiwK
KyAgICAgICAgIi92YXIvY2FjaGUvZm9udGNvbmZpZy8iLAorICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy8iLAorICAgICAgICAwCisgICAgfTsKKworICAgIGNvbnN0IGNoYXIqKiBjdXJyZW50TGlu
a2VkRGlyZWN0b3J5ID0gbGlua2VkRGlyZWN0b3JpZXM7CisgICAgd2hpbGUgKCpjdXJyZW50TGlu
a2VkRGlyZWN0b3J5KSB7CisgICAgICAgIGNoYXIgbGlua2VkRGlyZWN0b3J5SW5TYW5kYm94W1Bh
dGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb25jYXQobGlua2VkRGlyZWN0b3J5SW5TYW5k
Ym94LCBzYW5kYm94RGlyZWN0b3J5LCAqY3VycmVudExpbmtlZERpcmVjdG9yeSwgUGF0aFNpemUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWxpbmtEaXJlY3Rvcnko
Y29uc3RfY2FzdDxjaGFyKj4oKmN1cnJlbnRMaW5rZWREaXJlY3RvcnkpLCBsaW5rZWREaXJlY3Rv
cnlJblNhbmRib3gpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICArK2N1cnJl
bnRMaW5rZWREaXJlY3Rvcnk7CisgICAgfQorCisgICAgaWYgKCFzZXR1cFhhdXRob3JpdHlGb3JO
b2JvZHlVc2VyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb2xsZWN0
UnVuVGltZURlcGVuZGVuY2llcygpOworfQorCitzdGF0aWMgYm9vbCByZXN0cmljdENhcGFiaWxp
dGllcygpCit7CisgICAgLy8gQ2FwYWJpbGl0aWVzIHdlIG5lZWQuCisgICAgY2FwX3ZhbHVlX3Qg
Y2FwYWJpbHR5TGlzdFs0XTsKKyAgICBjYXBhYmlsdHlMaXN0WzBdID0gQ0FQX1NFVFVJRDsKKyAg
ICBjYXBhYmlsdHlMaXN0WzFdID0gQ0FQX1NFVEdJRDsKKyAgICBjYXBhYmlsdHlMaXN0WzJdID0g
Q0FQX1NZU19BRE1JTjsgLy8gQ2xvbmluZyB3aXRoIENMT05FX05FV1BJRCBmbGFnIGxhdGVyIHdp
bGwgbmVlZCB0aGlzIGNhcGFiaWxpdHkuCisgICAgY2FwYWJpbHR5TGlzdFszXSA9IENBUF9TWVNf
Q0hST09UOworCisgICAgLy8gUmVkdWNlIGNhcGFiaWxpdGllcyB0byB3aGF0IHdlIG5lZWQuCisg
ICAgLy8gQWx0aG91Z2ggd2Ugc3RpbGwgaGF2ZSByb290IGV1aWQgYW5kIHdlIGtlZXAgcm9vdCBl
cXVpdmFsZW50IGNhcGFiaWxpdGllcywKKyAgICAvLyB3ZSByZW1vdmVkICg9IGRpZG4ndCBhZGQp
IENBUF9TWVNfUkVTU09VUkNFIGNhcGFiaWxpdGVzIGFuZCB0aGlzIHJlc3VsdGVkIHRoYXQKKyAg
ICAvLyB0aGUgc2V0cmxpbWl0IGZ1bmN0aW9uIHdpdGggUkxJTUlUX05PRklMRSB3aWxsIGJlIGVm
ZmVjdGl2ZSBsYXRlci4KKyAgICBpZiAoIXNldENhcGFiaWxpdGllcyhjYXBhYmlsdHlMaXN0LCBz
aXplb2YoY2FwYWJpbHR5TGlzdCkgLyBzaXplb2YoY2FwYWJpbHR5TGlzdFswXSkpKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGFkanVzdCBwcm9jZXNzIGNhcGFiaWxpdGll
czogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBtb3ZlVG9OZXdQaWROYW1lc3Bh
Y2UoKQoreworICAgIC8vIENMT05FX05FV1BJRCBhbmQgQ0xPTkVfRlMgc2hvdWxkIGJlIGluIHRo
YXQgb3JkZXIuCisgICAgLy8gV2UgY2FuJ3Qgc2hhcmUgRlMgYWNjcm9zcyBuYW1lc3BhY2VzLgor
ICAgIHBpZF90IHBpZCwgZXhwZWN0ZWRQaWQ7CisgICAgaW50IHN0YXR1czsKKyAgICBwaWQgPSBz
eXNjYWxsKFNZU19jbG9uZSwgQ0xPTkVfTkVXUElEIHwgU0lHQ0hMRCwgMCwgMCwgMCk7CisKKyAg
ICBzd2l0Y2ggKHBpZCkgeworICAgIGNhc2UgLTE6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q2xvbmluZyBpcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSAwOgorICAgICAgICAvLyBDaGlsZCBzaG91bGQgcnVuIHdpdGgg
cGlkIG51bWJlciAxIGluIHRoZSBuZXcgbmFtZXNwYWNlLgorICAgICAgICBpZiAoZ2V0cGlkKCkg
IT0gMSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgYSBu
ZXcgUElEIG5hbWVzcGFjZS5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFdlIGFy
ZSB3YWl0aW5nIGZvciBvdXIgY2hpbGQgKFdlYlByb2Nlc3MpLgorICAgICAgICAvLyBJZiB0aGlz
IHdhaXQgaXMgc3VjY2Vzc2Z1bCBpdCBtZWFucyB0aGF0IG91ciBjaGlsZCBpcyB0ZXJtaW5hdGVk
LgorICAgICAgICBleHBlY3RlZFBpZCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKTsKKyAgICAg
ICAgaWYgKGV4cGVjdGVkUGlkICE9IHBpZCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJXYWl0cGlkIGlzIGZhaWxlZCB3aXRoOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAg
ICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoV0lGRVhJ
VEVEKHN0YXR1cykpCisgICAgICAgICAgICBleGl0KFdFWElUU1RBVFVTKHN0YXR1cykpOworICAg
ICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIGJvb2wgcnVuKGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10pCit7CisgICAgc3Ry
dWN0IHBhc3N3ZCogdXNlckluZm8gPSBnZXRwd3VpZChnZXR1aWQoKSk7CisgICAgaWYgKCF1c2Vy
SW5mbykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGdldCB0aGUgY3VycmVu
dCB1c2VyOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKCFzdHJpbmdDb25jYXQoc2FuZGJveERpcmVjdG9yeSwgdXNlckluZm8t
PnB3X2RpciwgIi8ud2syLXNhbmRib3giLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIEN1cnJlbnRseSB3ZSB1c2Ugbm9ib2R5IHVzZXIgYXMgdGhlIHNhbmRib3gg
dXNlciBhbmQgZmFsbGJhY2sgdG8gdGhlIHJlYWwgdXNlcgorICAgIC8vIGlmIGl0J3MgZmFpbGVk
LiAoV2UgY291bGQgZXh0ZW5kIHRoaXMgaW4gdGhlIGZ1dHVyZSB3aXRoIGEgc3BlY2lmaWMgcmVz
dHJpY3RlZCB1c2VyLikKKyAgICBzdHJ1Y3QgcGFzc3dkKiBub2JvZHlVc2VyID0gZ2V0cHduYW0o
Im5vYm9keSIpOworICAgIGlmIChub2JvZHlVc2VyKSB7CisgICAgICAgIHNhbmRib3hVc2VyVWlk
ID0gbm9ib2R5VXNlci0+cHdfdWlkOworICAgICAgICBzYW5kYm94VXNlckdpZCA9IG5vYm9keVVz
ZXItPnB3X2dpZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzYW5kYm94VXNlclVpZCA9IGdldHVp
ZCgpOworICAgICAgICBzYW5kYm94VXNlckdpZCA9IGdldGdpZCgpOworICAgIH0KKworICAgIC8v
IFdlIHNob3VsZCBoYXZlIHRocmVlIHBhcmFtZXRlcnM6CisgICAgLy8gcGF0aF9vZl90aGlzX2Jp
bmFyeSBwYXRoX29mX3RoZV93ZWJwcm9jZXNzIHNvY2tldF90b19jb21tdW5pY2F0ZV93aXRoX3Vp
cHJvY2VzcworICAgIGlmIChhcmdjICE9IDMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJT
dGFydGluZyBTYW5kYm94UHJvY2VzcyByZXF1aXJlcyAzIHBhcmFtZXRlcnMhXG4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFNhbmRib3hQcm9jZXNzIHNob3VsZCBi
ZSBydW4gd2l0aCBzdWlkIGZsYWcgLi4uCisgICAgaWYgKGdldGV1aWQoKSkgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlRoZSBzYW5kYm94IGlzIG5vdCBzZXRldWlkIHJvb3QuXG4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIC4uLiBidXQgbm90IGFzIHJvb3Qg
KG5vdCB3aXRoIHN1ZG8pLgorICAgIGlmICghZ2V0dWlkKCkpIHsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJUaGUgc2FuZGJveCBpcyBub3QgZGVzaWduZWQgdG8gYmUgcnVuIGJ5IHJvb3QuXG4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaW5pdFNhbmRib3go
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFyZXN0cmljdENhcGFiaWxpdGll
cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBtb3ZlIG91cnNlbGYgYW5k
IG91ciBjaGlsZHJlbiBpbnRvIGEgbmV3IFBJRCBuYW1lc3BhY2UsCisgICAgLy8gd2hlcmUgcHJv
Y2VzcyBJRHMgc3RhcnQgZnJvbSAwIGFnYWluLgorICAgIGlmICghbW92ZVRvTmV3UGlkTmFtZXNw
YWNlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFN0YXJ0aW5nIGEgaGVscGVy
IHdoYXQgd2lsbCB3YWl0aW5nIGZvciB0aGUgImNocm9vdG1lIiBtZXNzYWdlIGZyb20gV2ViUHJv
Y2Vzcy4KKyAgICBpZiAoIXByZXBhcmVBbmRTdGFydENocm9vdEhlbHBlcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIHByaXZpbGVn
ZXMgYW55bW9yZS4KKyAgICBpZiAoIWRyb3BQcml2aWxlZ2VzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFNhbml0eSBjaGVjazogaWYgb3VyIGVmZmVjdGl2ZSBvciByZWFsIHVp
ZC9naWQgaXMgc3RpbGwgMCAocm9vdCkgb3IKKyAgICAvLyB3ZSBjYW4gc2V0IGFueSBvZiB0aGVt
IHRvIDAsIHRoZW4gdGhlIGRyb3BwaW5nIG9mIHByaXZpbGVnZXMgaXMgZmFpbGVkLgorICAgIC8v
IFdlIGVuc3VyZSBoZXJlIHRoYXQgd2UgY2Fubm90IHNldCByb290IGlkIGFmdGVyIGhlcmUuCisg
ICAgaWYgKCFnZXRldWlkKCkgfHwgIWdldGVnaWQoKSB8fCAhc2V0dWlkKDApIHx8ICFzZXRnaWQo
MCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJEcm9wcGluZyBwcml2aWxlZ2VzIGZhaWxl
ZCFcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gU3RhcnQgdGhl
IFdlYlByb2Nlc3MuCisgICAgZXhlY2woYXJndlsxXSwgYXJndlsxXSwgYXJndlsyXSwgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oMCkpOworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgbWFpbihp
bnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdKQoreworICAgIHJldHVybiBydW4oYXJnYywgYXJn
dikgPyAwIDogMTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRM
aW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYTZjOGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3Mv
U2FuZGJveEVudmlyb25tZW50TGludXguaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisjZGVmaW5lIFNhbmRib3hF
bnZpcm9ubWVudExpbnV4X2gKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisKKyNp
Zm5kZWYgQ0xPTkVfTkVXUElECisjZGVmaW5lIENMT05FX05FV1BJRCAgMHgyMDAwMDAwMAorI2Vu
ZGlmCisKKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgor
CisjZGVmaW5lIFNCWF9EICJTQlhfRCIKKyNkZWZpbmUgU0JYX0hFTFBFUl9QSUQgIlNCWF9IRUxQ
RVJfUElEIgorCisjZGVmaW5lIE1TR19DSFJPT1RNRSAnQycKKyNkZWZpbmUgTVNHX0NIUk9PVEVE
ICdPJworCisjaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KKworZXh0ZXJuIGNoYXIgc2FuZGJv
eERpcmVjdG9yeVtdOworZXh0ZXJuIHVpZF90IHNhbmRib3hVc2VyVWlkOworZXh0ZXJuIHVpZF90
IHNhbmRib3hVc2VyR2lkOworCisjZW5kaWYgLy8gU2FuZGJveEVudmlyb25tZW50TGludXhfaAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94
UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51
eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hZDc5ODliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuY3BwCkBAIC0w
LDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVn
ZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJTdHJpbmdPcGVyYXRpb25zLmgiCisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJ
TlVYKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworYm9vbCBz
dHJpbmdDb3B5KGNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBjaGFyKiBzb3VyY2UsIGludCBtYXhT
aXplKQoreworICAgIGludCBsZW5ndGggPSBzdHJsZW4oc291cmNlKTsKKyAgICBpZiAobGVuZ3Ro
ID4gbWF4U2l6ZSAtIDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogYnVmZmVy
IGlzIHRvbyBzbWFsbDogJWQgJXMuXG4iLCBtYXhTaXplLCBzb3VyY2UpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBsZW5ndGgg
KyAxKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzdHJpbmdDb3B5KGNoYXIqIGRlc3Rp
bmF0aW9uLCBjb25zdCBjaGFyKiBzb3VyY2UsIGNvbnN0IGludCBsZW5ndGgsIGludCBtYXhTaXpl
KQoreworICAgIGlmIChsZW5ndGggPiBtYXhTaXplIC0gMSB8fCBsZW5ndGggPiBzdHJsZW4oc291
cmNlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBidWZmZXIgaXMgdG9vIHNt
YWxsOiAlZCAlcy5cbiIsIG1heFNpemUsIHNvdXJjZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIGxlbmd0aCk7CisgICAgZGVz
dGluYXRpb25bbGVuZ3RoXSA9ICdcMCc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3Ry
aW5nQ29uY2F0KGNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBjaGFyKiBzb3VyY2UxLCBjb25zdCBj
aGFyKiBzb3VyY2UyLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3RoMSA9IHN0cmxlbihz
b3VyY2UxKTsKKyAgICBpbnQgbGVuZ3RoMiA9IHN0cmxlbihzb3VyY2UyKTsKKyAgICBpZiAobGVu
Z3RoMSArIGxlbmd0aDIgPiBtYXhTaXplIC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkVycm9yOiBidWZmZXIgaXMgdG9vIHNtYWxsOiAlZCAlZCAlcyAlcy5cbiIsIG1heFNpemUsIGxl
bmd0aDEgKyBsZW5ndGgyLCBzb3VyY2UxLCBzb3VyY2UyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZTEsIGxlbmd0aDEpOworICAg
IG1lbWNweShkZXN0aW5hdGlvbiArIGxlbmd0aDEsIHNvdXJjZTIsIGxlbmd0aDIgKyAxKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzdHJpbmdDb25jYXQoY2hhciogZGVzdGluYXRpb24s
IGNvbnN0IGNoYXIqIHNvdXJjZTEsIGNvbnN0IGNoYXIqIHNvdXJjZTIsIGNvbnN0IGNoYXIqIHNv
dXJjZTMsIGludCBtYXhTaXplKQoreworICAgIGludCBsZW5ndGgxID0gc3RybGVuKHNvdXJjZTEp
OworICAgIGludCBsZW5ndGgyID0gc3RybGVuKHNvdXJjZTIpOworICAgIGludCBsZW5ndGgzID0g
c3RybGVuKHNvdXJjZTMpOworICAgIGlmIChsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDMgPiBt
YXhTaXplIC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBidWZmZXIgaXMg
dG9vIHNtYWxsOiAlZCAlZCAlcyAlcyAlcy5cbiIsIG1heFNpemUsIGxlbmd0aDEgKyBsZW5ndGgy
ICsgbGVuZ3RoMywgc291cmNlMSwgc291cmNlMiwgc291cmNlMyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UxLCBsZW5ndGgxKTsK
KyAgICBtZW1jcHkoZGVzdGluYXRpb24gKyBsZW5ndGgxLCBzb3VyY2UyLCBsZW5ndGgyKTsKKyAg
ICBtZW1jcHkoZGVzdGluYXRpb24gKyBsZW5ndGgxICsgbGVuZ3RoMiwgc291cmNlMywgbGVuZ3Ro
Myk7CisgICAgZGVzdGluYXRpb25bbGVuZ3RoMSArIGxlbmd0aDIgKyBsZW5ndGgzXSA9ICdcMCc7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3RyaW5nQXBwZW5kKGNoYXIqIGRlc3RpbmF0
aW9uLCBjb25zdCBjaGFyKiBzb3VyY2UsIGludCBtYXhTaXplKQoreworICAgIGludCBzb3VyY2VM
ZW5ndGggPSBzdHJsZW4oc291cmNlKTsKKyAgICBpbnQgZGVzdGluYXRpb25MZW5ndGggPSBzdHJs
ZW4oZGVzdGluYXRpb24pOworICAgIGlmIChzb3VyY2VMZW5ndGggKyBkZXN0aW5hdGlvbkxlbmd0
aCA+IG1heFNpemUgLSAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGJ1ZmZl
ciBpcyB0b28gc21hbGw6ICVkICVzLlxuIiwgbWF4U2l6ZSwgc291cmNlKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVzdGluYXRpb24gKyBkZXN0aW5hdGlvbkxl
bmd0aCwgc291cmNlLCBzb3VyY2VMZW5ndGggKyAxKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFBy
b2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1Nh
bmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mMDA4ZDY3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmgKQEAgLTAsMCArMSwz
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICog
Q29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU3RyaW5nT3BlcmF0aW9uc19oCisjZGVm
aW5lIFN0cmluZ09wZXJhdGlvbnNfaAorCisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkK
Ky8vIFNlY3VyZSBzdHJpbmcgb3BlcmF0aW9ucy4KK2Jvb2wgc3RyaW5nQ29weShjaGFyKiwgY29u
c3QgY2hhciosIGludCk7Citib29sIHN0cmluZ0NvcHkoY2hhciosIGNvbnN0IGNoYXIqLCBjb25z
dCBpbnQsIGludCk7Citib29sIHN0cmluZ0NvbmNhdChjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0
IGNoYXIqLCBpbnQpOworYm9vbCBzdHJpbmdDb25jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBjb25z
dCBjaGFyKiwgY29uc3QgY2hhciosIGludCk7Citib29sIHN0cmluZ0FwcGVuZChjaGFyKiwgY29u
c3QgY2hhciosIGludCk7CisKKyNlbmRpZgorCisjZW5kaWYgLy8gU3RyaW5nT3BlcmF0aW9uc19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQppbmRleCA2Yzk5Yzg1Li45Yjk3Y2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTEzNSw2
ICsxMzUsOCBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvV2ViVXNlckNvbnRlbnRVUkxQYXR0
ZXJuLmggXAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NBcmd1bWVudENvZGVycy5oIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJD
dXN0b21GaWx0ZXJQcm9ncmFtLmggXAorICAgIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9T
YW5kYm94RW52aXJvbm1lbnRMaW51eC5oIFwKKyAgICBTaGFyZWQvbGludXgvU2FuZGJveFByb2Nl
c3MvU3RyaW5nT3BlcmF0aW9ucy5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRz
Y2FwZVBsdWdpbk1vZHVsZS5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUFJlbW90ZU9iamVjdE1h
cC5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUElkZW50aWZpZXJEYXRhLmggXApAQCAtNDI5LDYg
KzQzMSw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFNoYXJlZC9BUEkvYy9xdC9XS0ltYWdlUXQuY3Bw
IFwKICAgICBTaGFyZWQvQVBJQ2xpZW50VHJhaXRzLmNwcCBcCiAgICAgU2hhcmVkL0FQSU9iamVj
dC5jcHAgXAorICAgIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1l
bnRMaW51eC5jcHAgXAorICAgIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVy
YXRpb25zLmNwcCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5N
b2R1bGUuY3BwIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1v
ZHVsZU5vbmUuY3BwIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQ
bHVnaW5Nb2R1bGVYMTEuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4IDBiNmVlMWIuLmY2
NDhkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Q
cm9jZXNzTGF1bmNoZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcApAQCAtNjIsNiArNjIsMTAgQEAKICNpbmNsdWRl
IDx3aW5kb3dzLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisj
aW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNlbmRpZgorCiAjaWYgT1MoREFSV0lOKQogI2lu
Y2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+CiAjaW5jbHVkZSA8c2VydmVycy9ib290c3RyYXAuaD4K
QEAgLTE2NywzNyArMTcxLDQ3IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNz
KCkKICAgICBjb21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKICNlbmRp
ZgogCi0gICAgUVByb2Nlc3MqIHdlYlByb2Nlc3MgPSBuZXcgUXRXZWJQcm9jZXNzKCk7Ci0gICAg
d2ViUHJvY2Vzcy0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFu
bmVscyk7Ci0gICAgd2ViUHJvY2Vzcy0+c3RhcnQoY29tbWFuZExpbmUpOworICAgIFFQcm9jZXNz
KiB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgp
CisgICAgUVN0cmluZyBzYW5kYm94Q29tbWFuZExpbmUgPSBRTGF0aW4xU3RyaW5nKCIlMSAlMiAl
MyIpOworICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoUUNv
cmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQYXRoKCkgKyBRTGF0aW4xU3RyaW5nKCIvU1VJ
RFNhbmRib3hIZWxwZXIiKSk7CisgICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1h
bmRMaW5lLmFyZyhleGVjdXRhYmxlUGF0aE9mV2ViUHJvY2VzcygpKTsKKyAgICBzYW5kYm94Q29t
bWFuZExpbmUgPSBzYW5kYm94Q29tbWFuZExpbmUuYXJnKHNvY2tldHNbMF0pOworCisgICAgd2Vi
UHJvY2Vzc09yU1VJREhlbHBlciA9IG5ldyBRUHJvY2VzcygpOworICAgIHdlYlByb2Nlc3NPclNV
SURIZWxwZXItPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6Rm9yd2FyZGVkQ2hhbm5l
bHMpOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnN0YXJ0KHNhbmRib3hDb21tYW5kTGlu
ZSk7CisjZWxzZQorICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXIgPSBuZXcgUXRXZWJQcm9jZXNz
KCk7CisgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQ
cm9jZXNzOjpNZXJnZWRDaGFubmVscyk7CisgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c3Rh
cnQoY29tbWFuZExpbmUpOworI2VuZGlmCiAKICNpZiBPUyhVTklYKSAmJiAhT1MoREFSV0lOKQog
ICAgIC8vIERvbid0IGV4cG9zZSB0aGUgd2ViIHNvY2tldCB0byBwb3NzaWJsZSBmdXR1cmUgd2Vi
IHByb2Nlc3NlcwogICAgIHdoaWxlIChmY250bChzb2NrZXRzWzBdLCBGX1NFVEZELCBGRF9DTE9F
WEVDKSA9PSAtMSkgewogICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3M7Cisg
ICAgICAgICAgICBkZWxldGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKCF3ZWJQcm9jZXNzLT53
YWl0Rm9yU3RhcnRlZCgpKSB7CisgICAgaWYgKCF3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT53YWl0
Rm9yU3RhcnRlZCgpKSB7CiAgICAgICAgIHFEZWJ1ZygpIDw8ICJGYWlsZWQgdG8gc3RhcnQiIDw8
IGNvbW1hbmRMaW5lOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNpZiBPUyhEQVJX
SU4pCiAgICAgICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGNvbm5l
Y3Rvcik7CiAgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBjb25u
ZWN0b3IsIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAtMSk7CiAjZW5kaWYKLSAgICAgICAgZGVs
ZXRlIHdlYlByb2Nlc3M7CisgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotCiAjaWYgT1MoVU5JWCkKLSAgICBzZXRwcmlvcml0eShQ
UklPX1BST0NFU1MsIHdlYlByb2Nlc3MtPnBpZCgpLCAxMCk7CisgICAgc2V0cHJpb3JpdHkoUFJJ
T19QUk9DRVNTLCB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5waWQoKSwgMTApOwogI2VuZGlmCi0K
LSAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKGJpbmQoJldlYktpdDo6UHJvY2Vzc0xhdW5j
aGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCB0aGlzLCB3ZWJQcm9jZXNzLCBjb25uZWN0
b3IpKTsKKyAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKGJpbmQoJldlYktpdDo6UHJvY2Vz
c0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCB0aGlzLCB3ZWJQcm9jZXNzT3JT
VUlESGVscGVyLCBjb25uZWN0b3IpKTsKIH0KIAogdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1p
bmF0ZVByb2Nlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQppbmRleCA4MGNiMmZiLi5hYmIzNDM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnByaQpAQCAtNjIsNyArNjIsOCBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0Vf
RElSL1dlYlByb2Nlc3MvV2ViUGFnZSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9x
dCBcCi0gICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MKKyAgICAkJFNPVVJDRV9ESVIvUGx1
Z2luUHJvY2VzcyBcCisgICAgJCRTT1VSQ0VfRElSL1NhbmRib3hQcm9jZXNzIFwKIAogIyBUaGUg
V2ViS2l0MiBRdCBBUElzIGRlcGVuZCBvbiBxd2Via2l0Z2xvYmFsLmgsIHdoaWNoIGxpdmVzIGlu
IFdlYktpdAogSU5DTFVERVBBVEggKz0gJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9j
ZXNzTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01h
aW5RdC5jcHAKaW5kZXggMThmMzAzOTQuLjk5OGUzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcApAQCAtMzQsNyArMzQsOSBAQAog
I2luY2x1ZGUgPFFTdHJpbmdMaXN0PgogI2luY2x1ZGUgPFFVcmw+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC02Miw2
ICs2NCwxNCBAQCBleHRlcm4gIkMiIGtlcm5fcmV0dXJuX3QgYm9vdHN0cmFwX2xvb2tfdXAyKG1h
Y2hfcG9ydF90LCBjb25zdCBuYW1lX3QsIG1hY2hfcG9ydAogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjZGVmaW5lIFNCWF9EICJT
QlhfRCIKKyNkZWZpbmUgU0JYX0hFTFBFUl9QSUQgIlNCWF9IRUxQRVJfUElEIgorCisjZGVmaW5l
IE1TR19DSFJPT1RNRSAnQycKKyNkZWZpbmUgTVNHX0NIUk9PVEVEICdPJworI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJLaXQgewogI2lmbmRlZiBOREVCVUcKICNpZiBPUyhXSU5ET1dTKQpAQCAtMTQy
LDE4ICsxNTIsODAgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVByb3h5KCkKICAgICBRTmV0d29y
a1Byb3h5RmFjdG9yeTo6c2V0VXNlU3lzdGVtQ29uZmlndXJhdGlvbih0cnVlKTsKIH0KIAorI2lm
IEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCitwaWRfdCBjaHJvb3RNZSgpCit7CisgICAgbG9u
ZyBpbnQgZmQgPSAtMTsKKyAgICBjaGFyKiBzYW5kYm94U29ja2V0RGVzY3JpcHRvcjsKKyAgICBj
aGFyKiBoZWxwZXJQaWQ7CisgICAgY2hhciBzYW5kYm94TWVNc2cgPSBNU0dfQ0hST09UTUU7Cisg
ICAgc3NpemVfdCBjbnQ7CisgICAgcGlkX3QgaGVscGVyID0gLTE7CisKKyAgICAvLyBHZXQgdGhl
IGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgc29ja2V0cGFpci4KKyAgICBzYW5kYm94U29ja2V0RGVz
Y3JpcHRvciA9IGdldGVudihTQlhfRCk7CisgICAgaWYgKCFzYW5kYm94U29ja2V0RGVzY3JpcHRv
cikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZXJybm8gPSAwOworICAgIGZkID0gc3RydG9s
KHNhbmRib3hTb2NrZXREZXNjcmlwdG9yLCAoY2hhciAqKikgMCwgMTApOworICAgIGlmIChlcnJu
byB8fCAoZmQgPT0gLTEpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvLyBHZXQgdGhlIFBJ
RCBvZiB0aGUgc2V0dWlkIGhlbHBlci4KKyAgICBoZWxwZXJQaWQgPSBnZXRlbnYoU0JYX0hFTFBF
Ul9QSUQpOworCisgICAgLy8gSWYgbm8gUElEIGlzIGF2YWlsYWJsZSwgdGhlIGRlZmF1bHQgb2Yg
LTEgd2lsbCBkby4KKyAgICBpZiAoaGVscGVyUGlkKSB7CisgICAgICAgIGVycm5vID0gMDsKKyAg
ICAgICAgaGVscGVyID0gc3RydG9sKGhlbHBlclBpZCwgKGNoYXIgKiopIDAsIDEwKTsKKyAgICAg
ICAgaWYgKGVycm5vIHx8IChoZWxwZXIgPT0gLTEpKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKworICAgIC8vIFNlbmQgdGhlIGNocm9vdE1lIG1lc3NhZ2UgdG8gdGhlIGhlbHBlci4K
KyAgICBjbnQgPSB3cml0ZShmZCwgJnNhbmRib3hNZU1zZywgMSk7CisgICAgaWYgKGNudCAhPSAx
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2hyb290TWUgbXNnIGZhaWxlZCB0byB3cml0
ZTogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor
CisgICAgLy8gUmVhZCB0aGUgYWNrbm93bGVkZ2VtZW50IG1lc3NhZ2UgZnJvbSB0aGUgaGVscGVy
LgorICAgIGNudCA9IHJlYWQoZmQsICZzYW5kYm94TWVNc2csIDEpOworICAgIGlmICgoY250ICE9
IDEpIHx8IChzYW5kYm94TWVNc2cgIT0gTVNHX0NIUk9PVEVEKSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNvdWxkbid0IHJlYWQgdGhlIGNvbmZpcm1hdGlvbiBtZXNzYWdlLlxuIik7Cisg
ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY2xvc2UoZmQpOworCisgICAgLy8gV2FpdCBm
b3IgdGhlIGhlbHBlciBwcm9jZXNzLgorICAgIGludCB3YWl0ZWRQaWQgPSB3YWl0cGlkKGhlbHBl
ciwgMCwgMCk7CisgICAgaWYgKHdhaXRlZFBpZCAhPSAtMSAmJiAoKGhlbHBlciA9PSAtMSkgfHwg
KHdhaXRlZFBpZCA9PSBoZWxwZXIpKSkKKyAgICAgICAgcmV0dXJuIHdhaXRlZFBpZDsKKyAgICBm
cHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHdhaXQgZm9yIHRoZSBoZWxwZXIgcHJvY2VzczogJXNc
biIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuIC0xOworfQorI2VuZGlmCisKIFFfREVD
TF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxpY2F0aW9uKiBhcHApCiB7Ci0g
ICAgaW5pdGlhbGl6ZVByb3h5KCk7CisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKyAg
ICBwaWRfdCBoZWxwZXI7CisgICAgaGVscGVyID0gY2hyb290TWUoKTsKIAorICAgIGlmIChoZWxw
ZXIgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJBc2tpbmcgZm9yIGNocm9vdCBm
YWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorICAgIGluaXRp
YWxpemVQcm94eSgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6
aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxv
b3AoKTsKLSAgICAKKwogI2lmIFVTRShRVEtJVCkKICAgICBJbml0V2ViQ29yZVN5c3RlbUludGVy
ZmFjZUZvcldLMigpOwogI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24uCiAg
ICAgaWYgKGFwcC0+YXJndW1lbnRzKCkuc2l6ZSgpIDw9IDEpIHsKICAgICAgICAgcURlYnVnKCkg
PDwgIkVycm9yOiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiI7CmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggMWUzNDE5Zi4uZTYwMTRhYyAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMTE4LDYgKzExOCw3IEBAIG15ICgKICAg
ICAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAgICAgJHNxbERhdGFiYXNlU3VwcG9ydCwKICAgICAk
c3R5bGVTY29wZWRTdXBwb3J0LAorICAgICRzdWlkTGludXhTYW5kYm94LAogICAgICRzdmdET01P
YmpDQmluZGluZ3NTdXBwb3J0LAogICAgICRzdmdGb250c1N1cHBvcnQsCiAgICAgJHN2Z1N1cHBv
cnQsCkBAIC0zNjcsNiArMzY4LDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+
ICJzdHlsZS1zY29wZWQiLCBkZXNjID0+ICJUb2dnbGUgU3R5bGUgU2NvcGVkIHN1cHBvcnQiLAog
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1RZTEVfU0NPUEVEIiwgZGVmYXVsdCA9PiBpc0JsYWNr
QmVycnkoKSwgdmFsdWUgPT4gXCRzdHlsZVNjb3BlZFN1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9u
ID0+ICJzdWlkLWxpbnV4LXNhbmRib3giLCBkZXNjID0+ICJUb2dnbGUgc3VpZCBzYW5kYm94IGZv
ciBsaW51eCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVgiLCBk
ZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkc3VpZExpbnV4U2FuZGJveCB9LAorCiAgICAgeyBvcHRp
b24gPT4gInN2ZyIsIGRlc2MgPT4gIlRvZ2dsZSBTVkcgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUg
PT4gIkVOQUJMRV9TVkciLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkc3ZnU3VwcG9ydCB9LAog
CmRpZmYgLS1naXQgYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5w
cmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYKaW5kZXgg
ODgwMGUxZS4uMjljYjRiNiAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJl
cy9kZWZhdWx0X3Bvc3QucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZGVm
YXVsdF9wb3N0LnByZgpAQCAtMzEyLDMgKzMxMiw0IEBAIGZvcih0YXJnZXQsICQkbGlzdCgkJHVu
aXF1ZShERUZBVUxUX1RBUkdFVFMpKSkgewogREVTVERJUiA9ICQkcmVwbGFjZShERVNURElSLCBe
JCR7Uk9PVF9CVUlMRF9ESVJ9LCAkJHtCVUlMRF9ST09UX1JFTEFUSVZFX1RPX09VVF9QV0R9KQog
CiBsb2FkKGRlZmF1bHRfcG9zdCkgIyBMb2FkIFF0J3MgZGVmYXVsdHMKK1FNQUtFX0xJQlNfT1BF
TkdMICs9IC1sY2FwIC1sZGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoxLjcuOS41
Cgo=
</data>
<flag name="commit-queue"
          id="183029"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170358</attachid>
            <date>2012-10-24 04:04:08 -0700</date>
            <delta_ts>2012-11-06 02:29:01 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-10.5.patch</filename>
            <type>text/plain</type>
            <size>49981</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA1MjgxNWNiYjYzMzhlNmE0YTEwZmEyODQ5OTNlYmQ5ZGYyZGZmMzE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogV2Vk
LCAyNCBPY3QgMjAxMiAxMjo1OTo0NyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGZlbHRvbHQgMTAu
NQoKLS0tCiBTb3VyY2UvUXRXZWJLaXQucHJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgIDUgKwogLi4uL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcgfCAgICAzICstCiBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8gICAgICAg
ICAgICAgICAgICB8ICAgMjkgKwogLi4uL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVu
dExpbnV4LmNwcCAgICAgfCAgNzU2ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vbGludXgvU2Fu
ZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCB8ICAgNDkgKysKIC4uLi9saW51
eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcCAgICAgIHwgICA5NCArKysKIC4u
Li9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5oIHwgICAzNSAr
CiAuLi4vVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCAgICB8ICAg
MzQgKy0KIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgMyArLQogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0
LmNwcCAgfCAgIDc4ICstCiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0g
ICAgICAgICAgICB8ICAgIDQgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTA3NSBpbnNlcnRpb25zKCsp
LCAxNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TYW5k
Ym94UHJvY2Vzcy5wcm8KIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1Nh
bmRib3hFbnZpcm9ubWVudExpbnV4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3Mv
U3RyaW5nT3BlcmF0aW9ucy5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1F0V2ViS2l0LnBybyBiL1Nv
dXJjZS9RdFdlYktpdC5wcm8KaW5kZXggNTlmOWEwZC4uYjA5ZDFkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1F0V2ViS2l0LnBybworKysgYi9Tb3VyY2UvUXRXZWJLaXQucHJvCkBAIC0xNyw2ICsxNywx
MSBAQCBidWlsZD8od2Via2l0MikgewogICAgICAgICBwbHVnaW5wcm9jZXNzLmZpbGUgPSBXZWJL
aXQyL1BsdWdpblByb2Nlc3MucHJvCiAgICAgICAgIFNVQkRJUlMgKz0gcGx1Z2lucHJvY2Vzcwog
ICAgIH0KKworICAgIGVuYWJsZT8oU1VJRF9TQU5EQk9YX0xJTlVYKSB7CisgICAgICAgIHNhbmRi
b3hwcm9jZXNzLmZpbGUgPSBXZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybworICAgICAgICBTVUJE
SVJTICs9IHNhbmRib3hwcm9jZXNzCisgICAgfQogfQogCiBkZWNsYXJhdGl2ZS5maWxlID0gV2Vi
S2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xhcmF0aXZlLnBybwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2Vi
S2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCAyNGY5OGM2
Li5mMDViNGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9G
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMTI4LDYgKzEyOCw3IEBAIEVOQUJMRV9RVU9UQSA9
IDsKIEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZID0gOwogRU5BQkxFX1JFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FID0gRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FOwogRU5BQkxFX1ND
UklQVEVEX1NQRUVDSCA9IDsKK0VOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVggPSA7CiBFTkFCTEVf
U0hBRE9XX0RPTSA9IDsKIEVOQUJMRV9TSEFSRURfV09SS0VSUyA9IEVOQUJMRV9TSEFSRURfV09S
S0VSUzsKIEVOQUJMRV9TUUxfREFUQUJBU0UgPSBFTkFCTEVfU1FMX0RBVEFCQVNFOwpAQCAtMTUw
LDQgKzE1MSw0IEBAIEVOQUJMRV9XRUJfVElNSU5HID0gOwogRU5BQkxFX1dPUktFUlMgPSBFTkFC
TEVfV09SS0VSUzsKIEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5F
UyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFT
KSAkKEVOQUJMRV9BTklNQVRJT05fQVBJKSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVM
X01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElP
Tl9CUkVBSykgJChFTkFCTEVfQ1NTX0VYQ0xVU0lPTlMpICQoRU5BQkxFX0NTU19DT01QT1NJVElO
RykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NTU19ISUVSQVJDSElFUykgJChFTkFC
TEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikg
JChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9DU1Nf
U1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9DU1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9DU1MzX0NP
TkRJVElPTkFMX1JVTEVTKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NVU1RPTV9TQ0hF
TUVfSEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNU
X0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNf
RUxFTUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ESUFMT0dfRUxF
TUVOVCkgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVfRFJBR0dBQkxFX1JFR0lP
TikgJChFTkFCTEVfRklMRV9TWVNURU0pICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZVTExT
Q1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFC
TEVfSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJTkcpICQoRU5BQkxFX0hJR0hfRFBJX0NB
TlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJBTUVfU0VBTUxFU1MpICQo
RU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1NQRUVDSCkgJChFTkFCTEVf
SU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5B
QkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVf
SU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9M
RUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMp
ICQoTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChF
TkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTElOS19QUkVSRU5ERVIpICQoRU5BQkxFX01B
VEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAk
KEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTUlDUk9EQVRB
KSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMpICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5U
X1VUSUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlf
QVBJKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UKSAk
KEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVf
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCkgJChFTkFC
TEVfU0hBRE9XX0RPTSkgJChFTkFCTEVfU0hBUkVEX1dPUktFUlMpICQoRU5BQkxFX1NRTF9EQVRB
QkFTRSkgJChFTkFCTEVfU1RZTEVfU0NPUEVEKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19E
T01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URVhUX0FVVE9T
SVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9UT1VDSF9J
Q09OX0xPQURJTkcpICQoRU5BQkxFX1VORE9fTUFOQUdFUikgJChFTkFCTEVfVklERU8pICQoRU5B
QkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVO
QUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV09SS0VSUykg
JChFTkFCTEVfWFNMVCk7CitGRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcp
ICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQU5JTUFUSU9OX0FQSSkg
JChFTkFCTEVfQkxPQikgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NTUF9O
RVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19FWENM
VVNJT05TKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19GSUxURVJTKSAk
KEVOQUJMRV9DU1NfSElFUkFSQ0hJRVMpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikg
JChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVO
QUJMRV9DU1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTikgJChFTkFCTEVf
Q1NTX1ZBUklBQkxFUykgJChFTkFCTEVfQ1NTM19DT05ESVRJT05BTF9SVUxFUykgJChFTkFCTEVf
Q1NTM19URVhUKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hC
T0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RS
QU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9P
UklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9V
UExPQUQpICQoRU5BQkxFX0RSQUdHQUJMRV9SRUdJT04pICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAk
KEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBB
RCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9U
SFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFT
RSkgJChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAk
KEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxF
X0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVf
SU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVO
QUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMp
ICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMp
ICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5B
QkxFX0xJTktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJD
RSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChF
TkFCTEVfTUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJW
RVJTKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FU
SU9OUykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUERGS0lUX1BMVUdJ
TikgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JF
U09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAk
KEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICAkKEVOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVgpICQo
RU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxf
REFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9T
VkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVYVF9B
VVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVfVE9V
Q0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJREVPKSAk
KEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykg
JChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dPUktF
UlMpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2FuZGJveFBy
b2Nlc3MucHJvIGIvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OGMxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KQEAgLTAsMCArMSwyOSBAQAorIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisjIFByb2plY3QgZmlsZSBmb3IgdGhlIFdlYktpdDIgc2FuZGJveCBwcm9jZXNzIGJpbmFy
eQorIworIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBi
dWlsZCBzeXN0ZW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitURU1QTEFURSA9IGFwcAorCitUQVJHRVQgPSBT
VUlEU2FuZGJveEhlbHBlcgorREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9iaW4KKworU09V
UkNFUyArPSBTaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGlu
dXguY3BwIFwKKyAgICAgICAgICAgU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09w
ZXJhdGlvbnMuY3BwCitIRUFERVJTICs9IFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5k
Ym94RW52aXJvbm1lbnRMaW51eC5oIFwKKyAgICAgICAgICAgU2hhcmVkL2xpbnV4L1NhbmRib3hQ
cm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuaAorCitJTlNUQUxMUyArPSB0YXJnZXQKK0xJQlMgKz0g
LWxjYXAgLWxkbAorCitJTkNMVURFUEFUSCA9IFwKKyAgICAkJFBXRC8uLi9KYXZhU2NyaXB0Q29y
ZSBcCisgICAgJCRQV0QvLi4vV1RGIFwKKyAgICAkJElOQ0xVREVQQVRICisKK2lzRW1wdHkoSU5T
VEFMTF9CSU5TKSB7CisgICAgdGFyZ2V0LnBhdGggPSAkJFtRVF9JTlNUQUxMX0JJTlNdCit9IGVs
c2UgeworICAgIHRhcmdldC5wYXRoID0gJCRJTlNUQUxMX0JJTlMKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1l
bnRMaW51eC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3Mv
U2FuZGJveEVudmlyb25tZW50TGludXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmVlN2QzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCkBAIC0wLDAg
KzEsNzU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2Vk
Lmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiU2FuZGJveEVudmlyb25tZW50TGludXguaCIKKworI2lmIEVOQUJMRShTVUlEX1NBTkRC
T1hfTElOVVgpCisjaW5jbHVkZSAiU3RyaW5nT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPGRpcmVu
dC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8ZXJy
bm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPGxp
bWl0cy5oPgorI2luY2x1ZGUgPGxpbmsuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxz
Y2hlZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL2NhcGFiaWxp
dHkuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNp
bmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVk
ZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHN5cy90
aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNp
bmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx1dGltZS5oPgorCitlbnVtIHsgUGF0aFNpemUg
PSA1MTIgfTsKK2NoYXIgc2FuZGJveERpcmVjdG9yeVtQYXRoU2l6ZV07Cit1aWRfdCBzYW5kYm94
VXNlclVpZDsKK3VpZF90IHNhbmRib3hVc2VyR2lkOworCitzdGF0aWMgdm9pZCBsYXVuY2hDaHJv
b3RIZWxwZXIoaW50IHNvY2tldFBhaXJbXSkKK3sKKyAgICBzdHJ1Y3QgcmxpbWl0IG5vRmlsZSA9
IHsgMCwgMCB9OworICAgIC8vIFdlIG5lZWQgdG8gcmVzdHJpY3QgdGhlIHJlc291cmNlcyBhdmFp
bGFibGUgdG8gb3VyIHByb2Nlc3MgdG8gYXZvaWQgb3BlbmluZworICAgIC8vIGEgZmlsZSBieSBt
aXN0YWtlLiBIb3dldmVyLCBDQVBfU1lTX1JFU1NPVVJDRSBjYXBhYmlsaXR5IHNob3VsZCBiZSBk
cm9wcGVkCisgICAgLy8gb3RoZXJ3aXNlIGl0IHdvbid0IHdvcmsuCisgICAgaWYgKHNldHJsaW1p
dChSTElNSVRfTk9GSUxFLCAmbm9GaWxlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkhl
bHBlciBjb3VsZG4ndCBzZXQgdGhlIHJlc291cmNlbGltaXQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjbG9zZShzb2NrZXRQYWly
WzFdKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNsb3NlIHNvY2tldCAl
ZDogJXNcbiIsIHNvY2tldFBhaXJbMV0sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBXZSBleHBlY3QgYSAnQycgKENocm9vdE1lKSBtZXNzYWdlIGZy
b20gdGhlIFdlYlByb2Nlc3MuCisgICAgY2hhciBtZXNzYWdlOworICAgIGlmIChyZWFkKHNvY2tl
dFBhaXJbMF0sICZtZXNzYWdlLCAxKSAhPSAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q291bGRuJ3QgcmVhZCB0aGUgcHJvcGVyIGNocm9vdG1lIG1zZzogJXNcbiIsIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSAhPSBNU0df
Q0hST09UTUUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJXcm9uZyBtZXNzYWdlIHJlY2ll
dmVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJ1Y3Qgc3RhdCBzYW5k
Ym94RGlyZWN0b3J5SW5mbzsKKyAgICBpZiAobHN0YXQoc2FuZGJveERpcmVjdG9yeSwgJnNhbmRi
b3hEaXJlY3RvcnlJbmZvKSAmJiBTX0lTRElSKHNhbmRib3hEaXJlY3RvcnlJbmZvLnN0X21vZGUp
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2FuZGJveCBkaXJlY3RvcnkgKCVzKSBkb2Vz
IG5vdCBleGlzdCFcbiIsIHNhbmRib3hEaXJlY3RvcnkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGNocm9vdChzYW5kYm94RGlyZWN0b3J5KSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNocm9vdGluZyBmYWlsZWQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENocm9vdCBvbmx5IGNoYW5nZXMgdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgYnV0IGRvZXNuJ3QgY2hhbmdlCisg
ICAgLy8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFRoZXJlZm9yZSwgaWYgd2UgZG9u
J3QgZG8gaXQgbWFudWFsbHkgYSBtYWxpY2lvdXMgdXNlcgorICAgIC8vIGNvdWxkIGJyZWFrIG91
dCB0aGUgamFpbCB3aXRoIHJlbGF0aXZlIHBhdGhzLgorICAgIGlmIChjaGRpcigiLyIpKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY2hhbmdlIHRoZSB3b3JraW5nIGRpcmVj
dG9yeSB0byAvLjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBTZW5kaW5nIGFja25vd2xlZGdlbWVudCB0byB0aGUgV2ViUHJvY2VzcyB0
aGF0IHRoZSBzYW5kYm94aW5nIHdhcyBzdWNjZXNzZnVsbC4KKyAgICBtZXNzYWdlID0gTVNHX0NI
Uk9PVEVEOworICAgIGlmICh3cml0ZShzb2NrZXRQYWlyWzBdLCAmbWVzc2FnZSwgMSkgIT0gMSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHNlbmQgYWNrbm93bGVkZ2VtZW50
IHRvIFdlYlByb2Nlc3M6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBib29sIHNldEVu
dmlyb25tZW50VmFyaWFibGVzRm9yQ2hyb290SGVscGVyKHBpZF90IHBpZCwgaW50IHNvY2tldFBh
aXJbXSkKK3sKKyAgICBjb25zdCBpbnQgZGVzY3JpcHRvclNpemUgPSAzMjsKKyAgICBjaGFyIHNv
Y2tldERlc2NyaXB0b3JbZGVzY3JpcHRvclNpemVdOworICAgIGNoYXIgc2FuZGJveEhlbHBlclBp
ZFtkZXNjcmlwdG9yU2l6ZV07CisKKyAgICBpbnQgbGVuZ3RoID0gc25wcmludGYoc2FuZGJveEhl
bHBlclBpZCwgc2l6ZW9mKHNhbmRib3hIZWxwZXJQaWQpLCAiJXUiLCBwaWQpOworICAgIGlmIChs
ZW5ndGggPCAwIHx8IGxlbmd0aCA+PSBzaXplb2Yoc2FuZGJveEhlbHBlclBpZCkpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDb252ZXJ0aW5nIHRoZSBwaWQgdG8gc3RyaW5nIGlzIGZhaWxl
ZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoc2V0ZW52KFNCWF9IRUxQRVJfUElELCBzYW5kYm94SGVscGVyUGlkLCAxKSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHNldCB0aGUgU0JYX0hFTFBFUl9Q
SUQgZW52IHZhcmlhYmxlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGxlbmd0aCA9IHNucHJpbnRmKHNvY2tldERlc2NyaXB0b3Is
IHNpemVvZihzb2NrZXREZXNjcmlwdG9yKSwgIiV1Iiwgc29ja2V0UGFpclsxXSk7CisgICAgaWYg
KGxlbmd0aCA8IDAgfHwgbGVuZ3RoID49IHNpemVvZihzb2NrZXREZXNjcmlwdG9yKSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbnZlcnRpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciB0byBz
dHJpbmcgaXMgZmFpbGVkOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2V0ZW52KFNCWF9ELCBzb2NrZXREZXNjcmlwdG9y
LCAxKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNhdmluZyB0aGUgaGVscGVycyBmaWxl
ZGVzY3JpcHRvciBpbnRvIGFuIGVudiB2YXJpYWJsZSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNsb3NlKHNv
Y2tldFBhaXJbMF0pKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xvc2luZyBvZiAlZCBm
YWlsZWQ6ICVzXG4iLCBzb2NrZXRQYWlyWzBdLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBw
cmVwYXJlQW5kU3RhcnRDaHJvb3RIZWxwZXIoKQoreworICAgIGludCBzb2NrZXRQYWlyWzJdOwor
ICAgIHBpZF90IHBpZDsKKworICAgIGlmIChzb2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFN
LCAwLCBzb2NrZXRQYWlyKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNy
ZWF0ZSBzb2NrZXRwYWlyOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHBpZCA9IHN5c2NhbGwoU1lTX2Nsb25lLCBDTE9ORV9GUyB8
IFNJR0NITEQsIDAsIDAsIDApOworCisgICAgc3dpdGNoIChwaWQpIHsKKyAgICBjYXNlIC0xOgor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNsb25lIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgMDoKKyAgICAgICAgLy8g
Q2hpbGQgcHJvY2Vzczogd2Ugc3RhcnQgdGhlIGNocm9vdCBoZWxwZXIgd2hpY2ggd2FpdHMgZm9y
IHRoZSAiQ2hyb290TWUiCisgICAgICAgIC8vIG1lc3NhZ2UgZnJvbSB0aGUgV2ViUHJvY2Vzcy4g
SWYgd2UgYXJlIHN1Y2Nlc3NlZCwgdGhlbiB3ZSB3b24ndCByZXR1cm4uCisgICAgICAgIGxhdW5j
aENocm9vdEhlbHBlcihzb2NrZXRQYWlyKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBQYXJlbnQg
cHJvY2VzczogZXhwb3J0cyB0aGUgcGlkIG9mIHRoZSBoZWxwZXIgYW5kIHRoZSBzb2NrZXQgaWQg
c28gdGhlCisgICAgICAgIC8vIGhlbHBlciBhbmQgdGhlIFdlYlByb2Nlc3MgY2FuIGNvbW11bmlj
YXRlLgorICAgICAgICByZXR1cm4gc2V0RW52aXJvbm1lbnRWYXJpYWJsZXNGb3JDaHJvb3RIZWxw
ZXIocGlkLCBzb2NrZXRQYWlyKTsKKyAgICB9CisgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIHJlYWNo
IGhlcmUuCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBTZXQgY2FwYWJpbGl0aWVzIGluIGFs
bCB0aHJlZSBzZXRzLgorc3RhdGljIGJvb2wgc2V0Q2FwYWJpbGl0aWVzKGNhcF92YWx1ZV90KiBj
YXBhYmlsaXR5TGlzdCwgaW50IGxlbmd0aCkKK3sKKyAgICBjYXBfdCBjYXBhYmlsaXRpZXM7CisK
KyAgICAvLyBDYXBhYmlsaXRpZXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGhvdXQgZmxhZ3Mu
CisgICAgY2FwYWJpbGl0aWVzID0gY2FwX2luaXQoKTsKKyAgICBpZiAoIWNhcGFiaWxpdGllcykg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlByb2Nlc3MgY2FwYWJpbGl0aWVzIGluaXQgZmFp
bGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGlmIChjYXBfY2xlYXIoY2FwYWJpbGl0aWVzKSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNsZWFyaW5nIHByb2Nlc3MgY2FwYWJpbGl0aWVzIGZhaWxlZDogJXNcbiIsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
Y2FwYWJpbGl0eUxpc3QgJiYgbGVuZ3RoKSB7CisgICAgICAgIGlmIChjYXBfc2V0X2ZsYWcoY2Fw
YWJpbGl0aWVzLCBDQVBfRUZGRUNUSVZFLCBsZW5ndGgsIGNhcGFiaWxpdHlMaXN0LCBDQVBfU0VU
KQorICAgICAgICAgICAgfHwgY2FwX3NldF9mbGFnKGNhcGFiaWxpdGllcywgQ0FQX0lOSEVSSVRB
QkxFLCBsZW5ndGgsIGNhcGFiaWxpdHlMaXN0LCBDQVBfU0VUKQorICAgICAgICAgICAgfHwgY2Fw
X3NldF9mbGFnKGNhcGFiaWxpdGllcywgQ0FQX1BFUk1JVFRFRCwgbGVuZ3RoLCBjYXBhYmlsaXR5
TGlzdCwgQ0FQX1NFVCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IHNl
dCBwcm9jZXNzIGNhcGFiaWxpdHkgZmxhZ3M6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICAgICAgY2FwX2ZyZWUoY2FwYWJpbGl0aWVzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjYXBfc2V0X3Byb2MoY2FwYWJpbGl0aWVz
KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBzZXQgcHJvY2VzcyBjYXBhYmls
aXRpZXM6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBjYXBfZnJlZShjYXBhYmls
aXRpZXMpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNhcF9mcmVlKGNhcGFi
aWxpdGllcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGRyb3BQcml2aWxl
Z2VzKCkKK3sKKyAgICAvLyBXZSBiZWNvbWUgZXhwbGljaXRlbHkgbm9uIGR1bXBhYmxlLgorICAg
IGlmIChwcmN0bChQUl9TRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiU2V0dGluZyBkdW1wbGFibGUgaXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3Io
ZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzZXRyZXNn
aWQoc2FuZGJveFVzZXJHaWQsIHNhbmRib3hVc2VyR2lkLCBzYW5kYm94VXNlckdpZCkKKyAgICAg
ICAgfHwgc2V0cmVzdWlkKHNhbmRib3hVc2VyVWlkLCBzYW5kYm94VXNlclVpZCwgc2FuZGJveFVz
ZXJVaWQpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZmFsbGJhY2sgdG8g
dXNlcjogJWQuXG4iLCBzYW5kYm94VXNlclVpZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgLy8gRHJvcCBhbGwgY2FwYWJpbGl0aWVzLiBBZ2Fpbiwgc2V0dWlkKCkgbm9ybWFs
bHkgdGFrZXMgY2FyZSBvZiB0aGlzIGlmIHdlIGhhZCBldWlkIDAuCisgICAgcmV0dXJuIHNldENh
cGFiaWxpdGllcygwLCAwKTsKK30KKworc3RhdGljIGJvb2wgZmlsZUV4aXN0cyhjb25zdCBjaGFy
KiBwYXRoKQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIHJldHVybiAhKGxzdGF0
KHBhdGgsICZmaWxlU3RhdCkgJiYgZXJybm8gPT0gRU5PRU5UKTsKK30KKworc3RhdGljIG1vZGVf
dCBkaXJlY3RvcnlQZXJtaXNzaW9ucyhjb25zdCBjaGFyKiBkaXJlY3RvcnkpCit7CisgICAgc3Ry
dWN0IHN0YXQgZmlsZVN0YXQ7CisgICAgc3RhdChkaXJlY3RvcnksICZmaWxlU3RhdCk7CisgICAg
cmV0dXJuIGZpbGVTdGF0LnN0X21vZGU7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZURpcmVjdG9y
eShjaGFyKiBwYXRoVG9DcmVhdGUsIGNvbnN0IGNoYXIqIG5leHREaXJlY3RvcnlUb0NyZWF0ZSkK
K3sKKyAgICBpZiAoIXN0cmluZ0FwcGVuZChwYXRoVG9DcmVhdGUsIG5leHREaXJlY3RvcnlUb0Ny
ZWF0ZSwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjaGFyIHBhdGhU
b0NyZWF0ZUluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQocGF0aFRv
Q3JlYXRlSW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBwYXRoVG9DcmVhdGUsIFBhdGhTaXpl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbW9kZV90IG1vZGUgPSBkaXJlY3RvcnlQ
ZXJtaXNzaW9ucyhwYXRoVG9DcmVhdGUpOworICAgIGlmIChta2RpcihwYXRoVG9DcmVhdGVJblNh
bmRib3gsIG1vZGUpKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1QpIHsKKyAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpb24gb2YgJXMgZmFpbGVkOiAlc1xuIiwgcGF0aFRv
Q3JlYXRlSW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAg
bHN0YXQocGF0aFRvQ3JlYXRlLCAmZmlsZUluZm8pOworICAgIGlmIChmaWxlSW5mby5zdF91aWQg
PT0gZ2V0dWlkKCkpIHsKKyAgICAgICAgaWYgKGNob3duKHBhdGhUb0NyZWF0ZUluU2FuZGJveCwg
c2FuZGJveFVzZXJVaWQsIHNhbmRib3hVc2VyR2lkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKGNobW9kKHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgZmlsZUluZm8u
c3RfbW9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIGJvb2wgY3JlYXRlRGlyZWN0b3J5UGF0aChjaGFyKiBwYXRoKQoreworICAgIGNoYXIg
ZnVsbFBhdGhJblNhbmRib3hbUGF0aFNpemVdOworICAgIGlmICghc3RyaW5nQ29uY2F0KGZ1bGxQ
YXRoSW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBwYXRoLCBQYXRoU2l6ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChmaWxlRXhpc3RzKGZ1bGxQYXRoSW5TYW5kYm94KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjaGFyIGFscmVhZHlDcmVhdGVkUGF0aFtQYXRo
U2l6ZV07CisgICAgYWxyZWFkeUNyZWF0ZWRQYXRoWzBdID0gJ1wwJzsKKyAgICAvLyBzdGFydFBv
cyBpcyAocGF0aCArIDEpIGJlY2F1c2Ugd2Ugc2tpcCB0aGUgZmlyc3QgJy8nLgorICAgIGNoYXIq
IHN0YXJ0UG9zID0gcGF0aCArIDE7CisgICAgY2hhciogZW5kUG9zOworICAgIHdoaWxlICgoZW5k
UG9zID0gc3RyY2hyKHN0YXJ0UG9zLCAnLycpKSkgeworICAgICAgICBjaGFyIG5leHREaXJlY3Rv
cnlUb0NyZWF0ZVtQYXRoU2l6ZV07CisgICAgICAgIGlmICghc3RyaW5nQ29weShuZXh0RGlyZWN0
b3J5VG9DcmVhdGUsIHN0YXJ0UG9zIC0gMSwgZW5kUG9zIC0gc3RhcnRQb3MgKyAxLCBQYXRoU2l6
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghY3JlYXRlRGlyZWN0
b3J5KGFscmVhZHlDcmVhdGVkUGF0aCwgbmV4dERpcmVjdG9yeVRvQ3JlYXRlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0K
KyAgICAvLyBDcmVhdGUgdGhlIGxhc3QgZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnlwYXRoLgor
ICAgIGFscmVhZHlDcmVhdGVkUGF0aFswXSA9ICdcMCc7CisgICAgcmV0dXJuIGNyZWF0ZURpcmVj
dG9yeShhbHJlYWR5Q3JlYXRlZFBhdGgsIHBhdGgpOworfQorCitzdGF0aWMgYm9vbCBjcmVhdGVE
ZXZpY2VGaWxlcygpCit7CisgICAgY2hhciBkZXZbXSA9ICIvZGV2LyI7CisgICAgaWYgKCFjcmVh
dGVEaXJlY3RvcnlQYXRoKGRldikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBj
aGFyKiBkZXZpY2VzWzJdID0geyAiL2Rldi9yYW5kb20iLCAiL2Rldi91cmFuZG9tIiB9OworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0YXR1
czsKKyAgICAgICAgaWYgKGxzdGF0KGRldmljZXNbaV0sICZzdGF0dXMpKSB7CisgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG9idGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBk
ZXZpY2UgZmlsZSAoJXMpOiAlc1xuIiwgZGV2aWNlc1tpXSwgc3RyZXJyb3IoZXJybm8pKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBkZXZfdCBkZXYgPSBz
dGF0dXMuc3RfcmRldjsKKyAgICAgICAgLy8gQm90aCBuZWVkZWQgZGV2aWNlIGZpbGVzICgvZGV2
L3JhbmRvbSBhbmQgL2Rldi91cmFuZG9tKSBhcmUgY2hhcmFjdGVyIG1fZGV2aWNlcyBhbmQKKyAg
ICAgICAgLy8gdGhlaXIgcGVybWlzc2lvbnMgc2hvdWxkIGJlOiBydy1ydy1ydy0uCisgICAgICAg
IGNoYXIgZGV2aWNlW1BhdGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb25jYXQoZGV2aWNl
LCBzYW5kYm94RGlyZWN0b3J5LCBkZXZpY2VzW2ldLCBQYXRoU2l6ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChta25vZChkZXZpY2UsIFNfSUZDSFIgfCBTX0lSVVNS
IHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgsIG1ha2Vk
ZXYobWFqb3IoZGV2KSwgbWlub3IoZGV2KSkpKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gIT0g
RUVYSVNUKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVh
dGUgZGV2aWNlIGZpbGUgJXM6ICVzXG4iLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBtb3VudEZpbGVTeXN0ZW1zKCkK
K3sKKyAgICBjaGFyIHByb2NbXSA9ICIvcHJvYy8iOworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5
UGF0aChwcm9jKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNoYXIgcHJvY1BhdGhJblNh
bmRib3hbUGF0aFNpemVdOworICAgIGlmICghc3RyaW5nQ29uY2F0KHByb2NQYXRoSW5TYW5kYm94
LCBzYW5kYm94RGlyZWN0b3J5LCBwcm9jLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobW91bnQocHJvYywgcHJvY1BhdGhJblNhbmRib3gsICJwcm9jIiwgMCwgMCkp
IHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVCVVNZKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yIGJ5IG1vdW50aW5nICVzLiAlc1xuIiwgcHJvYywgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNo
YXIgc2hhcmVkTWVtb3J5W10gPSAiL3J1bi9zaG0vIjsKKyAgICBpZiAoIWNyZWF0ZURpcmVjdG9y
eVBhdGgoc2hhcmVkTWVtb3J5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNoYXIgc2hh
cmVkTWVtb3J5UGF0aEluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQo
c2hhcmVkTWVtb3J5UGF0aEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgc2hhcmVkTWVtb3J5
LCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobW91bnQoc2hhcmVk
TWVtb3J5LCBzaGFyZWRNZW1vcnlQYXRoSW5TYW5kYm94LCAidG1wZnMiLCAwLCAwKSkgeworICAg
ICAgICBpZiAoZXJybm8gIT0gRUJVU1kpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
RXJyb3IgYnkgbW91bnRpbmcgJXM6ICVzXG4iLCBzaGFyZWRNZW1vcnksIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGxpbmtGaWxlKGNoYXIqIHNvdXJjZUZpbGUsIGNo
YXIqIHRhcmdldEZpbGUpCit7CisgICAgYm9vbCBpc1N5bWxpbmsgPSB0cnVlOworICAgIHdoaWxl
IChpc1N5bWxpbmspIHsKKyAgICAgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAgICAgIGlm
IChsc3RhdChzb3VyY2VGaWxlLCAmZmlsZUluZm8pKSB7CisgICAgICAgICAgICBpZiAoZXJybm8g
IT0gRU5PRU5UKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBv
YnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgJXM6ICVzXG4iLCBzb3VyY2VGaWxlLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIElmIHRoZSBvcmlnaW5hbCBmaWxlIGRvZXNuJ3QgZXhpc3QgKGUuZy4gZGFu
Z2xpbmcgbGlua3MpIHRoZW4gd2UgY2FuIGlnbm9yZSBpdAorICAgICAgICAgICAgLy8gaW4gdGhl
IHNhbmRib3ggdG9vLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgY2hhciogZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UgPSBzdHJyY2hyKHNvdXJjZUZpbGUs
ICcvJyk7CisgICAgICAgIGlmICghZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UpIHsKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBzb3VyY2U6ICVzLlxuIiwgc291cmNlRmls
ZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2hhciBi
YXNlRGlyZWN0b3J5T2ZTb3VyY2VbUGF0aFNpemVdOworICAgICAgICBpZiAoIXN0cmluZ0NvcHko
YmFzZURpcmVjdG9yeU9mU291cmNlLCBzb3VyY2VGaWxlLCBlbmRPZkJhc2VEaXJlY3RvcnlJblNv
dXJjZSAtIHNvdXJjZUZpbGUgKyAxLCBQYXRoU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICghY3JlYXRlRGlyZWN0b3J5UGF0aChiYXNlRGlyZWN0b3J5T2ZTb3Vy
Y2UpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5nICVzIGZhaWxlZDog
JXMuXG4iLCBiYXNlRGlyZWN0b3J5T2ZTb3VyY2UsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxpbmsoc291cmNlRmls
ZSwgdGFyZ2V0RmlsZSkpIHsKKyAgICAgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1QgJiYgZXJy
bm8gIT0gRU5PRU5UKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJMaW5raW5n
ICVzIGZhaWxlZDogJXMuXG4iLCBzb3VyY2VGaWxlLCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEhhbmRsZSBzeW1saW5rcy4KKyAgICAgICAgaXNTeW1saW5rID0gKGZpbGVJbmZvLnN0
X21vZGUgJiBTX0lGTVQpID09IFNfSUZMTks7CisgICAgICAgIGlmICghaXNTeW1saW5rKQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2hhciBzeW1saW5rVGFyZ2V0W1BhdGhTaXplXTsK
KyAgICAgICAgaW50IGxlbmd0aE9mVGhlTGluayA9IHJlYWRsaW5rKHNvdXJjZUZpbGUsIHN5bWxp
bmtUYXJnZXQsIHNpemVvZihzeW1saW5rVGFyZ2V0KSAtIDEpOworICAgICAgICBpZiAobGVuZ3Ro
T2ZUaGVMaW5rID4gMCkKKyAgICAgICAgICAgIHN5bWxpbmtUYXJnZXRbbGVuZ3RoT2ZUaGVMaW5r
XSA9ICdcMCc7CisgICAgICAgIGNoYXIgc3ltbGlua1RhcmdldEluUmVhbFdvcmxkW1BhdGhTaXpl
XTsKKyAgICAgICAgY2hhciBzeW1saW5rVGFyZ2V0SW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICAg
ICAgLy8gTWFraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcGF0
aHMuCisgICAgICAgIGlmIChzeW1saW5rVGFyZ2V0WzBdID09ICcvJykgeworICAgICAgICAgICAg
aWYgKCFzdHJpbmdDb3B5KHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCwgc3ltbGlua1RhcmdldCwg
UGF0aFNpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlm
ICghc3RyaW5nQ29uY2F0KHN5bWxpbmtUYXJnZXRJblNhbmRib3gsIHNhbmRib3hEaXJlY3Rvcnks
IHN5bWxpbmtUYXJnZXQsIFBhdGhTaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXN0cmluZ0NvbmNhdChzeW1saW5r
VGFyZ2V0SW5SZWFsV29ybGQsIGJhc2VEaXJlY3RvcnlPZlNvdXJjZSwgIi8iLCBzeW1saW5rVGFy
Z2V0LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKCFzdHJpbmdDb25jYXQoc3ltbGlua1RhcmdldEluU2FuZGJveCwgc2FuZGJveERpcmVj
dG9yeSwgIi8iLCBzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGQsIFBhdGhTaXplKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdHJpbmdDb3B5
KHNvdXJjZUZpbGUsIHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCwgUGF0aFNpemUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXN0cmluZ0NvcHkodGFyZ2V0RmlsZSwg
c3ltbGlua1RhcmdldEluU2FuZGJveCwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbGlua0RpcmVj
dG9yeShjaGFyKiBzb3VyY2VEaXJlY3RvcnlQYXRoLCBjaGFyKiB0YXJnZXREaXJlY3RvcnlQYXRo
KQoreworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5UGF0aChzb3VyY2VEaXJlY3RvcnlQYXRoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIERJUiogZGlyZWN0b3J5ID0gb3BlbmRpcihzb3Vy
Y2VEaXJlY3RvcnlQYXRoKTsKKyAgICBpZiAoIWRpcmVjdG9yeSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNvdWxkbid0IG9wZW4gZGlyZWN0b3J5ICVzOiAlc1xuIiwgc291cmNlRGlyZWN0
b3J5UGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN0cnVjdCBkaXJlbnQgKmRpcmVjdG9yeUluZm8gPSAwOworICAgIHdoaWxlICgoZGly
ZWN0b3J5SW5mbyA9IHJlYWRkaXIoZGlyZWN0b3J5KSkpIHsKKyAgICAgICAgY2hhciogbmV4dEZp
bGVJbkRpcmVjdG9yeSA9IGRpcmVjdG9yeUluZm8tPmRfbmFtZTsKKyAgICAgICAgLy8gV2UgbXVz
dCBub3QgbGluayAnLicgYW5kICIuLiIgaW50byB0aGUgc2FuZGJveC4KKyAgICAgICAgaWYgKCFz
dHJuY21wKG5leHRGaWxlSW5EaXJlY3RvcnksICIuIiwgc3RybGVuKG5leHRGaWxlSW5EaXJlY3Rv
cnkpKSB8fCAhc3RybmNtcChuZXh0RmlsZUluRGlyZWN0b3J5LCAiLi4iLCAyKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBjaGFyIHNvdXJjZUZpbGVbUGF0aFNpemVdOworICAgICAg
ICBpZiAoIXN0cmluZ0NvbmNhdChzb3VyY2VGaWxlLCBzb3VyY2VEaXJlY3RvcnlQYXRoLCAiLyIs
IG5leHRGaWxlSW5EaXJlY3RvcnksIFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBjaGFyIHRhcmdldEZpbGVbUGF0aFNpemVdOworICAgICAgICBpZiAoIXN0
cmluZ0NvbmNhdCh0YXJnZXRGaWxlLCB0YXJnZXREaXJlY3RvcnlQYXRoLCAiLyIsIG5leHRGaWxl
SW5EaXJlY3RvcnksIFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgaWYgKChkaXJlY3RvcnlJbmZvLT5kX3R5cGUg
PT0gRFRfRElSKSkKKyAgICAgICAgICAgIG9rID0gbGlua0RpcmVjdG9yeShzb3VyY2VGaWxlLCB0
YXJnZXRGaWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb2sgPSBsaW5rRmlsZShzb3Vy
Y2VGaWxlLCB0YXJnZXRGaWxlKTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBtb2RpZmljYXRp
b24gdGltZSBvZiB0aGUgZGlyZWN0b3JpZXMgYmVjYXVzZQorICAgIC8vIGl0IGNvdWxkIGhhdmUg
bWVhbmluZyBlLmcuIGluIHRoZSBoYXNoZ2VuZXJhdGlvbiBvZiBjYWNoZSBmaWxlcy4KKyAgICBz
dHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICBpZiAobHN0YXQoc291cmNlRGlyZWN0b3J5UGF0aCwg
JmZpbGVTdGF0KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG9idGFpbmlu
ZyBpbmZvcm1hdGlvbiBhYm91dCBkaXJlY3RvcnkgKCVzKTogJXNcbiIsIHNvdXJjZURpcmVjdG9y
eVBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgc3RydWN0IHV0aW1idWYgdGltZXMgPSB7IGZpbGVTdGF0LnN0X2F0aW1lLCBmaWxlU3RhdC5z
dF9tdGltZSB9OworICAgIGlmICh1dGltZSh0YXJnZXREaXJlY3RvcnlQYXRoLCAmdGltZXMpKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgc2V0IGJhY2sgdGhlIGxhc3QgbW9k
aWZpY2F0aW9uIHRpbWUgb2YgJXM6ICVzXG4iLCB0YXJnZXREaXJlY3RvcnlQYXRoLCBzdHJlcnJv
cihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgYm9vbCBjb2xsZWN0UnVuVGltZURlcGVuZGVuY2llcygpCit7CisgICAg
Ly8gVGhlIGxpc3Qgb2YgZW1waXJpY2FsbHkgZ2F0aGVyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMu
CisgICAgY29uc3QgY2hhciogcnVudGltZURlcGVuZGVuY2llc1tdID0geworICAgICAgICAibGli
bnNzX2Rucy5zbyIsCisgICAgICAgICJsaWJyZXNvbHYuc28iLAorICAgICAgICAibGlic3NsLnNv
IiwKKyAgICAgICAgImxpYmNyeXB0by5zbyIsCisgICAgICAgIDAKKyAgICB9OworCisgICAgY29u
c3QgY2hhcioqIGN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSA9IHJ1bnRpbWVEZXBlbmRlbmNpZXM7
CisgICAgd2hpbGUgKCpjdXJyZW50UnVudGltZURlcGVuZGVuY3kpIHsKKyAgICAgICAgLy8gVG8g
b2J0YWluIHRoZSBwYXRoIG9mIHRoZSBydW50aW1lIGRlcGVuZGVuY2llcyB3ZSBvcGVuIHRoZW0g
d2l0aCBkbG9wZW4uCisgICAgICAgIC8vIFdpdGggdGhlIGhhbmRsZSBzdXBwbGllZCBieSBkbG9w
ZW4gd2UgY2FuIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHluYW1pY2FsbHkKKyAgICAg
ICAgLy8gbGlua2VkIGxpYnJhcmllcywgc28gdGhlIHBhdGggd2hlcmUgYXJlIHRoZXkgaW5zdGFs
bGVkLgorICAgICAgICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oKmN1cnJlbnRSdW50aW1lRGVwZW5k
ZW5jeSwgUlRMRF9MQVpZKTsKKyAgICAgICAgaWYgKCFoYW5kbGUpIHsKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZ2V0IHRoZSBoYW5kbGVyIG9mICVzOiAlc1xuIiwgKmN1
cnJlbnRSdW50aW1lRGVwZW5kZW5jeSwgZGxlcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBsaW5rX21hcCogbGlua01hcDsKKyAg
ICAgICAgaWYgKGRsaW5mbyhoYW5kbGUsIFJUTERfRElfTElOS01BUCwgJmxpbmtNYXApKSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGdldCBpbmZvcm1hdGlvbiBhYm91
dCAlczogJXNcbiIsICpjdXJyZW50UnVudGltZURlcGVuZGVuY3ksIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFsaW5r
TWFwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGdldCB0aGUgbGlu
a21hcCBvZiAlczogJXMuXG4iLCAqY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5LCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
Y2hhciBwYXRoT2ZUaGVMaWJyYXJ5W1BhdGhTaXplXTsKKyAgICAgICAgY2hhciBwYXRoT2ZUaGVM
aWJyYXJ5SW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb3B5KHBhdGhP
ZlRoZUxpYnJhcnksIGxpbmtNYXAtPmxfbmFtZSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoIXN0cmluZ0NvbmNhdChwYXRoT2ZUaGVMaWJyYXJ5SW5T
YW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBwYXRoT2ZUaGVMaWJyYXJ5LCBQYXRoU2l6ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghbGlua0ZpbGUocGF0aE9mVGhl
TGlicmFyeSwgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJveCkpIHsKKyAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiTGlua2luZyBydW50aW1lIGRlcGVuZGVuY3k6ICVzIGZhaWxlZDogJXNcbiIs
IHBhdGhPZlRoZUxpYnJhcnksIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBkbGNsb3Nl
KGhhbmRsZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
ZGxjbG9zZShoYW5kbGUpOworICAgICAgICArK2N1cnJlbnRSdW50aW1lRGVwZW5kZW5jeTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHNldHVwWGF1dGhvcml0eUZv
ck5vYm9keVVzZXIoKQoreworICAgIC8vIFRvIGJlIGFibGUgdXNlIFggaW5zaWRlIHRoZSBzYW5k
Ym94IGFuIC5YYXV0aG9yaXR5IGZpbGUgbXVzdCBiZSBleGlzdCBpbnNpZGUgaXQsCisgICAgLy8g
b3duZWQgYnkgdGhlIHNhbmRib3h1c2VyLiBGdXJ0aGVybW9yZSwgWEFVVEhPUklUWSBlbnZpcm9u
bWVudCB2YXJpYWJsZSBtdXN0IHBvaW50IHRvIGl0LgorICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07
CisgICAgc2l6ZV90IHNpemU7CisgICAgc3RydWN0IHBhc3N3ZCogcmVhbFVzZXIgPSBnZXRwd3Vp
ZChnZXRnaWQoKSk7CisgICAgY2hhciB4YXV0aG9yaXR5T2ZSZWFsVXNlcltQYXRoU2l6ZV07Cisg
ICAgY2hhciB4YXV0aG9yaXR5SW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICBpZiAoIXN0cmluZ0Nv
bmNhdCh4YXV0aG9yaXR5T2ZSZWFsVXNlciwgcmVhbFVzZXItPnB3X2RpciwgIi8uWGF1dGhvcml0
eSIsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc3RyaW5nQ29u
Y2F0KHhhdXRob3JpdHlJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksIHhhdXRob3JpdHlPZlJl
YWxVc2VyLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZJTEUqIHNv
dXJjZSA9IGZvcGVuKHhhdXRob3JpdHlPZlJlYWxVc2VyLCAicmIiKTsKKyAgICBpZiAoIXNvdXJj
ZSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IG9wZW4gJXM6ICVzXG4iLCB4
YXV0aG9yaXR5T2ZSZWFsVXNlciwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIEZJTEUqIGRlc3QgPSBmb3Blbih4YXV0aG9yaXR5SW5TYW5kYm94
LCAid2IiKTsKKyAgICBpZiAoIWRlc3QpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3Vs
ZG4ndCBvcGVuICVzOiAlc1xuIiwgeGF1dGhvcml0eUluU2FuZGJveCwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGNvcHkgdGhlIC5Y
YXV0aG9yaXR5IGZpbGUgb2YgdGhlIHJlYWwgdXNlciAoaW5zdGVhZCBvZiBsaW5raW5nKSBiZWNh
dXNlIG5vYm9keSB1c2VyCisgICAgLy8gc2hvdWxkIG93biBpdCBidXQgd2UgZG9uJ3Qgd2FudCB0
byBjaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorICAgIHdoaWxl
ICgoc2l6ZSA9IGZyZWFkKGJ1ZmZlciwgMSwgQlVGU0laLCBzb3VyY2UpKSkKKyAgICAgICAgZndy
aXRlKGJ1ZmZlciwgMSwgc2l6ZSwgZGVzdCk7CisKKyAgICBmY2xvc2Uoc291cmNlKTsKKyAgICBm
Y2xvc2UoZGVzdCk7CisKKyAgICBpZiAoY2hvd24oeGF1dGhvcml0eUluU2FuZGJveCwgc2FuZGJv
eFVzZXJVaWQsIHNhbmRib3hVc2VyR2lkKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNo
b3duaW5nIC5YYXV0aG9yaXR5ICglcykgZmFpbGVkOiAlcy5cbiIsIHhhdXRob3JpdHlJblNhbmRi
b3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKHNldGVudigiWEFVVEhPUklUWSIsIHhhdXRob3JpdHlJblNhbmRib3gsIDEpKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgc2V0IHRoZSBYQVVUSE9SSVRZIGVudnJpb25t
ZW50IHZhcmlhYmxlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW5pdFNhbmRi
b3goKQoreworICAgIC8vIENyZWF0ZSB0aGUgc2FuZGJveCBkaXJlY3RvcnkuIFdlIG9ubHkgbmVl
ZCB0byBzdGVwIGludG8gaXQsIHNvCisgICAgLy8gdGhlIGV4ZWN1dGFibGUgcGVybWlzc2lvbiBp
cyBuZWVkZWQgb25seS4KKyAgICBpZiAobWtkaXIoc2FuZGJveERpcmVjdG9yeSwgMDEwMCkpIHsK
KyAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJDb3VsZG4ndCBjcmVhdGUgdGhlIHNhbmRib3ggZGlyZWN0b3J5OiAlc1xuIiwgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICghY3JlYXRlRGV2aWNlRmlsZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFtb3VudEZpbGVTeXN0ZW1zKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIEhhcmQgbGluayBjYWNoZSBhbmQgZm9udCBkaXJlY3RvcmllcyBpbnRvIHRoZSBzYW5k
Ym94IGVudmlyb25tZW50LgorICAgIHN0cnVjdCBwYXNzd2QqIHVzZXJJbmZvID0gZ2V0cHd1aWQo
Z2V0dWlkKCkpOworICAgIGNvbnN0IGNoYXIqIGhvbWUgPSB1c2VySW5mby0+cHdfZGlyOworICAg
IGNoYXIgbG9jYWxEaXJbUGF0aFNpemVdOworICAgIGlmICghc3RyaW5nQ29uY2F0KGxvY2FsRGly
LCBob21lLCAiLy5sb2NhbC9zaGFyZS9Ob2tpYS8iLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjaGFyIGNhY2hlRGlyW1BhdGhTaXplXTsKKyAgICBpZiAoIXN0cmluZ0Nv
bmNhdChjYWNoZURpciwgaG9tZSwgIi8uY2FjaGUvTm9raWEvIiwgUGF0aFNpemUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBmb250RGlyW1BhdGhTaXplXTsKKyAgICBpZiAoIXN0
cmluZ0NvbmNhdChmb250RGlyLCBob21lLCAiLy5mb250Y29uZmlnLyIsIFBhdGhTaXplKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IGNoYXIqIGxpbmtlZERpcmVjdG9yaWVzW10g
PSB7CisgICAgICAgIGNhY2hlRGlyLAorICAgICAgICBmb250RGlyLAorICAgICAgICBsb2NhbERp
ciwKKyAgICAgICAgIi9ldGMvZm9udHMvIiwKKyAgICAgICAgIi9ldGMvc3NsL2NlcnRzLyIsCisg
ICAgICAgICIvdmFyL2NhY2hlL2ZvbnRjb25maWcvIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvIiwKKyAgICAgICAgMAorICAgIH07CisKKyAgICBjb25zdCBjaGFyKiogY3VycmVudExpbmtl
ZERpcmVjdG9yeSA9IGxpbmtlZERpcmVjdG9yaWVzOworICAgIHdoaWxlICgqY3VycmVudExpbmtl
ZERpcmVjdG9yeSkgeworICAgICAgICBjaGFyIGxpbmtlZERpcmVjdG9yeUluU2FuZGJveFtQYXRo
U2l6ZV07CisgICAgICAgIGlmICghc3RyaW5nQ29uY2F0KGxpbmtlZERpcmVjdG9yeUluU2FuZGJv
eCwgc2FuZGJveERpcmVjdG9yeSwgKmN1cnJlbnRMaW5rZWREaXJlY3RvcnksIFBhdGhTaXplKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFsaW5rRGlyZWN0b3J5KGNv
bnN0X2Nhc3Q8Y2hhcio+KCpjdXJyZW50TGlua2VkRGlyZWN0b3J5KSwgbGlua2VkRGlyZWN0b3J5
SW5TYW5kYm94KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgKytjdXJyZW50
TGlua2VkRGlyZWN0b3J5OworICAgIH0KKworICAgIGlmICghc2V0dXBYYXV0aG9yaXR5Rm9yTm9i
b2R5VXNlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY29sbGVjdFJ1
blRpbWVEZXBlbmRlbmNpZXMoKTsKK30KKworc3RhdGljIGJvb2wgcmVzdHJpY3RDYXBhYmlsaXRp
ZXMoKQoreworICAgIC8vIENhcGFiaWxpdGllcyB3ZSBuZWVkLgorICAgIGNhcF92YWx1ZV90IGNh
cGFiaWx0eUxpc3RbNF07CisgICAgY2FwYWJpbHR5TGlzdFswXSA9IENBUF9TRVRVSUQ7CisgICAg
Y2FwYWJpbHR5TGlzdFsxXSA9IENBUF9TRVRHSUQ7CisgICAgY2FwYWJpbHR5TGlzdFsyXSA9IENB
UF9TWVNfQURNSU47IC8vIENsb25pbmcgd2l0aCBDTE9ORV9ORVdQSUQgZmxhZyBsYXRlciB3aWxs
IG5lZWQgdGhpcyBjYXBhYmlsaXR5LgorICAgIGNhcGFiaWx0eUxpc3RbM10gPSBDQVBfU1lTX0NI
Uk9PVDsKKworICAgIC8vIFJlZHVjZSBjYXBhYmlsaXRpZXMgdG8gd2hhdCB3ZSBuZWVkLgorICAg
IC8vIEFsdGhvdWdoIHdlIHN0aWxsIGhhdmUgcm9vdCBldWlkIGFuZCB3ZSBrZWVwIHJvb3QgZXF1
aXZhbGVudCBjYXBhYmlsaXRpZXMsCisgICAgLy8gd2UgcmVtb3ZlZCAoPSBkaWRuJ3QgYWRkKSBD
QVBfU1lTX1JFU1NPVVJDRSBjYXBhYmlsaXRlcyBhbmQgdGhpcyByZXN1bHRlZCB0aGF0CisgICAg
Ly8gdGhlIHNldHJsaW1pdCBmdW5jdGlvbiB3aXRoIFJMSU1JVF9OT0ZJTEUgd2lsbCBiZSBlZmZl
Y3RpdmUgbGF0ZXIuCisgICAgaWYgKCFzZXRDYXBhYmlsaXRpZXMoY2FwYWJpbHR5TGlzdCwgc2l6
ZW9mKGNhcGFiaWx0eUxpc3QpIC8gc2l6ZW9mKGNhcGFiaWx0eUxpc3RbMF0pKSkgeworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhZGp1c3QgcHJvY2VzcyBjYXBhYmlsaXRpZXM6
ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbW92ZVRvTmV3UGlkTmFtZXNwYWNl
KCkKK3sKKyAgICAvLyBDTE9ORV9ORVdQSUQgYW5kIENMT05FX0ZTIHNob3VsZCBiZSBpbiB0aGF0
IG9yZGVyLgorICAgIC8vIFdlIGNhbid0IHNoYXJlIEZTIGFjY3Jvc3MgbmFtZXNwYWNlcy4KKyAg
ICBwaWRfdCBwaWQsIGV4cGVjdGVkUGlkOworICAgIGludCBzdGF0dXM7CisgICAgcGlkID0gc3lz
Y2FsbChTWVNfY2xvbmUsIENMT05FX05FV1BJRCB8IFNJR0NITEQsIDAsIDAsIDApOworCisgICAg
c3dpdGNoIChwaWQpIHsKKyAgICBjYXNlIC0xOgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNs
b25pbmcgaXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgMDoKKyAgICAgICAgLy8gQ2hpbGQgc2hvdWxkIHJ1biB3aXRoIHBp
ZCBudW1iZXIgMSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4KKyAgICAgICAgaWYgKGdldHBpZCgpICE9
IDEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3JlYXRlIGEgbmV3
IFBJRCBuYW1lc3BhY2UuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBXZSBhcmUg
d2FpdGluZyBmb3Igb3VyIGNoaWxkIChXZWJQcm9jZXNzKS4KKyAgICAgICAgLy8gSWYgdGhpcyB3
YWl0IGlzIHN1Y2Nlc3NmdWwgaXQgbWVhbnMgdGhhdCBvdXIgY2hpbGQgaXMgdGVybWluYXRlZC4K
KyAgICAgICAgZXhwZWN0ZWRQaWQgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCk7CisgICAgICAg
IGlmIChleHBlY3RlZFBpZCAhPSBwaWQpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
V2FpdHBpZCBpcyBmYWlsZWQgd2l0aDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFdJRkVYSVRF
RChzdGF0dXMpKQorICAgICAgICAgICAgZXhpdChXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKyAgICAg
ICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBib29sIHJ1bihpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdKQoreworICAgIHN0cnVj
dCBwYXNzd2QqIHVzZXJJbmZvID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworICAgIGlmICghdXNlcklu
Zm8pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGN1cnJlbnQg
dXNlcjogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmICghc3RyaW5nQ29uY2F0KHNhbmRib3hEaXJlY3RvcnksIHVzZXJJbmZvLT5w
d19kaXIsICIvLndrMi1zYW5kYm94IiwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBDdXJyZW50bHkgd2UgdXNlIG5vYm9keSB1c2VyIGFzIHRoZSBzYW5kYm94IHVz
ZXIgYW5kIGZhbGxiYWNrIHRvIHRoZSByZWFsIHVzZXIKKyAgICAvLyBpZiBpdCdzIGZhaWxlZC4g
KFdlIGNvdWxkIGV4dGVuZCB0aGlzIGluIHRoZSBmdXR1cmUgd2l0aCBhIHNwZWNpZmljIHJlc3Ry
aWN0ZWQgdXNlci4pCisgICAgc3RydWN0IHBhc3N3ZCogbm9ib2R5VXNlciA9IGdldHB3bmFtKCJu
b2JvZHkiKTsKKyAgICBpZiAobm9ib2R5VXNlcikgeworICAgICAgICBzYW5kYm94VXNlclVpZCA9
IG5vYm9keVVzZXItPnB3X3VpZDsKKyAgICAgICAgc2FuZGJveFVzZXJHaWQgPSBub2JvZHlVc2Vy
LT5wd19naWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2FuZGJveFVzZXJVaWQgPSBnZXR1aWQo
KTsKKyAgICAgICAgc2FuZGJveFVzZXJHaWQgPSBnZXRnaWQoKTsKKyAgICB9CisKKyAgICAvLyBX
ZSBzaG91bGQgaGF2ZSB0aHJlZSBwYXJhbWV0ZXJzOgorICAgIC8vIHBhdGhfb2ZfdGhpc19iaW5h
cnkgcGF0aF9vZl90aGVfd2VicHJvY2VzcyBzb2NrZXRfdG9fY29tbXVuaWNhdGVfd2l0aF91aXBy
b2Nlc3MKKyAgICBpZiAoYXJnYyAhPSAzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3Rh
cnRpbmcgU2FuZGJveFByb2Nlc3MgcmVxdWlyZXMgMyBwYXJhbWV0ZXJzIVxuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTYW5kYm94UHJvY2VzcyBzaG91bGQgYmUg
cnVuIHdpdGggc3VpZCBmbGFnIC4uLgorICAgIGlmIChnZXRldWlkKCkpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJUaGUgc2FuZGJveCBpcyBub3Qgc2V0ZXVpZCByb290LlxuIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAuLi4gYnV0IG5vdCBhcyByb290IChu
b3Qgd2l0aCBzdWRvKS4KKyAgICBpZiAoIWdldHVpZCgpKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiVGhlIHNhbmRib3ggaXMgbm90IGRlc2lnbmVkIHRvIGJlIHJ1biBieSByb290LlxuIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluaXRTYW5kYm94KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcmVzdHJpY3RDYXBhYmlsaXRpZXMo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgbW92ZSBvdXJzZWxmIGFuZCBv
dXIgY2hpbGRyZW4gaW50byBhIG5ldyBQSUQgbmFtZXNwYWNlLAorICAgIC8vIHdoZXJlIHByb2Nl
c3MgSURzIHN0YXJ0IGZyb20gMCBhZ2Fpbi4KKyAgICBpZiAoIW1vdmVUb05ld1BpZE5hbWVzcGFj
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTdGFydGluZyBhIGhlbHBlciB3
aGF0IHdpbGwgd2FpdGluZyBmb3IgdGhlICJjaHJvb3RtZSIgbWVzc2FnZSBmcm9tIFdlYlByb2Nl
c3MuCisgICAgaWYgKCFwcmVwYXJlQW5kU3RhcnRDaHJvb3RIZWxwZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbnkgc3BlY2lhbCBwcml2aWxlZ2Vz
IGFueW1vcmUuCisgICAgaWYgKCFkcm9wUHJpdmlsZWdlcygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBTYW5pdHkgY2hlY2s6IGlmIG91ciBlZmZlY3RpdmUgb3IgcmVhbCB1aWQv
Z2lkIGlzIHN0aWxsIDAgKHJvb3QpIG9yCisgICAgLy8gd2UgY2FuIHNldCBhbnkgb2YgdGhlbSB0
byAwLCB0aGVuIHRoZSBkcm9wcGluZyBvZiBwcml2aWxlZ2VzIGlzIGZhaWxlZC4KKyAgICAvLyBX
ZSBlbnN1cmUgaGVyZSB0aGF0IHdlIGNhbm5vdCBzZXQgcm9vdCBpZCBhZnRlciBoZXJlLgorICAg
IGlmICghZ2V0ZXVpZCgpIHx8ICFnZXRlZ2lkKCkgfHwgIXNldHVpZCgwKSB8fCAhc2V0Z2lkKDAp
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRHJvcHBpbmcgcHJpdmlsZWdlcyBmYWlsZWQh
XG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFN0YXJ0IHRoZSBX
ZWJQcm9jZXNzLgorICAgIGV4ZWNsKGFyZ3ZbMV0sIGFyZ3ZbMV0sIGFyZ3ZbMl0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KDApKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSkKK3sKKyAgICByZXR1cm4gcnVuKGFyZ2MsIGFyZ3Yp
ID8gMCA6IDE7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGlu
dXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWE2YzhjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1Nh
bmRib3hFbnZpcm9ubWVudExpbnV4LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFJl
bmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgU2FuZGJveEVudmlyb25tZW50TGludXhfaAorI2RlZmluZSBTYW5kYm94RW52
aXJvbm1lbnRMaW51eF9oCisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorCisjaWZu
ZGVmIENMT05FX05FV1BJRAorI2RlZmluZSBDTE9ORV9ORVdQSUQgIDB4MjAwMDAwMDAKKyNlbmRp
ZgorCisjaWZuZGVmIF9HTlVfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5kaWYKKwor
I2RlZmluZSBTQlhfRCAiU0JYX0QiCisjZGVmaW5lIFNCWF9IRUxQRVJfUElEICJTQlhfSEVMUEVS
X1BJRCIKKworI2RlZmluZSBNU0dfQ0hST09UTUUgJ0MnCisjZGVmaW5lIE1TR19DSFJPT1RFRCAn
TycKKworI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CisKK2V4dGVybiBjaGFyIHNhbmRib3hE
aXJlY3RvcnlbXTsKK2V4dGVybiB1aWRfdCBzYW5kYm94VXNlclVpZDsKK2V4dGVybiB1aWRfdCBz
YW5kYm94VXNlckdpZDsKKworI2VuZGlmIC8vIFNhbmRib3hFbnZpcm9ubWVudExpbnV4X2gKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFBy
b2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgv
U2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYWQ3OTg5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcApAQCAtMCww
ICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2Vk
Lmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiU3RyaW5nT3BlcmF0aW9ucy5oIgorCisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5V
WCkKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2Jvb2wgc3Ry
aW5nQ29weShjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlLCBpbnQgbWF4U2l6
ZSkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHNvdXJjZSk7CisgICAgaWYgKGxlbmd0aCA+
IG1heFNpemUgLSAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGJ1ZmZlciBp
cyB0b28gc21hbGw6ICVkICVzLlxuIiwgbWF4U2l6ZSwgc291cmNlKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgbGVuZ3RoICsg
MSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3RyaW5nQ29weShjaGFyKiBkZXN0aW5h
dGlvbiwgY29uc3QgY2hhciogc291cmNlLCBjb25zdCBpbnQgbGVuZ3RoLCBpbnQgbWF4U2l6ZSkK
K3sKKyAgICBpZiAobGVuZ3RoID4gbWF4U2l6ZSAtIDEgfHwgbGVuZ3RoID4gc3RybGVuKHNvdXJj
ZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogYnVmZmVyIGlzIHRvbyBzbWFs
bDogJWQgJXMuXG4iLCBtYXhTaXplLCBzb3VyY2UpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBsZW5ndGgpOworICAgIGRlc3Rp
bmF0aW9uW2xlbmd0aF0gPSAnXDAnOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHN0cmlu
Z0NvbmNhdChjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlMSwgY29uc3QgY2hh
ciogc291cmNlMiwgaW50IG1heFNpemUpCit7CisgICAgaW50IGxlbmd0aDEgPSBzdHJsZW4oc291
cmNlMSk7CisgICAgaW50IGxlbmd0aDIgPSBzdHJsZW4oc291cmNlMik7CisgICAgaWYgKGxlbmd0
aDEgKyBsZW5ndGgyID4gbWF4U2l6ZSAtIDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJF
cnJvcjogYnVmZmVyIGlzIHRvbyBzbWFsbDogJWQgJWQgJXMgJXMuXG4iLCBtYXhTaXplLCBsZW5n
dGgxICsgbGVuZ3RoMiwgc291cmNlMSwgc291cmNlMik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UxLCBsZW5ndGgxKTsKKyAgICBt
ZW1jcHkoZGVzdGluYXRpb24gKyBsZW5ndGgxLCBzb3VyY2UyLCBsZW5ndGgyICsgMSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3RyaW5nQ29uY2F0KGNoYXIqIGRlc3RpbmF0aW9uLCBj
b25zdCBjaGFyKiBzb3VyY2UxLCBjb25zdCBjaGFyKiBzb3VyY2UyLCBjb25zdCBjaGFyKiBzb3Vy
Y2UzLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3RoMSA9IHN0cmxlbihzb3VyY2UxKTsK
KyAgICBpbnQgbGVuZ3RoMiA9IHN0cmxlbihzb3VyY2UyKTsKKyAgICBpbnQgbGVuZ3RoMyA9IHN0
cmxlbihzb3VyY2UzKTsKKyAgICBpZiAobGVuZ3RoMSArIGxlbmd0aDIgKyBsZW5ndGgzID4gbWF4
U2l6ZSAtIDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogYnVmZmVyIGlzIHRv
byBzbWFsbDogJWQgJWQgJXMgJXMgJXMuXG4iLCBtYXhTaXplLCBsZW5ndGgxICsgbGVuZ3RoMiAr
IGxlbmd0aDMsIHNvdXJjZTEsIHNvdXJjZTIsIHNvdXJjZTMpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlMSwgbGVuZ3RoMSk7Cisg
ICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSwgc291cmNlMiwgbGVuZ3RoMik7CisgICAg
bWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSArIGxlbmd0aDIsIHNvdXJjZTMsIGxlbmd0aDMp
OworICAgIGRlc3RpbmF0aW9uW2xlbmd0aDEgKyBsZW5ndGgyICsgbGVuZ3RoM10gPSAnXDAnOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIHN0cmluZ0FwcGVuZChjaGFyKiBkZXN0aW5hdGlv
biwgY29uc3QgY2hhciogc291cmNlLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgc291cmNlTGVu
Z3RoID0gc3RybGVuKHNvdXJjZSk7CisgICAgaW50IGRlc3RpbmF0aW9uTGVuZ3RoID0gc3RybGVu
KGRlc3RpbmF0aW9uKTsKKyAgICBpZiAoc291cmNlTGVuZ3RoICsgZGVzdGluYXRpb25MZW5ndGgg
PiBtYXhTaXplIC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBidWZmZXIg
aXMgdG9vIHNtYWxsOiAlZCAlcy5cbiIsIG1heFNpemUsIHNvdXJjZSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgZGVzdGluYXRpb25MZW5n
dGgsIHNvdXJjZSwgc291cmNlTGVuZ3RoICsgMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9j
ZXNzL1N0cmluZ09wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5k
Ym94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZjAwOGQ2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+Cisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFN0cmluZ09wZXJhdGlvbnNfaAorI2RlZmlu
ZSBTdHJpbmdPcGVyYXRpb25zX2gKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisv
LyBTZWN1cmUgc3RyaW5nIG9wZXJhdGlvbnMuCitib29sIHN0cmluZ0NvcHkoY2hhciosIGNvbnN0
IGNoYXIqLCBpbnQpOworYm9vbCBzdHJpbmdDb3B5KGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3Qg
aW50LCBpbnQpOworYm9vbCBzdHJpbmdDb25jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBj
aGFyKiwgaW50KTsKK2Jvb2wgc3RyaW5nQ29uY2F0KGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3Qg
Y2hhciosIGNvbnN0IGNoYXIqLCBpbnQpOworYm9vbCBzdHJpbmdBcHBlbmQoY2hhciosIGNvbnN0
IGNoYXIqLCBpbnQpOworCisjZW5kaWYKKworI2VuZGlmIC8vIFN0cmluZ09wZXJhdGlvbnNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NM
YXVuY2hlclF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9j
ZXNzTGF1bmNoZXJRdC5jcHAKaW5kZXggMGI2ZWUxYi4uZjY0OGQ5OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
UXQuY3BwCkBAIC02Miw2ICs2MiwxMCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgog
CisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0
aW9uPgorI2VuZGlmCisKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC9tYWNoX2luaXQu
aD4KICNpbmNsdWRlIDxzZXJ2ZXJzL2Jvb3RzdHJhcC5oPgpAQCAtMTY3LDM3ICsxNzEsNDcgQEAg
dm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgIGNvbW1hbmRMaW5lID0g
Y29tbWFuZExpbmUuYXJnKHNvY2tldHNbMF0pOwogI2VuZGlmCiAKLSAgICBRUHJvY2Vzcyogd2Vi
UHJvY2VzcyA9IG5ldyBRdFdlYlByb2Nlc3MoKTsKLSAgICB3ZWJQcm9jZXNzLT5zZXRQcm9jZXNz
Q2hhbm5lbE1vZGUoUVByb2Nlc3M6OkZvcndhcmRlZENoYW5uZWxzKTsKLSAgICB3ZWJQcm9jZXNz
LT5zdGFydChjb21tYW5kTGluZSk7CisgICAgUVByb2Nlc3MqIHdlYlByb2Nlc3NPclNVSURIZWxw
ZXI7CisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKyAgICBRU3RyaW5nIHNhbmRib3hD
b21tYW5kTGluZSA9IFFMYXRpbjFTdHJpbmcoIiUxICUyICUzIik7CisgICAgc2FuZGJveENvbW1h
bmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFyZyhRQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNh
dGlvbkRpclBhdGgoKSArIFFMYXRpbjFTdHJpbmcoIi9TVUlEU2FuZGJveEhlbHBlciIpKTsKKyAg
ICBzYW5kYm94Q29tbWFuZExpbmUgPSBzYW5kYm94Q29tbWFuZExpbmUuYXJnKGV4ZWN1dGFibGVQ
YXRoT2ZXZWJQcm9jZXNzKCkpOworICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21t
YW5kTGluZS5hcmcoc29ja2V0c1swXSk7CisKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyID0g
bmV3IFFQcm9jZXNzKCk7CisgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c2V0UHJvY2Vzc0No
YW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFubmVscyk7CisgICAgd2ViUHJvY2Vzc09y
U1VJREhlbHBlci0+c3RhcnQoc2FuZGJveENvbW1hbmRMaW5lKTsKKyNlbHNlCisgICAgd2ViUHJv
Y2Vzc09yU1VJREhlbHBlciA9IG5ldyBRdFdlYlByb2Nlc3MoKTsKKyAgICB3ZWJQcm9jZXNzT3JT
VUlESGVscGVyLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6Ok1lcmdlZENoYW5uZWxz
KTsKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChjb21tYW5kTGluZSk7CisjZW5k
aWYKIAogI2lmIE9TKFVOSVgpICYmICFPUyhEQVJXSU4pCiAgICAgLy8gRG9uJ3QgZXhwb3NlIHRo
ZSB3ZWIgc29ja2V0IHRvIHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJvY2Vzc2VzCiAgICAgd2hpbGUg
KGZjbnRsKHNvY2tldHNbMF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKSB7CiAgICAgICAg
IGlmIChlcnJubyAhPSBFSU5UUikgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgICAgIGRlbGV0ZSB3ZWJQ
cm9jZXNzT3JTVUlESGVscGVyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQogI2VuZGlmCiAKLSAgICBpZiAoIXdlYlByb2Nlc3MtPndhaXRGb3JTdGFydGVkKCkpIHsKKyAg
ICBpZiAoIXdlYlByb2Nlc3NPclNVSURIZWxwZXItPndhaXRGb3JTdGFydGVkKCkpIHsKICAgICAg
ICAgcURlYnVnKCkgPDwgIkZhaWxlZCB0byBzdGFydCIgPDwgY29tbWFuZExpbmU7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2lmIE9TKERBUldJTikKICAgICAgICAgbWFjaF9wb3J0
X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgY29ubmVjdG9yKTsKICAgICAgICAgbWFjaF9w
b3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGNvbm5lY3RvciwgTUFDSF9QT1JUX1JJR0hU
X1JFQ0VJVkUsIC0xKTsKICNlbmRpZgotICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAg
ICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0KICNpZiBPUyhVTklYKQotICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgd2ViUHJvY2Vz
cy0+cGlkKCksIDEwKTsKKyAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlByb2Nlc3NP
clNVSURIZWxwZXItPnBpZCgpLCAxMCk7CiAjZW5kaWYKLQotICAgIFJ1bkxvb3A6Om1haW4oKS0+
ZGlzcGF0Y2goYmluZCgmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGlu
Z1Byb2Nlc3MsIHRoaXMsIHdlYlByb2Nlc3MsIGNvbm5lY3RvcikpOworICAgIFJ1bkxvb3A6Om1h
aW4oKS0+ZGlzcGF0Y2goYmluZCgmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExh
dW5jaGluZ1Byb2Nlc3MsIHRoaXMsIHdlYlByb2Nlc3NPclNVSURIZWxwZXIsIGNvbm5lY3Rvcikp
OwogfQogCiB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
cHJpCmluZGV4IDgwY2IyZmIuLmFiYjM0MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC02Miw3ICs2Miw4
IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdl
IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL3F0IFwKLSAgICAkJFNPVVJDRV9ESVIv
UGx1Z2luUHJvY2VzcworICAgICQkU09VUkNFX0RJUi9QbHVnaW5Qcm9jZXNzIFwKKyAgICAkJFNP
VVJDRV9ESVIvU2FuZGJveFByb2Nlc3MgXAogCiAjIFRoZSBXZWJLaXQyIFF0IEFQSXMgZGVwZW5k
IG9uIHF3ZWJraXRnbG9iYWwuaCwgd2hpY2ggbGl2ZXMgaW4gV2ViS2l0CiBJTkNMVURFUEFUSCAr
PSAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJLaXQvcXQvQXBpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAppbmRleCAxOGYzMDM5
NC4uOTk4ZTM1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQ
cm9jZXNzTWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlBy
b2Nlc3NNYWluUXQuY3BwCkBAIC0zNCw3ICszNCw5IEBACiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+
CiAjaW5jbHVkZSA8UVVybD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRl
IDxlcnJuby5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2lu
Y2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTYyLDYgKzY0LDE0IEBAIGV4dGVybiAiQyIg
a2Vybl9yZXR1cm5fdCBib290c3RyYXBfbG9va191cDIobWFjaF9wb3J0X3QsIGNvbnN0IG5hbWVf
dCwgbWFjaF9wb3J0CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisjaWYgRU5BQkxFKFNV
SURfU0FOREJPWF9MSU5VWCkKKyNkZWZpbmUgU0JYX0QgIlNCWF9EIgorI2RlZmluZSBTQlhfSEVM
UEVSX1BJRCAiU0JYX0hFTFBFUl9QSUQiCisKKyNkZWZpbmUgTVNHX0NIUk9PVE1FICdDJworI2Rl
ZmluZSBNU0dfQ0hST09URUQgJ08nCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAjaWZu
ZGVmIE5ERUJVRwogI2lmIE9TKFdJTkRPV1MpCkBAIC0xNDIsMTggKzE1Miw4MCBAQCBzdGF0aWMg
dm9pZCBpbml0aWFsaXplUHJveHkoKQogICAgIFFOZXR3b3JrUHJveHlGYWN0b3J5OjpzZXRVc2VT
eXN0ZW1Db25maWd1cmF0aW9uKHRydWUpOwogfQogCisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9M
SU5VWCkKK3BpZF90IGNocm9vdE1lKCkKK3sKKyAgICBsb25nIGludCBmZCA9IC0xOworICAgIGNo
YXIqIHNhbmRib3hTb2NrZXREZXNjcmlwdG9yOworICAgIGNoYXIqIGhlbHBlclBpZDsKKyAgICBj
aGFyIHNhbmRib3hNZU1zZyA9IE1TR19DSFJPT1RNRTsKKyAgICBzc2l6ZV90IGNudDsKKyAgICBw
aWRfdCBoZWxwZXIgPSAtMTsKKworICAgIC8vIEdldCB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRo
ZSBzb2NrZXRwYWlyLgorICAgIHNhbmRib3hTb2NrZXREZXNjcmlwdG9yID0gZ2V0ZW52KFNCWF9E
KTsKKyAgICBpZiAoIXNhbmRib3hTb2NrZXREZXNjcmlwdG9yKQorICAgICAgICByZXR1cm4gLTE7
CisKKyAgICBlcnJubyA9IDA7CisgICAgZmQgPSBzdHJ0b2woc2FuZGJveFNvY2tldERlc2NyaXB0
b3IsIChjaGFyICoqKSAwLCAxMCk7CisgICAgaWYgKGVycm5vIHx8IChmZCA9PSAtMSkpCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIC8vIEdldCB0aGUgUElEIG9mIHRoZSBzZXR1aWQgaGVscGVy
LgorICAgIGhlbHBlclBpZCA9IGdldGVudihTQlhfSEVMUEVSX1BJRCk7CisKKyAgICAvLyBJZiBu
byBQSUQgaXMgYXZhaWxhYmxlLCB0aGUgZGVmYXVsdCBvZiAtMSB3aWxsIGRvLgorICAgIGlmICho
ZWxwZXJQaWQpIHsKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBoZWxwZXIgPSBzdHJ0b2wo
aGVscGVyUGlkLCAoY2hhciAqKikgMCwgMTApOworICAgICAgICBpZiAoZXJybm8gfHwgKGhlbHBl
ciA9PSAtMSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLy8gU2VuZCB0
aGUgY2hyb290TWUgbWVzc2FnZSB0byB0aGUgaGVscGVyLgorICAgIGNudCA9IHdyaXRlKGZkLCAm
c2FuZGJveE1lTXNnLCAxKTsKKyAgICBpZiAoY250ICE9IDEpIHsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDaHJvb3RNZSBtc2cgZmFpbGVkIHRvIHdyaXRlOiAlcy5cbiIsIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLyBSZWFkIHRoZSBhY2tu
b3dsZWRnZW1lbnQgbWVzc2FnZSBmcm9tIHRoZSBoZWxwZXIuCisgICAgY250ID0gcmVhZChmZCwg
JnNhbmRib3hNZU1zZywgMSk7CisgICAgaWYgKChjbnQgIT0gMSkgfHwgKHNhbmRib3hNZU1zZyAh
PSBNU0dfQ0hST09URUQpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcmVh
ZCB0aGUgY29uZmlybWF0aW9uIG1lc3NhZ2UuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAg
IH0KKyAgICBjbG9zZShmZCk7CisKKyAgICAvLyBXYWl0IGZvciB0aGUgaGVscGVyIHByb2Nlc3Mu
CisgICAgaW50IHdhaXRlZFBpZCA9IHdhaXRwaWQoaGVscGVyLCAwLCAwKTsKKyAgICBpZiAod2Fp
dGVkUGlkICE9IC0xICYmICgoaGVscGVyID09IC0xKSB8fCAod2FpdGVkUGlkID09IGhlbHBlcikp
KQorICAgICAgICByZXR1cm4gd2FpdGVkUGlkOworICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRu
J3Qgd2FpdCBmb3IgdGhlIGhlbHBlciBwcm9jZXNzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICByZXR1cm4gLTE7Cit9CisjZW5kaWYKKwogUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vz
c01haW5RdChRR3VpQXBwbGljYXRpb24qIGFwcCkKIHsKLSAgICBpbml0aWFsaXplUHJveHkoKTsK
KyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIHBpZF90IGhlbHBlcjsKKyAgICBo
ZWxwZXIgPSBjaHJvb3RNZSgpOwogCisgICAgaWYgKGhlbHBlciA9PSAtMSkgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkFza2luZyBmb3IgY2hyb290IGZhaWxlZC5cbiIpOworICAgICAgICBy
ZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisgICAgaW5pdGlhbGl6ZVByb3h5KCk7CiAgICAgSlND
Ojppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgp
OwogICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwotICAgIAorCiAjaWYgVVNF
KFFUS0lUKQogICAgIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlRm9yV0syKCk7CiAjZW5kaWYK
LQogICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbi4KICAgICBpZiAoYXBwLT5hcmd1bWVudHMo
KS5zaXplKCkgPD0gMSkgewogICAgICAgICBxRGVidWcoKSA8PCAiRXJyb3I6IHdyb25nIG51bWJl
ciBvZiBhcmd1bWVudHMuIjsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9G
ZWF0dXJlTGlzdC5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpp
bmRleCBhZjRjNDlhLi4xOGNmMGRjIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBl
cmwvRmVhdHVyZUxpc3QucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtCkBAIC0xMTksNiArMTE5LDcgQEAgbXkgKAogICAgICRzaGFyZWRXb3JrZXJzU3VwcG9y
dCwKICAgICAkc3FsRGF0YWJhc2VTdXBwb3J0LAogICAgICRzdHlsZVNjb3BlZFN1cHBvcnQsCisg
ICAgJHN1aWRMaW51eFNhbmRib3gsCiAgICAgJHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBvcnQsCiAg
ICAgJHN2Z0ZvbnRzU3VwcG9ydCwKICAgICAkc3ZnU3VwcG9ydCwKQEAgLTM3MSw2ICszNzIsOSBA
QCBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4gInN0eWxlLXNjb3BlZCIsIGRlc2Mg
PT4gIlRvZ2dsZSBTdHlsZSBTY29wZWQgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9TVFlMRV9TQ09QRUQiLCBkZWZhdWx0ID0+IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBcJHN0
eWxlU2NvcGVkU3VwcG9ydCB9LAogCisgICAgeyBvcHRpb24gPT4gInN1aWQtbGludXgtc2FuZGJv
eCIsIGRlc2MgPT4gIlRvZ2dsZSBzdWlkIHNhbmRib3ggZm9yIGxpbnV4IiwKKyAgICAgIGRlZmlu
ZSA9PiAiRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4g
XCRzdWlkTGludXhTYW5kYm94IH0sCisKICAgICB7IG9wdGlvbiA9PiAic3ZnIiwgZGVzYyA9PiAi
VG9nZ2xlIFNWRyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWRyIsIGRlZmF1
bHQgPT4gMSwgdmFsdWUgPT4gXCRzdmdTdXBwb3J0IH0sCiAKLS0gCjEuNy45LjUKCg==
</data>
<flag name="review"
          id="183938"
          type_id="1"
          status="-"
          setter="kling"
    />
    <flag name="commit-queue"
          id="183939"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172529</attachid>
            <date>2012-11-06 02:29:01 -0800</date>
            <delta_ts>2012-11-06 02:37:00 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-11.2.patch</filename>
            <type>text/plain</type>
            <size>50604</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA0ZDQ1MzljNTRhZmRmNjY0Y2FmNjUwNDFmYTkxMjI3ZTVmZGQxZWM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogVHVl
LCA2IE5vdiAyMDEyIDExOjI2OjAwICswMTAwClN1YmplY3Q6IFtQQVRDSF0gZmVsdG9sdCAxMS4y
CgotLS0KIFNvdXJjZS9RdFdlYktpdC5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgNSArCiAuLi4vV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZyB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybyAgICAgICAg
ICAgICAgICAgIHwgICAyNyArCiAuLi4vU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50
TGludXguY3BwICAgICB8ICA3NTEgKysrKysrKysrKysrKysrKysrKysKIC4uLi9saW51eC9TYW5k
Ym94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIHwgICA0MCArKwogLi4uL2xpbnV4
L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuY3BwICAgICAgfCAgIDg4ICsrKwogLi4u
L1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmggfCAgIDMyICsK
IC4uLi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwICAgIHwgICAz
NiArLQogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAzICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybyAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDQgKwogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFp
blF0LmNwcCAgfCAgIDc1ICstCiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG0gICAgICAgICAgICB8ICAgIDQgKwogMTIgZmlsZXMgY2hhbmdlZCwgMTA1MyBpbnNlcnRpb25z
KCspLCAxNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9T
YW5kYm94UHJvY2Vzcy5wcm8KIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNz
L1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nl
c3MvU3RyaW5nT3BlcmF0aW9ucy5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1F0V2ViS2l0LnBybyBi
L1NvdXJjZS9RdFdlYktpdC5wcm8KaW5kZXggNTlmOWEwZC4uYjA5ZDFkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1F0V2ViS2l0LnBybworKysgYi9Tb3VyY2UvUXRXZWJLaXQucHJvCkBAIC0xNyw2ICsx
NywxMSBAQCBidWlsZD8od2Via2l0MikgewogICAgICAgICBwbHVnaW5wcm9jZXNzLmZpbGUgPSBX
ZWJLaXQyL1BsdWdpblByb2Nlc3MucHJvCiAgICAgICAgIFNVQkRJUlMgKz0gcGx1Z2lucHJvY2Vz
cwogICAgIH0KKworICAgIGVuYWJsZT8oU1VJRF9TQU5EQk9YX0xJTlVYKSB7CisgICAgICAgIHNh
bmRib3hwcm9jZXNzLmZpbGUgPSBXZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybworICAgICAgICBT
VUJESVJTICs9IHNhbmRib3hwcm9jZXNzCisgICAgfQogfQogCiBkZWNsYXJhdGl2ZS5maWxlID0g
V2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xhcmF0aXZlLnBybwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2Uv
V2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCBhNGY4
Y2EwLi4yYmRlNmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9G
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMTMzLDYgKzEzMyw3IEBAIEVOQUJMRV9RVU9U
QSA9IDsKIEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSA9IEVOQUJMRV9SRVFVRVNUX0FO
SU1BVElPTl9GUkFNRTsKIEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZID0gOwogRU5BQkxF
X1NDUklQVEVEX1NQRUVDSCA9IDsKK0VOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVggPSA7CiBFTkFC
TEVfU0hBRE9XX0RPTSA9IDsKIEVOQUJMRV9TSEFSRURfV09SS0VSUyA9IEVOQUJMRV9TSEFSRURf
V09SS0VSUzsKIEVOQUJMRV9TUUxfREFUQUJBU0UgPSBFTkFCTEVfU1FMX0RBVEFCQVNFOwpAQCAt
MTU3LDQgKzE1OCw0IEBAIEVOQUJMRV9XT1JLRVJTID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVf
WEhSX1RJTUVPVVQgPSBFTkFCTEVfWEhSX1RJTUVPVVQ7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9Y
U0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxF
X0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQU5JTUFUSU9OX0FQSSkgJChFTkFCTEVf
QkxPQikgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVO
QUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRB
VElPTikgJChFTkFCTEVfQ1NTX0VYQ0xVU0lPTlMpICQoRU5BQkxFX0NTU19GSUxURVJTKSAkKEVO
QUJMRV9DU1NfSElFUkFSQ0hJRVMpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChF
TkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJM
RV9DU1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfU1RJ
Q0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9DU1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9DU1MzX0NPTkRJ
VElPTkFMX1JVTEVTKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVf
SEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VM
RU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxF
TUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ESUFMT0dfRUxFTUVO
VCkgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVfRFJBR0dBQkxFX1JFR0lPTikg
JChFTkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9GSUxFX1NZU1RFTSkgJChFTkFCTEVf
RklMVEVSUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5B
QkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElO
RykgJChFTkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5B
QkxFX0lGUkFNRV9TRUFNTEVTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVf
SU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9U
WVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUUpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJ
UFRfREVCVUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJM
RV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykg
JChFTkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFC
TEVfTElOS19QUkVSRU5ERVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNF
KSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVO
QUJMRV9NSFRNTCkgJChFTkFCTEVfTUlDUk9EQVRBKSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZF
UlMpICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJ
T05TKSAkKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QREZLSVRfUExVR0lO
KSAkKEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQo
RU5BQkxFX1NDUklQVEVEX1NQRUVDSCkgJChFTkFCTEVfU0hBRE9XX0RPTSkgJChFTkFCTEVfU0hB
UkVEX1dPUktFUlMpICQoRU5BQkxFX1NRTF9EQVRBQkFTRSkgJChFTkFCTEVfU1RZTEVfU0NPUEVE
KSAkKEVOQUJMRV9TVUJQSVhFTF9MQVlPVVQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RP
TV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJ
WklORykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lD
T05fTE9BRElORykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1ZJREVPKSAkKEVO
QUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChF
TkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dPUktFUlMp
ICQoRU5BQkxFX1hIUl9USU1FT1VUKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9
ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAk
KEVOQUJMRV9BTklNQVRJT05fQVBJKSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01F
U1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9C
UkVBSykgJChFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9OKSAkKEVOQUJMRV9DU1NfRVhDTFVT
SU9OUykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NTU19ISUVSQVJDSElFUykgJChF
TkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElP
TikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9D
U1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NT
U19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNfQ09ORElUSU9OQUxfUlVMRVMpICQoRU5BQkxFX0NT
UzNfVEVYVCkgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9B
UkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFO
U0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJ
RU5UQVRJT04pICQoRU5BQkxFX0RJQUxPR19FTEVNRU5UKSAkKEVOQUJMRV9ESVJFQ1RPUllfVVBM
T0FEKSAkKEVOQUJMRV9EUkFHR0FCTEVfUkVHSU9OKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEp
ICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NS
RUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxF
X0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5W
QVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVO
QUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lO
UFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVH
QUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAk
KEVOQUJMRV9MRUdBQ1lfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElP
KSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFC
TEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJ
Q1MpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNS
T0RBVEEpICQoRU5BQkxFX01VVEFUSU9OX09CU0VSVkVSUykgJChFTkFCTEVfTkFWSUdBVE9SX0NP
TlRFTlRfVVRJTFMpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJ
TElUWV9BUEkpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BST0dSRVNTX0VMRU1F
TlQpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJChF
TkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNIKSAk
KEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FM
X0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5BQkxFX1NVQlBJWEVMX0xBWU9V
VCkgJChFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NW
R19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URVhUX0FV
VE9TSVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9UT1VD
SF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9WSURFTykg
JChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8p
ICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XT1JL
RVJTKSAkKEVOQUJMRV9YSFJfVElNRU9VVCkgJChFTkFCTEVfWFNMVCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94
UHJvY2Vzcy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjMGUyZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwpAQCAt
MCwwICsxLDI3IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCBmaWxlIGZvciB0aGUgV2ViS2l0
MiBzYW5kYm94IHByb2Nlc3MgYmluYXJ5CisjCisjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBm
b3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RFTVBM
QVRFID0gYXBwCisKK1RBUkdFVCA9IFNVSURTYW5kYm94SGVscGVyCitERVNURElSID0gJCR7Uk9P
VF9CVUlMRF9ESVJ9L2JpbgorCitDT05GSUcgKz0gY29uc29sZQorQ09ORklHIC09IHF0CisKK1NP
VVJDRVMgKz0gU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExp
bnV4LmNwcCBcCisgICAgICAgICAgIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdP
cGVyYXRpb25zLmNwcAorSEVBREVSUyArPSBTaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2Fu
ZGJveEVudmlyb25tZW50TGludXguaCBcCisgICAgICAgICAgIFNoYXJlZC9saW51eC9TYW5kYm94
UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmgKKworSU5TVEFMTFMgKz0gdGFyZ2V0CitMSUJTICs9
IC1sY2FwIC1sZGwKKworaXNFbXB0eShJTlNUQUxMX0JJTlMpIHsKKyAgICB0YXJnZXQucGF0aCA9
ICQkW1FUX0lOU1RBTExfQklOU10KK30gZWxzZSB7CisgICAgdGFyZ2V0LnBhdGggPSAkJElOU1RB
TExfQklOUworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRi
b3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkNjBhZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52
aXJvbm1lbnRMaW51eC5jcHAKQEAgLTAsMCArMSw3NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEg
SG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiU2FuZGJveEVudmlyb25tZW50TGludXguaCIKKworI2luY2x1ZGUgIlN0cmluZ09w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2lu
Y2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNp
bmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxsaW5rLmg+Cisj
aW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+
CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5j
bHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lz
L3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8
dXRpbWUuaD4KKworZW51bSB7IFBhdGhTaXplID0gNTEyIH07CitjaGFyIHNhbmRib3hEaXJlY3Rv
cnlbUGF0aFNpemVdOwordWlkX3Qgc2FuZGJveFVzZXJVaWQ7Cit1aWRfdCBzYW5kYm94VXNlckdp
ZDsKKworc3RhdGljIHZvaWQgbGF1bmNoQ2hyb290SGVscGVyKGludCBzb2NrZXRQYWlyW10pCit7
CisgICAgc3RydWN0IHJsaW1pdCBub0ZpbGUgPSB7IDAsIDAgfTsKKyAgICAvLyBXZSBuZWVkIHRv
IHJlc3RyaWN0IHRoZSByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIG91ciBwcm9jZXNzIHRvIGF2b2lk
IG9wZW5pbmcKKyAgICAvLyBhIGZpbGUgYnkgbWlzdGFrZS4gSG93ZXZlciwgQ0FQX1NZU19SRVNT
T1VSQ0UgY2FwYWJpbGl0eSBzaG91bGQgYmUgZHJvcHBlZAorICAgIC8vIG90aGVyd2lzZSBpdCB3
b24ndCB3b3JrLgorICAgIGlmIChzZXRybGltaXQoUkxJTUlUX05PRklMRSwgJm5vRmlsZSkpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJIZWxwZXIgY291bGRuJ3Qgc2V0IHRoZSByZXNvdXJj
ZWxpbWl0OiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoY2xvc2Uoc29ja2V0UGFpclsxXSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJDb3VsZG4ndCBjbG9zZSBzb2NrZXQgJWQ6ICVzXG4iLCBzb2NrZXRQYWlyWzFdLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZXhwZWN0
IGEgJ0MnIChDaHJvb3RNZSkgbWVzc2FnZSBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgIGNoYXIg
bWVzc2FnZTsKKyAgICBpZiAocmVhZChzb2NrZXRQYWlyWzBdLCAmbWVzc2FnZSwgMSkgIT0gMSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHJlYWQgdGhlIHByb3BlciBjaHJv
b3RtZSBtc2c6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG1lc3NhZ2UgIT0gTVNHX0NIUk9PVE1FKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiV3JvbmcgbWVzc2FnZSByZWNpZXZlZC5cbiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc3RydWN0IHN0YXQgc2FuZGJveERpcmVjdG9yeUluZm87CisgICAgaWYgKGxz
dGF0KHNhbmRib3hEaXJlY3RvcnksICZzYW5kYm94RGlyZWN0b3J5SW5mbykgJiYgU19JU0RJUihz
YW5kYm94RGlyZWN0b3J5SW5mby5zdF9tb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlNhbmRib3ggZGlyZWN0b3J5ICglcykgZG9lcyBub3QgZXhpc3QhXG4iLCBzYW5kYm94RGlyZWN0
b3J5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjaHJvb3Qoc2FuZGJveERp
cmVjdG9yeSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJvb3RpbmcgZmFpbGVkOiAl
cy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBDaHJvb3Qgb25seSBjaGFuZ2VzIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgY2FsbGluZyBw
cm9jZXNzIGJ1dCBkb2Vzbid0IGNoYW5nZQorICAgIC8vIHRoZSBjdXJyZW50IHdvcmtpbmcgZGly
ZWN0b3J5LiBUaGVyZWZvcmUsIGlmIHdlIGRvbid0IGRvIGl0IG1hbnVhbGx5IGEgbWFsaWNpb3Vz
IHVzZXIKKyAgICAvLyBjb3VsZCBicmVhayBvdXQgdGhlIGphaWwgd2l0aCByZWxhdGl2ZSBwYXRo
cy4KKyAgICBpZiAoY2hkaXIoIi8iKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxk
bid0IGNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gLy46ICVzXG4iLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2VuZGluZyBhY2tub3ds
ZWRnZW1lbnQgdG8gdGhlIFdlYlByb2Nlc3MgdGhhdCB0aGUgc2FuZGJveGluZyB3YXMgc3VjY2Vz
c2Z1bGwuCisgICAgbWVzc2FnZSA9IE1TR19DSFJPT1RFRDsKKyAgICBpZiAod3JpdGUoc29ja2V0
UGFpclswXSwgJm1lc3NhZ2UsIDEpICE9IDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
b3VsZG4ndCBzZW5kIGFja25vd2xlZGdlbWVudCB0byBXZWJQcm9jZXNzOiAlcy5cbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZXhpdChFWElUX1NVQ0NF
U1MpOworfQorCitzdGF0aWMgYm9vbCBzZXRFbnZpcm9ubWVudFZhcmlhYmxlc0ZvckNocm9vdEhl
bHBlcihwaWRfdCBwaWQsIGludCBzb2NrZXRQYWlyW10pCit7CisgICAgY29uc3QgaW50IGRlc2Ny
aXB0b3JTaXplID0gMzI7CisgICAgY2hhciBzb2NrZXREZXNjcmlwdG9yW2Rlc2NyaXB0b3JTaXpl
XTsKKyAgICBjaGFyIHNhbmRib3hIZWxwZXJQaWRbZGVzY3JpcHRvclNpemVdOworCisgICAgaW50
IGxlbmd0aCA9IHNucHJpbnRmKHNhbmRib3hIZWxwZXJQaWQsIHNpemVvZihzYW5kYm94SGVscGVy
UGlkKSwgIiV1IiwgcGlkKTsKKyAgICBpZiAobGVuZ3RoIDwgMCB8fCBsZW5ndGggPj0gc2l6ZW9m
KHNhbmRib3hIZWxwZXJQaWQpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29udmVydGlu
ZyB0aGUgcGlkIHRvIHN0cmluZyBpcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNldGVudihTQlhfSEVMUEVS
X1BJRCwgc2FuZGJveEhlbHBlclBpZCwgMSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
b3VsZG4ndCBzZXQgdGhlIFNCWF9IRUxQRVJfUElEIGVudiB2YXJpYWJsZTogJXNcbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBsZW5ndGgg
PSBzbnByaW50Zihzb2NrZXREZXNjcmlwdG9yLCBzaXplb2Yoc29ja2V0RGVzY3JpcHRvciksICIl
dSIsIHNvY2tldFBhaXJbMV0pOworICAgIGlmIChsZW5ndGggPCAwIHx8IGxlbmd0aCA+PSBzaXpl
b2Yoc29ja2V0RGVzY3JpcHRvcikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb252ZXJ0
aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gc3RyaW5nIGlzIGZhaWxlZDogJXMuXG4iLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNl
dGVudihTQlhfRCwgc29ja2V0RGVzY3JpcHRvciwgMSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJTYXZpbmcgdGhlIGhlbHBlcnMgZmlsZWRlc2NyaXB0b3IgaW50byBhbiBlbnYgdmFyaWFi
bGUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChjbG9zZShzb2NrZXRQYWlyWzBdKSkgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkNsb3Npbmcgb2YgJWQgZmFpbGVkOiAlc1xuIiwgc29ja2V0UGFpclswXSwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcHJlcGFyZUFuZFN0YXJ0Q2hyb290SGVscGVyKCkK
K3sKKyAgICBpbnQgc29ja2V0UGFpclsyXTsKKyAgICBwaWRfdCBwaWQ7CisKKyAgICBpZiAoc29j
a2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0UGFpcikpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgc29ja2V0cGFpcjogJXNcbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwaWQgPSBz
eXNjYWxsKFNZU19jbG9uZSwgQ0xPTkVfRlMgfCBTSUdDSExELCAwLCAwLCAwKTsKKworICAgIHN3
aXRjaCAocGlkKSB7CisgICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9u
ZSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjYXNlIDA6CisgICAgICAgIC8vIENoaWxkIHByb2Nlc3M6IHdlIHN0YXJ0IHRoZSBj
aHJvb3QgaGVscGVyIHdoaWNoIHdhaXRzIGZvciB0aGUgIkNocm9vdE1lIgorICAgICAgICAvLyBt
ZXNzYWdlIGZyb20gdGhlIFdlYlByb2Nlc3MuIElmIHdlIGFyZSBzdWNjZXNzZWQsIHRoZW4gd2Ug
d29uJ3QgcmV0dXJuLgorICAgICAgICBsYXVuY2hDaHJvb3RIZWxwZXIoc29ja2V0UGFpcik7Cisg
ICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgLy8gUGFyZW50IHByb2Nlc3M6IGV4cG9ydHMgdGhlIHBpZCBvZiB0
aGUgaGVscGVyIGFuZCB0aGUgc29ja2V0IGlkIHNvIHRoZQorICAgICAgICAvLyBoZWxwZXIgYW5k
IHRoZSBXZWJQcm9jZXNzIGNhbiBjb21tdW5pY2F0ZS4KKyAgICAgICAgcmV0dXJuIHNldEVudmly
b25tZW50VmFyaWFibGVzRm9yQ2hyb290SGVscGVyKHBpZCwgc29ja2V0UGFpcik7CisgICAgfQor
ICAgIC8vIFdlIHNob3VsZCBuZXZlciByZWFjaCBoZXJlLgorICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gU2V0IGNhcGFiaWxpdGllcyBpbiBhbGwgdGhyZWUgc2V0cy4KK3N0YXRpYyBib29sIHNl
dENhcGFiaWxpdGllcyhjYXBfdmFsdWVfdCogY2FwYWJpbGl0eUxpc3QsIGludCBsZW5ndGgpCit7
CisgICAgY2FwX3QgY2FwYWJpbGl0aWVzOworCisgICAgLy8gQ2FwYWJpbGl0aWVzIHNob3VsZCBi
ZSBpbml0aWFsaXplZCB3aXRob3V0IGZsYWdzLgorICAgIGNhcGFiaWxpdGllcyA9IGNhcF9pbml0
KCk7CisgICAgaWYgKCFjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJQ
cm9jZXNzIGNhcGFiaWxpdGllcyBpbml0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY2FwX2NsZWFyKGNhcGFi
aWxpdGllcykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbGVhcmluZyBwcm9jZXNzIGNh
cGFiaWxpdGllcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNhcGFiaWxpdHlMaXN0ICYmIGxlbmd0aCkgewor
ICAgICAgICBpZiAoY2FwX3NldF9mbGFnKGNhcGFiaWxpdGllcywgQ0FQX0VGRkVDVElWRSwgbGVu
Z3RoLCBjYXBhYmlsaXR5TGlzdCwgQ0FQX1NFVCkKKyAgICAgICAgICAgIHx8IGNhcF9zZXRfZmxh
ZyhjYXBhYmlsaXRpZXMsIENBUF9JTkhFUklUQUJMRSwgbGVuZ3RoLCBjYXBhYmlsaXR5TGlzdCwg
Q0FQX1NFVCkKKyAgICAgICAgICAgIHx8IGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9Q
RVJNSVRURUQsIGxlbmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9TRVQpKSB7CisgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBzZXQgcHJvY2VzcyBjYXBhYmlsaXR5IGZsYWdzOiAl
c1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGNhcF9mcmVlKGNhcGFiaWxpdGll
cyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoY2FwX3NldF9wcm9jKGNhcGFiaWxpdGllcykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDYW5ub3Qgc2V0IHByb2Nlc3MgY2FwYWJpbGl0aWVzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgY2FwX2ZyZWUoY2FwYWJpbGl0aWVzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBjYXBfZnJlZShjYXBhYmlsaXRpZXMpOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgYm9vbCBkcm9wUHJpdmlsZWdlcygpCit7CisgICAgLy8gV2UgYmVjb21lIGV4
cGxpY2l0ZWx5IG5vbiBkdW1wYWJsZS4KKyAgICBpZiAocHJjdGwoUFJfU0VUX0RVTVBBQkxFLCAw
LCAwLCAwLCAwKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNldHRpbmcgZHVtcGxhYmxl
IGlzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoc2V0cmVzZ2lkKHNhbmRib3hVc2VyR2lkLCBzYW5kYm94VXNl
ckdpZCwgc2FuZGJveFVzZXJHaWQpCisgICAgICAgIHx8IHNldHJlc3VpZChzYW5kYm94VXNlclVp
ZCwgc2FuZGJveFVzZXJVaWQsIHNhbmRib3hVc2VyVWlkKSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkbid0IGZhbGxiYWNrIHRvIHVzZXI6ICVkLlxuIiwgc2FuZGJveFVzZXJVaWQp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIERyb3AgYWxsIGNhcGFiaWxp
dGllcy4gQWdhaW4sIHNldHVpZCgpIG5vcm1hbGx5IHRha2VzIGNhcmUgb2YgdGhpcyBpZiB3ZSBo
YWQgZXVpZCAwLgorICAgIHJldHVybiBzZXRDYXBhYmlsaXRpZXMoMCwgMCk7Cit9CisKK3N0YXRp
YyBib29sIGZpbGVFeGlzdHMoY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBm
aWxlU3RhdDsKKyAgICByZXR1cm4gIShsc3RhdChwYXRoLCAmZmlsZVN0YXQpICYmIGVycm5vID09
IEVOT0VOVCk7Cit9CisKK3N0YXRpYyBtb2RlX3QgZGlyZWN0b3J5UGVybWlzc2lvbnMoY29uc3Qg
Y2hhciogZGlyZWN0b3J5KQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIHN0YXQo
ZGlyZWN0b3J5LCAmZmlsZVN0YXQpOworICAgIHJldHVybiBmaWxlU3RhdC5zdF9tb2RlOworfQor
CitzdGF0aWMgYm9vbCBjcmVhdGVEaXJlY3RvcnkoY2hhciogcGF0aFRvQ3JlYXRlLCBjb25zdCBj
aGFyKiBuZXh0RGlyZWN0b3J5VG9DcmVhdGUpCit7CisgICAgaWYgKCFzdHJpbmdBcHBlbmQocGF0
aFRvQ3JlYXRlLCBuZXh0RGlyZWN0b3J5VG9DcmVhdGUsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgY2hhciBwYXRoVG9DcmVhdGVJblNhbmRib3hbUGF0aFNpemVdOwor
ICAgIGlmICghc3RyaW5nQ29uY2F0KHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgc2FuZGJveERpcmVj
dG9yeSwgcGF0aFRvQ3JlYXRlLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1vZGVfdCBtb2RlID0gZGlyZWN0b3J5UGVybWlzc2lvbnMocGF0aFRvQ3JlYXRlKTsKKyAg
ICBpZiAobWtkaXIocGF0aFRvQ3JlYXRlSW5TYW5kYm94LCBtb2RlKSkgeworICAgICAgICBpZiAo
ZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW9u
IG9mICVzIGZhaWxlZDogJXNcbiIsIHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGxzdGF0KHBhdGhUb0NyZWF0ZSwgJmZpbGVJbmZv
KTsKKyAgICBpZiAoZmlsZUluZm8uc3RfdWlkID09IGdldHVpZCgpKSB7CisgICAgICAgIGlmIChj
aG93bihwYXRoVG9DcmVhdGVJblNhbmRib3gsIHNhbmRib3hVc2VyVWlkLCBzYW5kYm94VXNlckdp
ZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChjaG1vZChwYXRo
VG9DcmVhdGVJblNhbmRib3gsIGZpbGVJbmZvLnN0X21vZGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZURpcmVjdG9yeVBh
dGgoY2hhciogcGF0aCkKK3sKKyAgICBjaGFyIGZ1bGxQYXRoSW5TYW5kYm94W1BhdGhTaXplXTsK
KyAgICBpZiAoIXN0cmluZ0NvbmNhdChmdWxsUGF0aEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9y
eSwgcGF0aCwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZmls
ZUV4aXN0cyhmdWxsUGF0aEluU2FuZGJveCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Y2hhciBhbHJlYWR5Q3JlYXRlZFBhdGhbUGF0aFNpemVdOworICAgIGFscmVhZHlDcmVhdGVkUGF0
aFswXSA9ICdcMCc7CisgICAgLy8gc3RhcnRQb3MgaXMgKHBhdGggKyAxKSBiZWNhdXNlIHdlIHNr
aXAgdGhlIGZpcnN0ICcvJy4KKyAgICBjaGFyKiBzdGFydFBvcyA9IHBhdGggKyAxOworICAgIGNo
YXIqIGVuZFBvczsKKyAgICB3aGlsZSAoKGVuZFBvcyA9IHN0cmNocihzdGFydFBvcywgJy8nKSkp
IHsKKyAgICAgICAgY2hhciBuZXh0RGlyZWN0b3J5VG9DcmVhdGVbUGF0aFNpemVdOworICAgICAg
ICBpZiAoIXN0cmluZ0NvcHkobmV4dERpcmVjdG9yeVRvQ3JlYXRlLCBzdGFydFBvcyAtIDEsIGVu
ZFBvcyAtIHN0YXJ0UG9zICsgMSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeShhbHJlYWR5Q3JlYXRlZFBhdGgsIG5leHRE
aXJlY3RvcnlUb0NyZWF0ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN0
YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisgICAgLy8gQ3JlYXRlIHRoZSBsYXN0IGRpcmVj
dG9yeSBvZiB0aGUgZGlyZWN0b3J5cGF0aC4KKyAgICBhbHJlYWR5Q3JlYXRlZFBhdGhbMF0gPSAn
XDAnOworICAgIHJldHVybiBjcmVhdGVEaXJlY3RvcnkoYWxyZWFkeUNyZWF0ZWRQYXRoLCBwYXRo
KTsKK30KKworc3RhdGljIGJvb2wgY3JlYXRlRGV2aWNlRmlsZXMoKQoreworICAgIGNoYXIgZGV2
W10gPSAiL2Rldi8iOworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5UGF0aChkZXYpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgY2hhciogZGV2aWNlc1syXSA9IHsgIi9kZXYvcmFu
ZG9tIiwgIi9kZXYvdXJhbmRvbSIgfTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkg
eworICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7CisgICAgICAgIGlmIChsc3RhdChkZXZpY2Vz
W2ldLCAmc3RhdHVzKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBv
YnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlIGZpbGUgKCVzKTogJXNcbiIsIGRldmlj
ZXNbaV0sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgZGV2X3QgZGV2ID0gc3RhdHVzLnN0X3JkZXY7CisgICAgICAgIC8vIEJv
dGggbmVlZGVkIGRldmljZSBmaWxlcyAoL2Rldi9yYW5kb20gYW5kIC9kZXYvdXJhbmRvbSkgYXJl
IGNoYXJhY3RlciBtX2RldmljZXMgYW5kCisgICAgICAgIC8vIHRoZWlyIHBlcm1pc3Npb25zIHNo
b3VsZCBiZTogcnctcnctcnctLgorICAgICAgICBjaGFyIGRldmljZVtQYXRoU2l6ZV07CisgICAg
ICAgIGlmICghc3RyaW5nQ29uY2F0KGRldmljZSwgc2FuZGJveERpcmVjdG9yeSwgZGV2aWNlc1tp
XSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobWtu
b2QoZGV2aWNlLCBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dS
UCB8IFNfSVJPVEggfCBTX0lXT1RILCBtYWtlZGV2KG1ham9yKGRldiksIG1pbm9yKGRldikpKSkg
eworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkgeworICAgICAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3JlYXRlIGRldmljZSBmaWxlICVzOiAlc1xuIiwgZGV2
aWNlLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIGJvb2wgbW91bnRGaWxlU3lzdGVtcygpCit7CisgICAgY2hhciBwcm9jW10gPSAiL3Byb2Mv
IjsKKyAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeVBhdGgocHJvYykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjaGFyIHByb2NQYXRoSW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICBpZiAoIXN0
cmluZ0NvbmNhdChwcm9jUGF0aEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgcHJvYywgUGF0
aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1vdW50KHByb2MsIHByb2NQ
YXRoSW5TYW5kYm94LCAicHJvYyIsIDAsIDApKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFQlVT
WSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBtb3VudGluZyAlcy4g
JXNcbiIsIHByb2MsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGFyIHNoYXJlZE1lbW9yeVtdID0gIi9ydW4vc2ht
LyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKHNoYXJlZE1lbW9yeSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjaGFyIHNoYXJlZE1lbW9yeVBhdGhJblNhbmRib3hbUGF0aFNp
emVdOworICAgIGlmICghc3RyaW5nQ29uY2F0KHNoYXJlZE1lbW9yeVBhdGhJblNhbmRib3gsIHNh
bmRib3hEaXJlY3RvcnksIHNoYXJlZE1lbW9yeSwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1vdW50KHNoYXJlZE1lbW9yeSwgc2hhcmVkTWVtb3J5UGF0aEluU2Fu
ZGJveCwgInRtcGZzIiwgMCwgMCkpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVCVVNZKSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG1vdW50aW5nICVzOiAlc1xuIiwg
c2hhcmVkTWVtb3J5LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBs
aW5rRmlsZShjaGFyKiBzb3VyY2VGaWxlLCBjaGFyKiB0YXJnZXRGaWxlKQoreworICAgIGJvb2wg
aXNTeW1saW5rID0gdHJ1ZTsKKyAgICB3aGlsZSAoaXNTeW1saW5rKSB7CisgICAgICAgIHN0cnVj
dCBzdGF0IGZpbGVJbmZvOworICAgICAgICBpZiAobHN0YXQoc291cmNlRmlsZSwgJmZpbGVJbmZv
KSkgeworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkgeworICAgICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb2J0YWluIGluZm9ybWF0aW9uIGFib3V0ICVzOiAl
c1xuIiwgc291cmNlRmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwg
ZmlsZSBkb2Vzbid0IGV4aXN0IChlLmcuIGRhbmdsaW5nIGxpbmtzKSB0aGVuIHdlIGNhbiBpZ25v
cmUgaXQKKyAgICAgICAgICAgIC8vIGluIHRoZSBzYW5kYm94IHRvby4KKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNoYXIqIGVuZE9mQmFzZURpcmVjdG9yeUlu
U291cmNlID0gc3RycmNocihzb3VyY2VGaWxlLCAnLycpOworICAgICAgICBpZiAoIWVuZE9mQmFz
ZURpcmVjdG9yeUluU291cmNlKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFs
aWQgc291cmNlOiAlcy5cbiIsIHNvdXJjZUZpbGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGNoYXIgYmFzZURpcmVjdG9yeU9mU291cmNlW1BhdGhTaXpl
XTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb3B5KGJhc2VEaXJlY3RvcnlPZlNvdXJjZSwgc291cmNl
RmlsZSwgZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UgLSBzb3VyY2VGaWxlICsgMSwgUGF0aFNp
emUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNyZWF0ZURpcmVj
dG9yeVBhdGgoYmFzZURpcmVjdG9yeU9mU291cmNlKSkgeworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDcmVhdGluZyAlcyBmYWlsZWQ6ICVzLlxuIiwgYmFzZURpcmVjdG9yeU9mU291cmNl
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChsaW5rKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpKSB7CisgICAgICAgICAg
ICBpZiAoZXJybm8gIT0gRUVYSVNUICYmIGVycm5vICE9IEVOT0VOVCkgeworICAgICAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiTGlua2luZyAlcyBmYWlsZWQ6ICVzLlxuIiwgc291cmNlRmls
ZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgc3ltbGlua3MuCisgICAg
ICAgIGlzU3ltbGluayA9IChmaWxlSW5mby5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGTE5LOwor
ICAgICAgICBpZiAoIWlzU3ltbGluaykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNo
YXIgc3ltbGlua1RhcmdldFtQYXRoU2l6ZV07CisgICAgICAgIGludCBsZW5ndGhPZlRoZUxpbmsg
PSByZWFkbGluayhzb3VyY2VGaWxlLCBzeW1saW5rVGFyZ2V0LCBzaXplb2Yoc3ltbGlua1Rhcmdl
dCkgLSAxKTsKKyAgICAgICAgaWYgKGxlbmd0aE9mVGhlTGluayA+IDApCisgICAgICAgICAgICBz
eW1saW5rVGFyZ2V0W2xlbmd0aE9mVGhlTGlua10gPSAnXDAnOworICAgICAgICBjaGFyIHN5bWxp
bmtUYXJnZXRJblJlYWxXb3JsZFtQYXRoU2l6ZV07CisgICAgICAgIGNoYXIgc3ltbGlua1Rhcmdl
dEluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgICAgIC8vIE1ha2luZyBkaWZmZXJlbmNlIGJldHdl
ZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzLgorICAgICAgICBpZiAoc3ltbGlua1Rhcmdl
dFswXSA9PSAnLycpIHsKKyAgICAgICAgICAgIGlmICghc3RyaW5nQ29weShzeW1saW5rVGFyZ2V0
SW5SZWFsV29ybGQsIHN5bWxpbmtUYXJnZXQsIFBhdGhTaXplKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIXN0cmluZ0NvbmNhdChzeW1saW5rVGFyZ2V0
SW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBzeW1saW5rVGFyZ2V0LCBQYXRoU2l6ZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKCFzdHJpbmdDb25jYXQoc3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBiYXNlRGlyZWN0
b3J5T2ZTb3VyY2UsICIvIiwgc3ltbGlua1RhcmdldCwgUGF0aFNpemUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghc3RyaW5nQ29uY2F0KHN5bWxpbmtU
YXJnZXRJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksICIvIiwgc3ltbGlua1RhcmdldEluUmVh
bFdvcmxkLCBQYXRoU2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmICghc3RyaW5nQ29weShzb3VyY2VGaWxlLCBzeW1saW5rVGFyZ2V0SW5S
ZWFsV29ybGQsIFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCFzdHJpbmdDb3B5KHRhcmdldEZpbGUsIHN5bWxpbmtUYXJnZXRJblNhbmRib3gsIFBhdGhT
aXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIGxpbmtEaXJlY3RvcnkoY2hhciogc291cmNlRGlyZWN0b3J5UGF0
aCwgY2hhciogdGFyZ2V0RGlyZWN0b3J5UGF0aCkKK3sKKyAgICBpZiAoIWNyZWF0ZURpcmVjdG9y
eVBhdGgoc291cmNlRGlyZWN0b3J5UGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBE
SVIqIGRpcmVjdG9yeSA9IG9wZW5kaXIoc291cmNlRGlyZWN0b3J5UGF0aCk7CisgICAgaWYgKCFk
aXJlY3RvcnkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvcGVuIGRpcmVj
dG9yeSAlczogJXNcbiIsIHNvdXJjZURpcmVjdG9yeVBhdGgsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgZGlyZW50ICpkaXJlY3Rv
cnlJbmZvID0gMDsKKyAgICB3aGlsZSAoKGRpcmVjdG9yeUluZm8gPSByZWFkZGlyKGRpcmVjdG9y
eSkpKSB7CisgICAgICAgIGNoYXIqIG5leHRGaWxlSW5EaXJlY3RvcnkgPSBkaXJlY3RvcnlJbmZv
LT5kX25hbWU7CisgICAgICAgIC8vIFdlIG11c3Qgbm90IGxpbmsgJy4nIGFuZCAiLi4iIGludG8g
dGhlIHNhbmRib3guCisgICAgICAgIGlmICghc3RybmNtcChuZXh0RmlsZUluRGlyZWN0b3J5LCAi
LiIsIHN0cmxlbihuZXh0RmlsZUluRGlyZWN0b3J5KSkgfHwgIXN0cm5jbXAobmV4dEZpbGVJbkRp
cmVjdG9yeSwgIi4uIiwgMikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2hhciBz
b3VyY2VGaWxlW1BhdGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb25jYXQoc291cmNlRmls
ZSwgc291cmNlRGlyZWN0b3J5UGF0aCwgIi8iLCBuZXh0RmlsZUluRGlyZWN0b3J5LCBQYXRoU2l6
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2hhciB0YXJnZXRGaWxl
W1BhdGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb25jYXQodGFyZ2V0RmlsZSwgdGFyZ2V0
RGlyZWN0b3J5UGF0aCwgIi8iLCBuZXh0RmlsZUluRGlyZWN0b3J5LCBQYXRoU2l6ZSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAg
IGlmICgoZGlyZWN0b3J5SW5mby0+ZF90eXBlID09IERUX0RJUikpCisgICAgICAgICAgICBvayA9
IGxpbmtEaXJlY3Rvcnkoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG9rID0gbGlua0ZpbGUoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7CisgICAgICAg
IGlmICghb2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUmVz
dG9yZSB0aGUgb3JpZ2luYWwgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGRpcmVjdG9yaWVzIGJl
Y2F1c2UKKyAgICAvLyBpdCBjb3VsZCBoYXZlIG1lYW5pbmcgZS5nLiBpbiB0aGUgaGFzaGdlbmVy
YXRpb24gb2YgY2FjaGUgZmlsZXMuCisgICAgc3RydWN0IHN0YXQgZmlsZVN0YXQ7CisgICAgaWYg
KGxzdGF0KHNvdXJjZURpcmVjdG9yeVBhdGgsICZmaWxlU3RhdCkpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJFcnJvciBieSBvYnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZGlyZWN0b3J5
ICglcyk6ICVzXG4iLCBzb3VyY2VEaXJlY3RvcnlQYXRoLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cnVjdCB1dGltYnVmIHRpbWVzID0geyBm
aWxlU3RhdC5zdF9hdGltZSwgZmlsZVN0YXQuc3RfbXRpbWUgfTsKKyAgICBpZiAodXRpbWUodGFy
Z2V0RGlyZWN0b3J5UGF0aCwgJnRpbWVzKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNv
dWxkbid0IHNldCBiYWNrIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mICVzOiAlc1xuIiwg
dGFyZ2V0RGlyZWN0b3J5UGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY29sbGVjdFJ1
blRpbWVEZXBlbmRlbmNpZXMoKQoreworICAgIC8vIFRoZSBsaXN0IG9mIGVtcGlyaWNhbGx5IGdh
dGhlcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLgorICAgIGNvbnN0IGNoYXIqIHJ1bnRpbWVEZXBl
bmRlbmNpZXNbXSA9IHsKKyAgICAgICAgImxpYm5zc19kbnMuc28iLAorICAgICAgICAibGlicmVz
b2x2LnNvIiwKKyAgICAgICAgImxpYnNzbC5zbyIsCisgICAgICAgICJsaWJjcnlwdG8uc28iLAor
ICAgICAgICAwCisgICAgfTsKKworICAgIGNvbnN0IGNoYXIqKiBjdXJyZW50UnVudGltZURlcGVu
ZGVuY3kgPSBydW50aW1lRGVwZW5kZW5jaWVzOworICAgIHdoaWxlICgqY3VycmVudFJ1bnRpbWVE
ZXBlbmRlbmN5KSB7CisgICAgICAgIC8vIFRvIG9idGFpbiB0aGUgcGF0aCBvZiB0aGUgcnVudGlt
ZSBkZXBlbmRlbmNpZXMgd2Ugb3BlbiB0aGVtIHdpdGggZGxvcGVuLgorICAgICAgICAvLyBXaXRo
IHRoZSBoYW5kbGUgc3VwcGxpZWQgYnkgZGxvcGVuIHdlIGNhbiBvYnRhaW4gaW5mb3JtYXRpb24g
YWJvdXQgdGhlIGR5bmFtaWNhbGx5CisgICAgICAgIC8vIGxpbmtlZCBsaWJyYXJpZXMsIHNvIHRo
ZSBwYXRoIHdoZXJlIGFyZSB0aGV5IGluc3RhbGxlZC4KKyAgICAgICAgdm9pZCogaGFuZGxlID0g
ZGxvcGVuKCpjdXJyZW50UnVudGltZURlcGVuZGVuY3ksIFJUTERfTEFaWSk7CisgICAgICAgIGlm
ICghaGFuZGxlKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGdldCB0
aGUgaGFuZGxlciBvZiAlczogJXNcbiIsICpjdXJyZW50UnVudGltZURlcGVuZGVuY3ksIGRsZXJy
b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBz
dHJ1Y3QgbGlua19tYXAqIGxpbmtNYXA7CisgICAgICAgIGlmIChkbGluZm8oaGFuZGxlLCBSVExE
X0RJX0xJTktNQVAsICZsaW5rTWFwKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
b3VsZG4ndCBnZXQgaW5mb3JtYXRpb24gYWJvdXQgJXM6ICVzXG4iLCAqY3VycmVudFJ1bnRpbWVE
ZXBlbmRlbmN5LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmICghbGlua01hcCkgeworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGxpbmttYXAgb2YgJXM6ICVzLlxuIiwgKmN1cnJlbnRS
dW50aW1lRGVwZW5kZW5jeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgcGF0aE9mVGhlTGlicmFyeVtQYXRoU2l6
ZV07CisgICAgICAgIGNoYXIgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJveFtQYXRoU2l6ZV07Cisg
ICAgICAgIGlmICghc3RyaW5nQ29weShwYXRoT2ZUaGVMaWJyYXJ5LCBsaW5rTWFwLT5sX25hbWUs
IFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFzdHJp
bmdDb25jYXQocGF0aE9mVGhlTGlicmFyeUluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgcGF0
aE9mVGhlTGlicmFyeSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIWxpbmtGaWxlKHBhdGhPZlRoZUxpYnJhcnksIHBhdGhPZlRoZUxpYnJhcnlJblNh
bmRib3gpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxpbmtpbmcgcnVudGltZSBk
ZXBlbmRlbmN5OiAlcyBmYWlsZWQ6ICVzXG4iLCBwYXRoT2ZUaGVMaWJyYXJ5LCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICAgICAgZGxjbG9zZShoYW5kbGUpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRsY2xvc2UoaGFuZGxlKTsKKyAgICAgICAgKytj
dXJyZW50UnVudGltZURlcGVuZGVuY3k7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgYm9vbCBzZXR1cFhhdXRob3JpdHlGb3JOb2JvZHlVc2VyKCkKK3sKKyAgICAvLyBUbyBi
ZSBhYmxlIHVzZSBYIGluc2lkZSB0aGUgc2FuZGJveCBhbiAuWGF1dGhvcml0eSBmaWxlIG11c3Qg
YmUgZXhpc3QgaW5zaWRlIGl0LAorICAgIC8vIG93bmVkIGJ5IHRoZSBzYW5kYm94dXNlci4gRnVy
dGhlcm1vcmUsIFhBVVRIT1JJVFkgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBwb2ludCB0byBp
dC4KKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworICAgIHNpemVfdCBzaXplOworICAgIHN0cnVj
dCBwYXNzd2QqIHJlYWxVc2VyID0gZ2V0cHd1aWQoZ2V0Z2lkKCkpOworICAgIGNoYXIgeGF1dGhv
cml0eU9mUmVhbFVzZXJbUGF0aFNpemVdOworICAgIGNoYXIgeGF1dGhvcml0eUluU2FuZGJveFtQ
YXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoeGF1dGhvcml0eU9mUmVhbFVzZXIsIHJl
YWxVc2VyLT5wd19kaXIsICIvLlhhdXRob3JpdHkiLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIXN0cmluZ0NvbmNhdCh4YXV0aG9yaXR5SW5TYW5kYm94LCBzYW5k
Ym94RGlyZWN0b3J5LCB4YXV0aG9yaXR5T2ZSZWFsVXNlciwgUGF0aFNpemUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBGSUxFKiBzb3VyY2UgPSBmb3Blbih4YXV0aG9yaXR5T2ZSZWFs
VXNlciwgInJiIik7CisgICAgaWYgKCFzb3VyY2UpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDb3VsZG4ndCBvcGVuICVzOiAlc1xuIiwgeGF1dGhvcml0eU9mUmVhbFVzZXIsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBGSUxFKiBkZXN0
ID0gZm9wZW4oeGF1dGhvcml0eUluU2FuZGJveCwgIndiIik7CisgICAgaWYgKCFkZXN0KSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiAlczogJXNcbiIsIHhhdXRob3Jp
dHlJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBXZSBjb3B5IHRoZSAuWGF1dGhvcml0eSBmaWxlIG9mIHRoZSByZWFsIHVz
ZXIgKGluc3RlYWQgb2YgbGlua2luZykgYmVjYXVzZSBub2JvZHkgdXNlcgorICAgIC8vIHNob3Vs
ZCBvd24gaXQgYnV0IHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvZiB0
aGUgb3JpZ2luYWwgZmlsZS4KKyAgICB3aGlsZSAoKHNpemUgPSBmcmVhZChidWZmZXIsIDEsIEJV
RlNJWiwgc291cmNlKSkpCisgICAgICAgIGZ3cml0ZShidWZmZXIsIDEsIHNpemUsIGRlc3QpOwor
CisgICAgZmNsb3NlKHNvdXJjZSk7CisgICAgZmNsb3NlKGRlc3QpOworCisgICAgaWYgKGNob3du
KHhhdXRob3JpdHlJblNhbmRib3gsIHNhbmRib3hVc2VyVWlkLCBzYW5kYm94VXNlckdpZCkpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaG93bmluZyAuWGF1dGhvcml0eSAoJXMpIGZhaWxl
ZDogJXMuXG4iLCB4YXV0aG9yaXR5SW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzZXRlbnYoIlhBVVRIT1JJVFkiLCB4YXV0
aG9yaXR5SW5TYW5kYm94LCAxKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0
IHNldCB0aGUgWEFVVEhPUklUWSBlbnZyaW9ubWVudCB2YXJpYWJsZTogJXNcbiIsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIGluaXRTYW5kYm94KCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIHNh
bmRib3ggZGlyZWN0b3J5LiBXZSBvbmx5IG5lZWQgdG8gc3RlcCBpbnRvIGl0LCBzbworICAgIC8v
IHRoZSBleGVjdXRhYmxlIHBlcm1pc3Npb24gaXMgbmVlZGVkIG9ubHkuCisgICAgaWYgKG1rZGly
KHNhbmRib3hEaXJlY3RvcnksIDAxMDApKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1Qp
IHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3JlYXRlIHRoZSBzYW5k
Ym94IGRpcmVjdG9yeTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWNyZWF0ZURldmljZUZpbGVz
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbW91bnRGaWxlU3lzdGVtcygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBIYXJkIGxpbmsgY2FjaGUgYW5kIGZv
bnQgZGlyZWN0b3JpZXMgaW50byB0aGUgc2FuZGJveCBlbnZpcm9ubWVudC4KKyAgICBzdHJ1Y3Qg
cGFzc3dkKiB1c2VySW5mbyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKyAgICBjb25zdCBjaGFyKiBo
b21lID0gdXNlckluZm8tPnB3X2RpcjsKKyAgICBjaGFyIGxvY2FsRGlyW1BhdGhTaXplXTsKKyAg
ICBpZiAoIXN0cmluZ0NvbmNhdChsb2NhbERpciwgaG9tZSwgIi8ubG9jYWwvc2hhcmUvTm9raWEv
IiwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBjYWNoZURpcltQ
YXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoY2FjaGVEaXIsIGhvbWUsICIvLmNhY2hl
L05va2lhLyIsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNoYXIgZm9u
dERpcltQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoZm9udERpciwgaG9tZSwgIi8u
Zm9udGNvbmZpZy8iLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25z
dCBjaGFyKiBsaW5rZWREaXJlY3Rvcmllc1tdID0geworICAgICAgICBjYWNoZURpciwKKyAgICAg
ICAgZm9udERpciwKKyAgICAgICAgbG9jYWxEaXIsCisgICAgICAgICIvZXRjL2ZvbnRzLyIsCisg
ICAgICAgICIvZXRjL3NzbC9jZXJ0cy8iLAorICAgICAgICAiL3Zhci9jYWNoZS9mb250Y29uZmln
LyIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzLyIsCisgICAgICAgIDAKKyAgICB9OworCisg
ICAgY29uc3QgY2hhcioqIGN1cnJlbnRMaW5rZWREaXJlY3RvcnkgPSBsaW5rZWREaXJlY3Rvcmll
czsKKyAgICB3aGlsZSAoKmN1cnJlbnRMaW5rZWREaXJlY3RvcnkpIHsKKyAgICAgICAgY2hhciBs
aW5rZWREaXJlY3RvcnlJblNhbmRib3hbUGF0aFNpemVdOworICAgICAgICBpZiAoIXN0cmluZ0Nv
bmNhdChsaW5rZWREaXJlY3RvcnlJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksICpjdXJyZW50
TGlua2VkRGlyZWN0b3J5LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmICghbGlua0RpcmVjdG9yeShjb25zdF9jYXN0PGNoYXIqPigqY3VycmVudExpbmtl
ZERpcmVjdG9yeSksIGxpbmtlZERpcmVjdG9yeUluU2FuZGJveCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICsrY3VycmVudExpbmtlZERpcmVjdG9yeTsKKyAgICB9CisKKyAg
ICBpZiAoIXNldHVwWGF1dGhvcml0eUZvck5vYm9keVVzZXIoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGNvbGxlY3RSdW5UaW1lRGVwZW5kZW5jaWVzKCk7Cit9CisKK3N0
YXRpYyBib29sIHJlc3RyaWN0Q2FwYWJpbGl0aWVzKCkKK3sKKyAgICAvLyBDYXBhYmlsaXRpZXMg
d2UgbmVlZC4KKyAgICBjYXBfdmFsdWVfdCBjYXBhYmlsdHlMaXN0WzRdOworICAgIGNhcGFiaWx0
eUxpc3RbMF0gPSBDQVBfU0VUVUlEOworICAgIGNhcGFiaWx0eUxpc3RbMV0gPSBDQVBfU0VUR0lE
OworICAgIGNhcGFiaWx0eUxpc3RbMl0gPSBDQVBfU1lTX0FETUlOOyAvLyBDbG9uaW5nIHdpdGgg
Q0xPTkVfTkVXUElEIGZsYWcgbGF0ZXIgd2lsbCBuZWVkIHRoaXMgY2FwYWJpbGl0eS4KKyAgICBj
YXBhYmlsdHlMaXN0WzNdID0gQ0FQX1NZU19DSFJPT1Q7CisKKyAgICAvLyBSZWR1Y2UgY2FwYWJp
bGl0aWVzIHRvIHdoYXQgd2UgbmVlZC4KKyAgICAvLyBBbHRob3VnaCB3ZSBzdGlsbCBoYXZlIHJv
b3QgZXVpZCBhbmQgd2Uga2VlcCByb290IGVxdWl2YWxlbnQgY2FwYWJpbGl0aWVzLAorICAgIC8v
IHdlIHJlbW92ZWQgKD0gZGlkbid0IGFkZCkgQ0FQX1NZU19SRVNTT1VSQ0UgY2FwYWJpbGl0ZXMg
YW5kIHRoaXMgcmVzdWx0ZWQgdGhhdAorICAgIC8vIHRoZSBzZXRybGltaXQgZnVuY3Rpb24gd2l0
aCBSTElNSVRfTk9GSUxFIHdpbGwgYmUgZWZmZWN0aXZlIGxhdGVyLgorICAgIGlmICghc2V0Q2Fw
YWJpbGl0aWVzKGNhcGFiaWx0eUxpc3QsIHNpemVvZihjYXBhYmlsdHlMaXN0KSAvIHNpemVvZihj
YXBhYmlsdHlMaXN0WzBdKSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qg
YWRqdXN0IHByb2Nlc3MgY2FwYWJpbGl0aWVzOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBib29sIG1vdmVUb05ld1BpZE5hbWVzcGFjZSgpCit7CisgICAgLy8gQ0xPTkVfTkVXUElEIGFu
ZCBDTE9ORV9GUyBzaG91bGQgYmUgaW4gdGhhdCBvcmRlci4KKyAgICAvLyBXZSBjYW4ndCBzaGFy
ZSBGUyBhY2Nyb3NzIG5hbWVzcGFjZXMuCisgICAgcGlkX3QgcGlkLCBleHBlY3RlZFBpZDsKKyAg
ICBpbnQgc3RhdHVzOworICAgIHBpZCA9IHN5c2NhbGwoU1lTX2Nsb25lLCBDTE9ORV9ORVdQSUQg
fCBTSUdDSExELCAwLCAwLCAwKTsKKworICAgIHN3aXRjaCAocGlkKSB7CisgICAgY2FzZSAtMToK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9uaW5nIGlzIGZhaWxlZDogJXNcbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIDA6CisgICAgICAg
IC8vIENoaWxkIHNob3VsZCBydW4gd2l0aCBwaWQgbnVtYmVyIDEgaW4gdGhlIG5ldyBuYW1lc3Bh
Y2UuCisgICAgICAgIGlmIChnZXRwaWQoKSAhPSAxKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkbid0IGNyZWF0ZSBhIG5ldyBQSUQgbmFtZXNwYWNlLlxuIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgLy8gV2UgYXJlIHdhaXRpbmcgZm9yIG91ciBjaGlsZCAoV2ViUHJv
Y2VzcykuCisgICAgICAgIC8vIElmIHRoaXMgd2FpdCBpcyBzdWNjZXNzZnVsIGl0IG1lYW5zIHRo
YXQgb3VyIGNoaWxkIGlzIHRlcm1pbmF0ZWQuCisgICAgICAgIGV4cGVjdGVkUGlkID0gd2FpdHBp
ZChwaWQsICZzdGF0dXMsIDApOworICAgICAgICBpZiAoZXhwZWN0ZWRQaWQgIT0gcGlkKSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhaXRwaWQgaXMgZmFpbGVkIHdpdGg6ICVzXG4i
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAg
ICAgICB9CisgICAgICAgIGlmIChXSUZFWElURUQoc3RhdHVzKSkKKyAgICAgICAgICAgIGV4aXQo
V0VYSVRTVEFUVVMoc3RhdHVzKSk7CisgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBydW4oaW50IGFyZ2MsIGNoYXIg
KmNvbnN0IGFyZ3ZbXSkKK3sKKyAgICBzdHJ1Y3QgcGFzc3dkKiB1c2VySW5mbyA9IGdldHB3dWlk
KGdldHVpZCgpKTsKKyAgICBpZiAoIXVzZXJJbmZvKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ291bGRuJ3QgZ2V0IHRoZSBjdXJyZW50IHVzZXI6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0cmluZ0NvbmNhdChz
YW5kYm94RGlyZWN0b3J5LCB1c2VySW5mby0+cHdfZGlyLCAiLy53azItc2FuZGJveCIsIFBhdGhT
aXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3VycmVudGx5IHdlIHVzZSBu
b2JvZHkgdXNlciBhcyB0aGUgc2FuZGJveCB1c2VyIGFuZCBmYWxsYmFjayB0byB0aGUgcmVhbCB1
c2VyCisgICAgLy8gaWYgaXQncyBmYWlsZWQuIChXZSBjb3VsZCBleHRlbmQgdGhpcyBpbiB0aGUg
ZnV0dXJlIHdpdGggYSBzcGVjaWZpYyByZXN0cmljdGVkIHVzZXIuKQorICAgIHN0cnVjdCBwYXNz
d2QqIG5vYm9keVVzZXIgPSBnZXRwd25hbSgibm9ib2R5Iik7CisgICAgaWYgKG5vYm9keVVzZXIp
IHsKKyAgICAgICAgc2FuZGJveFVzZXJVaWQgPSBub2JvZHlVc2VyLT5wd191aWQ7CisgICAgICAg
IHNhbmRib3hVc2VyR2lkID0gbm9ib2R5VXNlci0+cHdfZ2lkOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHNhbmRib3hVc2VyVWlkID0gZ2V0dWlkKCk7CisgICAgICAgIHNhbmRib3hVc2VyR2lkID0g
Z2V0Z2lkKCk7CisgICAgfQorCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgdGhyZWUgcGFyYW1ldGVy
czoKKyAgICAvLyBwYXRoX29mX3RoaXNfYmluYXJ5IHBhdGhfb2ZfdGhlX3dlYnByb2Nlc3Mgc29j
a2V0X3RvX2NvbW11bmljYXRlX3dpdGhfdWlwcm9jZXNzCisgICAgaWYgKGFyZ2MgIT0gMykgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlN0YXJ0aW5nIFNhbmRib3hQcm9jZXNzIHJlcXVpcmVz
IDMgcGFyYW1ldGVycyFcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gU2FuZGJveFByb2Nlc3Mgc2hvdWxkIGJlIHJ1biB3aXRoIHN1aWQgZmxhZyAuLi4KKyAgICBp
ZiAoZ2V0ZXVpZCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGhlIHNhbmRib3ggaXMg
bm90IHNldGV1aWQgcm9vdC5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gLi4uIGJ1dCBub3QgYXMgcm9vdCAobm90IHdpdGggc3VkbykuCisgICAgaWYgKCFnZXR1
aWQoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBzYW5kYm94IGlzIG5vdCBkZXNp
Z25lZCB0byBiZSBydW4gYnkgcm9vdC5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFpbml0U2FuZGJveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIXJlc3RyaWN0Q2FwYWJpbGl0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIFdlIG1vdmUgb3Vyc2VsZiBhbmQgb3VyIGNoaWxkcmVuIGludG8gYSBuZXcgUElEIG5h
bWVzcGFjZSwKKyAgICAvLyB3aGVyZSBwcm9jZXNzIElEcyBzdGFydCBmcm9tIDAgYWdhaW4uCisg
ICAgaWYgKCFtb3ZlVG9OZXdQaWROYW1lc3BhY2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gU3RhcnRpbmcgYSBoZWxwZXIgd2hhdCB3aWxsIHdhaXRpbmcgZm9yIHRoZSAiY2hy
b290bWUiIG1lc3NhZ2UgZnJvbSBXZWJQcm9jZXNzLgorICAgIGlmICghcHJlcGFyZUFuZFN0YXJ0
Q2hyb290SGVscGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIGRvbid0
IG5lZWQgYW55IHNwZWNpYWwgcHJpdmlsZWdlcyBhbnltb3JlLgorICAgIGlmICghZHJvcFByaXZp
bGVnZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2FuaXR5IGNoZWNrOiBp
ZiBvdXIgZWZmZWN0aXZlIG9yIHJlYWwgdWlkL2dpZCBpcyBzdGlsbCAwIChyb290KSBvcgorICAg
IC8vIHdlIGNhbiBzZXQgYW55IG9mIHRoZW0gdG8gMCwgdGhlbiB0aGUgZHJvcHBpbmcgb2YgcHJp
dmlsZWdlcyBpcyBmYWlsZWQuCisgICAgLy8gV2UgZW5zdXJlIGhlcmUgdGhhdCB3ZSBjYW5ub3Qg
c2V0IHJvb3QgaWQgYWZ0ZXIgaGVyZS4KKyAgICBpZiAoIWdldGV1aWQoKSB8fCAhZ2V0ZWdpZCgp
IHx8ICFzZXR1aWQoMCkgfHwgIXNldGdpZCgwKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkRyb3BwaW5nIHByaXZpbGVnZXMgZmFpbGVkIVxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgV2ViUHJvY2Vzcy4KKyAgICBleGVjbChhcmd2WzFd
LCBhcmd2WzFdLCBhcmd2WzJdLCByZWludGVycHJldF9jYXN0PGNoYXIqPigwKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10pCit7
CisgICAgcmV0dXJuIHJ1bihhcmdjLCBhcmd2KSA/IDAgOiAxOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVu
dExpbnV4LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2Fu
ZGJveEVudmlyb25tZW50TGludXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wNjA3N2UzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4
L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU2FuZGJveEVudmlyb25tZW50TGludXhfaAor
I2RlZmluZSBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisKKyNpZm5kZWYgQ0xPTkVfTkVXUElE
CisjZGVmaW5lIENMT05FX05FV1BJRCAgMHgyMDAwMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgX0dO
VV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgorCisjZGVmaW5lIFNCWF9EICJT
QlhfRCIKKyNkZWZpbmUgU0JYX0hFTFBFUl9QSUQgIlNCWF9IRUxQRVJfUElEIgorCisjZGVmaW5l
IE1TR19DSFJPT1RNRSAnQycKKyNkZWZpbmUgTVNHX0NIUk9PVEVEICdPJworCisjZW5kaWYgLy8g
U2FuZGJveEVudmlyb25tZW50TGludXhfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0ZTVmZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdP
cGVyYXRpb25zLmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92
YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgIlN0cmluZ09wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8
c3RyaW5nLmg+CisKK2Jvb2wgc3RyaW5nQ29weShjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hh
ciogc291cmNlLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHNvdXJj
ZSk7CisgICAgaWYgKGxlbmd0aCA+IG1heFNpemUgLSAxKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRXJyb3I6IGJ1ZmZlciBpcyB0b28gc21hbGw6ICVkICVzLlxuIiwgbWF4U2l6ZSwgc291
cmNlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVzdGluYXRp
b24sIHNvdXJjZSwgbGVuZ3RoICsgMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3Ry
aW5nQ29weShjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlLCBjb25zdCBpbnQg
bGVuZ3RoLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpZiAobGVuZ3RoID4gbWF4U2l6ZSAtIDEgfHwg
bGVuZ3RoID4gc3RybGVuKHNvdXJjZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
cjogYnVmZmVyIGlzIHRvbyBzbWFsbDogJWQgJXMuXG4iLCBtYXhTaXplLCBzb3VyY2UpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNl
LCBsZW5ndGgpOworICAgIGRlc3RpbmF0aW9uW2xlbmd0aF0gPSAnXDAnOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIHN0cmluZ0NvbmNhdChjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hh
ciogc291cmNlMSwgY29uc3QgY2hhciogc291cmNlMiwgaW50IG1heFNpemUpCit7CisgICAgaW50
IGxlbmd0aDEgPSBzdHJsZW4oc291cmNlMSk7CisgICAgaW50IGxlbmd0aDIgPSBzdHJsZW4oc291
cmNlMik7CisgICAgaWYgKGxlbmd0aDEgKyBsZW5ndGgyID4gbWF4U2l6ZSAtIDEpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogYnVmZmVyIGlzIHRvbyBzbWFsbDogJWQgJWQgJXMg
JXMuXG4iLCBtYXhTaXplLCBsZW5ndGgxICsgbGVuZ3RoMiwgc291cmNlMSwgc291cmNlMik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3Vy
Y2UxLCBsZW5ndGgxKTsKKyAgICBtZW1jcHkoZGVzdGluYXRpb24gKyBsZW5ndGgxLCBzb3VyY2Uy
LCBsZW5ndGgyICsgMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3RyaW5nQ29uY2F0
KGNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBjaGFyKiBzb3VyY2UxLCBjb25zdCBjaGFyKiBzb3Vy
Y2UyLCBjb25zdCBjaGFyKiBzb3VyY2UzLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3Ro
MSA9IHN0cmxlbihzb3VyY2UxKTsKKyAgICBpbnQgbGVuZ3RoMiA9IHN0cmxlbihzb3VyY2UyKTsK
KyAgICBpbnQgbGVuZ3RoMyA9IHN0cmxlbihzb3VyY2UzKTsKKyAgICBpZiAobGVuZ3RoMSArIGxl
bmd0aDIgKyBsZW5ndGgzID4gbWF4U2l6ZSAtIDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJFcnJvcjogYnVmZmVyIGlzIHRvbyBzbWFsbDogJWQgJWQgJXMgJXMgJXMuXG4iLCBtYXhTaXpl
LCBsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDMsIHNvdXJjZTEsIHNvdXJjZTIsIHNvdXJjZTMp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwg
c291cmNlMSwgbGVuZ3RoMSk7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSwgc291
cmNlMiwgbGVuZ3RoMik7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSArIGxlbmd0
aDIsIHNvdXJjZTMsIGxlbmd0aDMpOworICAgIGRlc3RpbmF0aW9uW2xlbmd0aDEgKyBsZW5ndGgy
ICsgbGVuZ3RoM10gPSAnXDAnOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHN0cmluZ0Fw
cGVuZChjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlLCBpbnQgbWF4U2l6ZSkK
K3sKKyAgICBpbnQgc291cmNlTGVuZ3RoID0gc3RybGVuKHNvdXJjZSk7CisgICAgaW50IGRlc3Rp
bmF0aW9uTGVuZ3RoID0gc3RybGVuKGRlc3RpbmF0aW9uKTsKKyAgICBpZiAoc291cmNlTGVuZ3Ro
ICsgZGVzdGluYXRpb25MZW5ndGggPiBtYXhTaXplIC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yOiBidWZmZXIgaXMgdG9vIHNtYWxsOiAlZCAlcy5cbiIsIG1heFNpemUsIHNv
dXJjZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0
aW9uICsgZGVzdGluYXRpb25MZW5ndGgsIHNvdXJjZSwgc291cmNlTGVuZ3RoICsgMSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgv
U2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42NTgzNzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuaApAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3pl
Z2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTdHJpbmdPcGVyYXRpb25z
X2gKKyNkZWZpbmUgU3RyaW5nT3BlcmF0aW9uc19oCisKKy8vIFNlY3VyZSBzdHJpbmcgb3BlcmF0
aW9ucy4KK2Jvb2wgc3RyaW5nQ29weShjaGFyKiwgY29uc3QgY2hhciosIGludCk7Citib29sIHN0
cmluZ0NvcHkoY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBpbnQsIGludCk7Citib29sIHN0cmlu
Z0NvbmNhdChjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBpbnQpOworYm9vbCBzdHJp
bmdDb25jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGlu
dCk7Citib29sIHN0cmluZ0FwcGVuZChjaGFyKiwgY29uc3QgY2hhciosIGludCk7CisKKyNlbmRp
ZiAvLyBTdHJpbmdPcGVyYXRpb25zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4IDBiNmVlMWIu
LjVjMjE5YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9x
dC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcApAQCAtNjIsNiArNjIsMTAgQEAKICNpbmNs
dWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgp
CisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNlbmRpZgorCiAjaWYgT1MoREFSV0lOKQog
I2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+CiAjaW5jbHVkZSA8c2VydmVycy9ib290c3RyYXAu
aD4KQEAgLTE2NywzNyArMTcxLDQ5IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9j
ZXNzKCkKICAgICBjb21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKICNl
bmRpZgogCi0gICAgUVByb2Nlc3MqIHdlYlByb2Nlc3MgPSBuZXcgUXRXZWJQcm9jZXNzKCk7Ci0g
ICAgd2ViUHJvY2Vzcy0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRD
aGFubmVscyk7Ci0gICAgd2ViUHJvY2Vzcy0+c3RhcnQoY29tbWFuZExpbmUpOworICAgIFFQcm9j
ZXNzKiB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXIg
PSBuZXcgUXRXZWJQcm9jZXNzKCk7CisgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c2V0UHJv
Y2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFubmVscyk7CisKKyNpZiBFTkFC
TEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIGlmIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5
cGUgPT0gV2ViUHJvY2VzcykgeworICAgICAgICBRU3RyaW5nIHNhbmRib3hDb21tYW5kTGluZSA9
IFFMYXRpbjFTdHJpbmcoIiUxICUyICUzIik7CisgICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9
IHNhbmRib3hDb21tYW5kTGluZS5hcmcoUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQ
YXRoKCkgKyBRTGF0aW4xU3RyaW5nKCIvU1VJRFNhbmRib3hIZWxwZXIiKSk7CisgICAgICAgIHNh
bmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoZXhlY3V0YWJsZVBhdGhP
ZldlYlByb2Nlc3MoKSk7CisgICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21t
YW5kTGluZS5hcmcoc29ja2V0c1swXSk7CisKKyAgICAgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBl
ci0+c3RhcnQoc2FuZGJveENvbW1hbmRMaW5lKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2ViUHJv
Y2Vzc09yU1VJREhlbHBlci0+c3RhcnQoY29tbWFuZExpbmUpOworI2Vsc2UKKyAgICB3ZWJQcm9j
ZXNzT3JTVUlESGVscGVyLT5zdGFydChjb21tYW5kTGluZSk7CisjZW5kaWYKIAogI2lmIE9TKFVO
SVgpICYmICFPUyhEQVJXSU4pCiAgICAgLy8gRG9uJ3QgZXhwb3NlIHRoZSB3ZWIgc29ja2V0IHRv
IHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJvY2Vzc2VzCiAgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNb
MF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKSB7CiAgICAgICAgIGlmIChlcnJubyAhPSBF
SU5UUikgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBk
ZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzT3JTVUlESGVs
cGVyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAg
ICBpZiAoIXdlYlByb2Nlc3MtPndhaXRGb3JTdGFydGVkKCkpIHsKKyAgICBpZiAoIXdlYlByb2Nl
c3NPclNVSURIZWxwZXItPndhaXRGb3JTdGFydGVkKCkpIHsKICAgICAgICAgcURlYnVnKCkgPDwg
IkZhaWxlZCB0byBzdGFydCIgPDwgY29tbWFuZExpbmU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogI2lmIE9TKERBUldJTikKICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFj
aF90YXNrX3NlbGYoKSwgY29ubmVjdG9yKTsKICAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1h
Y2hfdGFza19zZWxmKCksIGNvbm5lY3RvciwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsK
ICNlbmRpZgotICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgZGVsZXRlIHdlYlBy
b2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KICNpZiBPUyhVTklY
KQotICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgd2ViUHJvY2Vzcy0+cGlkKCksIDEwKTsK
KyAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnBp
ZCgpLCAxMCk7CiAjZW5kaWYKLQotICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgm
V2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMs
IHdlYlByb2Nlc3MsIGNvbm5lY3RvcikpOworICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2go
YmluZCgmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3Ms
IHRoaXMsIHdlYlByb2Nlc3NPclNVSURIZWxwZXIsIGNvbm5lY3RvcikpOwogfQogCiB2b2lkIFBy
b2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDgwY2Iy
ZmIuLjY1NTJiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC0xNSw2ICsxNSw3IEBAIElOQ0xVREVQQVRI
ICs9IFwKICAgICAkJFNPVVJDRV9ESVIvUGxhdGZvcm0vQ29yZUlQQyBcCiAgICAgJCRTT1VSQ0Vf
RElSL1BsYXRmb3JtL3F0IFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkIFwKKyAgICAkJFNPVVJD
RV9ESVIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzIFwKICAgICAkJFNPVVJDRV9ESVIvU2hh
cmVkL0FQSS9jIFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mg
XAogICAgICQkU09VUkNFX0RJUi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQgXApAQCAtNjIsNyArNjMs
NyBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFn
ZSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9xdCBcCi0gICAgJCRTT1VSQ0VfRElS
L1BsdWdpblByb2Nlc3MKKyAgICAkJFNPVVJDRV9ESVIvUGx1Z2luUHJvY2VzcyBcCiAKICMgVGhl
IFdlYktpdDIgUXQgQVBJcyBkZXBlbmQgb24gcXdlYmtpdGdsb2JhbC5oLCB3aGljaCBsaXZlcyBp
biBXZWJLaXQKIElOQ0xVREVQQVRIICs9ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktp
dC9xdC9BcGkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8KaW5kZXggZmQ3NjZjMS4uYWRiNjA0OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy5wcm8KQEAgLTExLDYgKzExLDEwIEBAIERFU1RESVIgPSAkJHtST09UX0JVSUxE
X0RJUn0vYmluCiAKIFNPVVJDRVMgKz0gcXQvTWFpblF0LmNwcAogCitJTkNMVURFUEFUSCA9IFwK
KyAgICAkJFBXRC9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvIFwKKyAgICAkJElOQ0xVREVQ
QVRICisKIFFUICs9IG5ldHdvcmsgd2Via2l0d2lkZ2V0cwogbWFjeDogUVQgKz0geG1sCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCmlu
ZGV4IDE4ZjMwMzk0Li5hZmE0YjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlIDxR
U3RyaW5nTGlzdD4KICNpbmNsdWRlIDxRVXJsPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5o
PgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNjEsNyArNjMsMTUgQEAg
ZXh0ZXJuICJDIiBrZXJuX3JldHVybl90IGJvb3RzdHJhcF9sb29rX3VwMihtYWNoX3BvcnRfdCwg
Y29uc3QgbmFtZV90LCBtYWNoX3BvcnQKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKy8qCisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkKKyNkZWZpbmUgU0JYX0QgIlNC
WF9EIgorI2RlZmluZSBTQlhfSEVMUEVSX1BJRCAiU0JYX0hFTFBFUl9QSUQiCiAKKyNkZWZpbmUg
TVNHX0NIUk9PVE1FICdDJworI2RlZmluZSBNU0dfQ0hST09URUQgJ08nCisjZW5kaWYqLworI2lu
Y2x1ZGUgIlNhbmRib3hFbnZpcm9ubWVudExpbnV4LmgiCiBuYW1lc3BhY2UgV2ViS2l0IHsKICNp
Zm5kZWYgTkRFQlVHCiAjaWYgT1MoV0lORE9XUykKQEAgLTE0MiwxOCArMTUyLDc3IEBAIHN0YXRp
YyB2b2lkIGluaXRpYWxpemVQcm94eSgpCiAgICAgUU5ldHdvcmtQcm94eUZhY3Rvcnk6OnNldFVz
ZVN5c3RlbUNvbmZpZ3VyYXRpb24odHJ1ZSk7CiB9CiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9Y
X0xJTlVYKQorcGlkX3QgY2hyb290TWUoKQoreworICAgIGxvbmcgaW50IGZkID0gLTE7CisgICAg
Y2hhciogc2FuZGJveFNvY2tldERlc2NyaXB0b3I7CisgICAgY2hhciogaGVscGVyUGlkOworICAg
IGNoYXIgc2FuZGJveE1lTXNnID0gTVNHX0NIUk9PVE1FOworICAgIHNzaXplX3QgY250OworICAg
IHBpZF90IGhlbHBlciA9IC0xOworCisgICAgLy8gR2V0IHRoZSBmaWxlIGRlc2NyaXB0b3Igb2Yg
dGhlIHNvY2tldHBhaXIuCisgICAgc2FuZGJveFNvY2tldERlc2NyaXB0b3IgPSBnZXRlbnYoU0JY
X0QpOworICAgIGlmICghc2FuZGJveFNvY2tldERlc2NyaXB0b3IpCisgICAgICAgIHJldHVybiAt
MTsKKworICAgIGVycm5vID0gMDsKKyAgICBmZCA9IHN0cnRvbChzYW5kYm94U29ja2V0RGVzY3Jp
cHRvciwgKGNoYXIgKiopIDAsIDEwKTsKKyAgICBpZiAoZXJybm8gfHwgKGZkID09IC0xKSkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisgICAgLy8gR2V0IHRoZSBQSUQgb2YgdGhlIHNldHVpZCBoZWxw
ZXIuCisgICAgaGVscGVyUGlkID0gZ2V0ZW52KFNCWF9IRUxQRVJfUElEKTsKKworICAgIC8vIElm
IG5vIFBJRCBpcyBhdmFpbGFibGUsIHRoZSBkZWZhdWx0IG9mIC0xIHdpbGwgZG8uCisgICAgaWYg
KGhlbHBlclBpZCkgeworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIGhlbHBlciA9IHN0cnRv
bChoZWxwZXJQaWQsIChjaGFyICoqKSAwLCAxMCk7CisgICAgICAgIGlmIChlcnJubyB8fCAoaGVs
cGVyID09IC0xKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgLy8gU2VuZCB0
aGUgY2hyb290TWUgbWVzc2FnZSB0byB0aGUgaGVscGVyLgorICAgIGNudCA9IHdyaXRlKGZkLCAm
c2FuZGJveE1lTXNnLCAxKTsKKyAgICBpZiAoY250ICE9IDEpIHsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDaHJvb3RNZSBtc2cgZmFpbGVkIHRvIHdyaXRlOiAlcy5cbiIsIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgLy8gUmVhZCB0aGUgYWNrbm93
bGVkZ2VtZW50IG1lc3NhZ2UgZnJvbSB0aGUgaGVscGVyLgorICAgIGNudCA9IHJlYWQoZmQsICZz
YW5kYm94TWVNc2csIDEpOworICAgIGlmICgoY250ICE9IDEpIHx8IChzYW5kYm94TWVNc2cgIT0g
TVNHX0NIUk9PVEVEKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHJlYWQg
dGhlIGNvbmZpcm1hdGlvbiBtZXNzYWdlLlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9
CisgICAgY2xvc2UoZmQpOworICAgIC8vIFdhaXQgZm9yIHRoZSBoZWxwZXIgcHJvY2Vzcy4KKyAg
ICBpbnQgd2FpdGVkUGlkID0gd2FpdHBpZChoZWxwZXIsIDAsIDApOworICAgIGlmICh3YWl0ZWRQ
aWQgIT0gLTEgJiYgKChoZWxwZXIgPT0gLTEpIHx8ICh3YWl0ZWRQaWQgPT0gaGVscGVyKSkpCisg
ICAgICAgIHJldHVybiB3YWl0ZWRQaWQ7CisgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCB3
YWl0IGZvciB0aGUgaGVscGVyIHByb2Nlc3M6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAg
IHJldHVybiAtMTsKK30KKyNlbmRpZgorCiBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFp
blF0KFFHdWlBcHBsaWNhdGlvbiogYXBwKQogewotICAgIGluaXRpYWxpemVQcm94eSgpOworI2lm
IEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisgICAgcGlkX3QgaGVscGVyOworICAgIGhlbHBl
ciA9IGNocm9vdE1lKCk7CiAKKyAgICBpZiAoaGVscGVyID09IC0xKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQXNraW5nIGZvciBjaHJvb3QgZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVy
biAtMTsKKyAgICB9CisjZW5kaWYKKyAgICBpbml0aWFsaXplUHJveHkoKTsKICAgICBKU0M6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAg
ICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7Ci0gICAgCisKICNpZiBVU0UoUVRL
SVQpCiAgICAgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VGb3JXSzIoKTsKICNlbmRpZgotCiAg
ICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uLgogICAgIGlmIChhcHAtPmFyZ3VtZW50cygpLnNp
emUoKSA8PSAxKSB7CiAgICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvcjogd3JvbmcgbnVtYmVyIG9m
IGFyZ3VtZW50cy4iOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1
cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4
IGIzNGFlYzcuLmIxYTM0MjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9G
ZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG0KQEAgLTEyMCw2ICsxMjAsNyBAQCBteSAoCiAgICAgJHNoYXJlZFdvcmtlcnNTdXBwb3J0LAog
ICAgICRzcWxEYXRhYmFzZVN1cHBvcnQsCiAgICAgJHN0eWxlU2NvcGVkU3VwcG9ydCwKKyAgICAk
c3VpZExpbnV4U2FuZGJveCwKICAgICAkc3ZnRE9NT2JqQ0JpbmRpbmdzU3VwcG9ydCwKICAgICAk
c3ZnRm9udHNTdXBwb3J0LAogICAgICRzdmdTdXBwb3J0LApAQCAtMzc1LDYgKzM3Niw5IEBAIG15
IEBmZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAic3R5bGUtc2NvcGVkIiwgZGVzYyA9PiAi
VG9nZ2xlIFN0eWxlIFNjb3BlZCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NU
WUxFX1NDT1BFRCIsIGRlZmF1bHQgPT4gaXNCbGFja0JlcnJ5KCksIHZhbHVlID0+IFwkc3R5bGVT
Y29wZWRTdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAic3VpZC1saW51eC1zYW5kYm94Iiwg
ZGVzYyA9PiAiVG9nZ2xlIHN1aWQgc2FuZGJveCBmb3IgbGludXgiLAorICAgICAgZGVmaW5lID0+
ICJFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHN1
aWRMaW51eFNhbmRib3ggfSwKKwogICAgIHsgb3B0aW9uID0+ICJzdmciLCBkZXNjID0+ICJUb2dn
bGUgU1ZHIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1ZHIiwgZGVmYXVsdCA9
PiAxLCB2YWx1ZSA9PiBcJHN2Z1N1cHBvcnQgfSwKIAotLSAKMS43LjkuNQoK
</data>
<flag name="commit-queue"
          id="186874"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172532</attachid>
            <date>2012-11-06 02:37:00 -0800</date>
            <delta_ts>2012-11-14 06:43:51 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-11.3.patch</filename>
            <type>text/plain</type>
            <size>50474</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBjODZlZWMwNzAxMGM5NWZkZjM2ZjFmMDRlYjc2ZjlmMGU0MzJhYmNiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogVHVl
LCA2IE5vdiAyMDEyIDExOjMzOjQ3ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gZmVsdG9sdCAxMS4z
CgotLS0KIFNvdXJjZS9RdFdlYktpdC5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgNSArCiAuLi4vV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZyB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybyAgICAgICAg
ICAgICAgICAgIHwgICAyNyArCiAuLi4vU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50
TGludXguY3BwICAgICB8ICA3NTEgKysrKysrKysrKysrKysrKysrKysKIC4uLi9saW51eC9TYW5k
Ym94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIHwgICA0MCArKwogLi4uL2xpbnV4
L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuY3BwICAgICAgfCAgIDg4ICsrKwogLi4u
L1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmggfCAgIDMyICsK
IC4uLi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwICAgIHwgICAz
NiArLQogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAzICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybyAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDQgKwogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFp
blF0LmNwcCAgfCAgIDcxICstCiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG0gICAgICAgICAgICB8ICAgIDQgKwogMTIgZmlsZXMgY2hhbmdlZCwgMTA0OSBpbnNlcnRpb25z
KCspLCAxNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9T
YW5kYm94UHJvY2Vzcy5wcm8KIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNz
L1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nl
c3MvU3RyaW5nT3BlcmF0aW9ucy5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1F0V2ViS2l0LnBybyBi
L1NvdXJjZS9RdFdlYktpdC5wcm8KaW5kZXggNTlmOWEwZC4uYjA5ZDFkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1F0V2ViS2l0LnBybworKysgYi9Tb3VyY2UvUXRXZWJLaXQucHJvCkBAIC0xNyw2ICsx
NywxMSBAQCBidWlsZD8od2Via2l0MikgewogICAgICAgICBwbHVnaW5wcm9jZXNzLmZpbGUgPSBX
ZWJLaXQyL1BsdWdpblByb2Nlc3MucHJvCiAgICAgICAgIFNVQkRJUlMgKz0gcGx1Z2lucHJvY2Vz
cwogICAgIH0KKworICAgIGVuYWJsZT8oU1VJRF9TQU5EQk9YX0xJTlVYKSB7CisgICAgICAgIHNh
bmRib3hwcm9jZXNzLmZpbGUgPSBXZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybworICAgICAgICBT
VUJESVJTICs9IHNhbmRib3hwcm9jZXNzCisgICAgfQogfQogCiBkZWNsYXJhdGl2ZS5maWxlID0g
V2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xhcmF0aXZlLnBybwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2Uv
V2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCBhNGY4
Y2EwLi4yYmRlNmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9G
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMTMzLDYgKzEzMyw3IEBAIEVOQUJMRV9RVU9U
QSA9IDsKIEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSA9IEVOQUJMRV9SRVFVRVNUX0FO
SU1BVElPTl9GUkFNRTsKIEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZID0gOwogRU5BQkxF
X1NDUklQVEVEX1NQRUVDSCA9IDsKK0VOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVggPSA7CiBFTkFC
TEVfU0hBRE9XX0RPTSA9IDsKIEVOQUJMRV9TSEFSRURfV09SS0VSUyA9IEVOQUJMRV9TSEFSRURf
V09SS0VSUzsKIEVOQUJMRV9TUUxfREFUQUJBU0UgPSBFTkFCTEVfU1FMX0RBVEFCQVNFOwpAQCAt
MTU3LDQgKzE1OCw0IEBAIEVOQUJMRV9XT1JLRVJTID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVf
WEhSX1RJTUVPVVQgPSBFTkFCTEVfWEhSX1RJTUVPVVQ7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9Y
U0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxF
X0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQU5JTUFUSU9OX0FQSSkgJChFTkFCTEVf
QkxPQikgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVO
QUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRB
VElPTikgJChFTkFCTEVfQ1NTX0VYQ0xVU0lPTlMpICQoRU5BQkxFX0NTU19GSUxURVJTKSAkKEVO
QUJMRV9DU1NfSElFUkFSQ0hJRVMpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChF
TkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJM
RV9DU1NfU0hBREVSUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfU1RJ
Q0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9DU1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9DU1MzX0NPTkRJ
VElPTkFMX1JVTEVTKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVf
SEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VM
RU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxF
TUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ESUFMT0dfRUxFTUVO
VCkgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVfRFJBR0dBQkxFX1JFR0lPTikg
JChFTkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9GSUxFX1NZU1RFTSkgJChFTkFCTEVf
RklMVEVSUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5B
QkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElO
RykgJChFTkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5B
QkxFX0lGUkFNRV9TRUFNTEVTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVf
SU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9U
WVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUUpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJ
UFRfREVCVUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJM
RV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykg
JChFTkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFC
TEVfTElOS19QUkVSRU5ERVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNF
KSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVO
QUJMRV9NSFRNTCkgJChFTkFCTEVfTUlDUk9EQVRBKSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZF
UlMpICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJ
T05TKSAkKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QREZLSVRfUExVR0lO
KSAkKEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQo
RU5BQkxFX1NDUklQVEVEX1NQRUVDSCkgJChFTkFCTEVfU0hBRE9XX0RPTSkgJChFTkFCTEVfU0hB
UkVEX1dPUktFUlMpICQoRU5BQkxFX1NRTF9EQVRBQkFTRSkgJChFTkFCTEVfU1RZTEVfU0NPUEVE
KSAkKEVOQUJMRV9TVUJQSVhFTF9MQVlPVVQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RP
TV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJ
WklORykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lD
T05fTE9BRElORykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1ZJREVPKSAkKEVO
QUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChF
TkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dPUktFUlMp
ICQoRU5BQkxFX1hIUl9USU1FT1VUKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9
ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAk
KEVOQUJMRV9BTklNQVRJT05fQVBJKSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01F
U1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9C
UkVBSykgJChFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9OKSAkKEVOQUJMRV9DU1NfRVhDTFVT
SU9OUykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NTU19ISUVSQVJDSElFUykgJChF
TkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElP
TikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9D
U1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NT
U19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNfQ09ORElUSU9OQUxfUlVMRVMpICQoRU5BQkxFX0NT
UzNfVEVYVCkgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9B
UkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFO
U0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJ
RU5UQVRJT04pICQoRU5BQkxFX0RJQUxPR19FTEVNRU5UKSAkKEVOQUJMRV9ESVJFQ1RPUllfVVBM
T0FEKSAkKEVOQUJMRV9EUkFHR0FCTEVfUkVHSU9OKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEp
ICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NS
RUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxF
X0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5W
QVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVO
QUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lO
UFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVH
QUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAk
KEVOQUJMRV9MRUdBQ1lfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElP
KSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFC
TEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJ
Q1MpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNS
T0RBVEEpICQoRU5BQkxFX01VVEFUSU9OX09CU0VSVkVSUykgJChFTkFCTEVfTkFWSUdBVE9SX0NP
TlRFTlRfVVRJTFMpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJ
TElUWV9BUEkpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BST0dSRVNTX0VMRU1F
TlQpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJChF
TkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNIKSAk
KEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FM
X0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5BQkxFX1NVQlBJWEVMX0xBWU9V
VCkgJChFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NW
R19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URVhUX0FV
VE9TSVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9UT1VD
SF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9WSURFTykg
JChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8p
ICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XT1JL
RVJTKSAkKEVOQUJMRV9YSFJfVElNRU9VVCkgJChFTkFCTEVfWFNMVCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94
UHJvY2Vzcy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjMGUyZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwpAQCAt
MCwwICsxLDI3IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVjdCBmaWxlIGZvciB0aGUgV2ViS2l0
MiBzYW5kYm94IHByb2Nlc3MgYmluYXJ5CisjCisjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBm
b3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RFTVBM
QVRFID0gYXBwCisKK1RBUkdFVCA9IFNVSURTYW5kYm94SGVscGVyCitERVNURElSID0gJCR7Uk9P
VF9CVUlMRF9ESVJ9L2JpbgorCitDT05GSUcgKz0gY29uc29sZQorQ09ORklHIC09IHF0CisKK1NP
VVJDRVMgKz0gU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExp
bnV4LmNwcCBcCisgICAgICAgICAgIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdP
cGVyYXRpb25zLmNwcAorSEVBREVSUyArPSBTaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2Fu
ZGJveEVudmlyb25tZW50TGludXguaCBcCisgICAgICAgICAgIFNoYXJlZC9saW51eC9TYW5kYm94
UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmgKKworSU5TVEFMTFMgKz0gdGFyZ2V0CitMSUJTICs9
IC1sY2FwIC1sZGwKKworaXNFbXB0eShJTlNUQUxMX0JJTlMpIHsKKyAgICB0YXJnZXQucGF0aCA9
ICQkW1FUX0lOU1RBTExfQklOU10KK30gZWxzZSB7CisgICAgdGFyZ2V0LnBhdGggPSAkJElOU1RB
TExfQklOUworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRi
b3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkNjBhZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52
aXJvbm1lbnRMaW51eC5jcHAKQEAgLTAsMCArMSw3NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZW5hdGEg
SG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiU2FuZGJveEVudmlyb25tZW50TGludXguaCIKKworI2luY2x1ZGUgIlN0cmluZ09w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2lu
Y2x1ZGUgPGVyci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNp
bmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxsaW5rLmg+Cisj
aW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+
CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5j
bHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lz
L3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8
dXRpbWUuaD4KKworZW51bSB7IFBhdGhTaXplID0gNTEyIH07CitjaGFyIHNhbmRib3hEaXJlY3Rv
cnlbUGF0aFNpemVdOwordWlkX3Qgc2FuZGJveFVzZXJVaWQ7Cit1aWRfdCBzYW5kYm94VXNlckdp
ZDsKKworc3RhdGljIHZvaWQgbGF1bmNoQ2hyb290SGVscGVyKGludCBzb2NrZXRQYWlyW10pCit7
CisgICAgc3RydWN0IHJsaW1pdCBub0ZpbGUgPSB7IDAsIDAgfTsKKyAgICAvLyBXZSBuZWVkIHRv
IHJlc3RyaWN0IHRoZSByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIG91ciBwcm9jZXNzIHRvIGF2b2lk
IG9wZW5pbmcKKyAgICAvLyBhIGZpbGUgYnkgbWlzdGFrZS4gSG93ZXZlciwgQ0FQX1NZU19SRVNT
T1VSQ0UgY2FwYWJpbGl0eSBzaG91bGQgYmUgZHJvcHBlZAorICAgIC8vIG90aGVyd2lzZSBpdCB3
b24ndCB3b3JrLgorICAgIGlmIChzZXRybGltaXQoUkxJTUlUX05PRklMRSwgJm5vRmlsZSkpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJIZWxwZXIgY291bGRuJ3Qgc2V0IHRoZSByZXNvdXJj
ZWxpbWl0OiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoY2xvc2Uoc29ja2V0UGFpclsxXSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJDb3VsZG4ndCBjbG9zZSBzb2NrZXQgJWQ6ICVzXG4iLCBzb2NrZXRQYWlyWzFdLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZXhwZWN0
IGEgJ0MnIChDaHJvb3RNZSkgbWVzc2FnZSBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgIGNoYXIg
bWVzc2FnZTsKKyAgICBpZiAocmVhZChzb2NrZXRQYWlyWzBdLCAmbWVzc2FnZSwgMSkgIT0gMSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHJlYWQgdGhlIHByb3BlciBjaHJv
b3RtZSBtc2c6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG1lc3NhZ2UgIT0gTVNHX0NIUk9PVE1FKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiV3JvbmcgbWVzc2FnZSByZWNpZXZlZC5cbiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc3RydWN0IHN0YXQgc2FuZGJveERpcmVjdG9yeUluZm87CisgICAgaWYgKGxz
dGF0KHNhbmRib3hEaXJlY3RvcnksICZzYW5kYm94RGlyZWN0b3J5SW5mbykgJiYgU19JU0RJUihz
YW5kYm94RGlyZWN0b3J5SW5mby5zdF9tb2RlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlNhbmRib3ggZGlyZWN0b3J5ICglcykgZG9lcyBub3QgZXhpc3QhXG4iLCBzYW5kYm94RGlyZWN0
b3J5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjaHJvb3Qoc2FuZGJveERp
cmVjdG9yeSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJvb3RpbmcgZmFpbGVkOiAl
cy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBDaHJvb3Qgb25seSBjaGFuZ2VzIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgY2FsbGluZyBw
cm9jZXNzIGJ1dCBkb2Vzbid0IGNoYW5nZQorICAgIC8vIHRoZSBjdXJyZW50IHdvcmtpbmcgZGly
ZWN0b3J5LiBUaGVyZWZvcmUsIGlmIHdlIGRvbid0IGRvIGl0IG1hbnVhbGx5IGEgbWFsaWNpb3Vz
IHVzZXIKKyAgICAvLyBjb3VsZCBicmVhayBvdXQgdGhlIGphaWwgd2l0aCByZWxhdGl2ZSBwYXRo
cy4KKyAgICBpZiAoY2hkaXIoIi8iKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxk
bid0IGNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gLy46ICVzXG4iLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2VuZGluZyBhY2tub3ds
ZWRnZW1lbnQgdG8gdGhlIFdlYlByb2Nlc3MgdGhhdCB0aGUgc2FuZGJveGluZyB3YXMgc3VjY2Vz
c2Z1bGwuCisgICAgbWVzc2FnZSA9IE1TR19DSFJPT1RFRDsKKyAgICBpZiAod3JpdGUoc29ja2V0
UGFpclswXSwgJm1lc3NhZ2UsIDEpICE9IDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
b3VsZG4ndCBzZW5kIGFja25vd2xlZGdlbWVudCB0byBXZWJQcm9jZXNzOiAlcy5cbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZXhpdChFWElUX1NVQ0NF
U1MpOworfQorCitzdGF0aWMgYm9vbCBzZXRFbnZpcm9ubWVudFZhcmlhYmxlc0ZvckNocm9vdEhl
bHBlcihwaWRfdCBwaWQsIGludCBzb2NrZXRQYWlyW10pCit7CisgICAgY29uc3QgaW50IGRlc2Ny
aXB0b3JTaXplID0gMzI7CisgICAgY2hhciBzb2NrZXREZXNjcmlwdG9yW2Rlc2NyaXB0b3JTaXpl
XTsKKyAgICBjaGFyIHNhbmRib3hIZWxwZXJQaWRbZGVzY3JpcHRvclNpemVdOworCisgICAgaW50
IGxlbmd0aCA9IHNucHJpbnRmKHNhbmRib3hIZWxwZXJQaWQsIHNpemVvZihzYW5kYm94SGVscGVy
UGlkKSwgIiV1IiwgcGlkKTsKKyAgICBpZiAobGVuZ3RoIDwgMCB8fCBsZW5ndGggPj0gc2l6ZW9m
KHNhbmRib3hIZWxwZXJQaWQpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29udmVydGlu
ZyB0aGUgcGlkIHRvIHN0cmluZyBpcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNldGVudihTQlhfSEVMUEVS
X1BJRCwgc2FuZGJveEhlbHBlclBpZCwgMSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
b3VsZG4ndCBzZXQgdGhlIFNCWF9IRUxQRVJfUElEIGVudiB2YXJpYWJsZTogJXNcbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBsZW5ndGgg
PSBzbnByaW50Zihzb2NrZXREZXNjcmlwdG9yLCBzaXplb2Yoc29ja2V0RGVzY3JpcHRvciksICIl
dSIsIHNvY2tldFBhaXJbMV0pOworICAgIGlmIChsZW5ndGggPCAwIHx8IGxlbmd0aCA+PSBzaXpl
b2Yoc29ja2V0RGVzY3JpcHRvcikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb252ZXJ0
aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gc3RyaW5nIGlzIGZhaWxlZDogJXMuXG4iLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNl
dGVudihTQlhfRCwgc29ja2V0RGVzY3JpcHRvciwgMSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJTYXZpbmcgdGhlIGhlbHBlcnMgZmlsZWRlc2NyaXB0b3IgaW50byBhbiBlbnYgdmFyaWFi
bGUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChjbG9zZShzb2NrZXRQYWlyWzBdKSkgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkNsb3Npbmcgb2YgJWQgZmFpbGVkOiAlc1xuIiwgc29ja2V0UGFpclswXSwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcHJlcGFyZUFuZFN0YXJ0Q2hyb290SGVscGVyKCkK
K3sKKyAgICBpbnQgc29ja2V0UGFpclsyXTsKKyAgICBwaWRfdCBwaWQ7CisKKyAgICBpZiAoc29j
a2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0UGFpcikpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgc29ja2V0cGFpcjogJXNcbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwaWQgPSBz
eXNjYWxsKFNZU19jbG9uZSwgQ0xPTkVfRlMgfCBTSUdDSExELCAwLCAwLCAwKTsKKworICAgIHN3
aXRjaCAocGlkKSB7CisgICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9u
ZSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjYXNlIDA6CisgICAgICAgIC8vIENoaWxkIHByb2Nlc3M6IHdlIHN0YXJ0IHRoZSBj
aHJvb3QgaGVscGVyIHdoaWNoIHdhaXRzIGZvciB0aGUgIkNocm9vdE1lIgorICAgICAgICAvLyBt
ZXNzYWdlIGZyb20gdGhlIFdlYlByb2Nlc3MuIElmIHdlIGFyZSBzdWNjZXNzZWQsIHRoZW4gd2Ug
d29uJ3QgcmV0dXJuLgorICAgICAgICBsYXVuY2hDaHJvb3RIZWxwZXIoc29ja2V0UGFpcik7Cisg
ICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgLy8gUGFyZW50IHByb2Nlc3M6IGV4cG9ydHMgdGhlIHBpZCBvZiB0
aGUgaGVscGVyIGFuZCB0aGUgc29ja2V0IGlkIHNvIHRoZQorICAgICAgICAvLyBoZWxwZXIgYW5k
IHRoZSBXZWJQcm9jZXNzIGNhbiBjb21tdW5pY2F0ZS4KKyAgICAgICAgcmV0dXJuIHNldEVudmly
b25tZW50VmFyaWFibGVzRm9yQ2hyb290SGVscGVyKHBpZCwgc29ja2V0UGFpcik7CisgICAgfQor
ICAgIC8vIFdlIHNob3VsZCBuZXZlciByZWFjaCBoZXJlLgorICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gU2V0IGNhcGFiaWxpdGllcyBpbiBhbGwgdGhyZWUgc2V0cy4KK3N0YXRpYyBib29sIHNl
dENhcGFiaWxpdGllcyhjYXBfdmFsdWVfdCogY2FwYWJpbGl0eUxpc3QsIGludCBsZW5ndGgpCit7
CisgICAgY2FwX3QgY2FwYWJpbGl0aWVzOworCisgICAgLy8gQ2FwYWJpbGl0aWVzIHNob3VsZCBi
ZSBpbml0aWFsaXplZCB3aXRob3V0IGZsYWdzLgorICAgIGNhcGFiaWxpdGllcyA9IGNhcF9pbml0
KCk7CisgICAgaWYgKCFjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJQ
cm9jZXNzIGNhcGFiaWxpdGllcyBpbml0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY2FwX2NsZWFyKGNhcGFi
aWxpdGllcykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbGVhcmluZyBwcm9jZXNzIGNh
cGFiaWxpdGllcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNhcGFiaWxpdHlMaXN0ICYmIGxlbmd0aCkgewor
ICAgICAgICBpZiAoY2FwX3NldF9mbGFnKGNhcGFiaWxpdGllcywgQ0FQX0VGRkVDVElWRSwgbGVu
Z3RoLCBjYXBhYmlsaXR5TGlzdCwgQ0FQX1NFVCkKKyAgICAgICAgICAgIHx8IGNhcF9zZXRfZmxh
ZyhjYXBhYmlsaXRpZXMsIENBUF9JTkhFUklUQUJMRSwgbGVuZ3RoLCBjYXBhYmlsaXR5TGlzdCwg
Q0FQX1NFVCkKKyAgICAgICAgICAgIHx8IGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9Q
RVJNSVRURUQsIGxlbmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9TRVQpKSB7CisgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBzZXQgcHJvY2VzcyBjYXBhYmlsaXR5IGZsYWdzOiAl
c1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGNhcF9mcmVlKGNhcGFiaWxpdGll
cyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoY2FwX3NldF9wcm9jKGNhcGFiaWxpdGllcykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDYW5ub3Qgc2V0IHByb2Nlc3MgY2FwYWJpbGl0aWVzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgY2FwX2ZyZWUoY2FwYWJpbGl0aWVzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBjYXBfZnJlZShjYXBhYmlsaXRpZXMpOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgYm9vbCBkcm9wUHJpdmlsZWdlcygpCit7CisgICAgLy8gV2UgYmVjb21lIGV4
cGxpY2l0ZWx5IG5vbiBkdW1wYWJsZS4KKyAgICBpZiAocHJjdGwoUFJfU0VUX0RVTVBBQkxFLCAw
LCAwLCAwLCAwKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNldHRpbmcgZHVtcGxhYmxl
IGlzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoc2V0cmVzZ2lkKHNhbmRib3hVc2VyR2lkLCBzYW5kYm94VXNl
ckdpZCwgc2FuZGJveFVzZXJHaWQpCisgICAgICAgIHx8IHNldHJlc3VpZChzYW5kYm94VXNlclVp
ZCwgc2FuZGJveFVzZXJVaWQsIHNhbmRib3hVc2VyVWlkKSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkbid0IGZhbGxiYWNrIHRvIHVzZXI6ICVkLlxuIiwgc2FuZGJveFVzZXJVaWQp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIERyb3AgYWxsIGNhcGFiaWxp
dGllcy4gQWdhaW4sIHNldHVpZCgpIG5vcm1hbGx5IHRha2VzIGNhcmUgb2YgdGhpcyBpZiB3ZSBo
YWQgZXVpZCAwLgorICAgIHJldHVybiBzZXRDYXBhYmlsaXRpZXMoMCwgMCk7Cit9CisKK3N0YXRp
YyBib29sIGZpbGVFeGlzdHMoY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBm
aWxlU3RhdDsKKyAgICByZXR1cm4gIShsc3RhdChwYXRoLCAmZmlsZVN0YXQpICYmIGVycm5vID09
IEVOT0VOVCk7Cit9CisKK3N0YXRpYyBtb2RlX3QgZGlyZWN0b3J5UGVybWlzc2lvbnMoY29uc3Qg
Y2hhciogZGlyZWN0b3J5KQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIHN0YXQo
ZGlyZWN0b3J5LCAmZmlsZVN0YXQpOworICAgIHJldHVybiBmaWxlU3RhdC5zdF9tb2RlOworfQor
CitzdGF0aWMgYm9vbCBjcmVhdGVEaXJlY3RvcnkoY2hhciogcGF0aFRvQ3JlYXRlLCBjb25zdCBj
aGFyKiBuZXh0RGlyZWN0b3J5VG9DcmVhdGUpCit7CisgICAgaWYgKCFzdHJpbmdBcHBlbmQocGF0
aFRvQ3JlYXRlLCBuZXh0RGlyZWN0b3J5VG9DcmVhdGUsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgY2hhciBwYXRoVG9DcmVhdGVJblNhbmRib3hbUGF0aFNpemVdOwor
ICAgIGlmICghc3RyaW5nQ29uY2F0KHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgc2FuZGJveERpcmVj
dG9yeSwgcGF0aFRvQ3JlYXRlLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1vZGVfdCBtb2RlID0gZGlyZWN0b3J5UGVybWlzc2lvbnMocGF0aFRvQ3JlYXRlKTsKKyAg
ICBpZiAobWtkaXIocGF0aFRvQ3JlYXRlSW5TYW5kYm94LCBtb2RlKSkgeworICAgICAgICBpZiAo
ZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW9u
IG9mICVzIGZhaWxlZDogJXNcbiIsIHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGxzdGF0KHBhdGhUb0NyZWF0ZSwgJmZpbGVJbmZv
KTsKKyAgICBpZiAoZmlsZUluZm8uc3RfdWlkID09IGdldHVpZCgpKSB7CisgICAgICAgIGlmIChj
aG93bihwYXRoVG9DcmVhdGVJblNhbmRib3gsIHNhbmRib3hVc2VyVWlkLCBzYW5kYm94VXNlckdp
ZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChjaG1vZChwYXRo
VG9DcmVhdGVJblNhbmRib3gsIGZpbGVJbmZvLnN0X21vZGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZURpcmVjdG9yeVBh
dGgoY2hhciogcGF0aCkKK3sKKyAgICBjaGFyIGZ1bGxQYXRoSW5TYW5kYm94W1BhdGhTaXplXTsK
KyAgICBpZiAoIXN0cmluZ0NvbmNhdChmdWxsUGF0aEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9y
eSwgcGF0aCwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZmls
ZUV4aXN0cyhmdWxsUGF0aEluU2FuZGJveCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Y2hhciBhbHJlYWR5Q3JlYXRlZFBhdGhbUGF0aFNpemVdOworICAgIGFscmVhZHlDcmVhdGVkUGF0
aFswXSA9ICdcMCc7CisgICAgLy8gc3RhcnRQb3MgaXMgKHBhdGggKyAxKSBiZWNhdXNlIHdlIHNr
aXAgdGhlIGZpcnN0ICcvJy4KKyAgICBjaGFyKiBzdGFydFBvcyA9IHBhdGggKyAxOworICAgIGNo
YXIqIGVuZFBvczsKKyAgICB3aGlsZSAoKGVuZFBvcyA9IHN0cmNocihzdGFydFBvcywgJy8nKSkp
IHsKKyAgICAgICAgY2hhciBuZXh0RGlyZWN0b3J5VG9DcmVhdGVbUGF0aFNpemVdOworICAgICAg
ICBpZiAoIXN0cmluZ0NvcHkobmV4dERpcmVjdG9yeVRvQ3JlYXRlLCBzdGFydFBvcyAtIDEsIGVu
ZFBvcyAtIHN0YXJ0UG9zICsgMSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeShhbHJlYWR5Q3JlYXRlZFBhdGgsIG5leHRE
aXJlY3RvcnlUb0NyZWF0ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN0
YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisgICAgLy8gQ3JlYXRlIHRoZSBsYXN0IGRpcmVj
dG9yeSBvZiB0aGUgZGlyZWN0b3J5cGF0aC4KKyAgICBhbHJlYWR5Q3JlYXRlZFBhdGhbMF0gPSAn
XDAnOworICAgIHJldHVybiBjcmVhdGVEaXJlY3RvcnkoYWxyZWFkeUNyZWF0ZWRQYXRoLCBwYXRo
KTsKK30KKworc3RhdGljIGJvb2wgY3JlYXRlRGV2aWNlRmlsZXMoKQoreworICAgIGNoYXIgZGV2
W10gPSAiL2Rldi8iOworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5UGF0aChkZXYpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgY2hhciogZGV2aWNlc1syXSA9IHsgIi9kZXYvcmFu
ZG9tIiwgIi9kZXYvdXJhbmRvbSIgfTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkg
eworICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7CisgICAgICAgIGlmIChsc3RhdChkZXZpY2Vz
W2ldLCAmc3RhdHVzKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBv
YnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlIGZpbGUgKCVzKTogJXNcbiIsIGRldmlj
ZXNbaV0sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgZGV2X3QgZGV2ID0gc3RhdHVzLnN0X3JkZXY7CisgICAgICAgIC8vIEJv
dGggbmVlZGVkIGRldmljZSBmaWxlcyAoL2Rldi9yYW5kb20gYW5kIC9kZXYvdXJhbmRvbSkgYXJl
IGNoYXJhY3RlciBtX2RldmljZXMgYW5kCisgICAgICAgIC8vIHRoZWlyIHBlcm1pc3Npb25zIHNo
b3VsZCBiZTogcnctcnctcnctLgorICAgICAgICBjaGFyIGRldmljZVtQYXRoU2l6ZV07CisgICAg
ICAgIGlmICghc3RyaW5nQ29uY2F0KGRldmljZSwgc2FuZGJveERpcmVjdG9yeSwgZGV2aWNlc1tp
XSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobWtu
b2QoZGV2aWNlLCBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dS
UCB8IFNfSVJPVEggfCBTX0lXT1RILCBtYWtlZGV2KG1ham9yKGRldiksIG1pbm9yKGRldikpKSkg
eworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkgeworICAgICAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3JlYXRlIGRldmljZSBmaWxlICVzOiAlc1xuIiwgZGV2
aWNlLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIGJvb2wgbW91bnRGaWxlU3lzdGVtcygpCit7CisgICAgY2hhciBwcm9jW10gPSAiL3Byb2Mv
IjsKKyAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeVBhdGgocHJvYykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjaGFyIHByb2NQYXRoSW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICBpZiAoIXN0
cmluZ0NvbmNhdChwcm9jUGF0aEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgcHJvYywgUGF0
aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1vdW50KHByb2MsIHByb2NQ
YXRoSW5TYW5kYm94LCAicHJvYyIsIDAsIDApKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFQlVT
WSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBtb3VudGluZyAlcy4g
JXNcbiIsIHByb2MsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGFyIHNoYXJlZE1lbW9yeVtdID0gIi9ydW4vc2ht
LyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKHNoYXJlZE1lbW9yeSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjaGFyIHNoYXJlZE1lbW9yeVBhdGhJblNhbmRib3hbUGF0aFNp
emVdOworICAgIGlmICghc3RyaW5nQ29uY2F0KHNoYXJlZE1lbW9yeVBhdGhJblNhbmRib3gsIHNh
bmRib3hEaXJlY3RvcnksIHNoYXJlZE1lbW9yeSwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1vdW50KHNoYXJlZE1lbW9yeSwgc2hhcmVkTWVtb3J5UGF0aEluU2Fu
ZGJveCwgInRtcGZzIiwgMCwgMCkpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVCVVNZKSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG1vdW50aW5nICVzOiAlc1xuIiwg
c2hhcmVkTWVtb3J5LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBs
aW5rRmlsZShjaGFyKiBzb3VyY2VGaWxlLCBjaGFyKiB0YXJnZXRGaWxlKQoreworICAgIGJvb2wg
aXNTeW1saW5rID0gdHJ1ZTsKKyAgICB3aGlsZSAoaXNTeW1saW5rKSB7CisgICAgICAgIHN0cnVj
dCBzdGF0IGZpbGVJbmZvOworICAgICAgICBpZiAobHN0YXQoc291cmNlRmlsZSwgJmZpbGVJbmZv
KSkgeworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkgeworICAgICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb2J0YWluIGluZm9ybWF0aW9uIGFib3V0ICVzOiAl
c1xuIiwgc291cmNlRmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwg
ZmlsZSBkb2Vzbid0IGV4aXN0IChlLmcuIGRhbmdsaW5nIGxpbmtzKSB0aGVuIHdlIGNhbiBpZ25v
cmUgaXQKKyAgICAgICAgICAgIC8vIGluIHRoZSBzYW5kYm94IHRvby4KKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNoYXIqIGVuZE9mQmFzZURpcmVjdG9yeUlu
U291cmNlID0gc3RycmNocihzb3VyY2VGaWxlLCAnLycpOworICAgICAgICBpZiAoIWVuZE9mQmFz
ZURpcmVjdG9yeUluU291cmNlKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFs
aWQgc291cmNlOiAlcy5cbiIsIHNvdXJjZUZpbGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGNoYXIgYmFzZURpcmVjdG9yeU9mU291cmNlW1BhdGhTaXpl
XTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb3B5KGJhc2VEaXJlY3RvcnlPZlNvdXJjZSwgc291cmNl
RmlsZSwgZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UgLSBzb3VyY2VGaWxlICsgMSwgUGF0aFNp
emUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNyZWF0ZURpcmVj
dG9yeVBhdGgoYmFzZURpcmVjdG9yeU9mU291cmNlKSkgeworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDcmVhdGluZyAlcyBmYWlsZWQ6ICVzLlxuIiwgYmFzZURpcmVjdG9yeU9mU291cmNl
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGlmIChsaW5rKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpKSB7CisgICAgICAgICAg
ICBpZiAoZXJybm8gIT0gRUVYSVNUICYmIGVycm5vICE9IEVOT0VOVCkgeworICAgICAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiTGlua2luZyAlcyBmYWlsZWQ6ICVzLlxuIiwgc291cmNlRmls
ZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgc3ltbGlua3MuCisgICAg
ICAgIGlzU3ltbGluayA9IChmaWxlSW5mby5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGTE5LOwor
ICAgICAgICBpZiAoIWlzU3ltbGluaykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNo
YXIgc3ltbGlua1RhcmdldFtQYXRoU2l6ZV07CisgICAgICAgIGludCBsZW5ndGhPZlRoZUxpbmsg
PSByZWFkbGluayhzb3VyY2VGaWxlLCBzeW1saW5rVGFyZ2V0LCBzaXplb2Yoc3ltbGlua1Rhcmdl
dCkgLSAxKTsKKyAgICAgICAgaWYgKGxlbmd0aE9mVGhlTGluayA+IDApCisgICAgICAgICAgICBz
eW1saW5rVGFyZ2V0W2xlbmd0aE9mVGhlTGlua10gPSAnXDAnOworICAgICAgICBjaGFyIHN5bWxp
bmtUYXJnZXRJblJlYWxXb3JsZFtQYXRoU2l6ZV07CisgICAgICAgIGNoYXIgc3ltbGlua1Rhcmdl
dEluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgICAgIC8vIE1ha2luZyBkaWZmZXJlbmNlIGJldHdl
ZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzLgorICAgICAgICBpZiAoc3ltbGlua1Rhcmdl
dFswXSA9PSAnLycpIHsKKyAgICAgICAgICAgIGlmICghc3RyaW5nQ29weShzeW1saW5rVGFyZ2V0
SW5SZWFsV29ybGQsIHN5bWxpbmtUYXJnZXQsIFBhdGhTaXplKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIXN0cmluZ0NvbmNhdChzeW1saW5rVGFyZ2V0
SW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBzeW1saW5rVGFyZ2V0LCBQYXRoU2l6ZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKCFzdHJpbmdDb25jYXQoc3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBiYXNlRGlyZWN0
b3J5T2ZTb3VyY2UsICIvIiwgc3ltbGlua1RhcmdldCwgUGF0aFNpemUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghc3RyaW5nQ29uY2F0KHN5bWxpbmtU
YXJnZXRJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksICIvIiwgc3ltbGlua1RhcmdldEluUmVh
bFdvcmxkLCBQYXRoU2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmICghc3RyaW5nQ29weShzb3VyY2VGaWxlLCBzeW1saW5rVGFyZ2V0SW5S
ZWFsV29ybGQsIFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCFzdHJpbmdDb3B5KHRhcmdldEZpbGUsIHN5bWxpbmtUYXJnZXRJblNhbmRib3gsIFBhdGhT
aXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIGxpbmtEaXJlY3RvcnkoY2hhciogc291cmNlRGlyZWN0b3J5UGF0
aCwgY2hhciogdGFyZ2V0RGlyZWN0b3J5UGF0aCkKK3sKKyAgICBpZiAoIWNyZWF0ZURpcmVjdG9y
eVBhdGgoc291cmNlRGlyZWN0b3J5UGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBE
SVIqIGRpcmVjdG9yeSA9IG9wZW5kaXIoc291cmNlRGlyZWN0b3J5UGF0aCk7CisgICAgaWYgKCFk
aXJlY3RvcnkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvcGVuIGRpcmVj
dG9yeSAlczogJXNcbiIsIHNvdXJjZURpcmVjdG9yeVBhdGgsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgZGlyZW50ICpkaXJlY3Rv
cnlJbmZvID0gMDsKKyAgICB3aGlsZSAoKGRpcmVjdG9yeUluZm8gPSByZWFkZGlyKGRpcmVjdG9y
eSkpKSB7CisgICAgICAgIGNoYXIqIG5leHRGaWxlSW5EaXJlY3RvcnkgPSBkaXJlY3RvcnlJbmZv
LT5kX25hbWU7CisgICAgICAgIC8vIFdlIG11c3Qgbm90IGxpbmsgJy4nIGFuZCAiLi4iIGludG8g
dGhlIHNhbmRib3guCisgICAgICAgIGlmICghc3RybmNtcChuZXh0RmlsZUluRGlyZWN0b3J5LCAi
LiIsIHN0cmxlbihuZXh0RmlsZUluRGlyZWN0b3J5KSkgfHwgIXN0cm5jbXAobmV4dEZpbGVJbkRp
cmVjdG9yeSwgIi4uIiwgMikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2hhciBz
b3VyY2VGaWxlW1BhdGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb25jYXQoc291cmNlRmls
ZSwgc291cmNlRGlyZWN0b3J5UGF0aCwgIi8iLCBuZXh0RmlsZUluRGlyZWN0b3J5LCBQYXRoU2l6
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2hhciB0YXJnZXRGaWxl
W1BhdGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb25jYXQodGFyZ2V0RmlsZSwgdGFyZ2V0
RGlyZWN0b3J5UGF0aCwgIi8iLCBuZXh0RmlsZUluRGlyZWN0b3J5LCBQYXRoU2l6ZSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAg
IGlmICgoZGlyZWN0b3J5SW5mby0+ZF90eXBlID09IERUX0RJUikpCisgICAgICAgICAgICBvayA9
IGxpbmtEaXJlY3Rvcnkoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG9rID0gbGlua0ZpbGUoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7CisgICAgICAg
IGlmICghb2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUmVz
dG9yZSB0aGUgb3JpZ2luYWwgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGRpcmVjdG9yaWVzIGJl
Y2F1c2UKKyAgICAvLyBpdCBjb3VsZCBoYXZlIG1lYW5pbmcgZS5nLiBpbiB0aGUgaGFzaGdlbmVy
YXRpb24gb2YgY2FjaGUgZmlsZXMuCisgICAgc3RydWN0IHN0YXQgZmlsZVN0YXQ7CisgICAgaWYg
KGxzdGF0KHNvdXJjZURpcmVjdG9yeVBhdGgsICZmaWxlU3RhdCkpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJFcnJvciBieSBvYnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZGlyZWN0b3J5
ICglcyk6ICVzXG4iLCBzb3VyY2VEaXJlY3RvcnlQYXRoLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cnVjdCB1dGltYnVmIHRpbWVzID0geyBm
aWxlU3RhdC5zdF9hdGltZSwgZmlsZVN0YXQuc3RfbXRpbWUgfTsKKyAgICBpZiAodXRpbWUodGFy
Z2V0RGlyZWN0b3J5UGF0aCwgJnRpbWVzKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNv
dWxkbid0IHNldCBiYWNrIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mICVzOiAlc1xuIiwg
dGFyZ2V0RGlyZWN0b3J5UGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY29sbGVjdFJ1
blRpbWVEZXBlbmRlbmNpZXMoKQoreworICAgIC8vIFRoZSBsaXN0IG9mIGVtcGlyaWNhbGx5IGdh
dGhlcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLgorICAgIGNvbnN0IGNoYXIqIHJ1bnRpbWVEZXBl
bmRlbmNpZXNbXSA9IHsKKyAgICAgICAgImxpYm5zc19kbnMuc28iLAorICAgICAgICAibGlicmVz
b2x2LnNvIiwKKyAgICAgICAgImxpYnNzbC5zbyIsCisgICAgICAgICJsaWJjcnlwdG8uc28iLAor
ICAgICAgICAwCisgICAgfTsKKworICAgIGNvbnN0IGNoYXIqKiBjdXJyZW50UnVudGltZURlcGVu
ZGVuY3kgPSBydW50aW1lRGVwZW5kZW5jaWVzOworICAgIHdoaWxlICgqY3VycmVudFJ1bnRpbWVE
ZXBlbmRlbmN5KSB7CisgICAgICAgIC8vIFRvIG9idGFpbiB0aGUgcGF0aCBvZiB0aGUgcnVudGlt
ZSBkZXBlbmRlbmNpZXMgd2Ugb3BlbiB0aGVtIHdpdGggZGxvcGVuLgorICAgICAgICAvLyBXaXRo
IHRoZSBoYW5kbGUgc3VwcGxpZWQgYnkgZGxvcGVuIHdlIGNhbiBvYnRhaW4gaW5mb3JtYXRpb24g
YWJvdXQgdGhlIGR5bmFtaWNhbGx5CisgICAgICAgIC8vIGxpbmtlZCBsaWJyYXJpZXMsIHNvIHRo
ZSBwYXRoIHdoZXJlIGFyZSB0aGV5IGluc3RhbGxlZC4KKyAgICAgICAgdm9pZCogaGFuZGxlID0g
ZGxvcGVuKCpjdXJyZW50UnVudGltZURlcGVuZGVuY3ksIFJUTERfTEFaWSk7CisgICAgICAgIGlm
ICghaGFuZGxlKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGdldCB0
aGUgaGFuZGxlciBvZiAlczogJXNcbiIsICpjdXJyZW50UnVudGltZURlcGVuZGVuY3ksIGRsZXJy
b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBz
dHJ1Y3QgbGlua19tYXAqIGxpbmtNYXA7CisgICAgICAgIGlmIChkbGluZm8oaGFuZGxlLCBSVExE
X0RJX0xJTktNQVAsICZsaW5rTWFwKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
b3VsZG4ndCBnZXQgaW5mb3JtYXRpb24gYWJvdXQgJXM6ICVzXG4iLCAqY3VycmVudFJ1bnRpbWVE
ZXBlbmRlbmN5LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmICghbGlua01hcCkgeworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGxpbmttYXAgb2YgJXM6ICVzLlxuIiwgKmN1cnJlbnRS
dW50aW1lRGVwZW5kZW5jeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgcGF0aE9mVGhlTGlicmFyeVtQYXRoU2l6
ZV07CisgICAgICAgIGNoYXIgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJveFtQYXRoU2l6ZV07Cisg
ICAgICAgIGlmICghc3RyaW5nQ29weShwYXRoT2ZUaGVMaWJyYXJ5LCBsaW5rTWFwLT5sX25hbWUs
IFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFzdHJp
bmdDb25jYXQocGF0aE9mVGhlTGlicmFyeUluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgcGF0
aE9mVGhlTGlicmFyeSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIWxpbmtGaWxlKHBhdGhPZlRoZUxpYnJhcnksIHBhdGhPZlRoZUxpYnJhcnlJblNh
bmRib3gpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxpbmtpbmcgcnVudGltZSBk
ZXBlbmRlbmN5OiAlcyBmYWlsZWQ6ICVzXG4iLCBwYXRoT2ZUaGVMaWJyYXJ5LCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICAgICAgZGxjbG9zZShoYW5kbGUpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRsY2xvc2UoaGFuZGxlKTsKKyAgICAgICAgKytj
dXJyZW50UnVudGltZURlcGVuZGVuY3k7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgYm9vbCBzZXR1cFhhdXRob3JpdHlGb3JOb2JvZHlVc2VyKCkKK3sKKyAgICAvLyBUbyBi
ZSBhYmxlIHVzZSBYIGluc2lkZSB0aGUgc2FuZGJveCBhbiAuWGF1dGhvcml0eSBmaWxlIG11c3Qg
YmUgZXhpc3QgaW5zaWRlIGl0LAorICAgIC8vIG93bmVkIGJ5IHRoZSBzYW5kYm94dXNlci4gRnVy
dGhlcm1vcmUsIFhBVVRIT1JJVFkgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBwb2ludCB0byBp
dC4KKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworICAgIHNpemVfdCBzaXplOworICAgIHN0cnVj
dCBwYXNzd2QqIHJlYWxVc2VyID0gZ2V0cHd1aWQoZ2V0Z2lkKCkpOworICAgIGNoYXIgeGF1dGhv
cml0eU9mUmVhbFVzZXJbUGF0aFNpemVdOworICAgIGNoYXIgeGF1dGhvcml0eUluU2FuZGJveFtQ
YXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoeGF1dGhvcml0eU9mUmVhbFVzZXIsIHJl
YWxVc2VyLT5wd19kaXIsICIvLlhhdXRob3JpdHkiLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIXN0cmluZ0NvbmNhdCh4YXV0aG9yaXR5SW5TYW5kYm94LCBzYW5k
Ym94RGlyZWN0b3J5LCB4YXV0aG9yaXR5T2ZSZWFsVXNlciwgUGF0aFNpemUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBGSUxFKiBzb3VyY2UgPSBmb3Blbih4YXV0aG9yaXR5T2ZSZWFs
VXNlciwgInJiIik7CisgICAgaWYgKCFzb3VyY2UpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDb3VsZG4ndCBvcGVuICVzOiAlc1xuIiwgeGF1dGhvcml0eU9mUmVhbFVzZXIsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBGSUxFKiBkZXN0
ID0gZm9wZW4oeGF1dGhvcml0eUluU2FuZGJveCwgIndiIik7CisgICAgaWYgKCFkZXN0KSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiAlczogJXNcbiIsIHhhdXRob3Jp
dHlJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBXZSBjb3B5IHRoZSAuWGF1dGhvcml0eSBmaWxlIG9mIHRoZSByZWFsIHVz
ZXIgKGluc3RlYWQgb2YgbGlua2luZykgYmVjYXVzZSBub2JvZHkgdXNlcgorICAgIC8vIHNob3Vs
ZCBvd24gaXQgYnV0IHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvZiB0
aGUgb3JpZ2luYWwgZmlsZS4KKyAgICB3aGlsZSAoKHNpemUgPSBmcmVhZChidWZmZXIsIDEsIEJV
RlNJWiwgc291cmNlKSkpCisgICAgICAgIGZ3cml0ZShidWZmZXIsIDEsIHNpemUsIGRlc3QpOwor
CisgICAgZmNsb3NlKHNvdXJjZSk7CisgICAgZmNsb3NlKGRlc3QpOworCisgICAgaWYgKGNob3du
KHhhdXRob3JpdHlJblNhbmRib3gsIHNhbmRib3hVc2VyVWlkLCBzYW5kYm94VXNlckdpZCkpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaG93bmluZyAuWGF1dGhvcml0eSAoJXMpIGZhaWxl
ZDogJXMuXG4iLCB4YXV0aG9yaXR5SW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzZXRlbnYoIlhBVVRIT1JJVFkiLCB4YXV0
aG9yaXR5SW5TYW5kYm94LCAxKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0
IHNldCB0aGUgWEFVVEhPUklUWSBlbnZyaW9ubWVudCB2YXJpYWJsZTogJXNcbiIsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIGluaXRTYW5kYm94KCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIHNh
bmRib3ggZGlyZWN0b3J5LiBXZSBvbmx5IG5lZWQgdG8gc3RlcCBpbnRvIGl0LCBzbworICAgIC8v
IHRoZSBleGVjdXRhYmxlIHBlcm1pc3Npb24gaXMgbmVlZGVkIG9ubHkuCisgICAgaWYgKG1rZGly
KHNhbmRib3hEaXJlY3RvcnksIDAxMDApKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1Qp
IHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3JlYXRlIHRoZSBzYW5k
Ym94IGRpcmVjdG9yeTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWNyZWF0ZURldmljZUZpbGVz
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbW91bnRGaWxlU3lzdGVtcygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBIYXJkIGxpbmsgY2FjaGUgYW5kIGZv
bnQgZGlyZWN0b3JpZXMgaW50byB0aGUgc2FuZGJveCBlbnZpcm9ubWVudC4KKyAgICBzdHJ1Y3Qg
cGFzc3dkKiB1c2VySW5mbyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKyAgICBjb25zdCBjaGFyKiBo
b21lID0gdXNlckluZm8tPnB3X2RpcjsKKyAgICBjaGFyIGxvY2FsRGlyW1BhdGhTaXplXTsKKyAg
ICBpZiAoIXN0cmluZ0NvbmNhdChsb2NhbERpciwgaG9tZSwgIi8ubG9jYWwvc2hhcmUvTm9raWEv
IiwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBjYWNoZURpcltQ
YXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoY2FjaGVEaXIsIGhvbWUsICIvLmNhY2hl
L05va2lhLyIsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNoYXIgZm9u
dERpcltQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoZm9udERpciwgaG9tZSwgIi8u
Zm9udGNvbmZpZy8iLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25z
dCBjaGFyKiBsaW5rZWREaXJlY3Rvcmllc1tdID0geworICAgICAgICBjYWNoZURpciwKKyAgICAg
ICAgZm9udERpciwKKyAgICAgICAgbG9jYWxEaXIsCisgICAgICAgICIvZXRjL2ZvbnRzLyIsCisg
ICAgICAgICIvZXRjL3NzbC9jZXJ0cy8iLAorICAgICAgICAiL3Zhci9jYWNoZS9mb250Y29uZmln
LyIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzLyIsCisgICAgICAgIDAKKyAgICB9OworCisg
ICAgY29uc3QgY2hhcioqIGN1cnJlbnRMaW5rZWREaXJlY3RvcnkgPSBsaW5rZWREaXJlY3Rvcmll
czsKKyAgICB3aGlsZSAoKmN1cnJlbnRMaW5rZWREaXJlY3RvcnkpIHsKKyAgICAgICAgY2hhciBs
aW5rZWREaXJlY3RvcnlJblNhbmRib3hbUGF0aFNpemVdOworICAgICAgICBpZiAoIXN0cmluZ0Nv
bmNhdChsaW5rZWREaXJlY3RvcnlJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksICpjdXJyZW50
TGlua2VkRGlyZWN0b3J5LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmICghbGlua0RpcmVjdG9yeShjb25zdF9jYXN0PGNoYXIqPigqY3VycmVudExpbmtl
ZERpcmVjdG9yeSksIGxpbmtlZERpcmVjdG9yeUluU2FuZGJveCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICsrY3VycmVudExpbmtlZERpcmVjdG9yeTsKKyAgICB9CisKKyAg
ICBpZiAoIXNldHVwWGF1dGhvcml0eUZvck5vYm9keVVzZXIoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGNvbGxlY3RSdW5UaW1lRGVwZW5kZW5jaWVzKCk7Cit9CisKK3N0
YXRpYyBib29sIHJlc3RyaWN0Q2FwYWJpbGl0aWVzKCkKK3sKKyAgICAvLyBDYXBhYmlsaXRpZXMg
d2UgbmVlZC4KKyAgICBjYXBfdmFsdWVfdCBjYXBhYmlsdHlMaXN0WzRdOworICAgIGNhcGFiaWx0
eUxpc3RbMF0gPSBDQVBfU0VUVUlEOworICAgIGNhcGFiaWx0eUxpc3RbMV0gPSBDQVBfU0VUR0lE
OworICAgIGNhcGFiaWx0eUxpc3RbMl0gPSBDQVBfU1lTX0FETUlOOyAvLyBDbG9uaW5nIHdpdGgg
Q0xPTkVfTkVXUElEIGZsYWcgbGF0ZXIgd2lsbCBuZWVkIHRoaXMgY2FwYWJpbGl0eS4KKyAgICBj
YXBhYmlsdHlMaXN0WzNdID0gQ0FQX1NZU19DSFJPT1Q7CisKKyAgICAvLyBSZWR1Y2UgY2FwYWJp
bGl0aWVzIHRvIHdoYXQgd2UgbmVlZC4KKyAgICAvLyBBbHRob3VnaCB3ZSBzdGlsbCBoYXZlIHJv
b3QgZXVpZCBhbmQgd2Uga2VlcCByb290IGVxdWl2YWxlbnQgY2FwYWJpbGl0aWVzLAorICAgIC8v
IHdlIHJlbW92ZWQgKD0gZGlkbid0IGFkZCkgQ0FQX1NZU19SRVNTT1VSQ0UgY2FwYWJpbGl0ZXMg
YW5kIHRoaXMgcmVzdWx0ZWQgdGhhdAorICAgIC8vIHRoZSBzZXRybGltaXQgZnVuY3Rpb24gd2l0
aCBSTElNSVRfTk9GSUxFIHdpbGwgYmUgZWZmZWN0aXZlIGxhdGVyLgorICAgIGlmICghc2V0Q2Fw
YWJpbGl0aWVzKGNhcGFiaWx0eUxpc3QsIHNpemVvZihjYXBhYmlsdHlMaXN0KSAvIHNpemVvZihj
YXBhYmlsdHlMaXN0WzBdKSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qg
YWRqdXN0IHByb2Nlc3MgY2FwYWJpbGl0aWVzOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBib29sIG1vdmVUb05ld1BpZE5hbWVzcGFjZSgpCit7CisgICAgLy8gQ0xPTkVfTkVXUElEIGFu
ZCBDTE9ORV9GUyBzaG91bGQgYmUgaW4gdGhhdCBvcmRlci4KKyAgICAvLyBXZSBjYW4ndCBzaGFy
ZSBGUyBhY2Nyb3NzIG5hbWVzcGFjZXMuCisgICAgcGlkX3QgcGlkLCBleHBlY3RlZFBpZDsKKyAg
ICBpbnQgc3RhdHVzOworICAgIHBpZCA9IHN5c2NhbGwoU1lTX2Nsb25lLCBDTE9ORV9ORVdQSUQg
fCBTSUdDSExELCAwLCAwLCAwKTsKKworICAgIHN3aXRjaCAocGlkKSB7CisgICAgY2FzZSAtMToK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9uaW5nIGlzIGZhaWxlZDogJXNcbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIDA6CisgICAgICAg
IC8vIENoaWxkIHNob3VsZCBydW4gd2l0aCBwaWQgbnVtYmVyIDEgaW4gdGhlIG5ldyBuYW1lc3Bh
Y2UuCisgICAgICAgIGlmIChnZXRwaWQoKSAhPSAxKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkbid0IGNyZWF0ZSBhIG5ldyBQSUQgbmFtZXNwYWNlLlxuIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgLy8gV2UgYXJlIHdhaXRpbmcgZm9yIG91ciBjaGlsZCAoV2ViUHJv
Y2VzcykuCisgICAgICAgIC8vIElmIHRoaXMgd2FpdCBpcyBzdWNjZXNzZnVsIGl0IG1lYW5zIHRo
YXQgb3VyIGNoaWxkIGlzIHRlcm1pbmF0ZWQuCisgICAgICAgIGV4cGVjdGVkUGlkID0gd2FpdHBp
ZChwaWQsICZzdGF0dXMsIDApOworICAgICAgICBpZiAoZXhwZWN0ZWRQaWQgIT0gcGlkKSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhaXRwaWQgaXMgZmFpbGVkIHdpdGg6ICVzXG4i
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAg
ICAgICB9CisgICAgICAgIGlmIChXSUZFWElURUQoc3RhdHVzKSkKKyAgICAgICAgICAgIGV4aXQo
V0VYSVRTVEFUVVMoc3RhdHVzKSk7CisgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBydW4oaW50IGFyZ2MsIGNoYXIg
KmNvbnN0IGFyZ3ZbXSkKK3sKKyAgICBzdHJ1Y3QgcGFzc3dkKiB1c2VySW5mbyA9IGdldHB3dWlk
KGdldHVpZCgpKTsKKyAgICBpZiAoIXVzZXJJbmZvKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ291bGRuJ3QgZ2V0IHRoZSBjdXJyZW50IHVzZXI6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0cmluZ0NvbmNhdChz
YW5kYm94RGlyZWN0b3J5LCB1c2VySW5mby0+cHdfZGlyLCAiLy53azItc2FuZGJveCIsIFBhdGhT
aXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3VycmVudGx5IHdlIHVzZSBu
b2JvZHkgdXNlciBhcyB0aGUgc2FuZGJveCB1c2VyIGFuZCBmYWxsYmFjayB0byB0aGUgcmVhbCB1
c2VyCisgICAgLy8gaWYgaXQncyBmYWlsZWQuIChXZSBjb3VsZCBleHRlbmQgdGhpcyBpbiB0aGUg
ZnV0dXJlIHdpdGggYSBzcGVjaWZpYyByZXN0cmljdGVkIHVzZXIuKQorICAgIHN0cnVjdCBwYXNz
d2QqIG5vYm9keVVzZXIgPSBnZXRwd25hbSgibm9ib2R5Iik7CisgICAgaWYgKG5vYm9keVVzZXIp
IHsKKyAgICAgICAgc2FuZGJveFVzZXJVaWQgPSBub2JvZHlVc2VyLT5wd191aWQ7CisgICAgICAg
IHNhbmRib3hVc2VyR2lkID0gbm9ib2R5VXNlci0+cHdfZ2lkOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHNhbmRib3hVc2VyVWlkID0gZ2V0dWlkKCk7CisgICAgICAgIHNhbmRib3hVc2VyR2lkID0g
Z2V0Z2lkKCk7CisgICAgfQorCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgdGhyZWUgcGFyYW1ldGVy
czoKKyAgICAvLyBwYXRoX29mX3RoaXNfYmluYXJ5IHBhdGhfb2ZfdGhlX3dlYnByb2Nlc3Mgc29j
a2V0X3RvX2NvbW11bmljYXRlX3dpdGhfdWlwcm9jZXNzCisgICAgaWYgKGFyZ2MgIT0gMykgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlN0YXJ0aW5nIFNhbmRib3hQcm9jZXNzIHJlcXVpcmVz
IDMgcGFyYW1ldGVycyFcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gU2FuZGJveFByb2Nlc3Mgc2hvdWxkIGJlIHJ1biB3aXRoIHN1aWQgZmxhZyAuLi4KKyAgICBp
ZiAoZ2V0ZXVpZCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGhlIHNhbmRib3ggaXMg
bm90IHNldGV1aWQgcm9vdC5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gLi4uIGJ1dCBub3QgYXMgcm9vdCAobm90IHdpdGggc3VkbykuCisgICAgaWYgKCFnZXR1
aWQoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBzYW5kYm94IGlzIG5vdCBkZXNp
Z25lZCB0byBiZSBydW4gYnkgcm9vdC5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFpbml0U2FuZGJveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIXJlc3RyaWN0Q2FwYWJpbGl0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIFdlIG1vdmUgb3Vyc2VsZiBhbmQgb3VyIGNoaWxkcmVuIGludG8gYSBuZXcgUElEIG5h
bWVzcGFjZSwKKyAgICAvLyB3aGVyZSBwcm9jZXNzIElEcyBzdGFydCBmcm9tIDAgYWdhaW4uCisg
ICAgaWYgKCFtb3ZlVG9OZXdQaWROYW1lc3BhY2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gU3RhcnRpbmcgYSBoZWxwZXIgd2hhdCB3aWxsIHdhaXRpbmcgZm9yIHRoZSAiY2hy
b290bWUiIG1lc3NhZ2UgZnJvbSBXZWJQcm9jZXNzLgorICAgIGlmICghcHJlcGFyZUFuZFN0YXJ0
Q2hyb290SGVscGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIGRvbid0
IG5lZWQgYW55IHNwZWNpYWwgcHJpdmlsZWdlcyBhbnltb3JlLgorICAgIGlmICghZHJvcFByaXZp
bGVnZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2FuaXR5IGNoZWNrOiBp
ZiBvdXIgZWZmZWN0aXZlIG9yIHJlYWwgdWlkL2dpZCBpcyBzdGlsbCAwIChyb290KSBvcgorICAg
IC8vIHdlIGNhbiBzZXQgYW55IG9mIHRoZW0gdG8gMCwgdGhlbiB0aGUgZHJvcHBpbmcgb2YgcHJp
dmlsZWdlcyBpcyBmYWlsZWQuCisgICAgLy8gV2UgZW5zdXJlIGhlcmUgdGhhdCB3ZSBjYW5ub3Qg
c2V0IHJvb3QgaWQgYWZ0ZXIgaGVyZS4KKyAgICBpZiAoIWdldGV1aWQoKSB8fCAhZ2V0ZWdpZCgp
IHx8ICFzZXR1aWQoMCkgfHwgIXNldGdpZCgwKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkRyb3BwaW5nIHByaXZpbGVnZXMgZmFpbGVkIVxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgV2ViUHJvY2Vzcy4KKyAgICBleGVjbChhcmd2WzFd
LCBhcmd2WzFdLCBhcmd2WzJdLCByZWludGVycHJldF9jYXN0PGNoYXIqPigwKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10pCit7
CisgICAgcmV0dXJuIHJ1bihhcmdjLCBhcmd2KSA/IDAgOiAxOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVu
dExpbnV4LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2Fu
ZGJveEVudmlyb25tZW50TGludXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wNjA3N2UzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4
L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU2FuZGJveEVudmlyb25tZW50TGludXhfaAor
I2RlZmluZSBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisKKyNpZm5kZWYgQ0xPTkVfTkVXUElE
CisjZGVmaW5lIENMT05FX05FV1BJRCAgMHgyMDAwMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgX0dO
VV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgorCisjZGVmaW5lIFNCWF9EICJT
QlhfRCIKKyNkZWZpbmUgU0JYX0hFTFBFUl9QSUQgIlNCWF9IRUxQRVJfUElEIgorCisjZGVmaW5l
IE1TR19DSFJPT1RNRSAnQycKKyNkZWZpbmUgTVNHX0NIUk9PVEVEICdPJworCisjZW5kaWYgLy8g
U2FuZGJveEVudmlyb25tZW50TGludXhfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0ZTVmZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdP
cGVyYXRpb25zLmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92
YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgIlN0cmluZ09wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8
c3RyaW5nLmg+CisKK2Jvb2wgc3RyaW5nQ29weShjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hh
ciogc291cmNlLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHNvdXJj
ZSk7CisgICAgaWYgKGxlbmd0aCA+IG1heFNpemUgLSAxKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRXJyb3I6IGJ1ZmZlciBpcyB0b28gc21hbGw6ICVkICVzLlxuIiwgbWF4U2l6ZSwgc291
cmNlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVzdGluYXRp
b24sIHNvdXJjZSwgbGVuZ3RoICsgMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3Ry
aW5nQ29weShjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlLCBjb25zdCBpbnQg
bGVuZ3RoLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpZiAobGVuZ3RoID4gbWF4U2l6ZSAtIDEgfHwg
bGVuZ3RoID4gc3RybGVuKHNvdXJjZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
cjogYnVmZmVyIGlzIHRvbyBzbWFsbDogJWQgJXMuXG4iLCBtYXhTaXplLCBzb3VyY2UpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNl
LCBsZW5ndGgpOworICAgIGRlc3RpbmF0aW9uW2xlbmd0aF0gPSAnXDAnOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIHN0cmluZ0NvbmNhdChjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hh
ciogc291cmNlMSwgY29uc3QgY2hhciogc291cmNlMiwgaW50IG1heFNpemUpCit7CisgICAgaW50
IGxlbmd0aDEgPSBzdHJsZW4oc291cmNlMSk7CisgICAgaW50IGxlbmd0aDIgPSBzdHJsZW4oc291
cmNlMik7CisgICAgaWYgKGxlbmd0aDEgKyBsZW5ndGgyID4gbWF4U2l6ZSAtIDEpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogYnVmZmVyIGlzIHRvbyBzbWFsbDogJWQgJWQgJXMg
JXMuXG4iLCBtYXhTaXplLCBsZW5ndGgxICsgbGVuZ3RoMiwgc291cmNlMSwgc291cmNlMik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3Vy
Y2UxLCBsZW5ndGgxKTsKKyAgICBtZW1jcHkoZGVzdGluYXRpb24gKyBsZW5ndGgxLCBzb3VyY2Uy
LCBsZW5ndGgyICsgMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3RyaW5nQ29uY2F0
KGNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBjaGFyKiBzb3VyY2UxLCBjb25zdCBjaGFyKiBzb3Vy
Y2UyLCBjb25zdCBjaGFyKiBzb3VyY2UzLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3Ro
MSA9IHN0cmxlbihzb3VyY2UxKTsKKyAgICBpbnQgbGVuZ3RoMiA9IHN0cmxlbihzb3VyY2UyKTsK
KyAgICBpbnQgbGVuZ3RoMyA9IHN0cmxlbihzb3VyY2UzKTsKKyAgICBpZiAobGVuZ3RoMSArIGxl
bmd0aDIgKyBsZW5ndGgzID4gbWF4U2l6ZSAtIDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJFcnJvcjogYnVmZmVyIGlzIHRvbyBzbWFsbDogJWQgJWQgJXMgJXMgJXMuXG4iLCBtYXhTaXpl
LCBsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDMsIHNvdXJjZTEsIHNvdXJjZTIsIHNvdXJjZTMp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwg
c291cmNlMSwgbGVuZ3RoMSk7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSwgc291
cmNlMiwgbGVuZ3RoMik7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSArIGxlbmd0
aDIsIHNvdXJjZTMsIGxlbmd0aDMpOworICAgIGRlc3RpbmF0aW9uW2xlbmd0aDEgKyBsZW5ndGgy
ICsgbGVuZ3RoM10gPSAnXDAnOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHN0cmluZ0Fw
cGVuZChjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlLCBpbnQgbWF4U2l6ZSkK
K3sKKyAgICBpbnQgc291cmNlTGVuZ3RoID0gc3RybGVuKHNvdXJjZSk7CisgICAgaW50IGRlc3Rp
bmF0aW9uTGVuZ3RoID0gc3RybGVuKGRlc3RpbmF0aW9uKTsKKyAgICBpZiAoc291cmNlTGVuZ3Ro
ICsgZGVzdGluYXRpb25MZW5ndGggPiBtYXhTaXplIC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yOiBidWZmZXIgaXMgdG9vIHNtYWxsOiAlZCAlcy5cbiIsIG1heFNpemUsIHNv
dXJjZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0
aW9uICsgZGVzdGluYXRpb25MZW5ndGgsIHNvdXJjZSwgc291cmNlTGVuZ3RoICsgMSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgv
U2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42NTgzNzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuaApAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3pl
Z2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTdHJpbmdPcGVyYXRpb25z
X2gKKyNkZWZpbmUgU3RyaW5nT3BlcmF0aW9uc19oCisKKy8vIFNlY3VyZSBzdHJpbmcgb3BlcmF0
aW9ucy4KK2Jvb2wgc3RyaW5nQ29weShjaGFyKiwgY29uc3QgY2hhciosIGludCk7Citib29sIHN0
cmluZ0NvcHkoY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBpbnQsIGludCk7Citib29sIHN0cmlu
Z0NvbmNhdChjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBpbnQpOworYm9vbCBzdHJp
bmdDb25jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGlu
dCk7Citib29sIHN0cmluZ0FwcGVuZChjaGFyKiwgY29uc3QgY2hhciosIGludCk7CisKKyNlbmRp
ZiAvLyBTdHJpbmdPcGVyYXRpb25zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4IDBiNmVlMWIu
LjVjMjE5YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9x
dC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcApAQCAtNjIsNiArNjIsMTAgQEAKICNpbmNs
dWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgp
CisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNlbmRpZgorCiAjaWYgT1MoREFSV0lOKQog
I2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+CiAjaW5jbHVkZSA8c2VydmVycy9ib290c3RyYXAu
aD4KQEAgLTE2NywzNyArMTcxLDQ5IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9j
ZXNzKCkKICAgICBjb21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKICNl
bmRpZgogCi0gICAgUVByb2Nlc3MqIHdlYlByb2Nlc3MgPSBuZXcgUXRXZWJQcm9jZXNzKCk7Ci0g
ICAgd2ViUHJvY2Vzcy0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRD
aGFubmVscyk7Ci0gICAgd2ViUHJvY2Vzcy0+c3RhcnQoY29tbWFuZExpbmUpOworICAgIFFQcm9j
ZXNzKiB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXIg
PSBuZXcgUXRXZWJQcm9jZXNzKCk7CisgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c2V0UHJv
Y2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFubmVscyk7CisKKyNpZiBFTkFC
TEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIGlmIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5
cGUgPT0gV2ViUHJvY2VzcykgeworICAgICAgICBRU3RyaW5nIHNhbmRib3hDb21tYW5kTGluZSA9
IFFMYXRpbjFTdHJpbmcoIiUxICUyICUzIik7CisgICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9
IHNhbmRib3hDb21tYW5kTGluZS5hcmcoUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQ
YXRoKCkgKyBRTGF0aW4xU3RyaW5nKCIvU1VJRFNhbmRib3hIZWxwZXIiKSk7CisgICAgICAgIHNh
bmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoZXhlY3V0YWJsZVBhdGhP
ZldlYlByb2Nlc3MoKSk7CisgICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21t
YW5kTGluZS5hcmcoc29ja2V0c1swXSk7CisKKyAgICAgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBl
ci0+c3RhcnQoc2FuZGJveENvbW1hbmRMaW5lKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2ViUHJv
Y2Vzc09yU1VJREhlbHBlci0+c3RhcnQoY29tbWFuZExpbmUpOworI2Vsc2UKKyAgICB3ZWJQcm9j
ZXNzT3JTVUlESGVscGVyLT5zdGFydChjb21tYW5kTGluZSk7CisjZW5kaWYKIAogI2lmIE9TKFVO
SVgpICYmICFPUyhEQVJXSU4pCiAgICAgLy8gRG9uJ3QgZXhwb3NlIHRoZSB3ZWIgc29ja2V0IHRv
IHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJvY2Vzc2VzCiAgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNb
MF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKSB7CiAgICAgICAgIGlmIChlcnJubyAhPSBF
SU5UUikgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBk
ZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzT3JTVUlESGVs
cGVyOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAg
ICBpZiAoIXdlYlByb2Nlc3MtPndhaXRGb3JTdGFydGVkKCkpIHsKKyAgICBpZiAoIXdlYlByb2Nl
c3NPclNVSURIZWxwZXItPndhaXRGb3JTdGFydGVkKCkpIHsKICAgICAgICAgcURlYnVnKCkgPDwg
IkZhaWxlZCB0byBzdGFydCIgPDwgY29tbWFuZExpbmU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogI2lmIE9TKERBUldJTikKICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFj
aF90YXNrX3NlbGYoKSwgY29ubmVjdG9yKTsKICAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1h
Y2hfdGFza19zZWxmKCksIGNvbm5lY3RvciwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsK
ICNlbmRpZgotICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgZGVsZXRlIHdlYlBy
b2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KICNpZiBPUyhVTklY
KQotICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgd2ViUHJvY2Vzcy0+cGlkKCksIDEwKTsK
KyAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1MsIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnBp
ZCgpLCAxMCk7CiAjZW5kaWYKLQotICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgm
V2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMs
IHdlYlByb2Nlc3MsIGNvbm5lY3RvcikpOworICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2go
YmluZCgmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3Ms
IHRoaXMsIHdlYlByb2Nlc3NPclNVSURIZWxwZXIsIGNvbm5lY3RvcikpOwogfQogCiB2b2lkIFBy
b2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDgwY2Iy
ZmIuLjY1NTJiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC0xNSw2ICsxNSw3IEBAIElOQ0xVREVQQVRI
ICs9IFwKICAgICAkJFNPVVJDRV9ESVIvUGxhdGZvcm0vQ29yZUlQQyBcCiAgICAgJCRTT1VSQ0Vf
RElSL1BsYXRmb3JtL3F0IFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkIFwKKyAgICAkJFNPVVJD
RV9ESVIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzIFwKICAgICAkJFNPVVJDRV9ESVIvU2hh
cmVkL0FQSS9jIFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mg
XAogICAgICQkU09VUkNFX0RJUi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQgXApAQCAtNjIsNyArNjMs
NyBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFn
ZSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9xdCBcCi0gICAgJCRTT1VSQ0VfRElS
L1BsdWdpblByb2Nlc3MKKyAgICAkJFNPVVJDRV9ESVIvUGx1Z2luUHJvY2VzcyBcCiAKICMgVGhl
IFdlYktpdDIgUXQgQVBJcyBkZXBlbmQgb24gcXdlYmtpdGdsb2JhbC5oLCB3aGljaCBsaXZlcyBp
biBXZWJLaXQKIElOQ0xVREVQQVRIICs9ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktp
dC9xdC9BcGkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8KaW5kZXggZmQ3NjZjMS4uYWRiNjA0OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy5wcm8KQEAgLTExLDYgKzExLDEwIEBAIERFU1RESVIgPSAkJHtST09UX0JVSUxE
X0RJUn0vYmluCiAKIFNPVVJDRVMgKz0gcXQvTWFpblF0LmNwcAogCitJTkNMVURFUEFUSCA9IFwK
KyAgICAkJFBXRC9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvIFwKKyAgICAkJElOQ0xVREVQ
QVRICisKIFFUICs9IG5ldHdvcmsgd2Via2l0d2lkZ2V0cwogbWFjeDogUVQgKz0geG1sCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCmlu
ZGV4IDE4ZjMwMzk0Li4wYzAyOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlIDxR
U3RyaW5nTGlzdD4KICNpbmNsdWRlIDxRVXJsPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5o
PgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNjAsNiArNjIsMTAgQEAK
IGV4dGVybiAiQyIga2Vybl9yZXR1cm5fdCBib290c3RyYXBfbG9va191cDIobWFjaF9wb3J0X3Qs
IGNvbnN0IG5hbWVfdCwgbWFjaF9wb3J0X3QqLCBwaWRfdCwgdWludDY0X3QpOwogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorI2luY2x1ZGUgIlNhbmRib3hFbnZpcm9u
bWVudExpbnV4LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMTQyLDE4ICsxNDgsNzcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZVByb3h5KCkKICAgICBRTmV0d29ya1Byb3h5RmFjdG9yeTo6c2V0VXNlU3lzdGVtQ29uZmlndXJh
dGlvbih0cnVlKTsKIH0KIAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCitwaWRfdCBj
aHJvb3RNZSgpCit7CisgICAgbG9uZyBpbnQgZmQgPSAtMTsKKyAgICBjaGFyKiBzYW5kYm94U29j
a2V0RGVzY3JpcHRvcjsKKyAgICBjaGFyKiBoZWxwZXJQaWQ7CisgICAgY2hhciBzYW5kYm94TWVN
c2cgPSBNU0dfQ0hST09UTUU7CisgICAgc3NpemVfdCBjbnQ7CisgICAgcGlkX3QgaGVscGVyID0g
LTE7CisKKyAgICAvLyBHZXQgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgc29ja2V0cGFpci4K
KyAgICBzYW5kYm94U29ja2V0RGVzY3JpcHRvciA9IGdldGVudihTQlhfRCk7CisgICAgaWYgKCFz
YW5kYm94U29ja2V0RGVzY3JpcHRvcikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZXJybm8g
PSAwOworICAgIGZkID0gc3RydG9sKHNhbmRib3hTb2NrZXREZXNjcmlwdG9yLCAoY2hhciAqKikg
MCwgMTApOworICAgIGlmIChlcnJubyB8fCAoZmQgPT0gLTEpKQorICAgICAgICByZXR1cm4gLTE7
CisKKyAgICAvLyBHZXQgdGhlIFBJRCBvZiB0aGUgc2V0dWlkIGhlbHBlci4KKyAgICBoZWxwZXJQ
aWQgPSBnZXRlbnYoU0JYX0hFTFBFUl9QSUQpOworCisgICAgLy8gSWYgbm8gUElEIGlzIGF2YWls
YWJsZSwgdGhlIGRlZmF1bHQgb2YgLTEgd2lsbCBkby4KKyAgICBpZiAoaGVscGVyUGlkKSB7Cisg
ICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgaGVscGVyID0gc3RydG9sKGhlbHBlclBpZCwgKGNo
YXIgKiopIDAsIDEwKTsKKyAgICAgICAgaWYgKGVycm5vIHx8IChoZWxwZXIgPT0gLTEpKQorICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvLyBTZW5kIHRoZSBjaHJvb3RNZSBtZXNz
YWdlIHRvIHRoZSBoZWxwZXIuCisgICAgY250ID0gd3JpdGUoZmQsICZzYW5kYm94TWVNc2csIDEp
OworICAgIGlmIChjbnQgIT0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNocm9vdE1l
IG1zZyBmYWlsZWQgdG8gd3JpdGU6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIH0KKyAgICAvLyBSZWFkIHRoZSBhY2tub3dsZWRnZW1lbnQgbWVzc2Fn
ZSBmcm9tIHRoZSBoZWxwZXIuCisgICAgY250ID0gcmVhZChmZCwgJnNhbmRib3hNZU1zZywgMSk7
CisgICAgaWYgKChjbnQgIT0gMSkgfHwgKHNhbmRib3hNZU1zZyAhPSBNU0dfQ0hST09URUQpKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcmVhZCB0aGUgY29uZmlybWF0aW9u
IG1lc3NhZ2UuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjbG9zZShmZCk7
CisgICAgLy8gV2FpdCBmb3IgdGhlIGhlbHBlciBwcm9jZXNzLgorICAgIGludCB3YWl0ZWRQaWQg
PSB3YWl0cGlkKGhlbHBlciwgMCwgMCk7CisgICAgaWYgKHdhaXRlZFBpZCAhPSAtMSAmJiAoKGhl
bHBlciA9PSAtMSkgfHwgKHdhaXRlZFBpZCA9PSBoZWxwZXIpKSkKKyAgICAgICAgcmV0dXJuIHdh
aXRlZFBpZDsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHdhaXQgZm9yIHRoZSBoZWxw
ZXIgcHJvY2VzczogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuIC0xOworfQor
I2VuZGlmCisKIFFfREVDTF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxpY2F0
aW9uKiBhcHApCiB7Ci0gICAgaW5pdGlhbGl6ZVByb3h5KCk7CisjaWYgRU5BQkxFKFNVSURfU0FO
REJPWF9MSU5VWCkKKyAgICBwaWRfdCBoZWxwZXI7CisgICAgaGVscGVyID0gY2hyb290TWUoKTsK
IAorICAgIGlmIChoZWxwZXIgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJBc2tp
bmcgZm9yIGNocm9vdCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNl
bmRpZgorICAgIGluaXRpYWxpemVQcm94eSgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
ZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0
aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAgICAKKwogI2lmIFVTRShRVEtJVCkKICAgICBJbml0V2Vi
Q29yZVN5c3RlbUludGVyZmFjZUZvcldLMigpOwogI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhl
IGNvbm5lY3Rpb24uCiAgICAgaWYgKGFwcC0+YXJndW1lbnRzKCkuc2l6ZSgpIDw9IDEpIHsKICAg
ICAgICAgcURlYnVnKCkgPDwgIkVycm9yOiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiI7CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggYjM0YWVjNy4uYjFhMzQy
MCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMTIwLDYgKzEy
MCw3IEBAIG15ICgKICAgICAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAgICAgJHNxbERhdGFiYXNl
U3VwcG9ydCwKICAgICAkc3R5bGVTY29wZWRTdXBwb3J0LAorICAgICRzdWlkTGludXhTYW5kYm94
LAogICAgICRzdmdET01PYmpDQmluZGluZ3NTdXBwb3J0LAogICAgICRzdmdGb250c1N1cHBvcnQs
CiAgICAgJHN2Z1N1cHBvcnQsCkBAIC0zNzUsNiArMzc2LDkgQEAgbXkgQGZlYXR1cmVzID0gKAog
ICAgIHsgb3B0aW9uID0+ICJzdHlsZS1zY29wZWQiLCBkZXNjID0+ICJUb2dnbGUgU3R5bGUgU2Nv
cGVkIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1RZTEVfU0NPUEVEIiwgZGVm
YXVsdCA9PiBpc0JsYWNrQmVycnkoKSwgdmFsdWUgPT4gXCRzdHlsZVNjb3BlZFN1cHBvcnQgfSwK
IAorICAgIHsgb3B0aW9uID0+ICJzdWlkLWxpbnV4LXNhbmRib3giLCBkZXNjID0+ICJUb2dnbGUg
c3VpZCBzYW5kYm94IGZvciBsaW51eCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVUlEX1NB
TkRCT1hfTElOVVgiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkc3VpZExpbnV4U2FuZGJveCB9
LAorCiAgICAgeyBvcHRpb24gPT4gInN2ZyIsIGRlc2MgPT4gIlRvZ2dsZSBTVkcgc3VwcG9ydCIs
CiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVkciLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwk
c3ZnU3VwcG9ydCB9LAogCi0tIAoxLjcuOS41Cgo=
</data>
<flag name="review"
          id="186878"
          type_id="1"
          status="-"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="186879"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174148</attachid>
            <date>2012-11-14 06:43:51 -0800</date>
            <delta_ts>2012-11-15 05:45:28 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-12.2.patch</filename>
            <type>text/plain</type>
            <size>50576</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSAzZjY2YzkxMDU2NzM4ZmUxYWUzNzA2ZTNjNDMzNjhmYzA5YTczNTQ0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiByZW5pIDxyZW5pQHJlbmktc2VkLihub25lKT4KRGF0ZTogTW9u
LCAxMiBOb3YgMjAxMiAxNzoxNzoxNyArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIGZlbHRvbHQgMTIu
MgoKLS0tCiBTb3VyY2UvUXRXZWJLaXQucHJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgIDUgKwogLi4uL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcgfCAgICAzICstCiBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8gICAgICAg
ICAgICAgICAgICB8ICAgMjcgKwogLi4uL1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVu
dExpbnV4LmNwcCAgICAgfCAgNzUxICsrKysrKysrKysrKysrKysrKysrCiAuLi4vbGludXgvU2Fu
ZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCB8ICAgNDAgKysKIC4uLi9saW51
eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcCAgICAgIHwgICA4OCArKysKIC4u
Li9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5oIHwgICAzMiAr
CiAuLi4vVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCAgICB8ICAg
MzYgKy0KIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgMyArLQogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8gICAgICAgICAgICAgICAg
ICAgICAgfCAgICA0ICsKIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01h
aW5RdC5jcHAgIHwgICA3MSArLQogVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0
LnBtICAgICAgICAgICAgfCAgICA0ICsKIDEyIGZpbGVzIGNoYW5nZWQsIDEwNDkgaW5zZXJ0aW9u
cygrKSwgMTUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIv
U2FuZGJveFByb2Nlc3MucHJvCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hh
cmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vz
cy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9j
ZXNzL1N0cmluZ09wZXJhdGlvbnMuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdFdlYktpdC5wcm8g
Yi9Tb3VyY2UvUXRXZWJLaXQucHJvCmluZGV4IDU5ZjlhMGQuLmIwOWQxZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9RdFdlYktpdC5wcm8KKysrIGIvU291cmNlL1F0V2ViS2l0LnBybwpAQCAtMTcsNiAr
MTcsMTEgQEAgYnVpbGQ/KHdlYmtpdDIpIHsKICAgICAgICAgcGx1Z2lucHJvY2Vzcy5maWxlID0g
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzLnBybwogICAgICAgICBTVUJESVJTICs9IHBsdWdpbnByb2Nl
c3MKICAgICB9CisKKyAgICBlbmFibGU/KFNVSURfU0FOREJPWF9MSU5VWCkgeworICAgICAgICBz
YW5kYm94cHJvY2Vzcy5maWxlID0gV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KKyAgICAgICAg
U1VCRElSUyArPSBzYW5kYm94cHJvY2VzcworICAgIH0KIH0KIAogZGVjbGFyYXRpdmUuZmlsZSA9
IFdlYktpdC9xdC9kZWNsYXJhdGl2ZS9kZWNsYXJhdGl2ZS5wcm8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIvU291cmNl
L1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5kZXggYTRm
OGNhMC4uMmJkZTZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMv
RmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTEzMyw2ICsxMzMsNyBAQCBFTkFCTEVfUVVP
VEEgPSA7CiBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVTVF9B
TklNQVRJT05fRlJBTUU7CiBFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSA9IDsKIEVOQUJM
RV9TQ1JJUFRFRF9TUEVFQ0ggPSA7CitFTkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYID0gOwogRU5B
QkxFX1NIQURPV19ET00gPSA7CiBFTkFCTEVfU0hBUkVEX1dPUktFUlMgPSBFTkFCTEVfU0hBUkVE
X1dPUktFUlM7CiBFTkFCTEVfU1FMX0RBVEFCQVNFID0gRU5BQkxFX1NRTF9EQVRBQkFTRTsKQEAg
LTE1Nyw0ICsxNTgsNCBAQCBFTkFCTEVfV09SS0VSUyA9IEVOQUJMRV9XT1JLRVJTOwogRU5BQkxF
X1hIUl9USU1FT1VUID0gRU5BQkxFX1hIUl9USU1FT1VUOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVf
WFNMVDsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJM
RV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxF
X0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChF
TkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfREVWSUNFX0FEQVBU
QVRJT04pICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChF
TkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQo
RU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFC
TEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX1NU
SUNLWV9QT1NJVElPTikgJChFTkFCTEVfQ1NTX1ZBUklBQkxFUykgJChFTkFCTEVfQ1NTM19DT05E
SVRJT05BTF9SVUxFUykgJChFTkFCTEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1F
X0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9F
TEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VM
RU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1F
TlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0RSQUdHQUJMRV9SRUdJT04p
ICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfRklMRV9TWVNURU0pICQoRU5BQkxF
X0ZJTFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVO
QUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJ
TkcpICQoRU5BQkxFX0hJR0hfRFBJX0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVO
QUJMRV9JRlJBTUVfU0VBTUxFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxF
X0lOUFVUX1NQRUVDSCkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRf
VFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBVVF9U
WVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lO
UFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZBU0NS
SVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFC
TEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xFR0FDWV9WRU5ET1JfUFJFRklYRVMp
ICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5B
QkxFX0xJTktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJD
RSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChF
TkFCTEVfTUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJW
RVJTKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FU
SU9OUykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUERGS0lUX1BMVUdJ
TikgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAk
KEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NI
QVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BF
RCkgJChFTkFCTEVfU1VCUElYRUxfTEFZT1VUKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19E
T01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URVhUX0FVVE9T
SVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9UT1VDSF9J
Q09OX0xPQURJTkcpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9WSURFTykgJChF
TkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQo
RU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XT1JLRVJT
KSAkKEVOQUJMRV9YSFJfVElNRU9VVCkgJChFTkFCTEVfWFNMVCk7CitGRUFUVVJFX0RFRklORVMg
PSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykg
JChFTkFCTEVfQU5JTUFUSU9OX0FQSSkgJChFTkFCTEVfQkxPQikgJChFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05f
QlJFQUspICQoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRBVElPTikgJChFTkFCTEVfQ1NTX0VYQ0xV
U0lPTlMpICQoRU5BQkxFX0NTU19GSUxURVJTKSAkKEVOQUJMRV9DU1NfSElFUkFSQ0hJRVMpICQo
RU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJ
T04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0hBREVSUykgJChFTkFCTEVf
Q1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9D
U1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9DU1MzX0NPTkRJVElPTkFMX1JVTEVTKSAkKEVOQUJMRV9D
U1MzX1RFWFQpICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUikgJChFTkFCTEVfREFTSEJP
QVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfVFJB
TlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkgJChFTkFCTEVfREVWSUNFX09S
SUVOVEFUSU9OKSAkKEVOQUJMRV9ESUFMT0dfRUxFTUVOVCkgJChFTkFCTEVfRElSRUNUT1JZX1VQ
TE9BRCkgJChFTkFCTEVfRFJBR0dBQkxFX1JFR0lPTikgJChFTkFCTEVfRU5DUllQVEVEX01FRElB
KSAkKEVOQUJMRV9GSUxFX1NZU1RFTSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfRlVMTFND
UkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJM
RV9ISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSElHSF9EUElfQ0FO
VkFTKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykgJChF
TkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVU
X1RZUEVfREFURVRJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFC
TEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX0xF
R0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykg
JChFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX1dFQl9BVURJ
TykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTElOS19QUkVSRU5ERVIpICQoRU5B
QkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNU
SUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTUlD
Uk9EQVRBKSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMpICQoRU5BQkxFX05BVklHQVRPUl9D
T05URU5UX1VUSUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QQUdFX1ZJU0lC
SUxJVFlfQVBJKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QUk9HUkVTU19FTEVN
RU5UKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQo
RU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCkg
JChFTkFCTEVfU0hBRE9XX0RPTSkgJChFTkFCTEVfU0hBUkVEX1dPUktFUlMpICQoRU5BQkxFX1NR
TF9EQVRBQkFTRSkgJChFTkFCTEVfU1RZTEVfU0NPUEVEKSAkKEVOQUJMRV9TVUJQSVhFTF9MQVlP
VVQpICQoRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9T
VkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVYVF9B
VVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVfVE9V
Q0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVklERU8p
ICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElP
KSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV09S
S0VSUykgJChFTkFCTEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvIGIvU291cmNlL1dlYktpdDIvU2FuZGJv
eFByb2Nlc3MucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzBlMmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KQEAg
LTAsMCArMSwyNyBAQAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2plY3QgZmlsZSBmb3IgdGhlIFdlYktp
dDIgc2FuZGJveCBwcm9jZXNzIGJpbmFyeQorIworIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScg
Zm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitURU1Q
TEFURSA9IGFwcAorCitUQVJHRVQgPSBTVUlEU2FuZGJveEhlbHBlcgorREVTVERJUiA9ICQke1JP
T1RfQlVJTERfRElSfS9iaW4KKworQ09ORklHICs9IGNvbnNvbGUKK0NPTkZJRyAtPSBxdAorCitT
T1VSQ0VTICs9IFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRM
aW51eC5jcHAgXAorICAgICAgICAgICBTaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5n
T3BlcmF0aW9ucy5jcHAKK0hFQURFUlMgKz0gU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1Nh
bmRib3hFbnZpcm9ubWVudExpbnV4LmggXAorICAgICAgICAgICBTaGFyZWQvbGludXgvU2FuZGJv
eFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5oCisKK0lOU1RBTExTICs9IHRhcmdldAorTElCUyAr
PSAtbGNhcCAtbGRsCisKK2lzRW1wdHkoSU5TVEFMTF9CSU5TKSB7CisgICAgdGFyZ2V0LnBhdGgg
PSAkJFtRVF9JTlNUQUxMX0JJTlNdCit9IGVsc2UgeworICAgIHRhcmdldC5wYXRoID0gJCRJTlNU
QUxMX0JJTlMKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5k
Ym94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDYwYWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVu
dmlyb25tZW50TGludXguY3BwCkBAIC0wLDAgKzEsNzUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRh
IEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgIlNhbmRib3hFbnZpcm9ubWVudExpbnV4LmgiCisKKyNpbmNsdWRlICJTdHJpbmdP
cGVyYXRpb25zLmgiCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNp
bmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+Cisj
aW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGluay5oPgor
I2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5o
PgorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2lu
Y2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5
cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg
PHV0aW1lLmg+CisKK2VudW0geyBQYXRoU2l6ZSA9IDUxMiB9OworY2hhciBzYW5kYm94RGlyZWN0
b3J5W1BhdGhTaXplXTsKK3VpZF90IHNhbmRib3hVc2VyVWlkOwordWlkX3Qgc2FuZGJveFVzZXJH
aWQ7CisKK3N0YXRpYyB2b2lkIGxhdW5jaENocm9vdEhlbHBlcihpbnQgc29ja2V0UGFpcltdKQor
eworICAgIHN0cnVjdCBybGltaXQgbm9GaWxlID0geyAwLCAwIH07CisgICAgLy8gV2UgbmVlZCB0
byByZXN0cmljdCB0aGUgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBvdXIgcHJvY2VzcyB0byBhdm9p
ZCBvcGVuaW5nCisgICAgLy8gYSBmaWxlIGJ5IG1pc3Rha2UuIEhvd2V2ZXIsIENBUF9TWVNfUkVT
U09VUkNFIGNhcGFiaWxpdHkgc2hvdWxkIGJlIGRyb3BwZWQKKyAgICAvLyBvdGhlcndpc2UgaXQg
d29uJ3Qgd29yay4KKyAgICBpZiAoc2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZub0ZpbGUpKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSGVscGVyIGNvdWxkbid0IHNldCB0aGUgcmVzb3Vy
Y2VsaW1pdDogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGNsb3NlKHNvY2tldFBhaXJbMV0pKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ291bGRuJ3QgY2xvc2Ugc29ja2V0ICVkOiAlc1xuIiwgc29ja2V0UGFpclsxXSwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGV4cGVj
dCBhICdDJyAoQ2hyb290TWUpIG1lc3NhZ2UgZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKyAgICBjaGFy
IG1lc3NhZ2U7CisgICAgaWYgKHJlYWQoc29ja2V0UGFpclswXSwgJm1lc3NhZ2UsIDEpICE9IDEp
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCByZWFkIHRoZSBwcm9wZXIgY2hy
b290bWUgbXNnOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtZXNzYWdlICE9IE1TR19DSFJPT1RNRSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIldyb25nIG1lc3NhZ2UgcmVjaWV2ZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHN0cnVjdCBzdGF0IHNhbmRib3hEaXJlY3RvcnlJbmZvOworICAgIGlmIChs
c3RhdChzYW5kYm94RGlyZWN0b3J5LCAmc2FuZGJveERpcmVjdG9yeUluZm8pICYmIFNfSVNESVIo
c2FuZGJveERpcmVjdG9yeUluZm8uc3RfbW9kZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJTYW5kYm94IGRpcmVjdG9yeSAoJXMpIGRvZXMgbm90IGV4aXN0IVxuIiwgc2FuZGJveERpcmVj
dG9yeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY2hyb290KHNhbmRib3hE
aXJlY3RvcnkpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2hyb290aW5nIGZhaWxlZDog
JXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gQ2hyb290IG9ubHkgY2hhbmdlcyB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGNhbGxpbmcg
cHJvY2VzcyBidXQgZG9lc24ndCBjaGFuZ2UKKyAgICAvLyB0aGUgY3VycmVudCB3b3JraW5nIGRp
cmVjdG9yeS4gVGhlcmVmb3JlLCBpZiB3ZSBkb24ndCBkbyBpdCBtYW51YWxseSBhIG1hbGljaW91
cyB1c2VyCisgICAgLy8gY291bGQgYnJlYWsgb3V0IHRoZSBqYWlsIHdpdGggcmVsYXRpdmUgcGF0
aHMuCisgICAgaWYgKGNoZGlyKCIvIikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3Vs
ZG4ndCBjaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIC8uOiAlc1xuIiwgc3RyZXJyb3Io
ZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlbmRpbmcgYWNrbm93
bGVkZ2VtZW50IHRvIHRoZSBXZWJQcm9jZXNzIHRoYXQgdGhlIHNhbmRib3hpbmcgd2FzIHN1Y2Nl
c3NmdWxsLgorICAgIG1lc3NhZ2UgPSBNU0dfQ0hST09URUQ7CisgICAgaWYgKHdyaXRlKHNvY2tl
dFBhaXJbMF0sICZtZXNzYWdlLCAxKSAhPSAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q291bGRuJ3Qgc2VuZCBhY2tub3dsZWRnZW1lbnQgdG8gV2ViUHJvY2VzczogJXMuXG4iLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV4aXQoRVhJVF9TVUND
RVNTKTsKK30KKworc3RhdGljIGJvb2wgc2V0RW52aXJvbm1lbnRWYXJpYWJsZXNGb3JDaHJvb3RI
ZWxwZXIocGlkX3QgcGlkLCBpbnQgc29ja2V0UGFpcltdKQoreworICAgIGNvbnN0IGludCBkZXNj
cmlwdG9yU2l6ZSA9IDMyOworICAgIGNoYXIgc29ja2V0RGVzY3JpcHRvcltkZXNjcmlwdG9yU2l6
ZV07CisgICAgY2hhciBzYW5kYm94SGVscGVyUGlkW2Rlc2NyaXB0b3JTaXplXTsKKworICAgIGlu
dCBsZW5ndGggPSBzbnByaW50ZihzYW5kYm94SGVscGVyUGlkLCBzaXplb2Yoc2FuZGJveEhlbHBl
clBpZCksICIldSIsIHBpZCk7CisgICAgaWYgKGxlbmd0aCA8IDAgfHwgbGVuZ3RoID49IHNpemVv
ZihzYW5kYm94SGVscGVyUGlkKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbnZlcnRp
bmcgdGhlIHBpZCB0byBzdHJpbmcgaXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzZXRlbnYoU0JYX0hFTFBF
Ul9QSUQsIHNhbmRib3hIZWxwZXJQaWQsIDEpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q291bGRuJ3Qgc2V0IHRoZSBTQlhfSEVMUEVSX1BJRCBlbnYgdmFyaWFibGU6ICVzXG4iLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbGVuZ3Ro
ID0gc25wcmludGYoc29ja2V0RGVzY3JpcHRvciwgc2l6ZW9mKHNvY2tldERlc2NyaXB0b3IpLCAi
JXUiLCBzb2NrZXRQYWlyWzFdKTsKKyAgICBpZiAobGVuZ3RoIDwgMCB8fCBsZW5ndGggPj0gc2l6
ZW9mKHNvY2tldERlc2NyaXB0b3IpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29udmVy
dGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHN0cmluZyBpcyBmYWlsZWQ6ICVzLlxuIiwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChz
ZXRlbnYoU0JYX0QsIHNvY2tldERlc2NyaXB0b3IsIDEpKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiU2F2aW5nIHRoZSBoZWxwZXJzIGZpbGVkZXNjcmlwdG9yIGludG8gYW4gZW52IHZhcmlh
YmxlIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoY2xvc2Uoc29ja2V0UGFpclswXSkpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDbG9zaW5nIG9mICVkIGZhaWxlZDogJXNcbiIsIHNvY2tldFBhaXJbMF0s
IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHByZXBhcmVBbmRTdGFydENocm9vdEhlbHBlcigp
Cit7CisgICAgaW50IHNvY2tldFBhaXJbMl07CisgICAgcGlkX3QgcGlkOworCisgICAgaWYgKHNv
Y2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHNvY2tldFBhaXIpKSB7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3JlYXRlIHNvY2tldHBhaXI6ICVzXG4iLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcGlkID0g
c3lzY2FsbChTWVNfY2xvbmUsIENMT05FX0ZTIHwgU0lHQ0hMRCwgMCwgMCwgMCk7CisKKyAgICBz
d2l0Y2ggKHBpZCkgeworICAgIGNhc2UgLTE6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xv
bmUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgY2FzZSAwOgorICAgICAgICAvLyBDaGlsZCBwcm9jZXNzOiB3ZSBzdGFydCB0aGUg
Y2hyb290IGhlbHBlciB3aGljaCB3YWl0cyBmb3IgdGhlICJDaHJvb3RNZSIKKyAgICAgICAgLy8g
bWVzc2FnZSBmcm9tIHRoZSBXZWJQcm9jZXNzLiBJZiB3ZSBhcmUgc3VjY2Vzc2VkLCB0aGVuIHdl
IHdvbid0IHJldHVybi4KKyAgICAgICAgbGF1bmNoQ2hyb290SGVscGVyKHNvY2tldFBhaXIpOwor
ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIC8vIFBhcmVudCBwcm9jZXNzOiBleHBvcnRzIHRoZSBwaWQgb2Yg
dGhlIGhlbHBlciBhbmQgdGhlIHNvY2tldCBpZCBzbyB0aGUKKyAgICAgICAgLy8gaGVscGVyIGFu
ZCB0aGUgV2ViUHJvY2VzcyBjYW4gY29tbXVuaWNhdGUuCisgICAgICAgIHJldHVybiBzZXRFbnZp
cm9ubWVudFZhcmlhYmxlc0ZvckNocm9vdEhlbHBlcihwaWQsIHNvY2tldFBhaXIpOworICAgIH0K
KyAgICAvLyBXZSBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZS4KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vIFNldCBjYXBhYmlsaXRpZXMgaW4gYWxsIHRocmVlIHNldHMuCitzdGF0aWMgYm9vbCBz
ZXRDYXBhYmlsaXRpZXMoY2FwX3ZhbHVlX3QqIGNhcGFiaWxpdHlMaXN0LCBpbnQgbGVuZ3RoKQor
eworICAgIGNhcF90IGNhcGFiaWxpdGllczsKKworICAgIC8vIENhcGFiaWxpdGllcyBzaG91bGQg
YmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBmbGFncy4KKyAgICBjYXBhYmlsaXRpZXMgPSBjYXBfaW5p
dCgpOworICAgIGlmICghY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
UHJvY2VzcyBjYXBhYmlsaXRpZXMgaW5pdCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNhcF9jbGVhcihjYXBh
YmlsaXRpZXMpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xlYXJpbmcgcHJvY2VzcyBj
YXBhYmlsaXRpZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjYXBhYmlsaXR5TGlzdCAmJiBsZW5ndGgpIHsK
KyAgICAgICAgaWYgKGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9FRkZFQ1RJVkUsIGxl
bmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9TRVQpCisgICAgICAgICAgICB8fCBjYXBfc2V0X2Zs
YWcoY2FwYWJpbGl0aWVzLCBDQVBfSU5IRVJJVEFCTEUsIGxlbmd0aCwgY2FwYWJpbGl0eUxpc3Qs
IENBUF9TRVQpCisgICAgICAgICAgICB8fCBjYXBfc2V0X2ZsYWcoY2FwYWJpbGl0aWVzLCBDQVBf
UEVSTUlUVEVELCBsZW5ndGgsIGNhcGFiaWxpdHlMaXN0LCBDQVBfU0VUKSkgeworICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgc2V0IHByb2Nlc3MgY2FwYWJpbGl0eSBmbGFnczog
JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBjYXBfZnJlZShjYXBhYmlsaXRp
ZXMpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGNhcF9zZXRfcHJvYyhjYXBhYmlsaXRpZXMpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ2Fubm90IHNldCBwcm9jZXNzIGNhcGFiaWxpdGllczogJXNcbiIsIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgIGNhcF9mcmVlKGNhcGFiaWxpdGllcyk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgY2FwX2ZyZWUoY2FwYWJpbGl0aWVzKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGJvb2wgZHJvcFByaXZpbGVnZXMoKQoreworICAgIC8vIFdlIGJlY29tZSBl
eHBsaWNpdGVseSBub24gZHVtcGFibGUuCisgICAgaWYgKHByY3RsKFBSX1NFVF9EVU1QQUJMRSwg
MCwgMCwgMCwgMCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTZXR0aW5nIGR1bXBsYWJs
ZSBpcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHNldHJlc2dpZChzYW5kYm94VXNlckdpZCwgc2FuZGJveFVz
ZXJHaWQsIHNhbmRib3hVc2VyR2lkKQorICAgICAgICB8fCBzZXRyZXN1aWQoc2FuZGJveFVzZXJV
aWQsIHNhbmRib3hVc2VyVWlkLCBzYW5kYm94VXNlclVpZCkpIHsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDb3VsZG4ndCBmYWxsYmFjayB0byB1c2VyOiAlZC5cbiIsIHNhbmRib3hVc2VyVWlk
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBEcm9wIGFsbCBjYXBhYmls
aXRpZXMuIEFnYWluLCBzZXR1aWQoKSBub3JtYWxseSB0YWtlcyBjYXJlIG9mIHRoaXMgaWYgd2Ug
aGFkIGV1aWQgMC4KKyAgICByZXR1cm4gc2V0Q2FwYWJpbGl0aWVzKDAsIDApOworfQorCitzdGF0
aWMgYm9vbCBmaWxlRXhpc3RzKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgc3RydWN0IHN0YXQg
ZmlsZVN0YXQ7CisgICAgcmV0dXJuICEobHN0YXQocGF0aCwgJmZpbGVTdGF0KSAmJiBlcnJubyA9
PSBFTk9FTlQpOworfQorCitzdGF0aWMgbW9kZV90IGRpcmVjdG9yeVBlcm1pc3Npb25zKGNvbnN0
IGNoYXIqIGRpcmVjdG9yeSkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICBzdGF0
KGRpcmVjdG9yeSwgJmZpbGVTdGF0KTsKKyAgICByZXR1cm4gZmlsZVN0YXQuc3RfbW9kZTsKK30K
Kworc3RhdGljIGJvb2wgY3JlYXRlRGlyZWN0b3J5KGNoYXIqIHBhdGhUb0NyZWF0ZSwgY29uc3Qg
Y2hhciogbmV4dERpcmVjdG9yeVRvQ3JlYXRlKQoreworICAgIGlmICghc3RyaW5nQXBwZW5kKHBh
dGhUb0NyZWF0ZSwgbmV4dERpcmVjdG9yeVRvQ3JlYXRlLCBQYXRoU2l6ZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNoYXIgcGF0aFRvQ3JlYXRlSW5TYW5kYm94W1BhdGhTaXplXTsK
KyAgICBpZiAoIXN0cmluZ0NvbmNhdChwYXRoVG9DcmVhdGVJblNhbmRib3gsIHNhbmRib3hEaXJl
Y3RvcnksIHBhdGhUb0NyZWF0ZSwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtb2RlX3QgbW9kZSA9IGRpcmVjdG9yeVBlcm1pc3Npb25zKHBhdGhUb0NyZWF0ZSk7Cisg
ICAgaWYgKG1rZGlyKHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgbW9kZSkpIHsKKyAgICAgICAgaWYg
KGVycm5vICE9IEVFWElTVCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDcmVhdGlv
biBvZiAlcyBmYWlsZWQ6ICVzXG4iLCBwYXRoVG9DcmVhdGVJblNhbmRib3gsIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKKyAgICBsc3RhdChwYXRoVG9DcmVhdGUsICZmaWxlSW5m
byk7CisgICAgaWYgKGZpbGVJbmZvLnN0X3VpZCA9PSBnZXR1aWQoKSkgeworICAgICAgICBpZiAo
Y2hvd24ocGF0aFRvQ3JlYXRlSW5TYW5kYm94LCBzYW5kYm94VXNlclVpZCwgc2FuZGJveFVzZXJH
aWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoY2htb2QocGF0
aFRvQ3JlYXRlSW5TYW5kYm94LCBmaWxlSW5mby5zdF9tb2RlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjcmVhdGVEaXJlY3RvcnlQ
YXRoKGNoYXIqIHBhdGgpCit7CisgICAgY2hhciBmdWxsUGF0aEluU2FuZGJveFtQYXRoU2l6ZV07
CisgICAgaWYgKCFzdHJpbmdDb25jYXQoZnVsbFBhdGhJblNhbmRib3gsIHNhbmRib3hEaXJlY3Rv
cnksIHBhdGgsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZp
bGVFeGlzdHMoZnVsbFBhdGhJblNhbmRib3gpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGNoYXIgYWxyZWFkeUNyZWF0ZWRQYXRoW1BhdGhTaXplXTsKKyAgICBhbHJlYWR5Q3JlYXRlZFBh
dGhbMF0gPSAnXDAnOworICAgIC8vIHN0YXJ0UG9zIGlzIChwYXRoICsgMSkgYmVjYXVzZSB3ZSBz
a2lwIHRoZSBmaXJzdCAnLycuCisgICAgY2hhciogc3RhcnRQb3MgPSBwYXRoICsgMTsKKyAgICBj
aGFyKiBlbmRQb3M7CisgICAgd2hpbGUgKChlbmRQb3MgPSBzdHJjaHIoc3RhcnRQb3MsICcvJykp
KSB7CisgICAgICAgIGNoYXIgbmV4dERpcmVjdG9yeVRvQ3JlYXRlW1BhdGhTaXplXTsKKyAgICAg
ICAgaWYgKCFzdHJpbmdDb3B5KG5leHREaXJlY3RvcnlUb0NyZWF0ZSwgc3RhcnRQb3MgLSAxLCBl
bmRQb3MgLSBzdGFydFBvcyArIDEsIFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnkoYWxyZWFkeUNyZWF0ZWRQYXRoLCBuZXh0
RGlyZWN0b3J5VG9DcmVhdGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBz
dGFydFBvcyA9IGVuZFBvcyArIDE7CisgICAgfQorICAgIC8vIENyZWF0ZSB0aGUgbGFzdCBkaXJl
Y3Rvcnkgb2YgdGhlIGRpcmVjdG9yeXBhdGguCisgICAgYWxyZWFkeUNyZWF0ZWRQYXRoWzBdID0g
J1wwJzsKKyAgICByZXR1cm4gY3JlYXRlRGlyZWN0b3J5KGFscmVhZHlDcmVhdGVkUGF0aCwgcGF0
aCk7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZURldmljZUZpbGVzKCkKK3sKKyAgICBjaGFyIGRl
dltdID0gIi9kZXYvIjsKKyAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeVBhdGgoZGV2KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IGNoYXIqIGRldmljZXNbMl0gPSB7ICIvZGV2L3Jh
bmRvbSIsICIvZGV2L3VyYW5kb20iIH07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kp
IHsKKyAgICAgICAgc3RydWN0IHN0YXQgc3RhdHVzOworICAgICAgICBpZiAobHN0YXQoZGV2aWNl
c1tpXSwgJnN0YXR1cykpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkg
b2J0YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGRldmljZSBmaWxlICglcyk6ICVzXG4iLCBkZXZp
Y2VzW2ldLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGRldl90IGRldiA9IHN0YXR1cy5zdF9yZGV2OworICAgICAgICAvLyBC
b3RoIG5lZWRlZCBkZXZpY2UgZmlsZXMgKC9kZXYvcmFuZG9tIGFuZCAvZGV2L3VyYW5kb20pIGFy
ZSBjaGFyYWN0ZXIgbV9kZXZpY2VzIGFuZAorICAgICAgICAvLyB0aGVpciBwZXJtaXNzaW9ucyBz
aG91bGQgYmU6IHJ3LXJ3LXJ3LS4KKyAgICAgICAgY2hhciBkZXZpY2VbUGF0aFNpemVdOworICAg
ICAgICBpZiAoIXN0cmluZ0NvbmNhdChkZXZpY2UsIHNhbmRib3hEaXJlY3RvcnksIGRldmljZXNb
aV0sIFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1r
bm9kKGRldmljZSwgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdH
UlAgfCBTX0lST1RIIHwgU19JV09USCwgbWFrZWRldihtYWpvcihkZXYpLCBtaW5vcihkZXYpKSkp
IHsKKyAgICAgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1QpIHsKKyAgICAgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNyZWF0ZSBkZXZpY2UgZmlsZSAlczogJXNcbiIsIGRl
dmljZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyBib29sIG1vdW50RmlsZVN5c3RlbXMoKQoreworICAgIGNoYXIgcHJvY1tdID0gIi9wcm9j
LyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKHByb2MpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY2hhciBwcm9jUGF0aEluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgaWYgKCFz
dHJpbmdDb25jYXQocHJvY1BhdGhJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksIHByb2MsIFBh
dGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtb3VudChwcm9jLCBwcm9j
UGF0aEluU2FuZGJveCwgInByb2MiLCAwLCAwKSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUJV
U1kpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkgbW91bnRpbmcgJXMu
ICVzXG4iLCBwcm9jLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgY2hhciBzaGFyZWRNZW1vcnlbXSA9ICIvcnVuL3No
bS8iOworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5UGF0aChzaGFyZWRNZW1vcnkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBzaGFyZWRNZW1vcnlQYXRoSW5TYW5kYm94W1BhdGhT
aXplXTsKKyAgICBpZiAoIXN0cmluZ0NvbmNhdChzaGFyZWRNZW1vcnlQYXRoSW5TYW5kYm94LCBz
YW5kYm94RGlyZWN0b3J5LCBzaGFyZWRNZW1vcnksIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtb3VudChzaGFyZWRNZW1vcnksIHNoYXJlZE1lbW9yeVBhdGhJblNh
bmRib3gsICJ0bXBmcyIsIDAsIDApKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFQlVTWSkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBtb3VudGluZyAlczogJXNcbiIs
IHNoYXJlZE1lbW9yeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
bGlua0ZpbGUoY2hhciogc291cmNlRmlsZSwgY2hhciogdGFyZ2V0RmlsZSkKK3sKKyAgICBib29s
IGlzU3ltbGluayA9IHRydWU7CisgICAgd2hpbGUgKGlzU3ltbGluaykgeworICAgICAgICBzdHJ1
Y3Qgc3RhdCBmaWxlSW5mbzsKKyAgICAgICAgaWYgKGxzdGF0KHNvdXJjZUZpbGUsICZmaWxlSW5m
bykpIHsKKyAgICAgICAgICAgIGlmIChlcnJubyAhPSBFTk9FTlQpIHsKKyAgICAgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCAlczog
JXNcbiIsIHNvdXJjZUZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSWYgdGhlIG9yaWdpbmFs
IGZpbGUgZG9lc24ndCBleGlzdCAoZS5nLiBkYW5nbGluZyBsaW5rcykgdGhlbiB3ZSBjYW4gaWdu
b3JlIGl0CisgICAgICAgICAgICAvLyBpbiB0aGUgc2FuZGJveCB0b28uCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjaGFyKiBlbmRPZkJhc2VEaXJlY3RvcnlJ
blNvdXJjZSA9IHN0cnJjaHIoc291cmNlRmlsZSwgJy8nKTsKKyAgICAgICAgaWYgKCFlbmRPZkJh
c2VEaXJlY3RvcnlJblNvdXJjZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZh
bGlkIHNvdXJjZTogJXMuXG4iLCBzb3VyY2VGaWxlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBjaGFyIGJhc2VEaXJlY3RvcnlPZlNvdXJjZVtQYXRoU2l6
ZV07CisgICAgICAgIGlmICghc3RyaW5nQ29weShiYXNlRGlyZWN0b3J5T2ZTb3VyY2UsIHNvdXJj
ZUZpbGUsIGVuZE9mQmFzZURpcmVjdG9yeUluU291cmNlIC0gc291cmNlRmlsZSArIDEsIFBhdGhT
aXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjcmVhdGVEaXJl
Y3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlPZlNvdXJjZSkpIHsKKyAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ3JlYXRpbmcgJXMgZmFpbGVkOiAlcy5cbiIsIGJhc2VEaXJlY3RvcnlPZlNvdXJj
ZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAobGluayhzb3VyY2VGaWxlLCB0YXJnZXRGaWxlKSkgeworICAgICAgICAg
ICAgaWYgKGVycm5vICE9IEVFWElTVCAmJiBlcnJubyAhPSBFTk9FTlQpIHsKKyAgICAgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkxpbmtpbmcgJXMgZmFpbGVkOiAlcy5cbiIsIHNvdXJjZUZp
bGUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIHN5bWxpbmtzLgorICAg
ICAgICBpc1N5bWxpbmsgPSAoZmlsZUluZm8uc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkxOSzsK
KyAgICAgICAgaWYgKCFpc1N5bWxpbmspCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
aGFyIHN5bWxpbmtUYXJnZXRbUGF0aFNpemVdOworICAgICAgICBpbnQgbGVuZ3RoT2ZUaGVMaW5r
ID0gcmVhZGxpbmsoc291cmNlRmlsZSwgc3ltbGlua1RhcmdldCwgc2l6ZW9mKHN5bWxpbmtUYXJn
ZXQpIC0gMSk7CisgICAgICAgIGlmIChsZW5ndGhPZlRoZUxpbmsgPiAwKQorICAgICAgICAgICAg
c3ltbGlua1RhcmdldFtsZW5ndGhPZlRoZUxpbmtdID0gJ1wwJzsKKyAgICAgICAgY2hhciBzeW1s
aW5rVGFyZ2V0SW5SZWFsV29ybGRbUGF0aFNpemVdOworICAgICAgICBjaGFyIHN5bWxpbmtUYXJn
ZXRJblNhbmRib3hbUGF0aFNpemVdOworICAgICAgICAvLyBNYWtpbmcgZGlmZmVyZW5jZSBiZXR3
ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBwYXRocy4KKyAgICAgICAgaWYgKHN5bWxpbmtUYXJn
ZXRbMF0gPT0gJy8nKSB7CisgICAgICAgICAgICBpZiAoIXN0cmluZ0NvcHkoc3ltbGlua1Rhcmdl
dEluUmVhbFdvcmxkLCBzeW1saW5rVGFyZ2V0LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFzdHJpbmdDb25jYXQoc3ltbGlua1Rhcmdl
dEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgc3ltbGlua1RhcmdldCwgUGF0aFNpemUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmICghc3RyaW5nQ29uY2F0KHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCwgYmFzZURpcmVj
dG9yeU9mU291cmNlLCAiLyIsIHN5bWxpbmtUYXJnZXQsIFBhdGhTaXplKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIXN0cmluZ0NvbmNhdChzeW1saW5r
VGFyZ2V0SW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCAiLyIsIHN5bWxpbmtUYXJnZXRJblJl
YWxXb3JsZCwgUGF0aFNpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXN0cmluZ0NvcHkoc291cmNlRmlsZSwgc3ltbGlua1RhcmdldElu
UmVhbFdvcmxkLCBQYXRoU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghc3RyaW5nQ29weSh0YXJnZXRGaWxlLCBzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBQYXRo
U2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgYm9vbCBsaW5rRGlyZWN0b3J5KGNoYXIqIHNvdXJjZURpcmVjdG9yeVBh
dGgsIGNoYXIqIHRhcmdldERpcmVjdG9yeVBhdGgpCit7CisgICAgaWYgKCFjcmVhdGVEaXJlY3Rv
cnlQYXRoKHNvdXJjZURpcmVjdG9yeVBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
RElSKiBkaXJlY3RvcnkgPSBvcGVuZGlyKHNvdXJjZURpcmVjdG9yeVBhdGgpOworICAgIGlmICgh
ZGlyZWN0b3J5KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiBkaXJl
Y3RvcnkgJXM6ICVzXG4iLCBzb3VyY2VEaXJlY3RvcnlQYXRoLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RydWN0IGRpcmVudCAqZGlyZWN0
b3J5SW5mbyA9IDA7CisgICAgd2hpbGUgKChkaXJlY3RvcnlJbmZvID0gcmVhZGRpcihkaXJlY3Rv
cnkpKSkgeworICAgICAgICBjaGFyKiBuZXh0RmlsZUluRGlyZWN0b3J5ID0gZGlyZWN0b3J5SW5m
by0+ZF9uYW1lOworICAgICAgICAvLyBXZSBtdXN0IG5vdCBsaW5rICcuJyBhbmQgIi4uIiBpbnRv
IHRoZSBzYW5kYm94LgorICAgICAgICBpZiAoIXN0cm5jbXAobmV4dEZpbGVJbkRpcmVjdG9yeSwg
Ii4iLCBzdHJubGVuKG5leHRGaWxlSW5EaXJlY3RvcnksIFBhdGhTaXplKSkgfHwgIXN0cm5jbXAo
bmV4dEZpbGVJbkRpcmVjdG9yeSwgIi4uIiwgMikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgY2hhciBzb3VyY2VGaWxlW1BhdGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb25j
YXQoc291cmNlRmlsZSwgc291cmNlRGlyZWN0b3J5UGF0aCwgIi8iLCBuZXh0RmlsZUluRGlyZWN0
b3J5LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2hh
ciB0YXJnZXRGaWxlW1BhdGhTaXplXTsKKyAgICAgICAgaWYgKCFzdHJpbmdDb25jYXQodGFyZ2V0
RmlsZSwgdGFyZ2V0RGlyZWN0b3J5UGF0aCwgIi8iLCBuZXh0RmlsZUluRGlyZWN0b3J5LCBQYXRo
U2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYm9vbCBvayA9IHRy
dWU7CisgICAgICAgIGlmICgoZGlyZWN0b3J5SW5mby0+ZF90eXBlID09IERUX0RJUikpCisgICAg
ICAgICAgICBvayA9IGxpbmtEaXJlY3Rvcnkoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG9rID0gbGlua0ZpbGUoc291cmNlRmlsZSwgdGFyZ2V0Rmls
ZSk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGRp
cmVjdG9yaWVzIGJlY2F1c2UKKyAgICAvLyBpdCBjb3VsZCBoYXZlIG1lYW5pbmcgZS5nLiBpbiB0
aGUgaGFzaGdlbmVyYXRpb24gb2YgY2FjaGUgZmlsZXMuCisgICAgc3RydWN0IHN0YXQgZmlsZVN0
YXQ7CisgICAgaWYgKGxzdGF0KHNvdXJjZURpcmVjdG9yeVBhdGgsICZmaWxlU3RhdCkpIHsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBvYnRhaW5pbmcgaW5mb3JtYXRpb24gYWJv
dXQgZGlyZWN0b3J5ICglcyk6ICVzXG4iLCBzb3VyY2VEaXJlY3RvcnlQYXRoLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cnVjdCB1dGltYnVm
IHRpbWVzID0geyBmaWxlU3RhdC5zdF9hdGltZSwgZmlsZVN0YXQuc3RfbXRpbWUgfTsKKyAgICBp
ZiAodXRpbWUodGFyZ2V0RGlyZWN0b3J5UGF0aCwgJnRpbWVzKSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNvdWxkbid0IHNldCBiYWNrIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9m
ICVzOiAlc1xuIiwgdGFyZ2V0RGlyZWN0b3J5UGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJv
b2wgY29sbGVjdFJ1blRpbWVEZXBlbmRlbmNpZXMoKQoreworICAgIC8vIFRoZSBsaXN0IG9mIGVt
cGlyaWNhbGx5IGdhdGhlcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLgorICAgIGNvbnN0IGNoYXIq
IHJ1bnRpbWVEZXBlbmRlbmNpZXNbXSA9IHsKKyAgICAgICAgImxpYm5zc19kbnMuc28iLAorICAg
ICAgICAibGlicmVzb2x2LnNvIiwKKyAgICAgICAgImxpYnNzbC5zbyIsCisgICAgICAgICJsaWJj
cnlwdG8uc28iLAorICAgICAgICAwCisgICAgfTsKKworICAgIGNvbnN0IGNoYXIqKiBjdXJyZW50
UnVudGltZURlcGVuZGVuY3kgPSBydW50aW1lRGVwZW5kZW5jaWVzOworICAgIHdoaWxlICgqY3Vy
cmVudFJ1bnRpbWVEZXBlbmRlbmN5KSB7CisgICAgICAgIC8vIFRvIG9idGFpbiB0aGUgcGF0aCBv
ZiB0aGUgcnVudGltZSBkZXBlbmRlbmNpZXMgd2Ugb3BlbiB0aGVtIHdpdGggZGxvcGVuLgorICAg
ICAgICAvLyBXaXRoIHRoZSBoYW5kbGUgc3VwcGxpZWQgYnkgZGxvcGVuIHdlIGNhbiBvYnRhaW4g
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGR5bmFtaWNhbGx5CisgICAgICAgIC8vIGxpbmtlZCBsaWJy
YXJpZXMsIHNvIHRoZSBwYXRoIHdoZXJlIGFyZSB0aGV5IGluc3RhbGxlZC4KKyAgICAgICAgdm9p
ZCogaGFuZGxlID0gZGxvcGVuKCpjdXJyZW50UnVudGltZURlcGVuZGVuY3ksIFJUTERfTEFaWSk7
CisgICAgICAgIGlmICghaGFuZGxlKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNv
dWxkbid0IGdldCB0aGUgaGFuZGxlciBvZiAlczogJXNcbiIsICpjdXJyZW50UnVudGltZURlcGVu
ZGVuY3ksIGRsZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBzdHJ1Y3QgbGlua19tYXAqIGxpbmtNYXA7CisgICAgICAgIGlmIChkbGluZm8o
aGFuZGxlLCBSVExEX0RJX0xJTktNQVAsICZsaW5rTWFwKSkgeworICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgaW5mb3JtYXRpb24gYWJvdXQgJXM6ICVzXG4iLCAqY3Vy
cmVudFJ1bnRpbWVEZXBlbmRlbmN5LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghbGlua01hcCkgeworICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGxpbmttYXAgb2YgJXM6ICVzLlxu
IiwgKmN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgcGF0aE9mVGhlTGli
cmFyeVtQYXRoU2l6ZV07CisgICAgICAgIGNoYXIgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJveFtQ
YXRoU2l6ZV07CisgICAgICAgIGlmICghc3RyaW5nQ29weShwYXRoT2ZUaGVMaWJyYXJ5LCBsaW5r
TWFwLT5sX25hbWUsIFBhdGhTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFzdHJpbmdDb25jYXQocGF0aE9mVGhlTGlicmFyeUluU2FuZGJveCwgc2FuZGJveERp
cmVjdG9yeSwgcGF0aE9mVGhlTGlicmFyeSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoIWxpbmtGaWxlKHBhdGhPZlRoZUxpYnJhcnksIHBhdGhPZlRo
ZUxpYnJhcnlJblNhbmRib3gpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxpbmtp
bmcgcnVudGltZSBkZXBlbmRlbmN5OiAlcyBmYWlsZWQ6ICVzXG4iLCBwYXRoT2ZUaGVMaWJyYXJ5
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZGxjbG9zZShoYW5kbGUpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRsY2xvc2UoaGFuZGxlKTsK
KyAgICAgICAgKytjdXJyZW50UnVudGltZURlcGVuZGVuY3k7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgYm9vbCBzZXR1cFhhdXRob3JpdHlGb3JOb2JvZHlVc2VyKCkKK3sK
KyAgICAvLyBUbyBiZSBhYmxlIHVzZSBYIGluc2lkZSB0aGUgc2FuZGJveCBhbiAuWGF1dGhvcml0
eSBmaWxlIG11c3QgYmUgZXhpc3QgaW5zaWRlIGl0LAorICAgIC8vIG93bmVkIGJ5IHRoZSBzYW5k
Ym94dXNlci4gRnVydGhlcm1vcmUsIFhBVVRIT1JJVFkgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVz
dCBwb2ludCB0byBpdC4KKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworICAgIHNpemVfdCBzaXpl
OworICAgIHN0cnVjdCBwYXNzd2QqIHJlYWxVc2VyID0gZ2V0cHd1aWQoZ2V0Z2lkKCkpOworICAg
IGNoYXIgeGF1dGhvcml0eU9mUmVhbFVzZXJbUGF0aFNpemVdOworICAgIGNoYXIgeGF1dGhvcml0
eUluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoeGF1dGhvcml0eU9m
UmVhbFVzZXIsIHJlYWxVc2VyLT5wd19kaXIsICIvLlhhdXRob3JpdHkiLCBQYXRoU2l6ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXN0cmluZ0NvbmNhdCh4YXV0aG9yaXR5SW5T
YW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCB4YXV0aG9yaXR5T2ZSZWFsVXNlciwgUGF0aFNpemUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGSUxFKiBzb3VyY2UgPSBmb3Blbih4YXV0
aG9yaXR5T2ZSZWFsVXNlciwgInJiIik7CisgICAgaWYgKCFzb3VyY2UpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDb3VsZG4ndCBvcGVuICVzOiAlc1xuIiwgeGF1dGhvcml0eU9mUmVhbFVz
ZXIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBGSUxFKiBkZXN0ID0gZm9wZW4oeGF1dGhvcml0eUluU2FuZGJveCwgIndiIik7CisgICAgaWYg
KCFkZXN0KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiAlczogJXNc
biIsIHhhdXRob3JpdHlJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBjb3B5IHRoZSAuWGF1dGhvcml0eSBmaWxlIG9m
IHRoZSByZWFsIHVzZXIgKGluc3RlYWQgb2YgbGlua2luZykgYmVjYXVzZSBub2JvZHkgdXNlcgor
ICAgIC8vIHNob3VsZCBvd24gaXQgYnV0IHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBwZXJt
aXNzaW9ucyBvZiB0aGUgb3JpZ2luYWwgZmlsZS4KKyAgICB3aGlsZSAoKHNpemUgPSBmcmVhZChi
dWZmZXIsIDEsIEJVRlNJWiwgc291cmNlKSkpCisgICAgICAgIGZ3cml0ZShidWZmZXIsIDEsIHNp
emUsIGRlc3QpOworCisgICAgZmNsb3NlKHNvdXJjZSk7CisgICAgZmNsb3NlKGRlc3QpOworCisg
ICAgaWYgKGNob3duKHhhdXRob3JpdHlJblNhbmRib3gsIHNhbmRib3hVc2VyVWlkLCBzYW5kYm94
VXNlckdpZCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaG93bmluZyAuWGF1dGhvcml0
eSAoJXMpIGZhaWxlZDogJXMuXG4iLCB4YXV0aG9yaXR5SW5TYW5kYm94LCBzdHJlcnJvcihlcnJu
bykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzZXRlbnYoIlhBVVRI
T1JJVFkiLCB4YXV0aG9yaXR5SW5TYW5kYm94LCAxKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNvdWxkbid0IHNldCB0aGUgWEFVVEhPUklUWSBlbnZyaW9ubWVudCB2YXJpYWJsZTogJXNc
biIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGluaXRTYW5kYm94KCkKK3sKKyAgICAvLyBD
cmVhdGUgdGhlIHNhbmRib3ggZGlyZWN0b3J5LiBXZSBvbmx5IG5lZWQgdG8gc3RlcCBpbnRvIGl0
LCBzbworICAgIC8vIHRoZSBleGVjdXRhYmxlIHBlcm1pc3Npb24gaXMgbmVlZGVkIG9ubHkuCisg
ICAgaWYgKG1rZGlyKHNhbmRib3hEaXJlY3RvcnksIDAxMDApKSB7CisgICAgICAgIGlmIChlcnJu
byAhPSBFRVhJU1QpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3Jl
YXRlIHRoZSBzYW5kYm94IGRpcmVjdG9yeTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWNyZWF0
ZURldmljZUZpbGVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbW91bnRG
aWxlU3lzdGVtcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBIYXJkIGxpbmsg
Y2FjaGUgYW5kIGZvbnQgZGlyZWN0b3JpZXMgaW50byB0aGUgc2FuZGJveCBlbnZpcm9ubWVudC4K
KyAgICBzdHJ1Y3QgcGFzc3dkKiB1c2VySW5mbyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKyAgICBj
b25zdCBjaGFyKiBob21lID0gdXNlckluZm8tPnB3X2RpcjsKKyAgICBjaGFyIGxvY2FsRGlyW1Bh
dGhTaXplXTsKKyAgICBpZiAoIXN0cmluZ0NvbmNhdChsb2NhbERpciwgaG9tZSwgIi8ubG9jYWwv
c2hhcmUvTm9raWEvIiwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2hh
ciBjYWNoZURpcltQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoY2FjaGVEaXIsIGhv
bWUsICIvLmNhY2hlL05va2lhLyIsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGNoYXIgZm9udERpcltQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoZm9udERp
ciwgaG9tZSwgIi8uZm9udGNvbmZpZy8iLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBjb25zdCBjaGFyKiBsaW5rZWREaXJlY3Rvcmllc1tdID0geworICAgICAgICBjYWNo
ZURpciwKKyAgICAgICAgZm9udERpciwKKyAgICAgICAgbG9jYWxEaXIsCisgICAgICAgICIvZXRj
L2ZvbnRzLyIsCisgICAgICAgICIvZXRjL3NzbC9jZXJ0cy8iLAorICAgICAgICAiL3Zhci9jYWNo
ZS9mb250Y29uZmlnLyIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzLyIsCisgICAgICAgIDAK
KyAgICB9OworCisgICAgY29uc3QgY2hhcioqIGN1cnJlbnRMaW5rZWREaXJlY3RvcnkgPSBsaW5r
ZWREaXJlY3RvcmllczsKKyAgICB3aGlsZSAoKmN1cnJlbnRMaW5rZWREaXJlY3RvcnkpIHsKKyAg
ICAgICAgY2hhciBsaW5rZWREaXJlY3RvcnlJblNhbmRib3hbUGF0aFNpemVdOworICAgICAgICBp
ZiAoIXN0cmluZ0NvbmNhdChsaW5rZWREaXJlY3RvcnlJblNhbmRib3gsIHNhbmRib3hEaXJlY3Rv
cnksICpjdXJyZW50TGlua2VkRGlyZWN0b3J5LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghbGlua0RpcmVjdG9yeShjb25zdF9jYXN0PGNoYXIqPigq
Y3VycmVudExpbmtlZERpcmVjdG9yeSksIGxpbmtlZERpcmVjdG9yeUluU2FuZGJveCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsrY3VycmVudExpbmtlZERpcmVjdG9yeTsK
KyAgICB9CisKKyAgICBpZiAoIXNldHVwWGF1dGhvcml0eUZvck5vYm9keVVzZXIoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNvbGxlY3RSdW5UaW1lRGVwZW5kZW5jaWVz
KCk7Cit9CisKK3N0YXRpYyBib29sIHJlc3RyaWN0Q2FwYWJpbGl0aWVzKCkKK3sKKyAgICAvLyBD
YXBhYmlsaXRpZXMgd2UgbmVlZC4KKyAgICBjYXBfdmFsdWVfdCBjYXBhYmlsdHlMaXN0WzRdOwor
ICAgIGNhcGFiaWx0eUxpc3RbMF0gPSBDQVBfU0VUVUlEOworICAgIGNhcGFiaWx0eUxpc3RbMV0g
PSBDQVBfU0VUR0lEOworICAgIGNhcGFiaWx0eUxpc3RbMl0gPSBDQVBfU1lTX0FETUlOOyAvLyBD
bG9uaW5nIHdpdGggQ0xPTkVfTkVXUElEIGZsYWcgbGF0ZXIgd2lsbCBuZWVkIHRoaXMgY2FwYWJp
bGl0eS4KKyAgICBjYXBhYmlsdHlMaXN0WzNdID0gQ0FQX1NZU19DSFJPT1Q7CisKKyAgICAvLyBS
ZWR1Y2UgY2FwYWJpbGl0aWVzIHRvIHdoYXQgd2UgbmVlZC4KKyAgICAvLyBBbHRob3VnaCB3ZSBz
dGlsbCBoYXZlIHJvb3QgZXVpZCBhbmQgd2Uga2VlcCByb290IGVxdWl2YWxlbnQgY2FwYWJpbGl0
aWVzLAorICAgIC8vIHdlIHJlbW92ZWQgKD0gZGlkbid0IGFkZCkgQ0FQX1NZU19SRVNTT1VSQ0Ug
Y2FwYWJpbGl0ZXMgYW5kIHRoaXMgcmVzdWx0ZWQgdGhhdAorICAgIC8vIHRoZSBzZXRybGltaXQg
ZnVuY3Rpb24gd2l0aCBSTElNSVRfTk9GSUxFIHdpbGwgYmUgZWZmZWN0aXZlIGxhdGVyLgorICAg
IGlmICghc2V0Q2FwYWJpbGl0aWVzKGNhcGFiaWx0eUxpc3QsIHNpemVvZihjYXBhYmlsdHlMaXN0
KSAvIHNpemVvZihjYXBhYmlsdHlMaXN0WzBdKSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDb3VsZCBub3QgYWRqdXN0IHByb2Nlc3MgY2FwYWJpbGl0aWVzOiAlcy5cbiIsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIG1vdmVUb05ld1BpZE5hbWVzcGFjZSgpCit7CisgICAgLy8gQ0xP
TkVfTkVXUElEIGFuZCBDTE9ORV9GUyBzaG91bGQgYmUgaW4gdGhhdCBvcmRlci4KKyAgICAvLyBX
ZSBjYW4ndCBzaGFyZSBGUyBhY2Nyb3NzIG5hbWVzcGFjZXMuCisgICAgcGlkX3QgcGlkLCBleHBl
Y3RlZFBpZDsKKyAgICBpbnQgc3RhdHVzOworICAgIHBpZCA9IHN5c2NhbGwoU1lTX2Nsb25lLCBD
TE9ORV9ORVdQSUQgfCBTSUdDSExELCAwLCAwLCAwKTsKKworICAgIHN3aXRjaCAocGlkKSB7Cisg
ICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9uaW5nIGlzIGZhaWxlZDog
JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNl
IDA6CisgICAgICAgIC8vIENoaWxkIHNob3VsZCBydW4gd2l0aCBwaWQgbnVtYmVyIDEgaW4gdGhl
IG5ldyBuYW1lc3BhY2UuCisgICAgICAgIGlmIChnZXRwaWQoKSAhPSAxKSB7CisgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNyZWF0ZSBhIG5ldyBQSUQgbmFtZXNwYWNlLlxu
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gV2UgYXJlIHdhaXRpbmcgZm9yIG91ciBj
aGlsZCAoV2ViUHJvY2VzcykuCisgICAgICAgIC8vIElmIHRoaXMgd2FpdCBpcyBzdWNjZXNzZnVs
IGl0IG1lYW5zIHRoYXQgb3VyIGNoaWxkIGlzIHRlcm1pbmF0ZWQuCisgICAgICAgIGV4cGVjdGVk
UGlkID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIDApOworICAgICAgICBpZiAoZXhwZWN0ZWRQaWQg
IT0gcGlkKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhaXRwaWQgaXMgZmFpbGVk
IHdpdGg6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdChFWElUX0ZB
SUxVUkUpOworICAgICAgICB9CisgICAgICAgIGlmIChXSUZFWElURUQoc3RhdHVzKSkKKyAgICAg
ICAgICAgIGV4aXQoV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisgICAgICAgIGV4aXQoRVhJVF9TVUND
RVNTKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBydW4oaW50
IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSkKK3sKKyAgICBzdHJ1Y3QgcGFzc3dkKiB1c2VySW5m
byA9IGdldHB3dWlkKGdldHVpZCgpKTsKKyAgICBpZiAoIXVzZXJJbmZvKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZ2V0IHRoZSBjdXJyZW50IHVzZXI6ICVzLlxuIiwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0
cmluZ0NvbmNhdChzYW5kYm94RGlyZWN0b3J5LCB1c2VySW5mby0+cHdfZGlyLCAiLy53azItc2Fu
ZGJveCIsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3VycmVu
dGx5IHdlIHVzZSBub2JvZHkgdXNlciBhcyB0aGUgc2FuZGJveCB1c2VyIGFuZCBmYWxsYmFjayB0
byB0aGUgcmVhbCB1c2VyCisgICAgLy8gaWYgaXQncyBmYWlsZWQuIChXZSBjb3VsZCBleHRlbmQg
dGhpcyBpbiB0aGUgZnV0dXJlIHdpdGggYSBzcGVjaWZpYyByZXN0cmljdGVkIHVzZXIuKQorICAg
IHN0cnVjdCBwYXNzd2QqIG5vYm9keVVzZXIgPSBnZXRwd25hbSgibm9ib2R5Iik7CisgICAgaWYg
KG5vYm9keVVzZXIpIHsKKyAgICAgICAgc2FuZGJveFVzZXJVaWQgPSBub2JvZHlVc2VyLT5wd191
aWQ7CisgICAgICAgIHNhbmRib3hVc2VyR2lkID0gbm9ib2R5VXNlci0+cHdfZ2lkOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHNhbmRib3hVc2VyVWlkID0gZ2V0dWlkKCk7CisgICAgICAgIHNhbmRi
b3hVc2VyR2lkID0gZ2V0Z2lkKCk7CisgICAgfQorCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgdGhy
ZWUgcGFyYW1ldGVyczoKKyAgICAvLyBwYXRoX29mX3RoaXNfYmluYXJ5IHBhdGhfb2ZfdGhlX3dl
YnByb2Nlc3Mgc29ja2V0X3RvX2NvbW11bmljYXRlX3dpdGhfdWlwcm9jZXNzCisgICAgaWYgKGFy
Z2MgIT0gMykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlN0YXJ0aW5nIFNhbmRib3hQcm9j
ZXNzIHJlcXVpcmVzIDMgcGFyYW1ldGVycyFcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gU2FuZGJveFByb2Nlc3Mgc2hvdWxkIGJlIHJ1biB3aXRoIHN1aWQgZmxh
ZyAuLi4KKyAgICBpZiAoZ2V0ZXVpZCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGhl
IHNhbmRib3ggaXMgbm90IHNldGV1aWQgcm9vdC5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gLi4uIGJ1dCBub3QgYXMgcm9vdCAobm90IHdpdGggc3VkbykuCisg
ICAgaWYgKCFnZXR1aWQoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBzYW5kYm94
IGlzIG5vdCBkZXNpZ25lZCB0byBiZSBydW4gYnkgcm9vdC5cbiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbml0U2FuZGJveCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIXJlc3RyaWN0Q2FwYWJpbGl0aWVzKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIFdlIG1vdmUgb3Vyc2VsZiBhbmQgb3VyIGNoaWxkcmVuIGludG8g
YSBuZXcgUElEIG5hbWVzcGFjZSwKKyAgICAvLyB3aGVyZSBwcm9jZXNzIElEcyBzdGFydCBmcm9t
IDAgYWdhaW4uCisgICAgaWYgKCFtb3ZlVG9OZXdQaWROYW1lc3BhY2UoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gU3RhcnRpbmcgYSBoZWxwZXIgd2hhdCB3aWxsIHdhaXRpbmcg
Zm9yIHRoZSAiY2hyb290bWUiIG1lc3NhZ2UgZnJvbSBXZWJQcm9jZXNzLgorICAgIGlmICghcHJl
cGFyZUFuZFN0YXJ0Q2hyb290SGVscGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIFdlIGRvbid0IG5lZWQgYW55IHNwZWNpYWwgcHJpdmlsZWdlcyBhbnltb3JlLgorICAgIGlm
ICghZHJvcFByaXZpbGVnZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2Fu
aXR5IGNoZWNrOiBpZiBvdXIgZWZmZWN0aXZlIG9yIHJlYWwgdWlkL2dpZCBpcyBzdGlsbCAwIChy
b290KSBvcgorICAgIC8vIHdlIGNhbiBzZXQgYW55IG9mIHRoZW0gdG8gMCwgdGhlbiB0aGUgZHJv
cHBpbmcgb2YgcHJpdmlsZWdlcyBpcyBmYWlsZWQuCisgICAgLy8gV2UgZW5zdXJlIGhlcmUgdGhh
dCB3ZSBjYW5ub3Qgc2V0IHJvb3QgaWQgYWZ0ZXIgaGVyZS4KKyAgICBpZiAoIWdldGV1aWQoKSB8
fCAhZ2V0ZWdpZCgpIHx8ICFzZXR1aWQoMCkgfHwgIXNldGdpZCgwKSkgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkRyb3BwaW5nIHByaXZpbGVnZXMgZmFpbGVkIVxuIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgV2ViUHJvY2Vzcy4KKyAgICBl
eGVjbChhcmd2WzFdLCBhcmd2WzFdLCBhcmd2WzJdLCByZWludGVycHJldF9jYXN0PGNoYXIqPigw
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICpjb25z
dCBhcmd2W10pCit7CisgICAgcmV0dXJuIHJ1bihhcmdjLCBhcmd2KSA/IDAgOiAxOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRi
b3hFbnZpcm9ubWVudExpbnV4LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJv
eFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4wNjA3N2UzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKQEAg
LTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6
ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6
ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU2FuZGJveEVudmlyb25t
ZW50TGludXhfaAorI2RlZmluZSBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisKKyNpZm5kZWYg
Q0xPTkVfTkVXUElECisjZGVmaW5lIENMT05FX05FV1BJRCAgMHgyMDAwMDAwMAorI2VuZGlmCisK
KyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgorCisjZGVm
aW5lIFNCWF9EICJTQlhfRCIKKyNkZWZpbmUgU0JYX0hFTFBFUl9QSUQgIlNCWF9IRUxQRVJfUElE
IgorCisjZGVmaW5lIE1TR19DSFJPT1RNRSAnQycKKyNkZWZpbmUgTVNHX0NIUk9PVEVEICdPJwor
CisjZW5kaWYgLy8gU2FuZGJveEVudmlyb25tZW50TGludXhfaAorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3Bl
cmF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjY2M3MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJv
Y2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgIlN0cmluZ09wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2Jvb2wgc3RyaW5nQ29weShjaGFyKiBkZXN0aW5hdGlv
biwgY29uc3QgY2hhciogc291cmNlLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3RoID0g
c3Rybmxlbihzb3VyY2UsIG1heFNpemUpOworICAgIGlmIChsZW5ndGggPiBtYXhTaXplIC0gMSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBidWZmZXIgaXMgdG9vIHNtYWxsOiAl
ZCAlcy5cbiIsIG1heFNpemUsIHNvdXJjZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIGxlbmd0aCArIDEpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIHN0cmluZ0NvcHkoY2hhciogZGVzdGluYXRpb24sIGNvbnN0IGNo
YXIqIHNvdXJjZSwgY29uc3QgaW50IGxlbmd0aCwgaW50IG1heFNpemUpCit7CisgICAgaWYgKGxl
bmd0aCA+IG1heFNpemUgLSAxIHx8IGxlbmd0aCA+IHN0cm5sZW4oc291cmNlLCBtYXhTaXplKSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBidWZmZXIgaXMgdG9vIHNtYWxsOiAl
ZCAlcy5cbiIsIG1heFNpemUsIHNvdXJjZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIGxlbmd0aCk7CisgICAgZGVzdGluYXRp
b25bbGVuZ3RoXSA9ICdcMCc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3RyaW5nQ29u
Y2F0KGNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBjaGFyKiBzb3VyY2UxLCBjb25zdCBjaGFyKiBz
b3VyY2UyLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3RoMSA9IHN0cm5sZW4oc291cmNl
MSwgbWF4U2l6ZSk7CisgICAgaW50IGxlbmd0aDIgPSBzdHJubGVuKHNvdXJjZTIsIG1heFNpemUp
OworICAgIGlmIChsZW5ndGgxICsgbGVuZ3RoMiA+IG1heFNpemUgLSAxKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRXJyb3I6IGJ1ZmZlciBpcyB0b28gc21hbGw6ICVkICVkICVzICVzLlxu
IiwgbWF4U2l6ZSwgbGVuZ3RoMSArIGxlbmd0aDIsIHNvdXJjZTEsIHNvdXJjZTIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlMSwg
bGVuZ3RoMSk7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSwgc291cmNlMiwgbGVu
Z3RoMiArIDEpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHN0cmluZ0NvbmNhdChjaGFy
KiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlMSwgY29uc3QgY2hhciogc291cmNlMiwg
Y29uc3QgY2hhciogc291cmNlMywgaW50IG1heFNpemUpCit7CisgICAgaW50IGxlbmd0aDEgPSBz
dHJubGVuKHNvdXJjZTEsIG1heFNpemUpOworICAgIGludCBsZW5ndGgyID0gc3Rybmxlbihzb3Vy
Y2UyLCBtYXhTaXplKTsKKyAgICBpbnQgbGVuZ3RoMyA9IHN0cm5sZW4oc291cmNlMywgbWF4U2l6
ZSk7CisgICAgaWYgKGxlbmd0aDEgKyBsZW5ndGgyICsgbGVuZ3RoMyA+IG1heFNpemUgLSAxKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGJ1ZmZlciBpcyB0b28gc21hbGw6ICVk
ICVkICVzICVzICVzLlxuIiwgbWF4U2l6ZSwgbGVuZ3RoMSArIGxlbmd0aDIgKyBsZW5ndGgzLCBz
b3VyY2UxLCBzb3VyY2UyLCBzb3VyY2UzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZTEsIGxlbmd0aDEpOworICAgIG1lbWNweShk
ZXN0aW5hdGlvbiArIGxlbmd0aDEsIHNvdXJjZTIsIGxlbmd0aDIpOworICAgIG1lbWNweShkZXN0
aW5hdGlvbiArIGxlbmd0aDEgKyBsZW5ndGgyLCBzb3VyY2UzLCBsZW5ndGgzKTsKKyAgICBkZXN0
aW5hdGlvbltsZW5ndGgxICsgbGVuZ3RoMiArIGxlbmd0aDNdID0gJ1wwJzsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBzdHJpbmdBcHBlbmQoY2hhciogZGVzdGluYXRpb24sIGNvbnN0IGNo
YXIqIHNvdXJjZSwgaW50IG1heFNpemUpCit7CisgICAgaW50IHNvdXJjZUxlbmd0aCA9IHN0cm5s
ZW4oc291cmNlLCBtYXhTaXplKTsKKyAgICBpbnQgZGVzdGluYXRpb25MZW5ndGggPSBzdHJubGVu
KGRlc3RpbmF0aW9uLCBtYXhTaXplKTsKKyAgICBpZiAoc291cmNlTGVuZ3RoICsgZGVzdGluYXRp
b25MZW5ndGggPiBtYXhTaXplIC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9y
OiBidWZmZXIgaXMgdG9vIHNtYWxsOiAlZCAlcy5cbiIsIG1heFNpemUsIHNvdXJjZSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgZGVzdGlu
YXRpb25MZW5ndGgsIHNvdXJjZSwgc291cmNlTGVuZ3RoICsgMSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nl
c3MvU3RyaW5nT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRi
b3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42NTgzNzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlvbnMuaApAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTdHJpbmdPcGVyYXRpb25zX2gKKyNkZWZpbmUg
U3RyaW5nT3BlcmF0aW9uc19oCisKKy8vIFNlY3VyZSBzdHJpbmcgb3BlcmF0aW9ucy4KK2Jvb2wg
c3RyaW5nQ29weShjaGFyKiwgY29uc3QgY2hhciosIGludCk7Citib29sIHN0cmluZ0NvcHkoY2hh
ciosIGNvbnN0IGNoYXIqLCBjb25zdCBpbnQsIGludCk7Citib29sIHN0cmluZ0NvbmNhdChjaGFy
KiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBpbnQpOworYm9vbCBzdHJpbmdDb25jYXQoY2hh
ciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGludCk7Citib29sIHN0
cmluZ0FwcGVuZChjaGFyKiwgY29uc3QgY2hhciosIGludCk7CisKKyNlbmRpZiAvLyBTdHJpbmdP
cGVyYXRpb25zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1
bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4IDBiNmVlMWIuLjVjMjE5YWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1
bmNoZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1By
b2Nlc3NMYXVuY2hlclF0LmNwcApAQCAtNjIsNiArNjIsMTAgQEAKICNpbmNsdWRlIDx3aW5kb3dz
Lmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8
UUNvcmVBcHBsaWNhdGlvbj4KKyNlbmRpZgorCiAjaWYgT1MoREFSV0lOKQogI2luY2x1ZGUgPG1h
Y2gvbWFjaF9pbml0Lmg+CiAjaW5jbHVkZSA8c2VydmVycy9ib290c3RyYXAuaD4KQEAgLTE2Nywz
NyArMTcxLDQ5IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKICAgICBj
b21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKICNlbmRpZgogCi0gICAg
UVByb2Nlc3MqIHdlYlByb2Nlc3MgPSBuZXcgUXRXZWJQcm9jZXNzKCk7Ci0gICAgd2ViUHJvY2Vz
cy0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFubmVscyk7Ci0g
ICAgd2ViUHJvY2Vzcy0+c3RhcnQoY29tbWFuZExpbmUpOworICAgIFFQcm9jZXNzKiB3ZWJQcm9j
ZXNzT3JTVUlESGVscGVyOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXIgPSBuZXcgUXRXZWJQ
cm9jZXNzKCk7CisgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c2V0UHJvY2Vzc0NoYW5uZWxN
b2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFubmVscyk7CisKKyNpZiBFTkFCTEUoU1VJRF9TQU5E
Qk9YX0xJTlVYKQorICAgIGlmIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPT0gV2ViUHJv
Y2VzcykgeworICAgICAgICBRU3RyaW5nIHNhbmRib3hDb21tYW5kTGluZSA9IFFMYXRpbjFTdHJp
bmcoIiUxICUyICUzIik7CisgICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21t
YW5kTGluZS5hcmcoUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQYXRoKCkgKyBRTGF0
aW4xU3RyaW5nKCIvU1VJRFNhbmRib3hIZWxwZXIiKSk7CisgICAgICAgIHNhbmRib3hDb21tYW5k
TGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoZXhlY3V0YWJsZVBhdGhPZldlYlByb2Nlc3Mo
KSk7CisgICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmco
c29ja2V0c1swXSk7CisKKyAgICAgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c3RhcnQoc2Fu
ZGJveENvbW1hbmRMaW5lKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2ViUHJvY2Vzc09yU1VJREhl
bHBlci0+c3RhcnQoY29tbWFuZExpbmUpOworI2Vsc2UKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVs
cGVyLT5zdGFydChjb21tYW5kTGluZSk7CisjZW5kaWYKIAogI2lmIE9TKFVOSVgpICYmICFPUyhE
QVJXSU4pCiAgICAgLy8gRG9uJ3QgZXhwb3NlIHRoZSB3ZWIgc29ja2V0IHRvIHBvc3NpYmxlIGZ1
dHVyZSB3ZWIgcHJvY2Vzc2VzCiAgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNbMF0sIEZfU0VURkQs
IEZEX0NMT0VYRUMpID09IC0xKSB7CiAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBkZWxldGUgd2ViUHJv
Y2VzczsKKyAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoIXdlYlBy
b2Nlc3MtPndhaXRGb3JTdGFydGVkKCkpIHsKKyAgICBpZiAoIXdlYlByb2Nlc3NPclNVSURIZWxw
ZXItPndhaXRGb3JTdGFydGVkKCkpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkZhaWxlZCB0byBz
dGFydCIgPDwgY29tbWFuZExpbmU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2lm
IE9TKERBUldJTikKICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYo
KSwgY29ubmVjdG9yKTsKICAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxm
KCksIGNvbm5lY3RvciwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKICNlbmRpZgotICAg
ICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURI
ZWxwZXI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KICNpZiBPUyhVTklYKQotICAgIHNldHBy
aW9yaXR5KFBSSU9fUFJPQ0VTUywgd2ViUHJvY2Vzcy0+cGlkKCksIDEwKTsKKyAgICBzZXRwcmlv
cml0eShQUklPX1BST0NFU1MsIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnBpZCgpLCAxMCk7CiAj
ZW5kaWYKLQotICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmV2ViS2l0OjpQcm9j
ZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMsIHdlYlByb2Nlc3Ms
IGNvbm5lY3RvcikpOworICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmV2ViS2l0
OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMsIHdlYlBy
b2Nlc3NPclNVSURIZWxwZXIsIGNvbm5lY3RvcikpOwogfQogCiB2b2lkIFByb2Nlc3NMYXVuY2hl
cjo6dGVybWluYXRlUHJvY2VzcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDgwY2IyZmIuLjY1NTJiYmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJpCkBAIC0xNSw2ICsxNSw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAk
JFNPVVJDRV9ESVIvUGxhdGZvcm0vQ29yZUlQQyBcCiAgICAgJCRTT1VSQ0VfRElSL1BsYXRmb3Jt
L3F0IFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkIFwKKyAgICAkJFNPVVJDRV9ESVIvU2hhcmVk
L2xpbnV4L1NhbmRib3hQcm9jZXNzIFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL0FQSS9jIFwK
ICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAgICQkU09V
UkNFX0RJUi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQgXApAQCAtNjIsNyArNjMsNyBAQCBJTkNMVURF
UEFUSCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZSBcCiAgICAgJCRT
T1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIFwKICAgICAk
JFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9xdCBcCi0gICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nl
c3MKKyAgICAkJFNPVVJDRV9ESVIvUGx1Z2luUHJvY2VzcyBcCiAKICMgVGhlIFdlYktpdDIgUXQg
QVBJcyBkZXBlbmQgb24gcXdlYmtpdGdsb2JhbC5oLCB3aGljaCBsaXZlcyBpbiBXZWJLaXQKIElO
Q0xVREVQQVRIICs9ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktpdC9xdC9BcGkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy5wcm8KaW5kZXggZTQxODY5NS4uNjM5M2FkZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5w
cm8KQEAgLTExLDYgKzExLDEwIEBAIERFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0vYmluCiAK
IFNPVVJDRVMgKz0gcXQvTWFpblF0LmNwcAogCitJTkNMVURFUEFUSCA9IFwKKyAgICAkJFBXRC9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvIFwKKyAgICAkJElOQ0xVREVQQVRICisKIFFUICs9
IG5ldHdvcmsgd2Via2l0d2lkZ2V0cwogbWFjeDogUVQgKz0geG1sCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCmluZGV4IDE4ZjMwMzk0
Li4wYzAyOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlBy
b2Nlc3NNYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJv
Y2Vzc01haW5RdC5jcHAKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4K
ICNpbmNsdWRlIDxRVXJsPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUg
PGVycm5vLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5j
bHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNjAsNiArNjIsMTAgQEAKIGV4dGVybiAiQyIg
a2Vybl9yZXR1cm5fdCBib290c3RyYXBfbG9va191cDIobWFjaF9wb3J0X3QsIGNvbnN0IG5hbWVf
dCwgbWFjaF9wb3J0X3QqLCBwaWRfdCwgdWludDY0X3QpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
U1VJRF9TQU5EQk9YX0xJTlVYKQorI2luY2x1ZGUgIlNhbmRib3hFbnZpcm9ubWVudExpbnV4Lmgi
CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewpAQCAtMTQyLDE4ICsxNDgsNzcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVByb3h5KCkKICAg
ICBRTmV0d29ya1Byb3h5RmFjdG9yeTo6c2V0VXNlU3lzdGVtQ29uZmlndXJhdGlvbih0cnVlKTsK
IH0KIAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCitwaWRfdCBjaHJvb3RNZSgpCit7
CisgICAgbG9uZyBpbnQgZmQgPSAtMTsKKyAgICBjaGFyKiBzYW5kYm94U29ja2V0RGVzY3JpcHRv
cjsKKyAgICBjaGFyKiBoZWxwZXJQaWQ7CisgICAgY2hhciBzYW5kYm94TWVNc2cgPSBNU0dfQ0hS
T09UTUU7CisgICAgc3NpemVfdCBjbnQ7CisgICAgcGlkX3QgaGVscGVyID0gLTE7CisKKyAgICAv
LyBHZXQgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgc29ja2V0cGFpci4KKyAgICBzYW5kYm94
U29ja2V0RGVzY3JpcHRvciA9IGdldGVudihTQlhfRCk7CisgICAgaWYgKCFzYW5kYm94U29ja2V0
RGVzY3JpcHRvcikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZXJybm8gPSAwOworICAgIGZk
ID0gc3RydG9sKHNhbmRib3hTb2NrZXREZXNjcmlwdG9yLCAoY2hhciAqKikgMCwgMTApOworICAg
IGlmIChlcnJubyB8fCAoZmQgPT0gLTEpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvLyBH
ZXQgdGhlIFBJRCBvZiB0aGUgc2V0dWlkIGhlbHBlci4KKyAgICBoZWxwZXJQaWQgPSBnZXRlbnYo
U0JYX0hFTFBFUl9QSUQpOworCisgICAgLy8gSWYgbm8gUElEIGlzIGF2YWlsYWJsZSwgdGhlIGRl
ZmF1bHQgb2YgLTEgd2lsbCBkby4KKyAgICBpZiAoaGVscGVyUGlkKSB7CisgICAgICAgIGVycm5v
ID0gMDsKKyAgICAgICAgaGVscGVyID0gc3RydG9sKGhlbHBlclBpZCwgKGNoYXIgKiopIDAsIDEw
KTsKKyAgICAgICAgaWYgKGVycm5vIHx8IChoZWxwZXIgPT0gLTEpKQorICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgIH0KKyAgICAvLyBTZW5kIHRoZSBjaHJvb3RNZSBtZXNzYWdlIHRvIHRoZSBo
ZWxwZXIuCisgICAgY250ID0gd3JpdGUoZmQsICZzYW5kYm94TWVNc2csIDEpOworICAgIGlmIChj
bnQgIT0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNocm9vdE1lIG1zZyBmYWlsZWQg
dG8gd3JpdGU6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKyAgICAvLyBSZWFkIHRoZSBhY2tub3dsZWRnZW1lbnQgbWVzc2FnZSBmcm9tIHRoZSBo
ZWxwZXIuCisgICAgY250ID0gcmVhZChmZCwgJnNhbmRib3hNZU1zZywgMSk7CisgICAgaWYgKChj
bnQgIT0gMSkgfHwgKHNhbmRib3hNZU1zZyAhPSBNU0dfQ0hST09URUQpKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcmVhZCB0aGUgY29uZmlybWF0aW9uIG1lc3NhZ2UuXG4i
KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjbG9zZShmZCk7CisgICAgLy8gV2Fp
dCBmb3IgdGhlIGhlbHBlciBwcm9jZXNzLgorICAgIGludCB3YWl0ZWRQaWQgPSB3YWl0cGlkKGhl
bHBlciwgMCwgMCk7CisgICAgaWYgKHdhaXRlZFBpZCAhPSAtMSAmJiAoKGhlbHBlciA9PSAtMSkg
fHwgKHdhaXRlZFBpZCA9PSBoZWxwZXIpKSkKKyAgICAgICAgcmV0dXJuIHdhaXRlZFBpZDsKKyAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHdhaXQgZm9yIHRoZSBoZWxwZXIgcHJvY2Vzczog
JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuIC0xOworfQorI2VuZGlmCisKIFFf
REVDTF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxpY2F0aW9uKiBhcHApCiB7
Ci0gICAgaW5pdGlhbGl6ZVByb3h5KCk7CisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkK
KyAgICBwaWRfdCBoZWxwZXI7CisgICAgaGVscGVyID0gY2hyb290TWUoKTsKIAorICAgIGlmICho
ZWxwZXIgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJBc2tpbmcgZm9yIGNocm9v
dCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorICAgIGlu
aXRpYWxpemVQcm94eSgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdU
Rjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1
bkxvb3AoKTsKLSAgICAKKwogI2lmIFVTRShRVEtJVCkKICAgICBJbml0V2ViQ29yZVN5c3RlbUlu
dGVyZmFjZUZvcldLMigpOwogI2VuZGlmCi0KICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24u
CiAgICAgaWYgKGFwcC0+YXJndW1lbnRzKCkuc2l6ZSgpIDw9IDEpIHsKICAgICAgICAgcURlYnVn
KCkgPDwgIkVycm9yOiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiI7CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggY2M1ZjBkZS4uMThjNzM4ZCAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMTIwLDYgKzEyMCw3IEBAIG15ICgK
ICAgICAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAgICAgJHNxbERhdGFiYXNlU3VwcG9ydCwKICAg
ICAkc3R5bGVTY29wZWRTdXBwb3J0LAorICAgICRzdWlkTGludXhTYW5kYm94LAogICAgICRzdmdE
T01PYmpDQmluZGluZ3NTdXBwb3J0LAogICAgICRzdmdGb250c1N1cHBvcnQsCiAgICAgJHN2Z1N1
cHBvcnQsCkBAIC0zNzUsNiArMzc2LDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9u
ID0+ICJzdHlsZS1zY29wZWQiLCBkZXNjID0+ICJUb2dnbGUgU3R5bGUgU2NvcGVkIHN1cHBvcnQi
LAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1RZTEVfU0NPUEVEIiwgZGVmYXVsdCA9PiBpc0Js
YWNrQmVycnkoKSwgdmFsdWUgPT4gXCRzdHlsZVNjb3BlZFN1cHBvcnQgfSwKIAorICAgIHsgb3B0
aW9uID0+ICJzdWlkLWxpbnV4LXNhbmRib3giLCBkZXNjID0+ICJUb2dnbGUgc3VpZCBzYW5kYm94
IGZvciBsaW51eCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVUlEX1NBTkRCT1hfTElOVVgi
LCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkc3VpZExpbnV4U2FuZGJveCB9LAorCiAgICAgeyBv
cHRpb24gPT4gInN2ZyIsIGRlc2MgPT4gIlRvZ2dsZSBTVkcgc3VwcG9ydCIsCiAgICAgICBkZWZp
bmUgPT4gIkVOQUJMRV9TVkciLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkc3ZnU3VwcG9ydCB9
LAogCi0tIAoxLjcuOS41Cgo=
</data>
<flag name="commit-queue"
          id="189089"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174415</attachid>
            <date>2012-11-15 05:45:28 -0800</date>
            <delta_ts>2012-11-16 10:58:09 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-13.3.patch</filename>
            <type>text/plain</type>
            <size>56187</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA2MjJhNTg5YWViODM4YzRlZDhmNGMzYzJjODI5NGQxNDRkMmFkNzU4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUaHUsIDE1IE5vdiAyMDEyIDE0OjQwOjQ2ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gZmVsdG9s
dCAxMy4zCgotLS0KIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxMSArCiBTb3VyY2UvUXRXZWJLaXQucHJvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgIDUgKwogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDU2ICsrCiAuLi4vV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZyB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9j
ZXNzLnBybyAgICAgICAgICAgICAgICAgIHwgICAyNyArCiAuLi4vU2FuZGJveFByb2Nlc3MvU2Fu
ZGJveEVudmlyb25tZW50TGludXguY3BwICAgICB8ICA3NzIgKysrKysrKysrKysrKysrKysrKysK
IC4uLi9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIHwgICAz
MiArCiAuLi4vbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAgICAgICB8
ICAgODggKysrCiAuLi4vU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlv
bnMuaCB8ICAgMzIgKwogLi4uL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJR
dC5jcHAgICAgfCAgIDM2ICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0
L1dlYlByb2Nlc3NNYWluUXQuY3BwICB8ICAgNzAgKy0KIFRvb2xzL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBUb29scy9TY3JpcHRzL3dlYmtp
dHBlcmwvRmVhdHVyZUxpc3QucG0gICAgICAgICAgICB8ICAgIDQgKwogMTUgZmlsZXMgY2hhbmdl
ZCwgMTE0MCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25t
ZW50TGludXguY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5n
T3BlcmF0aW9ucy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5oCgpkaWZmIC0tZ2l0IGEvQ2hh
bmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDRlM2Y4MjYuLmQ0MmQ0YjggMTAwNjQ0Ci0tLSBhL0No
YW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMS0xNSAgUmVu
YXRhIEhvZG92YW4gIDxyZW5pQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dLMl0gUHV0dGluZyBR
dFdlYlByb2Nlc3MgaW50byBhIGNocm9vdGVkIHNhbmRib3gKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMDA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBXZWJL
aXQyIHdpdGggU2FuZGJveFByb2Nlc3MuCisKKyAgICAgICAgKiBTb3VyY2UvUXRXZWJLaXQucHJv
OgorCiAyMDEyLTExLTE1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBTdXBwb3J0IHN0YW5kLWFsb25lIG1vbnRoIG5hbWVzIGluIGNhbGVuZGFyIHBpY2tlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1F0V2ViS2l0LnBybyBiL1NvdXJjZS9RdFdlYktpdC5wcm8KaW5k
ZXggNTlmOWEwZC4uYjA5ZDFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1F0V2ViS2l0LnBybworKysg
Yi9Tb3VyY2UvUXRXZWJLaXQucHJvCkBAIC0xNyw2ICsxNywxMSBAQCBidWlsZD8od2Via2l0Mikg
ewogICAgICAgICBwbHVnaW5wcm9jZXNzLmZpbGUgPSBXZWJLaXQyL1BsdWdpblByb2Nlc3MucHJv
CiAgICAgICAgIFNVQkRJUlMgKz0gcGx1Z2lucHJvY2VzcwogICAgIH0KKworICAgIGVuYWJsZT8o
U1VJRF9TQU5EQk9YX0xJTlVYKSB7CisgICAgICAgIHNhbmRib3hwcm9jZXNzLmZpbGUgPSBXZWJL
aXQyL1NhbmRib3hQcm9jZXNzLnBybworICAgICAgICBTVUJESVJTICs9IHNhbmRib3hwcm9jZXNz
CisgICAgfQogfQogCiBkZWNsYXJhdGl2ZS5maWxlID0gV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2Rl
Y2xhcmF0aXZlLnBybwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI3MDY3MTUuLmU0MTI3YTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1OSBAQAorMjAxMi0xMS0xNSAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgW1dLMl0gUHV0dGluZyBRdFdlYlByb2Nlc3MgaW50byBhIGNocm9v
dGVkIHNhbmRib3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkwMDA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBuZXcgZmVhdHVyZSBtYWtlcyBwb3NzaWJsZSB0byBydW4gV2ViUHJvY2VzcyBpbnNp
ZGUgYSBjaHJvb3QuIEluIHRoaXMgY2FzZSBVSVByb2Nlc3MgY2FsbHMgdGhlCisgICAgICAgIGlu
dGVybmFsIFNhbmRib3hQcm9jZXNzIGJpbmFyeSB3aGF0IG1ha2VzIHVwIGFuIGVudmlyb25tZW50
IGZvciBXZWJQcm9jZXNzIGluc2lkZSB0aGUgc2FuZGJveCBhbmQgcnVucyB0aGUgV2ViUHJvY2Vz
cy4KKyAgICAgICAgU2FuZGJveFByb2Nlc3MgZmlyc3QgY3JlYXRlcyB0d28gbmVlZGVkIGRldmlj
ZSBmaWxlcyAocmFuZG9tIGFuZCB1cmFuZG9tKSwgbW91bnRzIGZpbGVzeXN0ZW1zIChwcm9jIGFu
ZCBzaGFyZWQgbWVtb3J5KSwKKyAgICAgICAgdGhlbiBsaW5rcyBydW4tdGltZSBkZXBlbmRlbmNp
ZXMgb2YgV2ViUHJvY2Vzcy4gQWZ0ZXIgdGhpcywgU2FuZGJveFByb2Nlc3MgbW92ZXMgdG8gYSBu
ZXcgcGlkIG5hbWVzcGFjZSAoY2xvbmluZyB3aXRoCisgICAgICAgIENMT05FX05FV1BJRCBmbGFn
KS4gVGhlbiBhZnRlciBhbiBvdGhlciBjbG9uaW5nICh3aXRoIENMT05FX0ZTIGZsYWcpIHdlIHNo
YXJlIG91ciBmaWxlc3lzdGVtIHdpdGggb3VyIGNoaWxkcmVuLiBUaGlzIGlzCisgICAgICAgIG5l
ZWRlZCBiZWNhdXNlIHdlIHdhbnQgdG8gY2FsbCBjaHJvb3QoKSBmdW5jdGlvbiBmcm9tIGhlcmUg
YW5kIGphaWwgb3VyIGNoaWxkIChXZWJQcm9jZXNzKSB0b28uIFRoaXMgd2lsbCBiZSBwZXJmb3Jt
ZWQKKyAgICAgICAgd2hlbiBXZWJQcm9jZXNzIHNlbmRzIGEgcmVxdWVzdCBmb3IgaXQgdmlhIGFu
IHNvY2tldHBhaXIuIElmIHNhbmRib3hpbmcgaXMgZG9uZSwgU2FuZGJveFByb2Nlc3MgZXhpdHMu
CisgICAgICAgIFNpbmNlIGNocm9vdCgpIHN5c3RlbSBjYWxsIG5lZWRzIHN1ZG9lciByaWdodHMg
U2FuZGJveFByb2Nlc3MgYmluYXJ5IHNob3VsZCBoYXZlIHNldCBpdHMgc3VpZCBmbGFnLiBIb3dl
dmVyIHdlIGNhbiByZWR1Y2UKKyAgICAgICAgaXRzIGNhcGFiaWxpdGVzLiBGaXJzdCB3ZSByZXN0
cmljdCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwcm9jZXNzIGFuZCB0aGUgbnVtYmVyIG9mIGl0
cyBwb3NzaWJsZSByZXNvdXJjZXMuIEZ1cnRoZXJtb3JlCisgICAgICAgIHdlIGZhbGxiYWNrIHRv
IHRoZSBub2JvZHkgb3IgdGhlIHJlYWwgdXNlci4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIFNhbmRib3hQcm9jZXNzLnBybzog
QWRkZWQuCisgICAgICAgICogU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZp
cm9ubWVudExpbnV4LmNwcDogQWRkZWQuCisgICAgICAgIChsYXVuY2hDaGFuZ2VSb290SGVscGVy
KToKKyAgICAgICAgKHNldEVudmlyb25tZW50VmFyaWFibGVzRm9yQ2hhbmdlUm9vdEhlbHBlcik6
CisgICAgICAgIChwcmVwYXJlQW5kU3RhcnRDaGFuZ2VSb290SGVscGVyKToKKyAgICAgICAgKHNl
dENhcGFiaWxpdGllcyk6CisgICAgICAgIChkcm9wUHJpdmlsZWdlcyk6CisgICAgICAgIChmaWxl
RXhpc3RzKToKKyAgICAgICAgKGRpcmVjdG9yeVBlcm1pc3Npb25zKToKKyAgICAgICAgKGNyZWF0
ZURpcmVjdG9yeSk6CisgICAgICAgIChjcmVhdGVEaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKGNy
ZWF0ZURldmljZUZpbGVzKToKKyAgICAgICAgKG1vdW50RmlsZVN5c3RlbXMpOgorICAgICAgICAo
bGlua0ZpbGUpOgorICAgICAgICAobGlua0RpcmVjdG9yeSk6CisgICAgICAgIChjb2xsZWN0UnVu
VGltZURlcGVuZGVuY2llcyk6CisgICAgICAgIChzZXR1cFhhdXRob3JpdHlGb3JOb2JvZHlVc2Vy
KToKKyAgICAgICAgKGluaXRTYW5kYm94KToKKyAgICAgICAgKHJlc3RyaWN0Q2FwYWJpbGl0aWVz
KToKKyAgICAgICAgKG1vdmVUb05ld1BpZE5hbWVzcGFjZSk6CisgICAgICAgIChydW4pOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRi
b3hFbnZpcm9ubWVudExpbnV4Lmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9saW51eC9TYW5k
Ym94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzdHJpbmdD
b3B5KToKKyAgICAgICAgKHN0cmluZ0NvbmNhdCk6CisgICAgICAgIChzdHJpbmdBcHBlbmQpOgor
ICAgICAgICAqIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJR
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vzcyk6
CisgICAgICAgICogV2ViS2l0Mi5wcmk6CisgICAgICAgICogV2ViUHJvY2Vzcy5wcm86CisgICAg
ICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcDoKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJLaXQ6OmNocm9vdE1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc01haW5RdCk6CisKIDIwMTItMTEtMTUgIFl1bmkgSmVvbmcgIDx5aG5ldC5qdW5nQHNhbXN1
bmcuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gQWRkIEFQSXMgdG8gZ2V0L3NldCB3aGV0aGVy
IHNjcmlwdHMgY2FuIG9wZW4gbmV3IHdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQy
L0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGE0ZjhjYTAuLjJi
ZGU2Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0xMzMsNiArMTMzLDcgQEAgRU5BQkxFX1FVT1RBID0gOwog
RU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FID0gRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FOwogRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkgPSA7CiBFTkFCTEVfU0NSSVBU
RURfU1BFRUNIID0gOworRU5BQkxFX1NVSURfU0FOREJPWF9MSU5VWCA9IDsKIEVOQUJMRV9TSEFE
T1dfRE9NID0gOwogRU5BQkxFX1NIQVJFRF9XT1JLRVJTID0gRU5BQkxFX1NIQVJFRF9XT1JLRVJT
OwogRU5BQkxFX1NRTF9EQVRBQkFTRSA9IEVOQUJMRV9TUUxfREFUQUJBU0U7CkBAIC0xNTcsNCAr
MTU4LDQgQEAgRU5BQkxFX1dPUktFUlMgPSBFTkFCTEVfV09SS0VSUzsKIEVOQUJMRV9YSFJfVElN
RU9VVCA9IEVOQUJMRV9YSFJfVElNRU9VVDsKIEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAK
LUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05fQVBJKSAkKEVOQUJMRV9CTE9CKSAk
KEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NT
U19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9OKSAk
KEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQoRU5BQkxFX0NT
U19ISUVSQVJDSElFUykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9D
U1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19T
SEFERVJTKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19TVElDS1lfUE9T
SVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNfQ09ORElUSU9OQUxf
UlVMRVMpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVS
KSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkg
JChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAk
KEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RJQUxPR19FTEVNRU5UKSAkKEVO
QUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAkKEVOQUJMRV9EUkFHR0FCTEVfUkVHSU9OKSAkKEVOQUJM
RV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJT
KSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VP
TE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVO
QUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZS
QU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9T
UEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRF
VElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJV
R0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FD
WV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9MRUdBQ1lfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJM
RV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9MSU5L
X1BSRVJFTkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5B
QkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01I
VE1MKSAkKEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01VVEFUSU9OX09CU0VSVkVSUykgJChF
TkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQo
RU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5B
QkxFX1BST0dSRVNTX0VMRU1FTlQpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVf
U0NSSVBURURfU1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09S
S0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5B
QkxFX1NVQlBJWEVMX0xBWU9VVCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNf
QklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAk
KEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FE
SU5HKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJ
REVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9X
RUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV09SS0VSUykgJChFTkFC
TEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFC
TEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxF
X0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5H
KSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAk
KEVOQUJMRV9DU1NfREVWSUNFX0FEQVBUQVRJT04pICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAk
KEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVOQUJMRV9D
U1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVO
QUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0NTU19DT01Q
T1NJVElORykgJChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTikgJChFTkFCTEVfQ1NTX1ZBUklB
QkxFUykgJChFTkFCTEVfQ1NTM19DT05ESVRJT05BTF9SVUxFUykgJChFTkFCTEVfQ1NTM19URVhU
KSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQ
T1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lU
RU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElP
TikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQo
RU5BQkxFX0RSQUdHQUJMRV9SRUdJT04pICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFC
TEVfRklMRV9TWVNURU0pICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJ
KSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElEREVO
X1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJTkcpICQoRU5BQkxFX0hJR0hfRFBJX0NBTlZBUykgJChF
TkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JRlJBTUVfU0VBTUxFU1MpICQoRU5BQkxFX0lO
REVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOUFVUX1NQRUVDSCkgJChFTkFCTEVfSU5QVVRfVFlQ
RV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RB
VEVUSU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVU
X1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQ
RV9XRUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdBQ1lfQ1NT
X1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxF
X0xFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5B
QkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRI
TUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChF
TkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkg
JChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9V
VElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQ
SSkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChF
TkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9S
RVNPTFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxF
X1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJB
U0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1VCUElYRUxfTEFZT1VUKSAkKEVO
QUJMRV9TVUlEX1NBTkRCT1hfTElOVVgpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9P
QkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklO
RykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lDT05f
TE9BRElORykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJM
RV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFC
TEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dPUktFUlMpICQo
RU5BQkxFX1hIUl9USU1FT1VUKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybyBiL1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNz
LnBybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWMwZTJmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2FuZGJveFByb2Nlc3MucHJvCkBAIC0wLDAgKzEs
MjcgQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9qZWN0IGZpbGUgZm9yIHRoZSBXZWJLaXQyIHNhbmRi
b3ggcHJvY2VzcyBiaW5hcnkKKyMKKyMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBv
dmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVEVNUExBVEUgPSBh
cHAKKworVEFSR0VUID0gU1VJRFNhbmRib3hIZWxwZXIKK0RFU1RESVIgPSAkJHtST09UX0JVSUxE
X0RJUn0vYmluCisKK0NPTkZJRyArPSBjb25zb2xlCitDT05GSUcgLT0gcXQKKworU09VUkNFUyAr
PSBTaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3Bw
IFwKKyAgICAgICAgICAgU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09wZXJhdGlv
bnMuY3BwCitIRUFERVJTICs9IFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5kYm94RW52
aXJvbm1lbnRMaW51eC5oIFwKKyAgICAgICAgICAgU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNz
L1N0cmluZ09wZXJhdGlvbnMuaAorCitJTlNUQUxMUyArPSB0YXJnZXQKK0xJQlMgKz0gLWxjYXAg
LWxkbAorCitpc0VtcHR5KElOU1RBTExfQklOUykgeworICAgIHRhcmdldC5wYXRoID0gJCRbUVRf
SU5TVEFMTF9CSU5TXQorfSBlbHNlIHsKKyAgICB0YXJnZXQucGF0aCA9ICQkSU5TVEFMTF9CSU5T
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nl
c3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWZhYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVu
dExpbnV4LmNwcApAQCAtMCwwICsxLDc3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFu
IDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJTYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIgorCisjaW5jbHVkZSAiU3RyaW5nT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8
ZXJyLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUg
PGdycC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxpbmsuaD4KKyNpbmNsdWRl
IDxwd2QuaD4KKyNpbmNsdWRlIDxzY2hlZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNpbmNs
dWRlIDxzeXMvcHJjdGwuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxz
eXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2Fs
bC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j
bHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx1dGltZS5o
PgorCitlbnVtIHsgUGF0aFNpemUgPSA1MTIgfTsKK3N0YXRpYyBjaGFyIHNhbmRib3hEaXJlY3Rv
cnlbUGF0aFNpemVdOworc3RhdGljIHVpZF90IHNhbmRib3hVc2VyVWlkOworc3RhdGljIHVpZF90
IHNhbmRib3hVc2VyR2lkOworCisvLyBUaGlzIGZ1bmN0aW9uIHJ1bnMgaW4gYSBjbG9uZWQgcHJv
Y2VzcyBhbmQgaXQgaXMgd2FpdGluZyBmb3IgYSByZXF1ZXN0IG1lc3NhZ2UKKy8vIGZyb20gV2Vi
UHJvY2VzcyB0byBwZXJmb3JtIHRoZSBjaHJvb3QoKS4gSWYgdGhlIG9wZXJhdGlvbiB3YXMgc3Vj
Y2Vzc2Z1bCB0aGUgZnVuY3Rpb24KKy8vIG5ldmVyIHJldHVybnMuIFNvIHRoaXMgZnVuY3Rpb24g
aGFzIG5vIHJldHVybiB2YWx1ZS4KK3N0YXRpYyB2b2lkIGxhdW5jaENoYW5nZVJvb3RIZWxwZXIo
aW50IHNvY2tldFBhaXJbXSkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIHJlc3RyaWN0IHRoZSByZXNv
dXJjZXMgYXZhaWxhYmxlIHRvIG91ciBwcm9jZXNzIHRvIGF2b2lkIG9wZW5pbmcKKyAgICAvLyBh
IGZpbGUgYnkgbWlzdGFrZS4gSG93ZXZlciwgQ0FQX1NZU19SRVNTT1VSQ0UgY2FwYWJpbGl0eSBz
aG91bGQgYmUgZHJvcHBlZAorICAgIC8vIG90aGVyd2lzZSBpdCB3b24ndCB3b3JrLgorICAgIHN0
cnVjdCBybGltaXQgcmVzdHJpY3RlZFJlc291cmNlID0geyAwLCAwIH07CisgICAgaWYgKHNldHJs
aW1pdChSTElNSVRfTk9GSUxFLCAmcmVzdHJpY3RlZFJlc291cmNlKSkgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkhlbHBlciBjb3VsZG4ndCBzZXQgdGhlIHJlc291cmNlbGltaXQ6ICVzLlxu
Iiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChj
bG9zZShzb2NrZXRQYWlyWzFdKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0
IGNsb3NlIHNvY2tldCAlZDogJXNcbiIsIHNvY2tldFBhaXJbMV0sIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBleHBlY3QgYSAnQycgKENocm9v
dE1lKSBtZXNzYWdlIGZyb20gdGhlIFdlYlByb2Nlc3MuCisgICAgY2hhciBtZXNzYWdlOworICAg
IGlmIChyZWFkKHNvY2tldFBhaXJbMF0sICZtZXNzYWdlLCAxKSAhPSAxKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcmVhZCB0aGUgcHJvcGVyIGNocm9vdG1lIG1zZzogJXNc
biIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bWVzc2FnZSAhPSBNU0dfQ0hST09UTUUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJXcm9u
ZyBtZXNzYWdlIHJlY2lldmVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
dHJ1Y3Qgc3RhdCBzYW5kYm94RGlyZWN0b3J5SW5mbzsKKyAgICBpZiAobHN0YXQoc2FuZGJveERp
cmVjdG9yeSwgJnNhbmRib3hEaXJlY3RvcnlJbmZvKSAmJiBTX0lTRElSKHNhbmRib3hEaXJlY3Rv
cnlJbmZvLnN0X21vZGUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2FuZGJveCBkaXJl
Y3RvcnkgKCVzKSBkb2VzIG5vdCBleGlzdCFcbiIsIHNhbmRib3hEaXJlY3RvcnkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNocm9vdChzYW5kYm94RGlyZWN0b3J5KSkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNocm9vdGluZyBmYWlsZWQ6ICVzLlxuIiwgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENocm9vdCBvbmx5
IGNoYW5nZXMgdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgYnV0IGRv
ZXNuJ3QgY2hhbmdlCisgICAgLy8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFRoZXJl
Zm9yZSwgaWYgd2UgZG9uJ3QgZG8gaXQgbWFudWFsbHkgYSBtYWxpY2lvdXMgdXNlcgorICAgIC8v
IGNvdWxkIGJyZWFrIG91dCB0aGUgamFpbCB3aXRoIHJlbGF0aXZlIHBhdGhzLgorICAgIGlmIChj
aGRpcigiLyIpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY2hhbmdlIHRo
ZSB3b3JraW5nIGRpcmVjdG9yeSB0byAvLjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTZW5kaW5nIGFja25vd2xlZGdlbWVudCB0byB0
aGUgV2ViUHJvY2VzcyB0aGF0IHRoZSBzYW5kYm94aW5nIHdhcyBzdWNjZXNzZnVsbC4KKyAgICBt
ZXNzYWdlID0gTVNHX0NIUk9PVEVEOworICAgIGlmICh3cml0ZShzb2NrZXRQYWlyWzBdLCAmbWVz
c2FnZSwgMSkgIT0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHNlbmQg
YWNrbm93bGVkZ2VtZW50IHRvIFdlYlByb2Nlc3M6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Cit9CisKK3N0
YXRpYyBib29sIHNldEVudmlyb25tZW50VmFyaWFibGVzRm9yQ2hhbmdlUm9vdEhlbHBlcihwaWRf
dCBwaWQsIGludCBzb2NrZXRQYWlyW10pCit7CisgICAgY29uc3QgaW50IGRlc2NyaXB0b3JTaXpl
ID0gMzI7CisgICAgY2hhciBzb2NrZXREZXNjcmlwdG9yW2Rlc2NyaXB0b3JTaXplXTsKKyAgICBj
aGFyIHNhbmRib3hIZWxwZXJQaWRbZGVzY3JpcHRvclNpemVdOworCisgICAgaW50IGxlbmd0aCA9
IHNucHJpbnRmKHNhbmRib3hIZWxwZXJQaWQsIHNpemVvZihzYW5kYm94SGVscGVyUGlkKSwgIiV1
IiwgcGlkKTsKKyAgICBpZiAobGVuZ3RoIDwgMCB8fCBsZW5ndGggPj0gc2l6ZW9mKHNhbmRib3hI
ZWxwZXJQaWQpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29udmVydGluZyB0aGUgcGlk
IHRvIHN0cmluZyBpcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNldGVudihTQU5EQk9YX0hFTFBFUl9QSUQs
IHNhbmRib3hIZWxwZXJQaWQsIDEpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRu
J3Qgc2V0IHRoZSBTQlhfSEVMUEVSX1BJRCBlbnYgdmFyaWFibGU6ICVzXG4iLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbGVuZ3RoID0gc25w
cmludGYoc29ja2V0RGVzY3JpcHRvciwgc2l6ZW9mKHNvY2tldERlc2NyaXB0b3IpLCAiJXUiLCBz
b2NrZXRQYWlyWzFdKTsKKyAgICBpZiAobGVuZ3RoIDwgMCB8fCBsZW5ndGggPj0gc2l6ZW9mKHNv
Y2tldERlc2NyaXB0b3IpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29udmVydGluZyB0
aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHN0cmluZyBpcyBmYWlsZWQ6ICVzLlxuIiwgc3RyZXJyb3Io
ZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzZXRlbnYo
U0FOREJPWF9ERVNDUklQVE9SLCBzb2NrZXREZXNjcmlwdG9yLCAxKSkgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlNhdmluZyB0aGUgaGVscGVycyBmaWxlZGVzY3JpcHRvciBpbnRvIGFuIGVu
diB2YXJpYWJsZSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNsb3NlKHNvY2tldFBhaXJbMF0pKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ2xvc2luZyBvZiAlZCBmYWlsZWQ6ICVzXG4iLCBzb2NrZXRQ
YWlyWzBdLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBwcmVwYXJlQW5kU3RhcnRDaGFuZ2VS
b290SGVscGVyKCkKK3sKKyAgICBpbnQgc29ja2V0UGFpclsyXTsKKyAgICBwaWRfdCBwaWQ7CisK
KyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0UGFpcikp
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgc29ja2V0cGFpcjog
JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBwaWQgPSBzeXNjYWxsKFNZU19jbG9uZSwgQ0xPTkVfRlMgfCBTSUdDSExELCAwLCAwLCAw
KTsKKworICAgIHN3aXRjaCAocGlkKSB7CisgICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDbG9uZSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIDA6CisgICAgICAgIC8vIENoaWxkIHByb2Nlc3M6IHdl
IHN0YXJ0IHRoZSBjaHJvb3QgaGVscGVyIHdoaWNoIHdhaXRzIGZvciB0aGUgIkNocm9vdE1lIgor
ICAgICAgICAvLyBtZXNzYWdlIGZyb20gdGhlIFdlYlByb2Nlc3MuIElmIHdlIGFyZSBzdWNjZXNz
ZWQsIHRoZW4gd2Ugd29uJ3QgcmV0dXJuLgorICAgICAgICBsYXVuY2hDaGFuZ2VSb290SGVscGVy
KHNvY2tldFBhaXIpOworICAgICAgICAvLyBXZSBzaG91bGRuJ3QgcmVhY2ggdGhpcyBwYXJ0LCBi
ZWNhdXNlIGxhdW5jaENocm9vdEhlbHBlcigpIHNob3VsZCBleGl0IGluIGV2ZXJ5IGNhc2VzLgor
ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIC8vIFBhcmVudCBwcm9jZXNzOiBleHBvcnRzIHRoZSBwaWQgb2Yg
dGhlIGhlbHBlciBhbmQgdGhlIHNvY2tldCBpZCBzbyB0aGUKKyAgICAgICAgLy8gaGVscGVyIGFu
ZCB0aGUgV2ViUHJvY2VzcyBjYW4gY29tbXVuaWNhdGUuCisgICAgICAgIHJldHVybiBzZXRFbnZp
cm9ubWVudFZhcmlhYmxlc0ZvckNoYW5nZVJvb3RIZWxwZXIocGlkLCBzb2NrZXRQYWlyKTsKKyAg
ICB9CisgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUuCisgICAgcmV0dXJuIGZhbHNl
OworfQorCisvLyBTZXR0aW5nIGxpbnV4IGNhcGFiaWxpdGllcyAocGVybWl0dGVkLCBlZmZlY3Rp
dmUgYW5kIGluaGVyaXRhYmxlKSBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKy8vIFBlcm1pdHRl
ZCBzZXQgaW5kaWNhdGVzIHRoZSBjYXBhYmlsaXRpZXMgd2hhdCBjb3VsZCBiZSBzZXQgZm9yIHRo
ZSBwcm9jZXNzLgorLy8gRWZmZWN0aXZlIHNldCBpcyBhIHN1YnNldCBvZiBwZXJtaXR0ZWQgc2V0
LCB0aGV5IGFyZSBhY3R1YWxseSBlZmZlY3RpdmUuCisvLyBJbmhlcml0YWJsZSBzZXQgaW5kaWNh
dGVzIHRoZSBjYXBhYmlsaXRpZXMgd2hhdCB0aGUgY2hpbGRyZW4gd2lsbCBpbmhlcml0IGZyb20g
dGhlIGN1cnJlbnQgcHJvY2Vzcy4KK3N0YXRpYyBib29sIHNldENhcGFiaWxpdGllcyhjYXBfdmFs
dWVfdCogY2FwYWJpbGl0eUxpc3QsIGludCBsZW5ndGgpCit7CisgICAgY2FwX3QgY2FwYWJpbGl0
aWVzOworCisgICAgLy8gQ2FwYWJpbGl0aWVzIHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRob3V0
IGZsYWdzLgorICAgIGNhcGFiaWxpdGllcyA9IGNhcF9pbml0KCk7CisgICAgaWYgKCFjYXBhYmls
aXRpZXMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJQcm9jZXNzIGNhcGFiaWxpdGllcyBp
bml0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoY2FwX2NsZWFyKGNhcGFiaWxpdGllcykpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDbGVhcmluZyBwcm9jZXNzIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKGNhcGFiaWxpdHlMaXN0ICYmIGxlbmd0aCkgeworICAgICAgICBpZiAoY2FwX3NldF9m
bGFnKGNhcGFiaWxpdGllcywgQ0FQX0VGRkVDVElWRSwgbGVuZ3RoLCBjYXBhYmlsaXR5TGlzdCwg
Q0FQX1NFVCkKKyAgICAgICAgICAgIHx8IGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9J
TkhFUklUQUJMRSwgbGVuZ3RoLCBjYXBhYmlsaXR5TGlzdCwgQ0FQX1NFVCkKKyAgICAgICAgICAg
IHx8IGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9QRVJNSVRURUQsIGxlbmd0aCwgY2Fw
YWJpbGl0eUxpc3QsIENBUF9TRVQpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNh
bm5vdCBzZXQgcHJvY2VzcyBjYXBhYmlsaXR5IGZsYWdzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgICAgIGNhcF9mcmVlKGNhcGFiaWxpdGllcyk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2FwX3NldF9wcm9jKGNhcGFi
aWxpdGllcykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgc2V0IHByb2Nlc3Mg
Y2FwYWJpbGl0aWVzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgY2FwX2ZyZWUo
Y2FwYWJpbGl0aWVzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjYXBfZnJl
ZShjYXBhYmlsaXRpZXMpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBkcm9w
UHJpdmlsZWdlcygpCit7CisgICAgLy8gV2UgYmVjb21lIGV4cGxpY2l0ZWx5IG5vbiBkdW1wYWJs
ZS4KKyAgICBpZiAocHJjdGwoUFJfU0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSkgeworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIlNldHRpbmcgZHVtcGxhYmxlIGlzIGZhaWxlZDogJXNcbiIsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
c2V0cmVzZ2lkKHNhbmRib3hVc2VyR2lkLCBzYW5kYm94VXNlckdpZCwgc2FuZGJveFVzZXJHaWQp
CisgICAgICAgIHx8IHNldHJlc3VpZChzYW5kYm94VXNlclVpZCwgc2FuZGJveFVzZXJVaWQsIHNh
bmRib3hVc2VyVWlkKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGZhbGxi
YWNrIHRvIHVzZXI6ICVkLlxuIiwgc2FuZGJveFVzZXJVaWQpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIC8vIERyb3AgYWxsIGNhcGFiaWxpdGllcy4gQWdhaW4sIHNldHVpZCgp
IG5vcm1hbGx5IHRha2VzIGNhcmUgb2YgdGhpcyBpZiB3ZSBoYWQgZXVpZCAwLgorICAgIHJldHVy
biBzZXRDYXBhYmlsaXRpZXMoMCwgMCk7Cit9CisKK3N0YXRpYyBib29sIGZpbGVFeGlzdHMoY29u
c3QgY2hhciogcGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICByZXR1cm4g
IShsc3RhdChwYXRoLCAmZmlsZVN0YXQpICYmIGVycm5vID09IEVOT0VOVCk7Cit9CisKK3N0YXRp
YyBtb2RlX3QgZGlyZWN0b3J5UGVybWlzc2lvbnMoY29uc3QgY2hhciogZGlyZWN0b3J5KQorewor
ICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIHN0YXQoZGlyZWN0b3J5LCAmZmlsZVN0YXQp
OworICAgIHJldHVybiBmaWxlU3RhdC5zdF9tb2RlOworfQorCitzdGF0aWMgYm9vbCBjcmVhdGVE
aXJlY3RvcnkoY2hhciogcGF0aFRvQ3JlYXRlLCBjb25zdCBjaGFyKiBuZXh0RGlyZWN0b3J5VG9D
cmVhdGUpCit7CisgICAgaWYgKCFzdHJpbmdBcHBlbmQocGF0aFRvQ3JlYXRlLCBuZXh0RGlyZWN0
b3J5VG9DcmVhdGUsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2hh
ciBwYXRoVG9DcmVhdGVJblNhbmRib3hbUGF0aFNpemVdOworICAgIGlmICghc3RyaW5nQ29uY2F0
KHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgcGF0aFRvQ3JlYXRlLCBQ
YXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1vZGVfdCBtb2RlID0gZGly
ZWN0b3J5UGVybWlzc2lvbnMocGF0aFRvQ3JlYXRlKTsKKyAgICBpZiAobWtkaXIocGF0aFRvQ3Jl
YXRlSW5TYW5kYm94LCBtb2RlKSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW9uIG9mICVzIGZhaWxlZDogJXNcbiIs
IHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZv
OworICAgIGxzdGF0KHBhdGhUb0NyZWF0ZSwgJmZpbGVJbmZvKTsKKyAgICBpZiAoZmlsZUluZm8u
c3RfdWlkID09IGdldHVpZCgpKSB7CisgICAgICAgIGlmIChjaG93bihwYXRoVG9DcmVhdGVJblNh
bmRib3gsIHNhbmRib3hVc2VyVWlkLCBzYW5kYm94VXNlckdpZCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChjaG1vZChwYXRoVG9DcmVhdGVJblNhbmRib3gsIGZp
bGVJbmZvLnN0X21vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZURpcmVjdG9yeVBhdGgoY29uc3QgY2hhciogcGF0aCkK
K3sKKyAgICBjaGFyIGZ1bGxQYXRoSW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICBpZiAoIXN0cmlu
Z0NvbmNhdChmdWxsUGF0aEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgcGF0aCwgUGF0aFNp
emUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZmlsZUV4aXN0cyhmdWxsUGF0
aEluU2FuZGJveCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2hhciBhbHJlYWR5Q3Jl
YXRlZFBhdGhbUGF0aFNpemVdOworICAgIGFscmVhZHlDcmVhdGVkUGF0aFswXSA9ICdcMCc7Cisg
ICAgLy8gc3RhcnRQb3MgaXMgKHBhdGggKyAxKSBiZWNhdXNlIHdlIHNraXAgdGhlIGZpcnN0ICcv
Jy4KKyAgICBjb25zdCBjaGFyKiBzdGFydFBvcyA9IHBhdGggKyAxOworICAgIGNvbnN0IGNoYXIq
IGVuZFBvczsKKyAgICB3aGlsZSAoKGVuZFBvcyA9IHN0cmNocihzdGFydFBvcywgJy8nKSkpIHsK
KyAgICAgICAgY2hhciBuZXh0RGlyZWN0b3J5VG9DcmVhdGVbUGF0aFNpemVdOworICAgICAgICBp
ZiAoIXN0cmluZ0NvcHkobmV4dERpcmVjdG9yeVRvQ3JlYXRlLCBzdGFydFBvcyAtIDEsIGVuZFBv
cyAtIHN0YXJ0UG9zICsgMSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeShhbHJlYWR5Q3JlYXRlZFBhdGgsIG5leHREaXJl
Y3RvcnlUb0NyZWF0ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN0YXJ0
UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisgICAgLy8gQ3JlYXRlIHRoZSBsYXN0IGRpcmVjdG9y
eSBvZiB0aGUgZGlyZWN0b3J5cGF0aC4KKyAgICBhbHJlYWR5Q3JlYXRlZFBhdGhbMF0gPSAnXDAn
OworICAgIHJldHVybiBjcmVhdGVEaXJlY3RvcnkoYWxyZWFkeUNyZWF0ZWRQYXRoLCBwYXRoKTsK
K30KKworc3RhdGljIGJvb2wgY3JlYXRlRGV2aWNlRmlsZXMoKQoreworICAgIGNvbnN0IGNoYXIq
IGRldiA9ICIvZGV2LyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKGRldikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIqIGRldmljZXNbMl0gPSB7ICIvZGV2
L3JhbmRvbSIsICIvZGV2L3VyYW5kb20iIH07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyAr
K2kpIHsKKyAgICAgICAgc3RydWN0IHN0YXQgc3RhdHVzOworICAgICAgICBpZiAobHN0YXQoZGV2
aWNlc1tpXSwgJnN0YXR1cykpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3Ig
Ynkgb2J0YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGRldmljZSBmaWxlICglcyk6ICVzXG4iLCBk
ZXZpY2VzW2ldLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGRldl90IGRldiA9IHN0YXR1cy5zdF9yZGV2OworCisgICAgICAg
IC8vIEJvdGggbmVlZGVkIGRldmljZSBmaWxlcyAoL2Rldi9yYW5kb20gYW5kIC9kZXYvdXJhbmRv
bSkgYXJlIGNoYXJhY3RlciBtX2RldmljZXMgYW5kCisgICAgICAgIC8vIHRoZWlyIHBlcm1pc3Np
b25zIHNob3VsZCBiZTogcnctcnctcnctLgorICAgICAgICBjaGFyIGRldmljZVtQYXRoU2l6ZV07
CisgICAgICAgIGlmICghc3RyaW5nQ29uY2F0KGRldmljZSwgc2FuZGJveERpcmVjdG9yeSwgZGV2
aWNlc1tpXSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmIChta25vZChkZXZpY2UsIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAg
fCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgsIG1ha2VkZXYobWFqb3IoZGV2KSwgbWlub3Io
ZGV2KSkpKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgZGV2aWNlIGZpbGUgJXM6ICVz
XG4iLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgYm9vbCBtb3VudEZpbGVTeXN0ZW1zKCkKK3sKKyAgICBjb25zdCBjaGFyKiBw
cm9jID0gIi9wcm9jLyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKHByb2MpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBwcm9jUGF0aEluU2FuZGJveFtQYXRoU2l6ZV07
CisgICAgaWYgKCFzdHJpbmdDb25jYXQocHJvY1BhdGhJblNhbmRib3gsIHNhbmRib3hEaXJlY3Rv
cnksIHByb2MsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtb3Vu
dChwcm9jLCBwcm9jUGF0aEluU2FuZGJveCwgInByb2MiLCAwLCAwKSkgeworICAgICAgICBpZiAo
ZXJybm8gIT0gRUJVU1kpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkg
bW91bnRpbmcgJXMuICVzXG4iLCBwcm9jLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgY2hhciogc2hhcmVk
TWVtb3J5ID0gIi9ydW4vc2htLyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKHNoYXJl
ZE1lbW9yeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjaGFyIHNoYXJlZE1lbW9yeVBh
dGhJblNhbmRib3hbUGF0aFNpemVdOworICAgIGlmICghc3RyaW5nQ29uY2F0KHNoYXJlZE1lbW9y
eVBhdGhJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksIHNoYXJlZE1lbW9yeSwgUGF0aFNpemUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1vdW50KHNoYXJlZE1lbW9yeSwgc2hh
cmVkTWVtb3J5UGF0aEluU2FuZGJveCwgInRtcGZzIiwgMCwgMCkpIHsKKyAgICAgICAgaWYgKGVy
cm5vICE9IEVCVVNZKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG1v
dW50aW5nICVzOiAlc1xuIiwgc2hhcmVkTWVtb3J5LCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgYm9vbCBsaW5rRmlsZShjaGFyKiBzb3VyY2VGaWxlLCBjaGFyKiB0YXJnZXRG
aWxlKQoreworICAgIGJvb2wgaXNTeW1saW5rID0gdHJ1ZTsKKyAgICB3aGlsZSAoaXNTeW1saW5r
KSB7CisgICAgICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgICAgICBpZiAobHN0YXQoc291
cmNlRmlsZSwgJmZpbGVJbmZvKSkgeworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkg
eworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb2J0YWluIGluZm9y
bWF0aW9uIGFib3V0ICVzOiAlc1xuIiwgc291cmNlRmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBJZiB0aGUgb3JpZ2luYWwgZmlsZSBkb2Vzbid0IGV4aXN0IChlLmcuIGRhbmdsaW5nIGxpbmtz
KSB0aGVuIHdlIGNhbiBpZ25vcmUgaXQKKyAgICAgICAgICAgIC8vIGluIHRoZSBzYW5kYm94IHRv
by4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNoYXIqIGVu
ZE9mQmFzZURpcmVjdG9yeUluU291cmNlID0gc3RycmNocihzb3VyY2VGaWxlLCAnLycpOworICAg
ICAgICBpZiAoIWVuZE9mQmFzZURpcmVjdG9yeUluU291cmNlKSB7CisgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkludmFsaWQgc291cmNlOiAlcy5cbiIsIHNvdXJjZUZpbGUpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY2hhciBiYXNlRGlyZWN0
b3J5T2ZTb3VyY2VbUGF0aFNpemVdOworICAgICAgICBpZiAoIXN0cmluZ0NvcHkoYmFzZURpcmVj
dG9yeU9mU291cmNlLCBzb3VyY2VGaWxlLCBlbmRPZkJhc2VEaXJlY3RvcnlJblNvdXJjZSAtIHNv
dXJjZUZpbGUgKyAxLCBQYXRoU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlPZlNvdXJjZSkpIHsK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpbmcgJXMgZmFpbGVkOiAlcy5cbiIs
IGJhc2VEaXJlY3RvcnlPZlNvdXJjZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5rKHNvdXJjZUZpbGUsIHRh
cmdldEZpbGUpKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUICYmIGVycm5vICE9
IEVOT0VOVCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGlua2luZyAlcyBm
YWlsZWQ6ICVzLlxuIiwgc291cmNlRmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBIYW5kbGUgc3ltbGlua3MuIFdlIGRvbid0IHdhbnQgdG8gaGF2ZSBkYW5nbGluZyBsaW5rcyBp
biB0aGUgc2FuZGJveC4gU28gd2UgaGF2ZSB0bworICAgICAgICAvLyBmb2xsb3cgdGhlbSBhbmQg
cHV0IHRoZSB3aG9sZSBsaW5rIGNoYWluIGludG8gdGhlIHNhbmRib3guCisgICAgICAgIGlzU3lt
bGluayA9IChmaWxlSW5mby5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGTE5LOworICAgICAgICBp
ZiAoIWlzU3ltbGluaykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNoYXIgc3ltbGlu
a1RhcmdldFtQYXRoU2l6ZV07CisgICAgICAgIGludCBsZW5ndGhPZlRoZUxpbmsgPSByZWFkbGlu
ayhzb3VyY2VGaWxlLCBzeW1saW5rVGFyZ2V0LCBzaXplb2Yoc3ltbGlua1RhcmdldCkgLSAxKTsK
KyAgICAgICAgaWYgKGxlbmd0aE9mVGhlTGluayA+IDApCisgICAgICAgICAgICBzeW1saW5rVGFy
Z2V0W2xlbmd0aE9mVGhlTGlua10gPSAnXDAnOworCisgICAgICAgIGNoYXIgc3ltbGlua1Rhcmdl
dEluUmVhbFdvcmxkW1BhdGhTaXplXTsKKyAgICAgICAgY2hhciBzeW1saW5rVGFyZ2V0SW5TYW5k
Ym94W1BhdGhTaXplXTsKKyAgICAgICAgLy8gTWFraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiByZWxh
dGl2ZSBhbmQgYWJzb2x1dGUgcGF0aHMuCisgICAgICAgIC8vIElmIHRoZSBzeW1saW5rcyB0YXJn
ZXQgc3RhcnRzIHdpdGggJy8nIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggaXQuCisg
ICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIGEgcmVsYXRpdmUgcGF0aCBhbmQgd2UgaGF2ZSB0byBj
b25jYXRlbmF0ZSBpdCB0byB0aGUgY3VycmVudAorICAgICAgICAvLyBwYXRoIHRvIG9idGFpbiB0
aGUgdGFyZ2V0LgorICAgICAgICBpZiAoc3ltbGlua1RhcmdldFswXSA9PSAnLycpIHsKKyAgICAg
ICAgICAgIGlmICghc3RyaW5nQ29weShzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGQsIHN5bWxpbmtU
YXJnZXQsIFBhdGhTaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIXN0cmluZ0NvbmNhdChzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBzYW5kYm94RGly
ZWN0b3J5LCBzeW1saW5rVGFyZ2V0LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFzdHJpbmdDb25jYXQo
c3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBiYXNlRGlyZWN0b3J5T2ZTb3VyY2UsICIvIiwgc3lt
bGlua1RhcmdldCwgUGF0aFNpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICghc3RyaW5nQ29uY2F0KHN5bWxpbmtUYXJnZXRJblNhbmRib3gsIHNhbmRi
b3hEaXJlY3RvcnksICIvIiwgc3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBQYXRoU2l6ZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSW5p
dGlhbGl6ZSBzb3VyY2VGaWxlIGFuZCB0YXJnZXRGaWxlIHZhcmlhYmxlcyBmb3IgdGhlIG5leHQg
bG9vcCBvZiB3aGlsZS4KKyAgICAgICAgaWYgKCFzdHJpbmdDb3B5KHNvdXJjZUZpbGUsIHN5bWxp
bmtUYXJnZXRJblJlYWxXb3JsZCwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIXN0cmluZ0NvcHkodGFyZ2V0RmlsZSwgc3ltbGlua1RhcmdldEluU2Fu
ZGJveCwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbGlua0RpcmVjdG9yeShjb25zdCBjaGFyKiBz
b3VyY2VEaXJlY3RvcnlQYXRoLCBjb25zdCBjaGFyKiB0YXJnZXREaXJlY3RvcnlQYXRoKQorewor
ICAgIGlmICghY3JlYXRlRGlyZWN0b3J5UGF0aChzb3VyY2VEaXJlY3RvcnlQYXRoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIERJUiogZGlyZWN0b3J5ID0gb3BlbmRpcihzb3VyY2VEaXJl
Y3RvcnlQYXRoKTsKKyAgICBpZiAoIWRpcmVjdG9yeSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNvdWxkbid0IG9wZW4gZGlyZWN0b3J5ICVzOiAlc1xuIiwgc291cmNlRGlyZWN0b3J5UGF0
aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHN0cnVjdCBkaXJlbnQgKmRpcmVjdG9yeUluZm8gPSAwOworICAgIHdoaWxlICgoZGlyZWN0b3J5
SW5mbyA9IHJlYWRkaXIoZGlyZWN0b3J5KSkpIHsKKyAgICAgICAgY2hhciogbmV4dEZpbGVJbkRp
cmVjdG9yeSA9IGRpcmVjdG9yeUluZm8tPmRfbmFtZTsKKyAgICAgICAgLy8gV2UgbXVzdCBub3Qg
bGluayAnLicgYW5kICIuLiIgaW50byB0aGUgc2FuZGJveC4KKyAgICAgICAgaWYgKCFzdHJuY21w
KG5leHRGaWxlSW5EaXJlY3RvcnksICIuIiwgc3RybmxlbihuZXh0RmlsZUluRGlyZWN0b3J5LCBQ
YXRoU2l6ZSkpIHx8ICFzdHJuY21wKG5leHRGaWxlSW5EaXJlY3RvcnksICIuLiIsIDIpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGNoYXIgc291cmNlRmlsZVtQYXRoU2l6ZV07Cisg
ICAgICAgIGlmICghc3RyaW5nQ29uY2F0KHNvdXJjZUZpbGUsIHNvdXJjZURpcmVjdG9yeVBhdGgs
ICIvIiwgbmV4dEZpbGVJbkRpcmVjdG9yeSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGNoYXIgdGFyZ2V0RmlsZVtQYXRoU2l6ZV07CisgICAgICAgIGlm
ICghc3RyaW5nQ29uY2F0KHRhcmdldEZpbGUsIHRhcmdldERpcmVjdG9yeVBhdGgsICIvIiwgbmV4
dEZpbGVJbkRpcmVjdG9yeSwgUGF0aFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICBpZiAoKGRpcmVjdG9yeUluZm8tPmRf
dHlwZSA9PSBEVF9ESVIpKQorICAgICAgICAgICAgb2sgPSBsaW5rRGlyZWN0b3J5KHNvdXJjZUZp
bGUsIHRhcmdldEZpbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvayA9IGxpbmtGaWxl
KHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIG1vZGlm
aWNhdGlvbiB0aW1lIG9mIHRoZSBkaXJlY3RvcmllcyBiZWNhdXNlCisgICAgLy8gaXQgY291bGQg
aGF2ZSBtZWFuaW5nIGUuZy4gaW4gdGhlIGhhc2hnZW5lcmF0aW9uIG9mIGNhY2hlIGZpbGVzLgor
ICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIGlmIChsc3RhdChzb3VyY2VEaXJlY3RvcnlQ
YXRoLCAmZmlsZVN0YXQpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgYnkgb2J0
YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGRpcmVjdG9yeSAoJXMpOiAlc1xuIiwgc291cmNlRGly
ZWN0b3J5UGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBzdHJ1Y3QgdXRpbWJ1ZiB0aW1lcyA9IHsgZmlsZVN0YXQuc3RfYXRpbWUsIGZpbGVT
dGF0LnN0X210aW1lIH07CisgICAgaWYgKHV0aW1lKHRhcmdldERpcmVjdG9yeVBhdGgsICZ0aW1l
cykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBzZXQgYmFjayB0aGUgbGFz
dCBtb2RpZmljYXRpb24gdGltZSBvZiAlczogJXNcbiIsIHRhcmdldERpcmVjdG9yeVBhdGgsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNvbGxlY3RSdW5UaW1lRGVwZW5kZW5jaWVzKCkKK3sK
KyAgICAvLyBUaGUgbGlzdCBvZiBlbXBpcmljYWxseSBnYXRoZXJlZCBsaWJyYXJ5IGRlcGVuZGVu
Y2llcy4KKyAgICBjb25zdCBjaGFyKiBydW50aW1lRGVwZW5kZW5jaWVzW10gPSB7CisgICAgICAg
ICJsaWJuc3NfZG5zLnNvIiwKKyAgICAgICAgImxpYnJlc29sdi5zbyIsCisgICAgICAgICJsaWJz
c2wuc28iLAorICAgICAgICAibGliY3J5cHRvLnNvIiwKKyAgICAgICAgMAorICAgIH07CisKKyAg
ICBjb25zdCBjaGFyKiogY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5ID0gcnVudGltZURlcGVuZGVu
Y2llczsKKyAgICB3aGlsZSAoKmN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSkgeworICAgICAgICAv
LyBUbyBvYnRhaW4gdGhlIHBhdGggb2YgdGhlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIHdlIG9wZW4g
dGhlbSB3aXRoIGRsb3Blbi4KKyAgICAgICAgLy8gV2l0aCB0aGUgaGFuZGxlIHN1cHBsaWVkIGJ5
IGRsb3BlbiB3ZSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkeW5hbWljYWxseQor
ICAgICAgICAvLyBsaW5rZWQgbGlicmFyaWVzLCBzbyB0aGUgcGF0aCB3aGVyZSBhcmUgdGhleSBp
bnN0YWxsZWQuCisgICAgICAgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigqY3VycmVudFJ1bnRpbWVE
ZXBlbmRlbmN5LCBSVExEX0xBWlkpOworICAgICAgICBpZiAoIWhhbmRsZSkgeworICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGhhbmRsZXIgb2YgJXM6ICVzXG4i
LCAqY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5LCBkbGVycm9yKCkpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IGxpbmtfbWFwKiBsaW5rTWFw
OworICAgICAgICBpZiAoZGxpbmZvKGhhbmRsZSwgUlRMRF9ESV9MSU5LTUFQLCAmbGlua01hcCkp
IHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZ2V0IGluZm9ybWF0aW9u
IGFib3V0ICVzOiAlc1xuIiwgKmN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWxpbmtNYXApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZ2V0IHRo
ZSBsaW5rbWFwIG9mICVzOiAlcy5cbiIsICpjdXJyZW50UnVudGltZURlcGVuZGVuY3ksIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBjaGFyIHBhdGhPZlRoZUxpYnJhcnlbUGF0aFNpemVdOworICAgICAgICBjaGFyIHBhdGhP
ZlRoZUxpYnJhcnlJblNhbmRib3hbUGF0aFNpemVdOworICAgICAgICBpZiAoIXN0cmluZ0NvcHko
cGF0aE9mVGhlTGlicmFyeSwgbGlua01hcC0+bF9uYW1lLCBQYXRoU2l6ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghc3RyaW5nQ29uY2F0KHBhdGhPZlRoZUxpYnJh
cnlJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksIHBhdGhPZlRoZUxpYnJhcnksIFBhdGhTaXpl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFsaW5rRmlsZShwYXRo
T2ZUaGVMaWJyYXJ5LCBwYXRoT2ZUaGVMaWJyYXJ5SW5TYW5kYm94KSkgeworICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJMaW5raW5nIHJ1bnRpbWUgZGVwZW5kZW5jeTogJXMgZmFpbGVkOiAl
c1xuIiwgcGF0aE9mVGhlTGlicmFyeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGRs
Y2xvc2UoaGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBkbGNsb3NlKGhhbmRsZSk7CisgICAgICAgICsrY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgc2V0dXBYYXV0aG9y
aXR5Rm9yTm9ib2R5VXNlcigpCit7CisgICAgLy8gVG8gYmUgYWJsZSB1c2UgWCBpbnNpZGUgdGhl
IHNhbmRib3ggYW4gLlhhdXRob3JpdHkgZmlsZSBtdXN0IGJlIGV4aXN0IGluc2lkZSBpdCwKKyAg
ICAvLyBvd25lZCBieSB0aGUgc2FuZGJveHVzZXIuIEZ1cnRoZXJtb3JlLCBYQVVUSE9SSVRZIGVu
dmlyb25tZW50IHZhcmlhYmxlIG11c3QgcG9pbnQgdG8gaXQuCisgICAgY2hhciBidWZmZXJbQlVG
U0laXTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzdHJ1Y3QgcGFzc3dkKiByZWFsVXNlciA9IGdl
dHB3dWlkKGdldGdpZCgpKTsKKyAgICBjaGFyIHhhdXRob3JpdHlPZlJlYWxVc2VyW1BhdGhTaXpl
XTsKKyAgICBjaGFyIHhhdXRob3JpdHlJblNhbmRib3hbUGF0aFNpemVdOworICAgIGlmICghc3Ry
aW5nQ29uY2F0KHhhdXRob3JpdHlPZlJlYWxVc2VyLCByZWFsVXNlci0+cHdfZGlyLCAiLy5YYXV0
aG9yaXR5IiwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzdHJp
bmdDb25jYXQoeGF1dGhvcml0eUluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgeGF1dGhvcml0
eU9mUmVhbFVzZXIsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRklM
RSogc291cmNlID0gZm9wZW4oeGF1dGhvcml0eU9mUmVhbFVzZXIsICJyYiIpOworICAgIGlmICgh
c291cmNlKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiAlczogJXNc
biIsIHhhdXRob3JpdHlPZlJlYWxVc2VyLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgRklMRSogZGVzdCA9IGZvcGVuKHhhdXRob3JpdHlJblNh
bmRib3gsICJ3YiIpOworICAgIGlmICghZGVzdCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNvdWxkbid0IG9wZW4gJXM6ICVzXG4iLCB4YXV0aG9yaXR5SW5TYW5kYm94LCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2UgY29weSB0
aGUgLlhhdXRob3JpdHkgZmlsZSBvZiB0aGUgcmVhbCB1c2VyIChpbnN0ZWFkIG9mIGxpbmtpbmcp
IGJlY2F1c2Ugbm9ib2R5IHVzZXIKKyAgICAvLyBzaG91bGQgb3duIGl0IGJ1dCB3ZSBkb24ndCB3
YW50IHRvIGNoYW5nZSB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIG9yaWdpbmFsIGZpbGUuCisgICAg
d2hpbGUgKChzaXplID0gZnJlYWQoYnVmZmVyLCAxLCBCVUZTSVosIHNvdXJjZSkpKQorICAgICAg
ICBmd3JpdGUoYnVmZmVyLCAxLCBzaXplLCBkZXN0KTsKKworICAgIGZjbG9zZShzb3VyY2UpOwor
ICAgIGZjbG9zZShkZXN0KTsKKworICAgIGlmIChjaG93bih4YXV0aG9yaXR5SW5TYW5kYm94LCBz
YW5kYm94VXNlclVpZCwgc2FuZGJveFVzZXJHaWQpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ2hvd25pbmcgLlhhdXRob3JpdHkgKCVzKSBmYWlsZWQ6ICVzLlxuIiwgeGF1dGhvcml0eUlu
U2FuZGJveCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBpZiAoc2V0ZW52KCJYQVVUSE9SSVRZIiwgeGF1dGhvcml0eUluU2FuZGJveCwgMSkpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBzZXQgdGhlIFhBVVRIT1JJVFkgZW52
cmlvbm1lbnQgdmFyaWFibGU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBpbml0
U2FuZGJveCgpCit7CisgICAgLy8gQ3JlYXRlIHRoZSBzYW5kYm94IGRpcmVjdG9yeS4gV2Ugb25s
eSBuZWVkIHRvIHN0ZXAgaW50byBpdCwgc28KKyAgICAvLyB0aGUgZXhlY3V0YWJsZSBwZXJtaXNz
aW9uIGlzIG5lZWRlZCBvbmx5LgorICAgIGlmIChta2RpcihzYW5kYm94RGlyZWN0b3J5LCBTX0lG
RElSIHwgU19JWFVTUiB8IFNfSVhPVEgpKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1Qp
IHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3JlYXRlIHRoZSBzYW5k
Ym94IGRpcmVjdG9yeTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWNyZWF0ZURldmljZUZpbGVz
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbW91bnRGaWxlU3lzdGVtcygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBIYXJkIGxpbmsgY2FjaGUgYW5kIGZv
bnQgZGlyZWN0b3JpZXMgaW50byB0aGUgc2FuZGJveCBlbnZpcm9ubWVudC4KKyAgICBzdHJ1Y3Qg
cGFzc3dkKiB1c2VySW5mbyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKyAgICBjb25zdCBjaGFyKiBo
b21lID0gdXNlckluZm8tPnB3X2RpcjsKKyAgICBjaGFyIGxvY2FsRGlyW1BhdGhTaXplXTsKKyAg
ICBpZiAoIXN0cmluZ0NvbmNhdChsb2NhbERpciwgaG9tZSwgIi8ubG9jYWwvc2hhcmUvTm9raWEv
IiwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBjYWNoZURpcltQ
YXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoY2FjaGVEaXIsIGhvbWUsICIvLmNhY2hl
L05va2lhLyIsIFBhdGhTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNoYXIgZm9u
dERpcltQYXRoU2l6ZV07CisgICAgaWYgKCFzdHJpbmdDb25jYXQoZm9udERpciwgaG9tZSwgIi8u
Zm9udGNvbmZpZy8iLCBQYXRoU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25z
dCBjaGFyKiBsaW5rZWREaXJlY3Rvcmllc1tdID0geworICAgICAgICBjYWNoZURpciwKKyAgICAg
ICAgZm9udERpciwKKyAgICAgICAgbG9jYWxEaXIsCisgICAgICAgICIvZXRjL2ZvbnRzLyIsCisg
ICAgICAgICIvZXRjL3NzbC9jZXJ0cy8iLAorICAgICAgICAiL3Zhci9jYWNoZS9mb250Y29uZmln
LyIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzLyIsCisgICAgICAgIDAKKyAgICB9OworCisg
ICAgY29uc3QgY2hhcioqIGN1cnJlbnRMaW5rZWREaXJlY3RvcnkgPSBsaW5rZWREaXJlY3Rvcmll
czsKKyAgICB3aGlsZSAoKmN1cnJlbnRMaW5rZWREaXJlY3RvcnkpIHsKKyAgICAgICAgY2hhciBs
aW5rZWREaXJlY3RvcnlJblNhbmRib3hbUGF0aFNpemVdOworICAgICAgICBpZiAoIXN0cmluZ0Nv
bmNhdChsaW5rZWREaXJlY3RvcnlJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksICpjdXJyZW50
TGlua2VkRGlyZWN0b3J5LCBQYXRoU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmICghbGlua0RpcmVjdG9yeSgqY3VycmVudExpbmtlZERpcmVjdG9yeSwgbGlua2Vk
RGlyZWN0b3J5SW5TYW5kYm94KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
KytjdXJyZW50TGlua2VkRGlyZWN0b3J5OworICAgIH0KKworICAgIGlmICghc2V0dXBYYXV0aG9y
aXR5Rm9yTm9ib2R5VXNlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
Y29sbGVjdFJ1blRpbWVEZXBlbmRlbmNpZXMoKTsKK30KKworc3RhdGljIGJvb2wgcmVzdHJpY3RD
YXBhYmlsaXRpZXMoKQoreworICAgIC8vIENhcGFiaWxpdGllcyB3ZSBuZWVkLgorICAgIGNhcF92
YWx1ZV90IGNhcGFiaWx0eUxpc3RbNF07CisgICAgY2FwYWJpbHR5TGlzdFswXSA9IENBUF9TRVRV
SUQ7CisgICAgY2FwYWJpbHR5TGlzdFsxXSA9IENBUF9TRVRHSUQ7CisgICAgY2FwYWJpbHR5TGlz
dFsyXSA9IENBUF9TWVNfQURNSU47IC8vIENsb25pbmcgd2l0aCBDTE9ORV9ORVdQSUQgZmxhZyBs
YXRlciB3aWxsIG5lZWQgdGhpcyBjYXBhYmlsaXR5LgorICAgIGNhcGFiaWx0eUxpc3RbM10gPSBD
QVBfU1lTX0NIUk9PVDsKKworICAgIC8vIFJlZHVjZSBjYXBhYmlsaXRpZXMgdG8gd2hhdCB3ZSBu
ZWVkLgorICAgIC8vIEFsdGhvdWdoIHdlIHN0aWxsIGhhdmUgcm9vdCBldWlkIGFuZCB3ZSBrZWVw
IHJvb3QgZXF1aXZhbGVudCBjYXBhYmlsaXRpZXMsCisgICAgLy8gd2UgcmVtb3ZlZCAoPSBkaWRu
J3QgYWRkKSBDQVBfU1lTX1JFU1NPVVJDRSBjYXBhYmlsaXRlcyBhbmQgdGhpcyByZXN1bHRlZCB0
aGF0CisgICAgLy8gdGhlIHNldHJsaW1pdCBmdW5jdGlvbiB3aXRoIFJMSU1JVF9OT0ZJTEUgd2ls
bCBiZSBlZmZlY3RpdmUgbGF0ZXIuCisgICAgaWYgKCFzZXRDYXBhYmlsaXRpZXMoY2FwYWJpbHR5
TGlzdCwgc2l6ZW9mKGNhcGFiaWx0eUxpc3QpIC8gc2l6ZW9mKGNhcGFiaWx0eUxpc3RbMF0pKSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhZGp1c3QgcHJvY2VzcyBjYXBh
YmlsaXRpZXM6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbW92ZVRvTmV3UGlk
TmFtZXNwYWNlKCkKK3sKKyAgICAvLyBDTE9ORV9ORVdQSUQgYW5kIENMT05FX0ZTIHNob3VsZCBi
ZSBpbiB0aGF0IG9yZGVyLgorICAgIC8vIFdlIGNhbid0IHNoYXJlIEZTIGFjY3Jvc3MgbmFtZXNw
YWNlcy4KKyAgICBwaWRfdCBwaWQsIGV4cGVjdGVkUGlkOworICAgIGludCBzdGF0dXM7CisgICAg
cGlkID0gc3lzY2FsbChTWVNfY2xvbmUsIENMT05FX05FV1BJRCB8IFNJR0NITEQsIDAsIDAsIDAp
OworCisgICAgc3dpdGNoIChwaWQpIHsKKyAgICBjYXNlIC0xOgorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNsb25pbmcgaXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgMDoKKyAgICAgICAgLy8gQ2hpbGQgc2hvdWxkIHJ1
biB3aXRoIHBpZCBudW1iZXIgMSBpbiB0aGUgbmV3IG5hbWVzcGFjZS4KKyAgICAgICAgaWYgKGdl
dHBpZCgpICE9IDEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3Jl
YXRlIGEgbmV3IFBJRCBuYW1lc3BhY2UuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICAv
LyBXZSBhcmUgd2FpdGluZyBmb3Igb3VyIGNoaWxkIChXZWJQcm9jZXNzKS4KKyAgICAgICAgLy8g
SWYgdGhpcyB3YWl0IGlzIHN1Y2Nlc3NmdWwgaXQgbWVhbnMgdGhhdCBvdXIgY2hpbGQgaXMgdGVy
bWluYXRlZC4KKyAgICAgICAgZXhwZWN0ZWRQaWQgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCk7
CisgICAgICAgIGlmIChleHBlY3RlZFBpZCAhPSBwaWQpIHsKKyAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiV2FpdHBpZCBpcyBmYWlsZWQgd2l0aDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KFdJRkVYSVRFRChzdGF0dXMpKQorICAgICAgICAgICAgZXhpdChXRVhJVFNUQVRVUyhzdGF0dXMp
KTsKKyAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIH0KKyAgICAvLyBXZSBzaG91bGQg
bmV2ZXIgcmVhY2ggaGVyZS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHJ1
bihpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdKQoreworICAgIHN0cnVjdCBwYXNzd2QqIHVz
ZXJJbmZvID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworICAgIGlmICghdXNlckluZm8pIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGN1cnJlbnQgdXNlcjogJXMuXG4i
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlm
ICghc3RyaW5nQ29uY2F0KHNhbmRib3hEaXJlY3RvcnksIHVzZXJJbmZvLT5wd19kaXIsICIvLndr
Mi1zYW5kYm94IiwgUGF0aFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBD
dXJyZW50bHkgd2UgdXNlIG5vYm9keSB1c2VyIGFzIHRoZSBzYW5kYm94IHVzZXIgYW5kIGZhbGxi
YWNrIHRvIHRoZSByZWFsIHVzZXIKKyAgICAvLyBpZiBpdCdzIGZhaWxlZC4gKFdlIGNvdWxkIGV4
dGVuZCB0aGlzIGluIHRoZSBmdXR1cmUgd2l0aCBhIHNwZWNpZmljIHJlc3RyaWN0ZWQgdXNlci4p
CisgICAgc3RydWN0IHBhc3N3ZCogbm9ib2R5VXNlciA9IGdldHB3bmFtKCJub2JvZHkiKTsKKyAg
ICBpZiAobm9ib2R5VXNlcikgeworICAgICAgICBzYW5kYm94VXNlclVpZCA9IG5vYm9keVVzZXIt
PnB3X3VpZDsKKyAgICAgICAgc2FuZGJveFVzZXJHaWQgPSBub2JvZHlVc2VyLT5wd19naWQ7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgc2FuZGJveFVzZXJVaWQgPSBnZXR1aWQoKTsKKyAgICAgICAg
c2FuZGJveFVzZXJHaWQgPSBnZXRnaWQoKTsKKyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgaGF2
ZSB0aHJlZSBwYXJhbWV0ZXJzOgorICAgIC8vIHBhdGhfb2ZfdGhpc19iaW5hcnkgcGF0aF9vZl90
aGVfd2VicHJvY2VzcyBzb2NrZXRfdG9fY29tbXVuaWNhdGVfd2l0aF91aXByb2Nlc3MKKyAgICBp
ZiAoYXJnYyAhPSAzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcgU2FuZGJv
eFByb2Nlc3MgcmVxdWlyZXMgMyBwYXJhbWV0ZXJzIVxuIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyBTYW5kYm94UHJvY2VzcyBzaG91bGQgYmUgcnVuIHdpdGggc3Vp
ZCBmbGFnIC4uLgorICAgIGlmIChnZXRldWlkKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJUaGUgc2FuZGJveCBpcyBub3Qgc2V0ZXVpZCByb290LlxuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyAuLi4gYnV0IG5vdCBhcyByb290IChub3Qgd2l0aCBzdWRv
KS4KKyAgICBpZiAoIWdldHVpZCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGhlIHNh
bmRib3ggaXMgbm90IGRlc2lnbmVkIHRvIGJlIHJ1biBieSByb290LlxuIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluaXRTYW5kYm94KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghcmVzdHJpY3RDYXBhYmlsaXRpZXMoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgbW92ZSBvdXJzZWxmIGFuZCBvdXIgY2hpbGRyZW4g
aW50byBhIG5ldyBQSUQgbmFtZXNwYWNlLAorICAgIC8vIHdoZXJlIHByb2Nlc3MgSURzIHN0YXJ0
IGZyb20gMCBhZ2Fpbi4KKyAgICBpZiAoIW1vdmVUb05ld1BpZE5hbWVzcGFjZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTdGFydGluZyBhIGhlbHBlciB3aGF0IHdpbGwgd2Fp
dGluZyBmb3IgdGhlICJjaHJvb3RtZSIgbWVzc2FnZSBmcm9tIFdlYlByb2Nlc3MuCisgICAgaWYg
KCFwcmVwYXJlQW5kU3RhcnRDaGFuZ2VSb290SGVscGVyKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIFdlIGRvbid0IG5lZWQgYW55IHNwZWNpYWwgcHJpdmlsZWdlcyBhbnltb3Jl
LgorICAgIGlmICghZHJvcFByaXZpbGVnZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gU2FuaXR5IGNoZWNrOiBpZiBvdXIgZWZmZWN0aXZlIG9yIHJlYWwgdWlkL2dpZCBpcyBz
dGlsbCAwIChyb290KSBvcgorICAgIC8vIHdlIGNhbiBzZXQgYW55IG9mIHRoZW0gdG8gMCwgdGhl
biB0aGUgZHJvcHBpbmcgb2YgcHJpdmlsZWdlcyBpcyBmYWlsZWQuCisgICAgLy8gV2UgZW5zdXJl
IGhlcmUgdGhhdCB3ZSBjYW5ub3Qgc2V0IHJvb3QgaWQgYWZ0ZXIgaGVyZS4KKyAgICBpZiAoIWdl
dGV1aWQoKSB8fCAhZ2V0ZWdpZCgpIHx8ICFzZXR1aWQoMCkgfHwgIXNldGdpZCgwKSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkRyb3BwaW5nIHByaXZpbGVnZXMgZmFpbGVkIVxuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgV2ViUHJvY2Vz
cy4KKyAgICBleGVjbChhcmd2WzFdLCBhcmd2WzFdLCBhcmd2WzJdLCByZWludGVycHJldF9jYXN0
PGNoYXIqPigwKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBj
aGFyICpjb25zdCBhcmd2W10pCit7CisgICAgcmV0dXJuIHJ1bihhcmdjLCBhcmd2KSA/IDAgOiAx
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9j
ZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGlu
dXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjYyN2MxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExp
bnV4LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5p
QGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU2FuZGJv
eEVudmlyb25tZW50TGludXhfaAorI2RlZmluZSBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisK
KyNkZWZpbmUgU0FOREJPWF9ERVNDUklQVE9SICJTQU5EQk9YX0RFU0NSSVBUT1IiCisjZGVmaW5l
IFNBTkRCT1hfSEVMUEVSX1BJRCAiU0FOREJPWF9IRUxQRVJfUElEIgorCisjZGVmaW5lIE1TR19D
SFJPT1RNRSAnQycKKyNkZWZpbmUgTVNHX0NIUk9PVEVEICdPJworCisjZW5kaWYgLy8gU2FuZGJv
eEVudmlyb25tZW50TGludXhfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9ucy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjY2M3MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRp
b25zLmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJl
bmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgIlN0
cmluZ09wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CisKK2Jvb2wgc3RyaW5nQ29weShjaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291
cmNlLCBpbnQgbWF4U2l6ZSkKK3sKKyAgICBpbnQgbGVuZ3RoID0gc3Rybmxlbihzb3VyY2UsIG1h
eFNpemUpOworICAgIGlmIChsZW5ndGggPiBtYXhTaXplIC0gMSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkVycm9yOiBidWZmZXIgaXMgdG9vIHNtYWxsOiAlZCAlcy5cbiIsIG1heFNpemUs
IHNvdXJjZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIGxlbmd0aCArIDEpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IHN0cmluZ0NvcHkoY2hhciogZGVzdGluYXRpb24sIGNvbnN0IGNoYXIqIHNvdXJjZSwgY29uc3Qg
aW50IGxlbmd0aCwgaW50IG1heFNpemUpCit7CisgICAgaWYgKGxlbmd0aCA+IG1heFNpemUgLSAx
IHx8IGxlbmd0aCA+IHN0cm5sZW4oc291cmNlLCBtYXhTaXplKSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkVycm9yOiBidWZmZXIgaXMgdG9vIHNtYWxsOiAlZCAlcy5cbiIsIG1heFNpemUs
IHNvdXJjZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWVtY3B5KGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIGxlbmd0aCk7CisgICAgZGVzdGluYXRpb25bbGVuZ3RoXSA9ICdcMCc7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc3RyaW5nQ29uY2F0KGNoYXIqIGRlc3RpbmF0
aW9uLCBjb25zdCBjaGFyKiBzb3VyY2UxLCBjb25zdCBjaGFyKiBzb3VyY2UyLCBpbnQgbWF4U2l6
ZSkKK3sKKyAgICBpbnQgbGVuZ3RoMSA9IHN0cm5sZW4oc291cmNlMSwgbWF4U2l6ZSk7CisgICAg
aW50IGxlbmd0aDIgPSBzdHJubGVuKHNvdXJjZTIsIG1heFNpemUpOworICAgIGlmIChsZW5ndGgx
ICsgbGVuZ3RoMiA+IG1heFNpemUgLSAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy
b3I6IGJ1ZmZlciBpcyB0b28gc21hbGw6ICVkICVkICVzICVzLlxuIiwgbWF4U2l6ZSwgbGVuZ3Ro
MSArIGxlbmd0aDIsIHNvdXJjZTEsIHNvdXJjZTIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlMSwgbGVuZ3RoMSk7CisgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uICsgbGVuZ3RoMSwgc291cmNlMiwgbGVuZ3RoMiArIDEpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIHN0cmluZ0NvbmNhdChjaGFyKiBkZXN0aW5hdGlvbiwgY29u
c3QgY2hhciogc291cmNlMSwgY29uc3QgY2hhciogc291cmNlMiwgY29uc3QgY2hhciogc291cmNl
MywgaW50IG1heFNpemUpCit7CisgICAgaW50IGxlbmd0aDEgPSBzdHJubGVuKHNvdXJjZTEsIG1h
eFNpemUpOworICAgIGludCBsZW5ndGgyID0gc3Rybmxlbihzb3VyY2UyLCBtYXhTaXplKTsKKyAg
ICBpbnQgbGVuZ3RoMyA9IHN0cm5sZW4oc291cmNlMywgbWF4U2l6ZSk7CisgICAgaWYgKGxlbmd0
aDEgKyBsZW5ndGgyICsgbGVuZ3RoMyA+IG1heFNpemUgLSAxKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiRXJyb3I6IGJ1ZmZlciBpcyB0b28gc21hbGw6ICVkICVkICVzICVzICVzLlxuIiwg
bWF4U2l6ZSwgbGVuZ3RoMSArIGxlbmd0aDIgKyBsZW5ndGgzLCBzb3VyY2UxLCBzb3VyY2UyLCBz
b3VyY2UzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtZW1jcHkoZGVzdGlu
YXRpb24sIHNvdXJjZTEsIGxlbmd0aDEpOworICAgIG1lbWNweShkZXN0aW5hdGlvbiArIGxlbmd0
aDEsIHNvdXJjZTIsIGxlbmd0aDIpOworICAgIG1lbWNweShkZXN0aW5hdGlvbiArIGxlbmd0aDEg
KyBsZW5ndGgyLCBzb3VyY2UzLCBsZW5ndGgzKTsKKyAgICBkZXN0aW5hdGlvbltsZW5ndGgxICsg
bGVuZ3RoMiArIGxlbmd0aDNdID0gJ1wwJzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBz
dHJpbmdBcHBlbmQoY2hhciogZGVzdGluYXRpb24sIGNvbnN0IGNoYXIqIHNvdXJjZSwgaW50IG1h
eFNpemUpCit7CisgICAgaW50IHNvdXJjZUxlbmd0aCA9IHN0cm5sZW4oc291cmNlLCBtYXhTaXpl
KTsKKyAgICBpbnQgZGVzdGluYXRpb25MZW5ndGggPSBzdHJubGVuKGRlc3RpbmF0aW9uLCBtYXhT
aXplKTsKKyAgICBpZiAoc291cmNlTGVuZ3RoICsgZGVzdGluYXRpb25MZW5ndGggPiBtYXhTaXpl
IC0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBidWZmZXIgaXMgdG9vIHNt
YWxsOiAlZCAlcy5cbiIsIG1heFNpemUsIHNvdXJjZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uICsgZGVzdGluYXRpb25MZW5ndGgsIHNvdXJj
ZSwgc291cmNlTGVuZ3RoICsgMSk7CisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU3RyaW5nT3BlcmF0aW9u
cy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1N0cmluZ09w
ZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTgzNzVjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9j
ZXNzL1N0cmluZ09wZXJhdGlvbnMuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVu
YXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBTdHJpbmdPcGVyYXRpb25zX2gKKyNkZWZpbmUgU3RyaW5nT3BlcmF0aW9uc19o
CisKKy8vIFNlY3VyZSBzdHJpbmcgb3BlcmF0aW9ucy4KK2Jvb2wgc3RyaW5nQ29weShjaGFyKiwg
Y29uc3QgY2hhciosIGludCk7Citib29sIHN0cmluZ0NvcHkoY2hhciosIGNvbnN0IGNoYXIqLCBj
b25zdCBpbnQsIGludCk7Citib29sIHN0cmluZ0NvbmNhdChjaGFyKiwgY29uc3QgY2hhciosIGNv
bnN0IGNoYXIqLCBpbnQpOworYm9vbCBzdHJpbmdDb25jYXQoY2hhciosIGNvbnN0IGNoYXIqLCBj
b25zdCBjaGFyKiwgY29uc3QgY2hhciosIGludCk7Citib29sIHN0cmluZ0FwcGVuZChjaGFyKiwg
Y29uc3QgY2hhciosIGludCk7CisKKyNlbmRpZiAvLyBTdHJpbmdPcGVyYXRpb25zX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNo
ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xh
dW5jaGVyUXQuY3BwCmluZGV4IDBiNmVlMWIuLjVjMjE5YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNw
cApAQCAtNjIsNiArNjIsMTAgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4K
KyNlbmRpZgorCiAjaWYgT1MoREFSV0lOKQogI2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+CiAj
aW5jbHVkZSA8c2VydmVycy9ib290c3RyYXAuaD4KQEAgLTE2NywzNyArMTcxLDQ5IEBAIHZvaWQg
UHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKICAgICBjb21tYW5kTGluZSA9IGNvbW1h
bmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKICNlbmRpZgogCi0gICAgUVByb2Nlc3MqIHdlYlByb2Nl
c3MgPSBuZXcgUXRXZWJQcm9jZXNzKCk7Ci0gICAgd2ViUHJvY2Vzcy0+c2V0UHJvY2Vzc0NoYW5u
ZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFubmVscyk7Ci0gICAgd2ViUHJvY2Vzcy0+c3Rh
cnQoY29tbWFuZExpbmUpOworICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOwor
ICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXIgPSBuZXcgUXRXZWJQcm9jZXNzKCk7CisgICAgd2Vi
UHJvY2Vzc09yU1VJREhlbHBlci0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3
YXJkZWRDaGFubmVscyk7CisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIGlm
IChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPT0gV2ViUHJvY2VzcykgeworICAgICAgICBR
U3RyaW5nIHNhbmRib3hDb21tYW5kTGluZSA9IFFMYXRpbjFTdHJpbmcoIiUxICUyICUzIik7Cisg
ICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoUUNvcmVB
cHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQYXRoKCkgKyBRTGF0aW4xU3RyaW5nKCIvU1VJRFNh
bmRib3hIZWxwZXIiKSk7CisgICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21t
YW5kTGluZS5hcmcoZXhlY3V0YWJsZVBhdGhPZldlYlByb2Nlc3MoKSk7CisgICAgICAgIHNhbmRi
b3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoc29ja2V0c1swXSk7CisKKyAg
ICAgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c3RhcnQoc2FuZGJveENvbW1hbmRMaW5lKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c3RhcnQoY29tbWFu
ZExpbmUpOworI2Vsc2UKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChjb21tYW5k
TGluZSk7CisjZW5kaWYKIAogI2lmIE9TKFVOSVgpICYmICFPUyhEQVJXSU4pCiAgICAgLy8gRG9u
J3QgZXhwb3NlIHRoZSB3ZWIgc29ja2V0IHRvIHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJvY2Vzc2Vz
CiAgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNbMF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0x
KSB7CiAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewogICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAgICAgICAg
IGRlbGV0ZSB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoIXdlYlByb2Nlc3MtPndhaXRGb3JTdGFy
dGVkKCkpIHsKKyAgICBpZiAoIXdlYlByb2Nlc3NPclNVSURIZWxwZXItPndhaXRGb3JTdGFydGVk
KCkpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkZhaWxlZCB0byBzdGFydCIgPDwgY29tbWFuZExp
bmU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2lmIE9TKERBUldJTikKICAgICAg
ICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgY29ubmVjdG9yKTsKICAg
ICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGNvbm5lY3RvciwgTUFD
SF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKICNlbmRpZgotICAgICAgICBkZWxldGUgd2ViUHJv
Y2VzczsKKyAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0KICNpZiBPUyhVTklYKQotICAgIHNldHByaW9yaXR5KFBSSU9fUFJPQ0VT
Uywgd2ViUHJvY2Vzcy0+cGlkKCksIDEwKTsKKyAgICBzZXRwcmlvcml0eShQUklPX1BST0NFU1Ms
IHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnBpZCgpLCAxMCk7CiAjZW5kaWYKLQotICAgIFJ1bkxv
b3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZp
bmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMsIHdlYlByb2Nlc3MsIGNvbm5lY3RvcikpOworICAg
IFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6
OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMsIHdlYlByb2Nlc3NPclNVSURIZWxwZXIs
IGNvbm5lY3RvcikpOwogfQogCiB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2Vz
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJpCmluZGV4IDgwY2IyZmIuLjY1NTJiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBA
IC0xNSw2ICsxNSw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvUGxhdGZv
cm0vQ29yZUlQQyBcCiAgICAgJCRTT1VSQ0VfRElSL1BsYXRmb3JtL3F0IFwKICAgICAkJFNPVVJD
RV9ESVIvU2hhcmVkIFwKKyAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9j
ZXNzIFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL0FQSS9jIFwKICAgICAkJFNPVVJDRV9ESVIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAgICQkU09VUkNFX0RJUi9TaGFyZWQvQ29y
ZUlQQ1N1cHBvcnQgXApAQCAtNjIsNyArNjMsNyBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRT
T1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJv
Y2Vzcy9xdCBcCi0gICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MKKyAgICAkJFNPVVJDRV9E
SVIvUGx1Z2luUHJvY2VzcyBcCiAKICMgVGhlIFdlYktpdDIgUXQgQVBJcyBkZXBlbmQgb24gcXdl
YmtpdGdsb2JhbC5oLCB3aGljaCBsaXZlcyBpbiBXZWJLaXQKIElOQ0xVREVQQVRIICs9ICQke1JP
T1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktpdC9xdC9BcGkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MucHJvIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8KaW5k
ZXggZTQxODY5NS4uNjM5M2FkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8KQEAgLTExLDYgKzExLDEw
IEBAIERFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0vYmluCiAKIFNPVVJDRVMgKz0gcXQvTWFp
blF0LmNwcAogCitJTkNMVURFUEFUSCA9IFwKKyAgICAkJFBXRC9TaGFyZWQvbGludXgvU2FuZGJv
eFByb2Nlc3MvIFwKKyAgICAkJElOQ0xVREVQQVRICisKIFFUICs9IG5ldHdvcmsgd2Via2l0d2lk
Z2V0cwogbWFjeDogUVQgKz0geG1sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCmluZGV4IDE4ZjMwMzk0Li5iZWFiYzgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKQEAg
LTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDxRVXJsPgog
I2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4K
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpAQCAtNjAsNiArNjIsMTAgQEAKIGV4dGVybiAiQyIga2Vybl9yZXR1cm5fdCBib290
c3RyYXBfbG9va191cDIobWFjaF9wb3J0X3QsIGNvbnN0IG5hbWVfdCwgbWFjaF9wb3J0X3QqLCBw
aWRfdCwgdWludDY0X3QpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVY
KQorI2luY2x1ZGUgIlNhbmRib3hFbnZpcm9ubWVudExpbnV4LmgiCisjZW5kaWYKKwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTQyLDE0ICsxNDgs
NzQgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVByb3h5KCkKICAgICBRTmV0d29ya1Byb3h5RmFj
dG9yeTo6c2V0VXNlU3lzdGVtQ29uZmlndXJhdGlvbih0cnVlKTsKIH0KIAorI2lmIEVOQUJMRShT
VUlEX1NBTkRCT1hfTElOVVgpCitwaWRfdCBjaHJvb3RNZSgpCit7CisgICAgbG9uZyBpbnQgc2Fu
ZGJveFNvY2tldERlc2NyaXB0b3IgPSAtMTsKKyAgICBjaGFyKiBzYW5kYm94U29ja2V0RGVzY3Jp
cHRvclN0cmluZzsKKyAgICBjaGFyKiBoZWxwZXJQaWQ7CisgICAgY2hhciBzYW5kYm94TWVNZXNz
YWdlID0gTVNHX0NIUk9PVE1FOworICAgIHNzaXplX3QgbnVtYmVyT2ZDaGFyYWN0ZXJzOworICAg
IHBpZF90IGhlbHBlciA9IC0xOworCisgICAgLy8gR2V0IHRoZSBmaWxlIGRlc2NyaXB0b3Igb2Yg
dGhlIHNvY2tldHBhaXIuCisgICAgc2FuZGJveFNvY2tldERlc2NyaXB0b3JTdHJpbmcgPSBnZXRl
bnYoU0FOREJPWF9ERVNDUklQVE9SKTsKKyAgICBpZiAoIXNhbmRib3hTb2NrZXREZXNjcmlwdG9y
U3RyaW5nKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBlcnJubyA9IDA7CisgICAgc2FuZGJv
eFNvY2tldERlc2NyaXB0b3IgPSBzdHJ0b2woc2FuZGJveFNvY2tldERlc2NyaXB0b3JTdHJpbmcs
IChjaGFyICoqKSAwLCAxMCk7CisgICAgaWYgKGVycm5vIHx8IChzYW5kYm94U29ja2V0RGVzY3Jp
cHRvciA9PSAtMSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8vIEdldCB0aGUgUElEIG9m
IHRoZSBzZXR1aWQgaGVscGVyLgorICAgIGhlbHBlclBpZCA9IGdldGVudihTQU5EQk9YX0hFTFBF
Ul9QSUQpOworCisgICAgLy8gSWYgbm8gUElEIGlzIGF2YWlsYWJsZSwgdGhlIGRlZmF1bHQgb2Yg
LTEgd2lsbCBkby4KKyAgICBpZiAoaGVscGVyUGlkKSB7CisgICAgICAgIGVycm5vID0gMDsKKyAg
ICAgICAgaGVscGVyID0gc3RydG9sKGhlbHBlclBpZCwgKGNoYXIgKiopIDAsIDEwKTsKKyAgICAg
ICAgaWYgKGVycm5vIHx8IChoZWxwZXIgPT0gLTEpKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKyAgICAvLyBTZW5kIHRoZSBjaHJvb3RNZSBtZXNzYWdlIHRvIHRoZSBoZWxwZXIuCisg
ICAgbnVtYmVyT2ZDaGFyYWN0ZXJzID0gd3JpdGUoc2FuZGJveFNvY2tldERlc2NyaXB0b3IsICZz
YW5kYm94TWVNZXNzYWdlLCAxKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFyYWN0ZXJzICE9IDEpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJvb3RNZSBtc2cgZmFpbGVkIHRvIHdyaXRlOiAl
cy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAg
Ly8gUmVhZCB0aGUgYWNrbm93bGVkZ2VtZW50IG1lc3NhZ2UgZnJvbSB0aGUgaGVscGVyLgorICAg
IG51bWJlck9mQ2hhcmFjdGVycyA9IHJlYWQoc2FuZGJveFNvY2tldERlc2NyaXB0b3IsICZzYW5k
Ym94TWVNZXNzYWdlLCAxKTsKKyAgICBpZiAoKG51bWJlck9mQ2hhcmFjdGVycyAhPSAxKSB8fCAo
c2FuZGJveE1lTWVzc2FnZSAhPSBNU0dfQ0hST09URUQpKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ291bGRuJ3QgcmVhZCB0aGUgY29uZmlybWF0aW9uIG1lc3NhZ2UuXG4iKTsKKyAgICAg
ICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjbG9zZShzYW5kYm94U29ja2V0RGVzY3JpcHRvcik7
CisgICAgLy8gV2FpdCBmb3IgdGhlIGhlbHBlciBwcm9jZXNzLgorICAgIGludCBleHBlY3RlZFBp
ZCA9IHdhaXRwaWQoaGVscGVyLCAwLCAwKTsKKyAgICBpZiAoZXhwZWN0ZWRQaWQgIT0gLTEgJiYg
KChoZWxwZXIgPT0gLTEpIHx8IChleHBlY3RlZFBpZCA9PSBoZWxwZXIpKSkKKyAgICAgICAgcmV0
dXJuIGV4cGVjdGVkUGlkOworICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgd2FpdCBmb3Ig
dGhlIGhlbHBlciBwcm9jZXNzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICByZXR1cm4g
LTE7Cit9CisjZW5kaWYKKwogUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChRR3Vp
QXBwbGljYXRpb24qIGFwcCkKIHsKLSAgICBpbml0aWFsaXplUHJveHkoKTsKKyNpZiBFTkFCTEUo
U1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIHBpZF90IGhlbHBlcjsKKyAgICBoZWxwZXIgPSBjaHJv
b3RNZSgpOwogCisgICAgaWYgKGhlbHBlciA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkFza2luZyBmb3IgY2hyb290IGZhaWxlZC5cbiIpOworICAgICAgICByZXR1cm4gLTE7Cisg
ICAgfQorI2VuZGlmCisgICAgaW5pdGlhbGl6ZVByb3h5KCk7CiAgICAgSlNDOjppbml0aWFsaXpl
VGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIFJ1bkxv
b3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwotICAgIAorCiAjaWYgVVNFKFFUS0lUKQogICAg
IEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlRm9yV0syKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NDVkYTViLi5iMGQ5ZTQz
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTItMTEtMTUgIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFtXSzJdIFB1dHRpbmcgUXRXZWJQcm9jZXNzIGludG8gYSBjaHJvb3RlZCBz
YW5kYm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MDAwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBmZWF0dXJlIGZsYWcgZm9yIHN1aWQgc2FuZGJveCBpbiBsaW51eC4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbToKKwogMjAxMi0xMS0xNCAgUnl1YW4gQ2hv
aSAgPHJ5dWFuLmNob2lAZ21haWwuY29tPgogCiAgICAgICAgIFtFRkxdIFBvcnQgdGlsZWQgYmFj
a2luZyBzdG9yZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmluZGV4IGNj
NWYwZGUuLjE4YzczOGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0
dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0K
QEAgLTEyMCw2ICsxMjAsNyBAQCBteSAoCiAgICAgJHNoYXJlZFdvcmtlcnNTdXBwb3J0LAogICAg
ICRzcWxEYXRhYmFzZVN1cHBvcnQsCiAgICAgJHN0eWxlU2NvcGVkU3VwcG9ydCwKKyAgICAkc3Vp
ZExpbnV4U2FuZGJveCwKICAgICAkc3ZnRE9NT2JqQ0JpbmRpbmdzU3VwcG9ydCwKICAgICAkc3Zn
Rm9udHNTdXBwb3J0LAogICAgICRzdmdTdXBwb3J0LApAQCAtMzc1LDYgKzM3Niw5IEBAIG15IEBm
ZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAic3R5bGUtc2NvcGVkIiwgZGVzYyA9PiAiVG9n
Z2xlIFN0eWxlIFNjb3BlZCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NUWUxF
X1NDT1BFRCIsIGRlZmF1bHQgPT4gaXNCbGFja0JlcnJ5KCksIHZhbHVlID0+IFwkc3R5bGVTY29w
ZWRTdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAic3VpZC1saW51eC1zYW5kYm94IiwgZGVz
YyA9PiAiVG9nZ2xlIHN1aWQgc2FuZGJveCBmb3IgbGludXgiLAorICAgICAgZGVmaW5lID0+ICJF
TkFCTEVfU1VJRF9TQU5EQk9YX0xJTlVYIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHN1aWRM
aW51eFNhbmRib3ggfSwKKwogICAgIHsgb3B0aW9uID0+ICJzdmciLCBkZXNjID0+ICJUb2dnbGUg
U1ZHIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1ZHIiwgZGVmYXVsdCA9PiAx
LCB2YWx1ZSA9PiBcJHN2Z1N1cHBvcnQgfSwKIAotLSAKMS43LjkuNQoK
</data>
<flag name="review"
          id="189467"
          type_id="1"
          status="-"
          setter="kling"
    />
    <flag name="commit-queue"
          id="189468"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174722</attachid>
            <date>2012-11-16 10:58:09 -0800</date>
            <delta_ts>2012-11-30 11:44:42 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-14.2.patch</filename>
            <type>text/plain</type>
            <size>47050</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA5ZjNkOTEzOTMyMThmOGY1MGZhMDI4NmJiNmI1ZjdjOTg1NjM3ZmQwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBGcmksIDE2IE5vdiAyMDEyIDE5OjU0OjIxICswMTAwClN1YmplY3Q6IFtQQVRDSF0gZmVsdG9s
dCAxNC4yCgotLS0KIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxMSArCiBTb3VyY2UvUXRXZWJLaXQucHJvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgIDUgKwogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDU2ICsrCiBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5w
cm8gICAgICAgICAgICAgICAgICB8ICAgMjUgKwogLi4uL1NhbmRib3hQcm9jZXNzL1NhbmRib3hF
bnZpcm9ubWVudExpbnV4LmNwcCAgICAgfCAgODI4ICsrKysrKysrKysrKysrKysrKysrCiAuLi4v
bGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCB8ICAgMzIgKwog
Li4uL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgICAgfCAgIDM2
ICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgNCArCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWlu
UXQuY3BwICB8ICAgNzAgKy0KIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAxMSArCiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxp
c3QucG0gICAgICAgICAgICB8ICAgIDQgKwogMTIgZmlsZXMgY2hhbmdlZCwgMTA3MiBpbnNlcnRp
b25zKCspLCAxMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9TYW5kYm94UHJvY2Vzcy5wcm8KIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9j
ZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9D
aGFuZ2VMb2cKaW5kZXggZDJjMjhmZS4uNmUwMzMxMSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisr
KyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTExLTE2ICBSZW5hdGEgSG9kb3Zh
biAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBbV0syXSBQdXR0aW5nIFF0V2ViUHJvY2Vz
cyBpbnRvIGEgY2hyb290ZWQgc2FuZGJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTAwMDUKKworICAgICAgICBSZXZpZXdlZCBieSBab2x0YW4gSGVy
Y3plZy4KKworICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIFdlYktpdDIgd2l0aCBT
YW5kYm94UHJvY2Vzcy4KKworICAgICAgICAqIFNvdXJjZS9RdFdlYktpdC5wcm86CisKIDIwMTIt
MTEtMTYgIFVsYW4gRGVnZW5iYWV2ICA8dWxhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4
XSBJbmNyZW1lbnQgdGhlIGFtb3VudCBvZiBleHRlcm5hbGx5IGFsbG9jYXRlZCBtZW1vcnkgZm9y
IHRoZSByZWNlaXZpbmcgVjggaXNvbGF0ZSB3aGVuIHRyYW5zZmVycmluZyBBcnJheUJ1ZmZlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1F0V2ViS2l0LnBybyBiL1NvdXJjZS9RdFdlYktpdC5wcm8KaW5k
ZXggNTlmOWEwZC4uYjA5ZDFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1F0V2ViS2l0LnBybworKysg
Yi9Tb3VyY2UvUXRXZWJLaXQucHJvCkBAIC0xNyw2ICsxNywxMSBAQCBidWlsZD8od2Via2l0Mikg
ewogICAgICAgICBwbHVnaW5wcm9jZXNzLmZpbGUgPSBXZWJLaXQyL1BsdWdpblByb2Nlc3MucHJv
CiAgICAgICAgIFNVQkRJUlMgKz0gcGx1Z2lucHJvY2VzcwogICAgIH0KKworICAgIGVuYWJsZT8o
U1VJRF9TQU5EQk9YX0xJTlVYKSB7CisgICAgICAgIHNhbmRib3hwcm9jZXNzLmZpbGUgPSBXZWJL
aXQyL1NhbmRib3hQcm9jZXNzLnBybworICAgICAgICBTVUJESVJTICs9IHNhbmRib3hwcm9jZXNz
CisgICAgfQogfQogCiBkZWNsYXJhdGl2ZS5maWxlID0gV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2Rl
Y2xhcmF0aXZlLnBybwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGU1ZmEwYjEuLmMxMDQwZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1OSBAQAorMjAxMi0xMS0xNiAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgW1dLMl0gUHV0dGluZyBRdFdlYlByb2Nlc3MgaW50byBhIGNocm9v
dGVkIHNhbmRib3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkwMDA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWm9sdGFuIEhlcmN6ZWcuCisKKyAgICAg
ICAgVGhpcyBuZXcgZmVhdHVyZSBtYWtlcyBwb3NzaWJsZSB0byBydW4gV2ViUHJvY2VzcyBpbnNp
ZGUgYSBjaHJvb3QuIEluIHRoaXMgY2FzZSBVSVByb2Nlc3MgY2FsbHMgdGhlCisgICAgICAgIGlu
dGVybmFsIFNhbmRib3hQcm9jZXNzIGJpbmFyeSB3aGF0IG1ha2VzIHVwIGFuIGVudmlyb25tZW50
IGZvciBXZWJQcm9jZXNzIGluc2lkZSB0aGUgc2FuZGJveCBhbmQgcnVucyB0aGUgV2ViUHJvY2Vz
cy4KKyAgICAgICAgU2FuZGJveFByb2Nlc3MgZmlyc3QgY3JlYXRlcyB0d28gbmVlZGVkIGRldmlj
ZSBmaWxlcyAocmFuZG9tIGFuZCB1cmFuZG9tKSwgbW91bnRzIGZpbGVzeXN0ZW1zIChwcm9jIGFu
ZCBzaGFyZWQgbWVtb3J5KSwKKyAgICAgICAgdGhlbiBsaW5rcyBydW4tdGltZSBkZXBlbmRlbmNp
ZXMgb2YgV2ViUHJvY2Vzcy4gQWZ0ZXIgdGhpcywgU2FuZGJveFByb2Nlc3MgbW92ZXMgdG8gYSBu
ZXcgcGlkIG5hbWVzcGFjZSAoY2xvbmluZyB3aXRoCisgICAgICAgIENMT05FX05FV1BJRCBmbGFn
KS4gVGhlbiBhZnRlciBhbiBvdGhlciBjbG9uaW5nICh3aXRoIENMT05FX0ZTIGZsYWcpIHdlIHNo
YXJlIG91ciBmaWxlc3lzdGVtIHdpdGggb3VyIGNoaWxkcmVuLiBUaGlzIGlzCisgICAgICAgIG5l
ZWRlZCBiZWNhdXNlIHdlIHdhbnQgdG8gY2FsbCBjaHJvb3QoKSBmdW5jdGlvbiBmcm9tIGhlcmUg
YW5kIGphaWwgb3VyIGNoaWxkIChXZWJQcm9jZXNzKSB0b28uIFRoaXMgd2lsbCBiZSBwZXJmb3Jt
ZWQKKyAgICAgICAgd2hlbiBXZWJQcm9jZXNzIHNlbmRzIGEgcmVxdWVzdCBmb3IgaXQgdmlhIGFu
IHNvY2tldHBhaXIuIElmIHNhbmRib3hpbmcgaXMgZG9uZSwgU2FuZGJveFByb2Nlc3MgZXhpdHMu
CisgICAgICAgIFNpbmNlIGNocm9vdCgpIHN5c3RlbSBjYWxsIG5lZWRzIHN1ZG9lciByaWdodHMg
U2FuZGJveFByb2Nlc3MgYmluYXJ5IHNob3VsZCBoYXZlIHNldCBpdHMgc3VpZCBmbGFnLiBIb3dl
dmVyIHdlIGNhbiByZWR1Y2UKKyAgICAgICAgaXRzIGNhcGFiaWxpdGVzLiBGaXJzdCB3ZSByZXN0
cmljdCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwcm9jZXNzIGFuZCB0aGUgbnVtYmVyIG9mIGl0
cyBwb3NzaWJsZSByZXNvdXJjZXMuIEZ1cnRoZXJtb3JlCisgICAgICAgIHdlIGZhbGxiYWNrIHRv
IHRoZSBub2JvZHkgb3IgdGhlIHJlYWwgdXNlci4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIFNhbmRib3hQcm9jZXNzLnBybzog
QWRkZWQuCisgICAgICAgICogU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZp
cm9ubWVudExpbnV4LmNwcDogQWRkZWQuCisgICAgICAgIChsYXVuY2hDaGFuZ2VSb290SGVscGVy
KToKKyAgICAgICAgKHNldEVudmlyb25tZW50VmFyaWFibGVzRm9yQ2hhbmdlUm9vdEhlbHBlcik6
CisgICAgICAgIChwcmVwYXJlQW5kU3RhcnRDaGFuZ2VSb290SGVscGVyKToKKyAgICAgICAgKHNl
dENhcGFiaWxpdGllcyk6CisgICAgICAgIChkcm9wUHJpdmlsZWdlcyk6CisgICAgICAgIChmaWxl
RXhpc3RzKToKKyAgICAgICAgKGRpcmVjdG9yeVBlcm1pc3Npb25zKToKKyAgICAgICAgKGNyZWF0
ZURpcmVjdG9yeSk6CisgICAgICAgIChjcmVhdGVEaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKGNy
ZWF0ZURldmljZUZpbGVzKToKKyAgICAgICAgKG1vdW50RmlsZVN5c3RlbXMpOgorICAgICAgICAo
bGlua0ZpbGUpOgorICAgICAgICAobGlua0RpcmVjdG9yeSk6CisgICAgICAgIChjb2xsZWN0UnVu
VGltZURlcGVuZGVuY2llcyk6CisgICAgICAgIChzZXR1cFhhdXRob3JpdHlGb3JOb2JvZHlVc2Vy
KToKKyAgICAgICAgKGluaXRTYW5kYm94KToKKyAgICAgICAgKHJlc3RyaWN0Q2FwYWJpbGl0aWVz
KToKKyAgICAgICAgKG1vdmVUb05ld1BpZE5hbWVzcGFjZSk6CisgICAgICAgIChydW4pOgorICAg
ICAgICAobWFpbik6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRi
b3hFbnZpcm9ubWVudExpbnV4Lmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9saW51eC9TYW5k
Ym94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzdHJpbmdD
b3B5KToKKyAgICAgICAgKHN0cmluZ0NvbmNhdCk6CisgICAgICAgIChzdHJpbmdBcHBlbmQpOgor
ICAgICAgICAqIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJR
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vzcyk6
CisgICAgICAgICogV2ViS2l0Mi5wcmk6CisgICAgICAgICogV2ViUHJvY2Vzcy5wcm86CisgICAg
ICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcDoKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJLaXQ6OmNocm9vdE1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc01haW5RdCk6CisKIDIwMTItMTEtMTUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUHJpdmF0ZSBCcm93c2luZyBpcyBhIHBlci1wYWdlIHNldHRpbmcg
dGhhdCBzZXRzIGEgZ2xvYmFsIHZhbHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5k
Ym94UHJvY2Vzcy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiMDU5NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NhbmRib3hQcm9jZXNzLnBybwpAQCAtMCwwICsxLDI1IEBACisjIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyMgUHJvamVjdCBmaWxlIGZvciB0aGUgV2ViS2l0MiBzYW5kYm94IHByb2Nlc3Mg
YmluYXJ5CisjCisjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2Yg
dGhlIGJ1aWxkIHN5c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RFTVBMQVRFID0gYXBwCisKK1RBUkdF
VCA9IFNVSURTYW5kYm94SGVscGVyCitERVNURElSID0gJCR7Uk9PVF9CVUlMRF9ESVJ9L2Jpbgor
CitDT05GSUcgKz0gY29uc29sZQorQ09ORklHIC09IHF0CisKK1NPVVJDRVMgKz0gU2hhcmVkL2xp
bnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcAorSEVBREVSUyAr
PSBTaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaAor
CitJTlNUQUxMUyArPSB0YXJnZXQKK0xJQlMgKz0gLWxjYXAgLWxkbAorCitpc0VtcHR5KElOU1RB
TExfQklOUykgeworICAgIHRhcmdldC5wYXRoID0gJCRbUVRfSU5TVEFMTF9CSU5TXQorfSBlbHNl
IHsKKyAgICB0YXJnZXQucGF0aCA9ICQkSU5TVEFMTF9CSU5TCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50
TGludXguY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1Nh
bmRib3hFbnZpcm9ubWVudExpbnV4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jZDFlNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xp
bnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcApAQCAtMCwwICsx
LDgyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRM
aW51eC5oIgorCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNs
dWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j
bHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGluay5oPgorI2lu
Y2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgor
I2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1
ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9z
eXNjYWxsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K
KyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHV0
aW1lLmg+CisKK2VudW0geyBQYXRoU2l6ZSA9IDUxMiB9Oworc3RhdGljIGNoYXIgc2FuZGJveERp
cmVjdG9yeVtQYXRoU2l6ZV07CitzdGF0aWMgdWlkX3Qgc2FuZGJveFVzZXJVaWQ7CitzdGF0aWMg
dWlkX3Qgc2FuZGJveFVzZXJHaWQ7CisKKyNkZWZpbmUgc3RybGNweShkZXN0aW5hdGlvbiwgc291
cmNlLCBtYXhMZW5ndGgpICBcCisgICAgZG8geyBcCisgICAgICAgIChkZXN0aW5hdGlvbilbMF0g
PSAnXDAnOyBcCisgICAgICAgIHN0cm5jYXQoKGRlc3RpbmF0aW9uKSwgKHNvdXJjZSksIChtYXhM
ZW5ndGgpIC0gMSk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIHN0cmxjYXQoZGVzdGlu
YXRpb24sIHNvdXJjZSwgbWF4TGVuZ3RoKSBcCisgICAgZG8geyBcCisgICAgICAgIHN0cm5jYXQo
KGRlc3RpbmF0aW9uKSwgKHNvdXJjZSksIChtYXhMZW5ndGgpIC0gMSAtIHN0cm5sZW4oKGRlc3Rp
bmF0aW9uKSwgKG1heExlbmd0aCkgLSAxKSk7IFwKKyAgICB9IHdoaWxlICgwKQorCisvLyBUaGlz
IGZ1bmN0aW9uIHJ1bnMgaW4gYSBjbG9uZWQgcHJvY2VzcyBhbmQgaXQgaXMgd2FpdGluZyBmb3Ig
YSByZXF1ZXN0IG1lc3NhZ2UKKy8vIGZyb20gV2ViUHJvY2VzcyB0byBwZXJmb3JtIHRoZSBjaHJv
b3QoKS4gSWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24KKy8vIG5l
dmVyIHJldHVybnMuIFNvIHRoaXMgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZS4KK3N0YXRp
YyB2b2lkIGxhdW5jaENoYW5nZVJvb3RIZWxwZXIoaW50IHNvY2tldFBhaXJbXSkKK3sKKyAgICAv
LyBXZSBuZWVkIHRvIHJlc3RyaWN0IHRoZSByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIG91ciBwcm9j
ZXNzIHRvIGF2b2lkIG9wZW5pbmcKKyAgICAvLyBhIGZpbGUgYnkgbWlzdGFrZS4gSG93ZXZlciwg
Q0FQX1NZU19SRVNTT1VSQ0UgY2FwYWJpbGl0eSBzaG91bGQgYmUgZHJvcHBlZAorICAgIC8vIG90
aGVyd2lzZSBpdCB3b24ndCB3b3JrLgorICAgIHN0cnVjdCBybGltaXQgcmVzdHJpY3RlZFJlc291
cmNlID0geyAwLCAwIH07CisgICAgaWYgKHNldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmcmVzdHJp
Y3RlZFJlc291cmNlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkhlbHBlciBjb3VsZG4n
dCBzZXQgdGhlIHJlc291cmNlbGltaXQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjbG9zZShzb2NrZXRQYWlyWzFdKSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNsb3NlIHNvY2tldCAlZDogJXNcbiIsIHNv
Y2tldFBhaXJbMV0sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBXZSBleHBlY3QgYSAnQycgKENocm9vdE1lKSBtZXNzYWdlIGZyb20gdGhlIFdlYlBy
b2Nlc3MuCisgICAgY2hhciBtZXNzYWdlOworICAgIGlmIChyZWFkKHNvY2tldFBhaXJbMF0sICZt
ZXNzYWdlLCAxKSAhPSAxKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgcmVh
ZCB0aGUgcHJvcGVyIGNocm9vdG1lIG1zZzogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSAhPSBNU0dfQ0hST09UTUUpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJXcm9uZyBtZXNzYWdlIHJlY2lldmVkLlxuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJ1Y3Qgc3RhdCBzYW5kYm94RGlyZWN0b3J5
SW5mbzsKKyAgICBpZiAobHN0YXQoc2FuZGJveERpcmVjdG9yeSwgJnNhbmRib3hEaXJlY3RvcnlJ
bmZvKSAmJiBTX0lTRElSKHNhbmRib3hEaXJlY3RvcnlJbmZvLnN0X21vZGUpKSB7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiU2FuZGJveCBkaXJlY3RvcnkgKCVzKSBkb2VzIG5vdCBleGlzdCFc
biIsIHNhbmRib3hEaXJlY3RvcnkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGNocm9vdChzYW5kYm94RGlyZWN0b3J5KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNo
cm9vdGluZyBmYWlsZWQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIENocm9vdCBvbmx5IGNoYW5nZXMgdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgYnV0IGRvZXNuJ3QgY2hhbmdlCisgICAgLy8gdGhlIGN1
cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFRoZXJlZm9yZSwgaWYgd2UgZG9uJ3QgZG8gaXQgbWFu
dWFsbHkgYSBtYWxpY2lvdXMgdXNlcgorICAgIC8vIGNvdWxkIGJyZWFrIG91dCB0aGUgamFpbCB3
aXRoIHJlbGF0aXZlIHBhdGhzLgorICAgIGlmIChjaGRpcigiLyIpKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ291bGRuJ3QgY2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byAvLjog
JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBTZW5kaW5nIGFja25vd2xlZGdlbWVudCB0byB0aGUgV2ViUHJvY2VzcyB0aGF0IHRoZSBzYW5k
Ym94aW5nIHdhcyBzdWNjZXNzZnVsbC4KKyAgICBtZXNzYWdlID0gTVNHX0NIUk9PVEVEOworICAg
IGlmICh3cml0ZShzb2NrZXRQYWlyWzBdLCAmbWVzc2FnZSwgMSkgIT0gMSkgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHNlbmQgYWNrbm93bGVkZ2VtZW50IHRvIFdlYlByb2Nl
c3M6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBleGl0KEVYSVRfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBib29sIHNldEVudmlyb25tZW50VmFy
aWFibGVzRm9yQ2hhbmdlUm9vdEhlbHBlcihwaWRfdCBwaWQsIGludCBzb2NrZXRQYWlyW10pCit7
CisgICAgY29uc3QgaW50IGRlc2NyaXB0b3JTaXplID0gMzI7CisgICAgY2hhciBzb2NrZXREZXNj
cmlwdG9yW2Rlc2NyaXB0b3JTaXplXTsKKyAgICBjaGFyIHNhbmRib3hIZWxwZXJQaWRbZGVzY3Jp
cHRvclNpemVdOworCisgICAgaW50IGxlbmd0aCA9IHNucHJpbnRmKHNhbmRib3hIZWxwZXJQaWQs
IHNpemVvZihzYW5kYm94SGVscGVyUGlkKSwgIiV1IiwgcGlkKTsKKyAgICBpZiAobGVuZ3RoIDwg
MCB8fCBsZW5ndGggPj0gc2l6ZW9mKHNhbmRib3hIZWxwZXJQaWQpKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ29udmVydGluZyB0aGUgcGlkIHRvIHN0cmluZyBpcyBmYWlsZWQ6ICVzXG4i
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKHNldGVudihTQU5EQk9YX0hFTFBFUl9QSUQsIHNhbmRib3hIZWxwZXJQaWQsIDEpKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgc2V0IHRoZSBTQlhfSEVMUEVSX1BJRCBl
bnYgdmFyaWFibGU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgbGVuZ3RoID0gc25wcmludGYoc29ja2V0RGVzY3JpcHRvciwgc2l6
ZW9mKHNvY2tldERlc2NyaXB0b3IpLCAiJXUiLCBzb2NrZXRQYWlyWzFdKTsKKyAgICBpZiAobGVu
Z3RoIDwgMCB8fCBsZW5ndGggPj0gc2l6ZW9mKHNvY2tldERlc2NyaXB0b3IpKSB7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ29udmVydGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHN0cmlu
ZyBpcyBmYWlsZWQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChzZXRlbnYoU0FOREJPWF9ERVNDUklQVE9SLCBzb2NrZXRE
ZXNjcmlwdG9yLCAxKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNhdmluZyB0aGUgaGVs
cGVycyBmaWxlZGVzY3JpcHRvciBpbnRvIGFuIGVudiB2YXJpYWJsZSBmYWlsZWQ6ICVzXG4iLCBz
dHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KGNsb3NlKHNvY2tldFBhaXJbMF0pKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xvc2lu
ZyBvZiAlZCBmYWlsZWQ6ICVzXG4iLCBzb2NrZXRQYWlyWzBdLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0
aWMgYm9vbCBwcmVwYXJlQW5kU3RhcnRDaGFuZ2VSb290SGVscGVyKCkKK3sKKyAgICBpbnQgc29j
a2V0UGFpclsyXTsKKyAgICBwaWRfdCBwaWQ7CisKKyAgICBpZiAoc29ja2V0cGFpcihBRl9VTklY
LCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0UGFpcikpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDb3VsZG4ndCBjcmVhdGUgc29ja2V0cGFpcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwaWQgPSBzeXNjYWxsKFNZU19jbG9u
ZSwgQ0xPTkVfRlMgfCBTSUdDSExELCAwLCAwLCAwKTsKKworICAgIHN3aXRjaCAocGlkKSB7Cisg
ICAgY2FzZSAtMToKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9uZSBmYWlsZWQ6ICVzXG4i
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIDA6
CisgICAgICAgIC8vIENoaWxkIHByb2Nlc3M6IHdlIHN0YXJ0IHRoZSBjaHJvb3QgaGVscGVyIHdo
aWNoIHdhaXRzIGZvciB0aGUgIkNocm9vdE1lIgorICAgICAgICAvLyBtZXNzYWdlIGZyb20gdGhl
IFdlYlByb2Nlc3MuIElmIHdlIGFyZSBzdWNjZXNzZWQsIHRoZW4gd2Ugd29uJ3QgcmV0dXJuLgor
ICAgICAgICBsYXVuY2hDaGFuZ2VSb290SGVscGVyKHNvY2tldFBhaXIpOworICAgICAgICAvLyBX
ZSBzaG91bGRuJ3QgcmVhY2ggdGhpcyBwYXJ0LCBiZWNhdXNlIGxhdW5jaENocm9vdEhlbHBlcigp
IHNob3VsZCBleGl0IGluIGV2ZXJ5IGNhc2VzLgorICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFBhcmVu
dCBwcm9jZXNzOiBleHBvcnRzIHRoZSBwaWQgb2YgdGhlIGhlbHBlciBhbmQgdGhlIHNvY2tldCBp
ZCBzbyB0aGUKKyAgICAgICAgLy8gaGVscGVyIGFuZCB0aGUgV2ViUHJvY2VzcyBjYW4gY29tbXVu
aWNhdGUuCisgICAgICAgIHJldHVybiBzZXRFbnZpcm9ubWVudFZhcmlhYmxlc0ZvckNoYW5nZVJv
b3RIZWxwZXIocGlkLCBzb2NrZXRQYWlyKTsKKyAgICB9CisgICAgLy8gV2Ugc2hvdWxkIG5ldmVy
IHJlYWNoIGhlcmUuCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBTZXR0aW5nIGxpbnV4IGNh
cGFiaWxpdGllcyAocGVybWl0dGVkLCBlZmZlY3RpdmUgYW5kIGluaGVyaXRhYmxlKSBmb3IgdGhl
IGN1cnJlbnQgcHJvY2Vzcy4KKy8vIFBlcm1pdHRlZCBzZXQgaW5kaWNhdGVzIHRoZSBjYXBhYmls
aXRpZXMgd2hhdCBjb3VsZCBiZSBzZXQgZm9yIHRoZSBwcm9jZXNzLgorLy8gRWZmZWN0aXZlIHNl
dCBpcyBhIHN1YnNldCBvZiBwZXJtaXR0ZWQgc2V0LCB0aGV5IGFyZSBhY3R1YWxseSBlZmZlY3Rp
dmUuCisvLyBJbmhlcml0YWJsZSBzZXQgaW5kaWNhdGVzIHRoZSBjYXBhYmlsaXRpZXMgd2hhdCB0
aGUgY2hpbGRyZW4gd2lsbCBpbmhlcml0IGZyb20gdGhlIGN1cnJlbnQgcHJvY2Vzcy4KK3N0YXRp
YyBib29sIHNldENhcGFiaWxpdGllcyhjYXBfdmFsdWVfdCogY2FwYWJpbGl0eUxpc3QsIGludCBs
ZW5ndGgpCit7CisgICAgY2FwX3QgY2FwYWJpbGl0aWVzOworCisgICAgLy8gQ2FwYWJpbGl0aWVz
IHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRob3V0IGZsYWdzLgorICAgIGNhcGFiaWxpdGllcyA9
IGNhcF9pbml0KCk7CisgICAgaWYgKCFjYXBhYmlsaXRpZXMpIHsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJQcm9jZXNzIGNhcGFiaWxpdGllcyBpbml0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY2FwX2Ns
ZWFyKGNhcGFiaWxpdGllcykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbGVhcmluZyBw
cm9jZXNzIGNhcGFiaWxpdGllcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNhcGFiaWxpdHlMaXN0ICYmIGxl
bmd0aCkgeworICAgICAgICBpZiAoY2FwX3NldF9mbGFnKGNhcGFiaWxpdGllcywgQ0FQX0VGRkVD
VElWRSwgbGVuZ3RoLCBjYXBhYmlsaXR5TGlzdCwgQ0FQX1NFVCkKKyAgICAgICAgICAgIHx8IGNh
cF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9JTkhFUklUQUJMRSwgbGVuZ3RoLCBjYXBhYmls
aXR5TGlzdCwgQ0FQX1NFVCkKKyAgICAgICAgICAgIHx8IGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRp
ZXMsIENBUF9QRVJNSVRURUQsIGxlbmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9TRVQpKSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBzZXQgcHJvY2VzcyBjYXBhYmlsaXR5
IGZsYWdzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGNhcF9mcmVlKGNh
cGFiaWxpdGllcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoY2FwX3NldF9wcm9jKGNhcGFiaWxpdGllcykpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJDYW5ub3Qgc2V0IHByb2Nlc3MgY2FwYWJpbGl0aWVzOiAlc1xuIiwgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgICAgY2FwX2ZyZWUoY2FwYWJpbGl0aWVzKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjYXBfZnJlZShjYXBhYmlsaXRpZXMpID09IC0x
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGliZXJhdGluZyBjYXBhYmlsaXRpZXMgZmFp
bGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBkcm9wUHJpdmlsZWdlcygp
Cit7CisgICAgLy8gV2UgYmVjb21lIGV4cGxpY2l0ZWx5IG5vbiBkdW1wYWJsZS4KKyAgICBpZiAo
cHJjdGwoUFJfU0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIlNldHRpbmcgZHVtcGxhYmxlIGlzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2V0cmVzZ2lkKHNh
bmRib3hVc2VyR2lkLCBzYW5kYm94VXNlckdpZCwgc2FuZGJveFVzZXJHaWQpCisgICAgICAgIHx8
IHNldHJlc3VpZChzYW5kYm94VXNlclVpZCwgc2FuZGJveFVzZXJVaWQsIHNhbmRib3hVc2VyVWlk
KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGZhbGxiYWNrIHRvIHVzZXI6
ICVkLlxuIiwgc2FuZGJveFVzZXJVaWQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIC8vIERyb3AgYWxsIGNhcGFiaWxpdGllcy4gQWdhaW4sIHNldHVpZCgpIG5vcm1hbGx5IHRh
a2VzIGNhcmUgb2YgdGhpcyBpZiB3ZSBoYWQgZXVpZCAwLgorICAgIHJldHVybiBzZXRDYXBhYmls
aXRpZXMoMCwgMCk7Cit9CisKK3N0YXRpYyBib29sIGZpbGVFeGlzdHMoY29uc3QgY2hhciogcGF0
aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAgICByZXR1cm4gIShsc3RhdChwYXRo
LCAmZmlsZVN0YXQpICYmIGVycm5vID09IEVOT0VOVCk7Cit9CisKK3N0YXRpYyBtb2RlX3QgZGly
ZWN0b3J5UGVybWlzc2lvbnMoY29uc3QgY2hhciogZGlyZWN0b3J5KQoreworICAgIHN0cnVjdCBz
dGF0IGZpbGVTdGF0OworICAgIGlmIChsc3RhdChkaXJlY3RvcnksICZmaWxlU3RhdCkpIHsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQg
ZGlyZWN0b3J5ICglcyk6ICVzXG4iLCBkaXJlY3RvcnksIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZpbGVTdGF0LnN0X21vZGU7Cit9
CisKK3N0YXRpYyBib29sIGNyZWF0ZURpcmVjdG9yeShjaGFyKiBwYXRoVG9DcmVhdGUsIGNvbnN0
IGNoYXIqIG5leHREaXJlY3RvcnlUb0NyZWF0ZSkKK3sKKyAgICBzdHJsY2F0KHBhdGhUb0NyZWF0
ZSwgbmV4dERpcmVjdG9yeVRvQ3JlYXRlLCBQYXRoU2l6ZSk7CisKKyAgICBjaGFyIHBhdGhUb0Ny
ZWF0ZUluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgc3RybGNweShwYXRoVG9DcmVhdGVJblNhbmRi
b3gsIHNhbmRib3hEaXJlY3RvcnksIFBhdGhTaXplKTsKKyAgICBzdHJsY2F0KHBhdGhUb0NyZWF0
ZUluU2FuZGJveCwgcGF0aFRvQ3JlYXRlLCBQYXRoU2l6ZSk7CisKKyAgICBtb2RlX3QgbW9kZSA9
IGRpcmVjdG9yeVBlcm1pc3Npb25zKHBhdGhUb0NyZWF0ZSk7CisgICAgaWYgKG1rZGlyKHBhdGhU
b0NyZWF0ZUluU2FuZGJveCwgbW9kZSkpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkg
eworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDcmVhdGlvbiBvZiAlcyBmYWlsZWQ6ICVz
XG4iLCBwYXRoVG9DcmVhdGVJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxl
SW5mbzsKKyAgICBpZiAobHN0YXQocGF0aFRvQ3JlYXRlLCAmZmlsZUluZm8pKSB7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGRpcmVj
dG9yeSAoJXMpOiAlc1xuIiwgcGF0aFRvQ3JlYXRlLCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChmaWxlSW5mby5zdF91aWQgPT0gZ2V0dWlk
KCkpIHsKKyAgICAgICAgaWYgKGNob3duKHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgc2FuZGJveFVz
ZXJVaWQsIHNhbmRib3hVc2VyR2lkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKGNobW9kKHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgZmlsZUluZm8uc3RfbW9kZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJv
b2wgY3JlYXRlRGlyZWN0b3J5UGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIGNoYXIgZnVs
bFBhdGhJblNhbmRib3hbUGF0aFNpemVdOworICAgIHN0cmxjcHkoZnVsbFBhdGhJblNhbmRib3gs
IHNhbmRib3hEaXJlY3RvcnksIFBhdGhTaXplKTsKKyAgICBzdHJsY2F0KGZ1bGxQYXRoSW5TYW5k
Ym94LCBwYXRoLCBQYXRoU2l6ZSk7CisKKyAgICBpZiAoZmlsZUV4aXN0cyhmdWxsUGF0aEluU2Fu
ZGJveCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2hhciBhbHJlYWR5Q3JlYXRlZFBh
dGhbUGF0aFNpemVdOworICAgIGFscmVhZHlDcmVhdGVkUGF0aFswXSA9ICdcMCc7CisgICAgLy8g
c3RhcnRQb3MgaXMgKHBhdGggKyAxKSBiZWNhdXNlIHdlIHNraXAgdGhlIGZpcnN0ICcvJy4KKyAg
ICBjb25zdCBjaGFyKiBzdGFydFBvcyA9IHBhdGggKyAxOworICAgIGNvbnN0IGNoYXIqIGVuZFBv
czsKKyAgICB3aGlsZSAoKGVuZFBvcyA9IHN0cmNocihzdGFydFBvcywgJy8nKSkpIHsKKyAgICAg
ICAgY2hhciBuZXh0RGlyZWN0b3J5VG9DcmVhdGVbUGF0aFNpemVdOworICAgICAgICBzdHJsY3B5
KG5leHREaXJlY3RvcnlUb0NyZWF0ZSwgc3RhcnRQb3MgLSAxLCBzdHJubGVuKHN0YXJ0UG9zIC0g
MSwgZW5kUG9zIC0gc3RhcnRQb3MgKyAxKSArIDEpOworCisgICAgICAgIGlmICghY3JlYXRlRGly
ZWN0b3J5KGFscmVhZHlDcmVhdGVkUGF0aCwgbmV4dERpcmVjdG9yeVRvQ3JlYXRlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAg
IH0KKyAgICAvLyBDcmVhdGUgdGhlIGxhc3QgZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnlwYXRo
LgorICAgIGFscmVhZHlDcmVhdGVkUGF0aFswXSA9ICdcMCc7CisgICAgcmV0dXJuIGNyZWF0ZURp
cmVjdG9yeShhbHJlYWR5Q3JlYXRlZFBhdGgsIHBhdGgpOworfQorCitzdGF0aWMgYm9vbCBjcmVh
dGVEZXZpY2VGaWxlcygpCit7CisgICAgY29uc3QgY2hhciogZGV2ID0gIi9kZXYvIjsKKyAgICBp
ZiAoIWNyZWF0ZURpcmVjdG9yeVBhdGgoZGV2KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgY29uc3QgY2hhciogZGV2aWNlc1syXSA9IHsgIi9kZXYvcmFuZG9tIiwgIi9kZXYvdXJhbmRv
bSIgfTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICBzdHJ1Y3Qg
c3RhdCBzdGF0dXM7CisgICAgICAgIGlmIChsc3RhdChkZXZpY2VzW2ldLCAmc3RhdHVzKSkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBieSBvYnRhaW5pbmcgaW5mb3JtYXRp
b24gYWJvdXQgZGV2aWNlIGZpbGUgKCVzKTogJXNcbiIsIGRldmljZXNbaV0sIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGV2
X3QgZGV2ID0gc3RhdHVzLnN0X3JkZXY7CisKKyAgICAgICAgLy8gQm90aCBuZWVkZWQgZGV2aWNl
IGZpbGVzICgvZGV2L3JhbmRvbSBhbmQgL2Rldi91cmFuZG9tKSBhcmUgY2hhcmFjdGVyIG1fZGV2
aWNlcyBhbmQKKyAgICAgICAgLy8gdGhlaXIgcGVybWlzc2lvbnMgc2hvdWxkIGJlOiBydy1ydy1y
dy0uCisgICAgICAgIGNoYXIgZGV2aWNlW1BhdGhTaXplXTsKKyAgICAgICAgc3RybGNweShkZXZp
Y2UsIHNhbmRib3hEaXJlY3RvcnksIFBhdGhTaXplKTsKKyAgICAgICAgc3RybGNhdChkZXZpY2Us
IGRldmljZXNbaV0sIFBhdGhTaXplKTsKKworICAgICAgICBpZiAobWtub2QoZGV2aWNlLCBTX0lG
Q0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEggfCBT
X0lXT1RILCBtYWtlZGV2KG1ham9yKGRldiksIG1pbm9yKGRldikpKSkgeworICAgICAgICAgICAg
aWYgKGVycm5vICE9IEVFWElTVCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q291bGRuJ3QgY3JlYXRlIGRldmljZSBmaWxlICVzOiAlc1xuIiwgZGV2aWNlLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbW91bnRG
aWxlU3lzdGVtcygpCit7CisgICAgY29uc3QgY2hhciogcHJvYyA9ICIvcHJvYy8iOworICAgIGlm
ICghY3JlYXRlRGlyZWN0b3J5UGF0aChwcm9jKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNoYXIgcHJvY1BhdGhJblNhbmRib3hbUGF0aFNpemVdOworICAgIHN0cmxjcHkocHJvY1BhdGhJ
blNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksIFBhdGhTaXplKTsKKyAgICBzdHJsY2F0KHByb2NQ
YXRoSW5TYW5kYm94LCBwcm9jLCBQYXRoU2l6ZSk7CisKKyAgICBpZiAobW91bnQocHJvYywgcHJv
Y1BhdGhJblNhbmRib3gsICJwcm9jIiwgMCwgMCkpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVC
VVNZKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG1vdW50aW5nICVz
LiAlc1xuIiwgcHJvYywgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHNoYXJlZE1lbW9yeSA9ICIv
cnVuL3NobS8iOworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5UGF0aChzaGFyZWRNZW1vcnkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2hhciBzaGFyZWRNZW1vcnlQYXRoSW5TYW5kYm94
W1BhdGhTaXplXTsKKyAgICBzdHJsY3B5KHNoYXJlZE1lbW9yeVBhdGhJblNhbmRib3gsIHNhbmRi
b3hEaXJlY3RvcnksIFBhdGhTaXplKTsKKyAgICBzdHJsY2F0KHNoYXJlZE1lbW9yeVBhdGhJblNh
bmRib3gsIHNoYXJlZE1lbW9yeSwgUGF0aFNpemUpOworCisgICAgaWYgKG1vdW50KHNoYXJlZE1l
bW9yeSwgc2hhcmVkTWVtb3J5UGF0aEluU2FuZGJveCwgInRtcGZzIiwgMCwgMCkpIHsKKyAgICAg
ICAgaWYgKGVycm5vICE9IEVCVVNZKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVy
cm9yIGJ5IG1vdW50aW5nICVzOiAlc1xuIiwgc2hhcmVkTWVtb3J5LCBzdHJlcnJvcihlcnJubykp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCBsaW5rRmlsZShjaGFyKiBzb3VyY2VGaWxlLCBjaGFy
KiB0YXJnZXRGaWxlKQoreworICAgIGJvb2wgaXNTeW1saW5rID0gdHJ1ZTsKKyAgICB3aGlsZSAo
aXNTeW1saW5rKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgICAgICBpZiAo
bHN0YXQoc291cmNlRmlsZSwgJmZpbGVJbmZvKSkgeworICAgICAgICAgICAgaWYgKGVycm5vICE9
IEVOT0VOVCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb2J0
YWluIGluZm9ybWF0aW9uIGFib3V0ICVzOiAlc1xuIiwgc291cmNlRmlsZSwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgZmlsZSBkb2Vzbid0IGV4aXN0IChlLmcuIGRhbmds
aW5nIGxpbmtzKSB0aGVuIHdlIGNhbiBpZ25vcmUgaXQKKyAgICAgICAgICAgIC8vIGluIHRoZSBz
YW5kYm94IHRvby4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGNoYXIqIGVuZE9mQmFzZURpcmVjdG9yeUluU291cmNlID0gc3RycmNocihzb3VyY2VGaWxlLCAn
LycpOworICAgICAgICBpZiAoIWVuZE9mQmFzZURpcmVjdG9yeUluU291cmNlKSB7CisgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgc291cmNlOiAlcy5cbiIsIHNvdXJjZUZpbGUp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY2hhciBi
YXNlRGlyZWN0b3J5T2ZTb3VyY2VbUGF0aFNpemVdOworICAgICAgICBzdHJsY3B5KGJhc2VEaXJl
Y3RvcnlPZlNvdXJjZSwgc291cmNlRmlsZSwgZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UgLSBz
b3VyY2VGaWxlICsgMik7CisKKyAgICAgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKGJhc2VE
aXJlY3RvcnlPZlNvdXJjZSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRp
bmcgJXMgZmFpbGVkOiAlcy5cbiIsIGJhc2VEaXJlY3RvcnlPZlNvdXJjZSwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChsaW5rKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpKSB7CisgICAgICAgICAgICBpZiAoZXJybm8g
IT0gRUVYSVNUICYmIGVycm5vICE9IEVOT0VOVCkgeworICAgICAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiTGlua2luZyAlcyBmYWlsZWQ6ICVzLlxuIiwgc291cmNlRmlsZSwgc3RyZXJyb3Io
ZXJybm8pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgc3ltbGlua3MuIFdlIGRvbid0IHdhbnQgdG8g
aGF2ZSBkYW5nbGluZyBsaW5rcyBpbiB0aGUgc2FuZGJveC4gU28gd2UgaGF2ZSB0bworICAgICAg
ICAvLyBmb2xsb3cgdGhlbSBhbmQgcHV0IHRoZSB3aG9sZSBsaW5rIGNoYWluIGludG8gdGhlIHNh
bmRib3guCisgICAgICAgIGlzU3ltbGluayA9IChmaWxlSW5mby5zdF9tb2RlICYgU19JRk1UKSA9
PSBTX0lGTE5LOworICAgICAgICBpZiAoIWlzU3ltbGluaykKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNoYXIgc3ltbGlua1RhcmdldFtQYXRoU2l6ZV07CisgICAgICAgIGludCBsZW5n
dGhPZlRoZUxpbmsgPSByZWFkbGluayhzb3VyY2VGaWxlLCBzeW1saW5rVGFyZ2V0LCBzaXplb2Yo
c3ltbGlua1RhcmdldCkgLSAxKTsKKyAgICAgICAgaWYgKGxlbmd0aE9mVGhlTGluayA+IDApCisg
ICAgICAgICAgICBzeW1saW5rVGFyZ2V0W2xlbmd0aE9mVGhlTGlua10gPSAnXDAnOworCisgICAg
ICAgIGNoYXIgc3ltbGlua1RhcmdldEluUmVhbFdvcmxkW1BhdGhTaXplXTsKKyAgICAgICAgY2hh
ciBzeW1saW5rVGFyZ2V0SW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICAgICAgLy8gTWFraW5nIGRp
ZmZlcmVuY2UgYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcGF0aHMuCisgICAgICAgIC8v
IElmIHRoZSBzeW1saW5rcyB0YXJnZXQgc3RhcnRzIHdpdGggJy8nIHRoZW4gd2UgaGF2ZSBub3Ro
aW5nIHRvIGRvIHdpdGggaXQuCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIGEgcmVsYXRpdmUg
cGF0aCBhbmQgd2UgaGF2ZSB0byBjb25jYXRlbmF0ZSBpdCB0byB0aGUgY3VycmVudAorICAgICAg
ICAvLyBwYXRoIHRvIG9idGFpbiB0aGUgdGFyZ2V0LgorICAgICAgICBzeW1saW5rVGFyZ2V0SW5S
ZWFsV29ybGRbMF0gPSAnXDAnOworICAgICAgICBzeW1saW5rVGFyZ2V0SW5TYW5kYm94WzBdID0g
J1wwJzsKKyAgICAgICAgaWYgKHN5bWxpbmtUYXJnZXRbMF0gPT0gJy8nKSB7CisgICAgICAgICAg
ICBzdHJsY2F0KHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCwgc3ltbGlua1RhcmdldCwgUGF0aFNp
emUpOworCisgICAgICAgICAgICBzdHJsY2F0KHN5bWxpbmtUYXJnZXRJblNhbmRib3gsIHNhbmRi
b3hEaXJlY3RvcnksIFBhdGhTaXplKTsKKyAgICAgICAgICAgIHN0cmxjYXQoc3ltbGlua1Rhcmdl
dEluU2FuZGJveCwgc3ltbGlua1RhcmdldCwgUGF0aFNpemUpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgc3RybGNhdChzeW1saW5rVGFyZ2V0SW5SZWFsV29ybGQsIGJhc2VEaXJlY3Rv
cnlPZlNvdXJjZSwgUGF0aFNpemUpOworICAgICAgICAgICAgc3RybGNhdChzeW1saW5rVGFyZ2V0
SW5SZWFsV29ybGQsICIvIiwgUGF0aFNpemUpOworICAgICAgICAgICAgc3RybGNhdChzeW1saW5r
VGFyZ2V0SW5SZWFsV29ybGQsIHN5bWxpbmtUYXJnZXQsIFBhdGhTaXplKTsKKworICAgICAgICAg
ICAgc3RybGNhdChzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBQYXRo
U2l6ZSk7CisgICAgICAgICAgICBzdHJsY2F0KHN5bWxpbmtUYXJnZXRJblNhbmRib3gsICIvIiwg
UGF0aFNpemUpOworICAgICAgICAgICAgc3RybGNhdChzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBz
eW1saW5rVGFyZ2V0SW5SZWFsV29ybGQsIFBhdGhTaXplKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEluaXRpYWxpemUgc291cmNlRmlsZSBhbmQgdGFyZ2V0RmlsZSB2YXJpYWJsZXMgZm9yIHRo
ZSBuZXh0IGxvb3Agb2Ygd2hpbGUuCisgICAgICAgIHNvdXJjZUZpbGVbMF0gPSAnXDAnOworICAg
ICAgICB0YXJnZXRGaWxlWzBdID0gJ1wwJzsKKyAgICAgICAgc3RybGNhdChzb3VyY2VGaWxlLCBz
eW1saW5rVGFyZ2V0SW5SZWFsV29ybGQsIFBhdGhTaXplKTsKKyAgICAgICAgc3RybGNhdCh0YXJn
ZXRGaWxlLCBzeW1saW5rVGFyZ2V0SW5TYW5kYm94LCBQYXRoU2l6ZSk7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBsaW5rRGlyZWN0b3J5KGNvbnN0IGNoYXIqIHNv
dXJjZURpcmVjdG9yeVBhdGgsIGNvbnN0IGNoYXIqIHRhcmdldERpcmVjdG9yeVBhdGgpCit7Cisg
ICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlQYXRoKHNvdXJjZURpcmVjdG9yeVBhdGgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgRElSKiBkaXJlY3RvcnkgPSBvcGVuZGlyKHNvdXJjZURpcmVj
dG9yeVBhdGgpOworICAgIGlmICghZGlyZWN0b3J5KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ291bGRuJ3Qgb3BlbiBkaXJlY3RvcnkgJXM6ICVzXG4iLCBzb3VyY2VEaXJlY3RvcnlQYXRo
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
c3RydWN0IGRpcmVudCAqZGlyZWN0b3J5SW5mbyA9IDA7CisgICAgd2hpbGUgKChkaXJlY3RvcnlJ
bmZvID0gcmVhZGRpcihkaXJlY3RvcnkpKSkgeworICAgICAgICBjaGFyKiBuZXh0RmlsZUluRGly
ZWN0b3J5ID0gZGlyZWN0b3J5SW5mby0+ZF9uYW1lOworICAgICAgICAvLyBXZSBtdXN0IG5vdCBs
aW5rICcuJyBhbmQgIi4uIiBpbnRvIHRoZSBzYW5kYm94LgorICAgICAgICBpZiAoIXN0cm5jbXAo
bmV4dEZpbGVJbkRpcmVjdG9yeSwgIi4iLCBzdHJubGVuKG5leHRGaWxlSW5EaXJlY3RvcnksIFBh
dGhTaXplKSkgfHwgIXN0cm5jbXAobmV4dEZpbGVJbkRpcmVjdG9yeSwgIi4uIiwgMikpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2hhciBzb3VyY2VGaWxlW1BhdGhTaXplXTsKKyAg
ICAgICAgc3RybGNweShzb3VyY2VGaWxlLCBzb3VyY2VEaXJlY3RvcnlQYXRoLCBQYXRoU2l6ZSk7
CisgICAgICAgIHN0cmxjYXQoc291cmNlRmlsZSwgIi8iLCBQYXRoU2l6ZSk7CisgICAgICAgIHN0
cmxjYXQoc291cmNlRmlsZSwgbmV4dEZpbGVJbkRpcmVjdG9yeSwgUGF0aFNpemUpOworCisgICAg
ICAgIGNoYXIgdGFyZ2V0RmlsZVtQYXRoU2l6ZV07CisgICAgICAgIHN0cmxjcHkodGFyZ2V0Rmls
ZSwgdGFyZ2V0RGlyZWN0b3J5UGF0aCwgUGF0aFNpemUpOworICAgICAgICBzdHJsY2F0KHRhcmdl
dEZpbGUsICIvIiwgUGF0aFNpemUpOworICAgICAgICBzdHJsY2F0KHRhcmdldEZpbGUsIG5leHRG
aWxlSW5EaXJlY3RvcnksIFBhdGhTaXplKTsKKworICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKChkaXJlY3RvcnlJbmZvLT5kX3R5cGUgPT0gRFRfRElSKSkKKyAgICAgICAgICAg
IG9rID0gbGlua0RpcmVjdG9yeShzb3VyY2VGaWxlLCB0YXJnZXRGaWxlKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb2sgPSBsaW5rRmlsZShzb3VyY2VGaWxlLCB0YXJnZXRGaWxlKTsKKyAg
ICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv
LyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZGlyZWN0b3Jp
ZXMgYmVjYXVzZQorICAgIC8vIGl0IGNvdWxkIGhhdmUgbWVhbmluZyBlLmcuIGluIHRoZSBoYXNo
Z2VuZXJhdGlvbiBvZiBjYWNoZSBmaWxlcy4KKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAg
ICBpZiAobHN0YXQoc291cmNlRGlyZWN0b3J5UGF0aCwgJmZpbGVTdGF0KSkgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkVycm9yIGJ5IG9idGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBkaXJl
Y3RvcnkgKCVzKTogJXNcbiIsIHNvdXJjZURpcmVjdG9yeVBhdGgsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc3RydWN0IHV0aW1idWYgdGltZXMg
PSB7IGZpbGVTdGF0LnN0X2F0aW1lLCBmaWxlU3RhdC5zdF9tdGltZSB9OworICAgIGlmICh1dGlt
ZSh0YXJnZXREaXJlY3RvcnlQYXRoLCAmdGltZXMpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ291bGRuJ3Qgc2V0IGJhY2sgdGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgJXM6ICVz
XG4iLCB0YXJnZXREaXJlY3RvcnlQYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjb2xs
ZWN0UnVuVGltZURlcGVuZGVuY2llcygpCit7CisgICAgLy8gVGhlIGxpc3Qgb2YgZW1waXJpY2Fs
bHkgZ2F0aGVyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMuCisgICAgY29uc3QgY2hhciogcnVudGlt
ZURlcGVuZGVuY2llc1tdID0geworICAgICAgICAibGlibnNzX2Rucy5zbyIsCisgICAgICAgICJs
aWJyZXNvbHYuc28iLAorICAgICAgICAibGlic3NsLnNvIiwKKyAgICAgICAgImxpYmNyeXB0by5z
byIsCisgICAgICAgIDAKKyAgICB9OworCisgICAgY29uc3QgY2hhcioqIGN1cnJlbnRSdW50aW1l
RGVwZW5kZW5jeSA9IHJ1bnRpbWVEZXBlbmRlbmNpZXM7CisgICAgd2hpbGUgKCpjdXJyZW50UnVu
dGltZURlcGVuZGVuY3kpIHsKKyAgICAgICAgLy8gVG8gb2J0YWluIHRoZSBwYXRoIG9mIHRoZSBy
dW50aW1lIGRlcGVuZGVuY2llcyB3ZSBvcGVuIHRoZW0gd2l0aCBkbG9wZW4uCisgICAgICAgIC8v
IFdpdGggdGhlIGhhbmRsZSBzdXBwbGllZCBieSBkbG9wZW4gd2UgY2FuIG9idGFpbiBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgZHluYW1pY2FsbHkKKyAgICAgICAgLy8gbGlua2VkIGxpYnJhcmllcywg
c28gdGhlIHBhdGggd2hlcmUgYXJlIHRoZXkgaW5zdGFsbGVkLgorICAgICAgICB2b2lkKiBoYW5k
bGUgPSBkbG9wZW4oKmN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSwgUlRMRF9MQVpZKTsKKyAgICAg
ICAgaWYgKCFoYW5kbGUpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qg
Z2V0IHRoZSBoYW5kbGVyIG9mICVzOiAlc1xuIiwgKmN1cnJlbnRSdW50aW1lRGVwZW5kZW5jeSwg
ZGxlcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0cnVjdCBsaW5rX21hcCogbGlua01hcDsKKyAgICAgICAgaWYgKGRsaW5mbyhoYW5kbGUs
IFJUTERfRElfTElOS01BUCwgJmxpbmtNYXApKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNvdWxkbid0IGdldCBpbmZvcm1hdGlvbiBhYm91dCAlczogJXNcbiIsICpjdXJyZW50UnVu
dGltZURlcGVuZGVuY3ksIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFsaW5rTWFwKSB7CisgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkNvdWxkbid0IGdldCB0aGUgbGlua21hcCBvZiAlczogJXMuXG4iLCAqY3Vy
cmVudFJ1bnRpbWVEZXBlbmRlbmN5LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY2hhciBwYXRoT2ZUaGVMaWJyYXJ5W1Bh
dGhTaXplXTsKKyAgICAgICAgY2hhciBwYXRoT2ZUaGVMaWJyYXJ5SW5TYW5kYm94W1BhdGhTaXpl
XTsKKyAgICAgICAgc3RybGNweShwYXRoT2ZUaGVMaWJyYXJ5LCBsaW5rTWFwLT5sX25hbWUsIFBh
dGhTaXplKTsKKworICAgICAgICBzdHJsY3B5KHBhdGhPZlRoZUxpYnJhcnlJblNhbmRib3gsIHNh
bmRib3hEaXJlY3RvcnksIFBhdGhTaXplKTsKKyAgICAgICAgc3RybGNhdChwYXRoT2ZUaGVMaWJy
YXJ5SW5TYW5kYm94LCBwYXRoT2ZUaGVMaWJyYXJ5LCBQYXRoU2l6ZSk7CisgICAgICAgIGlmICgh
bGlua0ZpbGUocGF0aE9mVGhlTGlicmFyeSwgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJveCkpIHsK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGlua2luZyBydW50aW1lIGRlcGVuZGVuY3k6
ICVzIGZhaWxlZDogJXNcbiIsIHBhdGhPZlRoZUxpYnJhcnksIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgICAgICBpZiAoZGxjbG9zZShoYW5kbGUpKQorICAgICAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiRGVjcmVtZW50aW5nIHJlZmVyZW5jZSBjb3VudCBvbiAlcyBmYWlsZWQ6ICVzXG4i
LCAqY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChkbGNsb3NlKGhhbmRsZSkp
IHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRGVjcmVtZW50aW5nIHJlZmVyZW5jZSBj
b3VudCBvbiAlcyBmYWlsZWQ6ICVzXG4iLCAqY3VycmVudFJ1bnRpbWVEZXBlbmRlbmN5LCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgKytjdXJyZW50UnVudGltZURlcGVuZGVuY3k7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgYm9vbCBzZXR1cFhhdXRob3JpdHlGb3JOb2JvZHlVc2VyKCkKK3sKKyAg
ICAvLyBUbyBiZSBhYmxlIHVzZSBYIGluc2lkZSB0aGUgc2FuZGJveCBhbiAuWGF1dGhvcml0eSBm
aWxlIG11c3QgYmUgZXhpc3QgaW5zaWRlIGl0LAorICAgIC8vIG93bmVkIGJ5IHRoZSBzYW5kYm94
dXNlci4gRnVydGhlcm1vcmUsIFhBVVRIT1JJVFkgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBw
b2ludCB0byBpdC4KKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworICAgIHNpemVfdCBzaXplOwor
ICAgIHN0cnVjdCBwYXNzd2QqIHJlYWxVc2VyID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworICAgIGlm
ICghcmVhbFVzZXIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvYnRhaW4g
dGhlIGN1cnJlbnQgdXNlcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyIHhhdXRob3JpdHlPZlJlYWxVc2VyW1BhdGhTaXpl
XTsKKyAgICBjaGFyIHhhdXRob3JpdHlJblNhbmRib3hbUGF0aFNpemVdOworICAgIHN0cmxjcHko
eGF1dGhvcml0eU9mUmVhbFVzZXIsIHJlYWxVc2VyLT5wd19kaXIsIFBhdGhTaXplKTsKKyAgICBz
dHJsY2F0KHhhdXRob3JpdHlPZlJlYWxVc2VyLCAiLy5YYXV0aG9yaXR5IiwgUGF0aFNpemUpOwor
CisgICAgc3RybGNweSh4YXV0aG9yaXR5SW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBQYXRo
U2l6ZSk7CisgICAgc3RybGNhdCh4YXV0aG9yaXR5SW5TYW5kYm94LCB4YXV0aG9yaXR5T2ZSZWFs
VXNlciwgUGF0aFNpemUpOworCisgICAgRklMRSogc291cmNlID0gZm9wZW4oeGF1dGhvcml0eU9m
UmVhbFVzZXIsICJyYiIpOworICAgIGlmICghc291cmNlKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ291bGRuJ3Qgb3BlbiAlczogJXNcbiIsIHhhdXRob3JpdHlPZlJlYWxVc2VyLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgRklMRSog
ZGVzdCA9IGZvcGVuKHhhdXRob3JpdHlJblNhbmRib3gsICJ3YiIpOworICAgIGlmICghZGVzdCkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IG9wZW4gJXM6ICVzXG4iLCB4YXV0
aG9yaXR5SW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gV2UgY29weSB0aGUgLlhhdXRob3JpdHkgZmlsZSBvZiB0aGUgcmVh
bCB1c2VyIChpbnN0ZWFkIG9mIGxpbmtpbmcpIGJlY2F1c2Ugbm9ib2R5IHVzZXIKKyAgICAvLyBz
aG91bGQgb3duIGl0IGJ1dCB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgcGVybWlzc2lvbnMg
b2YgdGhlIG9yaWdpbmFsIGZpbGUuCisgICAgd2hpbGUgKChzaXplID0gZnJlYWQoYnVmZmVyLCAx
LCBCVUZTSVosIHNvdXJjZSkpKQorICAgICAgICBmd3JpdGUoYnVmZmVyLCAxLCBzaXplLCBkZXN0
KTsKKworICAgIGlmIChmY2xvc2Uoc291cmNlKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNsb3NpbmcgdGhlIC5YYXV0aG9yaXR5IGZpbGUgb2YgdGhlIHJlYWwgdXNlciBmYWlsZWQ6ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKGZjbG9zZShkZXN0KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNsb3Npbmcg
dGhlIC5YYXV0aG9yaXR5IGZpbGUgb2YgdGhlIHNhbmRib3ggdXNlciBmYWlsZWQ6ICVzXG4iLCBz
dHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KGNob3duKHhhdXRob3JpdHlJblNhbmRib3gsIHNhbmRib3hVc2VyVWlkLCBzYW5kYm94VXNlckdp
ZCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaG93bmluZyAuWGF1dGhvcml0eSAoJXMp
IGZhaWxlZDogJXMuXG4iLCB4YXV0aG9yaXR5SW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNldGVudigiWEFVVEhPUklU
WSIsIHhhdXRob3JpdHlJblNhbmRib3gsIDEpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q291bGRuJ3Qgc2V0IHRoZSBYQVVUSE9SSVRZIGVudnJpb25tZW50IHZhcmlhYmxlOiAlc1xuIiwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaW5pdFNhbmRib3goKQoreworICAgIC8vIENyZWF0
ZSB0aGUgc2FuZGJveCBkaXJlY3RvcnkuIFdlIG9ubHkgbmVlZCB0byBzdGVwIGludG8gaXQsIHNv
CisgICAgLy8gdGhlIGV4ZWN1dGFibGUgcGVybWlzc2lvbiBpcyBuZWVkZWQgb25seS4KKyAgICBp
ZiAobWtkaXIoc2FuZGJveERpcmVjdG9yeSwgU19JRkRJUiB8IFNfSVhVU1IgfCBTX0lYT1RIKSkg
eworICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkbid0IGNyZWF0ZSB0aGUgc2FuZGJveCBkaXJlY3Rvcnk6ICVzXG4iLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFjcmVhdGVEZXZpY2VGaWxlcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIW1vdW50RmlsZVN5c3RlbXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gSGFyZCBsaW5rIGNhY2hlIGFuZCBmb250IGRpcmVjdG9yaWVzIGludG8gdGhlIHNh
bmRib3ggZW52aXJvbm1lbnQuCisgICAgc3RydWN0IHBhc3N3ZCogdXNlckluZm8gPSBnZXRwd3Vp
ZChnZXR1aWQoKSk7CisgICAgY29uc3QgY2hhciogaG9tZSA9IHVzZXJJbmZvLT5wd19kaXI7CisK
KyAgICBjaGFyIGxvY2FsRGlyZWN0b3J5W1BhdGhTaXplXTsKKyAgICBzdHJsY3B5KGxvY2FsRGly
ZWN0b3J5LCBob21lLCBQYXRoU2l6ZSk7CisgICAgc3RybGNhdChsb2NhbERpcmVjdG9yeSwgIi8u
bG9jYWwvc2hhcmUvTm9raWEvIiwgUGF0aFNpemUpOworCisgICAgY2hhciBjYWNoZURpcmVjdG9y
eVtQYXRoU2l6ZV07CisgICAgc3RybGNweShjYWNoZURpcmVjdG9yeSwgaG9tZSwgUGF0aFNpemUp
OworICAgIHN0cmxjYXQoY2FjaGVEaXJlY3RvcnksICIvLmNhY2hlL05va2lhLyIsIFBhdGhTaXpl
KTsKKworICAgIGNoYXIgZm9udERpcmVjdG9yeVtQYXRoU2l6ZV07CisgICAgc3RybGNweShmb250
RGlyZWN0b3J5LCBob21lLCBQYXRoU2l6ZSk7CisgICAgc3RybGNhdChmb250RGlyZWN0b3J5LCAi
Ly5mb250Y29uZmlnLyIsIFBhdGhTaXplKTsKKworICAgIGNvbnN0IGNoYXIqIGxpbmtlZERpcmVj
dG9yaWVzW10gPSB7CisgICAgICAgIGNhY2hlRGlyZWN0b3J5LAorICAgICAgICBmb250RGlyZWN0
b3J5LAorICAgICAgICBsb2NhbERpcmVjdG9yeSwKKyAgICAgICAgIi9ldGMvZm9udHMvIiwKKyAg
ICAgICAgIi9ldGMvc3NsL2NlcnRzLyIsCisgICAgICAgICIvdmFyL2NhY2hlL2ZvbnRjb25maWcv
IiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvIiwKKyAgICAgICAgMAorICAgIH07CisKKyAg
ICBjb25zdCBjaGFyKiogY3VycmVudExpbmtlZERpcmVjdG9yeSA9IGxpbmtlZERpcmVjdG9yaWVz
OworICAgIHdoaWxlICgqY3VycmVudExpbmtlZERpcmVjdG9yeSkgeworICAgICAgICBjaGFyIGxp
bmtlZERpcmVjdG9yeUluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgICAgIHN0cmxjcHkobGlua2Vk
RGlyZWN0b3J5SW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBQYXRoU2l6ZSk7CisgICAgICAg
IHN0cmxjYXQobGlua2VkRGlyZWN0b3J5SW5TYW5kYm94LCAqY3VycmVudExpbmtlZERpcmVjdG9y
eSwgUGF0aFNpemUpOworCisgICAgICAgIGlmICghbGlua0RpcmVjdG9yeSgqY3VycmVudExpbmtl
ZERpcmVjdG9yeSwgbGlua2VkRGlyZWN0b3J5SW5TYW5kYm94KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgKytjdXJyZW50TGlua2VkRGlyZWN0b3J5OworICAgIH0KKworICAg
IGlmICghc2V0dXBYYXV0aG9yaXR5Rm9yTm9ib2R5VXNlcigpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gY29sbGVjdFJ1blRpbWVEZXBlbmRlbmNpZXMoKTsKK30KKworc3Rh
dGljIGJvb2wgcmVzdHJpY3RDYXBhYmlsaXRpZXMoKQoreworICAgIC8vIENhcGFiaWxpdGllcyB3
ZSBuZWVkLgorICAgIGNhcF92YWx1ZV90IGNhcGFiaWx0eUxpc3RbNF07CisgICAgY2FwYWJpbHR5
TGlzdFswXSA9IENBUF9TRVRVSUQ7CisgICAgY2FwYWJpbHR5TGlzdFsxXSA9IENBUF9TRVRHSUQ7
CisgICAgY2FwYWJpbHR5TGlzdFsyXSA9IENBUF9TWVNfQURNSU47IC8vIENsb25pbmcgd2l0aCBD
TE9ORV9ORVdQSUQgZmxhZyBsYXRlciB3aWxsIG5lZWQgdGhpcyBjYXBhYmlsaXR5LgorICAgIGNh
cGFiaWx0eUxpc3RbM10gPSBDQVBfU1lTX0NIUk9PVDsKKworICAgIC8vIFJlZHVjZSBjYXBhYmls
aXRpZXMgdG8gd2hhdCB3ZSBuZWVkLgorICAgIC8vIEFsdGhvdWdoIHdlIHN0aWxsIGhhdmUgcm9v
dCBldWlkIGFuZCB3ZSBrZWVwIHJvb3QgZXF1aXZhbGVudCBjYXBhYmlsaXRpZXMsCisgICAgLy8g
d2UgcmVtb3ZlZCAoPSBkaWRuJ3QgYWRkKSBDQVBfU1lTX1JFU1NPVVJDRSBjYXBhYmlsaXRlcyBh
bmQgdGhpcyByZXN1bHRlZCB0aGF0CisgICAgLy8gdGhlIHNldHJsaW1pdCBmdW5jdGlvbiB3aXRo
IFJMSU1JVF9OT0ZJTEUgd2lsbCBiZSBlZmZlY3RpdmUgbGF0ZXIuCisgICAgaWYgKCFzZXRDYXBh
YmlsaXRpZXMoY2FwYWJpbHR5TGlzdCwgc2l6ZW9mKGNhcGFiaWx0eUxpc3QpIC8gc2l6ZW9mKGNh
cGFiaWx0eUxpc3RbMF0pKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBh
ZGp1c3QgcHJvY2VzcyBjYXBhYmlsaXRpZXM6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj
IGJvb2wgbW92ZVRvTmV3UGlkTmFtZXNwYWNlKCkKK3sKKyAgICAvLyBDTE9ORV9ORVdQSUQgYW5k
IENMT05FX0ZTIHNob3VsZCBiZSBpbiB0aGF0IG9yZGVyLgorICAgIC8vIFdlIGNhbid0IHNoYXJl
IEZTIGFjY3Jvc3MgbmFtZXNwYWNlcy4KKyAgICBwaWRfdCBwaWQsIGV4cGVjdGVkUGlkOworICAg
IGludCBzdGF0dXM7CisgICAgcGlkID0gc3lzY2FsbChTWVNfY2xvbmUsIENMT05FX05FV1BJRCB8
IFNJR0NITEQsIDAsIDAsIDApOworCisgICAgc3dpdGNoIChwaWQpIHsKKyAgICBjYXNlIC0xOgor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNsb25pbmcgaXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgMDoKKyAgICAgICAg
Ly8gQ2hpbGQgc2hvdWxkIHJ1biB3aXRoIHBpZCBudW1iZXIgMSBpbiB0aGUgbmV3IG5hbWVzcGFj
ZS4KKyAgICAgICAgaWYgKGdldHBpZCgpICE9IDEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ291bGRuJ3QgY3JlYXRlIGEgbmV3IFBJRCBuYW1lc3BhY2UuXG4iKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICAvLyBXZSBhcmUgd2FpdGluZyBmb3Igb3VyIGNoaWxkIChXZWJQcm9j
ZXNzKS4KKyAgICAgICAgLy8gSWYgdGhpcyB3YWl0IGlzIHN1Y2Nlc3NmdWwgaXQgbWVhbnMgdGhh
dCBvdXIgY2hpbGQgaXMgdGVybWluYXRlZC4KKyAgICAgICAgZXhwZWN0ZWRQaWQgPSB3YWl0cGlk
KHBpZCwgJnN0YXR1cywgMCk7CisgICAgICAgIGlmIChleHBlY3RlZFBpZCAhPSBwaWQpIHsKKyAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV2FpdHBpZCBpcyBmYWlsZWQgd2l0aDogJXNcbiIs
IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKFdJRkVYSVRFRChzdGF0dXMpKQorICAgICAgICAgICAgZXhpdChX
RVhJVFNUQVRVUyhzdGF0dXMpKTsKKyAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIH0K
KyAgICAvLyBXZSBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZS4KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3N0YXRpYyBib29sIHJ1bihpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltdKQoreworICAg
IHN0cnVjdCBwYXNzd2QqIHVzZXJJbmZvID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworICAgIGlmICgh
dXNlckluZm8pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGN1
cnJlbnQgdXNlcjogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgc3RybGNweShzYW5kYm94RGlyZWN0b3J5LCB1c2VySW5mby0+cHdf
ZGlyLCBQYXRoU2l6ZSk7CisgICAgc3RybGNhdChzYW5kYm94RGlyZWN0b3J5LCAiLy53azItc2Fu
ZGJveCIsIFBhdGhTaXplKTsKKworICAgIC8vIEN1cnJlbnRseSB3ZSB1c2Ugbm9ib2R5IHVzZXIg
YXMgdGhlIHNhbmRib3ggdXNlciBhbmQgZmFsbGJhY2sgdG8gdGhlIHJlYWwgdXNlcgorICAgIC8v
IGlmIGl0J3MgZmFpbGVkLiAoV2UgY291bGQgZXh0ZW5kIHRoaXMgaW4gdGhlIGZ1dHVyZSB3aXRo
IGEgc3BlY2lmaWMgcmVzdHJpY3RlZCB1c2VyLikKKyAgICBzdHJ1Y3QgcGFzc3dkKiBub2JvZHlV
c2VyID0gZ2V0cHduYW0oIm5vYm9keSIpOworICAgIGlmIChub2JvZHlVc2VyKSB7CisgICAgICAg
IHNhbmRib3hVc2VyVWlkID0gbm9ib2R5VXNlci0+cHdfdWlkOworICAgICAgICBzYW5kYm94VXNl
ckdpZCA9IG5vYm9keVVzZXItPnB3X2dpZDsKKyAgICB9IGVsc2UgeworICAgICAgICBzYW5kYm94
VXNlclVpZCA9IGdldHVpZCgpOworICAgICAgICBzYW5kYm94VXNlckdpZCA9IGdldGdpZCgpOwor
ICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBoYXZlIHRocmVlIHBhcmFtZXRlcnM6CisgICAgLy8g
cGF0aF9vZl90aGlzX2JpbmFyeSBwYXRoX29mX3RoZV93ZWJwcm9jZXNzIHNvY2tldF90b19jb21t
dW5pY2F0ZV93aXRoX3VpcHJvY2VzcworICAgIGlmIChhcmdjICE9IDMpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJTdGFydGluZyBTYW5kYm94UHJvY2VzcyByZXF1aXJlcyAzIHBhcmFtZXRl
cnMhXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFNhbmRib3hQ
cm9jZXNzIHNob3VsZCBiZSBydW4gd2l0aCBzdWlkIGZsYWcgLi4uCisgICAgaWYgKGdldGV1aWQo
KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBzYW5kYm94IGlzIG5vdCBzZXRldWlk
IHJvb3QuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIC4uLiBi
dXQgbm90IGFzIHJvb3QgKG5vdCB3aXRoIHN1ZG8pLgorICAgIGlmICghZ2V0dWlkKCkpIHsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJUaGUgc2FuZGJveCBpcyBub3QgZGVzaWduZWQgdG8gYmUg
cnVuIGJ5IHJvb3QuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghaW5pdFNhbmRib3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFyZXN0
cmljdENhcGFiaWxpdGllcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBt
b3ZlIG91cnNlbGYgYW5kIG91ciBjaGlsZHJlbiBpbnRvIGEgbmV3IFBJRCBuYW1lc3BhY2UsCisg
ICAgLy8gd2hlcmUgcHJvY2VzcyBJRHMgc3RhcnQgZnJvbSAwIGFnYWluLgorICAgIGlmICghbW92
ZVRvTmV3UGlkTmFtZXNwYWNlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFN0
YXJ0aW5nIGEgaGVscGVyIHdoYXQgd2lsbCB3YWl0aW5nIGZvciB0aGUgImNocm9vdG1lIiBtZXNz
YWdlIGZyb20gV2ViUHJvY2Vzcy4KKyAgICBpZiAoIXByZXBhcmVBbmRTdGFydENoYW5nZVJvb3RI
ZWxwZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCBh
bnkgc3BlY2lhbCBwcml2aWxlZ2VzIGFueW1vcmUuCisgICAgaWYgKCFkcm9wUHJpdmlsZWdlcygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTYW5pdHkgY2hlY2s6IGlmIG91ciBl
ZmZlY3RpdmUgb3IgcmVhbCB1aWQvZ2lkIGlzIHN0aWxsIDAgKHJvb3QpIG9yCisgICAgLy8gd2Ug
Y2FuIHNldCBhbnkgb2YgdGhlbSB0byAwLCB0aGVuIHRoZSBkcm9wcGluZyBvZiBwcml2aWxlZ2Vz
IGlzIGZhaWxlZC4KKyAgICAvLyBXZSBlbnN1cmUgaGVyZSB0aGF0IHdlIGNhbm5vdCBzZXQgcm9v
dCBpZCBhZnRlciBoZXJlLgorICAgIGlmICghZ2V0ZXVpZCgpIHx8ICFnZXRlZ2lkKCkgfHwgIXNl
dHVpZCgwKSB8fCAhc2V0Z2lkKDApKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRHJvcHBp
bmcgcHJpdmlsZWdlcyBmYWlsZWQhXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIC8vIFN0YXJ0IHRoZSBXZWJQcm9jZXNzLgorICAgIGlmIChleGVjbChhcmd2WzFdLCBh
cmd2WzFdLCBhcmd2WzJdLCByZWludGVycHJldF9jYXN0PGNoYXIqPigwKSkgPT0gLTEpIHsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBzdGFydCBXZWJQcm9jZXNzOiAlc1xuIiwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSkKK3sK
KyAgICByZXR1cm4gcnVuKGFyZ2MsIGFyZ3YpID8gMCA6IDE7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50
TGludXguaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TYW5k
Ym94RW52aXJvbm1lbnRMaW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjIyNjI3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgv
U2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaApAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisj
ZGVmaW5lIFNhbmRib3hFbnZpcm9ubWVudExpbnV4X2gKKworI2RlZmluZSBTQU5EQk9YX0RFU0NS
SVBUT1IgIlNBTkRCT1hfREVTQ1JJUFRPUiIKKyNkZWZpbmUgU0FOREJPWF9IRUxQRVJfUElEICJT
QU5EQk9YX0hFTFBFUl9QSUQiCisKKyNkZWZpbmUgTVNHX0NIUk9PVE1FICdDJworI2RlZmluZSBN
U0dfQ0hST09URUQgJ08nCisKKyNlbmRpZiAvLyBTYW5kYm94RW52aXJvbm1lbnRMaW51eF9oCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNz
TGF1bmNoZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJv
Y2Vzc0xhdW5jaGVyUXQuY3BwCmluZGV4IDBiNmVlMWIuLjVjMjE5YWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hl
clF0LmNwcApAQCAtNjIsNiArNjIsMTAgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisjaW5jbHVkZSA8UUNvcmVBcHBsaWNh
dGlvbj4KKyNlbmRpZgorCiAjaWYgT1MoREFSV0lOKQogI2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0
Lmg+CiAjaW5jbHVkZSA8c2VydmVycy9ib290c3RyYXAuaD4KQEAgLTE2NywzNyArMTcxLDQ5IEBA
IHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKICAgICBjb21tYW5kTGluZSA9
IGNvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsKICNlbmRpZgogCi0gICAgUVByb2Nlc3MqIHdl
YlByb2Nlc3MgPSBuZXcgUXRXZWJQcm9jZXNzKCk7Ci0gICAgd2ViUHJvY2Vzcy0+c2V0UHJvY2Vz
c0NoYW5uZWxNb2RlKFFQcm9jZXNzOjpGb3J3YXJkZWRDaGFubmVscyk7Ci0gICAgd2ViUHJvY2Vz
cy0+c3RhcnQoY29tbWFuZExpbmUpOworICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNzT3JTVUlESGVs
cGVyOworICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXIgPSBuZXcgUXRXZWJQcm9jZXNzKCk7Cisg
ICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c2V0UHJvY2Vzc0NoYW5uZWxNb2RlKFFQcm9jZXNz
OjpGb3J3YXJkZWRDaGFubmVscyk7CisKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQor
ICAgIGlmIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPT0gV2ViUHJvY2VzcykgeworICAg
ICAgICBRU3RyaW5nIHNhbmRib3hDb21tYW5kTGluZSA9IFFMYXRpbjFTdHJpbmcoIiUxICUyICUz
Iik7CisgICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmco
UUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQYXRoKCkgKyBRTGF0aW4xU3RyaW5nKCIv
U1VJRFNhbmRib3hIZWxwZXIiKSk7CisgICAgICAgIHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRi
b3hDb21tYW5kTGluZS5hcmcoZXhlY3V0YWJsZVBhdGhPZldlYlByb2Nlc3MoKSk7CisgICAgICAg
IHNhbmRib3hDb21tYW5kTGluZSA9IHNhbmRib3hDb21tYW5kTGluZS5hcmcoc29ja2V0c1swXSk7
CisKKyAgICAgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c3RhcnQoc2FuZGJveENvbW1hbmRM
aW5lKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+c3RhcnQo
Y29tbWFuZExpbmUpOworI2Vsc2UKKyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChj
b21tYW5kTGluZSk7CisjZW5kaWYKIAogI2lmIE9TKFVOSVgpICYmICFPUyhEQVJXSU4pCiAgICAg
Ly8gRG9uJ3QgZXhwb3NlIHRoZSB3ZWIgc29ja2V0IHRvIHBvc3NpYmxlIGZ1dHVyZSB3ZWIgcHJv
Y2Vzc2VzCiAgICAgd2hpbGUgKGZjbnRsKHNvY2tldHNbMF0sIEZfU0VURkQsIEZEX0NMT0VYRUMp
ID09IC0xKSB7CiAgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgewogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBkZWxldGUgd2ViUHJvY2VzczsKKyAgICAg
ICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzT3JTVUlESGVscGVyOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoIXdlYlByb2Nlc3MtPndhaXRG
b3JTdGFydGVkKCkpIHsKKyAgICBpZiAoIXdlYlByb2Nlc3NPclNVSURIZWxwZXItPndhaXRGb3JT
dGFydGVkKCkpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkZhaWxlZCB0byBzdGFydCIgPDwgY29t
bWFuZExpbmU7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2lmIE9TKERBUldJTikK
ICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgY29ubmVjdG9y
KTsKICAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGNvbm5lY3Rv
ciwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKICNlbmRpZgotICAgICAgICBkZWxldGUg
d2ViUHJvY2VzczsKKyAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0KICNpZiBPUyhVTklYKQotICAgIHNldHByaW9yaXR5KFBSSU9f
UFJPQ0VTUywgd2ViUHJvY2Vzcy0+cGlkKCksIDEwKTsKKyAgICBzZXRwcmlvcml0eShQUklPX1BS
T0NFU1MsIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnBpZCgpLCAxMCk7CiAjZW5kaWYKLQotICAg
IFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6
OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMsIHdlYlByb2Nlc3MsIGNvbm5lY3Rvcikp
OworICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmV2ViS2l0OjpQcm9jZXNzTGF1
bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHRoaXMsIHdlYlByb2Nlc3NPclNVSURI
ZWxwZXIsIGNvbm5lY3RvcikpOwogfQogCiB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRl
UHJvY2VzcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDgwY2IyZmIuLjY1NTJiYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
cHJpCkBAIC0xNSw2ICsxNSw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIv
UGxhdGZvcm0vQ29yZUlQQyBcCiAgICAgJCRTT1VSQ0VfRElSL1BsYXRmb3JtL3F0IFwKICAgICAk
JFNPVVJDRV9ESVIvU2hhcmVkIFwKKyAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL2xpbnV4L1NhbmRi
b3hQcm9jZXNzIFwKICAgICAkJFNPVVJDRV9ESVIvU2hhcmVkL0FQSS9jIFwKICAgICAkJFNPVVJD
RV9ESVIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAgICQkU09VUkNFX0RJUi9TaGFy
ZWQvQ29yZUlQQ1N1cHBvcnQgXApAQCAtNjIsNyArNjMsNyBAQCBJTkNMVURFUEFUSCArPSBcCiAg
ICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZSBcCiAgICAgJCRTT1VSQ0VfRElSL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIFwKICAgICAkJFNPVVJDRV9ESVIv
V2ViUHJvY2Vzcy9xdCBcCi0gICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MKKyAgICAkJFNP
VVJDRV9ESVIvUGx1Z2luUHJvY2VzcyBcCiAKICMgVGhlIFdlYktpdDIgUXQgQVBJcyBkZXBlbmQg
b24gcXdlYmtpdGdsb2JhbC5oLCB3aGljaCBsaXZlcyBpbiBXZWJLaXQKIElOQ0xVREVQQVRIICs9
ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYktpdC9xdC9BcGkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5w
cm8KaW5kZXggZTQxODY5NS4uNjM5M2FkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8KQEAgLTExLDYg
KzExLDEwIEBAIERFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0vYmluCiAKIFNPVVJDRVMgKz0g
cXQvTWFpblF0LmNwcAogCitJTkNMVURFUEFUSCA9IFwKKyAgICAkJFBXRC9TaGFyZWQvbGludXgv
U2FuZGJveFByb2Nlc3MvIFwKKyAgICAkJElOQ0xVREVQQVRICisKIFFUICs9IG5ldHdvcmsgd2Vi
a2l0d2lkZ2V0cwogbWFjeDogUVQgKz0geG1sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCmluZGV4IDE4ZjMwMzk0Li5iZWFiYzgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5j
cHAKQEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDxR
VXJsPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8c3lzL3dh
aXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQpAQCAtNjAsNiArNjIsMTAgQEAKIGV4dGVybiAiQyIga2Vybl9yZXR1cm5f
dCBib290c3RyYXBfbG9va191cDIobWFjaF9wb3J0X3QsIGNvbnN0IG5hbWVfdCwgbWFjaF9wb3J0
X3QqLCBwaWRfdCwgdWludDY0X3QpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9Y
X0xJTlVYKQorI2luY2x1ZGUgIlNhbmRib3hFbnZpcm9ubWVudExpbnV4LmgiCisjZW5kaWYKKwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTQyLDE0
ICsxNDgsNzQgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVByb3h5KCkKICAgICBRTmV0d29ya1By
b3h5RmFjdG9yeTo6c2V0VXNlU3lzdGVtQ29uZmlndXJhdGlvbih0cnVlKTsKIH0KIAorI2lmIEVO
QUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCitwaWRfdCBjaHJvb3RNZSgpCit7CisgICAgbG9uZyBp
bnQgc2FuZGJveFNvY2tldERlc2NyaXB0b3IgPSAtMTsKKyAgICBjaGFyKiBzYW5kYm94U29ja2V0
RGVzY3JpcHRvclN0cmluZzsKKyAgICBjaGFyKiBoZWxwZXJQaWQ7CisgICAgY2hhciBzYW5kYm94
TWVNZXNzYWdlID0gTVNHX0NIUk9PVE1FOworICAgIHNzaXplX3QgbnVtYmVyT2ZDaGFyYWN0ZXJz
OworICAgIHBpZF90IGhlbHBlciA9IC0xOworCisgICAgLy8gR2V0IHRoZSBmaWxlIGRlc2NyaXB0
b3Igb2YgdGhlIHNvY2tldHBhaXIuCisgICAgc2FuZGJveFNvY2tldERlc2NyaXB0b3JTdHJpbmcg
PSBnZXRlbnYoU0FOREJPWF9ERVNDUklQVE9SKTsKKyAgICBpZiAoIXNhbmRib3hTb2NrZXREZXNj
cmlwdG9yU3RyaW5nKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBlcnJubyA9IDA7CisgICAg
c2FuZGJveFNvY2tldERlc2NyaXB0b3IgPSBzdHJ0b2woc2FuZGJveFNvY2tldERlc2NyaXB0b3JT
dHJpbmcsIChjaGFyICoqKSAwLCAxMCk7CisgICAgaWYgKGVycm5vIHx8IChzYW5kYm94U29ja2V0
RGVzY3JpcHRvciA9PSAtMSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8vIEdldCB0aGUg
UElEIG9mIHRoZSBzZXR1aWQgaGVscGVyLgorICAgIGhlbHBlclBpZCA9IGdldGVudihTQU5EQk9Y
X0hFTFBFUl9QSUQpOworCisgICAgLy8gSWYgbm8gUElEIGlzIGF2YWlsYWJsZSwgdGhlIGRlZmF1
bHQgb2YgLTEgd2lsbCBkby4KKyAgICBpZiAoaGVscGVyUGlkKSB7CisgICAgICAgIGVycm5vID0g
MDsKKyAgICAgICAgaGVscGVyID0gc3RydG9sKGhlbHBlclBpZCwgKGNoYXIgKiopIDAsIDEwKTsK
KyAgICAgICAgaWYgKGVycm5vIHx8IChoZWxwZXIgPT0gLTEpKQorICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgIH0KKyAgICAvLyBTZW5kIHRoZSBjaHJvb3RNZSBtZXNzYWdlIHRvIHRoZSBoZWxw
ZXIuCisgICAgbnVtYmVyT2ZDaGFyYWN0ZXJzID0gd3JpdGUoc2FuZGJveFNvY2tldERlc2NyaXB0
b3IsICZzYW5kYm94TWVNZXNzYWdlLCAxKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFyYWN0ZXJzICE9
IDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJvb3RNZSBtc2cgZmFpbGVkIHRvIHdy
aXRlOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9
CisgICAgLy8gUmVhZCB0aGUgYWNrbm93bGVkZ2VtZW50IG1lc3NhZ2UgZnJvbSB0aGUgaGVscGVy
LgorICAgIG51bWJlck9mQ2hhcmFjdGVycyA9IHJlYWQoc2FuZGJveFNvY2tldERlc2NyaXB0b3Is
ICZzYW5kYm94TWVNZXNzYWdlLCAxKTsKKyAgICBpZiAoKG51bWJlck9mQ2hhcmFjdGVycyAhPSAx
KSB8fCAoc2FuZGJveE1lTWVzc2FnZSAhPSBNU0dfQ0hST09URUQpKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ291bGRuJ3QgcmVhZCB0aGUgY29uZmlybWF0aW9uIG1lc3NhZ2UuXG4iKTsK
KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBjbG9zZShzYW5kYm94U29ja2V0RGVzY3Jp
cHRvcik7CisgICAgLy8gV2FpdCBmb3IgdGhlIGhlbHBlciBwcm9jZXNzLgorICAgIGludCBleHBl
Y3RlZFBpZCA9IHdhaXRwaWQoaGVscGVyLCAwLCAwKTsKKyAgICBpZiAoZXhwZWN0ZWRQaWQgIT0g
LTEgJiYgKChoZWxwZXIgPT0gLTEpIHx8IChleHBlY3RlZFBpZCA9PSBoZWxwZXIpKSkKKyAgICAg
ICAgcmV0dXJuIGV4cGVjdGVkUGlkOworICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgd2Fp
dCBmb3IgdGhlIGhlbHBlciBwcm9jZXNzOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBy
ZXR1cm4gLTE7Cit9CisjZW5kaWYKKwogUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5R
dChRR3VpQXBwbGljYXRpb24qIGFwcCkKIHsKLSAgICBpbml0aWFsaXplUHJveHkoKTsKKyNpZiBF
TkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorICAgIHBpZF90IGhlbHBlcjsKKyAgICBoZWxwZXIg
PSBjaHJvb3RNZSgpOwogCisgICAgaWYgKGhlbHBlciA9PSAtMSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkFza2luZyBmb3IgY2hyb290IGZhaWxlZC5cbiIpOworICAgICAgICByZXR1cm4g
LTE7CisgICAgfQorI2VuZGlmCisgICAgaW5pdGlhbGl6ZVByb3h5KCk7CiAgICAgSlNDOjppbml0
aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAg
IFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwotICAgIAorCiAjaWYgVVNFKFFUS0lU
KQogICAgIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlRm9yV0syKCk7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhZjc2MDg3Li4z
ODkwNGIzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMTEtMTYgIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFtXSzJdIFB1dHRpbmcgUXRXZWJQcm9jZXNzIGludG8gYSBjaHJv
b3RlZCBzYW5kYm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MDAwNQorCisgICAgICAgIFJldmlld2VkIGJ5IFpvbHRhbiBIZXJjemVnLgorCisgICAg
ICAgIEFkZCBmZWF0dXJlIGZsYWcgZm9yIHN1aWQgc2FuZGJveCBpbiBsaW51eC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbToKKwogMjAxMi0xMS0xNSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBQcml2YXRlIEJyb3dz
aW5nIGlzIGEgcGVyLXBhZ2Ugc2V0dGluZyB0aGF0IHNldHMgYSBnbG9iYWwgdmFsdWUKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQppbmRleCBjYzVmMGRlLi4xOGM3MzhkIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCkBAIC0xMjAsNiArMTIwLDcg
QEAgbXkgKAogICAgICRzaGFyZWRXb3JrZXJzU3VwcG9ydCwKICAgICAkc3FsRGF0YWJhc2VTdXBw
b3J0LAogICAgICRzdHlsZVNjb3BlZFN1cHBvcnQsCisgICAgJHN1aWRMaW51eFNhbmRib3gsCiAg
ICAgJHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBvcnQsCiAgICAgJHN2Z0ZvbnRzU3VwcG9ydCwKICAg
ICAkc3ZnU3VwcG9ydCwKQEAgLTM3NSw2ICszNzYsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAg
eyBvcHRpb24gPT4gInN0eWxlLXNjb3BlZCIsIGRlc2MgPT4gIlRvZ2dsZSBTdHlsZSBTY29wZWQg
c3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVFlMRV9TQ09QRUQiLCBkZWZhdWx0
ID0+IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBcJHN0eWxlU2NvcGVkU3VwcG9ydCB9LAogCisg
ICAgeyBvcHRpb24gPT4gInN1aWQtbGludXgtc2FuZGJveCIsIGRlc2MgPT4gIlRvZ2dsZSBzdWlk
IHNhbmRib3ggZm9yIGxpbnV4IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NVSURfU0FOREJP
WF9MSU5VWCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRzdWlkTGludXhTYW5kYm94IH0sCisK
ICAgICB7IG9wdGlvbiA9PiAic3ZnIiwgZGVzYyA9PiAiVG9nZ2xlIFNWRyBzdXBwb3J0IiwKICAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWRyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRzdmdT
dXBwb3J0IH0sCiAKLS0gCjEuNy45LjUKCg==
</data>
<flag name="review"
          id="189896"
          type_id="1"
          status="-"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="189897"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177000</attachid>
            <date>2012-11-30 11:44:42 -0800</date>
            <delta_ts>2013-01-22 01:06:46 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-15.2.patch</filename>
            <type>text/plain</type>
            <size>47167</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSA5ZWJhZjljYjZmYTNiZmNkMDg2MjQyZGY3YjQ2M2E3NjI3ZDZiZjM2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBGcmksIDMwIE5vdiAyMDEyIDIwOjAyOjQ4ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gZmVsdG9s
dCAxNS4yCgotLS0KIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxMSArCiBTb3VyY2UvUXRXZWJLaXQucHJvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgIDUgKwogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDU2ICsrCiBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5w
cm8gICAgICAgICAgICAgICAgICB8ICAgMjUgKwogLi4uL1NhbmRib3hQcm9jZXNzL1NhbmRib3hF
bnZpcm9ubWVudExpbnV4LmNwcCAgICAgfCAgODA4ICsrKysrKysrKysrKysrKysrKysrCiAuLi4v
bGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCB8ICAgMzIgKwog
Li4uL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgICAgfCAgIDM1
ICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgNCArCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWlu
UXQuY3BwICB8ICAgNzAgKy0KIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAxMSArCiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxp
c3QucG0gICAgICAgICAgICB8ICAgIDQgKwogMTIgZmlsZXMgY2hhbmdlZCwgMTA1MSBpbnNlcnRp
b25zKCspLCAxMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9TYW5kYm94UHJvY2Vzcy5wcm8KIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9j
ZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9D
aGFuZ2VMb2cKaW5kZXggM2ViZWRjMS4uNDViNzliNyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisr
KyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTExLTMwICBSZW5hdGEgSG9kb3Zh
biAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBbV0syXSBQdXR0aW5nIFF0V2ViUHJvY2Vz
cyBpbnRvIGEgY2hyb290ZWQgc2FuZGJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTAwMDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2Fy
bHNzb24gYW5kIFpvbHRhbiBIZXJjemVnLgorCisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8g
YnVpbGQgV2ViS2l0MiB3aXRoIFNhbmRib3hQcm9jZXNzLgorCisgICAgICAgICogU291cmNlL1F0
V2ViS2l0LnBybzoKKwogMjAxMi0xMS0zMCAgUGllcnJlIFJvc3NpICA8cGllcnJlLnJvc3NpQGdt
YWlsLmNvbT4KIAogICAgICAgICBbUXRdIFVucmV2aWV3ZWQgYnVpbGQgYnJlYWsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9RdFdlYktpdC5wcm8gYi9Tb3VyY2UvUXRXZWJLaXQucHJvCmluZGV4IDE5ZDUy
ZmMuLjdjZmE0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9RdFdlYktpdC5wcm8KKysrIGIvU291cmNl
L1F0V2ViS2l0LnBybwpAQCAtMjIsNiArMjIsMTEgQEAgYnVpbGQ/KHdlYmtpdDIpIHsKICAgICAg
ICAgcGx1Z2lucHJvY2Vzcy5maWxlID0gV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzLnBybwogICAgICAg
ICBTVUJESVJTICs9IHBsdWdpbnByb2Nlc3MKICAgICB9CisKKyAgICBlbmFibGU/KFNVSURfU0FO
REJPWF9MSU5VWCkgeworICAgICAgICBzYW5kYm94cHJvY2Vzcy5maWxlID0gV2ViS2l0Mi9TYW5k
Ym94UHJvY2Vzcy5wcm8KKyAgICAgICAgU1VCRElSUyArPSBzYW5kYm94cHJvY2VzcworICAgIH0K
IH0KIAogZGVjbGFyYXRpdmUuZmlsZSA9IFdlYktpdC9xdC9kZWNsYXJhdGl2ZS9kZWNsYXJhdGl2
ZS5wcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCBhNDFiZjQzLi5kYjU4YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTkgQEAKKzIwMTItMTEtMzAgIFJlbmF0YSBIb2RvdmFuICA8cmVuaUB3ZWJraXQub3JnPgor
CisgICAgICAgIFtXSzJdIFB1dHRpbmcgUXRXZWJQcm9jZXNzIGludG8gYSBjaHJvb3RlZCBzYW5k
Ym94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDAw
NQorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3NvbiBhbmQgWm9sdGFuIEhlcmN6
ZWcuCisKKyAgICAgICAgVGhpcyBuZXcgZmVhdHVyZSBtYWtlcyBwb3NzaWJsZSB0byBydW4gV2Vi
UHJvY2VzcyBpbnNpZGUgYSBjaHJvb3QuIEluIHRoaXMgY2FzZSBVSVByb2Nlc3MgY2FsbHMgdGhl
CisgICAgICAgIGludGVybmFsIFNhbmRib3hQcm9jZXNzIGJpbmFyeSB3aGF0IG1ha2VzIHVwIGFu
IGVudmlyb25tZW50IGZvciBXZWJQcm9jZXNzIGluc2lkZSB0aGUgc2FuZGJveCBhbmQgcnVucyB0
aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAgU2FuZGJveFByb2Nlc3MgZmlyc3QgY3JlYXRlcyB0d28g
bmVlZGVkIGRldmljZSBmaWxlcyAocmFuZG9tIGFuZCB1cmFuZG9tKSwgbW91bnRzIGZpbGVzeXN0
ZW1zIChwcm9jIGFuZCBzaGFyZWQgbWVtb3J5KSwKKyAgICAgICAgdGhlbiBsaW5rcyBydW4tdGlt
ZSBkZXBlbmRlbmNpZXMgb2YgV2ViUHJvY2Vzcy4gQWZ0ZXIgdGhpcywgU2FuZGJveFByb2Nlc3Mg
bW92ZXMgdG8gYSBuZXcgcGlkIG5hbWVzcGFjZSAoY2xvbmluZyB3aXRoCisgICAgICAgIENMT05F
X05FV1BJRCBmbGFnKS4gVGhlbiBhZnRlciBhbiBvdGhlciBjbG9uaW5nICh3aXRoIENMT05FX0ZT
IGZsYWcpIHdlIHNoYXJlIG91ciBmaWxlc3lzdGVtIHdpdGggb3VyIGNoaWxkcmVuLiBUaGlzIGlz
CisgICAgICAgIG5lZWRlZCBiZWNhdXNlIHdlIHdhbnQgdG8gY2FsbCBjaHJvb3QoKSBmdW5jdGlv
biBmcm9tIGhlcmUgYW5kIGphaWwgb3VyIGNoaWxkIChXZWJQcm9jZXNzKSB0b28uIFRoaXMgd2ls
bCBiZSBwZXJmb3JtZWQKKyAgICAgICAgd2hlbiBXZWJQcm9jZXNzIHNlbmRzIGEgcmVxdWVzdCBm
b3IgaXQgdmlhIGFuIHNvY2tldHBhaXIuIElmIHNhbmRib3hpbmcgaXMgZG9uZSwgU2FuZGJveFBy
b2Nlc3MgZXhpdHMuCisgICAgICAgIFNpbmNlIGNocm9vdCgpIHN5c3RlbSBjYWxsIG5lZWRzIHN1
ZG9lciByaWdodHMgU2FuZGJveFByb2Nlc3MgYmluYXJ5IHNob3VsZCBoYXZlIHNldCBpdHMgc3Vp
ZCBmbGFnLiBIb3dldmVyIHdlIGNhbiByZWR1Y2UKKyAgICAgICAgaXRzIGNhcGFiaWxpdGVzLiBG
aXJzdCB3ZSByZXN0cmljdCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBwcm9jZXNzIGFuZCB0aGUg
bnVtYmVyIG9mIGl0cyBwb3NzaWJsZSByZXNvdXJjZXMuIEZ1cnRoZXJtb3JlCisgICAgICAgIHdl
IGZhbGxiYWNrIHRvIHRoZSBub2JvZHkgb3IgdGhlIHJlYWwgdXNlci4KKworICAgICAgICAqIENv
bmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIFNhbmRib3hQ
cm9jZXNzLnBybzogQWRkZWQuCisgICAgICAgICogU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNz
L1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcDogQWRkZWQuCisgICAgICAgIChsYXVuY2hDaGFu
Z2VSb290SGVscGVyKToKKyAgICAgICAgKHNldEVudmlyb25tZW50VmFyaWFibGVzRm9yQ2hhbmdl
Um9vdEhlbHBlcik6CisgICAgICAgIChwcmVwYXJlQW5kU3RhcnRDaGFuZ2VSb290SGVscGVyKToK
KyAgICAgICAgKHNldENhcGFiaWxpdGllcyk6CisgICAgICAgIChkcm9wUHJpdmlsZWdlcyk6Cisg
ICAgICAgIChmaWxlRXhpc3RzKToKKyAgICAgICAgKGRpcmVjdG9yeVBlcm1pc3Npb25zKToKKyAg
ICAgICAgKGNyZWF0ZURpcmVjdG9yeSk6CisgICAgICAgIChjcmVhdGVEaXJlY3RvcnlQYXRoKToK
KyAgICAgICAgKGNyZWF0ZURldmljZUZpbGVzKToKKyAgICAgICAgKG1vdW50RmlsZVN5c3RlbXMp
OgorICAgICAgICAobGlua0ZpbGUpOgorICAgICAgICAobGlua0RpcmVjdG9yeSk6CisgICAgICAg
IChjb2xsZWN0UnVuVGltZURlcGVuZGVuY2llcyk6CisgICAgICAgIChzZXR1cFhhdXRob3JpdHlG
b3JOb2JvZHlVc2VyKToKKyAgICAgICAgKGluaXRTYW5kYm94KToKKyAgICAgICAgKHJlc3RyaWN0
Q2FwYWJpbGl0aWVzKToKKyAgICAgICAgKG1vdmVUb05ld1BpZE5hbWVzcGFjZSk6CisgICAgICAg
IChydW4pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2hhcmVkL2xpbnV4L1NhbmRib3hQ
cm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4Lmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJl
ZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmNwcDogQWRkZWQuCisgICAg
ICAgIChzdHJpbmdDb3B5KToKKyAgICAgICAgKHN0cmluZ0NvbmNhdCk6CisgICAgICAgIChzdHJp
bmdBcHBlbmQpOgorICAgICAgICAqIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdP
cGVyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9j
ZXNzTGF1bmNoZXJRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1
bmNoUHJvY2Vzcyk6CisgICAgICAgICogV2ViS2l0Mi5wcmk6CisgICAgICAgICogV2ViUHJvY2Vz
cy5wcm86CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmNocm9vdE1lKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc01haW5RdCk6CisKIDIwMTItMTEtMzAgIFNpbW9uIEhhdXNtYW5uICA8
c2ltb24uaGF1c21hbm5AZGlnaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgdHJpdmlhbCBR
dCBidWlsZCBmaXg6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5w
cm8gYi9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTRiMDU5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NhbmRib3hQcm9jZXNzLnBybwpAQCAtMCwwICsxLDI1IEBACisjIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMg
UHJvamVjdCBmaWxlIGZvciB0aGUgV2ViS2l0MiBzYW5kYm94IHByb2Nlc3MgYmluYXJ5CisjCisj
IFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5
c3RlbQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK1RFTVBMQVRFID0gYXBwCisKK1RBUkdFVCA9IFNVSURTYW5k
Ym94SGVscGVyCitERVNURElSID0gJCR7Uk9PVF9CVUlMRF9ESVJ9L2JpbgorCitDT05GSUcgKz0g
Y29uc29sZQorQ09ORklHIC09IHF0CisKK1NPVVJDRVMgKz0gU2hhcmVkL2xpbnV4L1NhbmRib3hQ
cm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcAorSEVBREVSUyArPSBTaGFyZWQvbGlu
dXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaAorCitJTlNUQUxMUyAr
PSB0YXJnZXQKK0xJQlMgKz0gLWxjYXAgLWxkbAorCitpc0VtcHR5KElOU1RBTExfQklOUykgewor
ICAgIHRhcmdldC5wYXRoID0gJCRbUVRfSU5TVEFMTF9CSU5TXQorfSBlbHNlIHsKKyAgICB0YXJn
ZXQucGF0aCA9ICQkSU5TVEFMTF9CSU5TCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9u
bWVudExpbnV4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjA1OTA0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQ
cm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcApAQCAtMCwwICsxLDgwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0
IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIgorCisj
aW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxlcnIuaD4K
KyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z3JwLmg+
CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGluay5oPgorI2luY2x1ZGUgPHB3ZC5o
PgorI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDxzeXMvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2luY2x1ZGUgPHN5
cy9wcmN0bC5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2Nr
ZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+Cisj
aW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxz
eXMvd2FpdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisjaW5j
bHVkZSA8dmVjdG9yPgorCitlbnVtIHsgUGF0aFNpemUgPSA1MTIgfTsKK3N0YXRpYyBjaGFyIHNh
bmRib3hEaXJlY3RvcnlbUGF0aFNpemVdOworc3RhdGljIHVpZF90IHNhbmRib3hVc2VyVUlEOwor
c3RhdGljIHVpZF90IHNhbmRib3hVc2VyR0lEOworCitzdGF0aWMgaW5saW5lIHZvaWQgc3RybGNw
eShjaGFyICpkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlLCBpbnQgbWF4TGVuZ3RoKQor
eworICAgIGRlc3RpbmF0aW9uWzBdID0gJ1wwJzsKKyAgICBzdHJuY2F0KGRlc3RpbmF0aW9uLCBz
b3VyY2UsIG1heExlbmd0aCAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RybGNhdChj
aGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgY2hhciogc291cmNlLCBpbnQgbWF4TGVuZ3RoKQorewor
ICAgIHN0cm5jYXQoZGVzdGluYXRpb24sIHNvdXJjZSwgbWF4TGVuZ3RoIC0gMSAtIHN0cm5sZW4o
ZGVzdGluYXRpb24sIG1heExlbmd0aCAtIDEpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFw
cGVuZERpcmVjdG9yeUNvbXBvbmVudChjaGFyKiBmdWxsUGF0aCwgY29uc3QgY2hhciogZGlyZWN0
b3J5UGF0aCwgY29uc3QgY2hhciogZmlsZU5hbWUpCit7CisgICAgc3RybGNweShmdWxsUGF0aCwg
ZGlyZWN0b3J5UGF0aCwgUGF0aFNpemUpOworICAgIHN0cmxjYXQoZnVsbFBhdGgsIGZpbGVOYW1l
LCBQYXRoU2l6ZSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gcnVucyBpbiBhIGNsb25lZCBwcm9j
ZXNzIGFuZCBpdCBpcyB3YWl0aW5nIGZvciBhIHJlcXVlc3QgbWVzc2FnZQorLy8gZnJvbSBXZWJQ
cm9jZXNzIHRvIHBlcmZvcm0gdGhlIGNocm9vdCgpLiBJZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNj
ZXNzZnVsIHRoZSBmdW5jdGlvbgorLy8gbmV2ZXIgcmV0dXJucy4gU28gdGhpcyBmdW5jdGlvbiBo
YXMgbm8gcmV0dXJuIHZhbHVlLgorc3RhdGljIHZvaWQgbGF1bmNoQ2hhbmdlUm9vdEhlbHBlcihp
bnQgaGVscGVyU29ja2V0LCBpbnQgd2ViUHJvY2Vzc1NvY2tldCkKK3sKKyAgICAvLyBXZSBuZWVk
IHRvIHJlc3RyaWN0IHRoZSByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIG91ciBwcm9jZXNzIHRvIGF2
b2lkIG9wZW5pbmcKKyAgICAvLyBhIGZpbGUgYnkgbWlzdGFrZS4gSG93ZXZlciwgQ0FQX1NZU19S
RVNPVVJDRSBjYXBhYmlsaXR5IHNob3VsZCBiZSBkcm9wcGVkCisgICAgLy8gb3RoZXJ3aXNlIGl0
IHdvbid0IHdvcmsuCisgICAgc3RydWN0IHJsaW1pdCByZXN0cmljdGVkUmVzb3VyY2UgPSB7IDAs
IDAgfTsKKyAgICBpZiAoc2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZyZXN0cmljdGVkUmVzb3Vy
Y2UpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSGVscGVyIGNvdWxkbid0IHNl
dCB0aGUgcmVzb3VyY2UgbGltaXQ6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChjbG9zZSh3ZWJQcm9jZXNzU29ja2V0KSA9PSAtMSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjbG9zZSBzb2NrZXQgJWQ6ICVz
LlxuIiwgd2ViUHJvY2Vzc1NvY2tldCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNoYXIgbWVzc2FnZTsKKyAgICAvLyBXZSBleHBlY3QgYSAnQycgKENo
cm9vdE1lKSBtZXNzYWdlIGZyb20gdGhlIFdlYlByb2Nlc3MuCisgICAgaWYgKHJlYWQoaGVscGVy
U29ja2V0LCAmbWVzc2FnZSwgMSkgIT0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZh
aWxlZCB0byByZWFkIG1lc3NhZ2UgZnJvbSB0aGUgd2ViIHByb2Nlc3M6ICVzICVkLlxuIiwgc3Ry
ZXJyb3IoZXJybm8pLCBlcnJubyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bWVzc2FnZSAhPSBNU0dfQ0hST09UTUUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJXcm9u
ZyBtZXNzYWdlIHJlY2lldmVkOiAleC5cbiIsIG1lc3NhZ2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc3RydWN0IHN0YXQgc2FuZGJveERpcmVjdG9yeUluZm87CisgICAgaWYgKGxz
dGF0KHNhbmRib3hEaXJlY3RvcnksICZzYW5kYm94RGlyZWN0b3J5SW5mbykgIT0gLTEpIHsKKyAg
ICAgICAgaWYgKCFTX0lTRElSKHNhbmRib3hEaXJlY3RvcnlJbmZvLnN0X21vZGUpKSB7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGlzIG5vdCBhIGRpcmVjdG9yeSFcbiIsIHNhbmRi
b3hEaXJlY3RvcnkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTYW5kYm94IGRpcmVjdG9yeSAoJXMpIGlzIG5v
dCBhdmFpbGFibGU6ICVzLlxuIiwgc2FuZGJveERpcmVjdG9yeSwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjaHJvb3Qoc2FuZGJveERpcmVjdG9y
eSkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJvb3RpbmcgZmFpbGVkOiAl
cy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBDaHJvb3Qgb25seSBjaGFuZ2VzIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgY2FsbGluZyBw
cm9jZXNzIGJ1dCBkb2Vzbid0IGNoYW5nZQorICAgIC8vIHRoZSBjdXJyZW50IHdvcmtpbmcgZGly
ZWN0b3J5LiBUaGVyZWZvcmUsIGlmIHdlIGRvbid0IGRvIGl0IG1hbnVhbGx5IGEgbWFsaWNpb3Vz
IHVzZXIKKyAgICAvLyBjb3VsZCBicmVhayBvdXQgdGhlIGphaWwgd2l0aCByZWxhdGl2ZSBwYXRo
cy4KKyAgICBpZiAoY2hkaXIoIi8iKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNvdWxkbid0IGNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gLy46ICVzXG4iLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2VuZGluZyBh
Y2tub3dsZWRnZW1lbnQgdG8gdGhlIFdlYlByb2Nlc3MgdGhhdCB0aGUgc2FuZGJveGluZyB3YXMg
c3VjY2Vzc2Z1bGwuCisgICAgbWVzc2FnZSA9IE1TR19DSFJPT1RFRDsKKyAgICBpZiAod3JpdGUo
aGVscGVyU29ja2V0LCAmbWVzc2FnZSwgMSkgIT0gMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNvdWxkbid0IHNlbmQgYWNrbm93bGVkZ2VtZW50IHRvIFdlYlByb2Nlc3M6ICVzLlxuIiwg
c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBleGl0KEVYSVRf
U1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBib29sIHNldEVudmlyb25tZW50VmFyaWFibGVzRm9yQ2hh
bmdlUm9vdEhlbHBlcihwaWRfdCBwaWQsIGludCBoZWxwZXJTb2NrZXQsIGludCB3ZWJQcm9jZXNz
U29ja2V0KQoreworICAgIGNvbnN0IGludCBkZXNjcmlwdG9yU2l6ZSA9IDMyOworICAgIGNoYXIg
c29ja2V0RGVzY3JpcHRvcltkZXNjcmlwdG9yU2l6ZV07CisgICAgY2hhciBzYW5kYm94SGVscGVy
UElEW2Rlc2NyaXB0b3JTaXplXTsKKworICAgIGludCBsZW5ndGggPSBzbnByaW50ZihzYW5kYm94
SGVscGVyUElELCBzaXplb2Yoc2FuZGJveEhlbHBlclBJRCksICIldSIsIHBpZCk7CisgICAgaWYg
KGxlbmd0aCA8IDAgfHwgbGVuZ3RoID49IHNpemVvZihzYW5kYm94SGVscGVyUElEKSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjb252ZXJ0IHRoZSBzYW5kYm94IGhlbHBl
ciBQSUQgdG8gYSBzdHJpbmcuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChzZXRlbnYoU0FOREJPWF9IRUxQRVJfUElELCBzYW5kYm94SGVscGVyUElEICwgMSkg
PT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBzZXQgdGhlIFNCWF9I
RUxQRVJfUElEIGVudmlyb25tZW50IHZhcmlhYmxlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGxlbmd0aCA9IHNucHJpbnRmKHNv
Y2tldERlc2NyaXB0b3IsIHNpemVvZihzb2NrZXREZXNjcmlwdG9yKSwgIiV1Iiwgd2ViUHJvY2Vz
c1NvY2tldCk7CisgICAgaWYgKGxlbmd0aCA8IDAgfHwgbGVuZ3RoID49IHNpemVvZihzb2NrZXRE
ZXNjcmlwdG9yKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjb252ZXJ0
IHRoZSBzYW5kYm94IGhlbHBlciBmaWxlIGRlc2NyaXB0b3IgdG8gYSBzdHJpbmcuXG4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzZXRlbnYoU0FOREJPWF9ERVND
UklQVE9SLCBzb2NrZXREZXNjcmlwdG9yLCAxKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkZhaWxlZCB0byBzdG9yZSB0aGUgaGVscGVyJ3MgZmlsZSBkZXNjcmlwdG9yIGludG8g
YW4gZW52aXJvbm1lbnQgdmFyaWFibGU6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjbG9zZShoZWxwZXJTb2NrZXQpID09
IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xvc2luZyBvZiAlZCBmYWlsZWQ6ICVz
LlxuIiwgaGVscGVyU29ja2V0LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBwcmVwYXJlQW5k
U3RhcnRDaGFuZ2VSb290SGVscGVyKCkKK3sKKyAgICBpbnQgc29ja2V0UGFpclsyXTsKKyAgICBp
ZiAoc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgc29ja2V0UGFpcikgPT0gLTEp
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgc29ja2V0cGFpcjog
JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBwaWRfdCBwaWQgPSBzeXNjYWxsKFNZU19jbG9uZSwgQ0xPTkVfRlMgfCBTSUdDSExELCAw
LCAwLCAwKTsKKyAgICBpZiAocGlkID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q2xvbmUgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoIXBpZCkgeworICAgICAgICAvLyBDaGlsZCBwcm9jZXNzOiB3
ZSBzdGFydCB0aGUgY2hyb290IGhlbHBlciB3aGljaCB3YWl0cyBmb3IgdGhlICJDaHJvb3RNZSIK
KyAgICAgICAgLy8gbWVzc2FnZSBmcm9tIHRoZSBXZWJQcm9jZXNzLiBJZiB3ZSBhcmUgc3VjY2Vz
c2VkLCB0aGVuIHdlIHdvbid0IHJldHVybi4KKyAgICAgICAgbGF1bmNoQ2hhbmdlUm9vdEhlbHBl
cihzb2NrZXRQYWlyWzBdLCBzb2NrZXRQYWlyWzFdKTsKKyAgICAgICAgLy8gV2UgcmVhY2ggdGhp
cyBwYXJ0IG9ubHkgaWYgbGF1bmNoQ2hyb290SGVscGVyKCkgZmFpbGVkLCBpbnN0ZWFkIGl0IHNo
b3VsZCBoYXZlIGV4aXRlZC4KKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUGFyZW50IHByb2Nlc3M6IGV4cG9ydHMgdGhl
IHBpZCBvZiB0aGUgaGVscGVyIGFuZCB0aGUgc29ja2V0IGlkIHNvIHRoZQorICAgIC8vIGhlbHBl
ciBhbmQgdGhlIFdlYlByb2Nlc3MgY2FuIGNvbW11bmljYXRlLgorICAgIHJldHVybiBzZXRFbnZp
cm9ubWVudFZhcmlhYmxlc0ZvckNoYW5nZVJvb3RIZWxwZXIocGlkLCBzb2NrZXRQYWlyWzBdLCBz
b2NrZXRQYWlyWzFdKTsKK30KKworLy8gU2V0dGluZyBsaW51eCBjYXBhYmlsaXRpZXMgKHBlcm1p
dHRlZCwgZWZmZWN0aXZlIGFuZCBpbmhlcml0YWJsZSkgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3Mu
CisvLyBQZXJtaXR0ZWQgc2V0IGluZGljYXRlcyB0aGUgY2FwYWJpbGl0aWVzIHdoYXQgY291bGQg
YmUgc2V0IGZvciB0aGUgcHJvY2Vzcy4KKy8vIEVmZmVjdGl2ZSBzZXQgaXMgYSBzdWJzZXQgb2Yg
cGVybWl0dGVkIHNldCwgdGhleSBhcmUgYWN0dWFsbHkgZWZmZWN0aXZlLgorLy8gSW5oZXJpdGFi
bGUgc2V0IGluZGljYXRlcyB0aGUgY2FwYWJpbGl0aWVzIHdoYXQgdGhlIGNoaWxkcmVuIHdpbGwg
aW5oZXJpdCBmcm9tIHRoZSBjdXJyZW50IHByb2Nlc3MuCitzdGF0aWMgYm9vbCBzZXRDYXBhYmls
aXRpZXMoY2FwX3ZhbHVlX3QqIGNhcGFiaWxpdHlMaXN0LCBpbnQgbGVuZ3RoKQoreworICAgIC8v
IENhcGFiaWxpdGllcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBmbGFncy4KKyAgICBj
YXBfdCBjYXBhYmlsaXRpZXMgPSBjYXBfaW5pdCgpOworICAgIGlmICghY2FwYWJpbGl0aWVzKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgcHJvY2VzcyBj
YXBhYmlsaXRpZXM6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChjYXBfY2xlYXIoY2FwYWJpbGl0aWVzKSA9PSAtMSkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjbGVhciBwcm9jZXNzIGNhcGFiaWxp
dGllczogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKGNhcGFiaWxpdHlMaXN0ICYmIGxlbmd0aCkgeworICAgICAgICBpZiAo
Y2FwX3NldF9mbGFnKGNhcGFiaWxpdGllcywgQ0FQX0VGRkVDVElWRSwgbGVuZ3RoLCBjYXBhYmls
aXR5TGlzdCwgQ0FQX1NFVCkKKyAgICAgICAgICAgIHx8IGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRp
ZXMsIENBUF9JTkhFUklUQUJMRSwgbGVuZ3RoLCBjYXBhYmlsaXR5TGlzdCwgQ0FQX1NFVCkKKyAg
ICAgICAgICAgIHx8IGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9QRVJNSVRURUQsIGxl
bmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9TRVQpID09IC0xKSB7CisgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkZhaWxlZCB0byBzZXQgcHJvY2VzcyBjYXBhYmlsaXR5IGZsYWdzOiAlcy5c
biIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBjYXBfZnJlZShjYXBhYmlsaXRpZXMp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGNhcF9zZXRfcHJvYyhjYXBhYmlsaXRpZXMpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRmFpbGVkIHRvIHNldCBwcm9jZXNzIGNhcGFiaWxpdGllczogJXMuXG4iLCBzdHJlcnJv
cihlcnJubykpOworICAgICAgICBjYXBfZnJlZShjYXBhYmlsaXRpZXMpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgY2FwX2ZyZWUoY2FwYWJpbGl0aWVzKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZHJvcFByaXZpbGVnZXMoKQoreworICAgIC8vIFdl
IGJlY29tZSBleHBsaWNpdGVseSBub24gZHVtcGFibGUuCisgICAgaWYgKHByY3RsKFBSX1NFVF9E
VU1QQUJMRSwgMCwgMCwgMCwgMCkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJT
ZXR0aW5nIGR1bXBhYmxlIGlzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2V0cmVzZ2lkKHNhbmRib3hVc2Vy
R0lELCBzYW5kYm94VXNlckdJRCwgc2FuZGJveFVzZXJHSUQpID09IC0xKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGZhbGxiYWNrIHRvIGdyb3VwOiAlZC5cbiIsIHNhbmRi
b3hVc2VyR0lEKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzZXRy
ZXN1aWQoc2FuZGJveFVzZXJVSUQsIHNhbmRib3hVc2VyVUlELCBzYW5kYm94VXNlclVJRCkgPT0g
LTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZmFsbGJhY2sgdG8gdXNl
cjogJWQuXG4iLCBzYW5kYm94VXNlclVJRCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBEcm9wIGFsbCBjYXBhYmlsaXRpZXMuIEFnYWluLCBzZXR1aWQoKSBub3JtYWxs
eSB0YWtlcyBjYXJlIG9mIHRoaXMgaWYgd2UgaGFkIGV1aWQgMC4KKyAgICByZXR1cm4gc2V0Q2Fw
YWJpbGl0aWVzKDAsIDApOworfQorCitzdGF0aWMgYm9vbCBmaWxlRXhpc3RzKGNvbnN0IGNoYXIq
IHBhdGgpCit7CisgICAgc3RydWN0IHN0YXQgZmlsZVN0YXQ7CisgICAgaWYgKGxzdGF0KHBhdGgs
ICZmaWxlU3RhdCkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBtb2RlX3QgZGlyZWN0b3J5UGVybWlzc2lvbnMoY29uc3QgY2hhciogZGlyZWN0b3J5KQorewor
ICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0OworICAgIGlmIChsc3RhdChkaXJlY3RvcnksICZmaWxl
U3RhdCkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb2J0YWlu
IGluZm9ybWF0aW9uIGFib3V0IGRpcmVjdG9yeSAoJXMpOiAlc1xuIiwgZGlyZWN0b3J5LCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBm
aWxlU3RhdC5zdF9tb2RlOworfQorCitzdGF0aWMgYm9vbCBjcmVhdGVEaXJlY3RvcnkoY2hhciog
cGF0aFRvQ3JlYXRlLCBjb25zdCBjaGFyKiBuZXh0RGlyZWN0b3J5VG9DcmVhdGUpCit7CisgICAg
c3RybGNhdChwYXRoVG9DcmVhdGUsIG5leHREaXJlY3RvcnlUb0NyZWF0ZSwgUGF0aFNpemUpOwor
CisgICAgY2hhciBwYXRoVG9DcmVhdGVJblNhbmRib3hbUGF0aFNpemVdOworICAgIGFwcGVuZERp
cmVjdG9yeUNvbXBvbmVudChwYXRoVG9DcmVhdGVJblNhbmRib3gsIHNhbmRib3hEaXJlY3Rvcnks
IHBhdGhUb0NyZWF0ZSk7CisKKyAgICBtb2RlX3QgbW9kZSA9IGRpcmVjdG9yeVBlcm1pc3Npb25z
KHBhdGhUb0NyZWF0ZSk7CisgICAgaWYgKG1rZGlyKHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgbW9k
ZSkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkgeworICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDcmVhdGlvbiBvZiAlcyBmYWlsZWQ6ICVzXG4iLCBwYXRoVG9DcmVh
dGVJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlSW5mbzsKKyAgICBpZiAo
bHN0YXQocGF0aFRvQ3JlYXRlLCAmZmlsZUluZm8pID09IC0xKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ291bGRuJ3Qgb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGRpcmVjdG9yeSAoJXMp
OiAlc1xuIiwgcGF0aFRvQ3JlYXRlLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGlmIChmaWxlSW5mby5zdF91aWQgPT0gZ2V0dWlkKCkpIHsKKyAg
ICAgICAgaWYgKGNob3duKHBhdGhUb0NyZWF0ZUluU2FuZGJveCwgc2FuZGJveFVzZXJVSUQsIHNh
bmRib3hVc2VyR0lEKSA9PSAtMSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWls
ZWQgdG8gYXNzaWduIHRoZSBvd25lcnNoaXAgb2YgJXMgdG8gdGhlIHNhbmRib3ggdXNlcjogJXMu
XG4iLCBwYXRoVG9DcmVhdGVJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNobW9kKHBhdGhUb0Ny
ZWF0ZUluU2FuZGJveCwgZmlsZUluZm8uc3RfbW9kZSkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJGYWlsZWQgdG8gc2V0IHRoZSBwZXJtaXNzaW9ucyBvZiAlczogJXMuXG4iLCBw
YXRoVG9DcmVhdGVJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZURp
cmVjdG9yeUNoYWluKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgY2hhciBmdWxsUGF0aEluU2Fu
ZGJveFtQYXRoU2l6ZV07CisgICAgYXBwZW5kRGlyZWN0b3J5Q29tcG9uZW50KGZ1bGxQYXRoSW5T
YW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBwYXRoKTsKKworICAgIGlmIChmaWxlRXhpc3RzKGZ1
bGxQYXRoSW5TYW5kYm94KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjaGFyIGFscmVh
ZHlDcmVhdGVkUGF0aFtQYXRoU2l6ZV07CisgICAgYWxyZWFkeUNyZWF0ZWRQYXRoWzBdID0gJ1ww
JzsKKyAgICAvLyBzdGFydFBvcyBpcyAocGF0aCArIDEpIGJlY2F1c2Ugd2Ugc2tpcCB0aGUgZmly
c3QgJy8nLgorICAgIGNvbnN0IGNoYXIqIHN0YXJ0UG9zID0gcGF0aCArIDE7CisgICAgY29uc3Qg
Y2hhciogZW5kUG9zOworICAgIHdoaWxlICgoZW5kUG9zID0gc3RyY2hyKHN0YXJ0UG9zLCAnLycp
KSkgeworICAgICAgICBjaGFyIG5leHREaXJlY3RvcnlUb0NyZWF0ZVtQYXRoU2l6ZV07CisgICAg
ICAgIHN0cmxjcHkobmV4dERpcmVjdG9yeVRvQ3JlYXRlLCBzdGFydFBvcyAtIDEsIHN0cm5sZW4o
c3RhcnRQb3MgLSAxLCBlbmRQb3MgLSBzdGFydFBvcyArIDEpICsgMSk7CisKKyAgICAgICAgaWYg
KCFjcmVhdGVEaXJlY3RvcnkoYWxyZWFkeUNyZWF0ZWRQYXRoLCBuZXh0RGlyZWN0b3J5VG9DcmVh
dGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzdGFydFBvcyA9IGVuZFBv
cyArIDE7CisgICAgfQorICAgIC8vIENyZWF0ZSB0aGUgbGFzdCBkaXJlY3Rvcnkgb2YgdGhlIGRp
cmVjdG9yeSBwYXRoLgorICAgIGFscmVhZHlDcmVhdGVkUGF0aFswXSA9ICdcMCc7CisgICAgcmV0
dXJuIGNyZWF0ZURpcmVjdG9yeShhbHJlYWR5Q3JlYXRlZFBhdGgsIHBhdGgpOworfQorCitzdGF0
aWMgYm9vbCBjcmVhdGVEZXZpY2VGaWxlcygpCit7CisgICAgY29uc3QgY2hhciogZGV2RGlyZWN0
b3J5ID0gIi9kZXYiOworICAgIGlmICghY3JlYXRlRGlyZWN0b3J5Q2hhaW4oZGV2RGlyZWN0b3J5
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgY2hhciogZGV2aWNlc1syXSA9
IHsgIi9kZXYvcmFuZG9tIiwgIi9kZXYvdXJhbmRvbSIgfTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNpemVvZihkZXZpY2VzKSAvIHNpemVvZihkZXZpY2VzWzBdKTsgKytpKSB7CisgICAgICAg
IHN0cnVjdCBzdGF0IHN0YXR1czsKKyAgICAgICAgaWYgKGxzdGF0KGRldmljZXNbaV0sICZzdGF0
dXMpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBzdGF0IGRldmlj
ZSBmaWxlICglcyk6ICVzXG4iLCBkZXZpY2VzW2ldLCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRldl90IGRldiA9IHN0YXR1
cy5zdF9yZGV2OworCisgICAgICAgIC8vIEJvdGggbmVlZGVkIGRldmljZSBmaWxlcyAoL2Rldi9y
YW5kb20gYW5kIC9kZXYvdXJhbmRvbSkgYXJlIGNoYXJhY3RlciBtX2RldmljZXMgYW5kIHRoZWly
IHBlcm1pc3Npb25zIHNob3VsZCBiZTogcnctcnctcnctLgorICAgICAgICBjaGFyIGRldmljZVtQ
YXRoU2l6ZV07CisgICAgICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVudChkZXZpY2UsIHNhbmRi
b3hEaXJlY3RvcnksIGRldmljZXNbaV0pOworCisgICAgICAgIGlmIChta25vZChkZXZpY2UsIFNf
SUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8
IFNfSVdPVEgsIG1ha2VkZXYobWFqb3IoZGV2KSwgbWlub3IoZGV2KSkpID09IC0xKSB7CisgICAg
ICAgICAgICBpZiAoZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgZGV2aWNlIGZpbGUgJXM6ICVzXG4iLCBkZXZpY2UsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9v
bCBtb3VudEZpbGVTeXN0ZW1zKCkKK3sKKyAgICBjb25zdCBjaGFyKiBwcm9jUGF0aCA9ICIvcHJv
YyI7CisgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlDaGFpbihwcm9jUGF0aCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjaGFyIHByb2NQYXRoSW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICBh
cHBlbmREaXJlY3RvcnlDb21wb25lbnQocHJvY1BhdGhJblNhbmRib3gsIHNhbmRib3hEaXJlY3Rv
cnksIHByb2NQYXRoKTsKKworICAgIGlmIChtb3VudChwcm9jUGF0aCwgcHJvY1BhdGhJblNhbmRi
b3gsICJwcm9jIiwgMCwgMCkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVCVVNZKSB7
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBtb3VudCAnJXMnOiAlc1xu
IiwgcHJvY1BhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBzaGFyZWRNZW1vcnlQYXRoID0g
Ii9ydW4vc2htIjsKKyAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeUNoYWluKHNoYXJlZE1lbW9yeVBh
dGgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3Rv
cnkgZm9yIC9ydW4vc2htIGluIHRoZSBzYW5kYm94OiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY2hhciBzaGFyZWRNZW1vcnlQYXRo
SW5TYW5kYm94W1BhdGhTaXplXTsKKyAgICBhcHBlbmREaXJlY3RvcnlDb21wb25lbnQoc2hhcmVk
TWVtb3J5UGF0aEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgc2hhcmVkTWVtb3J5UGF0aCk7
CisKKyAgICBpZiAobW91bnQoc2hhcmVkTWVtb3J5UGF0aCwgc2hhcmVkTWVtb3J5UGF0aEluU2Fu
ZGJveCwgInRtcGZzIiwgMCwgMCkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVCVVNZ
KSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBtb3VudCAnJXMnOiAl
cy5cbiIsIHNoYXJlZE1lbW9yeVBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyBib29sIGxpbmtGaWxlKGNvbnN0IGNoYXIqIHNvdXJjZUZpbGUsIGNvbnN0IGNoYXIqIHRh
cmdldEZpbGUpCit7CisgICAgY2hhciBvbGRQYXRoW1BhdGhTaXplXTsKKyAgICBjaGFyIHRhcmdl
dFBhdGhbUGF0aFNpemVdOworICAgIHN0cmxjcHkob2xkUGF0aCwgc291cmNlRmlsZSwgUGF0aFNp
emUpOworICAgIHN0cmxjcHkodGFyZ2V0UGF0aCwgdGFyZ2V0RmlsZSwgUGF0aFNpemUpOworCisg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAgICAg
IGlmIChsc3RhdChvbGRQYXRoLCAmZmlsZUluZm8pID09IC0xKSB7CisgICAgICAgICAgICBpZiAo
ZXJybm8gIT0gRU5PRU5UKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3Vs
ZG4ndCBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgJXM6ICVzXG4iLCBvbGRQYXRoLCBzdHJlcnJv
cihlcnJubykpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIC8vIElmIHRoZSBvcmlnaW5hbCBmaWxlIGRvZXNuJ3QgZXhpc3QgKGUuZy4g
ZGFuZ2xpbmcgbGlua3MpIHRoZW4gd2UgY2FuIGlnbm9yZSBpdAorICAgICAgICAgICAgLy8gaW4g
dGhlIHNhbmRib3ggdG9vLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgY29uc3QgY2hhciogZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UgPSBzdHJyY2hyKG9s
ZFBhdGgsICcvJyk7CisgICAgICAgIGlmICghZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UpIHsK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBzb3VyY2U6ICVzLlxuIiwgb2xk
UGF0aCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBj
aGFyIGJhc2VEaXJlY3RvcnlPZlNvdXJjZVtQYXRoU2l6ZV07CisgICAgICAgIC8vIFRvIGRldGVy
bWluZSB0aGUgbGVuZ3RoIG9mIHRoZSBiYXNlIGRpcmVjdG9yeSB3ZSBoYXZlIHRvIGNvbnNpZGVy
IHRoZSB0YWlsaW5nCisgICAgICAgIC8vIHNsYXNoICgrMSkgYW5kIGFkZGluZyBwbHVzIG9uZSBi
ZWNhdXNlIHN0cmxjcHkoKSBjb3BpZXMgKG1heExlbmd0aCAtIDEpIGNoYXJhY3RlcnMKKyAgICAg
ICAgLy8gZnJvbSB0aGUgc291cmNlLgorICAgICAgICBzdHJsY3B5KGJhc2VEaXJlY3RvcnlPZlNv
dXJjZSwgb2xkUGF0aCwgZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UgLSBvbGRQYXRoICsgMik7
CisKKyAgICAgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlDaGFpbihiYXNlRGlyZWN0b3J5T2ZTb3Vy
Y2UpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5nICVzIGZhaWxlZDog
JXMuXG4iLCBiYXNlRGlyZWN0b3J5T2ZTb3VyY2UsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGluayhvbGRQYXRo
LCB0YXJnZXRQYXRoKSA9PSAtMSkgeworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCAm
JiBlcnJubyAhPSBFTk9FTlQpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxp
bmtpbmcgJXMgZmFpbGVkOiAlcy5cbiIsIG9sZFBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gSGFuZGxlIHN5bWxpbmtzLiBXZSBkb24ndCB3YW50IHRvIGhhdmUgZGFuZ2xpbmcg
bGlua3MgaW4gdGhlIHNhbmRib3guIFNvIHdlIGhhdmUgdG8KKyAgICAgICAgLy8gZm9sbG93IHRo
ZW0gYW5kIHB1dCB0aGUgd2hvbGUgbGluayBjaGFpbiBpbnRvIHRoZSBzYW5kYm94LgorICAgICAg
ICBpZiAoKGZpbGVJbmZvLnN0X21vZGUgJiBTX0lGTVQpICE9IFNfSUZMTkspCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjaGFyIHN5bWxpbmtUYXJnZXRbUGF0aFNpemVdOworICAgICAg
ICBpbnQgbGVuZ3RoT2ZUaGVMaW5rID0gcmVhZGxpbmsob2xkUGF0aCwgc3ltbGlua1RhcmdldCwg
c2l6ZW9mKHN5bWxpbmtUYXJnZXQpIC0gMSk7CisgICAgICAgIGlmIChsZW5ndGhPZlRoZUxpbmsg
PiAwKQorICAgICAgICAgICAgc3ltbGlua1RhcmdldFtsZW5ndGhPZlRoZUxpbmtdID0gJ1wwJzsK
KworICAgICAgICBjaGFyIHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZFtQYXRoU2l6ZV07CisgICAg
ICAgIGNoYXIgc3ltbGlua1RhcmdldEluU2FuZGJveFtQYXRoU2l6ZV07CisKKyAgICAgICAgLy8g
TWFraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcGF0aHMuCisg
ICAgICAgIC8vIElmIHRoZSBzeW1saW5rcyB0YXJnZXQgc3RhcnRzIHdpdGggJy8nIHRoZW4gd2Ug
aGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggaXQuCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIGEg
cmVsYXRpdmUgcGF0aCBhbmQgd2UgaGF2ZSB0byBjb25jYXRlbmF0ZSBpdCB0byB0aGUgY3VycmVu
dAorICAgICAgICAvLyBwYXRoIHRvIG9idGFpbiB0aGUgdGFyZ2V0LgorICAgICAgICBpZiAoc3lt
bGlua1RhcmdldFswXSA9PSAnLycpIHsKKyAgICAgICAgICAgIHN0cmxjcHkoc3ltbGlua1Rhcmdl
dEluUmVhbFdvcmxkLCBzeW1saW5rVGFyZ2V0LCBQYXRoU2l6ZSk7CisgICAgICAgICAgICBhcHBl
bmREaXJlY3RvcnlDb21wb25lbnQoc3ltbGlua1RhcmdldEluU2FuZGJveCwgc2FuZGJveERpcmVj
dG9yeSwgc3ltbGlua1RhcmdldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcHBl
bmREaXJlY3RvcnlDb21wb25lbnQoc3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBiYXNlRGlyZWN0
b3J5T2ZTb3VyY2UsIHN5bWxpbmtUYXJnZXQpOworICAgICAgICAgICAgYXBwZW5kRGlyZWN0b3J5
Q29tcG9uZW50KHN5bWxpbmtUYXJnZXRJblNhbmRib3gsIHNhbmRib3hEaXJlY3RvcnksIHN5bWxp
bmtUYXJnZXRJblJlYWxXb3JsZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbml0aWFsaXpl
IG9sZFBhdGggYW5kIHRhcmdldFBhdGggdmFyaWFibGVzIGZvciB0aGUgbmV4dCBsb29wIG9mIHdo
aWxlLgorICAgICAgICBvbGRQYXRoWzBdID0gJ1wwJzsKKyAgICAgICAgdGFyZ2V0UGF0aFswXSA9
ICdcMCc7CisgICAgICAgIHN0cmxjYXQob2xkUGF0aCwgc3ltbGlua1RhcmdldEluUmVhbFdvcmxk
LCBQYXRoU2l6ZSk7CisgICAgICAgIHN0cmxjYXQodGFyZ2V0UGF0aCwgc3ltbGlua1RhcmdldElu
U2FuZGJveCwgUGF0aFNpemUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gVGhp
cyBmdW5jdGlvbiBleHRlbmRzIHRoZSBzdGFuZGFyZCBsaW5rIGZ1bmN0aW9uIGJ5IGxpbmtpbmcg
ZGlyZWN0b3JpZXMgYW5kIGFsbCB0aGVpciBjb250ZW50cworLy8gYW5kIHN1YmRpcmVjdG9yaWVz
IHJlY3Vyc2l2ZWx5Lgorc3RhdGljIGJvb2wgbGlua0RpcmVjdG9yeShjb25zdCBjaGFyKiBzb3Vy
Y2VEaXJlY3RvcnlQYXRoLCBjb25zdCBjaGFyKiB0YXJnZXREaXJlY3RvcnlQYXRoKQoreworICAg
IGlmICghY3JlYXRlRGlyZWN0b3J5Q2hhaW4oc291cmNlRGlyZWN0b3J5UGF0aCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBESVIqIGRpcmVjdG9yeSA9IG9wZW5kaXIoc291cmNlRGlyZWN0
b3J5UGF0aCk7CisgICAgaWYgKCFkaXJlY3RvcnkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDb3VsZG4ndCBvcGVuIGRpcmVjdG9yeSAlczogJXNcbiIsIHNvdXJjZURpcmVjdG9yeVBhdGgs
IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB3
aGlsZSAoc3RydWN0IGRpcmVudCAqZGlyZWN0b3J5SW5mbyA9IHJlYWRkaXIoZGlyZWN0b3J5KSkg
eworICAgICAgICBjaGFyKiBmaWxlTmFtZSA9IGRpcmVjdG9yeUluZm8tPmRfbmFtZTsKKyAgICAg
ICAgLy8gV2UgbXVzdCBub3QgbGluayAnLicgYW5kICIuLiIgaW50byB0aGUgc2FuZGJveC4KKyAg
ICAgICAgaWYgKCFzdHJjbXAoZmlsZU5hbWUsICIuIikgfHwgIXN0cmNtcChmaWxlTmFtZSwgIi4u
IikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2hhciBzb3VyY2VGaWxlW1BhdGhT
aXplXTsKKyAgICAgICAgY2hhciB0YXJnZXRGaWxlW1BhdGhTaXplXTsKKyAgICAgICAgYXBwZW5k
RGlyZWN0b3J5Q29tcG9uZW50KHNvdXJjZUZpbGUsIHNvdXJjZURpcmVjdG9yeVBhdGgsIGZpbGVO
YW1lKTsKKyAgICAgICAgYXBwZW5kRGlyZWN0b3J5Q29tcG9uZW50KHRhcmdldEZpbGUsIHRhcmdl
dERpcmVjdG9yeVBhdGgsIGZpbGVOYW1lKTsKKworICAgICAgICBib29sIHJldHVyblZhbHVlOwor
ICAgICAgICBpZiAoZGlyZWN0b3J5SW5mby0+ZF90eXBlID09IERUX0RJUikgeworICAgICAgICAg
ICAgc3RybmNhdChzb3VyY2VGaWxlLCAiLyIsIDEpOworICAgICAgICAgICAgc3RybmNhdCh0YXJn
ZXRGaWxlLCAiLyIsIDEpOworICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBsaW5rRGlyZWN0b3J5
KHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gbGlua0ZpbGUoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7CisgICAgICAgIGlm
ICghcmV0dXJuVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGRpcmVjdG9y
aWVzIGJlY2F1c2UKKyAgICAvLyBpdCBjb3VsZCBoYXZlIG1lYW5pbmcgZS5nLiBpbiB0aGUgaGFz
aCBnZW5lcmF0aW9uIG9mIGNhY2hlIGZpbGVzLgorICAgIHN0cnVjdCBzdGF0IGZpbGVTdGF0Owor
ICAgIGlmIChsc3RhdChzb3VyY2VEaXJlY3RvcnlQYXRoLCAmZmlsZVN0YXQpID09IC0xKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91
dCB0aGUgZGlyZWN0b3J5ICclcyc6ICVzXG4iLCBzb3VyY2VEaXJlY3RvcnlQYXRoLCBzdHJlcnJv
cihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0cnVjdCB1dGlt
YnVmIHRpbWVzOworICAgIHRpbWVzLmFjdGltZSA9IGZpbGVTdGF0LnN0X2F0aW1lOworICAgIHRp
bWVzLm1vZHRpbWUgPSBmaWxlU3RhdC5zdF9tdGltZTsKKyAgICBpZiAodXRpbWUodGFyZ2V0RGly
ZWN0b3J5UGF0aCwgJnRpbWVzKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNv
dWxkbid0IHNldCBiYWNrIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mICclcyc6ICVzXG4i
LCB0YXJnZXREaXJlY3RvcnlQYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjb2xsZWN0
UnVuVGltZURlcGVuZGVuY2llcygpCit7CisgICAgLy8gVGhlIGxpc3Qgb2YgZW1waXJpY2FsbHkg
Z2F0aGVyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMuCisgICAgY29uc3QgY2hhciogcnVudGltZURl
cGVuZGVuY2llc1tdID0geworICAgICAgICAibGlibnNzX2Rucy5zbyIsCisgICAgICAgICJsaWJy
ZXNvbHYuc28iLAorICAgICAgICAibGlic3NsLnNvIiwKKyAgICAgICAgImxpYmNyeXB0by5zbyIK
KyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YocnVudGltZURlcGVuZGVu
Y2llcykgLyBzaXplb2YocnVudGltZURlcGVuZGVuY2llc1swXSk7ICsraSkgeworICAgICAgICAv
LyBUbyBvYnRhaW4gdGhlIHBhdGggb2YgdGhlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIHdlIG9wZW4g
dGhlbSB3aXRoIGRsb3Blbi4KKyAgICAgICAgLy8gV2l0aCB0aGUgaGFuZGxlIHN1cHBsaWVkIGJ5
IGRsb3BlbiB3ZSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkeW5hbWljYWxseQor
ICAgICAgICAvLyBsaW5rZWQgbGlicmFyaWVzLCBzbyB0aGUgcGF0aCB3aGVyZSBhcmUgdGhleSBp
bnN0YWxsZWQuCisgICAgICAgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbihydW50aW1lRGVwZW5kZW5j
aWVzW2ldLCBSVExEX0xBWlkpOworICAgICAgICBpZiAoIWhhbmRsZSkgeworICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGhhbmRsZXIgb2YgJXM6ICVzXG4iLCBy
dW50aW1lRGVwZW5kZW5jaWVzW2ldLCBkbGVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IGxpbmtfbWFwKiBsaW5rTWFwOworICAg
ICAgICBpZiAoZGxpbmZvKGhhbmRsZSwgUlRMRF9ESV9MSU5LTUFQLCAmbGlua01hcCkgPT0gLTEp
IHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZ2V0IGluZm9ybWF0aW9u
IGFib3V0ICVzOiAlc1xuIiwgcnVudGltZURlcGVuZGVuY2llc1tpXSwgZGxlcnJvcigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGlua01h
cCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGxpbmtt
YXAgb2YgJXM6ICVzLlxuIiwgcnVudGltZURlcGVuZGVuY2llc1tpXSwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIg
cGF0aE9mVGhlTGlicmFyeUluU2FuZGJveFtQYXRoU2l6ZV07CisgICAgICAgIGFwcGVuZERpcmVj
dG9yeUNvbXBvbmVudChwYXRoT2ZUaGVMaWJyYXJ5SW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5
LCBsaW5rTWFwLT5sX25hbWUpOworICAgICAgICBpZiAoIWxpbmtGaWxlKGxpbmtNYXAtPmxfbmFt
ZSwgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJveCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiTGlua2luZyBydW50aW1lIGRlcGVuZGVuY3k6ICVzIGZhaWxlZDogJXNcbiIsIGxpbmtN
YXAtPmxfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGRsY2xvc2UoaGFuZGxl
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBkbGNsb3Nl
KGhhbmRsZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBzZXR1
cFhhdXRob3JpdHlGb3JOb2JvZHlVc2VyKCkKK3sKKyAgICAvLyBUbyBiZSBhYmxlIHVzZSBYIGlu
c2lkZSB0aGUgc2FuZGJveCBhbiAuWGF1dGhvcml0eSBmaWxlIG11c3QgYmUgZXhpc3QgaW5zaWRl
IGl0LAorICAgIC8vIG93bmVkIGJ5IHRoZSBzYW5kYm94dXNlci4gRnVydGhlcm1vcmUsIFhBVVRI
T1JJVFkgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBwb2ludCB0byBpdC4KKyAgICBjaGFyIGJ1
ZmZlcltCVUZTSVpdOworICAgIHNpemVfdCBzaXplOworICAgIHN0cnVjdCBwYXNzd2QqIHJlYWxV
c2VyID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworICAgIGlmICghcmVhbFVzZXIpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvYnRhaW4gdGhlIGN1cnJlbnQgdXNlcjogJXNcbiIs
IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBj
aGFyIHhhdXRob3JpdHlPZlJlYWxVc2VyW1BhdGhTaXplXTsKKyAgICBjaGFyIHhhdXRob3JpdHlJ
blNhbmRib3hbUGF0aFNpemVdOworICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVudCh4YXV0aG9y
aXR5T2ZSZWFsVXNlciwgcmVhbFVzZXItPnB3X2RpciwgIi8uWGF1dGhvcml0eSIpOworICAgIGFw
cGVuZERpcmVjdG9yeUNvbXBvbmVudCh4YXV0aG9yaXR5SW5TYW5kYm94LCBzYW5kYm94RGlyZWN0
b3J5LCB4YXV0aG9yaXR5T2ZSZWFsVXNlcik7CisKKyAgICBGSUxFKiBzb3VyY2UgPSBmb3Blbih4
YXV0aG9yaXR5T2ZSZWFsVXNlciwgInJiIik7CisgICAgaWYgKCFzb3VyY2UpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvcGVuICVzOiAlc1xuIiwgeGF1dGhvcml0eU9mUmVh
bFVzZXIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBGSUxFKiBkZXN0ID0gZm9wZW4oeGF1dGhvcml0eUluU2FuZGJveCwgIndiIik7CisgICAg
aWYgKCFkZXN0KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiAlczog
JXNcbiIsIHhhdXRob3JpdHlJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBjb3B5IHRoZSAuWGF1dGhvcml0eSBmaWxl
IG9mIHRoZSByZWFsIHVzZXIgKGluc3RlYWQgb2YgbGlua2luZykgYmVjYXVzZSAnbm9ib2R5JyB1
c2VyCisgICAgLy8gc2hvdWxkIG93biBpdCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhl
IHBlcm1pc3Npb25zIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorICAgIHdoaWxlICgoc2l6ZSA9IGZy
ZWFkKGJ1ZmZlciwgMSwgQlVGU0laLCBzb3VyY2UpKSkgeworICAgICAgICBpZiAoZndyaXRlKGJ1
ZmZlciwgMSwgc2l6ZSwgZGVzdCkgIT0gc2l6ZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJGYWlsZWQgdG8gY29weSAuWGF1dGhvcml0eSB0byB0aGUgc2FuZGJveDogJXMuXG4iLCBz
dHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGZjbG9zZShzb3VyY2UpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ2xvc2luZyB0aGUgLlhhdXRob3JpdHkgZmlsZSBvZiB0aGUgcmVhbCB1c2VyIGZhaWxlZDog
JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoZmNsb3NlKGRlc3QpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xvc2lu
ZyB0aGUgLlhhdXRob3JpdHkgZmlsZSBvZiB0aGUgc2FuZGJveCB1c2VyIGZhaWxlZDogJXNcbiIs
IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoY2hvd24oeGF1dGhvcml0eUluU2FuZGJveCwgc2FuZGJveFVzZXJVSUQsIHNhbmRib3hVc2Vy
R0lEKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNob3duaW5nIC5YYXV0aG9y
aXR5ICglcykgZmFpbGVkOiAlcy5cbiIsIHhhdXRob3JpdHlJblNhbmRib3gsIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2V0ZW52KCJY
QVVUSE9SSVRZIiwgeGF1dGhvcml0eUluU2FuZGJveCwgMSkgPT0gLTEpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDb3VsZG4ndCBzZXQgdGhlIFhBVVRIT1JJVFkgZW52cmlvbm1lbnQgdmFy
aWFibGU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBpbml0aWFsaXplU2FuZGJv
eCgpCit7CisgICAgLy8gQ3JlYXRlIHRoZSBzYW5kYm94IGRpcmVjdG9yeS4gV2Ugb25seSBuZWVk
IHRvIGVudGVyIGl0LCBzbworICAgIC8vIHRoZSBleGVjdXRhYmxlIHBlcm1pc3Npb24gaXMgbmVl
ZGVkIG9ubHkuCisgICAgaWYgKG1rZGlyKHNhbmRib3hEaXJlY3RvcnksIFNfSUZESVIgfCBTX0lY
VVNSIHwgU19JWE9USCkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgdGhlIHNhbmRib3gg
ZGlyZWN0b3J5OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghY3JlYXRlRGV2aWNlRmlsZXMoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtb3VudEZpbGVTeXN0ZW1zKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEhhcmQgbGluayBjYWNoZSBhbmQgZm9udCBk
aXJlY3RvcmllcyBpbnRvIHRoZSBzYW5kYm94IGVudmlyb25tZW50LgorICAgIHN0cnVjdCBwYXNz
d2QqIHVzZXJJbmZvID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworICAgIGNvbnN0IGNoYXIqIGhvbWUg
PSB1c2VySW5mby0+cHdfZGlyOworCisgICAgY2hhciBsb2NhbERpcmVjdG9yeVtQYXRoU2l6ZV07
CisgICAgY2hhciBjYWNoZURpcmVjdG9yeVtQYXRoU2l6ZV07CisgICAgY2hhciBmb250RGlyZWN0
b3J5W1BhdGhTaXplXTsKKworICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVudChsb2NhbERpcmVj
dG9yeSwgaG9tZSwgIi8ubG9jYWwvc2hhcmUvTm9raWEvIik7CisgICAgYXBwZW5kRGlyZWN0b3J5
Q29tcG9uZW50KGNhY2hlRGlyZWN0b3J5LCBob21lLCAiLy5jYWNoZS9Ob2tpYS8iKTsKKyAgICBh
cHBlbmREaXJlY3RvcnlDb21wb25lbnQoZm9udERpcmVjdG9yeSwgaG9tZSwgIi8uZm9udGNvbmZp
Zy8iKTsKKworICAgIGNvbnN0IGNoYXIqIGxpbmtlZERpcmVjdG9yaWVzW10gPSB7CisgICAgICAg
IGNhY2hlRGlyZWN0b3J5LAorICAgICAgICBmb250RGlyZWN0b3J5LAorICAgICAgICBsb2NhbERp
cmVjdG9yeSwKKyAgICAgICAgIi9ldGMvZm9udHMvIiwKKyAgICAgICAgIi9ldGMvc3NsL2NlcnRz
LyIsCisgICAgICAgICIvdmFyL2NhY2hlL2ZvbnRjb25maWcvIiwKKyAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvIgorICAgIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihsaW5r
ZWREaXJlY3RvcmllcykgLyBzaXplb2YobGlua2VkRGlyZWN0b3JpZXNbMF0pOyArK2kpIHsKKyAg
ICAgICAgY2hhciBsaW5rZWREaXJlY3RvcnlJblNhbmRib3hbUGF0aFNpemVdOworICAgICAgICBh
cHBlbmREaXJlY3RvcnlDb21wb25lbnQobGlua2VkRGlyZWN0b3J5SW5TYW5kYm94LCBzYW5kYm94
RGlyZWN0b3J5LCBsaW5rZWREaXJlY3Rvcmllc1tpXSk7CisKKyAgICAgICAgaWYgKCFsaW5rRGly
ZWN0b3J5KGxpbmtlZERpcmVjdG9yaWVzW2ldLCBsaW5rZWREaXJlY3RvcnlJblNhbmRib3gpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghc2V0dXBYYXV0aG9y
aXR5Rm9yTm9ib2R5VXNlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
Y29sbGVjdFJ1blRpbWVEZXBlbmRlbmNpZXMoKTsKK30KKworc3RhdGljIGJvb2wgcmVzdHJpY3RD
YXBhYmlsaXRpZXMoKQoreworICAgIC8vIENhcGFiaWxpdGllcyB3ZSBuZWVkLgorICAgIC8vIENB
UF9TWVNfQURNSU4gY2FwYWJpbHR5IGlzIGFkZGVkIGJlY2F1c2UgY2xvbmluZyB3aXRoIENMT05F
X05FV1BJRCBmbGFnIGxhdGVyIHdpbGwgbmVlZCBpdC4KKyAgICBjYXBfdmFsdWVfdCBjYXBhYmls
aXR5TGlzdFtdID0geyBDQVBfU0VUVUlELCBDQVBfU0VUR0lELCBDQVBfU1lTX0FETUlOLCBDQVBf
U1lTX0NIUk9PVH07CisKKyAgICAvLyBSZWR1Y2UgY2FwYWJpbGl0aWVzIHRvIHdoYXQgd2UgbmVl
ZC4KKyAgICAvLyBBbHRob3VnaCB3ZSBzdGlsbCBoYXZlIHJvb3QgZXVpZCBhbmQgd2Uga2VlcCBy
b290IGVxdWl2YWxlbnQgY2FwYWJpbGl0aWVzLAorICAgIC8vIHdlIHJlbW92ZWQgKD0gZGlkbid0
IGFkZCkgQ0FQX1NZU19SRVNTT1VSQ0UgY2FwYWJpbGl0ZXMgYW5kIHRoaXMgcmVzdWx0ZWQgdGhh
dAorICAgIC8vIHRoZSBzZXRybGltaXQgZnVuY3Rpb24gd2l0aCBSTElNSVRfTk9GSUxFIHdpbGwg
YmUgZWZmZWN0aXZlIGxhdGVyLgorICAgIGlmICghc2V0Q2FwYWJpbGl0aWVzKGNhcGFiaWxpdHlM
aXN0LCBzaXplb2YoY2FwYWJpbGl0eUxpc3QpIC8gc2l6ZW9mKGNhcGFiaWxpdHlMaXN0WzBdKSkp
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWRqdXN0IHByb2Nlc3MgY2Fw
YWJpbGl0aWVzOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIG1vdmVUb05ld1BJ
RE5hbWVzcGFjZSgpCit7CisgICAgLy8gQ0xPTkVfTkVXUElEIGFuZCBDTE9ORV9GUyBzaG91bGQg
YmUgaW4gdGhhdCBvcmRlci4KKyAgICAvLyBXZSBjYW4ndCBzaGFyZSBmaWxlc3lzdGVtcyBhY2Ny
b3NzIG5hbWVzcGFjZXMuCisgICAgaW50IHN0YXR1czsKKyAgICBwaWRfdCBleHBlY3RlZFBJRDsK
KyAgICBwaWRfdCBwaWQgPSBzeXNjYWxsKFNZU19jbG9uZSwgQ0xPTkVfTkVXUElEIHwgU0lHQ0hM
RCwgMCwgMCwgMCk7CisKKyAgICBpZiAocGlkID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ2xvbmluZyBpcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcGlkKSB7CisgICAgICAgIC8vIENoaWxk
IHNob3VsZCBydW4gd2l0aCBwaWQgbnVtYmVyIDEgaW4gdGhlIG5ldyBuYW1lc3BhY2UuCisgICAg
ICAgIGlmIChnZXRwaWQoKSAhPSAxKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNv
dWxkbid0IGNyZWF0ZSBhIG5ldyBQSUQgbmFtZXNwYWNlLlxuIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gV2UgYXJlIHdhaXRpbmcgZm9yIG91ciBjaGlsZCAoV2ViUHJvY2VzcykuCisgICAgLy8gSWYg
dGhpcyB3YWl0IGlzIHN1Y2Nlc3NmdWwgaXQgbWVhbnMgdGhhdCBvdXIgY2hpbGQgaXMgdGVybWlu
YXRlZC4KKyAgICBleHBlY3RlZFBJRCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKTsKKyAgICBp
ZiAoZXhwZWN0ZWRQSUQgIT0gcGlkKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHJvY2Vz
cyB3aXRoIFBJRCAlZCB0ZXJtaW5hdGVkIGluc3RlYWQgb2YgdGhlIGV4cGVjdGVkIG9uZSB3aXRo
IFBJRCAlZDogJXMuXG4iLCBleHBlY3RlZFBJRCwgcGlkLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICAgIGlmIChXSUZFWElURUQoc3RhdHVz
KSkKKyAgICAgICAgZXhpdChXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKyAgICBleGl0KEVYSVRfU1VD
Q0VTUyk7Cit9CisKK3N0YXRpYyBib29sIHJ1bihpbnQgYXJnYywgY2hhciAqY29uc3QgYXJndltd
KQoreworICAgIHN0cnVjdCBwYXNzd2QqIHVzZXJJbmZvID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOwor
ICAgIGlmICghdXNlckluZm8pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBn
ZXQgdGhlIGN1cnJlbnQgdXNlcjogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVudChzYW5kYm94
RGlyZWN0b3J5LCB1c2VySW5mby0+cHdfZGlyLCAiLy53azItc2FuZGJveCIpOworCisgICAgLy8g
Q3VycmVudGx5IHdlIHVzZSAnbm9ib2R5JyB1c2VyIGFzIHRoZSBzYW5kYm94IHVzZXIgYW5kIGZh
bGwgYmFjayB0byB0aGUgcmVhbCB1c2VyCisgICAgLy8gaWYgd2UgZmFpbGVkIHRvIGdldCBpdCAo
d2UgY291bGQgZXh0ZW5kIHRoaXMgaW4gdGhlIGZ1dHVyZSB3aXRoIGEgc3BlY2lmaWMgcmVzdHJp
Y3RlZCB1c2VyKS4KKyAgICBpZiAoc3RydWN0IHBhc3N3ZCogbm9ib2R5VXNlciA9IGdldHB3bmFt
KCJub2JvZHkiKSkgeworICAgICAgICBzYW5kYm94VXNlclVJRCA9IG5vYm9keVVzZXItPnB3X3Vp
ZDsKKyAgICAgICAgc2FuZGJveFVzZXJHSUQgPSBub2JvZHlVc2VyLT5wd19naWQ7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgc2FuZGJveFVzZXJVSUQgPSBnZXR1aWQoKTsKKyAgICAgICAgc2FuZGJv
eFVzZXJHSUQgPSBnZXRnaWQoKTsKKyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSB0aHJl
ZSBwYXJhbWV0ZXJzOgorICAgIC8vIHBhdGhfb2ZfdGhpc19iaW5hcnkgcGF0aF9vZl90aGVfd2Vi
cHJvY2VzcyBzb2NrZXRfdG9fY29tbXVuaWNhdGVfd2l0aF91aXByb2Nlc3MKKyAgICBpZiAoYXJn
YyAhPSAzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcgU2FuZGJveFByb2Nl
c3MgcmVxdWlyZXMgMyBwYXJhbWV0ZXJzIVxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBTYW5kYm94UHJvY2VzcyBzaG91bGQgYmUgcnVuIHdpdGggc3VpZCBmbGFn
IC4uLgorICAgIGlmIChnZXRldWlkKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJUaGUg
c2FuZGJveCBpcyBub3Qgc2V0ZXVpZCByb290LlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyAuLi4gYnV0IG5vdCBhcyByb290IChub3Qgd2l0aCBzdWRvKS4KKyAg
ICBpZiAoIWdldHVpZCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGhlIHNhbmRib3gg
aXMgbm90IGRlc2lnbmVkIHRvIGJlIHJ1biBieSByb290LlxuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluaXRpYWxpemVTYW5kYm94KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghcmVzdHJpY3RDYXBhYmlsaXRpZXMoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgbW92ZSBvdXJzZWxmIGFuZCBvdXIgY2hpbGRyZW4g
aW50byBhIG5ldyBQSUQgbmFtZXNwYWNlLAorICAgIC8vIHdoZXJlIHByb2Nlc3MgSURzIHN0YXJ0
IGZyb20gMCBhZ2Fpbi4KKyAgICBpZiAoIW1vdmVUb05ld1BJRE5hbWVzcGFjZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTdGFydGluZyBhIGhlbHBlciB3aGF0IHdpbGwgd2Fp
dGluZyBmb3IgdGhlICJjaHJvb3RtZSIgbWVzc2FnZSBmcm9tIFdlYlByb2Nlc3MuCisgICAgaWYg
KCFwcmVwYXJlQW5kU3RhcnRDaGFuZ2VSb290SGVscGVyKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIFdlIGRvbid0IG5lZWQgYW55IHNwZWNpYWwgcHJpdmlsZWdlcyBhbnltb3Jl
LgorICAgIGlmICghZHJvcFByaXZpbGVnZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gU2FuaXR5IGNoZWNrOiBpZiBvdXIgZWZmZWN0aXZlIG9yIHJlYWwgdWlkL2dpZCBpcyBz
dGlsbCAwIChyb290KSBvcgorICAgIC8vIHdlIGNhbiBzZXQgYW55IG9mIHRoZW0gdG8gMCwgdGhl
biB0aGUgZHJvcHBpbmcgb2YgcHJpdmlsZWdlcyBpcyBmYWlsZWQuCisgICAgLy8gV2UgZW5zdXJl
IGhlcmUgdGhhdCB3ZSBjYW5ub3Qgc2V0IHJvb3QgaWQgYWZ0ZXIgaGVyZS4KKyAgICBpZiAoIWdl
dGV1aWQoKSB8fCAhZ2V0ZWdpZCgpIHx8ICFzZXR1aWQoMCkgfHwgIXNldGdpZCgwKSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkRyb3BwaW5nIHByaXZpbGVnZXMgZmFpbGVkIVxuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgV2ViUHJvY2Vz
cy4KKyAgICBpZiAoZXhlY2woYXJndlsxXSwgYXJndlsxXSwgYXJndlsyXSwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oMCkpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRu
J3Qgc3RhcnQgV2ViUHJvY2VzczogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyICpjb25zdCBhcmd2W10pCit7CisgICAgcmV0dXJuIHJ1bihhcmdjLCBhcmd2KSA/
IDAgOiAxOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRi
b3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjYyN2MxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9u
bWVudExpbnV4LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFu
IDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
U2FuZGJveEVudmlyb25tZW50TGludXhfaAorI2RlZmluZSBTYW5kYm94RW52aXJvbm1lbnRMaW51
eF9oCisKKyNkZWZpbmUgU0FOREJPWF9ERVNDUklQVE9SICJTQU5EQk9YX0RFU0NSSVBUT1IiCisj
ZGVmaW5lIFNBTkRCT1hfSEVMUEVSX1BJRCAiU0FOREJPWF9IRUxQRVJfUElEIgorCisjZGVmaW5l
IE1TR19DSFJPT1RNRSAnQycKKyNkZWZpbmUgTVNHX0NIUk9PVEVEICdPJworCisjZW5kaWYgLy8g
U2FuZGJveEVudmlyb25tZW50TGludXhfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAppbmRleCAwYjZl
ZTFiLi41YjgzYjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNo
ZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKQEAgLTYyLDYgKzYyLDEwIEBACiAj
aW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9YX0xJ
TlVYKQorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CisjZW5kaWYKKwogI2lmIE9TKERBUldJ
TikKICNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgogI2luY2x1ZGUgPHNlcnZlcnMvYm9vdHN0
cmFwLmg+CkBAIC0xNjcsMzcgKzE3MSw0OCBAQCB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNo
UHJvY2VzcygpCiAgICAgY29tbWFuZExpbmUgPSBjb21tYW5kTGluZS5hcmcoc29ja2V0c1swXSk7
CiAjZW5kaWYKIAotICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNzID0gbmV3IFF0V2ViUHJvY2Vzcygp
OwotICAgIHdlYlByb2Nlc3MtPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6Rm9yd2Fy
ZGVkQ2hhbm5lbHMpOwotICAgIHdlYlByb2Nlc3MtPnN0YXJ0KGNvbW1hbmRMaW5lKTsKKyAgICBR
UHJvY2Vzcyogd2ViUHJvY2Vzc09yU1VJREhlbHBlciA9IG5ldyBRdFdlYlByb2Nlc3MoKTsKKyAg
ICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nlc3M6
OkZvcndhcmRlZENoYW5uZWxzKTsKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisg
ICAgaWYgKG1fbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9PSBXZWJQcm9jZXNzKSB7CisgICAg
ICAgIFFTdHJpbmcgc2FuZGJveENvbW1hbmRMaW5lID0gUUxhdGluMVN0cmluZygiJTEgJTIgJTMi
KTsKKyAgICAgICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFyZyhR
Q29yZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvbkRpclBhdGgoKSArIFFMYXRpbjFTdHJpbmcoIi9T
VUlEU2FuZGJveEhlbHBlciIpKTsKKyAgICAgICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJv
eENvbW1hbmRMaW5lLmFyZyhleGVjdXRhYmxlUGF0aE9mV2ViUHJvY2VzcygpKTsKKyAgICAgICAg
c2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBdKTsK
KworICAgICAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChzYW5kYm94Q29tbWFuZExp
bmUpOworICAgIH0gZWxzZQorICAgICAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChj
b21tYW5kTGluZSk7CisjZWxzZQorICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnN0YXJ0KGNv
bW1hbmRMaW5lKTsKKyNlbmRpZgogCiAjaWYgT1MoVU5JWCkgJiYgIU9TKERBUldJTikKICAgICAv
LyBEb24ndCBleHBvc2UgdGhlIHdlYiBzb2NrZXQgdG8gcG9zc2libGUgZnV0dXJlIHdlYiBwcm9j
ZXNzZXMKICAgICB3aGlsZSAoZmNudGwoc29ja2V0c1swXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQykg
PT0gLTEpIHsKICAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAgICAg
ICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotICAgIGlmICghd2ViUHJvY2Vzcy0+d2FpdEZv
clN0YXJ0ZWQoKSkgeworICAgIGlmICghd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZvclN0
YXJ0ZWQoKSkgewogICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8PCBjb21t
YW5kTGluZTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjaWYgT1MoREFSV0lOKQog
ICAgICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBjb25uZWN0b3Ip
OwogICAgICAgICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgY29ubmVjdG9y
LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwogI2VuZGlmCi0gICAgICAgIGRlbGV0ZSB3
ZWJQcm9jZXNzOworICAgICAgICBkZWxldGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLQogI2lmIE9TKFVOSVgpCi0gICAgc2V0cHJpb3JpdHkoUFJJT19Q
Uk9DRVNTLCB3ZWJQcm9jZXNzLT5waWQoKSwgMTApOworICAgIHNldHByaW9yaXR5KFBSSU9fUFJP
Q0VTUywgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+cGlkKCksIDEwKTsKICNlbmRpZgotCi0gICAg
UnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6
ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2VzcywgdGhpcywgd2ViUHJvY2VzcywgY29ubmVjdG9yKSk7
CisgICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVu
Y2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2VzcywgdGhpcywgd2ViUHJvY2Vzc09yU1VJREhl
bHBlciwgY29ubmVjdG9yKSk7CiB9CiAKIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQ
cm9jZXNzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5kZXggODBjYjJmYi4uNjU1MmJiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cmkKQEAgLTE1LDYgKzE1LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9Q
bGF0Zm9ybS9Db3JlSVBDIFwKICAgICAkJFNPVVJDRV9ESVIvUGxhdGZvcm0vcXQgXAogICAgICQk
U09VUkNFX0RJUi9TaGFyZWQgXAorICAgICQkU09VUkNFX0RJUi9TaGFyZWQvbGludXgvU2FuZGJv
eFByb2Nlc3MgXAogICAgICQkU09VUkNFX0RJUi9TaGFyZWQvQVBJL2MgXAogICAgICQkU09VUkNF
X0RJUi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcyBcCiAgICAgJCRTT1VSQ0VfRElSL1NoYXJl
ZC9Db3JlSVBDU3VwcG9ydCBcCkBAIC02Miw3ICs2Myw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAg
ICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlIFwKICAgICAkJFNPVVJDRV9ESVIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAgICQkU09VUkNFX0RJUi9X
ZWJQcm9jZXNzL3F0IFwKLSAgICAkJFNPVVJDRV9ESVIvUGx1Z2luUHJvY2VzcworICAgICQkU09V
UkNFX0RJUi9QbHVnaW5Qcm9jZXNzIFwKIAogIyBUaGUgV2ViS2l0MiBRdCBBUElzIGRlcGVuZCBv
biBxd2Via2l0Z2xvYmFsLmgsIHdoaWNoIGxpdmVzIGluIFdlYktpdAogSU5DTFVERVBBVEggKz0g
JCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViS2l0L3F0L0FwaQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBy
bwppbmRleCBkYjNmNzFhLi45M2UzYzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwpAQCAtMTEsNiAr
MTEsMTAgQEAgREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9iaW4KIAogU09VUkNFUyArPSBx
dC9NYWluUXQuY3BwCiAKK0lOQ0xVREVQQVRIID0gXAorICAgICQkUFdEL1NoYXJlZC9saW51eC9T
YW5kYm94UHJvY2Vzcy8gXAorICAgICQkSU5DTFVERVBBVEgKKwogUVQgKz0gbmV0d29yayB3ZWJr
aXQKIG1hY3g6IFFUICs9IHhtbAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9x
dC9XZWJQcm9jZXNzTWFpblF0LmNwcAppbmRleCAxOGYzMDM5NC4uMDUzZGIyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCkBAIC0z
NCw3ICszNCw5IEBACiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CiAjaW5jbHVkZSA8UVVybD4KICNp
bmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKQEAgLTYwLDYgKzYyLDEwIEBACiBleHRlcm4gIkMiIGtlcm5fcmV0dXJuX3QgYm9vdHN0
cmFwX2xvb2tfdXAyKG1hY2hfcG9ydF90LCBjb25zdCBuYW1lX3QsIG1hY2hfcG9ydF90KiwgcGlk
X3QsIHVpbnQ2NF90KTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFNVSURfU0FOREJPWF9MSU5VWCkK
KyNpbmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIgorI2VuZGlmCisKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE0MiwxNCArMTQ4LDc0
IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQcm94eSgpCiAgICAgUU5ldHdvcmtQcm94eUZhY3Rv
cnk6OnNldFVzZVN5c3RlbUNvbmZpZ3VyYXRpb24odHJ1ZSk7CiB9CiAKKyNpZiBFTkFCTEUoU1VJ
RF9TQU5EQk9YX0xJTlVYKQorcGlkX3QgY2hyb290TWUoKQoreworICAgIC8vIEdldCB0aGUgZmls
ZSBkZXNjcmlwdG9yIG9mIHRoZSBzb2NrZXRwYWlyLgorICAgIGNoYXIqIHNhbmRib3hTb2NrZXRE
ZXNjcmlwdG9yU3RyaW5nID0gZ2V0ZW52KFNBTkRCT1hfREVTQ1JJUFRPUik7CisgICAgaWYgKCFz
YW5kYm94U29ja2V0RGVzY3JpcHRvclN0cmluZykKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAg
Y2hhciogZmlyc3RJbnZhbGlkQ2hhcmFjdGVyOworICAgIGxvbmcgaW50IHNhbmRib3hTb2NrZXRE
ZXNjcmlwdG9yID0gc3RydG9sKHNhbmRib3hTb2NrZXREZXNjcmlwdG9yU3RyaW5nLCAmZmlyc3RJ
bnZhbGlkQ2hhcmFjdGVyLCAxMCk7CisgICAgaWYgKCpmaXJzdEludmFsaWRDaGFyYWN0ZXIgIT0g
J1wwJykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBzb2NrZXQgZGVzY3JpcHRvciBv
ZiBzYW5kYm94IGlzIG5vdCB2YWxpZC5cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor
CisgICAgLy8gR2V0IHRoZSBQSUQgb2YgdGhlIHNldHVpZCBoZWxwZXIuCisgICAgY2hhciogc2Fu
ZGJveEhlbHBlclBJRFN0cmluZyA9IGdldGVudihTQU5EQk9YX0hFTFBFUl9QSUQpOworICAgIHBp
ZF90IHNhbmRib3hIZWxwZXJQSUQgPSAtMTsKKworICAgIC8vIElmIG5vIFBJRCBpcyBhdmFpbGFi
bGUsIHRoZSBkZWZhdWx0IG9mIC0xIHdpbGwgZG8uCisgICAgaWYgKHNhbmRib3hIZWxwZXJQSURT
dHJpbmcpIHsKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBzYW5kYm94SGVscGVyUElEID0g
c3RydG9sKHNhbmRib3hIZWxwZXJQSURTdHJpbmcsICZmaXJzdEludmFsaWRDaGFyYWN0ZXIsIDEw
KTsKKyAgICAgICAgaWYgKCpmaXJzdEludmFsaWRDaGFyYWN0ZXIgIT0gJ1wwJykgeworICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJUaGUgUElEIG9mIHNhbmRib3ggaXMgbm90IHZhbGlkLlxu
Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBT
ZW5kIHRoZSBjaHJvb3RNZSBtZXNzYWdlIHRvIHRoZSBoZWxwZXIuCisgICAgY2hhciBzYW5kYm94
TWVNZXNzYWdlID0gTVNHX0NIUk9PVE1FOworICAgIHNzaXplX3QgbnVtYmVyT2ZDaGFyYWN0ZXJz
ID0gd3JpdGUoc2FuZGJveFNvY2tldERlc2NyaXB0b3IsICZzYW5kYm94TWVNZXNzYWdlLCAxKTsK
KyAgICBpZiAobnVtYmVyT2ZDaGFyYWN0ZXJzICE9IDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJDaHJvb3RNZSBtc2cgZmFpbGVkIHRvIHdyaXRlOiAlcy5cbiIsIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLyBSZWFkIHRoZSBhY2tub3ds
ZWRnZW1lbnQgbWVzc2FnZSBmcm9tIHRoZSBoZWxwZXIuCisgICAgbnVtYmVyT2ZDaGFyYWN0ZXJz
ID0gcmVhZChzYW5kYm94U29ja2V0RGVzY3JpcHRvciwgJnNhbmRib3hNZU1lc3NhZ2UsIDEpOwor
ICAgIGlmIChudW1iZXJPZkNoYXJhY3RlcnMgIT0gMSB8fCBzYW5kYm94TWVNZXNzYWdlICE9IE1T
R19DSFJPT1RFRCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHJlYWQgdGhl
IGNvbmZpcm1hdGlvbiBtZXNzYWdlLlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cisg
ICAgY2xvc2Uoc2FuZGJveFNvY2tldERlc2NyaXB0b3IpOworCisgICAgLy8gV2FpdCBmb3IgdGhl
IGhlbHBlciBwcm9jZXNzLgorICAgIGludCBleHBlY3RlZFBJRCA9IHdhaXRwaWQoc2FuZGJveEhl
bHBlclBJRCwgMCwgMCk7CisgICAgaWYgKGV4cGVjdGVkUElEICE9IC0xICYmIChzYW5kYm94SGVs
cGVyUElEID09IC0xIHx8IGV4cGVjdGVkUElEID09IHNhbmRib3hIZWxwZXJQSUQpKQorICAgICAg
ICByZXR1cm4gZXhwZWN0ZWRQSUQ7CisgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCB3YWl0
IGZvciB0aGUgaGVscGVyIHByb2Nlc3M6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIHJl
dHVybiAtMTsKK30KKyNlbmRpZgorCiBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpblF0
KFFHdWlBcHBsaWNhdGlvbiogYXBwKQogeworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgp
CisgICAgcGlkX3QgaGVscGVyID0gY2hyb290TWUoKTsKKyAgICBpZiAoaGVscGVyID09IC0xKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQXNraW5nIGZvciBjaHJvb3QgZmFpbGVkLlxuIik7
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKICAgICBpbml0aWFsaXplUHJveHko
KTsKLQogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6
ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAg
ICAKKwogI2lmIFVTRShRVEtJVCkKICAgICBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZUZvcldL
MigpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggZmE5ZjExNi4uNTQ3NzJlMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTExLTMwICBSZW5hdGEg
SG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBbV0syXSBQdXR0aW5nIFF0V2Vi
UHJvY2VzcyBpbnRvIGEgY2hyb290ZWQgc2FuZGJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAwMDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRl
cnMgQ2FybHNzb24gYW5kICBab2x0YW4gSGVyY3plZy4KKworICAgICAgICBBZGQgZmVhdHVyZSBm
bGFnIGZvciBzdWlkIHNhbmRib3ggaW4gbGludXguCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHBlcmwvRmVhdHVyZUxpc3QucG06CisKIDIwMTItMTEtMjkgIFRvbW15IFdpZGVuZmx5Y2h0ICA8
dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAgICAgU3BlZWNoIFJlY29nbml0aW9uIEFQSTogVXBk
YXRlIFNwZWVjaFJlY29nbml0aW9uRXZlbnQgdG8gbWF0Y2ggdGhlIHNwZWNpZmljYXRpb24KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQppbmRleCBjMTA0ZDFmLi5kMjZmZWJi
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCkBAIC0xMjIsNiArMTIy
LDcgQEAgbXkgKAogICAgICRzaGFyZWRXb3JrZXJzU3VwcG9ydCwKICAgICAkc3FsRGF0YWJhc2VT
dXBwb3J0LAogICAgICRzdHlsZVNjb3BlZFN1cHBvcnQsCisgICAgJHN1aWRMaW51eFNhbmRib3gs
CiAgICAgJHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBvcnQsCiAgICAgJHN2Z0ZvbnRzU3VwcG9ydCwK
ICAgICAkc3ZnU3VwcG9ydCwKQEAgLTM4Miw2ICszODMsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAg
ICAgeyBvcHRpb24gPT4gInN0eWxlLXNjb3BlZCIsIGRlc2MgPT4gIlRvZ2dsZSBTdHlsZSBTY29w
ZWQgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9TVFlMRV9TQ09QRUQiLCBkZWZh
dWx0ID0+IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBcJHN0eWxlU2NvcGVkU3VwcG9ydCB9LAog
CisgICAgeyBvcHRpb24gPT4gInN1aWQtbGludXgtc2FuZGJveCIsIGRlc2MgPT4gIlRvZ2dsZSBz
dWlkIHNhbmRib3ggZm9yIGxpbnV4IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NVSURfU0FO
REJPWF9MSU5VWCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRzdWlkTGludXhTYW5kYm94IH0s
CisKICAgICB7IG9wdGlvbiA9PiAic3ZnIiwgZGVzYyA9PiAiVG9nZ2xlIFNWRyBzdXBwb3J0IiwK
ICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX1NWRyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRz
dmdTdXBwb3J0IH0sCiAKLS0gCjEuNy45LjUKCg==
</data>
<flag name="review"
          id="192966"
          type_id="1"
          status="-"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="192967"
          type_id="3"
          status="-"
          setter="rhodovan.u-szeged"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183918</attachid>
            <date>2013-01-22 01:06:46 -0800</date>
            <delta_ts>2013-01-28 01:55:46 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-feltolt-13.2.patch</filename>
            <type>text/plain</type>
            <size>47967</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">RnJvbSBlNTRhZGY4ZjljOGQ1MmNhZWQxYWJmYzgzMDlhMTViZDFjMTBjMjVjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgpEYXRl
OiBUdWUsIDIyIEphbiAyMDEzIDA5OjU5OjAwICswMTAwClN1YmplY3Q6IFtQQVRDSF0gZmVsdG9s
dCAxMy4yCgotLS0KIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxMSArCiBTb3VyY2UvUXRXZWJLaXQucHJvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgIDUgKwogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDU2ICsrCiBTb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5w
cm8gICAgICAgICAgICAgICAgICB8ICAgMjUgKwogLi4uL1NhbmRib3hQcm9jZXNzL1NhbmRib3hF
bnZpcm9ubWVudExpbnV4LmNwcCAgICAgfCAgODEyICsrKysrKysrKysrKysrKysrKysrCiAuLi4v
bGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaCB8ICAgMzIgKwog
Li4uL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgICAgfCAgIDM1
ICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgNCArCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWlu
UXQuY3BwICB8ICAgNzIgKy0KIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAxMSArCiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxp
c3QucG0gICAgICAgICAgICB8ICAgIDQgKwogMTIgZmlsZXMgY2hhbmdlZCwgMTA1NyBpbnNlcnRp
b25zKCspLCAxMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
Mi9TYW5kYm94UHJvY2Vzcy5wcm8KIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9j
ZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9D
aGFuZ2VMb2cKaW5kZXggYzM0OTg1Yy4uODc1YmJjZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisr
KyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTAxLTIyICBSZW5hdGEgSG9kb3Zh
biAgPHJlbmlAd2Via2l0Lm9yZz4KKworICAgICAgICBbV0syXSBQdXR0aW5nIFF0V2ViUHJvY2Vz
cyBpbnRvIGEgY2hyb290ZWQgc2FuZGJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTAwMDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2Fy
bHNzb24gYW5kIFpvbHRhbiBIZXJjemVnLgorCisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8g
YnVpbGQgV2ViS2l0MiB3aXRoIFNhbmRib3hQcm9jZXNzLgorCisgICAgICAgICogU291cmNlL1F0
V2ViS2l0LnBybzoKKwogMjAxMy0wMS0yMSAgRGlyayBTY2h1bHplICA8ZHNjaHVsemVAYWRvYmUu
Y29tPgogCiAgICAgICAgIEFkZCBidWlsZCBmbGFnIGZvciBDYW52YXMncyBQYXRoIG9iamVjdCAo
ZGlzYWJsZWQgYnkgZGVmYXVsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdFdlYktpdC5wcm8gYi9T
b3VyY2UvUXRXZWJLaXQucHJvCmluZGV4IDE5ZDUyZmMuLjdjZmE0MDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9RdFdlYktpdC5wcm8KKysrIGIvU291cmNlL1F0V2ViS2l0LnBybwpAQCAtMjIsNiArMjIs
MTEgQEAgYnVpbGQ/KHdlYmtpdDIpIHsKICAgICAgICAgcGx1Z2lucHJvY2Vzcy5maWxlID0gV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzLnBybwogICAgICAgICBTVUJESVJTICs9IHBsdWdpbnByb2Nlc3MK
ICAgICB9CisKKyAgICBlbmFibGU/KFNVSURfU0FOREJPWF9MSU5VWCkgeworICAgICAgICBzYW5k
Ym94cHJvY2Vzcy5maWxlID0gV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KKyAgICAgICAgU1VC
RElSUyArPSBzYW5kYm94cHJvY2VzcworICAgIH0KIH0KIAogZGVjbGFyYXRpdmUuZmlsZSA9IFdl
YktpdC9xdC9kZWNsYXJhdGl2ZS9kZWNsYXJhdGl2ZS5wcm8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5MmU0MDBh
Li45MGE3MWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTMtMDEtMjIgIFJlbmF0
YSBIb2RvdmFuICA8cmVuaUB3ZWJraXQub3JnPgorCisgICAgICAgIFtXSzJdIFB1dHRpbmcgUXRX
ZWJQcm9jZXNzIGludG8gYSBjaHJvb3RlZCBzYW5kYm94CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDAwNQorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
ZGVycyBDYXJsc3NvbiBhbmQgWm9sdGFuIEhlcmN6ZWcuCisKKyAgICAgICAgVGhpcyBuZXcgZmVh
dHVyZSBtYWtlcyBwb3NzaWJsZSB0byBydW4gV2ViUHJvY2VzcyBpbnNpZGUgYSBjaHJvb3QuIElu
IHRoaXMgY2FzZSBVSVByb2Nlc3MgY2FsbHMgdGhlCisgICAgICAgIGludGVybmFsIFNhbmRib3hQ
cm9jZXNzIGJpbmFyeSB3aGF0IG1ha2VzIHVwIGFuIGVudmlyb25tZW50IGZvciBXZWJQcm9jZXNz
IGluc2lkZSB0aGUgc2FuZGJveCBhbmQgcnVucyB0aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAgU2Fu
ZGJveFByb2Nlc3MgZmlyc3QgY3JlYXRlcyB0d28gbmVlZGVkIGRldmljZSBmaWxlcyAocmFuZG9t
IGFuZCB1cmFuZG9tKSwgbW91bnRzIGZpbGVzeXN0ZW1zIChwcm9jIGFuZCBzaGFyZWQgbWVtb3J5
KSwKKyAgICAgICAgdGhlbiBsaW5rcyBydW4tdGltZSBkZXBlbmRlbmNpZXMgb2YgV2ViUHJvY2Vz
cy4gQWZ0ZXIgdGhpcywgU2FuZGJveFByb2Nlc3MgbW92ZXMgdG8gYSBuZXcgcGlkIG5hbWVzcGFj
ZSAoY2xvbmluZyB3aXRoCisgICAgICAgIENMT05FX05FV1BJRCBmbGFnKS4gVGhlbiBhZnRlciBh
biBvdGhlciBjbG9uaW5nICh3aXRoIENMT05FX0ZTIGZsYWcpIHdlIHNoYXJlIG91ciBmaWxlc3lz
dGVtIHdpdGggb3VyIGNoaWxkcmVuLiBUaGlzIGlzCisgICAgICAgIG5lZWRlZCBiZWNhdXNlIHdl
IHdhbnQgdG8gY2FsbCBjaHJvb3QoKSBmdW5jdGlvbiBmcm9tIGhlcmUgYW5kIGphaWwgb3VyIGNo
aWxkIChXZWJQcm9jZXNzKSB0b28uIFRoaXMgd2lsbCBiZSBwZXJmb3JtZWQKKyAgICAgICAgd2hl
biBXZWJQcm9jZXNzIHNlbmRzIGEgcmVxdWVzdCBmb3IgaXQgdmlhIGFuIHNvY2tldHBhaXIuIElm
IHNhbmRib3hpbmcgaXMgZG9uZSwgU2FuZGJveFByb2Nlc3MgZXhpdHMuCisgICAgICAgIFNpbmNl
IGNocm9vdCgpIHN5c3RlbSBjYWxsIG5lZWRzIHN1ZG9lciByaWdodHMgU2FuZGJveFByb2Nlc3Mg
YmluYXJ5IHNob3VsZCBoYXZlIHNldCBpdHMgc3VpZCBmbGFnLiBIb3dldmVyIHdlIGNhbiByZWR1
Y2UKKyAgICAgICAgaXRzIGNhcGFiaWxpdGVzLiBGaXJzdCB3ZSByZXN0cmljdCB0aGUgY2FwYWJp
bGl0aWVzIG9mIHRoZSBwcm9jZXNzIGFuZCB0aGUgbnVtYmVyIG9mIGl0cyBwb3NzaWJsZSByZXNv
dXJjZXMuIEZ1cnRoZXJtb3JlCisgICAgICAgIHdlIGZhbGxiYWNrIHRvIHRoZSBub2JvZHkgb3Ig
dGhlIHJlYWwgdXNlci4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVz
LnhjY29uZmlnOgorICAgICAgICAqIFNhbmRib3hQcm9jZXNzLnBybzogQWRkZWQuCisgICAgICAg
ICogU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNw
cDogQWRkZWQuCisgICAgICAgIChsYXVuY2hDaGFuZ2VSb290SGVscGVyKToKKyAgICAgICAgKHNl
dEVudmlyb25tZW50VmFyaWFibGVzRm9yQ2hhbmdlUm9vdEhlbHBlcik6CisgICAgICAgIChwcmVw
YXJlQW5kU3RhcnRDaGFuZ2VSb290SGVscGVyKToKKyAgICAgICAgKHNldENhcGFiaWxpdGllcyk6
CisgICAgICAgIChkcm9wUHJpdmlsZWdlcyk6CisgICAgICAgIChmaWxlRXhpc3RzKToKKyAgICAg
ICAgKGRpcmVjdG9yeVBlcm1pc3Npb25zKToKKyAgICAgICAgKGNyZWF0ZURpcmVjdG9yeSk6Cisg
ICAgICAgIChjcmVhdGVEaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKGNyZWF0ZURldmljZUZpbGVz
KToKKyAgICAgICAgKG1vdW50RmlsZVN5c3RlbXMpOgorICAgICAgICAobGlua0ZpbGUpOgorICAg
ICAgICAobGlua0RpcmVjdG9yeSk6CisgICAgICAgIChjb2xsZWN0UnVuVGltZURlcGVuZGVuY2ll
cyk6CisgICAgICAgIChzZXR1cFhhdXRob3JpdHlGb3JOb2JvZHlVc2VyKToKKyAgICAgICAgKGlu
aXRTYW5kYm94KToKKyAgICAgICAgKHJlc3RyaWN0Q2FwYWJpbGl0aWVzKToKKyAgICAgICAgKG1v
dmVUb05ld1BpZE5hbWVzcGFjZSk6CisgICAgICAgIChydW4pOgorICAgICAgICAobWFpbik6Cisg
ICAgICAgICogU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExp
bnV4Lmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJp
bmdPcGVyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzdHJpbmdDb3B5KToKKyAgICAgICAg
KHN0cmluZ0NvbmNhdCk6CisgICAgICAgIChzdHJpbmdBcHBlbmQpOgorICAgICAgICAqIFNoYXJl
ZC9saW51eC9TYW5kYm94UHJvY2Vzcy9TdHJpbmdPcGVyYXRpb25zLmg6IEFkZGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2Vzcyk6CisgICAgICAgICogV2Vi
S2l0Mi5wcmk6CisgICAgICAgICogV2ViUHJvY2Vzcy5wcm86CisgICAgICAgICogV2ViUHJvY2Vz
cy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OmNocm9vdE1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc01haW5RdCk6CisK
IDIwMTMtMDEtMjEgIERpcmsgU2NodWx6ZSAgPGRzY2h1bHplQGFkb2JlLmNvbT4KIAogICAgICAg
ICBBZGQgYnVpbGQgZmxhZyBmb3IgQ2FudmFzJ3MgUGF0aCBvYmplY3QgKGRpc2FibGVkIGJ5IGRl
ZmF1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8gYi9T
b3VyY2UvV2ViS2l0Mi9TYW5kYm94UHJvY2Vzcy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTRiMDU5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Nh
bmRib3hQcm9jZXNzLnBybwpAQCAtMCwwICsxLDI1IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvamVj
dCBmaWxlIGZvciB0aGUgV2ViS2l0MiBzYW5kYm94IHByb2Nlc3MgYmluYXJ5CisjCisjIFNlZSAn
VG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQor
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK1RFTVBMQVRFID0gYXBwCisKK1RBUkdFVCA9IFNVSURTYW5kYm94SGVs
cGVyCitERVNURElSID0gJCR7Uk9PVF9CVUlMRF9ESVJ9L2JpbgorCitDT05GSUcgKz0gY29uc29s
ZQorQ09ORklHIC09IHF0CisKK1NPVVJDRVMgKz0gU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNz
L1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcAorSEVBREVSUyArPSBTaGFyZWQvbGludXgvU2Fu
ZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaAorCitJTlNUQUxMUyArPSB0YXJn
ZXQKK0xJQlMgKz0gLWxjYXAgLWxkbAorCitpc0VtcHR5KElOU1RBTExfQklOUykgeworICAgIHRh
cmdldC5wYXRoID0gJCRbUVRfSU5TVEFMTF9CSU5TXQorfSBlbHNlIHsKKyAgICB0YXJnZXQucGF0
aCA9ICQkSU5TVEFMTF9CSU5TCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExp
bnV4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE1OTMwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNz
L1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmNwcApAQCAtMCwwICsxLDgxMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAy
MDEzIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIgorCisjaW5jbHVk
ZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaW5j
bHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bGluay5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2lu
Y2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMv
Y2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2luY2x1ZGUgPHN5cy9wcmN0
bC5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K
KyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVk
ZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2Fp
dC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisjaW5jbHVkZSA8
dmVjdG9yPgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bVBhdGhMZW5ndGggPSA1MTI7
CitzdGF0aWMgY2hhciBzYW5kYm94RGlyZWN0b3J5W21heGltdW1QYXRoTGVuZ3RoXTsKK3N0YXRp
YyB1aWRfdCBzYW5kYm94VXNlclVJRDsKK3N0YXRpYyB1aWRfdCBzYW5kYm94VXNlckdJRDsKKwor
c3RhdGljIGlubGluZSB2b2lkIHN0cmxjcHkoY2hhciAqZGVzdGluYXRpb24sIGNvbnN0IGNoYXIq
IHNvdXJjZSwgaW50IG1heExlbmd0aCkKK3sKKyAgICBkZXN0aW5hdGlvblswXSA9ICdcMCc7Cisg
ICAgc3RybmNhdChkZXN0aW5hdGlvbiwgc291cmNlLCBtYXhMZW5ndGggLSAxKTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIHN0cmxjYXQoY2hhciogZGVzdGluYXRpb24sIGNvbnN0IGNoYXIqIHNv
dXJjZSwgaW50IG1heExlbmd0aCkKK3sKKyAgICBzdHJuY2F0KGRlc3RpbmF0aW9uLCBzb3VyY2Us
IG1heExlbmd0aCAtIDEgLSBzdHJubGVuKGRlc3RpbmF0aW9uLCBtYXhMZW5ndGggLSAxKSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmREaXJlY3RvcnlDb21wb25lbnQoY2hhciogZnVs
bFBhdGgsIGNvbnN0IGNoYXIqIGRpcmVjdG9yeVBhdGgsIGNvbnN0IGNoYXIqIGZpbGVOYW1lKQor
eworICAgIHN0cmxjcHkoZnVsbFBhdGgsIGRpcmVjdG9yeVBhdGgsIG1heGltdW1QYXRoTGVuZ3Ro
KTsKKyAgICBzdHJsY2F0KGZ1bGxQYXRoLCBmaWxlTmFtZSwgbWF4aW11bVBhdGhMZW5ndGgpOwor
fQorCisvLyBUaGlzIGZ1bmN0aW9uIHJ1bnMgaW4gYSBjbG9uZWQgcHJvY2VzcyBhbmQgaXQgaXMg
d2FpdGluZyBmb3IgYSByZXF1ZXN0IG1lc3NhZ2UKKy8vIGZyb20gV2ViUHJvY2VzcyB0byBwZXJm
b3JtIHRoZSBjaHJvb3QoKS4gSWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCB0aGUgZnVu
Y3Rpb24KKy8vIG5ldmVyIHJldHVybnMuIFNvIHRoaXMgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2
YWx1ZS4KK3N0YXRpYyB2b2lkIGxhdW5jaENoYW5nZVJvb3RIZWxwZXIoaW50IGhlbHBlclNvY2tl
dCwgaW50IHdlYlByb2Nlc3NTb2NrZXQpCit7CisgICAgLy8gV2UgbmVlZCB0byByZXN0cmljdCB0
aGUgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBvdXIgcHJvY2VzcyB0byBhdm9pZCBvcGVuaW5nCisg
ICAgLy8gYSBmaWxlIGJ5IG1pc3Rha2UuIEhvd2V2ZXIsIENBUF9TWVNfUkVTT1VSQ0UgY2FwYWJp
bGl0eSBzaG91bGQgYmUgZHJvcHBlZAorICAgIC8vIG90aGVyd2lzZSBpdCB3b24ndCB3b3JrLgor
ICAgIHN0cnVjdCBybGltaXQgcmVzdHJpY3RlZFJlc291cmNlID0geyAwLCAwIH07CisgICAgaWYg
KHNldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmcmVzdHJpY3RlZFJlc291cmNlKSA9PSAtMSkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkhlbHBlciBjb3VsZG4ndCBzZXQgdGhlIHJlc291cmNl
IGxpbWl0OiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoY2xvc2Uod2ViUHJvY2Vzc1NvY2tldCkgPT0gLTEpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY2xvc2Ugc29ja2V0ICVkOiAlcy5cbiIsIHdlYlByb2Nl
c3NTb2NrZXQsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjaGFyIG1lc3NhZ2U7CisgICAgLy8gV2UgZXhwZWN0IGEgJ0MnIChDaHJvb3RNZSkgbWVzc2Fn
ZSBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgIGlmIChyZWFkKGhlbHBlclNvY2tldCwgJm1lc3Nh
Z2UsIDEpICE9IDEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVhZCBt
ZXNzYWdlIGZyb20gdGhlIHdlYiBwcm9jZXNzOiAlcyAlZC5cbiIsIHN0cmVycm9yKGVycm5vKSwg
ZXJybm8pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UgIT0gTVNH
X0NIUk9PVE1FKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV3JvbmcgbWVzc2FnZSByZWNp
ZXZlZDogJXguXG4iLCBtZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0
cnVjdCBzdGF0IHNhbmRib3hEaXJlY3RvcnlJbmZvOworICAgIGlmIChsc3RhdChzYW5kYm94RGly
ZWN0b3J5LCAmc2FuZGJveERpcmVjdG9yeUluZm8pID09IC0xKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiU2FuZGJveCBkaXJlY3RvcnkgKCVzKSBpcyBub3QgYXZhaWxhYmxlOiAlcy5cbiIs
IHNhbmRib3hEaXJlY3RvcnksIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIVNfSVNESVIoc2FuZGJveERpcmVjdG9yeUluZm8uc3RfbW9kZSkpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBpcyBub3QgYSBkaXJlY3RvcnkhXG4iLCBzYW5k
Ym94RGlyZWN0b3J5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjaHJvb3Qo
c2FuZGJveERpcmVjdG9yeSkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDaHJv
b3RpbmcgZmFpbGVkOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBDaHJvb3Qgb25seSBjaGFuZ2VzIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGUgY2FsbGluZyBwcm9jZXNzIGJ1dCBkb2Vzbid0IGNoYW5nZQorICAgIC8vIHRoZSBjdXJy
ZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBUaGVyZWZvcmUsIGlmIHdlIGRvbid0IGRvIGl0IG1hbnVh
bGx5IGEgbWFsaWNpb3VzIHVzZXIKKyAgICAvLyBjb3VsZCBicmVhayBvdXQgdGhlIGphaWwgd2l0
aCByZWxhdGl2ZSBwYXRocy4KKyAgICBpZiAoY2hkaXIoIi8iKSA9PSAtMSkgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8g
Ly46ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gU2VuZGluZyBhY2tub3dsZWRnZW1lbnQgdG8gdGhlIFdlYlByb2Nlc3MgdGhhdCB0aGUg
c2FuZGJveGluZyB3YXMgc3VjY2Vzc2Z1bGwuCisgICAgbWVzc2FnZSA9IE1TR19DSFJPT1RFRDsK
KyAgICBpZiAod3JpdGUoaGVscGVyU29ja2V0LCAmbWVzc2FnZSwgMSkgIT0gMSkgeworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IHNlbmQgYWNrbm93bGVkZ2VtZW50IHRvIFdlYlBy
b2Nlc3M6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBib29sIHNldEVudmlyb25tZW50
VmFyaWFibGVzRm9yQ2hhbmdlUm9vdEhlbHBlcihwaWRfdCBwaWQsIGludCBoZWxwZXJTb2NrZXQs
IGludCB3ZWJQcm9jZXNzU29ja2V0KQoreworICAgIGNvbnN0IGludCBkZXNjcmlwdG9yU2l6ZSA9
IDMyOworICAgIGNoYXIgc29ja2V0RGVzY3JpcHRvcltkZXNjcmlwdG9yU2l6ZV07CisgICAgY2hh
ciBzYW5kYm94SGVscGVyUElEW2Rlc2NyaXB0b3JTaXplXTsKKworICAgIGludCBsZW5ndGggPSBz
bnByaW50ZihzYW5kYm94SGVscGVyUElELCBzaXplb2Yoc2FuZGJveEhlbHBlclBJRCksICIldSIs
IHBpZCk7CisgICAgaWYgKGxlbmd0aCA8IDAgfHwgbGVuZ3RoID49IHNpemVvZihzYW5kYm94SGVs
cGVyUElEKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjb252ZXJ0IHRo
ZSBzYW5kYm94IGhlbHBlciBQSUQgdG8gYSBzdHJpbmcuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChzZXRlbnYoU0FOREJPWF9IRUxQRVJfUElELCBzYW5kYm94
SGVscGVyUElELCAxKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0
IHNldCB0aGUgU0JYX0hFTFBFUl9QSUQgZW52aXJvbm1lbnQgdmFyaWFibGU6ICVzXG4iLCBzdHJl
cnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbGVuZ3Ro
ID0gc25wcmludGYoc29ja2V0RGVzY3JpcHRvciwgc2l6ZW9mKHNvY2tldERlc2NyaXB0b3IpLCAi
JXUiLCB3ZWJQcm9jZXNzU29ja2V0KTsKKyAgICBpZiAobGVuZ3RoIDwgMCB8fCBsZW5ndGggPj0g
c2l6ZW9mKHNvY2tldERlc2NyaXB0b3IpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFp
bGVkIHRvIGNvbnZlcnQgdGhlIHNhbmRib3ggaGVscGVyIGZpbGUgZGVzY3JpcHRvciB0byBhIHN0
cmluZy5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNldGVu
dihTQU5EQk9YX0RFU0NSSVBUT1IsIHNvY2tldERlc2NyaXB0b3IsIDEpID09IC0xKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHN0b3JlIHRoZSBoZWxwZXIncyBmaWxlIGRl
c2NyaXB0b3IgaW50byBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZTogJXMuXG4iLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNsb3NlKGhl
bHBlclNvY2tldCkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDbG9zaW5nIG9m
ICVkIGZhaWxlZDogJXMuXG4iLCBoZWxwZXJTb2NrZXQsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj
IGJvb2wgcHJlcGFyZUFuZFN0YXJ0Q2hhbmdlUm9vdEhlbHBlcigpCit7CisgICAgaW50IHNvY2tl
dFBhaXJbMl07CisgICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHNv
Y2tldFBhaXIpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3Jl
YXRlIHNvY2tldHBhaXI6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcGlkX3QgcGlkID0gc3lzY2FsbChTWVNfY2xvbmUsIENMT05F
X0ZTIHwgU0lHQ0hMRCwgMCwgMCwgMCk7CisgICAgaWYgKHBpZCA9PSAtMSkgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkNsb25lIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFwaWQpIHsKKyAgICAgICAgLy8g
Q2hpbGQgcHJvY2Vzczogd2Ugc3RhcnQgdGhlIGNocm9vdCBoZWxwZXIgd2hpY2ggd2FpdHMgZm9y
IHRoZSAiQ2hyb290TWUiCisgICAgICAgIC8vIG1lc3NhZ2UgZnJvbSB0aGUgV2ViUHJvY2Vzcy4g
SWYgd2UgYXJlIHN1Y2Nlc3NlZCwgdGhlbiB3ZSB3b24ndCByZXR1cm4uCisgICAgICAgIGxhdW5j
aENoYW5nZVJvb3RIZWxwZXIoc29ja2V0UGFpclswXSwgc29ja2V0UGFpclsxXSk7CisgICAgICAg
IC8vIFdlIHJlYWNoIHRoaXMgcGFydCBvbmx5IGlmIGxhdW5jaENocm9vdEhlbHBlcigpIGZhaWxl
ZCwgaW5zdGVhZCBpdCBzaG91bGQgaGF2ZSBleGl0ZWQuCisgICAgICAgIGV4aXQoRVhJVF9GQUlM
VVJFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFBhcmVudCBwcm9j
ZXNzOiBleHBvcnRzIHRoZSBwaWQgb2YgdGhlIGhlbHBlciBhbmQgdGhlIHNvY2tldCBpZCBzbyB0
aGUKKyAgICAvLyBoZWxwZXIgYW5kIHRoZSBXZWJQcm9jZXNzIGNhbiBjb21tdW5pY2F0ZS4KKyAg
ICByZXR1cm4gc2V0RW52aXJvbm1lbnRWYXJpYWJsZXNGb3JDaGFuZ2VSb290SGVscGVyKHBpZCwg
c29ja2V0UGFpclswXSwgc29ja2V0UGFpclsxXSk7Cit9CisKKy8vIFNldHRpbmcgbGludXggY2Fw
YWJpbGl0aWVzIChwZXJtaXR0ZWQsIGVmZmVjdGl2ZSBhbmQgaW5oZXJpdGFibGUpIGZvciB0aGUg
Y3VycmVudCBwcm9jZXNzLgorLy8gUGVybWl0dGVkIHNldCBpbmRpY2F0ZXMgdGhlIGNhcGFiaWxp
dGllcyB3aGF0IGNvdWxkIGJlIHNldCBmb3IgdGhlIHByb2Nlc3MuCisvLyBFZmZlY3RpdmUgc2V0
IGlzIGEgc3Vic2V0IG9mIHBlcm1pdHRlZCBzZXQsIHRoZXkgYXJlIGFjdHVhbGx5IGVmZmVjdGl2
ZS4KKy8vIEluaGVyaXRhYmxlIHNldCBpbmRpY2F0ZXMgdGhlIGNhcGFiaWxpdGllcyB3aGF0IHRo
ZSBjaGlsZHJlbiB3aWxsIGluaGVyaXQgZnJvbSB0aGUgY3VycmVudCBwcm9jZXNzLgorc3RhdGlj
IGJvb2wgc2V0Q2FwYWJpbGl0aWVzKGNhcF92YWx1ZV90KiBjYXBhYmlsaXR5TGlzdCwgaW50IGxl
bmd0aCkKK3sKKyAgICAvLyBDYXBhYmlsaXRpZXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGhv
dXQgZmxhZ3MuCisgICAgY2FwX3QgY2FwYWJpbGl0aWVzID0gY2FwX2luaXQoKTsKKyAgICBpZiAo
IWNhcGFiaWxpdGllcykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBpbml0
aWFsaXplIHByb2Nlc3MgY2FwYWJpbGl0aWVzOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY2FwX2NsZWFyKGNhcGFiaWxp
dGllcykgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY2xlYXIg
cHJvY2VzcyBjYXBhYmlsaXRpZXM6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChjYXBhYmlsaXR5TGlzdCAmJiBsZW5ndGgp
IHsKKyAgICAgICAgaWYgKGNhcF9zZXRfZmxhZyhjYXBhYmlsaXRpZXMsIENBUF9FRkZFQ1RJVkUs
IGxlbmd0aCwgY2FwYWJpbGl0eUxpc3QsIENBUF9TRVQpID09IC0xCisgICAgICAgICAgICB8fCBj
YXBfc2V0X2ZsYWcoY2FwYWJpbGl0aWVzLCBDQVBfSU5IRVJJVEFCTEUsIGxlbmd0aCwgY2FwYWJp
bGl0eUxpc3QsIENBUF9TRVQpID09IC0xCisgICAgICAgICAgICB8fCBjYXBfc2V0X2ZsYWcoY2Fw
YWJpbGl0aWVzLCBDQVBfUEVSTUlUVEVELCBsZW5ndGgsIGNhcGFiaWxpdHlMaXN0LCBDQVBfU0VU
KSA9PSAtMSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc2V0IHBy
b2Nlc3MgY2FwYWJpbGl0eSBmbGFnczogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICAgICAgY2FwX2ZyZWUoY2FwYWJpbGl0aWVzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjYXBfc2V0X3Byb2MoY2FwYWJpbGl0aWVzKSA9
PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBzZXQgcHJvY2VzcyBj
YXBhYmlsaXRpZXM6ICVzLlxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgY2FwX2ZyZWUo
Y2FwYWJpbGl0aWVzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNhcF9m
cmVlKGNhcGFiaWxpdGllcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGRy
b3BQcml2aWxlZ2VzKCkKK3sKKyAgICAvLyBXZSBiZWNvbWUgZXhwbGljaXRlbHkgbm9uIGR1bXBh
YmxlLgorICAgIGlmIChwcmN0bChQUl9TRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApID09IC0xKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU2V0dGluZyBkdW1wYWJsZSBpcyBmYWlsZWQ6ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKHNldHJlc2dpZChzYW5kYm94VXNlckdJRCwgc2FuZGJveFVzZXJHSUQsIHNhbmRib3hV
c2VyR0lEKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBmYWxs
YmFjayB0byBncm91cDogJWQuXG4iLCBzYW5kYm94VXNlckdJRCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2V0cmVzdWlkKHNhbmRib3hVc2VyVUlELCBzYW5kYm94
VXNlclVJRCwgc2FuZGJveFVzZXJVSUQpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRmFpbGVkIHRvIGZhbGxiYWNrIHRvIHVzZXI6ICVkLlxuIiwgc2FuZGJveFVzZXJVSUQpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRHJvcCBhbGwgY2FwYWJpbGl0
aWVzLiBBZ2Fpbiwgc2V0dWlkKCkgbm9ybWFsbHkgdGFrZXMgY2FyZSBvZiB0aGlzIGlmIHdlIGhh
ZCBldWlkIDAuCisgICAgcmV0dXJuIHNldENhcGFiaWxpdGllcygwLCAwKTsKK30KKworc3RhdGlj
IGJvb2wgZmlsZUV4aXN0cyhjb25zdCBjaGFyKiBwYXRoKQoreworICAgIHN0cnVjdCBzdGF0IGZp
bGVTdGF0OworICAgIGlmIChsc3RhdChwYXRoLCAmZmlsZVN0YXQpID09IC0xKSB7CisgICAgICAg
IGlmIChlcnJubyA9PSBFTk9FTlQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgbW9kZV90IGRpcmVjdG9yeVBlcm1pc3Npb25z
KGNvbnN0IGNoYXIqIGRpcmVjdG9yeSkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBmaWxlU3RhdDsKKyAg
ICBpZiAobHN0YXQoZGlyZWN0b3J5LCAmZmlsZVN0YXQpID09IC0xKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBkaXJlY3Rvcnkg
KCVzKTogJXNcbiIsIGRpcmVjdG9yeSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZmlsZVN0YXQuc3RfbW9kZTsKK30KKworc3RhdGlj
IGJvb2wgY3JlYXRlRGlyZWN0b3J5KGNoYXIqIHBhdGhUb0NyZWF0ZSwgY29uc3QgY2hhciogbmV4
dERpcmVjdG9yeVRvQ3JlYXRlKQoreworICAgIHN0cmxjYXQocGF0aFRvQ3JlYXRlLCBuZXh0RGly
ZWN0b3J5VG9DcmVhdGUsIG1heGltdW1QYXRoTGVuZ3RoKTsKKworICAgIGNoYXIgcGF0aFRvQ3Jl
YXRlSW5TYW5kYm94W21heGltdW1QYXRoTGVuZ3RoXTsKKyAgICBhcHBlbmREaXJlY3RvcnlDb21w
b25lbnQocGF0aFRvQ3JlYXRlSW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBwYXRoVG9DcmVh
dGUpOworCisgICAgbW9kZV90IG1vZGUgPSBkaXJlY3RvcnlQZXJtaXNzaW9ucyhwYXRoVG9DcmVh
dGUpOworICAgIGlmIChta2RpcihwYXRoVG9DcmVhdGVJblNhbmRib3gsIG1vZGUpID09IC0xKSB7
CisgICAgICAgIGlmIChlcnJubyAhPSBFRVhJU1QpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiQ3JlYXRpb24gb2YgJXMgZmFpbGVkOiAlc1xuIiwgcGF0aFRvQ3JlYXRlSW5TYW5kYm94
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAgaWYgKGxzdGF0KHBhdGhU
b0NyZWF0ZSwgJmZpbGVJbmZvKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNv
dWxkbid0IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBkaXJlY3RvcnkgKCVzKTogJXNcbiIsIHBh
dGhUb0NyZWF0ZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAoZmlsZUluZm8uc3RfdWlkID09IGdldHVpZCgpKSB7CisgICAgICAgIGlmIChj
aG93bihwYXRoVG9DcmVhdGVJblNhbmRib3gsIHNhbmRib3hVc2VyVUlELCBzYW5kYm94VXNlckdJ
RCkgPT0gLTEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFzc2ln
biB0aGUgb3duZXJzaGlwIG9mICVzIHRvIHRoZSBzYW5kYm94IHVzZXI6ICVzLlxuIiwgcGF0aFRv
Q3JlYXRlSW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjaG1vZChwYXRoVG9DcmVhdGVJblNhbmRi
b3gsIGZpbGVJbmZvLnN0X21vZGUpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
RmFpbGVkIHRvIHNldCB0aGUgcGVybWlzc2lvbnMgb2YgJXM6ICVzLlxuIiwgcGF0aFRvQ3JlYXRl
SW5TYW5kYm94LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBkaXJl
Y3RvcnkgY2hhaW4gd2l0aCB0aGUgZ2l2ZW4gcGF0aC4KKy8vIEZpcnN0LCBpdCBzcGxpdHMgdXAg
dGhlIHBhdGggYnkgJy8nLXMgYW5kIHdhbGtzIHRocm91Z2ggdGhlIGNodW5rcyBmcm9tIHRoZSBi
YXNlIGRpcmVjdG9yeS4KKy8vIEl0IGNoZWNrcyB0aGUgZXhpc3RhbmNlIG9mIHRoZSBhY3R1YWwg
cGF0aCBhbmQgY3JlYXRlcyBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC4KK3N0YXRpYyBib29s
IGNyZWF0ZURpcmVjdG9yeUNoYWluKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgY2hhciBmdWxs
UGF0aEluU2FuZGJveFttYXhpbXVtUGF0aExlbmd0aF07CisgICAgYXBwZW5kRGlyZWN0b3J5Q29t
cG9uZW50KGZ1bGxQYXRoSW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCBwYXRoKTsKKworICAg
IGlmIChmaWxlRXhpc3RzKGZ1bGxQYXRoSW5TYW5kYm94KSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBjaGFyIGFscmVhZHlDcmVhdGVkUGF0aFttYXhpbXVtUGF0aExlbmd0aF07CisgICAg
YWxyZWFkeUNyZWF0ZWRQYXRoWzBdID0gJ1wwJzsKKyAgICAvLyBzdGFydFBvcyBpcyAocGF0aCAr
IDEpIGJlY2F1c2Ugd2Ugc2tpcCB0aGUgZmlyc3QgJy8nLgorICAgIGNvbnN0IGNoYXIqIHN0YXJ0
UG9zID0gcGF0aCArIDE7CisgICAgY29uc3QgY2hhciogZW5kUG9zOworICAgIHdoaWxlICgoZW5k
UG9zID0gc3RyY2hyKHN0YXJ0UG9zLCAnLycpKSkgeworICAgICAgICBjaGFyIG5leHREaXJlY3Rv
cnlUb0NyZWF0ZVttYXhpbXVtUGF0aExlbmd0aF07CisgICAgICAgIHN0cmxjcHkobmV4dERpcmVj
dG9yeVRvQ3JlYXRlLCBzdGFydFBvcyAtIDEsIHN0cm5sZW4oc3RhcnRQb3MgLSAxLCBlbmRQb3Mg
LSBzdGFydFBvcyArIDEpICsgMSk7CisKKyAgICAgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnkoYWxy
ZWFkeUNyZWF0ZWRQYXRoLCBuZXh0RGlyZWN0b3J5VG9DcmVhdGUpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7CisgICAgfQorICAgIC8v
IENyZWF0ZSB0aGUgbGFzdCBkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBwYXRoLgorICAgIGFs
cmVhZHlDcmVhdGVkUGF0aFswXSA9ICdcMCc7CisgICAgcmV0dXJuIGNyZWF0ZURpcmVjdG9yeShh
bHJlYWR5Q3JlYXRlZFBhdGgsIHBhdGgpOworfQorCitzdGF0aWMgYm9vbCBjcmVhdGVEZXZpY2VG
aWxlcygpCit7CisgICAgY29uc3QgY2hhciogZGV2RGlyZWN0b3J5ID0gIi9kZXYiOworICAgIGlm
ICghY3JlYXRlRGlyZWN0b3J5Q2hhaW4oZGV2RGlyZWN0b3J5KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgY29uc3QgY2hhciogZGV2aWNlc1syXSA9IHsgIi9kZXYvcmFuZG9tIiwgIi9k
ZXYvdXJhbmRvbSIgfTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihkZXZpY2VzKSAv
IHNpemVvZihkZXZpY2VzWzBdKTsgKytpKSB7CisgICAgICAgIHN0cnVjdCBzdGF0IHN0YXR1czsK
KyAgICAgICAgaWYgKGxzdGF0KGRldmljZXNbaV0sICZzdGF0dXMpKSB7CisgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBzdGF0IGRldmljZSBmaWxlICglcyk6ICVzXG4iLCBk
ZXZpY2VzW2ldLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGRldl90IGRldiA9IHN0YXR1cy5zdF9yZGV2OworCisgICAgICAg
IC8vIEJvdGggbmVlZGVkIGRldmljZSBmaWxlcyAoL2Rldi9yYW5kb20gYW5kIC9kZXYvdXJhbmRv
bSkgYXJlIGNoYXJhY3RlciBtX2RldmljZXMgYW5kIHRoZWlyIHBlcm1pc3Npb25zIHNob3VsZCBi
ZTogcnctcnctcnctLgorICAgICAgICBjaGFyIGRldmljZVttYXhpbXVtUGF0aExlbmd0aF07Cisg
ICAgICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVudChkZXZpY2UsIHNhbmRib3hEaXJlY3Rvcnks
IGRldmljZXNbaV0pOworCisgICAgICAgIGlmIChta25vZChkZXZpY2UsIFNfSUZDSFIgfCBTX0lS
VVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEgsIG1h
a2VkZXYobWFqb3IoZGV2KSwgbWlub3IoZGV2KSkpID09IC0xKSB7CisgICAgICAgICAgICBpZiAo
ZXJybm8gIT0gRUVYSVNUKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3Vs
ZG4ndCBjcmVhdGUgZGV2aWNlIGZpbGUgJXM6ICVzXG4iLCBkZXZpY2UsIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBtb3VudEZpbGVT
eXN0ZW1zKCkKK3sKKyAgICBjb25zdCBjaGFyKiBwcm9jUGF0aCA9ICIvcHJvYyI7CisgICAgaWYg
KCFjcmVhdGVEaXJlY3RvcnlDaGFpbihwcm9jUGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjaGFyIHByb2NQYXRoSW5TYW5kYm94W21heGltdW1QYXRoTGVuZ3RoXTsKKyAgICBhcHBl
bmREaXJlY3RvcnlDb21wb25lbnQocHJvY1BhdGhJblNhbmRib3gsIHNhbmRib3hEaXJlY3Rvcnks
IHByb2NQYXRoKTsKKworICAgIGlmIChtb3VudChwcm9jUGF0aCwgcHJvY1BhdGhJblNhbmRib3gs
ICJwcm9jIiwgMCwgMCkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVCVVNZKSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBtb3VudCAnJXMnOiAlc1xuIiwg
cHJvY1BhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBzaGFyZWRNZW1vcnlQYXRoID0gIi9y
dW4vc2htIjsKKyAgICBpZiAoIWNyZWF0ZURpcmVjdG9yeUNoYWluKHNoYXJlZE1lbW9yeVBhdGgp
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3Rvcnkg
Zm9yIC9ydW4vc2htIGluIHRoZSBzYW5kYm94OiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY2hhciBzaGFyZWRNZW1vcnlQYXRoSW5T
YW5kYm94W21heGltdW1QYXRoTGVuZ3RoXTsKKyAgICBhcHBlbmREaXJlY3RvcnlDb21wb25lbnQo
c2hhcmVkTWVtb3J5UGF0aEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgc2hhcmVkTWVtb3J5
UGF0aCk7CisKKyAgICBpZiAobW91bnQoc2hhcmVkTWVtb3J5UGF0aCwgc2hhcmVkTWVtb3J5UGF0
aEluU2FuZGJveCwgInRtcGZzIiwgMCwgMCkgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vICE9
IEVCVVNZKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBtb3VudCAn
JXMnOiAlcy5cbiIsIHNoYXJlZE1lbW9yeVBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBib29sIGxpbmtGaWxlKGNvbnN0IGNoYXIqIHNvdXJjZUZpbGUsIGNvbnN0IGNo
YXIqIHRhcmdldEZpbGUpCit7CisgICAgY2hhciBvbGRQYXRoW21heGltdW1QYXRoTGVuZ3RoXTsK
KyAgICBjaGFyIHRhcmdldFBhdGhbbWF4aW11bVBhdGhMZW5ndGhdOworICAgIHN0cmxjcHkob2xk
UGF0aCwgc291cmNlRmlsZSwgbWF4aW11bVBhdGhMZW5ndGgpOworICAgIHN0cmxjcHkodGFyZ2V0
UGF0aCwgdGFyZ2V0RmlsZSwgbWF4aW11bVBhdGhMZW5ndGgpOworCisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAgICAgIGlmIChsc3RhdChvbGRQ
YXRoLCAmZmlsZUluZm8pID09IC0xKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5U
KSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvYnRhaW4gaW5m
b3JtYXRpb24gYWJvdXQgJXM6ICVzXG4iLCBvbGRQYXRoLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8v
IElmIHRoZSBvcmlnaW5hbCBmaWxlIGRvZXNuJ3QgZXhpc3QgKGUuZy4gZGFuZ2xpbmcgbGlua3Mp
IHRoZW4gd2UgY2FuIGlnbm9yZSBpdAorICAgICAgICAgICAgLy8gaW4gdGhlIHNhbmRib3ggdG9v
LgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgY2hh
ciogZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UgPSBzdHJyY2hyKG9sZFBhdGgsICcvJyk7Cisg
ICAgICAgIGlmICghZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UpIHsKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiSW52YWxpZCBzb3VyY2U6ICVzLlxuIiwgb2xkUGF0aCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjaGFyIGJhc2VEaXJlY3Rv
cnlPZlNvdXJjZVttYXhpbXVtUGF0aExlbmd0aF07CisgICAgICAgIC8vIFRvIGRldGVybWluZSB0
aGUgbGVuZ3RoIG9mIHRoZSBiYXNlIGRpcmVjdG9yeSB3ZSBoYXZlIHRvIGNvbnNpZGVyIHRoZSB0
YWlsaW5nCisgICAgICAgIC8vIHNsYXNoICgrMSkgYW5kIGFkZGluZyBwbHVzIG9uZSBiZWNhdXNl
IHN0cmxjcHkoKSBjb3BpZXMgKG1heExlbmd0aCAtIDEpIGNoYXJhY3RlcnMKKyAgICAgICAgLy8g
ZnJvbSB0aGUgc291cmNlLgorICAgICAgICBzdHJsY3B5KGJhc2VEaXJlY3RvcnlPZlNvdXJjZSwg
b2xkUGF0aCwgZW5kT2ZCYXNlRGlyZWN0b3J5SW5Tb3VyY2UgLSBvbGRQYXRoICsgMik7CisKKyAg
ICAgICAgaWYgKCFjcmVhdGVEaXJlY3RvcnlDaGFpbihiYXNlRGlyZWN0b3J5T2ZTb3VyY2UpKSB7
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5nICVzIGZhaWxlZDogJXMuXG4i
LCBiYXNlRGlyZWN0b3J5T2ZTb3VyY2UsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGluayhvbGRQYXRoLCB0YXJn
ZXRQYXRoKSA9PSAtMSkgeworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCAmJiBlcnJu
byAhPSBFTk9FTlQpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxpbmtpbmcg
JXMgZmFpbGVkOiAlcy5cbiIsIG9sZFBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gSGFuZGxlIHN5bWxpbmtzLiBXZSBkb24ndCB3YW50IHRvIGhhdmUgZGFuZ2xpbmcgbGlua3Mg
aW4gdGhlIHNhbmRib3guIFNvIHdlIGhhdmUgdG8KKyAgICAgICAgLy8gZm9sbG93IHRoZW0gYW5k
IHB1dCB0aGUgd2hvbGUgbGluayBjaGFpbiBpbnRvIHRoZSBzYW5kYm94LgorICAgICAgICBpZiAo
KGZpbGVJbmZvLnN0X21vZGUgJiBTX0lGTVQpICE9IFNfSUZMTkspCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjaGFyIHN5bWxpbmtUYXJnZXRbbWF4aW11bVBhdGhMZW5ndGhdOworICAg
ICAgICBpbnQgbGVuZ3RoT2ZUaGVMaW5rID0gcmVhZGxpbmsob2xkUGF0aCwgc3ltbGlua1Rhcmdl
dCwgc2l6ZW9mKHN5bWxpbmtUYXJnZXQpIC0gMSk7CisgICAgICAgIGlmIChsZW5ndGhPZlRoZUxp
bmsgPiAwKQorICAgICAgICAgICAgc3ltbGlua1RhcmdldFtsZW5ndGhPZlRoZUxpbmtdID0gJ1ww
JzsKKworICAgICAgICBjaGFyIHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZFttYXhpbXVtUGF0aExl
bmd0aF07CisgICAgICAgIGNoYXIgc3ltbGlua1RhcmdldEluU2FuZGJveFttYXhpbXVtUGF0aExl
bmd0aF07CisKKyAgICAgICAgLy8gTWFraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiByZWxhdGl2ZSBh
bmQgYWJzb2x1dGUgcGF0aHMuCisgICAgICAgIC8vIElmIHRoZSBzeW1saW5rcyB0YXJnZXQgc3Rh
cnRzIHdpdGggJy8nIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggaXQuCisgICAgICAg
IC8vIE90aGVyd2lzZSBpdCdzIGEgcmVsYXRpdmUgcGF0aCBhbmQgd2UgaGF2ZSB0byBjb25jYXRl
bmF0ZSBpdCB0byB0aGUgY3VycmVudAorICAgICAgICAvLyBwYXRoIHRvIG9idGFpbiB0aGUgdGFy
Z2V0LgorICAgICAgICBpZiAoc3ltbGlua1RhcmdldFswXSA9PSAnLycpIHsKKyAgICAgICAgICAg
IHN0cmxjcHkoc3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBzeW1saW5rVGFyZ2V0LCBtYXhpbXVt
UGF0aExlbmd0aCk7CisgICAgICAgICAgICBhcHBlbmREaXJlY3RvcnlDb21wb25lbnQoc3ltbGlu
a1RhcmdldEluU2FuZGJveCwgc2FuZGJveERpcmVjdG9yeSwgc3ltbGlua1RhcmdldCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcHBlbmREaXJlY3RvcnlDb21wb25lbnQoc3ltbGlu
a1RhcmdldEluUmVhbFdvcmxkLCBiYXNlRGlyZWN0b3J5T2ZTb3VyY2UsIHN5bWxpbmtUYXJnZXQp
OworICAgICAgICAgICAgYXBwZW5kRGlyZWN0b3J5Q29tcG9uZW50KHN5bWxpbmtUYXJnZXRJblNh
bmRib3gsIHNhbmRib3hEaXJlY3RvcnksIHN5bWxpbmtUYXJnZXRJblJlYWxXb3JsZCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBJbml0aWFsaXplIG9sZFBhdGggYW5kIHRhcmdldFBhdGggdmFy
aWFibGVzIGZvciB0aGUgbmV4dCBsb29wIG9mIHdoaWxlLgorICAgICAgICBvbGRQYXRoWzBdID0g
J1wwJzsKKyAgICAgICAgdGFyZ2V0UGF0aFswXSA9ICdcMCc7CisgICAgICAgIHN0cmxjYXQob2xk
UGF0aCwgc3ltbGlua1RhcmdldEluUmVhbFdvcmxkLCBtYXhpbXVtUGF0aExlbmd0aCk7CisgICAg
ICAgIHN0cmxjYXQodGFyZ2V0UGF0aCwgc3ltbGlua1RhcmdldEluU2FuZGJveCwgbWF4aW11bVBh
dGhMZW5ndGgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gVGhpcyBmdW5jdGlv
biBleHRlbmRzIHRoZSBzdGFuZGFyZCBsaW5rIGZ1bmN0aW9uIGJ5IGxpbmtpbmcgZGlyZWN0b3Jp
ZXMgYW5kIGFsbCB0aGVpciBjb250ZW50cworLy8gYW5kIHN1YmRpcmVjdG9yaWVzIHJlY3Vyc2l2
ZWx5Lgorc3RhdGljIGJvb2wgbGlua0RpcmVjdG9yeShjb25zdCBjaGFyKiBzb3VyY2VEaXJlY3Rv
cnlQYXRoLCBjb25zdCBjaGFyKiB0YXJnZXREaXJlY3RvcnlQYXRoKQoreworICAgIGlmICghY3Jl
YXRlRGlyZWN0b3J5Q2hhaW4oc291cmNlRGlyZWN0b3J5UGF0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBESVIqIGRpcmVjdG9yeSA9IG9wZW5kaXIoc291cmNlRGlyZWN0b3J5UGF0aCk7
CisgICAgaWYgKCFkaXJlY3RvcnkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4n
dCBvcGVuIGRpcmVjdG9yeSAlczogJXNcbiIsIHNvdXJjZURpcmVjdG9yeVBhdGgsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB3aGlsZSAoc3Ry
dWN0IGRpcmVudCAqZGlyZWN0b3J5SW5mbyA9IHJlYWRkaXIoZGlyZWN0b3J5KSkgeworICAgICAg
ICBjaGFyKiBmaWxlTmFtZSA9IGRpcmVjdG9yeUluZm8tPmRfbmFtZTsKKyAgICAgICAgLy8gV2Ug
bXVzdCBub3QgbGluayAnLicgYW5kICIuLiIgaW50byB0aGUgc2FuZGJveC4KKyAgICAgICAgaWYg
KCFzdHJjbXAoZmlsZU5hbWUsICIuIikgfHwgIXN0cmNtcChmaWxlTmFtZSwgIi4uIikpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2hhciBzb3VyY2VGaWxlW21heGltdW1QYXRoTGVu
Z3RoXTsKKyAgICAgICAgY2hhciB0YXJnZXRGaWxlW21heGltdW1QYXRoTGVuZ3RoXTsKKyAgICAg
ICAgYXBwZW5kRGlyZWN0b3J5Q29tcG9uZW50KHNvdXJjZUZpbGUsIHNvdXJjZURpcmVjdG9yeVBh
dGgsIGZpbGVOYW1lKTsKKyAgICAgICAgYXBwZW5kRGlyZWN0b3J5Q29tcG9uZW50KHRhcmdldEZp
bGUsIHRhcmdldERpcmVjdG9yeVBhdGgsIGZpbGVOYW1lKTsKKworICAgICAgICBib29sIHJldHVy
blZhbHVlOworICAgICAgICBpZiAoZGlyZWN0b3J5SW5mby0+ZF90eXBlID09IERUX0RJUikgewor
ICAgICAgICAgICAgc3RybmNhdChzb3VyY2VGaWxlLCAiLyIsIDEpOworICAgICAgICAgICAgc3Ry
bmNhdCh0YXJnZXRGaWxlLCAiLyIsIDEpOworICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBsaW5r
RGlyZWN0b3J5KHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gbGlua0ZpbGUoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSk7Cisg
ICAgICAgIGlmICghcmV0dXJuVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhl
IGRpcmVjdG9yaWVzIGJlY2F1c2UKKyAgICAvLyBpdCBjb3VsZCBoYXZlIG1lYW5pbmcgZS5nLiBp
biB0aGUgaGFzaCBnZW5lcmF0aW9uIG9mIGNhY2hlIGZpbGVzLgorICAgIHN0cnVjdCBzdGF0IGZp
bGVTdGF0OworICAgIGlmIChsc3RhdChzb3VyY2VEaXJlY3RvcnlQYXRoLCAmZmlsZVN0YXQpID09
IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9idGFpbiBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgZGlyZWN0b3J5ICclcyc6ICVzXG4iLCBzb3VyY2VEaXJlY3RvcnlQYXRo
LCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN0
cnVjdCB1dGltYnVmIHRpbWVzOworICAgIHRpbWVzLmFjdGltZSA9IGZpbGVTdGF0LnN0X2F0aW1l
OworICAgIHRpbWVzLm1vZHRpbWUgPSBmaWxlU3RhdC5zdF9tdGltZTsKKyAgICBpZiAodXRpbWUo
dGFyZ2V0RGlyZWN0b3J5UGF0aCwgJnRpbWVzKSA9PSAtMSkgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkbid0IHNldCBiYWNrIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mICcl
cyc6ICVzXG4iLCB0YXJnZXREaXJlY3RvcnlQYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9v
bCBjb2xsZWN0UnVuVGltZURlcGVuZGVuY2llcygpCit7CisgICAgLy8gVGhlIGxpc3Qgb2YgZW1w
aXJpY2FsbHkgZ2F0aGVyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMuCisgICAgY29uc3QgY2hhciog
cnVudGltZURlcGVuZGVuY2llc1tdID0geworICAgICAgICAibGlibnNzX2Rucy5zbyIsCisgICAg
ICAgICJsaWJyZXNvbHYuc28iLAorICAgICAgICAibGlic3NsLnNvIiwKKyAgICAgICAgImxpYmNy
eXB0by5zbyIKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YocnVudGlt
ZURlcGVuZGVuY2llcykgLyBzaXplb2YocnVudGltZURlcGVuZGVuY2llc1swXSk7ICsraSkgewor
ICAgICAgICAvLyBUbyBvYnRhaW4gdGhlIHBhdGggb2YgdGhlIHJ1bnRpbWUgZGVwZW5kZW5jaWVz
IHdlIG9wZW4gdGhlbSB3aXRoIGRsb3Blbi4KKyAgICAgICAgLy8gV2l0aCB0aGUgaGFuZGxlIHN1
cHBsaWVkIGJ5IGRsb3BlbiB3ZSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkeW5h
bWljYWxseQorICAgICAgICAvLyBsaW5rZWQgbGlicmFyaWVzLCBzbyB0aGUgcGF0aCB3aGVyZSBh
cmUgdGhleSBpbnN0YWxsZWQuCisgICAgICAgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbihydW50aW1l
RGVwZW5kZW5jaWVzW2ldLCBSVExEX0xBWlkpOworICAgICAgICBpZiAoIWhhbmRsZSkgeworICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQgdGhlIGhhbmRsZXIgb2YgJXM6
ICVzXG4iLCBydW50aW1lRGVwZW5kZW5jaWVzW2ldLCBkbGVycm9yKCkpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgc3RydWN0IGxpbmtfbWFwKiBsaW5r
TWFwOworICAgICAgICBpZiAoZGxpbmZvKGhhbmRsZSwgUlRMRF9ESV9MSU5LTUFQLCAmbGlua01h
cCkgPT0gLTEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgZ2V0IGlu
Zm9ybWF0aW9uIGFib3V0ICVzOiAlc1xuIiwgcnVudGltZURlcGVuZGVuY2llc1tpXSwgZGxlcnJv
cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghbGlua01hcCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBnZXQg
dGhlIGxpbmttYXAgb2YgJXM6ICVzLlxuIiwgcnVudGltZURlcGVuZGVuY2llc1tpXSwgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNoYXIgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJveFttYXhpbXVtUGF0aExlbmd0aF07Cisg
ICAgICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVudChwYXRoT2ZUaGVMaWJyYXJ5SW5TYW5kYm94
LCBzYW5kYm94RGlyZWN0b3J5LCBsaW5rTWFwLT5sX25hbWUpOworICAgICAgICBpZiAoIWxpbmtG
aWxlKGxpbmtNYXAtPmxfbmFtZSwgcGF0aE9mVGhlTGlicmFyeUluU2FuZGJveCkpIHsKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiTGlua2luZyBydW50aW1lIGRlcGVuZGVuY3k6ICVzIGZh
aWxlZDogJXNcbiIsIGxpbmtNYXAtPmxfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAg
ICAgIGRsY2xvc2UoaGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBkbGNsb3NlKGhhbmRsZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgYm9vbCBzZXR1cFhhdXRob3JpdHlGb3JOb2JvZHlVc2VyKCkKK3sKKyAgICAvLyBU
byBiZSBhYmxlIHVzZSBYIGluc2lkZSB0aGUgc2FuZGJveCBhbiAuWGF1dGhvcml0eSBmaWxlIG11
c3QgYmUgZXhpc3QgaW5zaWRlIGl0LAorICAgIC8vIG93bmVkIGJ5IHRoZSBzYW5kYm94dXNlci4g
RnVydGhlcm1vcmUsIFhBVVRIT1JJVFkgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBwb2ludCB0
byBpdC4KKyAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOworICAgIHNpemVfdCBzaXplOworICAgIHN0
cnVjdCBwYXNzd2QqIHJlYWxVc2VyID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworICAgIGlmICghcmVh
bFVzZXIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvYnRhaW4gdGhlIGN1
cnJlbnQgdXNlcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBjaGFyIHhhdXRob3JpdHlPZlJlYWxVc2VyW21heGltdW1QYXRoTGVu
Z3RoXTsKKyAgICBjaGFyIHhhdXRob3JpdHlJblNhbmRib3hbbWF4aW11bVBhdGhMZW5ndGhdOwor
ICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVudCh4YXV0aG9yaXR5T2ZSZWFsVXNlciwgcmVhbFVz
ZXItPnB3X2RpciwgIi8uWGF1dGhvcml0eSIpOworICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVu
dCh4YXV0aG9yaXR5SW5TYW5kYm94LCBzYW5kYm94RGlyZWN0b3J5LCB4YXV0aG9yaXR5T2ZSZWFs
VXNlcik7CisKKyAgICBGSUxFKiBzb3VyY2UgPSBmb3Blbih4YXV0aG9yaXR5T2ZSZWFsVXNlciwg
InJiIik7CisgICAgaWYgKCFzb3VyY2UpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3Vs
ZG4ndCBvcGVuICVzOiAlc1xuIiwgeGF1dGhvcml0eU9mUmVhbFVzZXIsIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBGSUxFKiBkZXN0ID0gZm9w
ZW4oeGF1dGhvcml0eUluU2FuZGJveCwgIndiIik7CisgICAgaWYgKCFkZXN0KSB7CisgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiAlczogJXNcbiIsIHhhdXRob3JpdHlJblNh
bmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBXZSBjb3B5IHRoZSAuWGF1dGhvcml0eSBmaWxlIG9mIHRoZSByZWFsIHVzZXIgKGlu
c3RlYWQgb2YgbGlua2luZykgYmVjYXVzZSAnbm9ib2R5JyB1c2VyCisgICAgLy8gc2hvdWxkIG93
biBpdCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBv
cmlnaW5hbCBmaWxlLgorICAgIHdoaWxlICgoc2l6ZSA9IGZyZWFkKGJ1ZmZlciwgMSwgQlVGU0la
LCBzb3VyY2UpKSkgeworICAgICAgICBpZiAoZndyaXRlKGJ1ZmZlciwgMSwgc2l6ZSwgZGVzdCkg
IT0gc2l6ZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY29weSAu
WGF1dGhvcml0eSB0byB0aGUgc2FuZGJveDogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZjbG9z
ZShzb3VyY2UpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xvc2luZyB0aGUgLlhhdXRo
b3JpdHkgZmlsZSBvZiB0aGUgcmVhbCB1c2VyIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZmNsb3NlKGRlc3Qp
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2xvc2luZyB0aGUgLlhhdXRob3JpdHkgZmls
ZSBvZiB0aGUgc2FuZGJveCB1c2VyIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY2hvd24oeGF1dGhvcml0eUlu
U2FuZGJveCwgc2FuZGJveFVzZXJVSUQsIHNhbmRib3hVc2VyR0lEKSA9PSAtMSkgeworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNob3duaW5nIC5YYXV0aG9yaXR5ICglcykgZmFpbGVkOiAlcy5c
biIsIHhhdXRob3JpdHlJblNhbmRib3gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2V0ZW52KCJYQVVUSE9SSVRZIiwgeGF1dGhvcml0
eUluU2FuZGJveCwgMSkgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4n
dCBzZXQgdGhlIFhBVVRIT1JJVFkgZW52cmlvbm1lbnQgdmFyaWFibGU6ICVzXG4iLCBzdHJlcnJv
cihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgYm9vbCBpbml0aWFsaXplU2FuZGJveCgpCit7CisgICAgLy8gQ3JlYXRl
IHRoZSBzYW5kYm94IGRpcmVjdG9yeS4gV2Ugb25seSBuZWVkIHRvIGVudGVyIGl0LCBzbworICAg
IC8vIHRoZSBleGVjdXRhYmxlIHBlcm1pc3Npb24gaXMgbmVlZGVkIG9ubHkuCisgICAgaWYgKG1r
ZGlyKHNhbmRib3hEaXJlY3RvcnksIFNfSUZESVIgfCBTX0lYVVNSIHwgU19JWE9USCkgPT0gLTEp
IHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVFWElTVCkgeworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJDb3VsZG4ndCBjcmVhdGUgdGhlIHNhbmRib3ggZGlyZWN0b3J5OiAlc1xuIiwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghY3JlYXRlRGV2aWNlRmlsZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFtb3VudEZpbGVTeXN0ZW1zKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEhhcmQgbGluayBjYWNoZSBhbmQgZm9udCBkaXJlY3RvcmllcyBpbnRvIHRoZSBz
YW5kYm94IGVudmlyb25tZW50LgorICAgIHN0cnVjdCBwYXNzd2QqIHVzZXJJbmZvID0gZ2V0cHd1
aWQoZ2V0dWlkKCkpOworICAgIGNvbnN0IGNoYXIqIGhvbWUgPSB1c2VySW5mby0+cHdfZGlyOwor
CisgICAgY2hhciBsb2NhbERpcmVjdG9yeVttYXhpbXVtUGF0aExlbmd0aF07CisgICAgY2hhciBj
YWNoZURpcmVjdG9yeVttYXhpbXVtUGF0aExlbmd0aF07CisgICAgY2hhciBmb250RGlyZWN0b3J5
W21heGltdW1QYXRoTGVuZ3RoXTsKKworICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVudChsb2Nh
bERpcmVjdG9yeSwgaG9tZSwgIi8ubG9jYWwvc2hhcmUvIik7CisgICAgYXBwZW5kRGlyZWN0b3J5
Q29tcG9uZW50KGNhY2hlRGlyZWN0b3J5LCBob21lLCAiLy5jYWNoZS8iKTsKKyAgICBhcHBlbmRE
aXJlY3RvcnlDb21wb25lbnQoZm9udERpcmVjdG9yeSwgaG9tZSwgIi8uZm9udGNvbmZpZy8iKTsK
KworICAgIGNvbnN0IGNoYXIqIGxpbmtlZERpcmVjdG9yaWVzW10gPSB7CisgICAgICAgIGNhY2hl
RGlyZWN0b3J5LAorICAgICAgICBmb250RGlyZWN0b3J5LAorICAgICAgICBsb2NhbERpcmVjdG9y
eSwKKyAgICAgICAgIi9ldGMvZm9udHMvIiwKKyAgICAgICAgIi9ldGMvc3NsL2NlcnRzLyIsCisg
ICAgICAgICIvdmFyL2NhY2hlL2ZvbnRjb25maWcvIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvIgorICAgIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihsaW5rZWREaXJl
Y3RvcmllcykgLyBzaXplb2YobGlua2VkRGlyZWN0b3JpZXNbMF0pOyArK2kpIHsKKyAgICAgICAg
Y2hhciBsaW5rZWREaXJlY3RvcnlJblNhbmRib3hbbWF4aW11bVBhdGhMZW5ndGhdOworICAgICAg
ICBhcHBlbmREaXJlY3RvcnlDb21wb25lbnQobGlua2VkRGlyZWN0b3J5SW5TYW5kYm94LCBzYW5k
Ym94RGlyZWN0b3J5LCBsaW5rZWREaXJlY3Rvcmllc1tpXSk7CisKKyAgICAgICAgaWYgKCFsaW5r
RGlyZWN0b3J5KGxpbmtlZERpcmVjdG9yaWVzW2ldLCBsaW5rZWREaXJlY3RvcnlJblNhbmRib3gp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghc2V0dXBYYXV0
aG9yaXR5Rm9yTm9ib2R5VXNlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gY29sbGVjdFJ1blRpbWVEZXBlbmRlbmNpZXMoKTsKK30KKworc3RhdGljIGJvb2wgcmVzdHJp
Y3RDYXBhYmlsaXRpZXMoKQoreworICAgIC8vIENhcGFiaWxpdGllcyB3ZSBuZWVkLgorICAgIC8v
IENBUF9TWVNfQURNSU4gY2FwYWJpbHR5IGlzIGFkZGVkIGJlY2F1c2UgY2xvbmluZyB3aXRoIENM
T05FX05FV1BJRCBmbGFnIGxhdGVyIHdpbGwgbmVlZCBpdC4KKyAgICBjYXBfdmFsdWVfdCBjYXBh
YmlsaXR5TGlzdFtdID0geyBDQVBfU0VUVUlELCBDQVBfU0VUR0lELCBDQVBfU1lTX0FETUlOLCBD
QVBfU1lTX0NIUk9PVH07CisKKyAgICAvLyBSZWR1Y2UgY2FwYWJpbGl0aWVzIHRvIHdoYXQgd2Ug
bmVlZC4KKyAgICAvLyBBbHRob3VnaCB3ZSBzdGlsbCBoYXZlIHJvb3QgZXVpZCBhbmQgd2Uga2Vl
cCByb290IGVxdWl2YWxlbnQgY2FwYWJpbGl0aWVzLAorICAgIC8vIHdlIHJlbW92ZWQgKD0gZGlk
bid0IGFkZCkgQ0FQX1NZU19SRVNTT1VSQ0UgY2FwYWJpbGl0ZXMgYW5kIHRoaXMgcmVzdWx0ZWQg
dGhhdAorICAgIC8vIHRoZSBzZXRybGltaXQgZnVuY3Rpb24gd2l0aCBSTElNSVRfTk9GSUxFIHdp
bGwgYmUgZWZmZWN0aXZlIGxhdGVyLgorICAgIGlmICghc2V0Q2FwYWJpbGl0aWVzKGNhcGFiaWxp
dHlMaXN0LCBzaXplb2YoY2FwYWJpbGl0eUxpc3QpIC8gc2l6ZW9mKGNhcGFiaWxpdHlMaXN0WzBd
KSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWRqdXN0IHByb2Nlc3Mg
Y2FwYWJpbGl0aWVzOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIG1vdmVUb05l
d1BJRE5hbWVzcGFjZSgpCit7CisgICAgLy8gQ0xPTkVfTkVXUElEIGFuZCBDTE9ORV9GUyBzaG91
bGQgYmUgaW4gdGhhdCBvcmRlci4KKyAgICAvLyBXZSBjYW4ndCBzaGFyZSBmaWxlc3lzdGVtcyBh
Y2Nyb3NzIG5hbWVzcGFjZXMuCisgICAgaW50IHN0YXR1czsKKyAgICBwaWRfdCBleHBlY3RlZFBJ
RDsKKyAgICBwaWRfdCBwaWQgPSBzeXNjYWxsKFNZU19jbG9uZSwgQ0xPTkVfTkVXUElEIHwgU0lH
Q0hMRCwgMCwgMCwgMCk7CisKKyAgICBpZiAocGlkID09IC0xKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ2xvbmluZyBpcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcGlkKSB7CisgICAgICAgIC8vIENo
aWxkIHNob3VsZCBydW4gd2l0aCBwaWQgbnVtYmVyIDEgaW4gdGhlIG5ldyBuYW1lc3BhY2UuCisg
ICAgICAgIGlmIChnZXRwaWQoKSAhPSAxKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNvdWxkbid0IGNyZWF0ZSBhIG5ldyBQSUQgbmFtZXNwYWNlLlxuIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gV2UgYXJlIHdhaXRpbmcgZm9yIG91ciBjaGlsZCAoV2ViUHJvY2VzcykuCisgICAgLy8g
SWYgdGhpcyB3YWl0IGlzIHN1Y2Nlc3NmdWwgaXQgbWVhbnMgdGhhdCBvdXIgY2hpbGQgaXMgdGVy
bWluYXRlZC4KKyAgICBleHBlY3RlZFBJRCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKTsKKyAg
ICBpZiAoZXhwZWN0ZWRQSUQgIT0gcGlkKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHJv
Y2VzcyB3aXRoIFBJRCAlZCB0ZXJtaW5hdGVkIGluc3RlYWQgb2YgdGhlIGV4cGVjdGVkIG9uZSB3
aXRoIFBJRCAlZDogJXMuXG4iLCBleHBlY3RlZFBJRCwgcGlkLCBzdHJlcnJvcihlcnJubykpOwor
ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICAgIGlmIChXSUZFWElURUQoc3Rh
dHVzKSkKKyAgICAgICAgZXhpdChXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKyAgICBleGl0KEVYSVRf
U1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBib29sIHJ1bihpbnQgYXJnYywgY2hhciAqY29uc3QgYXJn
dltdKQoreworICAgIHN0cnVjdCBwYXNzd2QqIHVzZXJJbmZvID0gZ2V0cHd1aWQoZ2V0dWlkKCkp
OworICAgIGlmICghdXNlckluZm8pIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4n
dCBnZXQgdGhlIGN1cnJlbnQgdXNlcjogJXMuXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGFwcGVuZERpcmVjdG9yeUNvbXBvbmVudChzYW5k
Ym94RGlyZWN0b3J5LCB1c2VySW5mby0+cHdfZGlyLCAiLy53azItc2FuZGJveCIpOworCisgICAg
Ly8gQ3VycmVudGx5IHdlIHVzZSAnbm9ib2R5JyB1c2VyIGFzIHRoZSBzYW5kYm94IHVzZXIgYW5k
IGZhbGwgYmFjayB0byB0aGUgcmVhbCB1c2VyCisgICAgLy8gaWYgd2UgZmFpbGVkIHRvIGdldCBp
dCAod2UgY291bGQgZXh0ZW5kIHRoaXMgaW4gdGhlIGZ1dHVyZSB3aXRoIGEgc3BlY2lmaWMgcmVz
dHJpY3RlZCB1c2VyKS4KKyAgICBpZiAoc3RydWN0IHBhc3N3ZCogbm9ib2R5VXNlciA9IGdldHB3
bmFtKCJub2JvZHkiKSkgeworICAgICAgICBzYW5kYm94VXNlclVJRCA9IG5vYm9keVVzZXItPnB3
X3VpZDsKKyAgICAgICAgc2FuZGJveFVzZXJHSUQgPSBub2JvZHlVc2VyLT5wd19naWQ7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc2FuZGJveFVzZXJVSUQgPSBnZXR1aWQoKTsKKyAgICAgICAgc2Fu
ZGJveFVzZXJHSUQgPSBnZXRnaWQoKTsKKyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSB0
aHJlZSBwYXJhbWV0ZXJzOgorICAgIC8vIHBhdGhfb2ZfdGhpc19iaW5hcnkgcGF0aF9vZl90aGVf
d2VicHJvY2VzcyBzb2NrZXRfdG9fY29tbXVuaWNhdGVfd2l0aF91aXByb2Nlc3MKKyAgICBpZiAo
YXJnYyAhPSAzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3RhcnRpbmcgU2FuZGJveFBy
b2Nlc3MgcmVxdWlyZXMgMyBwYXJhbWV0ZXJzIVxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBTYW5kYm94UHJvY2VzcyBzaG91bGQgYmUgcnVuIHdpdGggc3VpZCBm
bGFnIC4uLgorICAgIGlmIChnZXRldWlkKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJU
aGUgc2FuZGJveCBpcyBub3Qgc2V0ZXVpZCByb290LlxuIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyAuLi4gYnV0IG5vdCBhcyByb290IChub3Qgd2l0aCBzdWRvKS4K
KyAgICBpZiAoIWdldHVpZCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGhlIHNhbmRi
b3ggaXMgbm90IGRlc2lnbmVkIHRvIGJlIHJ1biBieSByb290LlxuIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluaXRpYWxpemVTYW5kYm94KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghcmVzdHJpY3RDYXBhYmlsaXRpZXMoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgbW92ZSBvdXJzZWxmIGFuZCBvdXIgY2hpbGRy
ZW4gaW50byBhIG5ldyBQSUQgbmFtZXNwYWNlLAorICAgIC8vIHdoZXJlIHByb2Nlc3MgSURzIHN0
YXJ0IGZyb20gMCBhZ2Fpbi4KKyAgICBpZiAoIW1vdmVUb05ld1BJRE5hbWVzcGFjZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTdGFydGluZyBhIGhlbHBlciB3aGF0IHdpbGwg
d2FpdGluZyBmb3IgdGhlICJjaHJvb3RtZSIgbWVzc2FnZSBmcm9tIFdlYlByb2Nlc3MuCisgICAg
aWYgKCFwcmVwYXJlQW5kU3RhcnRDaGFuZ2VSb290SGVscGVyKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFdlIGRvbid0IG5lZWQgYW55IHNwZWNpYWwgcHJpdmlsZWdlcyBhbnlt
b3JlLgorICAgIGlmICghZHJvcFByaXZpbGVnZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gU2FuaXR5IGNoZWNrOiBpZiBvdXIgZWZmZWN0aXZlIG9yIHJlYWwgdWlkL2dpZCBp
cyBzdGlsbCAwIChyb290KSBvcgorICAgIC8vIHdlIGNhbiBzZXQgYW55IG9mIHRoZW0gdG8gMCwg
dGhlbiB0aGUgZHJvcHBpbmcgb2YgcHJpdmlsZWdlcyBpcyBmYWlsZWQuCisgICAgLy8gV2UgZW5z
dXJlIGhlcmUgdGhhdCB3ZSBjYW5ub3Qgc2V0IHJvb3QgaWQgYWZ0ZXIgaGVyZS4KKyAgICBpZiAo
IWdldGV1aWQoKSB8fCAhZ2V0ZWdpZCgpIHx8ICFzZXR1aWQoMCkgfHwgIXNldGdpZCgwKSkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRyb3BwaW5nIHByaXZpbGVnZXMgZmFpbGVkIVxuIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTdGFydCB0aGUgV2ViUHJv
Y2Vzcy4KKyAgICBpZiAoZXhlY2woYXJndlsxXSwgYXJndlsxXSwgYXJndlsyXSwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oMCkpID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291
bGRuJ3Qgc3RhcnQgV2ViUHJvY2VzczogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10pCit7CisgICAgcmV0dXJuIHJ1bihhcmdjLCBhcmd2
KSA/IDAgOiAxOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1Nh
bmRib3hQcm9jZXNzL1NhbmRib3hFbnZpcm9ubWVudExpbnV4LmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbGludXgvU2FuZGJveFByb2Nlc3MvU2FuZGJveEVudmlyb25tZW50TGludXguaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2FhZjFiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NhbmRib3hQcm9jZXNzL1NhbmRib3hFbnZp
cm9ubWVudExpbnV4LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlbmF0YSBIb2Rv
dmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgU2FuZGJveEVudmlyb25tZW50TGludXhfaAorI2RlZmluZSBTYW5kYm94RW52aXJvbm1lbnRM
aW51eF9oCisKKyNkZWZpbmUgU0FOREJPWF9ERVNDUklQVE9SICJTQU5EQk9YX0RFU0NSSVBUT1Ii
CisjZGVmaW5lIFNBTkRCT1hfSEVMUEVSX1BJRCAiU0FOREJPWF9IRUxQRVJfUElEIgorCisjZGVm
aW5lIE1TR19DSFJPT1RNRSAnQycKKyNkZWZpbmUgTVNHX0NIUk9PVEVEICdPJworCisjZW5kaWYg
Ly8gU2FuZGJveEVudmlyb25tZW50TGludXhfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAppbmRleCA0
ZmJmMmE3Li44ZDdiN2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1
bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKQEAgLTYxLDYgKzYxLDEwIEBA
CiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU1VJRF9TQU5EQk9Y
X0xJTlVYKQorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CisjZW5kaWYKKwogI2lmIE9TKERB
UldJTikKICNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgogI2luY2x1ZGUgPHNlcnZlcnMvYm9v
dHN0cmFwLmg+CkBAIC0xNjYsMzcgKzE3MCw0OCBAQCB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1
bmNoUHJvY2VzcygpCiAgICAgY29tbWFuZExpbmUgPSBjb21tYW5kTGluZS5hcmcoc29ja2V0c1sw
XSk7CiAjZW5kaWYKIAotICAgIFFQcm9jZXNzKiB3ZWJQcm9jZXNzID0gbmV3IFF0V2ViUHJvY2Vz
cygpOwotICAgIHdlYlByb2Nlc3MtPnNldFByb2Nlc3NDaGFubmVsTW9kZShRUHJvY2Vzczo6Rm9y
d2FyZGVkQ2hhbm5lbHMpOwotICAgIHdlYlByb2Nlc3MtPnN0YXJ0KGNvbW1hbmRMaW5lKTsKKyAg
ICBRUHJvY2Vzcyogd2ViUHJvY2Vzc09yU1VJREhlbHBlciA9IG5ldyBRdFdlYlByb2Nlc3MoKTsK
KyAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zZXRQcm9jZXNzQ2hhbm5lbE1vZGUoUVByb2Nl
c3M6OkZvcndhcmRlZENoYW5uZWxzKTsKKworI2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgp
CisgICAgaWYgKG1fbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9PSBXZWJQcm9jZXNzKSB7Cisg
ICAgICAgIFFTdHJpbmcgc2FuZGJveENvbW1hbmRMaW5lID0gUUxhdGluMVN0cmluZygiJTEgJTIg
JTMiKTsKKyAgICAgICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFy
ZyhRQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvbkRpclBhdGgoKSArIFFMYXRpbjFTdHJpbmco
Ii9TVUlEU2FuZGJveEhlbHBlciIpKTsKKyAgICAgICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2Fu
ZGJveENvbW1hbmRMaW5lLmFyZyhleGVjdXRhYmxlUGF0aE9mV2ViUHJvY2VzcygpKTsKKyAgICAg
ICAgc2FuZGJveENvbW1hbmRMaW5lID0gc2FuZGJveENvbW1hbmRMaW5lLmFyZyhzb2NrZXRzWzBd
KTsKKworICAgICAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFydChzYW5kYm94Q29tbWFu
ZExpbmUpOworICAgIH0gZWxzZQorICAgICAgICB3ZWJQcm9jZXNzT3JTVUlESGVscGVyLT5zdGFy
dChjb21tYW5kTGluZSk7CisjZWxzZQorICAgIHdlYlByb2Nlc3NPclNVSURIZWxwZXItPnN0YXJ0
KGNvbW1hbmRMaW5lKTsKKyNlbmRpZgogCiAjaWYgT1MoVU5JWCkgJiYgIU9TKERBUldJTikKICAg
ICAvLyBEb24ndCBleHBvc2UgdGhlIHdlYiBzb2NrZXQgdG8gcG9zc2libGUgZnV0dXJlIHdlYiBw
cm9jZXNzZXMKICAgICB3aGlsZSAoZmNudGwoc29ja2V0c1swXSwgRl9TRVRGRCwgRkRfQ0xPRVhF
QykgPT0gLTEpIHsKICAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGRlbGV0ZSB3ZWJQcm9jZXNzOworICAg
ICAgICAgICAgZGVsZXRlIHdlYlByb2Nlc3NPclNVSURIZWxwZXI7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAotICAgIGlmICghd2ViUHJvY2Vzcy0+d2Fp
dEZvclN0YXJ0ZWQoKSkgeworICAgIGlmICghd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+d2FpdEZv
clN0YXJ0ZWQoKSkgewogICAgICAgICBxRGVidWcoKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IiA8PCBj
b21tYW5kTGluZTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjaWYgT1MoREFSV0lO
KQogICAgICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBjb25uZWN0
b3IpOwogICAgICAgICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgY29ubmVj
dG9yLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwogI2VuZGlmCi0gICAgICAgIGRlbGV0
ZSB3ZWJQcm9jZXNzOworICAgICAgICBkZWxldGUgd2ViUHJvY2Vzc09yU1VJREhlbHBlcjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLQogI2lmIE9TKFVOSVgpCi0gICAgc2V0cHJpb3JpdHkoUFJJ
T19QUk9DRVNTLCB3ZWJQcm9jZXNzLT5waWQoKSwgMTApOworICAgIHNldHByaW9yaXR5KFBSSU9f
UFJPQ0VTUywgd2ViUHJvY2Vzc09yU1VJREhlbHBlci0+cGlkKCksIDEwKTsKICNlbmRpZgotCi0g
ICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hl
cjo6ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2VzcywgdGhpcywgd2ViUHJvY2VzcywgY29ubmVjdG9y
KSk7CisgICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChiaW5kKCZXZWJLaXQ6OlByb2Nlc3NM
YXVuY2hlcjo6ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2VzcywgdGhpcywgd2ViUHJvY2Vzc09yU1VJ
REhlbHBlciwgY29ubmVjdG9yKSk7CiB9CiAKIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5h
dGVQcm9jZXNzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5kZXggMGQ5MTg1Yy4uOWRhM2M2MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi5wcmkKQEAgLTE1LDYgKzE1LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJ
Ui9QbGF0Zm9ybS9Db3JlSVBDIFwKICAgICAkJFNPVVJDRV9ESVIvUGxhdGZvcm0vcXQgXAogICAg
ICQkU09VUkNFX0RJUi9TaGFyZWQgXAorICAgICQkU09VUkNFX0RJUi9TaGFyZWQvbGludXgvU2Fu
ZGJveFByb2Nlc3MgXAogICAgICQkU09VUkNFX0RJUi9TaGFyZWQvQVBJL2MgXAogICAgICQkU09V
UkNFX0RJUi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcyBcCiAgICAgJCRTT1VSQ0VfRElSL1No
YXJlZC9Db3JlSVBDU3VwcG9ydCBcCkBAIC02Myw3ICs2NCw3IEBAIElOQ0xVREVQQVRIICs9IFwK
ICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlIFwKICAgICAkJFNPVVJDRV9ESVIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAgICQkU09VUkNFX0RJ
Ui9XZWJQcm9jZXNzL3F0IFwKLSAgICAkJFNPVVJDRV9ESVIvUGx1Z2luUHJvY2VzcworICAgICQk
U09VUkNFX0RJUi9QbHVnaW5Qcm9jZXNzIFwKIAogIyBUaGUgV2ViS2l0MiBRdCBBUElzIGRlcGVu
ZCBvbiBxd2Via2l0Z2xvYmFsLmgsIHdoaWNoIGxpdmVzIGluIFdlYktpdAogSU5DTFVERVBBVEgg
Kz0gJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViS2l0L3F0L0FwaQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
LnBybwppbmRleCBhNjRmNWQyLi5hODBmMTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwpAQCAtMTEs
NiArMTEsMTAgQEAgREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9iaW4KIAogU09VUkNFUyAr
PSBxdC9NYWluUXQuY3BwCiAKK0lOQ0xVREVQQVRIID0gXAorICAgICQkUFdEL1NoYXJlZC9saW51
eC9TYW5kYm94UHJvY2Vzcy8gXAorICAgICQkSU5DTFVERVBBVEgKKwogUVQgKz0gbmV0d29yayB3
ZWJraXQKIG1hY3g6IFFUICs9IHhtbAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAppbmRleCA4NzU2MjVkLi4wNjQyYTk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKQEAg
LTEsNCArMSw2IEBACiAvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3pl
Z2VkLmh1PgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKICAqCkBAIC0zNCw3ICszNiw5IEBACiAjaW5jbHVkZSA8UVN0cmlu
Z0xpc3Q+CiAjaW5jbHVkZSA8UVVybD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNp
bmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5o
PgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAog
I2lmIFVTRShRVEtJVCkKQEAgLTU3LDYgKzYxLDEwIEBACiBleHRlcm4gIkMiIGtlcm5fcmV0dXJu
X3QgYm9vdHN0cmFwX2xvb2tfdXAyKG1hY2hfcG9ydF90LCBjb25zdCBuYW1lX3QsIG1hY2hfcG9y
dF90KiwgcGlkX3QsIHVpbnQ2NF90KTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFNVSURfU0FOREJP
WF9MSU5VWCkKKyNpbmNsdWRlICJTYW5kYm94RW52aXJvbm1lbnRMaW51eC5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEzOSwx
NCArMTQ3LDc0IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQcm94eSgpCiAgICAgUU5ldHdvcmtQ
cm94eUZhY3Rvcnk6OnNldFVzZVN5c3RlbUNvbmZpZ3VyYXRpb24odHJ1ZSk7CiB9CiAKKyNpZiBF
TkFCTEUoU1VJRF9TQU5EQk9YX0xJTlVYKQorcGlkX3QgY2hyb290TWUoKQoreworICAgIC8vIEdl
dCB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBzb2NrZXRwYWlyLgorICAgIGNoYXIqIHNhbmRi
b3hTb2NrZXREZXNjcmlwdG9yU3RyaW5nID0gZ2V0ZW52KFNBTkRCT1hfREVTQ1JJUFRPUik7Cisg
ICAgaWYgKCFzYW5kYm94U29ja2V0RGVzY3JpcHRvclN0cmluZykKKyAgICAgICAgcmV0dXJuIC0x
OworCisgICAgY2hhciogZmlyc3RJbnZhbGlkQ2hhcmFjdGVyOworICAgIGxvbmcgaW50IHNhbmRi
b3hTb2NrZXREZXNjcmlwdG9yID0gc3RydG9sKHNhbmRib3hTb2NrZXREZXNjcmlwdG9yU3RyaW5n
LCAmZmlyc3RJbnZhbGlkQ2hhcmFjdGVyLCAxMCk7CisgICAgaWYgKCpmaXJzdEludmFsaWRDaGFy
YWN0ZXIgIT0gJ1wwJykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBzb2NrZXQgZGVz
Y3JpcHRvciBvZiBzYW5kYm94IGlzIG5vdCB2YWxpZC5cbiIpOworICAgICAgICByZXR1cm4gLTE7
CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBQSUQgb2YgdGhlIHNldHVpZCBoZWxwZXIuCisgICAg
Y2hhciogc2FuZGJveEhlbHBlclBJRFN0cmluZyA9IGdldGVudihTQU5EQk9YX0hFTFBFUl9QSUQp
OworICAgIHBpZF90IHNhbmRib3hIZWxwZXJQSUQgPSAtMTsKKworICAgIC8vIElmIG5vIFBJRCBp
cyBhdmFpbGFibGUsIHRoZSBkZWZhdWx0IG9mIC0xIHdpbGwgZG8uCisgICAgaWYgKHNhbmRib3hI
ZWxwZXJQSURTdHJpbmcpIHsKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBzYW5kYm94SGVs
cGVyUElEID0gc3RydG9sKHNhbmRib3hIZWxwZXJQSURTdHJpbmcsICZmaXJzdEludmFsaWRDaGFy
YWN0ZXIsIDEwKTsKKyAgICAgICAgaWYgKCpmaXJzdEludmFsaWRDaGFyYWN0ZXIgIT0gJ1wwJykg
eworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJUaGUgUElEIG9mIHNhbmRib3ggaXMgbm90
IHZhbGlkLlxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBTZW5kIHRoZSBjaHJvb3RNZSBtZXNzYWdlIHRvIHRoZSBoZWxwZXIuCisgICAgY2hh
ciBzYW5kYm94TWVNZXNzYWdlID0gTVNHX0NIUk9PVE1FOworICAgIHNzaXplX3QgbnVtYmVyT2ZD
aGFyYWN0ZXJzID0gd3JpdGUoc2FuZGJveFNvY2tldERlc2NyaXB0b3IsICZzYW5kYm94TWVNZXNz
YWdlLCAxKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFyYWN0ZXJzICE9IDEpIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDaHJvb3RNZSBtc2cgZmFpbGVkIHRvIHdyaXRlOiAlcy5cbiIsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvLyBSZWFkIHRo
ZSBhY2tub3dsZWRnZW1lbnQgbWVzc2FnZSBmcm9tIHRoZSBoZWxwZXIuCisgICAgbnVtYmVyT2ZD
aGFyYWN0ZXJzID0gcmVhZChzYW5kYm94U29ja2V0RGVzY3JpcHRvciwgJnNhbmRib3hNZU1lc3Nh
Z2UsIDEpOworICAgIGlmIChudW1iZXJPZkNoYXJhY3RlcnMgIT0gMSB8fCBzYW5kYm94TWVNZXNz
YWdlICE9IE1TR19DSFJPT1RFRCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0
IHJlYWQgdGhlIGNvbmZpcm1hdGlvbiBtZXNzYWdlOiAlcy5cbiIsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY2xvc2Uoc2FuZGJveFNvY2tldERlc2Ny
aXB0b3IpOworCisgICAgLy8gV2FpdCBmb3IgdGhlIGhlbHBlciBwcm9jZXNzLgorICAgIGludCBl
eHBlY3RlZFBJRCA9IHdhaXRwaWQoc2FuZGJveEhlbHBlclBJRCwgMCwgMCk7CisgICAgaWYgKGV4
cGVjdGVkUElEICE9IC0xICYmIChzYW5kYm94SGVscGVyUElEID09IC0xIHx8IGV4cGVjdGVkUElE
ID09IHNhbmRib3hIZWxwZXJQSUQpKQorICAgICAgICByZXR1cm4gZXhwZWN0ZWRQSUQ7CisgICAg
ZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCB3YWl0IGZvciB0aGUgaGVscGVyIHByb2Nlc3M6ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIHJldHVybiAtMTsKK30KKyNlbmRpZgorCiBRX0RF
Q0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpblF0KFFHdWlBcHBsaWNhdGlvbiogYXBwKQogewor
I2lmIEVOQUJMRShTVUlEX1NBTkRCT1hfTElOVVgpCisgICAgcGlkX3QgaGVscGVyID0gY2hyb290
TWUoKTsKKyAgICBpZiAoaGVscGVyID09IC0xKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
QXNraW5nIGZvciBjaHJvb3QgZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9
CisjZW5kaWYKICAgICBpbml0aWFsaXplUHJveHkoKTsKLQogICAgIEpTQzo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29w
Ojppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAgICAKKwogI2lmIFVTRShRVEtJVCkKICAgICBJ
bml0V2ViQ29yZVN5c3RlbUludGVyZmFjZUZvcldLMigpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGJiYTI4Yi4uMzNhNTI5MCAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDEzLTAxLTIyICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAd2Via2l0Lm9yZz4K
KworICAgICAgICBbV0syXSBQdXR0aW5nIFF0V2ViUHJvY2VzcyBpbnRvIGEgY2hyb290ZWQgc2Fu
ZGJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAw
MDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24gYW5kICBab2x0YW4gSGVy
Y3plZy4KKworICAgICAgICBBZGQgZmVhdHVyZSBmbGFnIGZvciBzdWlkIHNhbmRib3ggaW4gbGlu
dXguCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG06CisKIDIw
MTMtMDEtMjIgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF0gQWRkcyBBY2Nlc3NpYmlsaXR5IHN1cHBvcnQgdG8gd2sxCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvRmVhdHVyZUxpc3QucG0KaW5kZXggZTE0NjVmOC4uYTZjY2U2NSAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMTI4LDYgKzEyOCw3IEBAIG15ICgK
ICAgICAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAgICAgJHNxbERhdGFiYXNlU3VwcG9ydCwKICAg
ICAkc3R5bGVTY29wZWRTdXBwb3J0LAorICAgICRzdWlkTGludXhTYW5kYm94LAogICAgICRzdmdE
T01PYmpDQmluZGluZ3NTdXBwb3J0LAogICAgICRzdmdGb250c1N1cHBvcnQsCiAgICAgJHN2Z1N1
cHBvcnQsCkBAIC00MDEsNiArNDAyLDkgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9u
ID0+ICJzdHlsZS1zY29wZWQiLCBkZXNjID0+ICJUb2dnbGUgU3R5bGUgU2NvcGVkIHN1cHBvcnQi
LAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1RZTEVfU0NPUEVEIiwgZGVmYXVsdCA9PiAoaXNC
bGFja0JlcnJ5KCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkc3R5bGVTY29wZWRTdXBwb3J0IH0s
CiAKKyAgICB7IG9wdGlvbiA9PiAic3VpZC1saW51eC1zYW5kYm94IiwgZGVzYyA9PiAiVG9nZ2xl
IHN1aWQgc2FuZGJveCBmb3IgbGludXgiLAorICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1VJRF9T
QU5EQk9YX0xJTlVYIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJHN1aWRMaW51eFNhbmRib3gg
fSwKKwogICAgIHsgb3B0aW9uID0+ICJzdmciLCBkZXNjID0+ICJUb2dnbGUgU1ZHIHN1cHBvcnQi
LAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfU1ZHIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBc
JHN2Z1N1cHBvcnQgfSwKIAotLSAKMS43LjkuNQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>