<?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>51311</bug_id>
          
          <creation_ts>2010-12-19 16:02:58 -0800</creation_ts>
          <short_desc>SegmentedString should provide column position</short_desc>
          <delta_ts>2011-01-11 08:45:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52013</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">peter.rybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>aestes</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>peter.rybin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>324235</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-19 16:02:58 -0800</bug_when>
    <thetext>Script engine needs line/column position of &lt;script&gt; tag. Currently there is no way column value could be obtained.
SegmentedString should provide it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324237</commentid>
    <comment_count>1</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-19 16:04:48 -0800</bug_when>
    <thetext>This bug spun off from bug https://bugs.webkit.org/show_bug.cgi?id=45271 &quot;HTML parser should provide script column position within HTML document to JavaScript engine&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324238</commentid>
    <comment_count>2</comment_count>
      <attachid>76962</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-19 16:19:50 -0800</bug_when>
    <thetext>Created attachment 76962
Proposed Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324242</commentid>
    <comment_count>3</comment_count>
      <attachid>76962</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-19 16:27:15 -0800</bug_when>
    <thetext>Comment on attachment 76962
Proposed Patch.

 Comments/concerns:

1. SegmentedString now uses WTH::ZeroBasedNumber, but it&apos;s a dependency on JavaScriptCode/wtf/text (from WebCore/platform/text).

2. SegmentedString counts column number and also line number. We can remove this functionality from HTMLTokenizer now and stop passing lineNumber by reference to SegmentedString on each call.

3. I remember Adam was concerned about forks that appeared inside advance* methods. I&apos;m afraid I don&apos;t see how I could do without them.

4. HTMLTreeBuilder uses m_parser new field, but it has to upcast in order to call textPosition. I don&apos;t see how to make it better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324899</commentid>
    <comment_count>4</comment_count>
      <attachid>76962</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-21 00:47:54 -0800</bug_when>
    <thetext>Comment on attachment 76962
Proposed Patch.

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

&gt; WebCore/html/parser/HTMLDocumentParser.cpp:82
&gt; -    , m_treeBuilder(HTMLTreeBuilder::create(m_tokenizer.get(), document, reportErrors, usePreHTML5ParserQuirks(document)))
&gt; +    , m_treeBuilder(HTMLTreeBuilder::create(this, m_tokenizer.get(), document, reportErrors, usePreHTML5ParserQuirks(document)))

Hum...  I&apos;m not sure we want to teach the tree builder about the document parser...

&gt; WebCore/html/parser/HTMLInputStream.h:140
&gt; +        // Generated script part inherits current position.

Comments should be complete sentences.

&gt; WebCore/html/parser/HTMLTreeBuilder.cpp:2783
&gt; -    TextPosition0 position = TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(m_tokenizer-&gt;lineNumber()), WTF::ZeroBasedNumber::base());
&gt; +    ScriptableDocumentParser* parserUpcast = m_parser;
&gt; +    TextPosition0 position = parserUpcast-&gt;textPosition();

Why do we need to do this?  HTMLDocumentParser inherits from ScriptableDocumentParser...  Rather than pass in the whole HTMLDocumentParser, we should just pass in the textPosition.

&gt; WebCore/html/parser/HTMLTreeBuilder.h:248
&gt; +    HTMLDocumentParser* m_parser;

What&apos;s the point of storing this object in a member variable if you only ever use it in the constructor?

&gt; WebCore/platform/text/SegmentedString.cpp:56
&gt; +    m_lineBeginCharactersConsumedValue = other.m_lineBeginCharactersConsumedValue;

m_lineBeginCharactersConsumedValue is a mouthful.  What does this variable represent?

&gt; WebCore/platform/text/SegmentedString.cpp:248
&gt; +          ++lineNumber;
&gt; +          ++m_currentLine;

Four-space indent please.

&gt; WebCore/platform/text/SegmentedString.cpp:249
&gt; +          m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed();

I see.  This probably should be called m_numberOfCharactersConsumedPriorToCurrentLine to match m_numberOfCharactersConsumedPriorToCurrentString.

&gt; WebCore/platform/text/SegmentedString.cpp:262
&gt; +WTF::ZeroBasedNumber SegmentedString::currentColumn() const

So, this function is moderately slow.  Might be worth mentioning in the header.

&gt; WebCore/platform/text/SegmentedString.cpp:272
&gt; +void SegmentedString::setCurrentPosition(WTF::ZeroBasedNumber line, WTF::ZeroBasedNumber column, int offset)
&gt; +{
&gt; +    m_currentLine = line.zeroBasedInt();
&gt; +    m_lineBeginCharactersConsumedValue = numberOfCharactersConsumedSlow() + offset - column.zeroBasedInt();
&gt; +}

This offset business is pretty mysterious.  Can we use a more descriptive variable name?

&gt; WebCore/platform/text/SegmentedString.h:167
&gt; +            if (newLineFlag)
&gt; +                m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed();

Isn&apos;t the whole point of this codepath to avoid branching on newLineFlag?

&gt; WebCore/platform/text/SegmentedString.h:193
&gt; -            lineNumber += (*m_currentString.m_current == &apos;\n&apos;) &amp; m_currentString.doNotExcludeLineNumbers();
&gt; +            int newLineFlag = (*m_currentString.m_current == &apos;\n&apos;) &amp; m_currentString.doNotExcludeLineNumbers();
&gt; +            lineNumber += newLineFlag;
&gt; +            m_currentLine += newLineFlag;
&gt; +            if (newLineFlag)
&gt; +                m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed() + 1;

Same here.  These branches are bad for performance.  Did you benchmark this patch using the html-parser benchmark in WebCore/benchmarks ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324900</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-21 00:50:08 -0800</bug_when>
    <thetext>&gt; 1. SegmentedString now uses WTH::ZeroBasedNumber, but it&apos;s a dependency on JavaScriptCode/wtf/text (from WebCore/platform/text).

That&apos;s fine.  JavaScriptCore/wtf is a very low-level library.

&gt; 2. SegmentedString counts column number and also line number. We can remove this functionality from HTMLTokenizer now and stop passing lineNumber by reference to SegmentedString on each call.

Great.  We should only track this in one place.

&gt; 3. I remember Adam was concerned about forks that appeared inside advance* methods. I&apos;m afraid I don&apos;t see how I could do without them.

Can you run the benchmark with and without your patch so we can see how much performance we&apos;re talking about?  Per-character branches usually are visible on the benchmark.

&gt; 4. HTMLTreeBuilder uses m_parser new field, but it has to upcast in order to call textPosition. I don&apos;t see how to make it better.

Can&apos;t you just pass in the textPosition instead of passing in the whole object?

In general, this looks pretty good.  There are just some details to square away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325216</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-21 14:57:35 -0800</bug_when>
    <thetext>&gt; &gt; 3. I remember Adam was concerned about forks that appeared inside advance* methods. I&apos;m afraid I don&apos;t see how I could do without them.
&gt; 
&gt; Can you run the benchmark with and without your patch so we can see how much performance we&apos;re talking about?  Per-character branches usually are visible on the benchmark.

I ran 3 times before and after, and in average I have:
4354 (base) and 4377 (with patch). It&apos;s definitely visible, but I&apos;m not sure I see a really better solution.

&gt; &gt; 4. HTMLTreeBuilder uses m_parser new field, but it has to upcast in order to call textPosition. I don&apos;t see how to make it better.
&gt; 
&gt; Can&apos;t you just pass in the textPosition instead of passing in the whole object?

I&apos;m sorry I don&apos;t quite see how I can pass it other way. Now I do a callback from tree builder as deep as to SegmentedString when I need a column value (at script tag only).

Passing it directly from parser as a parameter might be a bit messy. Here&apos;s a stack I would have to go through:
        WebCore::HTMLTreeBuilder::processScriptStartTag()
        WebCore::HTMLTreeBuilder::processStartTagForInHead()
        WebCore::HTMLTreeBuilder::processStartTag()
        WebCore::HTMLTreeBuilder::processToken()
        WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken()
        WebCore::HTMLTreeBuilder::constructTreeFromToken()

Alternatively I can create a variable somewhere, pass it by reference into the tree builder and update this reference on each token in parser. It seems to be quite fragile to me.

Do I miss something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325417</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-22 00:40:28 -0800</bug_when>
    <thetext>&gt; &gt; Can you run the benchmark with and without your patch so we can see how much performance we&apos;re talking about?  Per-character branches usually are visible on the benchmark.
&gt; 
&gt; I ran 3 times before and after, and in average I have:
&gt; 4354 (base) and 4377 (with patch). It&apos;s definitely visible, but I&apos;m not sure I see a really better solution.

Ok.  I think we can live with a 0.5% regression.

&gt; &gt; &gt; 4. HTMLTreeBuilder uses m_parser new field, but it has to upcast in order to call textPosition. I don&apos;t see how to make it better.
&gt; &gt; 
&gt; &gt; Can&apos;t you just pass in the textPosition instead of passing in the whole object?
&gt; 
&gt; I&apos;m sorry I don&apos;t quite see how I can pass it other way. Now I do a callback from tree builder as deep as to SegmentedString when I need a column value (at script tag only).
&gt; 
&gt; Passing it directly from parser as a parameter might be a bit messy. Here&apos;s a stack I would have to go through:
&gt;         WebCore::HTMLTreeBuilder::processScriptStartTag()
&gt;         WebCore::HTMLTreeBuilder::processStartTagForInHead()
&gt;         WebCore::HTMLTreeBuilder::processStartTag()
&gt;         WebCore::HTMLTreeBuilder::processToken()
&gt;         WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken()
&gt;         WebCore::HTMLTreeBuilder::constructTreeFromToken()
&gt; 
&gt; Alternatively I can create a variable somewhere, pass it by reference into the tree builder and update this reference on each token in parser. It seems to be quite fragile to me.
&gt; 
&gt; Do I miss something?

Ah, I think the change to HTMLTreeBuilder::processScriptStartTag isn&apos;t in your patch.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325627</commentid>
    <comment_count>8</comment_count>
      <attachid>76962</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-22 12:23:01 -0800</bug_when>
    <thetext>Comment on attachment 76962
Proposed Patch.

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

&gt;&gt; WebCore/html/parser/HTMLDocumentParser.cpp:82
&gt;&gt; +    , m_treeBuilder(HTMLTreeBuilder::create(this, m_tokenizer.get(), document, reportErrors, usePreHTML5ParserQuirks(document)))
&gt; 
&gt; Hum...  I&apos;m not sure we want to teach the tree builder about the document parser...

I need a parser to obtain a current position (line/column) when we run into script tag. Technically I only need something like position tracker, that would return me current position, but I didn&apos;t want to create a new interface.
I thought that since we already know about html tokenizer, html parser dependency doesn&apos;t make it much worse.

&gt;&gt; WebCore/html/parser/HTMLInputStream.h:140
&gt;&gt; +        // Generated script part inherits current position.
&gt; 
&gt; Comments should be complete sentences.

Done

&gt;&gt; WebCore/html/parser/HTMLTreeBuilder.cpp:2783
&gt;&gt; +    TextPosition0 position = parserUpcast-&gt;textPosition();
&gt; 
&gt; Why do we need to do this?  HTMLDocumentParser inherits from ScriptableDocumentParser...  Rather than pass in the whole HTMLDocumentParser, we should just pass in the textPosition.

m_parser-&gt;textPosition() does not compile, because textPosition has private access in HTMLDocumentParser (I do not know what for).
I cannot pass textPosition, because it&apos;s a variable. I need its current value when I get to &lt;script&gt; tag.

&gt;&gt; WebCore/html/parser/HTMLTreeBuilder.h:248
&gt;&gt; +    HTMLDocumentParser* m_parser;
&gt; 
&gt; What&apos;s the point of storing this object in a member variable if you only ever use it in the constructor?

That&apos;s not true. I store it in constructor and I use in processScriptStartTag.

&gt;&gt; WebCore/platform/text/SegmentedString.cpp:248
&gt;&gt; +          ++m_currentLine;
&gt; 
&gt; Four-space indent please.

Sorry.

&gt;&gt; WebCore/platform/text/SegmentedString.cpp:249
&gt;&gt; +          m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed();
&gt; 
&gt; I see.  This probably should be called m_numberOfCharactersConsumedPriorToCurrentLine to match m_numberOfCharactersConsumedPriorToCurrentString.

Thanks. Done.

&gt;&gt; WebCore/platform/text/SegmentedString.cpp:262
&gt;&gt; +WTF::ZeroBasedNumber SegmentedString::currentColumn() const
&gt; 
&gt; So, this function is moderately slow.  Might be worth mentioning in the header.

I put a comment. I wouldn&apos;t say it&apos;s really slow though. It has no cycles, only 4-5 arithmetics and calls.

&gt;&gt; WebCore/platform/text/SegmentedString.cpp:272
&gt;&gt; +}
&gt; 
&gt; This offset business is pretty mysterious.  Can we use a more descriptive variable name?

I renamed them and added a comment.

&gt;&gt; WebCore/platform/text/SegmentedString.h:167
&gt;&gt; +                m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed();
&gt; 
&gt; Isn&apos;t the whole point of this codepath to avoid branching on newLineFlag?

Yes. I cannot avoid braching, but I tried to preserve the old code style ( += hocus). If it doesn&apos;t make sense now, let me put increment inside condition.

&gt;&gt; WebCore/platform/text/SegmentedString.h:193
&gt;&gt; +                m_lineBeginCharactersConsumedValue = numberOfCharactersConsumed() + 1;
&gt; 
&gt; Same here.  These branches are bad for performance.  Did you benchmark this patch using the html-parser benchmark in WebCore/benchmarks ?

Yes. I posted numbers in previous reply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325633</commentid>
    <comment_count>9</comment_count>
      <attachid>77247</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-22 12:27:15 -0800</bug_when>
    <thetext>Created attachment 77247
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326516</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-24 01:51:41 -0800</bug_when>
    <thetext>You should mention performance in your ChangeLog.  did you run WebCore/benchmarks/html-parser.html?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326654</commentid>
    <comment_count>11</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-24 10:07:11 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; You should mention performance in your ChangeLog.  did you run WebCore/benchmarks/html-parser.html?

Yep, my numbers (mentioned above) are:
on test_shell WebCore/benchmarks/html-parser.html averaged by 3 runs: 4354 (base) and 4377 (with patch).

I&apos;ll put it in Changelog as percents in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326658</commentid>
    <comment_count>12</comment_count>
      <attachid>77247</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-24 10:20:11 -0800</bug_when>
    <thetext>Comment on attachment 77247
Patch

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

Thanks for sticking with this patch.  Some minor nits below.

&gt; WebCore/html/parser/HTMLTreeBuilder.cpp:359
&gt; -HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission, bool usePreHTML5ParserQuirks)
&gt; +HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, HTMLTokenizer* tokenizer, DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission, bool usePreHTML5ParserQuirks)

This part of the change still makes me sad.  If we&apos;re going to expose the whole HTMLDocumentParser, they we probably don&apos;t need to pass the tokenizer separately since you can get that from the parser.  Maybe we should pass a pointer to the input stream instead?

&gt; WebCore/html/parser/HTMLTreeBuilder.cpp:2783
&gt; +    ScriptableDocumentParser* parserUpcast = m_parser;
&gt; +    TextPosition0 position = parserUpcast-&gt;textPosition();

I don&apos;t understand why wer need to do this casting.  Isn&apos;t textPosition available on HTMLDocumentParser directory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326660</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-24 10:21:14 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 77247 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77247&amp;action=review
&gt; 
&gt; &gt; WebCore/html/parser/HTMLTreeBuilder.cpp:2783
&gt; &gt; +    ScriptableDocumentParser* parserUpcast = m_parser;
&gt; &gt; +    TextPosition0 position = parserUpcast-&gt;textPosition();
&gt; 
&gt; I don&apos;t understand why wer need to do this casting.  Isn&apos;t textPosition available on HTMLDocumentParser directory?

