<?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>27425</bug_id>
          
          <creation_ts>2009-07-19 13:20:57 -0700</creation_ts>
          <short_desc>adding auto-generator support for GDOMHTMLElementWrapperFactory[.cpp/.h]</short_desc>
          <delta_ts>2009-08-12 13:56:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>16401</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Luke Kenneth Casson Leighton">lkcl</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>manyoso</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133009</commentid>
    <comment_count>0</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-19 13:20:57 -0700</bug_when>
    <thetext>this patch adds GDOMHTMLElementWrapperFactory which will eventually be replaced by an auto-generated set of matched files.  one key reason for not doing that right now is because exception support has been ripped out when compared to the file from which it is derived (JSHTMLElementWrapperFactory.[cpp/h].  another is simply time.
the files are being added under an agreement suggested by david to split #16401 into separate patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133010</commentid>
    <comment_count>1</comment_count>
      <attachid>33052</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-19 13:28:49 -0700</bug_when>
    <thetext>Created attachment 33052
adds gdomhtmlelementwrapperfactory.

these files have review comments on it (one key reason why they&apos;re submitted under a separate bugreport).

from memory, the questions are:

* why is there &quot;shouting&quot; in it?

  answer: because the original files, JSHTMLElementWrapperFactory.[cpp,h] from which they&apos;re copied, also have &quot;shouting&quot; in them.

* why is this not auto-generated?

  answer: because the auto-generator is written in a bug-ugly language called perl, and it was easier to do a first revision by cut/paste using the advanced editing features of vim than it was to mind-bend to yet another perl script [i did try].  also, the exception handling has been completely ripped out of CodeGeneratorGObject which makes this file quite different from its origins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133344</commentid>
    <comment_count>2</comment_count>
      <attachid>33052</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-20 19:51:39 -0700</bug_when>
    <thetext>Comment on attachment 33052
adds gdomhtmlelementwrapperfactory.

&gt; +2008-11-30  lkcl  &lt;lkcl@lkcl.net&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        WARNING: NO TEST CASES ADDED OR CHANGED
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=27425
&gt; +
&gt; +        * bindings/gdom/GDOMHTMLElementWrapperFactory.cpp: Added.  Copied from the auto-generated JSHTMLElementWrapperFactory.cpp 
&gt; +        * bindings/gdom/GDOMHTMLElementWrapperFactory.h:  Added.  Copied from the auto-generated JSHTMLElementWrapperFactory.h

You are missing a description of what this patch actually does.  Please fill out some description for what this patch is meant to provide.

&gt; +/* Note: This file is derived by hand from an automatically generated
&gt; + file.
&gt; + 
&gt; + Keeping it up-to-date could potentially be done by adding a
&gt; + make_names.pl generator, or by writing a separate generater which
&gt; + takes JSHTMLElementWrapperFactory.h as input.
&gt; +*/

Minor nit: s/generater/generator/

Regular nit: why is this generated file to be landed?  If it is to be updated in the future with a script, then why land it in the tree as static?  A placeholder until said script is written?

&gt; +
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#include &quot;gdom/GdomNode.h&quot;
&gt; +#include &quot;GDOMHTMLElementWrapperFactory.h&quot;

Order of includes is wrong.   See the WebKit coding style guidelines for order of includes.

There a lot of commented out pieces of code.  We generally don&apos;t land patches with commented out pieces of code.

Beyond that, without a more detailed Changelog it makes it hard to review.

r- for the above reasons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133518</commentid>
    <comment_count>3</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-21 10:56:20 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 33052 [details])
&gt; &gt; +2008-11-30  lkcl  &lt;lkcl@lkcl.net&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        WARNING: NO TEST CASES ADDED OR CHANGED
&gt; &gt; +
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=27425
&gt; &gt; +
&gt; &gt; +        * bindings/gdom/GDOMHTMLElementWrapperFactory.cpp: Added.  Copied from the auto-generated JSHTMLElementWrapperFactory.cpp 
&gt; &gt; +        * bindings/gdom/GDOMHTMLElementWrapperFactory.h:  Added.  Copied from the auto-generated JSHTMLElementWrapperFactory.h
&gt; 
&gt; You are missing a description of what this patch actually does.  Please fill
&gt; out some description for what this patch is meant to provide.

 ahh, ok.  done.

&gt; &gt; +/* Note: This file is derived by hand from an automatically generated
&gt; &gt; + file.
&gt; &gt; + 
&gt; &gt; + Keeping it up-to-date could potentially be done by adding a
&gt; &gt; + make_names.pl generator, or by writing a separate generater which
&gt; &gt; + takes JSHTMLElementWrapperFactory.h as input.
&gt; &gt; +*/
&gt; 
&gt; Minor nit: s/generater/generator/

 duh.
 
&gt; Regular nit: why is this generated file to be landed?  If it is to be updated
&gt; in the future with a script, then why land it in the tree as static?  A
&gt; placeholder until said script is written?

 basically, yes.  i&apos;m not a perl-ite.  nobody&apos;s yet volunteered to do the
 script yet, so the copied-from-autogenerated-javascript-version will have
 to do.  and it does actually work.

 also, there&apos;s some extra work that&apos;s needed (planned) - adding back in
 ExecState, which i removed (daftly) to simplify the gobject bindings.

 so i&apos;ve delayed both because it&apos;s .... just.... too much extra work,
 and what&apos;s here now &quot;does the job&quot;.


&gt; &gt; +#include &quot;config.h&quot;
&gt; &gt; +
&gt; &gt; +#include &quot;gdom/GdomNode.h&quot;
&gt; &gt; +#include &quot;GDOMHTMLElementWrapperFactory.h&quot;
&gt; 
&gt; Order of includes is wrong.

 drat, sorry. ah... ahh.... what&apos;s that doing in there?  that&apos;s
 from GDOMBinding.cpp ahh oops sorry, thank you for spotting that
 but GDOMBinding.cpp shouldn&apos;t be in this patch!

 i&apos;ve corrected GDOMBinding.cpp of course, so thank you for that,
 but it won&apos;t be in the next revision.


&gt; There a lot of commented out pieces of code.  We generally don&apos;t land patches
&gt; with commented out pieces of code.

 ack.  well, that will be for GDOMBinding.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133520</commentid>
    <comment_count>4</comment_count>
      <attachid>33188</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-21 11:01:18 -0700</bug_when>
    <thetext>Created attachment 33188
adds gdomhtmlelementwrapperfactory with better ChangeLog

revised patch, updated ChangeLog explaining why it&apos;s not autogenerated at the moment etc. corrected spelling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136353</commentid>
    <comment_count>5</comment_count>
      <attachid>33188</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-31 19:46:07 -0700</bug_when>
    <thetext>Comment on attachment 33188
adds gdomhtmlelementwrapperfactory with better ChangeLog

We don&apos;t generally check-in autogenerated files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136354</commentid>
    <comment_count>6</comment_count>
      <attachid>33188</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-31 19:47:28 -0700</bug_when>
    <thetext>Comment on attachment 33188
adds gdomhtmlelementwrapperfactory with better ChangeLog

Maybe I&apos;m biased (I wrote much of this particular generator), but I really doubt it would be difficult to bend it to your needs.  Even if it&apos;s written in perl. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136355</commentid>
    <comment_count>7</comment_count>
      <attachid>33188</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-31 19:51:08 -0700</bug_when>
    <thetext>Comment on attachment 33188
adds gdomhtmlelementwrapperfactory with better ChangeLog

It&apos;s not always required to do things the &quot;right way&quot; the first time, but in this instance, I think it&apos;s better to just do this right (modifying the generator) than checking in manual files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136623</commentid>
    <comment_count>8</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-03 06:41:35 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 33188 [details])
&gt; Maybe I&apos;m biased (I wrote much of this particular generator), but I really
&gt; doubt it would be difficult to bend it to your needs.  Even if it&apos;s written in
&gt; perl. ;)

 mmrmmmrmmm *grumble* *grumble* :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136629</commentid>
    <comment_count>9</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-03 07:33:07 -0700</bug_when>
    <thetext>ok.  done, but.... eurgh, i can&apos;t say it&apos;s much of an improvement.  certainly not in code size, i just cut/paste make_names.pl and called it make_gdom_names.pl - that&apos;s 1000 lines of perl, right there.  a diff -u make_names.pl make_gdom_names.pl might be more useful / indicative of what&apos;s been done, but hey...

the only advantage i can see is that some elements (video etc.) have been added, which weren&apos;t in the non-auto-generated file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136634</commentid>
    <comment_count>10</comment_count>
      <attachid>33977</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-03 08:23:25 -0700</bug_when>
    <thetext>Created attachment 33977
blatant cut/paste copy of make_names.pl

it&apos;s terrible, it&apos;s hacked, it does the job - it&apos;s perl.  i haven&apos;t gone through it to remove functions to create HTMLNames.h,cpp - i just... *backing away from the keyboard*... :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136730</commentid>
    <comment_count>11</comment_count>
      <attachid>33977</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-03 11:58:42 -0700</bug_when>
    <thetext>Comment on attachment 33977
blatant cut/paste copy of make_names.pl

It&apos;s unclear to me why we can&apos;t just modify the existing make_names.pl instead of copying it?  The whole point of my previous r- was that you were proposing checking in copy/paste code.  Now you&apos;re doing so again except in perl form. :)  Yes, make_names.pl is ugly.  You should feel free to re-write it in python if you like, but I think that would be a bit large of an undertaking.

If it would be a huge diff to make_names.pl to teach it about gdom then maybe we should just check in a separate script.  But I still think that&apos;s a mistake.

Checking in a hack like this is analogous to taking out a loan of money from a bank.  The loan will require continuous interest payments (keeping track of changes across the forked files) as well as eventually someone will have to re-pay the principle by un-forking the files!  You might not be the one who ends up paying that cost... so we as a project don&apos;t want to let you take out such a loan. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136753</commentid>
    <comment_count>12</comment_count>
      <attachid>33999</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-03 13:18:45 -0700</bug_when>
    <thetext>Created attachment 33999
diff for eric between make_names.pl an make_gdom_names

not a lot. 200 lines.
worth giving it a shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136755</commentid>
    <comment_count>13</comment_count>
      <attachid>33999</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-03 13:27:42 -0700</bug_when>
    <thetext>Comment on attachment 33999
diff for eric between make_names.pl an make_gdom_names

This totally seems doable.  It will be a bunch of re-working yes, but I think the right approach is to teach make_names how to make ElementWrapperFactories for languages other than JS.  Eventually I expect V8 will want to do something similar (if they don&apos;t already).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136762</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-03 13:37:36 -0700</bug_when>
    <thetext>It looks like Chromium has already re-written at least part of this in python:
http://src.chromium.org/viewvc/chrome/trunk/src/webkit/build/action_makenames.py?view=markup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136797</commentid>
    <comment_count>15</comment_count>
      <attachid>34008</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-03 15:09:34 -0700</bug_when>
    <thetext>Created attachment 34008
add --bindingType to make_names.pl

ouch.  300 line patch on a 1000-line file.  oh well.
confirmed that the output leaves {JS/GDOM}{SVG/HTML}ElementWrapperFactory.{cpp/h} the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136816</commentid>
    <comment_count>16</comment_count>
      <attachid>34008</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-03 15:54:58 -0700</bug_when>
    <thetext>Comment on attachment 34008
add --bindingType to make_names.pl

This is *much* better!

1.  I think we need to validate that bindingType is either JS or GDOM and call die when it&apos;s not one of those.

Why do we have this code at all?
 if ($binding eq &apos;JS&apos;) {
 78     printNamesHeaderFile(&quot;$namesBasePath.h&quot;);
 79     printNamesCppFile(&quot;$namesBasePath.cpp&quot;);
 80 }

Why is HTMLName.cpp compiled by inclusion in the element factory wrapper? That seems wrong.  We should at least add a FIXME there.

Why are we skipping DATAGRID?
612         # skip DATAGRID for now
 613         next if ($conditional eq &apos;DATAGRID&apos;);

I think there has to be a better way to do it than 3-times copy/paste of that code.

We should be checking explicitly for GDOM, but I don&apos;t think this DATAGRID hack belongs here:
10         if ($binding ne &apos;JS&apos;) {
 911             # skip DATAGRID for now
 912             next if ($conditional eq &apos;DATAGRID&apos;);
 913         }

This block should probably be a subroutine:
 } else {
 934                 print F &lt;&lt;END
 935 static gpointer 

again here:
53             } else {
 954                 print F &lt;&lt;END
 955 static gpointer 

and it shoudl be elif &apos;GDOM&apos;, not else.

AGain, checking for GDOM, not ne &apos;JS&apos;
 982     if ($binding ne &apos;JS&apos;) {

Again, probably should be subroutines:
11     } else {
 1012         print F &lt;&lt;END
 1013 #include &quot;CString.h&quot;

You don&apos;t have to abstract the existing JS stuff, but if you put the gdom stuff into nice little subroutines, someone else can come back and fix the JS stuff later (or we&apos;ll fix it when we move to a python script in the future).

There are much cleaner ways to do this DATAGRID hack.  I&apos;m still not sure why it&apos;s needed:
1052         if ($binding ne &apos;JS&apos;) {
 1053             # skip DATAGRID for now
 1054             next if ($conditional eq &apos;DATAGRID&apos;);
 1055         }

In general this looks great though! r- mostly for the datagrid hack.  I would much prefer that some of this is turned into subroutines instead of inline ifdefs.  Also we need to explicitly check for GDOM, it can&apos;t be the &quot;other default&quot;. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136819</commentid>
    <comment_count>17</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-03 15:59:04 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 34008 [details])
&gt; This is *much* better!

 goood :)
 
&gt; Why is HTMLName.cpp compiled by inclusion in the element factory wrapper? That
&gt; seems wrong.  We should at least add a FIXME there.
&gt; 
&gt; Why are we skipping DATAGRID?
&gt; 612         # skip DATAGRID for now
&gt;  613         next if ($conditional eq &apos;DATAGRID&apos;);

 because i don&apos;t have Gdom headers for anything that&apos;s DATAGRID based.

&gt; In general this looks great though! r- mostly for the datagrid hack.

 ack.

&gt;  I would
&gt; much prefer that some of this is turned into subroutines instead of inline
&gt; ifdefs.  Also we need to explicitly check for GDOM, it can&apos;t be the &quot;other
&gt; default&quot;. :)

 ack.

 end-of-day.  will look at these again tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136823</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-03 16:01:59 -0700</bug_when>
    <thetext>Thank you for your perseverance on this issue Luke.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136975</commentid>
    <comment_count>19</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-04 07:20:20 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 34008 [details] [details])
&gt; &gt; This is *much* better!
&gt; 
&gt;  goood :)
&gt; 
&gt; &gt; Why is HTMLName.cpp compiled by inclusion in the element factory wrapper? That
&gt; &gt; seems wrong.  We should at least add a FIXME there.
&gt; &gt; 
&gt; &gt; Why are we skipping DATAGRID?
&gt; &gt; 612         # skip DATAGRID for now
&gt; &gt;  613         next if ($conditional eq &apos;DATAGRID&apos;);
&gt; 
&gt;  because i don&apos;t have Gdom headers for anything that&apos;s DATAGRID based.

 ok - i gave this a shot - getting the CodeGeneratorGObject.pm to auto-generate GdomHTMLDataGridElement.cpp,h etc. and they depend on the existence of GdomDataGridDataSource.cpp,h.

 these files do not exist.

 and... they&apos;re not auto-generated, they must be created manually.

 i&apos;m done with extra workload - adding extra functionality - until this series of patches is in, or unless there&apos;s a damn good reason.

 so, that means that i&apos;m not willing to create GdomDataGridDataSource at this time (from looking at WebCore/bindings/JS/JSDataGridDataSource.cpp,h).

 therefore, to reduce workload, a small and simple hack is needed, to skip anything that is #ifdef DATAGRID.

 this simple hack will still allow people to create JS-based DATAGRID bindings, and a working web browser, but they will just not have gobject bindings to datagrid.

 DATAGRID can be looked at _after_ the series of gobject patches are landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136978</commentid>
    <comment_count>20</comment_count>
      <attachid>34060</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-04 07:38:05 -0700</bug_when>
    <thetext>Created attachment 34060
answers review comments.  

ok explanation for DATAGRID skip is in previous comment: summary - too much knock-on effect / consequences / increase in workload.  i made JS the default so that it was not necessary to modify GNUmakefile.am.  necessary modifications to GNUmakefile.am now included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137004</commentid>
    <comment_count>21</comment_count>
      <attachid>34060</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-04 08:51:56 -0700</bug_when>
    <thetext>Comment on attachment 34060
answers review comments.  

I wasn&apos;t clear, sorry.  I agree that JS should be default.  I just wanted all the places where you assumed !JS was Gdom to turn into explicit GDom checks.

passing no --bindingType can/should default to JS.  Otherwise you&apos;d have to change lots more files here. :)

327         if ($binding eq &apos;Gdom&apos;) {
 328             # skip DATAGRID for now
 329             next if ($conditional eq &apos;DATAGRID&apos;);
 330         }

Those can all go away if you just remove DATAGRID from the list of tags at the start, no?  Removing it once instead of skipping it in every for loop seems like a cleaner solution, or?  Also, don&apos;t you all have ENABLE_DATAGRID off anyway?  Won&apos;t make_names just print #defines around all the DATAGRID stuff which will be compiled out?

$F really should have a better name, per our style guidelines: http://webkit.org/coding/coding-style.html.  Since you&apos;re just moving existing code, I guess it&apos;s OK as is though.

So the GNUMakefile.am changes are fine, but not required if you restore the JS default.

This in general looks great.  I think we still can fix the DATAGRID with a cleaner hack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137107</commentid>
    <comment_count>22</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-04 13:27:51 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 34060 [details])
&gt; I wasn&apos;t clear, sorry.  I agree that JS should be default.  I just wanted all
&gt; the places where you assumed !JS was Gdom to turn into explicit GDom checks.

 done.  yep.

&gt; passing no --bindingType can/should default to JS.  Otherwise you&apos;d have to
&gt; change lots more files here. :)

 ack.  whew.

&gt; 327         if ($binding eq &apos;Gdom&apos;) {
&gt;  328             # skip DATAGRID for now
&gt;  329             next if ($conditional eq &apos;DATAGRID&apos;);
&gt;  330         }
&gt; 
&gt; Those can all go away if you just remove DATAGRID from the list of tags at the
&gt; start, no? 

 yes - good idea, but my perl skills don&apos;t extend to doing that.

 cut-and-paste if it&apos;s already in the same perl file (or in any other one i&apos;ve encountered, which aren&apos;t many) i can manage.  i even managed to look up how to do includes recently...

 ... but that&apos;s about it, really.  the only reason CodeGeneratorGObject.pm works is because the other CodeGenerator*.pm files were complex enough to contain everything that i needed.


&gt; Removing it once instead of skipping it in every for loop seems
&gt; like a cleaner solution, or?  Also, don&apos;t you all have ENABLE_DATAGRID off
&gt; anyway? 

 no - it appears to be on by default.  and, anyone enabling it will end up with a compile-time error, because the CodeGeneratorGObject.pm isn&apos;t equipped to auto-generate GdomHTMLDataGrid{Row,Col,Element}.{cpp,h}, and neither is the infrastructure there to support it.

&gt; Won&apos;t make_names just print #defines around all the DATAGRID stuff
&gt; which will be compiled out?

 yes - but then suppose someone _does_ want JS-based DATAGRID support, and doesn&apos;t care about GObject or doesn&apos;t care about DATAGRID not being in GObject bindings?


&gt; $F really should have a better name, per our style guidelines:
&gt; http://webkit.org/coding/coding-style.html.  Since you&apos;re just moving existing
&gt; code, I guess it&apos;s OK as is though.

 ack.  whew.
 
&gt; So the GNUMakefile.am changes are fine, but not required if you restore the JS
&gt; default.

 going.  prefer not to hack GNUmakefile.am right now, i have a number of other mods to it that i&apos;m keeping track of.
 
&gt; This in general looks great.  I think we still can fix the DATAGRID with a
&gt; cleaner hack.

 not with my level of perl skills, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137109</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-04 13:35:09 -0700</bug_when>
    <thetext>Is DATAGRID off for the gtk port?

What happens when you try to generate DATAGRID files?  Why are they different from other HTML elements?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137112</commentid>
    <comment_count>24</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-04 13:40:56 -0700</bug_when>
    <thetext>&gt; &gt; 327         if ($binding eq &apos;Gdom&apos;) {
&gt; &gt;  328             # skip DATAGRID for now
&gt; &gt;  329             next if ($conditional eq &apos;DATAGRID&apos;);
&gt; &gt;  330         }
&gt; &gt; 
&gt; &gt; Those can all go away if you just remove DATAGRID from the list of tags at the
&gt; &gt; start, no? 
&gt; 
&gt;  yes - good idea, but my perl skills don&apos;t extend to doing that.

 looking at tagHandler, it looks like this gets called several times per tag
 e.g. once for interfaceName, another time for conditional.

 so... you would only discover that you shouldn&apos;t _have_ the tag _after_
 it&apos;s been created (once you encounter conditional = &apos;DATAGRID&apos;.

 which means iterating, after the fact, over $tags and re-creating $realtags excluding anything conditional=DATAGRID.

 ... yuk?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137113</commentid>
    <comment_count>25</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-04 13:47:40 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Is DATAGRID off for the gtk port?
&gt; 
&gt; What happens when you try to generate DATAGRID files?  Why are they different
&gt; from other HTML elements?

 they inherit from / have-as-members a base class / DOM object which is neither auto-generated nor already existing in the Gdom* codebase: DataGridDataSource.

 in the JS case, this has been catered for, in the past ten months (since the original work was done in nov 2008) by creating WebCore/bindings/js/JSDataGridDataSource.{cpp,h}, and by adding WebCore/bindings/js/JSDataGridColumnListCustom.cpp and much more.

none of which i want to duplicate / get involved with, right now.

all of this is one of the key reasons behind submitting a static manually-generated file.

at least then, as the rest of webkit continues to move forward, leaving the GObject bindings behind, i don&apos;t have so much work to do to keep up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137399</commentid>
    <comment_count>26</comment_count>
      <attachid>34164</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-05 13:06:08 -0700</bug_when>
    <thetext>Created attachment 34164
tidier workaround for skipping DataGrid

hiya eric, ok what do you think of this, i put in an explanation and a FIXME to say it&apos;s got to go at some point, but the main thing is that the skip test is just a single function, not a dog&apos;s dinner cut/paste job.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137401</commentid>
    <comment_count>27</comment_count>
      <attachid>34164</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-05 13:11:28 -0700</bug_when>
    <thetext>Comment on attachment 34164
tidier workaround for skipping DataGrid

OK, looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137549</commentid>
    <comment_count>28</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-06 01:28:37 -0700</bug_when>
    <thetext>great.  will add a TODO for #ifdef DATAGRID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137817</commentid>
    <comment_count>29</comment_count>
      <attachid>34164</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-07 00:53:44 -0700</bug_when>
    <thetext>Comment on attachment 34164
tidier workaround for skipping DataGrid

This patch fails to build:

perl -I WebCore/bindings/scripts WebCore/dom/make_names.pl --tags WebCore/html/HTMLTagNames.in --attrs WebCore/html/HTMLAttributeNames.in --factory --wrapperFactory --extraDefines &quot; ENABLE_VIDEO=1 ENABLE_RUBY=1&quot;
&quot;my&quot; variable $name masks earlier declaration in same scope at WebCore/dom/make_names.pl line 540.
&quot;my&quot; variable $name masks earlier declaration in same scope at WebCore/dom/make_names.pl line 551.
&quot;my&quot; variable $name masks earlier declaration in same scope at WebCore/dom/make_names.pl line 556.
&quot;my&quot; variable $name masks earlier declaration in same scope at WebCore/dom/make_names.pl line 540.
&quot;my&quot; variable $name masks earlier declaration in same scope at WebCore/dom/make_names.pl line 551.
&quot;my&quot; variable $name masks earlier declaration in same scope at WebCore/dom/make_names.pl line 556.
&quot;my&quot; variable $name masks earlier declaration in same scope at WebCore/dom/make_names.pl line 674.
&quot;my&quot; variable $name masks earlier declaration in same scope at WebCore/dom/make_names.pl line 674.
Global symbol &quot;%tag&quot; requires explicit package name at WebCore/dom/make_names.pl line 317.
syntax error at WebCore/dom/make_names.pl line 345, near &quot;);&quot;
syntax error at WebCore/dom/make_names.pl line 380, near &quot;);&quot;
syntax error at WebCore/dom/make_names.pl line 610, near &quot;);&quot;
syntax error at WebCore/dom/make_names.pl line 625, near &quot;);&quot;
syntax error at WebCore/dom/make_names.pl line 922, near &quot;);&quot;
Global symbol &quot;$tagName&quot; requires explicit package name at WebCore/dom/make_names.pl line 1084.
syntax error at WebCore/dom/make_names.pl line 1084, near &quot;);&quot;
Execution of WebCore/dom/make_names.pl aborted due to compilation errors.
Global symbol &quot;%tag&quot; requires explicit package name at WebCore/dom/make_names.pl line 317.
syntax error at WebCore/dom/make_names.pl line 345, near &quot;);&quot;
syntax error at WebCore/dom/make_names.pl line 380, near &quot;);&quot;
syntax error at WebCore/dom/make_names.pl line 610, near &quot;);&quot;
syntax error at WebCore/dom/make_names.pl line 625, near &quot;);&quot;
syntax error at WebCore/dom/make_names.pl line 922, near &quot;);&quot;
Global symbol &quot;$tagName&quot; requires explicit package name at WebCore/dom/make_names.pl line 1084.
syntax error at WebCore/dom/make_names.pl line 1084, near &quot;);&quot;
Execution of WebCore/dom/make_names.pl aborted due to compilation errors.
make: *** [HTMLNames.cpp] Error 255
make: *** Waiting for unfinished jobs....
make: *** [HTMLElementFactory.cpp] Error 255</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137835</commentid>
    <comment_count>30</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 02:19:15 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; syntax error at WebCore/dom/make_names.pl line 345, near &quot;);&quot;
&gt; syntax error at WebCore/dom/make_names.pl line 380, near &quot;);&quot;
&gt; syntax error at WebCore/dom/make_names.pl line 610, near &quot;);&quot;
&gt; syntax error at WebCore/dom/make_names.pl line 625, near &quot;);&quot;
&gt; syntax error at WebCore/dom/make_names.pl line 922, near &quot;);&quot;

 nuts.  yep.  missed out a bracket.

 sorry about that - late night.  missed out a compile-test before submitting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137836</commentid>
    <comment_count>31</comment_count>
      <attachid>34262</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 02:22:15 -0700</bug_when>
    <thetext>Created attachment 34262
version that works.

sooorryy, eric, andrew.  this version i&apos;ve double-checked this time, and also confirmed that the output it auto-generates is identical (JS{HTML,SVG}ElementWrapperFactory.cpp,h)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137888</commentid>
    <comment_count>32</comment_count>
      <attachid>34262</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 08:18:36 -0700</bug_when>
    <thetext>Comment on attachment 34262
version that works.

Still looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138247</commentid>
    <comment_count>33</comment_count>
      <attachid>34262</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-07 17:58:52 -0700</bug_when>
    <thetext>Comment on attachment 34262
version that works.

commit-queue can&apos;t land this because the ChangeLog entry isn&apos;t at the top of the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138255</commentid>
    <comment_count>34</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 18:25:57 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 34262 [details])
&gt; commit-queue can&apos;t land this because the ChangeLog entry isn&apos;t at the top of
&gt; the file.

 i&apos;m manually maintaining 15 separate patches to deal with this functionality, and that&apos;s about to go up to about 25 very shortly.

 in order to stop the patches conflicting, i&apos;m interspersing the ChangeLog entries at different points, so that the [currently] 15 entries don&apos;t munge into one big globular commit.

 can you simply move the entry to the top?

 do you have a script which does that, already, surely?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138676</commentid>
    <comment_count>35</comment_count>
      <attachid>34472</attachid>
    <who name="Gour">gour</who>
    <bug_when>2009-08-10 08:22:06 -0700</bug_when>
    <thetext>Created attachment 34472
uploaded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139500</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 13:29:00 -0700</bug_when>
    <thetext>Why does hte ChangeLog diff have no context?  Also you should obsolete old patches if you&apos;re posting a new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139518</commentid>
    <comment_count>37</comment_count>
      <attachid>34472</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 13:46:25 -0700</bug_when>
    <thetext>Comment on attachment 34472
uploaded

See my comments in the mail to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139520</commentid>
    <comment_count>38</comment_count>
      <attachid>34262</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-08-12 13:53:25 -0700</bug_when>
    <thetext>Comment on attachment 34262
version that works.

&gt; +#die &quot;You must specify a --bindingType &lt;type&gt; e.g. Gdom or JS&quot; unless (length($binding));
&gt; +

We don&apos;t land commented-out code.

&gt; +# FIXME: make_names is being utilised for six different purposes,
&gt; +# with generation of HTMLNames.cpp/h being done at the same time
&gt; +# as the JS bindings wrapper factories.

It&apos;s not clear how this comment relates to the code around it.

&gt; +# FIXME: this is here because the gobject bindings were created in
&gt; +# november 2008, when #ifdef DATAGRID did not exist.  to avoid
&gt; +# significant extra work in getting the gobject bindings landed,
&gt; +# and to also ensure that webkit-gtk will still compile even when
&gt; +# DATAGRID is enabled, this workaround skips the #include
&gt; +# of headers which the CodeGeneratorGObject.pm does not yet create.

Rather than adding a hack like this to the script we should just fix the related issues.

&gt; @@ -313,6 +342,8 @@
&gt;  
&gt;          $uniqueTags{$interfaceName} = &apos;1&apos;;
&gt;  
&gt; +        next if (temporaryWorkaroundSkipTag($tagName));
&gt; +

There are redundant braces here.

&gt;          my $conditional = $tags{$tagName}{&quot;conditional&quot;};
&gt;          if ($conditional) {
&gt;              my $conditionalString = &quot;ENABLE(&quot; . join(&quot;) &amp;&amp; ENABLE(&quot;, split(/&amp;/, $conditional)) . &quot;)&quot;;
&gt; @@ -346,6 +377,8 @@
&gt;  
&gt;      for my $tagName (sort keys %tagConstructorMap) {
&gt;  
&gt; +        next if (temporaryWorkaroundSkipTag($tagName));
&gt; +

And here.  And in other similar places.

&gt; +sub printWrapperFunctionGdomInterface
&gt; +{
&gt; +    my $F = shift;
&gt; +    my $JSInterfaceName = shift;

This seems like a poor choice of variable name.

&gt; +            } 
&gt; +            if ($binding eq &apos;Gdom&apos;) {
&gt; +                printWrapperFunctionGdomInterface($F, $JSInterfaceName);
&gt; +            }

As does this.

&gt; +            if ($binding eq &apos;Gdom&apos;) {
&gt; +                printWrapperFunctionGdomInterface($F, $JSInterfaceName);
&gt; +            }
&gt;          }


In general I don&apos;t think that a bunch of &quot;if ($binding eq &apos;Foo&apos;)&quot; is a good way to structure this code.  Given the number of issues I&apos;ve mentioned so far I&apos;m marking this as r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139523</commentid>
    <comment_count>39</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 13:56:54 -0700</bug_when>
    <thetext>Given the history and controversy surrounding this bug, I am closing it, and I recommend someone wishing to continue with this work start again with a new bug.  See my email to webkit-dev entitled &quot;GDOM patch spam&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33052</attachid>
            <date>2009-07-19 13:28:49 -0700</date>
            <delta_ts>2009-07-21 11:01:18 -0700</delta_ts>
            <desc>adds gdomhtmlelementwrapperfactory.</desc>
            <filename>gdhewf.patch</filename>
            <type>text/plain</type>
            <size>44981</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC02MjU4MCw2ICs2MjU4OCwxNyBAQAogICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cHJl
dmlvdXNOb2RlKToKICAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKIAor
MjAwOC0xMS0zMCAgbGtjbCAgPGxrY2xAbGtjbC5uZXQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBP
UiBDSEFOR0VECisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI3NDI1CisKKyAgICAgICAgKiBiaW5kaW5ncy9nZG9tL0dET01IVE1MRWxlbWVudFdyYXBw
ZXJGYWN0b3J5LmNwcDogQWRkZWQuICBDb3BpZWQgZnJvbSB0aGUgYXV0by1nZW5lcmF0ZWQgSlNI
VE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCAKKyAgICAgICAgKiBiaW5kaW5ncy9nZG9tL0dE
T01IVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5Lmg6ICBBZGRlZC4gIENvcGllZCBmcm9tIHRoZSBh
dXRvLWdlbmVyYXRlZCBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaAorCiAyMDA4LTEyLTA0
ICBQaWVycmUtT2xpdmllciBMYXRvdXIgIDxwb2xAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUhU
TUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvZ2RvbS9HRE9NSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUhUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorICogQ29weXJp
Z2h0IChDKSAyMDA4IE1hcnRpbiBTb3RvIDxzb3RvQGZyZWVkZXNrdG9wLm9yZz4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworCisvKiBOb3RlOiBUaGlzIGZpbGUgaXMgZGVyaXZlZCBieSBoYW5kIGZyb20g
YW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKKyBmaWxlLgorIAorIEtlZXBpbmcgaXQgdXAtdG8t
ZGF0ZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBkb25lIGJ5IGFkZGluZyBhCisgbWFrZV9uYW1lcy5w
bCBnZW5lcmF0b3IsIG9yIGJ5IHdyaXRpbmcgYSBzZXBhcmF0ZSBnZW5lcmF0ZXIgd2hpY2gKKyB0
YWtlcyBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaCBhcyBpbnB1dC4KKyovCisKKworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJnZG9tL0dkb21Ob2RlLmgiCisjaW5jbHVk
ZSAiR0RPTUhUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21I
VE1MQW5jaG9yRWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxBcHBsZXRFbGVtZW50
LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2Rv
bS9HZG9tSFRNTEJhc2VFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEJhc2VGb250
RWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxCbG9ja3F1b3RlRWxlbWVudC5oIgor
I2luY2x1ZGUgImdkb20vR2RvbUhUTUxCb2R5RWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2Rv
bUhUTUxCUkVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MQnV0dG9uRWxlbWVudC5o
IgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2Rv
bS9HZG9tSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1M
VGFibGVDb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTE1vZEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJnZG9tL0dkb21IVE1MRGlyZWN0b3J5RWxlbWVudC5oIgorI2luY2x1ZGUgImdk
b20vR2RvbUhUTUxEaXZFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTERMaXN0RWxl
bWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxFbWJlZEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJnZG9tL0dkb21IVE1MRmllbGRTZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRN
TEZvbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEZvcm1FbGVtZW50LmgiCisj
aW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2Rv
bUhUTUxGcmFtZVNldEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MSGVhZGluZ0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJnZG9tL0dkb21IVE1MSFJFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEh0bWxF
bGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJnZG9tL0dkb21IVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRN
TElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxJc0luZGV4RWxlbWVudC5o
IgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxMYWJlbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9t
L0dkb21IVE1MTGVnZW5kRWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxMSUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJn
ZG9tL0dkb21IVE1MTWFwRWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxNYXJxdWVl
RWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxNZW51RWxlbWVudC5oIgorI2luY2x1
ZGUgImdkb20vR2RvbUhUTUxNZXRhRWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxP
YmplY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTE9MaXN0RWxlbWVudC5oIgor
I2luY2x1ZGUgImdkb20vR2RvbUhUTUxPcHRHcm91cEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9t
L0dkb21IVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxQYXJhZ3Jh
cGhFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFBhcmFtRWxlbWVudC5oIgorI2lu
Y2x1ZGUgImdkb20vR2RvbUhUTUxQcmVFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRN
TFF1b3RlRWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxTY3JpcHRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9t
L0dkb21IVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFRhYmxlRWxl
bWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCisj
aW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9t
L0dkb21IVE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFRpdGxl
RWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJnZG9tL0dkb21IVE1MVUxpc3RFbGVtZW50LmgiCisKKyNpbmNsdWRlICJnZG9tL0dk
b21IVE1MRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MQW5jaG9yRWxl
bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MQXBwbGV0RWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MQXJlYUVsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiZ2RvbS9HZG9tSFRNTEJhc2VFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20v
R2RvbUhUTUxCYXNlRm9udEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRN
TEJsb2NrcXVvdGVFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxCb2R5
RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MQlJFbGVtZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxCdXR0b25FbGVtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgImdkb20vR2RvbUhUTUxDYW52YXNFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdk
b20vR2RvbUhUTUxUYWJsZUNhcHRpb25FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20v
R2RvbUhUTUxUYWJsZUNvbEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRN
TE1vZEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTERpcmVjdG9yeUVs
ZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTERpdkVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTERMaXN0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJnZG9tL0dkb21IVE1MRW1iZWRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20v
R2RvbUhUTUxGaWVsZFNldEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRN
TEZvbnRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxGb3JtRWxlbWVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxGcmFtZVNldEVsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiZ2RvbS9HZG9tSFRNTEhlYWRpbmdFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdk
b20vR2RvbUhUTUxIZWFkRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1M
SFJFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxIdG1sRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MSUZyYW1lRWxlbWVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJnZG9tL0dkb21IVE1MSW1hZ2VFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
Imdkb20vR2RvbUhUTUxJbnB1dEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9t
SFRNTElzSW5kZXhFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxMYWJl
bEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTExlZ2VuZEVsZW1lbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTExJRWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJnZG9tL0dkb21IVE1MTGlua0VsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2Rv
bS9HZG9tSFRNTE1hcEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTE1h
cnF1ZWVFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxNZW51RWxlbWVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MTWV0YUVsZW1lbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTE9iamVjdEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiZ2RvbS9HZG9tSFRNTE9MaXN0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dk
b21IVE1MT3B0R3JvdXBFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxP
cHRpb25FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxQYXJhZ3JhcGhF
bGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxQYXJhbUVsZW1lbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFByZUVsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiZ2RvbS9HZG9tSFRNTFF1b3RlRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9t
L0dkb21IVE1MU2NyaXB0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1M
U2VsZWN0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MU3R5bGVFbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxUYWJsZUVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFRhYmxlQ2VsbEVsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiZ2RvbS9HZG9tSFRNTFRleHRBcmVhRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJn
ZG9tL0dkb21IVE1MVGl0bGVFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhU
TUxUYWJsZVJvd0VsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFVMaXN0
RWxlbWVudFByaXZhdGUuaCIKKworI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorCisjaW5jbHVkZSAi
SFRNTEFuY2hvckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQXBwbGV0RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxCYXNlRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxCYXNlRm9udEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQmxvY2txdW90
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
QlJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTFRhYmxlQ29sRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNb2RFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTERpcmVjdG9yeUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
RGl2RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxETGlzdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MRW1iZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxGb250RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVTZXRFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTEhlYWRpbmdFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhl
YWRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhSRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxI
dG1sRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MSXNJbmRleEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTExlZ2VuZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTElFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1hcEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MTWFycXVlZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWVu
dUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWV0YUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
T2JqZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxPTGlzdEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MUGFyYWdyYXBoRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQYXJhbUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MUHJlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxRdW90
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRl
eHRBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUaXRsZUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgor
I2luY2x1ZGUgIkNTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKKwordHlw
ZWRlZiBncG9pbnRlciAoKkNyZWF0ZUhUTUxFbGVtZW50V3JhcHBlckZ1bmN0aW9uKShQYXNzUmVm
UHRyPEhUTUxFbGVtZW50Pik7CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVBbmNob3JXcmFwcGVy
KFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1M
QW5jaG9yRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudCo+KGVsZW1lbnQuZ2V0
KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUFwcGxldFdyYXBwZXIoUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxBcHBsZXRFbGVt
ZW50KHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQor
CitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlQXJlYVdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxBcmVhRWxlbWVudChzdGF0aWNfY2Fz
dDxIVE1MQXJlYUVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRl
ciBjcmVhdGVCYXNlV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQorewor
ICAgIHJldHVybiB3cmFwSFRNTEJhc2VFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVu
dCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUJhc2VGb250
V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3
cmFwSFRNTEJhc2VGb250RWxlbWVudChzdGF0aWNfY2FzdDxIVE1MQmFzZUZvbnRFbGVtZW50Kj4o
ZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlQmxvY2txdW90ZVdy
YXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3Jh
cEhUTUxCbG9ja3F1b3RlRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnQq
PihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVCb2R5V3JhcHBl
cihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRN
TEJvZHlFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkp
KTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUJSV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTEJSRWxlbWVudChzdGF0aWNf
Y2FzdDxIVE1MQlJFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50
ZXIgY3JlYXRlQnV0dG9uV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQor
eworICAgIHJldHVybiB3cmFwSFRNTEJ1dHRvbkVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEJ1dHRv
bkVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVD
YW52YXNXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0
dXJuIHdyYXBIVE1MQ2FudmFzRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+
KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZVRhYmxlQ2FwdGlv
bldyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4g
d3JhcEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25F
bGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlVGFi
bGVDb2xXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0
dXJuIHdyYXBIVE1MVGFibGVDb2xFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxUYWJsZUNvbEVsZW1l
bnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVNb2RXcmFw
cGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBI
VE1MTW9kRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MTW9kRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkp
KTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZURpcmVjdG9yeVdyYXBwZXIoUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxEaXJlY3RvcnlF
bGVtZW50KHN0YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkp
OworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlRGl2V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTERpdkVsZW1lbnQoc3RhdGlj
X2Nhc3Q8SFRNTERpdkVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9p
bnRlciBjcmVhdGVETGlzdFdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkK
K3sKKyAgICByZXR1cm4gd3JhcEhUTUxETGlzdEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTERMaXN0
RWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUVt
YmVkV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVy
biB3cmFwSFRNTEVtYmVkRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVtZW50Kj4oZWxl
bWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlRmllbGRTZXRXcmFwcGVy
KFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1M
RmllbGRTZXRFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQqPihlbGVtZW50
LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVGb250V3JhcHBlcihQYXNzUmVm
UHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTEZvbnRFbGVt
ZW50KHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKwor
c3RhdGljIGdwb2ludGVyIGNyZWF0ZUZvcm1XcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MRm9ybUVsZW1lbnQoc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIg
Y3JlYXRlRnJhbWVXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7Cisg
ICAgcmV0dXJuIHdyYXBIVE1MRnJhbWVFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1l
bnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVGcmFtZVNl
dFdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4g
d3JhcEhUTUxGcmFtZVNldEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudCo+
KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUhlYWRpbmdXcmFw
cGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBI
VE1MSGVhZGluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEhlYWRpbmdFbGVtZW50Kj4oZWxlbWVu
dC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlSGVhZFdyYXBwZXIoUGFzc1Jl
ZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxIZWFkRWxl
bWVudChzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisK
K3N0YXRpYyBncG9pbnRlciBjcmVhdGVIUldyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4g
ZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxIUkVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRN
TEhSRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0
ZUh0bWxXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0
dXJuIHdyYXBIVE1MSHRtbEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50Kj4oZWxl
bWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlSUZyYW1lV3JhcHBlcihQ
YXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTElG
cmFtZUVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnQqPihlbGVtZW50LmdldCgp
KSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVJbWFnZVdyYXBwZXIoUGFzc1JlZlB0cjxI
VE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxJbWFnZUVsZW1lbnQo
c3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3Rh
dGljIGdwb2ludGVyIGNyZWF0ZUlucHV0V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBl
bGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTElucHV0RWxlbWVudChzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIg
Y3JlYXRlSXNJbmRleFdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sK
KyAgICByZXR1cm4gd3JhcEhUTUxJc0luZGV4RWxlbWVudChzdGF0aWNfY2FzdDxIVE1MSXNJbmRl
eEVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVM
YWJlbFdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1
cm4gd3JhcEhUTUxMYWJlbEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KGVs
ZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUxlZ2VuZFdyYXBwZXIo
UGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxM
ZWdlbmRFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50Kj4oZWxlbWVudC5nZXQo
KSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlTElXcmFwcGVyKFBhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MTElFbGVtZW50KHN0YXRp
Y19jYXN0PEhUTUxMSUVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9p
bnRlciBjcmVhdGVMaW5rV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQor
eworICAgIHJldHVybiB3cmFwSFRNTExpbmtFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxMaW5rRWxl
bWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZU1hcFdy
YXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3Jh
cEhUTUxNYXBFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50Kj4oZWxlbWVudC5nZXQo
KSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlTWFycXVlZVdyYXBwZXIoUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxNYXJxdWVlRWxl
bWVudChzdGF0aWNfY2FzdDxIVE1MTWFycXVlZUVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9
CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVNZW51V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTE1lbnVFbGVtZW50KHN0YXRpY19j
YXN0PEhUTUxNZW51RWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2lu
dGVyIGNyZWF0ZU1ldGFXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7
CisgICAgcmV0dXJuIHdyYXBIVE1MTWV0YUVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVt
ZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlT2JqZWN0
V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3
cmFwSFRNTE9iamVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlbGVt
ZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVPTGlzdFdyYXBwZXIoUGFz
c1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxPTGlz
dEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsK
K30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZU9wdEdyb3VwV3JhcHBlcihQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTE9wdEdyb3VwRWxlbWVu
dChzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQor
CitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlT3B0aW9uV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTE9wdGlvbkVsZW1lbnQoc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBn
cG9pbnRlciBjcmVhdGVQYXJhZ3JhcGhXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVs
ZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MUGFyYWdyYXBoRWxlbWVudChzdGF0aWNfY2Fz
dDxIVE1MUGFyYWdyYXBoRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdw
b2ludGVyIGNyZWF0ZVBhcmFtV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50
KQoreworICAgIHJldHVybiB3cmFwSFRNTFBhcmFtRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MUGFy
YW1FbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRl
UHJlV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVy
biB3cmFwSFRNTFByZUVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1lbnQqPihlbGVtZW50
LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVRdW90ZVdyYXBwZXIoUGFzc1Jl
ZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxRdW90ZUVs
ZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30K
Kworc3RhdGljIGdwb2ludGVyIGNyZWF0ZVNjcmlwdFdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxl
bWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxTY3JpcHRFbGVtZW50KHN0YXRp
Y19jYXN0PEhUTUxTY3JpcHRFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMg
Z3BvaW50ZXIgY3JlYXRlU2VsZWN0V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVt
ZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTFNlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBj
cmVhdGVTdHlsZVdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAg
ICByZXR1cm4gd3JhcEhUTUxTdHlsZUVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVu
dCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZVRhYmxlV3Jh
cHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFw
SFRNTFRhYmxlRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50Kj4oZWxlbWVudC5n
ZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlVGFibGVTZWN0aW9uV3JhcHBlcihQ
YXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihl
bGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVUYWJsZUNlbGxXcmFw
cGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBI
VE1MVGFibGVDZWxsRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCo+KGVs
ZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZVRleHRBcmVhV3JhcHBl
cihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRN
TFRleHRBcmVhRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4oZWxlbWVu
dC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlVGl0bGVXcmFwcGVyKFBhc3NS
ZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MVGl0bGVF
bGVtZW50KHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9
CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVUYWJsZVJvd1dyYXBwZXIoUGFzc1JlZlB0cjxIVE1M
RWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxUYWJsZVJvd0VsZW1lbnQo
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKwor
c3RhdGljIGdwb2ludGVyIGNyZWF0ZVVMaXN0V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50
PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTFVMaXN0RWxlbWVudChzdGF0aWNfY2Fz
dDxIVE1MVUxpc3RFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitncG9pbnRlciBjcmVh
dGVHRE9NSFRNTFdyYXBwZXIoUGFzc1JlZlB0cjxXZWJDb3JlOjpIVE1MRWxlbWVudD4gZWxlbWVu
dCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxXZWJDb3JlOjpBdG9taWNTdHJpbmdJbXBsKiwgQ3Jl
YXRlSFRNTEVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+IG1hcDsKKyAgICBpZiAobWFwLmlzRW1wdHko
KSkgeworICAgICAgIG1hcC5zZXQoYVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUFuY2hv
cldyYXBwZXIpOworICAgICAgIG1hcC5zZXQoYXBwbGV0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
Y3JlYXRlQXBwbGV0V3JhcHBlcik7CisgICAgICAgbWFwLnNldChhcmVhVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgY3JlYXRlQXJlYVdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoYmFzZVRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksIGNyZWF0ZUJhc2VXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGJhc2Vm
b250VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlQmFzZUZvbnRXcmFwcGVyKTsKKyAgICAg
ICBtYXAuc2V0KGJsb2NrcXVvdGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVCbG9ja3F1
b3RlV3JhcHBlcik7CisgICAgICAgbWFwLnNldChib2R5VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
Y3JlYXRlQm9keVdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoYnJUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCBjcmVhdGVCUldyYXBwZXIpOworICAgICAgIG1hcC5zZXQoYnV0dG9uVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgY3JlYXRlQnV0dG9uV3JhcHBlcik7CisgICAgICAgbWFwLnNldChjYW52YXNU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVDYW52YXNXcmFwcGVyKTsKKyAgICAgICBtYXAu
c2V0KGNhcHRpb25UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVUYWJsZUNhcHRpb25XcmFw
cGVyKTsKKyAgICAgICBtYXAuc2V0KGNvbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZVRh
YmxlQ29sV3JhcHBlcik7CisgICAgICAgbWFwLnNldChkZWxUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBjcmVhdGVNb2RXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGRpclRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksIGNyZWF0ZURpcmVjdG9yeVdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoZGl2VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlRGl2V3JhcHBlcik7CisgICAgICAgbWFwLnNldChkbFRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZURMaXN0V3JhcHBlcik7CisgICAgICAgbWFwLnNl
dChlbWJlZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUVtYmVkV3JhcHBlcik7CisgICAg
ICAgbWFwLnNldChmaWVsZHNldFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUZpZWxkU2V0
V3JhcHBlcik7CisgICAgICAgbWFwLnNldChmb250VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3Jl
YXRlRm9udFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoZm9ybVRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksIGNyZWF0ZUZvcm1XcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGZyYW1lVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgY3JlYXRlRnJhbWVXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGZyYW1lc2V0
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlRnJhbWVTZXRXcmFwcGVyKTsKKyAgICAgICBt
YXAuc2V0KGgxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlSGVhZGluZ1dyYXBwZXIpOwor
ICAgICAgIG1hcC5zZXQoaGVhZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUhlYWRXcmFw
cGVyKTsKKyAgICAgICBtYXAuc2V0KGhyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlSFJX
cmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGh0bWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVh
dGVIdG1sV3JhcHBlcik7CisgICAgICAgbWFwLnNldChpZnJhbWVUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCBjcmVhdGVJRnJhbWVXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGltZ1RhZy5sb2NhbE5h
bWUoKS5pbXBsKCksIGNyZWF0ZUltYWdlV3JhcHBlcik7CisgICAgICAgbWFwLnNldChpbnB1dFRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUlucHV0V3JhcHBlcik7CisgICAgICAgbWFwLnNl
dChpc2luZGV4VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlSXNJbmRleFdyYXBwZXIpOwor
ICAgICAgIG1hcC5zZXQobGFiZWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVMYWJlbFdy
YXBwZXIpOworICAgICAgIG1hcC5zZXQobGVnZW5kVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3Jl
YXRlTGVnZW5kV3JhcHBlcik7CisgICAgICAgbWFwLnNldChsaVRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksIGNyZWF0ZUxJV3JhcHBlcik7CisgICAgICAgbWFwLnNldChsaW5rVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgY3JlYXRlTGlua1dyYXBwZXIpOworICAgICAgIG1hcC5zZXQobWFwVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgY3JlYXRlTWFwV3JhcHBlcik7CisgICAgICAgbWFwLnNldChtYXJxdWVl
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlTWFycXVlZVdyYXBwZXIpOworICAgICAgIG1h
cC5zZXQobWVudVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZU1lbnVXcmFwcGVyKTsKKyAg
ICAgICBtYXAuc2V0KG1ldGFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVNZXRhV3JhcHBl
cik7CisgICAgICAgbWFwLnNldChvYmplY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVP
YmplY3RXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KG9sVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
Y3JlYXRlT0xpc3RXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KG9wdGdyb3VwVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgY3JlYXRlT3B0R3JvdXBXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KG9wdGlv
blRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZU9wdGlvbldyYXBwZXIpOworICAgICAgIG1h
cC5zZXQocFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZVBhcmFncmFwaFdyYXBwZXIpOwor
ICAgICAgIG1hcC5zZXQocGFyYW1UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVQYXJhbVdy
YXBwZXIpOworICAgICAgIG1hcC5zZXQocHJlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRl
UHJlV3JhcHBlcik7CisgICAgICAgbWFwLnNldChxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3Jl
YXRlUXVvdGVXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KHNjcmlwdFRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksIGNyZWF0ZVNjcmlwdFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoc2VsZWN0VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlU2VsZWN0V3JhcHBlcik7CisgICAgICAgbWFwLnNldChz
dHlsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZVN0eWxlV3JhcHBlcik7CisgICAgICAg
bWFwLnNldCh0YWJsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZVRhYmxlV3JhcHBlcik7
CisgICAgICAgbWFwLnNldCh0Ym9keVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZVRhYmxl
U2VjdGlvbldyYXBwZXIpOworICAgICAgIG1hcC5zZXQodGRUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBjcmVhdGVUYWJsZUNlbGxXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KHRleHRhcmVhVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlVGV4dEFyZWFXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0
KHRpdGxlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlVGl0bGVXcmFwcGVyKTsKKyAgICAg
ICBtYXAuc2V0KHRyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlVGFibGVSb3dXcmFwcGVy
KTsKKyAgICAgICBtYXAuc2V0KHVsVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlVUxpc3RX
cmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGNvbGdyb3VwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
Y3JlYXRlVGFibGVDb2xXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGgyVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgY3JlYXRlSGVhZGluZ1dyYXBwZXIpOworICAgICAgIG1hcC5zZXQoaDNUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVIZWFkaW5nV3JhcHBlcik7CisgICAgICAgbWFwLnNldCho
NFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUhlYWRpbmdXcmFwcGVyKTsKKyAgICAgICBt
YXAuc2V0KGg1VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlSGVhZGluZ1dyYXBwZXIpOwor
ICAgICAgIG1hcC5zZXQoaDZUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVIZWFkaW5nV3Jh
cHBlcik7CisgICAgICAgbWFwLnNldChpbWFnZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0
ZUltYWdlV3JhcHBlcik7CisgICAgICAgbWFwLnNldChpbnNUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBjcmVhdGVNb2RXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGtleWdlblRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksIGNyZWF0ZVNlbGVjdFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQobGlzdGluZ1Rh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZVByZVdyYXBwZXIpOworICAgICAgIG1hcC5zZXQo
dGZvb3RUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVUYWJsZVNlY3Rpb25XcmFwcGVyKTsK
KyAgICAgICBtYXAuc2V0KHRoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlVGFibGVDZWxs
V3JhcHBlcik7CisgICAgICAgbWFwLnNldCh0aGVhZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNy
ZWF0ZVRhYmxlU2VjdGlvbldyYXBwZXIpOworICAgICAgIG1hcC5zZXQoeG1wVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgY3JlYXRlUHJlV3JhcHBlcik7CisgICAgfQorCisgICAgQ3JlYXRlSFRNTEVs
ZW1lbnRXcmFwcGVyRnVuY3Rpb24gY3JlYXRlV3JhcHBlckZ1bmN0aW9uID0KKyAgICAgICAgbWFw
LmdldChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgIGlmIChjcmVhdGVXcmFwcGVy
RnVuY3Rpb24pCisgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24oZWxlbWVudCk7
CisgICAgcmV0dXJuIHdyYXBIVE1MRWxlbWVudChlbGVtZW50LmdldCgpKTsKK30KKworfQorCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2dkb20vV2Via2l0RXZlbnRUYXJnZXROb2RlUHJpdmF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01CaW5kaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUJpbmRpbmcuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dET01CaW5kaW5nLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2MTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbEBs
a2NsLm5ldD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRl
c2t0b3Aub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworLy8gZ2NjIDMueCBj
YW4ndCBoYW5kbGUgaW5jbHVkaW5nIHRoZSBIYXNoTWFwIHBvaW50ZXIgc3BlY2lhbGl6YXRpb24K
Ky8vIGluIHRoaXMgZmlsZQorI2lmIGRlZmluZWQgX19HTlVDX18gJiYgIWRlZmluZWQgX19HTElC
Q1hYX18gLy8gbGVzcyB0aGFuIGdjYyAzLjQKKyNkZWZpbmUgSEFTSF9NQVBfUFRSX1NQRUNfV09S
S0FST1VORCAxCisjZW5kaWYKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisvKiB5ZXMgdGhlc2Ug
YXJlIG91dC1vZi1vcmRlciwgYnV0IHRoZXkgYXJlIGdyb3VwZWQgYnkKKyAqIHB1cnBvc2UuICB0
aGUgI2luY2x1ZGVzIG5lZWRlZCBmb3IgdG9HRE9NKERvY3VtZW50KikKKyAqIGdvdCBhZGRlZCwg
YW5kIHRoZSBvbmVzIGZvciB0b0dET00oQ1NTUnVsZSopIGdvdCBhZGRlZAorICogc2VwYXJhdGVs
eSwgYW5kIHRoZW4gc29tZSBhcmUgY29uZGl0aW9uYWwgYmFzZWQgb24KKyAqIGNvbXBpbGUtdGlt
ZSBvcHRpb25zLCBhbmQgeWV0IG1vcmUgd2lsbCBiZSBhZGRlZAorICogZS5nLiBmb3IgU1ZHIENh
bnZhcy4KKyAqLworCisjaW5jbHVkZSAiZ2xpYi1vYmplY3QuaCIKKyNpbmNsdWRlICJDU3RyaW5n
LmgiCisjaW5jbHVkZSAiR2RvbURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkdkb21ET01PYmplY3RQ
cml2YXRlLmgiCisjaW5jbHVkZSAiR0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJHRE9NSFRNTEVs
ZW1lbnRXcmFwcGVyRmFjdG9yeS5oIgorCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2lu
Y2x1ZGUgIkdkb21DU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiR2RvbUNTU1N0eWxlU2hlZXRQ
cml2YXRlLmgiCisKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJHZG9tTm9kZS5oIgorCisj
aW5jbHVkZSAiR2RvbU5vZGVQcml2YXRlLmgiCisKKyNpbmNsdWRlICJBdHRyLmgiCisjaW5jbHVk
ZSAiQ0RBVEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRlICJDb21t
ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiRW50aXR5LmgiCisjaW5j
bHVkZSAiRW50aXR5UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJHZG9tQXR0ci5oIgorI2luY2x1ZGUgIkdkb21BdHRyUHJpdmF0ZS5oIgorI2luY2x1ZGUg
Ikdkb21DaGFyYWN0ZXJEYXRhLmgiCisjaW5jbHVkZSAiR2RvbVRleHQuaCIKKyNpbmNsdWRlICJH
ZG9tQ0RBVEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiR2RvbUNvbW1lbnQuaCIKKyNpbmNsdWRlICJH
ZG9tRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJHZG9tRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1
ZGUgIkdkb21Eb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRlICJHZG9tRW50aXR5LmgiCisjaW5jbHVk
ZSAiR2RvbUVsZW1lbnQuaCIKKyNpbmNsdWRlICJHZG9tQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVk
ZSAiR2RvbUNTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW5jbHVkZSAiR2RvbUVudGl0eVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIkdkb21Ob3RhdGlvbi5oIgorI2luY2x1ZGUgIkdkb21IVE1MRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJHZG9tUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisjaW5jbHVkZSAi
Tm90YXRpb24uaCIKKyNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRl
ICJUZXh0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKKyNpbmNsdWRlICJHZG9tQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU0NoYXJzZXRS
dWxlLmgiCisjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0
UnVsZS5oIgorI2luY2x1ZGUgIkNTU01lZGlhUnVsZS5oIgorI2luY2x1ZGUgIkNTU1BhZ2VSdWxl
LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NTVmFyaWFibGVzUnVs
ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NDaGFyc2V0UnVsZS5oIgorI2luY2x1ZGUgIkdkb21DU1NG
b250RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUg
Ikdkb21DU1NNZWRpYVJ1bGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTUGFnZVJ1bGUuaCIKKyNpbmNs
dWRlICJHZG9tQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiR2RvbUNTU1ZhcmlhYmxlc1J1bGUu
aCIKKworI2luY2x1ZGUgIkdkb21FdmVudFByaXZhdGUuaCIKKworI2luY2x1ZGUgIkNsaXBib2Fy
ZC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkdk
b21DbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJHZG9tS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
Ikdkb21NZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJHZG9tTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIkdkb21NdXRhdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiR2RvbU92ZXJmbG93RXZlbnQuaCIK
KyNpbmNsdWRlICJHZG9tUHJvZ3Jlc3NFdmVudC5oIgorI2luY2x1ZGUgIkdkb21UZXh0RXZlbnQu
aCIKKyNpbmNsdWRlICJHZG9tVUlFdmVudC5oIgorI2luY2x1ZGUgIkdkb21XZWJLaXRBbmltYXRp
b25FdmVudC5oIgorI2luY2x1ZGUgIkdkb21XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCIKKyNpbmNs
dWRlICJHZG9tV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIkdkb21YTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZUV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uRXZl
bnQuaCIKKyNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCisjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVu
dC5oIgorI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2luY2x1ZGUgIlVJRXZlbnQuaCIKKyNpbmNs
dWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5oIgorI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25F
dmVudC5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnQuaCIKKworI2luY2x1ZGUgIkdkb21IVE1MQ29sbGVjdGlvbi5oIgorCisj
aW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKKyNp
bmNsdWRlICJIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJHZG9tSFRNTE9wdGlv
bnNDb2xsZWN0aW9uLmgiCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisjaW5jbHVkZSAiR2Rv
bVN0b3JhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoU1ZHKQorI2lmIDAgLyogVE9ETyAtIHNlZSAjMjA1ODYgKi8KKyNpbmNsdWRlICJH
ZG9tU1ZHWm9vbUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21TVkdab29tRXZlbnQuaCIK
KyNpbmNsdWRlICJTVkdab29tRXZlbnQuaCIKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBFTkFCTEUo
U1ZHKQorI2lmIDAgLyogWFhYIFRPRE8gLSBzZWUgIzIwNTg2ICovCisjaW5jbHVkZSAiR2RvbVNW
R0VsZW1lbnRXcmFwcGVyRmFjdG9yeVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tU1ZHRWxlbWVu
dFdyYXBwZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2VuZGlmCisjZW5k
aWYKKworI2lmIDAKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkdkb21TVkdFeGNlcHRpb24u
aCIKKyNpbmNsdWRlICJTVkdFeGNlcHRpb24uaCIKKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRl
ICJHZG9tQ0RBVEFTZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NDaGFyc2V0UnVs
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTRm9udEZhY2VSdWxlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkdkb21DU1NJbXBvcnRSdWxlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NNZWRp
YVJ1bGVQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUNTU1BhZ2VSdWxlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkdkb21DU1NQcmltaXRpdmVWYWx1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NT
UnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tQ1NTU3R5bGVSdWxlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkdkb21DU1NWYWx1ZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUNTU1ZhbHVl
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21DU1NWYXJpYWJsZXNSdWxlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkdkb21DbGlwYm9hcmRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUNvbW1lbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiR2RvbURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiR2RvbURvY3VtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21Eb2N1bWVudFR5cGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiR2RvbUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUVu
dGl0eVByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tRW50aXR5UmVmZXJlbmNlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkdkb21IVE1MQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tSFRN
TERvY3VtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21IVE1MT3B0aW9uc0NvbGxlY3Rpb25Q
cml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbUtleWJvYXJkRXZlbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiR2RvbU1lc3NhZ2VFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tTW91c2VFdmVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tTXV0YXRpb25FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJHZG9tTm90YXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbU92ZXJmbG93RXZlbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiR2RvbVByb2Nlc3NpbmdJbnN0cnVjdGlvblByaXZhdGUuaCIKKyNp
bmNsdWRlICJHZG9tUHJvZ3Jlc3NFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJHZG9tU3RvcmFn
ZUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21TdHlsZVNoZWV0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkdkb21UZXh0RXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVRleHRQcml2YXRl
LmgiCisjaW5jbHVkZSAiR2RvbVVJRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVdlYktp
dEFuaW1hdGlvbkV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdkb21XZWJLaXRUcmFuc2l0aW9u
RXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiR2RvbVdoZWVsRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiR2RvbVhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFByaXZhdGUuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU6OkhUTUxOYW1lczsKKwordHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBncG9pbnRlcj4g
RE9NT2JqZWN0TWFwOworCitzdGF0aWMgRE9NT2JqZWN0TWFwJiBkb21PYmplY3RzKCkKK3sKKyAg
ICBzdGF0aWMgRE9NT2JqZWN0TWFwIHN0YXRpY0RPTU9iamVjdHM7CisgICAgcmV0dXJuIHN0YXRp
Y0RPTU9iamVjdHM7Cit9CisKK2dwb2ludGVyIEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0
KHZvaWQqIG9iamVjdEhhbmRsZSkKK3sKKyAgICBncG9pbnRlciByZXQgPSBkb21PYmplY3RzKCku
Z2V0KG9iamVjdEhhbmRsZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworZ3BvaW50ZXIgR0RPTU9i
amVjdENhY2hlOjpwdXRET01PYmplY3Qodm9pZCogb2JqZWN0SGFuZGxlLCBncG9pbnRlciB3cmFw
cGVyKQoreworICAgIGRvbU9iamVjdHMoKS5zZXQob2JqZWN0SGFuZGxlLCB3cmFwcGVyKTsKKyAg
ICByZXR1cm4gd3JhcHBlcjsKK30KKwordm9pZCBHRE9NT2JqZWN0Q2FjaGU6OmZvcmdldERPTU9i
amVjdCh2b2lkKiBvYmplY3RIYW5kbGUpCit7CisgICAgZG9tT2JqZWN0cygpLnRha2Uob2JqZWN0
SGFuZGxlKTsKK30KKworZ3BvaW50ZXIgdG9HRE9NKERvY3VtZW50KiBkb2MpCit7CisgICAgaWYg
KCFkb2MpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZ3BvaW50ZXIgZ29iaiA9IEdET01P
YmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KGRvYyk7CisgICAgaWYgKGdvYmopCisgICAgICAgIHJl
dHVybiBnb2JqOworCisgICAgZ3BvaW50ZXIgcmV0OworCisgICAgaWYgKGRvYy0+aXNIVE1MRG9j
dW1lbnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcEhUTUxEb2N1bWVudChzdGF0aWNfY2FzdDxIVE1M
RG9jdW1lbnQqPihkb2MpKTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGVsc2UgaWYgKGRvYy0+aXNT
VkdEb2N1bWVudCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFhYWCBUT0RPIC0g
c2VlICMyMDU4NiAqLworI2lmIDAKKyAgICAgICAgcmV0ID0gd3JhcFNWR0RvY3VtZW50KHN0YXRp
Y19jYXN0PFNWR0RvY3VtZW50Kj4oZG9jKSk7CisjZW5kaWYKKyAgICB9CisjZW5kaWYKKyAgICBl
bHNlCisgICAgICAgIHJldCA9IHdyYXBEb2N1bWVudChkb2MpOworCisgICAgcmV0dXJuIEdET01P
YmplY3RDYWNoZTo6cHV0RE9NT2JqZWN0KGRvYywgcmV0KTsKK30KKworc3RhdGljIGdwb2ludGVy
IGNyZWF0ZVdyYXBwZXIoTm9kZSogbm9kZSk7CisKK2dwb2ludGVyIHRvR0RPTU5ld2x5Q3JlYXRl
ZChOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisK
KyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcihub2RlKTsKK30KKworZ3BvaW50ZXIgdG9HRE9NKE5v
ZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAg
IGdwb2ludGVyIHJldCA9IEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KG5vZGUpOworICAg
IGlmIChyZXQpCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBl
cihub2RlKTsKK30KKworZ3BvaW50ZXIgdG9HRE9NKENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBp
ZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGdwb2ludGVyIGdvYmogPSBH
RE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdCh2YWx1ZSk7CisKKyAgICBpZiAoZ29iaikKKyAg
ICAgICAgcmV0dXJuIGdvYmo7CisKKyAgICBncG9pbnRlciByZXQ7CisKKyAgICBpZiAodmFsdWUt
PmlzVmFsdWVMaXN0KCkpCisgICAgICAgIHJldCA9IHdyYXBDU1NWYWx1ZUxpc3Qoc3RhdGljX2Nh
c3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpKTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGVsc2UgaWYg
KHZhbHVlLT5pc1NWR1BhaW50KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsgLyogVE9E
TyAtIHNlZSAjMjA1ODYgKi8KKyAgICAgICAgLy9yZXQgPSB3cmFwU1ZHUGFpbnQoc3RhdGljX2Nh
c3Q8U1ZHUGFpbnQqPih2YWx1ZSkpOworICAgIH0KKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNTVkdD
b2xvcigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFRPRE8gLSBzZWUgIzIwNTg2
ICovCisgICAgICAgIC8vcmV0ID0gd3JhcFNWR0NvbG9yKHN0YXRpY19jYXN0PFNWR0NvbG9yKj4o
dmFsdWUpKTsKKyAgICB9CisjZW5kaWYKKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICByZXQgPSB3cmFwQ1NTUHJpbWl0aXZlVmFsdWUoc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gd3Jh
cENTU1ZhbHVlKHZhbHVlKTsKKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9i
amVjdCh2YWx1ZSwgcmV0KTsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgZ3BvaW50ZXIgY3Jl
YXRlV3JhcHBlcihOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBBU1NFUlQo
IVNjcmlwdEludGVycHJldGVyOjpnZXRET01PYmplY3Qobm9kZSkpOworCisgICAgRG9jdW1lbnQq
IGRvYyA9IG5vZGUtPmRvY3VtZW50KCk7CisgICAgZ3BvaW50ZXIgcmV0ID0gTlVMTDsKKworICAg
IHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkgeworICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRf
Tk9ERToKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAg
ICAgICAgcmV0ID0gY3JlYXRlR0RPTUhUTUxXcmFwcGVyKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
Kj4obm9kZSkpOworI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5p
c1NWR0VsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyNpZiAwIC8qIFhY
WCBUT0RPIC0gc2VlICMyMDU4NiAqLworICAgICAgICAgICAgICAgIHJldCA9IGNyZWF0ZUdET01T
VkdXcmFwcGVyKHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKSk7CisjZW5kaWYKKyNlbmRp
ZgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldCA9IHdyYXBFbGVtZW50KHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBBdHRyKHN0
YXRpY19jYXN0PEF0dHIqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOb2RlOjpURVhUX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwVGV4dChzdGF0aWNfY2Fz
dDxUZXh0Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6
Q0RBVEFfU0VDVElPTl9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3JhcENEQVRBU2VjdGlvbihz
dGF0aWNfY2FzdDxDREFUQVNlY3Rpb24qPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfTk9ERToKKyAgICAgICAgICAgIHJldCA9IHdyYXBFbnRp
dHkoc3RhdGljX2Nhc3Q8RW50aXR5Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgorICAgICAgICAgICAg
cmV0ID0gd3JhcFByb2Nlc3NpbmdJbnN0cnVjdGlvbihzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24qPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2Rl
OjpDT01NRU5UX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ29tbWVudChzdGF0aWNfY2Fz
dDxDb21tZW50Kj4obm9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9k
ZTo6RE9DVU1FTlRfTk9ERToKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY2FjaGUg
dGhlIGRvY3VtZW50IGl0c2VsZiBpbiB0aGUgcGVyLWRvY3VtZW50IGRpY3Rpb25hcnkKKyAgICAg
ICAgICAgIHJldHVybiB0b0dET00oc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKSk7CisgICAg
ICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgorICAgICAgICAgICAgcmV0ID0gd3Jh
cERvY3VtZW50VHlwZShzdGF0aWNfY2FzdDxEb2N1bWVudFR5cGUqPihub2RlKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlOjpOT1RBVElPTl9OT0RFOgorICAgICAgICAg
ICAgcmV0ID0gd3JhcE5vdGF0aW9uKHN0YXRpY19jYXN0PE5vdGF0aW9uKj4obm9kZSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RToKKyAgICAgICAgICAgIHJldCA9IHdyYXBEb2N1bWVudEZyYWdtZW50KHN0YXRpY19jYXN0PERv
Y3VtZW50RnJhZ21lbnQqPihub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREU6CisgICAgICAgICAgICByZXQgPSB3cmFwRW50
aXR5UmVmZXJlbmNlKHN0YXRpY19jYXN0PEVudGl0eVJlZmVyZW5jZSo+KG5vZGUpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gd3JhcE5v
ZGUobm9kZSk7CisgICAgfQorCisgICAgcmV0dXJuIEdET01PYmplY3RDYWNoZTo6cHV0RE9NT2Jq
ZWN0KG5vZGUsIHJldCk7Cit9CisKK2dwb2ludGVyIHRvR0RPTShIVE1MQ29sbGVjdGlvbiogY29s
bGVjdGlvbikKK3sKKyAgICBpZiAoIWNvbGxlY3Rpb24pCisgICAgICAgIHJldHVybiBOVUxMOwor
CisgICAgZ3BvaW50ZXIgZ29iaiA9IEdET01PYmplY3RDYWNoZTo6Z2V0RE9NT2JqZWN0KGNvbGxl
Y3Rpb24pOworCisgICAgaWYgKGdvYmopCisgICAgICAgIHJldHVybiBnb2JqOworCisgICAgZ3Bv
aW50ZXIgcmV0OworICAgIHN3aXRjaCAoY29sbGVjdGlvbi0+dHlwZSgpKSB7CisgICAgICAgIGNh
c2UgU2VsZWN0T3B0aW9uczoKKyAgICAgICAgICAgIHJldCA9IHdyYXBIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24oc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOwor
ICAgICAgICAgICAgYnJlYWs7CisjaWYgMAorICAgICAgICBjYXNlIEhUTUxDb2xsZWN0aW9uOjpE
b2NBbGw6CisgICAgICAgICAgICByZXQgPSB3cmFwSFRNTENvbGxlY3Rpb24oc3RhdGljX2Nhc3Q8
SFRNTENvbGxlY3Rpb24qPihjb2xsZWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRp
ZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gd3JhcEhUTUxDb2xsZWN0aW9u
KHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4oY29sbGVjdGlvbikpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIEdET01PYmplY3RDYWNoZTo6cHV0RE9NT2JqZWN0
KGNvbGxlY3Rpb24sIHJldCk7Cit9CisKK2dwb2ludGVyIHRvR0RPTShFdmVudCogZXZlbnQpCit7
CisgICAgaWYgKCFldmVudCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBncG9pbnRlciBn
b2JqID0gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3QoZXZlbnQpOworICAgIGlmIChnb2Jq
KQorICAgICAgICByZXR1cm4gZ29iajsKKworICAgIGdwb2ludGVyIHJldDsKKyAgICBpZiAoZXZl
bnQtPmlzVUlFdmVudCgpKSB7CisgICAgICAgIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkp
CisgICAgICAgICAgICByZXQgPSB3cmFwS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2Fy
ZEV2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzVGV4dEV2ZW50KCkp
CisgICAgICAgICAgICByZXQgPSB3cmFwVGV4dEV2ZW50KHN0YXRpY19jYXN0PFRleHRFdmVudCo+
KGV2ZW50KSk7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICAg
ICAgICAgIHJldCA9IHdyYXBNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVu
dCkpOworICAgICAgICBlbHNlIGlmIChldmVudC0+aXNXaGVlbEV2ZW50KCkpCisgICAgICAgICAg
ICByZXQgPSB3cmFwV2hlZWxFdmVudChzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQpKTsK
KyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICBlbHNlIGlmIChldmVudC0+aXNTVkdab29tRXZlbnQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFRPRE8gLSBzZWUgIzIw
NTg2ICovCisgICAgICAgICAgICAvL3JldCA9IHdyYXBTVkdab29tRXZlbnQoc3RhdGljX2Nhc3Q8
U1ZHWm9vbUV2ZW50Kj4oZXZlbnQpLCAwKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJldCA9IHdyYXBVSUV2ZW50KHN0YXRpY19jYXN0PFVJRXZlbnQqPihl
dmVudCkpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPmlzTXV0YXRpb25FdmVudCgpKQorICAgICAg
ICByZXQgPSB3cmFwTXV0YXRpb25FdmVudChzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50Kj4oZXZl
bnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNPdmVyZmxvd0V2ZW50KCkpCisgICAgICAgIHJl
dCA9IHdyYXBPdmVyZmxvd0V2ZW50KHN0YXRpY19jYXN0PE92ZXJmbG93RXZlbnQqPihldmVudCkp
OworICAgIGVsc2UgaWYgKGV2ZW50LT5pc01lc3NhZ2VFdmVudCgpKQorICAgICAgICByZXQgPSB3
cmFwTWVzc2FnZUV2ZW50KHN0YXRpY19jYXN0PE1lc3NhZ2VFdmVudCo+KGV2ZW50KSk7CisgICAg
ZWxzZSBpZiAoZXZlbnQtPmlzUHJvZ3Jlc3NFdmVudCgpKSB7CisgICAgICAgIGlmIChldmVudC0+
aXNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSkKKyAgICAgICAgICAgIHJldCA9IHdyYXBY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoc3RhdGljX2Nhc3Q8WE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50Kj4oZXZlbnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gd3Jh
cFByb2dyZXNzRXZlbnQoc3RhdGljX2Nhc3Q8UHJvZ3Jlc3NFdmVudCo+KGV2ZW50KSk7CisgICAg
fQorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBlbHNlIGlmIChldmVudC0+aXNTdG9yYWdl
RXZlbnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcFN0b3JhZ2VFdmVudChzdGF0aWNfY2FzdDxTdG9y
YWdlRXZlbnQqPihldmVudCkpOworI2VuZGlmCisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0
QW5pbWF0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcFdlYktpdEFuaW1hdGlvbkV2ZW50
KHN0YXRpY19jYXN0PFdlYktpdEFuaW1hdGlvbkV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlm
IChldmVudC0+aXNXZWJLaXRUcmFuc2l0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0ID0gd3JhcFdl
YktpdFRyYW5zaXRpb25FdmVudChzdGF0aWNfY2FzdDxXZWJLaXRUcmFuc2l0aW9uRXZlbnQqPihl
dmVudCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gd3JhcEV2ZW50KGV2ZW50KTsKKworICAg
IHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OnB1dERPTU9iamVjdChldmVudCwgcmV0KTsKK30KKwor
Z3BvaW50ZXIgdG9HRE9NKFRleHQqIHRleHQpCit7CisgICAgaWYgKCF0ZXh0KQorICAgICAgICBy
ZXR1cm4gTlVMTDsKKworICAgIGdwb2ludGVyIGdvYmogPSBHRE9NT2JqZWN0Q2FjaGU6OmdldERP
TU9iamVjdCh0ZXh0KTsKKyAgICBpZiAoZ29iaikKKyAgICAgICAgcmV0dXJuIGdvYmo7CisKKyAg
ICBncG9pbnRlciByZXQgPSB3cmFwVGV4dCh0ZXh0KTsKKyAgICByZXR1cm4gR0RPTU9iamVjdENh
Y2hlOjpwdXRET01PYmplY3QodGV4dCwgcmV0KTsKK30KKworZ3BvaW50ZXIgdG9HRE9NKENTU1J1
bGUqIHJ1bGUpCit7CisgICAgaWYgKCFydWxlKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAg
IGdwb2ludGVyIGdvYmogPSBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChydWxlKTsKKwor
ICAgIGlmIChnb2JqKQorICAgICAgICByZXR1cm4gZ29iajsKKworICAgIGdwb2ludGVyIHJldDsK
KyAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIENTU1J1bGU6OlNUWUxF
X1JVTEU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTU3R5bGVSdWxlKHN0YXRpY19jYXN0PENT
U1N0eWxlUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1J1bGU6Ok1FRElBX1JVTEU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTTWVkaWFSdWxlKHN0
YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1J1bGU6OkZPTlRfRkFDRV9SVUxFOgorICAgICAgICAgICAgcmV0ID0gd3Jh
cENTU0ZvbnRGYWNlUnVsZShzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NSdWxlOjpQQUdFX1JVTEU6CisgICAg
ICAgICAgICByZXQgPSB3cmFwQ1NTUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPihy
dWxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NSdWxlOjpJTVBPUlRf
UlVMRToKKyAgICAgICAgICAgIHJldCA9IHdyYXBDU1NJbXBvcnRSdWxlKHN0YXRpY19jYXN0PENT
U0ltcG9ydFJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NSdWxlOjpDSEFSU0VUX1JVTEU6CisgICAgICAgICAgICByZXQgPSB3cmFwQ1NTQ2hhcnNldFJ1
bGUoc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1bGUqPihydWxlKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NSdWxlOjpWQVJJQUJMRVNfUlVMRToKKyAgICAgICAgICAgIHJl
dCA9IHdyYXBDU1NWYXJpYWJsZXNSdWxlKHN0YXRpY19jYXN0PENTU1ZhcmlhYmxlc1J1bGUqPihy
dWxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldCA9IHdyYXBDU1NSdWxlKHJ1bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3QocnVsZSwgcmV0KTsKKyAgICByZXR1cm4g
cmV0OworfQorCitncG9pbnRlciB0b0dET00oRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAo
IWVsZW1lbnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLy8gc2hvdWxkbid0IGJlIG9u
ZT8gQVNTRVJUKCFTY3JpcHRJbnRlcnByZXRlcjo6Z2V0RE9NT2JqZWN0KGVsZW1lbnQpKTsKKyAg
ICBncG9pbnRlciBnb2JqID0gR0RPTU9iamVjdENhY2hlOjpnZXRET01PYmplY3QoZWxlbWVudCk7
CisgICAgaWYgKGdvYmopCisgICAgICAgIHJldHVybiBnb2JqOworCisgICAgZ3BvaW50ZXIgcmV0
OworICAgIERvY3VtZW50KiBkb2MgPSBlbGVtZW50LT5kb2N1bWVudCgpOworCisgICAgaWYgKGVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0ID0gY3JlYXRlR0RPTUhUTUxXcmFw
cGVyKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCkpOworI2lmIEVOQUJMRShTVkcp
CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsgLyogVE9ETyAtIHNlZSAjMjA1ODYgKi8KKyAgICAgICAgLy9yZXQgPSBjcmVh
dGVHRE9NU1ZHV3JhcHBlcihzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oZWxlbWVudCkpOworICAg
IH0KKyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgcmV0ID0gd3JhcEVsZW1lbnQoZWxlbWVudCk7
CisKKyAgICByZXR1cm4gR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3QoZWxlbWVudCwgcmV0
KTsKK30KKworZ3BvaW50ZXIgdG9HRE9NKFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAg
aWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGdwb2ludGVyIGdv
YmogPSBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChzdHlsZVNoZWV0KTsKKyAgICBpZiAo
Z29iaikKKyAgICAgICAgcmV0dXJuIGdvYmo7CisKKyAgICBncG9pbnRlciByZXQ7CisgICAgaWYg
KHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICByZXQgPSB3cmFwQ1NTU3R5
bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpOworICAgIGVs
c2UKKyAgICAgICAgcmV0ID0gd3JhcFN0eWxlU2hlZXQoc3R5bGVTaGVldCk7CisKKyAgICByZXR1
cm4gR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3Qoc3R5bGVTaGVldCwgcmV0KTsKK30KKwor
LyogZGVyaXZlZCBzb3VyY2VzIGF1dG8tZ2VuZXJhdGVkICovCitncG9pbnRlciB0b0dET00oWE1M
SHR0cFJlcXVlc3RVcGxvYWQqIG9iaik7CisKK2dwb2ludGVyIHRvR0RPTShFdmVudFRhcmdldCog
dGFyZ2V0KQoreworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworI2lm
IDAKKyNpZiBFTkFCTEUoU1ZHKQorICAgIC8vIFNWR0VsZW1lbnRJbnN0YW5jZSBzdXBwb3J0cyBi
b3RoIHRvU1ZHRWxlbWVudEluc3RhbmNlIGFuZAorICAgIC8vIHRvTm9kZSBzaW5jZSBzbyBtdWNo
IG1vdXNlIGhhbmRsaW5nIGNvZGUgZGVwZW5kcyBvbiB0b05vZGUKKyAgICAvLyByZXR1cm5pbmcg
YSB2YWxpZCBub2RlLgorICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSB0YXJnZXQt
PnRvU1ZHRWxlbWVudEluc3RhbmNlKCk7CisgICAgaWYgKGluc3RhbmNlKQorICAgICAgICByZXR1
cm4gdG9HRE9NKGV4ZWMsIGluc3RhbmNlKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICBOb2RlKiBu
b2RlID0gdGFyZ2V0LT50b05vZGUoKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgcmV0dXJuIHRv
R0RPTShub2RlKTsKKworICAgIGlmIChYTUxIdHRwUmVxdWVzdCogeGhyID0gdGFyZ2V0LT50b1hN
TEh0dHBSZXF1ZXN0KCkpCisgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IGlzIGFsd2F5cyBjcmVh
dGVkIHZpYSBHRE9NLCBzbyB3ZSBkb24ndCBuZWVkCisgICAgICAgIC8vIHRvIHVzZSBjYWNoZURP
TU9iamVjdCgpIGhlcmUuCisgICAgICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9i
amVjdCh4aHIpOworCisgICAgaWYgKFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB1cGxvYWQgPSB0YXJn
ZXQtPnRvWE1MSHR0cFJlcXVlc3RVcGxvYWQoKSkKKyAgICAgICAgcmV0dXJuIHRvR0RPTSh1cGxv
YWQpOworCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICBpZiAoRE9N
QXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSB0YXJnZXQtPnRvRE9NQXBwbGljYXRpb25DYWNoZSgp
KQorICAgICAgICAvLyBET01BcHBsaWNhdGlvbkNhY2hlIGlzIGFsd2F5cyBjcmVhdGVkIHZpYSBH
RE9NLCBzbyB3ZSBkb24ndAorICAgICAgICAvLyBuZWVkIHRvIHVzZSBjYWNoZURPTU9iamVjdCgp
IGhlcmUuCisgICAgICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChjYWNo
ZSk7CisjZW5kaWYKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBOVUxM
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9n
ZG9tL0dET01IVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9nZG9tL0dET01IVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2dkb20vR0RPTUhUTUxFbGVtZW50V3JhcHBlckZhY3Rv
cnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIFRISVMgRklMRSBJUyBE
RVJJVkVEIEJZIEhBTkQgRlJPTSBBTiBBVVRPTUFUSUNBTExZIEdFTkVSQVRFRCBGSUxFLgorICog
SVQgSVMgTk9UIEFOIEFVVE8tR0VORVJBVEVEIEZJTEUgSVQgV0FTIENSRUFURUQgTUFOVUFMTFkg
KkZST00qCisgKiBBTiBBVVRPLUdFTkVSQVRFRCBGSUxFLgorICoga2VlcGluZyBpdCB1cC10by1k
YXRlIGNvdWxkIHBvdGVudGlhbGx5IGJlIGRvbmUgYnkgYWRkaW5nCisgKiBhIG1ha2VfbmFtZXMu
cGwgZ2VuZXJhdG9yLCBvciBieSB3cml0aW5nIGEgc2VwYXJhdGUKKyAqIGdlbmVyYXRlciB3aGlj
aCB0YWtlcyBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaCBhcyBpbnB1dC4KKyAqCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKworI2lmbmRlZiBHRE9NSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeV9o
CisjZGVmaW5lIEdET01IVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5X2gKKworI2luY2x1ZGUgIkdk
b21Ob2RlUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEhUTUxFbGVtZW50OworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKyAgICBncG9pbnRlciBjcmVhdGVHRE9NSFRNTFdyYXBwZXIoUGFzc1JlZlB0cjxXZWJDb3Jl
OjpIVE1MRWxlbWVudD4pOworfQorCisjZW5kaWYgLy8gR0RPTUhUTUxFbGVtZW50V3JhcHBlckZh
Y3RvcnlfaAo=
</data>
<flag name="review"
          id="17387"
          type_id="1"
          status="-"
          setter="manyoso"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33188</attachid>
            <date>2009-07-21 11:01:18 -0700</date>
            <delta_ts>2009-08-03 08:23:25 -0700</delta_ts>
            <desc>adds gdomhtmlelementwrapperfactory with better ChangeLog</desc>
            <filename>gdhewf.patch</filename>
            <type>text/plain</type>
            <size>26823</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC02MjU4MCw2ICs2MjY3NCwyMyBAQAogICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6cHJl
dmlvdXNOb2RlKToKICAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKCisy
MDA4LTExLTMwICBsa2NsICA8bGtjbEBsa2NsLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVzZSB0d28gZmlsZXMgYXJlIGNvcGllZCBuZWFy
LXZlcmJhdGltIGZyb20gdGhlIGF1dG8tZ2VuZXJhdGVkCisgICAgICAgdmVyc2lvbnMsIERlcml2
ZWRTb3VyY2VzL0pTL0pTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5bY3BwL2hdCisgICAgICAg
VGhleSBkbyBleGFjdGx5IHRoZSBzYW1lIGVxdWl2YWxlbnQgam9iIGFzIHRoZSBKUyB2ZXJzaW9u
cywKKyAgICAgICBleGNlcHQgdGhhdCBFeGVjU3RhdGUqIGhhcyBiZWVuIHJlbW92ZWQgKHdoaWNo
IGlzIG9uIHRoZSBUT0RPCisgICAgICAgbGlzdCB0byBhZGQgYmFjayBpbikuICBBbHNvIG9uIHRo
ZSBUT0RPIGxpc3QgaXMgdG8gYWRkIGFuCisgICAgICAgYXV0by1nZW5lcmF0b3IgdGhhdCB3aWxs
IGF1dG8tZ2VuZXJhdGUgdGhlc2UgdHdvIGZpbGVzLCBqdXN0CisgICAgICAgYXMgdGhlIEpTIHZl
cnNpb25zIGFyZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mjc0MjUKKworICAgICAgICAqIGJpbmRpbmdzL2dkb20vR0RPTUhUTUxFbGVtZW50V3Jh
cHBlckZhY3RvcnkuY3BwOiBBZGRlZC4gIENvcGllZCBmcm9tIHRoZSBhdXRvLWdlbmVyYXRlZCBK
U0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwIAorICAgICAgICAqIGJpbmRpbmdzL2dkb20v
R0RPTUhUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuaDogIEFkZGVkLiAgQ29waWVkIGZyb20gdGhl
IGF1dG8tZ2VuZXJhdGVkIEpTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oCisKIDIwMDgtMTIt
MDQgIFBpZXJyZS1PbGl2aWVyIExhdG91ciAgPHBvbEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9N
SFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9nZG9tL0dET01IVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xAbGtjbC5uZXQ+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3JnPgorICoKKyAq
IENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKy8qIE5vdGU6IFRoaXMgZmlsZSBpcyBkZXJpdmVkIGJ5IGhhbmQgZnJv
bSBhbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorIGZpbGUuCisgCisgS2VlcGluZyBpdCB1cC10
by1kYXRlIGNvdWxkIHBvdGVudGlhbGx5IGJlIGRvbmUgYnkgYWRkaW5nIGEKKyBtYWtlX25hbWVz
LnBsIGdlbmVyYXRvciwgb3IgYnkgd3JpdGluZyBhIHNlcGFyYXRlIGdlbmVyYXRvciB3aGljaAor
IHRha2VzIEpTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oIGFzIGlucHV0LgorKi8KKworCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImdkb20vR2RvbU5vZGUuaCIKKyNpbmNs
dWRlICJHRE9NSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oIgorI2luY2x1ZGUgImdkb20vR2Rv
bUhUTUxBbmNob3JFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEFwcGxldEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MQXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJn
ZG9tL0dkb21IVE1MQmFzZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MQmFzZUZv
bnRFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEJsb2NrcXVvdGVFbGVtZW50Lmgi
CisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEJvZHlFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9H
ZG9tSFRNTEJSRWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxCdXR0b25FbGVtZW50
LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJn
ZG9tL0dkb21IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhU
TUxUYWJsZUNvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MTW9kRWxlbWVudC5o
IgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxEaXJlY3RvcnlFbGVtZW50LmgiCisjaW5jbHVkZSAi
Z2RvbS9HZG9tSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MRExpc3RF
bGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEVtYmVkRWxlbWVudC5oIgorI2luY2x1
ZGUgImdkb20vR2RvbUhUTUxGaWVsZFNldEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21I
VE1MRm9udEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MRm9ybUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJnZG9tL0dkb21IVE1MRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9H
ZG9tSFRNTEZyYW1lU2V0RWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxIZWFkaW5n
RWxlbWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxIZWFkRWxlbWVudC5oIgorI2luY2x1
ZGUgImdkb20vR2RvbUhUTUxIUkVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MSHRt
bEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MSUZyYW1lRWxlbWVudC5oIgorI2lu
Y2x1ZGUgImdkb20vR2RvbUhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21I
VE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTElzSW5kZXhFbGVtZW50
LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTExhYmVsRWxlbWVudC5oIgorI2luY2x1ZGUgImdk
b20vR2RvbUhUTUxMZWdlbmRFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTExJRWxl
bWVudC5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxMaW5rRWxlbWVudC5oIgorI2luY2x1ZGUg
Imdkb20vR2RvbUhUTUxNYXBFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTE1hcnF1
ZWVFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTE1lbnVFbGVtZW50LmgiCisjaW5j
bHVkZSAiZ2RvbS9HZG9tSFRNTE1ldGFFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRN
TE9iamVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MT0xpc3RFbGVtZW50Lmgi
CisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTE9wdEdyb3VwRWxlbWVudC5oIgorI2luY2x1ZGUgImdk
b20vR2RvbUhUTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFBhcmFn
cmFwaEVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MUGFyYW1FbGVtZW50LmgiCisj
aW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFByZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21I
VE1MUXVvdGVFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFNjcmlwdEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgImdk
b20vR2RvbUhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MVGFibGVF
bGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJnZG9tL0dkb21IVE1MVGFibGVDZWxsRWxlbWVudC5oIgorI2luY2x1ZGUgImdk
b20vR2RvbUhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MVGl0
bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFRhYmxlUm93RWxlbWVudC5oIgor
I2luY2x1ZGUgImdkb20vR2RvbUhUTUxVTGlzdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgImdkb20v
R2RvbUhUTUxFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxBbmNob3JF
bGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxBcHBsZXRFbGVtZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxBcmVhRWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJnZG9tL0dkb21IVE1MQmFzZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2Rv
bS9HZG9tSFRNTEJhc2VGb250RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21I
VE1MQmxvY2txdW90ZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEJv
ZHlFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxCUkVsZW1lbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEJ1dHRvbkVsZW1lbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiZ2RvbS9HZG9tSFRNTENhbnZhc0VsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
Z2RvbS9HZG9tSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2Rv
bS9HZG9tSFRNTFRhYmxlQ29sRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21I
VE1MTW9kRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MRGlyZWN0b3J5
RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MRGl2RWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MRExpc3RFbGVtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgImdkb20vR2RvbUhUTUxFbWJlZEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2Rv
bS9HZG9tSFRNTEZpZWxkU2V0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21I
VE1MRm9udEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEZvcm1FbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxGcmFtZUVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEZyYW1lU2V0RWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJnZG9tL0dkb21IVE1MSGVhZGluZ0VsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
Z2RvbS9HZG9tSFRNTEhlYWRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhU
TUxIUkVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTEh0bWxFbGVtZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxJRnJhbWVFbGVtZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxJbWFnZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiZ2RvbS9HZG9tSFRNTElucHV0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dk
b21IVE1MSXNJbmRleEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTExh
YmVsRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MTGVnZW5kRWxlbWVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MTElFbGVtZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgImdkb20vR2RvbUhUTUxMaW5rRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJn
ZG9tL0dkb21IVE1MTWFwRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1M
TWFycXVlZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTE1lbnVFbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxNZXRhRWxlbWVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MT2JqZWN0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJnZG9tL0dkb21IVE1MT0xpc3RFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20v
R2RvbUhUTUxPcHRHcm91cEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRN
TE9wdGlvbkVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFBhcmFncmFw
aEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFBhcmFtRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MUHJlRWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJnZG9tL0dkb21IVE1MUXVvdGVFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdk
b20vR2RvbUhUTUxTY3JpcHRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhU
TUxTZWxlY3RFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdkb20vR2RvbUhUTUxTdHlsZUVs
ZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9tSFRNTFRhYmxlRWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MVGFibGVTZWN0aW9uRWxlbWVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MVGFibGVDZWxsRWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJnZG9tL0dkb21IVE1MVGV4dEFyZWFFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
Imdkb20vR2RvbUhUTUxUaXRsZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiZ2RvbS9HZG9t
SFRNTFRhYmxlUm93RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJnZG9tL0dkb21IVE1MVUxp
c3RFbGVtZW50UHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisKKyNpbmNsdWRl
ICJIVE1MQW5jaG9yRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEJhc2VFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTEJhc2VGb250RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxCbG9ja3F1
b3RlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxCUkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQnV0dG9uRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MVGFibGVDb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1vZEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRGlyZWN0b3J5RWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxEaXZFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTERMaXN0RWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxFbWJlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEZvbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZGluZ0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
SGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSFJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TEh0bWxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMSUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWFwRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxN
ZW51RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNZXRhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxPYmplY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE9MaXN0RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxQYXJhZ3JhcGhFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFBhcmFt
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcmVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFF1
b3RlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
VGV4dEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRpdGxlRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVUxpc3RFbGVtZW50Lmgi
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOworCit0
eXBlZGVmIGdwb2ludGVyICgqQ3JlYXRlSFRNTEVsZW1lbnRXcmFwcGVyRnVuY3Rpb24pKFBhc3NS
ZWZQdHI8SFRNTEVsZW1lbnQ+KTsKKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUFuY2hvcldyYXBw
ZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhU
TUxBbmNob3JFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4oZWxlbWVudC5n
ZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlQXBwbGV0V3JhcHBlcihQYXNzUmVm
UHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTEFwcGxldEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9
CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVBcmVhV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTEFyZWFFbGVtZW50KHN0YXRpY19j
YXN0PEhUTUxBcmVhRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2lu
dGVyIGNyZWF0ZUJhc2VXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7
CisgICAgcmV0dXJuIHdyYXBIVE1MQmFzZUVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVt
ZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlQmFzZUZv
bnRXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJu
IHdyYXBIVE1MQmFzZUZvbnRFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnQq
PihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVCbG9ja3F1b3Rl
V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3
cmFwSFRNTEJsb2NrcXVvdGVFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVu
dCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUJvZHlXcmFw
cGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBI
VE1MQm9keUVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50Kj4oZWxlbWVudC5nZXQo
KSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlQlJXcmFwcGVyKFBhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MQlJFbGVtZW50KHN0YXRp
Y19jYXN0PEhUTUxCUkVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9p
bnRlciBjcmVhdGVCdXR0b25XcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQp
Cit7CisgICAgcmV0dXJuIHdyYXBIVE1MQnV0dG9uRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MQnV0
dG9uRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0
ZUNhbnZhc1dyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gd3JhcEhUTUxDYW52YXNFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50
Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlVGFibGVDYXB0
aW9uV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVy
biB3cmFwSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVU
YWJsZUNvbFdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gd3JhcEhUTUxUYWJsZUNvbEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxl
bWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZU1vZFdy
YXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3Jh
cEhUTUxNb2RFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50Kj4oZWxlbWVudC5nZXQo
KSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlRGlyZWN0b3J5V3JhcHBlcihQYXNzUmVm
UHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTERpcmVjdG9y
eUVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnQqPihlbGVtZW50LmdldCgp
KSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVEaXZXcmFwcGVyKFBhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MRGl2RWxlbWVudChzdGF0
aWNfY2FzdDxIVE1MRGl2RWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdw
b2ludGVyIGNyZWF0ZURMaXN0V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50
KQoreworICAgIHJldHVybiB3cmFwSFRNTERMaXN0RWxlbWVudChzdGF0aWNfY2FzdDxIVE1MRExp
c3RFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRl
RW1iZWRXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0
dXJuIHdyYXBIVE1MRW1iZWRFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihl
bGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVGaWVsZFNldFdyYXBw
ZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhU
TUxGaWVsZFNldEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudCo+KGVsZW1l
bnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUZvbnRXcmFwcGVyKFBhc3NS
ZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MRm9udEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQor
CitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlRm9ybVdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxGb3JtRWxlbWVudChzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRl
ciBjcmVhdGVGcmFtZVdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sK
KyAgICByZXR1cm4gd3JhcEhUTUxGcmFtZUVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxl
bWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUZyYW1l
U2V0V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVy
biB3cmFwSFRNTEZyYW1lU2V0RWxlbWVudChzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50
Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlSGVhZGluZ1dy
YXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3Jh
cEhUTUxIZWFkaW5nRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnQqPihlbGVt
ZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVIZWFkV3JhcHBlcihQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTEhlYWRF
bGVtZW50KHN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30K
Kworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUhSV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50
PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTEhSRWxlbWVudChzdGF0aWNfY2FzdDxI
VE1MSFJFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3Jl
YXRlSHRtbFdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gd3JhcEhUTUxIdG1sRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnQqPihl
bGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVJRnJhbWVXcmFwcGVy
KFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1M
SUZyYW1lRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KGVsZW1lbnQuZ2V0
KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZUltYWdlV3JhcHBlcihQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTEltYWdlRWxlbWVu
dChzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitz
dGF0aWMgZ3BvaW50ZXIgY3JlYXRlSW5wdXRXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MSW5wdXRFbGVtZW50KHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRl
ciBjcmVhdGVJc0luZGV4V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQor
eworICAgIHJldHVybiB3cmFwSFRNTElzSW5kZXhFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxJc0lu
ZGV4RWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0
ZUxhYmVsV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJl
dHVybiB3cmFwSFRNTExhYmVsRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4o
ZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlTGVnZW5kV3JhcHBl
cihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRN
TExlZ2VuZEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnQqPihlbGVtZW50Lmdl
dCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVMSVdyYXBwZXIoUGFzc1JlZlB0cjxI
VE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxMSUVsZW1lbnQoc3Rh
dGljX2Nhc3Q8SFRNTExJRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdw
b2ludGVyIGNyZWF0ZUxpbmtXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQp
Cit7CisgICAgcmV0dXJuIHdyYXBIVE1MTGlua0VsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTExpbmtF
bGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlTWFw
V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3
cmFwSFRNTE1hcEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnQqPihlbGVtZW50Lmdl
dCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVNYXJxdWVlV3JhcHBlcihQYXNzUmVm
UHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTE1hcnF1ZWVF
bGVtZW50KHN0YXRpY19jYXN0PEhUTUxNYXJxdWVlRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsK
K30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZU1lbnVXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MTWVudUVsZW1lbnQoc3RhdGlj
X2Nhc3Q8SFRNTE1lbnVFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3Bv
aW50ZXIgY3JlYXRlTWV0YVdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkK
K3sKKyAgICByZXR1cm4gd3JhcEhUTUxNZXRhRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MTWV0YUVs
ZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVPYmpl
Y3RXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJu
IHdyYXBIVE1MT2JqZWN0RWxlbWVudChzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudCo+KGVs
ZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZU9MaXN0V3JhcHBlcihQ
YXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTE9M
aXN0RWxlbWVudChzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkp
OworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlT3B0R3JvdXBXcmFwcGVyKFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MT3B0R3JvdXBFbGVt
ZW50KHN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9
CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVPcHRpb25XcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MT3B0aW9uRWxlbWVudChzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGlj
IGdwb2ludGVyIGNyZWF0ZVBhcmFncmFwaFdyYXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4g
ZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxQYXJhZ3JhcGhFbGVtZW50KHN0YXRpY19j
YXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMg
Z3BvaW50ZXIgY3JlYXRlUGFyYW1XcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1l
bnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MUGFyYW1FbGVtZW50KHN0YXRpY19jYXN0PEhUTUxQ
YXJhbUVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVh
dGVQcmVXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0
dXJuIHdyYXBIVE1MUHJlRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudCo+KGVsZW1l
bnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZVF1b3RlV3JhcHBlcihQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTFF1b3Rl
RWxlbWVudChzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOwor
fQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlU2NyaXB0V3JhcHBlcihQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTFNjcmlwdEVsZW1lbnQoc3Rh
dGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK3N0YXRp
YyBncG9pbnRlciBjcmVhdGVTZWxlY3RXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVs
ZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxI
VE1MU2VsZWN0RWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVy
IGNyZWF0ZVN0eWxlV3JhcHBlcihQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQorewor
ICAgIHJldHVybiB3cmFwSFRNTFN0eWxlRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVt
ZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlVGFibGVX
cmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdy
YXBIVE1MVGFibGVFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPihlbGVtZW50
LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVUYWJsZVNlY3Rpb25XcmFwcGVy
KFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+
KGVsZW1lbnQuZ2V0KCkpKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZVRhYmxlQ2VsbFdy
YXBwZXIoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3Jh
cEhUTUxUYWJsZUNlbGxFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50Kj4o
ZWxlbWVudC5nZXQoKSkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlVGV4dEFyZWFXcmFw
cGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBI
VE1MVGV4dEFyZWFFbGVtZW50KHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihlbGVt
ZW50LmdldCgpKSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBjcmVhdGVUaXRsZVdyYXBwZXIoUGFz
c1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcEhUTUxUaXRs
ZUVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTFRpdGxlRWxlbWVudCo+KGVsZW1lbnQuZ2V0KCkpKTsK
K30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZVRhYmxlUm93V3JhcHBlcihQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBlbGVtZW50KQoreworICAgIHJldHVybiB3cmFwSFRNTFRhYmxlUm93RWxlbWVu
dChzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50Kj4oZWxlbWVudC5nZXQoKSkpOworfQor
CitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlVUxpc3RXcmFwcGVyKFBhc3NSZWZQdHI8SFRNTEVsZW1l
bnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXBIVE1MVUxpc3RFbGVtZW50KHN0YXRpY19j
YXN0PEhUTUxVTGlzdEVsZW1lbnQqPihlbGVtZW50LmdldCgpKSk7Cit9CisKK2dwb2ludGVyIGNy
ZWF0ZUdET01IVE1MV3JhcHBlcihQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxFbGVtZW50PiBlbGVt
ZW50KQoreworICAgIHN0YXRpYyBIYXNoTWFwPFdlYkNvcmU6OkF0b21pY1N0cmluZ0ltcGwqLCBD
cmVhdGVIVE1MRWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gbWFwOworICAgIGlmIChtYXAuaXNFbXB0
eSgpKSB7CisgICAgICAgbWFwLnNldChhVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlQW5j
aG9yV3JhcHBlcik7CisgICAgICAgbWFwLnNldChhcHBsZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBjcmVhdGVBcHBsZXRXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGFyZWFUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCBjcmVhdGVBcmVhV3JhcHBlcik7CisgICAgICAgbWFwLnNldChiYXNlVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlQmFzZVdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoYmFz
ZWZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVCYXNlRm9udFdyYXBwZXIpOworICAg
ICAgIG1hcC5zZXQoYmxvY2txdW90ZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUJsb2Nr
cXVvdGVXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGJvZHlUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBjcmVhdGVCb2R5V3JhcHBlcik7CisgICAgICAgbWFwLnNldChiclRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksIGNyZWF0ZUJSV3JhcHBlcik7CisgICAgICAgbWFwLnNldChidXR0b25UYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCBjcmVhdGVCdXR0b25XcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGNhbnZh
c1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUNhbnZhc1dyYXBwZXIpOworICAgICAgIG1h
cC5zZXQoY2FwdGlvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZVRhYmxlQ2FwdGlvbldy
YXBwZXIpOworICAgICAgIG1hcC5zZXQoY29sVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRl
VGFibGVDb2xXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGRlbFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksIGNyZWF0ZU1vZFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoZGlyVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgY3JlYXRlRGlyZWN0b3J5V3JhcHBlcik7CisgICAgICAgbWFwLnNldChkaXZUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVEaXZXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGRs
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlRExpc3RXcmFwcGVyKTsKKyAgICAgICBtYXAu
c2V0KGVtYmVkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlRW1iZWRXcmFwcGVyKTsKKyAg
ICAgICBtYXAuc2V0KGZpZWxkc2V0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlRmllbGRT
ZXRXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGZvbnRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBj
cmVhdGVGb250V3JhcHBlcik7CisgICAgICAgbWFwLnNldChmb3JtVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgY3JlYXRlRm9ybVdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoZnJhbWVUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCBjcmVhdGVGcmFtZVdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoZnJhbWVz
ZXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVGcmFtZVNldFdyYXBwZXIpOworICAgICAg
IG1hcC5zZXQoaDFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVIZWFkaW5nV3JhcHBlcik7
CisgICAgICAgbWFwLnNldChoZWFkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlSGVhZFdy
YXBwZXIpOworICAgICAgIG1hcC5zZXQoaHJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVI
UldyYXBwZXIpOworICAgICAgIG1hcC5zZXQoaHRtbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNy
ZWF0ZUh0bWxXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGlmcmFtZVRhZy5sb2NhbE5hbWUoKS5p
bXBsKCksIGNyZWF0ZUlGcmFtZVdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoaW1nVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgY3JlYXRlSW1hZ2VXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGlucHV0
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlSW5wdXRXcmFwcGVyKTsKKyAgICAgICBtYXAu
c2V0KGlzaW5kZXhUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVJc0luZGV4V3JhcHBlcik7
CisgICAgICAgbWFwLnNldChsYWJlbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUxhYmVs
V3JhcHBlcik7CisgICAgICAgbWFwLnNldChsZWdlbmRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBj
cmVhdGVMZWdlbmRXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGxpVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgY3JlYXRlTElXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGxpbmtUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCBjcmVhdGVMaW5rV3JhcHBlcik7CisgICAgICAgbWFwLnNldChtYXBUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVNYXBXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KG1hcnF1
ZWVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVNYXJxdWVlV3JhcHBlcik7CisgICAgICAg
bWFwLnNldChtZW51VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlTWVudVdyYXBwZXIpOwor
ICAgICAgIG1hcC5zZXQobWV0YVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZU1ldGFXcmFw
cGVyKTsKKyAgICAgICBtYXAuc2V0KG9iamVjdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0
ZU9iamVjdFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQob2xUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBjcmVhdGVPTGlzdFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQob3B0Z3JvdXBUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCBjcmVhdGVPcHRHcm91cFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQob3B0
aW9uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlT3B0aW9uV3JhcHBlcik7CisgICAgICAg
bWFwLnNldChwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlUGFyYWdyYXBoV3JhcHBlcik7
CisgICAgICAgbWFwLnNldChwYXJhbVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZVBhcmFt
V3JhcHBlcik7CisgICAgICAgbWFwLnNldChwcmVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVh
dGVQcmVXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KHFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBj
cmVhdGVRdW90ZVdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoc2NyaXB0VGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgY3JlYXRlU2NyaXB0V3JhcHBlcik7CisgICAgICAgbWFwLnNldChzZWxlY3RUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVTZWxlY3RXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0
KHN0eWxlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlU3R5bGVXcmFwcGVyKTsKKyAgICAg
ICBtYXAuc2V0KHRhYmxlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlVGFibGVXcmFwcGVy
KTsKKyAgICAgICBtYXAuc2V0KHRib2R5VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlVGFi
bGVTZWN0aW9uV3JhcHBlcik7CisgICAgICAgbWFwLnNldCh0ZFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksIGNyZWF0ZVRhYmxlQ2VsbFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQodGV4dGFyZWFUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVUZXh0QXJlYVdyYXBwZXIpOworICAgICAgIG1hcC5z
ZXQodGl0bGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVUaXRsZVdyYXBwZXIpOworICAg
ICAgIG1hcC5zZXQodHJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVUYWJsZVJvd1dyYXBw
ZXIpOworICAgICAgIG1hcC5zZXQodWxUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVVTGlz
dFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoY29sZ3JvdXBUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBjcmVhdGVUYWJsZUNvbFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoaDJUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCBjcmVhdGVIZWFkaW5nV3JhcHBlcik7CisgICAgICAgbWFwLnNldChoM1RhZy5s
b2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUhlYWRpbmdXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0
KGg0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlSGVhZGluZ1dyYXBwZXIpOworICAgICAg
IG1hcC5zZXQoaDVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVIZWFkaW5nV3JhcHBlcik7
CisgICAgICAgbWFwLnNldChoNlRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZUhlYWRpbmdX
cmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGltYWdlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3Jl
YXRlSW1hZ2VXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KGluc1RhZy5sb2NhbE5hbWUoKS5pbXBs
KCksIGNyZWF0ZU1vZFdyYXBwZXIpOworICAgICAgIG1hcC5zZXQoa2V5Z2VuVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgY3JlYXRlU2VsZWN0V3JhcHBlcik7CisgICAgICAgbWFwLnNldChsaXN0aW5n
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlUHJlV3JhcHBlcik7CisgICAgICAgbWFwLnNl
dCh0Zm9vdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNyZWF0ZVRhYmxlU2VjdGlvbldyYXBwZXIp
OworICAgICAgIG1hcC5zZXQodGhUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjcmVhdGVUYWJsZUNl
bGxXcmFwcGVyKTsKKyAgICAgICBtYXAuc2V0KHRoZWFkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
Y3JlYXRlVGFibGVTZWN0aW9uV3JhcHBlcik7CisgICAgICAgbWFwLnNldCh4bXBUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCBjcmVhdGVQcmVXcmFwcGVyKTsKKyAgICB9CisKKyAgICBDcmVhdGVIVE1M
RWxlbWVudFdyYXBwZXJGdW5jdGlvbiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24gPQorICAgICAgICBt
YXAuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgaWYgKGNyZWF0ZVdyYXBw
ZXJGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbihlbGVtZW50
KTsKKyAgICByZXR1cm4gd3JhcEhUTUxFbGVtZW50KGVsZW1lbnQuZ2V0KCkpOworfQorCit9CisK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9y
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvZ2RvbS9HRE9NSFRNTEVsZW1lbnRX
cmFwcGVyRmFjdG9yeS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9nZG9tL0dE
T01IVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAg
QEAKKy8qCisgKiBUSElTIEZJTEUgSVMgREVSSVZFRCBCWSBIQU5EIEZST00gQU4gQVVUT01BVElD
QUxMWSBHRU5FUkFURUQgRklMRS4KKyAqIElUIElTIE5PVCBBTiBBVVRPLUdFTkVSQVRFRCBGSUxF
IElUIFdBUyBDUkVBVEVEIE1BTlVBTExZICpGUk9NKgorICogQU4gQVVUTy1HRU5FUkFURUQgRklM
RS4KKyAqIGtlZXBpbmcgaXQgdXAtdG8tZGF0ZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBkb25lIGJ5
IGFkZGluZworICogYSBtYWtlX25hbWVzLnBsIGdlbmVyYXRvciwgb3IgYnkgd3JpdGluZyBhIHNl
cGFyYXRlCisgKiBnZW5lcmF0b3Igd2hpY2ggdGFrZXMgSlNIVE1MRWxlbWVudFdyYXBwZXJGYWN0
b3J5LmggYXMgaW5wdXQuCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgR0RPTUhU
TUxFbGVtZW50V3JhcHBlckZhY3RvcnlfaAorI2RlZmluZSBHRE9NSFRNTEVsZW1lbnRXcmFwcGVy
RmFjdG9yeV9oCisKKyNpbmNsdWRlICJHZG9tTm9kZVByaXZhdGUuaCIKKworI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBIVE1MRWxlbWVu
dDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAgZ3BvaW50ZXIgY3JlYXRlR0RPTUhUTUxX
cmFwcGVyKFBhc3NSZWZQdHI8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+KTsKK30KKworI2VuZGlmIC8v
IEdET01IVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5X2gK
</data>
<flag name="review"
          id="17505"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33977</attachid>
            <date>2009-08-03 08:23:25 -0700</date>
            <delta_ts>2009-08-03 15:09:34 -0700</delta_ts>
            <desc>blatant cut/paste copy of make_names.pl</desc>
            <filename>gdhewf.patch</filename>
            <type>text/plain</type>
            <size>33128</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfZ2RvbV9uYW1lcy5wbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9tYWtlX2dkb21fbmFtZXMucGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9t
YWtlX2dkb21fbmFtZXMucGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA0NyBAQAorIyEvdXNy
L2Jpbi9wZXJsIC13CisKKyMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA5LCBKdWxp
ZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisjIENvcHlyaWdodCAoQykgMjAw
OSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQorIyBDb3B5cmlnaHQgKEMpIDIwMDkgTHVrZSBLZW5uZXRoIENhc3NvbiBM
ZWlnaHRvbiA8bGtjbEBsa2NsLm5ldD4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisjIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisjICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
IyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwordXNl
IHN0cmljdDsKKwordXNlIENvbmZpZzsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgRmlsZTo6UGF0
aDsKK3VzZSBJTzo6RmlsZTsKK3VzZSBJbkZpbGVzUGFyc2VyOwordXNlIFN3aXRjaDsKKworbXkg
JHByaW50RmFjdG9yeSA9IDA7IAorbXkgJHByaW50V3JhcHBlckZhY3RvcnkgPSAwOworbXkgJHRh
Z3NGaWxlID0gIiI7CitteSAkYXR0cnNGaWxlID0gIiI7CitteSAkb3V0cHV0RGlyID0gIi4iOwor
bXkgJXRhZ3MgPSAoKTsKK215ICVhdHRycyA9ICgpOworbXkgJXBhcmFtZXRlcnMgPSAoKTsKK215
ICRleHRyYURlZmluZXMgPSAwOworbXkgJHByZXByb2Nlc3NvciA9ICIvdXNyL2Jpbi9nY2MgLUUg
LVAgLXggYysrIjsKKworR2V0T3B0aW9ucygndGFncz1zJyA9PiBcJHRhZ3NGaWxlLCAKKyAgICAn
YXR0cnM9cycgPT4gXCRhdHRyc0ZpbGUsCisgICAgJ2ZhY3RvcnknID0+IFwkcHJpbnRGYWN0b3J5
LAorICAgICdvdXRwdXREaXI9cycgPT4gXCRvdXRwdXREaXIsCisgICAgJ2V4dHJhRGVmaW5lcz1z
JyA9PiBcJGV4dHJhRGVmaW5lcywKKyAgICAncHJlcHJvY2Vzc29yPXMnID0+IFwkcHJlcHJvY2Vz
c29yLAorICAgICd3cmFwcGVyRmFjdG9yeScgPT4gXCRwcmludFdyYXBwZXJGYWN0b3J5KTsKKwor
ZGllICJZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBvZiAtLXRhZ3MgPGZpbGU+IG9yIC0t
YXR0cnMgPGZpbGU+IiB1bmxlc3MgKGxlbmd0aCgkdGFnc0ZpbGUpIHx8IGxlbmd0aCgkYXR0cnNG
aWxlKSk7CisKK3JlYWROYW1lcygkdGFnc0ZpbGUsICJ0YWdzIikgaWYgbGVuZ3RoKCR0YWdzRmls
ZSk7CityZWFkTmFtZXMoJGF0dHJzRmlsZSwgImF0dHJzIikgaWYgbGVuZ3RoKCRhdHRyc0ZpbGUp
OworCitkaWUgIllvdSBtdXN0IHNwZWNpZnkgYSBuYW1lc3BhY2UgKGUuZy4gU1ZHKSBmb3IgPG5h
bWVzcGFjZT5OYW1lcy5oIiB1bmxlc3MgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9OworZGllICJZ
b3UgbXVzdCBzcGVjaWZ5IGEgbmFtZXNwYWNlVVJJIChlLmcuIGh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnKSIgdW5sZXNzICRwYXJhbWV0ZXJzeyduYW1lc3BhY2VVUkknfTsKKworJHBhcmFtZXRl
cnN7J25hbWVzcGFjZVByZWZpeCd9ID0gJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9IHVubGVzcyAk
cGFyYW1ldGVyc3snbmFtZXNwYWNlUHJlZml4J307CisKK21rcGF0aCgkb3V0cHV0RGlyKTsKK215
ICRuYW1lc0Jhc2VQYXRoID0gIiRvdXRwdXREaXIvJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFt
ZXMiOworbXkgJGZhY3RvcnlCYXNlUGF0aCA9ICIkb3V0cHV0RGlyLyRwYXJhbWV0ZXJzeyduYW1l
c3BhY2UnfUVsZW1lbnRGYWN0b3J5IjsKK215ICR3cmFwcGVyRmFjdG9yeUJhc2VQYXRoID0gIiRv
dXRwdXREaXIvR0RPTSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9y
eSI7CisKKyMgZG9uZSBhbHJlYWR5IHdpdGggbWFrZV9uYW1lcy5wbCBmb3IgSlMKKyNwcmludE5h
bWVzSGVhZGVyRmlsZSgiJG5hbWVzQmFzZVBhdGguaCIpOworI3ByaW50TmFtZXNDcHBGaWxlKCIk
bmFtZXNCYXNlUGF0aC5jcHAiKTsKKworaWYgKCRwcmludEZhY3RvcnkpIHsKKyAgICBwcmludEZh
Y3RvcnlDcHBGaWxlKCIkZmFjdG9yeUJhc2VQYXRoLmNwcCIpOworICAgIHByaW50RmFjdG9yeUhl
YWRlckZpbGUoIiRmYWN0b3J5QmFzZVBhdGguaCIpOworfQorCitpZiAoJHByaW50V3JhcHBlckZh
Y3RvcnkpIHsKKyAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSgiJHdyYXBwZXJGYWN0b3J5
QmFzZVBhdGguY3BwIik7CisgICAgcHJpbnRXcmFwcGVyRmFjdG9yeUhlYWRlckZpbGUoIiR3cmFw
cGVyRmFjdG9yeUJhc2VQYXRoLmgiKTsKK30KKworIyMjIEhhc2ggaW5pdGlhbGl6YXRpb24KKwor
c3ViIGluaXRpYWxpemVUYWdQcm9wZXJ0eUhhc2gKK3sKKyAgICByZXR1cm4gKCdjb25zdHJ1Y3Rv
ck5lZWRzQ3JlYXRlZEJ5UGFyc2VyJyA9PiAwLAorICAgICAgICAgICAgJ2NvbnN0cnVjdG9yTmVl
ZHNGb3JtRWxlbWVudCcgPT4gMCwKKyAgICAgICAgICAgICdleHBvcnRTdHJpbmcnID0+IDAsCisg
ICAgICAgICAgICAnaW50ZXJmYWNlTmFtZScgPT4gZGVmYXVsdEludGVyZmFjZU5hbWUoJF9bMF0p
LAorICAgICAgICAgICAgIyBCeSBkZWZhdWx0LCB0aGUgSlNJbnRlcmZhY2VOYW1lIGlzIHRoZSBz
YW1lIGFzIHRoZSBpbnRlcmZhY2VOYW1lLgorICAgICAgICAgICAgJ0pTSW50ZXJmYWNlTmFtZScg
PT4gZGVmYXVsdEludGVyZmFjZU5hbWUoJF9bMF0pLAorICAgICAgICAgICAgJ21hcFRvVGFnTmFt
ZScgPT4gJycsCisgICAgICAgICAgICAnd3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGUnID0+
IDAsCisgICAgICAgICAgICAnY29uZGl0aW9uYWwnID0+IDApOworfQorCitzdWIgaW5pdGlhbGl6
ZUF0dHJQcm9wZXJ0eUhhc2gKK3sKKyAgICByZXR1cm4gKCdleHBvcnRTdHJpbmcnID0+IDApOwor
fQorCitzdWIgaW5pdGlhbGl6ZVBhcmFtZXRlcnNIYXNoCit7CisgICAgcmV0dXJuICgnbmFtZXNw
YWNlJyA9PiAnJywKKyAgICAgICAgICAgICduYW1lc3BhY2VQcmVmaXgnID0+ICcnLAorICAgICAg
ICAgICAgJ25hbWVzcGFjZVVSSScgPT4gJycsCisgICAgICAgICAgICAnZ3VhcmRGYWN0b3J5V2l0
aCcgPT4gJycsCisgICAgICAgICAgICAndGFnc051bGxOYW1lc3BhY2UnID0+IDAsCisgICAgICAg
ICAgICAnYXR0cnNOdWxsTmFtZXNwYWNlJyA9PiAwLAorICAgICAgICAgICAgJ2V4cG9ydFN0cmlu
Z3MnID0+IDApOworfQorCitzdWIgZGVmYXVsdEludGVyZmFjZU5hbWUKK3sKKyAgICBkaWUgIk5v
IG5hbWVzcGFjZSBmb3VuZCIgaWYgISRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfTsKKyAgICByZXR1
cm4gJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9IC4gdXBwZXJDYXNlTmFtZSgkX1swXSkgLiAiRWxl
bWVudCIKK30KKworIyMjIFBhcnNpbmcgaGFuZGxlcnMKKworc3ViIHRhZ3NIYW5kbGVyCit7Cisg
ICAgbXkgKCR0YWcsICRwcm9wZXJ0eSwgJHZhbHVlKSA9IEBfOworCisgICAgJHRhZyA9fiBzLy0v
Xy9nOworCisgICAgIyBJbml0aWFsaXplIGRlZmF1bHQgcHJvcGVydGllcycgdmFsdWVzLgorICAg
ICR0YWdzeyR0YWd9ID0geyBpbml0aWFsaXplVGFnUHJvcGVydHlIYXNoKCR0YWcpIH0gaWYgIWRl
ZmluZWQoJHRhZ3N7JHRhZ30pOworCisgICAgaWYgKCRwcm9wZXJ0eSkgeworICAgICAgICBkaWUg
IlVua25vd24gcHJvcGVydHkgJHByb3BlcnR5IGZvciB0YWcgJHRhZ1xuIiBpZiAhZGVmaW5lZCgk
dGFnc3skdGFnfXskcHJvcGVydHl9KTsKKyAgICAgICAgIyBUaGUgY29kZSByZWx5IG9uIEpTSW50
ZXJmYWNlTmFtZSBkZXJpdmluZyBmcm9tIGludGVyZmFjZU5hbWUgdG8gY2hlY2sgZm9yIGN1c3Rv
bSBKU0ludGVyZmFjZU5hbWUuCisgICAgICAgICMgU28ganVzdCBvdmVycmlkZSBKU0ludGVyZmFj
ZU5hbWUgaWYgaXQgd2FzIG5vdCBhbHJlYWR5IHNldC4KKyAgICAgICAgaWYgKCRwcm9wZXJ0eSBl
cSAiaW50ZXJmYWNlTmFtZSIgJiYgJHRhZ3N7JHRhZ317J0pTSW50ZXJmYWNlTmFtZSd9IGVxICR0
YWdzeyR0YWd9eydpbnRlcmZhY2VOYW1lJ30pIHsKKyAgICAgICAgICAgICAgICAkdGFnc3skdGFn
fXsnSlNJbnRlcmZhY2VOYW1lJ30gPSAkdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgJHRhZ3N7
JHRhZ317JHByb3BlcnR5fSA9ICR2YWx1ZTsKKyAgICB9Cit9CisKK3N1YiBhdHRyc0hhbmRsZXIK
K3sKKyAgICBteSAoJGF0dHIsICRwcm9wZXJ0eSwgJHZhbHVlKSA9IEBfOworCisgICAgJGF0dHIg
PX4gcy8tL18vZzsKKworICAgICMgSW5pdGlhbGl6ZSBkZWZhdWx0IHByb3BlcnRpZXMnIHZhbHVl
cy4KKyAgICAkYXR0cnN7JGF0dHJ9ID0geyBpbml0aWFsaXplQXR0clByb3BlcnR5SGFzaCgkYXR0
cikgfSBpZiAhZGVmaW5lZCgkYXR0cnN7JGF0dHJ9KTsKKworICAgIGlmICgkcHJvcGVydHkpIHsK
KyAgICAgICAgZGllICJVbmtub3duIHByb3BlcnR5ICRwcm9wZXJ0eSBmb3IgYXR0cmlidXRlICRh
dHRyXG4iIGlmICFkZWZpbmVkKCRhdHRyc3skYXR0cn17JHByb3BlcnR5fSk7CisgICAgICAgICRh
dHRyc3skYXR0cn17JHByb3BlcnR5fSA9ICR2YWx1ZTsKKyAgICB9Cit9CisKK3N1YiBwYXJhbWV0
ZXJzSGFuZGxlcgoreworICAgIG15ICgkcGFyYW1ldGVyLCAkdmFsdWUpID0gQF87CisKKyAgICAj
IEluaXRpYWxpemUgZGVmYXVsdCBwcm9wZXJ0aWVzJyB2YWx1ZXMuCisgICAgJXBhcmFtZXRlcnMg
PSBpbml0aWFsaXplUGFyYW1ldGVyc0hhc2goKSBpZiAhKGtleXMgJXBhcmFtZXRlcnMpOworCisg
ICAgZGllICJVbmtub3duIHBhcmFtZXRlciAkcGFyYW1ldGVyIGZvciB0YWdzL2F0dHJzXG4iIGlm
ICFkZWZpbmVkKCRwYXJhbWV0ZXJzeyRwYXJhbWV0ZXJ9KTsKKyAgICAkcGFyYW1ldGVyc3skcGFy
YW1ldGVyfSA9ICR2YWx1ZTsKK30KKworIyMgU3VwcG9ydCByb3V0aW5lcworCitzdWIgcmVhZE5h
bWVzCit7CisgICAgbXkgKCRuYW1lc0ZpbGUsICR0eXBlKSA9IEBfOworCisgICAgbXkgJG5hbWVz
ID0gbmV3IElPOjpGaWxlOworCisgICAgaWYgKCRleHRyYURlZmluZXMgZXEgMCkgeworICAgICAg
ICBvcGVuKCRuYW1lcywgJHByZXByb2Nlc3NvciAuICIgIiAuICRuYW1lc0ZpbGUgLiAifCIpIG9y
IGRpZSAiRmFpbGVkIHRvIG9wZW4gZmlsZTogJG5hbWVzRmlsZSI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgb3BlbigkbmFtZXMsICRwcmVwcm9jZXNzb3IgLiAiIC1EIiAuIGpvaW4oIiAtRCIsIHNw
bGl0KCIgIiwgJGV4dHJhRGVmaW5lcykpIC4gIiAiIC4gJG5hbWVzRmlsZSAuICJ8Iikgb3IgZGll
ICJGYWlsZWQgdG8gb3BlbiBmaWxlOiAkbmFtZXNGaWxlIjsKKyAgICB9CisKKyAgICAjIFN0b3Jl
IGhhc2hlcyBrZXlzIGNvdW50IHRvIGtub3cgaWYgc29tZSBpbnNlcnRpb24gb2NjdXJlZC4KKyAg
ICBteSAkdGFnc0NvdW50ID0ga2V5cyAldGFnczsKKyAgICBteSAkYXR0cnNDb3VudCA9IGtleXMg
JWF0dHJzOworCisgICAgbXkgJEluUGFyc2VyID0gSW5GaWxlc1BhcnNlci0+bmV3KCk7CisKKyAg
ICBzd2l0Y2ggKCR0eXBlKSB7CisgICAgICAgIGNhc2UgInRhZ3MiIHsKKyAgICAgICAgICAgICRJ
blBhcnNlci0+cGFyc2UoJG5hbWVzLCBcJnBhcmFtZXRlcnNIYW5kbGVyLCBcJnRhZ3NIYW5kbGVy
KTsKKyAgICAgICAgfQorICAgICAgICBjYXNlICJhdHRycyIgeworICAgICAgICAgICAgJEluUGFy
c2VyLT5wYXJzZSgkbmFtZXMsIFwmcGFyYW1ldGVyc0hhbmRsZXIsIFwmYXR0cnNIYW5kbGVyKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiRG8gbm90IGtub3cg
aG93IHRvIHBhcnNlICR0eXBlIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsb3NlKCRuYW1l
cyk7CisKKyAgICBkaWUgIkZhaWxlZCB0byByZWFkIG5hbWVzIGZyb20gZmlsZTogJG5hbWVzRmls
ZSIgaWYgKChrZXlzICV0YWdzID09ICR0YWdzQ291bnQpICYmIChrZXlzICVhdHRycyA9PSAkYXR0
cnNDb3VudCkpOworfQorCitzdWIgcHJpbnRNYWNyb3MKK3sKKyAgICBteSAoJEYsICRtYWNybywg
JHN1ZmZpeCwgJG5hbWVzUmVmKSA9IEBfOworICAgIG15ICVuYW1lcyA9ICUkbmFtZXNSZWY7CisK
KyAgICBmb3IgbXkgJG5hbWUgKHNvcnQga2V5cyAlJG5hbWVzUmVmKSB7CisgICAgICAgIHByaW50
IEYgIiRtYWNybyAkbmFtZSIsIiRzdWZmaXg7XG4iOworCisgICAgICAgIGlmICgkcGFyYW1ldGVy
c3snZXhwb3J0U3RyaW5ncyd9IG9yICRuYW1lc3skbmFtZX17ImV4cG9ydFN0cmluZyJ9KSB7IAor
ICAgICAgICAgICAgcHJpbnQgRiAiZXh0ZXJuIGNoYXIgJG5hbWUiLCAiJHtzdWZmaXh9U3RyaW5n
W107XG4iOworICAgICAgICB9CisgICAgfQorfQorCitzdWIgdXNlc0RlZmF1bHRXcmFwcGVyCit7
CisgICAgbXkgJHRhZ05hbWUgPSBzaGlmdDsKKyAgICByZXR1cm4gJHRhZ05hbWUgZXEgJHBhcmFt
ZXRlcnN7J25hbWVzcGFjZSd9IC4gIkVsZW1lbnQiOworfQorCisjIEJ1aWxkIGEgZGlyZWN0IG1h
cHBpbmcgZnJvbSB0aGUgdGFncyB0byB0aGUgRWxlbWVudCB0byBjcmVhdGUsIGV4Y2x1ZGluZwor
IyBFbGVtZW50IHRoYXQgaGF2ZSBub3QgY29uc3RydWN0b3IuCitzdWIgYnVpbGRDb25zdHJ1Y3Rv
ck1hcAoreworICAgIG15ICV0YWdDb25zdHJ1Y3Rvck1hcCA9ICgpOworICAgIGZvciBteSAkdGFn
TmFtZSAoa2V5cyAldGFncykgeworICAgICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICR0YWdzeyR0
YWdOYW1lfXsnaW50ZXJmYWNlTmFtZSd9OworICAgICAgICBuZXh0IGlmICh1c2VzRGVmYXVsdFdy
YXBwZXIoJGludGVyZmFjZU5hbWUpKTsKKworICAgICAgICBpZiAoJHRhZ3N7JHRhZ05hbWV9eydt
YXBUb1RhZ05hbWUnfSkgeworICAgICAgICAgICAgZGllICJDYW5ub3QgaGFuZGxlIG11bHRpcGxl
IG1hcFRvVGFnTmFtZSBmb3IgJHRhZ05hbWVcbiIgaWYgJHRhZ3N7JHRhZ3N7JHRhZ05hbWV9eydt
YXBUb1RhZ05hbWUnfX17J21hcFRvVGFnTmFtZSd9OworICAgICAgICAgICAgJGludGVyZmFjZU5h
bWUgPSAkdGFnc3sgJHRhZ3N7JHRhZ05hbWV9eydtYXBUb1RhZ05hbWUnfSB9eydpbnRlcmZhY2VO
YW1lJ307CisgICAgICAgIH0KKworICAgICAgICAjIENob3AgdGhlIHN0cmluZyB0byBrZWVwIHRo
ZSBpbnRlcmVzdGluZyBwYXJ0LgorICAgICAgICAkaW50ZXJmYWNlTmFtZSA9fiBzLyRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfSguKilFbGVtZW50LyQxLzsKKyAgICAgICAgJHRhZ0NvbnN0cnVjdG9y
TWFweyR0YWdOYW1lfSA9IGxjKCRpbnRlcmZhY2VOYW1lKTsKKyAgICB9CisKKyAgICByZXR1cm4g
JXRhZ0NvbnN0cnVjdG9yTWFwOworfQorCisjIEhlbHBlciBtZXRob2QgdGhhdCBwcmludCB0aGUg
Y29uc3RydWN0b3IncyBzaWduYXR1cmUgYXZvaWRpbmcKKyMgdW5uZWVkZWQgYXJndW1lbnRzLgor
c3ViIHByaW50Q29uc3RydWN0b3JTaWduYXR1cmUKK3sKKyAgICBteSAoJEYsICR0YWdOYW1lLCAk
Y29uc3RydWN0b3JOYW1lLCAkY29uc3RydWN0b3JUYWdOYW1lKSA9IEBfOworCisgICAgcHJpbnQg
RiAic3RhdGljIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4gJHtj
b25zdHJ1Y3Rvck5hbWV9Q29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgJGNvbnN0cnVj
dG9yVGFnTmFtZSwgRG9jdW1lbnQqIGRvYyI7CisgICAgaWYgKCRwYXJhbWV0ZXJzeyduYW1lc3Bh
Y2UnfSBlcSAiSFRNTCIpIHsKKyAgICAgICAgcHJpbnQgRiAiLCBIVE1MRm9ybUVsZW1lbnQqIjsK
KyAgICAgICAgaWYgKCR0YWdzeyR0YWdOYW1lfXsnY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50
J30pIHsKKyAgICAgICAgICAgIHByaW50IEYgIiBmb3JtRWxlbWVudCI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcHJpbnQgRiAiLCBib29sIjsKKyAgICBpZiAoJHRhZ3N7JHRhZ05hbWV9eydjb25z
dHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyJ30pIHsKKyAgICAgICAgcHJpbnQgRiAiIGNyZWF0
ZWRCeVBhcnNlciI7IAorICAgIH0KKyAgICBwcmludCBGICIpXG57XG4iOworfQorCisjIEhlbHBl
ciBtZXRob2QgdG8gZHVtcCB0aGUgY29uc3RydWN0b3IgaW50ZXJpb3IgYW5kIGNhbGwgdGhlIAor
IyBFbGVtZW50IGNvbnN0cnVjdG9yIHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4KKyMgVGhlIHZh
cmlhYmxlIG5hbWVzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgcHJldmlvdXMgbWV0
aG9kLgorc3ViIHByaW50Q29uc3RydWN0b3JJbnRlcmlvcgoreworICAgIG15ICgkRiwgJHRhZ05h
bWUsICRpbnRlcmZhY2VOYW1lLCAkY29uc3RydWN0b3JUYWdOYW1lKSA9IEBfOworCisgICAgIyBI
YW5kbGUgbWVkaWEgZWxlbWVudHMuCisgICAgaWYgKCR0YWdzeyR0YWdOYW1lfXsnd3JhcHBlck9u
bHlJZk1lZGlhSXNBdmFpbGFibGUnfSkgeworICAgICAgICBwcmludCBGIDw8RU5ECisgICAgaWYg
KCFNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MRWxl
bWVudCgkY29uc3RydWN0b3JUYWdOYW1lLCBkb2MpOworRU5ECis7CisgICAgfQorCisgICAgIyBO
b3cgY2FsbCB0aGUgY29uc3RydWN0b3Igd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGVycy4KKyAgICBw
cmludCBGICIgICAgcmV0dXJuIG5ldyAke2ludGVyZmFjZU5hbWV9KCRjb25zdHJ1Y3RvclRhZ05h
bWUsIGRvYyI7CisgICAgaWYgKCR0YWdzeyR0YWdOYW1lfXsnY29uc3RydWN0b3JOZWVkc0Zvcm1F
bGVtZW50J30pIHsKKyAgICAgICAgcHJpbnQgRiAiLCBmb3JtRWxlbWVudCI7CisgICAgfQorICAg
IGlmICgkdGFnc3skdGFnTmFtZX17J2NvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXInfSkg
eworICAgICAgICBwcmludCBGICIsIGNyZWF0ZWRCeVBhcnNlciI7CisgICAgfQorICAgIHByaW50
IEYgIik7XG59XG5cbiI7Cit9CisKK3N1YiBwcmludENvbnN0cnVjdG9ycworeworICAgIG15ICgk
RiwgJHRhZ0NvbnN0cnVjdG9yTWFwUmVmKSA9IEBfOworICAgIG15ICV0YWdDb25zdHJ1Y3Rvck1h
cCA9ICUkdGFnQ29uc3RydWN0b3JNYXBSZWY7CisKKyAgICBwcmludCBGICIjaWYgJHBhcmFtZXRl
cnN7J2d1YXJkRmFjdG9yeVdpdGgnfVxuIiBpZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0
aCd9OworCisgICAgIyBUaGlzIGlzIHRvIGF2b2lkIGdlbmVyYXRpbmcgdGhlIHNhbWUgY29uc3Ry
dWN0b3Igc2V2ZXJhbCB0aW1lcy4KKyAgICBteSAldW5pcXVlVGFncyA9ICgpOworICAgIGZvciBt
eSAkdGFnTmFtZSAoc29ydCBrZXlzICV0YWdDb25zdHJ1Y3Rvck1hcCkgeworICAgICAgICBteSAk
aW50ZXJmYWNlTmFtZSA9ICR0YWdzeyR0YWdOYW1lfXsnaW50ZXJmYWNlTmFtZSd9OworCisgICAg
ICAgICMgSWdub3JlIHRoZSBtYXBwZWQgdGFnCisgICAgICAgICMgRklYTUU6IEl0IGNvdWxkIGJl
IG1vdmVkIGluc2lkZSB0aGlzIGxvb3AgYnV0IHdhcyBzcGxpdCBmb3IgcmVhZGliaWxpdHkuCisg
ICAgICAgIG5leHQgaWYgKGRlZmluZWQoJHVuaXF1ZVRhZ3N7JGludGVyZmFjZU5hbWV9KSB8fCAk
dGFnc3skdGFnTmFtZX17J21hcFRvVGFnTmFtZSd9KTsKKworICAgICAgICAkdW5pcXVlVGFnc3sk
aW50ZXJmYWNlTmFtZX0gPSAnMSc7CisKKyAgICAgICAgbXkgJGNvbmRpdGlvbmFsID0gJHRhZ3N7
JHRhZ05hbWV9eyJjb25kaXRpb25hbCJ9OworICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7Cisg
ICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAiRU5BQkxFKCIgLiBqb2luKCIpICYm
IEVOQUJMRSgiLCBzcGxpdCgvJi8sICRjb25kaXRpb25hbCkpIC4gIikiOworICAgICAgICAgICAg
cHJpbnQgRiAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiI7CisgICAgICAgIH0KKworICAg
ICAgICBwcmludENvbnN0cnVjdG9yU2lnbmF0dXJlKCRGLCAkdGFnTmFtZSwgJHRhZ0NvbnN0cnVj
dG9yTWFweyR0YWdOYW1lfSwgInRhZ05hbWUiKTsKKyAgICAgICAgcHJpbnRDb25zdHJ1Y3Rvcklu
dGVyaW9yKCRGLCAkdGFnTmFtZSwgJGludGVyZmFjZU5hbWUsICJ0YWdOYW1lIik7CisKKyAgICAg
ICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAgICAgcHJpbnQgRiAiI2VuZGlmXG5cbiI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjIE1hcHBlZCB0YWcgbmFtZSB1c2VzIGEgc3BlY2lh
bCB3cmFwcGVyIHRvIGtlZXAgdGhlaXIgcHJlZml4IGFuZCBuYW1lc3BhY2VVUkkgd2hpbGUgdXNp
bmcgdGhlIG1hcHBlZCBsb2NhbG5hbWUuCisgICAgZm9yIG15ICR0YWdOYW1lIChzb3J0IGtleXMg
JXRhZ0NvbnN0cnVjdG9yTWFwKSB7CisgICAgICAgIGlmICgkdGFnc3skdGFnTmFtZX17J21hcFRv
VGFnTmFtZSd9KSB7CisgICAgICAgICAgICBteSAkbWFwcGVkTmFtZSA9ICR0YWdzeyR0YWdOYW1l
fXsnbWFwVG9UYWdOYW1lJ307CisgICAgICAgICAgICBwcmludENvbnN0cnVjdG9yU2lnbmF0dXJl
KCRGLCAkbWFwcGVkTmFtZSwgJG1hcHBlZE5hbWUgLiAiVG8iIC4gJHRhZ05hbWUsICJ0YWdOYW1l
Iik7CisgICAgICAgICAgICBwcmludENvbnN0cnVjdG9ySW50ZXJpb3IoJEYsICRtYXBwZWROYW1l
LCAkdGFnc3skbWFwcGVkTmFtZX17J2ludGVyZmFjZU5hbWUnfSwgIlF1YWxpZmllZE5hbWUodGFn
TmFtZS5wcmVmaXgoKSwgJHttYXBwZWROYW1lfVRhZy5sb2NhbE5hbWUoKSwgdGFnTmFtZS5uYW1l
c3BhY2VVUkkoKSkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaW50IEYgIiNlbmRpZlxu
IiBpZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9OworfQorCitzdWIgcHJpbnRGdW5j
dGlvbkluaXRzCit7CisgICAgbXkgKCRGLCAkdGFnQ29uc3RydWN0b3JNYXApID0gQF87CisgICAg
bXkgJXRhZ0NvbnN0cnVjdG9yTWFwID0gJSR0YWdDb25zdHJ1Y3Rvck1hcDsKKworICAgIGZvciBt
eSAkdGFnTmFtZSAoc29ydCBrZXlzICV0YWdDb25zdHJ1Y3Rvck1hcCkgeworCisgICAgICAgIG15
ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWdOYW1lfXsiY29uZGl0aW9uYWwifTsKKyAgICAgICAg
aWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0g
IkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQoLyYvLCAkY29uZGl0aW9uYWwp
KSAuICIpIjsKKyAgICAgICAgICAgIHByaW50IEYgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxu
IjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkdGFnc3skdGFnTmFtZX17J21hcFRvVGFnTmFt
ZSd9KSB7CisgICAgICAgICAgICBwcmludCBGICIgICAgYWRkVGFnKCR7dGFnTmFtZX1UYWcsICR0
YWdzeyR0YWdOYW1lfXsnbWFwVG9UYWdOYW1lJ31UbyR7dGFnTmFtZX1Db25zdHJ1Y3Rvcik7XG4i
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgRiAiICAgIGFkZFRhZygke3Rh
Z05hbWV9VGFnLCAkdGFnQ29uc3RydWN0b3JNYXB7JHRhZ05hbWV9Q29uc3RydWN0b3IpO1xuIjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAgIHBy
aW50IEYgIiNlbmRpZlxuXG4iOworICAgICAgICB9CisgICAgfQorfQorCitzdWIgc3ZnQ2FwaXRh
bGl6YXRpb25IYWNrcworeworICAgIG15ICRuYW1lID0gc2hpZnQ7CisKKyAgICBpZiAoJG5hbWUg
PX4gL15mZSguKykkLykgeworICAgICAgICAkbmFtZSA9ICJGRSIgLiB1Y2ZpcnN0ICQxOworICAg
IH0KKworICAgIHJldHVybiAkbmFtZTsKK30KKworc3ViIHVwcGVyQ2FzZU5hbWUKK3sKKyAgICBt
eSAkbmFtZSA9IHNoaWZ0OworICAgIAorICAgICRuYW1lID0gc3ZnQ2FwaXRhbGl6YXRpb25IYWNr
cygkbmFtZSkgaWYgKCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfSBlcSAiU1ZHIik7CisKKyAgICB3
aGlsZSAoJG5hbWUgPX4gL14oLio/KV8oLiopLykgeworICAgICAgICAkbmFtZSA9ICQxIC4gdWNm
aXJzdCAkMjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHVjZmlyc3QgJG5hbWU7Cit9CisKK3N1
YiBwcmludExpY2Vuc2VIZWFkZXIKK3sKKyAgICBteSAkRiA9IHNoaWZ0OworICAgIHByaW50IEYg
Ii8qCisgKiBUSElTIEZJTEUgSVMgQVVUT01BVElDQUxMWSBHRU5FUkFURUQsIERPIE5PVCBFRElU
LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKworIjsKK30KKworc3ViIHByaW50TmFtZXNIZWFk
ZXJGaWxlCit7CisgICAgbXkgKCRoZWFkZXJQYXRoKSA9IHNoaWZ0OworICAgIG15ICRGOworICAg
IG9wZW4gRiwgIj4kaGVhZGVyUGF0aCI7CisgICAgCisgICAgcHJpbnRMaWNlbnNlSGVhZGVyKCRG
KTsKKyAgICBwcmludCBGICIjaWZuZGVmIERPTV8kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31OQU1F
U19IXG4iOworICAgIHByaW50IEYgIiNkZWZpbmUgRE9NXyRwYXJhbWV0ZXJzeyduYW1lc3BhY2Un
fU5BTUVTX0hcblxuIjsKKyAgICBwcmludCBGICIjaW5jbHVkZSBcIlF1YWxpZmllZE5hbWUuaFwi
XG5cbiI7CisgICAgCisgICAgcHJpbnQgRiAibmFtZXNwYWNlIFdlYkNvcmUge1xuXG4gbmFtZXNw
YWNlICRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5hbWVzIHtcblxuIjsKKyAgICAKKyAgICBteSAk
bG93ZXJOYW1lc3BhY2UgPSBsYygkcGFyYW1ldGVyc3snbmFtZXNwYWNlUHJlZml4J30pOworICAg
IHByaW50IEYgIiNpZm5kZWYgRE9NXyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5BTUVTX0hJREVf
R0xPQkFMU1xuIjsKKyAgICBwcmludCBGICIvLyBOYW1lc3BhY2VcbiI7CisgICAgcHJpbnQgRiAi
ZXh0ZXJuIGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0cmluZyAke2xvd2VyTmFtZXNwYWNlfU5hbWVz
cGFjZVVSSTtcblxuIjsKKworICAgIGlmIChrZXlzICV0YWdzKSB7CisgICAgICAgIHByaW50IEYg
Ii8vIFRhZ3NcbiI7CisgICAgICAgIHByaW50TWFjcm9zKCRGLCAiZXh0ZXJuIGNvbnN0IFdlYkNv
cmU6OlF1YWxpZmllZE5hbWUiLCAiVGFnIiwgXCV0YWdzKTsKKyAgICB9CisgICAgCisgICAgaWYg
KGtleXMgJWF0dHJzKSB7CisgICAgICAgIHByaW50IEYgIi8vIEF0dHJpYnV0ZXNcbiI7CisgICAg
ICAgIHByaW50TWFjcm9zKCRGLCAiZXh0ZXJuIGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUi
LCAiQXR0ciIsIFwlYXR0cnMpOworICAgIH0KKyAgICBwcmludCBGICIjZW5kaWZcblxuIjsKKyAg
ICAKKyAgICBpZiAoa2V5cyAldGFncykgeworICAgICAgICBwcmludCBGICJXZWJDb3JlOjpRdWFs
aWZpZWROYW1lKiogZ2V0JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9VGFncyhzaXplX3QqIHNpemUp
O1xuIjsKKyAgICB9CisKKyAgICBpZiAoa2V5cyAlYXR0cnMpIHsKKyAgICAgICAgcHJpbnQgRiAi
V2ViQ29yZTo6UXVhbGlmaWVkTmFtZSoqIGdldCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUF0dHJz
KHNpemVfdCogc2l6ZSk7XG4iOworICAgIH0KKyAgICAKKyAgICBwcmludCBGICJcbnZvaWQgaW5p
dCgpO1xuXG4iOworICAgIHByaW50IEYgIn0gfVxuXG4iOworICAgIHByaW50IEYgIiNlbmRpZlxu
XG4iOworICAgIAorICAgIGNsb3NlIEY7Cit9CisKK3N1YiBwcmludE5hbWVzQ3BwRmlsZQorewor
ICAgIG15ICRjcHBQYXRoID0gc2hpZnQ7CisgICAgbXkgJEY7CisgICAgb3BlbiBGLCAiPiRjcHBQ
YXRoIjsKKyAgICAKKyAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOworICAgIAorICAgIG15ICRs
b3dlck5hbWVzcGFjZSA9IGxjKCRwYXJhbWV0ZXJzeyduYW1lc3BhY2VQcmVmaXgnfSk7CisKK3By
aW50IEYgIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxuIjsKKworcHJpbnQgRiAiI2lmZGVmIFNLSVBf
U1RBVElDX0NPTlNUUlVDVE9SU19PTl9HQ0NcbiI7CitwcmludCBGICIjZGVmaW5lIERPTV8kcGFy
YW1ldGVyc3snbmFtZXNwYWNlJ31OQU1FU19ISURFX0dMT0JBTFMgMVxuIjsKK3ByaW50IEYgIiNl
bHNlXG4iOworcHJpbnQgRiAiI2RlZmluZSBRTkFNRV9ERUZBVUxUX0NPTlNUUlVDVE9SIDFcbiI7
CitwcmludCBGICIjZW5kaWZcblxuIjsKKworCitwcmludCBGICIjaW5jbHVkZSBcIiRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfU5hbWVzLmhcIlxuXG4iOworcHJpbnQgRiAiI2luY2x1ZGUgXCJTdGF0
aWNDb25zdHJ1Y3RvcnMuaFwiXG4iOworCitwcmludCBGICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5c
biBuYW1lc3BhY2UgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXMgeworCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworREVGSU5FX0dMT0JBTChBdG9taWNTdHJpbmcsICR7bG93ZXJOYW1l
c3BhY2V9TmFtZXNwYWNlVVJJLCBcIiRwYXJhbWV0ZXJzeyduYW1lc3BhY2VVUkknfVwiKQorIjsK
KworICAgIGlmIChrZXlzICV0YWdzKSB7CisgICAgICAgIHByaW50IEYgIi8vIFRhZ3NcbiI7Cisg
ICAgICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlzICV0YWdzKSB7CisgICAgICAgICAgICBwcmlu
dCBGICJERUZJTkVfR0xPQkFMKFF1YWxpZmllZE5hbWUsICIsICRuYW1lLCAiVGFnLCBudWxsQXRv
bSwgXCIkbmFtZVwiLCAke2xvd2VyTmFtZXNwYWNlfU5hbWVzcGFjZVVSSSk7XG4iOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBwcmludCBGICJcblxuV2ViQ29yZTo6UXVhbGlmaWVkTmFt
ZSoqIGdldCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfVRhZ3Moc2l6ZV90KiBzaXplKVxuIjsKKyAg
ICAgICAgcHJpbnQgRiAie1xuICAgIHN0YXRpYyBXZWJDb3JlOjpRdWFsaWZpZWROYW1lKiAkcGFy
YW1ldGVyc3snbmFtZXNwYWNlJ31UYWdzW10gPSB7XG4iOworICAgICAgICBmb3IgbXkgJG5hbWUg
KHNvcnQga2V5cyAldGFncykgeworICAgICAgICAgICAgcHJpbnQgRiAiICAgICAgICAoV2ViQ29y
ZTo6UXVhbGlmaWVkTmFtZSopJiR7bmFtZX1UYWcsXG4iOworICAgICAgICB9CisgICAgICAgIHBy
aW50IEYgIiAgICB9O1xuIjsKKyAgICAgICAgcHJpbnQgRiAiICAgICpzaXplID0gIiwgc2NhbGFy
KGtleXMgJXRhZ3MpLCAiO1xuIjsKKyAgICAgICAgcHJpbnQgRiAiICAgIHJldHVybiAkcGFyYW1l
dGVyc3snbmFtZXNwYWNlJ31UYWdzO1xuIjsKKyAgICAgICAgcHJpbnQgRiAifVxuIjsKKyAgICB9
CisKKyAgICBpZiAoa2V5cyAlYXR0cnMpIHsKKyAgICAgICAgcHJpbnQgRiAiXG4vLyBBdHRyaWJ1
dGVzXG4iOworICAgICAgICBmb3IgbXkgJG5hbWUgKHNvcnQga2V5cyAlYXR0cnMpIHsKKyAgICAg
ICAgICAgIHByaW50IEYgIkRFRklORV9HTE9CQUwoUXVhbGlmaWVkTmFtZSwgIiwgJG5hbWUsICJB
dHRyLCBudWxsQXRvbSwgXCIkbmFtZVwiLCAke2xvd2VyTmFtZXNwYWNlfU5hbWVzcGFjZVVSSSk7
XG4iOworICAgICAgICB9CisgICAgICAgIHByaW50IEYgIlxuXG5XZWJDb3JlOjpRdWFsaWZpZWRO
YW1lKiogZ2V0JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9QXR0cnMoc2l6ZV90KiBzaXplKVxuIjsK
KyAgICAgICAgcHJpbnQgRiAie1xuICAgIHN0YXRpYyBXZWJDb3JlOjpRdWFsaWZpZWROYW1lKiAk
cGFyYW1ldGVyc3snbmFtZXNwYWNlJ31BdHRyW10gPSB7XG4iOworICAgICAgICBmb3IgbXkgJG5h
bWUgKHNvcnQga2V5cyAlYXR0cnMpIHsKKyAgICAgICAgICAgIHByaW50IEYgIiAgICAgICAgKFdl
YkNvcmU6OlF1YWxpZmllZE5hbWUqKSYke25hbWV9QXR0cixcbiI7CisgICAgICAgIH0KKyAgICAg
ICAgcHJpbnQgRiAiICAgIH07XG4iOworICAgICAgICBwcmludCBGICIgICAgKnNpemUgPSAiLCBz
Y2FsYXIoa2V5cyAlYXR0cnMpLCAiO1xuIjsKKyAgICAgICAgcHJpbnQgRiAiICAgIHJldHVybiAk
cGFyYW1ldGVyc3snbmFtZXNwYWNlJ31BdHRyO1xuIjsKKyAgICAgICAgcHJpbnQgRiAifVxuIjsK
KyAgICB9CisKKyAgICBpZiAoa2V5cyAldGFncykgeworICAgICAgICBwcmludERlZmluaXRpb25T
dHJpbmdzKCRGLCBcJXRhZ3MsICJ0YWdzIik7CisgICAgfQorCisgICAgaWYgKGtleXMgJWF0dHJz
KSB7CisgICAgICAgIHByaW50RGVmaW5pdGlvblN0cmluZ3MoJEYsIFwlYXR0cnMsICJhdHRyaWJ1
dGVzIik7CisgICAgfQorCitwcmludCBGICJcbnZvaWQgaW5pdCgpCit7CisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgCisgICAgLy8gVXNlIHBsYWNlbWVu
dCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xvYmFscy4KKyAgICAKKyAgICBBdG9taWNTdHJpbmc6
OmluaXQoKTsKKyI7CisgICAgCisgICAgcHJpbnQoRiAiICAgIEF0b21pY1N0cmluZyAke2xvd2Vy
TmFtZXNwYWNlfU5TKFwiJHBhcmFtZXRlcnN7J25hbWVzcGFjZVVSSSd9XCIpO1xuXG4iKTsKKwor
ICAgIHByaW50KEYgIiAgICAvLyBOYW1lc3BhY2VcbiIpOworICAgIHByaW50KEYgIiAgICBuZXcg
KCh2b2lkKikmJHtsb3dlck5hbWVzcGFjZX1OYW1lc3BhY2VVUkkpIEF0b21pY1N0cmluZygke2xv
d2VyTmFtZXNwYWNlfU5TKTtcblxuIik7CisgICAgaWYgKGtleXMgJXRhZ3MpIHsKKyAgICAgICAg
bXkgJHRhZ3NOYW1lc3BhY2UgPSAkcGFyYW1ldGVyc3sndGFnc051bGxOYW1lc3BhY2UnfSA/ICJu
dWxsQXRvbSIgOiAiJHtsb3dlck5hbWVzcGFjZX1OUyI7CisgICAgICAgIHByaW50RGVmaW5pdGlv
bnMoJEYsIFwldGFncywgInRhZ3MiLCAkdGFnc05hbWVzcGFjZSk7CisgICAgfQorICAgIGlmIChr
ZXlzICVhdHRycykgeworICAgICAgICBteSAkYXR0cnNOYW1lc3BhY2UgPSAkcGFyYW1ldGVyc3sn
YXR0cnNOdWxsTmFtZXNwYWNlJ30gPyAibnVsbEF0b20iIDogIiR7bG93ZXJOYW1lc3BhY2V9TlMi
OworICAgICAgICBwcmludERlZmluaXRpb25zKCRGLCBcJWF0dHJzLCAiYXR0cmlidXRlcyIsICRh
dHRyc05hbWVzcGFjZSk7CisgICAgfQorCisgICAgcHJpbnQgRiAifVxuXG59IH1cblxuIjsKKyAg
ICBjbG9zZSBGOworfQorCitzdWIgcHJpbnRKU0VsZW1lbnRJbmNsdWRlcworeworICAgIG15ICRG
ID0gc2hpZnQ7CisKKyAgICBteSAldGFnc1NlZW47CisgICAgZm9yIG15ICR0YWdOYW1lIChzb3J0
IGtleXMgJXRhZ3MpIHsKKyAgICAgICAgbXkgJEpTSW50ZXJmYWNlTmFtZSA9ICR0YWdzeyR0YWdO
YW1lfXsiSlNJbnRlcmZhY2VOYW1lIn07CisgICAgICAgIG5leHQgaWYgZGVmaW5lZCgkdGFnc1Nl
ZW57JEpTSW50ZXJmYWNlTmFtZX0pIHx8IHVzZXNEZWZhdWx0SlNXcmFwcGVyKCR0YWdOYW1lKTsK
KyAgICAgICAgbXkgJGNvbmRpdGlvbmFsID0gJHRhZ3N7JHRhZ05hbWV9eyJjb25kaXRpb25hbCJ9
OworICAgICAgICAjIHNraXAgREFUQUdSSUQgZm9yIG5vdworICAgICAgICBuZXh0IGlmICgkY29u
ZGl0aW9uYWwgZXEgJ0RBVEFHUklEJyk7CisKKyAgICAgICAgJHRhZ3NTZWVueyRKU0ludGVyZmFj
ZU5hbWV9ID0gMTsKKworICAgICAgICBwcmludCBGICIjaW5jbHVkZSBcImdkb20vR2RvbSR7SlNJ
bnRlcmZhY2VOYW1lfS5oXCJcbiI7CisgICAgfQorICAgIHByaW50IEYgIlxuIjsKKyAgICBwcmlu
dCBGICIjaW5jbHVkZSBcImdkb20vR2RvbUhUTUxFbGVtZW50UHJpdmF0ZS5oXCJcbiI7CisgICAg
bXkgJXRhZ3NTZWVuUHJpdmF0ZTsKKyAgICBmb3IgbXkgJHRhZ05hbWUgKHNvcnQga2V5cyAldGFn
cykgeworICAgICAgICBteSAkSlNJbnRlcmZhY2VOYW1lID0gJHRhZ3N7JHRhZ05hbWV9eyJKU0lu
dGVyZmFjZU5hbWUifTsKKyAgICAgICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2VlblByaXZhdGV7
JEpTSW50ZXJmYWNlTmFtZX0pIHx8IHVzZXNEZWZhdWx0SlNXcmFwcGVyKCR0YWdOYW1lKTsKKwor
ICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAkdGFnc3skdGFnTmFtZX17ImNvbmRpdGlvbmFsIn07
CisgICAgICAgICMgc2tpcCBEQVRBR1JJRCBmb3Igbm93CisgICAgICAgIG5leHQgaWYgKCRjb25k
aXRpb25hbCBlcSAnREFUQUdSSUQnKTsKKworICAgICAgICAkdGFnc1NlZW5Qcml2YXRleyRKU0lu
dGVyZmFjZU5hbWV9ID0gMTsKKworICAgICAgICBwcmludCBGICIjaW5jbHVkZSBcImdkb20vR2Rv
bSR7SlNJbnRlcmZhY2VOYW1lfVByaXZhdGUuaFwiXG4iOworICAgIH0KK30KKworc3ViIHByaW50
RWxlbWVudEluY2x1ZGVzCit7CisgICAgbXkgJEYgPSBzaGlmdDsKKworICAgIG15ICV0YWdzU2Vl
bjsKKyAgICBmb3IgbXkgJHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykgeworICAgICAgICBteSAk
aW50ZXJmYWNlTmFtZSA9ICR0YWdzeyR0YWdOYW1lfXsiaW50ZXJmYWNlTmFtZSJ9OworICAgICAg
ICBuZXh0IGlmIGRlZmluZWQoJHRhZ3NTZWVueyRpbnRlcmZhY2VOYW1lfSk7CisgICAgICAgICR0
YWdzU2VlbnskaW50ZXJmYWNlTmFtZX0gPSAxOworCisgICAgICAgIHByaW50IEYgIiNpbmNsdWRl
IFwiJHtpbnRlcmZhY2VOYW1lfS5oXCJcbiI7CisgICAgfQorfQorCitzdWIgcHJpbnREZWZpbml0
aW9uU3RyaW5ncworeworICAgIG15ICgkRiwgJG5hbWVzUmVmLCAkdHlwZSkgPSBAXzsKKyAgICBt
eSAkc2luZ3VsYXJUeXBlID0gc3Vic3RyKCR0eXBlLCAwLCAtMSk7CisgICAgbXkgJHNob3J0VHlw
ZSA9IHN1YnN0cigkc2luZ3VsYXJUeXBlLCAwLCA0KTsKKyAgICBteSAkc2hvcnRDYW1lbFR5cGUg
PSB1Y2ZpcnN0KCRzaG9ydFR5cGUpOworICAgIHByaW50IEYgIlxuLy8gIiAuIHVjZmlyc3QoJHR5
cGUpIC4gIiBhcyBzdHJpbmdzXG4iOworCisgICAgbXkgJW5hbWVzID0gJSRuYW1lc1JlZjsKKyAg
ICBmb3IgbXkgJG5hbWUgKHNvcnQga2V5cyAlJG5hbWVzUmVmKSB7CisgICAgICAgIG5leHQgaWYg
KCEkcGFyYW1ldGVyc3snZXhwb3J0U3RyaW5ncyd9IGFuZCAhJG5hbWVzeyRuYW1lfXsiZXhwb3J0
U3RyaW5nIn0pOworCisgICAgICAgIG15ICRyZWFsTmFtZSA9ICRuYW1lOworICAgICAgICAkcmVh
bE5hbWUgPX4gcy9fLy0vZzsKKworICAgICAgICBwcmludCBGICJjaGFyICRuYW1lIiwiJHtzaG9y
dENhbWVsVHlwZX1TdHJpbmdbXSA9IFwiJHJlYWxOYW1lXCI7XG4iOworICAgIH0KK30gCisKK3N1
YiBwcmludERlZmluaXRpb25zCit7CisgICAgbXkgKCRGLCAkbmFtZXNSZWYsICR0eXBlLCAkbmFt
ZXNwYWNlVVJJKSA9IEBfOworICAgIG15ICRzaW5ndWxhclR5cGUgPSBzdWJzdHIoJHR5cGUsIDAs
IC0xKTsKKyAgICBteSAkc2hvcnRUeXBlID0gc3Vic3RyKCRzaW5ndWxhclR5cGUsIDAsIDQpOwor
ICAgIG15ICRzaG9ydENhbWVsVHlwZSA9IHVjZmlyc3QoJHNob3J0VHlwZSk7CisgICAgbXkgJHNo
b3J0VXBwZXJUeXBlID0gdWMoJHNob3J0VHlwZSk7CisgICAgCisgICAgcHJpbnQgRiAiICAgIC8v
ICIgLiB1Y2ZpcnN0KCR0eXBlKSAuICJcbiI7CisKKyAgICBteSAlbmFtZXMgPSAlJG5hbWVzUmVm
OworICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlzICUkbmFtZXNSZWYpIHsKKyAgICAgICAgbmV4
dCBpZiAoJHBhcmFtZXRlcnN7J2V4cG9ydFN0cmluZ3MnfSBvciAkbmFtZXN7JG5hbWV9eyJleHBv
cnRTdHJpbmcifSk7CisKKyAgICAgICAgbXkgJHJlYWxOYW1lID0gJG5hbWU7CisgICAgICAgICRy
ZWFsTmFtZSA9fiBzL18vLS9nOworICAgICAgICBwcmludCBGICIgICAgY29uc3QgY2hhciAqJG5h
bWUiLCIke3Nob3J0Q2FtZWxUeXBlfVN0cmluZyA9IFwiJHJlYWxOYW1lXCI7XG4iOworICAgIH0K
KworICAgIHByaW50ICJcbiI7CisKKyAgICBmb3IgbXkgJG5hbWUgKHNvcnQga2V5cyAlJG5hbWVz
UmVmKSB7CisgICAgICAgIHByaW50IEYgIiAgICBuZXcgKCh2b2lkKikmJG5hbWUiLCIke3Nob3J0
Q2FtZWxUeXBlfSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgJG5hbWUiLCIke3Nob3J0Q2FtZWxU
eXBlfVN0cmluZywgJG5hbWVzcGFjZVVSSSk7XG4iOworICAgIH0KK30KKworIyMgRWxlbWVudEZh
Y3Rvcnkgcm91dGluZXMKKworc3ViIHByaW50RmFjdG9yeUNwcEZpbGUKK3sKKyAgICBteSAkY3Bw
UGF0aCA9IHNoaWZ0OworICAgIG15ICRGOworICAgIG9wZW4gRiwgIj4kY3BwUGF0aCI7CisKK3By
aW50TGljZW5zZUhlYWRlcigkRik7CisKK3ByaW50IEYgPDxFTkQKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICIkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50RmFjdG9yeS5oIgor
CisjaW5jbHVkZSAiJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXMuaCIKKyNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTZXR0
aW5ncy5oIgorI2VuZGlmCisKK0VORAorOworCitpZiAoJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9
IGVxICJIVE1MIikgeworICAgIHByaW50IEYgIiNpbmNsdWRlIFwiSFRNTEZvcm1FbGVtZW50Lmhc
IlxuIjsKK30KKworcHJpbnRFbGVtZW50SW5jbHVkZXMoJEYpOworCitwcmludCBGIDw8RU5ECisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBu
YW1lc3BhY2UgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXM7CisKK0VORAorOworCitwcmlu
dCBGICJ0eXBlZGVmIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4g
KCpDb25zdHJ1Y3RvckZ1bmN0aW9uKShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIjsK
KworaWYgKCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfSBlcSAiSFRNTCIpIHsKKyAgICBwcmludCBG
ICIsIEhUTUxGb3JtRWxlbWVudCoiOworfQorCitwcmludCBGICIsIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKTtcbiI7CitwcmludCBGIDw8RU5ECit0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1w
bCosIENvbnN0cnVjdG9yRnVuY3Rpb24+IEZ1bmN0aW9uTWFwOworCitzdGF0aWMgRnVuY3Rpb25N
YXAqIGdGdW5jdGlvbk1hcCA9IDA7CisKK0VORAorOworCitteSAldGFnQ29uc3RydWN0b3JNYXAg
PSBidWlsZENvbnN0cnVjdG9yTWFwKCk7CisKK3ByaW50Q29uc3RydWN0b3JzKCRGLCBcJXRhZ0Nv
bnN0cnVjdG9yTWFwKTsKKworcHJpbnQgRiAiI2lmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlX
aXRoJ31cbiIgaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKKworcHJpbnQgRiA8
PEVORAorc3RhdGljIHZvaWQgYWRkVGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZywgQ29uc3Ry
dWN0b3JGdW5jdGlvbiBmdW5jKQoreworICAgIGdGdW5jdGlvbk1hcC0+c2V0KHRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksIGZ1bmMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlRnVuY3Rp
b25NYXBJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGdGdW5jdGlvbk1hcCkKKyAgICAgICAgcmV0
dXJuOworICAgIC8vIENyZWF0ZSB0aGUgdGFibGUuCisgICAgZ0Z1bmN0aW9uTWFwID0gbmV3IEZ1
bmN0aW9uTWFwOworICAgIAorICAgIC8vIFBvcHVsYXRlIGl0IHdpdGggY29uc3RydWN0b3IgZnVu
Y3Rpb25zLgorRU5ECis7CisKK3ByaW50RnVuY3Rpb25Jbml0cygkRiwgXCV0YWdDb25zdHJ1Y3Rv
ck1hcCk7CisKK3ByaW50IEYgIn1cbiI7CitwcmludCBGICIjZW5kaWZcbiIgaWYgJHBhcmFtZXRl
cnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKKworcHJpbnQgRiAiXG5QYXNzUmVmUHRyPCRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+ICRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRG
YWN0b3J5OjpjcmVhdGUkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHFOYW1lLCBEb2N1bWVudCogZG9jIjsKKworaWYgKCRwYXJhbWV0ZXJzeyJuYW1l
c3BhY2UifSBlcSAiSFRNTCIpIHsKKyAgICBwcmludCBGICIsIEhUTUxGb3JtRWxlbWVudCogZm9y
bUVsZW1lbnQiOworfQorCitwcmludCBGICIsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKVxue1xuIjsK
KworcHJpbnQgRiAiI2lmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ31cbiIgaWYgJHBh
cmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKKworcHJpbnQgRiA8PEVORAorICAgIC8vIERv
bid0IG1ha2UgZWxlbWVudHMgd2l0aG91dCBhIGRvY3VtZW50CisgICAgaWYgKCFkb2MpCisgICAg
ICAgIHJldHVybiAwOworCitFTkQKKzsKKworaWYgKCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfSBu
ZSAiSFRNTCIpIHsKK3ByaW50IEYgPDxFTkQKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jLT5zZXR0aW5ncygpOworICAgIGlmIChzZXR0
aW5ncyAmJiBzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKK0VORAorOworCit9CisKK3ByaW50IEYgPDxF
TkQKKyAgICBjcmVhdGVGdW5jdGlvbk1hcElmTmVjZXNzYXJ5KCk7CisgICAgQ29uc3RydWN0b3JG
dW5jdGlvbiBmdW5jID0gZ0Z1bmN0aW9uTWFwLT5nZXQocU5hbWUubG9jYWxOYW1lKCkuaW1wbCgp
KTsKKyAgICBpZiAoZnVuYykKK0VORAorOworCitpZiAoJHBhcmFtZXRlcnN7Im5hbWVzcGFjZSJ9
IGVxICJIVE1MIikgeworICAgIHByaW50IEYgIiAgICAgICAgcmV0dXJuIGZ1bmMocU5hbWUsIGRv
YywgZm9ybUVsZW1lbnQsIGNyZWF0ZWRCeVBhcnNlcik7XG4iOworfSBlbHNlIHsKKyAgICBwcmlu
dCBGICIgICAgICAgIHJldHVybiBmdW5jKHFOYW1lLCBkb2MsIGNyZWF0ZWRCeVBhcnNlcik7XG4i
OworfQorCitwcmludCBGICIgICAgcmV0dXJuIG5ldyAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31F
bGVtZW50KHFOYW1lLCBkb2MpO1xuIjsKKworaWYgKCRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlX
aXRoJ30pIHsKKworcHJpbnQgRiA8PEVORAorI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgor
RU5ECis7CisKK30KKworcHJpbnQgRiA8PEVORAorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKK0VORAorOworCisgICAgY2xvc2UgRjsKK30KKworc3ViIHByaW50RmFjdG9yeUhlYWRlckZp
bGUKK3sKKyAgICBteSAkaGVhZGVyUGF0aCA9IHNoaWZ0OworICAgIG15ICRGOworICAgIG9wZW4g
RiwgIj4kaGVhZGVyUGF0aCI7CisKKyAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOworCisgICAg
cHJpbnQgRjw8RU5ECisjaWZuZGVmICRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRGYWN0
b3J5X2gKKyNkZWZpbmUgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudEZhY3RvcnlfaAor
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgUXVhbGlmaWVk
TmFtZTsKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzICRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ7CitFTkQKKzsKKwor
aWYgKCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfSBlcSAiSFRNTCIpIHsKKyAgICBwcmludCBGICIg
ICAgIGNsYXNzIEhUTUxGb3JtRWxlbWVudDtcbiI7Cit9CisKK3ByaW50IEY8PEVORAorICAgIC8v
IFRoZSBpZGVhIGJlaGluZCB0aGlzIGNsYXNzIGlzIHRoYXQgdGhlcmUgd2lsbCBldmVudHVhbGx5
IGJlIGEgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBVUklzIHRvIEVsZW1lbnRGYWN0b3JpZXMgdGhh
dCBjYW4gZGlzcGVuc2UKKyAgICAvLyBlbGVtZW50cy4gSW4gYSBjb21wb3VuZCBkb2N1bWVudCB3
b3JsZCwgdGhlIGdlbmVyaWMgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiAod2lsbCBlbmQgdXAgYmVp
bmcgdmlydHVhbCkgd2lsbCBiZSBjYWxsZWQuCisgICAgY2xhc3MgJHBhcmFtZXRlcnN7J25hbWVz
cGFjZSd9RWxlbWVudEZhY3RvcnkgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGFzc1JlZlB0cjxF
bGVtZW50PiBjcmVhdGVFbGVtZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmLCBXZWJD
b3JlOjpEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gdHJ1ZSk7CitFTkQKKzsKK3By
aW50IEYgIiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9
RWxlbWVudD4gY3JlYXRlJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudChjb25zdCBXZWJD
b3JlOjpRdWFsaWZpZWROYW1lJiwgV2ViQ29yZTo6RG9jdW1lbnQqIjsKKworaWYgKCRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfSBlcSAiSFRNTCIpIHsKKyAgICBwcmludCBGICIsIEhUTUxGb3JtRWxl
bWVudCogPSAwIjsKK30KKworcHJpbnQgRiAiLCBib29sIC8qY3JlYXRlZEJ5UGFyc2VyKi8gPSB0
cnVlKTtcbiI7CisKK3ByaW50ZiBGPDxFTkQKKyAgICB9OworfQorCisjZW5kaWYgLy8gJHBhcmFt
ZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudEZhY3RvcnlfaAorCitFTkQKKzsKKworICAgIGNsb3Nl
IEY7Cit9CisKKyMjIFdyYXBwZXIgRmFjdG9yeSByb3V0aW5lcworCitzdWIgdXNlc0RlZmF1bHRK
U1dyYXBwZXIKK3sKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworCisgICAgIyBBIHRhZyByZXVzZXMg
dGhlIGRlZmF1bHQgd3JhcHBlciBpZiBpdHMgSlNJbnRlcmZhY2VOYW1lIG1hdGNoZXMgdGhlIGRl
ZmF1bHQgbmFtZXNwYWNlIEVsZW1lbnQuCisgICAgcmV0dXJuICR0YWdzeyRuYW1lfXsnSlNJbnRl
cmZhY2VOYW1lJ30gZXEgJHBhcmFtZXRlcnN7Im5hbWVzcGFjZSJ9IC4gIkVsZW1lbnQiIHx8ICR0
YWdzeyRuYW1lfXsnSlNJbnRlcmZhY2VOYW1lJ30gZXEgIkhUTUxOb1NjcmlwdEVsZW1lbnQiOwor
fQorCitzdWIgcHJpbnRXcmFwcGVyRnVuY3Rpb25zCit7CisgICAgbXkgJEYgPSBzaGlmdDsKKwor
ICAgIG15ICV0YWdzU2VlbjsKKyAgICBmb3IgbXkgJHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykg
eworICAgICAgICAjIEF2b2lkIGRlZmluaW5nIHRoZSBzYW1lIHdyYXBwZXIgbWV0aG9kIHR3aWNl
LgorICAgICAgICBteSAkSlNJbnRlcmZhY2VOYW1lID0gJHRhZ3N7JHRhZ05hbWV9eyJKU0ludGVy
ZmFjZU5hbWUifTsKKyAgICAgICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2VlbnskSlNJbnRlcmZh
Y2VOYW1lfSkgfHwgdXNlc0RlZmF1bHRKU1dyYXBwZXIoJHRhZ05hbWUpOworICAgICAgICAkdGFn
c1NlZW57JEpTSW50ZXJmYWNlTmFtZX0gPSAxOworCisgICAgICAgIG15ICRjb25kaXRpb25hbCA9
ICR0YWdzeyR0YWdOYW1lfXsiY29uZGl0aW9uYWwifTsKKyAgICAgICAgIyBza2lwIERBVEFHUklE
IGZvciBub3cKKyAgICAgICAgbmV4dCBpZiAoJGNvbmRpdGlvbmFsIGVxICdEQVRBR1JJRCcpOwor
CisgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAgIG15ICRjb25kaXRpb25h
bFN0cmluZyA9ICJFTkFCTEUoIiAuIGpvaW4oIikgJiYgRU5BQkxFKCIsIHNwbGl0KC8mLywgJGNv
bmRpdGlvbmFsKSkgLiAiKSI7CisgICAgICAgICAgICBwcmludCBGICIjaWYgJHtjb25kaXRpb25h
bFN0cmluZ31cblxuIjsKKyAgICAgICAgfQorCisgICAgICAgICMgSGFjayBmb3IgdGhlIG1lZGlh
IHRhZ3MKKyAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgdmlhIGEg
Q3VzdG9tV3JhcHBlciBhdHRyaWJ1dGUgYW5kIGEgc2VwYXJhdGUgKkN1c3RvbSBmaWxlLgorICAg
ICAgICBpZiAoJHRhZ3N7JHRhZ05hbWV9eyJ3cmFwcGVyT25seUlmTWVkaWFJc0F2YWlsYWJsZSJ9
KSB7CisgICAgICAgICAgICBwcmludCBGIDw8RU5ECitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlJHtK
U0ludGVyZmFjZU5hbWV9V3JhcHBlcihQYXNzUmVmUHRyPCRwYXJhbWV0ZXJzeyduYW1lc3BhY2Un
fUVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXAke0pTSW50ZXJmYWNlTmFtZX0o
c3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitF
TkQKKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50IEYgPDxFTkQKK3N0YXRp
YyBncG9pbnRlciBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVyKFBhc3NSZWZQdHI8JHBh
cmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3Jh
cCR7SlNJbnRlcmZhY2VOYW1lfShzdGF0aWNfY2FzdDwke0pTSW50ZXJmYWNlTmFtZX0qPihlbGVt
ZW50LmdldCgpKSk7Cit9CisKK0VORAorOworICAgICAgICB9CisgICAgICAgIGlmICgkY29uZGl0
aW9uYWwpIHsKKyAgICAgICAgICAgIHByaW50IEYgIiNlbmRpZlxuXG4iOworICAgICAgICB9Cisg
ICAgfQorfQorCitzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGUKK3sKKyAgICBteSAkY3Bw
UGF0aCA9IHNoaWZ0OworICAgIG15ICRGOworICAgIG9wZW4gRiwgIj4kY3BwUGF0aCI7CisKKyAg
ICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOworCisgICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJjb25m
aWcuaFwiXG5cbiI7CisKKyAgICBwcmludCBGICIjaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9y
eVdpdGgnfVxuXG4iIGlmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ307CisKKyAgICBw
cmludCBGICIjaW5jbHVkZSBcImdkb20vR2RvbU5vZGUuaFwiXG4iOworICAgIHByaW50IEYgIiNp
bmNsdWRlIFwiR0RPTSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9y
eS5oXCJcbiI7CisKKyAgICBwcmludEpTRWxlbWVudEluY2x1ZGVzKCRGKTsKKworICAgIHByaW50
IEYgIlxuI2luY2x1ZGUgXCIkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31OYW1lcy5oXCJcblxuIjsK
KworICAgIHByaW50RWxlbWVudEluY2x1ZGVzKCRGKTsKKworICAgIHByaW50IEYgPDxFTkQKKyNp
bmNsdWRlICJDU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjokcGFyYW1ldGVyc3snbmFtZXNw
YWNlJ31OYW1lczsKKwordHlwZWRlZiBncG9pbnRlciAoKkNyZWF0ZSRwYXJhbWV0ZXJzeyduYW1l
c3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25h
bWVzcGFjZSd9RWxlbWVudD4pOworCitFTkQKKzsKKworICAgIHByaW50V3JhcHBlckZ1bmN0aW9u
cygkRik7CisKKyAgICBwcmludCBGIDw8RU5ECitncG9pbnRlciBjcmVhdGVHRE9NJHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXIoUGFzc1JlZlB0cjxXZWJDb3JlOjokcGFyYW1l
dGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQoreyAgIAorICAgIHN0YXRpYyBIYXNo
TWFwPFdlYkNvcmU6OkF0b21pY1N0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3snbmFtZXNw
YWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0aW9uPiBtYXA7CisgICAgaWYgKG1hcC5pc0VtcHR5KCkp
IHsKK0VORAorOworCisgICAgZm9yIG15ICR0YWcgKHNvcnQga2V5cyAldGFncykgeworICAgICAg
ICAjIERvIG5vdCBhZGQgdGhlIG5hbWUgdG8gdGhlIG1hcCBpZiBpdCBkb2VzIG5vdCBoYXZlIGEg
SlMgd3JhcHBlciBjb25zdHJ1Y3RvciBvciB1c2VzIHRoZSBkZWZhdWx0IHdyYXBwZXIuCisgICAg
ICAgIG5leHQgaWYgdXNlc0RlZmF1bHRKU1dyYXBwZXIoJHRhZywgXCV0YWdzKTsKKworICAgICAg
ICBteSAkY29uZGl0aW9uYWwgPSAkdGFnc3skdGFnfXsiY29uZGl0aW9uYWwifTsKKworICAgICAg
ICAjIHNraXAgREFUQUdSSUQgZm9yIG5vdworICAgICAgICBuZXh0IGlmICgkY29uZGl0aW9uYWwg
ZXEgJ0RBVEFHUklEJyk7CisKKyAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAg
ICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUo
Iiwgc3BsaXQoLyYvLCAkY29uZGl0aW9uYWwpKSAuICIpIjsKKyAgICAgICAgICAgIHByaW50IEYg
IiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIjsKKyAgICAgICAgfQorCisgICAgICAgIG15ICR1
Y1RhZyA9ICR0YWdzeyR0YWd9eyJKU0ludGVyZmFjZU5hbWUifTsKKyAgICAgICAgcHJpbnQgRiAi
ICAgICAgIG1hcC5zZXQoJHt0YWd9VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY3JlYXRlJHt1Y1Rh
Z31XcmFwcGVyKTtcbiI7CisKKyAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgeworICAgICAgICAg
ICAgcHJpbnQgRiAiI2VuZGlmXG4iOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpbnQgRiA8
PEVORAorICAgIH0KKyAgICBDcmVhdGUkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3Jh
cHBlckZ1bmN0aW9uIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbiA9CisgICAgICAgIG1hcC5nZXQoZWxl
bWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICBpZiAoY3JlYXRlV3JhcHBlckZ1bmN0aW9u
KQorICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlckZ1bmN0aW9uKGVsZW1lbnQpOworICAgIHJl
dHVybiB3cmFwJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudChlbGVtZW50LmdldCgpKTsK
K30KKworfQorCitFTkQKKzsKKworICAgIHByaW50IEYgIiNlbmRpZlxuIiBpZiAkcGFyYW1ldGVy
c3snZ3VhcmRGYWN0b3J5V2l0aCd9OworCisgICAgY2xvc2UgRjsKK30KKworc3ViIHByaW50V3Jh
cHBlckZhY3RvcnlIZWFkZXJGaWxlCit7CisgICAgbXkgJGhlYWRlclBhdGggPSBzaGlmdDsKKyAg
ICBteSAkRjsKKyAgICBvcGVuIEYsICI+JGhlYWRlclBhdGgiOworCisgICAgcHJpbnRMaWNlbnNl
SGVhZGVyKCRGKTsKKworICAgIHByaW50IEYgIiNpZm5kZWYgR0RPTSRwYXJhbWV0ZXJzeyduYW1l
c3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOworICAgIHByaW50IEYgIiNkZWZpbmUg
R0RPTSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG5cbiI7
CisKKyAgICBwcmludCBGICIjaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfVxuIiBp
ZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9OworCisgICAgcHJpbnQgRiA8PEVORAor
I2luY2x1ZGUgIkdkb21Ob2RlUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzICRwYXJhbWV0ZXJzeyduYW1lc3BhY2Un
fUVsZW1lbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIGdwb2ludGVyIGNyZWF0ZUdE
T00kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlcihQYXNzUmVmUHRyPFdlYkNv
cmU6OiRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+KTsKK30KKyAKK0VORAorOworCisg
ICAgcHJpbnQgRiAiI2VuZGlmIC8vICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ31cblxu
IiBpZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9OworCisgICAgcHJpbnQgRiAiI2Vu
ZGlmIC8vIEdET00kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3Rvcnlf
aFxuIjsKKworICAgIGNsb3NlIEY7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2Rv
bS9tYWtlX2dkb21fbmFtZXMucGwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAg
KyAqCgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDQ2MzkzKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NTQxLDYgKzE3NjYyLDE5IEBACiAgICAgICAgICogcGxhdGZvcm0vd2luL1dDRGF0
YU9iamVjdC5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpXQ0RhdGFPYmplY3Q6OlF1ZXJ5SW50ZXJm
YWNlKToKIAorMjAwOS0wOC0wMyAgTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiAgPGxrY2xA
bGtjbC5uZXQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUHJldHR5IG11Y2ggdmVyYmF0aW0gY3V0LWFuZC1wYXN0ZSBvZiBtYWtlX25hbWVzLnBsIHRv
CisgICAgICAgIGNyZWF0ZSBtYWtlX2dkb21fbmFtZXMucGwuICBFeGFjdGx5IHRoZSBzYW1lIGNv
bmNlcHQ7CisgICAgICAgIGV4YWN0bHkgdGhlIHNhbWUgcmVhc29ucyB3aHkgaXQncyBuZWVkZWQu
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NDI1
CisKKyAgICAgICAgKiBXZWJDb3JlL2RvbS9tYWtlX2dkb21fbmFtZXMucGw6IEFkZGVkLiAgY29w
aWVkIG5lYXItdmVyYmF0aW0gZnJvbSBtYWtlX25hbWVzLnBsCisKKwogMjAwOS0wNi0xNiAgWGFu
IExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2
byBOb3JvbmhhLgo=
</data>
<flag name="review"
          id="18148"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33999</attachid>
            <date>2009-08-03 13:18:45 -0700</date>
            <delta_ts>2009-08-04 07:38:05 -0700</delta_ts>
            <desc>diff for eric between make_names.pl an make_gdom_names</desc>
            <filename>diff</filename>
            <type>text/plain</type>
            <size>8119</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">LS0tIFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwJMjAwOS0wNy0yNSAxODoxMDoyMi4wMDAwMDAw
MDAgKzAxMDAKKysrIFdlYkNvcmUvZG9tL21ha2VfZ2RvbV9uYW1lcy5wbAkyMDA5LTA4LTAzIDE2
OjE3OjUyLjAwMDAwMDAwMCArMDEwMApAQCAtMyw2ICszLDcgQEAKICMgQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMg
Q29weXJpZ2h0IChDKSAyMDA5LCBKdWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5v
cmc+CiAjIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorIyBDb3B5cmlnaHQgKEMpIDIw
MDkgTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbEBsa2NsLm5ldD4KICMKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksMTAgKzcwLDExIEBACiBta3BhdGgoJG91dHB1dERp
cik7CiBteSAkbmFtZXNCYXNlUGF0aCA9ICIkb3V0cHV0RGlyLyRwYXJhbWV0ZXJzeyduYW1lc3Bh
Y2UnfU5hbWVzIjsKIG15ICRmYWN0b3J5QmFzZVBhdGggPSAiJG91dHB1dERpci8kcGFyYW1ldGVy
c3snbmFtZXNwYWNlJ31FbGVtZW50RmFjdG9yeSI7Ci1teSAkd3JhcHBlckZhY3RvcnlCYXNlUGF0
aCA9ICIkb3V0cHV0RGlyL0pTJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJG
YWN0b3J5IjsKK215ICR3cmFwcGVyRmFjdG9yeUJhc2VQYXRoID0gIiRvdXRwdXREaXIvR0RPTSRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeSI7CiAKLXByaW50TmFt
ZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0aC5oIik7Ci1wcmludE5hbWVzQ3BwRmlsZSgiJG5h
bWVzQmFzZVBhdGguY3BwIik7CisjIGRvbmUgYWxyZWFkeSB3aXRoIG1ha2VfbmFtZXMucGwgZm9y
IEpTCisjcHJpbnROYW1lc0hlYWRlckZpbGUoIiRuYW1lc0Jhc2VQYXRoLmgiKTsKKyNwcmludE5h
bWVzQ3BwRmlsZSgiJG5hbWVzQmFzZVBhdGguY3BwIik7CiAKIGlmICgkcHJpbnRGYWN0b3J5KSB7
CiAgICAgcHJpbnRGYWN0b3J5Q3BwRmlsZSgiJGZhY3RvcnlCYXNlUGF0aC5jcHAiKTsKQEAgLTU3
NCw5ICs1NzYsMjggQEAKICAgICBmb3IgbXkgJHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykgewog
ICAgICAgICBteSAkSlNJbnRlcmZhY2VOYW1lID0gJHRhZ3N7JHRhZ05hbWV9eyJKU0ludGVyZmFj
ZU5hbWUifTsKICAgICAgICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2VlbnskSlNJbnRlcmZhY2VO
YW1lfSkgfHwgdXNlc0RlZmF1bHRKU1dyYXBwZXIoJHRhZ05hbWUpOworICAgICAgICBteSAkY29u
ZGl0aW9uYWwgPSAkdGFnc3skdGFnTmFtZX17ImNvbmRpdGlvbmFsIn07CisgICAgICAgICMgc2tp
cCBEQVRBR1JJRCBmb3Igbm93CisgICAgICAgIG5leHQgaWYgKCRjb25kaXRpb25hbCBlcSAnREFU
QUdSSUQnKTsKKwogICAgICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNlTmFtZX0gPSAxOwogCi0g
ICAgICAgIHByaW50IEYgIiNpbmNsdWRlIFwiSlMke0pTSW50ZXJmYWNlTmFtZX0uaFwiXG4iOwor
ICAgICAgICBwcmludCBGICIjaW5jbHVkZSBcImdkb20vR2RvbSR7SlNJbnRlcmZhY2VOYW1lfS5o
XCJcbiI7CisgICAgfQorICAgIHByaW50IEYgIlxuIjsKKyAgICBwcmludCBGICIjaW5jbHVkZSBc
Imdkb20vR2RvbUhUTUxFbGVtZW50UHJpdmF0ZS5oXCJcbiI7CisgICAgbXkgJXRhZ3NTZWVuUHJp
dmF0ZTsKKyAgICBmb3IgbXkgJHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykgeworICAgICAgICBt
eSAkSlNJbnRlcmZhY2VOYW1lID0gJHRhZ3N7JHRhZ05hbWV9eyJKU0ludGVyZmFjZU5hbWUifTsK
KyAgICAgICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2VlblByaXZhdGV7JEpTSW50ZXJmYWNlTmFt
ZX0pIHx8IHVzZXNEZWZhdWx0SlNXcmFwcGVyKCR0YWdOYW1lKTsKKworICAgICAgICBteSAkY29u
ZGl0aW9uYWwgPSAkdGFnc3skdGFnTmFtZX17ImNvbmRpdGlvbmFsIn07CisgICAgICAgICMgc2tp
cCBEQVRBR1JJRCBmb3Igbm93CisgICAgICAgIG5leHQgaWYgKCRjb25kaXRpb25hbCBlcSAnREFU
QUdSSUQnKTsKKworICAgICAgICAkdGFnc1NlZW5Qcml2YXRleyRKU0ludGVyZmFjZU5hbWV9ID0g
MTsKKworICAgICAgICBwcmludCBGICIjaW5jbHVkZSBcImdkb20vR2RvbSR7SlNJbnRlcmZhY2VO
YW1lfVByaXZhdGUuaFwiXG4iOwogICAgIH0KIH0KIApAQCAtODY5LDYgKzg5MCw5IEBACiAgICAg
ICAgICR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSA9IDE7CiAKICAgICAgICAgbXkgJGNvbmRp
dGlvbmFsID0gJHRhZ3N7JHRhZ05hbWV9eyJjb25kaXRpb25hbCJ9OworICAgICAgICAjIHNraXAg
REFUQUdSSUQgZm9yIG5vdworICAgICAgICBuZXh0IGlmICgkY29uZGl0aW9uYWwgZXEgJ0RBVEFH
UklEJyk7CisKICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgbXkgJGNv
bmRpdGlvbmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQo
LyYvLCAkY29uZGl0aW9uYWwpKSAuICIpIjsKICAgICAgICAgICAgIHByaW50IEYgIiNpZiAke2Nv
bmRpdGlvbmFsU3RyaW5nfVxuXG4iOwpAQCAtODc4LDIwICs5MDIsMTggQEAKICAgICAgICAgIyBG
SVhNRTogVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgdmlhIGEgQ3VzdG9tV3JhcHBlciBhdHRy
aWJ1dGUgYW5kIGEgc2VwYXJhdGUgKkN1c3RvbSBmaWxlLgogICAgICAgICBpZiAoJHRhZ3N7JHRh
Z05hbWV9eyJ3cmFwcGVyT25seUlmTWVkaWFJc0F2YWlsYWJsZSJ9KSB7CiAgICAgICAgICAgICBw
cmludCBGIDw8RU5ECi1zdGF0aWMgSlNOb2RlKiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFw
cGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFz
c1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQorc3RhdGlj
IGdwb2ludGVyIGNyZWF0ZSR7SlNJbnRlcmZhY2VOYW1lfVdyYXBwZXIoUGFzc1JlZlB0cjwkcGFy
YW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQogewotICAgIGlmICghTWVkaWFQ
bGF5ZXI6OmlzQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBDUkVBVEVfRE9NX05PREVfV1JB
UFBFUihleGVjLCBnbG9iYWxPYmplY3QsICRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQs
IGVsZW1lbnQuZ2V0KCkpOwotICAgIHJldHVybiBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVj
LCBnbG9iYWxPYmplY3QsICR7SlNJbnRlcmZhY2VOYW1lfSwgZWxlbWVudC5nZXQoKSk7CisgICAg
cmV0dXJuIHdyYXAke0pTSW50ZXJmYWNlTmFtZX0oc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5h
bWV9Kj4oZWxlbWVudC5nZXQoKSkpOwogfQogCiBFTkQKIDsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIHByaW50IEYgPDxFTkQKLXN0YXRpYyBKU05vZGUqIGNyZWF0ZSR7SlNJbnRlcmZh
Y2VOYW1lfVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1l
bnQpCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihQYXNz
UmVmUHRyPCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCiB7Ci0gICAg
cmV0dXJuIENSRUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgJHtKU0lu
dGVyZmFjZU5hbWV9LCBlbGVtZW50LmdldCgpKTsKKyAgICByZXR1cm4gd3JhcCR7SlNJbnRlcmZh
Y2VOYW1lfShzdGF0aWNfY2FzdDwke0pTSW50ZXJmYWNlTmFtZX0qPihlbGVtZW50LmdldCgpKSk7
CiB9CiAKIEVORApAQCAtOTE1LDcgKzkzNyw4IEBACiAKICAgICBwcmludCBGICIjaWYgJHBhcmFt
ZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfVxuXG4iIGlmICRwYXJhbWV0ZXJzeydndWFyZEZhY3Rv
cnlXaXRoJ307CiAKLSAgICBwcmludCBGICIjaW5jbHVkZSBcIkpTJHBhcmFtZXRlcnN7J25hbWVz
cGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5LmhcIlxuIjsKKyAgICBwcmludCBGICIjaW5jbHVk
ZSBcImdkb20vR2RvbU5vZGUuaFwiXG4iOworICAgIHByaW50IEYgIiNpbmNsdWRlIFwiR0RPTSRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oXCJcbiI7CiAKICAg
ICBwcmludEpTRWxlbWVudEluY2x1ZGVzKCRGKTsKIApAQCAtOTIzLDE2ICs5NDYsMTUgQEAKIAog
ICAgIHByaW50RWxlbWVudEluY2x1ZGVzKCRGKTsKIAotICAgIHByaW50IEYgIlxuI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD5cblxuIjsKLSAgICAKICAgICBwcmludCBGIDw8RU5ECi11c2lu
ZyBuYW1lc3BhY2UgSlNDOworI2luY2x1ZGUgIkNTdHJpbmcuaCIKIAotbmFtZXNwYWNlIFdlYkNv
cmUgeworbmFtZXNwYWNlIFdlYktpdCB7CiAKLXVzaW5nIG5hbWVzcGFjZSAkcGFyYW1ldGVyc3sn
bmFtZXNwYWNlJ31OYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU6OiRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5hbWVzOwogCi10eXBlZGVmIEpT
Tm9kZSogKCpDcmVhdGUkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0
aW9uKShFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8JHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudD4pOwordHlwZWRlZiBncG9pbnRlciAoKkNyZWF0ZSRwYXJh
bWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8JHBh
cmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4pOwogCiBFTkQKIDsKQEAgLTk0MCwxMCArOTYy
LDkgQEAKICAgICBwcmludFdyYXBwZXJGdW5jdGlvbnMoJEYpOwogCiAgICAgcHJpbnQgRiA8PEVO
RAotSlNOb2RlKiBjcmVhdGVKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfVdyYXBwZXIoRXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPCRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCitncG9pbnRlciBjcmVhdGVH
RE9NJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXIoUGFzc1JlZlB0cjxXZWJD
b3JlOjokcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQogeyAgIAotICAg
IHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpBdG9taWNTdHJpbmdJbXBsKiwgQ3JlYXRlJHBhcmFt
ZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGdW5jdGlvbj4gRnVuY3Rpb25NYXA7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChGdW5jdGlvbk1hcCwgbWFwLCAoKSk7CisgICAgc3RhdGlj
IEhhc2hNYXA8V2ViQ29yZTo6QXRvbWljU3RyaW5nSW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJzeydu
YW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+IG1hcDsKICAgICBpZiAobWFwLmlzRW1w
dHkoKSkgewogRU5ECiA7CkBAIC05NTMsNiArOTc0LDEwIEBACiAgICAgICAgIG5leHQgaWYgdXNl
c0RlZmF1bHRKU1dyYXBwZXIoJHRhZywgXCV0YWdzKTsKIAogICAgICAgICBteSAkY29uZGl0aW9u
YWwgPSAkdGFnc3skdGFnfXsiY29uZGl0aW9uYWwifTsKKworICAgICAgICAjIHNraXAgREFUQUdS
SUQgZm9yIG5vdworICAgICAgICBuZXh0IGlmICgkY29uZGl0aW9uYWwgZXEgJ0RBVEFHUklEJyk7
CisKICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgbXkgJGNvbmRpdGlv
bmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQoLyYvLCAk
Y29uZGl0aW9uYWwpKSAuICIpIjsKICAgICAgICAgICAgIHByaW50IEYgIiNpZiAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuIjsKQEAgLTk2OCwxMCArOTkzLDExIEBACiAKICAgICBwcmludCBGIDw8RU5E
CiAgICAgfQotICAgIENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVy
RnVuY3Rpb24gY3JlYXRlV3JhcHBlckZ1bmN0aW9uID0gbWFwLmdldChlbGVtZW50LT5sb2NhbE5h
bWUoKS5pbXBsKCkpOworICAgIENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRX
cmFwcGVyRnVuY3Rpb24gY3JlYXRlV3JhcHBlckZ1bmN0aW9uID0KKyAgICAgICAgbWFwLmdldChl
bGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgIGlmIChjcmVhdGVXcmFwcGVyRnVuY3Rp
b24pCi0gICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBlbGVtZW50KTsKLSAgICByZXR1cm4gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIoZXhlYywg
Z2xvYmFsT2JqZWN0LCAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50LCBlbGVtZW50Lmdl
dCgpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbihlbGVtZW50KTsKKyAg
ICByZXR1cm4gd3JhcCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQoZWxlbWVudC5nZXQo
KSk7CiB9CiAKIH0KQEAgLTk5MiwyNiArMTAxOCwyMiBAQAogCiAgICAgcHJpbnRMaWNlbnNlSGVh
ZGVyKCRGKTsKIAotICAgIHByaW50IEYgIiNpZm5kZWYgSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNl
J31FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuIjsKLSAgICBwcmludCBGICIjZGVmaW5lIEpTJHBh
cmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5X2hcblxuIjsKKyAgICBw
cmludCBGICIjaWZuZGVmIEdET00kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBl
ckZhY3RvcnlfaFxuIjsKKyAgICBwcmludCBGICIjZGVmaW5lIEdET00kcGFyYW1ldGVyc3snbmFt
ZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuXG4iOwogCiAgICAgcHJpbnQgRiAiI2lm
ICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ31cbiIgaWYgJHBhcmFtZXRlcnN7J2d1YXJk
RmFjdG9yeVdpdGgnfTsKIAogICAgIHByaW50IEYgPDxFTkQKKyNpbmNsdWRlICJHZG9tTm9kZVBy
aXZhdGUuaCIKKwogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKLW5hbWVzcGFjZSBKU0Mgewot
ICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBKU05vZGU7Ci0gICAgY2xhc3MgSlNE
T01HbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVu
dDsKK30KIAotICAgIEpTTm9kZSogY3JlYXRlSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31XcmFw
cGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPCRwYXJh
bWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+KTsKLQorbmFtZXNwYWNlIFdlYktpdCB7CisgICAg
Z3BvaW50ZXIgY3JlYXRlR0RPTSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVy
KFBhc3NSZWZQdHI8V2ViQ29yZTo6JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4pOwog
fQogIAogRU5ECkBAIC0xMDE5LDcgKzEwNDEsNyBAQAogCiAgICAgcHJpbnQgRiAiI2VuZGlmIC8v
ICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ31cblxuIiBpZiAkcGFyYW1ldGVyc3snZ3Vh
cmRGYWN0b3J5V2l0aCd9OwogCi0gICAgcHJpbnQgRiAiI2VuZGlmIC8vIEpTJHBhcmFtZXRlcnN7
J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5X2hcbiI7CisgICAgcHJpbnQgRiAiI2Vu
ZGlmIC8vIEdET00kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3Rvcnlf
aFxuIjsKIAogICAgIGNsb3NlIEY7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34008</attachid>
            <date>2009-08-03 15:09:34 -0700</date>
            <delta_ts>2009-08-04 07:38:05 -0700</delta_ts>
            <desc>add --bindingType to make_names.pl</desc>
            <filename>gdhewf.patch</filename>
            <type>text/plain</type>
            <size>10219</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNDYzOTUpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25h
bWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBD
b3B5cmlnaHQgKEMpIDIwMDksIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9y
Zz4KICMgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisjIENvcHlyaWdodCAoQykgMjAw
OSBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgogIwogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0Miw3IEBACiBteSAkcHJpbnRXcmFwcGVyRmFj
dG9yeSA9IDA7CiBteSAkdGFnc0ZpbGUgPSAiIjsKIG15ICRhdHRyc0ZpbGUgPSAiIjsKK215ICRi
aW5kaW5nID0gIkpTIjsKIG15ICRvdXRwdXREaXIgPSAiLiI7CiBteSAldGFncyA9ICgpOwogbXkg
JWF0dHJzID0gKCk7CkBAIC01MCw2ICs1Miw3IEBACiAKIEdldE9wdGlvbnMoJ3RhZ3M9cycgPT4g
XCR0YWdzRmlsZSwgCiAgICAgJ2F0dHJzPXMnID0+IFwkYXR0cnNGaWxlLAorICAgICdiaW5kaW5n
VHlwZT1zJyA9PiBcJGJpbmRpbmcsCiAgICAgJ2ZhY3RvcnknID0+IFwkcHJpbnRGYWN0b3J5LAog
ICAgICdvdXRwdXREaXI9cycgPT4gXCRvdXRwdXREaXIsCiAgICAgJ2V4dHJhRGVmaW5lcz1zJyA9
PiBcJGV4dHJhRGVmaW5lcywKQEAgLTY5LDEwICs3MiwxMiBAQAogbWtwYXRoKCRvdXRwdXREaXIp
OwogbXkgJG5hbWVzQmFzZVBhdGggPSAiJG91dHB1dERpci8kcGFyYW1ldGVyc3snbmFtZXNwYWNl
J31OYW1lcyI7CiBteSAkZmFjdG9yeUJhc2VQYXRoID0gIiRvdXRwdXREaXIvJHBhcmFtZXRlcnN7
J25hbWVzcGFjZSd9RWxlbWVudEZhY3RvcnkiOwotbXkgJHdyYXBwZXJGYWN0b3J5QmFzZVBhdGgg
PSAiJG91dHB1dERpci9KUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFj
dG9yeSI7CitteSAkd3JhcHBlckZhY3RvcnlCYXNlUGF0aCA9ICIkb3V0cHV0RGlyLyRiaW5kaW5n
JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5IjsKIAotcHJpbnRO
YW1lc0hlYWRlckZpbGUoIiRuYW1lc0Jhc2VQYXRoLmgiKTsKLXByaW50TmFtZXNDcHBGaWxlKCIk
bmFtZXNCYXNlUGF0aC5jcHAiKTsKK2lmICgkYmluZGluZyBlcSAnSlMnKSB7CisgICAgcHJpbnRO
YW1lc0hlYWRlckZpbGUoIiRuYW1lc0Jhc2VQYXRoLmgiKTsKKyAgICBwcmludE5hbWVzQ3BwRmls
ZSgiJG5hbWVzQmFzZVBhdGguY3BwIik7Cit9CiAKIGlmICgkcHJpbnRGYWN0b3J5KSB7CiAgICAg
cHJpbnRGYWN0b3J5Q3BwRmlsZSgiJGZhY3RvcnlCYXNlUGF0aC5jcHAiKTsKQEAgLTU3NiwxMCAr
NTgxLDQzIEBACiAgICAgICAgIG5leHQgaWYgZGVmaW5lZCgkdGFnc1NlZW57JEpTSW50ZXJmYWNl
TmFtZX0pIHx8IHVzZXNEZWZhdWx0SlNXcmFwcGVyKCR0YWdOYW1lKTsKICAgICAgICAgJHRhZ3NT
ZWVueyRKU0ludGVyZmFjZU5hbWV9ID0gMTsKIAotICAgICAgICBwcmludCBGICIjaW5jbHVkZSBc
IkpTJHtKU0ludGVyZmFjZU5hbWV9LmhcIlxuIjsKKyAgICAgICAgcHJpbnQgRiAiI2luY2x1ZGUg
XCIkYmluZGluZyR7SlNJbnRlcmZhY2VOYW1lfS5oXCJcbiI7CiAgICAgfQogfQogCitzdWIgcHJp
bnRHRE9NRWxlbWVudEluY2x1ZGVzCit7CisgICAgbXkgJEYgPSBzaGlmdDsKKworICAgIG15ICV0
YWdzU2VlbjsKKyAgICBmb3IgbXkgJHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykgeworICAgICAg
ICBteSAkSlNJbnRlcmZhY2VOYW1lID0gJHRhZ3N7JHRhZ05hbWV9eyJKU0ludGVyZmFjZU5hbWUi
fTsKKyAgICAgICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSkg
fHwgdXNlc0RlZmF1bHRKU1dyYXBwZXIoJHRhZ05hbWUpOworICAgICAgICBteSAkY29uZGl0aW9u
YWwgPSAkdGFnc3skdGFnTmFtZX17ImNvbmRpdGlvbmFsIn07CisgICAgICAgICMgc2tpcCBEQVRB
R1JJRCBmb3Igbm93CisgICAgICAgIG5leHQgaWYgKCRjb25kaXRpb25hbCBlcSAnREFUQUdSSUQn
KTsKKworICAgICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNlTmFtZX0gPSAxOworCisgICAgICAg
IHByaW50IEYgIiNpbmNsdWRlIFwiZ2RvbS9HZG9tJHtKU0ludGVyZmFjZU5hbWV9LmhcIlxuIjsK
KyAgICB9CisgICAgcHJpbnQgRiAiXG4iOworICAgIHByaW50IEYgIiNpbmNsdWRlIFwiZ2RvbS9H
ZG9tSFRNTEVsZW1lbnRQcml2YXRlLmhcIlxuIjsKKyAgICBteSAldGFnc1NlZW5Qcml2YXRlOwor
ICAgIGZvciBteSAkdGFnTmFtZSAoc29ydCBrZXlzICV0YWdzKSB7CisgICAgICAgIG15ICRKU0lu
dGVyZmFjZU5hbWUgPSAkdGFnc3skdGFnTmFtZX17IkpTSW50ZXJmYWNlTmFtZSJ9OworICAgICAg
ICBuZXh0IGlmIGRlZmluZWQoJHRhZ3NTZWVuUHJpdmF0ZXskSlNJbnRlcmZhY2VOYW1lfSkgfHwg
dXNlc0RlZmF1bHRKU1dyYXBwZXIoJHRhZ05hbWUpOworCisgICAgICAgIG15ICRjb25kaXRpb25h
bCA9ICR0YWdzeyR0YWdOYW1lfXsiY29uZGl0aW9uYWwifTsKKyAgICAgICAgIyBza2lwIERBVEFH
UklEIGZvciBub3cKKyAgICAgICAgbmV4dCBpZiAoJGNvbmRpdGlvbmFsIGVxICdEQVRBR1JJRCcp
OworCisgICAgICAgICR0YWdzU2VlblByaXZhdGV7JEpTSW50ZXJmYWNlTmFtZX0gPSAxOworCisg
ICAgICAgIHByaW50IEYgIiNpbmNsdWRlIFwiZ2RvbS9HZG9tJHtKU0ludGVyZmFjZU5hbWV9UHJp
dmF0ZS5oXCJcbiI7CisgICAgfQorfQorCiBzdWIgcHJpbnRFbGVtZW50SW5jbHVkZXMKIHsKICAg
ICBteSAkRiA9IHNoaWZ0OwpAQCAtODY5LDYgKzkwNywxMCBAQAogICAgICAgICAkdGFnc1NlZW57
JEpTSW50ZXJmYWNlTmFtZX0gPSAxOwogCiAgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICR0YWdz
eyR0YWdOYW1lfXsiY29uZGl0aW9uYWwifTsKKyAgICAgICAgaWYgKCRiaW5kaW5nIG5lICdKUycp
IHsKKyAgICAgICAgICAgICMgc2tpcCBEQVRBR1JJRCBmb3Igbm93CisgICAgICAgICAgICBuZXh0
IGlmICgkY29uZGl0aW9uYWwgZXEgJ0RBVEFHUklEJyk7CisgICAgICAgIH0KICAgICAgICAgaWYg
KCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gIkVO
QUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQoLyYvLCAkY29uZGl0aW9uYWwpKSAu
ICIpIjsKICAgICAgICAgICAgIHByaW50IEYgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4i
OwpAQCAtODc3LDcgKzkxOSw4IEBACiAgICAgICAgICMgSGFjayBmb3IgdGhlIG1lZGlhIHRhZ3MK
ICAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgdmlhIGEgQ3VzdG9t
V3JhcHBlciBhdHRyaWJ1dGUgYW5kIGEgc2VwYXJhdGUgKkN1c3RvbSBmaWxlLgogICAgICAgICBp
ZiAoJHRhZ3N7JHRhZ05hbWV9eyJ3cmFwcGVyT25seUlmTWVkaWFJc0F2YWlsYWJsZSJ9KSB7Ci0g
ICAgICAgICAgICBwcmludCBGIDw8RU5ECisgICAgICAgICAgICBpZiAoJGJpbmRpbmcgZXEgJ0pT
JykgeworICAgICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKIHN0YXRpYyBKU05vZGUqIGNyZWF0
ZSR7SlNJbnRlcmZhY2VOYW1lfVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVs
ZW1lbnQ+IGVsZW1lbnQpCiB7CiAgICAgaWYgKCFNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSkK
QEAgLTg4Nyw4ICs5MzAsMTkgQEAKIAogRU5ECiA7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKK3N0YXRpYyBncG9pbnRlciBjcmVhdGUke0pTSW50
ZXJmYWNlTmFtZX1XcmFwcGVyKFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxl
bWVudD4gZWxlbWVudCkKK3sKKyAgICByZXR1cm4gd3JhcCR7SlNJbnRlcmZhY2VOYW1lfShzdGF0
aWNfY2FzdDwke0pTSW50ZXJmYWNlTmFtZX0qPihlbGVtZW50LmdldCgpKSk7Cit9CisKK0VORAor
OworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnQgRiA8
PEVORAorICAgICAgICAgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsKKyAgICAgICAgICAgICAg
ICBwcmludCBGIDw8RU5ECiBzdGF0aWMgSlNOb2RlKiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1X
cmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQogewog
ICAgIHJldHVybiBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsICR7
SlNJbnRlcmZhY2VOYW1lfSwgZWxlbWVudC5nZXQoKSk7CkBAIC04OTYsNiArOTUwLDE2IEBACiAK
IEVORAogOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludCBGIDw8
RU5ECitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihQYXNz
UmVmUHRyPCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAg
cmV0dXJuIHdyYXAke0pTSW50ZXJmYWNlTmFtZX0oc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5h
bWV9Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitFTkQKKzsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7CiAgICAgICAgICAgICBwcmludCBGICIj
ZW5kaWZcblxuIjsKQEAgLTkxNSw5ICs5NzksMTYgQEAKIAogICAgIHByaW50IEYgIiNpZiAkcGFy
YW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9XG5cbiIgaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFj
dG9yeVdpdGgnfTsKIAotICAgIHByaW50IEYgIiNpbmNsdWRlIFwiSlMkcGFyYW1ldGVyc3snbmFt
ZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnkuaFwiXG4iOworICAgIGlmICgkYmluZGluZyBu
ZSAnSlMnKSB7CisgICAgICAgIHByaW50IEYgIiNpbmNsdWRlIFwiZ2RvbS9HZG9tTm9kZS5oXCJc
biI7CisgICAgfQorICAgIHByaW50IEYgIiNpbmNsdWRlIFwiJGJpbmRpbmckcGFyYW1ldGVyc3sn
bmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnkuaFwiXG4iOwogCi0gICAgcHJpbnRKU0Vs
ZW1lbnRJbmNsdWRlcygkRik7CisgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsKKyAgICAgICAg
cHJpbnRKU0VsZW1lbnRJbmNsdWRlcygkRik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRH
RE9NRWxlbWVudEluY2x1ZGVzKCRGKTsKKyAgICB9CiAKICAgICBwcmludCBGICJcbiNpbmNsdWRl
IFwiJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXMuaFwiXG5cbiI7CiAKQEAgLTkyNSw3ICs5
OTYsOCBAQAogCiAgICAgcHJpbnQgRiAiXG4jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPlxu
XG4iOwogICAgIAotICAgIHByaW50IEYgPDxFTkQKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0pTJykg
eworICAgICAgICBwcmludCBGIDw8RU5ECiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC05MzYsMTAgKzEwMDgsMjUgQEAKIAogRU5ECiA7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKIAorbmFtZXNw
YWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU6OiRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5hbWVzOworCit0eXBlZGVmIGdwb2lu
dGVyICgqQ3JlYXRlJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGdW5jdGlv
bikoUGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50Pik7CisKK0VORAor
OworICAgIH0KKwogICAgIHByaW50V3JhcHBlckZ1bmN0aW9ucygkRik7CiAKLSAgICBwcmludCBG
IDw8RU5ECisgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVO
RAogSlNOb2RlKiBjcmVhdGVKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfVdyYXBwZXIoRXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPCRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCiB7ICAgCiAgICAgdHlwZWRl
ZiBIYXNoTWFwPFdlYkNvcmU6OkF0b21pY1N0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3sn
bmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0aW9uPiBGdW5jdGlvbk1hcDsKQEAgLTk0Nywx
MiArMTAzNCwyNSBAQAogICAgIGlmIChtYXAuaXNFbXB0eSgpKSB7CiBFTkQKIDsKKyAgICB9IGVs
c2UgeworICAgICAgICBwcmludCBGIDw8RU5ECitncG9pbnRlciBjcmVhdGVHRE9NJHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXIoUGFzc1JlZlB0cjxXZWJDb3JlOjokcGFyYW1l
dGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQoreyAgIAorICAgIHN0YXRpYyBIYXNo
TWFwPFdlYkNvcmU6OkF0b21pY1N0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3snbmFtZXNw
YWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0aW9uPiBtYXA7CisgICAgaWYgKG1hcC5pc0VtcHR5KCkp
IHsKK0VORAorOworICAgIH0KIAogICAgIGZvciBteSAkdGFnIChzb3J0IGtleXMgJXRhZ3MpIHsK
ICAgICAgICAgIyBEbyBub3QgYWRkIHRoZSBuYW1lIHRvIHRoZSBtYXAgaWYgaXQgZG9lcyBub3Qg
aGF2ZSBhIEpTIHdyYXBwZXIgY29uc3RydWN0b3Igb3IgdXNlcyB0aGUgZGVmYXVsdCB3cmFwcGVy
LgogICAgICAgICBuZXh0IGlmIHVzZXNEZWZhdWx0SlNXcmFwcGVyKCR0YWcsIFwldGFncyk7CiAK
ICAgICAgICAgbXkgJGNvbmRpdGlvbmFsID0gJHRhZ3N7JHRhZ317ImNvbmRpdGlvbmFsIn07Cisg
ICAgICAgIGlmICgkYmluZGluZyBuZSAnSlMnKSB7CisgICAgICAgICAgICAjIHNraXAgREFUQUdS
SUQgZm9yIG5vdworICAgICAgICAgICAgbmV4dCBpZiAoJGNvbmRpdGlvbmFsIGVxICdEQVRBR1JJ
RCcpOworICAgICAgICB9CiAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKICAgICAgICAgICAg
IG15ICRjb25kaXRpb25hbFN0cmluZyA9ICJFTkFCTEUoIiAuIGpvaW4oIikgJiYgRU5BQkxFKCIs
IHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAiKSI7CiAgICAgICAgICAgICBwcmludCBGICIj
aWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiI7CkBAIC05NjYsNyArMTA2Niw4IEBACiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBwcmludCBGIDw8RU5ECisgICAgaWYgKCRiaW5kaW5nIGVxICdKUycp
IHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAogICAgIH0KICAgICBDcmVhdGUkcGFyYW1ldGVyc3sn
bmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0aW9uIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbiA9
IG1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKTsKICAgICBpZiAoY3JlYXRlV3Jh
cHBlckZ1bmN0aW9uKQpAQCAtOTc4LDcgKzEwNzksMjIgQEAKIAogRU5ECiA7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAorICAgIH0KKyAgICBDcmVhdGUkcGFyYW1ldGVyc3sn
bmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0aW9uIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbiA9
CisgICAgICAgIG1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICBpZiAo
Y3JlYXRlV3JhcHBlckZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlckZ1bmN0
aW9uKGVsZW1lbnQpOworICAgIHJldHVybiB3cmFwJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxl
bWVudChlbGVtZW50LmdldCgpKTsKK30KIAorfQorCitFTkQKKzsKKyAgICB9CisKICAgICBwcmlu
dCBGICIjZW5kaWZcbiIgaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKIAogICAg
IGNsb3NlIEY7CkBAIC05OTIsMTIgKzExMDgsMTMgQEAKIAogICAgIHByaW50TGljZW5zZUhlYWRl
cigkRik7CiAKLSAgICBwcmludCBGICIjaWZuZGVmIEpTJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9
RWxlbWVudFdyYXBwZXJGYWN0b3J5X2hcbiI7Ci0gICAgcHJpbnQgRiAiI2RlZmluZSBKUyRwYXJh
bWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG5cbiI7CisgICAgcHJp
bnQgRiAiI2lmbmRlZiAkYmluZGluZyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFw
cGVyRmFjdG9yeV9oXG4iOworICAgIHByaW50IEYgIiNkZWZpbmUgJGJpbmRpbmckcGFyYW1ldGVy
c3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuXG4iOwogCiAgICAgcHJpbnQg
RiAiI2lmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ31cbiIgaWYgJHBhcmFtZXRlcnN7
J2d1YXJkRmFjdG9yeVdpdGgnfTsKIAotICAgIHByaW50IEYgPDxFTkQKKyAgICBpZiAoJGJpbmRp
bmcgZXEgJ0pTJykgeworICAgICAgICBwcmludCBGIDw8RU5ECiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMDE2LDEwICsxMTMzLDI3IEBACiAgCiBFTkQK
IDsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludCBGIDw8RU5ECisjaW5jbHVkZSAiR2RvbU5v
ZGVQcml2YXRlLmgiCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgY2xhc3MgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudDsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisgICAgZ3BvaW50ZXIgY3JlYXRlR0RPTSRwYXJhbWV0ZXJzeydu
YW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyKFBhc3NSZWZQdHI8V2ViQ29yZTo6JHBhcmFtZXRlcnN7
J25hbWVzcGFjZSd9RWxlbWVudD4pOworfQorIAorRU5ECis7CisgICAgfQorCiAgICAgcHJpbnQg
RiAiI2VuZGlmIC8vICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ31cblxuIiBpZiAkcGFy
YW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9OwogCi0gICAgcHJpbnQgRiAiI2VuZGlmIC8vIEpT
JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5X2hcbiI7CisgICAg
cHJpbnQgRiAiI2VuZGlmIC8vICRiaW5kaW5nJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVu
dFdyYXBwZXJGYWN0b3J5X2hcbiI7CiAKICAgICBjbG9zZSBGOwogfQpJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2Mzkz
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTE3NTQxLDYgKzE3NjYy
LDE1IEBACiAgICAgICAgICogcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5jcHA6CiAgICAgICAg
IChXZWJDb3JlOjpXQ0RhdGFPYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKToKIAorMjAwOS0wOC0wMyAg
THVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiAgPGxrY2xAbGtjbC5uZXQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0ZW5kZWQgbWFrZV9uYW1l
cy5wbCB0byBzdXBwb3J0IEdET00gYmluZGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NDI1CisKKyAgICAgICAgKiBXZWJDb3JlL2RvbS9tYWtl
X2dkb21fbmFtZXMucGw6IEFkZGVkIC0tYmluZGluZ3NUeXBlIG9wdGlvbgorCiAyMDA5LTA2LTE2
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
dXN0YXZvIE5vcm9uaGEuCg==
</data>
<flag name="review"
          id="18171"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34060</attachid>
            <date>2009-08-04 07:38:05 -0700</date>
            <delta_ts>2009-08-05 13:06:08 -0700</delta_ts>
            <desc>answers review comments.  </desc>
            <filename>gdhewf.patch</filename>
            <type>text/plain</type>
            <size>17820</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNDYzOTUpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25h
bWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBD
b3B5cmlnaHQgKEMpIDIwMDksIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9y
Zz4KICMgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisjIENvcHlyaWdodCAoQykgMjAw
OSBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgogIwogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0Miw3IEBACiBteSAkcHJpbnRXcmFwcGVyRmFj
dG9yeSA9IDA7CiBteSAkdGFnc0ZpbGUgPSAiIjsKIG15ICRhdHRyc0ZpbGUgPSAiIjsKK215ICRi
aW5kaW5nID0gIiI7CiBteSAkb3V0cHV0RGlyID0gIi4iOwogbXkgJXRhZ3MgPSAoKTsKIG15ICVh
dHRycyA9ICgpOwpAQCAtNTAsNiArNTIsNyBAQAogCiBHZXRPcHRpb25zKCd0YWdzPXMnID0+IFwk
dGFnc0ZpbGUsIAogICAgICdhdHRycz1zJyA9PiBcJGF0dHJzRmlsZSwKKyAgICAnYmluZGluZ1R5
cGU9cycgPT4gXCRiaW5kaW5nLAogICAgICdmYWN0b3J5JyA9PiBcJHByaW50RmFjdG9yeSwKICAg
ICAnb3V0cHV0RGlyPXMnID0+IFwkb3V0cHV0RGlyLAogICAgICdleHRyYURlZmluZXM9cycgPT4g
XCRleHRyYURlZmluZXMsCkBAIC01OCw2ICs2MSw4IEBACiAKIGRpZSAiWW91IG11c3Qgc3BlY2lm
eSBhdCBsZWFzdCBvbmUgb2YgLS10YWdzIDxmaWxlPiBvciAtLWF0dHJzIDxmaWxlPiIgdW5sZXNz
IChsZW5ndGgoJHRhZ3NGaWxlKSB8fCBsZW5ndGgoJGF0dHJzRmlsZSkpOwogCitkaWUgIllvdSBt
dXN0IHNwZWNpZnkgYSAtLWJpbmRpbmdUeXBlIDx0eXBlPiBlLmcuIEdkb20gb3IgSlMiIHVubGVz
cyAobGVuZ3RoKCRiaW5kaW5nKSk7CisKIHJlYWROYW1lcygkdGFnc0ZpbGUsICJ0YWdzIikgaWYg
bGVuZ3RoKCR0YWdzRmlsZSk7CiByZWFkTmFtZXMoJGF0dHJzRmlsZSwgImF0dHJzIikgaWYgbGVu
Z3RoKCRhdHRyc0ZpbGUpOwogCkBAIC02OSwxMCArNzQsMTUgQEAKIG1rcGF0aCgkb3V0cHV0RGly
KTsKIG15ICRuYW1lc0Jhc2VQYXRoID0gIiRvdXRwdXREaXIvJHBhcmFtZXRlcnN7J25hbWVzcGFj
ZSd9TmFtZXMiOwogbXkgJGZhY3RvcnlCYXNlUGF0aCA9ICIkb3V0cHV0RGlyLyRwYXJhbWV0ZXJz
eyduYW1lc3BhY2UnfUVsZW1lbnRGYWN0b3J5IjsKLW15ICR3cmFwcGVyRmFjdG9yeUJhc2VQYXRo
ID0gIiRvdXRwdXREaXIvSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZh
Y3RvcnkiOworbXkgJHdyYXBwZXJGYWN0b3J5QmFzZVBhdGggPSAiJG91dHB1dERpci8kYmluZGlu
ZyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeSI7CiAKLXByaW50
TmFtZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0aC5oIik7Ci1wcmludE5hbWVzQ3BwRmlsZSgi
JG5hbWVzQmFzZVBhdGguY3BwIik7CisjIEZJWE1FOiBtYWtlX25hbWVzIGlzIGJlaW5nIHV0aWxp
c2VkIGZvciBzaXggZGlmZmVyZW50IHB1cnBvc2VzLAorIyB3aXRoIGdlbmVyYXRpb24gb2YgSFRN
TE5hbWVzLmNwcC9oIGJlaW5nIGRvbmUgYXQgdGhlIHNhbWUgdGltZQorIyBhcyB0aGUgSlMgYmlu
ZGluZ3Mgd3JhcHBlciBmYWN0b3JpZXMuCitpZiAoJGJpbmRpbmcgZXEgJ0pTJykgeworICAgIHBy
aW50TmFtZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0aC5oIik7CisgICAgcHJpbnROYW1lc0Nw
cEZpbGUoIiRuYW1lc0Jhc2VQYXRoLmNwcCIpOworfQogCiBpZiAoJHByaW50RmFjdG9yeSkgewog
ICAgIHByaW50RmFjdG9yeUNwcEZpbGUoIiRmYWN0b3J5QmFzZVBhdGguY3BwIik7CkBAIC0zMTQs
NiArMzI0LDEwIEBACiAgICAgICAgICR1bmlxdWVUYWdzeyRpbnRlcmZhY2VOYW1lfSA9ICcxJzsK
IAogICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAkdGFnc3skdGFnTmFtZX17ImNvbmRpdGlvbmFs
In07CisgICAgICAgIGlmICgkYmluZGluZyBlcSAnR2RvbScpIHsKKyAgICAgICAgICAgICMgc2tp
cCBEQVRBR1JJRCBmb3Igbm93CisgICAgICAgICAgICBuZXh0IGlmICgkY29uZGl0aW9uYWwgZXEg
J0RBVEFHUklEJyk7CisgICAgICAgIH0KICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAg
ICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBF
TkFCTEUoIiwgc3BsaXQoLyYvLCAkY29uZGl0aW9uYWwpKSAuICIpIjsKICAgICAgICAgICAgIHBy
aW50IEYgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iOwpAQCAtMzQ3LDYgKzM2MSwxMSBA
QAogICAgIGZvciBteSAkdGFnTmFtZSAoc29ydCBrZXlzICV0YWdDb25zdHJ1Y3Rvck1hcCkgewog
CiAgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWdOYW1lfXsiY29uZGl0aW9uYWwi
fTsKKyAgICAgICAgaWYgKCRiaW5kaW5nIGVxICdHZG9tJykgeworICAgICAgICAgICAgIyBza2lw
IERBVEFHUklEIGZvciBub3cKKyAgICAgICAgICAgIG5leHQgaWYgKCRjb25kaXRpb25hbCBlcSAn
REFUQUdSSUQnKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKICAg
ICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICJFTkFCTEUoIiAuIGpvaW4oIikgJiYg
RU5BQkxFKCIsIHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAiKSI7CiAgICAgICAgICAgICBw
cmludCBGICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiI7CkBAIC01NjYsMTcgKzU4NSwyNCBA
QAogICAgIGNsb3NlIEY7CiB9CiAKLXN1YiBwcmludEpTRWxlbWVudEluY2x1ZGVzCitzdWIgcHJp
bnRCaW5kaW5nRWxlbWVudEluY2x1ZGVzCiB7CiAgICAgbXkgJEYgPSBzaGlmdDsKKyAgICBteSAk
cHJlZml4ID0gc2hpZnQ7CisgICAgbXkgJHN1ZmZpeCA9IHNoaWZ0OwogCiAgICAgbXkgJXRhZ3NT
ZWVuOwogICAgIGZvciBteSAkdGFnTmFtZSAoc29ydCBrZXlzICV0YWdzKSB7CisgICAgICAgIG15
ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWdOYW1lfXsiY29uZGl0aW9uYWwifTsKKyAgICAgICAg
aWYgKCRiaW5kaW5nIGVxICdHZG9tJykgeworICAgICAgICAgICAgIyBza2lwIERBVEFHUklEIGZv
ciBub3cKKyAgICAgICAgICAgIG5leHQgaWYgKCRjb25kaXRpb25hbCBlcSAnREFUQUdSSUQnKTsK
KyAgICAgICAgfQogICAgICAgICBteSAkSlNJbnRlcmZhY2VOYW1lID0gJHRhZ3N7JHRhZ05hbWV9
eyJKU0ludGVyZmFjZU5hbWUifTsKICAgICAgICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2Vlbnsk
SlNJbnRlcmZhY2VOYW1lfSkgfHwgdXNlc0RlZmF1bHRKU1dyYXBwZXIoJHRhZ05hbWUpOwogICAg
ICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNlTmFtZX0gPSAxOwogCi0gICAgICAgIHByaW50IEYg
IiNpbmNsdWRlIFwiSlMke0pTSW50ZXJmYWNlTmFtZX0uaFwiXG4iOworICAgICAgICBwcmludCBG
ICIjaW5jbHVkZSBcIiR7cHJlZml4fSRiaW5kaW5nJHtKU0ludGVyZmFjZU5hbWV9JHtzdWZmaXh9
LmhcIlxuIjsKICAgICB9CiB9CiAKQEAgLTU4Niw2ICs2MTIsMTEgQEAKIAogICAgIG15ICV0YWdz
U2VlbjsKICAgICBmb3IgbXkgJHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykgeworICAgICAgICBt
eSAkY29uZGl0aW9uYWwgPSAkdGFnc3skdGFnTmFtZX17ImNvbmRpdGlvbmFsIn07CisgICAgICAg
IGlmICgkYmluZGluZyBlcSAnR2RvbScpIHsKKyAgICAgICAgICAgICMgc2tpcCBEQVRBR1JJRCBm
b3Igbm93CisgICAgICAgICAgICBuZXh0IGlmICgkY29uZGl0aW9uYWwgZXEgJ0RBVEFHUklEJyk7
CisgICAgICAgIH0KICAgICAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkdGFnc3skdGFnTmFtZX17
ImludGVyZmFjZU5hbWUifTsKICAgICAgICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2VlbnskaW50
ZXJmYWNlTmFtZX0pOwogICAgICAgICAkdGFnc1NlZW57JGludGVyZmFjZU5hbWV9ID0gMTsKQEAg
LTg1Nyw2ICs4ODgsMjAgQEAKICAgICByZXR1cm4gJHRhZ3N7JG5hbWV9eydKU0ludGVyZmFjZU5h
bWUnfSBlcSAkcGFyYW1ldGVyc3sibmFtZXNwYWNlIn0gLiAiRWxlbWVudCIgfHwgJHRhZ3N7JG5h
bWV9eydKU0ludGVyZmFjZU5hbWUnfSBlcSAiSFRNTE5vU2NyaXB0RWxlbWVudCI7CiB9CiAKK3N1
YiBwcmludFdyYXBwZXJGdW5jdGlvbkdkb21JbnRlcmZhY2UKK3sKKyAgICBteSAkRiA9IHNoaWZ0
OworICAgIG15ICRKU0ludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBwcmludCBGIDw8RU5ECitz
dGF0aWMgZ3BvaW50ZXIgY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihQYXNzUmVmUHRy
PCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJu
IHdyYXAke0pTSW50ZXJmYWNlTmFtZX0oc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9Kj4o
ZWxlbWVudC5nZXQoKSkpOworfQorCitFTkQKKzsKK30KKwogc3ViIHByaW50V3JhcHBlckZ1bmN0
aW9ucwogewogICAgIG15ICRGID0gc2hpZnQ7CkBAIC04NjksNiArOTE0LDExIEBACiAgICAgICAg
ICR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSA9IDE7CiAKICAgICAgICAgbXkgJGNvbmRpdGlv
bmFsID0gJHRhZ3N7JHRhZ05hbWV9eyJjb25kaXRpb25hbCJ9OworICAgICAgICBpZiAoJGJpbmRp
bmcgZXEgJ0dkb20nKSB7CisgICAgICAgICAgICAjIHNraXAgREFUQUdSSUQgZm9yIG5vdworICAg
ICAgICAgICAgbmV4dCBpZiAoJGNvbmRpdGlvbmFsIGVxICdEQVRBR1JJRCcpOworICAgICAgICB9
CisKICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgbXkgJGNvbmRpdGlv
bmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQoLyYvLCAk
Y29uZGl0aW9uYWwpKSAuICIpIjsKICAgICAgICAgICAgIHByaW50IEYgIiNpZiAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuXG4iOwpAQCAtODc3LDcgKzkyNyw4IEBACiAgICAgICAgICMgSGFjayBmb3Ig
dGhlIG1lZGlhIHRhZ3MKICAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRv
bmUgdmlhIGEgQ3VzdG9tV3JhcHBlciBhdHRyaWJ1dGUgYW5kIGEgc2VwYXJhdGUgKkN1c3RvbSBm
aWxlLgogICAgICAgICBpZiAoJHRhZ3N7JHRhZ05hbWV9eyJ3cmFwcGVyT25seUlmTWVkaWFJc0F2
YWlsYWJsZSJ9KSB7Ci0gICAgICAgICAgICBwcmludCBGIDw8RU5ECisgICAgICAgICAgICBpZiAo
JGJpbmRpbmcgZXEgJ0pTJykgeworICAgICAgICAgICAgICAgIHByaW50IEYgPDxFTkQKIHN0YXRp
YyBKU05vZGUqIGNyZWF0ZSR7SlNJbnRlcmZhY2VOYW1lfVdyYXBwZXIoRXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPCRwYXJhbWV0ZXJz
eyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCiB7CiAgICAgaWYgKCFNZWRpYVBsYXllcjo6
aXNBdmFpbGFibGUoKSkKQEAgLTg4Nyw4ICs5MzgsMTMgQEAKIAogRU5ECiA7CisgICAgICAgICAg
ICB9IAorICAgICAgICAgICAgaWYgKCRiaW5kaW5nIGVxICdHZG9tJykgeworICAgICAgICAgICAg
ICAgIHByaW50V3JhcHBlckZ1bmN0aW9uR2RvbUludGVyZmFjZSgkRiwgJEpTSW50ZXJmYWNlTmFt
ZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludCBG
IDw8RU5ECisgICAgICAgICAgICBpZiAoJGJpbmRpbmcgZXEgJ0pTJykgeworICAgICAgICAgICAg
ICAgIHByaW50IEYgPDxFTkQKIHN0YXRpYyBKU05vZGUqIGNyZWF0ZSR7SlNJbnRlcmZhY2VOYW1l
fVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQYXNzUmVmUHRyPCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCiB7
CiAgICAgcmV0dXJuIENSRUFURV9ET01fTk9ERV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwg
JHtKU0ludGVyZmFjZU5hbWV9LCBlbGVtZW50LmdldCgpKTsKQEAgLTg5Niw2ICs5NTIsMTAgQEAK
IAogRU5ECiA7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgaWYgKCRiaW5kaW5nIGVxICdH
ZG9tJykgeworICAgICAgICAgICAgICAgIHByaW50V3JhcHBlckZ1bmN0aW9uR2RvbUludGVyZmFj
ZSgkRiwgJEpTSW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgcHJpbnQgRiAiI2VuZGlmXG5cbiI7
CkBAIC05MDMsNiArOTYzLDUyIEBACiAgICAgfQogfQogCitzdWIgcHJpbnRXcmFwcGVyRmFjdG9y
eUNwcEZpbGVHZG9tSGVhZGVyCit7CisgICAgbXkgJEYgPSBzaGlmdDsKKyAgICBwcmludCBGIDw8
RU5ECisjaW5jbHVkZSAiQ1N0cmluZy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6JHBhcmFtZXRlcnN7
J25hbWVzcGFjZSd9TmFtZXM7CisKK3R5cGVkZWYgZ3BvaW50ZXIgKCpDcmVhdGUkcGFyYW1ldGVy
c3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0aW9uKShQYXNzUmVmUHRyPCRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+KTsKKworRU5ECis7Cit9CisKK3N1YiBwcmludFdyYXBw
ZXJGYWN0b3J5Q3BwRmlsZUdkb21GdW5jdGlvbkhlYWRlcgoreworICAgIHByaW50IEYgPDxFTkQK
K2dwb2ludGVyIGNyZWF0ZUdkb20kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBl
cihQYXNzUmVmUHRyPFdlYkNvcmU6OiRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVs
ZW1lbnQpCit7ICAgCisgICAgc3RhdGljIEhhc2hNYXA8V2ViQ29yZTo6QXRvbWljU3RyaW5nSW1w
bCosIENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+
IG1hcDsKKyAgICBpZiAobWFwLmlzRW1wdHkoKSkgeworRU5ECis7Cit9CisKK3N1YiBwcmludFdy
YXBwZXJGYWN0b3J5Q3BwRmlsZUdkb21Gb290ZXIKK3sKKyAgICBteSAkRiA9IHNoaWZ0OworICAg
IHByaW50IEYgPDxFTkQKKyAgICB9CisgICAgQ3JlYXRlJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9
RWxlbWVudFdyYXBwZXJGdW5jdGlvbiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24gPQorICAgICAgICBt
YXAuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAgaWYgKGNyZWF0ZVdyYXBw
ZXJGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbihlbGVtZW50
KTsKKyAgICByZXR1cm4gd3JhcCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQoZWxlbWVu
dC5nZXQoKSk7Cit9CisKK30KKworRU5ECis7Cit9CisKIHN1YiBwcmludFdyYXBwZXJGYWN0b3J5
Q3BwRmlsZQogewogICAgIG15ICRjcHBQYXRoID0gc2hpZnQ7CkBAIC05MTUsOSArMTAyMSwyMCBA
QAogCiAgICAgcHJpbnQgRiAiI2lmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ31cblxu
IiBpZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9OwogCi0gICAgcHJpbnQgRiAiI2lu
Y2x1ZGUgXCJKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeS5o
XCJcbiI7CisgICAgaWYgKCRiaW5kaW5nIGVxICdHZG9tJykgeworICAgICAgICBwcmludCBGICIj
aW5jbHVkZSBcImdkb20vR2RvbU5vZGUuaFwiXG4iOworICAgIH0KKyAgICBwcmludCBGICIjaW5j
bHVkZSBcIiRiaW5kaW5nJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0
b3J5LmhcIlxuIjsKIAotICAgIHByaW50SlNFbGVtZW50SW5jbHVkZXMoJEYpOworICAgIGlmICgk
YmluZGluZyBlcSAnSlMnKSB7CisgICAgICAgIHByaW50QmluZGluZ0VsZW1lbnRJbmNsdWRlcygk
RiwgIiIsICIiKTsKKyAgICB9IAorICAgIGlmICgkYmluZGluZyBlcSAnR2RvbScpIHsKKyAgICAg
ICAgcHJpbnRCaW5kaW5nRWxlbWVudEluY2x1ZGVzKCRGLCAiZ2RvbS8iLCAiIik7CisgICAgICAg
IHByaW50IEYgIlxuIjsKKyAgICAgICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJnZG9tL0dkb21IVE1M
RWxlbWVudFByaXZhdGUuaFwiXG4iOworICAgICAgICBwcmludEJpbmRpbmdFbGVtZW50SW5jbHVk
ZXMoJEYsICJnZG9tLyIsICJQcml2YXRlIik7CisgICAgfQogCiAgICAgcHJpbnQgRiAiXG4jaW5j
bHVkZSBcIiRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5hbWVzLmhcIlxuXG4iOwogCkBAIC05MjUs
NyArMTA0Miw4IEBACiAKICAgICBwcmludCBGICJcbiNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+XG5cbiI7CiAgICAgCi0gICAgcHJpbnQgRiA8PEVORAorICAgIGlmICgkYmluZGluZyBlcSAn
SlMnKSB7CisgICAgICAgIHByaW50IEYgPDxFTkQKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTkzNiwxMCArMTA1NCwxNSBAQAogCiBFTkQKIDsKKyAgICB9
IAorICAgIGlmICgkYmluZGluZyBlcSAnR2RvbScpIHsKKyAgICAgICAgcHJpbnRXcmFwcGVyRmFj
dG9yeUNwcEZpbGVHZG9tSGVhZGVyKCRGKTsKKyAgICB9CiAKICAgICBwcmludFdyYXBwZXJGdW5j
dGlvbnMoJEYpOwogCi0gICAgcHJpbnQgRiA8PEVORAorICAgIGlmICgkYmluZGluZyBlcSAnSlMn
KSB7CisgICAgICAgIHByaW50IEYgPDxFTkQKIEpTTm9kZSogY3JlYXRlSlMkcGFyYW1ldGVyc3sn
bmFtZXNwYWNlJ31XcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBl
bGVtZW50KQogeyAgIAogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpBdG9taWNTdHJpbmdJ
bXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGdW5jdGlv
bj4gRnVuY3Rpb25NYXA7CkBAIC05NDcsMTIgKzEwNzAsMjEgQEAKICAgICBpZiAobWFwLmlzRW1w
dHkoKSkgewogRU5ECiA7CisgICAgfSAKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0dkb20nKSB7Cisg
ICAgICAgIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlR2RvbUZ1bmN0aW9uSGVhZGVyKCRGKTsK
KyAgICB9CiAKICAgICBmb3IgbXkgJHRhZyAoc29ydCBrZXlzICV0YWdzKSB7CiAgICAgICAgICMg
RG8gbm90IGFkZCB0aGUgbmFtZSB0byB0aGUgbWFwIGlmIGl0IGRvZXMgbm90IGhhdmUgYSBKUyB3
cmFwcGVyIGNvbnN0cnVjdG9yIG9yIHVzZXMgdGhlIGRlZmF1bHQgd3JhcHBlci4KICAgICAgICAg
bmV4dCBpZiB1c2VzRGVmYXVsdEpTV3JhcHBlcigkdGFnLCBcJXRhZ3MpOwogCiAgICAgICAgIG15
ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWd9eyJjb25kaXRpb25hbCJ9OworICAgICAgICBpZiAo
JGJpbmRpbmcgZXEgJ0dkb20nKSB7CisgICAgICAgICAgICAjIHNraXAgREFUQUdSSUQgZm9yIG5v
dworICAgICAgICAgICAgbmV4dCBpZiAoJGNvbmRpdGlvbmFsIGVxICdEQVRBR1JJRCcpOworICAg
ICAgICB9CisKICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgbXkgJGNv
bmRpdGlvbmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQo
LyYvLCAkY29uZGl0aW9uYWwpKSAuICIpIjsKICAgICAgICAgICAgIHByaW50IEYgIiNpZiAke2Nv
bmRpdGlvbmFsU3RyaW5nfVxuIjsKQEAgLTk2Niw3ICsxMDk4LDggQEAKICAgICAgICAgfQogICAg
IH0KIAotICAgIHByaW50IEYgPDxFTkQKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0pTJykgeworICAg
ICAgICBwcmludCBGIDw8RU5ECiAgICAgfQogICAgIENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3Bh
Y2UnfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24gY3JlYXRlV3JhcHBlckZ1bmN0aW9uID0gbWFwLmdl
dChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgIGlmIChjcmVhdGVXcmFwcGVyRnVu
Y3Rpb24pCkBAIC05NzgsMTIgKzExMTEsMzYgQEAKIAogRU5ECiA7CisgICAgfSAKKyAgICBpZiAo
JGJpbmRpbmcgZXEgJ0dkb20nKSB7CisgICAgICAgIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxl
R2RvbUZvb3RlcigkRik7CisgICAgfQogCiAgICAgcHJpbnQgRiAiI2VuZGlmXG4iIGlmICRwYXJh
bWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ307CiAKICAgICBjbG9zZSBGOwogfQogCitzdWIgcHJp
bnRXcmFwcGVyRmFjdG9yeUhlYWRlckZpbGVHZG9tQm9keQoreworICAgIG15ICRGID0gc2hpZnQ7
CisgICAgcHJpbnQgRiA8PEVORAorI2luY2x1ZGUgIkdkb21Ob2RlUHJpdmF0ZS5oIgorCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzICRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
ICAgIGdwb2ludGVyIGNyZWF0ZUdkb20kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3Jh
cHBlcihQYXNzUmVmUHRyPFdlYkNvcmU6OiRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+
KTsKK30KKyAKK0VORAorOworfQorCiBzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUhlYWRlckZpbGUK
IHsKICAgICBteSAkaGVhZGVyUGF0aCA9IHNoaWZ0OwpAQCAtOTkyLDEyICsxMTQ5LDEzIEBACiAK
ICAgICBwcmludExpY2Vuc2VIZWFkZXIoJEYpOwogCi0gICAgcHJpbnQgRiAiI2lmbmRlZiBKUyRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOwotICAgIHBy
aW50IEYgIiNkZWZpbmUgSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZh
Y3RvcnlfaFxuXG4iOworICAgIHByaW50IEYgIiNpZm5kZWYgJGJpbmRpbmckcGFyYW1ldGVyc3sn
bmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuIjsKKyAgICBwcmludCBGICIjZGVm
aW5lICRiaW5kaW5nJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5
X2hcblxuIjsKIAogICAgIHByaW50IEYgIiNpZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0
aCd9XG4iIGlmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ307CiAKLSAgICBwcmludCBG
IDw8RU5ECisgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVO
RAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTAxNiwx
MCArMTE3NCwxNCBAQAogIAogRU5ECiA7CisgICAgfSAKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0dk
b20nKSB7CisgICAgICAgIHByaW50V3JhcHBlckZhY3RvcnlIZWFkZXJGaWxlR2RvbUJvZHkoJEYp
OworICAgIH0KIAogICAgIHByaW50IEYgIiNlbmRpZiAvLyAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0
b3J5V2l0aCd9XG5cbiIgaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKIAotICAg
IHByaW50IEYgIiNlbmRpZiAvLyBKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFw
cGVyRmFjdG9yeV9oXG4iOworICAgIHByaW50IEYgIiNlbmRpZiAvLyAkYmluZGluZyRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOwogCiAgICAgY2xvc2Ug
RjsKIH0KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiA0NjM5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzU0MSw2ICsxNzY2MiwxNSBAQAogICAgICAgICAqIHBsYXRmb3JtL3dpbi9XQ0Rh
dGFPYmplY3QuY3BwOgogICAgICAgICAoV2ViQ29yZTo6V0NEYXRhT2JqZWN0OjpRdWVyeUludGVy
ZmFjZSk6CiAKKzIwMDktMDgtMDMgIEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gIDxsa2Ns
QGxrY2wubmV0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEV4dGVuZGVkIG1ha2VfbmFtZXMucGwgdG8gc3VwcG9ydCBHRE9NIGJpbmRpbmdzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQyNQorCisgICAg
ICAgICogV2ViQ29yZS9kb20vbWFrZV9nZG9tX25hbWVzLnBsOiBBZGRlZCAtLWJpbmRpbmdzVHlw
ZSBvcHRpb24KKwogMjAwOS0wNi0xNiAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhLgpJbmRleDogV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lv
biA0NjM5NSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI0
NDIsNyArMjg0Myw3IEBACiBEZXJpdmVkU291cmNlcy9XTUxOYW1lcy5jcHA6IERlcml2ZWRTb3Vy
Y2VzL1dNTEVsZW1lbnRGYWN0b3J5LmNwcDsKIAogRGVyaXZlZFNvdXJjZXMvV01MRWxlbWVudEZh
Y3RvcnkuY3BwOiAkKFdlYkNvcmUpL2RvbS9tYWtlX25hbWVzLnBsICQoV2ViQ29yZSkvd21sL1dN
TFRhZ05hbWVzLmluICQoV2ViQ29yZSkvd21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluCi0JJChQRVJM
KSAtSSQoV2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0cyAkPCAtLXRhZ3MgJChXZWJDb3JlKS93bWwv
V01MVGFnTmFtZXMuaW4gLS1hdHRycyAkKFdlYkNvcmUpL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5p
biAtLWZhY3RvcnkgLS13cmFwcGVyRmFjdG9yeSAtLW91dHB1dERpciAiJChHRU5TT1VSQ0VTKSIK
KwkkKFBFUkwpIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzICQ8IC0tYmluZGluZ1R5cGUg
SlMgLS10YWdzICQoV2ViQ29yZSkvd21sL1dNTFRhZ05hbWVzLmluIC0tYXR0cnMgJChXZWJDb3Jl
KS93bWwvV01MQXR0cmlidXRlTmFtZXMuaW4gLS1mYWN0b3J5IC0td3JhcHBlckZhY3RvcnkgLS1v
dXRwdXREaXIgIiQoR0VOU09VUkNFUykiCiBlbmRpZiAjIEVORCBFTkFCTEVfV01MCiAKICMgLS0t
LQpAQCAtMzA5OSwxMyArMzc3MywxNCBAQAogIyBTVkcgdGFnIGFuZCBhdHRyaWJ1dGUgbmFtZXMg
KG5lZWQgdG8gcGFzcyBhbiBleHRyYSBmbGFnIGlmIHN2ZyBleHBlcmltZW50YWwgZmVhdHVyZXMg
YXJlIGVuYWJsZWQpCiBEZXJpdmVkU291cmNlcy9TVkdOYW1lcy5jcHA6IERlcml2ZWRTb3VyY2Vz
L1NWR0VsZW1lbnRGYWN0b3J5LmNwcDsKIERlcml2ZWRTb3VyY2VzL0pTU1ZHRWxlbWVudFdyYXBw
ZXJGYWN0b3J5LmNwcDogRGVyaXZlZFNvdXJjZXMvU1ZHRWxlbWVudEZhY3RvcnkuY3BwCitEZXJp
dmVkU291cmNlcy9nZG9tL0dkb21TVkdFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwOiBEZXJpdmVk
U291cmNlcy9TVkdFbGVtZW50RmFjdG9yeS5jcHAKIAogaWYgU1ZHX0ZMQUdTCiBEZXJpdmVkU291
cmNlcy9TVkdFbGVtZW50RmFjdG9yeS5jcHA6ICQoV2ViQ29yZSkvZG9tL21ha2VfbmFtZXMucGwg
JChXZWJDb3JlKS9zdmcvc3ZndGFncy5pbiAkKFdlYkNvcmUpL3N2Zy9zdmdhdHRycy5pbgotCSQo
UEVSTCkgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS10YWdzICQoV2ViQ29yZSkv
c3ZnL3N2Z3RhZ3MuaW4gLS1hdHRycyAkKFdlYkNvcmUpL3N2Zy9zdmdhdHRycy5pbiAtLWV4dHJh
RGVmaW5lcyAiJChTVkdfRkVBVFVSRVMpIiAtLWZhY3RvcnkgLS13cmFwcGVyRmFjdG9yeSAtLW91
dHB1dERpciAiJChHRU5TT1VSQ0VTKSIKKwkkKFBFUkwpIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9z
Y3JpcHRzICQ8IC0tYmluZGluZ1R5cGUgSlMgLS10YWdzICQoV2ViQ29yZSkvc3ZnL3N2Z3RhZ3Mu
aW4gLS1hdHRycyAkKFdlYkNvcmUpL3N2Zy9zdmdhdHRycy5pbiAtLWV4dHJhRGVmaW5lcyAiJChT
VkdfRkVBVFVSRVMpIiAtLWZhY3RvcnkgLS13cmFwcGVyRmFjdG9yeSAtLW91dHB1dERpciAiJChH
RU5TT1VSQ0VTKSIKIGVsc2UKIERlcml2ZWRTb3VyY2VzL1NWR0VsZW1lbnRGYWN0b3J5LmNwcDog
JChXZWJDb3JlKS9kb20vbWFrZV9uYW1lcy5wbCAkKFdlYkNvcmUpL3N2Zy9zdmd0YWdzLmluICQo
V2ViQ29yZSkvc3ZnL3N2Z2F0dHJzLmluCi0JJChQRVJMKSAtSSQoV2ViQ29yZSkvYmluZGluZ3Mv
c2NyaXB0cyAkPCAtLXRhZ3MgJChXZWJDb3JlKS9zdmcvc3ZndGFncy5pbiAtLWF0dHJzICQoV2Vi
Q29yZSkvc3ZnL3N2Z2F0dHJzLmluIC0tZmFjdG9yeSAtLXdyYXBwZXJGYWN0b3J5IC0tb3V0cHV0
RGlyICIkKEdFTlNPVVJDRVMpIgorCSQoUEVSTCkgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3Njcmlw
dHMgJDwgLS1iaW5kaW5nVHlwZSBKUyAtLXRhZ3MgJChXZWJDb3JlKS9zdmcvc3ZndGFncy5pbiAt
LWF0dHJzICQoV2ViQ29yZSkvc3ZnL3N2Z2F0dHJzLmluIC0tZmFjdG9yeSAtLXdyYXBwZXJGYWN0
b3J5IC0tb3V0cHV0RGlyICIkKEdFTlNPVVJDRVMpIgogCiBlbmRpZiAjIFNWR19GTEFHUwogCkBA
IC0zMTE0LDcgKzM3ODksNyBAQAogRGVyaXZlZFNvdXJjZXMvWExpbmtOYW1lcy5oOiBEZXJpdmVk
U291cmNlcy9YTGlua05hbWVzLmNwcDsKIAogRGVyaXZlZFNvdXJjZXMvWExpbmtOYW1lcy5jcHAg
OiAkKFdlYkNvcmUpL2RvbS9tYWtlX25hbWVzLnBsICQoV2ViQ29yZSkvc3ZnL3hsaW5rYXR0cnMu
aW4KLQkkKFBFUkwpIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzICQ8IC0tYXR0cnMgJChX
ZWJDb3JlKS9zdmcveGxpbmthdHRycy5pbiAtLW91dHB1dERpciAiJChHRU5TT1VSQ0VTKSIKKwkk
KFBFUkwpIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzICQ8IC0tYmluZGluZ1R5cGUgSlMg
LS1hdHRycyAkKFdlYkNvcmUpL3N2Zy94bGlua2F0dHJzLmluIC0tb3V0cHV0RGlyICIkKEdFTlNP
VVJDRVMpIgogCiBlbmRpZiAjIEVORCBFTkFCTEVfU1ZHCiAKQEAgLTMyMTMsMTYgKzM4ODgsMjcg
QEAKIAogaWYgSFRNTF9GTEFHUwogRGVyaXZlZFNvdXJjZXMvSFRNTE5hbWVzLmNwcDogJChXZWJD
b3JlKS9kb20vbWFrZV9uYW1lcy5wbCAkKFdlYkNvcmUpL2h0bWwvSFRNTFRhZ05hbWVzLmluICQo
V2ViQ29yZSkvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KLQkkKFBFUkwpIC1JJChXZWJDb3Jl
KS9iaW5kaW5ncy9zY3JpcHRzICQ8IC0tdGFncyAkKFdlYkNvcmUpL2h0bWwvSFRNTFRhZ05hbWVz
LmluIC0tYXR0cnMgJChXZWJDb3JlKS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbiAtLWV4dHJh
RGVmaW5lcyAiJChIVE1MX0ZFQVRVUkVTKSIgLS1mYWN0b3J5IC0td3JhcHBlckZhY3RvcnkgLS1v
dXRwdXREaXIgIiQoR0VOU09VUkNFUykiCisJJChQRVJMKSAtSSQoV2ViQ29yZSkvYmluZGluZ3Mv
c2NyaXB0cyAkPCAtLWJpbmRpbmdUeXBlIEpTIC0tdGFncyAkKFdlYkNvcmUpL2h0bWwvSFRNTFRh
Z05hbWVzLmluIC0tYXR0cnMgJChXZWJDb3JlKS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbiAt
LWV4dHJhRGVmaW5lcyAiJChIVE1MX0ZFQVRVUkVTKSIgLS1mYWN0b3J5IC0td3JhcHBlckZhY3Rv
cnkgLS1vdXRwdXREaXIgIiQoR0VOU09VUkNFUykiCiBlbHNlCiBEZXJpdmVkU291cmNlcy9IVE1M
TmFtZXMuY3BwOiAkKFdlYkNvcmUpL2RvbS9tYWtlX25hbWVzLnBsICQoV2ViQ29yZSkvaHRtbC9I
VE1MVGFnTmFtZXMuaW4gJChXZWJDb3JlKS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgotCSQo
UEVSTCkgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS10YWdzICQoV2ViQ29yZSkv
aHRtbC9IVE1MVGFnTmFtZXMuaW4gLS1hdHRycyAkKFdlYkNvcmUpL2h0bWwvSFRNTEF0dHJpYnV0
ZU5hbWVzLmluIC0tZmFjdG9yeSAtLXdyYXBwZXJGYWN0b3J5IC0tb3V0cHV0RGlyICIkKEdFTlNP
VVJDRVMpIgorCSQoUEVSTCkgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS1iaW5k
aW5nVHlwZSBKUyAtLXRhZ3MgJChXZWJDb3JlKS9odG1sL0hUTUxUYWdOYW1lcy5pbiAtLWF0dHJz
ICQoV2ViQ29yZSkvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4gLS1mYWN0b3J5IC0td3JhcHBl
ckZhY3RvcnkgLS1vdXRwdXREaXIgIiQoR0VOU09VUkNFUykiCiBlbmRpZiAjIEhUTUxfRkxBR1MK
IAorCitEZXJpdmVkU291cmNlcy9HRE9NSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oOiBEZXJp
dmVkU291cmNlcy9HRE9NSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHA7CisKK2lmIEhUTUxf
RkxBR1MKK0Rlcml2ZWRTb3VyY2VzL0dET01IVE1MRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcDog
JChXZWJDb3JlKS9kb20vbWFrZV9uYW1lcy5wbCAkKFdlYkNvcmUpL2h0bWwvSFRNTFRhZ05hbWVz
LmluICQoV2ViQ29yZSkvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4gRGVyaXZlZFNvdXJjZXMv
SFRNTE5hbWVzLmNwcCAKKwkkKFBFUkwpIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzICQ8
IC0tYmluZGluZ1R5cGUgR2RvbSAtLXRhZ3MgJChXZWJDb3JlKS9odG1sL0hUTUxUYWdOYW1lcy5p
biAtLWF0dHJzICQoV2ViQ29yZSkvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4gLS1leHRyYURl
ZmluZXMgIiQoSFRNTF9GRUFUVVJFUykiIC0td3JhcHBlckZhY3RvcnkgLS1vdXRwdXREaXIgIiQo
R0VOU09VUkNFUykiCitlbHNlCitEZXJpdmVkU291cmNlcy9HRE9NSFRNTEVsZW1lbnRXcmFwcGVy
RmFjdG9yeS5jcHA6ICQoV2ViQ29yZSkvZG9tL21ha2VfbmFtZXMucGwgJChXZWJDb3JlKS9odG1s
L0hUTUxUYWdOYW1lcy5pbiAkKFdlYkNvcmUpL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluIERl
cml2ZWRTb3VyY2VzL0hUTUxOYW1lcy5jcHAgCisJJChQRVJMKSAtSSQoV2ViQ29yZSkvYmluZGlu
Z3Mvc2NyaXB0cyAkPCAtLWJpbmRpbmdUeXBlIEdkb20gLS10YWdzICQoV2ViQ29yZSkvaHRtbC9I
VE1MVGFnTmFtZXMuaW4gLS1hdHRycyAkKFdlYkNvcmUpL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVz
LmluIC0td3JhcHBlckZhY3RvcnkgLS1vdXRwdXREaXIgIiQoR0VOU09VUkNFUykiCitlbmRpZiAj
IEhUTUxfRkxBR1MKKwogRGVyaXZlZFNvdXJjZXMvWE1MTmFtZXMuaDogRGVyaXZlZFNvdXJjZXMv
WE1MTmFtZXMuY3BwOwogCiBEZXJpdmVkU291cmNlcy9YTUxOYW1lcy5jcHA6ICQoV2ViQ29yZSkv
ZG9tL21ha2VfbmFtZXMucGwgJChXZWJDb3JlKS94bWwveG1sYXR0cnMuaW4KLQkkKFBFUkwpIC1J
JChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzICQ8IC0tYXR0cnMgJChXZWJDb3JlKS94bWwveG1s
YXR0cnMuaW4gLS1vdXRwdXREaXIgIiQoR0VOU09VUkNFUykiCisJJChQRVJMKSAtSSQoV2ViQ29y
ZSkvYmluZGluZ3Mvc2NyaXB0cyAkPCAtLWJpbmRpbmdUeXBlIEpTIC0tYXR0cnMgJChXZWJDb3Jl
KS94bWwveG1sYXR0cnMuaW4gLS1vdXRwdXREaXIgIiQoR0VOU09VUkNFUykiCiAKIElETF9QQVRI
IDo9IFwKICAgICAkKFdlYkNvcmUpL2JpbmRpbmdzL2pzIFwK
</data>
<flag name="review"
          id="18229"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34164</attachid>
            <date>2009-08-05 13:06:08 -0700</date>
            <delta_ts>2009-08-07 02:22:15 -0700</delta_ts>
            <desc>tidier workaround for skipping DataGrid</desc>
            <filename>gdhewf.patch</filename>
            <type>text/plain</type>
            <size>12810</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNDYzOTUpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25h
bWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBD
b3B5cmlnaHQgKEMpIDIwMDksIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9y
Zz4KICMgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisjIENvcHlyaWdodCAoQykgMjAw
OSBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgogIwogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0Miw3IEBACiBteSAkcHJpbnRXcmFwcGVyRmFj
dG9yeSA9IDA7CiBteSAkdGFnc0ZpbGUgPSAiIjsKIG15ICRhdHRyc0ZpbGUgPSAiIjsKK215ICRi
aW5kaW5nID0gIkpTIjsKIG15ICRvdXRwdXREaXIgPSAiLiI7CiBteSAldGFncyA9ICgpOwogbXkg
JWF0dHJzID0gKCk7CkBAIC01MCw2ICs1Miw3IEBACiAKIEdldE9wdGlvbnMoJ3RhZ3M9cycgPT4g
XCR0YWdzRmlsZSwgCiAgICAgJ2F0dHJzPXMnID0+IFwkYXR0cnNGaWxlLAorICAgICdiaW5kaW5n
VHlwZT1zJyA9PiBcJGJpbmRpbmcsCiAgICAgJ2ZhY3RvcnknID0+IFwkcHJpbnRGYWN0b3J5LAog
ICAgICdvdXRwdXREaXI9cycgPT4gXCRvdXRwdXREaXIsCiAgICAgJ2V4dHJhRGVmaW5lcz1zJyA9
PiBcJGV4dHJhRGVmaW5lcywKQEAgLTU4LDYgKzYxLDggQEAKIAogZGllICJZb3UgbXVzdCBzcGVj
aWZ5IGF0IGxlYXN0IG9uZSBvZiAtLXRhZ3MgPGZpbGU+IG9yIC0tYXR0cnMgPGZpbGU+IiB1bmxl
c3MgKGxlbmd0aCgkdGFnc0ZpbGUpIHx8IGxlbmd0aCgkYXR0cnNGaWxlKSk7CiAKKyNkaWUgIllv
dSBtdXN0IHNwZWNpZnkgYSAtLWJpbmRpbmdUeXBlIDx0eXBlPiBlLmcuIEdkb20gb3IgSlMiIHVu
bGVzcyAobGVuZ3RoKCRiaW5kaW5nKSk7CisKIHJlYWROYW1lcygkdGFnc0ZpbGUsICJ0YWdzIikg
aWYgbGVuZ3RoKCR0YWdzRmlsZSk7CiByZWFkTmFtZXMoJGF0dHJzRmlsZSwgImF0dHJzIikgaWYg
bGVuZ3RoKCRhdHRyc0ZpbGUpOwogCkBAIC02OSwxMCArNzQsMTUgQEAKIG1rcGF0aCgkb3V0cHV0
RGlyKTsKIG15ICRuYW1lc0Jhc2VQYXRoID0gIiRvdXRwdXREaXIvJHBhcmFtZXRlcnN7J25hbWVz
cGFjZSd9TmFtZXMiOwogbXkgJGZhY3RvcnlCYXNlUGF0aCA9ICIkb3V0cHV0RGlyLyRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRGYWN0b3J5IjsKLW15ICR3cmFwcGVyRmFjdG9yeUJhc2VQ
YXRoID0gIiRvdXRwdXREaXIvSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBl
ckZhY3RvcnkiOworbXkgJHdyYXBwZXJGYWN0b3J5QmFzZVBhdGggPSAiJG91dHB1dERpci8kYmlu
ZGluZyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeSI7CiAKLXBy
aW50TmFtZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0aC5oIik7Ci1wcmludE5hbWVzQ3BwRmls
ZSgiJG5hbWVzQmFzZVBhdGguY3BwIik7CisjIEZJWE1FOiBtYWtlX25hbWVzIGlzIGJlaW5nIHV0
aWxpc2VkIGZvciBzaXggZGlmZmVyZW50IHB1cnBvc2VzLAorIyB3aXRoIGdlbmVyYXRpb24gb2Yg
SFRNTE5hbWVzLmNwcC9oIGJlaW5nIGRvbmUgYXQgdGhlIHNhbWUgdGltZQorIyBhcyB0aGUgSlMg
YmluZGluZ3Mgd3JhcHBlciBmYWN0b3JpZXMuCitpZiAoJGJpbmRpbmcgZXEgJ0pTJykgeworICAg
IHByaW50TmFtZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0aC5oIik7CisgICAgcHJpbnROYW1l
c0NwcEZpbGUoIiRuYW1lc0Jhc2VQYXRoLmNwcCIpOworfQogCiBpZiAoJHByaW50RmFjdG9yeSkg
ewogICAgIHByaW50RmFjdG9yeUNwcEZpbGUoIiRmYWN0b3J5QmFzZVBhdGguY3BwIik7CkBAIC0y
OTUsNiArMzA1LDI1IEBACiAgICAgcHJpbnQgRiAiKTtcbn1cblxuIjsKIH0KIAorIyBGSVhNRTog
dGhpcyBpcyBoZXJlIGJlY2F1c2UgdGhlIGdvYmplY3QgYmluZGluZ3Mgd2VyZSBjcmVhdGVkIGlu
CisjIG5vdmVtYmVyIDIwMDgsIHdoZW4gI2lmZGVmIERBVEFHUklEIGRpZCBub3QgZXhpc3QuICB0
byBhdm9pZAorIyBzaWduaWZpY2FudCBleHRyYSB3b3JrIGluIGdldHRpbmcgdGhlIGdvYmplY3Qg
YmluZGluZ3MgbGFuZGVkLAorIyBhbmQgdG8gYWxzbyBlbnN1cmUgdGhhdCB3ZWJraXQtZ3RrIHdp
bGwgc3RpbGwgY29tcGlsZSBldmVuIHdoZW4KKyMgREFUQUdSSUQgaXMgZW5hYmxlZCwgdGhpcyB3
b3JrYXJvdW5kIHNraXBzIHRoZSAjaW5jbHVkZQorIyBvZiBoZWFkZXJzIHdoaWNoIHRoZSBDb2Rl
R2VuZXJhdG9yR09iamVjdC5wbSBkb2VzIG5vdCB5ZXQgY3JlYXRlLgorc3ViIHRlbXBvcmFyeVdv
cmthcm91bmRTa2lwVGFnCit7CisgICAgbXkgJHRhZyA9IHNoaWZ0OworICAgIG15ICRjb25kaXRp
b25hbCA9ICR0YWd7ImNvbmRpdGlvbmFsIn07CisgICAgaWYgKCRiaW5kaW5nIGVxICdHZG9tJykg
eworICAgICAgICAjIHNraXAgREFUQUdSSUQgZm9yIG5vdworICAgICAgICBpZiAoJGNvbmRpdGlv
bmFsIGVxICdEQVRBR1JJRCcpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCiBzdWIgcHJpbnRDb25zdHJ1Y3RvcnMKIHsKICAgICBt
eSAoJEYsICR0YWdDb25zdHJ1Y3Rvck1hcFJlZikgPSBAXzsKQEAgLTMxMyw2ICszNDIsOCBAQAog
CiAgICAgICAgICR1bmlxdWVUYWdzeyRpbnRlcmZhY2VOYW1lfSA9ICcxJzsKIAorICAgICAgICBu
ZXh0IGlmICh0ZW1wb3JhcnlXb3JrYXJvdW5kU2tpcFRhZygkdGFnc3skdGFnTmFtZX0pOworCiAg
ICAgICAgIG15ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWdOYW1lfXsiY29uZGl0aW9uYWwifTsK
ICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFs
U3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQoLyYvLCAkY29u
ZGl0aW9uYWwpKSAuICIpIjsKQEAgLTM0Niw2ICszNzcsOCBAQAogCiAgICAgZm9yIG15ICR0YWdO
YW1lIChzb3J0IGtleXMgJXRhZ0NvbnN0cnVjdG9yTWFwKSB7CiAKKyAgICAgICAgbmV4dCBpZiAo
dGVtcG9yYXJ5V29ya2Fyb3VuZFNraXBUYWcoJHRhZ3N7JHRhZ05hbWV9KTsKKwogICAgICAgICBt
eSAkY29uZGl0aW9uYWwgPSAkdGFnc3skdGFnTmFtZX17ImNvbmRpdGlvbmFsIn07CiAgICAgICAg
IGlmICgkY29uZGl0aW9uYWwpIHsKICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9
ICJFTkFCTEUoIiAuIGpvaW4oIikgJiYgRU5BQkxFKCIsIHNwbGl0KC8mLywgJGNvbmRpdGlvbmFs
KSkgLiAiKSI7CkBAIC01NjYsMTcgKzU5OSwyMCBAQAogICAgIGNsb3NlIEY7CiB9CiAKLXN1YiBw
cmludEpTRWxlbWVudEluY2x1ZGVzCitzdWIgcHJpbnRCaW5kaW5nRWxlbWVudEluY2x1ZGVzCiB7
CiAgICAgbXkgJEYgPSBzaGlmdDsKKyAgICBteSAkcHJlZml4ID0gc2hpZnQ7CisgICAgbXkgJHN1
ZmZpeCA9IHNoaWZ0OwogCiAgICAgbXkgJXRhZ3NTZWVuOwogICAgIGZvciBteSAkdGFnTmFtZSAo
c29ydCBrZXlzICV0YWdzKSB7CisgICAgICAgIG5leHQgaWYgKHRlbXBvcmFyeVdvcmthcm91bmRT
a2lwVGFnKCR0YWdzeyR0YWdOYW1lfSk7CiAgICAgICAgIG15ICRKU0ludGVyZmFjZU5hbWUgPSAk
dGFnc3skdGFnTmFtZX17IkpTSW50ZXJmYWNlTmFtZSJ9OwogICAgICAgICBuZXh0IGlmIGRlZmlu
ZWQoJHRhZ3NTZWVueyRKU0ludGVyZmFjZU5hbWV9KSB8fCB1c2VzRGVmYXVsdEpTV3JhcHBlcigk
dGFnTmFtZSk7CiAgICAgICAgICR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSA9IDE7CiAKLSAg
ICAgICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJKUyR7SlNJbnRlcmZhY2VOYW1lfS5oXCJcbiI7Cisg
ICAgICAgIHByaW50IEYgIiNpbmNsdWRlIFwiJHtwcmVmaXh9JGJpbmRpbmcke0pTSW50ZXJmYWNl
TmFtZX0ke3N1ZmZpeH0uaFwiXG4iOwogICAgIH0KIH0KIApAQCAtNTg2LDYgKzYyMiw3IEBACiAK
ICAgICBteSAldGFnc1NlZW47CiAgICAgZm9yIG15ICR0YWdOYW1lIChzb3J0IGtleXMgJXRhZ3Mp
IHsKKyAgICAgICAgbmV4dCBpZiAodGVtcG9yYXJ5V29ya2Fyb3VuZFNraXBUYWcoJHRhZ3N7JHRh
Z05hbWV9KTsKICAgICAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkdGFnc3skdGFnTmFtZX17Imlu
dGVyZmFjZU5hbWUifTsKICAgICAgICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2VlbnskaW50ZXJm
YWNlTmFtZX0pOwogICAgICAgICAkdGFnc1NlZW57JGludGVyZmFjZU5hbWV9ID0gMTsKQEAgLTg1
Nyw2ICs4OTQsMjAgQEAKICAgICByZXR1cm4gJHRhZ3N7JG5hbWV9eydKU0ludGVyZmFjZU5hbWUn
fSBlcSAkcGFyYW1ldGVyc3sibmFtZXNwYWNlIn0gLiAiRWxlbWVudCIgfHwgJHRhZ3N7JG5hbWV9
eydKU0ludGVyZmFjZU5hbWUnfSBlcSAiSFRNTE5vU2NyaXB0RWxlbWVudCI7CiB9CiAKK3N1YiBw
cmludFdyYXBwZXJGdW5jdGlvbkdkb21JbnRlcmZhY2UKK3sKKyAgICBteSAkRiA9IHNoaWZ0Owor
ICAgIG15ICRKU0ludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBwcmludCBGIDw8RU5ECitzdGF0
aWMgZ3BvaW50ZXIgY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihQYXNzUmVmUHRyPCRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdy
YXAke0pTSW50ZXJmYWNlTmFtZX0oc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9Kj4oZWxl
bWVudC5nZXQoKSkpOworfQorCitFTkQKKzsKK30KKwogc3ViIHByaW50V3JhcHBlckZ1bmN0aW9u
cwogewogICAgIG15ICRGID0gc2hpZnQ7CkBAIC04NjgsNiArOTE5LDcgQEAKICAgICAgICAgbmV4
dCBpZiBkZWZpbmVkKCR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSkgfHwgdXNlc0RlZmF1bHRK
U1dyYXBwZXIoJHRhZ05hbWUpOwogICAgICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNlTmFtZX0g
PSAxOwogCisgICAgICAgIG5leHQgaWYgKHRlbXBvcmFyeVdvcmthcm91bmRTa2lwVGFnKCR0YWdz
eyR0YWdOYW1lfSk7CiAgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWdOYW1lfXsi
Y29uZGl0aW9uYWwifTsKICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAg
bXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwg
c3BsaXQoLyYvLCAkY29uZGl0aW9uYWwpKSAuICIpIjsKQEAgLTg3Nyw3ICs5MjksOCBAQAogICAg
ICAgICAjIEhhY2sgZm9yIHRoZSBtZWRpYSB0YWdzCiAgICAgICAgICMgRklYTUU6IFRoaXMgc2hv
dWxkIGhhdmUgYmVlbiBkb25lIHZpYSBhIEN1c3RvbVdyYXBwZXIgYXR0cmlidXRlIGFuZCBhIHNl
cGFyYXRlICpDdXN0b20gZmlsZS4KICAgICAgICAgaWYgKCR0YWdzeyR0YWdOYW1lfXsid3JhcHBl
ck9ubHlJZk1lZGlhSXNBdmFpbGFibGUifSkgewotICAgICAgICAgICAgcHJpbnQgRiA8PEVORAor
ICAgICAgICAgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsKKyAgICAgICAgICAgICAgICBwcmlu
dCBGIDw8RU5ECiBzdGF0aWMgSlNOb2RlKiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQogewogICAgIGlm
ICghTWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKCkpCkBAIC04ODcsOCArOTQwLDEzIEBACiAKIEVO
RAogOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGlmICgkYmluZGluZyBlcSAnR2RvbScp
IHsKKyAgICAgICAgICAgICAgICBwcmludFdyYXBwZXJGdW5jdGlvbkdkb21JbnRlcmZhY2UoJEYs
ICRKU0ludGVyZmFjZU5hbWUpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgcHJpbnQgRiA8PEVORAorICAgICAgICAgICAgaWYgKCRiaW5kaW5nIGVxICdKUycp
IHsKKyAgICAgICAgICAgICAgICBwcmludCBGIDw8RU5ECiBzdGF0aWMgSlNOb2RlKiBjcmVhdGUk
e0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVt
ZW50PiBlbGVtZW50KQogewogICAgIHJldHVybiBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVj
LCBnbG9iYWxPYmplY3QsICR7SlNJbnRlcmZhY2VOYW1lfSwgZWxlbWVudC5nZXQoKSk7CkBAIC04
OTYsNiArOTU0LDEwIEBACiAKIEVORAogOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGlm
ICgkYmluZGluZyBlcSAnR2RvbScpIHsKKyAgICAgICAgICAgICAgICBwcmludFdyYXBwZXJGdW5j
dGlvbkdkb21JbnRlcmZhY2UoJEYsICRKU0ludGVyZmFjZU5hbWUpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKICAgICAgICAgICAgIHByaW50
IEYgIiNlbmRpZlxuXG4iOwpAQCAtOTAzLDYgKzk2NSw1MiBAQAogICAgIH0KIH0KIAorc3ViIHBy
aW50V3JhcHBlckZhY3RvcnlDcHBGaWxlR2RvbUhlYWRlcgoreworICAgIG15ICRGID0gc2hpZnQ7
CisgICAgcHJpbnQgRiA8PEVORAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU6OiRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5hbWVzOworCit0eXBlZGVmIGdwb2ludGVyICgq
Q3JlYXRlJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGdW5jdGlvbikoUGFz
c1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50Pik7CisKK0VORAorOworfQor
CitzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGVHZG9tRnVuY3Rpb25IZWFkZXIKK3sKKyAg
ICBwcmludCBGIDw8RU5ECitncG9pbnRlciBjcmVhdGVHZG9tJHBhcmFtZXRlcnN7J25hbWVzcGFj
ZSd9RWxlbWVudFdyYXBwZXIoUGFzc1JlZlB0cjxXZWJDb3JlOjokcGFyYW1ldGVyc3snbmFtZXNw
YWNlJ31FbGVtZW50PiBlbGVtZW50KQoreyAgIAorICAgIHN0YXRpYyBIYXNoTWFwPFdlYkNvcmU6
OkF0b21pY1N0cmluZ0ltcGwqLCBDcmVhdGUkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50
V3JhcHBlckZ1bmN0aW9uPiBtYXA7CisgICAgaWYgKG1hcC5pc0VtcHR5KCkpIHsKK0VORAorOwor
fQorCitzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGVHZG9tRm9vdGVyCit7CisgICAgbXkg
JEYgPSBzaGlmdDsKKyAgICBwcmludCBGIDw8RU5ECisgICAgfQorICAgIENyZWF0ZSRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24gY3JlYXRlV3JhcHBlckZ1bmN0
aW9uID0KKyAgICAgICAgbWFwLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
IGlmIChjcmVhdGVXcmFwcGVyRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVy
RnVuY3Rpb24oZWxlbWVudCk7CisgICAgcmV0dXJuIHdyYXAkcGFyYW1ldGVyc3snbmFtZXNwYWNl
J31FbGVtZW50KGVsZW1lbnQuZ2V0KCkpOworfQorCit9CisKK0VORAorOworfQorCiBzdWIgcHJp
bnRXcmFwcGVyRmFjdG9yeUNwcEZpbGUKIHsKICAgICBteSAkY3BwUGF0aCA9IHNoaWZ0OwpAQCAt
OTE1LDkgKzEwMjMsMjAgQEAKIAogICAgIHByaW50IEYgIiNpZiAkcGFyYW1ldGVyc3snZ3VhcmRG
YWN0b3J5V2l0aCd9XG5cbiIgaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKIAot
ICAgIHByaW50IEYgIiNpbmNsdWRlIFwiSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50
V3JhcHBlckZhY3RvcnkuaFwiXG4iOworICAgIGlmICgkYmluZGluZyBlcSAnR2RvbScpIHsKKyAg
ICAgICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJnZG9tL0dkb21Ob2RlLmhcIlxuIjsKKyAgICB9Cisg
ICAgcHJpbnQgRiAiI2luY2x1ZGUgXCIkYmluZGluZyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVs
ZW1lbnRXcmFwcGVyRmFjdG9yeS5oXCJcbiI7CiAKLSAgICBwcmludEpTRWxlbWVudEluY2x1ZGVz
KCRGKTsKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0pTJykgeworICAgICAgICBwcmludEJpbmRpbmdF
bGVtZW50SW5jbHVkZXMoJEYsICIiLCAiIik7CisgICAgfSAKKyAgICBpZiAoJGJpbmRpbmcgZXEg
J0dkb20nKSB7CisgICAgICAgIHByaW50QmluZGluZ0VsZW1lbnRJbmNsdWRlcygkRiwgImdkb20v
IiwgIiIpOworICAgICAgICBwcmludCBGICJcbiI7CisgICAgICAgIHByaW50IEYgIiNpbmNsdWRl
IFwiZ2RvbS9HZG9tSFRNTEVsZW1lbnRQcml2YXRlLmhcIlxuIjsKKyAgICAgICAgcHJpbnRCaW5k
aW5nRWxlbWVudEluY2x1ZGVzKCRGLCAiZ2RvbS8iLCAiUHJpdmF0ZSIpOworICAgIH0KIAogICAg
IHByaW50IEYgIlxuI2luY2x1ZGUgXCIkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31OYW1lcy5oXCJc
blxuIjsKIApAQCAtOTI1LDcgKzEwNDQsOCBAQAogCiAgICAgcHJpbnQgRiAiXG4jaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPlxuXG4iOwogICAgIAotICAgIHByaW50IEYgPDxFTkQKKyAgICBp
ZiAoJGJpbmRpbmcgZXEgJ0pTJykgeworICAgICAgICBwcmludCBGIDw8RU5ECiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05MzYsMTAgKzEwNTYsMTUgQEAK
IAogRU5ECiA7CisgICAgfSAKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0dkb20nKSB7CisgICAgICAg
IHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlR2RvbUhlYWRlcigkRik7CisgICAgfQogCiAgICAg
cHJpbnRXcmFwcGVyRnVuY3Rpb25zKCRGKTsKIAotICAgIHByaW50IEYgPDxFTkQKKyAgICBpZiAo
JGJpbmRpbmcgZXEgJ0pTJykgeworICAgICAgICBwcmludCBGIDw8RU5ECiBKU05vZGUqIGNyZWF0
ZUpTJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVz
cGFjZSd9RWxlbWVudD4gZWxlbWVudCkKIHsgICAKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29y
ZTo6QXRvbWljU3RyaW5nSW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1l
bnRXcmFwcGVyRnVuY3Rpb24+IEZ1bmN0aW9uTWFwOwpAQCAtOTQ3LDEyICsxMDcyLDE5IEBACiAg
ICAgaWYgKG1hcC5pc0VtcHR5KCkpIHsKIEVORAogOworICAgIH0gCisgICAgaWYgKCRiaW5kaW5n
IGVxICdHZG9tJykgeworICAgICAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZUdkb21GdW5j
dGlvbkhlYWRlcigkRik7CisgICAgfQogCiAgICAgZm9yIG15ICR0YWcgKHNvcnQga2V5cyAldGFn
cykgewogICAgICAgICAjIERvIG5vdCBhZGQgdGhlIG5hbWUgdG8gdGhlIG1hcCBpZiBpdCBkb2Vz
IG5vdCBoYXZlIGEgSlMgd3JhcHBlciBjb25zdHJ1Y3RvciBvciB1c2VzIHRoZSBkZWZhdWx0IHdy
YXBwZXIuCiAgICAgICAgIG5leHQgaWYgdXNlc0RlZmF1bHRKU1dyYXBwZXIoJHRhZywgXCV0YWdz
KTsKIAorICAgICAgICBuZXh0IGlmICh0ZW1wb3JhcnlXb3JrYXJvdW5kU2tpcFRhZygkdGFnc3sk
dGFnTmFtZX0pOworCiAgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWd9eyJjb25k
aXRpb25hbCJ9OworCiAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKICAgICAgICAgICAgIG15
ICRjb25kaXRpb25hbFN0cmluZyA9ICJFTkFCTEUoIiAuIGpvaW4oIikgJiYgRU5BQkxFKCIsIHNw
bGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAiKSI7CiAgICAgICAgICAgICBwcmludCBGICIjaWYg
JHtjb25kaXRpb25hbFN0cmluZ31cbiI7CkBAIC05NjYsNyArMTA5OCw4IEBACiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBwcmludCBGIDw8RU5ECisgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsK
KyAgICAgICAgcHJpbnQgRiA8PEVORAogICAgIH0KICAgICBDcmVhdGUkcGFyYW1ldGVyc3snbmFt
ZXNwYWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0aW9uIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbiA9IG1h
cC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKTsKICAgICBpZiAoY3JlYXRlV3JhcHBl
ckZ1bmN0aW9uKQpAQCAtOTc4LDEyICsxMTExLDM2IEBACiAKIEVORAogOworICAgIH0gCisgICAg
aWYgKCRiaW5kaW5nIGVxICdHZG9tJykgeworICAgICAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3Bw
RmlsZUdkb21Gb290ZXIoJEYpOworICAgIH0KIAogICAgIHByaW50IEYgIiNlbmRpZlxuIiBpZiAk
cGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9OwogCiAgICAgY2xvc2UgRjsKIH0KIAorc3Vi
IHByaW50V3JhcHBlckZhY3RvcnlIZWFkZXJGaWxlR2RvbUJvZHkKK3sKKyAgICBteSAkRiA9IHNo
aWZ0OworICAgIHByaW50IEYgPDxFTkQKKyNpbmNsdWRlICJHZG9tTm9kZVByaXZhdGUuaCIKKwor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFz
cyAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50OworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKyAgICBncG9pbnRlciBjcmVhdGVHZG9tJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVu
dFdyYXBwZXIoUGFzc1JlZlB0cjxXZWJDb3JlOjokcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVt
ZW50Pik7Cit9CisgCitFTkQKKzsKK30KKwogc3ViIHByaW50V3JhcHBlckZhY3RvcnlIZWFkZXJG
aWxlCiB7CiAgICAgbXkgJGhlYWRlclBhdGggPSBzaGlmdDsKQEAgLTk5MiwxMiArMTE0OSwxMyBA
QAogCiAgICAgcHJpbnRMaWNlbnNlSGVhZGVyKCRGKTsKIAotICAgIHByaW50IEYgIiNpZm5kZWYg
SlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuIjsKLSAg
ICBwcmludCBGICIjZGVmaW5lIEpTJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBw
ZXJGYWN0b3J5X2hcblxuIjsKKyAgICBwcmludCBGICIjaWZuZGVmICRiaW5kaW5nJHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5X2hcbiI7CisgICAgcHJpbnQgRiAi
I2RlZmluZSAkYmluZGluZyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFj
dG9yeV9oXG5cbiI7CiAKICAgICBwcmludCBGICIjaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9y
eVdpdGgnfVxuIiBpZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9OwogCi0gICAgcHJp
bnQgRiA8PEVORAorICAgIGlmICgkYmluZGluZyBlcSAnSlMnKSB7CisgICAgICAgIHByaW50IEYg
PDxFTkQKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEw
MTYsMTAgKzExNzQsMTQgQEAKICAKIEVORAogOworICAgIH0gCisgICAgaWYgKCRiaW5kaW5nIGVx
ICdHZG9tJykgeworICAgICAgICBwcmludFdyYXBwZXJGYWN0b3J5SGVhZGVyRmlsZUdkb21Cb2R5
KCRGKTsKKyAgICB9CiAKICAgICBwcmludCBGICIjZW5kaWYgLy8gJHBhcmFtZXRlcnN7J2d1YXJk
RmFjdG9yeVdpdGgnfVxuXG4iIGlmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ307CiAK
LSAgICBwcmludCBGICIjZW5kaWYgLy8gSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50
V3JhcHBlckZhY3RvcnlfaFxuIjsKKyAgICBwcmludCBGICIjZW5kaWYgLy8gJGJpbmRpbmckcGFy
YW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuIjsKIAogICAgIGNs
b3NlIEY7CiB9CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gNDYzOTMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMTc1NDEsNiArMTc2NjIsMTUgQEAKICAgICAgICAgKiBwbGF0Zm9ybS93aW4v
V0NEYXRhT2JqZWN0LmNwcDoKICAgICAgICAgKFdlYkNvcmU6OldDRGF0YU9iamVjdDo6UXVlcnlJ
bnRlcmZhY2UpOgogCisyMDA5LTA4LTAzICBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uICA8
bGtjbEBsa2NsLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFeHRlbmRlZCBtYWtlX25hbWVzLnBsIHRvIHN1cHBvcnQgR0RPTSBiaW5kaW5ncwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0MjUKKwor
ICAgICAgICAqIFdlYkNvcmUvZG9tL21ha2VfZ2RvbV9uYW1lcy5wbDogQWRkZWQgLS1iaW5kaW5n
c1R5cGUgb3B0aW9uCisKIDIwMDktMDYtMTYgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4K
</data>
<flag name="review"
          id="18326"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="18406"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34262</attachid>
            <date>2009-08-07 02:22:15 -0700</date>
            <delta_ts>2009-08-12 13:53:25 -0700</delta_ts>
            <desc>version that works.</desc>
            <filename>gdhewf.patch</filename>
            <type>text/plain</type>
            <size>12785</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNDYzOTUpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25h
bWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBD
b3B5cmlnaHQgKEMpIDIwMDksIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9y
Zz4KICMgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisjIENvcHlyaWdodCAoQykgMjAw
OSBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgogIwogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0Miw3IEBACiBteSAkcHJpbnRXcmFwcGVyRmFj
dG9yeSA9IDA7CiBteSAkdGFnc0ZpbGUgPSAiIjsKIG15ICRhdHRyc0ZpbGUgPSAiIjsKK215ICRi
aW5kaW5nID0gIkpTIjsKIG15ICRvdXRwdXREaXIgPSAiLiI7CiBteSAldGFncyA9ICgpOwogbXkg
JWF0dHJzID0gKCk7CkBAIC01MCw2ICs1Miw3IEBACiAKIEdldE9wdGlvbnMoJ3RhZ3M9cycgPT4g
XCR0YWdzRmlsZSwgCiAgICAgJ2F0dHJzPXMnID0+IFwkYXR0cnNGaWxlLAorICAgICdiaW5kaW5n
VHlwZT1zJyA9PiBcJGJpbmRpbmcsCiAgICAgJ2ZhY3RvcnknID0+IFwkcHJpbnRGYWN0b3J5LAog
ICAgICdvdXRwdXREaXI9cycgPT4gXCRvdXRwdXREaXIsCiAgICAgJ2V4dHJhRGVmaW5lcz1zJyA9
PiBcJGV4dHJhRGVmaW5lcywKQEAgLTU4LDYgKzYxLDggQEAKIAogZGllICJZb3UgbXVzdCBzcGVj
aWZ5IGF0IGxlYXN0IG9uZSBvZiAtLXRhZ3MgPGZpbGU+IG9yIC0tYXR0cnMgPGZpbGU+IiB1bmxl
c3MgKGxlbmd0aCgkdGFnc0ZpbGUpIHx8IGxlbmd0aCgkYXR0cnNGaWxlKSk7CiAKKyNkaWUgIllv
dSBtdXN0IHNwZWNpZnkgYSAtLWJpbmRpbmdUeXBlIDx0eXBlPiBlLmcuIEdkb20gb3IgSlMiIHVu
bGVzcyAobGVuZ3RoKCRiaW5kaW5nKSk7CisKIHJlYWROYW1lcygkdGFnc0ZpbGUsICJ0YWdzIikg
aWYgbGVuZ3RoKCR0YWdzRmlsZSk7CiByZWFkTmFtZXMoJGF0dHJzRmlsZSwgImF0dHJzIikgaWYg
bGVuZ3RoKCRhdHRyc0ZpbGUpOwogCkBAIC02OSwxMCArNzQsMTUgQEAKIG1rcGF0aCgkb3V0cHV0
RGlyKTsKIG15ICRuYW1lc0Jhc2VQYXRoID0gIiRvdXRwdXREaXIvJHBhcmFtZXRlcnN7J25hbWVz
cGFjZSd9TmFtZXMiOwogbXkgJGZhY3RvcnlCYXNlUGF0aCA9ICIkb3V0cHV0RGlyLyRwYXJhbWV0
ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRGYWN0b3J5IjsKLW15ICR3cmFwcGVyRmFjdG9yeUJhc2VQ
YXRoID0gIiRvdXRwdXREaXIvSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBl
ckZhY3RvcnkiOworbXkgJHdyYXBwZXJGYWN0b3J5QmFzZVBhdGggPSAiJG91dHB1dERpci8kYmlu
ZGluZyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeSI7CiAKLXBy
aW50TmFtZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0aC5oIik7Ci1wcmludE5hbWVzQ3BwRmls
ZSgiJG5hbWVzQmFzZVBhdGguY3BwIik7CisjIEZJWE1FOiBtYWtlX25hbWVzIGlzIGJlaW5nIHV0
aWxpc2VkIGZvciBzaXggZGlmZmVyZW50IHB1cnBvc2VzLAorIyB3aXRoIGdlbmVyYXRpb24gb2Yg
SFRNTE5hbWVzLmNwcC9oIGJlaW5nIGRvbmUgYXQgdGhlIHNhbWUgdGltZQorIyBhcyB0aGUgSlMg
YmluZGluZ3Mgd3JhcHBlciBmYWN0b3JpZXMuCitpZiAoJGJpbmRpbmcgZXEgJ0pTJykgeworICAg
IHByaW50TmFtZXNIZWFkZXJGaWxlKCIkbmFtZXNCYXNlUGF0aC5oIik7CisgICAgcHJpbnROYW1l
c0NwcEZpbGUoIiRuYW1lc0Jhc2VQYXRoLmNwcCIpOworfQogCiBpZiAoJHByaW50RmFjdG9yeSkg
ewogICAgIHByaW50RmFjdG9yeUNwcEZpbGUoIiRmYWN0b3J5QmFzZVBhdGguY3BwIik7CkBAIC0y
OTUsNiArMzA1LDI1IEBACiAgICAgcHJpbnQgRiAiKTtcbn1cblxuIjsKIH0KIAorIyBGSVhNRTog
dGhpcyBpcyBoZXJlIGJlY2F1c2UgdGhlIGdvYmplY3QgYmluZGluZ3Mgd2VyZSBjcmVhdGVkIGlu
CisjIG5vdmVtYmVyIDIwMDgsIHdoZW4gI2lmZGVmIERBVEFHUklEIGRpZCBub3QgZXhpc3QuICB0
byBhdm9pZAorIyBzaWduaWZpY2FudCBleHRyYSB3b3JrIGluIGdldHRpbmcgdGhlIGdvYmplY3Qg
YmluZGluZ3MgbGFuZGVkLAorIyBhbmQgdG8gYWxzbyBlbnN1cmUgdGhhdCB3ZWJraXQtZ3RrIHdp
bGwgc3RpbGwgY29tcGlsZSBldmVuIHdoZW4KKyMgREFUQUdSSUQgaXMgZW5hYmxlZCwgdGhpcyB3
b3JrYXJvdW5kIHNraXBzIHRoZSAjaW5jbHVkZQorIyBvZiBoZWFkZXJzIHdoaWNoIHRoZSBDb2Rl
R2VuZXJhdG9yR09iamVjdC5wbSBkb2VzIG5vdCB5ZXQgY3JlYXRlLgorc3ViIHRlbXBvcmFyeVdv
cmthcm91bmRTa2lwVGFnCit7CisgICAgbXkgJHRhZ05hbWUgPSBzaGlmdDsKKyAgICBteSAkY29u
ZGl0aW9uYWwgPSAkdGFnc3skdGFnTmFtZX17J2NvbmRpdGlvbmFsJ307CisgICAgaWYgKCRiaW5k
aW5nIGVxICdHZG9tJykgeworICAgICAgICAjIHNraXAgREFUQUdSSUQgZm9yIG5vdworICAgICAg
ICBpZiAoJGNvbmRpdGlvbmFsIGVxICdEQVRBR1JJRCcpIHsKKyAgICAgICAgICAgIHJldHVybiAx
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBzdWIgcHJpbnRDb25zdHJ1
Y3RvcnMKIHsKICAgICBteSAoJEYsICR0YWdDb25zdHJ1Y3Rvck1hcFJlZikgPSBAXzsKQEAgLTMx
Myw2ICszNDIsOCBAQAogCiAgICAgICAgICR1bmlxdWVUYWdzeyRpbnRlcmZhY2VOYW1lfSA9ICcx
JzsKIAorICAgICAgICBuZXh0IGlmICh0ZW1wb3JhcnlXb3JrYXJvdW5kU2tpcFRhZygkdGFnTmFt
ZSkpOworCiAgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWdOYW1lfXsiY29uZGl0
aW9uYWwifTsKICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgbXkgJGNv
bmRpdGlvbmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQo
LyYvLCAkY29uZGl0aW9uYWwpKSAuICIpIjsKQEAgLTM0Niw2ICszNzcsOCBAQAogCiAgICAgZm9y
IG15ICR0YWdOYW1lIChzb3J0IGtleXMgJXRhZ0NvbnN0cnVjdG9yTWFwKSB7CiAKKyAgICAgICAg
bmV4dCBpZiAodGVtcG9yYXJ5V29ya2Fyb3VuZFNraXBUYWcoJHRhZ05hbWUpKTsKKwogICAgICAg
ICBteSAkY29uZGl0aW9uYWwgPSAkdGFnc3skdGFnTmFtZX17ImNvbmRpdGlvbmFsIn07CiAgICAg
ICAgIGlmICgkY29uZGl0aW9uYWwpIHsKICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmlu
ZyA9ICJFTkFCTEUoIiAuIGpvaW4oIikgJiYgRU5BQkxFKCIsIHNwbGl0KC8mLywgJGNvbmRpdGlv
bmFsKSkgLiAiKSI7CkBAIC01NjYsMTcgKzU5OSwyMCBAQAogICAgIGNsb3NlIEY7CiB9CiAKLXN1
YiBwcmludEpTRWxlbWVudEluY2x1ZGVzCitzdWIgcHJpbnRCaW5kaW5nRWxlbWVudEluY2x1ZGVz
CiB7CiAgICAgbXkgJEYgPSBzaGlmdDsKKyAgICBteSAkcHJlZml4ID0gc2hpZnQ7CisgICAgbXkg
JHN1ZmZpeCA9IHNoaWZ0OwogCiAgICAgbXkgJXRhZ3NTZWVuOwogICAgIGZvciBteSAkdGFnTmFt
ZSAoc29ydCBrZXlzICV0YWdzKSB7CisgICAgICAgIG5leHQgaWYgKHRlbXBvcmFyeVdvcmthcm91
bmRTa2lwVGFnKCR0YWdOYW1lKSk7CiAgICAgICAgIG15ICRKU0ludGVyZmFjZU5hbWUgPSAkdGFn
c3skdGFnTmFtZX17IkpTSW50ZXJmYWNlTmFtZSJ9OwogICAgICAgICBuZXh0IGlmIGRlZmluZWQo
JHRhZ3NTZWVueyRKU0ludGVyZmFjZU5hbWV9KSB8fCB1c2VzRGVmYXVsdEpTV3JhcHBlcigkdGFn
TmFtZSk7CiAgICAgICAgICR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSA9IDE7CiAKLSAgICAg
ICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJKUyR7SlNJbnRlcmZhY2VOYW1lfS5oXCJcbiI7CisgICAg
ICAgIHByaW50IEYgIiNpbmNsdWRlIFwiJHtwcmVmaXh9JGJpbmRpbmcke0pTSW50ZXJmYWNlTmFt
ZX0ke3N1ZmZpeH0uaFwiXG4iOwogICAgIH0KIH0KIApAQCAtNTg2LDYgKzYyMiw3IEBACiAKICAg
ICBteSAldGFnc1NlZW47CiAgICAgZm9yIG15ICR0YWdOYW1lIChzb3J0IGtleXMgJXRhZ3MpIHsK
KyAgICAgICAgbmV4dCBpZiAodGVtcG9yYXJ5V29ya2Fyb3VuZFNraXBUYWcoJHRhZ05hbWUpKTsK
ICAgICAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkdGFnc3skdGFnTmFtZX17ImludGVyZmFjZU5h
bWUifTsKICAgICAgICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2VlbnskaW50ZXJmYWNlTmFtZX0p
OwogICAgICAgICAkdGFnc1NlZW57JGludGVyZmFjZU5hbWV9ID0gMTsKQEAgLTg1Nyw2ICs4OTQs
MjAgQEAKICAgICByZXR1cm4gJHRhZ3N7JG5hbWV9eydKU0ludGVyZmFjZU5hbWUnfSBlcSAkcGFy
YW1ldGVyc3sibmFtZXNwYWNlIn0gLiAiRWxlbWVudCIgfHwgJHRhZ3N7JG5hbWV9eydKU0ludGVy
ZmFjZU5hbWUnfSBlcSAiSFRNTE5vU2NyaXB0RWxlbWVudCI7CiB9CiAKK3N1YiBwcmludFdyYXBw
ZXJGdW5jdGlvbkdkb21JbnRlcmZhY2UKK3sKKyAgICBteSAkRiA9IHNoaWZ0OworICAgIG15ICRK
U0ludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBwcmludCBGIDw8RU5ECitzdGF0aWMgZ3BvaW50
ZXIgY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihQYXNzUmVmUHRyPCRwYXJhbWV0ZXJz
eyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHdyYXAke0pTSW50
ZXJmYWNlTmFtZX0oc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9Kj4oZWxlbWVudC5nZXQo
KSkpOworfQorCitFTkQKKzsKK30KKwogc3ViIHByaW50V3JhcHBlckZ1bmN0aW9ucwogewogICAg
IG15ICRGID0gc2hpZnQ7CkBAIC04NjgsNiArOTE5LDcgQEAKICAgICAgICAgbmV4dCBpZiBkZWZp
bmVkKCR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSkgfHwgdXNlc0RlZmF1bHRKU1dyYXBwZXIo
JHRhZ05hbWUpOwogICAgICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNlTmFtZX0gPSAxOwogCisg
ICAgICAgIG5leHQgaWYgKHRlbXBvcmFyeVdvcmthcm91bmRTa2lwVGFnKCR0YWdOYW1lKSk7CiAg
ICAgICAgIG15ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWdOYW1lfXsiY29uZGl0aW9uYWwifTsK
ICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFs
U3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQoLyYvLCAkY29u
ZGl0aW9uYWwpKSAuICIpIjsKQEAgLTg3Nyw3ICs5MjksOCBAQAogICAgICAgICAjIEhhY2sgZm9y
IHRoZSBtZWRpYSB0YWdzCiAgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBk
b25lIHZpYSBhIEN1c3RvbVdyYXBwZXIgYXR0cmlidXRlIGFuZCBhIHNlcGFyYXRlICpDdXN0b20g
ZmlsZS4KICAgICAgICAgaWYgKCR0YWdzeyR0YWdOYW1lfXsid3JhcHBlck9ubHlJZk1lZGlhSXNB
dmFpbGFibGUifSkgewotICAgICAgICAgICAgcHJpbnQgRiA8PEVORAorICAgICAgICAgICAgaWYg
KCRiaW5kaW5nIGVxICdKUycpIHsKKyAgICAgICAgICAgICAgICBwcmludCBGIDw8RU5ECiBzdGF0
aWMgSlNOb2RlKiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVyKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjwkcGFyYW1ldGVy
c3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQogewogICAgIGlmICghTWVkaWFQbGF5ZXI6
OmlzQXZhaWxhYmxlKCkpCkBAIC04ODcsOCArOTQwLDEzIEBACiAKIEVORAogOworICAgICAgICAg
ICAgfSAKKyAgICAgICAgICAgIGlmICgkYmluZGluZyBlcSAnR2RvbScpIHsKKyAgICAgICAgICAg
ICAgICBwcmludFdyYXBwZXJGdW5jdGlvbkdkb21JbnRlcmZhY2UoJEYsICRKU0ludGVyZmFjZU5h
bWUpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnQg
RiA8PEVORAorICAgICAgICAgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsKKyAgICAgICAgICAg
ICAgICBwcmludCBGIDw8RU5ECiBzdGF0aWMgSlNOb2RlKiBjcmVhdGUke0pTSW50ZXJmYWNlTmFt
ZX1XcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQog
ewogICAgIHJldHVybiBDUkVBVEVfRE9NX05PREVfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3Qs
ICR7SlNJbnRlcmZhY2VOYW1lfSwgZWxlbWVudC5nZXQoKSk7CkBAIC04OTYsNiArOTU0LDEwIEBA
CiAKIEVORAogOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGlmICgkYmluZGluZyBlcSAn
R2RvbScpIHsKKyAgICAgICAgICAgICAgICBwcmludFdyYXBwZXJGdW5jdGlvbkdkb21JbnRlcmZh
Y2UoJEYsICRKU0ludGVyZmFjZU5hbWUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGlmICgkY29uZGl0aW9uYWwpIHsKICAgICAgICAgICAgIHByaW50IEYgIiNlbmRpZlxuXG4i
OwpAQCAtOTAzLDYgKzk2NSw1MiBAQAogICAgIH0KIH0KIAorc3ViIHByaW50V3JhcHBlckZhY3Rv
cnlDcHBGaWxlR2RvbUhlYWRlcgoreworICAgIG15ICRGID0gc2hpZnQ7CisgICAgcHJpbnQgRiA8
PEVORAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OiRwYXJhbWV0ZXJz
eyduYW1lc3BhY2UnfU5hbWVzOworCit0eXBlZGVmIGdwb2ludGVyICgqQ3JlYXRlJHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGdW5jdGlvbikoUGFzc1JlZlB0cjwkcGFyYW1l
dGVyc3snbmFtZXNwYWNlJ31FbGVtZW50Pik7CisKK0VORAorOworfQorCitzdWIgcHJpbnRXcmFw
cGVyRmFjdG9yeUNwcEZpbGVHZG9tRnVuY3Rpb25IZWFkZXIKK3sKKyAgICBwcmludCBGIDw8RU5E
CitncG9pbnRlciBjcmVhdGVHZG9tJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBw
ZXIoUGFzc1JlZlB0cjxXZWJDb3JlOjokcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBl
bGVtZW50KQoreyAgIAorICAgIHN0YXRpYyBIYXNoTWFwPFdlYkNvcmU6OkF0b21pY1N0cmluZ0lt
cGwqLCBDcmVhdGUkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0aW9u
PiBtYXA7CisgICAgaWYgKG1hcC5pc0VtcHR5KCkpIHsKK0VORAorOworfQorCitzdWIgcHJpbnRX
cmFwcGVyRmFjdG9yeUNwcEZpbGVHZG9tRm9vdGVyCit7CisgICAgbXkgJEYgPSBzaGlmdDsKKyAg
ICBwcmludCBGIDw8RU5ECisgICAgfQorICAgIENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2Un
fUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24gY3JlYXRlV3JhcHBlckZ1bmN0aW9uID0KKyAgICAgICAg
bWFwLmdldChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgIGlmIChjcmVhdGVXcmFw
cGVyRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyRnVuY3Rpb24oZWxlbWVu
dCk7CisgICAgcmV0dXJuIHdyYXAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50KGVsZW1l
bnQuZ2V0KCkpOworfQorCit9CisKK0VORAorOworfQorCiBzdWIgcHJpbnRXcmFwcGVyRmFjdG9y
eUNwcEZpbGUKIHsKICAgICBteSAkY3BwUGF0aCA9IHNoaWZ0OwpAQCAtOTE1LDkgKzEwMjMsMjAg
QEAKIAogICAgIHByaW50IEYgIiNpZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9XG5c
biIgaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKIAotICAgIHByaW50IEYgIiNp
bmNsdWRlIFwiSlMkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3Rvcnku
aFwiXG4iOworICAgIGlmICgkYmluZGluZyBlcSAnR2RvbScpIHsKKyAgICAgICAgcHJpbnQgRiAi
I2luY2x1ZGUgXCJnZG9tL0dkb21Ob2RlLmhcIlxuIjsKKyAgICB9CisgICAgcHJpbnQgRiAiI2lu
Y2x1ZGUgXCIkYmluZGluZyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFj
dG9yeS5oXCJcbiI7CiAKLSAgICBwcmludEpTRWxlbWVudEluY2x1ZGVzKCRGKTsKKyAgICBpZiAo
JGJpbmRpbmcgZXEgJ0pTJykgeworICAgICAgICBwcmludEJpbmRpbmdFbGVtZW50SW5jbHVkZXMo
JEYsICIiLCAiIik7CisgICAgfSAKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0dkb20nKSB7CisgICAg
ICAgIHByaW50QmluZGluZ0VsZW1lbnRJbmNsdWRlcygkRiwgImdkb20vIiwgIiIpOworICAgICAg
ICBwcmludCBGICJcbiI7CisgICAgICAgIHByaW50IEYgIiNpbmNsdWRlIFwiZ2RvbS9HZG9tSFRN
TEVsZW1lbnRQcml2YXRlLmhcIlxuIjsKKyAgICAgICAgcHJpbnRCaW5kaW5nRWxlbWVudEluY2x1
ZGVzKCRGLCAiZ2RvbS8iLCAiUHJpdmF0ZSIpOworICAgIH0KIAogICAgIHByaW50IEYgIlxuI2lu
Y2x1ZGUgXCIkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31OYW1lcy5oXCJcblxuIjsKIApAQCAtOTI1
LDcgKzEwNDQsOCBAQAogCiAgICAgcHJpbnQgRiAiXG4jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPlxuXG4iOwogICAgIAotICAgIHByaW50IEYgPDxFTkQKKyAgICBpZiAoJGJpbmRpbmcgZXEg
J0pTJykgeworICAgICAgICBwcmludCBGIDw8RU5ECiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05MzYsMTAgKzEwNTYsMTUgQEAKIAogRU5ECiA7CisgICAg
fSAKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0dkb20nKSB7CisgICAgICAgIHByaW50V3JhcHBlckZh
Y3RvcnlDcHBGaWxlR2RvbUhlYWRlcigkRik7CisgICAgfQogCiAgICAgcHJpbnRXcmFwcGVyRnVu
Y3Rpb25zKCRGKTsKIAotICAgIHByaW50IEYgPDxFTkQKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0pT
JykgeworICAgICAgICBwcmludCBGIDw8RU5ECiBKU05vZGUqIGNyZWF0ZUpTJHBhcmFtZXRlcnN7
J25hbWVzcGFjZSd9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4g
ZWxlbWVudCkKIHsgICAKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6QXRvbWljU3RyaW5n
SW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVuY3Rp
b24+IEZ1bmN0aW9uTWFwOwpAQCAtOTQ3LDEyICsxMDcyLDE5IEBACiAgICAgaWYgKG1hcC5pc0Vt
cHR5KCkpIHsKIEVORAogOworICAgIH0gCisgICAgaWYgKCRiaW5kaW5nIGVxICdHZG9tJykgewor
ICAgICAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZUdkb21GdW5jdGlvbkhlYWRlcigkRik7
CisgICAgfQogCiAgICAgZm9yIG15ICR0YWcgKHNvcnQga2V5cyAldGFncykgewogICAgICAgICAj
IERvIG5vdCBhZGQgdGhlIG5hbWUgdG8gdGhlIG1hcCBpZiBpdCBkb2VzIG5vdCBoYXZlIGEgSlMg
d3JhcHBlciBjb25zdHJ1Y3RvciBvciB1c2VzIHRoZSBkZWZhdWx0IHdyYXBwZXIuCiAgICAgICAg
IG5leHQgaWYgdXNlc0RlZmF1bHRKU1dyYXBwZXIoJHRhZywgXCV0YWdzKTsKIAorICAgICAgICBu
ZXh0IGlmICh0ZW1wb3JhcnlXb3JrYXJvdW5kU2tpcFRhZygkdGFnKSk7CisKICAgICAgICAgbXkg
JGNvbmRpdGlvbmFsID0gJHRhZ3N7JHRhZ317ImNvbmRpdGlvbmFsIn07CisKICAgICAgICAgaWYg
KCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gIkVO
QUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwgc3BsaXQoLyYvLCAkY29uZGl0aW9uYWwpKSAu
ICIpIjsKICAgICAgICAgICAgIHByaW50IEYgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIjsK
QEAgLTk2Niw3ICsxMDk4LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaW50IEYgPDxF
TkQKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0pTJykgeworICAgICAgICBwcmludCBGIDw8RU5ECiAg
ICAgfQogICAgIENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVu
Y3Rpb24gY3JlYXRlV3JhcHBlckZ1bmN0aW9uID0gbWFwLmdldChlbGVtZW50LT5sb2NhbE5hbWUo
KS5pbXBsKCkpOwogICAgIGlmIChjcmVhdGVXcmFwcGVyRnVuY3Rpb24pCkBAIC05NzgsMTIgKzEx
MTEsMzYgQEAKIAogRU5ECiA7CisgICAgfSAKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0dkb20nKSB7
CisgICAgICAgIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlR2RvbUZvb3RlcigkRik7CisgICAg
fQogCiAgICAgcHJpbnQgRiAiI2VuZGlmXG4iIGlmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlX
aXRoJ307CiAKICAgICBjbG9zZSBGOwogfQogCitzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUhlYWRl
ckZpbGVHZG9tQm9keQoreworICAgIG15ICRGID0gc2hpZnQ7CisgICAgcHJpbnQgRiA8PEVORAor
I2luY2x1ZGUgIkdkb21Ob2RlUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzICRwYXJhbWV0ZXJzeyduYW1lc3BhY2Un
fUVsZW1lbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIGdwb2ludGVyIGNyZWF0ZUdk
b20kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlcihQYXNzUmVmUHRyPFdlYkNv
cmU6OiRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+KTsKK30KKyAKK0VORAorOworfQor
CiBzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUhlYWRlckZpbGUKIHsKICAgICBteSAkaGVhZGVyUGF0
aCA9IHNoaWZ0OwpAQCAtOTkyLDEyICsxMTQ5LDEzIEBACiAKICAgICBwcmludExpY2Vuc2VIZWFk
ZXIoJEYpOwogCi0gICAgcHJpbnQgRiAiI2lmbmRlZiBKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2Un
fUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOwotICAgIHByaW50IEYgIiNkZWZpbmUgSlMkcGFy
YW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuXG4iOworICAgIHBy
aW50IEYgIiNpZm5kZWYgJGJpbmRpbmckcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3Jh
cHBlckZhY3RvcnlfaFxuIjsKKyAgICBwcmludCBGICIjZGVmaW5lICRiaW5kaW5nJHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5X2hcblxuIjsKIAogICAgIHByaW50
IEYgIiNpZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9XG4iIGlmICRwYXJhbWV0ZXJz
eydndWFyZEZhY3RvcnlXaXRoJ307CiAKLSAgICBwcmludCBGIDw8RU5ECisgICAgaWYgKCRiaW5k
aW5nIGVxICdKUycpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTAxNiwxMCArMTE3NCwxNCBAQAogIAogRU5E
CiA7CisgICAgfSAKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0dkb20nKSB7CisgICAgICAgIHByaW50
V3JhcHBlckZhY3RvcnlIZWFkZXJGaWxlR2RvbUJvZHkoJEYpOworICAgIH0KIAogICAgIHByaW50
IEYgIiNlbmRpZiAvLyAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9XG5cbiIgaWYgJHBh
cmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKIAotICAgIHByaW50IEYgIiNlbmRpZiAvLyBK
UyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOworICAg
IHByaW50IEYgIiNlbmRpZiAvLyAkYmluZGluZyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1l
bnRXcmFwcGVyRmFjdG9yeV9oXG4iOwogCiAgICAgY2xvc2UgRjsKIH0KSW5kZXg6IFdlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NjM5
MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xNzU0MSw2ICsxNzY2
MiwxNSBAQAogICAgICAgICAqIHBsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3BwOgogICAgICAg
ICAoV2ViQ29yZTo6V0NEYXRhT2JqZWN0OjpRdWVyeUludGVyZmFjZSk6CiAKKzIwMDktMDgtMDMg
IEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gIDxsa2NsQGxrY2wubmV0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZGVkIG1ha2VfbmFt
ZXMucGwgdG8gc3VwcG9ydCBHRE9NIGJpbmRpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQyNQorCisgICAgICAgICogV2ViQ29yZS9kb20vbWFr
ZV9nZG9tX25hbWVzLnBsOiBBZGRlZCAtLWJpbmRpbmdzVHlwZSBvcHRpb24KKwogMjAwOS0wNi0x
NiAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
R3VzdGF2byBOb3JvbmhhLgo=
</data>
<flag name="review"
          id="18427"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34472</attachid>
            <date>2009-08-10 08:22:06 -0700</date>
            <delta_ts>2009-08-12 13:46:25 -0700</delta_ts>
            <desc>uploaded</desc>
            <filename>patch.27425.txt</filename>
            <type>text/plain</type>
            <size>12651</size>
            <attacher name="Gour">gour</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDAgKzEsMTAgQEAKKzIwMDktMDgtMTAgIEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24g
IDxsa2NsQGxrY2wubmV0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEV4dGVuZGVkIG1ha2VfbmFtZXMucGwgdG8gc3VwcG9ydCBHT2JqZWN0IGJpbmRp
bmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQy
NQorCisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6IEFkZGVkIC0tYmluZGluZ3NUeXBlIG9w
dGlvbgorCisKSW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gNDY4OTApCisrKyBXZWJDb3JlL2Rv
bS9tYWtlX25hbWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogIyBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMDksIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhA
d2Via2l0Lm9yZz4KICMgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisjIENvcHlyaWdo
dCAoQykgMjAwOSBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0Pgog
IwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0Miw3IEBACiBteSAkcHJpbnRX
cmFwcGVyRmFjdG9yeSA9IDA7CiBteSAkdGFnc0ZpbGUgPSAiIjsKIG15ICRhdHRyc0ZpbGUgPSAi
IjsKK215ICRiaW5kaW5nID0gIkpTIjsKIG15ICRvdXRwdXREaXIgPSAiLiI7CiBteSAldGFncyA9
ICgpOwogbXkgJWF0dHJzID0gKCk7CkBAIC01MCw2ICs1Miw3IEBACiAKIEdldE9wdGlvbnMoJ3Rh
Z3M9cycgPT4gXCR0YWdzRmlsZSwgCiAgICAgJ2F0dHJzPXMnID0+IFwkYXR0cnNGaWxlLAorICAg
ICdiaW5kaW5nVHlwZT1zJyA9PiBcJGJpbmRpbmcsCiAgICAgJ2ZhY3RvcnknID0+IFwkcHJpbnRG
YWN0b3J5LAogICAgICdvdXRwdXREaXI9cycgPT4gXCRvdXRwdXREaXIsCiAgICAgJ2V4dHJhRGVm
aW5lcz1zJyA9PiBcJGV4dHJhRGVmaW5lcywKQEAgLTU4LDYgKzYxLDggQEAKIAogZGllICJZb3Ug
bXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBvZiAtLXRhZ3MgPGZpbGU+IG9yIC0tYXR0cnMgPGZp
bGU+IiB1bmxlc3MgKGxlbmd0aCgkdGFnc0ZpbGUpIHx8IGxlbmd0aCgkYXR0cnNGaWxlKSk7CiAK
KyNkaWUgIllvdSBtdXN0IHNwZWNpZnkgYSAtLWJpbmRpbmdUeXBlIDx0eXBlPiBlLmcuIFdlYmtp
dCBvciBKUyIgdW5sZXNzIChsZW5ndGgoJGJpbmRpbmcpKTsKKwogcmVhZE5hbWVzKCR0YWdzRmls
ZSwgInRhZ3MiKSBpZiBsZW5ndGgoJHRhZ3NGaWxlKTsKIHJlYWROYW1lcygkYXR0cnNGaWxlLCAi
YXR0cnMiKSBpZiBsZW5ndGgoJGF0dHJzRmlsZSk7CiAKQEAgLTY5LDEwICs3NCwxNSBAQAogbWtw
YXRoKCRvdXRwdXREaXIpOwogbXkgJG5hbWVzQmFzZVBhdGggPSAiJG91dHB1dERpci8kcGFyYW1l
dGVyc3snbmFtZXNwYWNlJ31OYW1lcyI7CiBteSAkZmFjdG9yeUJhc2VQYXRoID0gIiRvdXRwdXRE
aXIvJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudEZhY3RvcnkiOwotbXkgJHdyYXBwZXJG
YWN0b3J5QmFzZVBhdGggPSAiJG91dHB1dERpci9KUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVs
ZW1lbnRXcmFwcGVyRmFjdG9yeSI7CitteSAkd3JhcHBlckZhY3RvcnlCYXNlUGF0aCA9ICIkb3V0
cHV0RGlyLyRiaW5kaW5nJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0
b3J5IjsKIAotcHJpbnROYW1lc0hlYWRlckZpbGUoIiRuYW1lc0Jhc2VQYXRoLmgiKTsKLXByaW50
TmFtZXNDcHBGaWxlKCIkbmFtZXNCYXNlUGF0aC5jcHAiKTsKKyMgRklYTUU6IG1ha2VfbmFtZXMg
aXMgYmVpbmcgdXRpbGlzZWQgZm9yIHNpeCBkaWZmZXJlbnQgcHVycG9zZXMsCisjIHdpdGggZ2Vu
ZXJhdGlvbiBvZiBIVE1MTmFtZXMuY3BwL2ggYmVpbmcgZG9uZSBhdCB0aGUgc2FtZSB0aW1lCisj
IGFzIHRoZSBKUyBiaW5kaW5ncyB3cmFwcGVyIGZhY3Rvcmllcy4KK2lmICgkYmluZGluZyBlcSAn
SlMnKSB7CisgICAgcHJpbnROYW1lc0hlYWRlckZpbGUoIiRuYW1lc0Jhc2VQYXRoLmgiKTsKKyAg
ICBwcmludE5hbWVzQ3BwRmlsZSgiJG5hbWVzQmFzZVBhdGguY3BwIik7Cit9CiAKIGlmICgkcHJp
bnRGYWN0b3J5KSB7CiAgICAgcHJpbnRGYWN0b3J5Q3BwRmlsZSgiJGZhY3RvcnlCYXNlUGF0aC5j
cHAiKTsKQEAgLTI5NSw2ICszMDUsMjUgQEAKICAgICBwcmludCBGICIpO1xufVxuXG4iOwogfQog
CisjIEZJWE1FOiB0aGlzIGlzIGhlcmUgYmVjYXVzZSB0aGUgZ29iamVjdCBiaW5kaW5ncyB3ZXJl
IGNyZWF0ZWQgaW4KKyMgbm92ZW1iZXIgMjAwOCwgd2hlbiAjaWZkZWYgREFUQUdSSUQgZGlkIG5v
dCBleGlzdC4gIHRvIGF2b2lkCisjIHNpZ25pZmljYW50IGV4dHJhIHdvcmsgaW4gZ2V0dGluZyB0
aGUgZ29iamVjdCBiaW5kaW5ncyBsYW5kZWQsCisjIGFuZCB0byBhbHNvIGVuc3VyZSB0aGF0IHdl
YmtpdC1ndGsgd2lsbCBzdGlsbCBjb21waWxlIGV2ZW4gd2hlbgorIyBEQVRBR1JJRCBpcyBlbmFi
bGVkLCB0aGlzIHdvcmthcm91bmQgc2tpcHMgdGhlICNpbmNsdWRlCisjIG9mIGhlYWRlcnMgd2hp
Y2ggdGhlIENvZGVHZW5lcmF0b3JHT2JqZWN0LnBtIGRvZXMgbm90IHlldCBjcmVhdGUuCitzdWIg
dGVtcG9yYXJ5V29ya2Fyb3VuZFNraXBUYWcKK3sKKyAgICBteSAkdGFnTmFtZSA9IHNoaWZ0Owor
ICAgIG15ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWdOYW1lfXsnY29uZGl0aW9uYWwnfTsKKyAg
ICBpZiAoJGJpbmRpbmcgZXEgJ1dlYmtpdCcpIHsKKyAgICAgICAgIyBza2lwIERBVEFHUklEIGZv
ciBub3cKKyAgICAgICAgaWYgKCRjb25kaXRpb25hbCBlcSAnREFUQUdSSUQnKSB7CisgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogc3Vi
IHByaW50Q29uc3RydWN0b3JzCiB7CiAgICAgbXkgKCRGLCAkdGFnQ29uc3RydWN0b3JNYXBSZWYp
ID0gQF87CkBAIC0zMTMsNiArMzQyLDggQEAKIAogICAgICAgICAkdW5pcXVlVGFnc3skaW50ZXJm
YWNlTmFtZX0gPSAnMSc7CiAKKyAgICAgICAgbmV4dCBpZiAodGVtcG9yYXJ5V29ya2Fyb3VuZFNr
aXBUYWcoJHRhZ05hbWUpKTsKKwogICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAkdGFnc3skdGFn
TmFtZX17ImNvbmRpdGlvbmFsIn07CiAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKICAgICAg
ICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICJFTkFCTEUoIiAuIGpvaW4oIikgJiYgRU5B
QkxFKCIsIHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAiKSI7CkBAIC0zNDYsNiArMzc3LDgg
QEAKIAogICAgIGZvciBteSAkdGFnTmFtZSAoc29ydCBrZXlzICV0YWdDb25zdHJ1Y3Rvck1hcCkg
ewogCisgICAgICAgIG5leHQgaWYgKHRlbXBvcmFyeVdvcmthcm91bmRTa2lwVGFnKCR0YWdOYW1l
KSk7CisKICAgICAgICAgbXkgJGNvbmRpdGlvbmFsID0gJHRhZ3N7JHRhZ05hbWV9eyJjb25kaXRp
b25hbCJ9OwogICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7CiAgICAgICAgICAgICBteSAkY29u
ZGl0aW9uYWxTdHJpbmcgPSAiRU5BQkxFKCIgLiBqb2luKCIpICYmIEVOQUJMRSgiLCBzcGxpdCgv
Ji8sICRjb25kaXRpb25hbCkpIC4gIikiOwpAQCAtNTY2LDE3ICs1OTksMjAgQEAKICAgICBjbG9z
ZSBGOwogfQogCi1zdWIgcHJpbnRKU0VsZW1lbnRJbmNsdWRlcworc3ViIHByaW50QmluZGluZ0Vs
ZW1lbnRJbmNsdWRlcwogewogICAgIG15ICRGID0gc2hpZnQ7CisgICAgbXkgJHByZWZpeCA9IHNo
aWZ0OworICAgIG15ICRzdWZmaXggPSBzaGlmdDsKIAogICAgIG15ICV0YWdzU2VlbjsKICAgICBm
b3IgbXkgJHRhZ05hbWUgKHNvcnQga2V5cyAldGFncykgeworICAgICAgICBuZXh0IGlmICh0ZW1w
b3JhcnlXb3JrYXJvdW5kU2tpcFRhZygkdGFnTmFtZSkpOwogICAgICAgICBteSAkSlNJbnRlcmZh
Y2VOYW1lID0gJHRhZ3N7JHRhZ05hbWV9eyJKU0ludGVyZmFjZU5hbWUifTsKICAgICAgICAgbmV4
dCBpZiBkZWZpbmVkKCR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSkgfHwgdXNlc0RlZmF1bHRK
U1dyYXBwZXIoJHRhZ05hbWUpOwogICAgICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNlTmFtZX0g
PSAxOwogCi0gICAgICAgIHByaW50IEYgIiNpbmNsdWRlIFwiSlMke0pTSW50ZXJmYWNlTmFtZX0u
aFwiXG4iOworICAgICAgICBwcmludCBGICIjaW5jbHVkZSBcIiR7cHJlZml4fSRiaW5kaW5nJHtK
U0ludGVyZmFjZU5hbWV9JHtzdWZmaXh9LmhcIlxuIjsKICAgICB9CiB9CiAKQEAgLTU4Niw2ICs2
MjIsNyBAQAogCiAgICAgbXkgJXRhZ3NTZWVuOwogICAgIGZvciBteSAkdGFnTmFtZSAoc29ydCBr
ZXlzICV0YWdzKSB7CisgICAgICAgIG5leHQgaWYgKHRlbXBvcmFyeVdvcmthcm91bmRTa2lwVGFn
KCR0YWdOYW1lKSk7CiAgICAgICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJHRhZ3N7JHRhZ05hbWV9
eyJpbnRlcmZhY2VOYW1lIn07CiAgICAgICAgIG5leHQgaWYgZGVmaW5lZCgkdGFnc1NlZW57JGlu
dGVyZmFjZU5hbWV9KTsKICAgICAgICAgJHRhZ3NTZWVueyRpbnRlcmZhY2VOYW1lfSA9IDE7CkBA
IC04NTcsNiArODk0LDIwIEBACiAgICAgcmV0dXJuICR0YWdzeyRuYW1lfXsnSlNJbnRlcmZhY2VO
YW1lJ30gZXEgJHBhcmFtZXRlcnN7Im5hbWVzcGFjZSJ9IC4gIkVsZW1lbnQiIHx8ICR0YWdzeyRu
YW1lfXsnSlNJbnRlcmZhY2VOYW1lJ30gZXEgIkhUTUxOb1NjcmlwdEVsZW1lbnQiOwogfQogCitz
dWIgcHJpbnRXcmFwcGVyRnVuY3Rpb25XZWJraXRJbnRlcmZhY2UKK3sKKyAgICBteSAkRiA9IHNo
aWZ0OworICAgIG15ICRKU0ludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBwcmludCBGIDw8RU5E
CitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihQYXNzUmVm
UHRyPCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCit7CisgICAgcmV0
dXJuIHdyYXAke0pTSW50ZXJmYWNlTmFtZX0oc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9
Kj4oZWxlbWVudC5nZXQoKSkpOworfQorCitFTkQKKzsKK30KKwogc3ViIHByaW50V3JhcHBlckZ1
bmN0aW9ucwogewogICAgIG15ICRGID0gc2hpZnQ7CkBAIC04NjgsNiArOTE5LDcgQEAKICAgICAg
ICAgbmV4dCBpZiBkZWZpbmVkKCR0YWdzU2VlbnskSlNJbnRlcmZhY2VOYW1lfSkgfHwgdXNlc0Rl
ZmF1bHRKU1dyYXBwZXIoJHRhZ05hbWUpOwogICAgICAgICAkdGFnc1NlZW57JEpTSW50ZXJmYWNl
TmFtZX0gPSAxOwogCisgICAgICAgIG5leHQgaWYgKHRlbXBvcmFyeVdvcmthcm91bmRTa2lwVGFn
KCR0YWdOYW1lKSk7CiAgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICR0YWdzeyR0YWdOYW1lfXsi
Y29uZGl0aW9uYWwifTsKICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAgICAg
bXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBFTkFCTEUoIiwg
c3BsaXQoLyYvLCAkY29uZGl0aW9uYWwpKSAuICIpIjsKQEAgLTg3Nyw3ICs5MjksOCBAQAogICAg
ICAgICAjIEhhY2sgZm9yIHRoZSBtZWRpYSB0YWdzCiAgICAgICAgICMgRklYTUU6IFRoaXMgc2hv
dWxkIGhhdmUgYmVlbiBkb25lIHZpYSBhIEN1c3RvbVdyYXBwZXIgYXR0cmlidXRlIGFuZCBhIHNl
cGFyYXRlICpDdXN0b20gZmlsZS4KICAgICAgICAgaWYgKCR0YWdzeyR0YWdOYW1lfXsid3JhcHBl
ck9ubHlJZk1lZGlhSXNBdmFpbGFibGUifSkgewotICAgICAgICAgICAgcHJpbnQgRiA8PEVORAor
ICAgICAgICAgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsKKyAgICAgICAgICAgICAgICBwcmlu
dCBGIDw8RU5ECiBzdGF0aWMgSlNOb2RlKiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1Jl
ZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBlbGVtZW50KQogewogICAgIGlm
ICghTWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKCkpCkBAIC04ODcsOCArOTQwLDEzIEBACiAKIEVO
RAogOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGlmICgkYmluZGluZyBlcSAnV2Via2l0
JykgeworICAgICAgICAgICAgICAgIHByaW50V3JhcHBlckZ1bmN0aW9uV2Via2l0SW50ZXJmYWNl
KCRGLCAkSlNJbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHByaW50IEYgPDxFTkQKKyAgICAgICAgICAgIGlmICgkYmluZGluZyBlcSAn
SlMnKSB7CisgICAgICAgICAgICAgICAgcHJpbnQgRiA8PEVORAogc3RhdGljIEpTTm9kZSogY3Jl
YXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9
RWxlbWVudD4gZWxlbWVudCkKIHsKICAgICByZXR1cm4gQ1JFQVRFX0RPTV9OT0RFX1dSQVBQRVIo
ZXhlYywgZ2xvYmFsT2JqZWN0LCAke0pTSW50ZXJmYWNlTmFtZX0sIGVsZW1lbnQuZ2V0KCkpOwpA
QCAtODk2LDYgKzk1NCwxMCBAQAogCiBFTkQKIDsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAg
ICBpZiAoJGJpbmRpbmcgZXEgJ1dlYmtpdCcpIHsKKyAgICAgICAgICAgICAgICBwcmludFdyYXBw
ZXJGdW5jdGlvbldlYmtpdEludGVyZmFjZSgkRiwgJEpTSW50ZXJmYWNlTmFtZSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICAg
ICAgcHJpbnQgRiAiI2VuZGlmXG5cbiI7CkBAIC05MDMsNiArOTY1LDUyIEBACiAgICAgfQogfQog
CitzdWIgcHJpbnRXcmFwcGVyRmFjdG9yeUNwcEZpbGVXZWJraXRIZWFkZXIKK3sKKyAgICBteSAk
RiA9IHNoaWZ0OworICAgIHByaW50IEYgPDxFTkQKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOjokcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31OYW1lczsKKwordHlwZWRlZiBn
cG9pbnRlciAoKkNyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVu
Y3Rpb24pKFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4pOworCitF
TkQKKzsKK30KKworc3ViIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlV2Via2l0RnVuY3Rpb25I
ZWFkZXIKK3sKKyAgICBwcmludCBGIDw8RU5ECitncG9pbnRlciBjcmVhdGVXZWJraXQkcGFyYW1l
dGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlcihQYXNzUmVmUHRyPFdlYkNvcmU6OiRwYXJh
bWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+IGVsZW1lbnQpCit7ICAgCisgICAgc3RhdGljIEhh
c2hNYXA8V2ViQ29yZTo6QXRvbWljU3RyaW5nSW1wbCosIENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1l
c3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+IG1hcDsKKyAgICBpZiAobWFwLmlzRW1wdHko
KSkgeworRU5ECis7Cit9CisKK3N1YiBwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZVdlYmtpdEZv
b3RlcgoreworICAgIG15ICRGID0gc2hpZnQ7CisgICAgcHJpbnQgRiA8PEVORAorICAgIH0KKyAg
ICBDcmVhdGUkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0aW9uIGNy
ZWF0ZVdyYXBwZXJGdW5jdGlvbiA9CisgICAgICAgIG1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1l
KCkuaW1wbCgpKTsKKyAgICBpZiAoY3JlYXRlV3JhcHBlckZ1bmN0aW9uKQorICAgICAgICByZXR1
cm4gY3JlYXRlV3JhcHBlckZ1bmN0aW9uKGVsZW1lbnQpOworICAgIHJldHVybiB3cmFwJHBhcmFt
ZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudChlbGVtZW50LmdldCgpKTsKK30KKworfQorCitFTkQK
KzsKK30KKwogc3ViIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlCiB7CiAgICAgbXkgJGNwcFBh
dGggPSBzaGlmdDsKQEAgLTkxNSw5ICsxMDIzLDIwIEBACiAKICAgICBwcmludCBGICIjaWYgJHBh
cmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfVxuXG4iIGlmICRwYXJhbWV0ZXJzeydndWFyZEZh
Y3RvcnlXaXRoJ307CiAKLSAgICBwcmludCBGICIjaW5jbHVkZSBcIkpTJHBhcmFtZXRlcnN7J25h
bWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5LmhcIlxuIjsKKyAgICBpZiAoJGJpbmRpbmcg
ZXEgJ1dlYmtpdCcpIHsKKyAgICAgICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJ3ZWJraXQvV2Via2l0
Tm9kZS5oXCJcbiI7CisgICAgfQorICAgIHByaW50IEYgIiNpbmNsdWRlIFwiJGJpbmRpbmckcGFy
YW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnkuaFwiXG4iOwogCi0gICAg
cHJpbnRKU0VsZW1lbnRJbmNsdWRlcygkRik7CisgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsK
KyAgICAgICAgcHJpbnRCaW5kaW5nRWxlbWVudEluY2x1ZGVzKCRGLCAiIiwgIiIpOworICAgIH0g
CisgICAgaWYgKCRiaW5kaW5nIGVxICdXZWJraXQnKSB7CisgICAgICAgIHByaW50QmluZGluZ0Vs
ZW1lbnRJbmNsdWRlcygkRiwgIndlYmtpdC8iLCAiIik7CisgICAgICAgIHByaW50IEYgIlxuIjsK
KyAgICAgICAgcHJpbnQgRiAiI2luY2x1ZGUgXCJ3ZWJraXQvV2Via2l0SFRNTEVsZW1lbnRQcml2
YXRlLmhcIlxuIjsKKyAgICAgICAgcHJpbnRCaW5kaW5nRWxlbWVudEluY2x1ZGVzKCRGLCAid2Vi
a2l0LyIsICJQcml2YXRlIik7CisgICAgfQogCiAgICAgcHJpbnQgRiAiXG4jaW5jbHVkZSBcIiRw
YXJhbWV0ZXJzeyduYW1lc3BhY2UnfU5hbWVzLmhcIlxuXG4iOwogCkBAIC05MjUsNyArMTA0NCw4
IEBACiAKICAgICBwcmludCBGICJcbiNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+XG5cbiI7
CiAgICAgCi0gICAgcHJpbnQgRiA8PEVORAorICAgIGlmICgkYmluZGluZyBlcSAnSlMnKSB7Cisg
ICAgICAgIHByaW50IEYgPDxFTkQKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTkzNiwxMCArMTA1NiwxNSBAQAogCiBFTkQKIDsKKyAgICB9IAorICAgIGlm
ICgkYmluZGluZyBlcSAnV2Via2l0JykgeworICAgICAgICBwcmludFdyYXBwZXJGYWN0b3J5Q3Bw
RmlsZVdlYmtpdEhlYWRlcigkRik7CisgICAgfQogCiAgICAgcHJpbnRXcmFwcGVyRnVuY3Rpb25z
KCRGKTsKIAotICAgIHByaW50IEYgPDxFTkQKKyAgICBpZiAoJGJpbmRpbmcgZXEgJ0pTJykgewor
ICAgICAgICBwcmludCBGIDw8RU5ECiBKU05vZGUqIGNyZWF0ZUpTJHBhcmFtZXRlcnN7J25hbWVz
cGFjZSd9V3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFBhc3NSZWZQdHI8JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4gZWxlbWVu
dCkKIHsgICAKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6QXRvbWljU3RyaW5nSW1wbCos
IENyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24+IEZ1
bmN0aW9uTWFwOwpAQCAtOTQ3LDEyICsxMDcyLDE5IEBACiAgICAgaWYgKG1hcC5pc0VtcHR5KCkp
IHsKIEVORAogOworICAgIH0gCisgICAgaWYgKCRiaW5kaW5nIGVxICdXZWJraXQnKSB7CisgICAg
ICAgIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlV2Via2l0RnVuY3Rpb25IZWFkZXIoJEYpOwor
ICAgIH0KIAogICAgIGZvciBteSAkdGFnIChzb3J0IGtleXMgJXRhZ3MpIHsKICAgICAgICAgIyBE
byBub3QgYWRkIHRoZSBuYW1lIHRvIHRoZSBtYXAgaWYgaXQgZG9lcyBub3QgaGF2ZSBhIEpTIHdy
YXBwZXIgY29uc3RydWN0b3Igb3IgdXNlcyB0aGUgZGVmYXVsdCB3cmFwcGVyLgogICAgICAgICBu
ZXh0IGlmIHVzZXNEZWZhdWx0SlNXcmFwcGVyKCR0YWcsIFwldGFncyk7CiAKKyAgICAgICAgbmV4
dCBpZiAodGVtcG9yYXJ5V29ya2Fyb3VuZFNraXBUYWcoJHRhZykpOworCiAgICAgICAgIG15ICRj
b25kaXRpb25hbCA9ICR0YWdzeyR0YWd9eyJjb25kaXRpb25hbCJ9OworCiAgICAgICAgIGlmICgk
Y29uZGl0aW9uYWwpIHsKICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICJFTkFC
TEUoIiAuIGpvaW4oIikgJiYgRU5BQkxFKCIsIHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKSkgLiAi
KSI7CiAgICAgICAgICAgICBwcmludCBGICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiI7CkBA
IC05NjYsNyArMTA5OCw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcmludCBGIDw8RU5E
CisgICAgaWYgKCRiaW5kaW5nIGVxICdKUycpIHsKKyAgICAgICAgcHJpbnQgRiA8PEVORAogICAg
IH0KICAgICBDcmVhdGUkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZ1bmN0
aW9uIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbiA9IG1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCku
aW1wbCgpKTsKICAgICBpZiAoY3JlYXRlV3JhcHBlckZ1bmN0aW9uKQpAQCAtOTc4LDEyICsxMTEx
LDM2IEBACiAKIEVORAogOworICAgIH0gCisgICAgaWYgKCRiaW5kaW5nIGVxICdXZWJraXQnKSB7
CisgICAgICAgIHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlV2Via2l0Rm9vdGVyKCRGKTsKKyAg
ICB9CiAKICAgICBwcmludCBGICIjZW5kaWZcbiIgaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9y
eVdpdGgnfTsKIAogICAgIGNsb3NlIEY7CiB9CiAKK3N1YiBwcmludFdyYXBwZXJGYWN0b3J5SGVh
ZGVyRmlsZVdlYmtpdEJvZHkKK3sKKyAgICBteSAkRiA9IHNoaWZ0OworICAgIHByaW50IEYgPDxF
TkQKKyNpbmNsdWRlICJXZWJraXROb2RlUHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzICRwYXJhbWV0ZXJzeyduYW1l
c3BhY2UnfUVsZW1lbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIGdwb2ludGVyIGNy
ZWF0ZVdlYmtpdCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4pOworfQorIAorRU5E
Cis7Cit9CisKIHN1YiBwcmludFdyYXBwZXJGYWN0b3J5SGVhZGVyRmlsZQogewogICAgIG15ICRo
ZWFkZXJQYXRoID0gc2hpZnQ7CkBAIC05OTIsMTIgKzExNDksMTMgQEAKIAogICAgIHByaW50TGlj
ZW5zZUhlYWRlcigkRik7CiAKLSAgICBwcmludCBGICIjaWZuZGVmIEpTJHBhcmFtZXRlcnN7J25h
bWVzcGFjZSd9RWxlbWVudFdyYXBwZXJGYWN0b3J5X2hcbiI7Ci0gICAgcHJpbnQgRiAiI2RlZmlu
ZSBKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG5cbiI7
CisgICAgcHJpbnQgRiAiI2lmbmRlZiAkYmluZGluZyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVs
ZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOworICAgIHByaW50IEYgIiNkZWZpbmUgJGJpbmRpbmck
cGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50V3JhcHBlckZhY3RvcnlfaFxuXG4iOwogCiAg
ICAgcHJpbnQgRiAiI2lmICRwYXJhbWV0ZXJzeydndWFyZEZhY3RvcnlXaXRoJ31cbiIgaWYgJHBh
cmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKIAotICAgIHByaW50IEYgPDxFTkQKKyAgICBp
ZiAoJGJpbmRpbmcgZXEgJ0pTJykgeworICAgICAgICBwcmludCBGIDw8RU5ECiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMDE2LDEwICsxMTc0LDE0IEBA
CiAgCiBFTkQKIDsKKyAgICB9IAorICAgIGlmICgkYmluZGluZyBlcSAnV2Via2l0JykgeworICAg
ICAgICBwcmludFdyYXBwZXJGYWN0b3J5SGVhZGVyRmlsZVdlYmtpdEJvZHkoJEYpOworICAgIH0K
IAogICAgIHByaW50IEYgIiNlbmRpZiAvLyAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0aCd9
XG5cbiIgaWYgJHBhcmFtZXRlcnN7J2d1YXJkRmFjdG9yeVdpdGgnfTsKIAotICAgIHByaW50IEYg
IiNlbmRpZiAvLyBKUyRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9y
eV9oXG4iOworICAgIHByaW50IEYgIiNlbmRpZiAvLyAkYmluZGluZyRwYXJhbWV0ZXJzeyduYW1l
c3BhY2UnfUVsZW1lbnRXcmFwcGVyRmFjdG9yeV9oXG4iOwogCiAgICAgY2xvc2UgRjsKIH0K
</data>
<flag name="review"
          id="18861"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>