<?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>23452</bug_id>
          
          <creation_ts>2009-01-21 01:38:28 -0800</creation_ts>
          <short_desc>Add XHTMLMP support to Webkit</short_desc>
          <delta_ts>2009-05-20 08:11:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>9589</blocked>
    
    <blocked>23477</blocked>
    
    <blocked>23724</blocked>
    
    <blocked>23727</blocked>
    
    <blocked>23758</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="yichao.yin">yichao.yin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mike</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>staikos</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106448</commentid>
    <comment_count>0</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-01-21 01:38:28 -0800</bug_when>
    <thetext>the upcoming patch is for adding XHTMLMP support to Webkit. It can be enabled/disabled by ENABLE(XHTMLMP) and is disabled by default. It has just been verified for QT port so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106449</commentid>
    <comment_count>1</comment_count>
      <attachid>26890</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-01-21 01:42:20 -0800</bug_when>
    <thetext>Created attachment 26890
Add XHTMLMP support initial patch

Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106488</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 12:22:31 -0800</bug_when>
    <thetext>Adding Darin to the CC list, as I&apos;d like to hear his opinion regarding HTMLNoScriptElement (especially the manual style resolution (aka. attach/recalcStyle implementation)). I&apos;ve checked most of the other code, and it&apos;s looking quite nice. Though I think there may be a better solution regarding the attach/recalcStyle functions, that I&apos;m overlooking - so calling out for Darin :-)

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108240</commentid>
    <comment_count>3</comment_count>
      <attachid>27307</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-03 23:01:31 -0800</bug_when>
    <thetext>Created attachment 27307
updated patch


Create the new patch against the night build of TOT.

Only two source files need updating. i.e. The XMLTokenizerQt.cpp and XMLTokenizerLibxml2.cpp are updated since they have been changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108278</commentid>
    <comment_count>4</comment_count>
      <attachid>27307</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-04 09:38:28 -0800</bug_when>
    <thetext>Comment on attachment 27307
updated patch

The code here:

if (m_doc-&gt;isXHTMLDocument() &amp;&amp; !m_hasDocTypeDeclaration) {

... bails if you don&apos;t have a DOCTYPE.  It only asks if you&apos;re an XHTML document, so if XHTMLMP is enabled, you&apos;ll start being more strict in your handling of XHTML documents that aren&apos;t also the XHTMLMP MIME type.  Is that what you really want?

The code in parseDTD and externalSubsetHandler had lines like:

(publicId == QLatin1String(&quot;-//WAPFORUM//DTD XHTML Mobile 1.0//EN&quot;))) {

These were unconditionally removed.  Shouldn&apos;t those just be left alone but put inside #if !ENABLE(XHTMLMP)?

The new document method isXHTMLDocument() was added inside #if ENABLE(XHTMLMP).  It&apos;s ok for that to be outside of the #ifdef.

Can you explain what the NOSCRIPT changes are about? Why do you need an actual element for &lt;noscript&gt; in the XHTMLMP case?

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108385</commentid>
    <comment_count>5</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-04 19:04:41 -0800</bug_when>
    <thetext>Hi Dave,
Thanks for your good comments. my reply is below.

(In reply to comment #4)
&gt; (From update of attachment 27307 [review])
&gt; The code here:
&gt; if (m_doc-&gt;isXHTMLDocument() &amp;&amp; !m_hasDocTypeDeclaration) {
&gt; ... bails if you don&apos;t have a DOCTYPE.  It only asks if you&apos;re an XHTML
&gt; document, so if XHTMLMP is enabled, you&apos;ll start being more strict in your
&gt; handling of XHTML documents that aren&apos;t also the XHTMLMP MIME type.  Is that
&gt; what you really want?

You are right, we&apos;d better add Document::isXHTMLMPDocument() to check this.


&gt; The code in parseDTD and externalSubsetHandler had lines like:
&gt; (publicId == QLatin1String(&quot;-//WAPFORUM//DTD XHTML Mobile 1.0//EN&quot;))) {
&gt; These were unconditionally removed.  Shouldn&apos;t those just be left alone but put
&gt; inside #if !ENABLE(XHTMLMP)?

Yes, sorry to ignore it, will fix them. :-)

&gt; The new document method isXHTMLDocument() was added inside #if ENABLE(XHTMLMP).
&gt;  It&apos;s ok for that to be outside of the #ifdef.

Will replace this method with isXHTMLMPDocument().

&gt; Can you explain what the NOSCRIPT changes are about? Why do you need an actual
&gt; element for &lt;noscript&gt; in the XHTMLMP case?
&gt; Thanks!

As per the specification: OMA-WAP-XHTMLMP-V1_1-20061020-A.pdf, XHTML Mobile profile is a strict subset of XHTML 1.1 [XHTML11]. It extends XHTML Basic [XHTMLBasic] to bring enhanced functionality to application authors, including &quot;scripts within a document&quot;, and &lt;noscript&gt; is a new elment in the scripts module, which is used to describe an alternate presentation for use. It&apos;s defined in this DTD document:
http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-script-1.mod

Usually, there are two situations the &lt;noscript&gt; should be processed.
1) when any &lt;script&gt; elements can&apos;t be excuted because of the language specified by its type attribute is invalid.
2) scripting is not supported by the user agent or is configured to not evaluate scripts by user.

I will upload the updated patch soon.
Thanks againg
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108401</commentid>
    <comment_count>6</comment_count>
      <attachid>27342</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-04 23:15:56 -0800</bug_when>
    <thetext>Created attachment 27342
updated patch


This patch contains the fix of issues that Dave points out.
The main change is replacing the method Document::isXHTMLDocument() with Document::isXHTMLMPDocument()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109128</commentid>
    <comment_count>7</comment_count>
      <attachid>27342</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-10 10:07:01 -0800</bug_when>
    <thetext>Comment on attachment 27342
updated patch

&gt;  #include &quot;HTMLNames.h&quot;
&gt; +#if ENABLE(XHTMLMP)
&gt; +#include &quot;HTMLNoScriptElement.h&quot;
&gt; +#endif
&gt;  #include &quot;HTMLStyleElement.h&quot;

Conditional includes should go in a separate paragraph after the unconditional includes.

&gt; +#if ENABLE(XHTMLMP)
&gt; +    if (settings())
&gt; +        m_shouldProcessNoScriptElement = !settings()-&gt;isJavaScriptEnabled();
&gt; +#endif

Member initialization is preferred over assignment. Also, this seems to leave m_shouldProcessNoScriptElement uninitialized if settings() is 0. Also, when can settings() be 0? I don&apos;t think this is correct.

&gt; +#if ENABLE(XHTMLMP)
&gt; +bool Document::isXHTMLMPDocument() const
&gt; +{
&gt; +    return (frame() &amp;&amp; frame()-&gt;loader() &amp;&amp; (frame()-&gt;loader()-&gt;responseMIMEType() == &quot;application/vnd.wap.xhtml+xml&quot; || frame()-&gt;loader()-&gt;responseMIMEType() == &quot;application/xhtml+xml&quot;));
&gt; +}
&gt; +#endif

No need to null-check frame()-&gt;loader(), since that can never be 0. I don&apos;t understand why &quot;application/xhtml+xml&quot; means isXHTMLMP, and not isXHTML.

&gt; +#if ENABLE(XHTMLMP)
&gt; +        // As for XHTMLMP document, we needn&apos;t update the style selector here 
&gt; +        // to avoid the layout of &lt;noscript&gt; are changed incorrectly.
&gt; +        if (!isXHTMLMPDocument())
&gt; +#endif
&gt;          m_doc-&gt;updateStyleSelector();

Sorry, I don&apos;t understand this comment. The language is garbled. I understand that for &lt;noscript&gt; you don&apos;t need updateStyleSelector, but why isn&apos;t this needed for text that&apos;s not in &lt;noscript&gt;? This needs a better comment at least.

&gt;  #include &quot;HTMLLinkElement.h&quot;
&gt; +#if ENABLE(XHTMLMP)
&gt; +#include &quot;HTMLNames.h&quot;
&gt; +#include &quot;HTMLScriptElement.h&quot;
&gt; +#endif
&gt;  #include &quot;HTMLStyleElement.h&quot;

Conditional includes should go in a separate paragraph after the unconditional includes.


&gt; +#if ENABLE(XHTMLMP) 
&gt; +    //check if the DOCTYPE Declaration of XHTMLMP document exists
&gt; +    if (m_doc-&gt;isXHTMLMPDocument() &amp;&amp; !m_hasDocTypeDeclaration) {
&gt; +        handleError(fatal, &quot;The DOCTYPE declaration is missing, XHTMLMP document expects it.&quot;, lineNumber(), columnNumber());
&gt; +        return;
&gt; +    }
&gt; +#else
&gt;      m_sawFirstElement = true;
&gt; +#endif

This change to where m_sawFirstElement is set seems to be a mistake. You should instead move it down unconditionally to after you need it for your new code.

We put spaces after the &quot;//&quot; in our comments.

The wording of this error isn&apos;t consistent with the wording of other parsing errors. In particular &quot;XHTMLMP document expects it&quot; is awkward.

&gt; +#if ENABLE(XHTMLMP)
&gt; +    if (!m_sawFirstElement &amp;&amp; isXHTMLMPDocument()) {
&gt; +        m_sawFirstElement = true;
&gt; + 
&gt; +        // As per the section 7.1 of OMA-WAP-XHTMLMP-V1_1-20061020-A.pdf, 
&gt; +        // we should make sure that the root element MUST be &apos;html&apos; and 
&gt; +        // ensure the name of the default namespace on the root elment &apos;html&apos; 
&gt; +        // MUST be &apos;http://www.w3.org/1999/xhtml&apos;
&gt; +        if (localName != HTMLNames::htmlTag.localName()) {
&gt; +            handleError(fatal, &quot;The XHTMLMP document&apos;s root element is not a &apos;html&apos; element.&quot;, lineNumber(), columnNumber());
&gt; +            return;
&gt; +        } else if (uri.isNull()) {
&gt; +            m_defaultNamespaceURI = HTMLNames::xhtmlNamespaceURI; 
&gt; +            uri = m_defaultNamespaceURI;
&gt; +        }
&gt; +    } else if (!m_sawFirstElement)
&gt; +        m_sawFirstElement = true;
&gt; +#endif

It&apos;s strange to do if (!m_sawFirstElement) before setting m_sawFirstElement. You should just do that unconditionally, and outside the #if.

We don&apos;t do &quot;else&quot; after &quot;return&quot;.

&gt; @@ -797,6 +836,11 @@ void XMLTokenizer::endElementNs()
&gt;      ASSERT(!m_pendingScript);
&gt;      m_requestingScript = true;
&gt;  
&gt; +#if ENABLE(XHTMLMP)
&gt; +    if (element-&gt;isHTMLElement() &amp;&amp; !static_cast&lt;HTMLScriptElement*&gt;(scriptElement)-&gt;shouldExecuteAsJavaScript())
&gt; +        m_doc-&gt;setShouldProcessNoscriptElement(true);
&gt; +    else {
&gt; +#endif
&gt;      String scriptHref = scriptElement-&gt;sourceAttributeValue();
&gt;      if (!scriptHref.isEmpty()) {
&gt;          // we have a src attribute 
&gt; @@ -813,6 +857,9 @@ void XMLTokenizer::endElementNs()
&gt;      } else
&gt;          m_view-&gt;frame()-&gt;loader()-&gt;executeScript(ScriptSourceCode(scriptElement-&gt;scriptContent(), m_doc-&gt;url(), m_scriptStartLine));
&gt;  
&gt; +#if ENABLE(XHTMLMP)
&gt; +    }
&gt; +#endif

You should put the braces outside the #if, and indent the code.

The check before casting scriptElement to HTMLScriptElement* is a little bit non-obvious. I think that function should be on ScriptElement not on HTMLScriptElement. It can simply return false for non-HTML script elements. That&apos;s more efficient than what you&apos;re doing here and also safer because it doesn&apos;t require a cast.

&gt; +#if ENABLE(XHTMLMP)
&gt; +    m_hasDocTypeDeclaration = false;
&gt; +#endif

This seems like a strange place to set this boolean. Is there a better approach?

&gt; -#if ENABLE(WML)
&gt;          String extId = toString(externalID);
&gt; +        String dtdName = toString(name);
&gt; +#if ENABLE(WML)

This change will result in unused variable warnings for non-WML non-XHTMLMP builds. I think you need to do more #if here to get this right for all the cases.

&gt;          if (isWMLDocument()
&gt;              &amp;&amp; extId != &quot;-//WAPFORUM//DTD WML 1.3//EN&quot;
&gt;              &amp;&amp; extId != &quot;-//WAPFORUM//DTD WML 1.2//EN&quot;
&gt; @@ -962,8 +1013,20 @@ void XMLTokenizer::internalSubset(const 
&gt;              &amp;&amp; extId != &quot;-//WAPFORUM//DTD WML 1.0//EN&quot;)
&gt;              handleError(fatal, &quot;Invalid DTD Public ID&quot;, lineNumber(), columnNumber());
&gt;  #endif
&gt; +#if ENABLE(XHTMLMP)
&gt; +        if ((extId == &quot;-//WAPFORUM//DTD XHTML Mobile 1.0//EN&quot;)
&gt; +            || (extId == &quot;-//WAPFORUM//DTD XHTML Mobile 1.1//EN&quot;)) {
&gt; +            if (dtdName != HTMLNames::htmlTag.localName()) {
&gt; +                handleError(fatal, &quot;Invalid DOCTYPE declaration, XHTMLMP expects &apos;html&apos; as root element.&quot;, lineNumber(), columnNumber());
&gt; +                return;
&gt; +            } else if (m_doc-&gt;isXHTMLMPDocument())
&gt; +                setIsXHTMLMPDocument(true);
&gt;  
&gt; -        m_doc-&gt;addChild(DocumentType::create(m_doc, toString(name), toString(externalID), toString(systemID)));
&gt; +            m_hasDocTypeDeclaration = true;
&gt; +        }
&gt; +#endif

No else after return.

&gt;  #include &quot;HTMLLinkElement.h&quot;
&gt; +#if ENABLE(XHTMLMP)
&gt; +#include &quot;HTMLNames.h&quot;
&gt; +#include &quot;HTMLScriptElement.h&quot;
&gt; +#endif
&gt;  #include &quot;HTMLStyleElement.h&quot;

Separate paragraph.

&gt; +#if ENABLE(XHTMLMP)
&gt; +            if (m_doc-&gt;isXHTMLMPDocument() &amp;&amp; !m_hasDocTypeDeclaration) {
&gt; +                handleError(fatal, &quot;DOCTYPE declaration is missing, XHTMLMP document expects it.&quot;, lineNumber(), columnNumber());
&gt; +                break;
&gt; +            }
&gt; +#endif 

It&apos;s really unfortunate that so much XHTMLMP code has to go in the different XML parsers. You should investigate refactoring so this code can be in shared common code instead of being repeated twice.

&gt;  #include &quot;HTMLNames.h&quot;
&gt; +#if ENABLE(XHTMLMP)
&gt; +#include &quot;HTMLNoScriptElement.h&quot;
&gt; +#endif
&gt;  #include &quot;HTMLOListElement.h&quot;

Separate paragraph.

&gt; +void HTMLNoScriptElement::attach()
&gt; +{
&gt; +    ASSERT(!renderer());
&gt; +    // In order to make the content within noscript node visible,
&gt; +    // we should attach render object to noscript node, then its children 
&gt; +    // can share its render style to create their own render objects
&gt; +    RefPtr&lt;Node&gt; parent = this;
&gt; +    RenderObject* parentRenderer = 0;
&gt; +    while(parent = parent-&gt;parentNode()) {
&gt; +        if(parentRenderer = parent-&gt;renderer())
&gt; +            break;
&gt; +    }
&gt; +    ASSERT(parentRenderer);
&gt; +
&gt; +    RefPtr&lt;RenderStyle&gt; style = RenderStyle::create();
&gt; +    style-&gt;inheritFrom(parentRenderer-&gt;style());
&gt; +
&gt; +    RenderObject* ro = createRenderer(parentRenderer-&gt;renderArena(), style.get());
&gt; +    if (ro) {
&gt; +        setRenderer(ro);
&gt; +        renderer()-&gt;setStyle(style);
&gt; +        parentRenderer-&gt;addChild(renderer(), nextRenderer());
&gt; +    }
&gt; +
&gt; +    ContainerNode::attach();
&gt; +
&gt; +    // If no need to process &lt;noscript&gt;, we hide it
&gt; +    if (!document()-&gt;shouldProcessNoscriptElement()) {
&gt; +        style-&gt;setDisplay(NONE);
&gt; +        setChanged();
&gt; +    }
&gt; +}

This seems like far too much code. There must be a way to inherit this code from the default HTML element behavior.

&gt; +void HTMLNoScriptElement::recalcStyle(StyleChange change)
&gt; +{
&gt; +    if (!document()-&gt;shouldProcessNoscriptElement())
&gt; +        return;
&gt; +
&gt; +    // If &lt;noscript&gt; needs processing, we make it visiable here.
&gt; +    ASSERT(renderer());
&gt; +    RefPtr&lt;RenderStyle&gt; style = renderer()-&gt;style(); 
&gt; +    ASSERT(style);
&gt; +    if (style-&gt;display() == NONE) {
&gt; +        style-&gt;setDisplay(INLINE);
&gt; +
&gt; +        // create renderers for its children
&gt; +        if (hasChildNodes()) {
&gt; +            RenderObject* ro =  0;
&gt; +
&gt; +            for (Node* n = firstChild(); n; n = n-&gt;traverseNextNode(this))
&gt; +                if (!n-&gt;renderer())
&gt; +                    n-&gt;createRendererIfNeeded();
&gt; +        }
&gt; +    }
&gt; +}

This is wrong. If display:none is set, then nothing should be displayed. I think display:none should *not* be set for these elements, and this should not be worked around in recalcStyle.

&gt; +    virtual bool checkDTD(const Node*);
&gt; +    virtual void attach();
&gt; +    virtual void recalcStyle(StyleChange);
&gt; +    bool childShouldCreateRenderer(Node*) const;

This last function should be marked virtual. I&apos;d suggest making all these overrides private, too, because of the &quot;make everything as private as possible&quot; rule.

&gt; +#if PLATFORM(QT) &amp;&amp; ENABLE(XHTMLMP)
&gt; +    // FIXME: Qt is flawed
&gt; +    // This hacking is for fixing one bug of javasrcipt in XHTMLMP document, 
&gt; +    // i.e: if alert() method is contained directly in &lt;script&gt; element, 
&gt; +    // it will cause QtLauncher crash when frame loader execute it.
&gt; +    if (m_isRunningScript &amp;&amp; m_frame-&gt;document() &amp;&amp; m_frame-&gt;document()-&gt;isXHTMLMPDocument())
&gt; +        return;
&gt; +#endif

Misspelling of JavaScript here.

I don&apos;t think this hack is the right way to fix this bug.

&gt; +
&gt;      // http://bugs.webkit.org/show_bug.cgi?id=10854
&gt;      // The frame&apos;s last ref may be removed and it can be deleted by checkCompleted(), 
&gt;      // so we&apos;ll add a protective refcount
&gt; @@ -3605,7 +3614,11 @@ void FrameLoader::addExtraFieldsToReques
&gt;      }
&gt;      
&gt;      if (mainResource)
&gt; +#if ENABLE(XHTMLMP)
&gt; +        request.setHTTPAccept(&quot;application/xml,application/vnd.wap.xhtml+xml,application/xhtml+xml;profile=&apos;http://www.wapforum.org/xhtml&apos;,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&quot;);
&gt; +#else
&gt;          request.setHTTPAccept(&quot;application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&quot;);
&gt; +#endif

This is awkward. I suggest we use a constant at the top of the file and put the #if up there instead of having the if here.

    static const char acceptHeaderField[] = &quot;&quot;;

Otherwise, this looks OK. Maybe an initial patch could leave out some of the questionable parts so this can be mostly checked in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109275</commentid>
    <comment_count>8</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-11 04:29:30 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 27342 [review])
&gt; &gt;  #include &quot;HTMLNames.h&quot;
&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +#include &quot;HTMLNoScriptElement.h&quot;
&gt; &gt; +#endif
&gt; &gt;  #include &quot;HTMLStyleElement.h&quot;
&gt; Conditional includes should go in a separate paragraph after the unconditional
&gt; includes.
Got it, will fix.


&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +    if (settings())
&gt; &gt; +        m_shouldProcessNoScriptElement = !settings()-&gt;isJavaScriptEnabled();
&gt; &gt; +#endif
&gt; Member initialization is preferred over assignment. Also, this seems to leave
&gt; m_shouldProcessNoScriptElement uninitialized if settings() is 0. Also, when can
&gt; settings() be 0? I don&apos;t think this is correct.

I am not sure when the settings() will be 0. but I think we&apos;d better use ASSERT(settings()) to ensure save.
will remove the if segment to make sure m_shouldProcessNoScriptElement is initialized. is that ok?

&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +bool Document::isXHTMLMPDocument() const
&gt; &gt; +{
&gt; &gt; +    return (frame() &amp;&amp; frame()-&gt;loader() &amp;&amp; (frame()-&gt;loader()-&gt;responseMIMEType() == &quot;application/vnd.wap.xhtml+xml&quot; || frame()-&gt;loader()-&gt;responseMIMEType() == &quot;application/xhtml+xml&quot;));
&gt; &gt; +}
&gt; &gt; +#endif
&gt; No need to null-check frame()-&gt;loader(), since that can never be 0. I don&apos;t
&gt; understand why &quot;application/xhtml+xml&quot; means isXHTMLMP, and not isXHTML.

will remove the unnecessary null-check. 
As for the MIMEType of &quot;application/xhtml+xml&quot; support is for following the user agent conformance
requirement stated in the section 7.2 of specificatoin OMA-WAP-XHTMLMP-V1_1-20061020-A.pdf. 
This method is just used to judge what document is XHTMLMP document.


&gt; &gt;  #include &quot;HTMLLinkElement.h&quot;
&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +#include &quot;HTMLNames.h&quot;
&gt; &gt; +#include &quot;HTMLScriptElement.h&quot;
&gt; &gt; +#endif
&gt; &gt;  #include &quot;HTMLStyleElement.h&quot;
&gt; Conditional includes should go in a separate paragraph after the unconditional
&gt; includes.
will fix.


&gt; &gt; +#if ENABLE(XHTMLMP) 
&gt; &gt; +    //check if the DOCTYPE Declaration of XHTMLMP document exists
&gt; &gt; +    if (m_doc-&gt;isXHTMLMPDocument() &amp;&amp; !m_hasDocTypeDeclaration) {
&gt; &gt; +        handleError(fatal, &quot;The DOCTYPE declaration is missing, XHTMLMP document expects it.&quot;, lineNumber(), columnNumber());
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +#else
&gt; &gt;      m_sawFirstElement = true;
&gt; &gt; +#endif
&gt; This change to where m_sawFirstElement is set seems to be a mistake. You should
&gt; instead move it down unconditionally to after you need it for your new code.
&gt; We put spaces after the &quot;//&quot; in our comments.
&gt; The wording of this error isn&apos;t consistent with the wording of other parsing
&gt; errors. In particular &quot;XHTMLMP document expects it&quot; is awkward.

Sorry, I am not sure how to name the error is better. how about this one: &quot;DOCTYPE declaration lack.&quot; ?

&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +    if (!m_sawFirstElement &amp;&amp; isXHTMLMPDocument()) {
&gt; &gt; +        m_sawFirstElement = true;
&gt; &gt; + 
&gt; &gt; +        // As per the section 7.1 of OMA-WAP-XHTMLMP-V1_1-20061020-A.pdf, 
&gt; &gt; +        // we should make sure that the root element MUST be &apos;html&apos; and 
&gt; &gt; +        // ensure the name of the default namespace on the root elment &apos;html&apos; 
&gt; &gt; +        // MUST be &apos;http://www.w3.org/1999/xhtml&apos;
&gt; &gt; +        if (localName != HTMLNames::htmlTag.localName()) {
&gt; &gt; +            handleError(fatal, &quot;The XHTMLMP document&apos;s root element is not a &apos;html&apos; element.&quot;, lineNumber(), columnNumber());
&gt; &gt; +            return;
&gt; &gt; +        } else if (uri.isNull()) {
&gt; &gt; +            m_defaultNamespaceURI = HTMLNames::xhtmlNamespaceURI; 
&gt; &gt; +            uri = m_defaultNamespaceURI;
&gt; &gt; +        }
&gt; &gt; +    } else if (!m_sawFirstElement)
&gt; &gt; +        m_sawFirstElement = true;
&gt; &gt; +#endif
&gt; It&apos;s strange to do if (!m_sawFirstElement) before setting m_sawFirstElement.
&gt; You should just do that unconditionally, and outside the #if.
&gt; We don&apos;t do &quot;else&quot; after &quot;return&quot;.

Adding condition for the initialization of m_sawFirstElement is for avoiding to affect the original logic.
but you are right, it is not necessary indeed here. Thanks. 

&gt; &gt; @@ -797,6 +836,11 @@ void XMLTokenizer::endElementNs()
&gt; &gt;      ASSERT(!m_pendingScript);
&gt; &gt;      m_requestingScript = true;
&gt; &gt;  
&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +    if (element-&gt;isHTMLElement() &amp;&amp; !static_cast&lt;HTMLScriptElement*&gt;(scriptElement)-&gt;shouldExecuteAsJavaScript())
&gt; &gt; +        m_doc-&gt;setShouldProcessNoscriptElement(true);
&gt; &gt; +    else {
&gt; &gt; +#endif
&gt; &gt;      String scriptHref = scriptElement-&gt;sourceAttributeValue();
&gt; &gt;      if (!scriptHref.isEmpty()) {
&gt; &gt;          // we have a src attribute 
&gt; &gt; @@ -813,6 +857,9 @@ void XMLTokenizer::endElementNs()
&gt; &gt;      } else
&gt; &gt;          m_view-&gt;frame()-&gt;loader()-&gt;executeScript(ScriptSourceCode(scriptElement-&gt;scriptContent(), m_doc-&gt;url(), m_scriptStartLine));
&gt; &gt;  
&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +    }
&gt; &gt; +#endif
&gt; You should put the braces outside the #if, and indent the code.
&gt; The check before casting scriptElement to HTMLScriptElement* is a little bit
&gt; non-obvious. I think that function should be on ScriptElement not on
&gt; HTMLScriptElement. It can simply return false for non-HTML script elements.
&gt; That&apos;s more efficient than what you&apos;re doing here and also safer because it
&gt; doesn&apos;t require a cast.

sounds better. but if that we have to change the code of ScriptElement and SVGScriptElement. 
I think it&apos;s not very good for this patch to touch much none-XHTMLMP code in the WebCore. No?


&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +    m_hasDocTypeDeclaration = false;
&gt; &gt; +#endif
&gt; This seems like a strange place to set this boolean. Is there a better
&gt; approach?

maybe XMLTokenizer::endDocument() is a better place.

&gt; &gt; -#if ENABLE(WML)
&gt; &gt;          String extId = toString(externalID);
&gt; &gt; +        String dtdName = toString(name);
&gt; &gt; +#if ENABLE(WML)
&gt; This change will result in unused variable warnings for non-WML non-XHTMLMP
&gt; builds. I think you need to do more #if here to get this right for all the
&gt; cases.

No, for non-WML and non-XHTMLMP build, dtdName will also be used.

&gt; &gt;          if (isWMLDocument()
&gt; &gt;              &amp;&amp; extId != &quot;-//WAPFORUM//DTD WML 1.3//EN&quot;
&gt; &gt;              &amp;&amp; extId != &quot;-//WAPFORUM//DTD WML 1.2//EN&quot;
&gt; &gt; @@ -962,8 +1013,20 @@ void XMLTokenizer::internalSubset(const 
&gt; &gt;              &amp;&amp; extId != &quot;-//WAPFORUM//DTD WML 1.0//EN&quot;)
&gt; &gt;              handleError(fatal, &quot;Invalid DTD Public ID&quot;, lineNumber(), columnNumber());
&gt; &gt;  #endif
&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +        if ((extId == &quot;-//WAPFORUM//DTD XHTML Mobile 1.0//EN&quot;)
&gt; &gt; +            || (extId == &quot;-//WAPFORUM//DTD XHTML Mobile 1.1//EN&quot;)) {
&gt; &gt; +            if (dtdName != HTMLNames::htmlTag.localName()) {
&gt; &gt; +                handleError(fatal, &quot;Invalid DOCTYPE declaration, XHTMLMP expects &apos;html&apos; as root element.&quot;, lineNumber(), columnNumber());
&gt; &gt; +                return;
&gt; &gt; +            } else if (m_doc-&gt;isXHTMLMPDocument())
&gt; &gt; +                setIsXHTMLMPDocument(true);
&gt; &gt;  
&gt; &gt; -        m_doc-&gt;addChild(DocumentType::create(m_doc, toString(name), toString(externalID), toString(systemID)));
&gt; &gt; +            m_hasDocTypeDeclaration = true;
&gt; &gt; +        }
&gt; &gt; +#endif
&gt; No else after return.

will fix.

&gt; &gt; +
&gt; &gt;      // http://bugs.webkit.org/show_bug.cgi?id=10854
&gt; &gt;      // The frame&apos;s last ref may be removed and it can be deleted by checkCompleted(), 
&gt; &gt;      // so we&apos;ll add a protective refcount
&gt; &gt; @@ -3605,7 +3614,11 @@ void FrameLoader::addExtraFieldsToReques
&gt; &gt;      }
&gt; &gt;      
&gt; &gt;      if (mainResource)
&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +        request.setHTTPAccept(&quot;application/xml,application/vnd.wap.xhtml+xml,application/xhtml+xml;profile=&apos;http://www.wapforum.org/xhtml&apos;,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&quot;);
&gt; &gt; +#else
&gt; &gt;          request.setHTTPAccept(&quot;application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&quot;);
&gt; &gt; +#endif
&gt; This is awkward. I suggest we use a constant at the top of the file and put the
&gt; #if up there instead of having the if here.
&gt;     static const char acceptHeaderField[] = &quot;&quot;;

Better idea. I will fix it.

Darin, Thanks a lot for your good comments. 
Regarding the above comments I replied, I will upload the updated patch to fix them later. And for the other comments, I will handle them tommorrow and keep you updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109277</commentid>
    <comment_count>9</comment_count>
      <attachid>27559</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-11 05:36:44 -0800</bug_when>
    <thetext>Created attachment 27559
updated patch fixed some issues Darin pointed out


This patch just fixed part of the issues Darin points out.
including what I replied to promise to fix in comments #8.
As for the left, I will deal with them tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109278</commentid>
    <comment_count>10</comment_count>
      <attachid>27560</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-11 05:43:43 -0800</bug_when>
    <thetext>Created attachment 27560
patch for other change 


This patch contains all the other code change for XHTMLMP except the changes in the above patch 27559 which fixes some issues Darin raised.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109279</commentid>
    <comment_count>11</comment_count>
      <attachid>27561</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-11 05:44:54 -0800</bug_when>
    <thetext>Created attachment 27561
Layout tests for XHTMLMP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109288</commentid>
    <comment_count>12</comment_count>
      <attachid>27559</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-11 06:24:22 -0800</bug_when>
    <thetext>Comment on attachment 27559
updated patch fixed some issues Darin pointed out

&gt; +#if ENABLE(XHTMLMP)
&gt; +    ASSERT(settings());
&gt; +    m_shouldProcessNoScriptElement = !settings()-&gt;isJavaScriptEnabled();
&gt; +#endif

I don&apos;t think this assertion is helpful. We don&apos;t want to assert ever pointer just before we dereference it.

But I also don&apos;t know if settings() is guaranteed to be non-zero here or not. Is it guaranteed?

&gt; +    return (frame()-&gt;loader()-&gt;responseMIMEType() == &quot;application/vnd.wap.xhtml+xml&quot; || frame()-&gt;loader()-&gt;responseMIMEType() == &quot;application/xhtml+xml&quot;);

Please leave out the parentheses.

&gt; +    }
&gt; +#endif
&gt; +   m_sawFirstElement = true;

Indentation is wrong here.

&gt; +#if ENABLE(XHTMLMP)
&gt; +static const char* const defaultHttpAcceptHeader = &quot;application/xml,application/vnd.wap.xhtml+xml,application/xhtml+xml;profile=&apos;http://www.wapforum.org/xhtml&apos;,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&quot;;
&gt; +#else
&gt; +static const char* const defaultHttpAcceptHeader = &quot;application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&quot;;
&gt; +#endif

This is good. static const char defaultHTTPAcceptHeader[] would be even better, I think. WebKit style capitalizes the acronym &quot;HTTP&quot;, and doesn&apos;t use &quot;Http&quot;. Or you can leave it out of this name altogether. I don&apos;t think it&apos;s that confusing to call this just an &quot;accept header&quot; locally in this file.

&gt; +#if PLATFORM(QT) &amp;&amp; ENABLE(XHTMLMP)
&gt; +    // FIXME: Qt is flawed
&gt; +    // This hacking is for fixing one bug of javasrcipt in XHTMLMP document, 
&gt; +    // i.e: if alert() method is contained directly in &lt;script&gt; element, 
&gt; +    // it will cause QtLauncher crash when frame loader execute it.
&gt; +    if (m_isRunningScript &amp;&amp; m_frame-&gt;document() &amp;&amp; m_frame-&gt;document()-&gt;isXHTMLMPDocument())
&gt; +        return;
&gt; +#endif

We need to figure out the real problem and fix this in a better way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109290</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-11 06:31:15 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; &gt; +    if (settings())
&gt; &gt; &gt; +        m_shouldProcessNoScriptElement = !settings()-&gt;isJavaScriptEnabled();
&gt; &gt; &gt; +#endif
&gt; &gt; Member initialization is preferred over assignment. Also, this seems to leave
&gt; &gt; m_shouldProcessNoScriptElement uninitialized if settings() is 0. Also, when can
&gt; &gt; settings() be 0? I don&apos;t think this is correct.
&gt; 
&gt; I am not sure when the settings() will be 0. but I think we&apos;d better use
&gt; ASSERT(settings()) to ensure save.
&gt; will remove the if segment to make sure m_shouldProcessNoScriptElement is
&gt; initialized. is that ok?

As I said in my review, I don&apos;t think the assert is valuable. If we need a null check, we can include one, but if not we don&apos;t want to assert the pointer. It doesn&apos;t really add much.

When I said &quot;member initialization&quot;, I meant this syntax:

    , m_shouldProcessNoScriptElement(xxx)

As opposed to assignment.

&gt; As for the MIMEType of &quot;application/xhtml+xml&quot; support is for following the
&gt; user agent conformance
&gt; requirement stated in the section 7.2 of specificatoin
&gt; OMA-WAP-XHTMLMP-V1_1-20061020-A.pdf. 
&gt; This method is just used to judge what document is XHTMLMP document.

I don&apos;t get it. How can the same browser support both XHTML and XHTMLMP then? I think this is highly suspect.

&gt; Sorry, I am not sure how to name the error is better. how about this one:
&gt; &quot;DOCTYPE declaration lack.&quot; ?

Maybe someone else, perhaps Hyatt, can help you with this naming.

&gt; &gt; The check before casting scriptElement to HTMLScriptElement* is a little bit
&gt; &gt; non-obvious. I think that function should be on ScriptElement not on
&gt; &gt; HTMLScriptElement. It can simply return false for non-HTML script elements.
&gt; &gt; That&apos;s more efficient than what you&apos;re doing here and also safer because it
&gt; &gt; doesn&apos;t require a cast.
&gt; 
&gt; sounds better. but if that we have to change the code of ScriptElement and
&gt; SVGScriptElement. 

Yes.

&gt; I think it&apos;s not very good for this patch to touch much none-XHTMLMP code in
&gt; the WebCore. No?

I understand your desire to not touch other code, but that&apos;s not a good strategy long term. We shouldn&apos;t add things without considering the overall design. The change I suggested has very little, or no, cost.

I think it&apos;s absolutely fine to touch the non-XHTMLMP code if it makes things cleaner. Ideally, though, we should do that in a separate small patch first to prepare, and not do it as part of a large XHTMLMP patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109292</commentid>
    <comment_count>14</comment_count>
      <attachid>27560</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-11 06:33:13 -0800</bug_when>
    <thetext>Comment on attachment 27560
patch for other change 

&gt; +class HTMLNoScriptElement : public HTMLElement {
&gt; +public:
&gt; +    HTMLNoScriptElement(const QualifiedName&amp;, Document*);
&gt; +    ~HTMLNoScriptElement();
&gt; +
&gt; +    virtual bool checkDTD(const Node*);
&gt; +    virtual void attach();
&gt; +    virtual void recalcStyle(StyleChange);
&gt; +    bool childShouldCreateRenderer(Node*) const;
&gt; +};

~HTMLNoScriptElement and childShouldCreateRenderer should both be marked virtual. All these functions should be private. I said most of this last time. Please either do it or explain why you&apos;re not doing it, next time.

&gt; +void HTMLNoScriptElement::attach()

What happened to my comment about sharing more code here? I don&apos;t understand why you need these large functions for HTMLNoScriptElement::attach and recalcStyle, since the behavior is the same as generic HTML elements, such as &lt;span&gt;, when we&apos;re in the appropriate script mode. There should be more shared code and less pasted here.

&gt; +    while(parent = parent-&gt;parentNode()) {
&gt; +        if(parentRenderer = parent-&gt;renderer())
&gt; +            break;
&gt; +    }

Formatting mistakes here. Need space after while and if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109293</commentid>
    <comment_count>15</comment_count>
      <attachid>27561</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-11 06:33:51 -0800</bug_when>
    <thetext>Comment on attachment 27561
Layout tests for XHTMLMP

Need to add a Skipped list to make sure we skip this for platforms that don&apos;t implement XHTMLMP (all current platforms).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109414</commentid>
    <comment_count>16</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-11 19:53:47 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 27559 [review])
&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +    ASSERT(settings());
&gt; &gt; +    m_shouldProcessNoScriptElement = !settings()-&gt;isJavaScriptEnabled();
&gt; &gt; +#endif
&gt; I don&apos;t think this assertion is helpful. We don&apos;t want to assert ever pointer
&gt; just before we dereference it.
&gt; But I also don&apos;t know if settings() is guaranteed to be non-zero here or not.
&gt; Is it guaranteed?

Seems no guarantee for it, so that we&apos;d better add null-check for it and initialize it by assignment.


&gt; &gt; +#if PLATFORM(QT) &amp;&amp; ENABLE(XHTMLMP)
&gt; &gt; +    // FIXME: Qt is flawed
&gt; &gt; +    // This hacking is for fixing one bug of javasrcipt in XHTMLMP document, 
&gt; &gt; +    // i.e: if alert() method is contained directly in &lt;script&gt; element, 
&gt; &gt; +    // it will cause QtLauncher crash when frame loader execute it.
&gt; &gt; +    if (m_isRunningScript &amp;&amp; m_frame-&gt;document() &amp;&amp; m_frame-&gt;document()-&gt;isXHTMLMPDocument())
&gt; &gt; +        return;
&gt; &gt; +#endif
&gt; We need to figure out the real problem and fix this in a better way.

I will investigate it further.

All of the other issues in comments#12, I will fix them in the upcoming patch.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109417</commentid>
    <comment_count>17</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-11 20:13:20 -0800</bug_when>
    <thetext>(In reply to comment #13)

&gt; I don&apos;t get it. How can the same browser support both XHTML and XHTMLMP then? I
&gt; think this is highly suspect.

In fact, Document::isXHTMLMPDocument() is used to recognize the XHTMLMP doucment by MIMEtype.
XMLTokenizer::isXHTMLMPDocument() will be used to distinguish XHTMLMP and XHTML by m_isXHTMLMPDocument,
which will be reset according to the public ID of DOCTYPE declaration, so that browser can support XHTML
and XHTMLMP at the same time.

&gt; &gt; Sorry, I am not sure how to name the error is better. how about this one:
&gt; &gt; &quot;DOCTYPE declaration lack.&quot; ?
&gt; Maybe someone else, perhaps Hyatt, can help you with this naming.
This is a problem. seems I have to keep this one until got a better one. I will ask Hyatt for help.

&gt; &gt; &gt; The check before casting scriptElement to HTMLScriptElement* is a little bit
&gt; &gt; &gt; non-obvious. I think that function should be on ScriptElement not on
&gt; &gt; &gt; HTMLScriptElement. It can simply return false for non-HTML script elements.
&gt; &gt; &gt; That&apos;s more efficient than what you&apos;re doing here and also safer because it
&gt; &gt; &gt; doesn&apos;t require a cast.
&gt; &gt; 
&gt; &gt; sounds better. but if that we have to change the code of ScriptElement and
&gt; &gt; SVGScriptElement. 
&gt; Yes.
&gt; &gt; I think it&apos;s not very good for this patch to touch much none-XHTMLMP code in
&gt; &gt; the WebCore. No?
&gt; I understand your desire to not touch other code, but that&apos;s not a good
&gt; strategy long term. We shouldn&apos;t add things without considering the overall
&gt; design. The change I suggested has very little, or no, cost.
&gt; I think it&apos;s absolutely fine to touch the non-XHTMLMP code if it makes things
&gt; cleaner. Ideally, though, we should do that in a separate small patch first to
&gt; prepare, and not do it as part of a large XHTMLMP patch.

You are right, I will do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109454</commentid>
    <comment_count>18</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-12 04:26:32 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 27560 [review])
&gt; &gt; +class HTMLNoScriptElement : public HTMLElement {
&gt; &gt; +public:
&gt; &gt; +    HTMLNoScriptElement(const QualifiedName&amp;, Document*);
&gt; &gt; +    ~HTMLNoScriptElement();
&gt; &gt; +
&gt; &gt; +    virtual bool checkDTD(const Node*);
&gt; &gt; +    virtual void attach();
&gt; &gt; +    virtual void recalcStyle(StyleChange);
&gt; &gt; +    bool childShouldCreateRenderer(Node*) const;
&gt; &gt; +};
&gt; ~HTMLNoScriptElement and childShouldCreateRenderer should both be marked
&gt; virtual. All these functions should be private. I said most of this last time.
&gt; Please either do it or explain why you&apos;re not doing it, next time.

Sorry to bother you, I just fixed part of the issues you figured out, and splited up the old large patch yesterday.  I have planned to fix the left part today, so that you find nothing change in the patch 27560. 
the upcoming patch will contains the fix for this issue. :)


&gt; &gt; +void HTMLNoScriptElement::attach()
&gt; What happened to my comment about sharing more code here? I don&apos;t understand
&gt; why you need these large functions for HTMLNoScriptElement::attach and
&gt; recalcStyle, since the behavior is the same as generic HTML elements, such as
&gt; &lt;span&gt;, when we&apos;re in the appropriate script mode. There should be more shared
&gt; code and less pasted here.

According to the spec, the &lt;noscript&gt; should not be executed until encounterred a failure to execute &lt;script&gt;. While parsing the XHTMLMP document, parser doesn&apos;t know if need to process a &lt;noscript&gt; unless it founds the type of some &lt;script&gt; element is invalid. The problem 
is we will lose the &lt;noscript&gt; if we do nothing when parser encounters one &lt;noscript&gt;, so I think we should create a renderer for &lt;noscript&gt; after it is added to DOM tree. But the default attach() can&apos;t do this because lack of some condtions. So I did this by myself in HTMLNoScriptElement::attach().  And in order to avoid unnecessary creation of the renderer of children of &lt;noscript&gt; if the &lt;noscript&gt; is not expected to be handled, I set the display of noscript style to NONE. If we found &lt;noscript&gt; need processing later on, we should restore the display value of this &lt;noscript&gt; and creating renderers for its children at this time. I implemented this in HTMLNoscriptElement::recalcStyle().

Of course, your comments are good. the attach() function shoud share the HTML code as much as possible. Now I implement it by making Node:styleForRenderer() virtual function, and override it in HTMLNoScriptElement. I have tried my best to avoid to touch the original code of WebKit much too before, but obviously, I&apos;d better do this sometimes. :)


&gt; +void HTMLNoScriptElement::recalcStyle(StyleChange change)
&gt; +{
&gt; +    if (!document()-&gt;shouldProcessNoscriptElement())
&gt; +        return;
&gt; +
&gt; +    // If &lt;noscript&gt; needs processing, we make it visiable here.
&gt; +    ASSERT(renderer());
&gt; +    RefPtr&lt;RenderStyle&gt; style = renderer()-&gt;style(); 
&gt; +    ASSERT(style);
&gt; +    if (style-&gt;display() == NONE) {
&gt; +        style-&gt;setDisplay(INLINE);
&gt; +
&gt; +        // create renderers for its children
&gt; +        if (hasChildNodes()) {
&gt; +            RenderObject* ro =  0;
&gt; +
&gt; +            for (Node* n = firstChild(); n; n = n-&gt;traverseNextNode(this))
&gt; +                if (!n-&gt;renderer())
&gt; +                    n-&gt;createRendererIfNeeded();
&gt; +        }
&gt; +    }
&gt; +}

&gt; &gt;  This is wrong. If display:none is set, then nothing should be displayed. I
&gt; &gt;  think display:none should *not* be set for these elements, and this should not
&gt; &gt; be worked around in recalcStyle.

The content of &lt;noscript&gt; has an opportunity to be renderered by this way according to my design. did you have any other good suggestions for this?

&gt; +    virtual bool checkDTD(const Node*);
&gt; +    virtual void attach();
&gt; +    virtual void recalcStyle(StyleChange);
&gt; +    bool childShouldCreateRenderer(Node*) const;

&gt; &gt; This last function should be marked virtual. I&apos;d suggest making all these
&gt;&gt;  overrides private, too, because of the &quot;make everything as private as possible&quot;
&gt; &gt; rule.

will fix it.

&gt; +#if PLATFORM(QT) &amp;&amp; ENABLE(XHTMLMP)
&gt; +    // FIXME: Qt is flawed
&gt; +    // This hacking is for fixing one bug of javasrcipt in XHTMLMP document, 
&gt; +    // i.e: if alert() method is contained directly in &lt;script&gt; element, 
&gt; +    // it will cause QtLauncher crash when frame loader execute it.
&gt; +    if (m_isRunningScript &amp;&amp; m_frame-&gt;document() &amp;&amp; m_frame-&gt;document()-&gt;isXHTMLMPDocument())
&gt; +        return;
&gt; +#endif


&gt; &gt; I don&apos;t think this hack is the right way to fix this bug.

In fact, this bug is not XHTMLMP specific. It&apos;s common for XHTML document. At least it is for QT platform. So I think we can leave this issue for this XHTMLMP patch. we can file a new bug to track it. ok?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109455</commentid>
    <comment_count>19</comment_count>
      <attachid>27593</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-12 04:33:04 -0800</bug_when>
    <thetext>Created attachment 27593
updated patch about layout tests for XHTMLMP


The tests are just runned on QT platform so far, so that I have added Skip list for none-QT platform to this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109456</commentid>
    <comment_count>20</comment_count>
      <attachid>27594</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-12 04:36:39 -0800</bug_when>
    <thetext>Created attachment 27594
patch about configure files


This patch contains the changes of configure files for diffrent platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109458</commentid>
    <comment_count>21</comment_count>
      <attachid>27596</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-12 04:40:53 -0800</bug_when>
    <thetext>Created attachment 27596
patch about bug fix relevant to Darin&apos;s comments


This patch covers the fix of issues mentioned in my comments #16, #17 and #18</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109460</commentid>
    <comment_count>22</comment_count>
      <attachid>27597</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-12 04:46:02 -0800</bug_when>
    <thetext>Created attachment 27597
patch about scriptelment change


According to the comments of Darin, I add shouldExecuteAsJavaScript() to class ScriptElement.
The change is not XHTMLMP specific. but it can make the implemenation of XHTMLMP better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109461</commentid>
    <comment_count>23</comment_count>
      <attachid>27598</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-02-12 04:48:28 -0800</bug_when>
    <thetext>Created attachment 27598
patch contains the other changes has reviewed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121010</commentid>
    <comment_count>24</comment_count>
      <attachid>30268</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-13 04:26:18 -0700</bug_when>
    <thetext>Created attachment 30268
Updated layout tests for XHTMLMP

To proceed with this bug about XHTLMP support for WebKit

This patch is created for layout tests of XHTMLMP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121011</commentid>
    <comment_count>25</comment_count>
      <attachid>30269</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-13 04:30:09 -0700</bug_when>
    <thetext>Created attachment 30269
Updated patch for configure file changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121012</commentid>
    <comment_count>26</comment_count>
      <attachid>30270</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-13 04:32:25 -0700</bug_when>
    <thetext>Created attachment 30270
Updated patch for ScriptElement change

Change ScriptElement to support XHTMLMP in a better way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121016</commentid>
    <comment_count>27</comment_count>
      <attachid>30271</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-13 04:35:30 -0700</bug_when>
    <thetext>Created attachment 30271
Updated patch for code change to support XHTMLMP

the primary code change to support XHTMLMP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121643</commentid>
    <comment_count>28</comment_count>
      <attachid>30271</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-16 08:20:39 -0700</bug_when>
    <thetext>Comment on attachment 30271
Updated patch for code change to support XHTMLMP


&gt; Index: WebCore/dom/Node.h
&gt; ===================================================================
&gt; --- WebCore/dom/Node.h	(revision 43615)
&gt; +++ WebCore/dom/Node.h	(working copy)
&gt; @@ -425,9 +425,9 @@ public:
&gt;  
&gt;      virtual void willRemove();
&gt;      void createRendererIfNeeded();
&gt; -    PassRefPtr&lt;RenderStyle&gt; styleForRenderer();
&gt; +    virtual PassRefPtr&lt;RenderStyle&gt; styleForRenderer();

   Can we avoid this change somehow?  Or at least can we make it only virtual if XHTMLMP is enabled?  Ideally avoid though.


&gt;  void XMLTokenizer::internalSubset(const xmlChar* name, const xmlChar* externalID, const xmlChar* systemID)
&gt; @@ -959,8 +1007,9 @@ void XMLTokenizer::internalSubset(const 
&gt;      }
&gt;      
&gt;      if (m_doc) {
&gt; -#if ENABLE(WML)
&gt;          String extId = toString(externalID);
&gt; +        String dtdName = toString(name);
&gt; +#if ENABLE(WML)


   I think we should not unguard those two lines.  If they need to be enabled for XHTMLMP then we should guard them for both XHTMLMP and WML, not open them for all platforms.


&gt; +#if ENABLE(XHTMLMP)
&gt; +    else if ((publicId == QLatin1String(&quot;-//WAPFORUM//DTD XHTML Mobile 1.1//EN&quot;))
&gt; +             || (publicId == QLatin1String(&quot;-//WAPFORUM//DTD XHTML Mobile 1.0//EN&quot;))) {

   Too many parentheses here.



I think the rest is fine, though in Document I would probably change the &quot;if (settings()) ...&quot; to:
m_shouldProcessNoScriptElement = settings() &amp;&amp; !settings()-&gt;isJavaScriptEnabled();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121644</commentid>
    <comment_count>29</comment_count>
      <attachid>30270</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-16 08:22:13 -0700</bug_when>
    <thetext>Comment on attachment 30270
Updated patch for ScriptElement change

Looks okay to me pending corrections in the main patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121645</commentid>
    <comment_count>30</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-16 08:31:23 -0700</bug_when>
    <thetext>One more comment: Please add appropriate copyright messages to the files where new code for XHTMLMP was added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121739</commentid>
    <comment_count>31</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-17 22:42:23 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 30271 [review])
&gt; &gt; Index: WebCore/dom/Node.h
&gt; &gt; ===================================================================
&gt; &gt; --- WebCore/dom/Node.h	(revision 43615)
&gt; &gt; +++ WebCore/dom/Node.h	(working copy)
&gt; &gt; @@ -425,9 +425,9 @@ public:
&gt; &gt;  
&gt; &gt;      virtual void willRemove();
&gt; &gt;      void createRendererIfNeeded();
&gt; &gt; -    PassRefPtr&lt;RenderStyle&gt; styleForRenderer();
&gt; &gt; +    virtual PassRefPtr&lt;RenderStyle&gt; styleForRenderer();
&gt;    Can we avoid this change somehow?  Or at least can we make it only virtual
&gt; if XHTMLMP is enabled?  Ideally avoid though.

Yichao: Yeah, we should add ENABLE(XHTMLMP) for it at least.
Making styleForRenderer() virtual can let us to have better chance to specify the proper style for the renderer of HTMLNoScriptElement when needed. If we won&apos;t make is virtual, we have to do some hacks in Node::styleForRenderer() to specify the proper style for HTMLNoScriptElement node. This will also cause performance impact -- the unecessary check will be done for every element node which is not HTMLNoScriptElement.  

&gt; &gt;  void XMLTokenizer::internalSubset(const xmlChar* name, const xmlChar* externalID, const xmlChar* systemID)
&gt; &gt; @@ -959,8 +1007,9 @@ void XMLTokenizer::internalSubset(const 
&gt; &gt;      }
&gt; &gt;      
&gt; &gt;      if (m_doc) {
&gt; &gt; -#if ENABLE(WML)
&gt; &gt;          String extId = toString(externalID);
&gt; &gt; +        String dtdName = toString(name);
&gt; &gt; +#if ENABLE(WML)
&gt;    I think we should not unguard those two lines.  If they need to be enabled
&gt; for XHTMLMP then we should guard them for both XHTMLMP and WML, not open them
&gt; for all platforms.

Yichao: When both of XML and XHTMLMP is disabled, the two lines will make us to pay the cost of two additional String object. Ok, I will guard them with proper Macro.


&gt; &gt; +#if ENABLE(XHTMLMP)
&gt; &gt; +    else if ((publicId == QLatin1String(&quot;-//WAPFORUM//DTD XHTML Mobile 1.1//EN&quot;))
&gt; &gt; +             || (publicId == QLatin1String(&quot;-//WAPFORUM//DTD XHTML Mobile 1.0//EN&quot;))) {
&gt;    Too many parentheses here.

Yichao: Will fix it.

&gt; I think the rest is fine, though in Document I would probably change the &quot;if
&gt; (settings()) ...&quot; to:
&gt; m_shouldProcessNoScriptElement = settings() &amp;&amp;
&gt; !settings()-&gt;isJavaScriptEnabled();

Yichao: That&apos;s better! will fix it.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121747</commentid>
    <comment_count>32</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-17 23:30:21 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; One more comment: Please add appropriate copyright messages to the files where
&gt; new code for XHTMLMP was added.

Ok, I will add them in the upcoming patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121757</commentid>
    <comment_count>33</comment_count>
      <attachid>30438</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-17 23:54:56 -0700</bug_when>
    <thetext>Created attachment 30438
Latest Updated patch for code change

This patch contains the fixes for those issues pointed out by George.
In addtion, it also includes changing some copyright information for updated codes, changing xml DOCTYPE declaration lose error message, etc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121840</commentid>
    <comment_count>34</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-05-18 17:39:34 -0700</bug_when>
    <thetext>Both the Changelog and the commit message need to reference this bug, and did not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121874</commentid>
    <comment_count>35</comment_count>
      <attachid>30461</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-19 00:17:59 -0700</bug_when>
    <thetext>Created attachment 30461
Latest Updated patch for configure file changes

Add bug# in the ChangeLog for tracing convenience</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121875</commentid>
    <comment_count>36</comment_count>
      <attachid>30462</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-19 00:19:53 -0700</bug_when>
    <thetext>Created attachment 30462
Latest updated patch for ScriptElement change

Add bug# in the ChangeLog for tracing convenience</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121876</commentid>
    <comment_count>37</comment_count>
      <attachid>30463</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-19 00:22:31 -0700</bug_when>
    <thetext>Created attachment 30463
Latest updated patch for code changes

Add bug# in the ChangeLog for tracing convenience</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122004</commentid>
    <comment_count>38</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-19 19:19:16 -0700</bug_when>
    <thetext>This is all checked in but I will leave it open until we address the virtual function changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122008</commentid>
    <comment_count>39</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2009-05-19 19:23:25 -0700</bug_when>
    <thetext>*** Bug 25870 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122010</commentid>
    <comment_count>40</comment_count>
      <attachid>30490</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-19 19:27:35 -0700</bug_when>
    <thetext>Created attachment 30490
Latest Updated patch for code changes


This patch fixes the virtual method issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122023</commentid>
    <comment_count>41</comment_count>
      <attachid>30490</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-19 20:31:20 -0700</bug_when>
    <thetext>Comment on attachment 30490
Latest Updated patch for code changes

Sorry, the previous diff is already applied.  you&apos;ll need to make something that builds on it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122024</commentid>
    <comment_count>42</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-19 20:34:08 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 30490 [review])
&gt; Sorry, the previous diff is already applied.  you&apos;ll need to make something
&gt; that builds on it now.

Yes, I have found it and building the latest version of WebKit, I will update the patch later</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122041</commentid>
    <comment_count>43</comment_count>
      <attachid>30492</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-05-19 21:11:42 -0700</bug_when>
    <thetext>Created attachment 30492
Patch for fixing the virtual function issue

This patch changes the implemenation of HTMLNoScriptElement to avoid using virtual function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122052</commentid>
    <comment_count>44</comment_count>
      <attachid>30492</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-19 21:40:52 -0700</bug_when>
    <thetext>Comment on attachment 30492
Patch for fixing the virtual function issue

By popular request, let&apos;s de-virtualize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122055</commentid>
    <comment_count>45</comment_count>
      <attachid>30492</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-05-19 21:46:59 -0700</bug_when>
    <thetext>Comment on attachment 30492
Patch for fixing the virtual function issue

&gt; Index: WebCore/dom/Node.cpp
&gt; ===================================================================

&gt; +#if ENABLE(XHTMLMP)
&gt; +        if (localName() == HTMLNames::noscriptTag.localName())
&gt; +            return document()-&gt;styleSelector()-&gt;styleForElement(static_cast&lt;HTMLNoScriptElement*&gt;(this), 0, false);
&gt; +#endif
&gt;          return document()-&gt;styleSelector()-&gt;styleForElement(static_cast&lt;Element*&gt;(this));

This would be cleaner as:

bool allowSharing = true;
#if ENABLE(XHTMLMP)
  if (localName() == HTMLNames::noscriptTag.localName())
    allowSharing = false; // comment explaining why noscript is so special
#endif
  return document()-&gt;styleSelector()-&gt;styleForElement(static_cast&lt;Element*&gt;(this), 0, allowSharing);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122164</commentid>
    <comment_count>46</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-05-20 08:11:10 -0700</bug_when>
    <thetext>Added in Simon&apos;s changes and committed in 43913.  I think this closes off this bug report, and any other issues should be filed separately if and when they come up.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26890</attachid>
            <date>2009-01-21 01:42:20 -0800</date>
            <delta_ts>2009-02-03 23:01:31 -0800</delta_ts>
            <desc>Add XHTMLMP support initial patch</desc>
            <filename>addxhtmlmpsupport.patch</filename>
            <type>text/plain</type>
            <size>39942</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDA4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzQgQEAKKzIwMDktMDEtMjEgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgWEhUTUxNUCBzdXBwb3J0CisgICAgICAgIEl0IGhhcyBqdXN0IGJlZW4gdmVy
aWZpZWQgb24gUXQgUGxhdGZvcm0gc28gZmFyLgorCisgICAgICAgIFRlc3RzOiBmYXN0L3hodG1s
bXAvY2hlY2stZG9jdHlwZS1kZWNsYXJhdGlvbi54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94
aHRtbG1wL2NoZWNrLXJvb3RlbGVtZW50LnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1s
bXAvbm9zY3JpcHQtaW4tbXVsdGlzY3JpcHRzLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3ho
dG1sbXAvbm9zY3JpcHQtbmVzdGVkLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1sbXAv
bm9zY3JpcHQueGh0bWwKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUuc2NvbnM6CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAg
ICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01J
bXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzWEhUTUxEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U2hvdWxkUHJvY2Vzc05vc2Ny
aXB0RWxlbWVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAg
ICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2Vu
aXplcjo6ZW5kKToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpYTUxUb2tlbml6ZXI6OnNldElzWEhUTUxNUERvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTFRva2VuaXplcjo6aXNYSFRNTE1QRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9YTUxU
b2tlbml6ZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6WE1M
VG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6c3RhcnRFbGVtZW50
TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjplbmRFbGVtZW50TnMpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjplbmREb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxUb2tlbml6ZXI6OmludGVybmFsU3Vic2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
dGVybmFsU3Vic2V0SGFuZGxlcik6CisgICAgICAgICogZG9tL1hNTFRva2VuaXplclF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTFRva2VuaXplcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9r
ZW5pemVyOjpwYXJzZVN0YXJ0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6
ZXI6OnBhcnNlRW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIGh0
bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnJlbmRl
cmVySXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5vc2NyaXB0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlRnVuY3Rpb25NYXApOgorICAgICAgICAqIGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5v
U2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50Ojp+
SFRNTE5vU2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVt
ZW50OjpjaGVja0RURCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50Ojph
dHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6cmVjYWxjU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hpbGRTaG91bGRD
cmVhdGVSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50Lmg6IEFk
ZGVkLgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGFyc2VyOjpnZXROb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6c2NyaXB0SGFuZGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjplbmRJ
Zk5vdExvYWRpbmdNYWluUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OmFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFn
ZU1pbWVUeXBlcyk6CisKIDIwMDktMDEtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0J
KHJldmlzaW9uIDQwMDc3KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtOTM2LDYgKzkzNiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9odG1s
L0hUTUxRdW90ZUVsZW1lbnQuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNw
cCBcCiAJV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmggXAorCVdlYkNvcmUvaHRtbC9I
VE1MTm9TY3JpcHRFbGVtZW50LmNwcCBcCisJV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1l
bnQuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcCBcCiAJV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmggXAogCVdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50
LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHJldmlzaW9uIDQwMDc3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29y
a2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBAQCBDT05GSUcoUVRESVJfYnVpbGQpIHsKICFjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfWFBBVEg9Lik6IERFRklORVMgKz0gRU5BQkxFX1hQQVRIPTEK
ICMhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hCTD0uKTogREVGSU5FUyArPSBFTkFCTEVfWEJM
PTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPS4pOiBERUZJTkVTICs9IEVOQUJMRV9X
TUw9MAorIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YSFRNTE1QPS4pOiBERUZJTkVTICs9IEVO
QUJMRV9YSFRNTE1QPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPS4pOiBERUZJTkVT
ICs9IEVOQUJMRV9TVkc9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkdfRk9OVFM9Lik6
IERFRklORVMgKz0gRU5BQkxFX1NWR19GT05UUz0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X1NWR19GSUxURVJTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9TVkdfRklMVEVSUz0xCkBAIC03NDYs
NiArNzQ3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9IVE1MUHJlRWxlbWVudC5jcHAgXAog
ICAgIGh0bWwvSFRNTFF1b3RlRWxlbWVudC5jcHAgXAogICAgIGh0bWwvSFRNTFNjcmlwdEVsZW1l
bnQuY3BwIFwKKyAgICBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcCBcCiAg
ICAgaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgXApAQCAtMTQ1NSw2ICsxNDU3LDEw
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XTUw9MSkgewogICAgIGFkZEV4dHJhQ29tcGls
ZXJXaXRoSGVhZGVyKHdtbG5hbWVzX2IpCiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9Y
SFRNTE1QPTEpIHsKKyAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfWEhU
TUxNUD0xCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgIEZFQVRV
UkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9TVkc9MQogCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUuc2NvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnNjb25zCShyZXZpc2lv
biA0MDA3NykKKysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAtMjcx
LDYgKzI3MSw3IEBAIHNvdXJjZXNbJ2h0bWwnXSA9IFsKICAgICAnaHRtbC9IVE1MUHJlRWxlbWVu
dC5jcHAnLAogICAgICdodG1sL0hUTUxRdW90ZUVsZW1lbnQuY3BwJywKICAgICAnaHRtbC9IVE1M
U2NyaXB0RWxlbWVudC5jcHAnLAorICAgICdodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwJywK
ICAgICAnaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAnLAogICAgICdodG1sL0hUTUxTb3VyY2VF
bGVtZW50LmNwcCcsCiAgICAgJ2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAnLApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291
cmNlcy5ia2wJKHJldmlzaW9uIDQwMDc3KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJ
KHdvcmtpbmcgY29weSkKQEAgLTU4NSw2ICs1ODUsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhl
IGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIGh0bWwvSFRNTFByZUVsZW1lbnQuY3BwCiAgICAg
ICAgIGh0bWwvSFRNTFF1b3RlRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MU2NyaXB0RWxl
bWVudC5jcHAKKyAgICAgICAgaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcAogICAgICAgICBo
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxTdHlsZUVsZW1lbnQu
Y3BwCiAgICAgICAgIGh0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQwMDc3KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM2Mzgs
NiArMTM2MzgsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5caHRtbFxIVE1MTm9TY3JpcHRFbGVtZW50LmNwcCINCisJCQkJPg0KKwkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KKwkJCQkJ
Pg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCVdo
b2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxIVE1MTm9TY3JpcHRFbGVtZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTZWxlY3RFbGVtZW50LmNwcCINCiAJ
CQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkluZGV4OiBXZWJDb3JlL2RvbS9ET01JbXBs
ZW1lbnRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRp
b24uY3BwCShyZXZpc2lvbiA0MDA3NykKKysrIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDE0ICszMTMsMjIgQEAgUGFzc1JlZlB0cjxIVE1M
RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aQogUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVt
ZW50YXRpb246OmNyZWF0ZURvY3VtZW50KGNvbnN0IFN0cmluZyYgdHlwZSwgRnJhbWUqIGZyYW1l
LCBib29sIGluVmlld1NvdXJjZU1vZGUpCiB7CiAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUpIHsK
LSAgICAgICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24v
eGh0bWwreG1sIiB8fCB0eXBlID09ICJpbWFnZS9zdmcreG1sIiB8fCBpc1RleHRNSU1FVHlwZSh0
eXBlKSB8fCBpc1hNTE1JTUVUeXBlKHR5cGUpKQorICAgICAgICBpZiAodHlwZSA9PSAidGV4dC9o
dG1sIiB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIHx8IHR5cGUgPT0gImltYWdl
L3N2Zyt4bWwiIHx8IGlzVGV4dE1JTUVUeXBlKHR5cGUpIHx8IGlzWE1MTUlNRVR5cGUodHlwZSkK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIHx8IHR5cGUgPT0gImFwcGxpY2F0aW9u
L3ZuZC53YXAueGh0bWwreG1sIgorI2VuZGlmCisgICAgICAgICAgICkKICAgICAgICAgICAgIHJl
dHVybiBIVE1MVmlld1NvdXJjZURvY3VtZW50OjpjcmVhdGUoZnJhbWUsIHR5cGUpOwogICAgIH0K
IAogICAgIC8vIFBsdWdpbnMgY2Fubm90IHRha2UgSFRNTCBhbmQgWEhUTUwgZnJvbSB1cywgYW5k
IHdlIGRvbid0IGV2ZW4gbmVlZCB0byBpbml0aWFsaXplIHRoZSBwbHVnaW4gZGF0YWJhc2UgZm9y
IHRob3NlLgogICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiKQogICAgICAgICByZXR1cm4gSFRN
TERvY3VtZW50OjpjcmVhdGUoZnJhbWUpOwotICAgIGlmICh0eXBlID09ICJhcHBsaWNhdGlvbi94
aHRtbCt4bWwiKQorICAgIGlmICh0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiCisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgICAgIHx8IHR5cGUgPT0gImFwcGxpY2F0aW9uL3ZuZC53YXAu
eGh0bWwreG1sIgorI2VuZGlmCisgICAgICAgICkKICAgICAgICAgcmV0dXJuIERvY3VtZW50Ojpj
cmVhdGVYSFRNTChmcmFtZSk7CiAKICNpZiBFTkFCTEUoV01MKQpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gNDAwNzcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDYgKzcwLDkgQEAKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lmIEVOQUJM
RShYSFRNTE1QKQorI2luY2x1ZGUgIkhUTUxOb1NjcmlwdEVsZW1lbnQuaCIKKyNlbmRpZgogI2lu
Y2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGl0bGVFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKQEAgLTM3NCw2ICszNzcsMTAgQEAgRG9jdW1lbnQ6
OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogCiAgICAgc3RhdGljIGludCBkb2NJRCA9
IDA7CiAgICAgbV9kb2NJRCA9IGRvY0lEKys7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgaWYg
KHNldHRpbmdzKCkpCisgICAgICAgIG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0RWxlbWVudCA9ICFz
ZXR0aW5ncygpLT5pc0phdmFTY3JpcHRFbmFibGVkKCk7CisjZW5kaWYKIH0KIAogdm9pZCBEb2N1
bWVudDo6cmVtb3ZlZExhc3RSZWYoKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA0MDA3NykKKysrIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMyw2ICszMTMsMTEgQEAg
cHVibGljOgogI2lmIEVOQUJMRShXTUwpCiAgICAgdmlydHVhbCBib29sIGlzV01MRG9jdW1lbnQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCisjaWYgRU5BQkxFKFhIVE1MTVApCisg
ICAgYm9vbCBpc1hIVE1MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUw7IH0KKyAg
ICBib29sIHNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQ7IH0KKyAgICB2b2lkIHNldFNob3VsZFByb2Nlc3NO
b3NjcmlwdEVsZW1lbnQoYm9vbCBzaG91bGREbykgeyBtX3Nob3VsZFByb2Nlc3NOb1NjcmlwdEVs
ZW1lbnQgPSBzaG91bGREbzsgfQorI2VuZGlmCiAgICAgCiAgICAgQ1NTU3R5bGVTZWxlY3Rvciog
c3R5bGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTZWxlY3RvcjsgfQogCkBAIC05
NTksNiArOTY0LDEwIEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9jb250ZW50TGFuZ3VhZ2U7
CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBib29sIG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0
RWxlbWVudDsKKyNlbmRpZgorCiBwdWJsaWM6CiAgICAgYm9vbCBpblBhZ2VDYWNoZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5QYWdlQ2FjaGU7IH0KICAgICB2b2lkIHNldEluUGFnZUNhY2hlKGJvb2wg
ZmxhZyk7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gNDAwNzcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE5OSw3ICsxMTk5LDcgQEAgdm9pZCBOb2RlOjpjcmVhdGVSZW5k
ZXJlcklmTmVlZGVkKCkKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0g
cGFyZW50LT5yZW5kZXJlcigpOwogICAgIGlmIChwYXJlbnRSZW5kZXJlciAmJiBwYXJlbnRSZW5k
ZXJlci0+Y2FuSGF2ZUNoaWxkcmVuKCkKLSNpZiBFTkFCTEUoU1ZHKQorI2lmIEVOQUJMRShTVkcp
IHx8IEVOQUJMRShYSFRNTE1QKQogICAgICAgICAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRl
UmVuZGVyZXIodGhpcykKICNlbmRpZgogICAgICAgICApIHsKSW5kZXg6IFdlYkNvcmUvZG9tL05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDQwMDc3KQor
KysgV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAg
cHVibGljOgogICAgIHZvaWQgY3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpOwogICAgIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUmVuZGVyZXIoKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVu
ZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwotI2lmIEVOQUJMRShTVkcpCisjaWYgRU5BQkxF
KFNWRykgfHwgRU5BQkxFKFhIVE1MTVApCiAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3Jl
YXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0
eWxlKik7CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDQwMDc3KQorKysgV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDYgKzIwOCwxMSBA
QCB2b2lkIFhNTFRva2VuaXplcjo6ZW5kKCkKICAgICAgICAgaW5zZXJ0RXJyb3JNZXNzYWdlQmxv
Y2soKTsKICAgICBlbHNlIHsKICAgICAgICAgZXhpdFRleHQoKTsKKyNpZiBFTkFCTEUoWEhUTUxN
UCkKKyAgICAgICAgLy8gQXMgZm9yIFhIVE1MTVAgZG9jdW1lbnQsIHdlIG5lZWRuJ3QgdXBkYXRl
IHRoZSBzdHlsZSBzZWxlY3RvciBoZXJlCisgICAgICAgIC8vIHRvIGF2b2lkIHRoZSBsYXlvdXQg
b2YgPG5vc2NyaXB0PiBhcmUgY2hhbmdlZCBpbmNvcnJlY3RseS4KKyAgICAgICAgaWYgKCFpc1hI
VE1MTVBEb2N1bWVudCgpKQorI2VuZGlmCiAgICAgICAgIG1fZG9jLT51cGRhdGVTdHlsZVNlbGVj
dG9yKCk7CiAgICAgfQogICAgIApJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgJKHJldmlzaW9uIDQwMDc3KQor
KysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcy
LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldElzWEhUTUxEb2N1
bWVudChib29sIGlzWEhUTUwpIHsgbV9pc1hIVE1MRG9jdW1lbnQgPSBpc1hIVE1MOyB9CiAgICAg
ICAgIGJvb2wgaXNYSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1hIVE1MRG9jdW1l
bnQ7IH0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgdm9pZCBzZXRJc1hIVE1MTVBEb2N1
bWVudChib29sIGlzWEhUTUwpIHsgbV9pc1hIVE1MTVBEb2N1bWVudCA9IGlzWEhUTUw7IH0KKyAg
ICAgICAgYm9vbCBpc1hIVE1MTVBEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTE1Q
RG9jdW1lbnQ7IH0KKyNlbmRpZgogI2lmIEVOQUJMRShXTUwpCiAgICAgICAgIGJvb2wgaXNXTUxE
b2N1bWVudCgpIGNvbnN0OwogI2VuZGlmCkBAIC0xNDksNiArMTUzLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgYm9vbCBtX3Nhd1hTTFRyYW5zZm9ybTsKICAgICAgICAgYm9vbCBtX3Nhd0ZpcnN0RWxl
bWVudDsKICAgICAgICAgYm9vbCBtX2lzWEhUTUxEb2N1bWVudDsKKyNpZiBFTkFCTEUoWEhUTUxN
UCkKKyAgICAgICAgYm9vbCBtX2lzWEhUTUxNUERvY3VtZW50OworICAgICAgICBib29sIG1faGFz
RG9jVHlwZURlY2xhcmF0aW9uOworI2VuZGlmCiAKICAgICAgICAgYm9vbCBtX3BhcnNlclBhdXNl
ZDsKICAgICAgICAgYm9vbCBtX3JlcXVlc3RpbmdTY3JpcHQ7CkluZGV4OiBXZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tl
bml6ZXJMaWJ4bWwyLmNwcAkocmV2aXNpb24gNDAwNzcpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tl
bml6ZXJMaWJ4bWwyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTAgQEAKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhU
TUxMaW5rRWxlbWVudC5oIgorI2lmIEVOQUJMRShYSFRNTE1QKQorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCisjZW5kaWYKICNpbmNsdWRlICJI
VE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIiAvLyBmb3IgZGVj
b2RlTmFtZWRFbnRpdHkKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKQEAgLTUz
MCw2ICs1MzQsMTAgQEAgWE1MVG9rZW5pemVyOjpYTUxUb2tlbml6ZXIoRG9jdW1lbnQqIF9kbwog
ICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCiAgICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChm
YWxzZSkKICAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQorI2lmIEVOQUJMRShYSFRNTE1Q
KQorICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKKyAgICAsIG1faGFzRG9jVHlwZURl
Y2xhcmF0aW9uKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKICAg
ICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKICAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNl
KQpAQCAtNTUzLDYgKzU2MSwxMCBAQCBYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1bWVu
dEZyYWdtCiAgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKICAgICAsIG1fc2F3Rmlyc3RF
bGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5BQkxF
KFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQorICAgICwgbV9oYXNE
b2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAsIG1fcGFyc2VyUGF1c2VkKGZh
bHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQogICAgICwgbV9maW5pc2hDYWxs
ZWQoZmFsc2UpCkBAIC03MDcsNyArNzE5LDE1IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpzdGFydEVs
ZW1lbnROcyhjb25zdCAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKKyNpZiBFTkFCTEUo
WEhUTUxNUCkgCisgICAgLy9jaGVjayB0aGUgRE9DVFlQRSBEZWNsYXJhdGlvbiBvZiBYSFRNTE1Q
IGRvY3VtZW50CisgICAgaWYgKCFtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiAmJiBtX2RvYy0+aXNY
SFRNTERvY3VtZW50KCkpIHsKKyAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJUaGUgRE9DVFlQ
RSBkZWNsYXJhdGlvbiBpcyBtaXNzaW5nLCBYSFRNTCBleHBlY3RzIGl0LiIsIGxpbmVOdW1iZXIo
KSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKICAgICBt
X3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisjZW5kaWYKIAogICAgIGV4aXRUZXh0KCk7CiAKQEAg
LTcyMSw2ICs3NDEsMjUgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0
IAogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7
CiAgICAgfQorIAorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGlmICghbV9zYXdGaXJzdEVsZW1l
bnQgJiYgaXNYSFRNTE1QRG9jdW1lbnQoKSkgeworICAgICAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9
IHRydWU7CisgCisgICAgICAgIC8vIEFzIHBlciB0aGUgc2VjdGlvbiA3LjEgb2YgT01BLVdBUC1Y
SFRNTE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYsIAorICAgICAgICAvLyB3ZSBzaG91bGQgbWFrZSBz
dXJlIHRoYXQgdGhlIHJvb3QgZWxlbWVudCBNVVNUIGJlICdodG1sJyBhbmQgCisgICAgICAgIC8v
IGVuc3VyZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxt
ZW50ICdodG1sJyAKKyAgICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCcKKyAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxO
YW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiVGhlIFhIVE1MTVAgZG9j
dW1lbnQncyByb290IGVsZW1lbnQgaXMgbm90IGEgJ2h0bWwnIGVsZW1lbnQuIiwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxz
ZSBpZiAodXJpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkg
PSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJOyAKKyAgICAgICAgICAgIHVyaSA9IG1fZGVm
YXVsdE5hbWVzcGFjZVVSSTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIW1fc2F3Rmlyc3RF
bGVtZW50KQorICAgICAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisjZW5kaWYKIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBs
b2NhbE5hbWUsIHVyaSk7CkBAIC03ODgsNiArODI3LDExIEBAIHZvaWQgWE1MVG9rZW5pemVyOjpl
bmRFbGVtZW50TnMoKQogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG4pOyAKICAgICAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IGNhc3RU
b1NjcmlwdEVsZW1lbnQoZWxlbWVudCk7CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAg
aWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAhc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVs
ZW1lbnQqPihzY3JpcHRFbGVtZW50KS0+c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQorICAg
ICAgICAgICAgbV9kb2MtPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7Cisg
ICAgICAgIGVsc2UgeworI2VuZGlmCiAgICAgICAgIFN0cmluZyBzY3JpcHRIcmVmID0gc2NyaXB0
RWxlbWVudC0+c291cmNlQXR0cmlidXRlVmFsdWUoKTsKICAgICAgICAgaWYgKCFzY3JpcHRIcmVm
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUgCkBA
IC04MDMsNiArODQ3LDkgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmVuZEVsZW1lbnROcygpCiAgICAg
ICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJj
ZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCksIG1fc2Ny
aXB0U3RhcnRMaW5lKSk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIH0KKyNlbmRpZgog
CiAgICAgICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIH0KQEAgLTkzMyw2ICs5
ODAsOSBAQCB2b2lkIFhNTFRva2VuaXplcjo6c3RhcnREb2N1bWVudChjb25zdCB4CiB2b2lkIFhN
TFRva2VuaXplcjo6ZW5kRG9jdW1lbnQoKQogewogICAgIGV4aXRUZXh0KCk7CisjaWYgRU5BQkxF
KFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgog
fQogCiB2b2lkIFhNTFRva2VuaXplcjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgeG1sQ2hhciogbmFt
ZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciogc3lzdGVtSUQpCkBA
IC05NDYsOCArOTk2LDkgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmludGVybmFsU3Vic2V0KGNvbnN0
IAogICAgIH0KICAgICAKICAgICBpZiAobV9kb2MpIHsKLSNpZiBFTkFCTEUoV01MKQogICAgICAg
ICBTdHJpbmcgZXh0SWQgPSB0b1N0cmluZyhleHRlcm5hbElEKTsKKyAgICAgICAgU3RyaW5nIGR0
ZE5hbWUgPSB0b1N0cmluZyhuYW1lKTsKKyNpZiBFTkFCTEUoV01MKQogICAgICAgICBpZiAoaXNX
TUxEb2N1bWVudCgpCiAgICAgICAgICAgICAmJiBleHRJZCAhPSAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4zLy9FTiIKICAgICAgICAgICAgICYmIGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdN
TCAxLjIvL0VOIgpAQCAtOTU1LDggKzEwMDYsMTggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmludGVy
bmFsU3Vic2V0KGNvbnN0IAogICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMC8vRU4iKQogICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlk
IERURCBQdWJsaWMgSUQiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKICNlbmRpZgor
I2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICBpZiAoKGV4dElkID09ICItLy9XQVBGT1JVTS8v
RFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikKKyAgICAgICAgICAgIHx8IChleHRJZCA9PSAiLS8v
V0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIpKSB7CisgICAgICAgICAgICBpZiAo
ZHRkTmFtZSA9PSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgICAgICAgICBtX2hhc0Rv
Y1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkludmFsaWQgRE9DVFlQRSBkZWNsYXJhdGlvbiwgWEhU
TUxNUCBleHBlY3RzICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1
bW5OdW1iZXIoKSk7CisgICAgICAgIH0KKyNlbmRpZgogCi0gICAgICAgIG1fZG9jLT5hZGRDaGls
ZChEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5nKGV4
dGVybmFsSUQpLCB0b1N0cmluZyhzeXN0ZW1JRCkpKTsKKyAgICAgICAgbV9kb2MtPmFkZENoaWxk
KERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jLCBkdGROYW1lLCBleHRJZCwgdG9TdHJpbmcoc3lz
dGVtSUQpKSk7CiAgICAgfQogfQogCkBAIC0xMTM1LDggKzExOTYsNyBAQCBzdGF0aWMgdm9pZCBl
eHRlcm5hbFN1YnNldEhhbmRsZXIodm9pZCogCiAgICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzND
Ly9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTiIpCiAgICAgICAgIHx8IChleHRJZCA9PSAiLS8v
VzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4wLy9FTiIpCiAgICAgICAgIHx8IChleHRJZCA9PSAiLS8v
VzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMC8vRU4iKQotICAgICAgICB8fCAoZXh0
SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBTVkcgMS4x
Ly9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2Jp
bGUgMS4wLy9FTiIpKQorICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEu
MSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBTVkcgMS4xLy9FTiIpKQogICAgICAgICBnZXRUb2tlbml6
ZXIoY2xvc3VyZSktPnNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2Ug
cmVwbGFjZSBlbnRpdGllcyBvciBub3QuCiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2Vu
aXplclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAJ
KHJldmlzaW9uIDQwMDc3KQorKysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaWYg
RU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNj
cmlwdEVsZW1lbnQuaCIKKyNlbmRpZgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmgiCkBAIC04NSw2ICs4OSwxMCBAQCBYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1bWVu
dCogX2RvCiAgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKICAgICAsIG1fc2F3Rmlyc3RF
bGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5BQkxF
KFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQorICAgICwgbV9oYXNE
b2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAsIG1fcGFyc2VyUGF1c2VkKGZh
bHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQogICAgICwgbV9maW5pc2hDYWxs
ZWQoZmFsc2UpCkBAIC0xMTAsNiArMTE4LDEwIEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVy
KERvY3VtZW50RnJhZ20KICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQogICAgICwgbV9z
YXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNp
ZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAg
LCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgogICAgICwgbV9wYXJzZXJQ
YXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCiAgICAgLCBtX2Zp
bmlzaENhbGxlZChmYWxzZSkKQEAgLTQxNiw5ICs0MjgsMTggQEAgdm9pZCBYTUxUb2tlbml6ZXI6
OnBhcnNlKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFk
ZXI6OkVuZERvY3VtZW50OiB7CiAgICAgICAgICAgICBlbmREb2N1bWVudCgpOworI2lmIEVOQUJM
RShYSFRNTE1QKQorICAgICAgICAgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsK
KyNlbmRpZgogICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBRWG1s
U3RyZWFtUmVhZGVyOjpTdGFydEVsZW1lbnQ6IHsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAg
ICAgICAgIGlmIChtX2RvYy0+aXNYSFRNTERvY3VtZW50KCkgJiYgIW1faGFzRG9jVHlwZURlY2xh
cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRl
Y2xhcmF0aW9uIGlzIG1pc3NpbmcsIFhIVE1MIGV4cGVjdHMgaXQuIiwgbGluZU51bWJlcigpLCBj
b2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisj
ZW5kaWYgCiAgICAgICAgICAgICBwYXJzZVN0YXJ0RWxlbWVudCgpOwogICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTQ0Myw2ICs0NjQsOSBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFy
c2UoKQogICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkRURDogewogICAgICAgICAgICAg
Ly9xRGVidWcoKTw8Ii0tLS0tLS0tLS0tLS0gRFREIjsKICAgICAgICAgICAgIHBhcnNlRHRkKCk7
CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlv
biA9IHRydWU7CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50aXR5UmVmZXJlbmNlOiB7CkBAIC01MDcsNyArNTMx
LDkgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkKICAgICAgICAgbV9z
YXdGaXJzdEVsZW1lbnQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2lmICFFTkFC
TEUoWEhUTUxNUCkKICAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisjZW5kaWYKIAogICAg
IGV4aXRUZXh0KCk7CiAKQEAgLTUyMCw2ICs1NDYsMjYgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBh
cnNlU3RhcnRFbGVtZW50KCkKICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwog
ICAgIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGlmIChpc1hIVE1MTVBEb2N1bWVudCgp
ICYmICFtX3Nhd0ZpcnN0RWxlbWVudCkgeworICAgICAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRy
dWU7CisgCisgICAgICAgIC8vIEFzIHBlciA3LjEgc2VjdGlvbiBvZiBPTUEtV0FQLVhIVE1MTVAt
VjFfMS0yMDA2MTAyMC1BLnBkZiwgCisgICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhh
dCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZCAKKyAgICAgICAgLy8gZW5zdXJl
IHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBvbiB0aGUgcm9vdCBlbG1lbnQgJ2h0
bWwnIAorICAgICAgICAvLyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJwor
ICAgICAgICBpZiAobG9jYWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkg
eworICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJUaGUgWEhUTUxNUCBkb2N1bWVudCdz
IHJvb3QgZWxlbWVudCBpcyBub3QgYSAnaHRtbCcgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNv
bHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1
cmkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxO
YW1lczo6eGh0bWxOYW1lc3BhY2VVUkk7IAorICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFt
ZXNwYWNlVVJJOworICAgICAgICAgICAgbV9zdHJlYW0uYWRkRXh0cmFOYW1lc3BhY2VEZWNsYXJh
dGlvbihRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlZml4LCBIVE1MTmFtZXM6Onho
dG1sTmFtZXNwYWNlVVJJKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFtX3Nhd0ZpcnN0
RWxlbWVudCkKKyAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworI2VuZGlmCisKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwg
bG9jYWxOYW1lLCB1cmkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV9kb2Mt
PmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUsIGVjKTsKQEAgLTU2OCw2ICs2MTQsMTEgQEAgdm9p
ZCBYTUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxlbWVudCgpCiAKICAgICAgICAgRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsgCiAgICAgICAgIFNjcmlwdEVsZW1lbnQq
IHNjcmlwdEVsZW1lbnQgPSBjYXN0VG9TY3JpcHRFbGVtZW50KGVsZW1lbnQpOworI2lmIEVOQUJM
RShYSFRNTE1QKQorICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmICFzdGF0
aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KHNjcmlwdEVsZW1lbnQpLT5zaG91bGRFeGVjdXRl
QXNKYXZhU2NyaXB0KCkpCisgICAgICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2Ny
aXB0RWxlbWVudCh0cnVlKTsKKyAgICAgICAgZWxzZSB7CisjZW5kaWYKIAogICAgICAgICBTdHJp
bmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7CiAg
ICAgICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5KCkpIHsKQEAgLTU4NCw2ICs2MzUsOSBAQCB2
b2lkIFhNTFRva2VuaXplcjo6cGFyc2VFbmRFbGVtZW50KCkKICAgICAgICAgICAgICAgICBtX3Nj
cmlwdEVsZW1lbnQgPSAwOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fdmlldy0+ZnJh
bWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVt
ZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgbV9yZXF1
ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgfQpAQCAtNzQyLDEwICs3OTYsMTkgQEAgdm9pZCBY
TUxUb2tlbml6ZXI6OnBhcnNlRHRkKCkKICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFT
dHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iKSkKICAgICAgICAgfHwg
KHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8v
RU4iKSkKICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFRE
IFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VOIikpCi0gICAgICAgIHx8IChwdWJsaWNJZCA9
PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBs
dXMgU1ZHIDEuMS8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmco
Ii0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkpIHsKKyAgICAgICAgfHwg
KHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1h
dGhNTCAyLjAgcGx1cyBTVkcgMS4xLy9FTiIpKSkgewogICAgICAgICBzZXRJc1hIVE1MRG9jdW1l
bnQodHJ1ZSk7IC8vIGNvbnRyb2xzIGlmIHdlIHJlcGxhY2UgZW50aXRpZXMgb3Igbm90LgogICAg
IH0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBlbHNlIGlmICgocHVibGljSWQgPT0gUUxhdGlu
MVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIpKQorICAgICAg
ICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhU
TUwgTW9iaWxlIDEuMC8vRU4iKSkpIHsKKyAgICAgICAgaWYgKEF0b21pY1N0cmluZyhuYW1lKSAh
PSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVy
cm9yKGZhdGFsLCAiSW52YWxpZCBET0NUWVBFIGRlY2xhcmF0aW9uLCBYSFRNTE1QIGV4cGVjdHMg
J2h0bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzZXRJc1hI
VE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICB9CisjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAg
IGVsc2UgaWYgKG1fZG9jLT5pc1dNTERvY3VtZW50KCkKICAgICAgICAgICAgICAmJiBwdWJsaWNJ
ZCAhPSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOIikKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNDAwNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODQsMTEgKzk4NCwxMyBAQCBib29sIEhUTUxF
bGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuCiAgICAgCiBib29sIEhUTUxFbGVtZW50Ojpy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkKIHsKKyNpZiAhRU5BQkxFKFhIVE1M
TVApCiAgICAgaWYgKGhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykpIHsKICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICAgICAgaWYgKHNldHRp
bmdzICYmIHNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIChkb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSA9PSB0aGlzKSB8fCAoc3R5bGUtPmRpc3BsYXkoKSAhPSBOT05FKTsKIH0KICAg
ICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiA0MDA3NykK
KysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw2ICs2Miw5IEBACiAjaW5jbHVkZSAiSFRNTE1ldGFFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE1vZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpZiBFTkFCTEUoWEhU
TUxNUCkKKyNpbmNsdWRlICJIVE1MTm9TY3JpcHRFbGVtZW50LmgiCisjZW5kaWYKICNpbmNsdWRl
ICJIVE1MT0xpc3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCkBAIC0zMzMsNiArMzM2LDEzIEBAIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBzY3JpcHRDb24KICAgICByZXR1cm4gbmV3IEhUTUxT
Y3JpcHRFbGVtZW50KHNjcmlwdFRhZywgZG9jLCBjcmVhdGVkQnlQYXJzZXIpOwogfQogCisjaWYg
RU5BQkxFKFhIVE1MTVApCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbm9zY3JpcHRD
b25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1F
bGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MTm9T
Y3JpcHRFbGVtZW50KG5vc2NyaXB0VGFnLCBkb2MpOworfQorI2VuZGlmCisKIHN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiB0YWJsZUNvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVybiBu
ZXcgSFRNTFRhYmxlRWxlbWVudCh0YWJsZVRhZywgZG9jKTsKQEAgLTQ3MCw2ICs0ODAsOSBAQCBz
dGF0aWMgdm9pZCBjcmVhdGVGdW5jdGlvbk1hcCgpCiAgICAgYWRkVGFnKHByZVRhZywgcHJlQ29u
c3RydWN0b3IpOwogICAgIGFkZFRhZyhxVGFnLCBxdW90ZUNvbnN0cnVjdG9yKTsKICAgICBhZGRU
YWcoc2NyaXB0VGFnLCBzY3JpcHRDb25zdHJ1Y3Rvcik7CisjaWYgRU5BQkxFKFhIVE1MTVApCisg
ICAgYWRkVGFnKG5vc2NyaXB0VGFnLCBub3NjcmlwdENvbnN0cnVjdG9yKTsKKyNlbmRpZgogICAg
IGFkZFRhZyhzZWxlY3RUYWcsIHNlbGVjdENvbnN0cnVjdG9yKTsKICAgICBhZGRUYWcoc3R5bGVU
YWcsIHN0eWxlQ29uc3RydWN0b3IpOwogICAgIGFkZFRhZyh0YWJsZVRhZywgdGFibGVDb25zdHJ1
Y3Rvcik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1M
Tm9TY3JpcHRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOworCitIVE1MTm9TY3JpcHRFbGVtZW50OjpIVE1MTm9TY3JpcHRFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxl
bWVudCh0YWdOYW1lLCBkb2MpCit7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUobm9zY3JpcHRUYWcp
KTsKK30KKworSFRNTE5vU2NyaXB0RWxlbWVudDo6fkhUTUxOb1NjcmlwdEVsZW1lbnQoKQorewor
fQorCitib29sIEhUTUxOb1NjcmlwdEVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0No
aWxkKQoreworICAgIHJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpIHx8IGluQmxvY2tUYWdM
aXN0KG5ld0NoaWxkKTsgCit9CisKK3ZvaWQgSFRNTE5vU2NyaXB0RWxlbWVudDo6YXR0YWNoKCkK
K3sKKyAgICBBU1NFUlQoIXJlbmRlcmVyKCkpOworICAgIC8vIEluIG9yZGVyIHRvIG1ha2UgdGhl
IGNvbnRlbnQgd2l0aGluIG5vc2NyaXB0IG5vZGUgdmlzaWJsZSwKKyAgICAvLyB3ZSBzaG91bGQg
YXR0YWNoIHJlbmRlciBvYmplY3QgdG8gbm9zY3JpcHQgbm9kZSwgdGhlbiBpdHMgY2hpbGRyZW4g
CisgICAgLy8gY2FuIHNoYXJlIGl0cyByZW5kZXIgc3R5bGUgdG8gY3JlYXRlIHRoZWlyIG93biBy
ZW5kZXIgb2JqZWN0cworICAgIFJlZlB0cjxOb2RlPiBwYXJlbnQgPSB0aGlzOworICAgIFJlbmRl
ck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSAwOworICAgIHdoaWxlKHBhcmVudCA9IHBhcmVudC0+
cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmKHBhcmVudFJlbmRlcmVyID0gcGFyZW50LT5yZW5k
ZXJlcigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFTU0VSVChwYXJlbnRSZW5k
ZXJlcik7CisKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpOworICAgIHN0eWxlLT5pbmhlcml0RnJvbShwYXJlbnRSZW5kZXJlci0+c3R5bGUoKSk7
CisKKyAgICBSZW5kZXJPYmplY3QqIHJvID0gY3JlYXRlUmVuZGVyZXIocGFyZW50UmVuZGVyZXIt
PnJlbmRlckFyZW5hKCksIHN0eWxlLmdldCgpKTsKKyAgICBpZiAocm8pIHsKKyAgICAgICAgc2V0
UmVuZGVyZXIocm8pOworICAgICAgICByZW5kZXJlcigpLT5zZXRTdHlsZShzdHlsZSk7CisgICAg
ICAgIHBhcmVudFJlbmRlcmVyLT5hZGRDaGlsZChyZW5kZXJlcigpLCBuZXh0UmVuZGVyZXIoKSk7
CisgICAgfQorCisgICAgQ29udGFpbmVyTm9kZTo6YXR0YWNoKCk7CisKKyAgICAvLyBJZiBubyBu
ZWVkIHRvIHByb2Nlc3MgPG5vc2NyaXB0Piwgd2UgaGlkZSBpdAorICAgIGlmICghZG9jdW1lbnQo
KS0+c2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCgpKSB7CisgICAgICAgIHN0eWxlLT5zZXRE
aXNwbGF5KE5PTkUpOworICAgICAgICBzZXRDaGFuZ2VkKCk7CisgICAgfQorfQorCit2b2lkIEhU
TUxOb1NjcmlwdEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKK3sKKyAg
ICBpZiAoIWRvY3VtZW50KCktPnNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gSWYgPG5vc2NyaXB0PiBuZWVkcyBwcm9jZXNzaW5nLCB3ZSBt
YWtlIGl0IHZpc2lhYmxlIGhlcmUuCisgICAgQVNTRVJUKHJlbmRlcmVyKCkpOworICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOyAKKyAgICBBU1NFUlQo
c3R5bGUpOworICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUpIHsKKyAgICAgICAgc3R5
bGUtPnNldERpc3BsYXkoSU5MSU5FKTsKKworICAgICAgICAvLyBjcmVhdGUgcmVuZGVyZXJzIGZv
ciBpdHMgY2hpbGRyZW4KKyAgICAgICAgaWYgKGhhc0NoaWxkTm9kZXMoKSkgeworICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBybyA9ICAwOworCisgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBm
aXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKQorICAgICAgICAg
ICAgICAgIGlmICghbi0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgbi0+Y3JlYXRl
UmVuZGVyZXJJZk5lZWRlZCgpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEhUTUxOb1Nj
cmlwdEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSogY2hpbGQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPnNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQo
KTsKK30KKworfQorI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIEhUTUxOb1NjcmlwdEVsZW1lbnRfaAorI2RlZmluZSBIVE1MTm9TY3Jp
cHRFbGVtZW50X2gKKworI2lmIEVOQUJMRShYSFRNTE1QKQorI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTE5vU2NyaXB0RWxlbWVudCA6
IHB1YmxpYyBIVE1MRWxlbWVudCB7CitwdWJsaWM6CisgICAgSFRNTE5vU2NyaXB0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+SFRNTE5vU2NyaXB0RWxlbWVu
dCgpOworCisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hh
bmdlKTsKKyAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0Owor
fTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNw
cAkocmV2aXNpb24gNDAwNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg2OSw3ICs4NjksOSBAQCBQYXNzUmVmUHRyPE5vZGU+IEhUTUxQYXJzZXI6
OmdldE5vZGUoVG9rCiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQobm9iclRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKICAgICAgICAg
Z0Z1bmN0aW9uTWFwLnNldChub2VtYmVkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJz
ZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKTsKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChu
b2ZyYW1lc1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpub2ZyYW1lc0NyZWF0
ZUVycm9yQ2hlY2spOworI2lmICFFTkFCTEUoWEhUTUxNUCkKICAgICAgICAgZ0Z1bmN0aW9uTWFw
LnNldChub3NjcmlwdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpub3Njcmlw
dENyZWF0ZUVycm9yQ2hlY2spOworI2VuZGlmCiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQob2xU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hl
Y2spOwogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KHBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAm
SFRNTFBhcnNlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25N
YXAuc2V0KHBsYWludGV4dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpwQ2xv
c2VyQ3JlYXRlRXJyb3JDaGVjayk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lv
biA0MDA3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDU1LDYgKzQ1NSwxMCBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVy
OjpzY3JpCiAgICAgICAgICAgICB9IGVsc2UKICNlbmRpZgogICAgICAgICAgICAgZG9TY3JpcHRF
eGVjID0gbV9zY3JpcHROb2RlLT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCk7CisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgICAgICAgICBpZiAoIWRvU2NyaXB0RXhlYykKKyAgICAgICAgICAg
ICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKKyNlbmRp
ZgogICAgICAgICAgICAgbV9zY3JpcHROb2RlID0gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTE5
ODQsNiArMTk4OCwxMCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hl
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxTY3JpcHRF
bGVtZW50Kj4obi5nZXQoKSktPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKICAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9uKHNvdXJjZUNvZGUsIG1fc3RhdGUpOwor
I2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
ZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworI2VuZGlmCiAgICAg
ICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4uZ2V0KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlw
ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDQwMDc3KQorKysgV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYwLDYgKzEwNjAsMTUgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6ZW5kSWZOb3RMb2FkaW5nTWFpblJlcwogICAgIGlmIChtX2lzTG9h
ZGluZ01haW5SZXNvdXJjZSB8fCAhbV9mcmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1cm47CiAK
KyNpZiBQTEFURk9STShRVCkgJiYgRU5BQkxFKFhIVE1MTVApCisgICAgLy8gRklYTUU6IFF0IGlz
IGZsYXdlZAorICAgIC8vIFRoaXMgaGFja2luZyBpcyBmb3IgZml4aW5nIG9uZSBidWcgb2YgamF2
YXNyY2lwdCBpbiBYSFRNTE1QIGRvY3VtZW50LCAKKyAgICAvLyBpLmU6IGlmIGFsZXJ0KCkgbWV0
aG9kIGlzIGNvbnRhaW5lZCBkaXJlY3RseSBpbiA8c2NyaXB0PiBlbGVtZW50LCAKKyAgICAvLyBp
dCB3aWxsIGNhdXNlIFF0TGF1bmNoZXIgY3Jhc2ggd2hlbiBmcmFtZSBsb2FkZXIgZXhlY3V0ZSBp
dC4KKyAgICBpZiAobV9pc1J1bm5pbmdTY3JpcHQgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
I2VuZGlmCisKICAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDg1NAogICAgIC8vIFRoZSBmcmFtZSdzIGxhc3QgcmVmIG1heSBiZSByZW1vdmVkIGFuZCBpdCBj
YW4gYmUgZGVsZXRlZCBieSBjaGVja0NvbXBsZXRlZCgpLCAKICAgICAvLyBzbyB3ZSdsbCBhZGQg
YSBwcm90ZWN0aXZlIHJlZmNvdW50CkBAIC0zNTgxLDcgKzM1OTAsMTEgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVlcwogICAgIH0KICAgICAKICAgICBpZiAobWFpblJl
c291cmNlKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBBY2Nl
cHQoImFwcGxpY2F0aW9uL3htbCxhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCxhcHBsaWNh
dGlvbi94aHRtbCt4bWw7cHJvZmlsZT0naHR0cDovL3d3dy53YXBmb3J1bS5vcmcveGh0bWwnLHRl
eHQvaHRtbDtxPTAuOSx0ZXh0L3BsYWluO3E9MC44LGltYWdlL3BuZywqLyo7cT0wLjUiKTsKKyNl
bHNlCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEFjY2VwdCgiYXBwbGljYXRpb24veG1sLGFwcGxp
Y2F0aW9uL3hodG1sK3htbCx0ZXh0L2h0bWw7cT0wLjksdGV4dC9wbGFpbjtxPTAuOCxpbWFnZS9w
bmcsKi8qO3E9MC41Iik7CisjZW5kaWYKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZW5kIHRoZSBP
cmlnaW4gaGVhZGVyLgogICAgIGFkZEhUVFBPcmlnaW5JZk5lZWRlZChyZXF1ZXN0LCBTdHJpbmco
KSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDQw
MDc3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTkwLDYgKzE5MCw5IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRO
b25JbWFnZU0KICAgICAgICAgInRleHQvIiwKICAgICAgICAgImFwcGxpY2F0aW9uL3htbCIsCiAg
ICAgICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLAorI2lmIEVOQUJMRShYSFRNTE1QKQorICAg
ICAgICAiYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4bWwiLAorI2VuZGlmCiAgICAgICAgICJh
cHBsaWNhdGlvbi9yc3MreG1sIiwKICAgICAgICAgImFwcGxpY2F0aW9uL2F0b20reG1sIiwKICNp
ZiBFTkFCTEUoU1ZHKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDAwODQpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wMS0yMSAgWWlj
aGFvIFlpbiAgPHlpY2hhby55aW5AdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC94aHRtbG1wOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3hodG1sbXAvY2hlY2stZG9jdHlwZS1kZWNsYXJhdGlvbi54aHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC94aHRtbG1wL2NoZWNrLXJvb3RlbGVtZW50LnhodG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9zY3JpcHQtaW4tbXVsdGlzY3JpcHRzLnho
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9zY3JpcHQtbmVzdGVkLnhodG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9zY3JpcHQueGh0bWw6IEFkZGVkLgor
CiAyMDA5LTAxLTIwICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1lcm1hbm5AdG9y
Y2htb2JpbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb3JnZSBTdGFpa29zLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL2NoZWNrLWRvY3R5cGUtZGVjbGFyYXRpb24ueGh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL2NoZWNrLWRvY3R5cGUt
ZGVjbGFyYXRpb24ueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1s
bXAvY2hlY2stZG9jdHlwZS1kZWNsYXJhdGlvbi54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tCis8IURPQ1RZUEUgaHRtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iICJodHRwOi8vd3d3Lndh
cGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIj4KKy0tPgorPGh0bWwgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBkb2N1bWVu
dCBjb25mb3JtYW5jZSBvZiBYSFRNTE1QPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZyI+Cis8cD4gYnJvd3NlciBzaG91bGQgcmVwb3J0IERPQ1RZUEUgZGVj
bGFyYXRpb24gbG9zZSBlcnJvciA8L3A+Cis8aHIvPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL2NoZWNrLXJvb3RlbGVtZW50LnhodG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54aHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVu
dC54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4w
Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxl
IDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRk
Ij4KKworPGFueSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4K
Kzx0aXRsZT5UZXN0IGRvY3VtZW50IGNvbmZvcm1hbmNlIG9mIFhIVE1MTVA8L3RpdGxlPgorPC9o
ZWFkPgorPGJvZHk+Cis8cD4gVGhpcyBpcyBCT0RZIDwvcD4KKzwvYm9keT4KKzwvYW55PgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQtaW4tbXVs
dGlzY3JpcHRzLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1w
L25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dB
UEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9y
Zy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+IFRlc3Qgbm9zY3JpcHQgaW4gbXVsaXRw
bGUgc2NyaXB0IGVsZW1lbnRzIDwvdGl0bGU+Cis8bm9zY3JpcHQ+Cis8aDE+Jmx0O2gxJmd0OzFz
dCBub3NjcmlwdCBlbGVtZW50IGluIEhFQUQ8L2gxPgorcGxhaW4gdGV4dCBpbiBub3NjcmlwdAor
PC9ub3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L3dyb25ndHlwZSI+CisgICAgYWxlcnQo
InRoZSBmaXJzdCBzY3JpcHQiKTsKKzwvc2NyaXB0PgorCis8bm9zY3JpcHQ+Cis8aDI+ICZsdDto
MiZndDsybmQgbm9zY3JpcHQgZWxlbWVudCBpbiBIRUFEPC9oMj4KKzxoci8+Cis8L25vc2NyaXB0
PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBmdW4oKSB7Cisg
ICAgYWxlcnQoInRoZSBzZWNvbmQgc2NyaXB0Iik7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKwor
PGJvZHk+IAorPGEgaHJlZj0iamF2YXNjcmlwdDpmdW4oKSI+IGNsaWtlIG1lIHRvIGV4ZWN1dGUg
amF2YXNjcmlwdCBjb2RlPC9hPgorPG5vc2NyaXB0PgorPGgzPiZsdDtoMyZndDszcmQgbm9zY3Jp
cHQgZWxlbWVudCBpbiBCT0RZPC9oMz4KKzwvbm9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQtbmVzdGVkLnhodG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1uZXN0ZWQueGh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQtbmVzdGVk
LnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
Pz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUg
MS4wLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQi
PgorCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4K
Kzx0aXRsZT4gVGVzdCBuZXN0ZWQtbm9zY3JpcHQgIGVsZW1lbnQgaW4gWEhUTUxNUCA8L3RpdGxl
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2FueXRoaW5nIj4KK2FsZXJ0KCJZb3Ugd2lsbCBzZWUgbWUg
aWYgdGhlIHNjcmlwdGluZyBsYW5ndWFnZSBpZGVudGlmaWVkIGJ5IHRoZSB0eXBlIG9mIHNjcmlw
dCBlbGVtZW50IGlzIHN1cHBvcnRlZCIpOworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5Pgor
PHA+IFRlc3QgZm9yIG5lc3RlZC1ub3NjcmlwdCBlbGVtZW50IGluIFhIVE1MTVAgPC9wPgorPHA+
IElmIHRoZSB0ZXN0IHBhc3NlcywgeW91IHdpbGwgc2VlIHRoZSBmb2xsb3dpbmcgdGhyZWUgbmVz
dGVkIG5vc2NyaXB0IHRleHQsIG90aGVyd2lzZSwgeW91IHdpbGwgc2VlIHRoZSBhbGVydCB3aW5k
b3cuPC9wPgorPG5vc2NyaXB0PgorPGgxPmZpcnN0IG5vc2NyaXB0IGVsZW1lbnQgaW4gQk9EWTwv
aDE+Cis8bm9zY3JpcHQ+Cis8aDI+Mm5kIG5vc2NyaXB0IGVsZW1lbnQgaW4gQk9EWTwvaDI+Cis8
bm9zY3JpcHQ+Cis8aDM+M3JkIG5vc2NyaXB0IGVsZW1lbnQgaW4gQk9EWTwvaDM+Cis8L25vc2Ny
aXB0PgorPG5vc2NyaXB0PgorPGg1PjR0aCBub3NjcmlwdCBlbGVtZW50IGluIEJPRFk8L2g1Pgor
PC9ub3NjcmlwdD4KKzwvbm9zY3JpcHQ+Cis8L25vc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LnhodG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC54aHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC54aHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iICJodHRwOi8vd3d3
LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+IFRlc3Qgbm9zY3Jp
cHQgZWxlbWVudCBpbiBYSFRNTE1QIGRvY3VtZW50IDwvdGl0bGU+Cis8bm9zY3JpcHQ+Cis8aDE+
VGhlIGZpcnN0IG5vc2NyaXB0IGVsZW1lbnQgaW4gSEVBRDwvaDE+Cis8L25vc2NyaXB0PgorCis8
c2NyaXB0IHR5cGU9InRleHQvYW55dGhpbmciPgorYWxlcnQoIllvdSB3aWxsIHNlZSBtZSBpZiB0
aGUgc2NyaXB0aW5nIGxhbmd1YWdlIGlkZW50aWZpZWQgYnkgdGhlIHR5cGUgb2Ygc2NyaXB0IGVs
ZW1lbnQgaXMgc3VwcG9ydGVkIik7Cis8L3NjcmlwdD4KKworPG5vc2NyaXB0PgorPGgyPlRoZSBz
ZWNvbmQgbm9zY3JpcHQgZWxlbWVudCBpbiBIRUFEPC9oMj4KKzwvbm9zY3JpcHQ+Cis8L2hlYWQ+
CisKKzxib2R5PgorPG5vc2NyaXB0PgorPGgyPlRoZSB0aGlyZCBub3NjcmlwdCBlbGVtZW50IGlu
IEJPRFk8L2gyPgorPC9ub3NjcmlwdD4KKzxwPiBUZXN0IGZvciBub3NjcmlwdCBlbGVtZW50IGlu
IFhIVE1MTVAgPC9wPgorPHA+IElmIHRoZSB0ZXN0IHBhc3NlcywgeW91IGNhbiBzZWUgdGhlIG5v
c2NyaXB0IHRleHQgYWJvdmU8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27307</attachid>
            <date>2009-02-03 23:01:31 -0800</date>
            <delta_ts>2009-02-04 23:15:56 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>addxhtmlmpsupport.v2.patch</filename>
            <type>text/plain</type>
            <size>39764</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDYwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzQgQEAKKzIwMDktMDItMDMgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgWEhUTUxNUCBzdXBwb3J0CisgICAgICAgIEl0IGhhcyBqdXN0IGJlZW4gdmVy
aWZpZWQgZm9yIFF0IHBvcnQgc28gZmFyLgorCisgICAgICAgIFRlc3RzOiBmYXN0L3hodG1sbXAv
Y2hlY2stZG9jdHlwZS1kZWNsYXJhdGlvbi54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94aHRt
bG1wL2NoZWNrLXJvb3RlbGVtZW50LnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1sbXAv
bm9zY3JpcHQtaW4tbXVsdGlzY3JpcHRzLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1s
bXAvbm9zY3JpcHQtbmVzdGVkLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1sbXAvbm9z
Y3JpcHQueGh0bWwKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNv
cmUucHJvOgorICAgICAgICAqIFdlYkNvcmUuc2NvbnM6CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorICAgICAg
ICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01JbXBs
ZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzWEhUTUxEb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0
RWxlbWVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAg
ICAgKiBkb20vWE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXpl
cjo6ZW5kKToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxUb2tlbml6ZXI6OnNldElzWEhUTUxNUERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTFRva2VuaXplcjo6aXNYSFRNTE1QRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9YTUxUb2tl
bml6ZXJMaWJ4bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6WE1MVG9r
ZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6c3RhcnRFbGVtZW50TnMp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjplbmRFbGVtZW50TnMpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjplbmREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxUb2tlbml6ZXI6OmludGVybmFsU3Vic2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVy
bmFsU3Vic2V0SGFuZGxlcik6CisgICAgICAgICogZG9tL1hNTFRva2VuaXplclF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTFRva2VuaXplcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5p
emVyOjpwYXJzZVN0YXJ0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6
OnBhcnNlRW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIGh0bWwv
SFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnJlbmRlcmVy
SXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5vc2NyaXB0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlRnVuY3Rpb25NYXApOgorICAgICAgICAqIGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5vU2Ny
aXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50Ojp+SFRN
TE5vU2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50
OjpjaGVja0RURCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjphdHRh
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6cmVjYWxjU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hpbGRTaG91bGRDcmVh
dGVSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50Lmg6IEFkZGVk
LgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyc2VyOjpnZXROb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6c2NyaXB0SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjplbmRJZk5v
dExvYWRpbmdNYWluUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmFk
ZEV4dHJhRmllbGRzVG9SZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lz
dHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFnZU1p
bWVUeXBlcyk6CisKIDIwMDktMDItMDMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRleDogV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lv
biA0MDU2MCkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTk0
NSw2ICs5NDUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9IVE1MUXVv
dGVFbGVtZW50LmggXAogCVdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAgXAogCVdl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oIFwKKwlXZWJDb3JlL2h0bWwvSFRNTE5vU2Ny
aXB0RWxlbWVudC5jcHAgXAorCVdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmggXAog
CVdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAgXApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBDT05GSUcoUVRESVJfYnVpbGQpIHsKICFjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfWFBBVEg9Lik6IERFRklORVMgKz0gRU5BQkxFX1hQQVRIPTEKICMhY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX1hCTD0uKTogREVGSU5FUyArPSBFTkFCTEVfWEJMPTEKICFj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPS4pOiBERUZJTkVTICs9IEVOQUJMRV9XTUw9MAor
IWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YSFRNTE1QPS4pOiBERUZJTkVTICs9IEVOQUJMRV9Y
SFRNTE1QPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPS4pOiBERUZJTkVTICs9IEVO
QUJMRV9TVkc9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkdfRk9OVFM9Lik6IERFRklO
RVMgKz0gRU5BQkxFX1NWR19GT05UUz0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19G
SUxURVJTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9TVkdfRklMVEVSUz0xCkBAIC03NTUsNiArNzU2
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9IVE1MUHJlRWxlbWVudC5jcHAgXAogICAgIGh0
bWwvSFRNTFF1b3RlRWxlbWVudC5jcHAgXAogICAgIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3Bw
IFwKKyAgICBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcCBcCiAgICAgaHRt
bC9IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgXApAQCAtMTQ3NSw2ICsxNDc3LDEwIEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9XTUw9MSkgewogICAgIGFkZEV4dHJhQ29tcGlsZXJXaXRo
SGVhZGVyKHdtbG5hbWVzX2IpCiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YSFRNTE1Q
PTEpIHsKKyAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfWEhUTUxNUD0x
Cit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgIEZFQVRVUkVfREVG
SU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9TVkc9MQogCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
c2NvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnNjb25zCShyZXZpc2lvbiA0MDU2
MCkKKysrIFdlYkNvcmUvV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAtMjc1LDYgKzI3
NSw3IEBAIHNvdXJjZXNbJ2h0bWwnXSA9IFsKICAgICAnaHRtbC9IVE1MUHJlRWxlbWVudC5jcHAn
LAogICAgICdodG1sL0hUTUxRdW90ZUVsZW1lbnQuY3BwJywKICAgICAnaHRtbC9IVE1MU2NyaXB0
RWxlbWVudC5jcHAnLAorICAgICdodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwJywKICAgICAn
aHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAnLAogICAgICdodG1sL0hUTUxTb3VyY2VFbGVtZW50
LmNwcCcsCiAgICAgJ2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAnLApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5i
a2wJKHJldmlzaW9uIDQwNTYwKQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtp
bmcgY29weSkKQEAgLTU5Miw2ICs1OTIsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qg
b2YgZmlsZXMgbmVlCiAgICAgICAgIGh0bWwvSFRNTFByZUVsZW1lbnQuY3BwCiAgICAgICAgIGh0
bWwvSFRNTFF1b3RlRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5j
cHAKKyAgICAgICAgaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCiAg
ICAgICAgIGh0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQwNTYwKQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM3NzAsNiArMTM3
NzAsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxIVE1MTm9TY3JpcHRFbGVtZW50LmNwcCINCisJCQkJPg0KKwkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJ
CQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCVdob2xlUHJv
Z3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxI
VE1MTm9TY3JpcHRFbGVtZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTZWxlY3RFbGVtZW50LmNwcCINCiAJCQkJPg0K
IAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkluZGV4OiBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3Bw
CShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEzLDE0ICszMTMsMjIgQEAgUGFzc1JlZlB0cjxIVE1MRG9jdW1l
bnQ+IERPTUltcGxlbWVudGF0aQogUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRp
b246OmNyZWF0ZURvY3VtZW50KGNvbnN0IFN0cmluZyYgdHlwZSwgRnJhbWUqIGZyYW1lLCBib29s
IGluVmlld1NvdXJjZU1vZGUpCiB7CiAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUpIHsKLSAgICAg
ICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwr
eG1sIiB8fCB0eXBlID09ICJpbWFnZS9zdmcreG1sIiB8fCBpc1RleHRNSU1FVHlwZSh0eXBlKSB8
fCBpc1hNTE1JTUVUeXBlKHR5cGUpKQorICAgICAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8
fCB0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIHx8IHR5cGUgPT0gImltYWdlL3N2Zyt4
bWwiIHx8IGlzVGV4dE1JTUVUeXBlKHR5cGUpIHx8IGlzWE1MTUlNRVR5cGUodHlwZSkKKyNpZiBF
TkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIHx8IHR5cGUgPT0gImFwcGxpY2F0aW9uL3ZuZC53
YXAueGh0bWwreG1sIgorI2VuZGlmCisgICAgICAgICAgICkKICAgICAgICAgICAgIHJldHVybiBI
VE1MVmlld1NvdXJjZURvY3VtZW50OjpjcmVhdGUoZnJhbWUsIHR5cGUpOwogICAgIH0KIAogICAg
IC8vIFBsdWdpbnMgY2Fubm90IHRha2UgSFRNTCBhbmQgWEhUTUwgZnJvbSB1cywgYW5kIHdlIGRv
bid0IGV2ZW4gbmVlZCB0byBpbml0aWFsaXplIHRoZSBwbHVnaW4gZGF0YWJhc2UgZm9yIHRob3Nl
LgogICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiKQogICAgICAgICByZXR1cm4gSFRNTERvY3Vt
ZW50OjpjcmVhdGUoZnJhbWUpOwotICAgIGlmICh0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4
bWwiKQorICAgIGlmICh0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiCisjaWYgRU5BQkxF
KFhIVE1MTVApCisgICAgICAgIHx8IHR5cGUgPT0gImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwr
eG1sIgorI2VuZGlmCisgICAgICAgICkKICAgICAgICAgcmV0dXJuIERvY3VtZW50OjpjcmVhdGVY
SFRNTChmcmFtZSk7CiAKICNpZiBFTkFCTEUoV01MKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24g
NDA1NjApCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDYgKzcwLDkgQEAKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lmIEVOQUJMRShYSFRN
TE1QKQorI2luY2x1ZGUgIkhUTUxOb1NjcmlwdEVsZW1lbnQuaCIKKyNlbmRpZgogI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGl0bGVFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRUUFBhcnNlcnMuaCIKQEAgLTM3NCw2ICszNzcsMTAgQEAgRG9jdW1lbnQ6OkRvY3Vt
ZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogCiAgICAgc3RhdGljIGludCBkb2NJRCA9IDA7CiAg
ICAgbV9kb2NJRCA9IGRvY0lEKys7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgaWYgKHNldHRp
bmdzKCkpCisgICAgICAgIG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0RWxlbWVudCA9ICFzZXR0aW5n
cygpLT5pc0phdmFTY3JpcHRFbmFibGVkKCk7CisjZW5kaWYKIH0KIAogdm9pZCBEb2N1bWVudDo6
cmVtb3ZlZExhc3RSZWYoKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMyw2ICszMTMsMTEgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShXTUwpCiAgICAgdmlydHVhbCBib29sIGlzV01MRG9jdW1lbnQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgYm9v
bCBpc1hIVE1MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUw7IH0KKyAgICBib29s
IHNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBy
b2Nlc3NOb1NjcmlwdEVsZW1lbnQ7IH0KKyAgICB2b2lkIHNldFNob3VsZFByb2Nlc3NOb3Njcmlw
dEVsZW1lbnQoYm9vbCBzaG91bGREbykgeyBtX3Nob3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQg
PSBzaG91bGREbzsgfQorI2VuZGlmCiAgICAgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3Q7CiAgICAg
CiAgICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGVTZWxlY3RvcjsgfQpAQCAtOTU4LDYgKzk2MywxMCBAQCBwcml2YXRlOgogCiAgICAgU3Ry
aW5nIG1fY29udGVudExhbmd1YWdlOwogCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgYm9vbCBt
X3Nob3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQ7CisjZW5kaWYKKwogcHVibGljOgogICAgIGJv
b2wgaW5QYWdlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2luUGFnZUNhY2hlOyB9CiAgICAgdm9p
ZCBzZXRJblBhZ2VDYWNoZShib29sIGZsYWcpOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDQwNTYwKQorKysg
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDAsNyArMTIwMCw3IEBA
IHZvaWQgTm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgCiAgICAgUmVuZGVyT2Jq
ZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsKICAgICBpZiAocGFyZW50
UmVuZGVyZXIgJiYgcGFyZW50UmVuZGVyZXItPmNhbkhhdmVDaGlsZHJlbigpCi0jaWYgRU5BQkxF
KFNWRykKKyNpZiBFTkFCTEUoU1ZHKSB8fCBFTkFCTEUoWEhUTUxNUCkKICAgICAgICAgJiYgcGFy
ZW50LT5jaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKHRoaXMpCiAjZW5kaWYKICAgICAgICAgKSB7
CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9k
ZS5oCShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDE3LDcgKzQxNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZVJlbmRlcmVySWZO
ZWVkZWQoKTsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclJlbmRlcmVyKCk7
CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKLSNpZiBF
TkFCTEUoU1ZHKQorI2lmIEVOQUJMRShTVkcpIHx8IEVOQUJMRShYSFRNTE1QKQogICAgIHZpcnR1
YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAjZW5kaWYKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwpJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5p
emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCShyZXZp
c2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Miw2ICsxODIsMTEgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmVuZCgpCiAgICAgICAg
IGluc2VydEVycm9yTWVzc2FnZUJsb2NrKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGV4aXRUZXh0
KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIC8vIEFzIGZvciBYSFRNTE1QIGRvY3Vt
ZW50LCB3ZSBuZWVkbid0IHVwZGF0ZSB0aGUgc3R5bGUgc2VsZWN0b3IgaGVyZQorICAgICAgICAv
LyB0byBhdm9pZCB0aGUgbGF5b3V0IG9mIDxub3NjcmlwdD4gYXJlIGNoYW5nZWQgaW5jb3JyZWN0
bHkuCisgICAgICAgIGlmICghaXNYSFRNTE1QRG9jdW1lbnQoKSkKKyNlbmRpZgogICAgICAgICBt
X2RvYy0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwogICAgIH0KICAgICAKSW5kZXg6IFdlYkNvcmUv
ZG9tL1hNTFRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ci5oCShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3Vt
ZW50ID0gaXNYSFRNTDsgfQogICAgICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAg
IHZvaWQgc2V0SXNYSFRNTE1QRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1QRG9j
dW1lbnQgPSBpc1hIVE1MOyB9CisgICAgICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2lzWEhUTUxNUERvY3VtZW50OyB9CisjZW5kaWYKICNpZiBFTkFCTEUoV01M
KQogICAgICAgICBib29sIGlzV01MRG9jdW1lbnQoKSBjb25zdDsKICNlbmRpZgpAQCAtMTQ5LDYg
KzE1MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07CiAgICAg
ICAgIGJvb2wgbV9zYXdGaXJzdEVsZW1lbnQ7CiAgICAgICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1l
bnQ7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVu
dDsKKyAgICAgICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbjsKKyNlbmRpZgogCiAgICAg
ICAgIGJvb2wgbV9wYXJzZXJQYXVzZWQ7CiAgICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0
OwpJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHJldmlzaW9uIDQwNTYwKQor
KysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDEwIEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpZiBFTkFCTEUoWEhUTUxN
UCkKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5o
IgorI2VuZGlmCiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxU
b2tlbml6ZXIuaCIgLy8gZm9yIGRlY29kZU5hbWVkRW50aXR5CiAjaW5jbHVkZSAiUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmgiCkBAIC01MzAsNiArNTM0LDEwIEBAIFhNTFRva2VuaXplcjo6WE1MVG9r
ZW5pemVyKERvY3VtZW50KiBfZG8KICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQogICAg
ICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxz
ZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2Up
CisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgogICAgICwgbV9w
YXJzZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCiAgICAg
LCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTU1Myw2ICs1NjEsMTAgQEAgWE1MVG9rZW5pemVy
OjpYTUxUb2tlbml6ZXIoRG9jdW1lbnRGcmFnbQogICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFs
c2UpCiAgICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKICAgICAsIG1faXNYSFRNTERvY3Vt
ZW50KGZhbHNlKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICwgbV9pc1hIVE1MTVBEb2N1bWVu
dChmYWxzZSkKKyAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQorI2VuZGlmCiAg
ICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxz
ZSkKICAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQpAQCAtNzA3LDcgKzcxOSwxNSBAQCB2b2lk
IFhNTFRva2VuaXplcjo6c3RhcnRFbGVtZW50TnMoY29uc3QgCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCisjaWYgRU5BQkxFKFhIVE1MTVApIAorICAgIC8vY2hlY2sgdGhlIERPQ1RZUEUg
RGVjbGFyYXRpb24gb2YgWEhUTUxNUCBkb2N1bWVudAorICAgIGlmICghbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24gJiYgbV9kb2MtPmlzWEhUTUxEb2N1bWVudCgpKSB7CisgICAgICAgIGhhbmRsZUVy
cm9yKGZhdGFsLCAiVGhlIERPQ1RZUEUgZGVjbGFyYXRpb24gaXMgbWlzc2luZywgWEhUTUwgZXhw
ZWN0cyBpdC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbHNlCiAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworI2VuZGlmCiAK
ICAgICBleGl0VGV4dCgpOwogCkBAIC03MjEsNiArNzQxLDI1IEBAIHZvaWQgWE1MVG9rZW5pemVy
OjpzdGFydEVsZW1lbnROcyhjb25zdCAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdXJpID0g
bV9kZWZhdWx0TmFtZXNwYWNlVVJJOwogICAgIH0KKyAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAg
ICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIGlzWEhUTUxNUERvY3VtZW50KCkpIHsKKyAgICAg
ICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworIAorICAgICAgICAvLyBBcyBwZXIgdGhlIHNl
Y3Rpb24gNy4xIG9mIE9NQS1XQVAtWEhUTUxNUC1WMV8xLTIwMDYxMDIwLUEucGRmLCAKKyAgICAg
ICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByb290IGVsZW1lbnQgTVVTVCBiZSAn
aHRtbCcgYW5kIAorICAgICAgICAvLyBlbnN1cmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFt
ZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAnaHRtbCcgCisgICAgICAgIC8vIE1VU1QgYmUgJ2h0
dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnCisgICAgICAgIGlmIChsb2NhbE5hbWUgIT0gSFRN
TE5hbWVzOjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7CisgICAgICAgICAgICBoYW5kbGVFcnJvcihm
YXRhbCwgIlRoZSBYSFRNTE1QIGRvY3VtZW50J3Mgcm9vdCBlbGVtZW50IGlzIG5vdCBhICdodG1s
JyBlbGVtZW50LiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKHVyaS5pc051bGwoKSkgeworICAgICAgICAgICAg
bV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSTsgCisg
ICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCkKKyAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQg
PSB0cnVlOworI2VuZGlmCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBRdWFsaWZp
ZWROYW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwpAQCAtNzk3LDYgKzgzNiwxMiBA
QCB2b2lkIFhNTFRva2VuaXplcjo6ZW5kRWxlbWVudE5zKCkKICAgICBBU1NFUlQoIW1fcGVuZGlu
Z1NjcmlwdCk7CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKIAorI2lmIEVOQUJMRShY
SFRNTE1QKQorICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgIXN0YXRpY19jYXN0
PEhUTUxTY3JpcHRFbGVtZW50Kj4oc2NyaXB0RWxlbWVudCktPnNob3VsZEV4ZWN1dGVBc0phdmFT
Y3JpcHQoKSkKKyAgICAgICAgbV9kb2MtPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQo
dHJ1ZSk7CisgICAgZWxzZSB7CisjZW5kaWYKKwogICAgIFN0cmluZyBzY3JpcHRIcmVmID0gc2Ny
aXB0RWxlbWVudC0+c291cmNlQXR0cmlidXRlVmFsdWUoKTsKICAgICBpZiAoIXNjcmlwdEhyZWYu
aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRlIApAQCAtODEz
LDYgKzg1OCw5IEBAIHZvaWQgWE1MVG9rZW5pemVyOjplbmRFbGVtZW50TnMoKQogICAgIH0gZWxz
ZQogICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlw
dFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCks
IG1fc2NyaXB0U3RhcnRMaW5lKSk7CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICB9CisjZW5k
aWYKICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBzZXRDdXJyZW50Tm9kZShw
YXJlbnQuZ2V0KCkpOwogfQpAQCAtOTQwLDYgKzk4OCw5IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpz
dGFydERvY3VtZW50KGNvbnN0IHgKIHZvaWQgWE1MVG9rZW5pemVyOjplbmREb2N1bWVudCgpCiB7
CiAgICAgZXhpdFRleHQoKTsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBtX2hhc0RvY1R5cGVE
ZWNsYXJhdGlvbiA9IGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgWE1MVG9rZW5pemVyOjppbnRl
cm5hbFN1YnNldChjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElE
LCBjb25zdCB4bWxDaGFyKiBzeXN0ZW1JRCkKQEAgLTk1Myw4ICsxMDA0LDkgQEAgdm9pZCBYTUxU
b2tlbml6ZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IAogICAgIH0KICAgICAKICAgICBpZiAobV9k
b2MpIHsKLSNpZiBFTkFCTEUoV01MKQogICAgICAgICBTdHJpbmcgZXh0SWQgPSB0b1N0cmluZyhl
eHRlcm5hbElEKTsKKyAgICAgICAgU3RyaW5nIGR0ZE5hbWUgPSB0b1N0cmluZyhuYW1lKTsKKyNp
ZiBFTkFCTEUoV01MKQogICAgICAgICBpZiAoaXNXTUxEb2N1bWVudCgpCiAgICAgICAgICAgICAm
JiBleHRJZCAhPSAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4zLy9FTiIKICAgICAgICAgICAgICYm
IGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjIvL0VOIgpAQCAtOTYyLDggKzEwMTQs
MTggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IAogICAgICAgICAg
ICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMC8vRU4iKQogICAgICAgICAg
ICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERURCBQdWJsaWMgSUQiLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKICNlbmRpZgorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAg
ICBpZiAoKGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikK
KyAgICAgICAgICAgIHx8IChleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUg
MS4xLy9FTiIpKSB7CisgICAgICAgICAgICBpZiAoZHRkTmFtZSA9PSBIVE1MTmFtZXM6Omh0bWxU
YWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0
cnVlKTsKKyAgICAgICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIklu
dmFsaWQgRE9DVFlQRSBkZWNsYXJhdGlvbiwgWEhUTUxNUCBleHBlY3RzICdodG1sJyBhcyByb290
IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgIH0KKyNl
bmRpZgogCi0gICAgICAgIG1fZG9jLT5hZGRDaGlsZChEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2Rv
YywgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5nKGV4dGVybmFsSUQpLCB0b1N0cmluZyhzeXN0ZW1J
RCkpKTsKKyAgICAgICAgbV9kb2MtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9j
LCBkdGROYW1lLCBleHRJZCwgdG9TdHJpbmcoc3lzdGVtSUQpKSk7CiAgICAgfQogfQogCkBAIC0x
MTQyLDggKzEyMDQsNyBAQCBzdGF0aWMgdm9pZCBleHRlcm5hbFN1YnNldEhhbmRsZXIodm9pZCog
CiAgICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9F
TiIpCiAgICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4wLy9F
TiIpCiAgICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0
aE1MIDIuMC8vRU4iKQotICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEu
MSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBTVkcgMS4xLy9FTiIpCi0gICAgICAgIHx8IChleHRJZCA9
PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKQorICAgICAgICB8fCAo
ZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBTVkcg
MS4xLy9FTiIpKQogICAgICAgICBnZXRUb2tlbml6ZXIoY2xvc3VyZSktPnNldElzWEhUTUxEb2N1
bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGllcyBvciBub3QuCiB9
CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAJKHJldmlzaW9uIDQwNTYwKQorKysgV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMCBA
QAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNlbmRpZgogI2lu
Y2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAj
aW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCkBAIC04NSw2ICs4OSwxMCBAQCBYTUxU
b2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1bWVudCogX2RvCiAgICAgLCBtX3Nhd1hTTFRyYW5z
Zm9ybShmYWxzZSkKICAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hI
VE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxN
UERvY3VtZW50KGZhbHNlKQorICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisj
ZW5kaWYKICAgICAsIG1fcGFyc2VyUGF1c2VkKGZhbHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2Ny
aXB0KGZhbHNlKQogICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCkBAIC0xMTAsNiArMTE4LDEw
IEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKERvY3VtZW50RnJhZ20KICAgICAsIG1fc2F3
WFNMVHJhbnNmb3JtKGZhbHNlKQogICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAg
LCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1f
aXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihm
YWxzZSkKKyNlbmRpZgogICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVl
c3RpbmdTY3JpcHQoZmFsc2UpCiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTQxNiw5
ICs0MjgsMTggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlKCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVuZERvY3VtZW50OiB7CiAgICAgICAg
ICAgICBlbmREb2N1bWVudCgpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgbV9o
YXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpTdGFydEVsZW1lbnQ6
IHsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIGlmIChtX2RvYy0+aXNYSFRNTERv
Y3VtZW50KCkgJiYgIW1faGFzRG9jVHlwZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAg
aGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGlzIG1pc3NpbmcsIFhIVE1M
IGV4cGVjdHMgaXQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZW5kaWYgCiAgICAgICAgICAgICBwYXJzZVN0
YXJ0RWxlbWVudCgpOwogICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0Myw2ICs0
NjQsOSBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2UoKQogICAgICAgICBjYXNlIFFYbWxTdHJl
YW1SZWFkZXI6OkRURDogewogICAgICAgICAgICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0tLS0tLS0g
RFREIjsKICAgICAgICAgICAgIHBhcnNlRHRkKCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAg
ICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7CisjZW5kaWYKICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50
aXR5UmVmZXJlbmNlOiB7CkBAIC01MDcsNyArNTMxLDkgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBh
cnNlU3RhcnRFbGVtZW50KCkKICAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorI2lmICFFTkFCTEUoWEhUTUxNUCkKICAgICBtX3Nhd0ZpcnN0
RWxlbWVudCA9IHRydWU7CisjZW5kaWYKIAogICAgIGV4aXRUZXh0KCk7CiAKQEAgLTUyMCw2ICs1
NDYsMjYgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkKICAgICAgICAg
dXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwogICAgIH0KIAorI2lmIEVOQUJMRShYSFRNTE1Q
KQorICAgIGlmIChpc1hIVE1MTVBEb2N1bWVudCgpICYmICFtX3Nhd0ZpcnN0RWxlbWVudCkgewor
ICAgICAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisgCisgICAgICAgIC8vIEFzIHBlciA3
LjEgc2VjdGlvbiBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwgCisgICAg
ICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUg
J2h0bWwnIGFuZCAKKyAgICAgICAgLy8gZW5zdXJlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IG5h
bWVzcGFjZSBvbiB0aGUgcm9vdCBlbG1lbnQgJ2h0bWwnIAorICAgICAgICAvLyBNVVNUIGJlICdo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJworICAgICAgICBpZiAobG9jYWxOYW1lICE9IEhU
TUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgeworICAgICAgICAgICAgaGFuZGxlRXJyb3Io
ZmF0YWwsICJUaGUgWEhUTUxNUCBkb2N1bWVudCdzIHJvb3QgZWxlbWVudCBpcyBub3QgYSAnaHRt
bCcgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1cmkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAg
IG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkk7IAor
ICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOworICAgICAgICAgICAgbV9z
dHJlYW0uYWRkRXh0cmFOYW1lc3BhY2VEZWNsYXJhdGlvbihRWG1sU3RyZWFtTmFtZXNwYWNlRGVj
bGFyYXRpb24ocHJlZml4LCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKSk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCkKKyAgICAgICAgbV9zYXdGaXJz
dEVsZW1lbnQgPSB0cnVlOworI2VuZGlmCisKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwogICAgIFJlZlB0
cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUs
IGVjKTsKQEAgLTU3OCw2ICs2MjQsMTIgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxl
bWVudCgpCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTY3JpcHQpOwogICAgIG1fcmVxdWVzdGluZ1Nj
cmlwdCA9IHRydWU7CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAoZWxlbWVudC0+aXNI
VE1MRWxlbWVudCgpICYmICFzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KHNjcmlwdEVs
ZW1lbnQpLT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCisgICAgICAgIG1fZG9jLT5zZXRT
aG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworICAgIGVsc2UgeworI2VuZGlmCisK
ICAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNvdXJjZUF0dHJpYnV0ZVZh
bHVlKCk7CiAgICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgewogICAgICAgICAvLyB3ZSBo
YXZlIGEgc3JjIGF0dHJpYnV0ZSAKQEAgLTU5NCw2ICs2NDYsOSBAQCB2b2lkIFhNTFRva2VuaXpl
cjo6cGFyc2VFbmRFbGVtZW50KCkKICAgICB9IGVsc2UKICAgICAgICAgbV92aWV3LT5mcmFtZSgp
LT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQt
PnNjcmlwdENvbnRlbnQoKSwgbV9kb2MtPnVybCgpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOwogCisj
aWYgRU5BQkxFKFhIVE1MTVApCisgICAgfQorI2VuZGlmCiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0
ID0gZmFsc2U7CiAgICAgc2V0Q3VycmVudE5vZGUocGFyZW50LmdldCgpKTsKIH0KQEAgLTc0OSwx
MCArODA0LDE5IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpwYXJzZUR0ZCgpCiAgICAgICAgIHx8IChw
dWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjAgRnJhbWVzZXQv
L0VOIikpCiAgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RU
RCBYSFRNTCBCYXNpYyAxLjAvL0VOIikpCiAgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4x
U3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpKQotICAg
ICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgMS4x
IHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIikpCi0gICAgICAgIHx8IChwdWJsaWNJ
ZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VO
IikpKSB7CisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RU
RCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBsdXMgU1ZHIDEuMS8vRU4iKSkpIHsKICAgICAg
ICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVu
dGl0aWVzIG9yIG5vdC4KICAgICB9CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgZWxzZSBpZiAo
KHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxl
IDEuMS8vRU4iKSkKKyAgICAgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCIt
Ly9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpKSB7CisgICAgICAgIGlmIChB
dG9taWNTdHJpbmcobmFtZSkgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7Cisg
ICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkludmFsaWQgRE9DVFlQRSBkZWNsYXJhdGlv
biwgWEhUTUxNUCBleHBlY3RzICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigp
LCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7CisgICAgfQorI2VuZGlmCiAj
aWYgRU5BQkxFKFdNTCkKICAgICBlbHNlIGlmIChtX2RvYy0+aXNXTUxEb2N1bWVudCgpCiAgICAg
ICAgICAgICAgJiYgcHVibGljSWQgIT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4zLy9FTiIpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwNTYwKQorKysg
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg0LDExICs5
ODQsMTMgQEAgYm9vbCBIVE1MRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbgogICAgIAog
Ym9vbCBIVE1MRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpCiB7
CisjaWYgIUVOQUJMRShYSFRNTE1QKQogICAgIGlmIChoYXNMb2NhbE5hbWUobm9zY3JpcHRUYWcp
KSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7
CiAgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyNlbmRpZgogICAgIHJldHVybiAo
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcykgfHwgKHN0eWxlLT5kaXNwbGF5
KCkgIT0gTk9ORSk7CiB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRGYWN0
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNw
cAkocmV2aXNpb24gNDA1NjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQAogI2luY2x1ZGUgIkhUTUxNZXRhRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxNb2RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVudC5o
IgorI2VuZGlmCiAjaW5jbHVkZSAiSFRNTE9MaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxP
YmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgpAQCAtMzMz
LDYgKzMzNiwxMyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gc2NyaXB0Q29uCiAg
ICAgcmV0dXJuIG5ldyBIVE1MU2NyaXB0RWxlbWVudChzY3JpcHRUYWcsIGRvYywgY3JlYXRlZEJ5
UGFyc2VyKTsKIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorc3RhdGljIFBhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IG5vc2NyaXB0Q29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAg
IHJldHVybiBuZXcgSFRNTE5vU2NyaXB0RWxlbWVudChub3NjcmlwdFRhZywgZG9jKTsKK30KKyNl
bmRpZgorCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gdGFibGVDb25zdHJ1Y3Rvcihj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9v
bCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUVsZW1lbnQodGFibGVUYWcsIGRvYyk7CkBA
IC00NzAsNiArNDgwLDkgQEAgc3RhdGljIHZvaWQgY3JlYXRlRnVuY3Rpb25NYXAoKQogICAgIGFk
ZFRhZyhwcmVUYWcsIHByZUNvbnN0cnVjdG9yKTsKICAgICBhZGRUYWcocVRhZywgcXVvdGVDb25z
dHJ1Y3Rvcik7CiAgICAgYWRkVGFnKHNjcmlwdFRhZywgc2NyaXB0Q29uc3RydWN0b3IpOworI2lm
IEVOQUJMRShYSFRNTE1QKQorICAgIGFkZFRhZyhub3NjcmlwdFRhZywgbm9zY3JpcHRDb25zdHJ1
Y3Rvcik7CisjZW5kaWYKICAgICBhZGRUYWcoc2VsZWN0VGFnLCBzZWxlY3RDb25zdHJ1Y3Rvcik7
CiAgICAgYWRkVGFnKHN0eWxlVGFnLCBzdHlsZUNvbnN0cnVjdG9yKTsKICAgICBhZGRUYWcodGFi
bGVUYWcsIHRhYmxlQ29uc3RydWN0b3IpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxOb1Njcmlw
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFhIVE1M
TVApCisjaW5jbHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVudC5oIgorCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworSFRNTE5vU2NyaXB0RWxlbWVudDo6SFRN
TE5vU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQoreworICAgIEFTU0VSVChoYXNU
YWdOYW1lKG5vc2NyaXB0VGFnKSk7Cit9CisKK0hUTUxOb1NjcmlwdEVsZW1lbnQ6On5IVE1MTm9T
Y3JpcHRFbGVtZW50KCkKK3sKK30KKworYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGVja0RU
RChjb25zdCBOb2RlKiBuZXdDaGlsZCkKK3sKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5v
ZGUoKSB8fCBpbkJsb2NrVGFnTGlzdChuZXdDaGlsZCk7IAorfQorCit2b2lkIEhUTUxOb1Njcmlw
dEVsZW1lbnQ6OmF0dGFjaCgpCit7CisgICAgQVNTRVJUKCFyZW5kZXJlcigpKTsKKyAgICAvLyBJ
biBvcmRlciB0byBtYWtlIHRoZSBjb250ZW50IHdpdGhpbiBub3NjcmlwdCBub2RlIHZpc2libGUs
CisgICAgLy8gd2Ugc2hvdWxkIGF0dGFjaCByZW5kZXIgb2JqZWN0IHRvIG5vc2NyaXB0IG5vZGUs
IHRoZW4gaXRzIGNoaWxkcmVuIAorICAgIC8vIGNhbiBzaGFyZSBpdHMgcmVuZGVyIHN0eWxlIHRv
IGNyZWF0ZSB0aGVpciBvd24gcmVuZGVyIG9iamVjdHMKKyAgICBSZWZQdHI8Tm9kZT4gcGFyZW50
ID0gdGhpczsKKyAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gMDsKKyAgICB3aGls
ZShwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZihwYXJlbnRSZW5k
ZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOworCisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHls
ZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBzdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50
UmVuZGVyZXItPnN0eWxlKCkpOworCisgICAgUmVuZGVyT2JqZWN0KiBybyA9IGNyZWF0ZVJlbmRl
cmVyKHBhcmVudFJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7CisgICAgaWYg
KHJvKSB7CisgICAgICAgIHNldFJlbmRlcmVyKHJvKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+c2V0
U3R5bGUoc3R5bGUpOworICAgICAgICBwYXJlbnRSZW5kZXJlci0+YWRkQ2hpbGQocmVuZGVyZXIo
KSwgbmV4dFJlbmRlcmVyKCkpOworICAgIH0KKworICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgp
OworCisgICAgLy8gSWYgbm8gbmVlZCB0byBwcm9jZXNzIDxub3NjcmlwdD4sIHdlIGhpZGUgaXQK
KyAgICBpZiAoIWRvY3VtZW50KCktPnNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSkgewor
ICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShOT05FKTsKKyAgICAgICAgc2V0Q2hhbmdlZCgpOwor
ICAgIH0KK30KKwordm9pZCBIVE1MTm9TY3JpcHRFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNo
YW5nZSBjaGFuZ2UpCit7CisgICAgaWYgKCFkb2N1bWVudCgpLT5zaG91bGRQcm9jZXNzTm9zY3Jp
cHRFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIDxub3NjcmlwdD4gbmVl
ZHMgcHJvY2Vzc2luZywgd2UgbWFrZSBpdCB2aXNpYWJsZSBoZXJlLgorICAgIEFTU0VSVChyZW5k
ZXJlcigpKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5
bGUoKTsgCisgICAgQVNTRVJUKHN0eWxlKTsKKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBO
T05FKSB7CisgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORSk7CisKKyAgICAgICAgLy8g
Y3JlYXRlIHJlbmRlcmVycyBmb3IgaXRzIGNoaWxkcmVuCisgICAgICAgIGlmIChoYXNDaGlsZE5v
ZGVzKCkpIHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcm8gPSAgMDsKKworICAgICAgICAg
ICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9k
ZSh0aGlzKSkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPnJlbmRlcmVyKCkpCisgICAgICAgICAg
ICAgICAgICAgIG4tPmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVy
KE5vZGUqIGNoaWxkKSBjb25zdAoreworICAgIHJldHVybiBkb2N1bWVudCgpLT5zaG91bGRQcm9j
ZXNzTm9zY3JpcHRFbGVtZW50KCk7Cit9CisKK30KKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxOb1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE5v
U2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0hUTUxOb1Njcmlw
dEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBIVE1MTm9TY3JpcHRFbGVtZW50X2gK
KyNkZWZpbmUgSFRNTE5vU2NyaXB0RWxlbWVudF9oCisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhU
TUxOb1NjcmlwdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworcHVibGljOgorICAgIEhU
TUxOb1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAg
fkhUTUxOb1NjcmlwdEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25z
dCBOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRl
cmVyKE5vZGUqKSBjb25zdDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTFBhcnNlci5jcHAJKHJldmlzaW9uIDQwNTYwKQorKysgV2ViQ29yZS9odG1sL0hU
TUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjksNyArODY5LDkgQEAgUGFzc1JlZlB0
cjxOb2RlPiBIVE1MUGFyc2VyOjpnZXROb2RlKFRvawogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0
KG5vYnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJy
b3JDaGVjayk7CiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQobm9lbWJlZFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICZIVE1MUGFyc2VyOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgICAg
IGdGdW5jdGlvbk1hcC5zZXQobm9mcmFtZXNUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBh
cnNlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKTsKKyNpZiAhRU5BQkxFKFhIVE1MTVApCiAg
ICAgICAgIGdGdW5jdGlvbk1hcC5zZXQobm9zY3JpcHRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAm
SFRNTFBhcnNlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyNlbmRpZgogICAgICAgICBn
RnVuY3Rpb25NYXAuc2V0KG9sVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OnBD
bG9zZXJDcmVhdGVFcnJvckNoZWNrKTsKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChwVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OnBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKTsK
ICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChwbGFpbnRleHRUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAmSFRNTFBhcnNlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9r
ZW5pemVyLmNwcAkocmV2aXNpb24gNDA1NjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXpl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSw2ICs0NTUsMTAgQEAgSFRNTFRva2VuaXplcjo6
U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAgICAgICAgICAgfSBlbHNlCiAjZW5kaWYKICAg
ICAgICAgICAgIGRvU2NyaXB0RXhlYyA9IG1fc2NyaXB0Tm9kZS0+c2hvdWxkRXhlY3V0ZUFzSmF2
YVNjcmlwdCgpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgaWYgKCFkb1Njcmlw
dEV4ZWMpCisgICAgICAgICAgICAgICAgbV9kb2MtPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVs
ZW1lbnQodHJ1ZSk7CisjZW5kaWYKICAgICAgICAgICAgIG1fc2NyaXB0Tm9kZSA9IDA7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xOTg0LDYgKzE5ODgsMTAgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpu
b3RpZnlGaW5pc2hlZChDYWNoZQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KG4uZ2V0KCkpLT5zaG91bGRFeGVjdXRlQXNKYXZh
U2NyaXB0KCkpCiAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHNjcmlwdEV4ZWN1dGlvbihzb3Vy
Y2VDb2RlLCBtX3N0YXRlKTsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0
cnVlKTsKKyNlbmRpZgogICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChuLmdldCgpKS0+
ZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNl
KTsKICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA0MDU2
MCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA2NCw2ICsxMDY0LDE1IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmVuZElmTm90TG9hZGluZ01haW5S
ZXMKICAgICBpZiAobV9pc0xvYWRpbmdNYWluUmVzb3VyY2UgfHwgIW1fZnJhbWUtPnBhZ2UoKSkK
ICAgICAgICAgcmV0dXJuOwogCisjaWYgUExBVEZPUk0oUVQpICYmIEVOQUJMRShYSFRNTE1QKQor
ICAgIC8vIEZJWE1FOiBRdCBpcyBmbGF3ZWQKKyAgICAvLyBUaGlzIGhhY2tpbmcgaXMgZm9yIGZp
eGluZyBvbmUgYnVnIG9mIGphdmFzcmNpcHQgaW4gWEhUTUxNUCBkb2N1bWVudCwgCisgICAgLy8g
aS5lOiBpZiBhbGVydCgpIG1ldGhvZCBpcyBjb250YWluZWQgZGlyZWN0bHkgaW4gPHNjcmlwdD4g
ZWxlbWVudCwgCisgICAgLy8gaXQgd2lsbCBjYXVzZSBRdExhdW5jaGVyIGNyYXNoIHdoZW4gZnJh
bWUgbG9hZGVyIGV4ZWN1dGUgaXQuCisgICAgaWYgKG1faXNSdW5uaW5nU2NyaXB0ICYmIG1fZnJh
bWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNYSFRNTERvY3VtZW50KCkp
CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA4NTQKICAgICAvLyBUaGUgZnJhbWUncyBsYXN0IHJlZiBtYXkg
YmUgcmVtb3ZlZCBhbmQgaXQgY2FuIGJlIGRlbGV0ZWQgYnkgY2hlY2tDb21wbGV0ZWQoKSwgCiAg
ICAgLy8gc28gd2UnbGwgYWRkIGEgcHJvdGVjdGl2ZSByZWZjb3VudApAQCAtMzYwNSw3ICszNjE0
LDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmFkZEV4dHJhRmllbGRzVG9SZXF1ZXMKICAgICB9CiAg
ICAgCiAgICAgaWYgKG1haW5SZXNvdXJjZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAg
cmVxdWVzdC5zZXRIVFRQQWNjZXB0KCJhcHBsaWNhdGlvbi94bWwsYXBwbGljYXRpb24vdm5kLndh
cC54aHRtbCt4bWwsYXBwbGljYXRpb24veGh0bWwreG1sO3Byb2ZpbGU9J2h0dHA6Ly93d3cud2Fw
Zm9ydW0ub3JnL3hodG1sJyx0ZXh0L2h0bWw7cT0wLjksdGV4dC9wbGFpbjtxPTAuOCxpbWFnZS9w
bmcsKi8qO3E9MC41Iik7CisjZWxzZQogICAgICAgICByZXF1ZXN0LnNldEhUVFBBY2NlcHQoImFw
cGxpY2F0aW9uL3htbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsdGV4dC9odG1sO3E9MC45LHRleHQv
cGxhaW47cT0wLjgsaW1hZ2UvcG5nLCovKjtxPTAuNSIpOworI2VuZGlmCiAKICAgICAvLyBNYWtl
IHN1cmUgd2Ugc2VuZCB0aGUgT3JpZ2luIGhlYWRlci4KICAgICBhZGRIVFRQT3JpZ2luSWZOZWVk
ZWQocmVxdWVzdCwgU3RyaW5nKCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0
cnkuY3BwCShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsOSBAQCBzdGF0aWMgdm9pZCBp
bml0aWFsaXplU3VwcG9ydGVkTm9uSW1hZ2VNCiAgICAgICAgICJ0ZXh0LyIsCiAgICAgICAgICJh
cHBsaWNhdGlvbi94bWwiLAogICAgICAgICAiYXBwbGljYXRpb24veGh0bWwreG1sIiwKKyNpZiBF
TkFCTEUoWEhUTUxNUCkKKyAgICAgICAgImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwreG1sIiwK
KyNlbmRpZgogICAgICAgICAiYXBwbGljYXRpb24vcnNzK3htbCIsCiAgICAgICAgICJhcHBsaWNh
dGlvbi9hdG9tK3htbCIsCiAjaWYgRU5BQkxFKFNWRykKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQwNjA3
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMDktMDItMDMgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNobW9iaWxlLmNvbS5j
bj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZh
c3QveGh0bWxtcDogQWRkZWQuCisgICAgICAgICogZmFzdC94aHRtbG1wL2NoZWNrLWRvY3R5cGUt
ZGVjbGFyYXRpb24ueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QveGh0bWxtcC9jaGVjay1y
b290ZWxlbWVudC54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC94aHRtbG1wL25vc2NyaXB0
LWluLW11bHRpc2NyaXB0cy54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC94aHRtbG1wL25v
c2NyaXB0LW5lc3RlZC54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC94aHRtbG1wL25vc2Ny
aXB0LnhodG1sOiBBZGRlZC4KKwogMjAwOS0wMi0wMyAgQnJhZCBHYXJjaWEgIDxiZ2FyY2lhQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stZG9jdHlwZS1kZWNsYXJhdGlvbi54aHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stZG9jdHlwZS1kZWNsYXJh
dGlvbi54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9jaGVj
ay1kb2N0eXBlLWRlY2xhcmF0aW9uLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhLS0KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8v
V0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0u
b3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiPgorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IGRvY3VtZW50IGNvbmZv
cm1hbmNlIG9mIFhIVE1MTVA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnIj4KKzxwPiBicm93c2VyIHNob3VsZCByZXBvcnQgRE9DVFlQRSBkZWNsYXJhdGlv
biBsb3NlIGVycm9yIDwvcD4KKzxoci8+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stcm9vdGVsZW1lbnQueGh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL2NoZWNrLXJvb3RlbGVtZW50LnhodG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL2NoZWNrLXJvb3RlbGVtZW50LnhodG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwh
RE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9F
TiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiPgorCis8
YW55IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxl
PlRlc3QgZG9jdW1lbnQgY29uZm9ybWFuY2Ugb2YgWEhUTUxNUDwvdGl0bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwPiBUaGlzIGlzIEJPRFkgPC9wPgorPC9ib2R5PgorPC9hbnk+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQtaW4tbXVsdGlzY3JpcHRzLnhodG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1pbi1tdWx0aXNjcmlw
dHMueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3Jp
cHQtaW4tbXVsdGlzY3JpcHRzLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0IEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0v
L0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94
aHRtbC1tb2JpbGUxMC5kdGQiPgorCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCI+Cis8aGVhZD4KKzx0aXRsZT4gVGVzdCBub3NjcmlwdCBpbiBtdWxpdHBsZSBzY3Jp
cHQgZWxlbWVudHMgPC90aXRsZT4KKzxub3NjcmlwdD4KKzxoMT4mbHQ7aDEmZ3Q7MXN0IG5vc2Ny
aXB0IGVsZW1lbnQgaW4gSEVBRDwvaDE+CitwbGFpbiB0ZXh0IGluIG5vc2NyaXB0Cis8L25vc2Ny
aXB0PgorCis8c2NyaXB0IHR5cGU9InRleHQvd3Jvbmd0eXBlIj4KKyAgICBhbGVydCgidGhlIGZp
cnN0IHNjcmlwdCIpOworPC9zY3JpcHQ+CisKKzxub3NjcmlwdD4KKzxoMj4gJmx0O2gyJmd0OzJu
ZCBub3NjcmlwdCBlbGVtZW50IGluIEhFQUQ8L2gyPgorPGhyLz4KKzwvbm9zY3JpcHQ+CisKKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGZ1bigpIHsKKyAgICBhbGVy
dCgidGhlIHNlY29uZCBzY3JpcHQiKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4g
Cis8YSBocmVmPSJqYXZhc2NyaXB0OmZ1bigpIj4gY2xpa2UgbWUgdG8gZXhlY3V0ZSBqYXZhc2Ny
aXB0IGNvZGU8L2E+Cis8bm9zY3JpcHQ+Cis8aDM+Jmx0O2gzJmd0OzNyZCBub3NjcmlwdCBlbGVt
ZW50IGluIEJPRFk8L2gzPgorPC9ub3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1uZXN0ZWQueGh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LW5lc3RlZC54aHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1uZXN0ZWQueGh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFE
T0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VO
IiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCI+CisKKzxo
dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxl
PiBUZXN0IG5lc3RlZC1ub3NjcmlwdCAgZWxlbWVudCBpbiBYSFRNTE1QIDwvdGl0bGU+Cis8c2Ny
aXB0IHR5cGU9InRleHQvYW55dGhpbmciPgorYWxlcnQoIllvdSB3aWxsIHNlZSBtZSBpZiB0aGUg
c2NyaXB0aW5nIGxhbmd1YWdlIGlkZW50aWZpZWQgYnkgdGhlIHR5cGUgb2Ygc2NyaXB0IGVsZW1l
bnQgaXMgc3VwcG9ydGVkIik7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8cD4gVGVz
dCBmb3IgbmVzdGVkLW5vc2NyaXB0IGVsZW1lbnQgaW4gWEhUTUxNUCA8L3A+Cis8cD4gSWYgdGhl
IHRlc3QgcGFzc2VzLCB5b3Ugd2lsbCBzZWUgdGhlIGZvbGxvd2luZyB0aHJlZSBuZXN0ZWQgbm9z
Y3JpcHQgdGV4dCwgb3RoZXJ3aXNlLCB5b3Ugd2lsbCBzZWUgdGhlIGFsZXJ0IHdpbmRvdy48L3A+
Cis8bm9zY3JpcHQ+Cis8aDE+Zmlyc3Qgbm9zY3JpcHQgZWxlbWVudCBpbiBCT0RZPC9oMT4KKzxu
b3NjcmlwdD4KKzxoMj4ybmQgbm9zY3JpcHQgZWxlbWVudCBpbiBCT0RZPC9oMj4KKzxub3Njcmlw
dD4KKzxoMz4zcmQgbm9zY3JpcHQgZWxlbWVudCBpbiBCT0RZPC9oMz4KKzwvbm9zY3JpcHQ+Cis8
bm9zY3JpcHQ+Cis8aDU+NHRoIG5vc2NyaXB0IGVsZW1lbnQgaW4gQk9EWTwvaDU+Cis8L25vc2Ny
aXB0PgorPC9ub3NjcmlwdD4KKzwvbm9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQueGh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIgImh0dHA6Ly93d3cud2FwZm9y
dW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiPgorCis8aHRtbCB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzx0aXRsZT4gVGVzdCBub3NjcmlwdCBlbGVt
ZW50IGluIFhIVE1MTVAgZG9jdW1lbnQgPC90aXRsZT4KKzxub3NjcmlwdD4KKzxoMT5UaGUgZmly
c3Qgbm9zY3JpcHQgZWxlbWVudCBpbiBIRUFEPC9oMT4KKzwvbm9zY3JpcHQ+CisKKzxzY3JpcHQg
dHlwZT0idGV4dC9hbnl0aGluZyI+CithbGVydCgiWW91IHdpbGwgc2VlIG1lIGlmIHRoZSBzY3Jp
cHRpbmcgbGFuZ3VhZ2UgaWRlbnRpZmllZCBieSB0aGUgdHlwZSBvZiBzY3JpcHQgZWxlbWVudCBp
cyBzdXBwb3J0ZWQiKTsKKzwvc2NyaXB0PgorCis8bm9zY3JpcHQ+Cis8aDI+VGhlIHNlY29uZCBu
b3NjcmlwdCBlbGVtZW50IGluIEhFQUQ8L2gyPgorPC9ub3NjcmlwdD4KKzwvaGVhZD4KKworPGJv
ZHk+Cis8bm9zY3JpcHQ+Cis8aDI+VGhlIHRoaXJkIG5vc2NyaXB0IGVsZW1lbnQgaW4gQk9EWTwv
aDI+Cis8L25vc2NyaXB0PgorPHA+IFRlc3QgZm9yIG5vc2NyaXB0IGVsZW1lbnQgaW4gWEhUTUxN
UCA8L3A+Cis8cD4gSWYgdGhlIHRlc3QgcGFzc2VzLCB5b3UgY2FuIHNlZSB0aGUgbm9zY3JpcHQg
dGV4dCBhYm92ZTwvcD4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>
<flag name="review"
          id="13170"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27342</attachid>
            <date>2009-02-04 23:15:56 -0800</date>
            <delta_ts>2009-02-11 05:36:44 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>addxhtmlmpsupport.v3.patch</filename>
            <type>text/plain</type>
            <size>41374</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDY2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMDktMDItMDQgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgWEhUTUxNUCBzdXBwb3J0IHRvIFdlYmtpdAorICAgICAgICBYSFRNTE1QIGlz
IGEgc3RyaWN0IHN1YnNldCBvZiBYSFRNTCAxLjEuIEl0IGV4dGVuZHMgWEhUTUwgQmFzaWMgYW5k
IGFkZCBlbmhhbmNlZCAKKyAgICAgICAgZnVuY3Rpb25hbGl0eS4gTW9zdCBvZiB0aGUgZnVuY3Rp
b25hbGl0aWVzIGhhdmUgYWxyZWFkeSBiZWVuIGltcGxlbWVudGVkIGJ5IFdlYmtpdC4KKyAgICAg
ICAgVGhlIGNoYW5nZXMgaW5jbHVkaW5nOgorICAgICAgICAxKSBBZGRpbmcgPG5vc2NyaXB0PiBz
dXBwb3J0CisgICAgICAgIDIpIERvY3VtZW50IGNvbmZvcm1hbmNlIHZhbGlkYXRpb24KKyAgICAg
ICAgMykgVXNlciBBZ2VudCBjb25mb3JtYW5jZSB2YWxpZGF0aW9uIAorICAgICAgICByZWZlciB0
byB0aGUgc3BlY2lmaWNhdGlvbjogT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYK
KworICAgICAgICBUZXN0czogZmFzdC94aHRtbG1wL2NoZWNrLWRvY3R5cGUtZGVjbGFyYXRpb24u
eGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54aHRt
bAorICAgICAgICAgICAgICAgZmFzdC94aHRtbG1wL25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54
aHRtbAorICAgICAgICAgICAgICAgZmFzdC94aHRtbG1wL25vc2NyaXB0LW5lc3RlZC54aHRtbAor
ICAgICAgICAgICAgICAgZmFzdC94aHRtbG1wL25vc2NyaXB0LnhodG1sCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnNjb25zOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojppc1hIVE1MTVBEb2N1
bWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCk6CisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRl
ZCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6ZW5kKToKKyAgICAgICAgKiBkb20v
WE1MVG9rZW5pemVyLmg6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnNldElzWEhU
TUxNUERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6aXNYSFRNTE1Q
RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTFRva2VuaXplcjo6c3RhcnRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
VG9rZW5pemVyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVy
OjplbmREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OmludGVybmFs
U3Vic2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEVudGl0eUhhbmRsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6ZXh0ZXJuYWxTdWJzZXRIYW5kbGVyKToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5p
emVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpYTUxUb2tlbml6ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpwYXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxUb2tlbml6ZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTFRva2VuaXplcjo6cGFyc2VFbmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oik6Cisg
ICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudDo6cmVuZGVyZXJJc05lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudEZhY3Rv
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9zY3JpcHRDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGdW5jdGlvbk1hcCk6CisgICAgICAgICogaHRtbC9IVE1MTm9TY3Jp
cHRFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVt
ZW50OjpIVE1MTm9TY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1Njcmlw
dEVsZW1lbnQ6On5IVE1MTm9TY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxO
b1NjcmlwdEVsZW1lbnQ6OmNoZWNrRFREKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1Njcmlw
dEVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50
OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50Ojpj
aGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxOb1NjcmlwdEVs
ZW1lbnQuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9IVE1MUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQYXJzZXI6OmdldE5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRva2Vu
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpzY3JpcHRIYW5kbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmVuZElmTm90TG9hZGluZ01haW5SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVN1cHBv
cnRlZE5vbkltYWdlTWltZVR5cGVzKToKKwogMjAwOS0wMi0wNCAgVG9yIEFybmUgVmVzdGLDuCAg
PHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQwNTYwKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkod29ya2luZyBjb3B5KQpAQCAtOTQ1LDYgKzk0NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9odG1sL0hUTUxRdW90ZUVsZW1lbnQuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxT
Y3JpcHRFbGVtZW50LmNwcCBcCiAJV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmggXAor
CVdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcCBcCisJV2ViQ29yZS9odG1sL0hU
TUxOb1NjcmlwdEVsZW1lbnQuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNw
cCBcCiAJV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmggXAogCVdlYkNvcmUvaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQwNTYwKQorKysgV2ViQ29yZS9X
ZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw3IEBAIENPTkZJRyhRVERJ
Ul9idWlsZCkgewogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YUEFUSD0uKTogREVGSU5FUyAr
PSBFTkFCTEVfWFBBVEg9MQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEJMPS4pOiBERUZJ
TkVTICs9IEVOQUJMRV9YQkw9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XTUw9Lik6IERF
RklORVMgKz0gRU5BQkxFX1dNTD0wCishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hIVE1MTVA9
Lik6IERFRklORVMgKz0gRU5BQkxFX1hIVE1MTVA9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9TVkc9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWRz0xCiAhY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1NWR19GT05UUz0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0ZPTlRTPTEKICFjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfU1ZHX0ZJTFRFUlM9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWR19G
SUxURVJTPTEKQEAgLTc1NSw2ICs3NTYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1sL0hUTUxQ
cmVFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MUXVvdGVFbGVtZW50LmNwcCBcCiAgICAgaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5jcHAgXAorICAgIGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5j
cHAgXAogICAgIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxTdHls
ZUVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcCBcCkBA
IC0xNDc1LDYgKzE0NzcsMTAgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dNTD0xKSB7CiAg
ICAgYWRkRXh0cmFDb21waWxlcldpdGhIZWFkZXIod21sbmFtZXNfYikKIH0KIAorY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1hIVE1MTVA9MSkgeworICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NS
SVBUICs9IEVOQUJMRV9YSFRNTE1QPTEKK30KKwogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NW
Rz0xKSB7CiAgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1NWRz0xCiAK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5zY29ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUuc2NvbnMJKHJldmlzaW9uIDQwNTYwKQorKysgV2ViQ29yZS9XZWJDb3JlLnNjb25zCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzUsNiArMjc1LDcgQEAgc291cmNlc1snaHRtbCddID0gWwogICAgICdo
dG1sL0hUTUxQcmVFbGVtZW50LmNwcCcsCiAgICAgJ2h0bWwvSFRNTFF1b3RlRWxlbWVudC5jcHAn
LAogICAgICdodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcCcsCisgICAgJ2h0bWwvSFRNTE5vU2Ny
aXB0RWxlbWVudC5jcHAnLAogICAgICdodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcCcsCiAgICAg
J2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwJywKICAgICAnaHRtbC9IVE1MU3R5bGVFbGVtZW50
LmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24gNDA1NjApCisrKyBXZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtNTkyLDYgKzU5Miw3IEBAIFRoaXMg
ZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgaHRtbC9IVE1MUHJl
RWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MUXVvdGVFbGVtZW50LmNwcAogICAgICAgICBo
dG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAorICAgICAgICBodG1sL0hUTUxOb1NjcmlwdEVsZW1l
bnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwv
SFRNTFN0eWxlRWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxlbWVu
dC5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDA1NjApCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzc3MCw2ICsxMzc3MCwyMiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxOb1NjcmlwdEVsZW1lbnQuY3BwIgor
CQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2lu
MzIiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiCisJCQkJCS8+CisJCQkJPC9GaWxl
Q29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxodG1sXEhUTUxOb1NjcmlwdEVsZW1lbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MU2VsZWN0RWxlbWVudC5jcHAiCiAJCQkJ
PgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNw
cAkocmV2aXNpb24gNDA1NjApCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMywxNCArMzEzLDIyIEBAIFBhc3NSZWZQdHI8SFRNTERvY3Vt
ZW50PiBET01JbXBsZW1lbnRhdGkKIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0
aW9uOjpjcmVhdGVEb2N1bWVudChjb25zdCBTdHJpbmcmIHR5cGUsIEZyYW1lKiBmcmFtZSwgYm9v
bCBpblZpZXdTb3VyY2VNb2RlKQogewogICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKSB7Ci0gICAg
ICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiIHx8IHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1s
K3htbCIgfHwgdHlwZSA9PSAiaW1hZ2Uvc3ZnK3htbCIgfHwgaXNUZXh0TUlNRVR5cGUodHlwZSkg
fHwgaXNYTUxNSU1FVHlwZSh0eXBlKSkKKyAgICAgICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIg
fHwgdHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwreG1sIiB8fCB0eXBlID09ICJpbWFnZS9zdmcr
eG1sIiB8fCBpc1RleHRNSU1FVHlwZSh0eXBlKSB8fCBpc1hNTE1JTUVUeXBlKHR5cGUpCisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi92bmQu
d2FwLnhodG1sK3htbCIKKyNlbmRpZgorICAgICAgICAgICApCiAgICAgICAgICAgICByZXR1cm4g
SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6Y3JlYXRlKGZyYW1lLCB0eXBlKTsKICAgICB9CiAKICAg
ICAvLyBQbHVnaW5zIGNhbm5vdCB0YWtlIEhUTUwgYW5kIFhIVE1MIGZyb20gdXMsIGFuZCB3ZSBk
b24ndCBldmVuIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Z2luIGRhdGFiYXNlIGZvciB0aG9z
ZS4KICAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIikKICAgICAgICAgcmV0dXJuIEhUTUxEb2N1
bWVudDo6Y3JlYXRlKGZyYW1lKTsKLSAgICBpZiAodHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwr
eG1sIikKKyAgICBpZiAodHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwreG1sIgorI2lmIEVOQUJM
RShYSFRNTE1QKQorICAgICAgICB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi92bmQud2FwLnhodG1s
K3htbCIKKyNlbmRpZgorICAgICAgICApCiAgICAgICAgIHJldHVybiBEb2N1bWVudDo6Y3JlYXRl
WEhUTUwoZnJhbWUpOwogCiAjaWYgRU5BQkxFKFdNTCkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDQwNTYwKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MCw2ICs3MCw5IEBACiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZUNvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpZiBFTkFCTEUoWEhU
TUxNUCkKKyNpbmNsdWRlICJIVE1MTm9TY3JpcHRFbGVtZW50LmgiCisjZW5kaWYKICNpbmNsdWRl
ICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRpdGxlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUVFBQYXJzZXJzLmgiCkBAIC0zNzQsNiArMzc3LDEwIEBAIERvY3VtZW50OjpEb2N1
bWVudChGcmFtZSogZnJhbWUsIGJvb2wgaXMKIAogICAgIHN0YXRpYyBpbnQgZG9jSUQgPSAwOwog
ICAgIG1fZG9jSUQgPSBkb2NJRCsrOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGlmIChzZXR0
aW5ncygpKQorICAgICAgICBtX3Nob3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQgPSAhc2V0dGlu
Z3MoKS0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpOworI2VuZGlmCiB9CiAKIHZvaWQgRG9jdW1lbnQ6
OnJlbW92ZWRMYXN0UmVmKCkKQEAgLTQ0MDAsNCArNDQwNywxMSBAQCBFbGVtZW50KiBEb2N1bWVu
dDo6ZmluZEFuY2hvcihjb25zdCBTdHJpCiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKK2Jvb2wgRG9jdW1lbnQ6OmlzWEhUTUxNUERvY3VtZW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGZyYW1lKCkgJiYgZnJhbWUoKS0+bG9hZGVyKCkgJiYgKGZyYW1lKCktPmxvYWRl
cigpLT5yZXNwb25zZU1JTUVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwreG1s
IiB8fCBmcmFtZSgpLT5sb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpID09ICJhcHBsaWNhdGlv
bi94aHRtbCt4bWwiKSk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxMyw2ICszMTMsMTEgQEAgcHVibGljOgogI2lmIEVOQUJMRShXTUwpCiAg
ICAgdmlydHVhbCBib29sIGlzV01MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
I2VuZGlmCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgYm9vbCBpc1hIVE1MTVBEb2N1bWVudCgp
IGNvbnN0OyAKKyAgICBib29sIHNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX3Nob3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQ7IH0KKyAgICB2b2lkIHNldFNo
b3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoYm9vbCBzaG91bGREbykgeyBtX3Nob3VsZFByb2Nl
c3NOb1NjcmlwdEVsZW1lbnQgPSBzaG91bGREbzsgfQorI2VuZGlmCiAgICAgYm9vbCBpc0ZyYW1l
U2V0KCkgY29uc3Q7CiAgICAgCiAgICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTZWxlY3RvcjsgfQpAQCAtOTU4LDYgKzk2MywxMCBAQCBw
cml2YXRlOgogCiAgICAgU3RyaW5nIG1fY29udGVudExhbmd1YWdlOwogCisjaWYgRU5BQkxFKFhI
VE1MTVApCisgICAgYm9vbCBtX3Nob3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQ7CisjZW5kaWYK
KwogcHVibGljOgogICAgIGJvb2wgaW5QYWdlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2luUGFn
ZUNhY2hlOyB9CiAgICAgdm9pZCBzZXRJblBhZ2VDYWNoZShib29sIGZsYWcpOwpJbmRleDogV2Vi
Q29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJl
dmlzaW9uIDQwNTYwKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMDAsNyArMTIwMCw3IEBAIHZvaWQgTm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAg
ICAgCiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIo
KTsKICAgICBpZiAocGFyZW50UmVuZGVyZXIgJiYgcGFyZW50UmVuZGVyZXItPmNhbkhhdmVDaGls
ZHJlbigpCi0jaWYgRU5BQkxFKFNWRykKKyNpZiBFTkFCTEUoU1ZHKSB8fCBFTkFCTEUoWEhUTUxN
UCkKICAgICAgICAgJiYgcGFyZW50LT5jaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKHRoaXMpCiAj
ZW5kaWYKICAgICAgICAgKSB7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvZG9tL05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDcgKzQxNyw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZUZvclJlbmRlcmVyKCk7CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUqKTsKLSNpZiBFTkFCTEUoU1ZHKQorI2lmIEVOQUJMRShTVkcpIHx8IEVOQUJMRShY
SFRNTE1QKQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUq
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKICAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwpJbmRleDogV2Vi
Q29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXIuY3BwCShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsMTEgQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OmVuZCgpCiAgICAgICAgIGluc2VydEVycm9yTWVzc2FnZUJsb2NrKCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIGV4aXRUZXh0KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIC8vIEFz
IGZvciBYSFRNTE1QIGRvY3VtZW50LCB3ZSBuZWVkbid0IHVwZGF0ZSB0aGUgc3R5bGUgc2VsZWN0
b3IgaGVyZSAKKyAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGxheW91dCBvZiA8bm9zY3JpcHQ+IGFy
ZSBjaGFuZ2VkIGluY29ycmVjdGx5LgorICAgICAgICBpZiAoIWlzWEhUTUxNUERvY3VtZW50KCkp
CisjZW5kaWYKICAgICAgICAgbV9kb2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKICAgICB9CiAg
ICAgCkluZGV4OiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9YTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gNDA1NjApCisrKyBXZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0SXNYSFRNTERvY3VtZW50KGJvb2wgaXNYSFRN
TCkgeyBtX2lzWEhUTUxEb2N1bWVudCA9IGlzWEhUTUw7IH0KICAgICAgICAgYm9vbCBpc1hIVE1M
RG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxEb2N1bWVudDsgfQorI2lmIEVOQUJM
RShYSFRNTE1QKQorICAgICAgICB2b2lkIHNldElzWEhUTUxNUERvY3VtZW50KGJvb2wgaXNYSFRN
TCkgeyBtX2lzWEhUTUxNUERvY3VtZW50ID0gaXNYSFRNTDsgfQorICAgICAgICBib29sIGlzWEhU
TUxNUERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1hIVE1MTVBEb2N1bWVudDsgfQorI2Vu
ZGlmCiAjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgYm9vbCBpc1dNTERvY3VtZW50KCkgY29uc3Q7
CiAjZW5kaWYKQEAgLTE0OSw2ICsxNTMsMTAgQEAgcHVibGljOgogICAgICAgICBib29sIG1fc2F3
WFNMVHJhbnNmb3JtOwogICAgICAgICBib29sIG1fc2F3Rmlyc3RFbGVtZW50OwogICAgICAgICBi
b29sIG1faXNYSFRNTERvY3VtZW50OworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICBib29s
IG1faXNYSFRNTE1QRG9jdW1lbnQ7CisgICAgICAgIGJvb2wgbV9oYXNEb2NUeXBlRGVjbGFyYXRp
b247CisjZW5kaWYKIAogICAgICAgICBib29sIG1fcGFyc2VyUGF1c2VkOwogICAgICAgICBib29s
IG1fcmVxdWVzdGluZ1NjcmlwdDsKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnht
bDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3Bw
CShyZXZpc2lvbiA0MDU2MCkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50Lmgi
CisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNlbmRpZgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiIC8vIGZvciBkZWNvZGVOYW1lZEVudGl0eQog
I2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgpAQCAtNTMwLDYgKzUzNCwxMCBAQCBY
TUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1bWVudCogX2RvCiAgICAgLCBtX3Nhd1hTTFRy
YW5zZm9ybShmYWxzZSkKICAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQogICAgICwgbV9p
c1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhU
TUxNUERvY3VtZW50KGZhbHNlKQorICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2Up
CisjZW5kaWYKICAgICAsIG1fcGFyc2VyUGF1c2VkKGZhbHNlKQogICAgICwgbV9yZXF1ZXN0aW5n
U2NyaXB0KGZhbHNlKQogICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCkBAIC01NTMsNiArNTYx
LDEwIEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKERvY3VtZW50RnJhZ20KICAgICAsIG1f
c2F3WFNMVHJhbnNmb3JtKGZhbHNlKQogICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAg
ICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAs
IG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlv
bihmYWxzZSkKKyNlbmRpZgogICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3Jl
cXVlc3RpbmdTY3JpcHQoZmFsc2UpCiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTcw
Nyw3ICs3MTksMTUgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IAog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorI2lmIEVOQUJMRShYSFRNTE1QKSAKKyAgICAv
L2NoZWNrIGlmIHRoZSBET0NUWVBFIERlY2xhcmF0aW9uIG9mIFhIVE1MTVAgZG9jdW1lbnQgZXhp
c3RzCisgICAgaWYgKG1fZG9jLT5pc1hIVE1MTVBEb2N1bWVudCgpICYmICFtX2hhc0RvY1R5cGVE
ZWNsYXJhdGlvbikgeworICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIlRoZSBET0NUWVBFIGRl
Y2xhcmF0aW9uIGlzIG1pc3NpbmcsIFhIVE1MTVAgZG9jdW1lbnQgZXhwZWN0cyBpdC4iLCBsaW5l
TnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNl
CiAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworI2VuZGlmCiAKICAgICBleGl0VGV4dCgp
OwogCkBAIC03MjEsNiArNzQxLDI1IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpzdGFydEVsZW1lbnRO
cyhjb25zdCAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNw
YWNlVVJJOwogICAgIH0KKyAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAoIW1fc2F3Rmly
c3RFbGVtZW50ICYmIGlzWEhUTUxNUERvY3VtZW50KCkpIHsKKyAgICAgICAgbV9zYXdGaXJzdEVs
ZW1lbnQgPSB0cnVlOworIAorICAgICAgICAvLyBBcyBwZXIgdGhlIHNlY3Rpb24gNy4xIG9mIE9N
QS1XQVAtWEhUTUxNUC1WMV8xLTIwMDYxMDIwLUEucGRmLCAKKyAgICAgICAgLy8gd2Ugc2hvdWxk
IG1ha2Ugc3VyZSB0aGF0IHRoZSByb290IGVsZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5kIAorICAg
ICAgICAvLyBlbnN1cmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSBy
b290IGVsbWVudCAnaHRtbCcgCisgICAgICAgIC8vIE1VU1QgYmUgJ2h0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwnCisgICAgICAgIGlmIChsb2NhbE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFn
LmxvY2FsTmFtZSgpKSB7CisgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIlRoZSBYSFRN
TE1QIGRvY3VtZW50J3Mgcm9vdCBlbGVtZW50IGlzIG5vdCBhICdodG1sJyBlbGVtZW50LiIsIGxp
bmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9IGVsc2UgaWYgKHVyaS5pc051bGwoKSkgeworICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNw
YWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSTsgCisgICAgICAgICAgICB1cmkg
PSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFtX3Nh
d0ZpcnN0RWxlbWVudCkKKyAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworI2VuZGlm
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHBy
ZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwpAQCAtNzk3LDYgKzgzNiwxMSBAQCB2b2lkIFhNTFRva2Vu
aXplcjo6ZW5kRWxlbWVudE5zKCkKICAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CiAgICAg
bV9yZXF1ZXN0aW5nU2NyaXB0ID0gdHJ1ZTsKIAorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGlm
IChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgIXN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVt
ZW50Kj4oc2NyaXB0RWxlbWVudCktPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICAg
ICAgbV9kb2MtPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisgICAgZWxz
ZSB7CisjZW5kaWYKICAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNvdXJj
ZUF0dHJpYnV0ZVZhbHVlKCk7CiAgICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgewogICAg
ICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKQEAgLTgxMyw2ICs4NTcsOSBAQCB2b2lk
IFhNTFRva2VuaXplcjo6ZW5kRWxlbWVudE5zKCkKICAgICB9IGVsc2UKICAgICAgICAgbV92aWV3
LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlw
dEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgbV9kb2MtPnVybCgpLCBtX3NjcmlwdFN0YXJ0TGlu
ZSkpOwogCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgfQorI2VuZGlmCiAgICAgbV9yZXF1ZXN0
aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgc2V0Q3VycmVudE5vZGUocGFyZW50LmdldCgpKTsKIH0K
QEAgLTk0MCw2ICs5ODcsOSBAQCB2b2lkIFhNTFRva2VuaXplcjo6c3RhcnREb2N1bWVudChjb25z
dCB4CiB2b2lkIFhNTFRva2VuaXplcjo6ZW5kRG9jdW1lbnQoKQogewogICAgIGV4aXRUZXh0KCk7
CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxz
ZTsKKyNlbmRpZgogfQogCiB2b2lkIFhNTFRva2VuaXplcjo6aW50ZXJuYWxTdWJzZXQoY29uc3Qg
eG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciog
c3lzdGVtSUQpCkBAIC05NTMsOCArMTAwMyw5IEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbnRlcm5h
bFN1YnNldChjb25zdCAKICAgICB9CiAgICAgCiAgICAgaWYgKG1fZG9jKSB7Ci0jaWYgRU5BQkxF
KFdNTCkKICAgICAgICAgU3RyaW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJRCk7CisgICAg
ICAgIFN0cmluZyBkdGROYW1lID0gdG9TdHJpbmcobmFtZSk7CisjaWYgRU5BQkxFKFdNTCkKICAg
ICAgICAgaWYgKGlzV01MRG9jdW1lbnQoKQogICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dB
UEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iCiAgICAgICAgICAgICAmJiBleHRJZCAhPSAiLS8vV0FQ
Rk9SVU0vL0RURCBXTUwgMS4yLy9FTiIKQEAgLTk2Miw4ICsxMDEzLDIwIEBAIHZvaWQgWE1MVG9r
ZW5pemVyOjppbnRlcm5hbFN1YnNldChjb25zdCAKICAgICAgICAgICAgICYmIGV4dElkICE9ICIt
Ly9XQVBGT1JVTS8vRFREIFdNTCAxLjAvL0VOIikKICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZh
dGFsLCAiSW52YWxpZCBEVEQgUHVibGljIElEIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIo
KSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgaWYgKChleHRJZCA9PSAi
LS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpCisgICAgICAgICAgICB8fCAo
ZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iKSkgeworICAg
ICAgICAgICAgaWYgKGR0ZE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7
CisgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVj
bGFyYXRpb24sIFhIVE1MTVAgZXhwZWN0cyAnaHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxpbmVO
dW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9kb2MtPmlzWEhUTUxNUERvY3VtZW50KCkpCisgICAgICAgICAg
ICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7CiAKLSAgICAgICAgbV9kb2MtPmFkZENo
aWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jLCB0b1N0cmluZyhuYW1lKSwgdG9TdHJpbmco
ZXh0ZXJuYWxJRCksIHRvU3RyaW5nKHN5c3RlbUlEKSkpOworICAgICAgICAgICAgbV9oYXNEb2NU
eXBlRGVjbGFyYXRpb24gPSB0cnVlOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBtX2Rv
Yy0+YWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2MsIGR0ZE5hbWUsIGV4dElkLCB0
b1N0cmluZyhzeXN0ZW1JRCkpKTsKICAgICB9CiB9CiAKQEAgLTExMDIsNiArMTE2NSw5IEBAIHN0
YXRpYyB4bWxFbnRpdHlQdHIgZ2V0RW50aXR5SGFuZGxlcih2b2kKIAogICAgIGVudCA9IHhtbEdl
dERvY0VudGl0eShjdHh0LT5teURvYywgbmFtZSk7CiAgICAgaWYgKCFlbnQgJiYgKGdldFRva2Vu
aXplcihjbG9zdXJlKS0+aXNYSFRNTERvY3VtZW50KCkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAg
ICAgICAgICAgICAgICAgfHwgZ2V0VG9rZW5pemVyKGNsb3N1cmUpLT5pc1hIVE1MTVBEb2N1bWVu
dCgpCisjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAgICAgICAgICAgICAgICB8fCBnZXRUb2tl
bml6ZXIoY2xvc3VyZSktPmlzV01MRG9jdW1lbnQoKQogI2VuZGlmCkBAIC0xMTQzLDcgKzEyMDks
MTAgQEAgc3RhdGljIHZvaWQgZXh0ZXJuYWxTdWJzZXRIYW5kbGVyKHZvaWQqIAogICAgICAgICB8
fCAoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKQogICAgICAgICB8
fCAoZXh0SWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VOIikK
ICAgICAgICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwg
Mi4wIHBsdXMgU1ZHIDEuMS8vRU4iKQotICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1dBUEZPUlVN
Ly9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkKKyNpZiAhRU5BQkxFKFhIVE1MTVApCisgICAg
ICAgIHx8IChleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIp
CisjZW5kaWYKKyAgICAgICApCiAgICAgICAgIGdldFRva2VuaXplcihjbG9zdXJlKS0+c2V0SXNY
SFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9y
IG5vdC4KIH0KIApJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAkocmV2aXNpb24gNDA1NjApCisr
KyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDEwIEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2Vu
ZGlmCiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6
ZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKQEAgLTg1LDYgKzg5LDEw
IEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKERvY3VtZW50KiBfZG8KICAgICAsIG1fc2F3
WFNMVHJhbnNmb3JtKGZhbHNlKQogICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAg
LCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1f
aXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihm
YWxzZSkKKyNlbmRpZgogICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVl
c3RpbmdTY3JpcHQoZmFsc2UpCiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTExMCw2
ICsxMTgsMTAgQEAgWE1MVG9rZW5pemVyOjpYTUxUb2tlbml6ZXIoRG9jdW1lbnRGcmFnbQogICAg
ICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCiAgICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxz
ZSkKICAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQorI2lmIEVOQUJMRShYSFRNTE1QKQor
ICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKKyAgICAsIG1faGFzRG9jVHlwZURlY2xh
cmF0aW9uKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKICAgICAs
IG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKICAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQpA
QCAtNDE2LDkgKzQyOCwxOCBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2UoKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRG9jdW1lbnQ6IHsK
ICAgICAgICAgICAgIGVuZERvY3VtZW50KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAg
ICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IGZhbHNlOworI2VuZGlmCiAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0
RWxlbWVudDogeworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgaWYgKG1fZG9jLT5p
c1hIVE1MTVBEb2N1bWVudCgpICYmICFtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbikgeworICAgICAg
ICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiRE9DVFlQRSBkZWNsYXJhdGlvbiBpcyBtaXNz
aW5nLCBYSFRNTE1QIGRvY3VtZW50IGV4cGVjdHMgaXQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5O
dW1iZXIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZW5kaWYg
CiAgICAgICAgICAgICBwYXJzZVN0YXJ0RWxlbWVudCgpOwogICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTQ0MywxMiArNDY0LDE4IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpwYXJzZSgp
CiAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RFREOiB7CiAgICAgICAgICAgICAvL3FE
ZWJ1ZygpPDwiLS0tLS0tLS0tLS0tLSBEVEQiOwogICAgICAgICAgICAgcGFyc2VEdGQoKTsKKyNp
ZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0g
dHJ1ZTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBRWG1sU3RyZWFtUmVhZGVyOjpFbnRpdHlSZWZlcmVuY2U6IHsKICAgICAgICAgICAgIC8vcURl
YnVnKCk8PCItLS0tLS0tLS0tIEVOVElUWSA9ICI8PG1fc3RyZWFtLm5hbWUoKS50b1N0cmluZygp
CiAgICAgICAgICAgICAvLyAgICAgICAgPDwiLCB0ID0gIjw8bV9zdHJlYW0udGV4dCgpLnRvU3Ry
aW5nKCk7CiAgICAgICAgICAgICBpZiAoaXNYSFRNTERvY3VtZW50KCkKKyNpZiBFTkFCTEUoWEhU
TUxNUCkKKyAgICAgICAgICAgICAgICB8fCBpc1hIVE1MTVBEb2N1bWVudCgpCisjZW5kaWYKICNp
ZiBFTkFCTEUoV01MKQogICAgICAgICAgICAgICAgIHx8IGlzV01MRG9jdW1lbnQoKQogI2VuZGlm
CkBAIC01MDcsNyArNTM0LDkgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlU3RhcnRFbGVtZW50
KCkKICAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorI2lmICFFTkFCTEUoWEhUTUxNUCkKICAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7
CisjZW5kaWYKIAogICAgIGV4aXRUZXh0KCk7CiAKQEAgLTUyMCw2ICs1NDksMjYgQEAgdm9pZCBY
TUxUb2tlbml6ZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkKICAgICAgICAgdXJpID0gbV9kZWZhdWx0
TmFtZXNwYWNlVVJJOwogICAgIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGlmICghbV9z
YXdGaXJzdEVsZW1lbnQgJiYgaXNYSFRNTE1QRG9jdW1lbnQoKSkgeworICAgICAgICBtX3Nhd0Zp
cnN0RWxlbWVudCA9IHRydWU7CisgCisgICAgICAgIC8vIEFzIHBlciA3LjEgc2VjdGlvbiBvZiBP
TUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwgCisgICAgICAgIC8vIHdlIHNob3Vs
ZCBtYWtlIHN1cmUgdGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZCAKKyAg
ICAgICAgLy8gZW5zdXJlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBvbiB0aGUg
cm9vdCBlbG1lbnQgJ2h0bWwnIAorICAgICAgICAvLyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9y
Zy8xOTk5L3hodG1sJworICAgICAgICBpZiAobG9jYWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRh
Zy5sb2NhbE5hbWUoKSkgeworICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJUaGUgWEhU
TUxNUCBkb2N1bWVudCdzIHJvb3QgZWxlbWVudCBpcyBub3QgYSAnaHRtbCcgZWxlbWVudC4iLCBs
aW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfSBlbHNlIGlmICh1cmkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fZGVmYXVsdE5hbWVz
cGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkk7IAorICAgICAgICAgICAgdXJp
ID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOworICAgICAgICAgICAgbV9zdHJlYW0uYWRkRXh0cmFO
YW1lc3BhY2VEZWNsYXJhdGlvbihRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24ocHJlZml4
LCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKCFtX3Nhd0ZpcnN0RWxlbWVudCkKKyAgICAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVl
OworI2VuZGlmCisKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBRdWFsaWZpZWROYW1l
IHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdF
bGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUsIGVjKTsKQEAgLTU3OCw2
ICs2MjcsMTEgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxlbWVudCgpCiAgICAgQVNT
RVJUKCFtX3BlbmRpbmdTY3JpcHQpOwogICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IHRydWU7CiAK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYm
ICFzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KHNjcmlwdEVsZW1lbnQpLT5zaG91bGRF
eGVjdXRlQXNKYXZhU2NyaXB0KCkpCisgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9z
Y3JpcHRFbGVtZW50KHRydWUpOworICAgIGVsc2UgeworI2VuZGlmCiAgICAgU3RyaW5nIHNjcmlw
dEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpOwogICAgIGlmICgh
c2NyaXB0SHJlZi5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1
dGUgCkBAIC01OTQsNiArNjQ4LDkgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxlbWVu
dCgpCiAgICAgfSBlbHNlCiAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1
dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCks
IG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKIAorI2lmIEVOQUJMRShYSFRNTE1Q
KQorICAgIH0KKyNlbmRpZgogICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIHNl
dEN1cnJlbnROb2RlKHBhcmVudC5nZXQoKSk7CiB9CkBAIC03NTAsOSArODA3LDIzIEBAIHZvaWQg
WE1MVG9rZW5pemVyOjpwYXJzZUR0ZCgpCiAgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4x
U3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikpCiAgICAgICAgIHx8IChw
dWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRo
TUwgMi4wLy9FTiIpKQogICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8v
VzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIikpCi0g
ICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFhI
VE1MIE1vYmlsZSAxLjAvL0VOIikpKSB7CisjaWYgIUVOQUJMRShYSFRNTE1QKQorICAgICAgICB8
fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2Jp
bGUgMS4wLy9FTiIpKQorI2VuZGlmCisgICAgICAgKQogICAgICAgICBzZXRJc1hIVE1MRG9jdW1l
bnQodHJ1ZSk7IC8vIGNvbnRyb2xzIGlmIHdlIHJlcGxhY2UgZW50aXRpZXMgb3Igbm90LgorI2lm
IEVOQUJMRShYSFRNTE1QKQorICAgIGVsc2UgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5n
KCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikpCisgICAgICAgICAgICAg
fHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9i
aWxlIDEuMC8vRU4iKSkpIHsKKyAgICAgICAgaWYgKEF0b21pY1N0cmluZyhuYW1lKSAhPSBIVE1M
TmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZh
dGFsLCAiSW52YWxpZCBET0NUWVBFIGRlY2xhcmF0aW9uLCBYSFRNTE1QIGV4cGVjdHMgJ2h0bWwn
IGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChtX2RvYy0+aXNYSFRNTE1QRG9jdW1l
bnQoKSkgLy8gY2hlY2sgaWYgdGhlIE1JTUUgdHlwZSBpcyBjb3JyZWN0IHdpdGggdGhpcyBtZXRo
b2QKKyAgICAgICAgICAgIHNldElzWEhUTUxNUERvY3VtZW50KHRydWUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7CiAgICAgfQorI2VuZGlmCiAj
aWYgRU5BQkxFKFdNTCkKICAgICBlbHNlIGlmIChtX2RvYy0+aXNXTUxEb2N1bWVudCgpCiAgICAg
ICAgICAgICAgJiYgcHVibGljSWQgIT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4zLy9FTiIpCkBAIC03NjcsNCArODM4LDMgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNl
RHRkKCkKIH0KIH0KIAotCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwNTYwKQor
KysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg0LDEx
ICs5ODQsMTMgQEAgYm9vbCBIVE1MRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbgogICAg
IAogYm9vbCBIVE1MRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUp
CiB7CisjaWYgIUVOQUJMRShYSFRNTE1QKQogICAgIGlmIChoYXNMb2NhbE5hbWUobm9zY3JpcHRU
YWcpKSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdz
KCk7CiAgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxl
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyNlbmRpZgogICAgIHJldHVy
biAoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcykgfHwgKHN0eWxlLT5kaXNw
bGF5KCkgIT0gTk9ORSk7CiB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRG
YWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRGYWN0b3J5
LmNwcAkocmV2aXNpb24gNDA1NjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnRGYWN0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQAogI2luY2x1ZGUgIkhUTUxNZXRh
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNb2RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVu
dC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiSFRNTE9MaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxPYmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgpAQCAt
MzMzLDYgKzMzNiwxMyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gc2NyaXB0Q29u
CiAgICAgcmV0dXJuIG5ldyBIVE1MU2NyaXB0RWxlbWVudChzY3JpcHRUYWcsIGRvYywgY3JlYXRl
ZEJ5UGFyc2VyKTsKIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorc3RhdGljIFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IG5vc2NyaXB0Q29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQorewor
ICAgIHJldHVybiBuZXcgSFRNTE5vU2NyaXB0RWxlbWVudChub3NjcmlwdFRhZywgZG9jKTsKK30K
KyNlbmRpZgorCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gdGFibGVDb25zdHJ1Y3Rv
cihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50Kiwg
Ym9vbCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUVsZW1lbnQodGFibGVUYWcsIGRvYyk7
CkBAIC00NzAsNiArNDgwLDkgQEAgc3RhdGljIHZvaWQgY3JlYXRlRnVuY3Rpb25NYXAoKQogICAg
IGFkZFRhZyhwcmVUYWcsIHByZUNvbnN0cnVjdG9yKTsKICAgICBhZGRUYWcocVRhZywgcXVvdGVD
b25zdHJ1Y3Rvcik7CiAgICAgYWRkVGFnKHNjcmlwdFRhZywgc2NyaXB0Q29uc3RydWN0b3IpOwor
I2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGFkZFRhZyhub3NjcmlwdFRhZywgbm9zY3JpcHRDb25z
dHJ1Y3Rvcik7CisjZW5kaWYKICAgICBhZGRUYWcoc2VsZWN0VGFnLCBzZWxlY3RDb25zdHJ1Y3Rv
cik7CiAgICAgYWRkVGFnKHN0eWxlVGFnLCBzdHlsZUNvbnN0cnVjdG9yKTsKICAgICBhZGRUYWco
dGFibGVUYWcsIHRhYmxlQ29uc3RydWN0b3IpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxOb1Nj
cmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRF
bGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFhI
VE1MTVApCisjaW5jbHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVudC5oIgorCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworSFRNTE5vU2NyaXB0RWxlbWVudDo6
SFRNTE5vU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQoreworICAgIEFTU0VSVCho
YXNUYWdOYW1lKG5vc2NyaXB0VGFnKSk7Cit9CisKK0hUTUxOb1NjcmlwdEVsZW1lbnQ6On5IVE1M
Tm9TY3JpcHRFbGVtZW50KCkKK3sKK30KKworYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGVj
a0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkKK3sKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4
dE5vZGUoKSB8fCBpbkJsb2NrVGFnTGlzdChuZXdDaGlsZCk7IAorfQorCit2b2lkIEhUTUxOb1Nj
cmlwdEVsZW1lbnQ6OmF0dGFjaCgpCit7CisgICAgQVNTRVJUKCFyZW5kZXJlcigpKTsKKyAgICAv
LyBJbiBvcmRlciB0byBtYWtlIHRoZSBjb250ZW50IHdpdGhpbiBub3NjcmlwdCBub2RlIHZpc2li
bGUsCisgICAgLy8gd2Ugc2hvdWxkIGF0dGFjaCByZW5kZXIgb2JqZWN0IHRvIG5vc2NyaXB0IG5v
ZGUsIHRoZW4gaXRzIGNoaWxkcmVuIAorICAgIC8vIGNhbiBzaGFyZSBpdHMgcmVuZGVyIHN0eWxl
IHRvIGNyZWF0ZSB0aGVpciBvd24gcmVuZGVyIG9iamVjdHMKKyAgICBSZWZQdHI8Tm9kZT4gcGFy
ZW50ID0gdGhpczsKKyAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gMDsKKyAgICB3
aGlsZShwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZihwYXJlbnRS
ZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOworCisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBzdHlsZS0+aW5oZXJpdEZyb20ocGFy
ZW50UmVuZGVyZXItPnN0eWxlKCkpOworCisgICAgUmVuZGVyT2JqZWN0KiBybyA9IGNyZWF0ZVJl
bmRlcmVyKHBhcmVudFJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7CisgICAg
aWYgKHJvKSB7CisgICAgICAgIHNldFJlbmRlcmVyKHJvKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+
c2V0U3R5bGUoc3R5bGUpOworICAgICAgICBwYXJlbnRSZW5kZXJlci0+YWRkQ2hpbGQocmVuZGVy
ZXIoKSwgbmV4dFJlbmRlcmVyKCkpOworICAgIH0KKworICAgIENvbnRhaW5lck5vZGU6OmF0dGFj
aCgpOworCisgICAgLy8gSWYgbm8gbmVlZCB0byBwcm9jZXNzIDxub3NjcmlwdD4sIHdlIGhpZGUg
aXQKKyAgICBpZiAoIWRvY3VtZW50KCktPnNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSkg
eworICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShOT05FKTsKKyAgICAgICAgc2V0Q2hhbmdlZCgp
OworICAgIH0KK30KKwordm9pZCBIVE1MTm9TY3JpcHRFbGVtZW50OjpyZWNhbGNTdHlsZShTdHls
ZUNoYW5nZSBjaGFuZ2UpCit7CisgICAgaWYgKCFkb2N1bWVudCgpLT5zaG91bGRQcm9jZXNzTm9z
Y3JpcHRFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIDxub3NjcmlwdD4g
bmVlZHMgcHJvY2Vzc2luZywgd2UgbWFrZSBpdCB2aXNpYWJsZSBoZXJlLgorICAgIEFTU0VSVChy
ZW5kZXJlcigpKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS0+
c3R5bGUoKTsgCisgICAgQVNTRVJUKHN0eWxlKTsKKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9
PSBOT05FKSB7CisgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORSk7CisKKyAgICAgICAg
Ly8gY3JlYXRlIHJlbmRlcmVycyBmb3IgaXRzIGNoaWxkcmVuCisgICAgICAgIGlmIChoYXNDaGls
ZE5vZGVzKCkpIHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcm8gPSAgMDsKKworICAgICAg
ICAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0
Tm9kZSh0aGlzKSkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPnJlbmRlcmVyKCkpCisgICAgICAg
ICAgICAgICAgICAgIG4tPmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRl
cmVyKE5vZGUqIGNoaWxkKSBjb25zdAoreworICAgIHJldHVybiBkb2N1bWVudCgpLT5zaG91bGRQ
cm9jZXNzTm9zY3JpcHRFbGVtZW50KCk7Cit9CisKK30KKyNlbmRpZgpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TE5vU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0hUTUxOb1Nj
cmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBIVE1MTm9TY3JpcHRFbGVtZW50
X2gKKyNkZWZpbmUgSFRNTE5vU2NyaXB0RWxlbWVudF9oCisKKyNpZiBFTkFCTEUoWEhUTUxNUCkK
KyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEhUTUxOb1NjcmlwdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworcHVibGljOgorICAg
IEhUTUxOb1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Cisg
ICAgfkhUTUxOb1NjcmlwdEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChj
b25zdCBOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1YWwgdm9p
ZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJl
bmRlcmVyKE5vZGUqKSBjb25zdDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCisjZW5k
aWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJKHJldmlzaW9uIDQwNTYwKQorKysgV2ViQ29yZS9odG1s
L0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjksNyArODY5LDkgQEAgUGFzc1Jl
ZlB0cjxOb2RlPiBIVE1MUGFyc2VyOjpnZXROb2RlKFRvawogICAgICAgICBnRnVuY3Rpb25NYXAu
c2V0KG5vYnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRl
RXJyb3JDaGVjayk7CiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQobm9lbWJlZFRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAg
ICAgIGdGdW5jdGlvbk1hcC5zZXQobm9mcmFtZXNUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRN
TFBhcnNlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKTsKKyNpZiAhRU5BQkxFKFhIVE1MTVAp
CiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQobm9zY3JpcHRUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAmSFRNTFBhcnNlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyNlbmRpZgogICAgICAg
ICBnRnVuY3Rpb25NYXAuc2V0KG9sVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6
OnBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKTsKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChwVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OnBDbG9zZXJDcmVhdGVFcnJvckNoZWNr
KTsKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChwbGFpbnRleHRUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCAmSFRNTFBhcnNlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
VG9rZW5pemVyLmNwcAkocmV2aXNpb24gNDA1NjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRva2Vu
aXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSw2ICs0NTUsMTAgQEAgSFRNTFRva2VuaXpl
cjo6U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAgICAgICAgICAgfSBlbHNlCiAjZW5kaWYK
ICAgICAgICAgICAgIGRvU2NyaXB0RXhlYyA9IG1fc2NyaXB0Tm9kZS0+c2hvdWxkRXhlY3V0ZUFz
SmF2YVNjcmlwdCgpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgaWYgKCFkb1Nj
cmlwdEV4ZWMpCisgICAgICAgICAgICAgICAgbV9kb2MtPnNldFNob3VsZFByb2Nlc3NOb3Njcmlw
dEVsZW1lbnQodHJ1ZSk7CisjZW5kaWYKICAgICAgICAgICAgIG1fc2NyaXB0Tm9kZSA9IDA7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xOTg0LDYgKzE5ODgsMTAgQEAgdm9pZCBIVE1MVG9rZW5pemVy
Ojpub3RpZnlGaW5pc2hlZChDYWNoZQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChz
dGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KG4uZ2V0KCkpLT5zaG91bGRFeGVjdXRlQXNK
YXZhU2NyaXB0KCkpCiAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHNjcmlwdEV4ZWN1dGlvbihz
b3VyY2VDb2RlLCBtX3N0YXRlKTsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVu
dCh0cnVlKTsKKyNlbmRpZgogICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChuLmdldCgp
KS0+ZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZh
bHNlKTsKICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA0
MDU2MCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA2NCw2ICsxMDY0LDE1IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmVuZElmTm90TG9hZGluZ01h
aW5SZXMKICAgICBpZiAobV9pc0xvYWRpbmdNYWluUmVzb3VyY2UgfHwgIW1fZnJhbWUtPnBhZ2Uo
KSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgUExBVEZPUk0oUVQpICYmIEVOQUJMRShYSFRNTE1Q
KQorICAgIC8vIEZJWE1FOiBRdCBpcyBmbGF3ZWQKKyAgICAvLyBUaGlzIGhhY2tpbmcgaXMgZm9y
IGZpeGluZyBvbmUgYnVnIG9mIGphdmFzcmNpcHQgaW4gWEhUTUxNUCBkb2N1bWVudCwgCisgICAg
Ly8gaS5lOiBpZiBhbGVydCgpIG1ldGhvZCBpcyBjb250YWluZWQgZGlyZWN0bHkgaW4gPHNjcmlw
dD4gZWxlbWVudCwgCisgICAgLy8gaXQgd2lsbCBjYXVzZSBRdExhdW5jaGVyIGNyYXNoIHdoZW4g
ZnJhbWUgbG9hZGVyIGV4ZWN1dGUgaXQuCisgICAgaWYgKG1faXNSdW5uaW5nU2NyaXB0ICYmIG1f
ZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICAvLyBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg1NAogICAgIC8vIFRoZSBmcmFtZSdzIGxhc3QgcmVm
IG1heSBiZSByZW1vdmVkIGFuZCBpdCBjYW4gYmUgZGVsZXRlZCBieSBjaGVja0NvbXBsZXRlZCgp
LCAKICAgICAvLyBzbyB3ZSdsbCBhZGQgYSBwcm90ZWN0aXZlIHJlZmNvdW50CkBAIC0zNjA1LDcg
KzM2MTQsMTEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVlcwogICAg
IH0KICAgICAKICAgICBpZiAobWFpblJlc291cmNlKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAg
ICAgICByZXF1ZXN0LnNldEhUVFBBY2NlcHQoImFwcGxpY2F0aW9uL3htbCxhcHBsaWNhdGlvbi92
bmQud2FwLnhodG1sK3htbCxhcHBsaWNhdGlvbi94aHRtbCt4bWw7cHJvZmlsZT0naHR0cDovL3d3
dy53YXBmb3J1bS5vcmcveGh0bWwnLHRleHQvaHRtbDtxPTAuOSx0ZXh0L3BsYWluO3E9MC44LGlt
YWdlL3BuZywqLyo7cT0wLjUiKTsKKyNlbHNlCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEFjY2Vw
dCgiYXBwbGljYXRpb24veG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCx0ZXh0L2h0bWw7cT0wLjks
dGV4dC9wbGFpbjtxPTAuOCxpbWFnZS9wbmcsKi8qO3E9MC41Iik7CisjZW5kaWYKIAogICAgIC8v
IE1ha2Ugc3VyZSB3ZSBzZW5kIHRoZSBPcmlnaW4gaGVhZGVyLgogICAgIGFkZEhUVFBPcmlnaW5J
Zk5lZWRlZChyZXF1ZXN0LCBTdHJpbmcoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVS
ZWdpc3RyeS5jcHAJKHJldmlzaW9uIDQwNTYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlw
ZVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCw5IEBAIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFnZU0KICAgICAgICAgInRleHQvIiwKICAgICAg
ICAgImFwcGxpY2F0aW9uL3htbCIsCiAgICAgICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLAor
I2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAiYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4
bWwiLAorI2VuZGlmCiAgICAgICAgICJhcHBsaWNhdGlvbi9yc3MreG1sIiwKICAgICAgICAgImFw
cGxpY2F0aW9uL2F0b20reG1sIiwKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NDA2NjYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNCBAQAorMjAwOS0wMi0wNCAgWWljaGFvIFlpbiAgPHlpY2hhby55aW5AdG9yY2htb2JpbGUu
Y29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZmFzdC94aHRtbG1wOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvY2hlY2stZG9j
dHlwZS1kZWNsYXJhdGlvbi54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC94aHRtbG1wL2No
ZWNrLXJvb3RlbGVtZW50LnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9z
Y3JpcHQtaW4tbXVsdGlzY3JpcHRzLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1s
bXAvbm9zY3JpcHQtbmVzdGVkLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAv
bm9zY3JpcHQueGh0bWw6IEFkZGVkLgorCiAyMDA5LTAyLTA0ICBUb3IgQXJuZSBWZXN0YsO4ICA8
dGF2ZXN0Ym9AdHJvbGx0ZWNoLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9jaGVjay1kb2N0eXBlLWRlY2xhcmF0
aW9uLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9jaGVjay1k
b2N0eXBlLWRlY2xhcmF0aW9uLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC94aHRtbG1wL2NoZWNrLWRvY3R5cGUtZGVjbGFyYXRpb24ueGh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLQorPCFET0NUWVBFIGh0
bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiAiaHR0cDov
L3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCI+CistLT4KKzxodG1sIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxlPlRlc3Qg
ZG9jdW1lbnQgY29uZm9ybWFuY2Ugb2YgWEhUTUxNUDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSB4
bWxucz0iaHR0cDovL3d3dy53My5vcmciPgorPHA+IGJyb3dzZXIgc2hvdWxkIHJlcG9ydCBET0NU
WVBFIGRlY2xhcmF0aW9uIGxvc2UgZXJyb3IgPC9wPgorPGhyLz4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54aHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stcm9vdGVsZW1lbnQu
eGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stcm9v
dGVsZW1lbnQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1M
IE1vYmlsZSAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmls
ZTEwLmR0ZCI+CisKKzxhbnkgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgor
PGhlYWQ+Cis8dGl0bGU+VGVzdCBkb2N1bWVudCBjb25mb3JtYW5jZSBvZiBYSFRNTE1QPC90aXRs
ZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+IFRoaXMgaXMgQk9EWSA8L3A+Cis8L2JvZHk+Cis8L2Fu
eT4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1pbi1tdWx0aXNjcmlw
dHMueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0
LWluLW11bHRpc2NyaXB0cy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
eGh0bWxtcC9ub3NjcmlwdC1pbi1tdWx0aXNjcmlwdHMueGh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElD
ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiAiaHR0cDovL3d3dy53YXBm
b3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCI+CisKKzxodG1sIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxlPiBUZXN0IG5vc2NyaXB0IGlu
IG11bGl0cGxlIHNjcmlwdCBlbGVtZW50cyA8L3RpdGxlPgorPG5vc2NyaXB0PgorPGgxPiZsdDto
MSZndDsxc3Qgbm9zY3JpcHQgZWxlbWVudCBpbiBIRUFEPC9oMT4KK3BsYWluIHRleHQgaW4gbm9z
Y3JpcHQKKzwvbm9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC93cm9uZ3R5cGUiPgorICAg
IGFsZXJ0KCJ0aGUgZmlyc3Qgc2NyaXB0Iik7Cis8L3NjcmlwdD4KKworPG5vc2NyaXB0PgorPGgy
PiAmbHQ7aDImZ3Q7Mm5kIG5vc2NyaXB0IGVsZW1lbnQgaW4gSEVBRDwvaDI+Cis8aHIvPgorPC9u
b3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gZnVu
KCkgeworICAgIGFsZXJ0KCJ0aGUgc2Vjb25kIHNjcmlwdCIpOworfQorPC9zY3JpcHQ+Cis8L2hl
YWQ+CisKKzxib2R5PiAKKzxhIGhyZWY9ImphdmFzY3JpcHQ6ZnVuKCkiPiBjbGlrZSBtZSB0byBl
eGVjdXRlIGphdmFzY3JpcHQgY29kZTwvYT4KKzxub3NjcmlwdD4KKzxoMz4mbHQ7aDMmZ3Q7M3Jk
IG5vc2NyaXB0IGVsZW1lbnQgaW4gQk9EWTwvaDM+Cis8L25vc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LW5lc3RlZC54aHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQtbmVzdGVk
LnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0
LW5lc3RlZC54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwg
TW9iaWxlIDEuMC8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxl
MTAuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgor
PGhlYWQ+Cis8dGl0bGU+IFRlc3QgbmVzdGVkLW5vc2NyaXB0ICBlbGVtZW50IGluIFhIVE1MTVAg
PC90aXRsZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9hbnl0aGluZyI+CithbGVydCgiWW91IHdpbGwg
c2VlIG1lIGlmIHRoZSBzY3JpcHRpbmcgbGFuZ3VhZ2UgaWRlbnRpZmllZCBieSB0aGUgdHlwZSBv
ZiBzY3JpcHQgZWxlbWVudCBpcyBzdXBwb3J0ZWQiKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8
Ym9keT4KKzxwPiBUZXN0IGZvciBuZXN0ZWQtbm9zY3JpcHQgZWxlbWVudCBpbiBYSFRNTE1QIDwv
cD4KKzxwPiBJZiB0aGUgdGVzdCBwYXNzZXMsIHlvdSB3aWxsIHNlZSB0aGUgZm9sbG93aW5nIHRo
cmVlIG5lc3RlZCBub3NjcmlwdCB0ZXh0LCBvdGhlcndpc2UsIHlvdSB3aWxsIHNlZSB0aGUgYWxl
cnQgd2luZG93LjwvcD4KKzxub3NjcmlwdD4KKzxoMT5maXJzdCBub3NjcmlwdCBlbGVtZW50IGlu
IEJPRFk8L2gxPgorPG5vc2NyaXB0PgorPGgyPjJuZCBub3NjcmlwdCBlbGVtZW50IGluIEJPRFk8
L2gyPgorPG5vc2NyaXB0PgorPGgzPjNyZCBub3NjcmlwdCBlbGVtZW50IGluIEJPRFk8L2gzPgor
PC9ub3NjcmlwdD4KKzxub3NjcmlwdD4KKzxoNT40dGggbm9zY3JpcHQgZWxlbWVudCBpbiBCT0RZ
PC9oNT4KKzwvbm9zY3JpcHQ+Cis8L25vc2NyaXB0PgorPC9ub3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC54aHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQueGh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQueGh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBF
IGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiAiaHR0
cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCI+CisKKzxodG1sIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxlPiBUZXN0
IG5vc2NyaXB0IGVsZW1lbnQgaW4gWEhUTUxNUCBkb2N1bWVudCA8L3RpdGxlPgorPG5vc2NyaXB0
PgorPGgxPlRoZSBmaXJzdCBub3NjcmlwdCBlbGVtZW50IGluIEhFQUQ8L2gxPgorPC9ub3Njcmlw
dD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2FueXRoaW5nIj4KK2FsZXJ0KCJZb3Ugd2lsbCBzZWUg
bWUgaWYgdGhlIHNjcmlwdGluZyBsYW5ndWFnZSBpZGVudGlmaWVkIGJ5IHRoZSB0eXBlIG9mIHNj
cmlwdCBlbGVtZW50IGlzIHN1cHBvcnRlZCIpOworPC9zY3JpcHQ+CisKKzxub3NjcmlwdD4KKzxo
Mj5UaGUgc2Vjb25kIG5vc2NyaXB0IGVsZW1lbnQgaW4gSEVBRDwvaDI+Cis8L25vc2NyaXB0Pgor
PC9oZWFkPgorCis8Ym9keT4KKzxub3NjcmlwdD4KKzxoMj5UaGUgdGhpcmQgbm9zY3JpcHQgZWxl
bWVudCBpbiBCT0RZPC9oMj4KKzwvbm9zY3JpcHQ+Cis8cD4gVGVzdCBmb3Igbm9zY3JpcHQgZWxl
bWVudCBpbiBYSFRNTE1QIDwvcD4KKzxwPiBJZiB0aGUgdGVzdCBwYXNzZXMsIHlvdSBjYW4gc2Vl
IHRoZSBub3NjcmlwdCB0ZXh0IGFib3ZlPC9wPgorPC9ib2R5PgorPC9odG1sPgorCg==
</data>
<flag name="review"
          id="13198"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27559</attachid>
            <date>2009-02-11 05:36:44 -0800</date>
            <delta_ts>2009-02-12 04:36:39 -0800</delta_ts>
            <desc>updated patch fixed some issues Darin pointed out</desc>
            <filename>addxhtmlmp_updateforDarin.patch</filename>
            <type>text/plain</type>
            <size>20924</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gNDA4NDYpCisrKyBkb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjEsNiArMTYxLDEwIEBACiAjaW5jbHVkZSAiV01MTmFtZXMuaCIKICNlbmRpZgogCisjaWYgRU5B
QkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVudC5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogdXNpbmcgbmFtZXNw
YWNlIFVuaWNvZGU7CkBAIC0zNzQsNiArMzc4LDEwIEBACiAKICAgICBzdGF0aWMgaW50IGRvY0lE
ID0gMDsKICAgICBtX2RvY0lEID0gZG9jSUQrKzsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBB
U1NFUlQoc2V0dGluZ3MoKSk7CisgICAgbV9zaG91bGRQcm9jZXNzTm9TY3JpcHRFbGVtZW50ID0g
IXNldHRpbmdzKCktPmlzSmF2YVNjcmlwdEVuYWJsZWQoKTsKKyNlbmRpZgogfQogCiB2b2lkIERv
Y3VtZW50OjpyZW1vdmVkTGFzdFJlZigpCkBAIC00NDE2LDQgKzQ0MjQsMTQgQEAKICAgICByZXR1
cm4gMDsKIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorYm9vbCBEb2N1bWVudDo6aXNYSFRNTE1Q
RG9jdW1lbnQoKSBjb25zdAoreworICAgIC8vIEFzIHBlciBzZWN0aW9uIDcuMiBvZiBPTUEtV0FQ
LVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwgYSBjb25mb3JtaW5nIHVzZXIgYWdlbnQKKyAg
ICAvLyBNVVNUIGFjY2VwdCBYSFRNTE1QIGRvY3VtZW50IGlkZW50aWZpZWQgYXMgImFwcGxpY2F0
aW9uL3ZuZC53YXAueGh0bWwreG1sIgorICAgIC8vIGFuZCBTSE9VTEQgYWNjZXB0IGl0IGlkZW50
aWZpZWQgYXMgImFwcGxpY2F0aW9uL3hodG1sK3htbCIKKyAgICByZXR1cm4gKGZyYW1lKCktPmxv
YWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwr
eG1sIiB8fCBmcmFtZSgpLT5sb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpID09ICJhcHBsaWNh
dGlvbi94aHRtbCt4bWwiKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9ET01JbXBs
ZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDQwODQ2KQorKysgZG9tL0RPTUltcGxlbWVudGF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDE0ICszMTMsMjIgQEAKIFBhc3NSZWZQdHI8RG9j
dW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudChjb25zdCBTdHJpbmcmIHR5
cGUsIEZyYW1lKiBmcmFtZSwgYm9vbCBpblZpZXdTb3VyY2VNb2RlKQogewogICAgIGlmIChpblZp
ZXdTb3VyY2VNb2RlKSB7Ci0gICAgICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiIHx8IHR5cGUg
PT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfHwgdHlwZSA9PSAiaW1hZ2Uvc3ZnK3htbCIgfHwg
aXNUZXh0TUlNRVR5cGUodHlwZSkgfHwgaXNYTUxNSU1FVHlwZSh0eXBlKSkKKyAgICAgICAgaWYg
KHR5cGUgPT0gInRleHQvaHRtbCIgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwreG1sIiB8
fCB0eXBlID09ICJpbWFnZS9zdmcreG1sIiB8fCBpc1RleHRNSU1FVHlwZSh0eXBlKSB8fCBpc1hN
TE1JTUVUeXBlKHR5cGUpCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICB8fCB0eXBl
ID09ICJhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCIKKyNlbmRpZgorICAgICAgICAgICAp
CiAgICAgICAgICAgICByZXR1cm4gSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6Y3JlYXRlKGZyYW1l
LCB0eXBlKTsKICAgICB9CiAKICAgICAvLyBQbHVnaW5zIGNhbm5vdCB0YWtlIEhUTUwgYW5kIFhI
VE1MIGZyb20gdXMsIGFuZCB3ZSBkb24ndCBldmVuIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1
Z2luIGRhdGFiYXNlIGZvciB0aG9zZS4KICAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIikKICAg
ICAgICAgcmV0dXJuIEhUTUxEb2N1bWVudDo6Y3JlYXRlKGZyYW1lKTsKLSAgICBpZiAodHlwZSA9
PSAiYXBwbGljYXRpb24veGh0bWwreG1sIikKKyAgICBpZiAodHlwZSA9PSAiYXBwbGljYXRpb24v
eGh0bWwreG1sIgorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICB8fCB0eXBlID09ICJhcHBs
aWNhdGlvbi92bmQud2FwLnhodG1sK3htbCIKKyNlbmRpZgorICAgICAgICApCiAgICAgICAgIHJl
dHVybiBEb2N1bWVudDo6Y3JlYXRlWEhUTUwoZnJhbWUpOwogCiAjaWYgRU5BQkxFKFdNTCkKSW5k
ZXg6IGRvbS9YTUxUb2tlbml6ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1hNTFRva2VuaXpl
clF0LmNwcAkocmV2aXNpb24gNDA4NDYpCisrKyBkb20vWE1MVG9rZW5pemVyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxMSBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg1LDYgKzkw
LDEwIEBACiAgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKICAgICAsIG1fc2F3Rmlyc3RF
bGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5BQkxF
KFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQorICAgICwgbV9oYXNE
b2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAsIG1fcGFyc2VyUGF1c2VkKGZh
bHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQogICAgICwgbV9maW5pc2hDYWxs
ZWQoZmFsc2UpCkBAIC0xMTAsNiArMTE5LDEwIEBACiAgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShm
YWxzZSkKICAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hIVE1MRG9j
dW1lbnQoZmFsc2UpCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3Vt
ZW50KGZhbHNlKQorICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYK
ICAgICAsIG1fcGFyc2VyUGF1c2VkKGZhbHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZh
bHNlKQogICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCkBAIC00MTksNiArNDMyLDEyIEBACiAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFk
ZXI6OlN0YXJ0RWxlbWVudDogeworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgaWYg
KG1fZG9jLT5pc1hIVE1MTVBEb2N1bWVudCgpICYmICFtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbikg
eworICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiRE9DVFlQRSBkZWNsYXJhdGlv
biBsYWNrLiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorI2VuZGlmIAogICAgICAgICAgICAgcGFyc2VTdGFydEVs
ZW1lbnQoKTsKICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDMsMTIgKzQ2Miwx
OCBAQAogICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkRURDogewogICAgICAgICAgICAg
Ly9xRGVidWcoKTw8Ii0tLS0tLS0tLS0tLS0gRFREIjsKICAgICAgICAgICAgIHBhcnNlRHRkKCk7
CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlv
biA9IHRydWU7CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50aXR5UmVmZXJlbmNlOiB7CiAgICAgICAgICAgICAv
L3FEZWJ1ZygpPDwiLS0tLS0tLS0tLSBFTlRJVFkgPSAiPDxtX3N0cmVhbS5uYW1lKCkudG9TdHJp
bmcoKQogICAgICAgICAgICAgLy8gICAgICAgIDw8IiwgdCA9ICI8PG1fc3RyZWFtLnRleHQoKS50
b1N0cmluZygpOwogICAgICAgICAgICAgaWYgKGlzWEhUTUxEb2N1bWVudCgpCisjaWYgRU5BQkxF
KFhIVE1MTVApCisgICAgICAgICAgICAgICAgfHwgaXNYSFRNTE1QRG9jdW1lbnQoKQorI2VuZGlm
CiAjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgICAgICAgICB8fCBpc1dNTERvY3VtZW50KCkKICNl
bmRpZgpAQCAtNTA5LDcgKzUzNCw2IEBACiAgICAgfQogCiAgICAgYm9vbCBpc0ZpcnN0RWxlbWVu
dCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CiAK
ICAgICBleGl0VGV4dCgpOwogCkBAIC01MjIsNiArNTQ2LDI2IEBACiAgICAgICAgIHVyaSA9IG1f
ZGVmYXVsdE5hbWVzcGFjZVVSSTsKICAgICB9CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBp
ZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIGlzWEhUTUxNUERvY3VtZW50KCkpIHsKKyAgICAgICAg
Ly8gQXMgcGVyIDcuMSBzZWN0aW9uIG9mIE9NQS1XQVAtWEhUTUxNUC1WMV8xLTIwMDYxMDIwLUEu
cGRmLCAKKyAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByb290IGVsZW1l
bnQgTVVTVCBiZSAnaHRtbCcgYW5kIAorICAgICAgICAvLyBlbnN1cmUgdGhlIG5hbWUgb2YgdGhl
IGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAnaHRtbCcgCisgICAgICAgIC8v
IE1VU1QgYmUgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnCisgICAgICAgIGlmIChsb2Nh
bE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7CisgICAgICAgICAgICBo
YW5kbGVFcnJvcihmYXRhbCwgIlhIVE1MTVAgZG9jdW1lbnQgZXhwZWN0cyAnaHRtbCcgYXMgcm9v
dCBlbGVtZW50LiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IAorCisgICAgICAgIGlmICh1cmkuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VV
Ukk7IAorICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOworICAgICAgICAg
ICAgbV9zdHJlYW0uYWRkRXh0cmFOYW1lc3BhY2VEZWNsYXJhdGlvbihRWG1sU3RyZWFtTmFtZXNw
YWNlRGVjbGFyYXRpb24ocHJlZml4LCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKSk7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKKwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4
LCBsb2NhbE5hbWUsIHVyaSk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBtX2Rv
Yy0+Y3JlYXRlRWxlbWVudChxTmFtZSwgdHJ1ZSwgZWMpOwpAQCAtNTgzLDIyICs2MjcsMjggQEAK
ICAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0g
dHJ1ZTsKIAotICAgIFN0cmluZyBzY3JpcHRIcmVmID0gc2NyaXB0RWxlbWVudC0+c291cmNlQXR0
cmlidXRlVmFsdWUoKTsKLSAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRlIAotICAgICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNl
dCA9IHNjcmlwdEVsZW1lbnQtPnNjcmlwdENoYXJzZXQoKTsKLSAgICAgICAgaWYgKChtX3BlbmRp
bmdTY3JpcHQgPSBtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQoc2NyaXB0SHJlZiwg
c2NyaXB0Q2hhcnNldCkpKSB7Ci0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50
OwotICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAhc3RhdGlj
X2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnQqPihzY3JpcHRFbGVtZW50KS0+c2hvdWxkRXhlY3V0ZUFz
SmF2YVNjcmlwdCgpKQorICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxl
bWVudCh0cnVlKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIFN0cmluZyBzY3Jp
cHRIcmVmID0gc2NyaXB0RWxlbWVudC0+c291cmNlQXR0cmlidXRlVmFsdWUoKTsKKyAgICAgICAg
aWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIHNy
YyBhdHRyaWJ1dGUgCisgICAgICAgICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCA9IHNjcmlwdEVs
ZW1lbnQtPnNjcmlwdENoYXJzZXQoKTsKKyAgICAgICAgICAgIGlmICgobV9wZW5kaW5nU2NyaXB0
ID0gbV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlwdEhyZWYsIHNjcmlwdENo
YXJzZXQpKSkgeworICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7Cisg
ICAgICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CiAKLSAgICAg
ICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5
IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0ZWQgaXQKLSAgICAgICAgICAgIGlmIChtX3BlbmRpbmdT
Y3JpcHQpCi0gICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7Ci0gICAgICAgIH0gZWxzZSAK
LSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
dmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShz
Y3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFy
dExpbmUpKTsKLQorICAgICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAg
aWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0ZWQgaXQKKyAgICAg
ICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAgICAgICAgICBwYXVz
ZVBhcnNpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAgICBtX3Njcmlw
dEVsZW1lbnQgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUo
KS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50
LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAg
ICB9CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgc2V0Q3VycmVudE5vZGUo
cGFyZW50LmdldCgpKTsKIH0KQEAgLTY2Miw2ICs3MTIsOSBAQAogCiB2b2lkIFhNTFRva2VuaXpl
cjo6ZW5kRG9jdW1lbnQoKQogeworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIG1faGFzRG9jVHlw
ZURlY2xhcmF0aW9uID0gZmFsc2U7CisjZW5kaWYKIH0KIAogYm9vbCBYTUxUb2tlbml6ZXI6Omhh
c0Vycm9yKCkgY29uc3QKQEAgLTc1NSw5ICs4MDgsMjUgQEAKICAgICAgICAgfHwgKHB1YmxpY0lk
ID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKSkKICAg
ICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEu
MSBwbHVzIE1hdGhNTCAyLjAvL0VOIikpCiAgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4x
U3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBsdXMgU1ZHIDEu
MS8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZP
UlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkpIHsKKyNpZiAhRU5BQkxFKFhIVE1MTVAp
CisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFRE
IFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCisjZW5kaWYKKyAgICAgICApCiAgICAgICAgIHNldElz
WEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGllcyBv
ciBub3QuCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgZWxzZSBpZiAoKHB1YmxpY0lkID09IFFM
YXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iKSkKKyAg
ICAgICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RU
RCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgeworICAgICAgICBpZiAoQXRvbWljU3RyaW5nKG5h
bWUpICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgeworICAgICAgICAgICAgaGFu
ZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVjbGFyYXRpb24sIGV4cGVjdGVkICdo
dG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gCisKKyAgICAgICAgaWYgKG1fZG9jLT5pc1hI
VE1MTVBEb2N1bWVudCgpKSAvLyBjaGVjayBpZiB0aGUgTUlNRSB0eXBlIGlzIGNvcnJlY3Qgd2l0
aCB0aGlzIG1ldGhvZAorICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsKICAgICB9
CisjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAgIGVsc2UgaWYgKG1fZG9jLT5pc1dNTERvY3Vt
ZW50KCkKICAgICAgICAgICAgICAmJiBwdWJsaWNJZCAhPSBRTGF0aW4xU3RyaW5nKCItLy9XQVBG
T1JVTS8vRFREIFdNTCAxLjMvL0VOIikKQEAgLTc3Miw0ICs4NDEsMyBAQAogfQogfQogCi0KSW5k
ZXg6IGRvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5oCShyZXZpc2lv
biA0MDg0NikKKysrIGRvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNiArMzEz
LDExIEBACiAjaWYgRU5BQkxFKFdNTCkKICAgICB2aXJ0dWFsIGJvb2wgaXNXTUxEb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAg
ICBib29sIGlzWEhUTUxNUERvY3VtZW50KCkgY29uc3Q7IAorICAgIGJvb2wgc2hvdWxkUHJvY2Vz
c05vc2NyaXB0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0
RWxlbWVudDsgfQorICAgIHZvaWQgc2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudChib29s
IHNob3VsZERvKSB7IG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0RWxlbWVudCA9IHNob3VsZERvOyB9
CisjZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZVNldCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgCiAgICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGVTZWxlY3RvcjsgfQpAQCAtOTU4LDYgKzk2MywxMCBAQAogCiAgICAg
U3RyaW5nIG1fY29udGVudExhbmd1YWdlOwogCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgYm9v
bCBtX3Nob3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQ7CisjZW5kaWYKKwogcHVibGljOgogICAg
IGJvb2wgaW5QYWdlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2luUGFnZUNhY2hlOyB9CiAgICAg
dm9pZCBzZXRJblBhZ2VDYWNoZShib29sIGZsYWcpOwpJbmRleDogZG9tL1hNTFRva2VuaXplckxp
YnhtbDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAkocmV2
aXNpb24gNDA4NDYpCisrKyBkb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDYgKzYyLDExIEBACiAjaW5jbHVkZSA8bGlieHNsdC94c2x0Lmg+CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShYSFRNTE1QKQorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxTY3JpcHRFbGVtZW50LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMwLDYgKzUzNSwxMCBAQAogICAgICwgbV9zYXdYU0xU
cmFuc2Zvcm0oZmFsc2UpCiAgICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKICAgICAsIG1f
aXNYSFRNTERvY3VtZW50KGZhbHNlKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICwgbV9pc1hI
VE1MTVBEb2N1bWVudChmYWxzZSkKKyAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNl
KQorI2VuZGlmCiAgICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGlu
Z1NjcmlwdChmYWxzZSkKICAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQpAQCAtNTUzLDYgKzU2
MiwxMCBAQAogICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCiAgICAgLCBtX3Nhd0ZpcnN0
RWxlbWVudChmYWxzZSkKICAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQorI2lmIEVOQUJM
RShYSFRNTE1QKQorICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKKyAgICAsIG1faGFz
RG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3BhcnNlclBhdXNlZChm
YWxzZSkKICAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKICAgICAsIG1fZmluaXNoQ2Fs
bGVkKGZhbHNlKQpAQCAtNzA4LDcgKzcyMSwxMyBAQAogICAgIH0KIAogICAgIGJvb2wgaXNGaXJz
dEVsZW1lbnQgPSAhbV9zYXdGaXJzdEVsZW1lbnQ7Ci0gICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0
cnVlOworI2lmIEVOQUJMRShYSFRNTE1QKSAKKyAgICAvLyBjaGVjayBpZiB0aGUgRE9DVFlQRSBE
ZWNsYXJhdGlvbiBvZiBYSFRNTE1QIGRvY3VtZW50IGV4aXN0cworICAgIGlmICghbV9oYXNEb2NU
eXBlRGVjbGFyYXRpb24gJiYgbV9kb2MtPmlzWEhUTUxNUERvY3VtZW50KCkpIHsKKyAgICAgICAg
aGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxhY2suIiwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKIAog
ICAgIGV4aXRUZXh0KCk7CiAKQEAgLTcyMiw3ICs3NDEsMjYgQEAKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwogICAgIH0KKyAKKyNpZiBFTkFC
TEUoWEhUTUxNUCkKKyAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIGlzWEhUTUxNUERvY3Vt
ZW50KCkpIHsKKyAgICAgICAgLy8gQXMgcGVyIHRoZSBzZWN0aW9uIDcuMSBvZiBPTUEtV0FQLVhI
VE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwgCisgICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1
cmUgdGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1QgYmUgJ2h0bWwnIGFuZCAKKyAgICAgICAgLy8g
ZW5zdXJlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBvbiB0aGUgcm9vdCBlbG1l
bnQgJ2h0bWwnIAorICAgICAgICAvLyBNVVNUIGJlICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3ho
dG1sJworICAgICAgICBpZiAobG9jYWxOYW1lICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5h
bWUoKSkgeworICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50
IGV4cGVjdHMgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51
bWJlcigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCisgICAgICAgIGlmICh1
cmkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxO
YW1lczo6eGh0bWxOYW1lc3BhY2VVUkk7IAorICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFt
ZXNwYWNlVVJJOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgbV9zYXdGaXJzdEVsZW1l
bnQgPSB0cnVlOworCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUXVhbGlmaWVkTmFt
ZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKICAgICBSZWZQdHI8RWxlbWVudD4gbmV3
RWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlLCBlYyk7CkBAIC04MDEs
MjIgKzgzOSwyOCBAQAogICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKICAgICBtX3JlcXVl
c3RpbmdTY3JpcHQgPSB0cnVlOwogCi0gICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVt
ZW50LT5zb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpOwotICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUgCi0gICAgICAgIFN0cmlu
ZyBzY3JpcHRDaGFyc2V0ID0gc2NyaXB0RWxlbWVudC0+c2NyaXB0Q2hhcnNldCgpOwotICAgICAg
ICBpZiAoKG1fcGVuZGluZ1NjcmlwdCA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlw
dChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKLSAgICAgICAgICAgIG1fc2NyaXB0RWxl
bWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENsaWVudCh0
aGlzKTsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVu
dCgpICYmICFzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudCo+KHNjcmlwdEVsZW1lbnQpLT5z
aG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCisgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9j
ZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworICAgIGVsc2UgCisjZW5kaWYKKyAgICB7CisgICAg
ICAgIFN0cmluZyBzY3JpcHRIcmVmID0gc2NyaXB0RWxlbWVudC0+c291cmNlQXR0cmlidXRlVmFs
dWUoKTsKKyAgICAgICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
Ly8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUgCisgICAgICAgICAgICBTdHJpbmcgc2NyaXB0Q2hh
cnNldCA9IHNjcmlwdEVsZW1lbnQtPnNjcmlwdENoYXJzZXQoKTsKKyAgICAgICAgICAgIGlmICgo
bV9wZW5kaW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlw
dEhyZWYsIHNjcmlwdENoYXJzZXQpKSkgeworICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVu
dCA9IGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQo
dGhpcyk7CiAKLSAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2Ny
aXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0ZWQgaXQKLSAgICAgICAgICAg
IGlmIChtX3BlbmRpbmdTY3JpcHQpCi0gICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7Ci0g
ICAgICAgIH0gZWxzZSAKLSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0gICAgfSBl
bHNlCi0gICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2Ny
aXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwo
KSwgbV9zY3JpcHRTdGFydExpbmUpKTsKLQorICAgICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1Nj
cmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhl
Y3V0ZWQgaXQKKyAgICAgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAg
ICAgICAgICAgICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAg
ICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG1fdmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29k
ZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRT
dGFydExpbmUpKTsKKyAgICB9CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAg
c2V0Q3VycmVudE5vZGUocGFyZW50LmdldCgpKTsKIH0KQEAgLTk0NCw2ICs5ODgsOSBAQAogdm9p
ZCBYTUxUb2tlbml6ZXI6OmVuZERvY3VtZW50KCkKIHsKICAgICBleGl0VGV4dCgpOworI2lmIEVO
QUJMRShYSFRNTE1QKQorICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gZmFsc2U7CisjZW5k
aWYKIH0KIAogdm9pZCBYTUxUb2tlbml6ZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IHhtbENoYXIq
IG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIqIHN5c3RlbUlE
KQpAQCAtOTU3LDggKzEwMDQsOSBAQAogICAgIH0KICAgICAKICAgICBpZiAobV9kb2MpIHsKKyAg
ICAgICAgU3RyaW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJRCk7CisgICAgICAgIFN0cmlu
ZyBkdGROYW1lID0gdG9TdHJpbmcobmFtZSk7CiAjaWYgRU5BQkxFKFdNTCkKLSAgICAgICAgU3Ry
aW5nIGV4dElkID0gdG9TdHJpbmcoZXh0ZXJuYWxJRCk7CiAgICAgICAgIGlmIChpc1dNTERvY3Vt
ZW50KCkKICAgICAgICAgICAgICYmIGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMv
L0VOIgogICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMi8v
RU4iCkBAIC05NjYsOCArMTAxNCwyNCBAQAogICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dB
UEZPUlVNLy9EVEQgV01MIDEuMC8vRU4iKQogICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWws
ICJJbnZhbGlkIERURCBQdWJsaWMgSUQiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsK
ICNlbmRpZgorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICBpZiAoKGV4dElkID09ICItLy9X
QVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikKKyAgICAgICAgICAgIHx8IChleHRJ
ZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIpKSB7CisgICAgICAg
ICAgICBpZiAoZHRkTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAg
ICAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkludmFsaWQgRE9DVFlQRSBkZWNsYXJh
dGlvbiwgZXhwZWN0ZWQgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNv
bHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IAog
Ci0gICAgICAgIG1fZG9jLT5hZGRDaGlsZChEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgdG9T
dHJpbmcobmFtZSksIHRvU3RyaW5nKGV4dGVybmFsSUQpLCB0b1N0cmluZyhzeXN0ZW1JRCkpKTsK
KyAgICAgICAgICAgIGlmIChtX2RvYy0+aXNYSFRNTE1QRG9jdW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7CisKKyAgICAgICAgICAgIG1faGFz
RG9jVHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAg
bV9kb2MtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jLCBkdGROYW1lLCBleHRJ
ZCwgdG9TdHJpbmcoc3lzdGVtSUQpKSk7CiAgICAgfQogfQogCkBAIC0xMTA2LDYgKzExNzAsOSBA
QAogCiAgICAgZW50ID0geG1sR2V0RG9jRW50aXR5KGN0eHQtPm15RG9jLCBuYW1lKTsKICAgICBp
ZiAoIWVudCAmJiAoZ2V0VG9rZW5pemVyKGNsb3N1cmUpLT5pc1hIVE1MRG9jdW1lbnQoKQorI2lm
IEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgICAgICB8fCBnZXRUb2tlbml6ZXIoY2xvc3Vy
ZSktPmlzWEhUTUxNUERvY3VtZW50KCkKKyNlbmRpZgogI2lmIEVOQUJMRShXTUwpCiAgICAgICAg
ICAgICAgICAgIHx8IGdldFRva2VuaXplcihjbG9zdXJlKS0+aXNXTUxEb2N1bWVudCgpCiAjZW5k
aWYKQEAgLTExNDcsNyArMTIxNCwxMCBAQAogICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1czQy8v
RFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKQogICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1czQy8v
RFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VOIikKICAgICAgICAgfHwgKGV4dElkID09
ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBsdXMgU1ZHIDEuMS8vRU4i
KQotICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEu
MC8vRU4iKSkKKyNpZiAhRU5BQkxFKFhIVE1MTVApCisgICAgICAgIHx8IChleHRJZCA9PSAiLS8v
V0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpCisjZW5kaWYKKyAgICAgICApCiAg
ICAgICAgIGdldFRva2VuaXplcihjbG9zdXJlKS0+c2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAv
LyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9yIG5vdC4KIH0KIApJbmRleDogZG9t
L05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Ob2RlLmNwcAkocmV2aXNpb24gNDA4NDYpCisr
KyBkb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjYsNyArMTIyNiw3IEBACiAgICAg
CiAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKTsK
ICAgICBpZiAocGFyZW50UmVuZGVyZXIgJiYgcGFyZW50UmVuZGVyZXItPmNhbkhhdmVDaGlsZHJl
bigpCi0jaWYgRU5BQkxFKFNWRykKKyNpZiBFTkFCTEUoU1ZHKSB8fCBFTkFCTEUoWEhUTUxNUCkK
ICAgICAgICAgJiYgcGFyZW50LT5jaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKHRoaXMpCiAjZW5k
aWYKICAgICAgICAgKSB7CkluZGV4OiBkb20vWE1MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZG9tL1hNTFRva2VuaXplci5oCShyZXZpc2lvbiA0MDg0NikKKysrIGRvbS9YTUxUb2tlbml6ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsMTAgQEAKIAogICAgICAgICB2b2lkIHNldElz
WEhUTUxEb2N1bWVudChib29sIGlzWEhUTUwpIHsgbV9pc1hIVE1MRG9jdW1lbnQgPSBpc1hIVE1M
OyB9CiAgICAgICAgIGJvb2wgaXNYSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1hI
VE1MRG9jdW1lbnQ7IH0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgdm9pZCBzZXRJc1hI
VE1MTVBEb2N1bWVudChib29sIGlzWEhUTUwpIHsgbV9pc1hIVE1MTVBEb2N1bWVudCA9IGlzWEhU
TUw7IH0KKyAgICAgICAgYm9vbCBpc1hIVE1MTVBEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNYSFRNTE1QRG9jdW1lbnQ7IH0KKyNlbmRpZgogI2lmIEVOQUJMRShXTUwpCiAgICAgICAgIGJv
b2wgaXNXTUxEb2N1bWVudCgpIGNvbnN0OwogI2VuZGlmCkBAIC0xNDksNiArMTUzLDEwIEBACiAg
ICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07CiAgICAgICAgIGJvb2wgbV9zYXdGaXJzdEVs
ZW1lbnQ7CiAgICAgICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1lbnQ7CisjaWYgRU5BQkxFKFhIVE1M
TVApCisgICAgICAgIGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVudDsKKyAgICAgICAgYm9vbCBtX2hh
c0RvY1R5cGVEZWNsYXJhdGlvbjsKKyNlbmRpZgogCiAgICAgICAgIGJvb2wgbV9wYXJzZXJQYXVz
ZWQ7CiAgICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OwpJbmRleDogZG9tL05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBkb20vTm9kZS5oCShyZXZpc2lvbiA0MDg0NikKKysrIGRvbS9Ob2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyMyw3ICs0MjMsNyBAQAogICAgIHZvaWQgY3JlYXRlUmVuZGVy
ZXJJZk5lZWRlZCgpOwogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUmVuZGVy
ZXIoKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwot
I2lmIEVOQUJMRShTVkcpCisjaWYgRU5BQkxFKFNWRykgfHwgRU5BQkxFKFhIVE1MTVApCiAgICAg
dmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KICNlbmRpZgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CkluZGV4OiBkb20vWE1MVG9rZW5pemVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBkb20vWE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gNDA4NDYp
CisrKyBkb20vWE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDcgKzE4Miwx
MiBAQAogICAgICAgICBpbnNlcnRFcnJvck1lc3NhZ2VCbG9jaygpOwogICAgIGVsc2UgewogICAg
ICAgICBleGl0VGV4dCgpOwotICAgICAgICBtX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwor
I2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAvLyBBcyBmb3IgWEhUTUxNUCBkb2N1bWVudCwg
d2UgbmVlZG4ndCB1cGRhdGUgdGhlIHN0eWxlIHNlbGVjdG9yIGhlcmUgCisgICAgICAgIC8vIHRv
IGF2b2lkIHRoZSBsYXlvdXQgb2YgPG5vc2NyaXB0PiBhcmUgY2hhbmdlZCBpbmNvcnJlY3RseS4K
KyAgICAgICAgaWYgKCFpc1hIVE1MTVBEb2N1bWVudCgpKQorI2VuZGlmCisgICAgICAgICAgICBt
X2RvYy0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwogICAgIH0KICAgICAKICAgICBzZXRDdXJyZW50
Tm9kZSgwKTsKSW5kZXg6IGxvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDA4NDYpCisrKyBsb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDEyIEBACiAgICAgewogICAgIH0K
IH07Ci0KKyAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBk
ZWZhdWx0SHR0cEFjY2VwdEhlYWRlciA9ICJhcHBsaWNhdGlvbi94bWwsYXBwbGljYXRpb24vdm5k
LndhcC54aHRtbCt4bWwsYXBwbGljYXRpb24veGh0bWwreG1sO3Byb2ZpbGU9J2h0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL3hodG1sJyx0ZXh0L2h0bWw7cT0wLjksdGV4dC9wbGFpbjtxPTAuOCxpbWFn
ZS9wbmcsKi8qO3E9MC41IjsKKyNlbHNlCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVmYXVs
dEh0dHBBY2NlcHRIZWFkZXIgPSAiYXBwbGljYXRpb24veG1sLGFwcGxpY2F0aW9uL3hodG1sK3ht
bCx0ZXh0L2h0bWw7cT0wLjksdGV4dC9wbGFpbjtxPTAuOCxpbWFnZS9wbmcsKi8qO3E9MC41IjsK
KyNlbmRpZgogc3RhdGljIGRvdWJsZSBzdG9yZWRUaW1lT2ZMYXN0Q29tcGxldGVkTG9hZDsKIHN0
YXRpYyBGcmFtZUxvYWRlcjo6TG9jYWxMb2FkUG9saWN5IGxvY2FsTG9hZFBvbGljeSA9IEZyYW1l
TG9hZGVyOjpBbGxvd0xvY2FsTG9hZHNGb3JMb2NhbE9ubHk7CiAKQEAgLTEwNTgsNiArMTA2Mywx
NSBAQAogICAgIGlmIChtX2lzTG9hZGluZ01haW5SZXNvdXJjZSB8fCAhbV9mcmFtZS0+cGFnZSgp
IHx8ICFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKKyNpZiBQTEFURk9S
TShRVCkgJiYgRU5BQkxFKFhIVE1MTVApCisgICAgLy8gRklYTUU6IFF0IGlzIGZsYXdlZAorICAg
IC8vIFRoaXMgaGFja2luZyBpcyBmb3IgZml4aW5nIG9uZSBidWcgb2YgamF2YXNyY2lwdCBpbiBY
SFRNTE1QIGRvY3VtZW50LCAKKyAgICAvLyBpLmU6IGlmIGFsZXJ0KCkgbWV0aG9kIGlzIGNvbnRh
aW5lZCBkaXJlY3RseSBpbiA8c2NyaXB0PiBlbGVtZW50LCAKKyAgICAvLyBpdCB3aWxsIGNhdXNl
IFF0TGF1bmNoZXIgY3Jhc2ggd2hlbiBmcmFtZSBsb2FkZXIgZXhlY3V0ZSBpdC4KKyAgICBpZiAo
bV9pc1J1bm5pbmdTY3JpcHQgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5pc1hIVE1MTVBEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwog
ICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU0CiAgICAg
Ly8gVGhlIGZyYW1lJ3MgbGFzdCByZWYgbWF5IGJlIHJlbW92ZWQgYW5kIGl0IGNhbiBiZSBkZWxl
dGVkIGJ5IGNoZWNrQ29tcGxldGVkKCksIAogICAgIC8vIHNvIHdlJ2xsIGFkZCBhIHByb3RlY3Rp
dmUgcmVmY291bnQKQEAgLTM1NDUsNyArMzU1OSw3IEBACiAgICAgfQogICAgIAogICAgIGlmICht
YWluUmVzb3VyY2UpCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEFjY2VwdCgiYXBwbGljYXRpb24v
eG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCx0ZXh0L2h0bWw7cT0wLjksdGV4dC9wbGFpbjtxPTAu
OCxpbWFnZS9wbmcsKi8qO3E9MC41Iik7CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUEFjY2VwdChk
ZWZhdWx0SHR0cEFjY2VwdEhlYWRlcik7CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugc2VuZCB0aGUg
T3JpZ2luIGhlYWRlci4KICAgICBhZGRIVFRQT3JpZ2luSWZOZWVkZWQocmVxdWVzdCwgU3RyaW5n
KCkpOwo=
</data>
<flag name="review"
          id="13351"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27560</attachid>
            <date>2009-02-11 05:43:43 -0800</date>
            <delta_ts>2009-02-12 04:36:39 -0800</delta_ts>
            <desc>patch for other change </desc>
            <filename>addxhtmlmp_common.patch</filename>
            <type>text/plain</type>
            <size>15711</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwODU0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzcgQEAKKzIwMDktMDIt
MTEgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNU
IENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICBBZGQgWEhUTUxNUCBzdXBwb3J0IHRv
IFdlYmtpdAorICAgICAgICBYSFRNTE1QIGlzIGEgc3RyaWN0IHN1YnNldCBvZiBYSFRNTCAxLjEu
IEl0IGV4dGVuZHMgWEhUTUwgQmFzaWMgYW5kIGFkZCBlbmhhbmNlZCAKKyAgICAgICAgZnVuY3Rp
b25hbGl0eS4gTW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0aWVzIGhhdmUgYWxyZWFkeSBiZWVuIGlt
cGxlbWVudGVkIGJ5IFdlYmtpdC4KKyAgICAgICAgVGhlIGNoYW5nZXMgaW5jbHVkaW5nOgorICAg
ICAgICAxKSBBZGRpbmcgPG5vc2NyaXB0PiBzdXBwb3J0CisgICAgICAgIDIpIERvY3VtZW50IGNv
bmZvcm1hbmNlIHZhbGlkYXRpb24KKyAgICAgICAgMykgVXNlciBBZ2VudCBjb25mb3JtYW5jZSB2
YWxpZGF0aW9uIAorICAgICAgICByZWZlciB0byB0aGUgc3BlY2lmaWNhdGlvbjogT01BLVdBUC1Y
SFRNTE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUuc2NvbnM6CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJj
ZXMuYmtsOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzWEhUTUxNUERvY3VtZW50KToKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzaG91bGRQcm9j
ZXNzTm9zY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRTaG91
bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKToKKyAgICAgICAgKiBk
b20vTm9kZS5oOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MVG9rZW5pemVyOjplbmQpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6c2V0SXNYSFRNTE1QRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjppc1hIVE1MTVBEb2N1bWVudCk6CisgICAg
ICAgICogZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1M
VG9rZW5pemVyOjpYTUxUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVy
OjpzdGFydEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OmVuZEVs
ZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OmVuZERvY3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6aW50ZXJuYWxTdWJzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0RW50aXR5SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpleHRlcm5h
bFN1YnNldEhhbmRsZXIpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcik6CisgICAgICAgIChXZWJD
b3JlOjpYTUxUb2tlbml6ZXI6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXpl
cjo6cGFyc2VTdGFydEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpw
YXJzZUVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBodG1sL0hU
TUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpub3NjcmlwdENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUZ1bmN0aW9uTWFwKToKKyAgICAgICAgKiBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OkhUTUxOb1Njcmlw
dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6fkhUTUxO
b1NjcmlwdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6
Y2hlY2tEVEQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6YXR0YWNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OnJlY2FsY1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRl
UmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5oOiBBZGRlZC4K
KyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlcjo6Z2V0Tm9kZSk6CisgICAgICAgICogaHRtbC9IVE1MVG9rZW5pemVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OnNjcmlwdEhhbmRsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRva2VuaXplcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGxvYWRlci9G
cmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZW5kSWZOb3RM
b2FkaW5nTWFpblJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphZGRF
eHRyYUZpZWxkc1RvUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3Ry
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplU3VwcG9ydGVkTm9uSW1hZ2VNaW1l
VHlwZXMpOgorCiAyMDA5LTAyLTEwICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQwODQ2KQorKysgV2Vi
Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQAogIWNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9YUEFUSD0uKTogREVGSU5FUyArPSBFTkFCTEVfWFBBVEg9MQogIyFjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfWEJMPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YQkw9MQogIWNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9XTUw9Lik6IERFRklORVMgKz0gRU5BQkxFX1dNTD0wCish
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hIVE1MTVA9Lik6IERFRklORVMgKz0gRU5BQkxFX1hI
VE1MTVA9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9Lik6IERFRklORVMgKz0gRU5B
QkxFX1NWRz0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19GT05UUz0uKTogREVGSU5F
UyArPSBFTkFCTEVfU1ZHX0ZPTlRTPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX0ZJ
TFRFUlM9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWR19GSUxURVJTPTEKQEAgLTc1Niw2ICs3NTcs
NyBAQAogICAgIGh0bWwvSFRNTFByZUVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxRdW90ZUVs
ZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcCBcCisgICAgaHRtbC9I
VE1MTm9TY3JpcHRFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAg
XAogICAgIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAgXAogICAgIGh0bWwvSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQuY3BwIFwKQEAgLTE0NzYsNiArMTQ3OCwxMCBAQAogICAgIGFkZEV4dHJhQ29t
cGlsZXJXaXRoSGVhZGVyKHdtbG5hbWVzX2IpCiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9YSFRNTE1QPTEpIHsKKyAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVf
WEhUTUxNUD0xCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgIEZF
QVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9TVkc9MQogCkluZGV4OiBXZWJDb3Jl
LnNjb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUuc2NvbnMJKHJldmlzaW9uIDQwODQ2KQorKysg
V2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCw3IEBACiAgICAgJ2h0
bWwvSFRNTFByZUVsZW1lbnQuY3BwJywKICAgICAnaHRtbC9IVE1MUXVvdGVFbGVtZW50LmNwcCcs
CiAgICAgJ2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwJywKKyAgICAnaHRtbC9IVE1MTm9TY3Jp
cHRFbGVtZW50LmNwcCcsCiAgICAgJ2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwJywKICAgICAn
aHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAnLAogICAgICdodG1sL0hUTUxTdHlsZUVsZW1lbnQu
Y3BwJywKSW5kZXg6IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0MDg0NikKKysrIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgwNiw2ICsxMzgw
NiwyMiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxodG1sXEhUTUxOb1NjcmlwdEVsZW1lbnQuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQorCQkJCQk+DQorCQkJ
CQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJV2hvbGVQcm9n
cmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhU
TUxOb1NjcmlwdEVsZW1lbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFNlbGVjdEVsZW1lbnQuY3BwIg0KIAkJCQk+DQog
CQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KSW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEdOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0MDg0NikKKysrIEdOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC05NDcsNiArOTQ3LDggQEAKIAlXZWJDb3JlL2h0bWwvSFRNTFF1b3Rl
RWxlbWVudC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwIFwKIAlXZWJD
b3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaCBcCisJV2ViQ29yZS9odG1sL0hUTUxOb1Njcmlw
dEVsZW1lbnQuY3BwIFwKKwlXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5oIFwKIAlX
ZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIFwKSW5k
ZXg6IFdlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlU291cmNlcy5ia2wJ
KHJldmlzaW9uIDQwODQ2KQorKysgV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBA
IC01OTMsNiArNTkzLDcgQEAKICAgICAgICAgaHRtbC9IVE1MUHJlRWxlbWVudC5jcHAKICAgICAg
ICAgaHRtbC9IVE1MUXVvdGVFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxTY3JpcHRFbGVt
ZW50LmNwcAorICAgICAgICBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCiAgICAgICAgIGh0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5j
cHAKICAgICAgICAgaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAKSW5kZXg6IHBsYXRm
b3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL01JTUVUeXBl
UmVnaXN0cnkuY3BwCShyZXZpc2lvbiA0MDg0NikKKysrIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDkgQEAKICAgICAgICAgInRleHQv
IiwKICAgICAgICAgImFwcGxpY2F0aW9uL3htbCIsCiAgICAgICAgICJhcHBsaWNhdGlvbi94aHRt
bCt4bWwiLAorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAiYXBwbGljYXRpb24vdm5kLndh
cC54aHRtbCt4bWwiLAorI2VuZGlmCiAgICAgICAgICJhcHBsaWNhdGlvbi9yc3MreG1sIiwKICAg
ICAgICAgImFwcGxpY2F0aW9uL2F0b20reG1sIiwKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogaHRt
bC9IVE1MTm9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MTm9TY3JpcHRF
bGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBIVE1MTm9TY3JpcHRFbGVtZW50X2gKKyNkZWZpbmUgSFRNTE5v
U2NyaXB0RWxlbWVudF9oCisKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxOb1NjcmlwdEVsZW1l
bnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworcHVibGljOgorICAgIEhUTUxOb1NjcmlwdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgfkhUTUxOb1NjcmlwdEVs
ZW1lbnQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CisgICAg
dmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHls
ZUNoYW5nZSk7CisgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25z
dDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IGh0bWwvSFRN
TFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24g
NDA4NDYpCisrKyBodG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzIsNyAr
ODcyLDkgQEAKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChub2JyVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVu
Y3Rpb25NYXAuc2V0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6
bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KG5vZnJh
bWVzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vZnJhbWVzQ3JlYXRlRXJy
b3JDaGVjayk7CisjaWYgIUVOQUJMRShYSFRNTE1QKQogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0
KG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vc2NyaXB0Q3Jl
YXRlRXJyb3JDaGVjayk7CisjZW5kaWYKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChvbFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7
CiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQocFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1M
UGFyc2VyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgICAgIGdGdW5jdGlvbk1hcC5z
ZXQocGxhaW50ZXh0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OnBDbG9zZXJD
cmVhdGVFcnJvckNoZWNrKTsKSW5kZXg6IGh0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGh0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDg0NikKKysrIGh0bWwvSFRNTEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODQsMTEgKzk4NCwxMyBAQAogICAgIAogYm9v
bCBIVE1MRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpCiB7Cisj
aWYgIUVOQUJMRShYSFRNTE1QKQogICAgIGlmIChoYXNMb2NhbE5hbWUobm9zY3JpcHRUYWcpKSB7
CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAg
ICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyNlbmRpZgogICAgIHJldHVybiAoZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcykgfHwgKHN0eWxlLT5kaXNwbGF5KCkg
IT0gTk9ORSk7CiB9CiAgICAgCkluZGV4OiBodG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiA0MDg0NikK
KysrIGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNiAr
ODUsMTAgQEAKICNpbmNsdWRlICJIVE1MVUxpc3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZp
ZGVvRWxlbWVudC5oIgogCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5vU2Ny
aXB0RWxlbWVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKQEAgLTMzMyw2ICszMzcsMTMgQEAKICAgICByZXR1cm4gbmV3IEhU
TUxTY3JpcHRFbGVtZW50KHNjcmlwdFRhZywgZG9jLCBjcmVhdGVkQnlQYXJzZXIpOwogfQogCisj
aWYgRU5BQkxFKFhIVE1MTVApCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbm9zY3Jp
cHRDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZv
cm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1M
Tm9TY3JpcHRFbGVtZW50KG5vc2NyaXB0VGFnLCBkb2MpOworfQorI2VuZGlmCisKIHN0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxFbGVtZW50PiB0YWJsZUNvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVy
biBuZXcgSFRNTFRhYmxlRWxlbWVudCh0YWJsZVRhZywgZG9jKTsKQEAgLTQ3MCw2ICs0ODEsOSBA
QAogICAgIGFkZFRhZyhwcmVUYWcsIHByZUNvbnN0cnVjdG9yKTsKICAgICBhZGRUYWcocVRhZywg
cXVvdGVDb25zdHJ1Y3Rvcik7CiAgICAgYWRkVGFnKHNjcmlwdFRhZywgc2NyaXB0Q29uc3RydWN0
b3IpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGFkZFRhZyhub3NjcmlwdFRhZywgbm9zY3Jp
cHRDb25zdHJ1Y3Rvcik7CisjZW5kaWYKICAgICBhZGRUYWcoc2VsZWN0VGFnLCBzZWxlY3RDb25z
dHJ1Y3Rvcik7CiAgICAgYWRkVGFnKHN0eWxlVGFnLCBzdHlsZUNvbnN0cnVjdG9yKTsKICAgICBh
ZGRUYWcodGFibGVUYWcsIHRhYmxlQ29uc3RydWN0b3IpOwpJbmRleDogaHRtbC9IVE1MTm9TY3Jp
cHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAwKQorKysgaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAi
SFRNTE5vU2NyaXB0RWxlbWVudC5oIgorCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKKworSFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5vU2NyaXB0RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogSFRN
TEVsZW1lbnQodGFnTmFtZSwgZG9jKQoreworICAgIEFTU0VSVChoYXNUYWdOYW1lKG5vc2NyaXB0
VGFnKSk7Cit9CisKK0hUTUxOb1NjcmlwdEVsZW1lbnQ6On5IVE1MTm9TY3JpcHRFbGVtZW50KCkK
K3sKK30KKworYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBu
ZXdDaGlsZCkKK3sKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSB8fCBpbkJsb2Nr
VGFnTGlzdChuZXdDaGlsZCk7IAorfQorCit2b2lkIEhUTUxOb1NjcmlwdEVsZW1lbnQ6OmF0dGFj
aCgpCit7CisgICAgQVNTRVJUKCFyZW5kZXJlcigpKTsKKyAgICAvLyBJbiBvcmRlciB0byBtYWtl
IHRoZSBjb250ZW50IHdpdGhpbiBub3NjcmlwdCBub2RlIHZpc2libGUsCisgICAgLy8gd2Ugc2hv
dWxkIGF0dGFjaCByZW5kZXIgb2JqZWN0IHRvIG5vc2NyaXB0IG5vZGUsIHRoZW4gaXRzIGNoaWxk
cmVuIAorICAgIC8vIGNhbiBzaGFyZSBpdHMgcmVuZGVyIHN0eWxlIHRvIGNyZWF0ZSB0aGVpciBv
d24gcmVuZGVyIG9iamVjdHMKKyAgICBSZWZQdHI8Tm9kZT4gcGFyZW50ID0gdGhpczsKKyAgICBS
ZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gMDsKKyAgICB3aGlsZShwYXJlbnQgPSBwYXJl
bnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZihwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+
cmVuZGVyZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBBU1NFUlQocGFyZW50
UmVuZGVyZXIpOworCisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxl
OjpjcmVhdGUoKTsKKyAgICBzdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50UmVuZGVyZXItPnN0eWxl
KCkpOworCisgICAgUmVuZGVyT2JqZWN0KiBybyA9IGNyZWF0ZVJlbmRlcmVyKHBhcmVudFJlbmRl
cmVyLT5yZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7CisgICAgaWYgKHJvKSB7CisgICAgICAg
IHNldFJlbmRlcmVyKHJvKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUpOwor
ICAgICAgICBwYXJlbnRSZW5kZXJlci0+YWRkQ2hpbGQocmVuZGVyZXIoKSwgbmV4dFJlbmRlcmVy
KCkpOworICAgIH0KKworICAgIENvbnRhaW5lck5vZGU6OmF0dGFjaCgpOworCisgICAgLy8gSWYg
bm8gbmVlZCB0byBwcm9jZXNzIDxub3NjcmlwdD4sIHdlIGhpZGUgaXQKKyAgICBpZiAoIWRvY3Vt
ZW50KCktPnNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSkgeworICAgICAgICBzdHlsZS0+
c2V0RGlzcGxheShOT05FKTsKKyAgICAgICAgc2V0Q2hhbmdlZCgpOworICAgIH0KK30KKwordm9p
ZCBIVE1MTm9TY3JpcHRFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCit7
CisgICAgaWYgKCFkb2N1bWVudCgpLT5zaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIElmIDxub3NjcmlwdD4gbmVlZHMgcHJvY2Vzc2luZywg
d2UgbWFrZSBpdCB2aXNpYWJsZSBoZXJlLgorICAgIEFTU0VSVChyZW5kZXJlcigpKTsKKyAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsgCisgICAgQVNT
RVJUKHN0eWxlKTsKKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FKSB7CisgICAgICAg
IHN0eWxlLT5zZXREaXNwbGF5KElOTElORSk7CisKKyAgICAgICAgLy8gY3JlYXRlIHJlbmRlcmVy
cyBmb3IgaXRzIGNoaWxkcmVuCisgICAgICAgIGlmIChoYXNDaGlsZE5vZGVzKCkpIHsKKyAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogcm8gPSAgMDsKKworICAgICAgICAgICAgZm9yIChOb2RlKiBu
ID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkKKyAgICAg
ICAgICAgICAgICBpZiAoIW4tPnJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgICAgIG4tPmNy
ZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBIVE1M
Tm9TY3JpcHRFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqIGNoaWxkKSBj
b25zdAoreworICAgIHJldHVybiBkb2N1bWVudCgpLT5zaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVt
ZW50KCk7Cit9CisKK30KKyNlbmRpZgpJbmRleDogaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBodG1sL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiA0MDg0NikKKysrIGh0
bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSw2ICs0NTUsMTAgQEAK
ICAgICAgICAgICAgIH0gZWxzZQogI2VuZGlmCiAgICAgICAgICAgICBkb1NjcmlwdEV4ZWMgPSBt
X3NjcmlwdE5vZGUtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKTsKKyNpZiBFTkFCTEUoWEhU
TUxNUCkKKyAgICAgICAgICAgIGlmICghZG9TY3JpcHRFeGVjKQorICAgICAgICAgICAgICAgIG1f
ZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworI2VuZGlmCiAgICAg
ICAgICAgICBtX3NjcmlwdE5vZGUgPSAwOwogICAgICAgICB9CiAgICAgfQpAQCAtMTk4NCw2ICsx
OTg4LDEwIEBACiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhU
TUxTY3JpcHRFbGVtZW50Kj4obi5nZXQoKSktPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkK
ICAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9uKHNvdXJjZUNvZGUsIG1f
c3RhdGUpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworI2Vu
ZGlmCiAgICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkubG9h
ZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAK
</data>
<flag name="review"
          id="13352"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27561</attachid>
            <date>2009-02-11 05:44:54 -0800</date>
            <delta_ts>2009-02-12 04:33:04 -0800</delta_ts>
            <desc>Layout tests for XHTMLMP</desc>
            <filename>addxhtmlmp_layouttests.patch</filename>
            <type>text/plain</type>
            <size>5370</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQwODU0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDItMTEgIFlpY2hhbyBZaW4gIDx5aWNo
YW8ueWluQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGZhc3QveGh0bWxtcDogQWRkZWQuCisgICAgICAgICogZmFz
dC94aHRtbG1wL2NoZWNrLWRvY3R5cGUtZGVjbGFyYXRpb24ueGh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54aHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC94aHRtbG1wL25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC94aHRtbG1wL25vc2NyaXB0LW5lc3RlZC54aHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC94aHRtbG1wL25vc2NyaXB0LnhodG1sOiBBZGRlZC4KKwogMjAwOS0wMi0xMCAg
T2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFk
ZWxlIFBldGVyc29uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL2NoZWNrLWRvY3R5
cGUtZGVjbGFyYXRpb24ueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94aHRt
bG1wL2NoZWNrLWRvY3R5cGUtZGVjbGFyYXRpb24ueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stZG9jdHlwZS1kZWNsYXJhdGlvbi54aHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tCis8
IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8v
RU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTEuZHRkIj4KKy0t
PgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8
dGl0bGU+VGVzdCBkb2N1bWVudCBjb25mb3JtYW5jZSBvZiBYSFRNTE1QPC90aXRsZT4KKzwvaGVh
ZD4KKzxib2R5IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZyI+Cis8cD4gYnJvd3NlciBzaG91bGQg
cmVwb3J0IERPQ1RZUEUgZGVjbGFyYXRpb24gbG9zZSBlcnJvciA8L3A+Cis8aHIvPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LWluLW11
bHRpc2NyaXB0cy54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAv
bm9zY3JpcHQtaW4tbXVsdGlzY3JpcHRzLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRt
bCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iICJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTEuZHRkIj4KKworPGh0bWwgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+IFRlc3Qgbm9z
Y3JpcHQgaW4gbXVsaXRwbGUgc2NyaXB0IGVsZW1lbnRzIDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxi
b2R5PiAKKzxwPiBUZXN0IG5vc2NyaXB0IGluIG11bGl0cGxlIHNjcmlwdCBlbGVtZW50cyA8L3A+
CisKKzxhIGhyZWY9ImphdmFzY3JpcHQ6dGVzdEZ1bigpIj4gY2xpa2UgbWUsIGphdmFzY3JpcHQg
Y29kZSB3b24ndCBiZSBleGVjdXRlZCBzaW5jZSB0eXBlIG9mICZsdDtzY3JpcHQmZ3Q7IGlzIHdy
b25nPC9hPgorPHA+Cis8bm9zY3JpcHQ+Cis8aDE+Jmx0O2gxJmd0O2ZpcnN0IG5vc2NyaXB0IGVs
ZW1lbnQmbHQ7aDEmZ3Q7PC9oMT4KK3BsYWluIHRleHQgaW4gbm9zY3JpcHQKKzwvbm9zY3JpcHQ+
CisKKzxzY3JpcHQgdHlwZT0idGV4dC93cm9uZ3R5cGUiPgorZnVuY3Rpb24gdGVzdEZ1bigpIHsK
KyAgICBhbGVydCgidGhlIGZpcnN0IHNjcmlwdCIpOworfQorPC9zY3JpcHQ+CisKKzxub3Njcmlw
dD4KKzxoMj4gJmx0O2gyJmd0O3NlY29uZCBub3NjcmlwdCBlbGVtZW50Jmx0O2gyJmd0OzwvaDI+
Cis8L25vc2NyaXB0PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlv
biB0ZXN0RnVuMigpIHsKKyAgICBhbGVydCgidGhlIHNlY29uZCBzY3JpcHQiKTsKK30KKzwvc2Ny
aXB0PgorPC9wPgorCis8YSBocmVmPSJqYXZhc2NyaXB0OnRlc3RGdW4yKCkiPiBjbGlrZSBtZSB0
byBleGVjdXRlIGphdmFzY3JpcHQgY29kZTwvYT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54aHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stcm9vdGVsZW1lbnQueGh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stcm9vdGVsZW1lbnQu
eGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAx
LjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTExLmR0ZCI+
CisKKzxhbnkgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8
dGl0bGU+VGVzdCBkb2N1bWVudCBjb25mb3JtYW5jZSBvZiBYSFRNTE1QPC90aXRsZT4KKzwvaGVh
ZD4KKzxib2R5PgorPHA+IFRoaXMgaXMgQk9EWSA8L3A+Cis8L2JvZHk+Cis8L2FueT4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1uZXN0ZWQueGh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LW5lc3RlZC54aHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1uZXN0ZWQueGh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pgor
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEv
L0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTExLmR0ZCI+CisK
KzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRp
dGxlPiBUZXN0IG5lc3RlZC1ub3NjcmlwdCAgZWxlbWVudCBpbiBYSFRNTE1QIDwvdGl0bGU+Cis8
c2NyaXB0IHR5cGU9InRleHQvd3Jvbmd0eXBlIj4KK2Z1bmN0aW9uIHRlc3RGdW5jKCkgeworYWxl
cnQoIllvdSB3aWxsIHNlZSBtZSBpZiB0aGUgc2NyaXB0aW5nIGxhbmd1YWdlIGlkZW50aWZpZWQg
YnkgdGhlIHR5cGUgb2Ygc2NyaXB0IGVsZW1lbnQgaXMgc3VwcG9ydGVkIik7Cit9Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJ0ZXN0RnVuYygpIj4KKzxwPiBUZXN0IGZvciBu
ZXN0ZWQtbm9zY3JpcHQgZWxlbWVudCBpbiBYSFRNTE1QIDwvcD4KKzxwPiBJZiB0aGUgdGVzdCBw
YXNzZXMsIHlvdSB3aWxsIHNlZSB0aGUgZm9sbG93aW5nIHRocmVlIG5lc3RlZCBub3NjcmlwdCB0
ZXh0LCBvdGhlcndpc2UsIHlvdSB3aWxsIHNlZSB0aGUgYWxlcnQgd2luZG93LjwvcD4KKzxub3Nj
cmlwdD4KKzxoMT5maXJzdCBub3NjcmlwdCBlbGVtZW50PC9oMT4KKzxub3NjcmlwdD4KKzxoMj5z
ZWNvbmQgbm9zY3JpcHQgZWxlbWVudDwvaDI+Cis8bm9zY3JpcHQ+Cis8aDM+dGhpcmQgbm9zY3Jp
cHQgZWxlbWVudDwvaDM+Cis8L25vc2NyaXB0PgorPG5vc2NyaXB0PgorPGg1PmZvdXJ0aCBub3Nj
cmlwdCBlbGVtZW50PC9oNT4KKzwvbm9zY3JpcHQ+Cis8L25vc2NyaXB0PgorPC9ub3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3Njcmlw
dC54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQu
eGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQu
eGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAx
LjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTExLmR0ZCI+
CisKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgor
PHRpdGxlPiBUZXN0IG5vc2NyaXB0IGVsZW1lbnQgaW4gWEhUTUxNUCBkb2N1bWVudCA8L3RpdGxl
PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9ImphdmFzY3JpcHQ6ZnVuYygpIj4KKzxwPiBUZXN0
IGZvciBub3NjcmlwdCBlbGVtZW50IGluIFhIVE1MTVAgPC9wPgorPHA+IElmIHRoZSB0ZXN0IHBh
c3NlcywgeW91IGNhbiBzZWUgdGhlIG5vc2NyaXB0IHRleHQgYWJvdmU8L3A+CisKKzxub3Njcmlw
dD4KKzxoMT4mbHQ7aDEmZ3Q7VGhlIGZpcnN0IG5vc2NyaXB0IGVsZW1lbnQmbHQ7aDEmZ3Q7PC9o
MT4KKzwvbm9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC93cm9uZ3R5cGUiPgorZnVuY3Rp
b24gZnVuYygpIHsKK2FsZXJ0KCJZb3Ugd2lsbCBzZWUgbWUgaWYgdGhlIHNjcmlwdGluZyBsYW5n
dWFnZSBpZGVudGlmaWVkIGJ5IHRoZSB0eXBlIG9mIHNjcmlwdCBlbGVtZW50IGlzIHN1cHBvcnRl
ZCIpOworfQorPC9zY3JpcHQ+CisKKzxub3NjcmlwdD4KKzxoMj4mbHQ7aDImZ3Q7VGhlIHNlY29u
ZCBub3NjcmlwdCBlbGVtZW50Jmx0O2gyJmd0OzwvaDI+Cis8L25vc2NyaXB0PgorCis8L2JvZHk+
Cis8L2h0bWw+CisK
</data>
<flag name="review"
          id="13353"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27593</attachid>
            <date>2009-02-12 04:33:04 -0800</date>
            <delta_ts>2009-05-13 04:26:18 -0700</delta_ts>
            <desc>updated patch about layout tests for XHTMLMP</desc>
            <filename>addxhtmlmp_layouttests.v1.patch</filename>
            <type>text/plain</type>
            <size>7766</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQwOTAwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMDItMTIgIFlpY2hhbyBZaW4gIDx5aWNo
YW8ueWluQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTa2lwIHRoZSB0ZXN0cyBmb3Igbm9uLVFUIHBsYXRmb3JtIHNp
bmNlIG9ubHkgdGVzdCB0aGVtIG9uIFF0IHNvIGZhcgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ1MgorCisgICAgICAgICogZmFzdC94aHRtbG1w
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvY2hlY2stZG9jdHlwZS1kZWNsYXJhdGlv
bi54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC94aHRtbG1wL2NoZWNrLXJvb3RlbGVtZW50
LnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9zY3JpcHQtaW4tbXVsdGlz
Y3JpcHRzLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9zY3JpcHQtbmVz
dGVkLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9zY3JpcHQueGh0bWw6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDA5
LTAyLTExICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dz
IGZpeCBmb3IgQnVnIDIyMjM5OiBJbXBsZW1lbnQgbWlzc2luZyBhbmltYXRpb24gJiB0cmFuc2l0
aW9uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stZG9jdHlwZS1kZWNsYXJh
dGlvbi54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2st
ZG9jdHlwZS1kZWNsYXJhdGlvbi54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QveGh0bWxtcC9jaGVjay1kb2N0eXBlLWRlY2xhcmF0aW9uLnhodG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhLS0KKzwhRE9DVFlQRSBo
dG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIgImh0dHA6
Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMS5kdGQiPgorLS0+Cis8aHRtbCB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzx0aXRsZT5UZXN0
IGRvY3VtZW50IGNvbmZvcm1hbmNlIG9mIFhIVE1MTVA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+
Cis8cD4gYnJvd3NlciBzaG91bGQgcmVwb3J0IERPQ1RZUEUgZGVjbGFyYXRpb24gbGFjayBlcnJv
ciA8L3A+Cis8aHIvPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94
aHRtbG1wL2NoZWNrLXJvb3RlbGVtZW50LnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54aHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54aHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRt
bCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iICJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTEuZHRkIj4KKworPGFueSB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IGRvY3Vt
ZW50IGNvbmZvcm1hbmNlIG9mIFhIVE1MTVA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD4g
VGhpcyBpcyBCT0RZIDwvcD4KKzwvYm9keT4KKzwvYW55PgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC94aHRtbG1wL25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQtaW4tbXVsdGlzY3JpcHRzLnhodG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LWluLW11bHRp
c2NyaXB0cy54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwg
TW9iaWxlIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxl
MTEuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgor
PGhlYWQ+Cis8dGl0bGU+IFRlc3Qgbm9zY3JpcHQgaW4gbXVsaXRwbGUgc2NyaXB0IGVsZW1lbnRz
IDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PiAKKzxoMT4gVGVzdCBub3NjcmlwdCBpbiBtdWxp
dHBsZSBzY3JpcHQgZWxlbWVudHMgPC9oMT4KKworPGEgaHJlZj0iamF2YXNjcmlwdDp0ZXN0RnVu
KCkiPiBjbGlrZSBtZSwgamF2YXNjcmlwdCBjb2RlIHdvbid0IGJlIGV4ZWN1dGVkIHNpbmNlIHR5
cGUgb2YgJmx0O3NjcmlwdCZndDsgaXMgd3Jvbmc8L2E+Cis8cD4KKzxub3NjcmlwdD4KKzxoMT4m
bHQ7aDEmZ3Q7Zmlyc3Qgbm9zY3JpcHQgZWxlbWVudCZsdDtoMSZndDs8L2gxPgorcGxhaW4gdGV4
dCBpbiBub3NjcmlwdAorPC9ub3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L3dyb25ndHlw
ZSI+CitmdW5jdGlvbiB0ZXN0RnVuKCkgeworICAgIGFsZXJ0KCJ0aGUgZmlyc3Qgc2NyaXB0Iik7
Cit9Cis8L3NjcmlwdD4KKworPG5vc2NyaXB0PgorPGgyPiAmbHQ7aDImZ3Q7c2Vjb25kIG5vc2Ny
aXB0IGVsZW1lbnQmbHQ7aDImZ3Q7PC9oMj4KKzwvbm9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIHRlc3RGdW4yKCkgeworICAgIGFsZXJ0KCJ0aGUg
c2Vjb25kIHNjcmlwdCIpOworfQorPC9zY3JpcHQ+Cis8L3A+CisKKzxhIGhyZWY9ImphdmFzY3Jp
cHQ6dGVzdEZ1bjIoKSI+IGNsaWtlIG1lIHRvIGV4ZWN1dGUgamF2YXNjcmlwdCBjb2RlPC9hPgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0
LW5lc3RlZC54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9z
Y3JpcHQtbmVzdGVkLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94aHRt
bG1wL25vc2NyaXB0LW5lc3RlZC54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
eGh0bWwtbW9iaWxlMTEuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+IFRlc3QgbmVzdGVkLW5vc2NyaXB0ICBlbGVtZW50
IGluIFhIVE1MTVAgPC90aXRsZT4KKzxzY3JpcHQgdHlwZT0idGV4dC93cm9uZ3R5cGUiPgorZnVu
Y3Rpb24gdGVzdEZ1bmMoKSB7CithbGVydCgiWW91IHdpbGwgc2VlIG1lIGlmIHRoZSBzY3JpcHRp
bmcgbGFuZ3VhZ2UgaWRlbnRpZmllZCBieSB0aGUgdHlwZSBvZiBzY3JpcHQgZWxlbWVudCBpcyBz
dXBwb3J0ZWQiKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InRlc3RG
dW5jKCkiPgorPHA+IFRlc3QgZm9yIG5lc3RlZC1ub3NjcmlwdCBlbGVtZW50IGluIFhIVE1MTVAg
PC9wPgorPHA+IElmIHRoZSB0ZXN0IHBhc3NlcywgeW91IHdpbGwgc2VlIHRoZSBmb2xsb3dpbmcg
dGhyZWUgbmVzdGVkIG5vc2NyaXB0IHRleHQsIG90aGVyd2lzZSwgeW91IHdpbGwgc2VlIHRoZSBh
bGVydCB3aW5kb3cuPC9wPgorPG5vc2NyaXB0PgorPGgxPmZpcnN0IG5vc2NyaXB0IGVsZW1lbnQ8
L2gxPgorPG5vc2NyaXB0PgorPGgyPnNlY29uZCBub3NjcmlwdCBlbGVtZW50PC9oMj4KKzxub3Nj
cmlwdD4KKzxoMz50aGlyZCBub3NjcmlwdCBlbGVtZW50PC9oMz4KKzwvbm9zY3JpcHQ+Cis8bm9z
Y3JpcHQ+Cis8aDU+Zm91cnRoIG5vc2NyaXB0IGVsZW1lbnQ8L2g1PgorPC9ub3NjcmlwdD4KKzwv
bm9zY3JpcHQ+Cis8L25vc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QveGh0bWxtcC9ub3NjcmlwdC54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QveGh0bWxtcC9ub3NjcmlwdC54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZP
UlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9E
VEQveGh0bWwtbW9iaWxlMTEuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+IFRlc3Qgbm9zY3JpcHQgZWxlbWVudCBpbiBY
SFRNTE1QIGRvY3VtZW50IDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0iamF2YXNj
cmlwdDpmdW5jKCkiPgorPHA+IFRlc3QgZm9yIG5vc2NyaXB0IGVsZW1lbnQgaW4gWEhUTUxNUCA8
L3A+Cis8cD4gSWYgdGhlIHRlc3QgcGFzc2VzLCB5b3UgY2FuIHNlZSB0aGUgbm9zY3JpcHQgdGV4
dCBhYm92ZTwvcD4KKworPG5vc2NyaXB0PgorPGgxPiZsdDtoMSZndDtUaGUgZmlyc3Qgbm9zY3Jp
cHQgZWxlbWVudCZsdDtoMSZndDs8L2gxPgorPC9ub3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0
ZXh0L3dyb25ndHlwZSI+CitmdW5jdGlvbiBmdW5jKCkgeworYWxlcnQoIllvdSB3aWxsIHNlZSBt
ZSBpZiB0aGUgc2NyaXB0aW5nIGxhbmd1YWdlIGlkZW50aWZpZWQgYnkgdGhlIHR5cGUgb2Ygc2Ny
aXB0IGVsZW1lbnQgaXMgc3VwcG9ydGVkIik7Cit9Cis8L3NjcmlwdD4KKworPG5vc2NyaXB0Pgor
PGgyPiZsdDtoMiZndDtUaGUgc2Vjb25kIG5vc2NyaXB0IGVsZW1lbnQmbHQ7aDImZ3Q7PC9oMj4K
Kzwvbm9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1NraXBwZWQJKHJldmlzaW9uIDQwODQ2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTIyMTYsMyArMjIxNiwxMCBAQCBwbHVnaW5zL25ldHNj
YXBlLWRvbS1hY2Nlc3MuaHRtbAogIyBUZXN0cyBpbiB0cmFuc2l0aW9ucy8gZGlyZWN0b3J5CiAj
IFRlc3RzIGdlbmVyYXRpbmcgbmV3IHJlc3VsdHMKIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tZHJ0
LWFwaS5odG1sCisKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NDUyIEFkZCBYSFRNTE1QIHRvIHdla2l0LCBpZ25vcmUgdGhlc2UgdGVzdHMgc2luY2UgaGF2ZW4n
dCBiZWVuIHZlcmlmaWVkIG9uIEdUSyAKK2Zhc3QveGh0bWxtcC9jaGVjay1kb2N0eXBlLWRlY2xh
cmF0aW9uLnhodG1sCitmYXN0L3hodG1sbXAvY2hlY2stcm9vdGVsZW1lbnQueGh0bWwKK2Zhc3Qv
eGh0bWxtcC9ub3NjcmlwdC54aHRtbAorZmFzdC94aHRtbG1wL25vc2NyaXB0LWluLW11bHRpc2Ny
aXB0cy54aHRtbAorZmFzdC94aHRtbG1wL25vc2NyaXB0LW5lc3RlZC54aHRtbApJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1NraXBwZWQJKHJldmlzaW9uIDQwODQ2KQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDMgKzQ2LDEwIEBAIHRhYmxl
cy9tb3ppbGxhX2V4cGVjdGVkX2ZhaWx1cmVzL2J1Z3MvYnUKIAogIyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MTMgUmVwYWludCBwaXhlbCB0ZXN0IGZhaWx1cmUK
IGZhc3QvcmVwYWludC9ib2R5LWJhY2tncm91bmQtaW1hZ2UuaHRtbAorCisjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ1MiBBZGQgWEhUTUxNUCB0byB3ZWtpdCwg
aWdub3JlIHRoZXNlIHRlc3RzIHNpbmNlIGhhdmVuJ3QgYmVlbiB2ZXJpZmllZCBvbiBNQUMKK2Zh
c3QveGh0bWxtcC9jaGVjay1kb2N0eXBlLWRlY2xhcmF0aW9uLnhodG1sCitmYXN0L3hodG1sbXAv
Y2hlY2stcm9vdGVsZW1lbnQueGh0bWwKK2Zhc3QveGh0bWxtcC9ub3NjcmlwdC54aHRtbAorZmFz
dC94aHRtbG1wL25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRtbAorZmFzdC94aHRtbG1wL25v
c2NyaXB0LW5lc3RlZC54aHRtbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBw
ZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlz
aW9uIDQwODQ2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHdvcmtpbmcg
Y29weSkKQEAgLTQzNiwzICs0MzYsMTAgQEAgdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1kcnQtYXBp
Lmh0bWwKIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tZHJ0LWFwaS1kZWxheS5odG1sCiB0cmFuc2l0
aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sCiB0cmFuc2l0aW9ucy96ZXJvLWR1
cmF0aW9uLW5vbi16ZXJvLWRlbGF5LWVuZC5odG1sCisKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNDUyIEFkZCBYSFRNTE1QIHRvIHdla2l0LCBpZ25vcmUgdGhl
c2UgdGVzdHMgc2luY2UgaGF2ZW4ndCBiZWVuIHZlcmlmaWVkIG9uIFdpbmRvd3MKK2Zhc3QveGh0
bWxtcC9jaGVjay1kb2N0eXBlLWRlY2xhcmF0aW9uLnhodG1sCitmYXN0L3hodG1sbXAvY2hlY2st
cm9vdGVsZW1lbnQueGh0bWwKK2Zhc3QveGh0bWxtcC9ub3NjcmlwdC54aHRtbAorZmFzdC94aHRt
bG1wL25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRtbAorZmFzdC94aHRtbG1wL25vc2NyaXB0
LW5lc3RlZC54aHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27594</attachid>
            <date>2009-02-12 04:36:39 -0800</date>
            <delta_ts>2009-05-13 04:30:09 -0700</delta_ts>
            <desc>patch about configure files</desc>
            <filename>addxhtmlmp_config.patch</filename>
            <type>text/plain</type>
            <size>6932</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwOTAw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODQgQEAKKzIwMDktMDIt
MTIgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgWEhUTUxNUCBzdXBw
b3J0IHRvIFdlYmtpdAorICAgICAgICBYSFRNTE1QIGlzIGEgc3RyaWN0IHN1YnNldCBvZiBYSFRN
TCAxLjEuIEl0IGV4dGVuZHMgWEhUTUwgQmFzaWMgYW5kIGFkZCBlbmhhbmNlZCAKKyAgICAgICAg
ZnVuY3Rpb25hbGl0eS4gTW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0aWVzIGhhdmUgYWxyZWFkeSBi
ZWVuIGltcGxlbWVudGVkIGJ5IFdlYmtpdC4KKyAgICAgICAgVGhlIGNoYW5nZXMgaW5jbHVkaW5n
OgorICAgICAgICAxKSBBZGRpbmcgPG5vc2NyaXB0PiBzdXBwb3J0CisgICAgICAgIDIpIERvY3Vt
ZW50IGNvbmZvcm1hbmNlIHZhbGlkYXRpb24KKyAgICAgICAgMykgVXNlciBBZ2VudCBjb25mb3Jt
YW5jZSB2YWxpZGF0aW9uIAorICAgICAgICByZWZlciB0byB0aGUgc3BlY2lmaWNhdGlvbjogT01B
LVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYKKworICAgICAgICBUZXN0czogZmFzdC94
aHRtbG1wL2NoZWNrLWRvY3R5cGUtZGVjbGFyYXRpb24ueGh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94
aHRtbG1wL25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRtbAorICAgICAgICAgICAgICAgZmFz
dC94aHRtbG1wL25vc2NyaXB0LW5lc3RlZC54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94aHRt
bG1wL25vc2NyaXB0LnhodG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnNjb25zOgorICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoK
KyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojppc1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkUHJvY2Vzc05vc2Ny
aXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U2hvdWxkUHJvY2Vz
c05vc2NyaXB0RWxlbWVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAqIGRvbS9YTUxUb2tl
bml6ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6c2V0SXNYSFRNTE1QRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjppc1hIVE1MTVBEb2N1bWVu
dCk6CisgICAgICAgICogZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MVG9rZW5pemVyOjpYTUxUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
VG9rZW5pemVyOjpzdGFydEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6
ZXI6OmVuZEVsZW1lbnROcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OmVuZERv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6aW50ZXJuYWxTdWJzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0RW50aXR5SGFuZGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpleHRlcm5hbFN1YnNldEhhbmRsZXIpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcik6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TFRva2VuaXplcjo6cGFyc2VTdGFydEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9r
ZW5pemVyOjpwYXJzZUVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAg
KiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50Ojpy
ZW5kZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpub3NjcmlwdENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUZ1bmN0aW9uTWFwKToKKyAgICAgICAgKiBodG1sL0hUTUxOb1NjcmlwdEVsZW1l
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OkhU
TUxOb1NjcmlwdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVu
dDo6fkhUTUxOb1NjcmlwdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0
RWxlbWVudDo6Y2hlY2tEVEQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVu
dDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OnJlY2Fs
Y1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OmNoaWxkU2hv
dWxkQ3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVu
dDo6c3R5bGVGb3JSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1MUGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxQYXJzZXI6OmdldE5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRva2VuaXplcjo6c2NyaXB0SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphZGRFeHRyYUZpZWxkc1Rv
UmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjppbml0aWFsaXplU3VwcG9ydGVkTm9uSW1hZ2VNaW1lVHlwZXMpOgorICAg
ICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTY3Jp
cHRFbGVtZW50OjpzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KToKKwogMjAwOS0wMi0xMiAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4LgpJ
bmRleDogV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQw
ODQ2KQorKysgV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQAog
IWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YUEFUSD0uKTogREVGSU5FUyArPSBFTkFCTEVfWFBB
VEg9MQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEJMPS4pOiBERUZJTkVTICs9IEVOQUJM
RV9YQkw9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XTUw9Lik6IERFRklORVMgKz0gRU5B
QkxFX1dNTD0wCishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hIVE1MTVA9Lik6IERFRklORVMg
Kz0gRU5BQkxFX1hIVE1MTVA9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9Lik6IERF
RklORVMgKz0gRU5BQkxFX1NWRz0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19GT05U
Uz0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0ZPTlRTPTEKICFjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfU1ZHX0ZJTFRFUlM9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWR19GSUxURVJTPTEKQEAg
LTc1Niw2ICs3NTcsNyBAQAogICAgIGh0bWwvSFRNTFByZUVsZW1lbnQuY3BwIFwKICAgICBodG1s
L0hUTUxRdW90ZUVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcCBc
CisgICAgaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MU2VsZWN0
RWxlbWVudC5jcHAgXAogICAgIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAgXAogICAgIGh0bWwv
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwIFwKQEAgLTE0NzYsNiArMTQ3OCwxMCBAQAogICAg
IGFkZEV4dHJhQ29tcGlsZXJXaXRoSGVhZGVyKHdtbG5hbWVzX2IpCiB9CiAKK2NvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9YSFRNTE1QPTEpIHsKKyAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQ
VCArPSBFTkFCTEVfWEhUTUxNUD0xCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9
MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9TVkc9MQogCklu
ZGV4OiBXZWJDb3JlLnNjb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUuc2NvbnMJKHJldmlzaW9u
IDQwODQ2KQorKysgV2ViQ29yZS5zY29ucwkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCw3
IEBACiAgICAgJ2h0bWwvSFRNTFByZUVsZW1lbnQuY3BwJywKICAgICAnaHRtbC9IVE1MUXVvdGVF
bGVtZW50LmNwcCcsCiAgICAgJ2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwJywKKyAgICAnaHRt
bC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcCcsCiAgICAgJ2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwJywKICAgICAnaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAnLAogICAgICdodG1sL0hUTUxT
dHlsZUVsZW1lbnQuY3BwJywKSW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdO
VW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0MDg0NikKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC05NDcsNiArOTQ3LDggQEAKIAlXZWJDb3JlL2h0bWwvSFRNTFF1b3RlRWxlbWVu
dC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwIFwKIAlXZWJDb3JlL2h0
bWwvSFRNTFNjcmlwdEVsZW1lbnQuaCBcCisJV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1l
bnQuY3BwIFwKKwlXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5oIFwKIAlXZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIFwKSW5kZXg6IFdl
YkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlU291cmNlcy5ia2wJKHJldmlz
aW9uIDQwODQ2KQorKysgV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC01OTMs
NiArNTkzLDcgQEAKICAgICAgICAgaHRtbC9IVE1MUHJlRWxlbWVudC5jcHAKICAgICAgICAgaHRt
bC9IVE1MUXVvdGVFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNw
cAorICAgICAgICBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKICAg
ICAgICAgaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAKSW5kZXg6IFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCShyZXZpc2lvbiA0MDg0NikKKysrIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgwNiw2ICsxMzgwNiwyMiBAQAogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxOb1NjcmlwdEVsZW1l
bnQuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFz
ZV9QR098V2luMzIiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxodG1sXEhUTUxOb1NjcmlwdEVsZW1lbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MU2VsZWN0RWxlbWVudC5j
cHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27596</attachid>
            <date>2009-02-12 04:40:53 -0800</date>
            <delta_ts>2009-05-13 04:35:30 -0700</delta_ts>
            <desc>patch about bug fix relevant to Darin&apos;s comments</desc>
            <filename>addxhtmlmp_newchange.patch</filename>
            <type>text/plain</type>
            <size>21070</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9I
VE1MTm9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIGh0bWwvSFRNTE5vU2NyaXB0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVudC5oIgorCisjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKK0hUTUxOb1NjcmlwdEVsZW1lbnQ6OkhUTUxOb1NjcmlwdEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVt
ZW50KHRhZ05hbWUsIGRvYykKK3sKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShub3NjcmlwdFRhZykp
OworfQorCitIVE1MTm9TY3JpcHRFbGVtZW50Ojp+SFRNTE5vU2NyaXB0RWxlbWVudCgpCit7Cit9
CisKK2Jvb2wgSFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hp
bGQpCit7CisgICAgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCkgfHwgaW5CbG9ja1RhZ0xp
c3QobmV3Q2hpbGQpOyAKK30KKwordm9pZCBIVE1MTm9TY3JpcHRFbGVtZW50OjphdHRhY2goKQor
eworICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKKworICAgIC8vIElmIG5vIG5lZWQgdG8gcHJv
Y2VzcyA8bm9zY3JpcHQ+LCB3ZSBoaWRlIGl0IGJ5IHNldHRpbmcgZGlzcGxheTpub25lIHRlbXBv
cmFyaWx5CisgICAgaWYgKCFkb2N1bWVudCgpLT5zaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50
KCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKSkKKyAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnN0eWxlKCktPnNldERpc3BsYXkoTk9ORSk7CisgICAgICAg
IHNldENoYW5nZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTE5vU2NyaXB0RWxlbWVudDo6cmVj
YWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQoreworICAgIGlmICghZG9jdW1lbnQoKS0+c2hv
dWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJ
ZiA8bm9zY3JpcHQ+IG5lZWRzIHByb2Nlc3NpbmcsIHdlIG1ha2UgaXQgdmlzaWFibGUgaGVyZSwg
aW5jbHVkaW5nIGl0cyB2aXNpYmxlIGNoaWxkcmVuCisgICAgQVNTRVJUKHJlbmRlcmVyKCkpOwor
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOworICAg
IEFTU0VSVChzdHlsZSk7CisgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSkgeworICAg
ICAgICBzdHlsZS0+c2V0RGlzcGxheShJTkxJTkUpOworCisgICAgICAgIC8vIENyZWF0ZSByZW5k
ZXJlcnMgZm9yIGl0cyBjaGlsZHJlbgorICAgICAgICBpZiAoaGFzQ2hpbGROb2RlcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJz
ZU5leHROb2RlKHRoaXMpKQorICAgICAgICAgICAgICAgIGlmICghbi0+cmVuZGVyZXIoKSkKKyAg
ICAgICAgICAgICAgICAgICAgbi0+Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpOworICAgICAgICB9
CisgICAgfQorfQorCitib29sIEhUTUxOb1NjcmlwdEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRl
UmVuZGVyZXIoTm9kZSogY2hpbGQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPnNo
b3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gSFRNTE5vU2NyaXB0RWxlbWVudDo6c3R5bGVGb3JSZW5kZXJlcigpCit7CisgICAgcmV0dXJu
IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIDAsIGZh
bHNlKTsKK30KKworfQorI2VuZGlmCkluZGV4OiBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysr
IGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEhUTUxO
b1NjcmlwdEVsZW1lbnRfaAorI2RlZmluZSBIVE1MTm9TY3JpcHRFbGVtZW50X2gKKworI2lmIEVO
QUJMRShYSFRNTE1QKQorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSFRNTE5vU2NyaXB0RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7
CitwdWJsaWM6CisgICAgSFRNTE5vU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIH5IVE1MTm9TY3JpcHRFbGVtZW50
KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOworICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFu
Z2UpOworICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUmVuZGVy
ZXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsg
IHJldHVybiB0cnVlOyB9Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgorI2VuZGlmCklu
ZGV4OiBkb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDQwODQ2KQorKysgZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYx
LDYgKzE2MSwxMCBAQAogI2luY2x1ZGUgIldNTE5hbWVzLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJM
RShYSFRNTE1QKQorI2luY2x1ZGUgIkhUTUxOb1NjcmlwdEVsZW1lbnQuaCIKKyNlbmRpZgorCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFj
ZSBVbmljb2RlOwpAQCAtMzc0LDYgKzM3OCwxMiBAQAogCiAgICAgc3RhdGljIGludCBkb2NJRCA9
IDA7CiAgICAgbV9kb2NJRCA9IGRvY0lEKys7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgaWYg
KHNldHRpbmdzKCkpCisgICAgICAgIG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0RWxlbWVudCA9ICFz
ZXR0aW5ncygpLT5pc0phdmFTY3JpcHRFbmFibGVkKCk7CisgICAgZWxzZQorICAgICAgICBtX3No
b3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQgPSBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIERv
Y3VtZW50OjpyZW1vdmVkTGFzdFJlZigpCkBAIC00NDE2LDQgKzQ0MjYsMTQgQEAKICAgICByZXR1
cm4gMDsKIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorYm9vbCBEb2N1bWVudDo6aXNYSFRNTE1Q
RG9jdW1lbnQoKSBjb25zdAoreworICAgIC8vIEFzIHBlciBzZWN0aW9uIDcuMiBvZiBPTUEtV0FQ
LVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwgYSBjb25mb3JtaW5nIHVzZXIgYWdlbnQKKyAg
ICAvLyBNVVNUIGFjY2VwdCBYSFRNTE1QIGRvY3VtZW50IGlkZW50aWZpZWQgYXMgImFwcGxpY2F0
aW9uL3ZuZC53YXAueGh0bWwreG1sIgorICAgIC8vIGFuZCBTSE9VTEQgYWNjZXB0IGl0IGlkZW50
aWZpZWQgYXMgImFwcGxpY2F0aW9uL3hodG1sK3htbCIKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9h
ZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSA9PSAiYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4
bWwiIHx8IGZyYW1lKCktPmxvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCkgPT0gImFwcGxpY2F0
aW9uL3hodG1sK3htbCI7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogZG9tL1hNTFRva2VuaXplclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vWE1MVG9rZW5pemVy
UXQuY3BwCShyZXZpc2lvbiA0MDg0NikKKysrIGRvbS9YTUxUb2tlbml6ZXJRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDYgKzU2LDExIEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCisjZW5kaWYKKwog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODUsNiArOTAs
MTAgQEAKICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQogICAgICwgbV9zYXdGaXJzdEVs
ZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0Rv
Y1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgogICAgICwgbV9wYXJzZXJQYXVzZWQoZmFs
c2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCiAgICAgLCBtX2ZpbmlzaENhbGxl
ZChmYWxzZSkKQEAgLTExMCw2ICsxMTksMTAgQEAKICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZh
bHNlKQogICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1
bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1l
bnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgog
ICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFs
c2UpCiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTQxOSw2ICs0MzIsMTIgQEAKICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRl
cjo6U3RhcnRFbGVtZW50OiB7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICBpZiAo
bV9kb2MtPmlzWEhUTUxNUERvY3VtZW50KCkgJiYgIW1faGFzRG9jVHlwZURlY2xhcmF0aW9uKSB7
CisgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9u
IGxhY2suIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisjZW5kaWYgCiAgICAgICAgICAgICBwYXJzZVN0YXJ0RWxl
bWVudCgpOwogICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0MywxMiArNDYyLDE4
IEBACiAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RFREOiB7CiAgICAgICAgICAgICAv
L3FEZWJ1ZygpPDwiLS0tLS0tLS0tLS0tLSBEVEQiOwogICAgICAgICAgICAgcGFyc2VEdGQoKTsK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9u
ID0gdHJ1ZTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpFbnRpdHlSZWZlcmVuY2U6IHsKICAgICAgICAgICAgIC8v
cURlYnVnKCk8PCItLS0tLS0tLS0tIEVOVElUWSA9ICI8PG1fc3RyZWFtLm5hbWUoKS50b1N0cmlu
ZygpCiAgICAgICAgICAgICAvLyAgICAgICAgPDwiLCB0ID0gIjw8bV9zdHJlYW0udGV4dCgpLnRv
U3RyaW5nKCk7CiAgICAgICAgICAgICBpZiAoaXNYSFRNTERvY3VtZW50KCkKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAgICAgICAgICAgICB8fCBpc1hIVE1MTVBEb2N1bWVudCgpCisjZW5kaWYK
ICNpZiBFTkFCTEUoV01MKQogICAgICAgICAgICAgICAgIHx8IGlzV01MRG9jdW1lbnQoKQogI2Vu
ZGlmCkBAIC01MDgsOSArNTMzLDYgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJv
b2wgaXNGaXJzdEVsZW1lbnQgPSAhbV9zYXdGaXJzdEVsZW1lbnQ7Ci0gICAgbV9zYXdGaXJzdEVs
ZW1lbnQgPSB0cnVlOwotCiAgICAgZXhpdFRleHQoKTsKIAogICAgIFN0cmluZyBsb2NhbE5hbWUg
PSBtX3N0cmVhbS5uYW1lKCk7CkBAIC01MjIsNiArNTQ0LDI4IEBACiAgICAgICAgIHVyaSA9IG1f
ZGVmYXVsdE5hbWVzcGFjZVVSSTsKICAgICB9CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBp
ZiAoIW1fc2F3Rmlyc3RFbGVtZW50ICYmIGlzWEhUTUxNUERvY3VtZW50KCkpIHsKKyAgICAgICAg
Ly8gQXMgcGVyIDcuMSBzZWN0aW9uIG9mIE9NQS1XQVAtWEhUTUxNUC1WMV8xLTIwMDYxMDIwLUEu
cGRmLCAKKyAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByb290IGVsZW1l
bnQgTVVTVCBiZSAnaHRtbCcgYW5kIAorICAgICAgICAvLyBlbnN1cmUgdGhlIG5hbWUgb2YgdGhl
IGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAnaHRtbCcgCisgICAgICAgIC8v
IE1VU1QgYmUgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnCisgICAgICAgIGlmIChsb2Nh
bE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7CisgICAgICAgICAgICBo
YW5kbGVFcnJvcihmYXRhbCwgIlhIVE1MTVAgZG9jdW1lbnQgZXhwZWN0cyAnaHRtbCcgYXMgcm9v
dCBlbGVtZW50LiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IAorCisgICAgICAgIGlmICh1cmkuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIG1fZGVmYXVsdE5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VV
Ukk7IAorICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOworICAgICAgICAg
ICAgbV9zdHJlYW0uYWRkRXh0cmFOYW1lc3BhY2VEZWNsYXJhdGlvbihRWG1sU3RyZWFtTmFtZXNw
YWNlRGVjbGFyYXRpb24ocHJlZml4LCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKSk7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJzdEVsZW1lbnQgPSAhbV9z
YXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2Fs
TmFtZSwgdXJpKTsKICAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IG1fZG9jLT5jcmVh
dGVFbGVtZW50KHFOYW1lLCB0cnVlLCBlYyk7CkBAIC01ODMsMjIgKzYyNywyOCBAQAogICAgIEFT
U0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwog
Ci0gICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1dGVW
YWx1ZSgpOwotICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gd2Ug
aGF2ZSBhIHNyYyBhdHRyaWJ1dGUgCi0gICAgICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0ID0gc2Ny
aXB0RWxlbWVudC0+c2NyaXB0Q2hhcnNldCgpOwotICAgICAgICBpZiAoKG1fcGVuZGluZ1Njcmlw
dCA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRD
aGFyc2V0KSkpIHsKLSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAg
ICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKKyNpZiBFTkFCTEUoWEhU
TUxNUCkKKyAgICBpZiAoIXNjcmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQo
KSkKKyAgICAgICAgbV9kb2MtPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7
CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNj
cmlwdEVsZW1lbnQtPnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7CisgICAgICAgIGlmICghc2NyaXB0
SHJlZi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRl
IAorICAgICAgICAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3Jp
cHRDaGFyc2V0KCk7CisgICAgICAgICAgICBpZiAoKG1fcGVuZGluZ1NjcmlwdCA9IG1fZG9jLT5k
b2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsK
KyAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAg
ICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwogCi0gICAgICAgICAgICAvLyBt
X3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5k
IHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAg
ICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAgICAgICB9IGVsc2UgCi0gICAgICAgICAg
ICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotICAgIH0gZWxzZQotICAgICAgICBtX3ZpZXctPmZyYW1l
KCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVu
dC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7Ci0K
KyAgICAgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3
YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0CisgICAgICAgICAgICAgICAg
aWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAgICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7
CisgICAgICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0g
MDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigp
LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29u
dGVudCgpLCBtX2RvYy0+dXJsKCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7CisgICAgfQogICAgIG1f
cmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIHNldEN1cnJlbnROb2RlKHBhcmVudC5nZXQo
KSk7CiB9CkBAIC02NjIsNiArNzEyLDkgQEAKIAogdm9pZCBYTUxUb2tlbml6ZXI6OmVuZERvY3Vt
ZW50KCkKIHsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlv
biA9IGZhbHNlOworI2VuZGlmCiB9CiAKIGJvb2wgWE1MVG9rZW5pemVyOjpoYXNFcnJvcigpIGNv
bnN0CkBAIC03NTUsOSArODA4LDI1IEBACiAgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4x
U3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikpCiAgICAgICAgIHx8IChw
dWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRo
TUwgMi4wLy9FTiIpKQogICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8v
VzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIikpCi0g
ICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFhI
VE1MIE1vYmlsZSAxLjAvL0VOIikpKSB7CisjaWYgIUVOQUJMRShYSFRNTE1QKQorICAgICAgICB8
fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2Jp
bGUgMS4wLy9FTiIpKQorI2VuZGlmCisgICAgICAgKQogICAgICAgICBzZXRJc1hIVE1MRG9jdW1l
bnQodHJ1ZSk7IC8vIGNvbnRyb2xzIGlmIHdlIHJlcGxhY2UgZW50aXRpZXMgb3Igbm90LgorI2lm
IEVOQUJMRShYSFRNTE1QKQorICAgIGVsc2UgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5n
KCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikpCisgICAgICAgICAgICAg
fHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9i
aWxlIDEuMC8vRU4iKSkpIHsKKyAgICAgICAgaWYgKEF0b21pY1N0cmluZyhuYW1lKSAhPSBIVE1M
TmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yKGZh
dGFsLCAiSW52YWxpZCBET0NUWVBFIGRlY2xhcmF0aW9uLCBleHBlY3RlZCAnaHRtbCcgYXMgcm9v
dCBlbGVtZW50LiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IAorCisgICAgICAgIGlmIChtX2RvYy0+aXNYSFRNTE1QRG9jdW1l
bnQoKSkgLy8gY2hlY2sgaWYgdGhlIE1JTUUgdHlwZSBpcyBjb3JyZWN0IHdpdGggdGhpcyBtZXRo
b2QKKyAgICAgICAgICAgIHNldElzWEhUTUxNUERvY3VtZW50KHRydWUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzZXRJc1hIVE1MRG9jdW1lbnQodHJ1ZSk7CiAgICAgfQorI2VuZGlmCiAj
aWYgRU5BQkxFKFdNTCkKICAgICBlbHNlIGlmIChtX2RvYy0+aXNXTUxEb2N1bWVudCgpCiAgICAg
ICAgICAgICAgJiYgcHVibGljSWQgIT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4zLy9FTiIpCkBAIC03NzIsNCArODQxLDMgQEAKIH0KIH0KIAotCkluZGV4OiBkb20vWE1M
VG9rZW5pemVyTGlieG1sMi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1hNTFRva2VuaXplckxpYnht
bDIuY3BwCShyZXZpc2lvbiA0MDg0NikKKysrIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsMTEgQEAKICNpbmNsdWRlIDxsaWJ4c2x0L3hzbHQu
aD4KICNlbmRpZgogCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MzAsNiArNTM1LDEwIEBACiAgICAg
LCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKICAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNl
KQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5BQkxFKFhIVE1MTVApCisg
ICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQorICAgICwgbV9oYXNEb2NUeXBlRGVjbGFy
YXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAsIG1fcGFyc2VyUGF1c2VkKGZhbHNlKQogICAgICwg
bV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQogICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCkBA
IC01NTMsNiArNTYyLDEwIEBACiAgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKICAgICAs
IG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2Up
CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQor
ICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAsIG1fcGFy
c2VyUGF1c2VkKGZhbHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQogICAgICwg
bV9maW5pc2hDYWxsZWQoZmFsc2UpCkBAIC03MDcsOCArNzIwLDEzIEBACiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBib29sIGlzRmlyc3RFbGVtZW50ID0gIW1fc2F3Rmlyc3RFbGVtZW50
OwotICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKKyNpZiBFTkFCTEUoWEhUTUxNUCkgCisg
ICAgLy8gY2hlY2sgaWYgdGhlIERPQ1RZUEUgRGVjbGFyYXRpb24gb2YgWEhUTUxNUCBkb2N1bWVu
dCBleGlzdHMKKyAgICBpZiAoIW1faGFzRG9jVHlwZURlY2xhcmF0aW9uICYmIG1fZG9jLT5pc1hI
VE1MTVBEb2N1bWVudCgpKSB7CisgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiRE9DVFlQRSBk
ZWNsYXJhdGlvbiBsYWNrLiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCiAKICAgICBleGl0VGV4dCgpOwogCkBAIC03MjIsNyAr
NzQwLDI4IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVz
cGFjZVVSSTsKICAgICB9CisgCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgaWYgKCFtX3Nhd0Zp
cnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7CisgICAgICAgIC8vIEFzIHBlciB0
aGUgc2VjdGlvbiA3LjEgb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYsIAor
ICAgICAgICAvLyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJvb3QgZWxlbWVudCBNVVNU
IGJlICdodG1sJyBhbmQgCisgICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVs
dCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJyAKKyAgICAgICAgLy8gTVVTVCBi
ZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKKyAgICAgICAgaWYgKGxvY2FsTmFtZSAh
PSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVy
cm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1sJyBhcyByb290IGVsZW1l
bnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAorICAgICAgICBpZiAodXJpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBt
X2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJOyAKKyAg
ICAgICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAgICAgICAgfQorICAgIH0K
KyNlbmRpZgorCisgICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsK
KyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwogICAg
IFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQocU5hbWUs
IHRydWUsIGVjKTsKQEAgLTgwMSwyMiArODQwLDI4IEBACiAgICAgQVNTRVJUKCFtX3BlbmRpbmdT
Y3JpcHQpOwogICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IHRydWU7CiAKLSAgICBTdHJpbmcgc2Ny
aXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYg
KCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgewotICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJp
YnV0ZSAKLSAgICAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3Jp
cHRDaGFyc2V0KCk7Ci0gICAgICAgIGlmICgobV9wZW5kaW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xv
YWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlwdEhyZWYsIHNjcmlwdENoYXJzZXQpKSkgewotICAg
ICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgIG1fcGVuZGlu
Z1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGlmICgh
c2NyaXB0RWxlbWVudC0+c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQorICAgICAgICBtX2Rv
Yy0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKKyAgICBlbHNlIAorI2Vu
ZGlmCisgICAgeworICAgICAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNv
dXJjZUF0dHJpYnV0ZVZhbHVlKCk7CisgICAgICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRlIAorICAgICAgICAgICAg
U3RyaW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Cisg
ICAgICAgICAgICBpZiAoKG1fcGVuZGluZ1NjcmlwdCA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVx
dWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKKyAgICAgICAgICAgICAg
ICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAgICAgIG1fcGVuZGluZ1Nj
cmlwdC0+YWRkQ2xpZW50KHRoaXMpOwogCi0gICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQg
d2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVk
IGl0Ci0gICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBh
dXNlUGFyc2luZygpOwotICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1l
bnQgPSAwOwotICAgIH0gZWxzZQotICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5l
eGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVu
dCgpLCBtX2RvYy0+dXJsKCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7Ci0KKyAgICAgICAgICAgICAg
ICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2Fk
ZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0CisgICAgICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1Nj
cmlwdCkKKyAgICAgICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7CisgICAgICAgICAgICB9
IGVsc2UgCisgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+
dXJsKCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7CisgICAgfQogICAgIG1fcmVxdWVzdGluZ1Njcmlw
dCA9IGZhbHNlOwogICAgIHNldEN1cnJlbnROb2RlKHBhcmVudC5nZXQoKSk7CiB9CkBAIC05NDQs
NiArOTg5LDkgQEAKIHZvaWQgWE1MVG9rZW5pemVyOjplbmREb2N1bWVudCgpCiB7CiAgICAgZXhp
dFRleHQoKTsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlv
biA9IGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgWE1MVG9rZW5pemVyOjppbnRlcm5hbFN1YnNl
dChjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4
bWxDaGFyKiBzeXN0ZW1JRCkKQEAgLTk1Nyw4ICsxMDA1LDkgQEAKICAgICB9CiAgICAgCiAgICAg
aWYgKG1fZG9jKSB7CisgICAgICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQp
OworICAgICAgICBTdHJpbmcgZHRkTmFtZSA9IHRvU3RyaW5nKG5hbWUpOwogI2lmIEVOQUJMRShX
TUwpCi0gICAgICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQpOwogICAgICAg
ICBpZiAoaXNXTUxEb2N1bWVudCgpCiAgICAgICAgICAgICAmJiBleHRJZCAhPSAiLS8vV0FQRk9S
VU0vL0RURCBXTUwgMS4zLy9FTiIKICAgICAgICAgICAgICYmIGV4dElkICE9ICItLy9XQVBGT1JV
TS8vRFREIFdNTCAxLjIvL0VOIgpAQCAtOTY2LDggKzEwMTUsMjQgQEAKICAgICAgICAgICAgICYm
IGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjAvL0VOIikKICAgICAgICAgICAgIGhh
bmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBEVEQgUHVibGljIElEIiwgbGluZU51bWJlcigpLCBj
b2x1bW5OdW1iZXIoKSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgaWYg
KChleHRJZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpCisgICAg
ICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8v
RU4iKSkgeworICAgICAgICAgICAgaWYgKGR0ZE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxv
Y2FsTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlk
IERPQ1RZUEUgZGVjbGFyYXRpb24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwg
bGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfSAKIAotICAgICAgICBtX2RvYy0+YWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpj
cmVhdGUobV9kb2MsIHRvU3RyaW5nKG5hbWUpLCB0b1N0cmluZyhleHRlcm5hbElEKSwgdG9TdHJp
bmcoc3lzdGVtSUQpKSk7CisgICAgICAgICAgICBpZiAobV9kb2MtPmlzWEhUTUxNUERvY3VtZW50
KCkpCisgICAgICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOworCisg
ICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyNl
bmRpZgorCisgICAgICAgIG1fZG9jLT5hZGRDaGlsZChEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2Rv
YywgZHRkTmFtZSwgZXh0SWQsIHRvU3RyaW5nKHN5c3RlbUlEKSkpOwogICAgIH0KIH0KIApAQCAt
MTEwNiw2ICsxMTcxLDkgQEAKIAogICAgIGVudCA9IHhtbEdldERvY0VudGl0eShjdHh0LT5teURv
YywgbmFtZSk7CiAgICAgaWYgKCFlbnQgJiYgKGdldFRva2VuaXplcihjbG9zdXJlKS0+aXNYSFRN
TERvY3VtZW50KCkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgICAgICAgfHwgZ2V0
VG9rZW5pemVyKGNsb3N1cmUpLT5pc1hIVE1MTVBEb2N1bWVudCgpCisjZW5kaWYKICNpZiBFTkFC
TEUoV01MKQogICAgICAgICAgICAgICAgICB8fCBnZXRUb2tlbml6ZXIoY2xvc3VyZSktPmlzV01M
RG9jdW1lbnQoKQogI2VuZGlmCkBAIC0xMTQ3LDcgKzEyMTUsMTAgQEAKICAgICAgICAgfHwgKGV4
dElkID09ICItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikKICAgICAgICAgfHwgKGV4
dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpCiAgICAg
ICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBw
bHVzIFNWRyAxLjEvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICItLy9XQVBGT1JVTS8vRFRE
IFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCisjaWYgIUVOQUJMRShYSFRNTE1QKQorICAgICAgICB8
fCAoZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKQorI2Vu
ZGlmCisgICAgICAgKQogICAgICAgICBnZXRUb2tlbml6ZXIoY2xvc3VyZSktPnNldElzWEhUTUxE
b2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGllcyBvciBub3Qu
CiB9CiAKSW5kZXg6IGRvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL05vZGUuaAkocmV2aXNp
b24gNDA4NDYpCisrKyBkb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsOSArNDIxLDkg
QEAKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlKCk7CiAgICAgdm9pZCBjcmVhdGVSZW5k
ZXJlcklmTmVlZGVkKCk7Ci0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5k
ZXJlcigpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5k
ZXJlcigpOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7
Ci0jaWYgRU5BQkxFKFNWRykKKyNpZiBFTkFCTEUoU1ZHKSB8fCBFTkFCTEUoWEhUTUxNUCkKICAg
ICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKSW5kZXg6IGxvYWRlci9GcmFtZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24g
NDA4NDYpCisrKyBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMs
NyArMTkzLDEyIEBACiAgICAgewogICAgIH0KIH07Ci0KKyAKKyNpZiBFTkFCTEUoWEhUTUxNUCkK
K3N0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRBY2NlcHRIZWFkZXJbXSA9ICJhcHBsaWNhdGlvbi94
bWwsYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4bWwsYXBwbGljYXRpb24veGh0bWwreG1sO3By
b2ZpbGU9J2h0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3hodG1sJyx0ZXh0L2h0bWw7cT0wLjksdGV4
dC9wbGFpbjtxPTAuOCxpbWFnZS9wbmcsKi8qO3E9MC41IjsKKyNlbHNlCitzdGF0aWMgY29uc3Qg
Y2hhciBkZWZhdWx0QWNjZXB0SGVhZGVyW10gPSAiYXBwbGljYXRpb24veG1sLGFwcGxpY2F0aW9u
L3hodG1sK3htbCx0ZXh0L2h0bWw7cT0wLjksdGV4dC9wbGFpbjtxPTAuOCxpbWFnZS9wbmcsKi8q
O3E9MC41IjsKKyNlbmRpZgogc3RhdGljIGRvdWJsZSBzdG9yZWRUaW1lT2ZMYXN0Q29tcGxldGVk
TG9hZDsKIHN0YXRpYyBGcmFtZUxvYWRlcjo6TG9jYWxMb2FkUG9saWN5IGxvY2FsTG9hZFBvbGlj
eSA9IEZyYW1lTG9hZGVyOjpBbGxvd0xvY2FsTG9hZHNGb3JMb2NhbE9ubHk7CiAKQEAgLTM1NDUs
NyArMzU1MCw3IEBACiAgICAgfQogICAgIAogICAgIGlmIChtYWluUmVzb3VyY2UpCi0gICAgICAg
IHJlcXVlc3Quc2V0SFRUUEFjY2VwdCgiYXBwbGljYXRpb24veG1sLGFwcGxpY2F0aW9uL3hodG1s
K3htbCx0ZXh0L2h0bWw7cT0wLjksdGV4dC9wbGFpbjtxPTAuOCxpbWFnZS9wbmcsKi8qO3E9MC41
Iik7CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUEFjY2VwdChkZWZhdWx0QWNjZXB0SGVhZGVyKTsK
IAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZW5kIHRoZSBPcmlnaW4gaGVhZGVyLgogICAgIGFkZEhU
VFBPcmlnaW5JZk5lZWRlZChyZXF1ZXN0LCBTdHJpbmcoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27597</attachid>
            <date>2009-02-12 04:46:02 -0800</date>
            <delta_ts>2009-05-13 04:32:25 -0700</delta_ts>
            <desc>patch about scriptelment change</desc>
            <filename>addxhtmlmp_scriptchange.patch</filename>
            <type>text/plain</type>
            <size>1582</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvbS9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1NjcmlwdEVsZW1l
bnQuaAkocmV2aXNpb24gNDA4NDYpCisrKyBkb20vU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw2ICs0OSw4IEBACiAgICAgLy8gQSBjaGFyc2V0IGZvciBsb2FkaW5nIHRoZSBz
Y3JpcHQgKG1heSBiZSBvdmVycmlkZGVuIGJ5IEhUVFAgaGVhZGVycyBvciBhIEJPTSkuCiAgICAg
dmlydHVhbCBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0ID0gMDsKIAorICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkgY29uc3QgPSAwOworCiBwcm90ZWN0ZWQ6
CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IG91ciBwYXJlbnQgY2xhc3Nlcy4KICAg
ICBzdGF0aWMgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudChTY3JpcHRFbGVtZW50RGF0YSYsIGNv
bnN0IFN0cmluZyYgc291cmNlVXJsKTsKSW5kZXg6IGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDQwODQ2KQor
KysgaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3
IEBACiAgICAgSFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogICAgIH5IVE1MU2NyaXB0RWxlbWVudCgpOwogCi0g
ICAgYm9vbCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmlu
ZyBzY3JpcHRDb250ZW50KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQpJbmRl
eDogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHU2NyaXB0RWxl
bWVudC5oCShyZXZpc2lvbiA0MDg0NikKKysrIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDYgKzU3LDggQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkU3Vi
cmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKKyAgICAg
ICAgdmlydHVhbCBib29sIHNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0Vs
ZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgICAgICB2
aXJ0dWFsIGJvb2wgaGF2ZUxvYWRlZFJlcXVpcmVkUmVzb3VyY2VzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27598</attachid>
            <date>2009-02-12 04:48:28 -0800</date>
            <delta_ts>2009-05-13 04:35:30 -0700</delta_ts>
            <desc>patch contains the other changes has reviewed</desc>
            <filename>addxhtmlmp_nochange.patch</filename>
            <type>text/plain</type>
            <size>7443</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IGh0bWwvSFRNTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MUGFyc2Vy
LmNwcAkocmV2aXNpb24gNDA4NDYpCisrKyBodG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NzIsNyArODcyLDkgQEAKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChub2JyVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2sp
OwogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCAmSFRNTFBhcnNlcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rp
b25NYXAuc2V0KG5vZnJhbWVzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5v
ZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayk7CisjaWYgIUVOQUJMRShYSFRNTE1QKQogICAgICAgICBn
RnVuY3Rpb25NYXAuc2V0KG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJz
ZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayk7CisjZW5kaWYKICAgICAgICAgZ0Z1bmN0aW9u
TWFwLnNldChvbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpwQ2xvc2VyQ3Jl
YXRlRXJyb3JDaGVjayk7CiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQocFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICZIVE1MUGFyc2VyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgICAg
IGdGdW5jdGlvbk1hcC5zZXQocGxhaW50ZXh0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQ
YXJzZXI6OnBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKTsKSW5kZXg6IGh0bWwvSFRNTEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDg0NikK
KysrIGh0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODQsMTEgKzk4NCwx
MyBAQAogICAgIAogYm9vbCBIVE1MRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHls
ZSAqc3R5bGUpCiB7CisjaWYgIUVOQUJMRShYSFRNTE1QKQogICAgIGlmIChoYXNMb2NhbE5hbWUo
bm9zY3JpcHRUYWcpKSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCkt
PnNldHRpbmdzKCk7CiAgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNKYXZhU2Ny
aXB0RW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyNlbmRpZgog
ICAgIHJldHVybiAoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcykgfHwgKHN0
eWxlLT5kaXNwbGF5KCkgIT0gTk9ORSk7CiB9CiAgICAgCkluZGV4OiBodG1sL0hUTUxFbGVtZW50
RmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCShy
ZXZpc2lvbiA0MDg0NikKKysrIGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODUsNiArODUsMTAgQEAKICNpbmNsdWRlICJIVE1MVUxpc3RFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgogCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5j
bHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTMzMyw2ICszMzcsMTMgQEAKICAg
ICByZXR1cm4gbmV3IEhUTUxTY3JpcHRFbGVtZW50KHNjcmlwdFRhZywgZG9jLCBjcmVhdGVkQnlQ
YXJzZXIpOwogfQogCisjaWYgRU5BQkxFKFhIVE1MTVApCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
RWxlbWVudD4gbm9zY3JpcHRDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAg
cmV0dXJuIG5ldyBIVE1MTm9TY3JpcHRFbGVtZW50KG5vc2NyaXB0VGFnLCBkb2MpOworfQorI2Vu
ZGlmCisKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiB0YWJsZUNvbnN0cnVjdG9yKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29s
KQogewogICAgIHJldHVybiBuZXcgSFRNTFRhYmxlRWxlbWVudCh0YWJsZVRhZywgZG9jKTsKQEAg
LTQ3MCw2ICs0ODEsOSBAQAogICAgIGFkZFRhZyhwcmVUYWcsIHByZUNvbnN0cnVjdG9yKTsKICAg
ICBhZGRUYWcocVRhZywgcXVvdGVDb25zdHJ1Y3Rvcik7CiAgICAgYWRkVGFnKHNjcmlwdFRhZywg
c2NyaXB0Q29uc3RydWN0b3IpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGFkZFRhZyhub3Nj
cmlwdFRhZywgbm9zY3JpcHRDb25zdHJ1Y3Rvcik7CisjZW5kaWYKICAgICBhZGRUYWcoc2VsZWN0
VGFnLCBzZWxlY3RDb25zdHJ1Y3Rvcik7CiAgICAgYWRkVGFnKHN0eWxlVGFnLCBzdHlsZUNvbnN0
cnVjdG9yKTsKICAgICBhZGRUYWcodGFibGVUYWcsIHRhYmxlQ29uc3RydWN0b3IpOwpJbmRleDog
aHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxUb2tlbml6ZXIu
Y3BwCShyZXZpc2lvbiA0MDg0NikKKysrIGh0bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1NSw2ICs0NTUsMTAgQEAKICAgICAgICAgICAgIH0gZWxzZQogI2VuZGlmCiAg
ICAgICAgICAgICBkb1NjcmlwdEV4ZWMgPSBtX3NjcmlwdE5vZGUtPnNob3VsZEV4ZWN1dGVBc0ph
dmFTY3JpcHQoKTsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIGlmICghZG9TY3Jp
cHRFeGVjKQorICAgICAgICAgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRF
bGVtZW50KHRydWUpOworI2VuZGlmCiAgICAgICAgICAgICBtX3NjcmlwdE5vZGUgPSAwOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTk4NCw2ICsxOTg4LDEwIEBACiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50Kj4obi5nZXQoKSktPnNo
b3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2Ny
aXB0RXhlY3V0aW9uKHNvdXJjZUNvZGUsIG1fc3RhdGUpOworI2lmIEVOQUJMRShYSFRNTE1QKQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNz
Tm9zY3JpcHRFbGVtZW50KHRydWUpOworI2VuZGlmCiAgICAgICAgICAgICBuLT5kaXNwYXRjaEV2
ZW50Rm9yVHlwZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAg
ICB9CiAKSW5kZXg6IGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9t
L0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gNDA4NDYpCisrKyBkb20vRE9NSW1wbGVt
ZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsMTQgKzMxMywyMiBAQAogUGFzc1Jl
ZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KGNvbnN0IFN0
cmluZyYgdHlwZSwgRnJhbWUqIGZyYW1lLCBib29sIGluVmlld1NvdXJjZU1vZGUpCiB7CiAgICAg
aWYgKGluVmlld1NvdXJjZU1vZGUpIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIg
fHwgdHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwreG1sIiB8fCB0eXBlID09ICJpbWFnZS9zdmcr
eG1sIiB8fCBpc1RleHRNSU1FVHlwZSh0eXBlKSB8fCBpc1hNTE1JTUVUeXBlKHR5cGUpKQorICAg
ICAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi94aHRt
bCt4bWwiIHx8IHR5cGUgPT0gImltYWdlL3N2Zyt4bWwiIHx8IGlzVGV4dE1JTUVUeXBlKHR5cGUp
IHx8IGlzWE1MTUlNRVR5cGUodHlwZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAg
IHx8IHR5cGUgPT0gImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwreG1sIgorI2VuZGlmCisgICAg
ICAgICAgICkKICAgICAgICAgICAgIHJldHVybiBIVE1MVmlld1NvdXJjZURvY3VtZW50OjpjcmVh
dGUoZnJhbWUsIHR5cGUpOwogICAgIH0KIAogICAgIC8vIFBsdWdpbnMgY2Fubm90IHRha2UgSFRN
TCBhbmQgWEhUTUwgZnJvbSB1cywgYW5kIHdlIGRvbid0IGV2ZW4gbmVlZCB0byBpbml0aWFsaXpl
IHRoZSBwbHVnaW4gZGF0YWJhc2UgZm9yIHRob3NlLgogICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0
bWwiKQogICAgICAgICByZXR1cm4gSFRNTERvY3VtZW50OjpjcmVhdGUoZnJhbWUpOwotICAgIGlm
ICh0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiKQorICAgIGlmICh0eXBlID09ICJhcHBs
aWNhdGlvbi94aHRtbCt4bWwiCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIHx8IHR5cGUg
PT0gImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwreG1sIgorI2VuZGlmCisgICAgICAgICkKICAg
ICAgICAgcmV0dXJuIERvY3VtZW50OjpjcmVhdGVYSFRNTChmcmFtZSk7CiAKICNpZiBFTkFCTEUo
V01MKQpJbmRleDogZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDQwODQ2KQorKysgZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
Myw2ICszMTMsMTEgQEAKICNpZiBFTkFCTEUoV01MKQogICAgIHZpcnR1YWwgYm9vbCBpc1dNTERv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgorI2lmIEVOQUJMRShYSFRN
TE1QKQorICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdDsgCisgICAgYm9vbCBzaG91
bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQcm9jZXNz
Tm9TY3JpcHRFbGVtZW50OyB9CisgICAgdm9pZCBzZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVt
ZW50KGJvb2wgc2hvdWxkRG8pIHsgbV9zaG91bGRQcm9jZXNzTm9TY3JpcHRFbGVtZW50ID0gc2hv
dWxkRG87IH0KKyNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAKICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNlbGVjdG9yOyB9CkBAIC05NTgsNiArOTYzLDEwIEBA
CiAKICAgICBTdHJpbmcgbV9jb250ZW50TGFuZ3VhZ2U7CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkK
KyAgICBib29sIG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0RWxlbWVudDsKKyNlbmRpZgorCiBwdWJs
aWM6CiAgICAgYm9vbCBpblBhZ2VDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5QYWdlQ2FjaGU7
IH0KICAgICB2b2lkIHNldEluUGFnZUNhY2hlKGJvb2wgZmxhZyk7CkluZGV4OiBkb20vTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZG9tL05vZGUuY3BwCShyZXZpc2lvbiA0MDg0NikKKysrIGRvbS9O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyNiw3ICsxMjI2LDcgQEAKICAgICAKICAgICBS
ZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpOwogICAgIGlm
IChwYXJlbnRSZW5kZXJlciAmJiBwYXJlbnRSZW5kZXJlci0+Y2FuSGF2ZUNoaWxkcmVuKCkKLSNp
ZiBFTkFCTEUoU1ZHKQorI2lmIEVOQUJMRShTVkcpIHx8IEVOQUJMRShYSFRNTE1QKQogICAgICAg
ICAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGhpcykKICNlbmRpZgogICAg
ICAgICApIHsKSW5kZXg6IGRvbS9YTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vWE1M
VG9rZW5pemVyLmgJKHJldmlzaW9uIDQwODQ2KQorKysgZG9tL1hNTFRva2VuaXplci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMCBAQAogCiAgICAgICAgIHZvaWQgc2V0SXNYSFRNTERv
Y3VtZW50KGJvb2wgaXNYSFRNTCkgeyBtX2lzWEhUTUxEb2N1bWVudCA9IGlzWEhUTUw7IH0KICAg
ICAgICAgYm9vbCBpc1hIVE1MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxEb2N1
bWVudDsgfQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICB2b2lkIHNldElzWEhUTUxNUERv
Y3VtZW50KGJvb2wgaXNYSFRNTCkgeyBtX2lzWEhUTUxNUERvY3VtZW50ID0gaXNYSFRNTDsgfQor
ICAgICAgICBib29sIGlzWEhUTUxNUERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1hIVE1M
TVBEb2N1bWVudDsgfQorI2VuZGlmCiAjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgYm9vbCBpc1dN
TERvY3VtZW50KCkgY29uc3Q7CiAjZW5kaWYKQEAgLTE0OSw2ICsxNTMsMTAgQEAKICAgICAgICAg
Ym9vbCBtX3Nhd1hTTFRyYW5zZm9ybTsKICAgICAgICAgYm9vbCBtX3Nhd0ZpcnN0RWxlbWVudDsK
ICAgICAgICAgYm9vbCBtX2lzWEhUTUxEb2N1bWVudDsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAg
ICAgICAgYm9vbCBtX2lzWEhUTUxNUERvY3VtZW50OworICAgICAgICBib29sIG1faGFzRG9jVHlw
ZURlY2xhcmF0aW9uOworI2VuZGlmCiAKICAgICAgICAgYm9vbCBtX3BhcnNlclBhdXNlZDsKICAg
ICAgICAgYm9vbCBtX3JlcXVlc3RpbmdTY3JpcHQ7CkluZGV4OiBwbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAko
cmV2aXNpb24gNDA4NDYpCisrKyBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCw5IEBACiAgICAgICAgICJ0ZXh0LyIsCiAgICAgICAgICJh
cHBsaWNhdGlvbi94bWwiLAogICAgICAgICAiYXBwbGljYXRpb24veGh0bWwreG1sIiwKKyNpZiBF
TkFCTEUoWEhUTUxNUCkKKyAgICAgICAgImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwreG1sIiwK
KyNlbmRpZgogICAgICAgICAiYXBwbGljYXRpb24vcnNzK3htbCIsCiAgICAgICAgICJhcHBsaWNh
dGlvbi9hdG9tK3htbCIsCiAjaWYgRU5BQkxFKFNWRykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30268</attachid>
            <date>2009-05-13 04:26:18 -0700</date>
            <delta_ts>2009-05-16 08:25:29 -0700</delta_ts>
            <desc>Updated layout tests for XHTMLMP</desc>
            <filename>applyXHTMLMPTests.patch</filename>
            <type>text/plain</type>
            <size>7649</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQzNjA4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDUtMTIgIFlpY2hhbyBZaW4gIDx5aWNo
YW8ueWluQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFNraXAgdGhlIHRlc3RzIGZvciBub24tUVQgcGxh
dGZvcm0gc2luY2Ugb25seSB0ZXN0IHRoZW0gb24gUXQgc28gZmFyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ1MgorCisgICAgICAgICogZmFzdC94
aHRtbG1wOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvY2hlY2stZG9jdHlwZS1kZWNs
YXJhdGlvbi54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC94aHRtbG1wL2NoZWNrLXJvb3Rl
bGVtZW50LnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9zY3JpcHQtaW4t
bXVsdGlzY3JpcHRzLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9zY3Jp
cHQtbmVzdGVkLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hodG1sbXAvbm9zY3JpcHQu
eGh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgor
CiAyMDA5LTA1LTEyICBSb2xhbmQgU3RlaW5lciA8cm9sYW5kc3RlaW5lckBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC94aHRtbG1wL2NoZWNrLWRvY3R5cGUtZGVjbGFyYXRpb24ueGh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL2NoZWNrLWRvY3R5cGUtZGVjbGFyYXRpb24ueGh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stZG9jdHlwZS1k
ZWNsYXJhdGlvbi54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+Cis8IS0tCis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9E
VEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0
bWwtbW9iaWxlMTEuZHRkIj4KKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBkb2N1bWVudCBjb25mb3JtYW5jZSBvZiBY
SFRNTE1QPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+IGJyb3dzZXIgc2hvdWxkIHJlcG9y
dCBET0NUWVBFIGRlY2xhcmF0aW9uIGxhY2sgZXJyb3IgPC9wPgorPGhyLz4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hlY2stcm9vdGVs
ZW1lbnQueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvY2hl
Y2stcm9vdGVsZW1lbnQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFRE
IFhIVE1MIE1vYmlsZSAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1s
LW1vYmlsZTExLmR0ZCI+CisKKzxhbnkgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBkb2N1bWVudCBjb25mb3JtYW5jZSBvZiBYSFRNTE1Q
PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+IFRoaXMgaXMgQk9EWSA8L3A+Cis8L2JvZHk+
Cis8L2FueT4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1pbi1tdWx0
aXNjcmlwdHMueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25v
c2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1pbi1tdWx0aXNjcmlwdHMueGh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwg
UFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIiAiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTExLmR0ZCI+CisKKzxodG1sIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxlPiBUZXN0IG5vc2Ny
aXB0IGluIG11bGl0cGxlIHNjcmlwdCBlbGVtZW50cyA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9k
eT4gCis8aDE+IFRlc3Qgbm9zY3JpcHQgaW4gbXVsaXRwbGUgc2NyaXB0IGVsZW1lbnRzIDwvaDE+
CisKKzxhIGhyZWY9ImphdmFzY3JpcHQ6dGVzdEZ1bigpIj4gY2xpa2UgbWUsIGphdmFzY3JpcHQg
Y29kZSB3b24ndCBiZSBleGVjdXRlZCBzaW5jZSB0eXBlIG9mICZsdDtzY3JpcHQmZ3Q7IGlzIHdy
b25nPC9hPgorPHA+Cis8bm9zY3JpcHQ+Cis8aDE+Jmx0O2gxJmd0O2ZpcnN0IG5vc2NyaXB0IGVs
ZW1lbnQmbHQ7aDEmZ3Q7PC9oMT4KK3BsYWluIHRleHQgaW4gbm9zY3JpcHQKKzwvbm9zY3JpcHQ+
CisKKzxzY3JpcHQgdHlwZT0idGV4dC93cm9uZ3R5cGUiPgorZnVuY3Rpb24gdGVzdEZ1bigpIHsK
KyAgICBhbGVydCgidGhlIGZpcnN0IHNjcmlwdCIpOworfQorPC9zY3JpcHQ+CisKKzxub3Njcmlw
dD4KKzxoMj4gJmx0O2gyJmd0O3NlY29uZCBub3NjcmlwdCBlbGVtZW50Jmx0O2gyJmd0OzwvaDI+
Cis8L25vc2NyaXB0PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlv
biB0ZXN0RnVuMigpIHsKKyAgICBhbGVydCgidGhlIHNlY29uZCBzY3JpcHQiKTsKK30KKzwvc2Ny
aXB0PgorPC9wPgorCis8YSBocmVmPSJqYXZhc2NyaXB0OnRlc3RGdW4yKCkiPiBjbGlrZSBtZSB0
byBleGVjdXRlIGphdmFzY3JpcHQgY29kZTwvYT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1uZXN0ZWQueGh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC94aHRtbG1wL25vc2NyaXB0LW5lc3RlZC54aHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1uZXN0ZWQueGh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFE
T0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VO
IiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTExLmR0ZCI+CisKKzxo
dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRpdGxl
PiBUZXN0IG5lc3RlZC1ub3NjcmlwdCAgZWxlbWVudCBpbiBYSFRNTE1QIDwvdGl0bGU+Cis8c2Ny
aXB0IHR5cGU9InRleHQvd3Jvbmd0eXBlIj4KK2Z1bmN0aW9uIHRlc3RGdW5jKCkgeworYWxlcnQo
IllvdSB3aWxsIHNlZSBtZSBpZiB0aGUgc2NyaXB0aW5nIGxhbmd1YWdlIGlkZW50aWZpZWQgYnkg
dGhlIHR5cGUgb2Ygc2NyaXB0IGVsZW1lbnQgaXMgc3VwcG9ydGVkIik7Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJ0ZXN0RnVuYygpIj4KKzxwPiBUZXN0IGZvciBuZXN0
ZWQtbm9zY3JpcHQgZWxlbWVudCBpbiBYSFRNTE1QIDwvcD4KKzxwPiBJZiB0aGUgdGVzdCBwYXNz
ZXMsIHlvdSB3aWxsIHNlZSB0aGUgZm9sbG93aW5nIHRocmVlIG5lc3RlZCBub3NjcmlwdCB0ZXh0
LCBvdGhlcndpc2UsIHlvdSB3aWxsIHNlZSB0aGUgYWxlcnQgd2luZG93LjwvcD4KKzxub3Njcmlw
dD4KKzxoMT5maXJzdCBub3NjcmlwdCBlbGVtZW50PC9oMT4KKzxub3NjcmlwdD4KKzxoMj5zZWNv
bmQgbm9zY3JpcHQgZWxlbWVudDwvaDI+Cis8bm9zY3JpcHQ+Cis8aDM+dGhpcmQgbm9zY3JpcHQg
ZWxlbWVudDwvaDM+Cis8L25vc2NyaXB0PgorPG5vc2NyaXB0PgorPGg1PmZvdXJ0aCBub3Njcmlw
dCBlbGVtZW50PC9oNT4KKzwvbm9zY3JpcHQ+Cis8L25vc2NyaXB0PgorPC9ub3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveGh0bWxtcC9ub3NjcmlwdC54
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQueGh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hodG1sbXAvbm9zY3JpcHQueGh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pgor
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjEv
L0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTExLmR0ZCI+CisK
KzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHRp
dGxlPiBUZXN0IG5vc2NyaXB0IGVsZW1lbnQgaW4gWEhUTUxNUCBkb2N1bWVudCA8L3RpdGxlPgor
PC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9ImphdmFzY3JpcHQ6ZnVuYygpIj4KKzxwPiBUZXN0IGZv
ciBub3NjcmlwdCBlbGVtZW50IGluIFhIVE1MTVAgPC9wPgorPHA+IElmIHRoZSB0ZXN0IHBhc3Nl
cywgeW91IGNhbiBzZWUgdGhlIG5vc2NyaXB0IHRleHQgYWJvdmU8L3A+CisKKzxub3NjcmlwdD4K
KzxoMT4mbHQ7aDEmZ3Q7VGhlIGZpcnN0IG5vc2NyaXB0IGVsZW1lbnQmbHQ7aDEmZ3Q7PC9oMT4K
Kzwvbm9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC93cm9uZ3R5cGUiPgorZnVuY3Rpb24g
ZnVuYygpIHsKK2FsZXJ0KCJZb3Ugd2lsbCBzZWUgbWUgaWYgdGhlIHNjcmlwdGluZyBsYW5ndWFn
ZSBpZGVudGlmaWVkIGJ5IHRoZSB0eXBlIG9mIHNjcmlwdCBlbGVtZW50IGlzIHN1cHBvcnRlZCIp
OworfQorPC9zY3JpcHQ+CisKKzxub3NjcmlwdD4KKzxoMj4mbHQ7aDImZ3Q7VGhlIHNlY29uZCBu
b3NjcmlwdCBlbGVtZW50Jmx0O2gyJmd0OzwvaDI+Cis8L25vc2NyaXB0PgorCis8L2JvZHk+Cis8
L2h0bWw+CisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiA0MzYwMikK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC01
OTM5LDMgKzU5MzksMTAgQEAgd2ViYXJjaGl2ZS90ZXN0LXNjcmlwdC1zcmMuaHRtbAogd2ViYXJj
aGl2ZS90ZXN0LXRhYmxlLWJhY2tncm91bmQuaHRtbAogd2ViYXJjaGl2ZS90ZXN0LXRkLWJhY2tn
cm91bmQuaHRtbAogd2ViYXJjaGl2ZS90ZXN0LXhtbC1zdHlsZXNoZWV0LnhtbAorCisjIEFkZCBY
SFRNTE1QIHRvIHdla2l0LCBpZ25vcmUgdGhlc2UgdGVzdHMgc2luY2UgaGF2ZW4ndCBiZWVuIHZl
cmlmaWVkCitmYXN0L3hodG1sbXAvY2hlY2stZG9jdHlwZS1kZWNsYXJhdGlvbi54aHRtbAorZmFz
dC94aHRtbG1wL2NoZWNrLXJvb3RlbGVtZW50LnhodG1sCitmYXN0L3hodG1sbXAvbm9zY3JpcHQu
eGh0bWwKK2Zhc3QveGh0bWxtcC9ub3NjcmlwdC1pbi1tdWx0aXNjcmlwdHMueGh0bWwKK2Zhc3Qv
eGh0bWxtcC9ub3NjcmlwdC1uZXN0ZWQueGh0bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lw
cGVkCShyZXZpc2lvbiA0MzYwMikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVk
CSh3b3JraW5nIGNvcHkpCkBAIC02NiwzICs2NiwxMCBAQCBzdmcvaGl4aWUvcGVyZi8wMDIueG1s
CiAKICMgPHJkYXI6Ly9wcm9ibGVtLzY3MTA2MjU+IFRlc3QgbWVkaWEvdmlkZW8tZXJyb3ItYWJv
cnQuaHRtbCBkb2Vzbid0IHdvcmsKIG1lZGlhL3ZpZGVvLWVycm9yLWFib3J0Lmh0bWwKKworIyBB
ZGQgWEhUTUxNUCB0byB3ZWtpdCwgaWdub3JlIHRoZXNlIHRlc3RzIHNpbmNlIGhhdmVuJ3QgYmVl
biB2ZXJpZmllZAorZmFzdC94aHRtbG1wL2NoZWNrLWRvY3R5cGUtZGVjbGFyYXRpb24ueGh0bWwK
K2Zhc3QveGh0bWxtcC9jaGVjay1yb290ZWxlbWVudC54aHRtbAorZmFzdC94aHRtbG1wL25vc2Ny
aXB0LnhodG1sCitmYXN0L3hodG1sbXAvbm9zY3JpcHQtaW4tbXVsdGlzY3JpcHRzLnhodG1sCitm
YXN0L3hodG1sbXAvbm9zY3JpcHQtbmVzdGVkLnhodG1sCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW4vU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
U2tpcHBlZAkocmV2aXNpb24gNDM2MDIpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tp
cHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTk1LDMgKzU5NSwxMCBAQCBtZWRpYS92aWRlby1kb2N1
bWVudC10eXBlcy5odG1sCiAjIEJ1ZyAyNTU4MzogTmV3IFNWRyByZWdyZXNzaW9uIHRlc3RzIGFk
ZGVkIGluIHI0MzI2OSBmYWlsIG9uIFdpbmRvd3MgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNTU4Mz4KIHN2Zy90cmFuc2Zvcm1zL3RleHQtd2l0aC1wYXR0ZXJuLWlu
c2lkZS10cmFuc2Zvcm1lZC1odG1sLnhodG1sCiBzdmcvdHJhbnNmb3Jtcy90ZXh0LXdpdGgtcGF0
dGVybi13aXRoLXN2Zy10cmFuc2Zvcm0uc3ZnCisKKyMgQWRkIFhIVE1MTVAgdG8gd2VraXQsIGln
bm9yZSB0aGVzZSB0ZXN0cyBzaW5jZSBoYXZlbid0IGJlZW4gdmVyaWZpZWQKK2Zhc3QveGh0bWxt
cC9jaGVjay1kb2N0eXBlLWRlY2xhcmF0aW9uLnhodG1sCitmYXN0L3hodG1sbXAvY2hlY2stcm9v
dGVsZW1lbnQueGh0bWwKK2Zhc3QveGh0bWxtcC9ub3NjcmlwdC54aHRtbAorZmFzdC94aHRtbG1w
L25vc2NyaXB0LWluLW11bHRpc2NyaXB0cy54aHRtbAorZmFzdC94aHRtbG1wL25vc2NyaXB0LW5l
c3RlZC54aHRtbAo=
</data>
<flag name="review"
          id="15224"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30269</attachid>
            <date>2009-05-13 04:30:09 -0700</date>
            <delta_ts>2009-05-19 00:17:59 -0700</delta_ts>
            <desc>Updated patch for configure file changes</desc>
            <filename>applyXHTMLMPConfigs.patch</filename>
            <type>text/plain</type>
            <size>3716</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDUtMTMgIFlpY2hhbyBZaW4gPHlpY2hhby55aW5AdG9yY2ht
b2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBYSFRNTE1QIHN1cHBvcnQgdG8gV2Via2l0CisgICAgICAgIFVwZGF0ZSB0aGUg
Y29uZmlndXJlIGZpbGVzIGZvciBidWlsZGluZyBYSFRNTE1QLWVuYWJsZWQgV2ViS2l0IG9uIGRp
ZmZlcmVudCBwbGF0Zm9ybQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorCiAyMDA5LTA1LTEyICBSb2xhbmQgU3RlaW5l
ciA8cm9sYW5kc3RlaW5lckBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTk3Miw2ICs5NzIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvaHRtbC9IVE1MUXVvdGVFbGVtZW50LmggXAogCVdlYkNvcmUvaHRtbC9I
VE1MU2NyaXB0RWxlbWVudC5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5o
IFwKKwlXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAgXAorCVdlYkNvcmUvaHRt
bC9IVE1MTm9TY3JpcHRFbGVtZW50LmggXAogCVdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oIFwKIAlXZWJDb3JlL2h0
bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsNyBAQCBDT05GSUco
UVRESVJfYnVpbGQpIHsKICMhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hCTD0uKTogREVGSU5F
UyArPSBFTkFCTEVfWEJMPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPS4pOiBERUZJ
TkVTICs9IEVOQUJMRV9XTUw9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XT1JLRVJTPS4p
OiBERUZJTkVTICs9IEVOQUJMRV9XT1JLRVJTPTEKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
WEhUTUxNUD0uKTogREVGSU5FUyArPSBFTkFCTEVfWEhUTUxNUD0wCiAKICMgU1ZHIHN1cHBvcnQK
ICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTApIHsKQEAgLTc2Nyw2ICs3NjgsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBodG1sL0hUTUxQcmVFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1M
UXVvdGVFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAgXAorICAg
IGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAgXAogICAgIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwIFwKICAgICBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxU
YWJsZUNhcHRpb25FbGVtZW50LmNwcCBcCkBAIC0xNTMxLDYgKzE1MzMsMTAgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dNTD0xKSB7CiAgICAgYWRkRXh0cmFDb21waWxlcldpdGhIZWFkZXIo
d21sbmFtZXNfYikKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hIVE1MTVA9MSkgewor
ICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9YSFRNTE1QPTEKK30KKwog
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAgRkVBVFVSRV9ERUZJTkVTX0pB
VkFTQ1JJUFQgKz0gRU5BQkxFX1NWRz0xCiAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0
MzYxNSkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC02
MDUsNiArNjA1LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZQog
ICAgICAgICBodG1sL0hUTUxQcmVFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxRdW90ZUVs
ZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCisgICAgICAgIGh0
bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5jcHAKICAgICAgICAgaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hU
TUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyNDYzLDYgKzEyNDYzLDIyIEBACiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxTY3JpcHRFbGVtZW50LmgiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQorICAgICAgICAgICAgPEZpbGUNCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRo
PSIuLlxodG1sXEhUTUxOb1NjcmlwdEVsZW1lbnQuY3BwIg0KKyAgICAgICAgICAgICAgICA+DQor
ICAgICAgICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbg0KKyAgICAgICAgICAgICAgICAgICAg
TmFtZT0iUmVsZWFzZV9QR098V2luMzIiDQorICAgICAgICAgICAgICAgICAgICA+DQorICAgICAg
ICAgICAgICAgICAgICA8VG9vbA0KKyAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xD
b21waWxlclRvb2wiDQorICAgICAgICAgICAgICAgICAgICAgICAgV2hvbGVQcm9ncmFtT3B0aW1p
emF0aW9uPSJ0cnVlIg0KKyAgICAgICAgICAgICAgICAgICAgLz4NCisgICAgICAgICAgICAgICAg
PC9GaWxlQ29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICA8L0ZpbGU+DQorICAgICAgICAgICAg
PEZpbGUNCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxOb1Njcmlw
dEVsZW1lbnQuaCINCisgICAgICAgICAgICAgICAgPg0KKyAgICAgICAgICAgIDwvRmlsZT4NCiAJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
Ig0KIAkJCQk+DQo=
</data>
<flag name="review"
          id="15225"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30270</attachid>
            <date>2009-05-13 04:32:25 -0700</date>
            <delta_ts>2009-05-19 00:19:53 -0700</delta_ts>
            <desc>Updated patch for ScriptElement change</desc>
            <filename>applyXHTMLMPScriptElmenet.patch</filename>
            <type>text/plain</type>
            <size>2303</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDUtMTMgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDaGFuZ2UgU2NyaXB0RWxlbWVudCB0byBzdXBwb3J0IFhIVE1MTVAgaW4gYSBiZXR0
ZXIgd2F5CisKKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwv
SFRNTFNjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0RWxlbWVudDo6c2hvdWxkRXhlY3V0ZUFzSmF2YVNj
cmlwdCk6CisKIDIwMDktMDUtMTIgIFJvbGFuZCBTdGVpbmVyIDxyb2xhbmRzdGVpbmVyQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3Jl
L2RvbS9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NyaXB0RWxl
bWVudC5oCShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgLy8gQSBjaGFyc2V0
IGZvciBsb2FkaW5nIHRoZSBzY3JpcHQgKG1heSBiZSBvdmVycmlkZGVuIGJ5IEhUVFAgaGVhZGVy
cyBvciBhIEJPTSkuCiAgICAgdmlydHVhbCBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0ID0g
MDsKIAorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkgY29uc3Qg
PSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IG91ciBw
YXJlbnQgY2xhc3Nlcy4KICAgICBzdGF0aWMgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudChTY3Jp
cHRFbGVtZW50RGF0YSYsIGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
U2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2Ny
aXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAg
ICBIVE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29s
IGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgfkhUTUxTY3JpcHRFbGVtZW50KCk7CiAKLSAgICBib29s
IHNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHNjcmlw
dENvbnRlbnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
U2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR1Njcmlw
dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJM
cyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICAgICAgdmlydHVhbCBib29sIGhhdmVMb2Fk
ZWRSZXF1aXJlZFJlc291cmNlcygpOwo=
</data>
<flag name="review"
          id="15226"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30271</attachid>
            <date>2009-05-13 04:35:30 -0700</date>
            <delta_ts>2009-05-17 23:54:56 -0700</delta_ts>
            <desc>Updated patch for code change to support XHTMLMP</desc>
            <filename>applyXHTMLMPImplement.patch</filename>
            <type>text/plain</type>
            <size>34121</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzYxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzcgQEAKKzIwMDktMDUtMTMgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgWEhUTUxNUCBzdXBwb3J0IHRvIFdlYmtpdAorICAgICAgICBYSFRNTE1QIGlz
IGEgc3RyaWN0IHN1YnNldCBvZiBYSFRNTCAxLjEuIEl0IGV4dGVuZHMgWEhUTUwgQmFzaWMgYW5k
IGFkZCBlbmhhbmNlZCAKKyAgICAgICAgZnVuY3Rpb25hbGl0eS4gTW9zdCBvZiB0aGUgZnVuY3Rp
b25hbGl0aWVzIGhhdmUgYWxyZWFkeSBiZWVuIGltcGxlbWVudGVkIGJ5IFdlYmtpdC4KKyAgICAg
ICAgCisgICAgICAgIFRoZSBjaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEpIEFkZGluZyA8bm9z
Y3JpcHQ+IHN1cHBvcnQKKyAgICAgICAgMikgRG9jdW1lbnQgY29uZm9ybWFuY2UgdmFsaWRhdGlv
bgorICAgICAgICAzKSBVc2VyIEFnZW50IGNvbmZvcm1hbmNlIHZhbGlkYXRpb24gCisKKyAgICAg
ICAgcmVmZXIgdG8gdGhlIHNwZWNpZmljYXRpb246IE9NQS1XQVAtWEhUTUxNUC1WMV8xLTIwMDYx
MDIwLUEucGRmCisKKyAgICAgICAgVGVzdHM6IGZhc3QveGh0bWxtcC9jaGVjay1kb2N0eXBlLWRl
Y2xhcmF0aW9uLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1sbXAvY2hlY2stcm9vdGVs
ZW1lbnQueGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveGh0bWxtcC9ub3NjcmlwdC1pbi1tdWx0
aXNjcmlwdHMueGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveGh0bWxtcC9ub3NjcmlwdC1uZXN0
ZWQueGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveGh0bWxtcC9ub3NjcmlwdC54aHRtbAorCisg
ICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6aXNYSFRNTE1QRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNob3VsZFByb2Nlc3NOb3Njcmlw
dEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFNob3VsZFByb2Nlc3NO
b3NjcmlwdEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6
CisgICAgICAgICogZG9tL1hNTFRva2VuaXplci5oOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9r
ZW5pemVyOjpzZXRJc1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tl
bml6ZXI6OmlzWEhUTUxNUERvY3VtZW50KToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyTGli
eG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcik6
CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6ZW5kRWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTFRva2VuaXplcjo6ZW5kRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9r
ZW5pemVyOjppbnRlcm5hbFN1YnNldCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRFbnRpdHlIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVybmFsU3Vic2V0SGFuZGxlcik6CisgICAgICAg
ICogZG9tL1hNTFRva2VuaXplclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXpl
cjo6WE1MVG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6cGFyc2Up
OgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpwYXJzZVN0YXJ0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAqIGRvbS9tYWtlX25hbWVzLnBsOgorICAgICAgICAqIGh0
bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnJlbmRl
cmVySXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5vU2NyaXB0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50Ojp+SFRNTE5v
U2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50Ojpj
aGVja0RURCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjphdHRhY2gp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6cmVjYWxjU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjpzdHlsZUZv
clJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBhcnNlcjo6Z2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjppc0lubGlu
ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMuaW46CisgICAgICAgICogaHRtbC9IVE1M
VG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OnNjcmlwdEhh
bmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bm90aWZ5RmluaXNoZWQp
OgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVN1cHBv
cnRlZE5vbkltYWdlTWltZVR5cGVzKToKKwogMjAwOS0wNS0xMiAgUm9sYW5kIFN0ZWluZXIgPHJv
bGFuZHN0ZWluZXJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDQzNjE1KQorKysg
V2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUs
MTQgKzMxNSwyMiBAQCBQYXNzUmVmUHRyPEhUTUxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpCiBQ
YXNzUmVmUHRyPERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoY29u
c3QgU3RyaW5nJiB0eXBlLCBGcmFtZSogZnJhbWUsIGJvb2wgaW5WaWV3U291cmNlTW9kZSkKIHsK
ICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSkgewotICAgICAgICBpZiAodHlwZSA9PSAidGV4dC9o
dG1sIiB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIHx8IHR5cGUgPT0gImltYWdl
L3N2Zyt4bWwiIHx8IGlzVGV4dE1JTUVUeXBlKHR5cGUpIHx8IGlzWE1MTUlNRVR5cGUodHlwZSkp
CisgICAgICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiIHx8IHR5cGUgPT0gImFwcGxpY2F0aW9u
L3hodG1sK3htbCIgfHwgdHlwZSA9PSAiaW1hZ2Uvc3ZnK3htbCIgfHwgaXNUZXh0TUlNRVR5cGUo
dHlwZSkgfHwgaXNYTUxNSU1FVHlwZSh0eXBlKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAg
ICAgICAgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4bWwiCisjZW5kaWYK
KyAgICAgICAgICAgKQogICAgICAgICAgICAgcmV0dXJuIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6
OmNyZWF0ZShmcmFtZSwgdHlwZSk7CiAgICAgfQogCiAgICAgLy8gUGx1Z2lucyBjYW5ub3QgdGFr
ZSBIVE1MIGFuZCBYSFRNTCBmcm9tIHVzLCBhbmQgd2UgZG9uJ3QgZXZlbiBuZWVkIHRvIGluaXRp
YWxpemUgdGhlIHBsdWdpbiBkYXRhYmFzZSBmb3IgdGhvc2UuCiAgICAgaWYgKHR5cGUgPT0gInRl
eHQvaHRtbCIpCiAgICAgICAgIHJldHVybiBIVE1MRG9jdW1lbnQ6OmNyZWF0ZShmcmFtZSk7Ci0g
ICAgaWYgKHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCIpCisgICAgaWYgKHR5cGUgPT0g
ImFwcGxpY2F0aW9uL3hodG1sK3htbCIKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgfHwg
dHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4bWwiCisjZW5kaWYKKyAgICAgICAg
KQogICAgICAgICByZXR1cm4gRG9jdW1lbnQ6OmNyZWF0ZVhIVE1MKGZyYW1lKTsKIAogI2lmIEVO
QUJMRShXTUwpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwxMCBAQAogI2luY2x1
ZGUgIldNTE5hbWVzLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShYSFRNTE1QKQorI2luY2x1ZGUg
IkhUTUxOb1NjcmlwdEVsZW1lbnQuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
dXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwpAQCAtMzg3LDYg
KzM5MSwxMiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1lLCBib29sIGlzCiAKICAg
ICBzdGF0aWMgaW50IGRvY0lEID0gMDsKICAgICBtX2RvY0lEID0gZG9jSUQrKzsKKyNpZiBFTkFC
TEUoWEhUTUxNUCkKKyAgICBpZiAoc2V0dGluZ3MoKSkKKyAgICAgICAgbV9zaG91bGRQcm9jZXNz
Tm9TY3JpcHRFbGVtZW50ID0gIXNldHRpbmdzKCktPmlzSmF2YVNjcmlwdEVuYWJsZWQoKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0RWxlbWVudCA9IGZhbHNlOwor
I2VuZGlmCiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZWRMYXN0UmVmKCkKQEAgLTQ0MTksNCAr
NDQyOSwxNCBAQCB2b2lkIERvY3VtZW50OjpkaXNwbGF5QnVmZmVyTW9kaWZpZWRCeUVuCiAgICAg
ICAgIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5kaXNwbGF5QnVmZmVyKGJ1ZmZlciwgbGVuKTsKIH0K
IAorI2lmIEVOQUJMRShYSFRNTE1QKQorYm9vbCBEb2N1bWVudDo6aXNYSFRNTE1QRG9jdW1lbnQo
KSBjb25zdAoreworICAgIC8vIEFzIHBlciBzZWN0aW9uIDcuMiBvZiBPTUEtV0FQLVhIVE1MTVAt
VjFfMS0yMDA2MTAyMC1BLnBkZiwgYSBjb25mb3JtaW5nIHVzZXIgYWdlbnQKKyAgICAvLyBNVVNU
IGFjY2VwdCBYSFRNTE1QIGRvY3VtZW50IGlkZW50aWZpZWQgYXMgImFwcGxpY2F0aW9uL3ZuZC53
YXAueGh0bWwreG1sIgorICAgIC8vIGFuZCBTSE9VTEQgYWNjZXB0IGl0IGlkZW50aWZpZWQgYXMg
ImFwcGxpY2F0aW9uL3hodG1sK3htbCIKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPnJl
c3BvbnNlTUlNRVR5cGUoKSA9PSAiYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4bWwiIHx8IGZy
YW1lKCktPmxvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3hodG1s
K3htbCI7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShy
ZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxNyw2ICszMTcsMTEgQEAgcHVibGljOgogI2lmIEVOQUJMRShXTUwpCiAgICAgdmlydHVh
bCBib29sIGlzV01MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCisj
aWYgRU5BQkxFKFhIVE1MTVApCisgICAgYm9vbCBpc1hIVE1MTVBEb2N1bWVudCgpIGNvbnN0OyAK
KyAgICBib29sIHNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQ7IH0KKyAgICB2b2lkIHNldFNob3VsZFByb2Nl
c3NOb3NjcmlwdEVsZW1lbnQoYm9vbCBzaG91bGREbykgeyBtX3Nob3VsZFByb2Nlc3NOb1Njcmlw
dEVsZW1lbnQgPSBzaG91bGREbzsgfQorI2VuZGlmCiAgICAgdmlydHVhbCBib29sIGlzRnJhbWVT
ZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAgIENTU1N0eWxlU2VsZWN0b3Iq
IHN0eWxlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2VsZWN0b3I7IH0KQEAgLTk0
Niw2ICs5NTEsMTAgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX2NvbnRlbnRMYW5ndWFnZTsK
IAorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGJvb2wgbV9zaG91bGRQcm9jZXNzTm9TY3JpcHRF
bGVtZW50OworI2VuZGlmCisKIHB1YmxpYzoKICAgICBib29sIGluUGFnZUNhY2hlKCkgY29uc3Qg
eyByZXR1cm4gbV9pblBhZ2VDYWNoZTsgfQogICAgIHZvaWQgc2V0SW5QYWdlQ2FjaGUoYm9vbCBm
bGFnKTsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL05vZGUuY3BwCShyZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjYyLDcgKzEyNjIsNyBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJlbmRl
cmVySWZOZWVkZWQoKQogICAgIAogICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBw
YXJlbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKHBhcmVudFJlbmRlcmVyICYmIHBhcmVudFJlbmRl
cmVyLT5jYW5IYXZlQ2hpbGRyZW4oKQotI2lmIEVOQUJMRShTVkcpCisjaWYgRU5BQkxFKFNWRykg
fHwgRU5BQkxFKFhIVE1MTVApCiAgICAgICAgICYmIHBhcmVudC0+Y2hpbGRTaG91bGRDcmVhdGVS
ZW5kZXJlcih0aGlzKQogI2VuZGlmCiAgICAgICAgICkgewpJbmRleDogV2ViQ29yZS9kb20vTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gNDM2MTUpCisr
KyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw5ICs0MjUsOSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOwogICAgIHZvaWQgY3JlYXRl
UmVuZGVyZXJJZk5lZWRlZCgpOwotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9y
UmVuZGVyZXIoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9y
UmVuZGVyZXIoKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHls
ZSopOwotI2lmIEVOQUJMRShTVkcpCisjaWYgRU5BQkxFKFNWRykgfHwgRU5BQkxFKFhIVE1MTVAp
CiAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CkluZGV4OiBXZWJDb3JlL2Rv
bS9YTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIu
aAkocmV2aXNpb24gNDM2MTUpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNiArNzIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZvaWQgc2V0SXNYSFRNTERvY3VtZW50KGJvb2wgaXNYSFRNTCkgeyBtX2lzWEhUTUxEb2N1bWVu
dCA9IGlzWEhUTUw7IH0KICAgICAgICAgYm9vbCBpc1hIVE1MRG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2lzWEhUTUxEb2N1bWVudDsgfQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICB2
b2lkIHNldElzWEhUTUxNUERvY3VtZW50KGJvb2wgaXNYSFRNTCkgeyBtX2lzWEhUTUxNUERvY3Vt
ZW50ID0gaXNYSFRNTDsgfQorICAgICAgICBib29sIGlzWEhUTUxNUERvY3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9pc1hIVE1MTVBEb2N1bWVudDsgfQorI2VuZGlmCiAjaWYgRU5BQkxFKFdNTCkK
ICAgICAgICAgYm9vbCBpc1dNTERvY3VtZW50KCkgY29uc3Q7CiAjZW5kaWYKQEAgLTE0OSw2ICsx
NTMsMTAgQEAgcHVibGljOgogICAgICAgICBib29sIG1fc2F3WFNMVHJhbnNmb3JtOwogICAgICAg
ICBib29sIG1fc2F3Rmlyc3RFbGVtZW50OwogICAgICAgICBib29sIG1faXNYSFRNTERvY3VtZW50
OworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICBib29sIG1faXNYSFRNTE1QRG9jdW1lbnQ7
CisgICAgICAgIGJvb2wgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb247CisjZW5kaWYKIAogICAgICAg
ICBib29sIG1fcGFyc2VyUGF1c2VkOwogICAgICAgICBib29sIG1fcmVxdWVzdGluZ1NjcmlwdDsK
SW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCShyZXZpc2lvbiA0MzYxNSkKKysr
IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw2ICs2MywxMSBAQAogI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5oPgogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2Ny
aXB0RWxlbWVudC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTUzMCw2ICs1MzUsMTAgQEAgWE1MVG9rZW5pemVyOjpYTUxUb2tlbml6
ZXIoRG9jdW1lbnQqIF9kbwogICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCiAgICAgLCBt
X3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKICAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQor
I2lmIEVOQUJMRShYSFRNTE1QKQorICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKKyAg
ICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3BhcnNl
clBhdXNlZChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKICAgICAsIG1f
ZmluaXNoQ2FsbGVkKGZhbHNlKQpAQCAtNTUzLDYgKzU2MiwxMCBAQCBYTUxUb2tlbml6ZXI6OlhN
TFRva2VuaXplcihEb2N1bWVudEZyYWdtCiAgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkK
ICAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQo
ZmFsc2UpCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZh
bHNlKQorICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAs
IG1fcGFyc2VyUGF1c2VkKGZhbHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQog
ICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCkBAIC03MDgsOCArNzIxLDEzIEBAIHZvaWQgWE1M
VG9rZW5pemVyOjpzdGFydEVsZW1lbnROcyhjb25zdCAKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGJvb2wgaXNGaXJzdEVsZW1lbnQgPSAhbV9zYXdGaXJzdEVsZW1lbnQ7Ci0gICAgbV9z
YXdGaXJzdEVsZW1lbnQgPSB0cnVlOworI2lmIEVOQUJMRShYSFRNTE1QKSAKKyAgICAvLyBjaGVj
ayBpZiB0aGUgRE9DVFlQRSBEZWNsYXJhdGlvbiBvZiBYSFRNTE1QIGRvY3VtZW50IGV4aXN0cwor
ICAgIGlmICghbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gJiYgbV9kb2MtPmlzWEhUTUxNUERvY3Vt
ZW50KCkpIHsKKyAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9u
IGxhY2suIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKIAogICAgIGV4aXRUZXh0KCk7CiAKQEAgLTcyNCw2ICs3NDIsMjcgQEAg
dm9pZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IAogICAgICAgICAgICAgdXJp
ID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwogICAgIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQor
ICAgIGlmICghbV9zYXdGaXJzdEVsZW1lbnQgJiYgaXNYSFRNTE1QRG9jdW1lbnQoKSkgeworICAg
ICAgICAvLyBBcyBwZXIgdGhlIHNlY3Rpb24gNy4xIG9mIE9NQS1XQVAtWEhUTUxNUC1WMV8xLTIw
MDYxMDIwLUEucGRmLCAKKyAgICAgICAgLy8gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBy
b290IGVsZW1lbnQgTVVTVCBiZSAnaHRtbCcgYW5kIAorICAgICAgICAvLyBlbnN1cmUgdGhlIG5h
bWUgb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoZSByb290IGVsbWVudCAnaHRtbCcgCisg
ICAgICAgIC8vIE1VU1QgYmUgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnCisgICAgICAg
IGlmIChsb2NhbE5hbWUgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7CisgICAg
ICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIlhIVE1MTVAgZG9jdW1lbnQgZXhwZWN0cyAnaHRt
bCcgYXMgcm9vdCBlbGVtZW50LiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVyaS5pc051bGwoKSkg
eworICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5h
bWVzcGFjZVVSSTsgCisgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGJvb2wgaXNGaXJzdEVsZW1lbnQgPSAhbV9z
YXdGaXJzdEVsZW1lbnQ7CisgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOworCiAgICAgUXVh
bGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKICAgICBSZWZQdHI8RWxl
bWVudD4gbmV3RWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlKTsKICAg
ICBpZiAoIW5ld0VsZW1lbnQpIHsKQEAgLTgwMiwyMiArODQxLDI4IEBAIHZvaWQgWE1MVG9rZW5p
emVyOjplbmRFbGVtZW50TnMoKQogICAgIEFTU0VSVCghbV9wZW5kaW5nU2NyaXB0KTsKICAgICBt
X3JlcXVlc3RpbmdTY3JpcHQgPSB0cnVlOwogCi0gICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3Jp
cHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpOwotICAgIGlmICghc2NyaXB0SHJlZi5p
c0VtcHR5KCkpIHsKLSAgICAgICAgLy8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUgCi0gICAgICAg
IFN0cmluZyBzY3JpcHRDaGFyc2V0ID0gc2NyaXB0RWxlbWVudC0+c2NyaXB0Q2hhcnNldCgpOwot
ICAgICAgICBpZiAoKG1fcGVuZGluZ1NjcmlwdCA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVz
dFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKLSAgICAgICAgICAgIG1fc2Ny
aXB0RWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENs
aWVudCh0aGlzKTsKLQotICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUgMCBp
ZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAotICAgICAg
ICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKLSAgICAgICAgICAgICAgICBwYXVzZVBhcnNpbmco
KTsKLSAgICAgICAgfSBlbHNlIAotICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKLSAg
ICB9IGVsc2UKLSAgICAgICAgbV92aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlw
dChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgbV9kb2Mt
PnVybCgpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOwotCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAg
aWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkpCisgICAgICAg
IG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworICAgIGVsc2Ug
CisjZW5kaWYKKyAgICB7CisgICAgICAgIFN0cmluZyBzY3JpcHRIcmVmID0gc2NyaXB0RWxlbWVu
dC0+c291cmNlQXR0cmlidXRlVmFsdWUoKTsKKyAgICAgICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUgCisgICAgICAg
ICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCA9IHNjcmlwdEVsZW1lbnQtPnNjcmlwdENoYXJzZXQo
KTsKKyAgICAgICAgICAgIGlmICgobV9wZW5kaW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xvYWRlcigp
LT5yZXF1ZXN0U2NyaXB0KHNjcmlwdEhyZWYsIHNjcmlwdENoYXJzZXQpKSkgeworICAgICAgICAg
ICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgbV9wZW5k
aW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisKKyAgICAgICAgICAgICAgICAvLyBtX3BlbmRp
bmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigp
IGV4ZWN1dGVkIGl0CisgICAgICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAg
ICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7CisgICAgICAgICAgICB9IGVsc2UgCisgICAg
ICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJj
ZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCksIG1fc2Ny
aXB0U3RhcnRMaW5lKSk7CisgICAgfQogICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwog
ICAgIHNldEN1cnJlbnROb2RlKHBhcmVudC5nZXQoKSk7CiB9CkBAIC05NDYsNiArOTkxLDkgQEAg
dm9pZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RG9jdW1lbnQoY29uc3QgeAogdm9pZCBYTUxUb2tlbml6
ZXI6OmVuZERvY3VtZW50KCkKIHsKICAgICBleGl0VGV4dCgpOworI2lmIEVOQUJMRShYSFRNTE1Q
KQorICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9p
ZCBYTUxUb2tlbml6ZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0
IHhtbENoYXIqIGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIqIHN5c3RlbUlEKQpAQCAtOTU5LDgg
KzEwMDcsOSBAQCB2b2lkIFhNTFRva2VuaXplcjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgCiAgICAg
fQogICAgIAogICAgIGlmIChtX2RvYykgewotI2lmIEVOQUJMRShXTUwpCiAgICAgICAgIFN0cmlu
ZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQpOworICAgICAgICBTdHJpbmcgZHRkTmFtZSA9
IHRvU3RyaW5nKG5hbWUpOworI2lmIEVOQUJMRShXTUwpCiAgICAgICAgIGlmIChpc1dNTERvY3Vt
ZW50KCkKICAgICAgICAgICAgICYmIGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMv
L0VOIgogICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMi8v
RU4iCkBAIC05NjgsOCArMTAxNywyNCBAQCB2b2lkIFhNTFRva2VuaXplcjo6aW50ZXJuYWxTdWJz
ZXQoY29uc3QgCiAgICAgICAgICAgICAmJiBleHRJZCAhPSAiLS8vV0FQRk9SVU0vL0RURCBXTUwg
MS4wLy9FTiIpCiAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkludmFsaWQgRFREIFB1
YmxpYyBJRCIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwogI2VuZGlmCisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgICAgIGlmICgoZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhU
TUwgTW9iaWxlIDEuMC8vRU4iKQorICAgICAgICAgICAgfHwgKGV4dElkID09ICItLy9XQVBGT1JV
TS8vRFREIFhIVE1MIE1vYmlsZSAxLjEvL0VOIikpIHsKKyAgICAgICAgICAgIGlmIChkdGROYW1l
ICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgeworICAgICAgICAgICAgICAgIGhh
bmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBET0NUWVBFIGRlY2xhcmF0aW9uLCBleHBlY3RlZCAn
aHRtbCcgYXMgcm9vdCBlbGVtZW50LiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgIGlm
IChtX2RvYy0+aXNYSFRNTE1QRG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBzZXRJc1hIVE1M
TVBEb2N1bWVudCh0cnVlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRJ
c1hIVE1MRG9jdW1lbnQodHJ1ZSk7CisKKyAgICAgICAgICAgIG1faGFzRG9jVHlwZURlY2xhcmF0
aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCiAKLSAgICAgICAgbV9kb2MtPmFkZENoaWxk
KERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jLCB0b1N0cmluZyhuYW1lKSwgdG9TdHJpbmcoZXh0
ZXJuYWxJRCksIHRvU3RyaW5nKHN5c3RlbUlEKSkpOworICAgICAgICBtX2RvYy0+YWRkQ2hpbGQo
RG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2MsIGR0ZE5hbWUsIGV4dElkLCB0b1N0cmluZyhzeXN0
ZW1JRCkpKTsKICAgICB9CiB9CiAKQEAgLTExMTIsNiArMTE3Nyw5IEBAIHN0YXRpYyB4bWxFbnRp
dHlQdHIgZ2V0RW50aXR5SGFuZGxlcih2b2kKIAogICAgIGVudCA9IHhtbEdldERvY0VudGl0eShj
dHh0LT5teURvYywgbmFtZSk7CiAgICAgaWYgKCFlbnQgJiYgKGdldFRva2VuaXplcihjbG9zdXJl
KS0+aXNYSFRNTERvY3VtZW50KCkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgICAg
ICAgfHwgZ2V0VG9rZW5pemVyKGNsb3N1cmUpLT5pc1hIVE1MTVBEb2N1bWVudCgpCisjZW5kaWYK
ICNpZiBFTkFCTEUoV01MKQogICAgICAgICAgICAgICAgICB8fCBnZXRUb2tlbml6ZXIoY2xvc3Vy
ZSktPmlzV01MRG9jdW1lbnQoKQogI2VuZGlmCkBAIC0xMTUzLDcgKzEyMjEsMTAgQEAgc3RhdGlj
IHZvaWQgZXh0ZXJuYWxTdWJzZXRIYW5kbGVyKHZvaWQqIAogICAgICAgICB8fCAoZXh0SWQgPT0g
Ii0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8vRU4iKQogICAgICAgICB8fCAoZXh0SWQgPT0g
Ii0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VOIikKICAgICAgICAgfHwg
KGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBsdXMgU1ZH
IDEuMS8vRU4iKQotICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwg
TW9iaWxlIDEuMC8vRU4iKSkKKyNpZiAhRU5BQkxFKFhIVE1MTVApCisgICAgICAgIHx8IChleHRJ
ZCA9PSAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpCisjZW5kaWYKKyAg
ICAgICApCiAgICAgICAgIGdldFRva2VuaXplcihjbG9zdXJlKS0+c2V0SXNYSFRNTERvY3VtZW50
KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9yIG5vdC4KIH0KIApJ
bmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAkocmV2aXNpb24gNDM2MTUpCisrKyBXZWJDb3JlL2Rv
bS9YTUxUb2tlbml6ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDExIEBACiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lm
IEVOQUJMRShYSFRNTE1QKQorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxT
Y3JpcHRFbGVtZW50LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtODUsNiArOTAsMTAgQEAgWE1MVG9rZW5pemVyOjpYTUxUb2tlbml6
ZXIoRG9jdW1lbnQqIF9kbwogICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCiAgICAgLCBt
X3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKICAgICAsIG1faXNYSFRNTERvY3VtZW50KGZhbHNlKQor
I2lmIEVOQUJMRShYSFRNTE1QKQorICAgICwgbV9pc1hIVE1MTVBEb2N1bWVudChmYWxzZSkKKyAg
ICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQorI2VuZGlmCiAgICAgLCBtX3BhcnNl
clBhdXNlZChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxzZSkKICAgICAsIG1f
ZmluaXNoQ2FsbGVkKGZhbHNlKQpAQCAtMTEwLDYgKzExOSwxMCBAQCBYTUxUb2tlbml6ZXI6OlhN
TFRva2VuaXplcihEb2N1bWVudEZyYWdtCiAgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkK
ICAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQo
ZmFsc2UpCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZh
bHNlKQorICAgICwgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAs
IG1fcGFyc2VyUGF1c2VkKGZhbHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQog
ICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCkBAIC00MTksNiArNDMyLDEyIEBAIHZvaWQgWE1M
VG9rZW5pemVyOjpwYXJzZSgpCiAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RWxlbWVudDogeworI2lmIEVOQUJMRShYSFRN
TE1QKQorICAgICAgICAgICAgaWYgKG1fZG9jLT5pc1hIVE1MTVBEb2N1bWVudCgpICYmICFtX2hh
c0RvY1R5cGVEZWNsYXJhdGlvbikgeworICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFs
LCAiRE9DVFlQRSBkZWNsYXJhdGlvbiBsYWNrLiIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVy
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2VuZGlmIAogICAg
ICAgICAgICAgcGFyc2VTdGFydEVsZW1lbnQoKTsKICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CkBAIC00NDMsMTIgKzQ2MiwxOCBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2UoKQogICAg
ICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkRURDogewogICAgICAgICAgICAgLy9xRGVidWco
KTw8Ii0tLS0tLS0tLS0tLS0gRFREIjsKICAgICAgICAgICAgIHBhcnNlRHRkKCk7CisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7
CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUVht
bFN0cmVhbVJlYWRlcjo6RW50aXR5UmVmZXJlbmNlOiB7CiAgICAgICAgICAgICAvL3FEZWJ1Zygp
PDwiLS0tLS0tLS0tLSBFTlRJVFkgPSAiPDxtX3N0cmVhbS5uYW1lKCkudG9TdHJpbmcoKQogICAg
ICAgICAgICAgLy8gICAgICAgIDw8IiwgdCA9ICI8PG1fc3RyZWFtLnRleHQoKS50b1N0cmluZygp
OwogICAgICAgICAgICAgaWYgKGlzWEhUTUxEb2N1bWVudCgpCisjaWYgRU5BQkxFKFhIVE1MTVAp
CisgICAgICAgICAgICAgICAgfHwgaXNYSFRNTE1QRG9jdW1lbnQoKQorI2VuZGlmCiAjaWYgRU5B
QkxFKFdNTCkKICAgICAgICAgICAgICAgICB8fCBpc1dNTERvY3VtZW50KCkKICNlbmRpZgpAQCAt
NTA4LDkgKzUzMyw2IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpwYXJzZVN0YXJ0RWxlbWVudCgpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIGlzRmlyc3RFbGVtZW50ID0gIW1fc2F3
Rmlyc3RFbGVtZW50OwotICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKLQogICAgIGV4aXRU
ZXh0KCk7CiAKICAgICBTdHJpbmcgbG9jYWxOYW1lID0gbV9zdHJlYW0ubmFtZSgpOwpAQCAtNTI5
LDYgKzU1MSwyOCBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VTdGFydEVsZW1lbnQoKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgaWYgKCFtX3Nh
d0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7CisgICAgICAgIC8vIEFzIHBl
ciA3LjEgc2VjdGlvbiBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwgCisg
ICAgICAgIC8vIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgcm9vdCBlbGVtZW50IE1VU1Qg
YmUgJ2h0bWwnIGFuZCAKKyAgICAgICAgLy8gZW5zdXJlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0
IG5hbWVzcGFjZSBvbiB0aGUgcm9vdCBlbG1lbnQgJ2h0bWwnIAorICAgICAgICAvLyBNVVNUIGJl
ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJworICAgICAgICBpZiAobG9jYWxOYW1lICE9
IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgeworICAgICAgICAgICAgaGFuZGxlRXJy
b3IoZmF0YWwsICJYSFRNTE1QIGRvY3VtZW50IGV4cGVjdHMgJ2h0bWwnIGFzIHJvb3QgZWxlbWVu
dC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfSAKKworICAgICAgICBpZiAodXJpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBt
X2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJOyAKKyAg
ICAgICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAgICAgICAgICAgIG1fc3Ry
ZWFtLmFkZEV4dHJhTmFtZXNwYWNlRGVjbGFyYXRpb24oUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xh
cmF0aW9uKHByZWZpeCwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkpOworICAgICAgICB9
CisgICAgfQorI2VuZGlmCisKKyAgICBib29sIGlzRmlyc3RFbGVtZW50ID0gIW1fc2F3Rmlyc3RF
bGVtZW50OworICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKKwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGhhbmRsZUVsZW1lbnROYW1lc3BhY2VzKG5ld0VsZW1lbnQuZ2V0KCks
IG1fc3RyZWFtLm5hbWVzcGFjZURlY2xhcmF0aW9ucygpLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBA
IC01ODMsMjIgKzYyNywyOCBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VFbmRFbGVtZW50KCkK
ICAgICBBU1NFUlQoIW1fcGVuZGluZ1NjcmlwdCk7CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0g
dHJ1ZTsKIAotICAgIFN0cmluZyBzY3JpcHRIcmVmID0gc2NyaXB0RWxlbWVudC0+c291cmNlQXR0
cmlidXRlVmFsdWUoKTsKLSAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRlIAotICAgICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNl
dCA9IHNjcmlwdEVsZW1lbnQtPnNjcmlwdENoYXJzZXQoKTsKLSAgICAgICAgaWYgKChtX3BlbmRp
bmdTY3JpcHQgPSBtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQoc2NyaXB0SHJlZiwg
c2NyaXB0Q2hhcnNldCkpKSB7Ci0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50
OwotICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7Ci0KLSAgICAg
ICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5
IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0ZWQgaXQKLSAgICAgICAgICAgIGlmIChtX3BlbmRpbmdT
Y3JpcHQpCi0gICAgICAgICAgICAgICAgcGF1c2VQYXJzaW5nKCk7Ci0gICAgICAgIH0gZWxzZSAK
LSAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
dmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShz
Y3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFy
dExpbmUpKTsKLQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGlmICghc2NyaXB0RWxlbWVudC0+
c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQorICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJv
Y2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAg
ICAgIFN0cmluZyBzY3JpcHRIcmVmID0gc2NyaXB0RWxlbWVudC0+c291cmNlQXR0cmlidXRlVmFs
dWUoKTsKKyAgICAgICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
Ly8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUgCisgICAgICAgICAgICBTdHJpbmcgc2NyaXB0Q2hh
cnNldCA9IHNjcmlwdEVsZW1lbnQtPnNjcmlwdENoYXJzZXQoKTsKKyAgICAgICAgICAgIGlmICgo
bV9wZW5kaW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlw
dEhyZWYsIHNjcmlwdENoYXJzZXQpKSkgeworICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVu
dCA9IGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQo
dGhpcyk7CisKKyAgICAgICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlm
IHNjcmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0CisgICAgICAg
ICAgICAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKKyAgICAgICAgICAgICAgICAgICAgcGF1c2VQ
YXJzaW5nKCk7CisgICAgICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICAgICAgbV9zY3JpcHRF
bGVtZW50ID0gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCkt
PmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+
c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7CisgICAg
fQogICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9IGZhbHNlOwogICAgIHNldEN1cnJlbnROb2RlKHBh
cmVudC5nZXQoKSk7CiB9CkBAIC02NjIsNiArNzEyLDkgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBh
cnNlQ29tbWVudCgpCiAKIHZvaWQgWE1MVG9rZW5pemVyOjplbmREb2N1bWVudCgpCiB7CisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNl
bmRpZgogfQogCiBib29sIFhNTFRva2VuaXplcjo6aGFzRXJyb3IoKSBjb25zdApAQCAtNzU1LDkg
KzgwOCwyNSBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VEdGQoKQogICAgICAgICB8fCAocHVi
bGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4wLy9FTiIp
KQogICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vVzNDLy9EVEQgWEhU
TUwgMS4xIHBsdXMgTWF0aE1MIDIuMC8vRU4iKSkKICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFM
YXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBT
VkcgMS4xLy9FTiIpKQotICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8v
V0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgeworI2lmICFFTkFCTEUoWEhU
TUxNUCkKKyAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVN
Ly9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkKKyNlbmRpZgorICAgICAgICkKICAgICAgICAg
c2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0
aWVzIG9yIG5vdC4KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBlbHNlIGlmICgocHVibGljSWQg
PT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4xLy9FTiIp
KQorICAgICAgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JV
TS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpKSB7CisgICAgICAgIGlmIChBdG9taWNTdHJp
bmcobmFtZSkgIT0gSFRNTE5hbWVzOjpodG1sVGFnLmxvY2FsTmFtZSgpKSB7CisgICAgICAgICAg
ICBoYW5kbGVFcnJvcihmYXRhbCwgIkludmFsaWQgRE9DVFlQRSBkZWNsYXJhdGlvbiwgZXhwZWN0
ZWQgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSAKKworICAgICAgICBpZiAobV9kb2Mt
PmlzWEhUTUxNUERvY3VtZW50KCkpIC8vIGNoZWNrIGlmIHRoZSBNSU1FIHR5cGUgaXMgY29ycmVj
dCB3aXRoIHRoaXMgbWV0aG9kCisgICAgICAgICAgICBzZXRJc1hIVE1MTVBEb2N1bWVudCh0cnVl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOwog
ICAgIH0KKyNlbmRpZgogI2lmIEVOQUJMRShXTUwpCiAgICAgZWxzZSBpZiAobV9kb2MtPmlzV01M
RG9jdW1lbnQoKQogICAgICAgICAgICAgICYmIHB1YmxpY0lkICE9IFFMYXRpbjFTdHJpbmcoIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iKQpAQCAtNzcyLDQgKzg0MSwzIEBAIHZvaWQgWE1M
VG9rZW5pemVyOjpwYXJzZUR0ZCgpCiB9CiB9CiAKLQpJbmRleDogV2ViQ29yZS9kb20vbWFrZV9u
YW1lcy5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCShyZXZpc2lv
biA0MzYxNSkKKysrIFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwJKHdvcmtpbmcgY29weSkKQEAg
LTgzMSw3ICs4MzEsNyBAQCBzdWIgdXNlc0RlZmF1bHRKU1dyYXBwZXIKICAgICBteSAkbmFtZSA9
IHNoaWZ0OwogCiAgICAgIyBBIHRhZyByZXVzZXMgdGhlIGRlZmF1bHQgd3JhcHBlciBpZiBpdHMg
SlNJbnRlcmZhY2VOYW1lIG1hdGNoZXMgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIEVsZW1lbnQuCi0g
ICAgcmV0dXJuICR0YWdzeyRuYW1lfXsnSlNJbnRlcmZhY2VOYW1lJ30gZXEgJHBhcmFtZXRlcnN7
Im5hbWVzcGFjZSJ9IC4gIkVsZW1lbnQiOworICAgIHJldHVybiAkdGFnc3skbmFtZX17J0pTSW50
ZXJmYWNlTmFtZSd9IGVxICRwYXJhbWV0ZXJzeyJuYW1lc3BhY2UifSAuICJFbGVtZW50IiB8fCAk
dGFnc3skbmFtZX17J0pTSW50ZXJmYWNlTmFtZSd9IGVxICJIVE1MTm9TY3JpcHRFbGVtZW50IjsK
IH0KIAogc3ViIHByaW50V3JhcHBlckZ1bmN0aW9ucwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4MCwxMSArOTgwLDEzIEBAIGJvb2wgSFRNTEVsZW1lbnQ6OmNoZWNrRFREKGNv
bnN0IE5vZGUqIG4KICAgICAKIGJvb2wgSFRNTEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUgKnN0eWxlKQogeworI2lmICFFTkFCTEUoWEhUTUxNUCkKICAgICBpZiAoaGFzTG9j
YWxOYW1lKG5vc2NyaXB0VGFnKSkgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1
bWVudCgpLT5zZXR0aW5ncygpOwogICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmlz
SmF2YVNjcmlwdEVuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cisj
ZW5kaWYKICAgICByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7
CiB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShYSFRNTE1QKQorI2luY2x1ZGUgIkhU
TUxOb1NjcmlwdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitIVE1MTm9TY3Jp
cHRFbGVtZW50OjpIVE1MTm9TY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCit7Cisg
ICAgQVNTRVJUKGhhc1RhZ05hbWUobm9zY3JpcHRUYWcpKTsKK30KKworSFRNTE5vU2NyaXB0RWxl
bWVudDo6fkhUTUxOb1NjcmlwdEVsZW1lbnQoKQoreworfQorCitib29sIEhUTUxOb1NjcmlwdEVs
ZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQoreworICAgIHJldHVybiBuZXdD
aGlsZC0+aXNUZXh0Tm9kZSgpIHx8IGluQmxvY2tUYWdMaXN0KG5ld0NoaWxkKTsgCit9CisKK3Zv
aWQgSFRNTE5vU2NyaXB0RWxlbWVudDo6YXR0YWNoKCkKK3sKKyAgICBIVE1MRWxlbWVudDo6YXR0
YWNoKCk7CisKKyAgICAvLyBJZiBubyBuZWVkIHRvIHByb2Nlc3MgPG5vc2NyaXB0Piwgd2UgaGlk
ZSBpdCBieSBzZXR0aW5nIGRpc3BsYXk6bm9uZSB0ZW1wb3JhcmlseQorICAgIGlmICghZG9jdW1l
bnQoKS0+c2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCgpKSB7CisgICAgICAgIGlmIChyZW5k
ZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCkpCisgICAgICAgICAgICByZW5kZXJlcigpLT5z
dHlsZSgpLT5zZXREaXNwbGF5KE5PTkUpOworICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgfQorfQorCit2b2lkIEhUTUxOb1NjcmlwdEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxl
Q2hhbmdlIGNoYW5nZSkKK3sKKyAgICBpZiAoIWRvY3VtZW50KCktPnNob3VsZFByb2Nlc3NOb3Nj
cmlwdEVsZW1lbnQoKSB8fCAhcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+c3R5bGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgPG5vc2NyaXB0PiBuZWVkcyBwcm9jZXNzaW5nLCB3
ZSBtYWtlIGl0IHZpc2lhYmxlIGhlcmUsIGluY2x1ZGluZyBpdHMgdmlzaWJsZSBjaGlsZHJlbgor
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOworICAg
IGlmIChzdHlsZS0+ZGlzcGxheSgpID09IE5PTkUpIHsKKyAgICAgICAgc3R5bGUtPnNldERpc3Bs
YXkoSU5MSU5FKTsKKworICAgICAgICAvLyBDcmVhdGUgcmVuZGVyZXJzIGZvciBpdHMgY2hpbGRy
ZW4KKyAgICAgICAgaWYgKGhhc0NoaWxkTm9kZXMoKSkgeworICAgICAgICAgICAgZm9yIChOb2Rl
KiBuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkKKyAg
ICAgICAgICAgICAgICBpZiAoIW4tPnJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgICAgIG4t
PmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBI
VE1MTm9TY3JpcHRFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqIGNoaWxk
KSBjb25zdAoreworICAgIHJldHVybiBkb2N1bWVudCgpLT5zaG91bGRQcm9jZXNzTm9zY3JpcHRF
bGVtZW50KCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IEhUTUxOb1NjcmlwdEVsZW1l
bnQ6OnN0eWxlRm9yUmVuZGVyZXIoKQoreworICAgIHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVNl
bGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlzLCAwLCBmYWxzZSk7Cit9CisKK30KKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBI
VE1MTm9TY3JpcHRFbGVtZW50X2gKKyNkZWZpbmUgSFRNTE5vU2NyaXB0RWxlbWVudF9oCisKKyNp
ZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEhUTUxOb1NjcmlwdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQgeworcHVibGljOgorICAgIEhUTUxOb1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+SFRNTE5vU2NyaXB0RWxl
bWVudCgpOworCisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxl
Q2hhbmdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2Rl
KikgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclJl
bmRlcmVyKCk7CisgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUq
KSB7ICByZXR1cm4gdHJ1ZTsgfQorfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkocmV2aXNpb24gNDM2MTUpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwOSw3ICs5MDksOSBAQCBQYXNzUmVm
UHRyPE5vZGU+IEhUTUxQYXJzZXI6OmdldE5vZGUoVG9rCiAgICAgICAgIGdGdW5jdGlvbk1hcC5z
ZXQobm9iclRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVF
cnJvckNoZWNrKTsKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChub2VtYmVkVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKTsKICAgICAg
ICAgZ0Z1bmN0aW9uTWFwLnNldChub2ZyYW1lc1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1M
UGFyc2VyOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2spOworI2lmICFFTkFCTEUoWEhUTUxNUCkK
ICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChub3NjcmlwdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
ICZIVE1MUGFyc2VyOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2spOworI2VuZGlmCiAgICAgICAg
IGdGdW5jdGlvbk1hcC5zZXQob2xUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6
cENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KHBUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2sp
OwogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KHBsYWludGV4dFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksICZIVE1MUGFyc2VyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CkBAIC0xMDE1LDExICsx
MDE3LDEzIEBAIGJvb2wgSFRNTFBhcnNlcjo6aXNJbmxpbmUoTm9kZSogbm9kZSkgY28KICAgICAg
ICAgICAgIGUtPmhhc0xvY2FsTmFtZShub2ZyYW1lc1RhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG5v
bGF5ZXJUYWcpIHx8CiAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUobm9lbWJlZFRhZykpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyNpZiAhRU5BQkxFKFhIVE1MTVApCiAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUobm9zY3JpcHRUYWcpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7
CiAgICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2RvY3VtZW50LT5zZXR0aW5ncygp
OwogICAgICAgICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFi
bGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyNlbmRpZgog
ICAgIH0KICAgICAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRh
Z05hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4JKHJl
dmlzaW9uIDQzNjE1KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsMTEgQEAgbm9iciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBu
b2VtYmVkIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIG5vZnJhbWVzIGludGVyZmFjZU5hbWU9
SFRNTEVsZW1lbnQKIG5vbGF5ZXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAorI2lmIEVOQUJM
RV9YSFRNTE1QCitub3NjcmlwdCBpbnRlcmZhY2VOYW1lPUhUTUxOb1NjcmlwdEVsZW1lbnQKKyNl
bHNlCiBub3NjcmlwdCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CisjZW5kaWYKIG9iamVjdCBj
b25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCiBvbCBpbnRlcmZhY2VOYW1lPUhUTUxPTGlz
dEVsZW1lbnQKIG9wdGdyb3VwIGludGVyZmFjZU5hbWU9SFRNTE9wdEdyb3VwRWxlbWVudCwgY29u
c3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXpl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZp
c2lvbiA0MzYxNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQ3LDYgKzQ0NywxMCBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5p
emVyOjpzY3JpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBQYXJzZSBtX3Njcmlw
dENvZGUgY29udGFpbmluZyA8c2NyaXB0PiBpbmZvCiAgICAgICAgICAgICBkb1NjcmlwdEV4ZWMg
PSBtX3NjcmlwdE5vZGUtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKTsKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAgICAgICAgIGlmICghZG9TY3JpcHRFeGVjKQorICAgICAgICAgICAgICAg
IG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOworI2VuZGlmCiAg
ICAgICAgICAgICBtX3NjcmlwdE5vZGUgPSAwOwogICAgICAgICB9CiAgICAgfQpAQCAtMTk5MSw2
ICsxOTk1LDEwIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGUKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1l
bnQqPihuLmdldCgpKS0+c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQogICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBzY3JpcHRFeGVjdXRpb24oc291cmNlQ29kZSwgbV9zdGF0ZSk7CisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9kb2Mt
PnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisjZW5kaWYKICAgICAgICAg
ICAgIG4tPmRpc3BhdGNoRXZlbnQoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNl
KTsKICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA0MzYx
NSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIxLDcgKzIyMSwxMiBAQCBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb24gewogICAgICAgICBB
U1NFUlQodGhpcy0+Zm9ybVN0YXRlKTsKICAgICB9CiB9OwotCisgCisjaWYgRU5BQkxFKFhIVE1M
TVApCitzdGF0aWMgY29uc3QgY2hhciBkZWZhdWx0QWNjZXB0SGVhZGVyW10gPSAiYXBwbGljYXRp
b24veG1sLGFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwreG1sLGFwcGxpY2F0aW9uL3hodG1sK3ht
bDtwcm9maWxlPSdodHRwOi8vd3d3LndhcGZvcnVtLm9yZy94aHRtbCcsdGV4dC9odG1sO3E9MC45
LHRleHQvcGxhaW47cT0wLjgsaW1hZ2UvcG5nLCovKjtxPTAuNSI7CisjZWxzZQorc3RhdGljIGNv
bnN0IGNoYXIgZGVmYXVsdEFjY2VwdEhlYWRlcltdID0gImFwcGxpY2F0aW9uL3htbCxhcHBsaWNh
dGlvbi94aHRtbCt4bWwsdGV4dC9odG1sO3E9MC45LHRleHQvcGxhaW47cT0wLjgsaW1hZ2UvcG5n
LCovKjtxPTAuNSI7CisjZW5kaWYKIHN0YXRpYyBkb3VibGUgc3RvcmVkVGltZU9mTGFzdENvbXBs
ZXRlZExvYWQ7CiBzdGF0aWMgRnJhbWVMb2FkZXI6OkxvY2FsTG9hZFBvbGljeSBsb2NhbExvYWRQ
b2xpY3kgPSBGcmFtZUxvYWRlcjo6QWxsb3dMb2NhbExvYWRzRm9yTG9jYWxPbmx5OwogCkBAIC0z
NTczLDcgKzM1NzgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjphZGRFeHRyYUZpZWxkc1RvUmVxdWVz
CiAgICAgfQogICAgIAogICAgIGlmIChtYWluUmVzb3VyY2UpCi0gICAgICAgIHJlcXVlc3Quc2V0
SFRUUEFjY2VwdCgiYXBwbGljYXRpb24veG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCx0ZXh0L2h0
bWw7cT0wLjksdGV4dC9wbGFpbjtxPTAuOCxpbWFnZS9wbmcsKi8qO3E9MC41Iik7CisgICAgICAg
IHJlcXVlc3Quc2V0SFRUUEFjY2VwdChkZWZhdWx0QWNjZXB0SGVhZGVyKTsKIAogICAgIC8vIE1h
a2Ugc3VyZSB3ZSBzZW5kIHRoZSBPcmlnaW4gaGVhZGVyLgogICAgIGFkZEhUVFBPcmlnaW5JZk5l
ZWRlZChyZXF1ZXN0LCBTdHJpbmcoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBl
UmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHAJKHJldmlzaW9uIDQzNjE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDYgKzE5Niw5IEBAIHN0YXRpYyB2b2lk
IGluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFnZU0KICAgICAgICAgInRleHQvIiwKICAgICAgICAg
ImFwcGxpY2F0aW9uL3htbCIsCiAgICAgICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLAorI2lm
IEVOQUJMRShYSFRNTE1QKQorICAgICAgICAiYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4bWwi
LAorI2VuZGlmCiAgICAgICAgICJhcHBsaWNhdGlvbi9yc3MreG1sIiwKICAgICAgICAgImFwcGxp
Y2F0aW9uL2F0b20reG1sIiwKICNpZiBFTkFCTEUoU1ZHKQo=
</data>
<flag name="review"
          id="15227"
          type_id="1"
          status="-"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30438</attachid>
            <date>2009-05-17 23:54:56 -0700</date>
            <delta_ts>2009-05-19 00:22:31 -0700</delta_ts>
            <desc>Latest Updated patch for code change</desc>
            <filename>applyXHTMLMPImplement.patch</filename>
            <type>text/plain</type>
            <size>40867</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzcgQEAKKzIwMDktMDUtMTggIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgWEhUTUxNUCBzdXBwb3J0IHRvIFdlYmtpdAorICAgICAgICBYSFRNTE1QIGlz
IGEgc3RyaWN0IHN1YnNldCBvZiBYSFRNTCAxLjEuIEl0IGV4dGVuZHMgWEhUTUwgQmFzaWMgYW5k
IGFkZCBlbmhhbmNlZAorICAgICAgICBmdW5jdGlvbmFsaXR5LiBNb3N0IG9mIHRoZSBmdW5jdGlv
bmFsaXRpZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW1wbGVtZW50ZWQgYnkgV2Via2l0LgorICAgICAg
ICAKKyAgICAgICAgVGhlIGNoYW5nZXMgaW5jbHVkZToKKyAgICAgICAgMSkgQWRkaW5nIDxub3Nj
cmlwdD4gc3VwcG9ydAorICAgICAgICAyKSBEb2N1bWVudCBjb25mb3JtYW5jZSB2YWxpZGF0aW9u
CisgICAgICAgIDMpIFVzZXIgQWdlbnQgY29uZm9ybWFuY2UgdmFsaWRhdGlvbgorIAorICAgICAg
ICByZWZlciB0byB0aGUgc3BlY2lmaWNhdGlvbjogT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEw
MjAtQS5wZGYKKworICAgICAgICBUZXN0czogZmFzdC94aHRtbG1wL2NoZWNrLWRvY3R5cGUtZGVj
bGFyYXRpb24ueGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveGh0bWxtcC9jaGVjay1yb290ZWxl
bWVudC54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94aHRtbG1wL25vc2NyaXB0LWluLW11bHRp
c2NyaXB0cy54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94aHRtbG1wL25vc2NyaXB0LW5lc3Rl
ZC54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94aHRtbG1wL25vc2NyaXB0LnhodG1sCisKKyAg
ICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9N
SW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3VtZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojppc1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvdWxkUHJvY2Vzc05vc2NyaXB0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U2hvdWxkUHJvY2Vzc05v
c2NyaXB0RWxlbWVudCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCk6CisgICAgICAgICogZG9tL05vZGUuaDoK
KyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmg6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tl
bml6ZXI6OnNldElzWEhUTUxNUERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2Vu
aXplcjo6aXNYSFRNTE1QRG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJMaWJ4
bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6c3RhcnRFbGVtZW50TnMpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MVG9rZW5pemVyOjplbmREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tl
bml6ZXI6OmludGVybmFsU3Vic2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEVudGl0eUhhbmRs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZXJuYWxTdWJzZXRIYW5kbGVyKToKKyAgICAgICAg
KiBkb20vWE1MVG9rZW5pemVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVy
OjpYTUxUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpwYXJzZSk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6cGFyc2VFbmRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Oik6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgICogaHRt
bC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6cmVuZGVy
ZXJJc05lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjpIVE1MTm9TY3JpcHRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6On5IVE1MTm9T
Y3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OmNo
ZWNrRFREKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OmF0dGFjaCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjpyZWNhbGNTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJl
bmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OnN0eWxlRm9y
UmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQp
OgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyc2VyOjpnZXROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmlzSW5saW5l
KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWdOYW1lcy5pbjoKKyAgICAgICAgKiBodG1sL0hUTUxU
b2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6c2NyaXB0SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5pc2hlZCk6
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjphZGRFeHRyYUZpZWxkc1RvUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0v
TUlNRVR5cGVSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplU3VwcG9y
dGVkTm9uSW1hZ2VNaW1lVHlwZXMpOgorCiAyMDA5LTA1LTE3ICBHZW9yZ2UgU3RhaWtvcyAgPGdl
b3JnZS5zdGFpa29zQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQgLSBi
dWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCShyZXZpc2lvbiA0MzY4
MSkKKysrIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0zMTUsMTQgKzMxNSwyMiBAQCBQYXNzUmVmUHRyPEhUTUxEb2N1bWVu
dD4gRE9NSW1wbGVtZW50YXRpCiBQYXNzUmVmUHRyPERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlv
bjo6Y3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB0eXBlLCBGcmFtZSogZnJhbWUsIGJvb2wg
aW5WaWV3U291cmNlTW9kZSkKIHsKICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSkgewotICAgICAg
ICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4
bWwiIHx8IHR5cGUgPT0gImltYWdlL3N2Zyt4bWwiIHx8IGlzVGV4dE1JTUVUeXBlKHR5cGUpIHx8
IGlzWE1MTUlNRVR5cGUodHlwZSkpCisgICAgICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiIHx8
IHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfHwgdHlwZSA9PSAiaW1hZ2Uvc3ZnK3ht
bCIgfHwgaXNUZXh0TUlNRVR5cGUodHlwZSkgfHwgaXNYTUxNSU1FVHlwZSh0eXBlKQorI2lmIEVO
QUJMRShYSFRNTE1QKQorICAgICAgICAgICAgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndh
cC54aHRtbCt4bWwiCisjZW5kaWYKKyAgICAgICAgICAgKQogICAgICAgICAgICAgcmV0dXJuIEhU
TUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZShmcmFtZSwgdHlwZSk7CiAgICAgfQogCiAgICAg
Ly8gUGx1Z2lucyBjYW5ub3QgdGFrZSBIVE1MIGFuZCBYSFRNTCBmcm9tIHVzLCBhbmQgd2UgZG9u
J3QgZXZlbiBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHBsdWdpbiBkYXRhYmFzZSBmb3IgdGhvc2Uu
CiAgICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIpCiAgICAgICAgIHJldHVybiBIVE1MRG9jdW1l
bnQ6OmNyZWF0ZShmcmFtZSk7Ci0gICAgaWYgKHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3ht
bCIpCisgICAgaWYgKHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCIKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAgICAgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4
bWwiCisjZW5kaWYKKyAgICAgICAgKQogICAgICAgICByZXR1cm4gRG9jdW1lbnQ6OmNyZWF0ZVhI
VE1MKGZyYW1lKTsKIAogI2lmIEVOQUJMRShXTUwpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0
MzY4MSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw3
ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJr
aXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2aWQgTGV2aW4gKGxldmluQGNocm9taXVtLm9yZykKICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCkBAIC0xNjYsNiArMTY2LDEwIEBACiAjaW5jbHVkZSAiV01MTmFtZXMuaCIKICNl
bmRpZgogCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVu
dC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBAIC0zODcsNiArMzkxLDkgQEAgRG9jdW1lbnQ6
OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogCiAgICAgc3RhdGljIGludCBkb2NJRCA9
IDA7CiAgICAgbV9kb2NJRCA9IGRvY0lEKys7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9z
aG91bGRQcm9jZXNzTm9TY3JpcHRFbGVtZW50ID0gc2V0dGluZ3MoKSAmJiAhc2V0dGluZ3MoKS0+
aXNKYXZhU2NyaXB0RW5hYmxlZCgpOworI2VuZGlmCiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92
ZWRMYXN0UmVmKCkKQEAgLTQ0MTksNCArNDQyNiwxNCBAQCB2b2lkIERvY3VtZW50OjpkaXNwbGF5
QnVmZmVyTW9kaWZpZWRCeUVuCiAgICAgICAgIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5kaXNwbGF5
QnVmZmVyKGJ1ZmZlciwgbGVuKTsKIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorYm9vbCBEb2N1
bWVudDo6aXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdAoreworICAgIC8vIEFzIHBlciBzZWN0aW9u
IDcuMiBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwgYSBjb25mb3JtaW5n
IHVzZXIgYWdlbnQKKyAgICAvLyBNVVNUIGFjY2VwdCBYSFRNTE1QIGRvY3VtZW50IGlkZW50aWZp
ZWQgYXMgImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwreG1sIgorICAgIC8vIGFuZCBTSE9VTEQg
YWNjZXB0IGl0IGlkZW50aWZpZWQgYXMgImFwcGxpY2F0aW9uL3hodG1sK3htbCIKKyAgICByZXR1
cm4gZnJhbWUoKS0+bG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSA9PSAiYXBwbGljYXRpb24v
dm5kLndhcC54aHRtbCt4bWwiIHx8IGZyYW1lKCktPmxvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBl
KCkgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCI7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA0MzY4MSkKKysrIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMTcs
NiArMzE3LDExIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV01MKQogICAgIHZpcnR1YWwgYm9vbCBp
c1dNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgorI2lmIEVOQUJM
RShYSFRNTE1QKQorICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdDsgCisgICAgYm9v
bCBzaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQ
cm9jZXNzTm9TY3JpcHRFbGVtZW50OyB9CisgICAgdm9pZCBzZXRTaG91bGRQcm9jZXNzTm9zY3Jp
cHRFbGVtZW50KGJvb2wgc2hvdWxkRG8pIHsgbV9zaG91bGRQcm9jZXNzTm9TY3JpcHRFbGVtZW50
ID0gc2hvdWxkRG87IH0KKyNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNl
bGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNlbGVjdG9yOyB9CkBAIC05NDYsNiArOTUx
LDEwIEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9jb250ZW50TGFuZ3VhZ2U7CiAKKyNpZiBF
TkFCTEUoWEhUTUxNUCkKKyAgICBib29sIG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0RWxlbWVudDsK
KyNlbmRpZgorCiBwdWJsaWM6CiAgICAgYm9vbCBpblBhZ2VDYWNoZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5QYWdlQ2FjaGU7IH0KICAgICB2b2lkIHNldEluUGFnZUNhY2hlKGJvb2wgZmxhZyk7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkocmV2aXNpb24gNDM2ODEpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTI2Miw3ICsxMjYzLDcgQEAgdm9pZCBOb2RlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCkK
ICAgICAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJl
cigpOwogICAgIGlmIChwYXJlbnRSZW5kZXJlciAmJiBwYXJlbnRSZW5kZXJlci0+Y2FuSGF2ZUNo
aWxkcmVuKCkKLSNpZiBFTkFCTEUoU1ZHKQorI2lmIEVOQUJMRShTVkcpIHx8IEVOQUJMRShYSFRN
TE1QKQogICAgICAgICAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGhpcykK
ICNlbmRpZgogICAgICAgICApIHsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDQzNjgxKQorKysgV2ViQ29yZS9kb20v
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC00MjUsOSArNDI2LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsUmVtb3ZlKCk7CiAgICAgdm9pZCBjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHls
ZUZvclJlbmRlcmVyKCk7CisjZWxzZQogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
Rm9yUmVuZGVyZXIoKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKik7Ci0jaWYgRU5BQkxFKFNWRykKKyNpZiBFTkFCTEUoU1ZHKSB8fCBFTkFC
TEUoWEhUTUxNUCkKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihO
b2RlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAgICAgdmlydHVhbCBSZW5kZXJP
YmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKSW5kZXg6
IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hN
TFRva2VuaXplci5oCShyZXZpc2lvbiA0MzY4MSkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC03Miw2ICs3MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBz
ZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNY
SFRNTDsgfQogICAgICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNYSFRNTERvY3VtZW50OyB9CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIHZvaWQgc2V0
SXNYSFRNTE1QRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBp
c1hIVE1MOyB9CisgICAgICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2lzWEhUTUxNUERvY3VtZW50OyB9CisjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAgICAg
ICBib29sIGlzV01MRG9jdW1lbnQoKSBjb25zdDsKICNlbmRpZgpAQCAtMTQ5LDYgKzE1NCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07CiAgICAgICAgIGJvb2wg
bV9zYXdGaXJzdEVsZW1lbnQ7CiAgICAgICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1lbnQ7CisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgICAgIGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVudDsKKyAgICAg
ICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbjsKKyNlbmRpZgogCiAgICAgICAgIGJvb2wg
bV9wYXJzZXJQYXVzZWQ7CiAgICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OwpJbmRleDog
V2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHJldmlzaW9uIDQzNjgxKQorKysgV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNyArNSw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYzLDYgKzYz
LDExIEBACiAjaW5jbHVkZSA8bGlieHNsdC94c2x0Lmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShY
SFRNTE1QKQorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVt
ZW50LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTI2LDYgKzUzMSwxMCBAQCBYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1
bWVudCogX2RvCiAgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKICAgICAsIG1fc2F3Rmly
c3RFbGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQorICAgICwgbV9o
YXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAsIG1fcGFyc2VyUGF1c2Vk
KGZhbHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQogICAgICwgbV9maW5pc2hD
YWxsZWQoZmFsc2UpCkBAIC01NDksNiArNTU4LDEwIEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5p
emVyKERvY3VtZW50RnJhZ20KICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQogICAgICwg
bV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisg
ICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgogICAgICwgbV9wYXJz
ZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCiAgICAgLCBt
X2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTcwNCw4ICs3MTcsMTMgQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ym9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0
RWxlbWVudCA9IHRydWU7CisjaWYgRU5BQkxFKFhIVE1MTVApIAorICAgIC8vIGNoZWNrIGlmIHRo
ZSBET0NUWVBFIERlY2xhcmF0aW9uIG9mIFhIVE1MTVAgZG9jdW1lbnQgZXhpc3RzCisgICAgaWYg
KCFtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiAmJiBtX2RvYy0+aXNYSFRNTE1QRG9jdW1lbnQoKSkg
eworICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4i
LCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgogCiAgICAgZXhpdFRleHQoKTsKIApAQCAtNzIwLDYgKzczOCwyNyBAQCB2b2lkIFhN
TFRva2VuaXplcjo6c3RhcnRFbGVtZW50TnMoY29uc3QgCiAgICAgICAgICAgICB1cmkgPSBtX2Rl
ZmF1bHROYW1lc3BhY2VVUkk7CiAgICAgfQogCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgaWYg
KCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7CisgICAgICAgIC8v
IEFzIHBlciB0aGUgc2VjdGlvbiA3LjEgb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEwMjAt
QS5wZGYsIAorICAgICAgICAvLyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJvb3QgZWxl
bWVudCBNVVNUIGJlICdodG1sJyBhbmQgCisgICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0
aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJyAKKyAgICAgICAg
Ly8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKKyAgICAgICAgaWYgKGxv
Y2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAg
IGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1sJyBhcyBy
b290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodXJpLmlzTnVsbCgpKSB7CisgICAg
ICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNl
VVJJOyAKKyAgICAgICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAgICAgICAg
fQorICAgIH0KKyNlbmRpZgorCisgICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nhd0ZpcnN0
RWxlbWVudDsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisKICAgICBRdWFsaWZpZWRO
YW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBu
ZXdFbGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUpOwogICAgIGlmICgh
bmV3RWxlbWVudCkgewpAQCAtNzk4LDIyICs4MzcsMjggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmVu
ZEVsZW1lbnROcygpCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTY3JpcHQpOwogICAgIG1fcmVxdWVz
dGluZ1NjcmlwdCA9IHRydWU7CiAKLSAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1l
bnQtPnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHko
KSkgewotICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKLSAgICAgICAgU3RyaW5n
IHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAgICAg
IGlmICgobV9wZW5kaW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0
KHNjcmlwdEhyZWYsIHNjcmlwdENoYXJzZXQpKSkgewotICAgICAgICAgICAgbV9zY3JpcHRFbGVt
ZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRo
aXMpOwotCi0gICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlw
dCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAgICAgICBp
ZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAg
ICAgICB9IGVsc2UgCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlw
dFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCks
IG1fc2NyaXB0U3RhcnRMaW5lKSk7Ci0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAoIXNj
cmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICAgICAgbV9kb2Mt
PnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisgICAgZWxzZSAKKyNlbmRp
ZgorICAgIHsKKyAgICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3Vy
Y2VBdHRyaWJ1dGVWYWx1ZSgpOworICAgICAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKKyAgICAgICAgICAgIFN0
cmluZyBzY3JpcHRDaGFyc2V0ID0gc2NyaXB0RWxlbWVudC0+c2NyaXB0Q2hhcnNldCgpOworICAg
ICAgICAgICAgaWYgKChtX3BlbmRpbmdTY3JpcHQgPSBtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVl
c3RTY3JpcHQoc2NyaXB0SHJlZiwgc2NyaXB0Q2hhcnNldCkpKSB7CisgICAgICAgICAgICAgICAg
bV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdTY3Jp
cHQtPmFkZENsaWVudCh0aGlzKTsKKworICAgICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1Njcmlw
dCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0
ZWQgaXQKKyAgICAgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAg
ICAgICAgICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAg
ICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1f
dmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShz
Y3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFy
dExpbmUpKTsKKyAgICB9CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgc2V0
Q3VycmVudE5vZGUocGFyZW50LmdldCgpKTsKIH0KQEAgLTk0Miw2ICs5ODcsOSBAQCB2b2lkIFhN
TFRva2VuaXplcjo6c3RhcnREb2N1bWVudChjb25zdCB4CiB2b2lkIFhNTFRva2VuaXplcjo6ZW5k
RG9jdW1lbnQoKQogewogICAgIGV4aXRUZXh0KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAg
bV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIFhNTFRv
a2VuaXplcjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgeG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hh
ciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciogc3lzdGVtSUQpCkBAIC05NTUsOCArMTAwMywx
MCBAQCB2b2lkIFhNTFRva2VuaXplcjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgCiAgICAgfQogICAg
IAogICAgIGlmIChtX2RvYykgewotI2lmIEVOQUJMRShXTUwpCisjaWYgRU5BQkxFKFdNTCkgfHwg
RU5BQkxFKFhIVE1MTVApCiAgICAgICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFs
SUQpOworI2VuZGlmCisjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgaWYgKGlzV01MRG9jdW1lbnQo
KQogICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4i
CiAgICAgICAgICAgICAmJiBleHRJZCAhPSAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiIK
QEAgLTk2NCw4ICsxMDE0LDMxIEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbnRlcm5hbFN1YnNldChj
b25zdCAKICAgICAgICAgICAgICYmIGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjAv
L0VOIikKICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBEVEQgUHVibGlj
IElEIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAgICAgU3RyaW5nIGR0ZE5hbWUgPSB0b1N0cmluZyhuYW1lKTsKKyAgICAg
ICAgaWYgKGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIgor
ICAgICAgICAgICAgfHwgZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEu
MS8vRU4iKSB7CisgICAgICAgICAgICBpZiAoZHRkTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcu
bG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkludmFs
aWQgRE9DVFlQRSBkZWNsYXJhdGlvbiwgZXhwZWN0ZWQgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4i
LCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9IAorCisgICAgICAgICAgICBpZiAobV9kb2MtPmlzWEhUTUxNUERvY3Vt
ZW50KCkpCisgICAgICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOwor
CisgICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0K
KyNlbmRpZgogCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIG1fZG9jLT5hZGRDaGlsZChE
b2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgZHRkTmFtZSwgZXh0SWQsIHRvU3RyaW5nKHN5c3Rl
bUlEKSkpOworI2VsaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgbV9kb2MtPmFkZENoaWxkKERvY3Vt
ZW50VHlwZTo6Y3JlYXRlKG1fZG9jLCB0b1N0cmluZyhuYW1lKSwgZXh0SWQsIHRvU3RyaW5nKHN5
c3RlbUlEKSkpOworI2Vsc2UKICAgICAgICAgbV9kb2MtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6
Y3JlYXRlKG1fZG9jLCB0b1N0cmluZyhuYW1lKSwgdG9TdHJpbmcoZXh0ZXJuYWxJRCksIHRvU3Ry
aW5nKHN5c3RlbUlEKSkpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC0xMTA4LDYgKzExODEsOSBA
QCBzdGF0aWMgeG1sRW50aXR5UHRyIGdldEVudGl0eUhhbmRsZXIodm9pCiAKICAgICBlbnQgPSB4
bWxHZXREb2NFbnRpdHkoY3R4dC0+bXlEb2MsIG5hbWUpOwogICAgIGlmICghZW50ICYmIChnZXRU
b2tlbml6ZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVudCgpCisjaWYgRU5BQkxFKFhIVE1MTVAp
CisgICAgICAgICAgICAgICAgIHx8IGdldFRva2VuaXplcihjbG9zdXJlKS0+aXNYSFRNTE1QRG9j
dW1lbnQoKQorI2VuZGlmCiAjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgICAgICAgICAgfHwgZ2V0
VG9rZW5pemVyKGNsb3N1cmUpLT5pc1dNTERvY3VtZW50KCkKICNlbmRpZgpAQCAtMTE0OSw3ICsx
MjI1LDEwIEBAIHN0YXRpYyB2b2lkIGV4dGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiAKICAgICAg
ICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikKICAgICAg
ICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9F
TiIpCiAgICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0
aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICItLy9XQVBG
T1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCisjaWYgIUVOQUJMRShYSFRNTE1QKQor
ICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8v
RU4iKQorI2VuZGlmCisgICAgICAgKQogICAgICAgICBnZXRUb2tlbml6ZXIoY2xvc3VyZSktPnNl
dElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGll
cyBvciBub3QuCiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAJKHJldmlzaW9uIDQzNjgx
KQorKysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJr
aXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01
Niw2ICs1NiwxMSBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg1LDYgKzkwLDEwIEBAIFhNTFRva2Vu
aXplcjo6WE1MVG9rZW5pemVyKERvY3VtZW50KiBfZG8KICAgICAsIG1fc2F3WFNMVHJhbnNmb3Jt
KGZhbHNlKQogICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxE
b2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9j
dW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRp
ZgogICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQo
ZmFsc2UpCiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTExMCw2ICsxMTksMTAgQEAg
WE1MVG9rZW5pemVyOjpYTUxUb2tlbml6ZXIoRG9jdW1lbnRGcmFnbQogICAgICwgbV9zYXdYU0xU
cmFuc2Zvcm0oZmFsc2UpCiAgICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKICAgICAsIG1f
aXNYSFRNTERvY3VtZW50KGZhbHNlKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICwgbV9pc1hI
VE1MTVBEb2N1bWVudChmYWxzZSkKKyAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNl
KQorI2VuZGlmCiAgICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGlu
Z1NjcmlwdChmYWxzZSkKICAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQpAQCAtNDE5LDYgKzQz
MiwxMiBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2UoKQogICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpTdGFydEVsZW1lbnQ6IHsK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIGlmIChtX2RvYy0+aXNYSFRNTE1QRG9j
dW1lbnQoKSAmJiAhbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgICAgICBo
YW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyNlbmRpZiAKICAgICAgICAgICAgIHBhcnNlU3RhcnRFbGVtZW50KCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQzLDEyICs0NjIsMTggQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OnBhcnNlKCkKICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQ6IHsKICAgICAg
ICAgICAgIC8vcURlYnVnKCk8PCItLS0tLS0tLS0tLS0tIERURCI7CiAgICAgICAgICAgICBwYXJz
ZUR0ZCgpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24gPSB0cnVlOworI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVudGl0eVJlZmVyZW5jZTogewogICAgICAg
ICAgICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0tLS0gRU5USVRZID0gIjw8bV9zdHJlYW0ubmFtZSgp
LnRvU3RyaW5nKCkKICAgICAgICAgICAgIC8vICAgICAgICA8PCIsIHQgPSAiPDxtX3N0cmVhbS50
ZXh0KCkudG9TdHJpbmcoKTsKICAgICAgICAgICAgIGlmIChpc1hIVE1MRG9jdW1lbnQoKQorI2lm
IEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgICAgIHx8IGlzWEhUTUxNUERvY3VtZW50KCkK
KyNlbmRpZgogI2lmIEVOQUJMRShXTUwpCiAgICAgICAgICAgICAgICAgfHwgaXNXTUxEb2N1bWVu
dCgpCiAjZW5kaWYKQEAgLTUwOCw5ICs1MzMsNiBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VT
dGFydEVsZW1lbnQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBpc0ZpcnN0
RWxlbWVudCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRy
dWU7Ci0KICAgICBleGl0VGV4dCgpOwogCiAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IG1fc3RyZWFt
Lm5hbWUoKTsKQEAgLTUyOSw2ICs1NTEsMjggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlU3Rh
cnRFbGVtZW50KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmIEVOQUJMRShYSFRNTE1Q
KQorICAgIGlmICghbV9zYXdGaXJzdEVsZW1lbnQgJiYgaXNYSFRNTE1QRG9jdW1lbnQoKSkgewor
ICAgICAgICAvLyBBcyBwZXIgNy4xIHNlY3Rpb24gb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAw
NjEwMjAtQS5wZGYsIAorICAgICAgICAvLyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJv
b3QgZWxlbWVudCBNVVNUIGJlICdodG1sJyBhbmQgCisgICAgICAgIC8vIGVuc3VyZSB0aGUgbmFt
ZSBvZiB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJyAKKyAg
ICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKKyAgICAgICAg
aWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAg
ICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1s
JyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0gCisKKyAgICAgICAgaWYgKHVyaS5pc051bGwoKSkg
eworICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5h
bWVzcGFjZVVSSTsgCisgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Cisg
ICAgICAgICAgICBtX3N0cmVhbS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9uKFFYbWxTdHJl
YW1OYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXgsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VV
UkkpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgYm9vbCBpc0ZpcnN0RWxlbWVu
dCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyhu
ZXdFbGVtZW50LmdldCgpLCBtX3N0cmVhbS5uYW1lc3BhY2VEZWNsYXJhdGlvbnMoKSwgZWMpOwog
ICAgIGlmIChlYykgewpAQCAtNTgzLDIyICs2MjcsMjggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBh
cnNlRW5kRWxlbWVudCgpCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTY3JpcHQpOwogICAgIG1fcmVx
dWVzdGluZ1NjcmlwdCA9IHRydWU7CiAKLSAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVs
ZW1lbnQtPnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1w
dHkoKSkgewotICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKLSAgICAgICAgU3Ry
aW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAg
ICAgIGlmICgobV9wZW5kaW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2Ny
aXB0KHNjcmlwdEhyZWYsIHNjcmlwdENoYXJzZXQpKSkgewotICAgICAgICAgICAgbV9zY3JpcHRF
bGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50
KHRoaXMpOwotCi0gICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNj
cmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAgICAg
ICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwot
ICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotICAgIH0g
ZWxzZQotICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNj
cmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJs
KCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7Ci0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAo
IXNjcmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICAgICAgbV9k
b2MtPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisgICAgZWxzZQorI2Vu
ZGlmCisgICAgeworICAgICAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNv
dXJjZUF0dHJpYnV0ZVZhbHVlKCk7CisgICAgICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRlIAorICAgICAgICAgICAg
U3RyaW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Cisg
ICAgICAgICAgICBpZiAoKG1fcGVuZGluZ1NjcmlwdCA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVx
dWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKKyAgICAgICAgICAgICAg
ICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAgICAgIG1fcGVuZGluZ1Nj
cmlwdC0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2Ny
aXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCByZWYoKSBleGVj
dXRlZCBpdAorICAgICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgICAg
ICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAg
ICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bV92aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2Rl
KHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgbV9kb2MtPnVybCgpLCBtX3NjcmlwdFN0
YXJ0TGluZSkpOworICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBz
ZXRDdXJyZW50Tm9kZShwYXJlbnQuZ2V0KCkpOwogfQpAQCAtNjYyLDYgKzcxMiw5IEBAIHZvaWQg
WE1MVG9rZW5pemVyOjpwYXJzZUNvbW1lbnQoKQogCiB2b2lkIFhNTFRva2VuaXplcjo6ZW5kRG9j
dW1lbnQoKQogeworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIG1faGFzRG9jVHlwZURlY2xhcmF0
aW9uID0gZmFsc2U7CisjZW5kaWYKIH0KIAogYm9vbCBYTUxUb2tlbml6ZXI6Omhhc0Vycm9yKCkg
Y29uc3QKQEAgLTc1NSw5ICs4MDgsMjUgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRHRkKCkK
ICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1M
IEJhc2ljIDEuMC8vRU4iKSkKICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmco
Ii0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VOIikpCiAgICAgICAgIHx8
IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBN
YXRoTUwgMi4wIHBsdXMgU1ZHIDEuMS8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFM
YXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkpIHsK
KyNpZiAhRU5BQkxFKFhIVE1MTVApCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3Ry
aW5nKCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCisjZW5kaWYKKyAg
ICAgICApCiAgICAgICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYg
d2UgcmVwbGFjZSBlbnRpdGllcyBvciBub3QuCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgZWxz
ZSBpZiAoKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwg
TW9iaWxlIDEuMS8vRU4iKSkKKyAgICAgICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0
cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgeworICAgICAg
ICBpZiAoQXRvbWljU3RyaW5nKG5hbWUpICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUo
KSkgeworICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVj
bGFyYXRpb24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigp
LCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gCisKKyAg
ICAgICAgaWYgKG1fZG9jLT5pc1hIVE1MTVBEb2N1bWVudCgpKSAvLyBjaGVjayBpZiB0aGUgTUlN
RSB0eXBlIGlzIGNvcnJlY3Qgd2l0aCB0aGlzIG1ldGhvZAorICAgICAgICAgICAgc2V0SXNYSFRN
TE1QRG9jdW1lbnQodHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldElzWEhUTUxE
b2N1bWVudCh0cnVlKTsKICAgICB9CisjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAgIGVsc2Ug
aWYgKG1fZG9jLT5pc1dNTERvY3VtZW50KCkKICAgICAgICAgICAgICAmJiBwdWJsaWNJZCAhPSBR
TGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOIikKQEAgLTc3Miw0ICs4
NDEsMyBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VEdGQoKQogfQogfQogCi0KSW5kZXg6IFdl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vbWFrZV9u
YW1lcy5wbAkocmV2aXNpb24gNDM2ODEpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCSh3
b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogCiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdo
dCAoQykgMjAwOSwgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorIyBD
b3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODMxLDcgKzgzMiw3IEBAIHN1YiB1c2VzRGVmYXVsdEpTV3JhcHBlcgogICAgIG15ICRu
YW1lID0gc2hpZnQ7CiAKICAgICAjIEEgdGFnIHJldXNlcyB0aGUgZGVmYXVsdCB3cmFwcGVyIGlm
IGl0cyBKU0ludGVyZmFjZU5hbWUgbWF0Y2hlcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgRWxlbWVu
dC4KLSAgICByZXR1cm4gJHRhZ3N7JG5hbWV9eydKU0ludGVyZmFjZU5hbWUnfSBlcSAkcGFyYW1l
dGVyc3sibmFtZXNwYWNlIn0gLiAiRWxlbWVudCI7CisgICAgcmV0dXJuICR0YWdzeyRuYW1lfXsn
SlNJbnRlcmZhY2VOYW1lJ30gZXEgJHBhcmFtZXRlcnN7Im5hbWVzcGFjZSJ9IC4gIkVsZW1lbnQi
IHx8ICR0YWdzeyRuYW1lfXsnSlNJbnRlcmZhY2VOYW1lJ30gZXEgIkhUTUxOb1NjcmlwdEVsZW1l
bnQiOwogfQogCiBzdWIgcHJpbnRXcmFwcGVyRnVuY3Rpb25zCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAJKHJldmlzaW9uIDQzNjgxKQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05ODAsMTEgKzk4MSwx
MyBAQCBib29sIEhUTUxFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuCiAgICAgCiBib29s
IEhUTUxFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkKIHsKKyNp
ZiAhRU5BQkxFKFhIVE1MTVApCiAgICAgaWYgKGhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykpIHsK
ICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAg
ICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIFN0eWxl
ZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOwogfQogICAgIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTm9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MTm9TY3JpcHRFbGVtZW50LmgiCisK
KyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisj
aW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKKworSFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5vU2NyaXB0
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAg
IDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQoreworICAgIEFTU0VSVChoYXNUYWdOYW1lKG5v
c2NyaXB0VGFnKSk7Cit9CisKK0hUTUxOb1NjcmlwdEVsZW1lbnQ6On5IVE1MTm9TY3JpcHRFbGVt
ZW50KCkKK3sKK30KKworYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGVja0RURChjb25zdCBO
b2RlKiBuZXdDaGlsZCkKK3sKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSB8fCBp
bkJsb2NrVGFnTGlzdChuZXdDaGlsZCk7IAorfQorCit2b2lkIEhUTUxOb1NjcmlwdEVsZW1lbnQ6
OmF0dGFjaCgpCit7CisgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOworCisgICAgLy8gSWYgbm8g
bmVlZCB0byBwcm9jZXNzIDxub3NjcmlwdD4sIHdlIGhpZGUgaXQgYnkgc2V0dGluZyBkaXNwbGF5
Om5vbmUgdGVtcG9yYXJpbHkKKyAgICBpZiAoIWRvY3VtZW50KCktPnNob3VsZFByb2Nlc3NOb3Nj
cmlwdEVsZW1lbnQoKSkgeworICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5z
dHlsZSgpKQorICAgICAgICAgICAgcmVuZGVyZXIoKS0+c3R5bGUoKS0+c2V0RGlzcGxheShOT05F
KTsKKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIH0KK30KKwordm9pZCBIVE1M
Tm9TY3JpcHRFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCit7CisgICAg
aWYgKCFkb2N1bWVudCgpLT5zaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KCkgfHwgIXJlbmRl
cmVyKCkgfHwgIXJlbmRlcmVyKCktPnN0eWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IElmIDxub3NjcmlwdD4gbmVlZHMgcHJvY2Vzc2luZywgd2UgbWFrZSBpdCB2aXNpYWJsZSBoZXJl
LCBpbmNsdWRpbmcgaXRzIHZpc2libGUgY2hpbGRyZW4KKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9
PSBOT05FKSB7CisgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORSk7CisKKyAgICAgICAg
Ly8gQ3JlYXRlIHJlbmRlcmVycyBmb3IgaXRzIGNoaWxkcmVuCisgICAgICAgIGlmIChoYXNDaGls
ZE5vZGVzKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbjsg
biA9IG4tPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5y
ZW5kZXJlcigpKQorICAgICAgICAgICAgICAgICAgICBuLT5jcmVhdGVSZW5kZXJlcklmTmVlZGVk
KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgSFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hp
bGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZG9jdW1lbnQoKS0+c2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCgpOworfQorCitQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBIVE1MTm9TY3JpcHRFbGVtZW50OjpzdHlsZUZvclJlbmRlcmVyKCkK
K3sKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1l
bnQodGhpcywgMCwgZmFsc2UpOworfQorCit9CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MTm9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxOb1Nj
cmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRF
bGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSFRNTE5vU2NyaXB0RWxlbWVudF9oCisj
ZGVmaW5lIEhUTUxOb1NjcmlwdEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1M
Tm9TY3JpcHRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBIVE1M
Tm9TY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgfkhUTUxOb1NjcmlwdEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwor
ICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisgICAgdmlydHVhbCBi
b29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0OworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5kZXJlcigpOworICAgIHZpcnR1YWwg
Ym9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyAgcmV0dXJuIHRydWU7IH0KK307
CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJ
KHJldmlzaW9uIDQzNjgxKQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICAgICAgICAgICAgICAoQykgMTk5OSwyMDAxIExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgICAgICAgICAgICAgIChDKSAyMDAwLDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKIAogICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
OTA5LDcgKzkxMCw5IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6Z2V0Tm9kZShUb2sK
ICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChub2JyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhU
TUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25NYXAu
c2V0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bm9lbWJlZENy
ZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KG5vZnJhbWVzVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayk7
CisjaWYgIUVOQUJMRShYSFRNTE1QKQogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KG5vc2NyaXB0
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JD
aGVjayk7CisjZW5kaWYKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChvbFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICZIVE1MUGFyc2VyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgICAg
IGdGdW5jdGlvbk1hcC5zZXQocFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpw
Q2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQocGxhaW50
ZXh0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OnBDbG9zZXJDcmVhdGVFcnJv
ckNoZWNrKTsKQEAgLTEwMTUsMTEgKzEwMTgsMTMgQEAgYm9vbCBIVE1MUGFyc2VyOjppc0lubGlu
ZShOb2RlKiBub2RlKSBjbwogICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKG5vZnJhbWVzVGFn
KSB8fCBlLT5oYXNMb2NhbE5hbWUobm9sYXllclRhZykgfHwKICAgICAgICAgICAgIGUtPmhhc0xv
Y2FsTmFtZShub2VtYmVkVGFnKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworI2lmICFFTkFC
TEUoWEhUTUxNUCkKICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykgJiYg
IW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fZG9jdW1lbnQtPnNldHRpbmdzKCk7CiAgICAgICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0
dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogICAgIAogICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxUYWdOYW1lcy5pbgkocmV2aXNpb24gNDM2ODEpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFRhZ05hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3MywxMSBAQCBub2JyIGludGVy
ZmFjZU5hbWU9SFRNTEVsZW1lbnQKIG5vZW1iZWQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAog
bm9mcmFtZXMgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogbm9sYXllciBpbnRlcmZhY2VOYW1l
PUhUTUxFbGVtZW50CisjaWYgRU5BQkxFX1hIVE1MTVAKK25vc2NyaXB0IGludGVyZmFjZU5hbWU9
SFRNTE5vU2NyaXB0RWxlbWVudAorI2Vsc2UKIG5vc2NyaXB0IGludGVyZmFjZU5hbWU9SFRNTEVs
ZW1lbnQKKyNlbmRpZgogb2JqZWN0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKIG9s
IGludGVyZmFjZU5hbWU9SFRNTE9MaXN0RWxlbWVudAogb3B0Z3JvdXAgaW50ZXJmYWNlTmFtZT1I
VE1MT3B0R3JvdXBFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDQzNjgxKQorKysgV2ViQ29yZS9odG1sL0hUTUxU
b2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03LDYgKzcsNyBAQAogICAgICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEBueXBvcC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0Nyw2ICs0NDgsMTAgQEAgSFRNTFRva2VuaXplcjo6
U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gUGFyc2UgbV9zY3JpcHRDb2RlIGNvbnRhaW5pbmcgPHNjcmlwdD4gaW5mbwogICAgICAgICAg
ICAgZG9TY3JpcHRFeGVjID0gbV9zY3JpcHROb2RlLT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0
KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICBpZiAoIWRvU2NyaXB0RXhlYykK
KyAgICAgICAgICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0
cnVlKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9zY3JpcHROb2RlID0gMDsKICAgICAgICAgfQog
ICAgIH0KQEAgLTE5OTEsNiArMTk5NiwxMCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6Om5vdGlmeUZp
bmlzaGVkKENhY2hlCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PEhUTUxTY3JpcHRFbGVtZW50Kj4obi5nZXQoKSktPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQo
KSkKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9uKHNvdXJjZUNvZGUs
IG1fc3RhdGUpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwor
I2VuZGlmCiAgICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkRXZl
bnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAkocmV2aXNpb24gNDM2ODEpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIyMSw3ICsyMjEsMTIgQEAgc3RydWN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uIHsKICAgICAgICAg
QVNTRVJUKHRoaXMtPmZvcm1TdGF0ZSk7CiAgICAgfQogfTsKLQorIAorI2lmIEVOQUJMRShYSFRN
TE1QKQorc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdEFjY2VwdEhlYWRlcltdID0gImFwcGxpY2F0
aW9uL3htbCxhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCxhcHBsaWNhdGlvbi94aHRtbCt4
bWw7cHJvZmlsZT0naHR0cDovL3d3dy53YXBmb3J1bS5vcmcveGh0bWwnLHRleHQvaHRtbDtxPTAu
OSx0ZXh0L3BsYWluO3E9MC44LGltYWdlL3BuZywqLyo7cT0wLjUiOworI2Vsc2UKK3N0YXRpYyBj
b25zdCBjaGFyIGRlZmF1bHRBY2NlcHRIZWFkZXJbXSA9ICJhcHBsaWNhdGlvbi94bWwsYXBwbGlj
YXRpb24veGh0bWwreG1sLHRleHQvaHRtbDtxPTAuOSx0ZXh0L3BsYWluO3E9MC44LGltYWdlL3Bu
ZywqLyo7cT0wLjUiOworI2VuZGlmCiBzdGF0aWMgZG91YmxlIHN0b3JlZFRpbWVPZkxhc3RDb21w
bGV0ZWRMb2FkOwogc3RhdGljIEZyYW1lTG9hZGVyOjpMb2NhbExvYWRQb2xpY3kgbG9jYWxMb2Fk
UG9saWN5ID0gRnJhbWVMb2FkZXI6OkFsbG93TG9jYWxMb2Fkc0ZvckxvY2FsT25seTsKIApAQCAt
MzU3Myw3ICszNTc4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVl
cwogICAgIH0KICAgICAKICAgICBpZiAobWFpblJlc291cmNlKQotICAgICAgICByZXF1ZXN0LnNl
dEhUVFBBY2NlcHQoImFwcGxpY2F0aW9uL3htbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsdGV4dC9o
dG1sO3E9MC45LHRleHQvcGxhaW47cT0wLjgsaW1hZ2UvcG5nLCovKjtxPTAuNSIpOworICAgICAg
ICByZXF1ZXN0LnNldEhUVFBBY2NlcHQoZGVmYXVsdEFjY2VwdEhlYWRlcik7CiAKICAgICAvLyBN
YWtlIHN1cmUgd2Ugc2VuZCB0aGUgT3JpZ2luIGhlYWRlci4KICAgICBhZGRIVFRQT3JpZ2luSWZO
ZWVkZWQocmVxdWVzdCwgU3RyaW5nKCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlw
ZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwCShyZXZpc2lvbiA0MzY4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVS
ZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTYsNiAr
MTk2LDkgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZE5vbkltYWdlTQogICAgICAg
ICAidGV4dC8iLAogICAgICAgICAiYXBwbGljYXRpb24veG1sIiwKICAgICAgICAgImFwcGxpY2F0
aW9uL3hodG1sK3htbCIsCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICJhcHBsaWNhdGlv
bi92bmQud2FwLnhodG1sK3htbCIsCisjZW5kaWYKICAgICAgICAgImFwcGxpY2F0aW9uL3Jzcyt4
bWwiLAogICAgICAgICAiYXBwbGljYXRpb24vYXRvbSt4bWwiLAogI2lmIEVOQUJMRShTVkcpCg==
</data>
<flag name="review"
          id="15352"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30461</attachid>
            <date>2009-05-19 00:17:59 -0700</date>
            <delta_ts>2009-05-19 20:26:48 -0700</delta_ts>
            <desc>Latest Updated patch for configure file changes</desc>
            <filename>applyXHTMLMPConfigs.patch</filename>
            <type>text/plain</type>
            <size>3767</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mzg1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDUtMTkgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgWEhUTUxNUCBzdXBwb3J0IHRvIFdlYmtpdAorICAgICAgICBVcGRhdGUgdGhl
IGNvbmZpZ3VyZSBmaWxlcyBmb3IgYnVpbGRpbmcgWEhUTUxNUC1lbmFibGVkIFdlYktpdCBvbiBk
aWZmZXJlbnQgcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNDUyCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisKIDIwMDktMDUtMTggIERhdmlkIEtpbHplciAg
PGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBUaWdlciBidWlsZCBmaXggZm9yIHI0Mzg1
MApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTk3Miw2ICs5NzIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvaHRtbC9IVE1MUXVvdGVFbGVtZW50LmggXAogCVdlYkNvcmUvaHRtbC9IVE1MU2Ny
aXB0RWxlbWVudC5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oIFwKKwlX
ZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAgXAorCVdlYkNvcmUvaHRtbC9IVE1M
Tm9TY3JpcHRFbGVtZW50LmggXAogCVdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAg
XAogCVdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oIFwKIAlXZWJDb3JlL2h0bWwvSFRN
TFN0eWxlRWxlbWVudC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvV2Vi
Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBDT05GSUcoUVRESVJf
YnVpbGQpIHsKICMhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hCTD0uKTogREVGSU5FUyArPSBF
TkFCTEVfWEJMPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9XTUw9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XT1JLRVJTPS4pOiBERUZJ
TkVTICs9IEVOQUJMRV9XT1JLRVJTPTEKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEhUTUxN
UD0uKTogREVGSU5FUyArPSBFTkFCTEVfWEhUTUxNUD0wCiAKICMgU1ZHIHN1cHBvcnQKICFjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTApIHsKQEAgLTc2NSw2ICs3NjYsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBodG1sL0hUTUxQcmVFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MUXVvdGVF
bGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAgXAorICAgIGh0bWwv
SFRNTE5vU2NyaXB0RWxlbWVudC5jcHAgXAogICAgIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
IFwKICAgICBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxUYWJsZUNh
cHRpb25FbGVtZW50LmNwcCBcCkBAIC0xNTQxLDYgKzE1NDMsMTAgQEAgY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX1dNTD0xKSB7CiAgICAgYWRkRXh0cmFDb21waWxlcldpdGhIZWFkZXIod21sbmFt
ZXNfYikKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hIVE1MTVA9MSkgeworICAgIEZF
QVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9YSFRNTE1QPTEKK30KKwogY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJ
UFQgKz0gRU5BQkxFX1NWRz0xCiAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0MzgxOSkK
KysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsNiAr
NjA1LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAg
ICBodG1sL0hUTUxQcmVFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxRdW90ZUVsZW1lbnQu
Y3BwCiAgICAgICAgIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCisgICAgICAgIGh0bWwvSFRN
TE5vU2NyaXB0RWxlbWVudC5jcHAKICAgICAgICAgaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAK
ICAgICAgICAgaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50LmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyNDgyLDYgKzEyNDgyLDIyIEBACiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxodG1sXEhUTUxTY3JpcHRFbGVtZW50LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQorICAgICAgICAgICAgPEZpbGUNCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxo
dG1sXEhUTUxOb1NjcmlwdEVsZW1lbnQuY3BwIg0KKyAgICAgICAgICAgICAgICA+DQorICAgICAg
ICAgICAgICAgIDxGaWxlQ29uZmlndXJhdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgTmFtZT0i
UmVsZWFzZV9QR098V2luMzIiDQorICAgICAgICAgICAgICAgICAgICA+DQorICAgICAgICAgICAg
ICAgICAgICA8VG9vbA0KKyAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxl
clRvb2wiDQorICAgICAgICAgICAgICAgICAgICAgICAgV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9u
PSJ0cnVlIg0KKyAgICAgICAgICAgICAgICAgICAgLz4NCisgICAgICAgICAgICAgICAgPC9GaWxl
Q29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICA8L0ZpbGU+DQorICAgICAgICAgICAgPEZpbGUN
CisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxOb1NjcmlwdEVsZW1l
bnQuaCINCisgICAgICAgICAgICAgICAgPg0KKyAgICAgICAgICAgIDwvRmlsZT4NCiAJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTFNlbGVjdEVsZW1lbnQuY3BwIg0KIAkJ
CQk+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30462</attachid>
            <date>2009-05-19 00:19:53 -0700</date>
            <delta_ts>2009-05-19 20:26:56 -0700</delta_ts>
            <desc>Latest updated patch for ScriptElement change</desc>
            <filename>applyXHTMLMPScriptElmenet.patch</filename>
            <type>text/plain</type>
            <size>2353</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mzg1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDUtMTkgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDaGFuZ2UgU2NyaXB0RWxlbWVudCB0byBzdXBwb3J0IFhIVE1MTVAgaW4gYSBiZXR0
ZXIgd2F5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzQ1MgorCisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hU
TUxTY3JpcHRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6OnNob3VsZEV4ZWN1dGVBc0phdmFTY3Jp
cHQpOgorCiAyMDA5LTA1LTE4ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAK
ICAgICAgICAgVGlnZXIgYnVpbGQgZml4IGZvciByNDM4NTAKSW5kZXg6IFdlYkNvcmUvZG9tL1Nj
cmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgJ
KHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICAvLyBBIGNoYXJzZXQgZm9yIGxv
YWRpbmcgdGhlIHNjcmlwdCAobWF5IGJlIG92ZXJyaWRkZW4gYnkgSFRUUCBoZWFkZXJzIG9yIGEg
Qk9NKS4KICAgICB2aXJ0dWFsIFN0cmluZyBzY3JpcHRDaGFyc2V0KCkgY29uc3QgPSAwOwogCisg
ICAgdmlydHVhbCBib29sIHNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSBjb25zdCA9IDA7CisK
IHByb3RlY3RlZDoKICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgb3VyIHBhcmVudCBj
bGFzc2VzLgogICAgIHN0YXRpYyB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KFNjcmlwdEVsZW1l
bnREYXRhJiwgY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRF
bGVtZW50LmgJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIEhUTUxT
Y3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKTsKICAgICB+SFRNTFNjcmlwdEVsZW1lbnQoKTsKIAotICAgIGJvb2wgc2hvdWxk
RXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFeGVj
dXRlQXNKYXZhU2NyaXB0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgc2NyaXB0Q29udGVu
dCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTY3JpcHRF
bGVtZW50LmgJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RI
YXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEV4ZWN1
dGVBc0phdmFTY3JpcHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gdGhpczsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaGF2ZUxvYWRlZFJlcXVp
cmVkUmVzb3VyY2VzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30463</attachid>
            <date>2009-05-19 00:22:31 -0700</date>
            <delta_ts>2009-05-19 19:27:35 -0700</delta_ts>
            <desc>Latest updated patch for code changes</desc>
            <filename>applyXHTMLMPImplement.patch</filename>
            <type>text/plain</type>
            <size>40924</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mzg1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMDktMDUtMTkgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBCdWcgMjM0NTI6ICBBZGQgWEhUTUxNUCBzdXBwb3J0IHRvIFdlYktpdC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyCisKKyAgICAg
ICAgWEhUTUxNUCBpcyBhIHN0cmljdCBzdWJzZXQgb2YgWEhUTUwgMS4xLiBJdCBleHRlbmRzIFhI
VE1MIEJhc2ljIGFuZCBhZGQgZW5oYW5jZWQKKyAgICAgICAgZnVuY3Rpb25hbGl0eS4gTW9zdCBv
ZiB0aGUgZnVuY3Rpb25hbGl0aWVzIGhhdmUgYWxyZWFkeSBiZWVuIGltcGxlbWVudGVkIGJ5IFdl
YmtpdC4KKyAgICAgICAgCisgICAgICAgIFRoZSBjaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEp
IEFkZGluZyA8bm9zY3JpcHQ+IHN1cHBvcnQKKyAgICAgICAgMikgRG9jdW1lbnQgY29uZm9ybWFu
Y2UgdmFsaWRhdGlvbgorICAgICAgICAzKSBVc2VyIEFnZW50IGNvbmZvcm1hbmNlIHZhbGlkYXRp
b24KKyAKKyAgICAgICAgcmVmZXIgdG8gdGhlIHNwZWNpZmljYXRpb246IE9NQS1XQVAtWEhUTUxN
UC1WMV8xLTIwMDYxMDIwLUEucGRmCisKKyAgICAgICAgVGVzdHM6IGZhc3QveGh0bWxtcC9jaGVj
ay1kb2N0eXBlLWRlY2xhcmF0aW9uLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1sbXAv
Y2hlY2stcm9vdGVsZW1lbnQueGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveGh0bWxtcC9ub3Nj
cmlwdC1pbi1tdWx0aXNjcmlwdHMueGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveGh0bWxtcC9u
b3NjcmlwdC1uZXN0ZWQueGh0bWwKKyAgICAgICAgICAgICAgIGZhc3QveGh0bWxtcC9ub3Njcmlw
dC54aHRtbAorCisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudCk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aXNYSFRNTE1QRG9jdW1lbnQpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNob3VsZFBy
b2Nlc3NOb3NjcmlwdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFNo
b3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmg6CisgICAgICAgICogZG9tL1hNTFRva2VuaXplci5oOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MVG9rZW5pemVyOjpzZXRJc1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxUb2tlbml6ZXI6OmlzWEhUTUxNUERvY3VtZW50KToKKyAgICAgICAgKiBkb20vWE1M
VG9rZW5pemVyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OlhN
TFRva2VuaXplcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVu
dE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6ZW5kRWxlbWVudE5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6ZW5kRG9jdW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MVG9rZW5pemVyOjppbnRlcm5hbFN1YnNldCk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRFbnRpdHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVybmFsU3Vic2V0SGFuZGxl
cik6CisgICAgICAgICogZG9tL1hNTFRva2VuaXplclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2Vu
aXplcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpwYXJzZVN0YXJ0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIGRvbS9tYWtlX25hbWVzLnBsOgor
ICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvSFRNTE5vU2NyaXB0RWxl
bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6
SFRNTE5vU2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVt
ZW50Ojp+SFRNTE5vU2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3Jp
cHRFbGVtZW50OjpjaGVja0RURCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVt
ZW50OjphdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6cmVj
YWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hpbGRT
aG91bGRDcmVhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVt
ZW50OjpzdHlsZUZvclJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxOb1NjcmlwdEVsZW1l
bnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjpyZW5k
ZXJlcklzTmVlZGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlcjo6Z2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFy
c2VyOjppc0lubGluZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMuaW46CisgICAgICAg
ICogaHRtbC9IVE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6
ZXI6OnNjcmlwdEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bm90
aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVlc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5p
dGlhbGl6ZVN1cHBvcnRlZE5vbkltYWdlTWltZVR5cGVzKToKKwogMjAwOS0wNS0xOCAgRGF2aWQg
S2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFRpZ2VyIGJ1aWxkIGZpeCBm
b3IgcjQzODUwCkluZGV4OiBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCShyZXZpc2lvbiA0Mzgx
OSkKKysrIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0zMTUsMTQgKzMxNSwyMiBAQCBQYXNzUmVmUHRyPEhUTUxEb2N1bWVu
dD4gRE9NSW1wbGVtZW50YXRpCiBQYXNzUmVmUHRyPERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlv
bjo6Y3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB0eXBlLCBGcmFtZSogZnJhbWUsIGJvb2wg
aW5WaWV3U291cmNlTW9kZSkKIHsKICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSkgewotICAgICAg
ICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4
bWwiIHx8IHR5cGUgPT0gImltYWdlL3N2Zyt4bWwiIHx8IGlzVGV4dE1JTUVUeXBlKHR5cGUpIHx8
IGlzWE1MTUlNRVR5cGUodHlwZSkpCisgICAgICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiIHx8
IHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfHwgdHlwZSA9PSAiaW1hZ2Uvc3ZnK3ht
bCIgfHwgaXNUZXh0TUlNRVR5cGUodHlwZSkgfHwgaXNYTUxNSU1FVHlwZSh0eXBlKQorI2lmIEVO
QUJMRShYSFRNTE1QKQorICAgICAgICAgICAgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndh
cC54aHRtbCt4bWwiCisjZW5kaWYKKyAgICAgICAgICAgKQogICAgICAgICAgICAgcmV0dXJuIEhU
TUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZShmcmFtZSwgdHlwZSk7CiAgICAgfQogCiAgICAg
Ly8gUGx1Z2lucyBjYW5ub3QgdGFrZSBIVE1MIGFuZCBYSFRNTCBmcm9tIHVzLCBhbmQgd2UgZG9u
J3QgZXZlbiBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHBsdWdpbiBkYXRhYmFzZSBmb3IgdGhvc2Uu
CiAgICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIpCiAgICAgICAgIHJldHVybiBIVE1MRG9jdW1l
bnQ6OmNyZWF0ZShmcmFtZSk7Ci0gICAgaWYgKHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3ht
bCIpCisgICAgaWYgKHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCIKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAgICAgfHwgdHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndhcC54aHRtbCt4
bWwiCisjZW5kaWYKKyAgICAgICAgKQogICAgICAgICByZXR1cm4gRG9jdW1lbnQ6OmNyZWF0ZVhI
VE1MKGZyYW1lKTsKIAogI2lmIEVOQUJMRShXTUwpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0
MzgxOSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw3
ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJr
aXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2aWQgTGV2aW4gKGxldmluQGNocm9taXVtLm9yZykKICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCkBAIC0xNjUsNiArMTY1LDEwIEBACiAjaW5jbHVkZSAiV01MTmFtZXMuaCIKICNl
bmRpZgogCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVu
dC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CkBAIC0zODYsNiArMzkwLDkgQEAgRG9jdW1lbnQ6
OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgYm9vbCBpcwogCiAgICAgc3RhdGljIGludCBkb2NJRCA9
IDA7CiAgICAgbV9kb2NJRCA9IGRvY0lEKys7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9z
aG91bGRQcm9jZXNzTm9TY3JpcHRFbGVtZW50ID0gc2V0dGluZ3MoKSAmJiAhc2V0dGluZ3MoKS0+
aXNKYXZhU2NyaXB0RW5hYmxlZCgpOworI2VuZGlmCiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnJlbW92
ZWRMYXN0UmVmKCkKQEAgLTQ0MTgsNCArNDQyNSwxNCBAQCB2b2lkIERvY3VtZW50OjpkaXNwbGF5
QnVmZmVyTW9kaWZpZWRCeUVuCiAgICAgICAgIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5kaXNwbGF5
QnVmZmVyKGJ1ZmZlciwgbGVuKTsKIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorYm9vbCBEb2N1
bWVudDo6aXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdAoreworICAgIC8vIEFzIHBlciBzZWN0aW9u
IDcuMiBvZiBPTUEtV0FQLVhIVE1MTVAtVjFfMS0yMDA2MTAyMC1BLnBkZiwgYSBjb25mb3JtaW5n
IHVzZXIgYWdlbnQKKyAgICAvLyBNVVNUIGFjY2VwdCBYSFRNTE1QIGRvY3VtZW50IGlkZW50aWZp
ZWQgYXMgImFwcGxpY2F0aW9uL3ZuZC53YXAueGh0bWwreG1sIgorICAgIC8vIGFuZCBTSE9VTEQg
YWNjZXB0IGl0IGlkZW50aWZpZWQgYXMgImFwcGxpY2F0aW9uL3hodG1sK3htbCIKKyAgICByZXR1
cm4gZnJhbWUoKS0+bG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSA9PSAiYXBwbGljYXRpb24v
dm5kLndhcC54aHRtbCt4bWwiIHx8IGZyYW1lKCktPmxvYWRlcigpLT5yZXNwb25zZU1JTUVUeXBl
KCkgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCI7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMTcs
NiArMzE3LDExIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV01MKQogICAgIHZpcnR1YWwgYm9vbCBp
c1dNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgorI2lmIEVOQUJM
RShYSFRNTE1QKQorICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdDsgCisgICAgYm9v
bCBzaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQ
cm9jZXNzTm9TY3JpcHRFbGVtZW50OyB9CisgICAgdm9pZCBzZXRTaG91bGRQcm9jZXNzTm9zY3Jp
cHRFbGVtZW50KGJvb2wgc2hvdWxkRG8pIHsgbV9zaG91bGRQcm9jZXNzTm9TY3JpcHRFbGVtZW50
ID0gc2hvdWxkRG87IH0KKyNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lU2V0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNl
bGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNlbGVjdG9yOyB9CkBAIC05NDYsNiArOTUx
LDEwIEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9jb250ZW50TGFuZ3VhZ2U7CiAKKyNpZiBF
TkFCTEUoWEhUTUxNUCkKKyAgICBib29sIG1fc2hvdWxkUHJvY2Vzc05vU2NyaXB0RWxlbWVudDsK
KyNlbmRpZgorCiBwdWJsaWM6CiAgICAgYm9vbCBpblBhZ2VDYWNoZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5QYWdlQ2FjaGU7IH0KICAgICB2b2lkIHNldEluUGFnZUNhY2hlKGJvb2wgZmxhZyk7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkocmV2aXNpb24gNDM4MTkpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTI3Niw3ICsxMjc3LDcgQEAgdm9pZCBOb2RlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCkK
ICAgICAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJl
cigpOwogICAgIGlmIChwYXJlbnRSZW5kZXJlciAmJiBwYXJlbnRSZW5kZXJlci0+Y2FuSGF2ZUNo
aWxkcmVuKCkKLSNpZiBFTkFCTEUoU1ZHKQorI2lmIEVOQUJMRShTVkcpIHx8IEVOQUJMRShYSFRN
TE1QKQogICAgICAgICAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGhpcykK
ICNlbmRpZgogICAgICAgICApIHsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9kb20v
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC00MjUsOSArNDI2LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsUmVtb3ZlKCk7CiAgICAgdm9pZCBjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHls
ZUZvclJlbmRlcmVyKCk7CisjZWxzZQogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
Rm9yUmVuZGVyZXIoKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKik7Ci0jaWYgRU5BQkxFKFNWRykKKyNpZiBFTkFCTEUoU1ZHKSB8fCBFTkFC
TEUoWEhUTUxNUCkKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihO
b2RlKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAgICAgdmlydHVhbCBSZW5kZXJP
YmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKSW5kZXg6
IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hN
TFRva2VuaXplci5oCShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXpl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC03Miw2ICs3MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBz
ZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNY
SFRNTDsgfQogICAgICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNYSFRNTERvY3VtZW50OyB9CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIHZvaWQgc2V0
SXNYSFRNTE1QRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBp
c1hIVE1MOyB9CisgICAgICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2lzWEhUTUxNUERvY3VtZW50OyB9CisjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAgICAg
ICBib29sIGlzV01MRG9jdW1lbnQoKSBjb25zdDsKICNlbmRpZgpAQCAtMTQ5LDYgKzE1NCwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07CiAgICAgICAgIGJvb2wg
bV9zYXdGaXJzdEVsZW1lbnQ7CiAgICAgICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1lbnQ7CisjaWYg
RU5BQkxFKFhIVE1MTVApCisgICAgICAgIGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVudDsKKyAgICAg
ICAgYm9vbCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbjsKKyNlbmRpZgogCiAgICAgICAgIGJvb2wg
bV9wYXJzZXJQYXVzZWQ7CiAgICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OwpJbmRleDog
V2ViQ29yZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNyArNSw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYzLDYgKzYz
LDExIEBACiAjaW5jbHVkZSA8bGlieHNsdC94c2x0Lmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShY
SFRNTE1QKQorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVt
ZW50LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTI2LDYgKzUzMSwxMCBAQCBYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1
bWVudCogX2RvCiAgICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKICAgICAsIG1fc2F3Rmly
c3RFbGVtZW50KGZhbHNlKQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5B
QkxFKFhIVE1MTVApCisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQorICAgICwgbV9o
YXNEb2NUeXBlRGVjbGFyYXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAsIG1fcGFyc2VyUGF1c2Vk
KGZhbHNlKQogICAgICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQogICAgICwgbV9maW5pc2hD
YWxsZWQoZmFsc2UpCkBAIC01NDksNiArNTU4LDEwIEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5p
emVyKERvY3VtZW50RnJhZ20KICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQogICAgICwg
bV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisg
ICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgogICAgICwgbV9wYXJz
ZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCiAgICAgLCBt
X2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTcwNCw4ICs3MTcsMTMgQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ym9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0
RWxlbWVudCA9IHRydWU7CisjaWYgRU5BQkxFKFhIVE1MTVApIAorICAgIC8vIGNoZWNrIGlmIHRo
ZSBET0NUWVBFIERlY2xhcmF0aW9uIG9mIFhIVE1MTVAgZG9jdW1lbnQgZXhpc3RzCisgICAgaWYg
KCFtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiAmJiBtX2RvYy0+aXNYSFRNTE1QRG9jdW1lbnQoKSkg
eworICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4i
LCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgogCiAgICAgZXhpdFRleHQoKTsKIApAQCAtNzIwLDYgKzczOCwyNyBAQCB2b2lkIFhN
TFRva2VuaXplcjo6c3RhcnRFbGVtZW50TnMoY29uc3QgCiAgICAgICAgICAgICB1cmkgPSBtX2Rl
ZmF1bHROYW1lc3BhY2VVUkk7CiAgICAgfQogCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgaWYg
KCFtX3Nhd0ZpcnN0RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7CisgICAgICAgIC8v
IEFzIHBlciB0aGUgc2VjdGlvbiA3LjEgb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEwMjAt
QS5wZGYsIAorICAgICAgICAvLyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJvb3QgZWxl
bWVudCBNVVNUIGJlICdodG1sJyBhbmQgCisgICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0
aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJyAKKyAgICAgICAg
Ly8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKKyAgICAgICAgaWYgKGxv
Y2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAg
IGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1sJyBhcyBy
b290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodXJpLmlzTnVsbCgpKSB7CisgICAg
ICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNl
VVJJOyAKKyAgICAgICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAgICAgICAg
fQorICAgIH0KKyNlbmRpZgorCisgICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nhd0ZpcnN0
RWxlbWVudDsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisKICAgICBRdWFsaWZpZWRO
YW1lIHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBu
ZXdFbGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUpOwogICAgIGlmICgh
bmV3RWxlbWVudCkgewpAQCAtNzk4LDIyICs4MzcsMjggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmVu
ZEVsZW1lbnROcygpCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTY3JpcHQpOwogICAgIG1fcmVxdWVz
dGluZ1NjcmlwdCA9IHRydWU7CiAKLSAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1l
bnQtPnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHko
KSkgewotICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKLSAgICAgICAgU3RyaW5n
IHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAgICAg
IGlmICgobV9wZW5kaW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0
KHNjcmlwdEhyZWYsIHNjcmlwdENoYXJzZXQpKSkgewotICAgICAgICAgICAgbV9zY3JpcHRFbGVt
ZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRo
aXMpOwotCi0gICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlw
dCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAgICAgICBp
ZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAg
ICAgICB9IGVsc2UgCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlw
dFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCks
IG1fc2NyaXB0U3RhcnRMaW5lKSk7Ci0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAoIXNj
cmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICAgICAgbV9kb2Mt
PnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisgICAgZWxzZSAKKyNlbmRp
ZgorICAgIHsKKyAgICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3Vy
Y2VBdHRyaWJ1dGVWYWx1ZSgpOworICAgICAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKKyAgICAgICAgICAgIFN0
cmluZyBzY3JpcHRDaGFyc2V0ID0gc2NyaXB0RWxlbWVudC0+c2NyaXB0Q2hhcnNldCgpOworICAg
ICAgICAgICAgaWYgKChtX3BlbmRpbmdTY3JpcHQgPSBtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVl
c3RTY3JpcHQoc2NyaXB0SHJlZiwgc2NyaXB0Q2hhcnNldCkpKSB7CisgICAgICAgICAgICAgICAg
bV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdTY3Jp
cHQtPmFkZENsaWVudCh0aGlzKTsKKworICAgICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1Njcmlw
dCB3aWxsIGJlIDAgaWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0
ZWQgaXQKKyAgICAgICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAg
ICAgICAgICBwYXVzZVBhcnNpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAg
ICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1f
dmlldy0+ZnJhbWUoKS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShz
Y3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFy
dExpbmUpKTsKKyAgICB9CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgc2V0
Q3VycmVudE5vZGUocGFyZW50LmdldCgpKTsKIH0KQEAgLTk0Miw2ICs5ODcsOSBAQCB2b2lkIFhN
TFRva2VuaXplcjo6c3RhcnREb2N1bWVudChjb25zdCB4CiB2b2lkIFhNTFRva2VuaXplcjo6ZW5k
RG9jdW1lbnQoKQogewogICAgIGV4aXRUZXh0KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAg
bV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIFhNTFRv
a2VuaXplcjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgeG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hh
ciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciogc3lzdGVtSUQpCkBAIC05NTUsOCArMTAwMywx
MCBAQCB2b2lkIFhNTFRva2VuaXplcjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgCiAgICAgfQogICAg
IAogICAgIGlmIChtX2RvYykgewotI2lmIEVOQUJMRShXTUwpCisjaWYgRU5BQkxFKFdNTCkgfHwg
RU5BQkxFKFhIVE1MTVApCiAgICAgICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFs
SUQpOworI2VuZGlmCisjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgaWYgKGlzV01MRG9jdW1lbnQo
KQogICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4i
CiAgICAgICAgICAgICAmJiBleHRJZCAhPSAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiIK
QEAgLTk2NCw4ICsxMDE0LDMxIEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbnRlcm5hbFN1YnNldChj
b25zdCAKICAgICAgICAgICAgICYmIGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjAv
L0VOIikKICAgICAgICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBEVEQgUHVibGlj
IElEIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAgICAgU3RyaW5nIGR0ZE5hbWUgPSB0b1N0cmluZyhuYW1lKTsKKyAgICAg
ICAgaWYgKGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIgor
ICAgICAgICAgICAgfHwgZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEu
MS8vRU4iKSB7CisgICAgICAgICAgICBpZiAoZHRkTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcu
bG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkludmFs
aWQgRE9DVFlQRSBkZWNsYXJhdGlvbiwgZXhwZWN0ZWQgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4i
LCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9IAorCisgICAgICAgICAgICBpZiAobV9kb2MtPmlzWEhUTUxNUERvY3Vt
ZW50KCkpCisgICAgICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOwor
CisgICAgICAgICAgICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0K
KyNlbmRpZgogCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIG1fZG9jLT5hZGRDaGlsZChE
b2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgZHRkTmFtZSwgZXh0SWQsIHRvU3RyaW5nKHN5c3Rl
bUlEKSkpOworI2VsaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgbV9kb2MtPmFkZENoaWxkKERvY3Vt
ZW50VHlwZTo6Y3JlYXRlKG1fZG9jLCB0b1N0cmluZyhuYW1lKSwgZXh0SWQsIHRvU3RyaW5nKHN5
c3RlbUlEKSkpOworI2Vsc2UKICAgICAgICAgbV9kb2MtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6
Y3JlYXRlKG1fZG9jLCB0b1N0cmluZyhuYW1lKSwgdG9TdHJpbmcoZXh0ZXJuYWxJRCksIHRvU3Ry
aW5nKHN5c3RlbUlEKSkpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC0xMTA4LDYgKzExODEsOSBA
QCBzdGF0aWMgeG1sRW50aXR5UHRyIGdldEVudGl0eUhhbmRsZXIodm9pCiAKICAgICBlbnQgPSB4
bWxHZXREb2NFbnRpdHkoY3R4dC0+bXlEb2MsIG5hbWUpOwogICAgIGlmICghZW50ICYmIChnZXRU
b2tlbml6ZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVudCgpCisjaWYgRU5BQkxFKFhIVE1MTVAp
CisgICAgICAgICAgICAgICAgIHx8IGdldFRva2VuaXplcihjbG9zdXJlKS0+aXNYSFRNTE1QRG9j
dW1lbnQoKQorI2VuZGlmCiAjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgICAgICAgICAgfHwgZ2V0
VG9rZW5pemVyKGNsb3N1cmUpLT5pc1dNTERvY3VtZW50KCkKICNlbmRpZgpAQCAtMTE0OSw3ICsx
MjI1LDEwIEBAIHN0YXRpYyB2b2lkIGV4dGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiAKICAgICAg
ICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikKICAgICAg
ICAgfHwgKGV4dElkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9F
TiIpCiAgICAgICAgIHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0
aE1MIDIuMCBwbHVzIFNWRyAxLjEvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICItLy9XQVBG
T1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCisjaWYgIUVOQUJMRShYSFRNTE1QKQor
ICAgICAgICB8fCAoZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8v
RU4iKQorI2VuZGlmCisgICAgICAgKQogICAgICAgICBnZXRUb2tlbml6ZXIoY2xvc3VyZSktPnNl
dElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGll
cyBvciBub3QuCiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAJKHJldmlzaW9uIDQzODE5
KQorKysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJr
aXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01
Niw2ICs1NiwxMSBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg1LDYgKzkwLDEwIEBAIFhNTFRva2Vu
aXplcjo6WE1MVG9rZW5pemVyKERvY3VtZW50KiBfZG8KICAgICAsIG1fc2F3WFNMVHJhbnNmb3Jt
KGZhbHNlKQogICAgICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxE
b2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9j
dW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRp
ZgogICAgICwgbV9wYXJzZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQo
ZmFsc2UpCiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTExMCw2ICsxMTksMTAgQEAg
WE1MVG9rZW5pemVyOjpYTUxUb2tlbml6ZXIoRG9jdW1lbnRGcmFnbQogICAgICwgbV9zYXdYU0xU
cmFuc2Zvcm0oZmFsc2UpCiAgICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKICAgICAsIG1f
aXNYSFRNTERvY3VtZW50KGZhbHNlKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICwgbV9pc1hI
VE1MTVBEb2N1bWVudChmYWxzZSkKKyAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNl
KQorI2VuZGlmCiAgICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGlu
Z1NjcmlwdChmYWxzZSkKICAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQpAQCAtNDE5LDYgKzQz
MiwxMiBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2UoKQogICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpTdGFydEVsZW1lbnQ6IHsK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgICAgIGlmIChtX2RvYy0+aXNYSFRNTE1QRG9j
dW1lbnQoKSAmJiAhbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgICAgICBo
YW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyNlbmRpZiAKICAgICAgICAgICAgIHBhcnNlU3RhcnRFbGVtZW50KCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQzLDEyICs0NjIsMTggQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OnBhcnNlKCkKICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQ6IHsKICAgICAg
ICAgICAgIC8vcURlYnVnKCk8PCItLS0tLS0tLS0tLS0tIERURCI7CiAgICAgICAgICAgICBwYXJz
ZUR0ZCgpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24gPSB0cnVlOworI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVudGl0eVJlZmVyZW5jZTogewogICAgICAg
ICAgICAgLy9xRGVidWcoKTw8Ii0tLS0tLS0tLS0gRU5USVRZID0gIjw8bV9zdHJlYW0ubmFtZSgp
LnRvU3RyaW5nKCkKICAgICAgICAgICAgIC8vICAgICAgICA8PCIsIHQgPSAiPDxtX3N0cmVhbS50
ZXh0KCkudG9TdHJpbmcoKTsKICAgICAgICAgICAgIGlmIChpc1hIVE1MRG9jdW1lbnQoKQorI2lm
IEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgICAgIHx8IGlzWEhUTUxNUERvY3VtZW50KCkK
KyNlbmRpZgogI2lmIEVOQUJMRShXTUwpCiAgICAgICAgICAgICAgICAgfHwgaXNXTUxEb2N1bWVu
dCgpCiAjZW5kaWYKQEAgLTUwOCw5ICs1MzMsNiBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VT
dGFydEVsZW1lbnQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBpc0ZpcnN0
RWxlbWVudCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRy
dWU7Ci0KICAgICBleGl0VGV4dCgpOwogCiAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IG1fc3RyZWFt
Lm5hbWUoKTsKQEAgLTUyOSw2ICs1NTEsMjggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlU3Rh
cnRFbGVtZW50KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmIEVOQUJMRShYSFRNTE1Q
KQorICAgIGlmICghbV9zYXdGaXJzdEVsZW1lbnQgJiYgaXNYSFRNTE1QRG9jdW1lbnQoKSkgewor
ICAgICAgICAvLyBBcyBwZXIgNy4xIHNlY3Rpb24gb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAw
NjEwMjAtQS5wZGYsIAorICAgICAgICAvLyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJv
b3QgZWxlbWVudCBNVVNUIGJlICdodG1sJyBhbmQgCisgICAgICAgIC8vIGVuc3VyZSB0aGUgbmFt
ZSBvZiB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJyAKKyAg
ICAgICAgLy8gTVVTVCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKKyAgICAgICAg
aWYgKGxvY2FsTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAg
ICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1s
JyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0gCisKKyAgICAgICAgaWYgKHVyaS5pc051bGwoKSkg
eworICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5h
bWVzcGFjZVVSSTsgCisgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7Cisg
ICAgICAgICAgICBtX3N0cmVhbS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9uKFFYbWxTdHJl
YW1OYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXgsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VV
UkkpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgYm9vbCBpc0ZpcnN0RWxlbWVu
dCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyhu
ZXdFbGVtZW50LmdldCgpLCBtX3N0cmVhbS5uYW1lc3BhY2VEZWNsYXJhdGlvbnMoKSwgZWMpOwog
ICAgIGlmIChlYykgewpAQCAtNTgzLDIyICs2MjcsMjggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBh
cnNlRW5kRWxlbWVudCgpCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTY3JpcHQpOwogICAgIG1fcmVx
dWVzdGluZ1NjcmlwdCA9IHRydWU7CiAKLSAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVs
ZW1lbnQtPnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1w
dHkoKSkgewotICAgICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKLSAgICAgICAgU3Ry
aW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAg
ICAgIGlmICgobV9wZW5kaW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2Ny
aXB0KHNjcmlwdEhyZWYsIHNjcmlwdENoYXJzZXQpKSkgewotICAgICAgICAgICAgbV9zY3JpcHRF
bGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50
KHRoaXMpOwotCi0gICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNj
cmlwdCB3YXMgYWxyZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAgICAg
ICBpZiAobV9wZW5kaW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwot
ICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotICAgIH0g
ZWxzZQotICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNj
cmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJs
KCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7Ci0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAo
IXNjcmlwdEVsZW1lbnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICAgICAgbV9k
b2MtPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisgICAgZWxzZQorI2Vu
ZGlmCisgICAgeworICAgICAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNv
dXJjZUF0dHJpYnV0ZVZhbHVlKCk7CisgICAgICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRlIAorICAgICAgICAgICAg
U3RyaW5nIHNjcmlwdENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Cisg
ICAgICAgICAgICBpZiAoKG1fcGVuZGluZ1NjcmlwdCA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVx
dWVzdFNjcmlwdChzY3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKKyAgICAgICAgICAgICAg
ICBtX3NjcmlwdEVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAgICAgIG1fcGVuZGluZ1Nj
cmlwdC0+YWRkQ2xpZW50KHRoaXMpOworCisgICAgICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2Ny
aXB0IHdpbGwgYmUgMCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCByZWYoKSBleGVj
dXRlZCBpdAorICAgICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgICAg
ICAgICAgICAgIHBhdXNlUGFyc2luZygpOworICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAg
ICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bV92aWV3LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2Rl
KHNjcmlwdEVsZW1lbnQtPnNjcmlwdENvbnRlbnQoKSwgbV9kb2MtPnVybCgpLCBtX3NjcmlwdFN0
YXJ0TGluZSkpOworICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBz
ZXRDdXJyZW50Tm9kZShwYXJlbnQuZ2V0KCkpOwogfQpAQCAtNjYyLDYgKzcxMiw5IEBAIHZvaWQg
WE1MVG9rZW5pemVyOjpwYXJzZUNvbW1lbnQoKQogCiB2b2lkIFhNTFRva2VuaXplcjo6ZW5kRG9j
dW1lbnQoKQogeworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIG1faGFzRG9jVHlwZURlY2xhcmF0
aW9uID0gZmFsc2U7CisjZW5kaWYKIH0KIAogYm9vbCBYTUxUb2tlbml6ZXI6Omhhc0Vycm9yKCkg
Y29uc3QKQEAgLTc1NSw5ICs4MDgsMjUgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRHRkKCkK
ICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1M
IEJhc2ljIDEuMC8vRU4iKSkKICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmco
Ii0vL1czQy8vRFREIFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VOIikpCiAgICAgICAgIHx8
IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBN
YXRoTUwgMi4wIHBsdXMgU1ZHIDEuMS8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFM
YXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkpIHsK
KyNpZiAhRU5BQkxFKFhIVE1MTVApCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3Ry
aW5nKCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCisjZW5kaWYKKyAg
ICAgICApCiAgICAgICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYg
d2UgcmVwbGFjZSBlbnRpdGllcyBvciBub3QuCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgZWxz
ZSBpZiAoKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwg
TW9iaWxlIDEuMS8vRU4iKSkKKyAgICAgICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0
cmluZygiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgeworICAgICAg
ICBpZiAoQXRvbWljU3RyaW5nKG5hbWUpICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUo
KSkgeworICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVj
bGFyYXRpb24sIGV4cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigp
LCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gCisKKyAg
ICAgICAgaWYgKG1fZG9jLT5pc1hIVE1MTVBEb2N1bWVudCgpKSAvLyBjaGVjayBpZiB0aGUgTUlN
RSB0eXBlIGlzIGNvcnJlY3Qgd2l0aCB0aGlzIG1ldGhvZAorICAgICAgICAgICAgc2V0SXNYSFRN
TE1QRG9jdW1lbnQodHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldElzWEhUTUxE
b2N1bWVudCh0cnVlKTsKICAgICB9CisjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAgIGVsc2Ug
aWYgKG1fZG9jLT5pc1dNTERvY3VtZW50KCkKICAgICAgICAgICAgICAmJiBwdWJsaWNJZCAhPSBR
TGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOIikKQEAgLTc3Miw0ICs4
NDEsMyBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VEdGQoKQogfQogfQogCi0KSW5kZXg6IFdl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vbWFrZV9u
YW1lcy5wbAkocmV2aXNpb24gNDM4MTkpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCSh3
b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogCiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdo
dCAoQykgMjAwOSwgSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorIyBD
b3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtODMxLDcgKzgzMiw3IEBAIHN1YiB1c2VzRGVmYXVsdEpTV3JhcHBlcgogICAgIG15ICRu
YW1lID0gc2hpZnQ7CiAKICAgICAjIEEgdGFnIHJldXNlcyB0aGUgZGVmYXVsdCB3cmFwcGVyIGlm
IGl0cyBKU0ludGVyZmFjZU5hbWUgbWF0Y2hlcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgRWxlbWVu
dC4KLSAgICByZXR1cm4gJHRhZ3N7JG5hbWV9eydKU0ludGVyZmFjZU5hbWUnfSBlcSAkcGFyYW1l
dGVyc3sibmFtZXNwYWNlIn0gLiAiRWxlbWVudCI7CisgICAgcmV0dXJuICR0YWdzeyRuYW1lfXsn
SlNJbnRlcmZhY2VOYW1lJ30gZXEgJHBhcmFtZXRlcnN7Im5hbWVzcGFjZSJ9IC4gIkVsZW1lbnQi
IHx8ICR0YWdzeyRuYW1lfXsnSlNJbnRlcmZhY2VOYW1lJ30gZXEgIkhUTUxOb1NjcmlwdEVsZW1l
bnQiOwogfQogCiBzdWIgcHJpbnRXcmFwcGVyRnVuY3Rpb25zCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05ODAsMTEgKzk4MSwx
MyBAQCBib29sIEhUTUxFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuCiAgICAgCiBib29s
IEhUTUxFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkKIHsKKyNp
ZiAhRU5BQkxFKFhIVE1MTVApCiAgICAgaWYgKGhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykpIHsK
ICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAg
ICAgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIFN0eWxl
ZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOwogfQogICAgIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTm9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MTm9TY3JpcHRFbGVtZW50LmgiCisK
KyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisj
aW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKKworSFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5vU2NyaXB0
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAg
IDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQoreworICAgIEFTU0VSVChoYXNUYWdOYW1lKG5v
c2NyaXB0VGFnKSk7Cit9CisKK0hUTUxOb1NjcmlwdEVsZW1lbnQ6On5IVE1MTm9TY3JpcHRFbGVt
ZW50KCkKK3sKK30KKworYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGVja0RURChjb25zdCBO
b2RlKiBuZXdDaGlsZCkKK3sKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSB8fCBp
bkJsb2NrVGFnTGlzdChuZXdDaGlsZCk7IAorfQorCit2b2lkIEhUTUxOb1NjcmlwdEVsZW1lbnQ6
OmF0dGFjaCgpCit7CisgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOworCisgICAgLy8gSWYgbm8g
bmVlZCB0byBwcm9jZXNzIDxub3NjcmlwdD4sIHdlIGhpZGUgaXQgYnkgc2V0dGluZyBkaXNwbGF5
Om5vbmUgdGVtcG9yYXJpbHkKKyAgICBpZiAoIWRvY3VtZW50KCktPnNob3VsZFByb2Nlc3NOb3Nj
cmlwdEVsZW1lbnQoKSkgeworICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5z
dHlsZSgpKQorICAgICAgICAgICAgcmVuZGVyZXIoKS0+c3R5bGUoKS0+c2V0RGlzcGxheShOT05F
KTsKKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIH0KK30KKwordm9pZCBIVE1M
Tm9TY3JpcHRFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCit7CisgICAg
aWYgKCFkb2N1bWVudCgpLT5zaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KCkgfHwgIXJlbmRl
cmVyKCkgfHwgIXJlbmRlcmVyKCktPnN0eWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IElmIDxub3NjcmlwdD4gbmVlZHMgcHJvY2Vzc2luZywgd2UgbWFrZSBpdCB2aXNpYWJsZSBoZXJl
LCBpbmNsdWRpbmcgaXRzIHZpc2libGUgY2hpbGRyZW4KKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9
PSBOT05FKSB7CisgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORSk7CisKKyAgICAgICAg
Ly8gQ3JlYXRlIHJlbmRlcmVycyBmb3IgaXRzIGNoaWxkcmVuCisgICAgICAgIGlmIChoYXNDaGls
ZE5vZGVzKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbjsg
biA9IG4tPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5y
ZW5kZXJlcigpKQorICAgICAgICAgICAgICAgICAgICBuLT5jcmVhdGVSZW5kZXJlcklmTmVlZGVk
KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgSFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hp
bGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZG9jdW1lbnQoKS0+c2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCgpOworfQorCitQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBIVE1MTm9TY3JpcHRFbGVtZW50OjpzdHlsZUZvclJlbmRlcmVyKCkK
K3sKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1l
bnQodGhpcywgMCwgZmFsc2UpOworfQorCit9CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MTm9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxOb1Nj
cmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRF
bGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSFRNTE5vU2NyaXB0RWxlbWVudF9oCisj
ZGVmaW5lIEhUTUxOb1NjcmlwdEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKFhIVE1MTVApCisjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1M
Tm9TY3JpcHRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBIVE1M
Tm9TY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgfkhUTUxOb1NjcmlwdEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwor
ICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisgICAgdmlydHVhbCBi
b29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0OworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5kZXJlcigpOworICAgIHZpcnR1YWwg
Ym9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyAgcmV0dXJuIHRydWU7IH0KK307
CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJ
KHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICAgICAgICAgICAgICAoQykgMTk5OSwyMDAxIExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgICAgICAgICAgICAgIChDKSAyMDAwLDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKIAogICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
OTA5LDcgKzkxMCw5IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6Z2V0Tm9kZShUb2sK
ICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChub2JyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhU
TUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25NYXAu
c2V0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNlcjo6bm9lbWJlZENy
ZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KG5vZnJhbWVzVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayk7
CisjaWYgIUVOQUJMRShYSFRNTE1QKQogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KG5vc2NyaXB0
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JD
aGVjayk7CisjZW5kaWYKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChvbFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksICZIVE1MUGFyc2VyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgICAg
IGdGdW5jdGlvbk1hcC5zZXQocFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpw
Q2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQocGxhaW50
ZXh0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OnBDbG9zZXJDcmVhdGVFcnJv
ckNoZWNrKTsKQEAgLTEwMTUsMTEgKzEwMTgsMTMgQEAgYm9vbCBIVE1MUGFyc2VyOjppc0lubGlu
ZShOb2RlKiBub2RlKSBjbwogICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKG5vZnJhbWVzVGFn
KSB8fCBlLT5oYXNMb2NhbE5hbWUobm9sYXllclRhZykgfHwKICAgICAgICAgICAgIGUtPmhhc0xv
Y2FsTmFtZShub2VtYmVkVGFnKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworI2lmICFFTkFC
TEUoWEhUTUxNUCkKICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykgJiYg
IW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fZG9jdW1lbnQtPnNldHRpbmdzKCk7CiAgICAgICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0
dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogICAgIAogICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxUYWdOYW1lcy5pbgkocmV2aXNpb24gNDM4MTkpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFRhZ05hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3MywxMSBAQCBub2JyIGludGVy
ZmFjZU5hbWU9SFRNTEVsZW1lbnQKIG5vZW1iZWQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAog
bm9mcmFtZXMgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogbm9sYXllciBpbnRlcmZhY2VOYW1l
PUhUTUxFbGVtZW50CisjaWYgRU5BQkxFX1hIVE1MTVAKK25vc2NyaXB0IGludGVyZmFjZU5hbWU9
SFRNTE5vU2NyaXB0RWxlbWVudAorI2Vsc2UKIG5vc2NyaXB0IGludGVyZmFjZU5hbWU9SFRNTEVs
ZW1lbnQKKyNlbmRpZgogb2JqZWN0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKIG9s
IGludGVyZmFjZU5hbWU9SFRNTE9MaXN0RWxlbWVudAogb3B0Z3JvdXAgaW50ZXJmYWNlTmFtZT1I
VE1MT3B0R3JvdXBFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9odG1sL0hUTUxU
b2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03LDYgKzcsNyBAQAogICAgICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEBueXBvcC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0Nyw2ICs0NDgsMTAgQEAgSFRNTFRva2VuaXplcjo6
U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gUGFyc2UgbV9zY3JpcHRDb2RlIGNvbnRhaW5pbmcgPHNjcmlwdD4gaW5mbwogICAgICAgICAg
ICAgZG9TY3JpcHRFeGVjID0gbV9zY3JpcHROb2RlLT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0
KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICBpZiAoIWRvU2NyaXB0RXhlYykK
KyAgICAgICAgICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0
cnVlKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9zY3JpcHROb2RlID0gMDsKICAgICAgICAgfQog
ICAgIH0KQEAgLTE5OTEsNiArMTk5NiwxMCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6Om5vdGlmeUZp
bmlzaGVkKENhY2hlCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PEhUTUxTY3JpcHRFbGVtZW50Kj4obi5nZXQoKSktPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQo
KSkKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9uKHNvdXJjZUNvZGUs
IG1fc3RhdGUpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwor
I2VuZGlmCiAgICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkRXZl
bnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAkocmV2aXNpb24gNDM4MTkpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTIyMSw3ICsyMjEsMTIgQEAgc3RydWN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uIHsKICAgICAgICAg
QVNTRVJUKHRoaXMtPmZvcm1TdGF0ZSk7CiAgICAgfQogfTsKLQorIAorI2lmIEVOQUJMRShYSFRN
TE1QKQorc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdEFjY2VwdEhlYWRlcltdID0gImFwcGxpY2F0
aW9uL3htbCxhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCxhcHBsaWNhdGlvbi94aHRtbCt4
bWw7cHJvZmlsZT0naHR0cDovL3d3dy53YXBmb3J1bS5vcmcveGh0bWwnLHRleHQvaHRtbDtxPTAu
OSx0ZXh0L3BsYWluO3E9MC44LGltYWdlL3BuZywqLyo7cT0wLjUiOworI2Vsc2UKK3N0YXRpYyBj
b25zdCBjaGFyIGRlZmF1bHRBY2NlcHRIZWFkZXJbXSA9ICJhcHBsaWNhdGlvbi94bWwsYXBwbGlj
YXRpb24veGh0bWwreG1sLHRleHQvaHRtbDtxPTAuOSx0ZXh0L3BsYWluO3E9MC44LGltYWdlL3Bu
ZywqLyo7cT0wLjUiOworI2VuZGlmCiBzdGF0aWMgZG91YmxlIHN0b3JlZFRpbWVPZkxhc3RDb21w
bGV0ZWRMb2FkOwogc3RhdGljIEZyYW1lTG9hZGVyOjpMb2NhbExvYWRQb2xpY3kgbG9jYWxMb2Fk
UG9saWN5ID0gRnJhbWVMb2FkZXI6OkFsbG93TG9jYWxMb2Fkc0ZvckxvY2FsT25seTsKIApAQCAt
MzU3Myw3ICszNTc4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVl
cwogICAgIH0KICAgICAKICAgICBpZiAobWFpblJlc291cmNlKQotICAgICAgICByZXF1ZXN0LnNl
dEhUVFBBY2NlcHQoImFwcGxpY2F0aW9uL3htbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsdGV4dC9o
dG1sO3E9MC45LHRleHQvcGxhaW47cT0wLjgsaW1hZ2UvcG5nLCovKjtxPTAuNSIpOworICAgICAg
ICByZXF1ZXN0LnNldEhUVFBBY2NlcHQoZGVmYXVsdEFjY2VwdEhlYWRlcik7CiAKICAgICAvLyBN
YWtlIHN1cmUgd2Ugc2VuZCB0aGUgT3JpZ2luIGhlYWRlci4KICAgICBhZGRIVFRQT3JpZ2luSWZO
ZWVkZWQocmVxdWVzdCwgU3RyaW5nKCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlw
ZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwCShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVS
ZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xOTYsNiAr
MTk2LDkgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZE5vbkltYWdlTQogICAgICAg
ICAidGV4dC8iLAogICAgICAgICAiYXBwbGljYXRpb24veG1sIiwKICAgICAgICAgImFwcGxpY2F0
aW9uL3hodG1sK3htbCIsCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICJhcHBsaWNhdGlv
bi92bmQud2FwLnhodG1sK3htbCIsCisjZW5kaWYKICAgICAgICAgImFwcGxpY2F0aW9uL3Jzcyt4
bWwiLAogICAgICAgICAiYXBwbGljYXRpb24vYXRvbSt4bWwiLAogI2lmIEVOQUJMRShTVkcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30490</attachid>
            <date>2009-05-19 19:27:35 -0700</date>
            <delta_ts>2009-05-19 20:31:20 -0700</delta_ts>
            <desc>Latest Updated patch for code changes</desc>
            <filename>applyXHTMLMPImplement.patch</filename>
            <type>text/plain</type>
            <size>41392</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mzg4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMDktMDUtMTkgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBCdWcgMjM0NTI6ICBBZGQgWEhUTUxNUCBzdXBwb3J0IHRvIFdlYktpdC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDUyCisgCisgICAg
ICAgIFhIVE1MTVAgaXMgYSBzdHJpY3Qgc3Vic2V0IG9mIFhIVE1MIDEuMS4gSXQgZXh0ZW5kcyBY
SFRNTCBCYXNpYyBhbmQgYWRkIGVuaGFuY2VkCisgICAgICAgIGZ1bmN0aW9uYWxpdHkuIE1vc3Qg
b2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBoYXZlIGFscmVhZHkgYmVlbiBpbXBsZW1lbnRlZCBieSBX
ZWJraXQuCisgICAgICAgIAorICAgICAgICBUaGUgY2hhbmdlcyBpbmNsdWRlOgorICAgICAgICAx
KSBBZGRpbmcgPG5vc2NyaXB0PiBzdXBwb3J0CisgICAgICAgIDIpIERvY3VtZW50IGNvbmZvcm1h
bmNlIHZhbGlkYXRpb24KKyAgICAgICAgMykgVXNlciBBZ2VudCBjb25mb3JtYW5jZSB2YWxpZGF0
aW9uCisgCisgICAgICAgIHJlZmVyIHRvIHRoZSBzcGVjaWZpY2F0aW9uOiBPTUEtV0FQLVhIVE1M
TVAtVjFfMS0yMDA2MTAyMC1BLnBkZgorCisgICAgICAgIFRlc3RzOiBmYXN0L3hodG1sbXAvY2hl
Y2stZG9jdHlwZS1kZWNsYXJhdGlvbi54aHRtbAorICAgICAgICAgICAgICAgZmFzdC94aHRtbG1w
L2NoZWNrLXJvb3RlbGVtZW50LnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1sbXAvbm9z
Y3JpcHQtaW4tbXVsdGlzY3JpcHRzLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1sbXAv
bm9zY3JpcHQtbmVzdGVkLnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3hodG1sbXAvbm9zY3Jp
cHQueGh0bWwKKworICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzWEhUTUxNUERvY3VtZW50KToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzaG91bGRQ
cm9jZXNzTm9zY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRT
aG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnN0eWxlRm9yUmVuZGVyZXIpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6
CisgICAgICAgICogZG9tL1hNTFRva2VuaXplci5oOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9r
ZW5pemVyOjpzZXRJc1hIVE1MTVBEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tl
bml6ZXI6OmlzWEhUTUxNUERvY3VtZW50KToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyTGli
eG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcik6
CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6ZW5kRWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTFRva2VuaXplcjo6ZW5kRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9r
ZW5pemVyOjppbnRlcm5hbFN1YnNldCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRFbnRpdHlIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVybmFsU3Vic2V0SGFuZGxlcik6CisgICAgICAg
ICogZG9tL1hNTFRva2VuaXplclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXpl
cjo6WE1MVG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6cGFyc2Up
OgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpwYXJzZVN0YXJ0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAqIGRvbS9tYWtlX25hbWVzLnBsOgorICAgICAgICAqIGh0
bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnJlbmRl
cmVySXNOZWVkZWQpOgorICAgICAgICAqIGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5vU2NyaXB0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50Ojp+SFRNTE5v
U2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50Ojpj
aGVja0RURCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVtZW50OjphdHRhY2gp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6cmVjYWxjU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hpbGRTaG91bGRDcmVhdGVS
ZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6
CisgICAgICAgICogaHRtbC9IVE1MUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXI6OmdldE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aXNJbmxpbmUp
OgorICAgICAgICAqIGh0bWwvSFRNTFRhZ05hbWVzLmluOgorICAgICAgICAqIGh0bWwvSFRNTFRv
a2VuaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpzY3JpcHRIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKToK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9N
SU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVTdXBwb3J0
ZWROb25JbWFnZU1pbWVUeXBlcyk6CisKIDIwMDktMDUtMTkgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEkgY2FuJ3QgZmlndXJlIG91dCBob3cgdG8gbWFrZSB0
aGlzIG5vdCB0aW1pbmcgZGVwZW5kZW50LCBtYWtpbmcgaXQgbWFudWFsIHRlc3QgaW5zdGVhZC4K
SW5kZXg6IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDQzODE5KQorKysgV2Vi
Q29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQs
NyBAQAogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIChzYW1Ad2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTMxNSwxNCArMzE1LDIyIEBAIFBhc3NSZWZQdHI8SFRNTERvY3VtZW50PiBET01JbXBs
ZW1lbnRhdGkKIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVE
b2N1bWVudChjb25zdCBTdHJpbmcmIHR5cGUsIEZyYW1lKiBmcmFtZSwgYm9vbCBpblZpZXdTb3Vy
Y2VNb2RlKQogewogICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKSB7Ci0gICAgICAgIGlmICh0eXBl
ID09ICJ0ZXh0L2h0bWwiIHx8IHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfHwgdHlw
ZSA9PSAiaW1hZ2Uvc3ZnK3htbCIgfHwgaXNUZXh0TUlNRVR5cGUodHlwZSkgfHwgaXNYTUxNSU1F
VHlwZSh0eXBlKSkKKyAgICAgICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIgfHwgdHlwZSA9PSAi
YXBwbGljYXRpb24veGh0bWwreG1sIiB8fCB0eXBlID09ICJpbWFnZS9zdmcreG1sIiB8fCBpc1Rl
eHRNSU1FVHlwZSh0eXBlKSB8fCBpc1hNTE1JTUVUeXBlKHR5cGUpCisjaWYgRU5BQkxFKFhIVE1M
TVApCisgICAgICAgICAgICB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3ht
bCIKKyNlbmRpZgorICAgICAgICAgICApCiAgICAgICAgICAgICByZXR1cm4gSFRNTFZpZXdTb3Vy
Y2VEb2N1bWVudDo6Y3JlYXRlKGZyYW1lLCB0eXBlKTsKICAgICB9CiAKICAgICAvLyBQbHVnaW5z
IGNhbm5vdCB0YWtlIEhUTUwgYW5kIFhIVE1MIGZyb20gdXMsIGFuZCB3ZSBkb24ndCBldmVuIG5l
ZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Z2luIGRhdGFiYXNlIGZvciB0aG9zZS4KICAgICBpZiAo
dHlwZSA9PSAidGV4dC9odG1sIikKICAgICAgICAgcmV0dXJuIEhUTUxEb2N1bWVudDo6Y3JlYXRl
KGZyYW1lKTsKLSAgICBpZiAodHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwreG1sIikKKyAgICBp
ZiAodHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwreG1sIgorI2lmIEVOQUJMRShYSFRNTE1QKQor
ICAgICAgICB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCIKKyNlbmRp
ZgorICAgICAgICApCiAgICAgICAgIHJldHVybiBEb2N1bWVudDo6Y3JlYXRlWEhUTUwoZnJhbWUp
OwogCiAjaWYgRU5BQkxFKFdNTCkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQzODE5KQorKysg
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAog
ICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdo
dCAoQykgMjAwOCBEYXZpZCBMZXZpbiAobGV2aW5AY2hyb21pdW0ub3JnKQogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTE2NSw2ICsxNjUsMTAgQEAKICNpbmNsdWRlICJXTUxOYW1lcy5oIgogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MTm9TY3JpcHRFbGVtZW50LmgiCisjZW5k
aWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBu
YW1lc3BhY2UgVW5pY29kZTsKQEAgLTM4Niw2ICszOTAsOSBAQCBEb2N1bWVudDo6RG9jdW1lbnQo
RnJhbWUqIGZyYW1lLCBib29sIGlzCiAKICAgICBzdGF0aWMgaW50IGRvY0lEID0gMDsKICAgICBt
X2RvY0lEID0gZG9jSUQrKzsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBtX3Nob3VsZFByb2Nl
c3NOb1NjcmlwdEVsZW1lbnQgPSBzZXR0aW5ncygpICYmICFzZXR0aW5ncygpLT5pc0phdmFTY3Jp
cHRFbmFibGVkKCk7CisjZW5kaWYKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVtb3ZlZExhc3RSZWYo
KQpAQCAtNDQxOCw0ICs0NDI1LDE0IEBAIHZvaWQgRG9jdW1lbnQ6OmRpc3BsYXlCdWZmZXJNb2Rp
ZmllZEJ5RW4KICAgICAgICAgbV9kZWNvZGVyLT5lbmNvZGluZygpLmRpc3BsYXlCdWZmZXIoYnVm
ZmVyLCBsZW4pOwogfQogCisjaWYgRU5BQkxFKFhIVE1MTVApCitib29sIERvY3VtZW50Ojppc1hI
VE1MTVBEb2N1bWVudCgpIGNvbnN0Cit7CisgICAgLy8gQXMgcGVyIHNlY3Rpb24gNy4yIG9mIE9N
QS1XQVAtWEhUTUxNUC1WMV8xLTIwMDYxMDIwLUEucGRmLCBhIGNvbmZvcm1pbmcgdXNlciBhZ2Vu
dAorICAgIC8vIE1VU1QgYWNjZXB0IFhIVE1MTVAgZG9jdW1lbnQgaWRlbnRpZmllZCBhcyAiYXBw
bGljYXRpb24vdm5kLndhcC54aHRtbCt4bWwiCisgICAgLy8gYW5kIFNIT1VMRCBhY2NlcHQgaXQg
aWRlbnRpZmllZCBhcyAiYXBwbGljYXRpb24veGh0bWwreG1sIgorICAgIHJldHVybiBmcmFtZSgp
LT5sb2FkZXIoKS0+cmVzcG9uc2VNSU1FVHlwZSgpID09ICJhcHBsaWNhdGlvbi92bmQud2FwLnho
dG1sK3htbCIgfHwgZnJhbWUoKS0+bG9hZGVyKCktPnJlc3BvbnNlTUlNRVR5cGUoKSA9PSAiYXBw
bGljYXRpb24veGh0bWwreG1sIjsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxNyw2ICszMTcsMTEg
QEAgcHVibGljOgogI2lmIEVOQUJMRShXTUwpCiAgICAgdmlydHVhbCBib29sIGlzV01MRG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCisjaWYgRU5BQkxFKFhIVE1MTVAp
CisgICAgYm9vbCBpc1hIVE1MTVBEb2N1bWVudCgpIGNvbnN0OyAKKyAgICBib29sIHNob3VsZFBy
b2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFByb2Nlc3NOb1Nj
cmlwdEVsZW1lbnQ7IH0KKyAgICB2b2lkIHNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQo
Ym9vbCBzaG91bGREbykgeyBtX3Nob3VsZFByb2Nlc3NOb1NjcmlwdEVsZW1lbnQgPSBzaG91bGRE
bzsgfQorI2VuZGlmCiAgICAgdmlydHVhbCBib29sIGlzRnJhbWVTZXQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIAogICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlU2VsZWN0b3I7IH0KQEAgLTk0Niw2ICs5NTEsMTAgQEAgcHJp
dmF0ZToKIAogICAgIFN0cmluZyBtX2NvbnRlbnRMYW5ndWFnZTsKIAorI2lmIEVOQUJMRShYSFRN
TE1QKQorICAgIGJvb2wgbV9zaG91bGRQcm9jZXNzTm9TY3JpcHRFbGVtZW50OworI2VuZGlmCisK
IHB1YmxpYzoKICAgICBib29sIGluUGFnZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9pblBhZ2VD
YWNoZTsgfQogICAgIHZvaWQgc2V0SW5QYWdlQ2FjaGUoYm9vbCBmbGFnKTsKSW5kZXg6IFdlYkNv
cmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZp
c2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
LDYgKzQsNyBAQAogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHly
aWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04OSw2ICs5
MCwxMCBAQAogI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxF
KFhIVE1MTVApCisjaW5jbHVkZSAiSFRNTE5vU2NyaXB0RWxlbWVudC5oIgorI2VuZGlmCisKICNk
ZWZpbmUgRFVNUF9OT0RFX1NUQVRJU1RJQ1MgMAogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAt
MTI3Niw3ICsxMjgxLDcgQEAgdm9pZCBOb2RlOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCkKICAg
ICAKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigp
OwogICAgIGlmIChwYXJlbnRSZW5kZXJlciAmJiBwYXJlbnRSZW5kZXJlci0+Y2FuSGF2ZUNoaWxk
cmVuKCkKLSNpZiBFTkFCTEUoU1ZHKQorI2lmIEVOQUJMRShTVkcpIHx8IEVOQUJMRShYSFRNTE1Q
KQogICAgICAgICAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGhpcykKICNl
bmRpZgogICAgICAgICApIHsKQEAgLTEyOTcsOCArMTMwMiwxMyBAQCB2b2lkIE5vZGU6OmNyZWF0
ZVJlbmRlcmVySWZOZWVkZWQoKQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBOb2RlOjpzdHls
ZUZvclJlbmRlcmVyKCkKIHsKLSAgICBpZiAoaXNFbGVtZW50Tm9kZSgpKQorICAgIGlmIChpc0Vs
ZW1lbnROb2RlKCkpIHsKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAgICAgaWYgKGxvY2FsTmFt
ZSgpID09IEhUTUxOYW1lczo6bm9zY3JpcHRUYWcubG9jYWxOYW1lKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQoc3RhdGlj
X2Nhc3Q8SFRNTE5vU2NyaXB0RWxlbWVudCo+KHRoaXMpLCAwLCBmYWxzZSk7CisjZW5kaWYKICAg
ICAgICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50
KHN0YXRpY19jYXN0PEVsZW1lbnQqPih0aGlzKSk7CisgICAgfQogICAgIHJldHVybiBwYXJlbnRO
b2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpID8gcGFyZW50Tm9kZSgpLT5yZW5kZXJl
cigpLT5zdHlsZSgpIDogMDsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gNDM4MTkpCisrKyBXZWJDb3JlL2Rv
bS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTQyNyw3ICs0MjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVS
ZW5kZXJlcklmTmVlZGVkKCk7CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JS
ZW5kZXJlcigpOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxl
Kik7Ci0jaWYgRU5BQkxFKFNWRykKKyNpZiBFTkFCTEUoU1ZHKSB8fCBFTkFCTEUoWEhUTUxNUCkK
ICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKSW5kZXg6IFdlYkNvcmUvZG9t
L1hNTFRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5o
CShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBT
YW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03Miw2ICs3
MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9j
dW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQogICAg
ICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3Vt
ZW50OyB9CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIHZvaWQgc2V0SXNYSFRNTE1QRG9j
dW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTE1QRG9jdW1lbnQgPSBpc1hIVE1MOyB9Cisg
ICAgICAgIGJvb2wgaXNYSFRNTE1QRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxN
UERvY3VtZW50OyB9CisjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAgICAgICBib29sIGlzV01M
RG9jdW1lbnQoKSBjb25zdDsKICNlbmRpZgpAQCAtMTQ5LDYgKzE1NCwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgbV9zYXdYU0xUcmFuc2Zvcm07CiAgICAgICAgIGJvb2wgbV9zYXdGaXJzdEVs
ZW1lbnQ7CiAgICAgICAgIGJvb2wgbV9pc1hIVE1MRG9jdW1lbnQ7CisjaWYgRU5BQkxFKFhIVE1M
TVApCisgICAgICAgIGJvb2wgbV9pc1hIVE1MTVBEb2N1bWVudDsKKyAgICAgICAgYm9vbCBtX2hh
c0RvY1R5cGVEZWNsYXJhdGlvbjsKKyNlbmRpZgogCiAgICAgICAgIGJvb2wgbV9wYXJzZXJQYXVz
ZWQ7CiAgICAgICAgIGJvb2wgbV9yZXF1ZXN0aW5nU2NyaXB0OwpJbmRleDogV2ViQ29yZS9kb20v
WE1MVG9rZW5pemVyTGlieG1sMi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9r
ZW5pemVyTGlieG1sMi5jcHAJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9kb20vWE1MVG9r
ZW5pemVyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTYzLDYgKzYzLDExIEBACiAjaW5j
bHVkZSA8bGlieHNsdC94c2x0Lmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShYSFRNTE1QKQorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCisjZW5k
aWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTI2
LDYgKzUzMSwxMCBAQCBYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1bWVudCogX2RvCiAg
ICAgLCBtX3Nhd1hTTFRyYW5zZm9ybShmYWxzZSkKICAgICAsIG1fc2F3Rmlyc3RFbGVtZW50KGZh
bHNlKQogICAgICwgbV9pc1hIVE1MRG9jdW1lbnQoZmFsc2UpCisjaWYgRU5BQkxFKFhIVE1MTVAp
CisgICAgLCBtX2lzWEhUTUxNUERvY3VtZW50KGZhbHNlKQorICAgICwgbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24oZmFsc2UpCisjZW5kaWYKICAgICAsIG1fcGFyc2VyUGF1c2VkKGZhbHNlKQogICAg
ICwgbV9yZXF1ZXN0aW5nU2NyaXB0KGZhbHNlKQogICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2Up
CkBAIC01NDksNiArNTU4LDEwIEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKERvY3VtZW50
RnJhZ20KICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQogICAgICwgbV9zYXdGaXJzdEVs
ZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxzZSkKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2UpCisgICAgLCBtX2hhc0Rv
Y1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgogICAgICwgbV9wYXJzZXJQYXVzZWQoZmFs
c2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCiAgICAgLCBtX2ZpbmlzaENhbGxl
ZChmYWxzZSkKQEAgLTcwNCw4ICs3MTcsMTMgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RWxl
bWVudE5zKGNvbnN0IAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBpc0ZpcnN0
RWxlbWVudCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRy
dWU7CisjaWYgRU5BQkxFKFhIVE1MTVApIAorICAgIC8vIGNoZWNrIGlmIHRoZSBET0NUWVBFIERl
Y2xhcmF0aW9uIG9mIFhIVE1MTVAgZG9jdW1lbnQgZXhpc3RzCisgICAgaWYgKCFtX2hhc0RvY1R5
cGVEZWNsYXJhdGlvbiAmJiBtX2RvYy0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgeworICAgICAgICBo
YW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgogCiAg
ICAgZXhpdFRleHQoKTsKIApAQCAtNzIwLDYgKzczOCwyNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6
c3RhcnRFbGVtZW50TnMoY29uc3QgCiAgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3Bh
Y2VVUkk7CiAgICAgfQogCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgaWYgKCFtX3Nhd0ZpcnN0
RWxlbWVudCAmJiBpc1hIVE1MTVBEb2N1bWVudCgpKSB7CisgICAgICAgIC8vIEFzIHBlciB0aGUg
c2VjdGlvbiA3LjEgb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYsIAorICAg
ICAgICAvLyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJvb3QgZWxlbWVudCBNVVNUIGJl
ICdodG1sJyBhbmQgCisgICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBu
YW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJyAKKyAgICAgICAgLy8gTVVTVCBiZSAn
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKKyAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBI
VE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9y
KGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1sJyBhcyByb290IGVsZW1lbnQu
IiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodXJpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2Rl
ZmF1bHROYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJOyAKKyAgICAg
ICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsKKyAgICAgICAgfQorICAgIH0KKyNl
bmRpZgorCisgICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nhd0ZpcnN0RWxlbWVudDsKKyAg
ICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisKICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHBy
ZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0g
bV9kb2MtPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUpOwogICAgIGlmICghbmV3RWxlbWVudCkg
ewpAQCAtNzk4LDIyICs4MzcsMjggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OmVuZEVsZW1lbnROcygp
CiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTY3JpcHQpOwogICAgIG1fcmVxdWVzdGluZ1NjcmlwdCA9
IHRydWU7CiAKLSAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNvdXJjZUF0
dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgewotICAgICAg
ICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKLSAgICAgICAgU3RyaW5nIHNjcmlwdENoYXJz
ZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAgICAgIGlmICgobV9wZW5k
aW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlwdEhyZWYs
IHNjcmlwdENoYXJzZXQpKSkgewotICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVu
dDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAg
ICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxyZWFk
eSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAgICAgICBpZiAobV9wZW5kaW5n
U2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAgICAgICB9IGVsc2Ug
Ci0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotICAgIH0gZWxzZQotICAgICAgICBt
X3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCksIG1fc2NyaXB0U3Rh
cnRMaW5lKSk7Ci0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAoIXNjcmlwdEVsZW1lbnQt
PnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICAgICAgbV9kb2MtPnNldFNob3VsZFBy
b2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisgICAgZWxzZSAKKyNlbmRpZgorICAgIHsKKyAg
ICAgICAgU3RyaW5nIHNjcmlwdEhyZWYgPSBzY3JpcHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1dGVW
YWx1ZSgpOworICAgICAgICBpZiAoIXNjcmlwdEhyZWYuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKKyAgICAgICAgICAgIFN0cmluZyBzY3JpcHRD
aGFyc2V0ID0gc2NyaXB0RWxlbWVudC0+c2NyaXB0Q2hhcnNldCgpOworICAgICAgICAgICAgaWYg
KChtX3BlbmRpbmdTY3JpcHQgPSBtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQoc2Ny
aXB0SHJlZiwgc2NyaXB0Q2hhcnNldCkpKSB7CisgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVt
ZW50ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENsaWVu
dCh0aGlzKTsKKworICAgICAgICAgICAgICAgIC8vIG1fcGVuZGluZ1NjcmlwdCB3aWxsIGJlIDAg
aWYgc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZCBhbmQgcmVmKCkgZXhlY3V0ZWQgaXQKKyAgICAg
ICAgICAgICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQorICAgICAgICAgICAgICAgICAgICBwYXVz
ZVBhcnNpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAgICBtX3Njcmlw
dEVsZW1lbnQgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUo
KS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50
LT5zY3JpcHRDb250ZW50KCksIG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAg
ICB9CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgc2V0Q3VycmVudE5vZGUo
cGFyZW50LmdldCgpKTsKIH0KQEAgLTk0Miw2ICs5ODcsOSBAQCB2b2lkIFhNTFRva2VuaXplcjo6
c3RhcnREb2N1bWVudChjb25zdCB4CiB2b2lkIFhNTFRva2VuaXplcjo6ZW5kRG9jdW1lbnQoKQog
ewogICAgIGV4aXRUZXh0KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgbV9oYXNEb2NUeXBl
RGVjbGFyYXRpb24gPSBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIFhNTFRva2VuaXplcjo6aW50
ZXJuYWxTdWJzZXQoY29uc3QgeG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJ
RCwgY29uc3QgeG1sQ2hhciogc3lzdGVtSUQpCkBAIC05NTUsOCArMTAwMywxMCBAQCB2b2lkIFhN
TFRva2VuaXplcjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgCiAgICAgfQogICAgIAogICAgIGlmICht
X2RvYykgewotI2lmIEVOQUJMRShXTUwpCisjaWYgRU5BQkxFKFdNTCkgfHwgRU5BQkxFKFhIVE1M
TVApCiAgICAgICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQpOworI2VuZGlm
CisjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgaWYgKGlzV01MRG9jdW1lbnQoKQogICAgICAgICAg
ICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iCiAgICAgICAgICAg
ICAmJiBleHRJZCAhPSAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiIKQEAgLTk2NCw4ICsx
MDE0LDMxIEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbnRlcm5hbFN1YnNldChjb25zdCAKICAgICAg
ICAgICAgICYmIGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjAvL0VOIikKICAgICAg
ICAgICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBEVEQgUHVibGljIElEIiwgbGluZU51
bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAg
ICAgICAgU3RyaW5nIGR0ZE5hbWUgPSB0b1N0cmluZyhuYW1lKTsKKyAgICAgICAgaWYgKGV4dElk
ID09ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIgorICAgICAgICAgICAg
fHwgZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8vRU4iKSB7Cisg
ICAgICAgICAgICBpZiAoZHRkTmFtZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkp
IHsKKyAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkludmFsaWQgRE9DVFlQRSBk
ZWNsYXJhdGlvbiwgZXhwZWN0ZWQgJ2h0bWwnIGFzIHJvb3QgZWxlbWVudC4iLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9IAorCisgICAgICAgICAgICBpZiAobV9kb2MtPmlzWEhUTUxNUERvY3VtZW50KCkpCisgICAg
ICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQodHJ1ZSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOworCisgICAgICAgICAg
ICBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyNlbmRpZgogCisj
aWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIG1fZG9jLT5hZGRDaGlsZChEb2N1bWVudFR5cGU6
OmNyZWF0ZShtX2RvYywgZHRkTmFtZSwgZXh0SWQsIHRvU3RyaW5nKHN5c3RlbUlEKSkpOworI2Vs
aWYgRU5BQkxFKFdNTCkKKyAgICAgICAgbV9kb2MtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3Jl
YXRlKG1fZG9jLCB0b1N0cmluZyhuYW1lKSwgZXh0SWQsIHRvU3RyaW5nKHN5c3RlbUlEKSkpOwor
I2Vsc2UKICAgICAgICAgbV9kb2MtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9j
LCB0b1N0cmluZyhuYW1lKSwgdG9TdHJpbmcoZXh0ZXJuYWxJRCksIHRvU3RyaW5nKHN5c3RlbUlE
KSkpOworI2VuZGlmCiAgICAgfQogfQogCkBAIC0xMTA4LDYgKzExODEsOSBAQCBzdGF0aWMgeG1s
RW50aXR5UHRyIGdldEVudGl0eUhhbmRsZXIodm9pCiAKICAgICBlbnQgPSB4bWxHZXREb2NFbnRp
dHkoY3R4dC0+bXlEb2MsIG5hbWUpOwogICAgIGlmICghZW50ICYmIChnZXRUb2tlbml6ZXIoY2xv
c3VyZSktPmlzWEhUTUxEb2N1bWVudCgpCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICAg
ICAgICAgIHx8IGdldFRva2VuaXplcihjbG9zdXJlKS0+aXNYSFRNTE1QRG9jdW1lbnQoKQorI2Vu
ZGlmCiAjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgICAgICAgICAgfHwgZ2V0VG9rZW5pemVyKGNs
b3N1cmUpLT5pc1dNTERvY3VtZW50KCkKICNlbmRpZgpAQCAtMTE0OSw3ICsxMjI1LDEwIEBAIHN0
YXRpYyB2b2lkIGV4dGVybmFsU3Vic2V0SGFuZGxlcih2b2lkKiAKICAgICAgICAgfHwgKGV4dElk
ID09ICItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIikKICAgICAgICAgfHwgKGV4dElk
ID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wLy9FTiIpCiAgICAgICAg
IHx8IChleHRJZCA9PSAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xIHBsdXMgTWF0aE1MIDIuMCBwbHVz
IFNWRyAxLjEvL0VOIikKLSAgICAgICAgfHwgKGV4dElkID09ICItLy9XQVBGT1JVTS8vRFREIFhI
VE1MIE1vYmlsZSAxLjAvL0VOIikpCisjaWYgIUVOQUJMRShYSFRNTE1QKQorICAgICAgICB8fCAo
ZXh0SWQgPT0gIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKQorI2VuZGlm
CisgICAgICAgKQogICAgICAgICBnZXRUb2tlbml6ZXIoY2xvc3VyZSktPnNldElzWEhUTUxEb2N1
bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGllcyBvciBub3QuCiB9
CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDcgKzUsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICog
Q29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Niw2ICs1NiwxMSBA
QAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
KyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MU2NyaXB0RWxlbWVudC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg1LDYgKzkwLDEwIEBAIFhNTFRva2VuaXplcjo6WE1MVG9r
ZW5pemVyKERvY3VtZW50KiBfZG8KICAgICAsIG1fc2F3WFNMVHJhbnNmb3JtKGZhbHNlKQogICAg
ICwgbV9zYXdGaXJzdEVsZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzWEhUTUxEb2N1bWVudChmYWxz
ZSkKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICAsIG1faXNYSFRNTE1QRG9jdW1lbnQoZmFsc2Up
CisgICAgLCBtX2hhc0RvY1R5cGVEZWNsYXJhdGlvbihmYWxzZSkKKyNlbmRpZgogICAgICwgbV9w
YXJzZXJQYXVzZWQoZmFsc2UpCiAgICAgLCBtX3JlcXVlc3RpbmdTY3JpcHQoZmFsc2UpCiAgICAg
LCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKQEAgLTExMCw2ICsxMTksMTAgQEAgWE1MVG9rZW5pemVy
OjpYTUxUb2tlbml6ZXIoRG9jdW1lbnRGcmFnbQogICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFs
c2UpCiAgICAgLCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKICAgICAsIG1faXNYSFRNTERvY3Vt
ZW50KGZhbHNlKQorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICwgbV9pc1hIVE1MTVBEb2N1bWVu
dChmYWxzZSkKKyAgICAsIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uKGZhbHNlKQorI2VuZGlmCiAg
ICAgLCBtX3BhcnNlclBhdXNlZChmYWxzZSkKICAgICAsIG1fcmVxdWVzdGluZ1NjcmlwdChmYWxz
ZSkKICAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQpAQCAtNDE5LDYgKzQzMiwxMiBAQCB2b2lk
IFhNTFRva2VuaXplcjo6cGFyc2UoKQogICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpTdGFydEVsZW1lbnQ6IHsKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyAgICAgICAgICAgIGlmIChtX2RvYy0+aXNYSFRNTE1QRG9jdW1lbnQoKSAmJiAh
bV9oYXNEb2NUeXBlRGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihm
YXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51
bWJlcigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAK
ICAgICAgICAgICAgIHBhcnNlU3RhcnRFbGVtZW50KCk7CiAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNDQzLDEyICs0NjIsMTggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlKCkK
ICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQ6IHsKICAgICAgICAgICAgIC8vcURl
YnVnKCk8PCItLS0tLS0tLS0tLS0tIERURCI7CiAgICAgICAgICAgICBwYXJzZUR0ZCgpOworI2lm
IEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAgbV9oYXNEb2NUeXBlRGVjbGFyYXRpb24gPSB0
cnVlOworI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFFYbWxTdHJlYW1SZWFkZXI6OkVudGl0eVJlZmVyZW5jZTogewogICAgICAgICAgICAgLy9xRGVi
dWcoKTw8Ii0tLS0tLS0tLS0gRU5USVRZID0gIjw8bV9zdHJlYW0ubmFtZSgpLnRvU3RyaW5nKCkK
ICAgICAgICAgICAgIC8vICAgICAgICA8PCIsIHQgPSAiPDxtX3N0cmVhbS50ZXh0KCkudG9TdHJp
bmcoKTsKICAgICAgICAgICAgIGlmIChpc1hIVE1MRG9jdW1lbnQoKQorI2lmIEVOQUJMRShYSFRN
TE1QKQorICAgICAgICAgICAgICAgIHx8IGlzWEhUTUxNUERvY3VtZW50KCkKKyNlbmRpZgogI2lm
IEVOQUJMRShXTUwpCiAgICAgICAgICAgICAgICAgfHwgaXNXTUxEb2N1bWVudCgpCiAjZW5kaWYK
QEAgLTUwOCw5ICs1MzMsNiBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VTdGFydEVsZW1lbnQo
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFt
X3Nhd0ZpcnN0RWxlbWVudDsKLSAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7Ci0KICAgICBl
eGl0VGV4dCgpOwogCiAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IG1fc3RyZWFtLm5hbWUoKTsKQEAg
LTUyOSw2ICs1NTEsMjggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmIEVOQUJMRShYSFRNTE1QKQorICAgIGlmICgh
bV9zYXdGaXJzdEVsZW1lbnQgJiYgaXNYSFRNTE1QRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBB
cyBwZXIgNy4xIHNlY3Rpb24gb2YgT01BLVdBUC1YSFRNTE1QLVYxXzEtMjAwNjEwMjAtQS5wZGYs
IAorICAgICAgICAvLyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJvb3QgZWxlbWVudCBN
VVNUIGJlICdodG1sJyBhbmQgCisgICAgICAgIC8vIGVuc3VyZSB0aGUgbmFtZSBvZiB0aGUgZGVm
YXVsdCBuYW1lc3BhY2Ugb24gdGhlIHJvb3QgZWxtZW50ICdodG1sJyAKKyAgICAgICAgLy8gTVVT
VCBiZSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcKKyAgICAgICAgaWYgKGxvY2FsTmFt
ZSAhPSBIVE1MTmFtZXM6Omh0bWxUYWcubG9jYWxOYW1lKCkpIHsKKyAgICAgICAgICAgIGhhbmRs
ZUVycm9yKGZhdGFsLCAiWEhUTUxNUCBkb2N1bWVudCBleHBlY3RzICdodG1sJyBhcyByb290IGVs
ZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0gCisKKyAgICAgICAgaWYgKHVyaS5pc051bGwoKSkgeworICAgICAgICAg
ICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSTsg
CisgICAgICAgICAgICB1cmkgPSBtX2RlZmF1bHROYW1lc3BhY2VVUkk7CisgICAgICAgICAgICBt
X3N0cmVhbS5hZGRFeHRyYU5hbWVzcGFjZURlY2xhcmF0aW9uKFFYbWxTdHJlYW1OYW1lc3BhY2VE
ZWNsYXJhdGlvbihwcmVmaXgsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpKTsKKyAgICAg
ICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgYm9vbCBpc0ZpcnN0RWxlbWVudCA9ICFtX3Nhd0Zp
cnN0RWxlbWVudDsKKyAgICBtX3Nhd0ZpcnN0RWxlbWVudCA9IHRydWU7CisKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBoYW5kbGVFbGVtZW50TmFtZXNwYWNlcyhuZXdFbGVtZW50Lmdl
dCgpLCBtX3N0cmVhbS5uYW1lc3BhY2VEZWNsYXJhdGlvbnMoKSwgZWMpOwogICAgIGlmIChlYykg
ewpAQCAtNTgzLDIyICs2MjcsMjggQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxlbWVu
dCgpCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTY3JpcHQpOwogICAgIG1fcmVxdWVzdGluZ1Njcmlw
dCA9IHRydWU7CiAKLSAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNvdXJj
ZUF0dHJpYnV0ZVZhbHVlKCk7Ci0gICAgaWYgKCFzY3JpcHRIcmVmLmlzRW1wdHkoKSkgewotICAg
ICAgICAvLyB3ZSBoYXZlIGEgc3JjIGF0dHJpYnV0ZSAKLSAgICAgICAgU3RyaW5nIHNjcmlwdENo
YXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7Ci0gICAgICAgIGlmICgobV9w
ZW5kaW5nU2NyaXB0ID0gbV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlwdEhy
ZWYsIHNjcmlwdENoYXJzZXQpKSkgewotICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxl
bWVudDsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwotCi0g
ICAgICAgICAgICAvLyBtX3BlbmRpbmdTY3JpcHQgd2lsbCBiZSAwIGlmIHNjcmlwdCB3YXMgYWxy
ZWFkeSBsb2FkZWQgYW5kIHJlZigpIGV4ZWN1dGVkIGl0Ci0gICAgICAgICAgICBpZiAobV9wZW5k
aW5nU2NyaXB0KQotICAgICAgICAgICAgICAgIHBhdXNlUGFyc2luZygpOwotICAgICAgICB9IGVs
c2UgCi0gICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwotICAgIH0gZWxzZQotICAgICAg
ICBtX3ZpZXctPmZyYW1lKCktPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNv
ZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBtX2RvYy0+dXJsKCksIG1fc2NyaXB0
U3RhcnRMaW5lKSk7Ci0KKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyAgICBpZiAoIXNjcmlwdEVsZW1l
bnQtPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKKyAgICAgICAgbV9kb2MtPnNldFNob3Vs
ZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisgICAgZWxzZQorI2VuZGlmCisgICAgewor
ICAgICAgICBTdHJpbmcgc2NyaXB0SHJlZiA9IHNjcmlwdEVsZW1lbnQtPnNvdXJjZUF0dHJpYnV0
ZVZhbHVlKCk7CisgICAgICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIC8vIHdlIGhhdmUgYSBzcmMgYXR0cmlidXRlIAorICAgICAgICAgICAgU3RyaW5nIHNjcmlw
dENoYXJzZXQgPSBzY3JpcHRFbGVtZW50LT5zY3JpcHRDaGFyc2V0KCk7CisgICAgICAgICAgICBp
ZiAoKG1fcGVuZGluZ1NjcmlwdCA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChz
Y3JpcHRIcmVmLCBzY3JpcHRDaGFyc2V0KSkpIHsKKyAgICAgICAgICAgICAgICBtX3NjcmlwdEVs
ZW1lbnQgPSBlbGVtZW50OworICAgICAgICAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+YWRkQ2xp
ZW50KHRoaXMpOworCisgICAgICAgICAgICAgICAgLy8gbV9wZW5kaW5nU2NyaXB0IHdpbGwgYmUg
MCBpZiBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkIGFuZCByZWYoKSBleGVjdXRlZCBpdAorICAg
ICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCisgICAgICAgICAgICAgICAgICAgIHBh
dXNlUGFyc2luZygpOworICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgICAgIG1fc2Ny
aXB0RWxlbWVudCA9IDA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV92aWV3LT5mcmFt
ZSgpLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdEVsZW1l
bnQtPnNjcmlwdENvbnRlbnQoKSwgbV9kb2MtPnVybCgpLCBtX3NjcmlwdFN0YXJ0TGluZSkpOwor
ICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBzZXRDdXJyZW50Tm9k
ZShwYXJlbnQuZ2V0KCkpOwogfQpAQCAtNjYyLDYgKzcxMiw5IEBAIHZvaWQgWE1MVG9rZW5pemVy
OjpwYXJzZUNvbW1lbnQoKQogCiB2b2lkIFhNTFRva2VuaXplcjo6ZW5kRG9jdW1lbnQoKQogewor
I2lmIEVOQUJMRShYSFRNTE1QKQorICAgIG1faGFzRG9jVHlwZURlY2xhcmF0aW9uID0gZmFsc2U7
CisjZW5kaWYKIH0KIAogYm9vbCBYTUxUb2tlbml6ZXI6Omhhc0Vycm9yKCkgY29uc3QKQEAgLTc1
NSw5ICs4MDgsMjUgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRHRkKCkKICAgICAgICAgfHwg
KHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFREIFhIVE1MIEJhc2ljIDEuMC8v
RU4iKSkKICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1czQy8vRFRE
IFhIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAvL0VOIikpCiAgICAgICAgIHx8IChwdWJsaWNJZCA9
PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAxLjEgcGx1cyBNYXRoTUwgMi4wIHBs
dXMgU1ZHIDEuMS8vRU4iKSkKLSAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmco
Ii0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkpIHsKKyNpZiAhRU5BQkxF
KFhIVE1MTVApCisgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBG
T1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpCisjZW5kaWYKKyAgICAgICApCiAgICAg
ICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBl
bnRpdGllcyBvciBub3QuCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgZWxzZSBpZiAoKHB1Ymxp
Y0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMS8v
RU4iKSkKKyAgICAgICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygiLS8vV0FQ
Rk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgeworICAgICAgICBpZiAoQXRvbWlj
U3RyaW5nKG5hbWUpICE9IEhUTUxOYW1lczo6aHRtbFRhZy5sb2NhbE5hbWUoKSkgeworICAgICAg
ICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUgZGVjbGFyYXRpb24sIGV4
cGVjdGVkICdodG1sJyBhcyByb290IGVsZW1lbnQuIiwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1i
ZXIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gCisKKyAgICAgICAgaWYgKG1f
ZG9jLT5pc1hIVE1MTVBEb2N1bWVudCgpKSAvLyBjaGVjayBpZiB0aGUgTUlNRSB0eXBlIGlzIGNv
cnJlY3Qgd2l0aCB0aGlzIG1ldGhvZAorICAgICAgICAgICAgc2V0SXNYSFRNTE1QRG9jdW1lbnQo
dHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVl
KTsKICAgICB9CisjZW5kaWYKICNpZiBFTkFCTEUoV01MKQogICAgIGVsc2UgaWYgKG1fZG9jLT5p
c1dNTERvY3VtZW50KCkKICAgICAgICAgICAgICAmJiBwdWJsaWNJZCAhPSBRTGF0aW4xU3RyaW5n
KCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOIikKQEAgLTc3Miw0ICs4NDEsMyBAQCB2b2lk
IFhNTFRva2VuaXplcjo6cGFyc2VEdGQoKQogfQogfQogCi0KSW5kZXg6IFdlYkNvcmUvZG9tL21h
a2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAkocmV2
aXNpb24gNDM4MTkpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCSh3b3JraW5nIGNvcHkp
CkBAIC0yLDYgKzIsNyBAQAogCiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAwOSwg
SnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorIyBDb3B5cmlnaHQgKEMp
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODMxLDcg
KzgzMiw3IEBAIHN1YiB1c2VzRGVmYXVsdEpTV3JhcHBlcgogICAgIG15ICRuYW1lID0gc2hpZnQ7
CiAKICAgICAjIEEgdGFnIHJldXNlcyB0aGUgZGVmYXVsdCB3cmFwcGVyIGlmIGl0cyBKU0ludGVy
ZmFjZU5hbWUgbWF0Y2hlcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgRWxlbWVudC4KLSAgICByZXR1
cm4gJHRhZ3N7JG5hbWV9eydKU0ludGVyZmFjZU5hbWUnfSBlcSAkcGFyYW1ldGVyc3sibmFtZXNw
YWNlIn0gLiAiRWxlbWVudCI7CisgICAgcmV0dXJuICR0YWdzeyRuYW1lfXsnSlNJbnRlcmZhY2VO
YW1lJ30gZXEgJHBhcmFtZXRlcnN7Im5hbWVzcGFjZSJ9IC4gIkVsZW1lbnQiIHx8ICR0YWdzeyRu
YW1lfXsnSlNJbnRlcmZhY2VOYW1lJ30gZXEgIkhUTUxOb1NjcmlwdEVsZW1lbnQiOwogfQogCiBz
dWIgcHJpbnRXcmFwcGVyRnVuY3Rpb25zCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9u
IDQzODE5KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05ODAsMTEgKzk4MSwxMyBAQCBib29sIEhU
TUxFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuCiAgICAgCiBib29sIEhUTUxFbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkKIHsKKyNpZiAhRU5BQkxFKFhI
VE1MTVApCiAgICAgaWYgKGhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykpIHsKICAgICAgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICAgICAgaWYgKHNl
dHRpbmdzICYmIHNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJl
bmRlcmVySXNOZWVkZWQoc3R5bGUpOwogfQogICAgIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxO
b1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3Jp
cHRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRF
bGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
WEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MTm9TY3JpcHRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJD
U1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworSFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5vU2NyaXB0RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogSFRNTEVsZW1l
bnQodGFnTmFtZSwgZG9jKQoreworICAgIEFTU0VSVChoYXNUYWdOYW1lKG5vc2NyaXB0VGFnKSk7
Cit9CisKK0hUTUxOb1NjcmlwdEVsZW1lbnQ6On5IVE1MTm9TY3JpcHRFbGVtZW50KCkKK3sKK30K
KworYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGls
ZCkKK3sKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSB8fCBpbkJsb2NrVGFnTGlz
dChuZXdDaGlsZCk7IAorfQorCit2b2lkIEhUTUxOb1NjcmlwdEVsZW1lbnQ6OmF0dGFjaCgpCit7
CisgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOworCisgICAgLy8gSWYgbm8gbmVlZCB0byBwcm9j
ZXNzIDxub3NjcmlwdD4sIHdlIGhpZGUgaXQgYnkgc2V0dGluZyBkaXNwbGF5Om5vbmUgdGVtcG9y
YXJpbHkKKyAgICBpZiAoIWRvY3VtZW50KCktPnNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQo
KSkgeworICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpKQorICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+c3R5bGUoKS0+c2V0RGlzcGxheShOT05FKTsKKyAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIH0KK30KKwordm9pZCBIVE1MTm9TY3JpcHRFbGVt
ZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCit7CisgICAgaWYgKCFkb2N1bWVu
dCgpLT5zaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KCkgfHwgIXJlbmRlcmVyKCkgfHwgIXJl
bmRlcmVyKCktPnN0eWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIDxub3Njcmlw
dD4gbmVlZHMgcHJvY2Vzc2luZywgd2UgbWFrZSBpdCB2aXNpYWJsZSBoZXJlLCBpbmNsdWRpbmcg
aXRzIHZpc2libGUgY2hpbGRyZW4KKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVu
ZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FKSB7Cisg
ICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIHJl
bmRlcmVycyBmb3IgaXRzIGNoaWxkcmVuCisgICAgICAgIGlmIChoYXNDaGlsZE5vZGVzKCkpIHsK
KyAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZl
cnNlTmV4dE5vZGUodGhpcykpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5yZW5kZXJlcigpKQor
ICAgICAgICAgICAgICAgICAgICBuLT5jcmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2Jvb2wgSFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hpbGRTaG91bGRDcmVh
dGVSZW5kZXJlcihOb2RlKiBjaGlsZCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+
c2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCgpOworfQorCit9CisjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTm9TY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSFRNTE5vU2NyaXB0
RWxlbWVudF9oCisjZGVmaW5lIEhUTUxOb1NjcmlwdEVsZW1lbnRfaAorCisjaWYgRU5BQkxFKFhI
VE1MTVApCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBIVE1MTm9TY3JpcHRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1Ymxp
YzoKKyAgICBIVE1MTm9TY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgfkhUTUxOb1NjcmlwdEVsZW1lbnQoKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7Cisg
ICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyAgcmV0dXJu
IHRydWU7IH0KK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFBhcnNlci5jcHAJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICAgICAgICAgICAgICAoQykgMTk5
OSwyMDAxIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgICAgICAgICAgICAgIChDKSAyMDAw
LDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKIAogICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtOTA5LDcgKzkxMCw5IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6
Z2V0Tm9kZShUb2sKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChub2JyVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBn
RnVuY3Rpb25NYXAuc2V0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCAmSFRNTFBhcnNl
cjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2spOwogICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KG5v
ZnJhbWVzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vZnJhbWVzQ3JlYXRl
RXJyb3JDaGVjayk7CisjaWYgIUVOQUJMRShYSFRNTE1QKQogICAgICAgICBnRnVuY3Rpb25NYXAu
c2V0KG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6Om5vc2NyaXB0
Q3JlYXRlRXJyb3JDaGVjayk7CisjZW5kaWYKICAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChvbFRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksICZIVE1MUGFyc2VyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVj
ayk7CiAgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQocFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksICZI
VE1MUGFyc2VyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CiAgICAgICAgIGdGdW5jdGlvbk1h
cC5zZXQocGxhaW50ZXh0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgJkhUTUxQYXJzZXI6OnBDbG9z
ZXJDcmVhdGVFcnJvckNoZWNrKTsKQEAgLTEwMTUsMTEgKzEwMTgsMTMgQEAgYm9vbCBIVE1MUGFy
c2VyOjppc0lubGluZShOb2RlKiBub2RlKSBjbwogICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KG5vZnJhbWVzVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUobm9sYXllclRhZykgfHwKICAgICAgICAg
ICAgIGUtPmhhc0xvY2FsTmFtZShub2VtYmVkVGFnKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OworI2lmICFFTkFCTEUoWEhUTUxNUCkKICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShub3Nj
cmlwdFRhZykgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKICAgICAgICAgICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCk7CiAgICAgICAgICAgICBpZiAoc2V0
dGluZ3MgJiYgc2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogICAgIAogICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkocmV2aXNpb24gNDM4MTkpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3MywxMSBA
QCBub2JyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIG5vZW1iZWQgaW50ZXJmYWNlTmFtZT1I
VE1MRWxlbWVudAogbm9mcmFtZXMgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogbm9sYXllciBp
bnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CisjaWYgRU5BQkxFX1hIVE1MTVAKK25vc2NyaXB0IGlu
dGVyZmFjZU5hbWU9SFRNTE5vU2NyaXB0RWxlbWVudAorI2Vsc2UKIG5vc2NyaXB0IGludGVyZmFj
ZU5hbWU9SFRNTEVsZW1lbnQKKyNlbmRpZgogb2JqZWN0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVk
QnlQYXJzZXIKIG9sIGludGVyZmFjZU5hbWU9SFRNTE9MaXN0RWxlbWVudAogb3B0Z3JvdXAgaW50
ZXJmYWNlTmFtZT1IVE1MT3B0R3JvdXBFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1l
bnQKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDQzODE5KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03LDYgKzcsNyBAQAog
ICAgICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0Nyw2ICs0NDgsMTAgQEAgSFRN
TFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gUGFyc2UgbV9zY3JpcHRDb2RlIGNvbnRhaW5pbmcgPHNjcmlwdD4gaW5m
bwogICAgICAgICAgICAgZG9TY3JpcHRFeGVjID0gbV9zY3JpcHROb2RlLT5zaG91bGRFeGVjdXRl
QXNKYXZhU2NyaXB0KCk7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgICAgICBpZiAoIWRv
U2NyaXB0RXhlYykKKyAgICAgICAgICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2Ny
aXB0RWxlbWVudCh0cnVlKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9zY3JpcHROb2RlID0gMDsK
ICAgICAgICAgfQogICAgIH0KQEAgLTE5OTEsNiArMTk5NiwxMCBAQCB2b2lkIEhUTUxUb2tlbml6
ZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50Kj4obi5nZXQoKSktPnNob3VsZEV4ZWN1dGVB
c0phdmFTY3JpcHQoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9u
KHNvdXJjZUNvZGUsIG1fc3RhdGUpOworI2lmIEVOQUJMRShYSFRNTE1QKQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVt
ZW50KHRydWUpOworI2VuZGlmCiAgICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KGV2ZW50TmFt
ZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDM4MTkpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIyMSw3ICsyMjEsMTIgQEAgc3RydWN0IFNjaGVkdWxlZFJlZGlyZWN0aW9u
IHsKICAgICAgICAgQVNTRVJUKHRoaXMtPmZvcm1TdGF0ZSk7CiAgICAgfQogfTsKLQorIAorI2lm
IEVOQUJMRShYSFRNTE1QKQorc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdEFjY2VwdEhlYWRlcltd
ID0gImFwcGxpY2F0aW9uL3htbCxhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCxhcHBsaWNh
dGlvbi94aHRtbCt4bWw7cHJvZmlsZT0naHR0cDovL3d3dy53YXBmb3J1bS5vcmcveGh0bWwnLHRl
eHQvaHRtbDtxPTAuOSx0ZXh0L3BsYWluO3E9MC44LGltYWdlL3BuZywqLyo7cT0wLjUiOworI2Vs
c2UKK3N0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRBY2NlcHRIZWFkZXJbXSA9ICJhcHBsaWNhdGlv
bi94bWwsYXBwbGljYXRpb24veGh0bWwreG1sLHRleHQvaHRtbDtxPTAuOSx0ZXh0L3BsYWluO3E9
MC44LGltYWdlL3BuZywqLyo7cT0wLjUiOworI2VuZGlmCiBzdGF0aWMgZG91YmxlIHN0b3JlZFRp
bWVPZkxhc3RDb21wbGV0ZWRMb2FkOwogc3RhdGljIEZyYW1lTG9hZGVyOjpMb2NhbExvYWRQb2xp
Y3kgbG9jYWxMb2FkUG9saWN5ID0gRnJhbWVMb2FkZXI6OkFsbG93TG9jYWxMb2Fkc0ZvckxvY2Fs
T25seTsKIApAQCAtMzU3Myw3ICszNTc4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6YWRkRXh0cmFG
aWVsZHNUb1JlcXVlcwogICAgIH0KICAgICAKICAgICBpZiAobWFpblJlc291cmNlKQotICAgICAg
ICByZXF1ZXN0LnNldEhUVFBBY2NlcHQoImFwcGxpY2F0aW9uL3htbCxhcHBsaWNhdGlvbi94aHRt
bCt4bWwsdGV4dC9odG1sO3E9MC45LHRleHQvcGxhaW47cT0wLjgsaW1hZ2UvcG5nLCovKjtxPTAu
NSIpOworICAgICAgICByZXF1ZXN0LnNldEhUVFBBY2NlcHQoZGVmYXVsdEFjY2VwdEhlYWRlcik7
CiAKICAgICAvLyBNYWtlIHN1cmUgd2Ugc2VuZCB0aGUgT3JpZ2luIGhlYWRlci4KICAgICBhZGRI
VFRQT3JpZ2luSWZOZWVkZWQocmVxdWVzdCwgU3RyaW5nKCkpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L01JTUVUeXBlUmVnaXN0cnkuY3BwCShyZXZpc2lvbiA0MzgxOSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xOTYsNiArMTk2LDkgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZE5vbklt
YWdlTQogICAgICAgICAidGV4dC8iLAogICAgICAgICAiYXBwbGljYXRpb24veG1sIiwKICAgICAg
ICAgImFwcGxpY2F0aW9uL3hodG1sK3htbCIsCisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAg
ICJhcHBsaWNhdGlvbi92bmQud2FwLnhodG1sK3htbCIsCisjZW5kaWYKICAgICAgICAgImFwcGxp
Y2F0aW9uL3Jzcyt4bWwiLAogICAgICAgICAiYXBwbGljYXRpb24vYXRvbSt4bWwiLAogI2lmIEVO
QUJMRShTVkcpCg==
</data>
<flag name="review"
          id="15395"
          type_id="1"
          status="-"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30492</attachid>
            <date>2009-05-19 21:11:42 -0700</date>
            <delta_ts>2009-05-19 21:40:52 -0700</delta_ts>
            <desc>Patch for fixing the virtual function issue</desc>
            <filename>avoidVirtualFunction.patch</filename>
            <type>text/plain</type>
            <size>3259</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mzg4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDUtMTkgIFlpY2hhbyBZaW4gIDx5aWNoYW8ueWluQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NTIKKyAg
ICAgICAgQ2hhbmdlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBIVE1MTm9TY3JpcHRFbGVtZW50IHRv
IGF2b2lkIHRoZSBwYWluIG9mIAorICAgICAgICBhZGRpbmcgdmlydHVhbCBmdW5jdGlvbiBmb3Ig
WEhUTUxNUCBzdXBwb3J0CisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjpzdHlsZUZvclJlbmRlcmVyKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAg
ICAgICAqIGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1M
Tm9TY3JpcHRFbGVtZW50Lmg6CisKIDIwMDktMDUtMTkgIFlpY2hhbyBZaW4gPHlpY2hhby55aW5A
dG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb3JnZSBTdGFpa29z
LgpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
Tm9kZS5jcHAJKHJldmlzaW9uIDQzODgzKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkwLDYgKzkwLDEwIEBACiAjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoWEhUTUxNUCkKKyNpbmNsdWRlICJIVE1MTm9TY3JpcHRFbGVt
ZW50LmgiCisjZW5kaWYKKwogI2RlZmluZSBEVU1QX05PREVfU1RBVElTVElDUyAwCiAKIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CkBAIC0xMjk4LDggKzEzMDIsMTMgQEAgdm9pZCBOb2RlOjpjcmVhdGVS
ZW5kZXJlcklmTmVlZGVkKCkKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gTm9kZTo6c3R5bGVG
b3JSZW5kZXJlcigpCiB7Ci0gICAgaWYgKGlzRWxlbWVudE5vZGUoKSkKKyAgICBpZiAoaXNFbGVt
ZW50Tm9kZSgpKSB7CisjaWYgRU5BQkxFKFhIVE1MTVApCisgICAgICAgIGlmIChsb2NhbE5hbWUo
KSA9PSBIVE1MTmFtZXM6Om5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpKQorICAgICAgICAgICAgcmV0
dXJuIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHN0YXRpY19j
YXN0PEhUTUxOb1NjcmlwdEVsZW1lbnQqPih0aGlzKSwgMCwgZmFsc2UpOworI2VuZGlmCiAgICAg
ICAgIHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChz
dGF0aWNfY2FzdDxFbGVtZW50Kj4odGhpcykpOworICAgIH0KICAgICByZXR1cm4gcGFyZW50Tm9k
ZSgpICYmIHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKSA/IHBhcmVudE5vZGUoKS0+cmVuZGVyZXIo
KS0+c3R5bGUoKSA6IDA7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDQzODgzKQorKysgV2ViQ29yZS9kb20v
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsMTEgKzQyNiw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlKCk7CiAgICAgdm9pZCBjcmVhdGVSZW5kZXJlcklmTmVl
ZGVkKCk7Ci0jaWYgRU5BQkxFKFhIVE1MTVApCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBzdHlsZUZvclJlbmRlcmVyKCk7Ci0jZWxzZQogICAgIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlRm9yUmVuZGVyZXIoKTsKLSNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCByZW5k
ZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAjaWYgRU5BQkxFKFNWRykgfHwgRU5BQkxFKFhI
VE1MTVApCiAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSop
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDQzODgzKQorKysgV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsNSBAQCBib29sIEhUTUxOb1Njcmlw
dEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlCiAgICAgcmV0dXJuIGRvY3VtZW50KCktPnNob3VsZFBy
b2Nlc3NOb3NjcmlwdEVsZW1lbnQoKTsKIH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gSFRN
TE5vU2NyaXB0RWxlbWVudDo6c3R5bGVGb3JSZW5kZXJlcigpCi17Ci0gICAgcmV0dXJuIGRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIDAsIGZhbHNlKTsK
LX0KLQogfQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmgJKHJldmlz
aW9uIDQzODgzKQorKysgV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2goKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpOwogICAgIHZp
cnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUmVuZGVyZXIoKTsKICAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgIHJldHVybiB0cnVl
OyB9CiB9OwogCg==
</data>
<flag name="review"
          id="15396"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>