You mention above that it&apos;s private on HTMLDocumentParser.  You should just make it public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326837</commentid>
    <comment_count>14</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-25 15:32:54 -0800</bug_when>
    <thetext>&gt; &gt; WebCore/html/parser/HTMLTreeBuilder.cpp:359
&gt; &gt; -HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission, bool usePreHTML5ParserQuirks)
&gt; &gt; +HTMLTreeBuilder::HTMLTreeBuilder(HTMLDocumentParser* parser, HTMLTokenizer* tokenizer, DocumentFragment* fragment, Element* contextElement, FragmentScriptingPermission scriptingPermission, bool usePreHTML5ParserQuirks)

&gt; This part of the change still makes me sad.  If we&apos;re going to expose the whole HTMLDocumentParser, they we probably don&apos;t need to pass the tokenizer separately since you can get that from the parser.  Maybe we should pass a pointer to the input stream instead?

Totally agree. I would prefer the first -- to get tokenizer from parser. After all it&apos;s probably just natural that tokenizer is a part of parser.

Exposing html stream seems less elegant to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326839</commentid>
    <comment_count>15</comment_count>
      <attachid>77445</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-25 15:37:13 -0800</bug_when>
    <thetext>Created attachment 77445
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326846</commentid>
    <comment_count>16</comment_count>
      <attachid>77445</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-25 16:56:14 -0800</bug_when>
    <thetext>Comment on attachment 77445
Patch

Ok.  Presumably we need one more patch to hook up the column number to the scripting engine and to add tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326847</commentid>
    <comment_count>17</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-25 17:27:32 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 77445 [details])
&gt; Ok.  Presumably we need one more patch to hook up the column number to the scripting engine and to add tests?

