<?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>61913</bug_id>
          
          <creation_ts>2011-06-02 01:17:43 -0700</creation_ts>
          <short_desc>Improve keyword lookup</short_desc>
          <delta_ts>2011-06-03 23:14:35 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>jamesr</cc>
    
    <cc>joepeck</cc>
    
    <cc>rniwa</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>413983</commentid>
    <comment_count>0</comment_count>
      <attachid>95737</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-02 01:17:43 -0700</bug_when>
    <thetext>Created attachment 95737
decision tree generator

Currently the logic for identifying keywords in the lexer is somewhat awful -- essentially it does

1. Identify range of characters valid identifier characters
2. Convert range to an Identifier (hash lookup + appending to the identifier arena&apos;s identifier vector)
3. hash lookup into keyword table + yet another branch

Switching to a direct coded decision tree allows us to drop steps 2 and 3 for keywords, and drop step 3 for all identifiers.

I&apos;ve attached a patch that adds a decision tree generator script (unfortunately i haven&apos;t added the machinery to automate the build, so you need to &quot;python KeywordLookupGenerator.py Keywords.table &gt; KeywordLookup.h&quot; in Source/JavaScriptCore/parser

It&apos;s still not perfect as it&apos;s using switches for the single character decisions, when we probably want to have carefully ordered if/else branches so common keywords are tested first.  That said on my ad-hoc parser perf test it&apos;s around a 4% win on my macbook air, although i think it&apos;s closer to 1% on my mac pro when i last measured there.  I&apos;ve also spent some time fiddling with improving character match performance so it&apos;s not currently endian safe (lalalalala).

Anyhoo, it&apos;s a work in progress, should be done tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414065</commentid>
    <comment_count>1</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-06-02 06:21:44 -0700</bug_when>
    <thetext>I have some ideas to speeding up the reserved identifier searching:

Since we know the length of the token, we could select the length class of the token:

Tokens with length of 2
   if
   do
   in
Tokens with length of 3
   for
   new
   var
   try
Tokens with length of 4
   this
   else
   with
   enum
   null
   true
   case
   void
Tokens with length of 5
   while
   throw
   class
   super
   false
   break
   catch
   const
Tokens with length of 6
   export
   import
   return
   delete
   switch
   typeof
Tokens with length of 7
   default
   finally
   extends
Tokens with length of 8
   continue
   function
   debugger
Tokens with length of 10
   instanceof

Decision trees usually start with the examination of the first character. Perhaps it could be faster to check other characters first. I.e: lets choose the tokens which length is 4: There are two of them, which starts with &apos;e&apos;, but the second character is always unique.

Tokens with length of 2      : 2nd character is unique
Tokens with length of 3      : 1st character is unique
Tokens with length of 4      : 2nd character is unique
Tokens with length of 5      : 3rd character is unique
Tokens with length of 6 - 10 : 1st character is unique</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414330</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-06-02 12:08:58 -0700</bug_when>
    <thetext>Removing switch should be a big improvement, since a switch is typically a pair of bounds checks followed by a table lookup followed by an indirect branch.

Also, since you&apos;re testing for exact characters, you can drop the isIdentPart tests.

To handle the last few characters in the script without special cases, perhaps you can either:
    (a) Coax the SourceCode mechanism to pad the end of every script with N zeroes
    OR
    (b) Change the lexer to, upon encountering a failed &quot;N characters left&quot; test, copy the remaining characters into a fixed buffer and pad the end of the buffer with N zeroes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414332</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-06-02 12:09:29 -0700</bug_when>
    <thetext>&gt; Since we know the length of the token, we could select the length class of the token:

Actually, one part of Oliver&apos;s optimization is to stop pre-computing the length of the token.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414418</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-02 14:08:19 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Removing switch should be a big improvement, since a switch is typically a pair of bounds checks followed by a table lookup followed by an indirect branch.
Yeah, however need to work on ordering to get the right choices made.

&gt; 
&gt; Also, since you&apos;re testing for exact characters, you can drop the isIdentPart tests.
The isIdentPart check is to check that we&apos;ve reached the end of the token -- it can&apos;t be dropped

&gt; 
&gt; To handle the last few characters in the script without special cases, perhaps you can either:
&gt;     (a) Coax the SourceCode mechanism to pad the end of every script with N zeroes
&gt;     OR
&gt;     (b) Change the lexer to, upon encountering a failed &quot;N characters left&quot; test, copy the remaining characters into a fixed buffer and pad the end of the buffer with N zeroes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414666</commentid>
    <comment_count>5</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-06-02 23:14:24 -0700</bug_when>
    <thetext>Hm I was thinking more about this. If we prefer switches over switches, we could use some divide and conquer strategy. A special binary search in other words. I.e: divide the tokens to two (or three?) groups based on the first character is lower or bigger than, let&apos;s say &apos;m&apos;. If the groups have roughly equal size, that could help to know which tokens are not possible. And only machine predictable switches are used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415126</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-06-03 13:21:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Hm I was thinking more about this. If we prefer switches over switches, we could use some divide and conquer strategy. A special binary search in other words. I.e: divide the tokens to two (or three?) groups based on the first character is lower or bigger than, let&apos;s say &apos;m&apos;. If the groups have roughly equal size, that could help to know which tokens are not possible. And only machine predictable switches are used.

Binary search is a good strategy when the likelihood of all inputs is evenly distributed; however, Oliver has found that not to be the case with keywords. Some keywords are much more popular than others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415233</commentid>
    <comment_count>7</comment_count>
      <attachid>95973</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-03 15:13:00 -0700</bug_when>
    <thetext>Created attachment 95973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415257</commentid>
    <comment_count>8</comment_count>
      <attachid>95977</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-03 15:57:07 -0700</bug_when>
    <thetext>Created attachment 95977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415259</commentid>
    <comment_count>9</comment_count>
      <attachid>95978</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-03 15:57:54 -0700</bug_when>
    <thetext>Created attachment 95978
Example output

Example output</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415265</commentid>
    <comment_count>10</comment_count>
      <attachid>95977</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-06-03 16:05:59 -0700</bug_when>
    <thetext>Comment on attachment 95977
Patch

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

r=me with these changes

&gt; if ((remaining &gt;= maxTokenLength) &amp;&amp; !(lexType &amp; IgnoreReservedWords)) {

WebKit style says this should be an early return (assuming an inline function).

&gt; Source/JavaScriptCore/parser/Lexer.cpp:229
&gt; +#if CPU(NEEDS_ALIGNED_ACCESS)
&gt; +
&gt; +#define COMPARE_CHARACTERS2(address, char1, char2) \
&gt; +    (((address)[0] == char1) &amp;&amp; ((address)[1] == char2))
&gt; +#define COMPARE_CHARACTERS4(address, char1, char2, char3, char4) \
&gt; +    (COMPARE_CHARACTERS2(address, char1, char2) &amp;&amp; COMPARE_CHARACTERS2((address) + 2, char3, char4))

Seems like a lot of these macros could be inline functions instead.

&gt; Source/JavaScriptCore/parser/Lexer.cpp:455
&gt; +#include &quot;KeywordLookup.h&quot;

I think it would be better if KeywordLookup.h defined an inline function instead. Easier for debugging.

&gt; Source/JavaScriptCore/parser/Lexer.h:116
&gt; +        template &lt;int shiftAmount, bool shouldBoundsCheck&gt; void internalShift();

An enum { DoBoundsCheck, DoNotBoundsCheck } would help make call sites more obvious. A stand-alone &quot;true&quot; or &quot;false&quot; is non-obvious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415273</commentid>
    <comment_count>11</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-03 16:30:38 -0700</bug_when>
    <thetext>Committed r88076: &lt;http://trac.webkit.org/changeset/88076&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415313</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-03 17:18:27 -0700</bug_when>
    <thetext>This is producing a lot of stdout spew when compiling chromium (at least on linux):

http://build.webkit.org/builders/Chromium%20Linux%20Release/builds/31361/steps/compile-webkit/logs/stdio

I&apos;m guessing this is not intentional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415331</commentid>
    <comment_count>13</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-03 17:42:41 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; This is producing a lot of stdout spew when compiling chromium (at least on linux):
&gt; 
&gt; http://build.webkit.org/builders/Chromium%20Linux%20Release/builds/31361/steps/compile-webkit/logs/stdio
&gt; 
&gt; I&apos;m guessing this is not intentional?

Nope, i was trying to make the gyp build work -- it should be piping to the output file (i tried to copy what&apos;s done for the regexp table gen)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415384</commentid>
    <comment_count>14</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-06-03 21:26:01 -0700</bug_when>
    <thetext>Cool patch!

I can&apos;t imagine &quot;debugger&quot; ever being more common than &quot;delete&quot; in code we
want to be fast. Probably just a nit on my part, but since this did give weights
to keywords for popularity, maybe we could negatively weight debugging or
reserved but currently unused keywords.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415390</commentid>
    <comment_count>15</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-03 21:54:08 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Cool patch!
&gt; 
&gt; I can&apos;t imagine &quot;debugger&quot; ever being more common than &quot;delete&quot; in code we
&gt; want to be fast. Probably just a nit on my part, but since this did give weights
&gt; to keywords for popularity, maybe we could negatively weight debugging or
&gt; reserved but currently unused keywords.

The falloff is dramatic, delete may be more common than debugger (and other reserved words) but they&apos;re all so uncommon that the branch ordering is irrelevant by then -- it&apos;s probably not overly relevant for the less common of those that do have weights.  My actual data shows delete to make up around 0.3% of keywords that we see.  The reality is that if a token begins with &apos;de&apos; it is more likely to not be a keyword than it is to be debugger, default or delete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415393</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-03 22:00:18 -0700</bug_when>
    <thetext>Mn... it seems like 5 tests are crashing on waterfall after this fix and http://trac.webkit.org/changeset/88082:
http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20%28Tests%29/builds/30035

Should we revert the changesets for now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415395</commentid>
    <comment_count>17</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-03 22:01:39 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Mn... it seems like 5 tests are crashing on waterfall after this fix and http://trac.webkit.org/changeset/88082:
&gt; http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20%28Tests%29/builds/30035
&gt; 
&gt; Should we revert the changesets for now?

nope, i&apos;ll look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415396</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-03 22:02:27 -0700</bug_when>
    <thetext>Also, lots of tests are crashing on Windows:
http://build.webkit.org/builders/Windows%20XP%20Debug%20%28Tests%29/builds/29299
http://build.webkit.org/results/Windows%20XP%20Debug%20(Tests)/r88089%20(29307)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415399</commentid>
    <comment_count>19</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-03 22:06:32 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Also, lots of tests are crashing on Windows:
&gt; http://build.webkit.org/builders/Windows%20XP%20Debug%20%28Tests%29/builds/29299
&gt; http://build.webkit.org/results/Windows%20XP%20Debug%20(Tests)/r88089%20(29307)/results.html

Yeah, i see the problem.  sadly adds an additional write I though i could avoid :-(

Wonder why it didn&apos;t fail for me earlier :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415401</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-03 22:15:23 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Yeah, i see the problem.  sadly adds an additional write I though i could avoid :-(
&gt; 
&gt; Wonder why it didn&apos;t fail for me earlier :-/

It seems like the crashes are somewhat flaky :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415410</commentid>
    <comment_count>21</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-03 23:14:35 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; Yeah, i see the problem.  sadly adds an additional write I though i could avoid :-(
&gt; &gt; 
&gt; &gt; Wonder why it didn&apos;t fail for me earlier :-/
&gt; 
&gt; It seems like the crashes are somewhat flaky :(

Fix up for review in https://bugs.webkit.org/show_bug.cgi?id=62086</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>95737</attachid>
            <date>2011-06-02 01:17:43 -0700</date>
            <delta_ts>2011-06-02 01:17:43 -0700</delta_ts>
            <desc>decision tree generator</desc>
            <filename>lookupgenerator.patch</filename>
            <type>text/plain</type>
            <size>12582</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWM1Yjg0NC4uNDc4NTQ1OCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwOTksNiArMTA5OSw4IEBACiAJCUE3Mzg2NTUx
MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWNpYWxpemVkVGh1bmtKSVQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTczODY1NTIxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9y
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHVua0dlbmVyYXRv
cnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzM4NjU1MzExODY5N0I0MDA1
NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRodW5rR2VuZXJhdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNzND
RjZFNjEzOTcxQTA4MDAwMDcxMTAgLyogS2V5d29yZExvb2t1cC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBLZXl3b3JkTG9va3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE3M0NGNkU3MTM5NzFBMDgwMDAwNzExMCAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9y
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gS2V5d29yZExvb2t1cEdl
bmVyYXRvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc0ODJCNzkxMTY2Q0RF
QTAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzQ4MkI3QTExNjZDREVBMDAzQjA3MTIgLyogSlNXZWFrT2Jq
ZWN0TWFwUmVmUHJpdmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTc0ODJFMzcxMTZBNjk3QjAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVy
bmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vha09iamVjdE1hcFJl
ZkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzgxLDYgKzE3ODMs
OCBAQAogCQk3RTM5RDgzNzBFQzNBMzg4MDAzQUYxMUEgLyogcGFyc2VyICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBNzNDRjZFNjEzOTcxQTA4MDAwMDcx
MTAgLyogS2V5d29yZExvb2t1cC5oICovLAorCQkJCUE3M0NGNkU3MTM5NzFBMDgwMDAwNzExMCAv
KiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICovLAogCQkJCUE3QTdFRTc0MTFCOThCOEQwMDY1
QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8sCiAJCQkJQTdBN0VFNzUxMUI5OEI4RDAwNjVBMTRGIC8q
IEpTUGFyc2VyLmNwcCAqLywKIAkJCQlBN0E3RUU3NjExQjk4QjhEMDA2NUExNEYgLyogSlNQYXJz
ZXIuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
YjJmNDc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9L
ZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEsMTY2IEBACitpbXBvcnQgc3lzCitp
bXBvcnQgc3RyaW5nCisKK2tleXdvcmRzVGV4dCA9IG9wZW4oc3lzLmFyZ3ZbMV0pLnJlYWQoKTsK
KworZGVmIGFsbFdoaXRlc3BhY2Uoc3RyKToKKyAgICBmb3IgYyBpbiBzdHI6CisgICAgICAgIGlm
IG5vdChjIGluIHN0cmluZy53aGl0ZXNwYWNlKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgIHJldHVybiBUcnVlOworCitkZWYgcGFyc2VLZXl3b3JkcyhrZXl3b3Jkc1RleHQpOgorICAg
IGxpbmVzID0ga2V5d29yZHNUZXh0LnNwbGl0KCJcbiIpOworICAgIGxpbmVzID0gW2xpbmUuc3Bs
aXQoIiMiKVswXSBmb3IgbGluZSBpbiBsaW5lc10KKyAgICBsaW5lcyA9IFtsaW5lIGZvciBsaW5l
IGluIGxpbmVzIGlmIChub3QgYWxsV2hpdGVzcGFjZShsaW5lKSldCisgICAgbmFtZSA9IGxpbmVz
WzBdLnNwbGl0KCkKKyAgICB0ZXJtaW5hdG9yID0gbGluZXNbLTFdCisgICAgaWYgbm90IG5hbWVb
MF0gPT0gIkBiZWdpbiI6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZXhwZWN0ZWQgZGVzY3Jp
cHRpb24gYmVnaW5uaW5nIHdpdGggQGJlZ2luIikKKyAgICBpZiBub3QgdGVybWluYXRvciA9PSAi
QGVuZCI6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZXhwZWN0ZWQgZGVzY3JpcHRpb24gZW5k
aW5nIHdpdGggQGVuZCIpCisgICAgCisgICAgbGluZXMgPSBsaW5lc1sxOi0xXSAjIHRyaW0gb2Zm
IHRoZSBvbGQgaGVhZGluZworICAgIHJldHVybiBbbGluZS5zcGxpdCgpIGZvciBsaW5lIGluIGxp
bmVzXQorCitkZWYgbWFrZVBhZGRpbmcoc2l6ZSk6CisgICAgc3RyID0gIiIKKyAgICBmb3IgaSBp
biByYW5nZShzaXplKToKKyAgICAgICAgc3RyID0gc3RyICsgIiAiCisgICAgcmV0dXJuIHN0cgor
CitjbGFzcyBUcmllOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmVmaXgpOgorICAgICAgICBz
ZWxmLnByZWZpeCA9IHByZWZpeAorICAgICAgICBzZWxmLmtleXMgPSB7fQorICAgICAgICBzZWxm
LnZhbHVlID0gTm9uZQorCisgICAgZGVmIGluc2VydChzZWxmLCBrZXksIHZhbHVlKToKKyAgICAg
ICAgaWYgbGVuKGtleSkgPT0gMDoKKyAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAg
ICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCAoa2V5WzBdIGluIHNlbGYua2V5cyk6Cisg
ICAgICAgICAgICBzZWxmLmtleXNba2V5WzBdXSA9IFRyaWUoa2V5WzBdKQorICAgICAgICBzZWxm
LmtleXNba2V5WzBdXS5pbnNlcnQoa2V5WzE6XSwgdmFsdWUpCisgICAgZGVmIGNvYWxlc2NlKHNl
bGYpOgorICAgICAgICBrZXlzID0ge30KKyAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5rZXlzLml0
ZW1zKCk6CisgICAgICAgICAgICB0ID0gdi5jb2FsZXNjZSgpCisgICAgICAgICAgICBrZXlzW3Qu
cHJlZml4XSA9IHQKKyAgICAgICAgc2VsZi5rZXlzID0ga2V5czsKKyAgICAgICAgaWYgc2VsZi52
YWx1ZSAhPSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgaWYgbGVuKHNl
bGYua2V5cykgIT0gMToKKyAgICAgICAgICAgIHJldHVybiBzZWxmOworICAgICAgICAocHJlZml4
LCBzdWZmaXgpID0gc2VsZi5rZXlzLml0ZW1zKClbMF0KKyAgICAgICAgcmVzID0gVHJpZShzZWxm
LnByZWZpeCArIHByZWZpeCkKKyAgICAgICAgcmVzLnZhbHVlID0gc3VmZml4LnZhbHVlCisgICAg
ICAgIHJlcy5rZXlzID0gc3VmZml4LmtleXMKKyAgICAgICAgcmV0dXJuIHJlcworICAgIGRlZiBm
aWxsT3V0KHNlbGYsIHByZWZpeCA9ICIiKToKKyAgICAgICAgc2VsZi5mdWxsUHJlZml4ID0gcHJl
Zml4ICsgc2VsZi5wcmVmaXg7CisgICAgICAgIGZvciB0cmllIGluIHNlbGYua2V5cy52YWx1ZXMo
KToKKyAgICAgICAgICAgIHRyaWUuZmlsbE91dChzZWxmLmZ1bGxQcmVmaXgpOworICAgIGRlZiBk
dW1wKHNlbGYsIGluZGVudCA9IDApOgorICAgICAgICBzdHIgPSBtYWtlUGFkZGluZyhpbmRlbnQp
CisgICAgICAgIGlmIHNlbGYudmFsdWUgIT0gTm9uZToKKyAgICAgICAgICAgIHByaW50KHN0ciAr
IHNlbGYucHJlZml4ICsgIigiICsgc2VsZi5mdWxsUHJlZml4ICsgIikgLT4gIiArIHNlbGYudmFs
dWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludChzdHIgKyBzZWxmLnByZWZpeCkK
KyAgICAgICAgZm9yIGssIHRyaWUgaW4gc2VsZi5rZXlzLml0ZW1zKCk6CisgICAgICAgICAgICB0
cmllLmR1bXAoaW5kZW50KzIpCisgICAgZGVmIG1pbkxlbmd0aChzZWxmKToKKyAgICAgICAgaWYg
c2VsZi52YWx1ZSAhPSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmZ1bGxQcmVm
aXgpCisgICAgICAgIG1pbiA9IDEwMDAwMDsKKyAgICAgICAgZm9yIHRyaWUgaW4gc2VsZi5rZXlz
LnZhbHVlcygpOgorICAgICAgICAgICAgbCA9IHRyaWUubWluTGVuZ3RoKCk7CisgICAgICAgICAg
ICBpZiBsIDwgbWluOgorICAgICAgICAgICAgICAgIG1pbiA9IGwKKyAgICAgICAgcmV0dXJuIG1p
bgorICAgIGRlZiBwcmludFN1YlRyZWVBc0Moc2VsZiwgaW5kZW50KToKKyAgICAgICAgc3RyID0g
bWFrZVBhZGRpbmcoaW5kZW50KQorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi52YWx1ZSAhPSBO
b25lOgorICAgICAgICAgICAgcHJpbnQoc3RyICsgImlmICghaXNJZGVudFBhcnQoY29kZVslZF0p
KSB7IiAlIChsZW4oc2VsZi5mdWxsUHJlZml4KSkpOworICAgICAgICAgICAgcHJpbnQoc3RyICsg
IiAgICBpbnRlcm5hbFNoaWZ0PCVkPigpOyIgJSBsZW4oc2VsZi5mdWxsUHJlZml4KSkKKyAgICAg
ICAgICAgIHByaW50KHN0ciArICIgICAgcmV0dXJuICIgKyBzZWxmLnZhbHVlICsgIjsiKQorICAg
ICAgICAgICAgcHJpbnQoc3RyICsgIn0iKQorICAgICAgICBpZiBsZW4oc2VsZi5rZXlzKSA9PSAw
OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJvb3RJbmRleCA9IGxlbihzZWxmLmZ1bGxQ
cmVmaXgpOworICAgICAgICBpdGVtQ291bnQgPSAwCisgICAgICAgIGRlZmF1bHRzID0gW107Cisg
ICAgICAgIGV4dHJhSW5kZW50ID0gIiIKKyAgICAgICAgZm9yIGssIHRyaWUgaW4gc2VsZi5rZXlz
Lml0ZW1zKCk6CisgICAgICAgICAgICBpZiBsZW4oaykgPiAxOgorICAgICAgICAgICAgICAgIGRl
ZmF1bHRzLmFwcGVuZCgoaywgdHJpZSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgaWYgbGVuKGRlZmF1bHRzKSAhPSBsZW4oc2VsZi5rZXlzKToKKyAgICAgICAgICAgIHByaW50
KHN0ciArICJzd2l0Y2ggKGNvZGVbJWRdKSB7IiAlIHJvb3RJbmRleCkKKyAgICAgICAgICAgIGZv
ciBrLCB0cmllIGluIHNlbGYua2V5cy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGxlbihr
KSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcHJp
bnQoc3RyICsgImNhc2UgJyVzJzogeyIgJSBrKQorICAgICAgICAgICAgICAgIHRyaWUucHJpbnRT
dWJUcmVlQXNDKGluZGVudCArIDQpOworICAgICAgICAgICAgICAgIHByaW50KHN0ciArICIgICAg
Z290byBlbmQ7IikKKyAgICAgICAgICAgICAgICBwcmludChzdHIgKyAifSIpCisgICAgICAgICAg
ICBpZiBsZW4oZGVmYXVsdHMpID4gMDoKKyAgICAgICAgICAgICAgICBwcmludChzdHIgKyAiZGVm
YXVsdDoiKQorICAgICAgICAgICAgZXh0cmFJbmRlbnQgPSAiICAgICIKKworICAgICAgICBmb3Ig
aywgdHJpZSBpbiBkZWZhdWx0czoKKyAgICAgICAgICAgIGlmIEZhbHNlOgorICAgICAgICAgICAg
ICAgIGkgPSAwCisgICAgICAgICAgICAgICAgdGVzdCA9IFtdOworICAgICAgICAgICAgICAgIGZv
ciBjIGluIGs6CisgICAgICAgICAgICAgICAgICAgIHRlc3QuYXBwZW5kKCJjb2RlWyVkXSA9PSAn
JXMnIiAlIChpICsgcm9vdEluZGV4LCBjKSkKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAx
CisKKyAgICAgICAgICAgICAgICBpZiBpdGVtQ291bnQgPT0gMDoKKyAgICAgICAgICAgICAgICAg
ICAgcHJpbnQoc3RyICsgZXh0cmFJbmRlbnQgKyAiaWYgKCIgKyAiICYmICIuam9pbih0ZXN0KSAr
ICIpIHsiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50
KHN0ciArIGV4dHJhSW5kZW50ICsgImVsc2UgaWYgKCIgKyAiICYmICIuam9pbih0ZXN0KSArICIp
IHsiKQorICAgICAgICAgICAgZWxpZiBUcnVlOgorICAgICAgICAgICAgICAgIGkgPSAwCisgICAg
ICAgICAgICAgICAgdGVzdCA9IFsoIiclcyciICUgYykgZm9yIGMgaW4ga10KKworICAgICAgICAg
ICAgICAgIGNvbXBhcmlzb24gPSAoIkNPTVBBUkVfQ0hBUkFDVEVSUyVkKGNvZGUgKyAlZCwgIiAl
IChsZW4odGVzdCksIHJvb3RJbmRleCkpICsgIiwiLmpvaW4odGVzdCkrIikiCisgICAgICAgICAg
ICAgICAgaWYgaXRlbUNvdW50ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHByaW50KHN0ciAr
IGV4dHJhSW5kZW50ICsgImlmICgiICsgY29tcGFyaXNvbiArICIpIHsiKQorICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KHN0ciArIGV4dHJhSW5kZW50ICsg
ImVsc2UgaWYgKCIgKyBjb21wYXJpc29uICsgIikgeyIpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICAgICAgdGVzdCA9ICIiLmpvaW4oWygnXFww
JXMnICUgYykgZm9yIGMgaW4ga10pCisKKyAgICAgICAgICAgICAgICBjb21wYXJpc29uID0gJ21l
bWNtcChjb2RlICsgJWQsICIlcyIsICVkICogc2l6ZW9mKFVDaGFyKSkgPT0gMCcgJSAocm9vdElu
ZGV4LCB0ZXN0LCBsZW4oaykpCisgICAgICAgICAgICAgICAgaWYgaXRlbUNvdW50ID09IDA6Cisg
ICAgICAgICAgICAgICAgICAgIHByaW50KHN0ciArIGV4dHJhSW5kZW50ICsgImlmICgiICsgY29t
cGFyaXNvbiArICIpIHsiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
ICAgIHByaW50KHN0ciArIGV4dHJhSW5kZW50ICsgImVsc2UgaWYgKCIgKyBjb21wYXJpc29uICsg
IikgeyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgdHJp
ZS5wcmludFN1YlRyZWVBc0MoaW5kZW50ICsgNCArIGxlbihleHRyYUluZGVudCkpCisgICAgICAg
ICAgICBpdGVtQ291bnQgPSBpdGVtQ291bnQgKyAxCisgICAgICAgICAgICBwcmludChzdHIgKyBl
eHRyYUluZGVudCArICJ9IikKKyAgICAgICAgICAgIAorICAgICAgICBpZiBsZW4oZGVmYXVsdHMp
ICE9IGxlbihzZWxmLmtleXMpOgorICAgICAgICAgICAgcHJpbnQoc3RyICsgIn0iKQorICAgICAg
ICAgICAgCisgICAgZGVmIHByaW50QXNDKHNlbGYpOgorICAgICAgICBwcmludCgic3RhdGljIGNv
bnN0IGludCBtYXhUb2tlbkxlbmd0aCA9IDEyOyIpCisgICAgICAgIHByaW50KCJjb25zdCBwdHJk
aWZmX3QgcmVtYWluaW5nID0gbV9jb2RlRW5kIC0gbV9jb2RlOyIpCisgICAgICAgIHByaW50KCJp
ZiAoKHJlbWFpbmluZyA+PSBtYXhUb2tlbkxlbmd0aCkgJiYgIShsZXhUeXBlICYgSWdub3JlUmVz
ZXJ2ZWRXb3JkcykpIHsiKTsKKyAgICAgICAgcHJpbnQoIiAgICBjb25zdCBVQ2hhciogY29kZSA9
IG1fY29kZTsiKQorICAgICAgICBzZWxmLnByaW50U3ViVHJlZUFzQyg0KTsKKyAgICAgICAgcHJp
bnQoIiAgICBlbmQ6OyIpCisgICAgICAgIHByaW50KCJ9IikKKwora2V5d29yZHMgPSBwYXJzZUtl
eXdvcmRzKGtleXdvcmRzVGV4dCk7Cit0cmllID0gVHJpZSgiIikKK2ZvciBrLCB2IGluIGtleXdv
cmRzOgorICAgIHRyaWUuaW5zZXJ0KGssIHYpCit0cmllLmNvYWxlc2NlKCkKK3RyaWUuZmlsbE91
dCgpOwordHJpZS5wcmludEFzQygpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5j
cHAKaW5kZXggYTdkOGNiOS4uNTlkMzIzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9MZXhlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9M
ZXhlci5jcHAKQEAgLTIyMSw2ICsyMjEsMjMgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0
IHR5cGVzT2ZBU0NJSUNoYXJhY3RlcnNbMTI4XSA9IHsKIC8qIDEyNyAtIERlbGV0ZSAgICAgICAg
ICAgICAqLyBDaGFyYWN0ZXJJbnZhbGlkLAogfTsKIAorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQz
MihhLCBiKSAoKCgodWludDMyX3QpKGIpKSA8PCAxNikgKyAodWludDMyX3QpKGEpKQorI2RlZmlu
ZSBDSEFSUVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSAoKCgodWludDY0X3QpKENIQVJQQUlSX1RP
VUlOVDMyKGMsIGQpKSkgPDwgMzIpICsgQ0hBUlBBSVJfVE9VSU5UMzIoYSwgYikpCisjZGVmaW5l
IENPTVBBUkVfQ0hBUkFDVEVSUzIoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSBcCisgICAgKCgodWlu
dDMyX3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlBBSVJfVE9VSU5UMzIoY2hhcjEsIGNoYXIyKSkK
KyNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTMyhhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIz
KSBcCisgICAgKENPTVBBUkVfQ0hBUkFDVEVSUzIoYWRkcmVzcywgY2hhcjEsIGNoYXIyKSAmJiAo
KGFkZHJlc3MpWzJdID09IChjaGFyMykpKQorI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM0KGFk
ZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcCisgICAgKCgodWludDY0X3QqKShh
ZGRyZXNzKSlbMF0gPT0gQ0hBUlFVQURfVE9VSU5UNjQoY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hh
cjQpKQorI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM1KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwg
Y2hhcjMsIGNoYXI0LCBjaGFyNSkgXAorICAgIChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3Ms
IGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSAmJiAoKGFkZHJlc3MpWzRdID09IChjaGFyNSkp
KQorI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlM2KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hh
cjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYpIFwKKyAgICAoQ09NUEFSRV9DSEFSQUNURVJTNChhZGRy
ZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV9DSEFSQUNURVJTMihh
ZGRyZXNzICsgNCwgY2hhcjUsIGNoYXI2KSkKKyNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTNyhh
ZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUsIGNoYXI2LCBjaGFyNykg
XAorICAgIChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMs
IGNoYXI0KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlMzKGFkZHJlc3MgKyA0LCBjaGFyNSwgY2hhcjYs
IGNoYXI3KSkKKyNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTOChhZGRyZXNzLCBjaGFyMSwgY2hh
cjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hhcjgpIFwKKyAgICAoQ09N
UEFSRV9DSEFSQUNURVJTNChhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYg
Q09NUEFSRV9DSEFSQUNURVJTNChhZGRyZXNzICsgNCwgY2hhcjUsIGNoYXI2LCBjaGFyNywgY2hh
cjgpKQorCiBMZXhlcjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9p
c1JlcGFyc2luZyhmYWxzZSkKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQpAQCAtMjcx
LDE2ICsyODgsMjEgQEAgdm9pZCBMZXhlcjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIFBhcnNlckFyZW5hJiBhcmVuYSkKICAgICBBU1NFUlQoY3VycmVudE9mZnNldCgpID09IHNv
dXJjZS5zdGFydE9mZnNldCgpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjpzaGlm
dCgpCit0ZW1wbGF0ZSA8aW50IHNoaWZ0QW1vdW50PiBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6
OmludGVybmFsU2hpZnQoKQogewogICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVsc2Ugc2VxdWVu
Y2UKICAgICBBU1NFUlQobV9jdXJyZW50ICE9IC0xKTsKICAgICBtX2N1cnJlbnQgPSAtMTsKLSAg
ICArK21fY29kZTsKKyAgICBtX2NvZGUgKz0gc2hpZnRBbW91bnQ7CiAgICAgaWYgKExJS0VMWSht
X2NvZGUgPCBtX2NvZGVFbmQpKQogICAgICAgICBtX2N1cnJlbnQgPSAqbV9jb2RlOwogfQogCitB
TFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6OnNoaWZ0KCkKK3sKKyAgICBpbnRlcm5hbFNoaWZ0PDE+
KCk7Cit9CisKIEFMV0FZU19JTkxJTkUgaW50IExleGVyOjpwZWVrKGludCBvZmZzZXQpCiB7CiAg
ICAgLy8gT25seSB1c2UgaWYgbmVjZXNzYXJ5CkBAIC00MDEsNiArNDIzLDcgQEAgaW5saW5lIHZv
aWQgTGV4ZXI6OnJlY29yZDE2KGludCBjKQogCiB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVhdGVJ
ZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpwYXJzZUlkZW50aWZp
ZXIoSlNUb2tlbkRhdGEqIGx2YWxwLCB1bnNpZ25lZCBsZXhUeXBlKQogeworI2luY2x1ZGUgIktl
eXdvcmRMb29rdXAuaCIKICAgICBib29sIGJ1ZmZlclJlcXVpcmVkID0gZmFsc2U7CiAgICAgY29u
c3QgVUNoYXIqIGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKICAgICBpbnQg
aWRlbnRpZmllckxlbmd0aDsKQEAgLTQ1Miw4ICs0NzUsMTIgQEAgdGVtcGxhdGUgPGJvb2wgc2hv
dWxkQ3JlYXRlSWRlbnRpZmllcj4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjo6cGFy
c2VJZGUKICAgICBpZiAoTElLRUxZKCFidWZmZXJSZXF1aXJlZCAmJiAhKGxleFR5cGUgJiBJZ25v
cmVSZXNlcnZlZFdvcmRzKSkpIHsKICAgICAgICAgQVNTRVJUKHNob3VsZENyZWF0ZUlkZW50aWZp
ZXIpOwogICAgICAgICAvLyBLZXl3b3JkcyBtdXN0IG5vdCBiZSByZWNvZ25pemVkIGlmIHRoZXJl
IHdhcyBhbiBcdVhYWFggaW4gdGhlIGlkZW50aWZpZXIuCi0gICAgICAgIGNvbnN0IEhhc2hFbnRy
eSogZW50cnkgPSBtX2tleXdvcmRUYWJsZS5lbnRyeShtX2dsb2JhbERhdGEsICppZGVudCk7Ci0g
ICAgICAgIHJldHVybiBlbnRyeSA/IHN0YXRpY19jYXN0PEpTVG9rZW5UeXBlPihlbnRyeS0+bGV4
ZXJWYWx1ZSgpKSA6IElERU5UOworICAgICAgICBpZiAocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5n
dGgpIHsKKyAgICAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBtX2tleXdvcmRUYWJs
ZS5lbnRyeShtX2dsb2JhbERhdGEsICppZGVudCk7CisgICAgICAgICAgICBBU1NFUlQoKHJlbWFp
bmluZyA8IG1heFRva2VuTGVuZ3RoKSB8fCAhZW50cnkpOworICAgICAgICAgICAgcmV0dXJuIGVu
dHJ5ID8gc3RhdGljX2Nhc3Q8SlNUb2tlblR5cGU+KGVudHJ5LT5sZXhlclZhbHVlKCkpIDogSURF
TlQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElERU5UOwogICAgIH0KIAogICAgIG1fYnVm
ZmVyMTYucmVzaXplKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9MZXhlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCmluZGV4IDgz
YzI5MDYuLmNmYWJmODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TGV4ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKQEAgLTEx
Myw2ICsxMTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgbGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3Q7CiAKKyAgICAgICAgdGVtcGxhdGUg
PGludCBzaGlmdEFtb3VudD4gdm9pZCBpbnRlcm5hbFNoaWZ0KCk7CiAgICAgICAgIHRlbXBsYXRl
IDxib29sIHNob3VsZEJ1aWxkSWRlbnRpZmllcnM+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUg
cGFyc2VJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgdW5zaWduZWQpOwogICAgICAgICB0ZW1wbGF0
ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IEFMV0FZU19JTkxJTkUgYm9vbCBwYXJzZVN0cmlu
ZyhKU1Rva2VuRGF0YSogbHZhbHAsIGJvb2wgc3RyaWN0TW9kZSk7CiAgICAgICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBwYXJzZUhleChkb3VibGUmIHJldHVyblZhbHVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95973</attachid>
            <date>2011-06-03 15:13:00 -0700</date>
            <delta_ts>2011-06-03 15:57:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61913-20110603151259.patch</filename>
            <type>text/plain</type>
            <size>22914</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgwNTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCA3NTRkMjFiYzljMzhlYzBjZTA5Y2IyN2U2ZDFjOTVjMWQzNWYyNThhLi4yMGQ5Mjcw
ZWFiNTlkZDg0MDQ3Y2NkY2IzNjg0YmU0YmIwYjY2OGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC0yMTksNiArMjE5LDEzIEBAIEFERF9DVVNUT01fQ09NTUFORCgKIEFE
RF9TT1VSQ0VfREVQRU5ERU5DSUVTKCR7SkFWQVNDUklQVENPUkVfRElSfS95YXJyL1lhcnJQYXR0
ZXJuLmNwcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L1JlZ0V4cEppdFRh
Ymxlcy5oKQogCiAKKyNHRU5FUkFUT1I6ICJLZXl3b3JkTG9va3VwLmgiOiBrZXl3b3JkIGRlY2lz
aW9uIHRyZWUgdXNlZCBieSB0aGUgbGV4ZXIKK0FERF9DVVNUT01fQ09NTUFORCgKKyAgICBPVVRQ
VVQgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9LZXl3b3JkTG9va3VwLmgK
KyAgICBNQUlOX0RFUEVOREVOQ1kgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0tleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHkKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SkFWQVNDUklQ
VENPUkVfRElSfS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICR7SkFWQVNDUklQVENPUkVfRElS
fS9wYXJzZXIvS2V5d29yZHMudGFibGUgPiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L0tleXdvcmRMb29rdXAuaAorICAgIFZFUkJBVElNKQorQUREX1NPVVJDRV9ERVBFTkRF
TkNJRVMoJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3BhcnNlci9MZXhlci5jcHAgJHtERVJJVkVEX1NP
VVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9LZXl3b3JkTG9va3VwLmgpCiAKIElGIChXVEZfQ1BV
X0FSTSkKICAgICBMSVNUKEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwppbmRleCBiMTRhM2YxOWFmYmY2ODdiZGQ4YmQ3MTdkZjk2YWNlYjRiM2Q1OTQ5
Li40ZDZhYjA3YzBlY2E3M2ExOTZiYzI1ZDBhODBjNWRlNmM2OTdhNThlIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wNi0wMyAgT2xpdmVyIEh1bnQgIDxv
bGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEltcHJvdmUga2V5d29yZCBsb29rdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxOTEzCisKKyAgICAgICAgUmF0aGVyIHRoYW4gZG9p
bmcgbXVsdGlwbGUgaGFzaCBsb29rdXBzIGFzIHdlIGN1cnJlbnRseQorICAgICAgICBkbyB3aGVu
IHRyeWluZyB0byBpZGVudGlmeSBrZXl3b3JkcyB3ZSBub3cgdXNlIGFuIAorICAgICAgICBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBkZWNpc2lvbiB0cmVlIChlc3NlbnRpYWxseSBpdCdzCisgICAg
ICAgIGEgaGFyZCBjb2RlZCBwYXRyaWNpYSB0cmllKS4gIFdlIHN0aWxsIHVzZSB0aGUgcmVndWxh
cgorICAgICAgICBsb29rdXAgdGFibGUgZm9yIHRoZSBsYXN0IGZldyBjaGFyYWN0ZXJzIG9mIGFu
IGlucHV0IGFzCisgICAgICAgIHRoaXMgYWxsb3dzIHVzIHRvIGNvbXBsZXRlbHkgc2tpcCBhbGwg
Ym91bmRzIGNoZWNrcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cC9KYXZhU2Ny
aXB0Q29yZS5neXA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBtYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoOgorICAgICAgICAqIHBhcnNlci9MZXhl
ci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyOjppbnRlcm5hbFNoaWZ0KToKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnBhcnNlSWRlbnRpZmllcik6
CisgICAgICAgICogcGFyc2VyL0xleGVyLmg6CisKIDIwMTEtMDYtMDMgIFNpZGRoYXJ0aCBNYXRo
dXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBC
ZW5qYW1pbiBQb3VsYWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQppbmRleCBkNzM4Mjg5NDM1YjY5YTkzZjI4YTAxZGVkNTNlNzE4Mzc1ZWFiOWQ3Li44MGFmNGI2
ZDUwNmQ1NTFhMDk2YmMyNzJiMmVhM2VjZTQ3MTZmYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNDYsNiArNDYsNyBAQCBhbGwgOiBcCiAgICAgSmF2
YVNjcmlwdENvcmUuSlNWQUxVRTMyXzY0LmV4cCBcCiAgICAgSmF2YVNjcmlwdENvcmUuSlNWQUxV
RTY0LmV4cCBcCiAgICAgSlNHbG9iYWxPYmplY3QubHV0LmggXAorICAgIEtleXdvcmRMb29rdXAu
aCBcCiAgICAgTGV4ZXIubHV0LmggXAogICAgIE1hdGhPYmplY3QubHV0LmggXAogICAgIE51bWJl
ckNvbnN0cnVjdG9yLmx1dC5oIFwKQEAgLTc2LDYgKzc3LDkgQEAgZG9jcy9ieXRlY29kZS5odG1s
OiBtYWtlLWJ5dGVjb2RlLWRvY3MucGwgSW50ZXJwcmV0ZXIuY3BwCiBSZWdFeHBKaXRUYWJsZXMu
aDogY3JlYXRlX3JlZ2V4X3RhYmxlcwogCXB5dGhvbiAkXiA+ICRACiAKK0tleXdvcmRMb29rdXAu
aDogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSBLZXl3b3Jkcy50YWJsZQorCXB5dGhvbiAkXiA+
ICRACisKICMgZXhwb3J0IGZpbGVzCiAKIEphdmFTY3JpcHRDb3JlLkpTVkFMVUUzMl82NC5leHA6
IEphdmFTY3JpcHRDb3JlLmV4cCBKYXZhU2NyaXB0Q29yZS5KU1ZBTFVFMzJfNjRvbmx5LmV4cApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLnBybyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5wcm8KaW5kZXggMDRhN2E1NDcwMDkz
YTAwZjllZWM1N2EzMWNhZDFmNTk3NjEwYTk2NC4uMDk4OTYwNTE0OThlNDQyN2E1YjllYzI3OTU0
NThjMmFjMTFmMDUyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLnBybworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMucHJv
CkBAIC05OSwzICs5OSwxMCBAQCByZXRnZW4ud2tTY3JpcHQgPSAkJFBXRC9jcmVhdGVfcmVnZXhf
dGFibGVzCiByZXRnZW4uaW5wdXQgPSByZXRnZW4ud2tTY3JpcHQKIHJldGdlbi5jb21tYW5kcyA9
IHB5dGhvbiAkJHJldGdlbi53a1NjcmlwdCA+ICR7UU1BS0VfRklMRV9PVVR9CiBhZGRFeHRyYUNv
bXBpbGVyKHJldGdlbikKKworI0dFTkVSQVRPUjogIktleXdvcmRMb29rdXAuaCI6IGRlY2lzaW9u
IHRyZWUgdXNlZCBieSB0aGUgbGV4ZXIKK2tsZ2VuLm91dHB1dCA9ICQkSlNDX0dFTkVSQVRFRF9T
T1VSQ0VTX0RJUi9LZXl3b3JkTG9va3VwLmgKK2tsZ2VuLndrU2NyaXB0ID0gJCRQV0QvS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weSAKK2tsZ2VuLmlucHV0ID0gS0VZV09SRExVVF9GSUxFUwora2xn
ZW4uY29tbWFuZHMgPSBweXRob24gJCRrbGdlbi53a1NjcmlwdCAke1FNQUtFX0ZJTEVfTkFNRX0g
PiAke1FNQUtFX0ZJTEVfT1VUfQorYWRkRXh0cmFDb21waWxlcihrbGdlbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3NDA4NTA0YTViOTJmMGViNDk4NTUxZWFlODAyZTQ0
OGU1ZDNlZTgzLi5jNzEwZDJhYmE0MjdkZWUzY2E0YzQyOWM0MjZlM2Q4OTA5NWY3MDZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03OSw2ICs3OSw5IEBAIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS8lLmx1dC5oOiAkKHNyY2RpcikvU291cmNlL0phdmFTY3JpcHRDb3JlL2Ny
ZWF0ZV9oYXNoX3RhYmxlCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvUmVnRXhwSml0VGFibGVzLmg6
ICQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY3JlYXRlX3JlZ2V4X3RhYmxlcwogCSQo
QU1fVl9HRU4pJChQWVRIT04pICReID4gJEAKIAorU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdv
cmRMb29rdXAuaDogJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3Vw
R2VuZXJhdG9yLnB5ICQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0tleXdv
cmRzLnRhYmxlCisJJChBTV9WX0dFTikkKFBZVEhPTikgJF4gPiAkQAorCiBqc2M6ICQoamF2YXNj
cmlwdGNvcmVfYnVpbHRfbm9zb3VyY2VzKSBQcm9ncmFtcy9qc2MkKEVYRUVYVCkKIAogYmluX1BS
T0dSQU1TICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5neXAvSmF2YVNjcmlwdENvcmUuZ3lwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXAKaW5kZXggYjA0YzU5YWI2MGVhNGM3MmFm
Y2YxYjZhMmNlNDkyMTVjYmM1YjM1My4uZDg4NmE2Mjg1OWQ4NmYzOTk5OGYxZjk1NGU4ZGRlNzYy
ODNlODhhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lmd5cC9KYXZhU2NyaXB0Q29yZS5neXAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXAKQEAgLTIxNCw2ICsyMTQsMTkgQEAKICAg
ICAgICAgICBdLAogICAgICAgICAgICdhY3Rpb24nOiBbJ3B5dGhvbicsICc8QChfaW5wdXRzKScs
ICc8QChfYXJndW1lbnRzKScsICc8QChfb3V0cHV0cyknXSwKICAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdrbGdlbicsCisgICAgICAgICAgJ2lucHV0cyc6
IFsKKyAgICAgICAgICAgICcuLi9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5JywKKyAgICAgICAg
ICAgICcuLi9wYXJzZXIvS2V5d29yZHMudGFibGUnCisgICAgICAgICAgXSwKKyAgICAgICAgICAn
YXJndW1lbnRzJzogWworICAgICAgICAgIF0sCisgICAgICAgICAgJ291dHB1dHMnOiBbCisgICAg
ICAgICAgICAnPChJTlRFUk1FRElBVEVfRElSKS9LZXl3b3JkTG9va3VwLmgnLAorICAgICAgICAg
IF0sCisgICAgICAgICAgJ2FjdGlvbic6IFsncHl0aG9uJywgJzxAKF9pbnB1dHMpJywgJzxAKF9h
cmd1bWVudHMpJywgJzxAKF9vdXRwdXRzKSddLAorICAgICAgICB9LAogICAgICAgXSwKICAgICAg
ICdpbmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICc8KElOVEVSTUVESUFURV9ESVIpJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWM1Yjg0NGM2MDliNTNiZWUxYzZiOTYyZDMwM2Y0
YzNkNjUwM2MyZi4uNTUwNGIwNDhkZTdkOTNmMjBlMThmYjc5NjY2NjNkYWQ3NmQ3MDJhMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM4MSw2ICszODEsNyBAQAogCQlBNzI3MDFC
OTBEQURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0aW9uSGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8q
IEV4Y2VwdGlvbkhlbHBlcnMuaCAqLzsgfTsKIAkJQTcyN0ZGNkIwREEzMDkyMjAwRTU0OEQ3IC8q
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTcyN0ZGNjYwREEzMDUzQjAwRTU0OEQ3IC8qIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IuY3BwICovOyB9OwogCQlBNzI4MEEyODExNTU3RTMwMDBENTY5NTcgLyogSlNP
YmplY3RSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNPYmplY3RSZWZQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTcyRkZE
NjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzIyNUNEMTM5OTg0OUMwMEZGMTY2MiAvKiBL
ZXl3b3JkTG9va3VwLmggKi87IH07CiAJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmggKi87IH07CiAJCUE3MzBCNjEzMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZh
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzMwQjYxMTEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovOyB9
OwogCQlBNzMxQjI1QTEzMDA5Mzg4MDA0MEE3RkEgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1
Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CkBAIC0xMTE5LDYg
KzExMjAsOCBAQAogCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9j
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2Nh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjQ4REI2MEVFNzRDRkMwMERD
QkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDMjI1Q0Mx
Mzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0MyMjVDRDEzOTk4NDlDMDBGRjE2NjIgLyogS2V5
d29yZExvb2t1cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLZXl3b3JkTG9v
a3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzQwQzA3MTMwQjA1N0QwMEQw
MDJBMSAvKiBCbG9ja1N0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJs
b2NrU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDNDBDMDgxMzBCMDU3
RDAwRDAwMkExIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTZW50aW5lbExpbmtlZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdDNDBDMDkxMzBCMDU3RDAwRDAwMkExIC8qIFNpbmdseUxpbmtlZExpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2luZ2x5TGlua2VkTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM3NCw2ICsxMzc3LDcgQEAKIAkJCWNoaWxkcmVuID0g
KAogCQkJCUE3MThGODIxMTE3OEVCNEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFibGVzICov
LAogCQkJCTkzN0I2M0NDMDlFNzY2RDIwMEE2NzFERCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICov
LAorCQkJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9y
LnB5ICovLAogCQkJCUY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSAqLywKIAkJCQkxNEI4RUNBNjBBNTY1Mzk4MDA2MkJFNTQgLyogSmF2YVNjcmlwdENvcmUuZXhw
ICovLAogCQkJCTg2N0ZDMzVGMTFCNzYzOTUwMDI1MTA1RSAvKiBKYXZhU2NyaXB0Q29yZS5KU1ZB
TFVFMzJfNjRvbmx5LmV4cCAqLywKQEAgLTE2MDgsNiArMTYxMiw3IEBACiAJCQkJQkNEMjAzRTcw
RTE3MThGNDAwMkM3RTgyIC8qIERhdGVQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJQkM4MTQ5QUYx
MkY4OUY1MzAwN0IyQzMyIC8qIEhlYWRlckRldGVjdGlvbi5oICovLAogCQkJCUJDODdDREI4MTA3
MTJBQ0EwMDA2MTRDRiAvKiBKU09OT2JqZWN0Lmx1dC5oICovLAorCQkJCUE3QzIyNUNEMTM5OTg0
OUMwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwLmggKi8sCiAJCQkJQkMxOEM1MkQwRTE2RkNFMTAw
QjM0NDYwIC8qIExleGVyLmx1dC5oICovLAogCQkJCUJDMThDNTI5MEUxNkZDQzIwMEIzNDQ2MCAv
KiBNYXRoT2JqZWN0Lmx1dC5oICovLAogCQkJCUJDMjY4MEU2MEUxNkQ1MjMwMEEwNkU5MiAvKiBO
dW1iZXJDb25zdHJ1Y3Rvci5sdXQuaCAqLywKQEAgLTI1NDcsNiArMjU1Miw3IEBACiAJCQkJNjUx
RENBMDQxMzZBNkZFRjAwRjc0MTk0IC8qIFBhc3NUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QkIwOUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEgLyogS2V5d29yZExvb2t1cC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3Vw
R2VuZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlYzAzZTVkZmVlNTRmNzE2NDgzMjUzNWIzZGQzZTI4
ZGQ0MTVmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weQpAQCAtMCwwICsxLDE4MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
IyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisjIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHN5cworaW1wb3J0IHN0cmluZworaW1wb3J0IG9wZXJhdG9yCisKK2tleXdvcmRzVGV4dCA9
IG9wZW4oc3lzLmFyZ3ZbMV0pLnJlYWQoKQorCisjIE9ic2VydmVkIHdlaWdodHMgb2YgdGhlIG1v
c3QgY29tbW9uIGtleXdvcmRzLCByb3VuZGVkIHRvIDIucy5kCitrZXlXb3JkV2VpZ2h0cyA9IHsK
KyAgICAiY2F0Y2giOiAwLjAxLAorICAgICJ0cnkiOiAwLjAxLAorICAgICJ3aGlsZSI6IDAuMDEs
CisgICAgImNhc2UiOiAwLjAxLAorICAgICJicmVhayI6IDAuMDEsCisgICAgIm5ldyI6IDAuMDEs
CisgICAgImluIjogMC4wMSwKKyAgICAidHlwZW9mIjogMC4wMiwKKyAgICAidHJ1ZSI6IDAuMDIs
CisgICAgImZhbHNlIjogMC4wMiwKKyAgICAiZm9yIjogMC4wMywKKyAgICAibnVsbCI6IDAuMDMs
CisgICAgImVsc2UiOiAwLjAzLAorICAgICJyZXR1cm4iOiAwLjEzLAorICAgICJ2YXIiOiAwLjEz
LAorICAgICJpZiI6IDAuMTYsCisgICAgImZ1bmN0aW9uIjogMC4xOCwKKyAgICAidGhpcyI6IDAu
MTgsCit9CisKKworZGVmIGFsbFdoaXRlc3BhY2Uoc3RyKToKKyAgICBmb3IgYyBpbiBzdHI6Cisg
ICAgICAgIGlmIG5vdChjIGluIHN0cmluZy53aGl0ZXNwYWNlKToKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKworZGVmIHBhcnNlS2V5d29yZHMoa2V5d29yZHNU
ZXh0KToKKyAgICBsaW5lcyA9IGtleXdvcmRzVGV4dC5zcGxpdCgiXG4iKQorICAgIGxpbmVzID0g
W2xpbmUuc3BsaXQoIiMiKVswXSBmb3IgbGluZSBpbiBsaW5lc10KKyAgICBsaW5lcyA9IFtsaW5l
IGZvciBsaW5lIGluIGxpbmVzIGlmIChub3QgYWxsV2hpdGVzcGFjZShsaW5lKSldCisgICAgbmFt
ZSA9IGxpbmVzWzBdLnNwbGl0KCkKKyAgICB0ZXJtaW5hdG9yID0gbGluZXNbLTFdCisgICAgaWYg
bm90IG5hbWVbMF0gPT0gIkBiZWdpbiI6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZXhwZWN0
ZWQgZGVzY3JpcHRpb24gYmVnaW5uaW5nIHdpdGggQGJlZ2luIikKKyAgICBpZiBub3QgdGVybWlu
YXRvciA9PSAiQGVuZCI6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZXhwZWN0ZWQgZGVzY3Jp
cHRpb24gZW5kaW5nIHdpdGggQGVuZCIpCisKKyAgICBsaW5lcyA9IGxpbmVzWzE6LTFdICAjIHRy
aW0gb2ZmIHRoZSBvbGQgaGVhZGluZworICAgIHJldHVybiBbbGluZS5zcGxpdCgpIGZvciBsaW5l
IGluIGxpbmVzXQorCisKK2RlZiBtYWtlUGFkZGluZyhzaXplKToKKyAgICBzdHIgPSAiIgorICAg
IGZvciBpIGluIHJhbmdlKHNpemUpOgorICAgICAgICBzdHIgPSBzdHIgKyAiICIKKyAgICByZXR1
cm4gc3RyCisKKworY2xhc3MgVHJpZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJlZml4KToK
KyAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXgKKyAgICAgICAgc2VsZi5rZXlzID0ge30KKyAg
ICAgICAgc2VsZi52YWx1ZSA9IE5vbmUKKworICAgIGRlZiBpbnNlcnQoc2VsZiwga2V5LCB2YWx1
ZSk6CisgICAgICAgIGlmIGxlbihrZXkpID09IDA6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0g
dmFsdWUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgKGtleVswXSBpbiBzZWxm
LmtleXMpOgorICAgICAgICAgICAgc2VsZi5rZXlzW2tleVswXV0gPSBUcmllKGtleVswXSkKKyAg
ICAgICAgc2VsZi5rZXlzW2tleVswXV0uaW5zZXJ0KGtleVsxOl0sIHZhbHVlKQorCisgICAgZGVm
IGNvYWxlc2NlKHNlbGYpOgorICAgICAgICBrZXlzID0ge30KKyAgICAgICAgZm9yIGssIHYgaW4g
c2VsZi5rZXlzLml0ZW1zKCk6CisgICAgICAgICAgICB0ID0gdi5jb2FsZXNjZSgpCisgICAgICAg
ICAgICBrZXlzW3QucHJlZml4XSA9IHQKKyAgICAgICAgc2VsZi5rZXlzID0ga2V5cworICAgICAg
ICBpZiBzZWxmLnZhbHVlICE9IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAg
ICBpZiBsZW4oc2VsZi5rZXlzKSAhPSAxOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAg
ICAgKHByZWZpeCwgc3VmZml4KSA9IHNlbGYua2V5cy5pdGVtcygpWzBdCisgICAgICAgIHJlcyA9
IFRyaWUoc2VsZi5wcmVmaXggKyBwcmVmaXgpCisgICAgICAgIHJlcy52YWx1ZSA9IHN1ZmZpeC52
YWx1ZQorICAgICAgICByZXMua2V5cyA9IHN1ZmZpeC5rZXlzCisgICAgICAgIHJldHVybiByZXMK
KworICAgIGRlZiBmaWxsT3V0KHNlbGYsIHByZWZpeD0iIik6CisgICAgICAgIHNlbGYuZnVsbFBy
ZWZpeCA9IHByZWZpeCArIHNlbGYucHJlZml4CisgICAgICAgIHdlaWdodCA9IDAKKyAgICAgICAg
aWYgc2VsZi5mdWxsUHJlZml4IGluIGtleVdvcmRXZWlnaHRzOgorICAgICAgICAgICAgd2VpZ2h0
ID0gd2VpZ2h0ICsga2V5V29yZFdlaWdodHNbc2VsZi5mdWxsUHJlZml4XQorICAgICAgICBzZWxm
LnNlbGZXZWlnaHQgPSB3ZWlnaHQKKyAgICAgICAgZm9yIHRyaWUgaW4gc2VsZi5rZXlzLnZhbHVl
cygpOgorICAgICAgICAgICAgdHJpZS5maWxsT3V0KHNlbGYuZnVsbFByZWZpeCkKKyAgICAgICAg
ICAgIHdlaWdodCA9IHdlaWdodCArIHRyaWUud2VpZ2h0CisgICAgICAgIHNlbGYua2V5cyA9IFso
dHJpZS5wcmVmaXgsIHRyaWUpIGZvciB0cmllIGluIHNvcnRlZChzZWxmLmtleXMudmFsdWVzKCks
IGtleT1vcGVyYXRvci5hdHRyZ2V0dGVyKCd3ZWlnaHQnKSwgcmV2ZXJzZT1UcnVlKV0KKyAgICAg
ICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHQKKworICAgIGRlZiBwcmludFN1YlRyZWVBc0Moc2VsZiwg
aW5kZW50KToKKyAgICAgICAgc3RyID0gbWFrZVBhZGRpbmcoaW5kZW50KQorCisgICAgICAgIGlm
IHNlbGYudmFsdWUgIT0gTm9uZToKKyAgICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIWlzSWRl
bnRQYXJ0KGNvZGVbJWRdKSkgeyIgJSAobGVuKHNlbGYuZnVsbFByZWZpeCkpKQorICAgICAgICAg
ICAgcHJpbnQoc3RyICsgIiAgICBpbnRlcm5hbFNoaWZ0PCVkLCBmYWxzZT4oKTsiICUgbGVuKHNl
bGYuZnVsbFByZWZpeCkpCisgICAgICAgICAgICBwcmludChzdHIgKyAiICAgIHJldHVybiAiICsg
c2VsZi52YWx1ZSArICI7IikKKyAgICAgICAgICAgIHByaW50KHN0ciArICJ9IikKKyAgICAgICAg
cm9vdEluZGV4ID0gbGVuKHNlbGYuZnVsbFByZWZpeCkKKyAgICAgICAgaXRlbUNvdW50ID0gMAor
ICAgICAgICBmb3IgaywgdHJpZSBpbiBzZWxmLmtleXM6CisgICAgICAgICAgICBiYXNlSW5kZXgg
PSByb290SW5kZXgKKyAgICAgICAgICAgIGlmIChiYXNlSW5kZXggPiAwKSBhbmQgKChsZW4oaykg
JSAyKSA9PSAxKSBhbmQgKGxlbihrKSA+IDIpIGFuZCAobGVuKGspICE9IDUpOgorICAgICAgICAg
ICAgICAgIGJhc2VJbmRleCA9IGJhc2VJbmRleCAtIDEKKyAgICAgICAgICAgICAgICBrID0gdHJp
ZS5mdWxsUHJlZml4W2Jhc2VJbmRleF0gKyBrCisgICAgICAgICAgICB0ZXN0ID0gWygiJyVzJyIg
JSBjKSBmb3IgYyBpbiBrXQorICAgICAgICAgICAgaWYgbGVuKHRlc3QpID09IDE6CisgICAgICAg
ICAgICAgICAgY29tcGFyaXNvbiA9ICJjb2RlWyVkXSA9PSAlcyIgJSAoYmFzZUluZGV4LCB0ZXN0
WzBdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYXNlID0gImNvZGUiCisg
ICAgICAgICAgICAgICAgaWYgYmFzZUluZGV4ID4gMDoKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZSA9ICJjb2RlICsgJWQiICUgYmFzZUluZGV4CisgICAgICAgICAgICAgICAgY29tcGFyaXNvbiA9
ICgiQ09NUEFSRV9DSEFSQUNURVJTJWQoJXMsICIgJSAobGVuKHRlc3QpLCBiYXNlKSkgKyAiLCAi
LmpvaW4odGVzdCkgKyAiKSIKKyAgICAgICAgICAgIGlmIGl0ZW1Db3VudCA9PSAwOgorICAgICAg
ICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7IikKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoc3RyICsgImVsc2UgaWYgKCIgKyBj
b21wYXJpc29uICsgIikgeyIpCisKKyAgICAgICAgICAgIHRyaWUucHJpbnRTdWJUcmVlQXNDKGlu
ZGVudCArIDQpCisgICAgICAgICAgICBpdGVtQ291bnQgPSBpdGVtQ291bnQgKyAxCisgICAgICAg
ICAgICBwcmludChzdHIgKyAifSIpCisKKyAgICBkZWYgbWF4TGVuZ3RoKHNlbGYpOgorICAgICAg
ICBtYXggPSBsZW4oc2VsZi5mdWxsUHJlZml4KQorICAgICAgICBmb3IgKF8sIHRyaWUpIGluIHNl
bGYua2V5czoKKyAgICAgICAgICAgIGwgPSB0cmllLm1heExlbmd0aCgpCisgICAgICAgICAgICBp
ZiBsID4gbWF4OgorICAgICAgICAgICAgICAgIG1heCA9IGwKKyAgICAgICAgcmV0dXJuIG1heAor
CisgICAgZGVmIHByaW50QXNDKHNlbGYpOgorICAgICAgICAjIG1heCBsZW5ndGggKyAxIHNvIHdl
IGRvbid0IG5lZWQgdG8gZG8gYW55IGJvdW5kcyBjaGVja2luZyBhdCBhbGwKKyAgICAgICAgcHJp
bnQoInN0YXRpYyBjb25zdCBpbnQgbWF4VG9rZW5MZW5ndGggPSAlZDsiICUgKHNlbGYubWF4TGVu
Z3RoKCkgKyAxKSkKKyAgICAgICAgcHJpbnQoImNvbnN0IHB0cmRpZmZfdCByZW1haW5pbmcgPSBt
X2NvZGVFbmQgLSBtX2NvZGU7IikKKyAgICAgICAgcHJpbnQoImlmICgocmVtYWluaW5nID49IG1h
eFRva2VuTGVuZ3RoKSAmJiAhKGxleFR5cGUgJiBJZ25vcmVSZXNlcnZlZFdvcmRzKSkgeyIpCisg
ICAgICAgIHByaW50KCIgICAgY29uc3QgVUNoYXIqIGNvZGUgPSBtX2NvZGU7IikKKyAgICAgICAg
c2VsZi5wcmludFN1YlRyZWVBc0MoNCkKKyAgICAgICAgcHJpbnQoIn0iKQorCitrZXl3b3JkcyA9
IHBhcnNlS2V5d29yZHMoa2V5d29yZHNUZXh0KQordHJpZSA9IFRyaWUoIiIpCitmb3IgaywgdiBp
biBrZXl3b3JkczoKKyAgICB0cmllLmluc2VydChrLCB2KQordHJpZS5jb2FsZXNjZSgpCit0cmll
LmZpbGxPdXQoKQorcHJpbnQoIi8vIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IEtleXdvcmRM
b29rdXBHZW5lcmF0b3IucHkuICBEbyBub3QgZWRpdC4iKQordHJpZS5wcmludEFzQygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbWFrZS1nZW5lcmF0ZWQtc291cmNlcy5zaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9tYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoCmluZGV4IGE2
YjBmNjM2OWIxOTU0NmY4ODk0MGY2NTA3ZWZhYmQ4NTQ4NDYyZGQuLmI5ZTE5ZTc5ZWI4Y2YzZmNl
NDhjNDllZjgxZTEyYTc2ZDdhZjJlNDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9tYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9t
YWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoCkBAIC00LDYgKzQsNyBAQCBleHBvcnQgU1JDUk9PVD0k
UFdECiBleHBvcnQgV2ViQ29yZT0kUFdECiBleHBvcnQgQ1JFQVRFX0hBU0hfVEFCTEU9IiRTUkNS
T09UL2NyZWF0ZV9oYXNoX3RhYmxlIgogZXhwb3J0IENSRUFURV9SRUdFWFBfVEFCTEVTPSIkU1JD
Uk9PVC9jcmVhdGVfcmVnZXhfdGFibGVzIgorZXhwb3J0IENSRUFURV9LRVlXT1JEX0xPT0tVUD0i
JFNSQ1JPT1QvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSIKIAogbWtkaXIgLXAgRGVyaXZlZFNv
dXJjZXMvSmF2YVNjcmlwdENvcmUKIGNkIERlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCmluZGV4IGE3ZDhjYjlmMjFhM2U4MTUz
ZDJiMTIyZjMzNDE2YWI1YjliZDdiNzkuLmMwZTNmMWJhMzI5NmM1YWFiODMxODhhODU3NjA4NjY2
N2YwNGMzYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCkBAIC0yMjEs
NiArMjIxLDQ2IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0eXBlc09mQVNDSUlDaGFy
YWN0ZXJzWzEyOF0gPSB7CiAvKiAxMjcgLSBEZWxldGUgICAgICAgICAgICAgKi8gQ2hhcmFjdGVy
SW52YWxpZCwKIH07CiAKKyNpZiBDUFUoTkVFRFNfQUxJR05FRF9BQ0NFU1MpCisKKyNkZWZpbmUg
Q09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNzLCBjaGFyMSwgY2hhcjIpIFwKKyAgICAoKChhZGRy
ZXNzKVswXSA9PSBjaGFyMSkgJiYgKChhZGRyZXNzKVsxXSA9PSBjaGFyMikpCisjZGVmaW5lIENP
TVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpIFwK
KyAgICAoQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYmIENPTVBB
UkVfQ0hBUkFDVEVSUzIoKGFkZHJlc3MpICsgMiwgY2hhcjMsIGNoYXI0KSkKKworI2Vsc2UKKwor
I2lmIENQVShCSUdfRU5ESUFOKQorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSAoKCgo
dWludDMyX3QpKGEpKSA8PCAxNikgKyAodWludDMyX3QpKGIpKQorI2RlZmluZSBDSEFSUVVBRF9U
T1VJTlQ2NChhLCBiLCBjLCBkKSAoKCgodWludDY0X3QpKENIQVJQQUlSX1RPVUlOVDMyKGEsIGIp
KSkgPDwgMzIpICsgQ0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpCisjZWxzZQorI2RlZmluZSBDSEFS
UEFJUl9UT1VJTlQzMihhLCBiKSAoKCgodWludDMyX3QpKGIpKSA8PCAxNikgKyAodWludDMyX3Qp
KGEpKQorI2RlZmluZSBDSEFSUVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSAoKCgodWludDY0X3Qp
KENIQVJQQUlSX1RPVUlOVDMyKGMsIGQpKSkgPDwgMzIpICsgQ0hBUlBBSVJfVE9VSU5UMzIoYSwg
YikpCisjZW5kaWYKKworI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIx
LCBjaGFyMikgXAorICAgICgoKHVpbnQzMl90KikoYWRkcmVzcykpWzBdID09IENIQVJQQUlSX1RP
VUlOVDMyKGNoYXIxLCBjaGFyMikpCisjaWYgQ1BVKFg4Nl82NCkKKworI2RlZmluZSBDT01QQVJF
X0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBcCisgICAg
KCgodWludDY0X3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlFVQURfVE9VSU5UNjQoY2hhcjEsIGNo
YXIyLCBjaGFyMywgY2hhcjQpKQorI2Vsc2UKKyNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTNChh
ZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXAorICAgIChDT01QQVJFX0NIQVJB
Q1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFSRV9DSEFSQUNURVJTMigoYWRk
cmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2VuZGlmCisKKyNlbmRpZgorCisjZGVmaW5lIENP
TVBBUkVfQ0hBUkFDVEVSUzMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMykgXAorICAgIChD
T01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgKChhZGRyZXNzKVsy
XSA9PSAoY2hhcjMpKSkKKyNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTNShhZGRyZXNzLCBjaGFy
MSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUpIFwKKyAgICAoQ09NUEFSRV9DSEFSQUNURVJT
NChhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNzKVs0XSA9
PSAoY2hhcjUpKSkKKyNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTNihhZGRyZXNzLCBjaGFyMSwg
Y2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUsIGNoYXI2KSBcCisgICAgKENPTVBBUkVfQ0hBUkFD
VEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfQ0hB
UkFDVEVSUzIoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCisjZGVmaW5lIENPTVBBUkVfQ0hB
UkFDVEVSUzgoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1LCBjaGFy
NiwgY2hhcjcsIGNoYXI4KSBcCisgICAgKENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywgY2hh
cjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcyAr
IDQsIGNoYXI1LCBjaGFyNiwgY2hhcjcsIGNoYXI4KSkKKworCiBMZXhlcjo6TGV4ZXIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQogICAgIDogbV9pc1JlcGFyc2luZyhmYWxzZSkKICAgICAsIG1f
Z2xvYmFsRGF0YShnbG9iYWxEYXRhKQpAQCAtMjcxLDE0ICszMTEsMjQgQEAgdm9pZCBMZXhlcjo6
c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFBhcnNlckFyZW5hJiBhcmVuYSkKICAg
ICBBU1NFUlQoY3VycmVudE9mZnNldCgpID09IHNvdXJjZS5zdGFydE9mZnNldCgpKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIExleGVyOjpzaGlmdCgpCit0ZW1wbGF0ZSA8aW50IHNoaWZ0QW1v
dW50LCBib29sIHNob3VsZEJvdW5kc0NoZWNrPiBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI6Omlu
dGVybmFsU2hpZnQoKQogewotICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVsc2Ugc2VxdWVuY2UK
LSAgICBBU1NFUlQobV9jdXJyZW50ICE9IC0xKTsKLSAgICBtX2N1cnJlbnQgPSAtMTsKLSAgICAr
K21fY29kZTsKLSAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCisgICAgaWYgKHNo
b3VsZEJvdW5kc0NoZWNrKSB7CisgICAgICAgIC8vIEZhc3RlciB0aGFuIGFuIGlmLWVsc2Ugc2Vx
dWVuY2UKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudCAhPSAtMSk7CisgICAgICAgIG1fY3VycmVu
dCA9IC0xOworICAgICAgICBtX2NvZGUgKz0gc2hpZnRBbW91bnQ7CisgICAgICAgIGlmIChMSUtF
TFkobV9jb2RlIDwgbV9jb2RlRW5kKSkKKyAgICAgICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jb2RlICs9IHNoaWZ0QW1vdW50OwogICAgICAgICBt
X2N1cnJlbnQgPSAqbV9jb2RlOworICAgIH0KK30KKworQUxXQVlTX0lOTElORSB2b2lkIExleGVy
OjpzaGlmdCgpCit7CisgICAgaW50ZXJuYWxTaGlmdDwxLCB0cnVlPigpOwogfQogCiBBTFdBWVNf
SU5MSU5FIGludCBMZXhlcjo6cGVlayhpbnQgb2Zmc2V0KQpAQCAtNDAxLDkgKzQ1MSwxMSBAQCBp
bmxpbmUgdm9pZCBMZXhlcjo6cmVjb3JkMTYoaW50IGMpCiAKIHRlbXBsYXRlIDxib29sIHNob3Vs
ZENyZWF0ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI6OnBhcnNl
SWRlbnRpZmllcihKU1Rva2VuRGF0YSogbHZhbHAsIHVuc2lnbmVkIGxleFR5cGUpCiB7Ci0gICAg
Ym9vbCBidWZmZXJSZXF1aXJlZCA9IGZhbHNlOworCisjaW5jbHVkZSAiS2V5d29yZExvb2t1cC5o
IgorCiAgICAgY29uc3QgVUNoYXIqIGlkZW50aWZpZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIo
KTsKLSAgICBpbnQgaWRlbnRpZmllckxlbmd0aDsKKyAgICBib29sIGJ1ZmZlclJlcXVpcmVkID0g
ZmFsc2U7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBpZiAoTElLRUxZKGlzSWRlbnRQ
YXJ0KG1fY3VycmVudCkpKSB7CkBAIC00MzAsNyArNDgyLDggQEAgdGVtcGxhdGUgPGJvb2wgc2hv
dWxkQ3JlYXRlSWRlbnRpZmllcj4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjo6cGFy
c2VJZGUKICAgICAgICAgICAgIHJlY29yZDE2KGNoYXJhY3Rlcik7CiAgICAgICAgIGlkZW50aWZp
ZXJTdGFydCA9IGN1cnJlbnRDaGFyYWN0ZXIoKTsKICAgICB9Ci0KKyAgICAKKyAgICBpbnQgaWRl
bnRpZmllckxlbmd0aDsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IDA7CiAgICAgaWYg
KHNob3VsZENyZWF0ZUlkZW50aWZpZXIpIHsKICAgICAgICAgaWYgKCFidWZmZXJSZXF1aXJlZCkK
QEAgLTQ1Miw4ICs1MDUsMTIgQEAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ3JlYXRlSWRlbnRpZmll
cj4gQUxXQVlTX0lOTElORSBKU1Rva2VuVHlwZSBMZXhlcjo6cGFyc2VJZGUKICAgICBpZiAoTElL
RUxZKCFidWZmZXJSZXF1aXJlZCAmJiAhKGxleFR5cGUgJiBJZ25vcmVSZXNlcnZlZFdvcmRzKSkp
IHsKICAgICAgICAgQVNTRVJUKHNob3VsZENyZWF0ZUlkZW50aWZpZXIpOwogICAgICAgICAvLyBL
ZXl3b3JkcyBtdXN0IG5vdCBiZSByZWNvZ25pemVkIGlmIHRoZXJlIHdhcyBhbiBcdVhYWFggaW4g
dGhlIGlkZW50aWZpZXIuCi0gICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBtX2tleXdv
cmRUYWJsZS5lbnRyeShtX2dsb2JhbERhdGEsICppZGVudCk7Ci0gICAgICAgIHJldHVybiBlbnRy
eSA/IHN0YXRpY19jYXN0PEpTVG9rZW5UeXBlPihlbnRyeS0+bGV4ZXJWYWx1ZSgpKSA6IElERU5U
OworICAgICAgICBpZiAocmVtYWluaW5nIDwgbWF4VG9rZW5MZW5ndGgpIHsKKyAgICAgICAgICAg
IGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBtX2tleXdvcmRUYWJsZS5lbnRyeShtX2dsb2JhbERh
dGEsICppZGVudCk7CisgICAgICAgICAgICBBU1NFUlQoKHJlbWFpbmluZyA8IG1heFRva2VuTGVu
Z3RoKSB8fCAhZW50cnkpOworICAgICAgICAgICAgcmV0dXJuIGVudHJ5ID8gc3RhdGljX2Nhc3Q8
SlNUb2tlblR5cGU+KGVudHJ5LT5sZXhlclZhbHVlKCkpIDogSURFTlQ7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIElERU5UOwogICAgIH0KIAogICAgIG1fYnVmZmVyMTYucmVzaXplKDApOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCmluZGV4IDgzYzI5MDYyM2QxOWJhNjVhZjM2
MTg0NGQyYmEzZTFmOGZjZDU3NWYuLjMzNzg0YzYxMDdkYmY0OTRlYjg2MWQ0NmZmNmI1NzRmZWEy
NGU5OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKQEAgLTExMyw2ICsxMTMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbGFzdFRv
a2VuV2FzUmVzdHJLZXl3b3JkKCkgY29uc3Q7CiAKKyAgICAgICAgdGVtcGxhdGUgPGludCBzaGlm
dEFtb3VudCwgYm9vbCBzaG91bGRCb3VuZHNDaGVjaz4gdm9pZCBpbnRlcm5hbFNoaWZ0KCk7CiAg
ICAgICAgIHRlbXBsYXRlIDxib29sIHNob3VsZEJ1aWxkSWRlbnRpZmllcnM+IEFMV0FZU19JTkxJ
TkUgSlNUb2tlblR5cGUgcGFyc2VJZGVudGlmaWVyKEpTVG9rZW5EYXRhKiwgdW5zaWduZWQpOwog
ICAgICAgICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZFN0cmluZ3M+IEFMV0FZU19JTkxJTkUg
Ym9vbCBwYXJzZVN0cmluZyhKU1Rva2VuRGF0YSogbHZhbHAsIGJvb2wgc3RyaWN0TW9kZSk7CiAg
ICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwYXJzZUhleChkb3VibGUmIHJldHVyblZhbHVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95977</attachid>
            <date>2011-06-03 15:57:07 -0700</date>
            <delta_ts>2011-06-03 16:05:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61913-20110603155706.patch</filename>
            <type>text/plain</type>
            <size>22909</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgwNTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCA3NTRkMjFiYzljMzhlYzBjZTA5Y2IyN2U2ZDFjOTVjMWQzNWYyNThhLi4yMGQ5Mjcw
ZWFiNTlkZDg0MDQ3Y2NkY2IzNjg0YmU0YmIwYjY2OGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC0yMTksNiArMjE5LDEzIEBAIEFERF9DVVNUT01fQ09NTUFORCgKIEFE
RF9TT1VSQ0VfREVQRU5ERU5DSUVTKCR7SkFWQVNDUklQVENPUkVfRElSfS95YXJyL1lhcnJQYXR0
ZXJuLmNwcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L1JlZ0V4cEppdFRh
Ymxlcy5oKQogCiAKKyNHRU5FUkFUT1I6ICJLZXl3b3JkTG9va3VwLmgiOiBrZXl3b3JkIGRlY2lz
aW9uIHRyZWUgdXNlZCBieSB0aGUgbGV4ZXIKK0FERF9DVVNUT01fQ09NTUFORCgKKyAgICBPVVRQ
VVQgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9LZXl3b3JkTG9va3VwLmgK
KyAgICBNQUlOX0RFUEVOREVOQ1kgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0tleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHkKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SkFWQVNDUklQ
VENPUkVfRElSfS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICR7SkFWQVNDUklQVENPUkVfRElS
fS9wYXJzZXIvS2V5d29yZHMudGFibGUgPiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L0tleXdvcmRMb29rdXAuaAorICAgIFZFUkJBVElNKQorQUREX1NPVVJDRV9ERVBFTkRF
TkNJRVMoJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3BhcnNlci9MZXhlci5jcHAgJHtERVJJVkVEX1NP
VVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9LZXl3b3JkTG9va3VwLmgpCiAKIElGIChXVEZfQ1BV
X0FSTSkKICAgICBMSVNUKEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwppbmRleCBiMTRhM2YxOWFmYmY2ODdiZGQ4YmQ3MTdkZjk2YWNlYjRiM2Q1OTQ5
Li40ZDZhYjA3YzBlY2E3M2ExOTZiYzI1ZDBhODBjNWRlNmM2OTdhNThlIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wNi0wMyAgT2xpdmVyIEh1bnQgIDxv
bGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEltcHJvdmUga2V5d29yZCBsb29rdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxOTEzCisKKyAgICAgICAgUmF0aGVyIHRoYW4gZG9p
bmcgbXVsdGlwbGUgaGFzaCBsb29rdXBzIGFzIHdlIGN1cnJlbnRseQorICAgICAgICBkbyB3aGVu
IHRyeWluZyB0byBpZGVudGlmeSBrZXl3b3JkcyB3ZSBub3cgdXNlIGFuIAorICAgICAgICBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBkZWNpc2lvbiB0cmVlIChlc3NlbnRpYWxseSBpdCdzCisgICAg
ICAgIGEgaGFyZCBjb2RlZCBwYXRyaWNpYSB0cmllKS4gIFdlIHN0aWxsIHVzZSB0aGUgcmVndWxh
cgorICAgICAgICBsb29rdXAgdGFibGUgZm9yIHRoZSBsYXN0IGZldyBjaGFyYWN0ZXJzIG9mIGFu
IGlucHV0IGFzCisgICAgICAgIHRoaXMgYWxsb3dzIHVzIHRvIGNvbXBsZXRlbHkgc2tpcCBhbGwg
Ym91bmRzIGNoZWNrcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJvOgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cC9KYXZhU2Ny
aXB0Q29yZS5neXA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBtYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoOgorICAgICAgICAqIHBhcnNlci9MZXhl
ci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyOjppbnRlcm5hbFNoaWZ0KToKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnBhcnNlSWRlbnRpZmllcik6
CisgICAgICAgICogcGFyc2VyL0xleGVyLmg6CisKIDIwMTEtMDYtMDMgIFNpZGRoYXJ0aCBNYXRo
dXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBC
ZW5qYW1pbiBQb3VsYWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQppbmRleCBkNzM4Mjg5NDM1YjY5YTkzZjI4YTAxZGVkNTNlNzE4Mzc1ZWFiOWQ3Li44MGFmNGI2
ZDUwNmQ1NTFhMDk2YmMyNzJiMmVhM2VjZTQ3MTZmYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNDYsNiArNDYsNyBAQCBhbGwgOiBcCiAgICAgSmF2
YVNjcmlwdENvcmUuSlNWQUxVRTMyXzY0LmV4cCBcCiAgICAgSmF2YVNjcmlwdENvcmUuSlNWQUxV
RTY0LmV4cCBcCiAgICAgSlNHbG9iYWxPYmplY3QubHV0LmggXAorICAgIEtleXdvcmRMb29rdXAu
aCBcCiAgICAgTGV4ZXIubHV0LmggXAogICAgIE1hdGhPYmplY3QubHV0LmggXAogICAgIE51bWJl
ckNvbnN0cnVjdG9yLmx1dC5oIFwKQEAgLTc2LDYgKzc3LDkgQEAgZG9jcy9ieXRlY29kZS5odG1s
OiBtYWtlLWJ5dGVjb2RlLWRvY3MucGwgSW50ZXJwcmV0ZXIuY3BwCiBSZWdFeHBKaXRUYWJsZXMu
aDogY3JlYXRlX3JlZ2V4X3RhYmxlcwogCXB5dGhvbiAkXiA+ICRACiAKK0tleXdvcmRMb29rdXAu
aDogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSBLZXl3b3Jkcy50YWJsZQorCXB5dGhvbiAkXiA+
ICRACisKICMgZXhwb3J0IGZpbGVzCiAKIEphdmFTY3JpcHRDb3JlLkpTVkFMVUUzMl82NC5leHA6
IEphdmFTY3JpcHRDb3JlLmV4cCBKYXZhU2NyaXB0Q29yZS5KU1ZBTFVFMzJfNjRvbmx5LmV4cApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLnBybyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5wcm8KaW5kZXggMDRhN2E1NDcwMDkz
YTAwZjllZWM1N2EzMWNhZDFmNTk3NjEwYTk2NC4uMDk4OTYwNTE0OThlNDQyN2E1YjllYzI3OTU0
NThjMmFjMTFmMDUyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLnBybworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMucHJv
CkBAIC05OSwzICs5OSwxMCBAQCByZXRnZW4ud2tTY3JpcHQgPSAkJFBXRC9jcmVhdGVfcmVnZXhf
dGFibGVzCiByZXRnZW4uaW5wdXQgPSByZXRnZW4ud2tTY3JpcHQKIHJldGdlbi5jb21tYW5kcyA9
IHB5dGhvbiAkJHJldGdlbi53a1NjcmlwdCA+ICR7UU1BS0VfRklMRV9PVVR9CiBhZGRFeHRyYUNv
bXBpbGVyKHJldGdlbikKKworI0dFTkVSQVRPUjogIktleXdvcmRMb29rdXAuaCI6IGRlY2lzaW9u
IHRyZWUgdXNlZCBieSB0aGUgbGV4ZXIKK2tsZ2VuLm91dHB1dCA9ICQkSlNDX0dFTkVSQVRFRF9T
T1VSQ0VTX0RJUi9LZXl3b3JkTG9va3VwLmgKK2tsZ2VuLndrU2NyaXB0ID0gJCRQV0QvS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weSAKK2tsZ2VuLmlucHV0ID0gS0VZV09SRExVVF9GSUxFUwora2xn
ZW4uY29tbWFuZHMgPSBweXRob24gJCRrbGdlbi53a1NjcmlwdCAke1FNQUtFX0ZJTEVfTkFNRX0g
PiAke1FNQUtFX0ZJTEVfT1VUfQorYWRkRXh0cmFDb21waWxlcihrbGdlbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3NDA4NTA0YTViOTJmMGViNDk4NTUxZWFlODAyZTQ0
OGU1ZDNlZTgzLi5jNzEwZDJhYmE0MjdkZWUzY2E0YzQyOWM0MjZlM2Q4OTA5NWY3MDZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03OSw2ICs3OSw5IEBAIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS8lLmx1dC5oOiAkKHNyY2RpcikvU291cmNlL0phdmFTY3JpcHRDb3JlL2Ny
ZWF0ZV9oYXNoX3RhYmxlCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvUmVnRXhwSml0VGFibGVzLmg6
ICQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY3JlYXRlX3JlZ2V4X3RhYmxlcwogCSQo
QU1fVl9HRU4pJChQWVRIT04pICReID4gJEAKIAorU291cmNlL0phdmFTY3JpcHRDb3JlL0tleXdv
cmRMb29rdXAuaDogJChzcmNkaXIpL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3Vw
R2VuZXJhdG9yLnB5ICQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0tleXdv
cmRzLnRhYmxlCisJJChBTV9WX0dFTikkKFBZVEhPTikgJF4gPiAkQAorCiBqc2M6ICQoamF2YXNj
cmlwdGNvcmVfYnVpbHRfbm9zb3VyY2VzKSBQcm9ncmFtcy9qc2MkKEVYRUVYVCkKIAogYmluX1BS
T0dSQU1TICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5neXAvSmF2YVNjcmlwdENvcmUuZ3lwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXAKaW5kZXggYjA0YzU5YWI2MGVhNGM3MmFm
Y2YxYjZhMmNlNDkyMTVjYmM1YjM1My4uZDg4NmE2Mjg1OWQ4NmYzOTk5OGYxZjk1NGU4ZGRlNzYy
ODNlODhhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lmd5cC9KYXZhU2NyaXB0Q29yZS5neXAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmd5cC9KYXZhU2NyaXB0Q29yZS5neXAKQEAgLTIxNCw2ICsyMTQsMTkgQEAKICAg
ICAgICAgICBdLAogICAgICAgICAgICdhY3Rpb24nOiBbJ3B5dGhvbicsICc8QChfaW5wdXRzKScs
ICc8QChfYXJndW1lbnRzKScsICc8QChfb3V0cHV0cyknXSwKICAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdrbGdlbicsCisgICAgICAgICAgJ2lucHV0cyc6
IFsKKyAgICAgICAgICAgICcuLi9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5JywKKyAgICAgICAg
ICAgICcuLi9wYXJzZXIvS2V5d29yZHMudGFibGUnCisgICAgICAgICAgXSwKKyAgICAgICAgICAn
YXJndW1lbnRzJzogWworICAgICAgICAgIF0sCisgICAgICAgICAgJ291dHB1dHMnOiBbCisgICAg
ICAgICAgICAnPChJTlRFUk1FRElBVEVfRElSKS9LZXl3b3JkTG9va3VwLmgnLAorICAgICAgICAg
IF0sCisgICAgICAgICAgJ2FjdGlvbic6IFsncHl0aG9uJywgJzxAKF9pbnB1dHMpJywgJzxAKF9h
cmd1bWVudHMpJywgJzxAKF9vdXRwdXRzKSddLAorICAgICAgICB9LAogICAgICAgXSwKICAgICAg
ICdpbmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICc8KElOVEVSTUVESUFURV9ESVIpJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWM1Yjg0NGM2MDliNTNiZWUxYzZiOTYyZDMwM2Y0
YzNkNjUwM2MyZi4uNTUwNGIwNDhkZTdkOTNmMjBlMThmYjc5NjY2NjNkYWQ3NmQ3MDJhMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM4MSw2ICszODEsNyBAQAogCQlBNzI3MDFC
OTBEQURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0aW9uSGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8q
IEV4Y2VwdGlvbkhlbHBlcnMuaCAqLzsgfTsKIAkJQTcyN0ZGNkIwREEzMDkyMjAwRTU0OEQ3IC8q
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTcyN0ZGNjYwREEzMDUzQjAwRTU0OEQ3IC8qIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IuY3BwICovOyB9OwogCQlBNzI4MEEyODExNTU3RTMwMDBENTY5NTcgLyogSlNP
YmplY3RSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNPYmplY3RSZWZQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTcyRkZE
NjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzIyNUNEMTM5OTg0OUMwMEZGMTY2MiAvKiBL
ZXl3b3JkTG9va3VwLmggKi87IH07CiAJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmggKi87IH07CiAJCUE3MzBCNjEzMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZh
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzMwQjYxMTEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovOyB9
OwogCQlBNzMxQjI1QTEzMDA5Mzg4MDA0MEE3RkEgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1
Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CkBAIC0xMTE5LDYg
KzExMjAsOCBAQAogCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9j
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2Nh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QjQ4REI2MEVFNzRDRkMwMERD
QkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdDMjI1Q0Mx
Mzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0MyMjVDRDEzOTk4NDlDMDBGRjE2NjIgLyogS2V5
d29yZExvb2t1cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLZXl3b3JkTG9v
a3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzQwQzA3MTMwQjA1N0QwMEQw
MDJBMSAvKiBCbG9ja1N0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJs
b2NrU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDNDBDMDgxMzBCMDU3
RDAwRDAwMkExIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTZW50aW5lbExpbmtlZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdDNDBDMDkxMzBCMDU3RDAwRDAwMkExIC8qIFNpbmdseUxpbmtlZExpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2luZ2x5TGlua2VkTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM3NCw2ICsxMzc3LDcgQEAKIAkJCWNoaWxkcmVuID0g
KAogCQkJCUE3MThGODIxMTE3OEVCNEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFibGVzICov
LAogCQkJCTkzN0I2M0NDMDlFNzY2RDIwMEE2NzFERCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICov
LAorCQkJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9y
LnB5ICovLAogCQkJCUY2OTJBODU0MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSAqLywKIAkJCQkxNEI4RUNBNjBBNTY1Mzk4MDA2MkJFNTQgLyogSmF2YVNjcmlwdENvcmUuZXhw
ICovLAogCQkJCTg2N0ZDMzVGMTFCNzYzOTUwMDI1MTA1RSAvKiBKYXZhU2NyaXB0Q29yZS5KU1ZB
TFVFMzJfNjRvbmx5LmV4cCAqLywKQEAgLTE2MDgsNiArMTYxMiw3IEBACiAJCQkJQkNEMjAzRTcw
RTE3MThGNDAwMkM3RTgyIC8qIERhdGVQcm90b3R5cGUubHV0LmggKi8sCiAJCQkJQkM4MTQ5QUYx
MkY4OUY1MzAwN0IyQzMyIC8qIEhlYWRlckRldGVjdGlvbi5oICovLAogCQkJCUJDODdDREI4MTA3
MTJBQ0EwMDA2MTRDRiAvKiBKU09OT2JqZWN0Lmx1dC5oICovLAorCQkJCUE3QzIyNUNEMTM5OTg0
OUMwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwLmggKi8sCiAJCQkJQkMxOEM1MkQwRTE2RkNFMTAw
QjM0NDYwIC8qIExleGVyLmx1dC5oICovLAogCQkJCUJDMThDNTI5MEUxNkZDQzIwMEIzNDQ2MCAv
KiBNYXRoT2JqZWN0Lmx1dC5oICovLAogCQkJCUJDMjY4MEU2MEUxNkQ1MjMwMEEwNkU5MiAvKiBO
dW1iZXJDb25zdHJ1Y3Rvci5sdXQuaCAqLywKQEAgLTI1NDcsNiArMjU1Miw3IEBACiAJCQkJNjUx
RENBMDQxMzZBNkZFRjAwRjc0MTk0IC8qIFBhc3NUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QkIwOUMxMTM4RTM4MUIwMDU2NzAyRiAvKiBERkdSZXBhdGNoLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEgLyogS2V5d29yZExvb2t1cC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9LZXl3b3JkTG9va3Vw
R2VuZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0MWM1MGY2NGVlOTRkNmNkNmEzOTU1NjcxOGM2ODc5
OGRkMjBmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weQpAQCAtMCwwICsxLDE3NiBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
IyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisjIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHN5cworaW1wb3J0IHN0cmluZworaW1wb3J0IG9wZXJhdG9yCisKK2tleXdvcmRzVGV4dCA9
IG9wZW4oc3lzLmFyZ3ZbMV0pLnJlYWQoKQorCisjIE9ic2VydmVkIHdlaWdodHMgb2YgdGhlIG1v
c3QgY29tbW9uIGtleXdvcmRzLCByb3VuZGVkIHRvIDIucy5kCitrZXlXb3JkV2VpZ2h0cyA9IHsK
KyAgICAiY2F0Y2giOiAwLjAxLAorICAgICJ0cnkiOiAwLjAxLAorICAgICJ3aGlsZSI6IDAuMDEs
CisgICAgImNhc2UiOiAwLjAxLAorICAgICJicmVhayI6IDAuMDEsCisgICAgIm5ldyI6IDAuMDEs
CisgICAgImluIjogMC4wMSwKKyAgICAidHlwZW9mIjogMC4wMiwKKyAgICAidHJ1ZSI6IDAuMDIs
CisgICAgImZhbHNlIjogMC4wMiwKKyAgICAiZm9yIjogMC4wMywKKyAgICAibnVsbCI6IDAuMDMs
CisgICAgImVsc2UiOiAwLjAzLAorICAgICJyZXR1cm4iOiAwLjEzLAorICAgICJ2YXIiOiAwLjEz
LAorICAgICJpZiI6IDAuMTYsCisgICAgImZ1bmN0aW9uIjogMC4xOCwKKyAgICAidGhpcyI6IDAu
MTgsCit9CisKKworZGVmIGFsbFdoaXRlc3BhY2Uoc3RyKToKKyAgICBmb3IgYyBpbiBzdHI6Cisg
ICAgICAgIGlmIG5vdChjIGluIHN0cmluZy53aGl0ZXNwYWNlKToKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKworZGVmIHBhcnNlS2V5d29yZHMoa2V5d29yZHNU
ZXh0KToKKyAgICBsaW5lcyA9IGtleXdvcmRzVGV4dC5zcGxpdCgiXG4iKQorICAgIGxpbmVzID0g
W2xpbmUuc3BsaXQoIiMiKVswXSBmb3IgbGluZSBpbiBsaW5lc10KKyAgICBsaW5lcyA9IFtsaW5l
IGZvciBsaW5lIGluIGxpbmVzIGlmIChub3QgYWxsV2hpdGVzcGFjZShsaW5lKSldCisgICAgbmFt
ZSA9IGxpbmVzWzBdLnNwbGl0KCkKKyAgICB0ZXJtaW5hdG9yID0gbGluZXNbLTFdCisgICAgaWYg
bm90IG5hbWVbMF0gPT0gIkBiZWdpbiI6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZXhwZWN0
ZWQgZGVzY3JpcHRpb24gYmVnaW5uaW5nIHdpdGggQGJlZ2luIikKKyAgICBpZiBub3QgdGVybWlu
YXRvciA9PSAiQGVuZCI6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZXhwZWN0ZWQgZGVzY3Jp
cHRpb24gZW5kaW5nIHdpdGggQGVuZCIpCisKKyAgICBsaW5lcyA9IGxpbmVzWzE6LTFdICAjIHRy
aW0gb2ZmIHRoZSBvbGQgaGVhZGluZworICAgIHJldHVybiBbbGluZS5zcGxpdCgpIGZvciBsaW5l
IGluIGxpbmVzXQorCisKK2RlZiBtYWtlUGFkZGluZyhzaXplKToKKyAgICBzdHIgPSAiIgorICAg
IGZvciBpIGluIHJhbmdlKHNpemUpOgorICAgICAgICBzdHIgPSBzdHIgKyAiICIKKyAgICByZXR1
cm4gc3RyCisKKworY2xhc3MgVHJpZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJlZml4KToK
KyAgICAgICAgc2VsZi5wcmVmaXggPSBwcmVmaXgKKyAgICAgICAgc2VsZi5rZXlzID0ge30KKyAg
ICAgICAgc2VsZi52YWx1ZSA9IE5vbmUKKworICAgIGRlZiBpbnNlcnQoc2VsZiwga2V5LCB2YWx1
ZSk6CisgICAgICAgIGlmIGxlbihrZXkpID09IDA6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0g
dmFsdWUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgKGtleVswXSBpbiBzZWxm
LmtleXMpOgorICAgICAgICAgICAgc2VsZi5rZXlzW2tleVswXV0gPSBUcmllKGtleVswXSkKKyAg
ICAgICAgc2VsZi5rZXlzW2tleVswXV0uaW5zZXJ0KGtleVsxOl0sIHZhbHVlKQorCisgICAgZGVm
IGNvYWxlc2NlKHNlbGYpOgorICAgICAgICBrZXlzID0ge30KKyAgICAgICAgZm9yIGssIHYgaW4g
c2VsZi5rZXlzLml0ZW1zKCk6CisgICAgICAgICAgICB0ID0gdi5jb2FsZXNjZSgpCisgICAgICAg
ICAgICBrZXlzW3QucHJlZml4XSA9IHQKKyAgICAgICAgc2VsZi5rZXlzID0ga2V5cworICAgICAg
ICBpZiBzZWxmLnZhbHVlICE9IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAg
ICBpZiBsZW4oc2VsZi5rZXlzKSAhPSAxOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAg
ICAgKHByZWZpeCwgc3VmZml4KSA9IHNlbGYua2V5cy5pdGVtcygpWzBdCisgICAgICAgIHJlcyA9
IFRyaWUoc2VsZi5wcmVmaXggKyBwcmVmaXgpCisgICAgICAgIHJlcy52YWx1ZSA9IHN1ZmZpeC52
YWx1ZQorICAgICAgICByZXMua2V5cyA9IHN1ZmZpeC5rZXlzCisgICAgICAgIHJldHVybiByZXMK
KworICAgIGRlZiBmaWxsT3V0KHNlbGYsIHByZWZpeD0iIik6CisgICAgICAgIHNlbGYuZnVsbFBy
ZWZpeCA9IHByZWZpeCArIHNlbGYucHJlZml4CisgICAgICAgIHdlaWdodCA9IDAKKyAgICAgICAg
aWYgc2VsZi5mdWxsUHJlZml4IGluIGtleVdvcmRXZWlnaHRzOgorICAgICAgICAgICAgd2VpZ2h0
ID0gd2VpZ2h0ICsga2V5V29yZFdlaWdodHNbc2VsZi5mdWxsUHJlZml4XQorICAgICAgICBzZWxm
LnNlbGZXZWlnaHQgPSB3ZWlnaHQKKyAgICAgICAgZm9yIHRyaWUgaW4gc2VsZi5rZXlzLnZhbHVl
cygpOgorICAgICAgICAgICAgdHJpZS5maWxsT3V0KHNlbGYuZnVsbFByZWZpeCkKKyAgICAgICAg
ICAgIHdlaWdodCA9IHdlaWdodCArIHRyaWUud2VpZ2h0CisgICAgICAgIHNlbGYua2V5cyA9IFso
dHJpZS5wcmVmaXgsIHRyaWUpIGZvciB0cmllIGluIHNvcnRlZChzZWxmLmtleXMudmFsdWVzKCks
IGtleT1vcGVyYXRvci5hdHRyZ2V0dGVyKCd3ZWlnaHQnKSwgcmV2ZXJzZT1UcnVlKV0KKyAgICAg
ICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHQKKworICAgIGRlZiBwcmludFN1YlRyZWVBc0Moc2VsZiwg
aW5kZW50KToKKyAgICAgICAgc3RyID0gbWFrZVBhZGRpbmcoaW5kZW50KQorCisgICAgICAgIGlm
IHNlbGYudmFsdWUgIT0gTm9uZToKKyAgICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIWlzSWRl
bnRQYXJ0KGNvZGVbJWRdKSkgeyIgJSAobGVuKHNlbGYuZnVsbFByZWZpeCkpKQorICAgICAgICAg
ICAgcHJpbnQoc3RyICsgIiAgICBpbnRlcm5hbFNoaWZ0PCVkLCBmYWxzZT4oKTsiICUgbGVuKHNl
bGYuZnVsbFByZWZpeCkpCisgICAgICAgICAgICBwcmludChzdHIgKyAiICAgIHJldHVybiAiICsg
c2VsZi52YWx1ZSArICI7IikKKyAgICAgICAgICAgIHByaW50KHN0ciArICJ9IikKKyAgICAgICAg
cm9vdEluZGV4ID0gbGVuKHNlbGYuZnVsbFByZWZpeCkKKyAgICAgICAgaXRlbUNvdW50ID0gMAor
ICAgICAgICBmb3IgaywgdHJpZSBpbiBzZWxmLmtleXM6CisgICAgICAgICAgICB0ZXN0ID0gWygi
JyVzJyIgJSBjKSBmb3IgYyBpbiBrXQorICAgICAgICAgICAgaWYgbGVuKHRlc3QpID09IDE6Cisg
ICAgICAgICAgICAgICAgY29tcGFyaXNvbiA9ICJjb2RlWyVkXSA9PSAlcyIgJSAocm9vdEluZGV4
LCB0ZXN0WzBdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYXNlID0gImNv
ZGUiCisgICAgICAgICAgICAgICAgaWYgcm9vdEluZGV4ID4gMDoKKyAgICAgICAgICAgICAgICAg
ICAgYmFzZSA9ICJjb2RlICsgJWQiICUgcm9vdEluZGV4CisgICAgICAgICAgICAgICAgY29tcGFy
aXNvbiA9ICgiQ09NUEFSRV9DSEFSQUNURVJTJWQoJXMsICIgJSAobGVuKHRlc3QpLCBiYXNlKSkg
KyAiLCAiLmpvaW4odGVzdCkgKyAiKSIKKyAgICAgICAgICAgIGlmIGl0ZW1Db3VudCA9PSAwOgor
ICAgICAgICAgICAgICAgIHByaW50KHN0ciArICJpZiAoIiArIGNvbXBhcmlzb24gKyAiKSB7IikK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoc3RyICsgImVsc2UgaWYg
KCIgKyBjb21wYXJpc29uICsgIikgeyIpCisKKyAgICAgICAgICAgIHRyaWUucHJpbnRTdWJUcmVl
QXNDKGluZGVudCArIDQpCisgICAgICAgICAgICBpdGVtQ291bnQgPSBpdGVtQ291bnQgKyAxCisg
ICAgICAgICAgICBwcmludChzdHIgKyAifSIpCisKKyAgICBkZWYgbWF4TGVuZ3RoKHNlbGYpOgor
ICAgICAgICBtYXggPSBsZW4oc2VsZi5mdWxsUHJlZml4KQorICAgICAgICBmb3IgKF8sIHRyaWUp
IGluIHNlbGYua2V5czoKKyAgICAgICAgICAgIGwgPSB0cmllLm1heExlbmd0aCgpCisgICAgICAg
ICAgICBpZiBsID4gbWF4OgorICAgICAgICAgICAgICAgIG1heCA9IGwKKyAgICAgICAgcmV0dXJu
IG1heAorCisgICAgZGVmIHByaW50QXNDKHNlbGYpOgorICAgICAgICAjIG1heCBsZW5ndGggKyAx
IHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55IGJvdW5kcyBjaGVja2luZyBhdCBhbGwKKyAgICAg
ICAgcHJpbnQoInN0YXRpYyBjb25zdCBpbnQgbWF4VG9rZW5MZW5ndGggPSAlZDsiICUgKHNlbGYu
bWF4TGVuZ3RoKCkgKyAxKSkKKyAgICAgICAgcHJpbnQoImNvbnN0IHB0cmRpZmZfdCByZW1haW5p
bmcgPSBtX2NvZGVFbmQgLSBtX2NvZGU7IikKKyAgICAgICAgcHJpbnQoImlmICgocmVtYWluaW5n
ID49IG1heFRva2VuTGVuZ3RoKSAmJiAhKGxleFR5cGUgJiBJZ25vcmVSZXNlcnZlZFdvcmRzKSkg
eyIpCisgICAgICAgIHByaW50KCIgICAgY29uc3QgVUNoYXIqIGNvZGUgPSBtX2NvZGU7IikKKyAg
ICAgICAgc2VsZi5wcmludFN1YlRyZWVBc0MoNCkKKyAgICAgICAgcHJpbnQoIn0iKQorCitrZXl3
b3JkcyA9IHBhcnNlS2V5d29yZHMoa2V5d29yZHNUZXh0KQordHJpZSA9IFRyaWUoIiIpCitmb3Ig
aywgdiBpbiBrZXl3b3JkczoKKyAgICB0cmllLmluc2VydChrLCB2KQordHJpZS5jb2FsZXNjZSgp
Cit0cmllLmZpbGxPdXQoKQorcHJpbnQoIi8vIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IEtl
eXdvcmRMb29rdXBHZW5lcmF0b3IucHkuICBEbyBub3QgZWRpdC4iKQordHJpZS5wcmludEFzQygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbWFrZS1nZW5lcmF0ZWQtc291cmNl
cy5zaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9tYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoCmlu
ZGV4IGE2YjBmNjM2OWIxOTU0NmY4ODk0MGY2NTA3ZWZhYmQ4NTQ4NDYyZGQuLmI5ZTE5ZTc5ZWI4
Y2YzZmNlNDhjNDllZjgxZTEyYTc2ZDdhZjJlNDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9tYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9tYWtlLWdlbmVyYXRlZC1zb3VyY2VzLnNoCkBAIC00LDYgKzQsNyBAQCBleHBvcnQgU1JD
Uk9PVD0kUFdECiBleHBvcnQgV2ViQ29yZT0kUFdECiBleHBvcnQgQ1JFQVRFX0hBU0hfVEFCTEU9
IiRTUkNST09UL2NyZWF0ZV9oYXNoX3RhYmxlIgogZXhwb3J0IENSRUFURV9SRUdFWFBfVEFCTEVT
PSIkU1JDUk9PVC9jcmVhdGVfcmVnZXhfdGFibGVzIgorZXhwb3J0IENSRUFURV9LRVlXT1JEX0xP
T0tVUD0iJFNSQ1JPT1QvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSIKIAogbWtkaXIgLXAgRGVy
aXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUKIGNkIERlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCmluZGV4IGE3ZDhjYjlmMjFh
M2U4MTUzZDJiMTIyZjMzNDE2YWI1YjliZDdiNzkuLmFiNDIyYmZjYzAwNThkN2U3YTc4ZDVkOWM3
ZGJmMjliMzAxYjg3YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TGV4ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCkBA
IC0yMjEsNiArMjIxLDQ4IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0eXBlc09mQVND
SUlDaGFyYWN0ZXJzWzEyOF0gPSB7CiAvKiAxMjcgLSBEZWxldGUgICAgICAgICAgICAgKi8gQ2hh
cmFjdGVySW52YWxpZCwKIH07CiAKKyNpZiBDUFUoTkVFRFNfQUxJR05FRF9BQ0NFU1MpCisKKyNk
ZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNzLCBjaGFyMSwgY2hhcjIpIFwKKyAgICAo
KChhZGRyZXNzKVswXSA9PSBjaGFyMSkgJiYgKChhZGRyZXNzKVsxXSA9PSBjaGFyMikpCisjZGVm
aW5lIENPTVBBUkVfQ0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hh
cjQpIFwKKyAgICAoQ09NUEFSRV9DSEFSQUNURVJTMihhZGRyZXNzLCBjaGFyMSwgY2hhcjIpICYm
IENPTVBBUkVfQ0hBUkFDVEVSUzIoKGFkZHJlc3MpICsgMiwgY2hhcjMsIGNoYXI0KSkKKworI2Vs
c2UKKworI2lmIENQVShCSUdfRU5ESUFOKQorI2RlZmluZSBDSEFSUEFJUl9UT1VJTlQzMihhLCBi
KSAoKCgodWludDMyX3QpKGEpKSA8PCAxNikgKyAodWludDMyX3QpKGIpKQorI2RlZmluZSBDSEFS
UVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSAoKCgodWludDY0X3QpKENIQVJQQUlSX1RPVUlOVDMy
KGEsIGIpKSkgPDwgMzIpICsgQ0hBUlBBSVJfVE9VSU5UMzIoYywgZCkpCisjZWxzZQorI2RlZmlu
ZSBDSEFSUEFJUl9UT1VJTlQzMihhLCBiKSAoKCgodWludDMyX3QpKGIpKSA8PCAxNikgKyAodWlu
dDMyX3QpKGEpKQorI2RlZmluZSBDSEFSUVVBRF9UT1VJTlQ2NChhLCBiLCBjLCBkKSAoKCgodWlu
dDY0X3QpKENIQVJQQUlSX1RPVUlOVDMyKGMsIGQpKSkgPDwgMzIpICsgQ0hBUlBBSVJfVE9VSU5U
MzIoYSwgYikpCisjZW5kaWYKKworI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3Ms
IGNoYXIxLCBjaGFyMikgXAorICAgICgoKHVpbnQzMl90KikoYWRkcmVzcykpWzBdID09IENIQVJQ
QUlSX1RPVUlOVDMyKGNoYXIxLCBjaGFyMikpCisjaWYgQ1BVKFg4Nl82NCkKKworI2RlZmluZSBD
T01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0KSBc
CisgICAgKCgodWludDY0X3QqKShhZGRyZXNzKSlbMF0gPT0gQ0hBUlFVQURfVE9VSU5UNjQoY2hh
cjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpKQorI2Vsc2UKKyNkZWZpbmUgQ09NUEFSRV9DSEFSQUNU
RVJTNChhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgXAorICAgIChDT01QQVJF
X0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgQ09NUEFSRV9DSEFSQUNURVJT
MigoYWRkcmVzcykgKyAyLCBjaGFyMywgY2hhcjQpKQorI2VuZGlmCisKKyNlbmRpZgorCisjZGVm
aW5lIENPTVBBUkVfQ0hBUkFDVEVSUzMoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMykgXAor
ICAgIChDT01QQVJFX0NIQVJBQ1RFUlMyKGFkZHJlc3MsIGNoYXIxLCBjaGFyMikgJiYgKChhZGRy
ZXNzKVsyXSA9PSAoY2hhcjMpKSkKKyNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTNShhZGRyZXNz
LCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUpIFwKKyAgICAoQ09NUEFSRV9DSEFS
QUNURVJTNChhZGRyZXNzLCBjaGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgKChhZGRyZXNz
KVs0XSA9PSAoY2hhcjUpKSkKKyNkZWZpbmUgQ09NUEFSRV9DSEFSQUNURVJTNihhZGRyZXNzLCBj
aGFyMSwgY2hhcjIsIGNoYXIzLCBjaGFyNCwgY2hhcjUsIGNoYXI2KSBcCisgICAgKENPTVBBUkVf
Q0hBUkFDVEVSUzQoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQpICYmIENPTVBB
UkVfQ0hBUkFDVEVSUzIoYWRkcmVzcyArIDQsIGNoYXI1LCBjaGFyNikpCisjZGVmaW5lIENPTVBB
UkVfQ0hBUkFDVEVSUzcoYWRkcmVzcywgY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjQsIGNoYXI1
LCBjaGFyNiwgY2hhcjcpIFwKKyAgICAoQ09NUEFSRV9DSEFSQUNURVJTNChhZGRyZXNzLCBjaGFy
MSwgY2hhcjIsIGNoYXIzLCBjaGFyNCkgJiYgQ09NUEFSRV9DSEFSQUNURVJTNChhZGRyZXNzICsg
MywgY2hhcjQsIGNoYXI1LCBjaGFyNiwgY2hhcjcpKQorI2RlZmluZSBDT01QQVJFX0NIQVJBQ1RF
UlM4KGFkZHJlc3MsIGNoYXIxLCBjaGFyMiwgY2hhcjMsIGNoYXI0LCBjaGFyNSwgY2hhcjYsIGNo
YXI3LCBjaGFyOCkgXAorICAgIChDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MsIGNoYXIxLCBj
aGFyMiwgY2hhcjMsIGNoYXI0KSAmJiBDT01QQVJFX0NIQVJBQ1RFUlM0KGFkZHJlc3MgKyA0LCBj
aGFyNSwgY2hhcjYsIGNoYXI3LCBjaGFyOCkpCisKKwogTGV4ZXI6OkxleGVyKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKICAgICA6IG1faXNSZXBhcnNpbmcoZmFsc2UpCiAgICAgLCBtX2dsb2Jh
bERhdGEoZ2xvYmFsRGF0YSkKQEAgLTI3MSwxNCArMzEzLDI0IEBAIHZvaWQgTGV4ZXI6OnNldENv
ZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJBcmVuYSYgYXJlbmEpCiAgICAgQVNT
RVJUKGN1cnJlbnRPZmZzZXQoKSA9PSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBMZXhlcjo6c2hpZnQoKQordGVtcGxhdGUgPGludCBzaGlmdEFtb3VudCwg
Ym9vbCBzaG91bGRCb3VuZHNDaGVjaz4gQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjppbnRlcm5h
bFNoaWZ0KCkKIHsKLSAgICAvLyBGYXN0ZXIgdGhhbiBhbiBpZi1lbHNlIHNlcXVlbmNlCi0gICAg
QVNTRVJUKG1fY3VycmVudCAhPSAtMSk7Ci0gICAgbV9jdXJyZW50ID0gLTE7Ci0gICAgKyttX2Nv
ZGU7Ci0gICAgaWYgKExJS0VMWShtX2NvZGUgPCBtX2NvZGVFbmQpKQorICAgIGlmIChzaG91bGRC
b3VuZHNDaGVjaykgeworICAgICAgICAvLyBGYXN0ZXIgdGhhbiBhbiBpZi1lbHNlIHNlcXVlbmNl
CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gLTEpOworICAgICAgICBtX2N1cnJlbnQgPSAt
MTsKKyAgICAgICAgbV9jb2RlICs9IHNoaWZ0QW1vdW50OworICAgICAgICBpZiAoTElLRUxZKG1f
Y29kZSA8IG1fY29kZUVuZCkpCisgICAgICAgICAgICBtX2N1cnJlbnQgPSAqbV9jb2RlOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fY29kZSArPSBzaGlmdEFtb3VudDsKICAgICAgICAgbV9jdXJy
ZW50ID0gKm1fY29kZTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6c2hp
ZnQoKQoreworICAgIGludGVybmFsU2hpZnQ8MSwgdHJ1ZT4oKTsKIH0KIAogQUxXQVlTX0lOTElO
RSBpbnQgTGV4ZXI6OnBlZWsoaW50IG9mZnNldCkKQEAgLTQwMSw5ICs0NTMsMTEgQEAgaW5saW5l
IHZvaWQgTGV4ZXI6OnJlY29yZDE2KGludCBjKQogCiB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRDcmVh
dGVJZGVudGlmaWVyPiBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyOjpwYXJzZUlkZW50
aWZpZXIoSlNUb2tlbkRhdGEqIGx2YWxwLCB1bnNpZ25lZCBsZXhUeXBlKQogewotICAgIGJvb2wg
YnVmZmVyUmVxdWlyZWQgPSBmYWxzZTsKKworI2luY2x1ZGUgIktleXdvcmRMb29rdXAuaCIKKwog
ICAgIGNvbnN0IFVDaGFyKiBpZGVudGlmaWVyU3RhcnQgPSBjdXJyZW50Q2hhcmFjdGVyKCk7Ci0g
ICAgaW50IGlkZW50aWZpZXJMZW5ndGg7CisgICAgYm9vbCBidWZmZXJSZXF1aXJlZCA9IGZhbHNl
OwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgaWYgKExJS0VMWShpc0lkZW50UGFydCht
X2N1cnJlbnQpKSkgewpAQCAtNDMwLDcgKzQ4NCw4IEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENy
ZWF0ZUlkZW50aWZpZXI+IEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI6OnBhcnNlSWRl
CiAgICAgICAgICAgICByZWNvcmQxNihjaGFyYWN0ZXIpOwogICAgICAgICBpZGVudGlmaWVyU3Rh
cnQgPSBjdXJyZW50Q2hhcmFjdGVyKCk7CiAgICAgfQotCisgICAgCisgICAgaW50IGlkZW50aWZp
ZXJMZW5ndGg7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAwOwogICAgIGlmIChzaG91
bGRDcmVhdGVJZGVudGlmaWVyKSB7CiAgICAgICAgIGlmICghYnVmZmVyUmVxdWlyZWQpCkBAIC00
NTIsOCArNTA3LDEyIEBAIHRlbXBsYXRlIDxib29sIHNob3VsZENyZWF0ZUlkZW50aWZpZXI+IEFM
V0FZU19JTkxJTkUgSlNUb2tlblR5cGUgTGV4ZXI6OnBhcnNlSWRlCiAgICAgaWYgKExJS0VMWSgh
YnVmZmVyUmVxdWlyZWQgJiYgIShsZXhUeXBlICYgSWdub3JlUmVzZXJ2ZWRXb3JkcykpKSB7CiAg
ICAgICAgIEFTU0VSVChzaG91bGRDcmVhdGVJZGVudGlmaWVyKTsKICAgICAgICAgLy8gS2V5d29y
ZHMgbXVzdCBub3QgYmUgcmVjb2duaXplZCBpZiB0aGVyZSB3YXMgYW4gXHVYWFhYIGluIHRoZSBp
ZGVudGlmaWVyLgotICAgICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gbV9rZXl3b3JkVGFi
bGUuZW50cnkobV9nbG9iYWxEYXRhLCAqaWRlbnQpOwotICAgICAgICByZXR1cm4gZW50cnkgPyBz
dGF0aWNfY2FzdDxKU1Rva2VuVHlwZT4oZW50cnktPmxleGVyVmFsdWUoKSkgOiBJREVOVDsKKyAg
ICAgICAgaWYgKHJlbWFpbmluZyA8IG1heFRva2VuTGVuZ3RoKSB7CisgICAgICAgICAgICBjb25z
dCBIYXNoRW50cnkqIGVudHJ5ID0gbV9rZXl3b3JkVGFibGUuZW50cnkobV9nbG9iYWxEYXRhLCAq
aWRlbnQpOworICAgICAgICAgICAgQVNTRVJUKChyZW1haW5pbmcgPCBtYXhUb2tlbkxlbmd0aCkg
fHwgIWVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeSA/IHN0YXRpY19jYXN0PEpTVG9r
ZW5UeXBlPihlbnRyeS0+bGV4ZXJWYWx1ZSgpKSA6IElERU5UOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBJREVOVDsKICAgICB9CiAKICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAppbmRleCA4M2MyOTA2MjNkMTliYTY1YWYzNjE4NDRk
MmJhM2UxZjhmY2Q1NzVmLi4zMzc4NGM2MTA3ZGJmNDk0ZWI4NjFkNDZmZjZiNTc0ZmVhMjRlOTll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCkBAIC0xMTMsNiArMTEzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGxhc3RUb2tlbldh
c1Jlc3RyS2V5d29yZCgpIGNvbnN0OwogCisgICAgICAgIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91
bnQsIGJvb2wgc2hvdWxkQm91bmRzQ2hlY2s+IHZvaWQgaW50ZXJuYWxTaGlmdCgpOwogICAgICAg
ICB0ZW1wbGF0ZSA8Ym9vbCBzaG91bGRCdWlsZElkZW50aWZpZXJzPiBBTFdBWVNfSU5MSU5FIEpT
VG9rZW5UeXBlIHBhcnNlSWRlbnRpZmllcihKU1Rva2VuRGF0YSosIHVuc2lnbmVkKTsKICAgICAg
ICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQnVpbGRTdHJpbmdzPiBBTFdBWVNfSU5MSU5FIGJvb2wg
cGFyc2VTdHJpbmcoSlNUb2tlbkRhdGEqIGx2YWxwLCBib29sIHN0cmljdE1vZGUpOwogICAgICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgcGFyc2VIZXgoZG91YmxlJiByZXR1cm5WYWx1ZSk7Cg==
</data>
<flag name="review"
          id="89582"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>95978</attachid>
            <date>2011-06-03 15:57:54 -0700</date>
            <delta_ts>2011-06-03 15:58:11 -0700</delta_ts>
            <desc>Example output</desc>
            <filename>KeywordLookup.h</filename>
            <type>text/plain</type>
            <size>8520</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">Ly8gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgS2V5d29yZExvb2t1cEdlbmVyYXRvci5weS4g
IERvIG5vdCBlZGl0LgpzdGF0aWMgY29uc3QgaW50IG1heFRva2VuTGVuZ3RoID0gMTE7CmNvbnN0
IHB0cmRpZmZfdCByZW1haW5pbmcgPSBtX2NvZGVFbmQgLSBtX2NvZGU7CmlmICgocmVtYWluaW5n
ID49IG1heFRva2VuTGVuZ3RoKSAmJiAhKGxleFR5cGUgJiBJZ25vcmVSZXNlcnZlZFdvcmRzKSkg
ewogICAgY29uc3QgVUNoYXIqIGNvZGUgPSBtX2NvZGU7CiAgICBpZiAoY29kZVswXSA9PSAnZicp
IHsKICAgICAgICBpZiAoQ09NUEFSRV9DSEFSQUNURVJTNyhjb2RlICsgMSwgJ3UnLCAnbicsICdj
JywgJ3QnLCAnaScsICdvJywgJ24nKSkgewogICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNv
ZGVbOF0pKSB7CiAgICAgICAgICAgICAgICBpbnRlcm5hbFNoaWZ0PDgsIGZhbHNlPigpOwogICAg
ICAgICAgICAgICAgcmV0dXJuIEZVTkNUSU9OOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKENPTVBBUkVfQ0hBUkFDVEVSUzIoY29kZSArIDEsICdvJywgJ3InKSkgewog
ICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVbM10pKSB7CiAgICAgICAgICAgICAgICBp
bnRlcm5hbFNoaWZ0PDMsIGZhbHNlPigpOwogICAgICAgICAgICAgICAgcmV0dXJuIEZPUjsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChDT01QQVJFX0NIQVJBQ1RFUlM0
KGNvZGUgKyAxLCAnYScsICdsJywgJ3MnLCAnZScpKSB7CiAgICAgICAgICAgIGlmICghaXNJZGVu
dFBhcnQoY29kZVs1XSkpIHsKICAgICAgICAgICAgICAgIGludGVybmFsU2hpZnQ8NSwgZmFsc2U+
KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0VUT0tFTjsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgICBlbHNlIGlmIChDT01QQVJFX0NIQVJBQ1RFUlM2KGNvZGUgKyAxLCAnaScs
ICduJywgJ2EnLCAnbCcsICdsJywgJ3knKSkgewogICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0
KGNvZGVbN10pKSB7CiAgICAgICAgICAgICAgICBpbnRlcm5hbFNoaWZ0PDcsIGZhbHNlPigpOwog
ICAgICAgICAgICAgICAgcmV0dXJuIEZJTkFMTFk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICB9CiAgICBlbHNlIGlmIChjb2RlWzBdID09ICd0JykgewogICAgICAgIGlmIChjb2RlWzFdID09
ICdoJykgewogICAgICAgICAgICBpZiAoQ09NUEFSRV9DSEFSQUNURVJTMihjb2RlICsgMiwgJ2kn
LCAncycpKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVbNF0pKSB7CiAg
ICAgICAgICAgICAgICAgICAgaW50ZXJuYWxTaGlmdDw0LCBmYWxzZT4oKTsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gVEhJU1RPS0VOOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgICAgIGVsc2UgaWYgKENPTVBBUkVfQ0hBUkFDVEVSUzMoY29kZSArIDIsICdyJywg
J28nLCAndycpKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVbNV0pKSB7
CiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxTaGlmdDw1LCBmYWxzZT4oKTsKICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVEhST1c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY29kZVsxXSA9PSAncicpIHsKICAgICAgICAgICAg
aWYgKENPTVBBUkVfQ0hBUkFDVEVSUzIoY29kZSArIDIsICd1JywgJ2UnKSkgewogICAgICAgICAg
ICAgICAgaWYgKCFpc0lkZW50UGFydChjb2RlWzRdKSkgewogICAgICAgICAgICAgICAgICAgIGlu
dGVybmFsU2hpZnQ8NCwgZmFsc2U+KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUVU
T0tFTjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlm
IChjb2RlWzJdID09ICd5JykgewogICAgICAgICAgICAgICAgaWYgKCFpc0lkZW50UGFydChjb2Rl
WzNdKSkgewogICAgICAgICAgICAgICAgICAgIGludGVybmFsU2hpZnQ8MywgZmFsc2U+KCk7CiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSWTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChDT01QQVJFX0NIQVJBQ1RFUlM1KGNvZGUg
KyAxLCAneScsICdwJywgJ2UnLCAnbycsICdmJykpIHsKICAgICAgICAgICAgaWYgKCFpc0lkZW50
UGFydChjb2RlWzZdKSkgewogICAgICAgICAgICAgICAgaW50ZXJuYWxTaGlmdDw2LCBmYWxzZT4o
KTsKICAgICAgICAgICAgICAgIHJldHVybiBUWVBFT0Y7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICB9CiAgICBlbHNlIGlmIChjb2RlWzBdID09ICdpJykgewogICAgICAgIGlmIChjb2RlWzFd
ID09ICdmJykgewogICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVbMl0pKSB7CiAgICAg
ICAgICAgICAgICBpbnRlcm5hbFNoaWZ0PDIsIGZhbHNlPigpOwogICAgICAgICAgICAgICAgcmV0
dXJuIElGOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNvZGVbMV0g
PT0gJ24nKSB7CiAgICAgICAgICAgIGlmICghaXNJZGVudFBhcnQoY29kZVsyXSkpIHsKICAgICAg
ICAgICAgICAgIGludGVybmFsU2hpZnQ8MiwgZmFsc2U+KCk7CiAgICAgICAgICAgICAgICByZXR1
cm4gSU5UT0tFTjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQ09NUEFSRV9DSEFSQUNU
RVJTOChjb2RlICsgMiwgJ3MnLCAndCcsICdhJywgJ24nLCAnYycsICdlJywgJ28nLCAnZicpKSB7
CiAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVbMTBdKSkgewogICAgICAgICAg
ICAgICAgICAgIGludGVybmFsU2hpZnQ8MTAsIGZhbHNlPigpOwogICAgICAgICAgICAgICAgICAg
IHJldHVybiBJTlNUQU5DRU9GOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICAgIGVsc2UgaWYgKENPTVBBUkVfQ0hBUkFDVEVSUzUoY29kZSArIDEsICdtJywg
J3AnLCAnbycsICdyJywgJ3QnKSkgewogICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVb
Nl0pKSB7CiAgICAgICAgICAgICAgICBpbnRlcm5hbFNoaWZ0PDYsIGZhbHNlPigpOwogICAgICAg
ICAgICAgICAgcmV0dXJuIFJFU0VSVkVEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQog
ICAgZWxzZSBpZiAoY29kZVswXSA9PSAndicpIHsKICAgICAgICBpZiAoQ09NUEFSRV9DSEFSQUNU
RVJTMihjb2RlICsgMSwgJ2EnLCAncicpKSB7CiAgICAgICAgICAgIGlmICghaXNJZGVudFBhcnQo
Y29kZVszXSkpIHsKICAgICAgICAgICAgICAgIGludGVybmFsU2hpZnQ8MywgZmFsc2U+KCk7CiAg
ICAgICAgICAgICAgICByZXR1cm4gVkFSOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg
IGVsc2UgaWYgKENPTVBBUkVfQ0hBUkFDVEVSUzMoY29kZSArIDEsICdvJywgJ2knLCAnZCcpKSB7
CiAgICAgICAgICAgIGlmICghaXNJZGVudFBhcnQoY29kZVs0XSkpIHsKICAgICAgICAgICAgICAg
IGludGVybmFsU2hpZnQ8NCwgZmFsc2U+KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gVk9JRFRP
S0VOOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoQ09NUEFSRV9D
SEFSQUNURVJTNihjb2RlLCAncicsICdlJywgJ3QnLCAndScsICdyJywgJ24nKSkgewogICAgICAg
IGlmICghaXNJZGVudFBhcnQoY29kZVs2XSkpIHsKICAgICAgICAgICAgaW50ZXJuYWxTaGlmdDw2
LCBmYWxzZT4oKTsKICAgICAgICAgICAgcmV0dXJuIFJFVFVSTjsKICAgICAgICB9CiAgICB9CiAg
ICBlbHNlIGlmIChjb2RlWzBdID09ICduJykgewogICAgICAgIGlmIChDT01QQVJFX0NIQVJBQ1RF
UlMzKGNvZGUgKyAxLCAndScsICdsJywgJ2wnKSkgewogICAgICAgICAgICBpZiAoIWlzSWRlbnRQ
YXJ0KGNvZGVbNF0pKSB7CiAgICAgICAgICAgICAgICBpbnRlcm5hbFNoaWZ0PDQsIGZhbHNlPigp
OwogICAgICAgICAgICAgICAgcmV0dXJuIE5VTExUT0tFTjsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgICBlbHNlIGlmIChDT01QQVJFX0NIQVJBQ1RFUlMyKGNvZGUgKyAxLCAnZScsICd3
JykpIHsKICAgICAgICAgICAgaWYgKCFpc0lkZW50UGFydChjb2RlWzNdKSkgewogICAgICAgICAg
ICAgICAgaW50ZXJuYWxTaGlmdDwzLCBmYWxzZT4oKTsKICAgICAgICAgICAgICAgIHJldHVybiBO
RVc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjb2RlWzBdID09
ICdlJykgewogICAgICAgIGlmIChDT01QQVJFX0NIQVJBQ1RFUlMzKGNvZGUgKyAxLCAnbCcsICdz
JywgJ2UnKSkgewogICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVbNF0pKSB7CiAgICAg
ICAgICAgICAgICBpbnRlcm5hbFNoaWZ0PDQsIGZhbHNlPigpOwogICAgICAgICAgICAgICAgcmV0
dXJuIEVMU0U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY29kZVsx
XSA9PSAneCcpIHsKICAgICAgICAgICAgaWYgKENPTVBBUkVfQ0hBUkFDVEVSUzQoY29kZSArIDIs
ICdwJywgJ28nLCAncicsICd0JykpIHsKICAgICAgICAgICAgICAgIGlmICghaXNJZGVudFBhcnQo
Y29kZVs2XSkpIHsKICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFNoaWZ0PDYsIGZhbHNlPigp
OwogICAgICAgICAgICAgICAgICAgIHJldHVybiBSRVNFUlZFRDsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChDT01QQVJFX0NIQVJBQ1RFUlM1KGNv
ZGUgKyAyLCAndCcsICdlJywgJ24nLCAnZCcsICdzJykpIHsKICAgICAgICAgICAgICAgIGlmICgh
aXNJZGVudFBhcnQoY29kZVs3XSkpIHsKICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFNoaWZ0
PDcsIGZhbHNlPigpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBSRVNFUlZFRDsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChDT01Q
QVJFX0NIQVJBQ1RFUlMzKGNvZGUgKyAxLCAnbicsICd1JywgJ20nKSkgewogICAgICAgICAgICBp
ZiAoIWlzSWRlbnRQYXJ0KGNvZGVbNF0pKSB7CiAgICAgICAgICAgICAgICBpbnRlcm5hbFNoaWZ0
PDQsIGZhbHNlPigpOwogICAgICAgICAgICAgICAgcmV0dXJuIFJFU0VSVkVEOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoY29kZVswXSA9PSAnYycpIHsKICAgICAg
ICBpZiAoY29kZVsxXSA9PSAnYScpIHsKICAgICAgICAgICAgaWYgKENPTVBBUkVfQ0hBUkFDVEVS
UzMoY29kZSArIDIsICd0JywgJ2MnLCAnaCcpKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzSWRl
bnRQYXJ0KGNvZGVbNV0pKSB7CiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxTaGlmdDw1LCBm
YWxzZT4oKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0FUQ0g7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoQ09NUEFSRV9DSEFSQUNURVJT
Mihjb2RlICsgMiwgJ3MnLCAnZScpKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0
KGNvZGVbNF0pKSB7CiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxTaGlmdDw0LCBmYWxzZT4o
KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0FTRTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChDT01QQVJFX0NIQVJBQ1RFUlMy
KGNvZGUgKyAxLCAnbycsICduJykpIHsKICAgICAgICAgICAgaWYgKENPTVBBUkVfQ0hBUkFDVEVS
UzUoY29kZSArIDMsICd0JywgJ2knLCAnbicsICd1JywgJ2UnKSkgewogICAgICAgICAgICAgICAg
aWYgKCFpc0lkZW50UGFydChjb2RlWzhdKSkgewogICAgICAgICAgICAgICAgICAgIGludGVybmFs
U2hpZnQ8OCwgZmFsc2U+KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENPTlRJTlVFOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKENPTVBB
UkVfQ0hBUkFDVEVSUzIoY29kZSArIDMsICdzJywgJ3QnKSkgewogICAgICAgICAgICAgICAgaWYg
KCFpc0lkZW50UGFydChjb2RlWzVdKSkgewogICAgICAgICAgICAgICAgICAgIGludGVybmFsU2hp
ZnQ8NSwgZmFsc2U+KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENPTlNUVE9LRU47CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
Q09NUEFSRV9DSEFSQUNURVJTNChjb2RlICsgMSwgJ2wnLCAnYScsICdzJywgJ3MnKSkgewogICAg
ICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVbNV0pKSB7CiAgICAgICAgICAgICAgICBpbnRl
cm5hbFNoaWZ0PDUsIGZhbHNlPigpOwogICAgICAgICAgICAgICAgcmV0dXJuIFJFU0VSVkVEOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoQ09NUEFSRV9DSEFSQUNU
RVJTNShjb2RlLCAnYicsICdyJywgJ2UnLCAnYScsICdrJykpIHsKICAgICAgICBpZiAoIWlzSWRl
bnRQYXJ0KGNvZGVbNV0pKSB7CiAgICAgICAgICAgIGludGVybmFsU2hpZnQ8NSwgZmFsc2U+KCk7
CiAgICAgICAgICAgIHJldHVybiBCUkVBSzsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChj
b2RlWzBdID09ICd3JykgewogICAgICAgIGlmIChDT01QQVJFX0NIQVJBQ1RFUlM0KGNvZGUgKyAx
LCAnaCcsICdpJywgJ2wnLCAnZScpKSB7CiAgICAgICAgICAgIGlmICghaXNJZGVudFBhcnQoY29k
ZVs1XSkpIHsKICAgICAgICAgICAgICAgIGludGVybmFsU2hpZnQ8NSwgZmFsc2U+KCk7CiAgICAg
ICAgICAgICAgICByZXR1cm4gV0hJTEU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg
ZWxzZSBpZiAoQ09NUEFSRV9DSEFSQUNURVJTMyhjb2RlICsgMSwgJ2knLCAndCcsICdoJykpIHsK
ICAgICAgICAgICAgaWYgKCFpc0lkZW50UGFydChjb2RlWzRdKSkgewogICAgICAgICAgICAgICAg
aW50ZXJuYWxTaGlmdDw0LCBmYWxzZT4oKTsKICAgICAgICAgICAgICAgIHJldHVybiBXSVRIOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoY29kZVswXSA9PSAnZCcp
IHsKICAgICAgICBpZiAoY29kZVsxXSA9PSAnZScpIHsKICAgICAgICAgICAgaWYgKENPTVBBUkVf
Q0hBUkFDVEVSUzUoY29kZSArIDIsICdmJywgJ2EnLCAndScsICdsJywgJ3QnKSkgewogICAgICAg
ICAgICAgICAgaWYgKCFpc0lkZW50UGFydChjb2RlWzddKSkgewogICAgICAgICAgICAgICAgICAg
IGludGVybmFsU2hpZnQ8NywgZmFsc2U+KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERF
RkFVTFQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBp
ZiAoQ09NUEFSRV9DSEFSQUNURVJTNihjb2RlICsgMiwgJ2InLCAndScsICdnJywgJ2cnLCAnZScs
ICdyJykpIHsKICAgICAgICAgICAgICAgIGlmICghaXNJZGVudFBhcnQoY29kZVs4XSkpIHsKICAg
ICAgICAgICAgICAgICAgICBpbnRlcm5hbFNoaWZ0PDgsIGZhbHNlPigpOwogICAgICAgICAgICAg
ICAgICAgIHJldHVybiBERUJVR0dFUjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgICBlbHNlIGlmIChDT01QQVJFX0NIQVJBQ1RFUlM0KGNvZGUgKyAyLCAnbCcsICdl
JywgJ3QnLCAnZScpKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVbNl0p
KSB7CiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxTaGlmdDw2LCBmYWxzZT4oKTsKICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gREVMRVRFVE9LRU47CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY29kZVsxXSA9PSAnbycpIHsKICAg
ICAgICAgICAgaWYgKCFpc0lkZW50UGFydChjb2RlWzJdKSkgewogICAgICAgICAgICAgICAgaW50
ZXJuYWxTaGlmdDwyLCBmYWxzZT4oKTsKICAgICAgICAgICAgICAgIHJldHVybiBETzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGNvZGVbMF0gPT0gJ3MnKSB7CiAg
ICAgICAgaWYgKENPTVBBUkVfQ0hBUkFDVEVSUzUoY29kZSArIDEsICd3JywgJ2knLCAndCcsICdj
JywgJ2gnKSkgewogICAgICAgICAgICBpZiAoIWlzSWRlbnRQYXJ0KGNvZGVbNl0pKSB7CiAgICAg
ICAgICAgICAgICBpbnRlcm5hbFNoaWZ0PDYsIGZhbHNlPigpOwogICAgICAgICAgICAgICAgcmV0
dXJuIFNXSVRDSDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChDT01Q
QVJFX0NIQVJBQ1RFUlM0KGNvZGUgKyAxLCAndScsICdwJywgJ2UnLCAncicpKSB7CiAgICAgICAg
ICAgIGlmICghaXNJZGVudFBhcnQoY29kZVs1XSkpIHsKICAgICAgICAgICAgICAgIGludGVybmFs
U2hpZnQ8NSwgZmFsc2U+KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gUkVTRVJWRUQ7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K
</data>

          </attachment>
      

    </bug>

</bugzilla>