Actually we have already done scripting engine ( https://bugs.webkit.org/show_bug.cgi?id=45271 ), and I even checked up the Eclipse-based debugger for Chrome -- it sees correct columns already.

However I completely missed scripts inside attributes. Probably I should make a follow-up for them.

As to tests, my colleagues suggested I used their inspector-related testing framework that should give me access to column positions. For now it seems to me  an only way of getting column number from tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326849</commentid>
    <comment_count>18</comment_count>
      <attachid>77445</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-25 17:49:19 -0800</bug_when>
    <thetext>Comment on attachment 77445
Patch

Clearing flags on attachment: 77445

Committed r74663: &lt;http://trac.webkit.org/changeset/74663&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326850</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-25 17:49:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326860</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-25 21:24:59 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74663 might have broken GTK Linux 32-bit Release
The following tests are not passing:
media/controls-strict.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326876</commentid>
    <comment_count>21</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2010-12-26 04:25:53 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; http://trac.webkit.org/changeset/74663 might have broken GTK Linux 32-bit Release
&gt; The following tests are not passing:
&gt; media/controls-strict.html

I guess it&apos;s a false alert, the test didn&apos;t show up in
http://build.webkit.org/changes/24250</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330523</commentid>
    <comment_count>22</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-01-06 16:17:34 -0800</bug_when>
    <thetext>The assertion added to HTMLDocumentParser::textPosition() (ASSERT(m_tokenizer-&gt;lineNumber() == line.zeroBasedInt()) is getting hit in debug builds. Visiting en.wikipedia.org is an easy way to trigger it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330534</commentid>
    <comment_count>23</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-01-06 16:24:50 -0800</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=52033 to track the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332303</commentid>
    <comment_count>24</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-01-11 06:29:07 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Filed https://bugs.webkit.org/show_bug.cgi?id=52033 to track the regression.

Sorry for not responding to it earlier -- Christmas holidays in Russia. As I understand, the bug is fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332362</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-11 08:45:27 -0800</bug_when>
    <thetext>&gt; Sorry for not responding to it earlier -- Christmas holidays in Russia. As I understand, the bug is fixed now.

Yep.  No worries.  It gave me a chance to learn more about this code.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76962</attachid>
            <date>2010-12-19 16:19:50 -0800</date>
            <delta_ts>2010-12-22 12:27:08 -0800</delta_ts>
            <desc>Proposed Patch.</desc>
            <filename>bug-51311-20101220031947.patch</filename>
            <type>text/plain</type>
            <size>18110</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2JlYWY5NjhkNjNkYjY0Mjk4ZmU1MWFiNjA4YTEyZGY0YzZmOTI1Ny4uNGFlZThkYzQwNTliZDMx
MDk5OGMyZmNkMjUyNTVlMGM2YWJhOWVjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0xMi0xOSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBjdXJyZW50Q29sdW1uIChhbmQgY3VycmVu
dExpbmUpIHRvIFNlZ21lbnRlZFN0cmluZy4gU3dpdGNoZXMKKyAgICAgICAgSFRNTFRyZWVCdWls
ZGVyIHRvIEhUTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uIHdoZW4gaXQKKyAgICAgICAg
bmVlZHMgcG9zaXRpb24gZm9yIGEgPHNjcmlwdD4gdGFnLgorCisgICAgICAgIFNlZ21lbnRlZFN0
cmluZyBzaG91bGQgcHJvdmlkZSBjb2x1bW4gcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMzExCisKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3Vt
ZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxJbnB1
dFN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjpjdXJyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc2VydGlvblBvaW50UmVjb3JkOjpJbnNlcnRpb25Qb2ludFJl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludFJlY29yZDo6fkluc2VydGlv
blBvaW50UmVjb3JkKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcp
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
U2VnbWVudGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6
b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWRTbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmlu
Zzo6YWR2YW5jZVNsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6
Y3VycmVudExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpjdXJyZW50
Q29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6c2V0Q3VycmVudFBv
c2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpTZWdtZW50ZWRTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdE5ld2xpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQpOgorCiAyMDEwLTEy
LTE5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQ2FtZXJvbiBad2FyaWNoLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuY3BwCmluZGV4IGMzMmY5ZGI4MDNlNDYzMDk3ODdlY2ZmODFmMWRhMjRjZjM0YmNiYmQuLmI5
MmRhMjUyNWEyNjVkNDE4NTY0NGEyZWJlZTYwMzVjZGQwZDE2ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgSFRNTERvY3Vt
ZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9v
bCByZXBvcnRFcnJvcnMKICAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihkb2N1bWVudCkK
ICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZSh1c2VQcmVIVE1MNVBhcnNl
clF1aXJrcyhkb2N1bWVudCkpKQogICAgICwgbV9zY3JpcHRSdW5uZXIoSFRNTFNjcmlwdFJ1bm5l
cjo6Y3JlYXRlKGRvY3VtZW50LCB0aGlzKSkKLSAgICAsIG1fdHJlZUJ1aWxkZXIoSFRNTFRyZWVC
dWlsZGVyOjpjcmVhdGUobV90b2tlbml6ZXIuZ2V0KCksIGRvY3VtZW50LCByZXBvcnRFcnJvcnMs
IHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGRvY3VtZW50KSkpCisgICAgLCBtX3RyZWVCdWlsZGVy
KEhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlKHRoaXMsIG1fdG9rZW5pemVyLmdldCgpLCBkb2N1bWVu
dCwgcmVwb3J0RXJyb3JzLCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcyhkb2N1bWVudCkpKQogICAg
ICwgbV9wYXJzZXJTY2hlZHVsZXIoSFRNTFBhcnNlclNjaGVkdWxlcjo6Y3JlYXRlKHRoaXMpKQog
ICAgICwgbV9lbmRXYXNEZWxheWVkKGZhbHNlKQogICAgICwgbV93cml0ZU5lc3RpbmdMZXZlbCgw
KQpAQCAtOTEsNyArOTEsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNl
cihIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycwogSFRNTERvY3VtZW50
UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVs
ZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0
aW5nUGVybWlzc2lvbikKICAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+
ZG9jdW1lbnQoKSkKICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZSh1c2VQ
cmVIVE1MNVBhcnNlclF1aXJrcyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkpKQotICAgICwgbV90cmVl
QnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZShtX3Rva2VuaXplci5nZXQoKSwgZnJhZ21l
bnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCB1c2VQcmVIVE1MNVBhcnNl
clF1aXJrcyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkpKQorICAgICwgbV90cmVlQnVpbGRlcihIVE1M
VHJlZUJ1aWxkZXI6OmNyZWF0ZSh0aGlzLCBtX3Rva2VuaXplci5nZXQoKSwgZnJhZ21lbnQsIGNv
bnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCB1c2VQcmVIVE1MNVBhcnNlclF1aXJr
cyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkpKQogICAgICwgbV9lbmRXYXNEZWxheWVkKGZhbHNlKQog
ICAgICwgbV93cml0ZU5lc3RpbmdMZXZlbCgwKQogewpAQCAtNDA3LDExICs0MDcsMTIgQEAgaW50
IEhUTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiAKIFRleHRQb3NpdGlvbjAg
SFRNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAogewotICAgIGludCBsaW5l
WmVyb0Jhc2VkID0gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKTsKLSAgICBpbnQgY29sdW1uT25l
QmFzZWQgPSBtX3Rva2VuaXplci0+Y29sdW1uTnVtYmVyKCk7CisgICAgY29uc3QgU2VnbWVudGVk
U3RyaW5nJiBjdXJyZW50U3RyaW5nID0gbV9pbnB1dC5jdXJyZW50KCk7CisgICAgV1RGOjpaZXJv
QmFzZWROdW1iZXIgbGluZSA9IGN1cnJlbnRTdHJpbmcuY3VycmVudExpbmUoKTsKKyAgICBXVEY6
Olplcm9CYXNlZE51bWJlciBjb2x1bW4gPSBjdXJyZW50U3RyaW5nLmN1cnJlbnRDb2x1bW4oKTsK
KyAgICBBU1NFUlQobV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSA9PSBsaW5lLnplcm9CYXNlZElu
dCgpKTsKIAotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpm
cm9tWmVyb0Jhc2VkSW50KGxpbmVaZXJvQmFzZWQpLAotICAgICAgICBXVEY6Ok9uZUJhc2VkTnVt
YmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1uT25lQmFzZWQpLmNvbnZlcnRUb1plcm9CYXNlZCgp
KTsKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChsaW5lLCBjb2x1bW4pOwogfQogCiBib29sIEhU
TUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oIGIvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MSW5wdXRTdHJlYW0uaAppbmRleCBhNzA5YmQ5YmQ1YjIxZDExN2VlZmE0NTEyODhi
MjZiMGZiNzk0MWY0Li41MWQxNTU3OTNhNmY4N2I2YTQ0YTk1MTViNWY4OTJjNTdiNmQwNmQ0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oCisrKyBiL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKQEAgLTk0LDYgKzk0LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIFNlZ21lbnRlZFN0cmluZyYgY3VycmVudCgpIHsgcmV0dXJuIG1f
Zmlyc3Q7IH0KKyAgICBjb25zdCBTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2ZpcnN0OyB9CiAKICAgICB2b2lkIHNwbGl0SW50byhTZWdtZW50ZWRTdHJpbmcmIG5l
eHQpCiAgICAgewpAQCAtMTMzLDE3ICsxMzQsMjggQEAgcHVibGljOgogICAgIGV4cGxpY2l0IElu
c2VydGlvblBvaW50UmVjb3JkKEhUTUxJbnB1dFN0cmVhbSYgaW5wdXRTdHJlYW0pCiAgICAgICAg
IDogbV9pbnB1dFN0cmVhbSgmaW5wdXRTdHJlYW0pCiAgICAgeworICAgICAgICBtX2xpbmUgPSBt
X2lucHV0U3RyZWFtLT5jdXJyZW50KCkuY3VycmVudExpbmUoKTsKKyAgICAgICAgbV9jb2x1bW4g
PSBtX2lucHV0U3RyZWFtLT5jdXJyZW50KCkuY3VycmVudENvbHVtbigpOwogICAgICAgICBtX2lu
cHV0U3RyZWFtLT5zcGxpdEludG8obV9uZXh0KTsKKyAgICAgICAgLy8gR2VuZXJhdGVkIHNjcmlw
dCBwYXJ0IGluaGVyaXRzIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgIG1faW5wdXRTdHJlYW0t
PmN1cnJlbnQoKS5zZXRDdXJyZW50UG9zaXRpb24obV9saW5lLCBtX2NvbHVtbiwgMCk7CiAgICAg
fQogCiAgICAgfkluc2VydGlvblBvaW50UmVjb3JkKCkKICAgICB7CisgICAgICAgIC8vIFNvbWUg
aW5zZXJ0ZWQgdGV4dCBtYXkgaGF2ZSByZW1haW5lZCBpbiBpbnB1dCBzdHJlYW0uIEUuZy4gaWYg
c2NyaXB0IGhhcyB3cml0dGVuICImYW1wIiBvciAiPHRhYmxlIiwKKyAgICAgICAgLy8gaXQgc3Rh
eXMgaW4gYnVmZmVyIGJlY2F1c2UgaXQgY2Fubm90IGJlIHByb3Blcmx5IHRva2VuaXplZCBiZWZv
cmUgd2Ugc2VlIG5leHQgcGFydC4KKyAgICAgICAgaW50IHVucGFyc2VkUmVtYWluZGVyTGVuZ3Ro
ID0gbV9pbnB1dFN0cmVhbS0+Y3VycmVudCgpLmxlbmd0aCgpOwogICAgICAgICBtX2lucHV0U3Ry
ZWFtLT5tZXJnZUZyb20obV9uZXh0KTsKKyAgICAgICAgLy8gV2UgcmVzdG9yZSBwb3NpdGlvbiBm
b3IgdGhlIGNoYXJhY3RlciB0aGF0IGdvZXMgcmlnaHQgYWZ0ZXIgdW5wYXJzZWQgcmVtYWluZGVy
LgorICAgICAgICBtX2lucHV0U3RyZWFtLT5jdXJyZW50KCkuc2V0Q3VycmVudFBvc2l0aW9uKG1f
bGluZSwgbV9jb2x1bW4sIHVucGFyc2VkUmVtYWluZGVyTGVuZ3RoKTsKICAgICB9CiAKIHByaXZh
dGU6CiAgICAgSFRNTElucHV0U3RyZWFtKiBtX2lucHV0U3RyZWFtOwogICAgIFNlZ21lbnRlZFN0
cmluZyBtX25leHQ7CisgICAgV1RGOjpaZXJvQmFzZWROdW1iZXIgbV9saW5lOworICAgIFdURjo6
WmVyb0Jhc2VkTnVtYmVyIG1fY29sdW1uOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuY3BwCmluZGV4IDNkMzkxMzFkOWE1ZTY1OWY2ZDBkOTQ3MzFmZmZmMTM0Yzky
MmE4MTUuLjNiYmJlYzNmYWExMjViZWRlMDgwMmY5MzE2YjlkZGQ0YjczNGIxNTggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJEb2N1bWVudFR5cGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkhU
TUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgpAQCAtMzM2LDcgKzMzNyw3IEBAIHByaXZhdGU6CiB9Owog
CiAKLUhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2Vu
aXplciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXBvcnRFcnJvcnMsIGJvb2wgdXNl
UHJlSFRNTDVQYXJzZXJRdWlya3MpCitIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihI
VE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwgSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1M
RG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycywgYm9vbCB1c2VQcmVIVE1MNVBh
cnNlclF1aXJrcykKICAgICA6IG1fZnJhbWVzZXRPayh0cnVlKQogICAgICwgbV9kb2N1bWVudChk
b2N1bWVudCkKICAgICAsIG1fdHJlZShkb2N1bWVudCwgRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2Vk
LCBmYWxzZSkKQEAgLTM0NCw2ICszNDUsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVp
bGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbgogICAg
ICwgbV9pc1BhdXNlZChmYWxzZSkKICAgICAsIG1faW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkK
ICAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQorICAgICwgbV9wYXJz
ZXIocGFyc2VyKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQogICAgICwgbV9zY3JpcHRU
b1Byb2Nlc3NTdGFydFBvc2l0aW9uKHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpKQogICAg
ICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMDo6YmVsb3dS
YW5nZVBvc2l0aW9uKCkpCkBAIC0zNTQsNyArMzU2LDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1M
VHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRvY3Vt
ZW4KIAogLy8gRklYTUU6IE1lbWJlciB2YXJpYWJsZXMgc2hvdWxkIGJlIGdyb3VwZWQgaW50byBz
ZWxmLWluaXRpYWxpemluZyBzdHJ1Y3RzIHRvCiAvLyBtaW5pbWl6ZSBjb2RlIGR1cGxpY2F0aW9u
IGJldHdlZW4gdGhlc2UgY29uc3RydWN0b3JzLgotSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1
aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVu
dCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBz
Y3JpcHRpbmdQZXJtaXNzaW9uLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQorSFRNTFRy
ZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIEhU
TUxUb2tlbml6ZXIqIHRva2VuaXplciwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1l
bnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5n
UGVybWlzc2lvbiwgYm9vbCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcykKICAgICA6IG1fZnJhbWVz
ZXRPayh0cnVlKQogICAgICwgbV9mcmFnbWVudENvbnRleHQoZnJhZ21lbnQsIGNvbnRleHRFbGVt
ZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKQogICAgICwgbV9kb2N1bWVudChtX2ZyYWdtZW50Q29u
dGV4dC5kb2N1bWVudCgpKQpAQCAtMzYzLDYgKzM2NSw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRN
TFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgRG9jdW1lbnRGcmFnbWVudCog
ZnJhCiAgICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pbnNlcnRpb25Nb2RlKEluaXRp
YWxNb2RlKQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCisgICAg
LCBtX3BhcnNlcihwYXJzZXIpCiAgICAgLCBtX3Rva2VuaXplcih0b2tlbml6ZXIpCiAgICAgLCBt
X3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24odW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUx
KCkpCiAgICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24w
OjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKQEAgLTI3NzYsNyArMjc3OSwxMSBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgbV90b2tlbml6ZXItPnNldFN0YXRlKEhUTUxUb2tlbml6ZXI6OlNjcmlwdERhdGFTdGF0
ZSk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CiAKLSAg
ICBUZXh0UG9zaXRpb24wIHBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMChXVEY6Olplcm9CYXNlZE51
bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX3Rva2VuaXplci0+bGluZU51bWJlcigpKSwgV1RGOjpa
ZXJvQmFzZWROdW1iZXI6OmJhc2UoKSk7CisgICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiBw
YXJzZXJVcGNhc3QgPSBtX3BhcnNlcjsKKyAgICBUZXh0UG9zaXRpb24wIHBvc2l0aW9uID0gcGFy
c2VyVXBjYXN0LT50ZXh0UG9zaXRpb24oKTsKKworICAgIEFTU0VSVChwb3NpdGlvbi5tX2xpbmUu
emVyb0Jhc2VkSW50KCkgPT0gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSk7CisKICAgICBtX2xh
c3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9uOwogCiAgICAgc2V0SW5zZXJ0
aW9uTW9kZShUZXh0TW9kZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5oIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAppbmRl
eCBlYmVkODEwNDZmZmQ4OWUxOWNjMGE4OTEwODM5ODgwY2JlNjlhYjRjLi41MTBhY2NjYWRjMjI1
NjMyNWUwYTY0ZGMyNmFiZTFlOGNlYzQ3NjRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxUcmVlQnVpbGRlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmgKQEAgLTQ5LDE2ICs0OSwxNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxUb2tl
bjsKIGNsYXNzIEhUTUxEb2N1bWVudDsKIGNsYXNzIE5vZGU7CitjbGFzcyBIVE1MRG9jdW1lbnRQ
YXJzZXI7CiAKIGNsYXNzIEhUTUxUcmVlQnVpbGRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUoSFRN
TFRva2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9y
dEVycm9ycywgYm9vbCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcykKKyAgICBzdGF0aWMgUGFzc093
blB0cjxIVE1MVHJlZUJ1aWxkZXI+IGNyZWF0ZShIVE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwg
SFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJl
cG9ydEVycm9ycywgYm9vbCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcykKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFRyZWVCdWlsZGVyKHRva2VuaXplciwgZG9jdW1lbnQs
IHJlcG9ydEVycm9ycywgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBIVE1MVHJlZUJ1aWxkZXIocGFyc2VyLCB0b2tlbml6ZXIsIGRvY3VtZW50
LCByZXBvcnRFcnJvcnMsIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKSk7CiAgICAgfQotICAgIHN0
YXRpYyBQYXNzT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4gY3JlYXRlKEhUTUxUb2tlbml6ZXIqIHRv
a2VuaXplciwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIGNvbnRleHRFbGVt
ZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbiwgYm9v
bCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxIVE1MVHJl
ZUJ1aWxkZXI+IGNyZWF0ZShIVE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwgSFRNTFRva2VuaXpl
ciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4
dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
LCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBIVE1MVHJlZUJ1aWxkZXIodG9rZW5pemVyLCBmcmFnbWVudCwgY29udGV4dEVs
ZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFRyZWVCdWlsZGVyKHBhcnNlciwgdG9rZW5p
emVyLCBmcmFnbWVudCwgY29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIHVzZVBy
ZUhUTUw1UGFyc2VyUXVpcmtzKSk7CiAgICAgfQogICAgIH5IVE1MVHJlZUJ1aWxkZXIoKTsKIApA
QCAtMTEzLDggKzExNCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFmdGVyQWZ0ZXJGcmFtZXNldE1v
ZGUsCiAgICAgfTsKIAotICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiwgSFRNTERv
Y3VtZW50KiwgYm9vbCByZXBvcnRFcnJvcnMsIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3Mp
OwotICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiwgRG9jdW1lbnRGcmFnbWVudCos
IEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24sIGJv
b2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpOworICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MRG9j
dW1lbnRQYXJzZXIqIHBhcnNlciwgSFRNTFRva2VuaXplciosIEhUTUxEb2N1bWVudCosIGJvb2wg
cmVwb3J0RXJyb3JzLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKTsKKyAgICBIVE1MVHJl
ZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIEhUTUxUb2tlbml6ZXIqLCBEb2N1
bWVudEZyYWdtZW50KiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbiwgYm9vbCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcyk7CiAKICAgICB2b2lkIHBy
b2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4mKTsKIApAQCAtMjQ0LDYgKzI0NSw4IEBAIHByaXZh
dGU6CiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQt
d29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjcGVuZGluZy10YWJsZS1jaGFyYWN0ZXIt
dG9rZW5zCiAgICAgVmVjdG9yPFVDaGFyPiBtX3BlbmRpbmdUYWJsZUNoYXJhY3RlcnM7CiAKKyAg
ICBIVE1MRG9jdW1lbnRQYXJzZXIqIG1fcGFyc2VyOworCiAgICAgLy8gSFRNTDUgc3BlYyByZXF1
aXJlcyB0aGF0IHdlIGJlIGFibGUgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgdG9rZW5pemVy
CiAgICAgLy8gZnJvbSB3aXRoaW4gcGFyc2VyIGFjdGlvbnMuCiAgICAgSFRNTFRva2VuaXplciog
bV90b2tlbml6ZXI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVk
U3RyaW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCmlu
ZGV4IGI5ZmY1MDM3YTk4MmFmZDY0ZDk4MjE1YTc4NmIwNWUwNjI1ZDE1OTguLjQ4MGNkYTQ0NmUz
NDUzYmE3ZWNmZmQ5NjEzY2Q2ZjM1NDAyZmFlYzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9T
ZWdtZW50ZWRTdHJpbmcuY3BwCkBAIC01Myw2ICs1Myw5IEBAIGNvbnN0IFNlZ21lbnRlZFN0cmlu
ZyYgU2VnbWVudGVkU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgU2VnbWVudGVkU3RyaW5nICZvdGhl
cikKICAgICAgICAgbV9jdXJyZW50Q2hhciA9IG90aGVyLm1fY3VycmVudENoYXI7CiAgICAgbV9j
bG9zZWQgPSBvdGhlci5tX2Nsb3NlZDsKICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVk
UHJpb3JUb0N1cnJlbnRTdHJpbmcgPSBvdGhlci5tX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVk
UHJpb3JUb0N1cnJlbnRTdHJpbmc7CisgICAgbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRW
YWx1ZSA9IG90aGVyLm1fbGluZUJlZ2luQ2hhcmFjdGVyc0NvbnN1bWVkVmFsdWU7CisgICAgbV9j
dXJyZW50TGluZSA9IG90aGVyLm1fY3VycmVudExpbmU7CisKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKQEAgLTE4Myw2ICsxODYsMTcgQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VTdWJz
dHJpbmcoKQogICAgIH0KIH0KIAoraW50IFNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRTbG93KCkgY29uc3QKK3sKKyAgICBpbnQgcmVzdWx0ID0gbV9udW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3RyaW5nICsgbV9jdXJyZW50U3RyaW5nLm51
bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCk7CisgICAgaWYgKG1fcHVzaGVkQ2hhcjEpIHsKKyAg
ICAgICAgLS1yZXN1bHQ7CisgICAgICAgIGlmIChtX3B1c2hlZENoYXIyKQorICAgICAgICAgICAg
LS1yZXN1bHQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFN0cmluZyBTZWdtZW50
ZWRTdHJpbmc6OnRvU3RyaW5nKCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVzdWx0OwpAQCAtMjI5
LDEyICsyNDMsMzIgQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VTbG93Q2FzZShpbnQm
IGxpbmVOdW1iZXIpCiAgICAgICAgIG1fcHVzaGVkQ2hhcjEgPSBtX3B1c2hlZENoYXIyOwogICAg
ICAgICBtX3B1c2hlZENoYXIyID0gMDsKICAgICB9IGVsc2UgaWYgKG1fY3VycmVudFN0cmluZy5t
X2N1cnJlbnQpIHsKLSAgICAgICAgaWYgKCptX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50KysgPT0g
J1xuJyAmJiBtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMoKSkKLSAgICAg
ICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgaWYgKCptX2N1cnJlbnRTdHJpbmcubV9jdXJy
ZW50KysgPT0gJ1xuJyAmJiBtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMo
KSkgeworICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICArK21fY3VycmVudExpbmU7
CisgICAgICAgICAgbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZSA9IG51bWJlck9m
Q2hhcmFjdGVyc0NvbnN1bWVkKCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKC0tbV9jdXJyZW50
U3RyaW5nLm1fbGVuZ3RoID09IDApCiAgICAgICAgICAgICBhZHZhbmNlU3Vic3RyaW5nKCk7CiAg
ICAgfQogICAgIG1fY3VycmVudENoYXIgPSBtX3B1c2hlZENoYXIxID8gJm1fcHVzaGVkQ2hhcjEg
OiBtX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50OwogfQogCitXVEY6Olplcm9CYXNlZE51bWJlciBT
ZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRMaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpa
ZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9jdXJyZW50TGluZSk7Cit9CisKK1dU
Rjo6WmVyb0Jhc2VkTnVtYmVyIFNlZ21lbnRlZFN0cmluZzo6Y3VycmVudENvbHVtbigpIGNvbnN0
Cit7CisgICAgaW50IHplcm9CYXNlZENvbHVtbiA9IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVk
U2xvdygpIC0gbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZTsKKyAgICByZXR1cm4g
V1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoemVyb0Jhc2VkQ29sdW1uKTsK
K30KKwordm9pZCBTZWdtZW50ZWRTdHJpbmc6OnNldEN1cnJlbnRQb3NpdGlvbihXVEY6Olplcm9C
YXNlZE51bWJlciBsaW5lLCBXVEY6Olplcm9CYXNlZE51bWJlciBjb2x1bW4sIGludCBvZmZzZXQp
Cit7CisgICAgbV9jdXJyZW50TGluZSA9IGxpbmUuemVyb0Jhc2VkSW50KCk7CisgICAgbV9saW5l
QmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZSA9IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVk
U2xvdygpICsgb2Zmc2V0IC0gY29sdW1uLnplcm9CYXNlZEludCgpOworfQorCiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgKaW5kZXggOTFjMmNiZTNmOWNmNjk5MDc2Zjgy
ZDA2YTE4MDE3YTE3ODQxZmJlNi4uNjE5ZTgzOTRkOGVhNDA5MGVhNDkwYzRlM2Q1ZGY5ZDY4YmRj
Nzc2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaApAQCAtMjIsNiAr
MjIsNyBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC03NSw2ICs3Niw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3B1c2hlZENo
YXIyKDApCiAgICAgICAgICwgbV9jdXJyZW50Q2hhcigwKQogICAgICAgICAsIG1fbnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN0cmluZygwKQorICAgICAgICAsIG1fbGlu
ZUJlZ2luQ2hhcmFjdGVyc0NvbnN1bWVkVmFsdWUoMCkKKyAgICAgICAgLCBtX2N1cnJlbnRMaW5l
KDApCiAgICAgICAgICwgbV9jb21wb3NpdGUoZmFsc2UpCiAgICAgICAgICwgbV9jbG9zZWQoZmFs
c2UpCiAgICAgewpAQCAtODYsNiArODksOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jdXJyZW50
U3RyaW5nKHN0cikKICAgICAgICAgLCBtX2N1cnJlbnRDaGFyKG1fY3VycmVudFN0cmluZy5tX2N1
cnJlbnQpCiAgICAgICAgICwgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJy
ZW50U3RyaW5nKDApCisgICAgICAgICwgbV9saW5lQmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1
ZSgwKQorICAgICAgICAsIG1fY3VycmVudExpbmUoMCkKICAgICAgICAgLCBtX2NvbXBvc2l0ZShm
YWxzZSkKICAgICAgICAgLCBtX2Nsb3NlZChmYWxzZSkKICAgICB7CkBAIC0xNTUsNyArMTYwLDEx
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCgqY3VycmVudCgpID09ICdcbicpOwog
ICAgICAgICBpZiAoIW1fcHVzaGVkQ2hhcjEgJiYgbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoID4g
MSkgewotICAgICAgICAgICAgbGluZU51bWJlciArPSBtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNs
dWRlTGluZU51bWJlcnMoKTsKKyAgICAgICAgICAgIGludCBuZXdMaW5lRmxhZyA9IG1fY3VycmVu
dFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycygpOworICAgICAgICAgICAgbGluZU51bWJl
ciArPSBuZXdMaW5lRmxhZzsKKyAgICAgICAgICAgIG1fY3VycmVudExpbmUgKz0gbmV3TGluZUZs
YWc7CisgICAgICAgICAgICBpZiAobmV3TGluZUZsYWcpCisgICAgICAgICAgICAgICAgbV9saW5l
QmVnaW5DaGFyYWN0ZXJzQ29uc3VtZWRWYWx1ZSA9IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVk
KCk7CiAgICAgICAgICAgICAtLW1fY3VycmVudFN0cmluZy5tX2xlbmd0aDsKICAgICAgICAgICAg
IG1fY3VycmVudENoYXIgPSArK21fY3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xNzcsNyArMTg2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkdmFuY2Uo
aW50JiBsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgaWYgKCFtX3B1c2hlZENoYXIxICYmIG1f
Y3VycmVudFN0cmluZy5tX2xlbmd0aCA+IDEpIHsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0g
KCptX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50ID09ICdcbicpICYgbV9jdXJyZW50U3RyaW5nLmRv
Tm90RXhjbHVkZUxpbmVOdW1iZXJzKCk7CisgICAgICAgICAgICBpbnQgbmV3TGluZUZsYWcgPSAo
Km1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQgPT0gJ1xuJykgJiBtX2N1cnJlbnRTdHJpbmcuZG9O
b3RFeGNsdWRlTGluZU51bWJlcnMoKTsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gbmV3TGlu
ZUZsYWc7CisgICAgICAgICAgICBtX2N1cnJlbnRMaW5lICs9IG5ld0xpbmVGbGFnOworICAgICAg
ICAgICAgaWYgKG5ld0xpbmVGbGFnKQorICAgICAgICAgICAgICAgIG1fbGluZUJlZ2luQ2hhcmFj
dGVyc0NvbnN1bWVkVmFsdWUgPSBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpICsgMTsKICAg
ICAgICAgICAgIC0tbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoOwogICAgICAgICAgICAgbV9jdXJy
ZW50Q2hhciA9ICsrbV9jdXJyZW50U3RyaW5nLm1fY3VycmVudDsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTE5MSwxOCArMjA0LDI1IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgZXNjYXBlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHVzaGVkQ2hhcjE7IH0KIAotICAgIGludCBudW1iZXJPZkNoYXJhY3Rl
cnNDb25zdW1lZCgpCisgICAgaW50IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYW5kbGUgdGhlIGNhc2Ugd2hl
biB0aGVyZSBhcmUgcHVzaGVkIGNoYXJhY3Rlci4KICAgICAgICAgQVNTRVJUKCFtX3B1c2hlZENo
YXIxKTsKICAgICAgICAgcmV0dXJuIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRv
Q3VycmVudFN0cmluZyArIG1fY3VycmVudFN0cmluZy5udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1l
ZCgpOwogICAgIH0KIAorICAgIGludCBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFNsb3coKSBj
b25zdDsKKwogICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogCiAgICAgY29uc3QgVUNoYXIm
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpjdXJyZW50KCk7IH0KICAgICBjb25zdCBVQ2hh
ciogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQoKTsgfQogICAgIAorCisgICAg
V1RGOjpaZXJvQmFzZWROdW1iZXIgY3VycmVudENvbHVtbigpIGNvbnN0OworICAgIFdURjo6WmVy
b0Jhc2VkTnVtYmVyIGN1cnJlbnRMaW5lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDdXJyZW50UG9z
aXRpb24oV1RGOjpaZXJvQmFzZWROdW1iZXIgbGluZSwgV1RGOjpaZXJvQmFzZWROdW1iZXIgY29s
dW1uLCBpbnQgb2Zmc2V0KTsKKwogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZChjb25zdCBTZWdt
ZW50ZWRTdWJzdHJpbmcmKTsKICAgICB2b2lkIHByZXBlbmQoY29uc3QgU2VnbWVudGVkU3Vic3Ry
aW5nJik7CkBAIC0yNDcsNiArMjY3LDggQEAgcHJpdmF0ZToKICAgICBTZWdtZW50ZWRTdWJzdHJp
bmcgbV9jdXJyZW50U3RyaW5nOwogICAgIGNvbnN0IFVDaGFyKiBtX2N1cnJlbnRDaGFyOwogICAg
IGludCBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdHJpbmc7Cisg
ICAgaW50IG1fbGluZUJlZ2luQ2hhcmFjdGVyc0NvbnN1bWVkVmFsdWU7CisgICAgaW50IG1fY3Vy
cmVudExpbmU7CiAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPiBtX3N1YnN0cmluZ3M7CiAg
ICAgYm9vbCBtX2NvbXBvc2l0ZTsKICAgICBib29sIG1fY2xvc2VkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77247</attachid>
            <date>2010-12-22 12:27:15 -0800</date>
            <delta_ts>2010-12-25 15:37:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51311-20101222232712.patch</filename>
            <type>text/plain</type>
            <size>18686</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2JlYWY5NjhkNjNkYjY0Mjk4ZmU1MWFiNjA4YTEyZGY0YzZmOTI1Ny4uNGFlZThkYzQwNTliZDMx
MDk5OGMyZmNkMjUyNTVlMGM2YWJhOWVjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0xMi0xOSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBjdXJyZW50Q29sdW1uIChhbmQgY3VycmVu
dExpbmUpIHRvIFNlZ21lbnRlZFN0cmluZy4gU3dpdGNoZXMKKyAgICAgICAgSFRNTFRyZWVCdWls
ZGVyIHRvIEhUTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uIHdoZW4gaXQKKyAgICAgICAg
bmVlZHMgcG9zaXRpb24gZm9yIGEgPHNjcmlwdD4gdGFnLgorCisgICAgICAgIFNlZ21lbnRlZFN0
cmluZyBzaG91bGQgcHJvdmlkZSBjb2x1bW4gcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMzExCisKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3Vt
ZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxJbnB1
dFN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjpjdXJyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc2VydGlvblBvaW50UmVjb3JkOjpJbnNlcnRpb25Qb2ludFJl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludFJlY29yZDo6fkluc2VydGlv
blBvaW50UmVjb3JkKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcp
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
U2VnbWVudGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6
b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWRTbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmlu
Zzo6YWR2YW5jZVNsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6
Y3VycmVudExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpjdXJyZW50
Q29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6c2V0Q3VycmVudFBv
c2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpTZWdtZW50ZWRTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdE5ld2xpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQpOgorCiAyMDEwLTEy
LTE5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQ2FtZXJvbiBad2FyaWNoLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuY3BwCmluZGV4IGMzMmY5ZGI4MDNlNDYzMDk3ODdlY2ZmODFmMWRhMjRjZjM0YmNiYmQuLmI5
MmRhMjUyNWEyNjVkNDE4NTY0NGEyZWJlZTYwMzVjZGQwZDE2ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgSFRNTERvY3Vt
ZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9v
bCByZXBvcnRFcnJvcnMKICAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihkb2N1bWVudCkK
ICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZSh1c2VQcmVIVE1MNVBhcnNl
clF1aXJrcyhkb2N1bWVudCkpKQogICAgICwgbV9zY3JpcHRSdW5uZXIoSFRNTFNjcmlwdFJ1bm5l
cjo6Y3JlYXRlKGRvY3VtZW50LCB0aGlzKSkKLSAgICAsIG1fdHJlZUJ1aWxkZXIoSFRNTFRyZWVC
dWlsZGVyOjpjcmVhdGUobV90b2tlbml6ZXIuZ2V0KCksIGRvY3VtZW50LCByZXBvcnRFcnJvcnMs
IHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGRvY3VtZW50KSkpCisgICAgLCBtX3RyZWVCdWlsZGVy
KEhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlKHRoaXMsIG1fdG9rZW5pemVyLmdldCgpLCBkb2N1bWVu
dCwgcmVwb3J0RXJyb3JzLCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcyhkb2N1bWVudCkpKQogICAg
ICwgbV9wYXJzZXJTY2hlZHVsZXIoSFRNTFBhcnNlclNjaGVkdWxlcjo6Y3JlYXRlKHRoaXMpKQog
ICAgICwgbV9lbmRXYXNEZWxheWVkKGZhbHNlKQogICAgICwgbV93cml0ZU5lc3RpbmdMZXZlbCgw
KQpAQCAtOTEsNyArOTEsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNl
cihIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycwogSFRNTERvY3VtZW50
UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVs
ZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0
aW5nUGVybWlzc2lvbikKICAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihmcmFnbWVudC0+
ZG9jdW1lbnQoKSkKICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZSh1c2VQ
cmVIVE1MNVBhcnNlclF1aXJrcyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkpKQotICAgICwgbV90cmVl
QnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZShtX3Rva2VuaXplci5nZXQoKSwgZnJhZ21l
bnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCB1c2VQcmVIVE1MNVBhcnNl
clF1aXJrcyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkpKQorICAgICwgbV90cmVlQnVpbGRlcihIVE1M
VHJlZUJ1aWxkZXI6OmNyZWF0ZSh0aGlzLCBtX3Rva2VuaXplci5nZXQoKSwgZnJhZ21lbnQsIGNv
bnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCB1c2VQcmVIVE1MNVBhcnNlclF1aXJr
cyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkpKQogICAgICwgbV9lbmRXYXNEZWxheWVkKGZhbHNlKQog
ICAgICwgbV93cml0ZU5lc3RpbmdMZXZlbCgwKQogewpAQCAtNDA3LDExICs0MDcsMTIgQEAgaW50
IEhUTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiAKIFRleHRQb3NpdGlvbjAg
SFRNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAogewotICAgIGludCBsaW5l
WmVyb0Jhc2VkID0gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKTsKLSAgICBpbnQgY29sdW1uT25l
QmFzZWQgPSBtX3Rva2VuaXplci0+Y29sdW1uTnVtYmVyKCk7CisgICAgY29uc3QgU2VnbWVudGVk
U3RyaW5nJiBjdXJyZW50U3RyaW5nID0gbV9pbnB1dC5jdXJyZW50KCk7CisgICAgV1RGOjpaZXJv
QmFzZWROdW1iZXIgbGluZSA9IGN1cnJlbnRTdHJpbmcuY3VycmVudExpbmUoKTsKKyAgICBXVEY6
Olplcm9CYXNlZE51bWJlciBjb2x1bW4gPSBjdXJyZW50U3RyaW5nLmN1cnJlbnRDb2x1bW4oKTsK
KyAgICBBU1NFUlQobV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSA9PSBsaW5lLnplcm9CYXNlZElu
dCgpKTsKIAotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpm
cm9tWmVyb0Jhc2VkSW50KGxpbmVaZXJvQmFzZWQpLAotICAgICAgICBXVEY6Ok9uZUJhc2VkTnVt
YmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1uT25lQmFzZWQpLmNvbnZlcnRUb1plcm9CYXNlZCgp
KTsKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChsaW5lLCBjb2x1bW4pOwogfQogCiBib29sIEhU
TUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oIGIvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MSW5wdXRTdHJlYW0uaAppbmRleCBhNzA5YmQ5YmQ1YjIxZDExN2VlZmE0NTEyODhi
MjZiMGZiNzk0MWY0Li4xYmZiYWY5MzAzYzA4ODcxMzJkOTQ3YzMzMmJiYTAyMTRjYmEwNTY2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oCisrKyBiL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKQEAgLTk0LDYgKzk0LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIFNlZ21lbnRlZFN0cmluZyYgY3VycmVudCgpIHsgcmV0dXJuIG1f
Zmlyc3Q7IH0KKyAgICBjb25zdCBTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2ZpcnN0OyB9CiAKICAgICB2b2lkIHNwbGl0SW50byhTZWdtZW50ZWRTdHJpbmcmIG5l
eHQpCiAgICAgewpAQCAtMTMzLDE3ICsxMzQsMjkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IElu
c2VydGlvblBvaW50UmVjb3JkKEhUTUxJbnB1dFN0cmVhbSYgaW5wdXRTdHJlYW0pCiAgICAgICAg
IDogbV9pbnB1dFN0cmVhbSgmaW5wdXRTdHJlYW0pCiAgICAgeworICAgICAgICBtX2xpbmUgPSBt
X2lucHV0U3RyZWFtLT5jdXJyZW50KCkuY3VycmVudExpbmUoKTsKKyAgICAgICAgbV9jb2x1bW4g
PSBtX2lucHV0U3RyZWFtLT5jdXJyZW50KCkuY3VycmVudENvbHVtbigpOwogICAgICAgICBtX2lu
cHV0U3RyZWFtLT5zcGxpdEludG8obV9uZXh0KTsKKyAgICAgICAgLy8gV2UgJ2ZvcmsnIGN1cnJl
bnQgcG9zaXRpb24gYW5kIHVzZSBpdCBmb3IgdGhlIGdlbmVyYXRlZCBzY3JpcHQgcGFydC4KKyAg
ICAgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCwgYmVjYXVzZSBnZW5lcmF0ZWQgcGFydCBkb2Vz
IG5vdCBoYXZlIHBvc2l0aW9ucyB3aXRoaW4gYW4gSFRNTCBkb2N1bWVudC4KKyAgICAgICAgbV9p
bnB1dFN0cmVhbS0+Y3VycmVudCgpLnNldEN1cnJlbnRQb3NpdGlvbihtX2xpbmUsIG1fY29sdW1u
LCAwKTsKICAgICB9CiAKICAgICB+SW5zZXJ0aW9uUG9pbnRSZWNvcmQoKQogICAgIHsKKyAgICAg
ICAgLy8gU29tZSBpbnNlcnRlZCB0ZXh0IG1heSBoYXZlIHJlbWFpbmVkIGluIGlucHV0IHN0cmVh
bS4gRS5nLiBpZiBzY3JpcHQgaGFzIHdyaXR0ZW4gIiZhbXAiIG9yICI8dGFibGUiLAorICAgICAg
ICAvLyBpdCBzdGF5cyBpbiBidWZmZXIgYmVjYXVzZSBpdCBjYW5ub3QgYmUgcHJvcGVybHkgdG9r
ZW5pemVkIGJlZm9yZSB3ZSBzZWUgbmV4dCBwYXJ0LgorICAgICAgICBpbnQgdW5wYXJzZWRSZW1h
aW5kZXJMZW5ndGggPSBtX2lucHV0U3RyZWFtLT5jdXJyZW50KCkubGVuZ3RoKCk7CiAgICAgICAg
IG1faW5wdXRTdHJlYW0tPm1lcmdlRnJvbShtX25leHQpOworICAgICAgICAvLyBXZSByZXN0b3Jl
IHBvc2l0aW9uIGZvciB0aGUgY2hhcmFjdGVyIHRoYXQgZ29lcyByaWdodCBhZnRlciB1bnBhcnNl
ZCByZW1haW5kZXIuCisgICAgICAgIG1faW5wdXRTdHJlYW0tPmN1cnJlbnQoKS5zZXRDdXJyZW50
UG9zaXRpb24obV9saW5lLCBtX2NvbHVtbiwgdW5wYXJzZWRSZW1haW5kZXJMZW5ndGgpOwogICAg
IH0KIAogcHJpdmF0ZToKICAgICBIVE1MSW5wdXRTdHJlYW0qIG1faW5wdXRTdHJlYW07CiAgICAg
U2VnbWVudGVkU3RyaW5nIG1fbmV4dDsKKyAgICBXVEY6Olplcm9CYXNlZE51bWJlciBtX2xpbmU7
CisgICAgV1RGOjpaZXJvQmFzZWROdW1iZXIgbV9jb2x1bW47CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggM2QzOTEzMWQ5YTVlNjU5ZjZkMGQ5NDcz
MWZmZmYxMzRjOTIyYTgxNS4uM2JiYmVjM2ZhYTEyNWJlZGUwODAyZjkzMTZiOWRkZDRiNzM0YjE1
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAj
aW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCkBAIC0zMzYsNyArMzM3LDcgQEAgcHJp
dmF0ZToKIH07CiAKIAotSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2Vu
aXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9y
cywgYm9vbCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcykKK0hUTUxUcmVlQnVpbGRlcjo6SFRNTFRy
ZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBIVE1MVG9rZW5pemVyKiB0b2tl
bml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzLCBib29sIHVz
ZVByZUhUTUw1UGFyc2VyUXVpcmtzKQogICAgIDogbV9mcmFtZXNldE9rKHRydWUpCiAgICAgLCBt
X2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV90cmVlKGRvY3VtZW50LCBGcmFnbWVudFNjcmlw
dGluZ0FsbG93ZWQsIGZhbHNlKQpAQCAtMzQ0LDYgKzM0NSw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6
SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgSFRNTERvY3VtZW50KiBk
b2N1bWVuCiAgICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pbnNlcnRpb25Nb2RlKElu
aXRpYWxNb2RlKQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCisg
ICAgLCBtX3BhcnNlcihwYXJzZXIpCiAgICAgLCBtX3Rva2VuaXplcih0b2tlbml6ZXIpCiAgICAg
LCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24odW5pbml0aWFsaXplZFBvc2l0aW9uVmFs
dWUxKCkpCiAgICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRp
b24wOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKQEAgLTM1NCw3ICszNTYsNyBAQCBIVE1MVHJlZUJ1
aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1
bWVudCogZG9jdW1lbgogCiAvLyBGSVhNRTogTWVtYmVyIHZhcmlhYmxlcyBzaG91bGQgYmUgZ3Jv
dXBlZCBpbnRvIHNlbGYtaW5pdGlhbGl6aW5nIHN0cnVjdHMgdG8KIC8vIG1pbmltaXplIGNvZGUg
ZHVwbGljYXRpb24gYmV0d2VlbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCi1IVE1MVHJlZUJ1aWxkZXI6
OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIERvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24sIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWly
a3MpCitIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXIq
IHBhcnNlciwgSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmFn
bWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBzY3JpcHRpbmdQZXJtaXNzaW9uLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQogICAg
IDogbV9mcmFtZXNldE9rKHRydWUpCiAgICAgLCBtX2ZyYWdtZW50Q29udGV4dChmcmFnbWVudCwg
Y29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pCiAgICAgLCBtX2RvY3VtZW50KG1f
ZnJhZ21lbnRDb250ZXh0LmRvY3VtZW50KCkpCkBAIC0zNjMsNiArMzY1LDcgQEAgSFRNTFRyZWVC
dWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBEb2N1bWVu
dEZyYWdtZW50KiBmcmEKICAgICAsIG1faXNQYXVzZWQoZmFsc2UpCiAgICAgLCBtX2luc2VydGlv
bk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZShJbml0aWFs
TW9kZSkKKyAgICAsIG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1fdG9rZW5pemVyKHRva2VuaXpl
cikKICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9z
aXRpb25WYWx1ZTEoKSkKICAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKFRl
eHRQb3NpdGlvbjA6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQpAQCAtMjc3Niw3ICsyNzc5LDExIEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICBtX3Rva2VuaXplci0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6U2Ny
aXB0RGF0YVN0YXRlKTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9u
TW9kZTsKIAotICAgIFRleHRQb3NpdGlvbjAgcG9zaXRpb24gPSBUZXh0UG9zaXRpb24wKFdURjo6
WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fdG9rZW5pemVyLT5saW5lTnVtYmVy
KCkpLCBXVEY6Olplcm9CYXNlZE51bWJlcjo6YmFzZSgpKTsKKyAgICBTY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIqIHBhcnNlclVwY2FzdCA9IG1fcGFyc2VyOworICAgIFRleHRQb3NpdGlvbjAgcG9z
aXRpb24gPSBwYXJzZXJVcGNhc3QtPnRleHRQb3NpdGlvbigpOworCisgICAgQVNTRVJUKHBvc2l0
aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKSA9PSBtX3Rva2VuaXplci0+bGluZU51bWJlcigpKTsK
KwogICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uID0gcG9zaXRpb247CiAKICAg
ICBzZXRJbnNlcnRpb25Nb2RlKFRleHRNb2RlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFRyZWVCdWlsZGVyLmggYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5oCmluZGV4IGViZWQ4MTA0NmZmZDg5ZTE5Y2MwYTg5MTA4Mzk4ODBjYmU2OWFiNGMuLjUx
MGFjY2NhZGMyMjU2MzI1ZTBhNjRkYzI2YWJlMWU4Y2VjNDc2NGUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKKysrIGIvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuaApAQCAtNDksMTYgKzQ5LDE3IEBAIGNsYXNzIEZyYW1lOwogY2xh
c3MgSFRNTFRva2VuOwogY2xhc3MgSFRNTERvY3VtZW50OwogY2xhc3MgTm9kZTsKK2NsYXNzIEhU
TUxEb2N1bWVudFBhcnNlcjsKIAogY2xhc3MgSFRNTFRyZWVCdWlsZGVyIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxIVE1MVHJlZUJ1aWxkZXI+
IGNyZWF0ZShIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQs
IGJvb2wgcmVwb3J0RXJyb3JzLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQorICAgIHN0
YXRpYyBQYXNzT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4gY3JlYXRlKEhUTUxEb2N1bWVudFBhcnNl
ciogcGFyc2VyLCBIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1l
bnQsIGJvb2wgcmVwb3J0RXJyb3JzLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MVHJlZUJ1aWxkZXIodG9rZW5pemVy
LCBkb2N1bWVudCwgcmVwb3J0RXJyb3JzLCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcykpOworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhUTUxUcmVlQnVpbGRlcihwYXJzZXIsIHRva2VuaXpl
ciwgZG9jdW1lbnQsIHJlcG9ydEVycm9ycywgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpKTsKICAg
ICB9Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUoSFRNTFRv
a2VuaXplciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCog
Y29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJt
aXNzaW9uLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQorICAgIHN0YXRpYyBQYXNzT3du
UHRyPEhUTUxUcmVlQnVpbGRlcj4gY3JlYXRlKEhUTUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBI
VE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGlu
Z1Blcm1pc3Npb24sIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEhUTUxUcmVlQnVpbGRlcih0b2tlbml6ZXIsIGZyYWdtZW50
LCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbiwgdXNlUHJlSFRNTDVQYXJzZXJR
dWlya3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MVHJlZUJ1aWxkZXIocGFy
c2VyLCB0b2tlbml6ZXIsIGZyYWdtZW50LCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVybWlz
c2lvbiwgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpKTsKICAgICB9CiAgICAgfkhUTUxUcmVlQnVp
bGRlcigpOwogCkBAIC0xMTMsOCArMTE0LDggQEAgcHJpdmF0ZToKICAgICAgICAgQWZ0ZXJBZnRl
ckZyYW1lc2V0TW9kZSwKICAgICB9OwogCi0gICAgSFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6
ZXIqLCBIVE1MRG9jdW1lbnQqLCBib29sIHJlcG9ydEVycm9ycywgYm9vbCB1c2VQcmVIVE1MNVBh
cnNlclF1aXJrcyk7Ci0gICAgSFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqLCBEb2N1bWVu
dEZyYWdtZW50KiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbiwgYm9vbCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcyk7CisgICAgSFRNTFRyZWVCdWls
ZGVyKEhUTUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBIVE1MVG9rZW5pemVyKiwgSFRNTERvY3Vt
ZW50KiwgYm9vbCByZXBvcnRFcnJvcnMsIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpOwor
ICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwgSFRNTFRva2Vu
aXplciosIERvY3VtZW50RnJhZ21lbnQqLCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKTsKIAog
ICAgIHZvaWQgcHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYpOwogCkBAIC0yNDQsNiArMjQ1
LDggQEAgcHJpdmF0ZToKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFw
cHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCNwZW5kaW5nLXRhYmxl
LWNoYXJhY3Rlci10b2tlbnMKICAgICBWZWN0b3I8VUNoYXI+IG1fcGVuZGluZ1RhYmxlQ2hhcmFj
dGVyczsKIAorICAgIEhUTUxEb2N1bWVudFBhcnNlciogbV9wYXJzZXI7CisKICAgICAvLyBIVE1M
NSBzcGVjIHJlcXVpcmVzIHRoYXQgd2UgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRo
ZSB0b2tlbml6ZXIKICAgICAvLyBmcm9tIHdpdGhpbiBwYXJzZXIgYWN0aW9ucy4KICAgICBIVE1M
VG9rZW5pemVyKiBtX3Rva2VuaXplcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9TZWdtZW50ZWRTdHJpbmcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0
cmluZy5jcHAKaW5kZXggYjlmZjUwMzdhOTgyYWZkNjRkOTgyMTVhNzg2YjA1ZTA2MjVkMTU5OC4u
NmEyNjU4MTViNTdlNTdlZDNiOTI2ZDc4NDIwNjY1YjBjMmE0OTMxYyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKQEAgLTUzLDYgKzUzLDkgQEAgY29uc3QgU2Vn
bWVudGVkU3RyaW5nJiBTZWdtZW50ZWRTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBTZWdtZW50ZWRT
dHJpbmcgJm90aGVyKQogICAgICAgICBtX2N1cnJlbnRDaGFyID0gb3RoZXIubV9jdXJyZW50Q2hh
cjsKICAgICBtX2Nsb3NlZCA9IG90aGVyLm1fY2xvc2VkOwogICAgIG1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN0cmluZyA9IG90aGVyLm1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN0cmluZzsKKyAgICBtX251bWJlck9mQ2hhcmFjdGVy
c0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lID0gb3RoZXIubV9udW1iZXJPZkNoYXJhY3RlcnND
b25zdW1lZFByaW9yVG9DdXJyZW50TGluZTsKKyAgICBtX2N1cnJlbnRMaW5lID0gb3RoZXIubV9j
dXJyZW50TGluZTsKKwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTgzLDYgKzE4NiwxNyBA
QCB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVN1YnN0cmluZygpCiAgICAgfQogfQogCitp
bnQgU2VnbWVudGVkU3RyaW5nOjpudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFNsb3coKSBjb25z
dAoreworICAgIGludCByZXN1bHQgPSBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JU
b0N1cnJlbnRTdHJpbmcgKyBtX2N1cnJlbnRTdHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3Vt
ZWQoKTsKKyAgICBpZiAobV9wdXNoZWRDaGFyMSkgeworICAgICAgICAtLXJlc3VsdDsKKyAgICAg
ICAgaWYgKG1fcHVzaGVkQ2hhcjIpCisgICAgICAgICAgICAtLXJlc3VsdDsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogU3RyaW5nIFNlZ21lbnRlZFN0cmluZzo6dG9TdHJpbmcoKSBj
b25zdAogewogICAgIFN0cmluZyByZXN1bHQ7CkBAIC0yMjksMTIgKzI0MywzMiBAQCB2b2lkIFNl
Z21lbnRlZFN0cmluZzo6YWR2YW5jZVNsb3dDYXNlKGludCYgbGluZU51bWJlcikKICAgICAgICAg
bV9wdXNoZWRDaGFyMSA9IG1fcHVzaGVkQ2hhcjI7CiAgICAgICAgIG1fcHVzaGVkQ2hhcjIgPSAw
OwogICAgIH0gZWxzZSBpZiAobV9jdXJyZW50U3RyaW5nLm1fY3VycmVudCkgewotICAgICAgICBp
ZiAoKm1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQrKyA9PSAnXG4nICYmIG1fY3VycmVudFN0cmlu
Zy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycygpKQorICAgICAgICBpZiAoKm1fY3VycmVudFN0cmlu
Zy5tX2N1cnJlbnQrKyA9PSAnXG4nICYmIG1fY3VycmVudFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5l
TnVtYmVycygpKSB7CiAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICArK21f
Y3VycmVudExpbmU7CisgICAgICAgICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJp
b3JUb0N1cnJlbnRMaW5lID0gbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsKKyAgICAgICAg
fQogICAgICAgICBpZiAoLS1tX2N1cnJlbnRTdHJpbmcubV9sZW5ndGggPT0gMCkKICAgICAgICAg
ICAgIGFkdmFuY2VTdWJzdHJpbmcoKTsKICAgICB9CiAgICAgbV9jdXJyZW50Q2hhciA9IG1fcHVz
aGVkQ2hhcjEgPyAmbV9wdXNoZWRDaGFyMSA6IG1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CiB9
CiAKK1dURjo6WmVyb0Jhc2VkTnVtYmVyIFNlZ21lbnRlZFN0cmluZzo6Y3VycmVudExpbmUoKSBj
b25zdAoreworICAgIHJldHVybiBXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZElu
dChtX2N1cnJlbnRMaW5lKTsKK30KKworV1RGOjpaZXJvQmFzZWROdW1iZXIgU2VnbWVudGVkU3Ry
aW5nOjpjdXJyZW50Q29sdW1uKCkgY29uc3QKK3sKKyAgICBpbnQgemVyb0Jhc2VkQ29sdW1uID0g
bnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRTbG93KCkgLSBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lOworICAgIHJldHVybiBXVEY6Olplcm9CYXNlZE51bWJl
cjo6ZnJvbVplcm9CYXNlZEludCh6ZXJvQmFzZWRDb2x1bW4pOworfQorCit2b2lkIFNlZ21lbnRl
ZFN0cmluZzo6c2V0Q3VycmVudFBvc2l0aW9uKFdURjo6WmVyb0Jhc2VkTnVtYmVyIGxpbmUsIFdU
Rjo6WmVyb0Jhc2VkTnVtYmVyIGNvbHVtbkFmdHJlUHJvbG9nLCBpbnQgcHJvbG9nTGVuZ3RoKQor
eworICAgIG1fY3VycmVudExpbmUgPSBsaW5lLnplcm9CYXNlZEludCgpOworICAgIG1fbnVtYmVy
T2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUgPSBudW1iZXJPZkNoYXJhY3Rl
cnNDb25zdW1lZFNsb3coKSArIHByb2xvZ0xlbmd0aCAtIGNvbHVtbkFmdHJlUHJvbG9nLnplcm9C
YXNlZEludCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2Vn
bWVudGVkU3RyaW5nLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgK
aW5kZXggOTFjMmNiZTNmOWNmNjk5MDc2ZjgyZDA2YTE4MDE3YTE3ODQxZmJlNi4uNWY1NDhjNzNm
MWY1ODY0MDk1OWI1YWE0MjBmODhhMjUzMTEwMWE5OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9T
ZWdtZW50ZWRTdHJpbmcuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03NSw2ICs3Niw4IEBAIHB1
YmxpYzoKICAgICAgICAgLCBtX3B1c2hlZENoYXIyKDApCiAgICAgICAgICwgbV9jdXJyZW50Q2hh
cigwKQogICAgICAgICAsIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVu
dFN0cmluZygwKQorICAgICAgICAsIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRv
Q3VycmVudExpbmUoMCkKKyAgICAgICAgLCBtX2N1cnJlbnRMaW5lKDApCiAgICAgICAgICwgbV9j
b21wb3NpdGUoZmFsc2UpCiAgICAgICAgICwgbV9jbG9zZWQoZmFsc2UpCiAgICAgewpAQCAtODYs
NiArODksOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jdXJyZW50U3RyaW5nKHN0cikKICAgICAg
ICAgLCBtX2N1cnJlbnRDaGFyKG1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQpCiAgICAgICAgICwg
bV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3RyaW5nKDApCisgICAg
ICAgICwgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSgwKQor
ICAgICAgICAsIG1fY3VycmVudExpbmUoMCkKICAgICAgICAgLCBtX2NvbXBvc2l0ZShmYWxzZSkK
ICAgICAgICAgLCBtX2Nsb3NlZChmYWxzZSkKICAgICB7CkBAIC0xNTUsNyArMTYwLDExIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCgqY3VycmVudCgpID09ICdcbicpOwogICAgICAg
ICBpZiAoIW1fcHVzaGVkQ2hhcjEgJiYgbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoID4gMSkgewot
ICAgICAgICAgICAgbGluZU51bWJlciArPSBtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGlu
ZU51bWJlcnMoKTsKKyAgICAgICAgICAgIGludCBuZXdMaW5lRmxhZyA9IG1fY3VycmVudFN0cmlu
Zy5kb05vdEV4Y2x1ZGVMaW5lTnVtYmVycygpOworICAgICAgICAgICAgbGluZU51bWJlciArPSBu
ZXdMaW5lRmxhZzsKKyAgICAgICAgICAgIG1fY3VycmVudExpbmUgKz0gbmV3TGluZUZsYWc7Cisg
ICAgICAgICAgICBpZiAobmV3TGluZUZsYWcpCisgICAgICAgICAgICAgICAgbV9udW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG51bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkKCk7CiAgICAgICAgICAgICAtLW1fY3VycmVudFN0cmluZy5tX2xlbmd0aDsKICAgICAg
ICAgICAgIG1fY3VycmVudENoYXIgPSArK21fY3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xNzcsNyArMTg2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
dmFuY2UoaW50JiBsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgaWYgKCFtX3B1c2hlZENoYXIx
ICYmIG1fY3VycmVudFN0cmluZy5tX2xlbmd0aCA+IDEpIHsKLSAgICAgICAgICAgIGxpbmVOdW1i
ZXIgKz0gKCptX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50ID09ICdcbicpICYgbV9jdXJyZW50U3Ry
aW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKCk7CisgICAgICAgICAgICBpbnQgbmV3TGluZUZs
YWcgPSAoKm1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQgPT0gJ1xuJykgJiBtX2N1cnJlbnRTdHJp
bmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMoKTsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0g
bmV3TGluZUZsYWc7CisgICAgICAgICAgICBtX2N1cnJlbnRMaW5lICs9IG5ld0xpbmVGbGFnOwor
ICAgICAgICAgICAgaWYgKG5ld0xpbmVGbGFnKQorICAgICAgICAgICAgICAgIG1fbnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUgPSBudW1iZXJPZkNoYXJhY3RlcnND
b25zdW1lZCgpICsgMTsKICAgICAgICAgICAgIC0tbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoOwog
ICAgICAgICAgICAgbV9jdXJyZW50Q2hhciA9ICsrbV9jdXJyZW50U3RyaW5nLm1fY3VycmVudDsK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MSwxOCArMjA0LDI4IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgZXNjYXBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHVzaGVkQ2hhcjE7IH0KIAotICAgIGlu
dCBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpCisgICAgaW50IG51bWJlck9mQ2hhcmFjdGVy
c0NvbnN1bWVkKCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBo
YW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBhcmUgcHVzaGVkIGNoYXJhY3Rlci4KICAgICAgICAg
QVNTRVJUKCFtX3B1c2hlZENoYXIxKTsKICAgICAgICAgcmV0dXJuIG1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudFN0cmluZyArIG1fY3VycmVudFN0cmluZy5udW1iZXJP
ZkNoYXJhY3RlcnNDb25zdW1lZCgpOwogICAgIH0KIAorICAgIGludCBudW1iZXJPZkNoYXJhY3Rl
cnNDb25zdW1lZFNsb3coKSBjb25zdDsKKwogICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0Owog
CiAgICAgY29uc3QgVUNoYXImIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpjdXJyZW50KCk7
IH0KICAgICBjb25zdCBVQ2hhciogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQo
KTsgfQogICAgIAorCisgICAgLy8gVGhlIG1ldGhvZCBpcyBtb2RlcmF0ZWx5IHNsb3csIGNvbXBh
cmluZyB0byBjdXJyZW50TGluZSBtZXRob2QuCisgICAgV1RGOjpaZXJvQmFzZWROdW1iZXIgY3Vy
cmVudENvbHVtbigpIGNvbnN0OworICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyIGN1cnJlbnRMaW5l
KCkgY29uc3Q7CisgICAgLy8gU2V0cyB2YWx1ZSBvZiBsaW5lL2NvbHVtbiB2YXJpYWJsZXMuIENv
bHVtbiBpcyBzcGVjaWZpZWQgaW5kaXJlY3RseSBieSBhIHBhcmFtZXRlciBjb2x1bW5BZnRyZVBy
b2xvZworICAgIC8vIHdoaWNoIGlzIGEgdmFsdWUgb2YgY29sdW1uIHRoYXQgd2Ugc2hvdWxkIGdl
dCBhZnRlciBhIHByb2xvZyAoZmlyc3QgcHJvbG9nTGVuZ3RoIGNoYXJhY3RlcnMpIGhhcyBiZWVu
IGNvbnN1bWVkLgorICAgIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKFdURjo6WmVyb0Jhc2VkTnVt
YmVyIGxpbmUsIFdURjo6WmVyb0Jhc2VkTnVtYmVyIGNvbHVtbkFmdHJlUHJvbG9nLCBpbnQgcHJv
bG9nTGVuZ3RoKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZChjb25zdCBTZWdtZW50ZWRT
dWJzdHJpbmcmKTsKICAgICB2b2lkIHByZXBlbmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5nJik7
CkBAIC0yNDcsNiArMjcwLDggQEAgcHJpdmF0ZToKICAgICBTZWdtZW50ZWRTdWJzdHJpbmcgbV9j
dXJyZW50U3RyaW5nOwogICAgIGNvbnN0IFVDaGFyKiBtX2N1cnJlbnRDaGFyOwogICAgIGludCBt
X251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdHJpbmc7CisgICAgaW50
IG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmU7CisgICAgaW50
IG1fY3VycmVudExpbmU7CiAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPiBtX3N1YnN0cmlu
Z3M7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZTsKICAgICBib29sIG1fY2xvc2VkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77445</attachid>
            <date>2010-12-25 15:37:13 -0800</date>
            <delta_ts>2010-12-25 17:49:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51311-20101226023710.patch</filename>
            <type>text/plain</type>
            <size>24192</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2JlYWY5NjhkNjNkYjY0Mjk4ZmU1MWFiNjA4YTEyZGY0YzZmOTI1Ny4uNGFlZThkYzQwNTliZDMx
MDk5OGMyZmNkMjUyNTVlMGM2YWJhOWVjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0xMi0xOSAgUGV0
ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBjdXJyZW50Q29sdW1uIChhbmQgY3VycmVu
dExpbmUpIHRvIFNlZ21lbnRlZFN0cmluZy4gU3dpdGNoZXMKKyAgICAgICAgSFRNTFRyZWVCdWls
ZGVyIHRvIEhUTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uIHdoZW4gaXQKKyAgICAgICAg
bmVlZHMgcG9zaXRpb24gZm9yIGEgPHNjcmlwdD4gdGFnLgorCisgICAgICAgIFNlZ21lbnRlZFN0
cmluZyBzaG91bGQgcHJvdmlkZSBjb2x1bW4gcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMzExCisKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3Vt
ZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxJbnB1
dFN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0U3RyZWFtOjpjdXJyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc2VydGlvblBvaW50UmVjb3JkOjpJbnNlcnRpb25Qb2ludFJl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludFJlY29yZDo6fkluc2VydGlv
blBvaW50UmVjb3JkKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcp
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
U2VnbWVudGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6
b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZD
aGFyYWN0ZXJzQ29uc3VtZWRTbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmlu
Zzo6YWR2YW5jZVNsb3dDYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6
Y3VycmVudExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpjdXJyZW50
Q29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6c2V0Q3VycmVudFBv
c2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpTZWdtZW50ZWRTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlUGFzdE5ld2xpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlZ21lbnRlZFN0cmluZzo6bnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQpOgorCiAyMDEwLTEy
LTE5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQ2FtZXJvbiBad2FyaWNoLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuY3BwIGIvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuY3BwCmluZGV4IGMzMmY5ZGI4MDNlNDYzMDk3ODdlY2ZmODFmMWRhMjRjZjM0YmNiYmQuLjBl
M2ExMGJkYWY2YzYzOTZhMzBhNWRmMDE1MmNmOWVhYzU0ZDM1MGIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgSFRNTERvY3Vt
ZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9v
bCByZXBvcnRFcnJvcnMKICAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihkb2N1bWVudCkK
ICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZSh1c2VQcmVIVE1MNVBhcnNl
clF1aXJrcyhkb2N1bWVudCkpKQogICAgICwgbV9zY3JpcHRSdW5uZXIoSFRNTFNjcmlwdFJ1bm5l
cjo6Y3JlYXRlKGRvY3VtZW50LCB0aGlzKSkKLSAgICAsIG1fdHJlZUJ1aWxkZXIoSFRNTFRyZWVC
dWlsZGVyOjpjcmVhdGUobV90b2tlbml6ZXIuZ2V0KCksIGRvY3VtZW50LCByZXBvcnRFcnJvcnMs
IHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGRvY3VtZW50KSkpCisgICAgLCBtX3RyZWVCdWlsZGVy
KEhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlKHRoaXMsIGRvY3VtZW50LCByZXBvcnRFcnJvcnMsIHVz
ZVByZUhUTUw1UGFyc2VyUXVpcmtzKGRvY3VtZW50KSkpCiAgICAgLCBtX3BhcnNlclNjaGVkdWxl
cihIVE1MUGFyc2VyU2NoZWR1bGVyOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX2VuZFdhc0RlbGF5
ZWQoZmFsc2UpCiAgICAgLCBtX3dyaXRlTmVzdGluZ0xldmVsKDApCkBAIC05MSw3ICs5MSw3IEBA
IEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCogZG9j
dW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzCiBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVu
dFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1l
bnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogICAg
IDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGZyYWdtZW50LT5kb2N1bWVudCgpKQogICAgICwg
bV90b2tlbml6ZXIoSFRNTFRva2VuaXplcjo6Y3JlYXRlKHVzZVByZUhUTUw1UGFyc2VyUXVpcmtz
KGZyYWdtZW50LT5kb2N1bWVudCgpKSkpCi0gICAgLCBtX3RyZWVCdWlsZGVyKEhUTUxUcmVlQnVp
bGRlcjo6Y3JlYXRlKG1fdG9rZW5pemVyLmdldCgpLCBmcmFnbWVudCwgY29udGV4dEVsZW1lbnQs
IHNjcmlwdGluZ1Blcm1pc3Npb24sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGZyYWdtZW50LT5k
b2N1bWVudCgpKSkpCisgICAgLCBtX3RyZWVCdWlsZGVyKEhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRl
KHRoaXMsIGZyYWdtZW50LCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbiwgdXNl
UHJlSFRNTDVQYXJzZXJRdWlya3MoZnJhZ21lbnQtPmRvY3VtZW50KCkpKSkKICAgICAsIG1fZW5k
V2FzRGVsYXllZChmYWxzZSkKICAgICAsIG1fd3JpdGVOZXN0aW5nTGV2ZWwoMCkKIHsKQEAgLTQw
NywxMSArNDA3LDEyIEBAIGludCBIVE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25z
dAogCiBUZXh0UG9zaXRpb24wIEhUTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29u
c3QKIHsKLSAgICBpbnQgbGluZVplcm9CYXNlZCA9IG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCk7
Ci0gICAgaW50IGNvbHVtbk9uZUJhc2VkID0gbV90b2tlbml6ZXItPmNvbHVtbk51bWJlcigpOwor
ICAgIGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgY3VycmVudFN0cmluZyA9IG1faW5wdXQuY3VycmVu
dCgpOworICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyIGxpbmUgPSBjdXJyZW50U3RyaW5nLmN1cnJl
bnRMaW5lKCk7CisgICAgV1RGOjpaZXJvQmFzZWROdW1iZXIgY29sdW1uID0gY3VycmVudFN0cmlu
Zy5jdXJyZW50Q29sdW1uKCk7CisgICAgQVNTRVJUKG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCkg
PT0gbGluZS56ZXJvQmFzZWRJbnQoKSk7CiAKLSAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChXVEY6
Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChsaW5lWmVyb0Jhc2VkKSwKLSAgICAg
ICAgV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbHVtbk9uZUJhc2VkKS5j
b252ZXJ0VG9aZXJvQmFzZWQoKSk7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbjAobGluZSwgY29s
dW1uKTsKIH0KIAogYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMo
KSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuaCBiL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggMDUw
NTNkZjJmMWNiNDU3NTExZWE3NDY4MWY0MmM3MjJiM2Q2YzlhMC4uZmNhMjY5YTc0Yjc2MDM1YTc3
NTA2M2EwMTU2YmFjYTkyYmJkZGU4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5oCkBAIC02OSw2ICs2OSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGJv
b2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MoRG9jdW1lbnQqKTsKIAorICAgIEhUTUxUb2tlbml6
ZXIqIHRva2VuaXplcigpIGNvbnN0IHsgcmV0dXJuIG1fdG9rZW5pemVyLmdldCgpOyB9CisKKyAg
ICB2aXJ0dWFsIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7CisKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwogICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CkBAIC03Nyw3ICs4
MSw2IEBAIHByb3RlY3RlZDoKICAgICBIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50Kiwg
Ym9vbCByZXBvcnRFcnJvcnMpOwogICAgIEhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdt
ZW50KiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
bik7CiAKLSAgICBIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIoKSBjb25zdCB7IHJldHVybiBtX3Rv
a2VuaXplci5nZXQoKTsgfQogICAgIEhUTUxUcmVlQnVpbGRlciogdHJlZUJ1aWxkZXIoKSBjb25z
dCB7IHJldHVybiBtX3RyZWVCdWlsZGVyLmdldCgpOyB9CiAKIHByaXZhdGU6CkBAIC05Miw3ICs5
NSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRXhlY3V0aW5nU2NyaXB0KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRz
KCk7CiAgICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigpIGNvbnN0OwotICAgIHZpcnR1YWwgVGV4
dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdDsKIAogICAgIC8vIEhUTUxTY3JpcHRSdW5u
ZXJIb3N0CiAgICAgdmlydHVhbCB2b2lkIHdhdGNoRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MSW5wdXRTdHJlYW0uaCBiL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKaW5kZXggYTcwOWJkOWJkNWIyMWQxMTdl
ZWZhNDUxMjg4YjI2YjBmYjc5NDFmNC4uMWJmYmFmOTMwM2MwODg3MTMyZDk0N2MzMzJiYmEwMjE0
Y2JhMDU2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MSW5wdXRTdHJlYW0u
aAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oCkBAIC05NCw2ICs5
NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBTZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnQoKSB7
IHJldHVybiBtX2ZpcnN0OyB9CisgICAgY29uc3QgU2VnbWVudGVkU3RyaW5nJiBjdXJyZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdDsgfQogCiAgICAgdm9pZCBzcGxpdEludG8oU2VnbWVudGVk
U3RyaW5nJiBuZXh0KQogICAgIHsKQEAgLTEzMywxNyArMTM0LDI5IEBAIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBJbnNlcnRpb25Qb2ludFJlY29yZChIVE1MSW5wdXRTdHJlYW0mIGlucHV0U3RyZWFt
KQogICAgICAgICA6IG1faW5wdXRTdHJlYW0oJmlucHV0U3RyZWFtKQogICAgIHsKKyAgICAgICAg
bV9saW5lID0gbV9pbnB1dFN0cmVhbS0+Y3VycmVudCgpLmN1cnJlbnRMaW5lKCk7CisgICAgICAg
IG1fY29sdW1uID0gbV9pbnB1dFN0cmVhbS0+Y3VycmVudCgpLmN1cnJlbnRDb2x1bW4oKTsKICAg
ICAgICAgbV9pbnB1dFN0cmVhbS0+c3BsaXRJbnRvKG1fbmV4dCk7CisgICAgICAgIC8vIFdlICdm
b3JrJyBjdXJyZW50IHBvc2l0aW9uIGFuZCB1c2UgaXQgZm9yIHRoZSBnZW5lcmF0ZWQgc2NyaXB0
IHBhcnQuCisgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQsIGJlY2F1c2UgZ2VuZXJhdGVk
IHBhcnQgZG9lcyBub3QgaGF2ZSBwb3NpdGlvbnMgd2l0aGluIGFuIEhUTUwgZG9jdW1lbnQuCisg
ICAgICAgIG1faW5wdXRTdHJlYW0tPmN1cnJlbnQoKS5zZXRDdXJyZW50UG9zaXRpb24obV9saW5l
LCBtX2NvbHVtbiwgMCk7CiAgICAgfQogCiAgICAgfkluc2VydGlvblBvaW50UmVjb3JkKCkKICAg
ICB7CisgICAgICAgIC8vIFNvbWUgaW5zZXJ0ZWQgdGV4dCBtYXkgaGF2ZSByZW1haW5lZCBpbiBp
bnB1dCBzdHJlYW0uIEUuZy4gaWYgc2NyaXB0IGhhcyB3cml0dGVuICImYW1wIiBvciAiPHRhYmxl
IiwKKyAgICAgICAgLy8gaXQgc3RheXMgaW4gYnVmZmVyIGJlY2F1c2UgaXQgY2Fubm90IGJlIHBy
b3Blcmx5IHRva2VuaXplZCBiZWZvcmUgd2Ugc2VlIG5leHQgcGFydC4KKyAgICAgICAgaW50IHVu
cGFyc2VkUmVtYWluZGVyTGVuZ3RoID0gbV9pbnB1dFN0cmVhbS0+Y3VycmVudCgpLmxlbmd0aCgp
OwogICAgICAgICBtX2lucHV0U3RyZWFtLT5tZXJnZUZyb20obV9uZXh0KTsKKyAgICAgICAgLy8g
V2UgcmVzdG9yZSBwb3NpdGlvbiBmb3IgdGhlIGNoYXJhY3RlciB0aGF0IGdvZXMgcmlnaHQgYWZ0
ZXIgdW5wYXJzZWQgcmVtYWluZGVyLgorICAgICAgICBtX2lucHV0U3RyZWFtLT5jdXJyZW50KCku
c2V0Q3VycmVudFBvc2l0aW9uKG1fbGluZSwgbV9jb2x1bW4sIHVucGFyc2VkUmVtYWluZGVyTGVu
Z3RoKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgSFRNTElucHV0U3RyZWFtKiBtX2lucHV0U3Ry
ZWFtOwogICAgIFNlZ21lbnRlZFN0cmluZyBtX25leHQ7CisgICAgV1RGOjpaZXJvQmFzZWROdW1i
ZXIgbV9saW5lOworICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyIG1fY29sdW1uOwogfTsKIAogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDNkMzkxMzFkOWE1ZTY1
OWY2ZDBkOTQ3MzFmZmZmMTM0YzkyMmE4MTUuLmMzN2Q2ZjE5N2Y4ZWM1OWMwZWZhZjAzODE1NGU3
MmU3MmYzOWEwOWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWls
ZGVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBh
cnNlci5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgpAQCAtMzM2LDcgKzMz
Nyw3IEBAIHByaXZhdGU6CiB9OwogCiAKLUhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVy
KEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBy
ZXBvcnRFcnJvcnMsIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpCitIVE1MVHJlZUJ1aWxk
ZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwgSFRNTERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCByZXBvcnRFcnJvcnMsIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJR
dWlya3MpCiAgICAgOiBtX2ZyYW1lc2V0T2sodHJ1ZSkKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1l
bnQpCiAgICAgLCBtX3RyZWUoZG9jdW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCwgZmFs
c2UpCkBAIC0zNDQsNyArMzQ1LDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIo
SFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW4KICAgICAsIG1f
aXNQYXVzZWQoZmFsc2UpCiAgICAgLCBtX2luc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAg
LCBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKLSAgICAsIG1fdG9rZW5pemVy
KHRva2VuaXplcikKKyAgICAsIG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1fc2NyaXB0VG9Qcm9j
ZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoKSkKICAgICAsIG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjA6OmJlbG93UmFuZ2VQ
b3NpdGlvbigpKQogICAgICwgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyh1c2VQcmVIVE1MNVBh
cnNlclF1aXJrcykKQEAgLTM1NCw3ICszNTUsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVl
QnVpbGRlcihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbgog
CiAvLyBGSVhNRTogTWVtYmVyIHZhcmlhYmxlcyBzaG91bGQgYmUgZ3JvdXBlZCBpbnRvIHNlbGYt
aW5pdGlhbGl6aW5nIHN0cnVjdHMgdG8KIC8vIG1pbmltaXplIGNvZGUgZHVwbGljYXRpb24gYmV0
d2VlbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCi1IVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRl
cihIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIsIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBF
bGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlw
dGluZ1Blcm1pc3Npb24sIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpCitIVE1MVHJlZUJ1
aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwgRG9jdW1l
bnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbiwgYm9vbCB1c2VQcmVIVE1MNVBh
cnNlclF1aXJrcykKICAgICA6IG1fZnJhbWVzZXRPayh0cnVlKQogICAgICwgbV9mcmFnbWVudENv
bnRleHQoZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKQogICAg
ICwgbV9kb2N1bWVudChtX2ZyYWdtZW50Q29udGV4dC5kb2N1bWVudCgpKQpAQCAtMzYzLDcgKzM2
NCw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRv
a2VuaXplciwgRG9jdW1lbnRGcmFnbWVudCogZnJhCiAgICAgLCBtX2lzUGF1c2VkKGZhbHNlKQog
ICAgICwgbV9pbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9vcmlnaW5hbEluc2Vy
dGlvbk1vZGUoSW5pdGlhbE1vZGUpCi0gICAgLCBtX3Rva2VuaXplcih0b2tlbml6ZXIpCisgICAg
LCBtX3BhcnNlcihwYXJzZXIpCiAgICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24o
dW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKCkpCiAgICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50
U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24wOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAs
IG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpCkBAIC00
NTMsOCArNDU0LDggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9tQXRv
bWljVG9rZW4oQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAvLyBTd2FsbG93aW5nIFUrMDAw
MCBjaGFyYWN0ZXJzIGlzbid0IGluIHRoZSBIVE1MNSBzcGVjLCBidXQgdHVybmluZyBhbGwKICAg
ICAvLyB0aGUgVSswMDAwIGNoYXJhY3RlcnMgaW50byByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIGhh
cyBjb21wYXRpYmlsaXR5CiAgICAgLy8gcHJvYmxlbXMuCi0gICAgbV90b2tlbml6ZXItPnNldEZv
cmNlTnVsbENoYXJhY3RlclJlcGxhY2VtZW50KG1faW5zZXJ0aW9uTW9kZSA9PSBUZXh0TW9kZSB8
fCBtX2luc2VydGlvbk1vZGUgPT0gSW5Gb3JlaWduQ29udGVudE1vZGUpOwotICAgIG1fdG9rZW5p
emVyLT5zZXRTaG91bGRBbGxvd0NEQVRBKG1faW5zZXJ0aW9uTW9kZSA9PSBJbkZvcmVpZ25Db250
ZW50TW9kZSAmJiBtX3RyZWUuY3VycmVudEVsZW1lbnQoKS0+bmFtZXNwYWNlVVJJKCkgIT0geGh0
bWxOYW1lc3BhY2VVUkkpOworICAgIG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2V0Rm9yY2VOdWxs
Q2hhcmFjdGVyUmVwbGFjZW1lbnQobV9pbnNlcnRpb25Nb2RlID09IFRleHRNb2RlIHx8IG1faW5z
ZXJ0aW9uTW9kZSA9PSBJbkZvcmVpZ25Db250ZW50TW9kZSk7CisgICAgbV9wYXJzZXItPnRva2Vu
aXplcigpLT5zZXRTaG91bGRBbGxvd0NEQVRBKG1faW5zZXJ0aW9uTW9kZSA9PSBJbkZvcmVpZ25D
b250ZW50TW9kZSAmJiBtX3RyZWUuY3VycmVudEVsZW1lbnQoKS0+bmFtZXNwYWNlVVJJKCkgIT0g
eGh0bWxOYW1lc3BhY2VVUkkpOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rv
a2VuKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCkBAIC03OTcsNyArNzk4LDcgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcHJlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBs
aXN0aW5nVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUo
KTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKLSAgICAgICAgbV90
b2tlbml6ZXItPnNldFNraXBMZWFkaW5nTmV3TGluZUZvckxpc3RpbmcodHJ1ZSk7CisgICAgICAg
IG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2V0U2tpcExlYWRpbmdOZXdMaW5lRm9yTGlzdGluZyh0
cnVlKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC04MjEsNyArODIyLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFy
dFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gcGxhaW50ZXh0VGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0
dG9uU2NvcGUoKTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKLSAg
ICAgICAgbV90b2tlbml6ZXItPnNldFN0YXRlKEhUTUxUb2tlbml6ZXI6OlBMQUlOVEVYVFN0YXRl
KTsKKyAgICAgICAgbV9wYXJzZXItPnRva2VuaXplcigpLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVy
OjpQTEFJTlRFWFRTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBidXR0b25UYWcpIHsKQEAgLTkxOCw4ICs5MTksOCBAQCB2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGV4dGFyZWFUYWcpIHsKICAgICAgICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKLSAgICAgICAgbV90b2tlbml6ZXItPnNl
dFNraXBMZWFkaW5nTmV3TGluZUZvckxpc3RpbmcodHJ1ZSk7Ci0gICAgICAgIG1fdG9rZW5pemVy
LT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpSQ0RBVEFTdGF0ZSk7CisgICAgICAgIG1fcGFyc2Vy
LT50b2tlbml6ZXIoKS0+c2V0U2tpcExlYWRpbmdOZXdMaW5lRm9yTGlzdGluZyh0cnVlKTsKKyAg
ICAgICAgbV9wYXJzZXItPnRva2VuaXplcigpLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpSQ0RB
VEFTdGF0ZSk7CiAgICAgICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25N
b2RlOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgc2V0SW5zZXJ0aW9u
TW9kZShUZXh0TW9kZSk7CkBAIC0yMjA1LDggKzIyMDYsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgLy8g
c2VsZi1jbG9zaW5nIHNjcmlwdCB0YWcgd2FzIGVuY291bnRlcmVkIGFuZCBwcmUtSFRNTDUgcGFy
c2VyCiAgICAgICAgICAgICAvLyBxdWlya3MgYXJlIGVuYWJsZWQuIFdlIG11c3Qgc2V0IHRoZSB0
b2tlbml6ZXIncyBzdGF0ZSB0bwogICAgICAgICAgICAgLy8gRGF0YVN0YXRlIGV4cGxpY2l0bHkg
aWYgdGhlIHRva2VuaXplciBkaWRuJ3QgaGF2ZSBhIGNoYW5jZSB0by4KLSAgICAgICAgICAgIEFT
U0VSVChtX3Rva2VuaXplci0+c3RhdGUoKSA9PSBIVE1MVG9rZW5pemVyOjpEYXRhU3RhdGUgfHwg
bV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyk7Ci0gICAgICAgICAgICBtX3Rva2VuaXplci0+c2V0
U3RhdGUoSFRNTFRva2VuaXplcjo6RGF0YVN0YXRlKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Bh
cnNlci0+dG9rZW5pemVyKCktPnN0YXRlKCkgPT0gSFRNTFRva2VuaXplcjo6RGF0YVN0YXRlIHx8
IG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpOworICAgICAgICAgICAgbV9wYXJzZXItPnRva2Vu
aXplcigpLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpEYXRhU3RhdGUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7
CkBAIC0yNzU1LDcgKzI3NTYsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVy
aWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVCh0
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CiAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KHRva2VuKTsKLSAgICBtX3Rva2VuaXplci0+c2V0U3RhdGUoSFRNTFRva2VuaXpl
cjo6UkNEQVRBU3RhdGUpOworICAgIG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRN
TFRva2VuaXplcjo6UkNEQVRBU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0g
bV9pbnNlcnRpb25Nb2RlOwogICAgIHNldEluc2VydGlvbk1vZGUoVGV4dE1vZGUpOwogfQpAQCAt
Mjc2NCw3ICsyNzY1LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmljUmF3
VGV4dFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVs
ZW1lbnQodG9rZW4pOwotICAgIG1fdG9rZW5pemVyLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpS
QVdURVhUU3RhdGUpOworICAgIG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRv
a2VuaXplcjo6UkFXVEVYVFN0YXRlKTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1f
aW5zZXJ0aW9uTW9kZTsKICAgICBzZXRJbnNlcnRpb25Nb2RlKFRleHRNb2RlKTsKIH0KQEAgLTI3
NzMsMTAgKzI3NzQsMTMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFy
dFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CiAgICAgbV90cmVlLmluc2VydFNjcmlwdEVsZW1lbnQo
dG9rZW4pOwotICAgIG1fdG9rZW5pemVyLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpTY3JpcHRE
YXRhU3RhdGUpOworICAgIG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRva2Vu
aXplcjo6U2NyaXB0RGF0YVN0YXRlKTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1f
aW5zZXJ0aW9uTW9kZTsKIAotICAgIFRleHRQb3NpdGlvbjAgcG9zaXRpb24gPSBUZXh0UG9zaXRp
b24wKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fdG9rZW5pemVyLT5s
aW5lTnVtYmVyKCkpLCBXVEY6Olplcm9CYXNlZE51bWJlcjo6YmFzZSgpKTsKKyAgICBUZXh0UG9z
aXRpb24wIHBvc2l0aW9uID0gbV9wYXJzZXItPnRleHRQb3NpdGlvbigpOworCisgICAgQVNTRVJU
KHBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKSA9PSBtX3BhcnNlci0+dG9rZW5pemVyKCkt
PmxpbmVOdW1iZXIoKSk7CisKICAgICBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbiA9
IHBvc2l0aW9uOwogCiAgICAgc2V0SW5zZXJ0aW9uTW9kZShUZXh0TW9kZSk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oIGIvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCBlYmVkODEwNDZmZmQ4OWUxOWNjMGE4OTEwODM5
ODgwY2JlNjlhYjRjLi4xN2I3N2I3NWYwNDAyNjc3Y2ExZmI4ZjY2NGFmMDMxMmM1YjU2MzU1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCisrKyBiL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTQ5LDE2ICs0OSwxNyBAQCBj
bGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxUb2tlbjsKIGNsYXNzIEhUTUxEb2N1bWVudDsKIGNsYXNz
IE5vZGU7CitjbGFzcyBIVE1MRG9jdW1lbnRQYXJzZXI7CiAKIGNsYXNzIEhUTUxUcmVlQnVpbGRl
ciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycywgYm9vbCB1c2VQcmVIVE1MNVBhcnNl
clF1aXJrcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxIVE1MVHJlZUJ1aWxkZXI+IGNyZWF0ZShI
VE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBy
ZXBvcnRFcnJvcnMsIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEhUTUxUcmVlQnVpbGRlcih0b2tlbml6ZXIsIGRvY3VtZW50
LCByZXBvcnRFcnJvcnMsIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgSFRNTFRyZWVCdWlsZGVyKHBhcnNlciwgZG9jdW1lbnQsIHJlcG9ydEVy
cm9ycywgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBE
b2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uLCBib29sIHVzZVByZUhU
TUw1UGFyc2VyUXVpcmtzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4g
Y3JlYXRlKEhUTUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50KiBmcmFn
bWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBzY3JpcHRpbmdQZXJtaXNzaW9uLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MVHJlZUJ1aWxkZXIodG9rZW5pemVy
LCBmcmFnbWVudCwgY29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIHVzZVByZUhU
TUw1UGFyc2VyUXVpcmtzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFRyZWVC
dWlsZGVyKHBhcnNlciwgZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNz
aW9uLCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcykpOwogICAgIH0KICAgICB+SFRNTFRyZWVCdWls
ZGVyKCk7CiAKQEAgLTExMyw4ICsxMTQsOCBAQCBwcml2YXRlOgogICAgICAgICBBZnRlckFmdGVy
RnJhbWVzZXRNb2RlLAogICAgIH07CiAKLSAgICBIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXpl
ciosIEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzLCBib29sIHVzZVByZUhUTUw1UGFy
c2VyUXVpcmtzKTsKLSAgICBIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciosIERvY3VtZW50
RnJhZ21lbnQqLCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKTsKKyAgICBIVE1MVHJlZUJ1aWxk
ZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0
RXJyb3JzLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKTsKKyAgICBIVE1MVHJlZUJ1aWxk
ZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqLCBFbGVtZW50
KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLCBib29sIHVzZVBy
ZUhUTUw1UGFyc2VyUXVpcmtzKTsKIAogICAgIHZvaWQgcHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxU
b2tlbiYpOwogCkBAIC0yNDQsOSArMjQ1LDkgQEAgcHJpdmF0ZToKICAgICAvLyBodHRwOi8vd3d3
LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6
YXRpb24uaHRtbCNwZW5kaW5nLXRhYmxlLWNoYXJhY3Rlci10b2tlbnMKICAgICBWZWN0b3I8VUNo
YXI+IG1fcGVuZGluZ1RhYmxlQ2hhcmFjdGVyczsKIAotICAgIC8vIEhUTUw1IHNwZWMgcmVxdWly
ZXMgdGhhdCB3ZSBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHRva2VuaXplcgot
ICAgIC8vIGZyb20gd2l0aGluIHBhcnNlciBhY3Rpb25zLgotICAgIEhUTUxUb2tlbml6ZXIqIG1f
dG9rZW5pemVyOworICAgIC8vIFdlIGFjY2VzcyBwYXJzZXIgYmVjYXVzZSBIVE1MNSBzcGVjIHJl
cXVpcmVzIHRoYXQgd2UgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSB0b2tlbml6
ZXIKKyAgICAvLyBmcm9tIHdpdGhpbiBwYXJzZXIgYWN0aW9ucy4gV2UgYWxzbyBuZWVkIGl0IHRv
IHRyYWNrIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgIEhUTUxEb2N1bWVudFBhcnNlciogbV9w
YXJzZXI7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gbV9zY3JpcHRUb1Byb2Nlc3M7IC8vIDxzY3Jp
cHQ+IHRhZyB3aGljaCBuZWVkcyBwcm9jZXNzaW5nIGJlZm9yZSByZXN1bWluZyB0aGUgcGFyc2Vy
LgogICAgIFRleHRQb3NpdGlvbjEgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOyAvLyBT
dGFydGluZyBsaW5lIG51bWJlciBvZiB0aGUgc2NyaXB0IHRhZyBuZWVkaW5nIHByb2Nlc3Npbmcu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCmluZGV4IGI5ZmY1MDM3
YTk4MmFmZDY0ZDk4MjE1YTc4NmIwNWUwNjI1ZDE1OTguLjZhMjY1ODE1YjU3ZTU3ZWQzYjkyNmQ3
ODQyMDY2NWIwYzJhNDkzMWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdt
ZW50ZWRTdHJpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJp
bmcuY3BwCkBAIC01Myw2ICs1Myw5IEBAIGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgU2VnbWVudGVk
U3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgU2VnbWVudGVkU3RyaW5nICZvdGhlcikKICAgICAgICAg
bV9jdXJyZW50Q2hhciA9IG90aGVyLm1fY3VycmVudENoYXI7CiAgICAgbV9jbG9zZWQgPSBvdGhl
ci5tX2Nsb3NlZDsKICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJl
bnRTdHJpbmcgPSBvdGhlci5tX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJl
bnRTdHJpbmc7CisgICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50
TGluZSA9IG90aGVyLm1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExp
bmU7CisgICAgbV9jdXJyZW50TGluZSA9IG90aGVyLm1fY3VycmVudExpbmU7CisKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTE4Myw2ICsxODYsMTcgQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6
OmFkdmFuY2VTdWJzdHJpbmcoKQogICAgIH0KIH0KIAoraW50IFNlZ21lbnRlZFN0cmluZzo6bnVt
YmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRTbG93KCkgY29uc3QKK3sKKyAgICBpbnQgcmVzdWx0ID0g
bV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3RyaW5nICsgbV9jdXJy
ZW50U3RyaW5nLm51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCk7CisgICAgaWYgKG1fcHVzaGVk
Q2hhcjEpIHsKKyAgICAgICAgLS1yZXN1bHQ7CisgICAgICAgIGlmIChtX3B1c2hlZENoYXIyKQor
ICAgICAgICAgICAgLS1yZXN1bHQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFN0
cmluZyBTZWdtZW50ZWRTdHJpbmc6OnRvU3RyaW5nKCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVz
dWx0OwpAQCAtMjI5LDEyICsyNDMsMzIgQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFkdmFuY2VT
bG93Q2FzZShpbnQmIGxpbmVOdW1iZXIpCiAgICAgICAgIG1fcHVzaGVkQ2hhcjEgPSBtX3B1c2hl
ZENoYXIyOwogICAgICAgICBtX3B1c2hlZENoYXIyID0gMDsKICAgICB9IGVsc2UgaWYgKG1fY3Vy
cmVudFN0cmluZy5tX2N1cnJlbnQpIHsKLSAgICAgICAgaWYgKCptX2N1cnJlbnRTdHJpbmcubV9j
dXJyZW50KysgPT0gJ1xuJyAmJiBtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJl
cnMoKSkKKyAgICAgICAgaWYgKCptX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50KysgPT0gJ1xuJyAm
JiBtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJlcnMoKSkgewogICAgICAgICAg
ICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAgKyttX2N1cnJlbnRMaW5lOworICAgICAgICAg
ICAgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGluZSA9IG51bWJl
ck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKC0tbV9jdXJy
ZW50U3RyaW5nLm1fbGVuZ3RoID09IDApCiAgICAgICAgICAgICBhZHZhbmNlU3Vic3RyaW5nKCk7
CiAgICAgfQogICAgIG1fY3VycmVudENoYXIgPSBtX3B1c2hlZENoYXIxID8gJm1fcHVzaGVkQ2hh
cjEgOiBtX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50OwogfQogCitXVEY6Olplcm9CYXNlZE51bWJl
ciBTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRMaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RG
OjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV9jdXJyZW50TGluZSk7Cit9CisK
K1dURjo6WmVyb0Jhc2VkTnVtYmVyIFNlZ21lbnRlZFN0cmluZzo6Y3VycmVudENvbHVtbigpIGNv
bnN0Cit7CisgICAgaW50IHplcm9CYXNlZENvbHVtbiA9IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1
bWVkU2xvdygpIC0gbV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50TGlu
ZTsKKyAgICByZXR1cm4gV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoemVy
b0Jhc2VkQ29sdW1uKTsKK30KKwordm9pZCBTZWdtZW50ZWRTdHJpbmc6OnNldEN1cnJlbnRQb3Np
dGlvbihXVEY6Olplcm9CYXNlZE51bWJlciBsaW5lLCBXVEY6Olplcm9CYXNlZE51bWJlciBjb2x1
bW5BZnRyZVByb2xvZywgaW50IHByb2xvZ0xlbmd0aCkKK3sKKyAgICBtX2N1cnJlbnRMaW5lID0g
bGluZS56ZXJvQmFzZWRJbnQoKTsKKyAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJp
b3JUb0N1cnJlbnRMaW5lID0gbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRTbG93KCkgKyBwcm9s
b2dMZW5ndGggLSBjb2x1bW5BZnRyZVByb2xvZy56ZXJvQmFzZWRJbnQoKTsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCmluZGV4IDkxYzJjYmUzZjljZjY5OTA3
NmY4MmQwNmExODAxN2ExNzg0MWZiZTYuLjVmNTQ4YzczZjFmNTg2NDA5NTliNWFhNDIwZjg4YTI1
MzExMDFhOTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJp
bmcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgKQEAgLTIy
LDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNzUsNiArNzYsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9wdXNo
ZWRDaGFyMigwKQogICAgICAgICAsIG1fY3VycmVudENoYXIoMCkKICAgICAgICAgLCBtX251bWJl
ck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRTdHJpbmcoMCkKKyAgICAgICAgLCBt
X251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lKDApCisgICAgICAg
ICwgbV9jdXJyZW50TGluZSgwKQogICAgICAgICAsIG1fY29tcG9zaXRlKGZhbHNlKQogICAgICAg
ICAsIG1fY2xvc2VkKGZhbHNlKQogICAgIHsKQEAgLTg2LDYgKzg5LDggQEAgcHVibGljOgogICAg
ICAgICAsIG1fY3VycmVudFN0cmluZyhzdHIpCiAgICAgICAgICwgbV9jdXJyZW50Q2hhcihtX2N1
cnJlbnRTdHJpbmcubV9jdXJyZW50KQogICAgICAgICAsIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29u
c3VtZWRQcmlvclRvQ3VycmVudFN0cmluZygwKQorICAgICAgICAsIG1fbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUoMCkKKyAgICAgICAgLCBtX2N1cnJlbnRMaW5l
KDApCiAgICAgICAgICwgbV9jb21wb3NpdGUoZmFsc2UpCiAgICAgICAgICwgbV9jbG9zZWQoZmFs
c2UpCiAgICAgewpAQCAtMTU1LDcgKzE2MCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBB
U1NFUlQoKmN1cnJlbnQoKSA9PSAnXG4nKTsKICAgICAgICAgaWYgKCFtX3B1c2hlZENoYXIxICYm
IG1fY3VycmVudFN0cmluZy5tX2xlbmd0aCA+IDEpIHsKLSAgICAgICAgICAgIGxpbmVOdW1iZXIg
Kz0gbV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1iZXJzKCk7CisgICAgICAgICAg
ICBpbnQgbmV3TGluZUZsYWcgPSBtX2N1cnJlbnRTdHJpbmcuZG9Ob3RFeGNsdWRlTGluZU51bWJl
cnMoKTsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gbmV3TGluZUZsYWc7CisgICAgICAgICAg
ICBtX2N1cnJlbnRMaW5lICs9IG5ld0xpbmVGbGFnOworICAgICAgICAgICAgaWYgKG5ld0xpbmVG
bGFnKQorICAgICAgICAgICAgICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRv
Q3VycmVudExpbmUgPSBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpOwogICAgICAgICAgICAg
LS1tX2N1cnJlbnRTdHJpbmcubV9sZW5ndGg7CiAgICAgICAgICAgICBtX2N1cnJlbnRDaGFyID0g
KyttX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTc3
LDcgKzE4NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZHZhbmNlKGludCYgbGluZU51bWJlcikK
ICAgICB7CiAgICAgICAgIGlmICghbV9wdXNoZWRDaGFyMSAmJiBtX2N1cnJlbnRTdHJpbmcubV9s
ZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICBsaW5lTnVtYmVyICs9ICgqbV9jdXJyZW50U3RyaW5n
Lm1fY3VycmVudCA9PSAnXG4nKSAmIG1fY3VycmVudFN0cmluZy5kb05vdEV4Y2x1ZGVMaW5lTnVt
YmVycygpOworICAgICAgICAgICAgaW50IG5ld0xpbmVGbGFnID0gKCptX2N1cnJlbnRTdHJpbmcu
bV9jdXJyZW50ID09ICdcbicpICYgbV9jdXJyZW50U3RyaW5nLmRvTm90RXhjbHVkZUxpbmVOdW1i
ZXJzKCk7CisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IG5ld0xpbmVGbGFnOworICAgICAgICAg
ICAgbV9jdXJyZW50TGluZSArPSBuZXdMaW5lRmxhZzsKKyAgICAgICAgICAgIGlmIChuZXdMaW5l
RmxhZykKKyAgICAgICAgICAgICAgICBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JU
b0N1cnJlbnRMaW5lID0gbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSArIDE7CiAgICAgICAg
ICAgICAtLW1fY3VycmVudFN0cmluZy5tX2xlbmd0aDsKICAgICAgICAgICAgIG1fY3VycmVudENo
YXIgPSArK21fY3VycmVudFN0cmluZy5tX2N1cnJlbnQ7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xOTEsMTggKzIwNCwyOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGVzY2FwZWQoKSBjb25zdCB7
IHJldHVybiBtX3B1c2hlZENoYXIxOyB9CiAKLSAgICBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzQ29u
c3VtZWQoKQorICAgIGludCBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpIGNvbnN0CiAgICAg
ewogICAgICAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgaGFuZGxlIHRoZSBjYXNlIHdoZW4gdGhl
cmUgYXJlIHB1c2hlZCBjaGFyYWN0ZXIuCiAgICAgICAgIEFTU0VSVCghbV9wdXNoZWRDaGFyMSk7
CiAgICAgICAgIHJldHVybiBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJl
bnRTdHJpbmcgKyBtX2N1cnJlbnRTdHJpbmcubnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKTsK
ICAgICB9CiAKKyAgICBpbnQgbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRTbG93KCkgY29uc3Q7
CisKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAogICAgIGNvbnN0IFVDaGFyJiBvcGVy
YXRvciooKSBjb25zdCB7IHJldHVybiAqY3VycmVudCgpOyB9CiAgICAgY29uc3QgVUNoYXIqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBjdXJyZW50KCk7IH0KICAgICAKKworICAgIC8vIFRo
ZSBtZXRob2QgaXMgbW9kZXJhdGVseSBzbG93LCBjb21wYXJpbmcgdG8gY3VycmVudExpbmUgbWV0
aG9kLgorICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyIGN1cnJlbnRDb2x1bW4oKSBjb25zdDsKKyAg
ICBXVEY6Olplcm9CYXNlZE51bWJlciBjdXJyZW50TGluZSgpIGNvbnN0OworICAgIC8vIFNldHMg
dmFsdWUgb2YgbGluZS9jb2x1bW4gdmFyaWFibGVzLiBDb2x1bW4gaXMgc3BlY2lmaWVkIGluZGly
ZWN0bHkgYnkgYSBwYXJhbWV0ZXIgY29sdW1uQWZ0cmVQcm9sb2cKKyAgICAvLyB3aGljaCBpcyBh
IHZhbHVlIG9mIGNvbHVtbiB0aGF0IHdlIHNob3VsZCBnZXQgYWZ0ZXIgYSBwcm9sb2cgKGZpcnN0
IHByb2xvZ0xlbmd0aCBjaGFyYWN0ZXJzKSBoYXMgYmVlbiBjb25zdW1lZC4KKyAgICB2b2lkIHNl
dEN1cnJlbnRQb3NpdGlvbihXVEY6Olplcm9CYXNlZE51bWJlciBsaW5lLCBXVEY6Olplcm9CYXNl
ZE51bWJlciBjb2x1bW5BZnRyZVByb2xvZywgaW50IHByb2xvZ0xlbmd0aCk7CisKIHByaXZhdGU6
CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5nJik7CiAgICAgdm9pZCBw
cmVwZW5kKGNvbnN0IFNlZ21lbnRlZFN1YnN0cmluZyYpOwpAQCAtMjQ3LDYgKzI3MCw4IEBAIHBy
aXZhdGU6CiAgICAgU2VnbWVudGVkU3Vic3RyaW5nIG1fY3VycmVudFN0cmluZzsKICAgICBjb25z
dCBVQ2hhciogbV9jdXJyZW50Q2hhcjsKICAgICBpbnQgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZFByaW9yVG9DdXJyZW50U3RyaW5nOworICAgIGludCBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lOworICAgIGludCBtX2N1cnJlbnRMaW5lOwogICAgIERl
cXVlPFNlZ21lbnRlZFN1YnN0cmluZz4gbV9zdWJzdHJpbmdzOwogICAgIGJvb2wgbV9jb21wb3Np
dGU7CiAgICAgYm9vbCBtX2Nsb3NlZDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>