<?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>21421</bug_id>
          
          <creation_ts>2008-10-06 17:47:17 -0700</creation_ts>
          <short_desc>Add WebKitCSSMatrix object</short_desc>
          <delta_ts>2009-01-16 07:09:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>dino</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>94307</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-10-06 17:47:17 -0700</bug_when>
    <thetext>This Javascript object takes the output of getComputedStyle().webkitTransform and makes it into a 2D matrix, with several operations. It gives access to the a-f components of the matrix and has methods to perform multiply(), inverse(), translate(), rotate(), and scale().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94309</commentid>
    <comment_count>1</comment_count>
      <attachid>24136</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-10-06 17:53:25 -0700</bug_when>
    <thetext>Created attachment 24136
Patch, including LayoutTest file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94347</commentid>
    <comment_count>2</comment_count>
      <attachid>24136</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-10-07 01:50:25 -0700</bug_when>
    <thetext>Comment on attachment 24136
Patch, including LayoutTest file

Oh yay.  Yet another matrix class. :(

I see some c-style casts in here (float) that should be static_cast or reinterpret_cast

I didn&apos;t look very closely at the patch except to notice that sadly we have yet another matrix class in JavaScript.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94988</commentid>
    <comment_count>3</comment_count>
      <attachid>24136</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-11 13:40:46 -0700</bug_when>
    <thetext>Comment on attachment 24136
Patch, including LayoutTest file

The license for JSWebKitCSSMatrixConstructor.cpp should be the two clause BSD license.  It can be found in ScrollbarThemeComposite.h for example.

+#include &quot;Text.h&quot;
Why is this included?

+    if (args.size() &gt;= 1) {
+        s = args.at(exec, 0)-&gt;toString(exec);
+    }
Braces are not needed.

Why does the JSWebKitCSSMatrixConstructor store a JSDocument if it never seems to use it?  Did you intend to use it when constructing the WebKitCSSMatrix?  Perhaps to enforce strict parsing rules?

In WebKitCSSMatrix.cpp:
+ * This file is part of the DOM implementation for KDE.
+ *
+ * (C) 1999-2003 Lars Knoll (knoll@kde.org)
+ * (C) 2002-2003 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2002, 2005, 2006 Apple Computer, Inc.
Why is this new file giving copyright to these individuals?

+WebKitCSSMatrix::WebKitCSSMatrix() : StyleBase(0)
The initialization list should have on item per line.

+WebKitCSSMatrix::WebKitCSSMatrix(const WebKitCSSMatrix&amp; m) : StyleBase(0)
+{
+    m_matrix = m.m_matrix;
Same issue, and m_matrix can be initialized using initializer list syntax.

+WebKitCSSMatrix::WebKitCSSMatrix(const AffineTransform&amp; m) : StyleBase(0)
+{
+    m_matrix = m;
Same here.

+    CSSParser p(useStrictParsing());
Since a parent is never passed to StyleBase, I think this is always the same.

+WebKitCSSMatrix* WebKitCSSMatrix::multiply(WebKitCSSMatrix* secondMatrix)
+{
+    AffineTransform tmp(secondMatrix-&gt;m_matrix);
+    tmp.multiply(m_matrix);
+    return new WebKitCSSMatrix(tmp);
+}
This should probably return a PassRefPtr and use WebKitCSSMatrix::create instead of new.

+WebKitCSSMatrix* WebKitCSSMatrix::inverse()
+{
+    return new WebKitCSSMatrix(m_matrix.inverse());
+}
Same here.

+WebKitCSSMatrix* WebKitCSSMatrix::translate(float x, float y)
And here.

+{
+    if (isnan(x)) x = 0; 
The x = 0 should be on its own line.

+    if (isnan(y)) y = 0; 
Here too.

+    return new WebKitCSSMatrix(AffineTransform(m_matrix).translate(x,y));
m_matrix is already an AffineTransform so I see no reason to call the constructor.  There is also a missing space after the x,.

+WebKitCSSMatrix* WebKitCSSMatrix::scale(float scaleX, float scaleY)
+{
+    if (isnan(scaleX)) scaleX = 1; 
+    if (isnan(scaleY)) scaleY = scaleX; 
+    return new WebKitCSSMatrix(AffineTransform(m_matrix).scale(scaleX,scaleY));
+}
Same issues as WebKitCSSMatrix::translate


+WebKitCSSMatrix* WebKitCSSMatrix::rotate(float rot)
+{
+    if (isnan(rot))
+        rot = 0;
+    return new WebKitCSSMatrix(AffineTransform(m_matrix).rotate(rot));
+}
No need to call the constructor and it should use PassRefPtr/create.

+typedef int ExceptionCode;
This typedef is not used.

+    float a() const { return (float) m_matrix.a(); }
+    float b() const { return (float) m_matrix.b(); }
+    float c() const { return (float) m_matrix.c(); }
+    float d() const { return (float) m_matrix.d(); }
+    float e() const { return (float) m_matrix.e(); }
+    float f() const { return (float) m_matrix.f(); }
Please use static_cast&lt;float&gt;.

+    void setA(float f)   { m_matrix.setA(f); }
+    void setB(float f)   { m_matrix.setB(f); }
+    void setC(float f)   { m_matrix.setC(f); }
+    void setD(float f)   { m_matrix.setD(f); }
+    void setE(float f)   { m_matrix.setE(f); }
+    void setF(float f)   { m_matrix.setF(f); }
The extra white space is not needed.

+    void                setMatrixValue(const String&amp; string);
+    
+    // this = this * secondMatrix
+    WebKitCSSMatrix*    multiply(WebKitCSSMatrix* secondMatrix);
+    
+    // FIXME: we really should have an exception here, for when matrix is not invertible
+    WebKitCSSMatrix*    inverse();
+    WebKitCSSMatrix*    translate(float x, float y);
+    WebKitCSSMatrix*    scale(float scaleX, float scaleY);
+    WebKitCSSMatrix*    rotate(float rot);
+    
+    const AffineTransform&amp;    transform() { return m_matrix; }
We usually don&apos;t put this kind of whitespace in.

+    WebKitCSSMatrix(const WebKitCSSMatrix&amp; m);
+    WebKitCSSMatrix(const AffineTransform&amp; m);
+    WebKitCSSMatrix(const String&amp; s);
The parameter names are not needed here.

+    interface [
+        InterfaceUUID=349c989e-877f-416e-9cce-ca811e52d9e8,
+        ImplementationUUID=5feb16e6-f441-4b46-9b10-9e833a4dcd1b
+    ] WebKitCSSMatrix {
How were these UUIDs generated.  I think they are probably not necessary as we are not using this class in COM yet.

+        WebKitCSSMatrix multiply(in WebKitCSSMatrix secondMatrix) raises CSSException;
Since the c++ implementation does not raise an exception, this should not be here.  The reason this is probably not showing up is that the idl syntax we use for exceptions is             raises(CSSException); and the parser is lax enough to ignore this.

+        DOMString toString();
This should probably be [DontEnum]

Your test does not test the methods or attributes of the WebKitCSSMatrix object.  I am also curious why you chose floats instead of doubles for the type of the matrix values as it seems like this will cause a lot of unneeded casting as the AffineTransform is in terms of doubles as are JS numbers

r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105812</commentid>
    <comment_count>4</comment_count>
      <attachid>26735</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-14 16:00:35 -0800</bug_when>
    <thetext>Created attachment 26735
Replacement patch

This addresses all the issues raised in the review. But I&apos;ve left the types as floats since this matches some future functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105814</commentid>
    <comment_count>5</comment_count>
      <attachid>26735</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-01-14 16:27:22 -0800</bug_when>
    <thetext>Comment on attachment 26735
Replacement patch

&gt; +WebKitCSSMatrix::WebKitCSSMatrix(const String&amp; s, ExceptionCode&amp; ec) 
&gt; +    : StyleBase(0)
&gt; +{
&gt; +    setMatrixValue(s, ec);
&gt; +}

It is kind of odd to have an ExceptionCode in a constructor, though not necessarily wrong.

&gt; +                ec = SYNTAX_ERR;
&gt; +                return;
&gt; +            }
&gt; +        }
&gt; +        
&gt; +        // set the matrix
&gt; +        m_matrix = t;
&gt; +    } else
&gt; +        if (!string.isEmpty()) // there is something there but parsing failed
&gt; +            ec = SYNTAX_ERR;

Please add braces around this else statement.

&gt; +}
&gt; +
&gt; +// this is a multRight (this = this * secondMatrix)

&quot;This&quot; should be capitalized.

&gt; +PassRefPtr&lt;WebKitCSSMatrix&gt; WebKitCSSMatrix::scale(float scaleX, float scaleY)
&gt; +{
&gt; +    if (isnan(scaleX)) scaleX = 1; 
&gt; +    if (isnan(scaleY)) scaleY = scaleX; 

The body of these if-statements should go on their own lines.

&gt; +module css {
&gt; +
&gt; +    // Introduced in DOM Level ?:
&gt; +    interface [
&gt; +    ] WebKitCSSMatrix {

The [] are not needed.


&gt; ===================================================================
&gt; --- LayoutTests/ChangeLog	(revision 39918)
&gt; +++ LayoutTests/ChangeLog	(working copy)
&gt; @@ -1,3 +1,25 @@
&gt; +2009-01-14  Chris Marrin  &lt;cmarrin@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Implemented 2D WebKitCSSMatrix
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=21421
&gt; +
&gt; +        * animations/combo-transform-translate+scale-expected.txt:
&gt; +        * animations/combo-transform-translate+scale.html:
&gt; +        * transforms/2d/cssmatrix-interface-expected.txt: Added.
&gt; +        * transforms/2d/cssmatrix-interface.xhtml: Added.
&gt; +
&gt; +2009-01-13  Chris Marrin  &lt;cmarrin@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Testcase for implementation of WebKitCSSMatrix
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=21421
&gt; +
&gt; +        * animations/combo-transform-translate+scale-expected.txt: Added.
&gt; +        * animations/combo-transform-translate+scale.html: Added.


Extra changelog entry.


r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105825</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-14 17:31:06 -0800</bug_when>
    <thetext>I made all the requested changes. But I removed the SVGMatrix test from the test case. Simon made the comment that this would cause problems when you build without SVG.

Sending        LayoutTests/ChangeLog
Sending        LayoutTests/animations/combo-transform-translate+scale-expected.txt
Sending        LayoutTests/animations/combo-transform-translate+scale.html
Adding         LayoutTests/transforms/2d/cssmatrix-interface-expected.txt
Adding         LayoutTests/transforms/2d/cssmatrix-interface.xhtml
Sending        WebCore/ChangeLog
Sending        WebCore/DerivedSources.make
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/bindings/js/JSDOMWindowBase.cpp
Adding         WebCore/bindings/js/JSWebKitCSSMatrixConstructor.cpp
Adding         WebCore/bindings/js/JSWebKitCSSMatrixConstructor.h
Sending        WebCore/bindings/objc/DOMInternal.h
Adding         WebCore/css/WebKitCSSMatrix.cpp
Adding         WebCore/css/WebKitCSSMatrix.h
Adding         WebCore/css/WebKitCSSMatrix.idl
Transmitting file data ...............
Committed revision 39922.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105835</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-01-14 18:52:40 -0800</bug_when>
    <thetext>Fixed layout test results:

$ git svn dcommit
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/fast/dom/Window/window-properties-expected.txt
	M	LayoutTests/fast/js/global-constructors-expected.txt
Committed r39927

http://trac.webkit.org/changeset/39927
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105860</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-14 22:51:41 -0800</bug_when>
    <thetext>Thanks Dave. Others also fixed:
wx build: http://trac.webkit.org/changeset/39929
debug mac build: http://trac.webkit.org/changeset/39926
gtk build: http://trac.webkit.org/changeset/39923

What about Windows?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105921</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-15 11:15:44 -0800</bug_when>
    <thetext>Need to add Windows project updates

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105925</commentid>
    <comment_count>10</comment_count>
      <attachid>26763</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-15 11:17:43 -0800</bug_when>
    <thetext>Created attachment 26763
Patch to update Windows project file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105926</commentid>
    <comment_count>11</comment_count>
      <attachid>26763</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-15 11:19:48 -0800</bug_when>
    <thetext>Comment on attachment 26763
Patch to update Windows project file

It looks like this is a build fix, so doesn&apos;t require patch review; and we should get it in right away. r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105966</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-15 14:45:24 -0800</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.vcproj/WebCore.vcproj
Transmitting file data ..
Committed revision 39939.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105999</commentid>
    <comment_count>13</comment_count>
      <attachid>26779</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-15 17:30:42 -0800</bug_when>
    <thetext>Created attachment 26779
patch to fix test case on ppc and get rid of idl file in Resources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106058</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-01-16 07:09:43 -0800</bug_when>
    <thetext>Sending        LayoutTests/ChangeLog
Sending        LayoutTests/transforms/2d/cssmatrix-interface.xhtml
Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Transmitting file data ....
Committed revision 39968.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24136</attachid>
            <date>2008-10-06 17:53:25 -0700</date>
            <delta_ts>2009-01-14 16:00:35 -0800</delta_ts>
            <desc>Patch, including LayoutTest file</desc>
            <filename>21421.patch</filename>
            <type>text/plain</type>
            <size>35150</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzM1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDgtMTAtMDYgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudGVkIDJEIFdlYktpdENTU01hdHJpeAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjEKKworICAgICAgICBUZXN0OiBhbmltYXRpb25zL2Nv
bWJvLXRyYW5zZm9ybS10cmFuc2xhdGUrc2NhbGUuaHRtbAorCisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKGpz
RE9NV2luZG93QmFzZVdlYktpdENTU01hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvd0Jhc2U6OnB1dCk6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jhc2VXZWJLaXRDU1NNYXRy
aXgpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3Iu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpKU1dl
YktpdENTU01hdHJpeENvbnN0cnVjdG9yOjpKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFdlYktpdENTU01hdHJpeCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvcjo6ZG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvcjo6
Y2xhc3NJbmZvKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLmg6CisgICAg
ICAgICogY3NzL1dlYktpdENTU01hdHJpeC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0Q1NTTWF0cml4OjpXZWJLaXRDU1NNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0Q1NTTWF0cml4Ojp+V2ViS2l0Q1NTTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NT
TWF0cml4OjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NNYXRyaXg6Omlu
dmVyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4Ojp0cmFuc2xhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4OjpzY2FsZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJLaXRDU1NNYXRyaXg6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRD
U1NNYXRyaXg6OnRvU3RyaW5nKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4OjphKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dENTU01hdHJpeDo6Yik6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NNYXRyaXg6OmMpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4OjpkKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYktpdENTU01hdHJpeDo6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NNYXRyaXg6
OmYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4OjpzZXRBKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0Qik6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXRDU1NNYXRyaXg6OnNldEMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4Ojpz
ZXREKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0RSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJLaXRDU1NNYXRyaXg6OnNldEYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0Q1NTTWF0cml4Ojp0cmFuc2Zvcm0pOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXgu
aWRsOiBBZGRlZC4KKwogMjAwOC0xMC0wNiAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgYnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQkocmV2aXNpb24gMzcxNDQpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTM0OCw2ICszNDgsNyBAQCBET01fQ0xBU1NFUyA9IFwKICAgICBXZWJLaXRB
bmltYXRpb25FdmVudCBcCiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlIFwKICAgICBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlIFwKKyAgICBXZWJLaXRDU1NNYXRyaXggXAogICAgIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlIFwKICAgICBXZWJLaXRUcmFuc2l0aW9uRXZlbnQgXAogICAgIFdoZWVsRXZl
bnQgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDM3MTQ0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTUwMSw2ICs1MDEsMTYgQEAKIAkJNDZGOUQ1REQwQjBENjAx
NzAwMjhFRTM2IC8qIGFsaWFzQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDZGOUQ1REEwQjBENjAxNzAwMjhFRTM2IC8qIGFsaWFzQ3Vy
c29yLnBuZyAqLzsgfTsKIAkJNDZGOUQ1REUwQjBENjAxNzAwMjhFRTM2IC8qIG5vRHJvcEN1cnNv
ci5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2
RjlENURCMEIwRDYwMTcwMDI4RUUzNiAvKiBub0Ryb3BDdXJzb3IucG5nICovOyB9OwogCQk0NkY5
RDVERjBCMEQ2MDE3MDAyOEVFMzYgLyogcHJvZ3Jlc3NDdXJzb3IucG5nIGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkY5RDVEQzBCMEQ2MDE3MDAyOEVF
MzYgLyogcHJvZ3Jlc3NDdXJzb3IucG5nICovOyB9OworCQk0OTMzMzI5RTBFOUFCREREMDA0OTky
ODIgLyogV2ViS2l0Q1NTTWF0cml4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5MzMzMjlCMEU5QUJEREQwMDQ5OTI4MiAvKiBXZWJLaXRDU1NNYXRy
aXguY3BwICovOyB9OworCQk0OTMzMzI5RjBFOUFCREREMDA0OTkyODIgLyogV2ViS2l0Q1NTTWF0
cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTMz
MzI5QzBFOUFCREREMDA0OTkyODIgLyogV2ViS2l0Q1NTTWF0cml4LmggKi87IH07CisJCTQ5MzMz
MkEwMEU5QUJEREQwMDQ5OTI4MiAvKiBXZWJLaXRDU1NNYXRyaXguaWRsIGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTMzMzI5RDBFOUFCREREMDA0OTky
ODIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCAqLzsgfTsKKwkJNDkzMzMzOTAwRTlBQzMxMjAwNDk5
MjgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDkzMzMzOEUwRTlBQzMxMjAwNDk5MjgyIC8q
IEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwICovOyB9OworCQk0OTMzMzM5MTBFOUFD
MzEyMDA0OTkyODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDkzMzMzOEYwRTlBQzMxMjAwNDk5
MjgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCAqLzsgfTsKKwkJNDkzMzMzOUEw
RTlBQzRCMzAwNDk5MjgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTMzMzM5ODBFOUFDNEIzMDA0OTkyODIgLyog
SlNXZWJLaXRDU1NNYXRyaXguaCAqLzsgfTsKKwkJNDkzMzMzOUIwRTlBQzRCMzAwNDk5MjgyIC8q
IEpTV2ViS2l0Q1NTTWF0cml4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5MzMzMzk5MEU5QUM0QjMwMDQ5OTI4MiAvKiBKU1dlYktpdENTU01hdHJp
eC5jcHAgKi87IH07CisJCTQ5MzMzM0EwMEU5QUM1MkIwMDQ5OTI4MiAvKiBET01XZWJLaXRDU1NN
YXRyaXgubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OTMzMzM5RTBFOUFDNTJCMDA0OTkyODIgLyogRE9NV2ViS2l0Q1NTTWF0cml4Lm1tICovOyB9Owor
CQk0OTMzMzNBMTBFOUFDNTJCMDA0OTkyODIgLyogRE9NV2ViS2l0Q1NTTWF0cml4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTMzMzM5RjBFOUFDNTJC
MDA0OTkyODIgLyogRE9NV2ViS2l0Q1NTTWF0cml4LmggKi87IH07CisJCTQ5MzMzM0EzMEU5QUM1
QjAwMDQ5OTI4MiAvKiBET01XZWJLaXRDU1NNYXRyaXhJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDkzMzMzQTIwRTlBQzVCMDAwNDk5Mjgy
IC8qIERPTVdlYktpdENTU01hdHJpeEludGVybmFsLmggKi87IH07CiAJCTRBOEM5NkVCMEJFNjkw
MzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8q
IFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gKi87IH07CiAJCTRCMTdDQkM5MEQ5NDVCMzcwMDUz
RjE4MyAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QjE3Q0JDODBEOTQ1QjM3MDA1M0YxODMgLyogQWNjZXNzaWJp
bGl0eU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTRCMTdDQkNDMEQ5NDVCOTEwMDUzRjE4MyAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRC
MTdDQkNBMEQ5NDVCOTEwMDUzRjE4MyAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbSAq
LzsgfTsKQEAgLTUyMDQsNiArNTIxNCwxNiBAQAogCQk0NkY5RDVEQTBCMEQ2MDE3MDAyOEVFMzYg
LyogYWxpYXNDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gYWxpYXNDdXJzb3IucG5nOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0NkY5RDVEQjBCMEQ2MDE3MDAyOEVFMzYgLyogbm9Ecm9wQ3Vy
c29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IGltYWdlLnBuZzsgcGF0aCA9IG5vRHJvcEN1cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ2RjlENURDMEIwRDYwMTcwMDI4RUUzNiAvKiBwcm9ncmVzc0N1cnNvci5wbmcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5w
bmc7IHBhdGggPSBwcm9ncmVzc0N1cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ5MzMzMjlCMEU5QUJEREQwMDQ5OTI4MiAvKiBXZWJLaXRDU1NNYXRyaXguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTTWF0cml4LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDkzMzMyOUMwRTlBQkRERDAwNDk5MjgyIC8qIFdl
YktpdENTU01hdHJpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRD
U1NNYXRyaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDkzMzMyOUQwRTlBQkRE
RDAwNDk5MjgyIC8qIFdlYktpdENTU01hdHJpeC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
V2ViS2l0Q1NTTWF0cml4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDkzMzMz
OEUwRTlBQzMxMjAwNDk5MjgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRDU1NNYXRyaXhDb25z
dHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5MzMzMzhGMEU5QUMz
MTIwMDQ5OTI4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDkzMzMzOTgwRTlBQzRCMzAwNDk5MjgyIC8qIEpT
V2ViS2l0Q1NTTWF0cml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vi
S2l0Q1NTTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5MzMzMzk5MEU5
QUM0QjMwMDQ5OTI4MiAvKiBKU1dlYktpdENTU01hdHJpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdENTU01hdHJpeC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5MzMzMzlFMEU5QUM1MkIwMDQ5OTI4MiAvKiBET01XZWJLaXRDU1NN
YXRyaXgubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01XZWJL
aXRDU1NNYXRyaXgubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5MzMzMzlGMEU5
QUM1MkIwMDQ5OTI4MiAvKiBET01XZWJLaXRDU1NNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRE9NV2ViS2l0Q1NTTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5MzMzM0EyMEU5QUM1QjAwMDQ5OTI4MiAvKiBET01XZWJLaXRDU1NNYXRyaXhJ
bnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01XZWJLaXRDU1NN
YXRyaXhJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QThDOTZFQTBC
RTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOyBw
YXRoID0gbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTRCMTdDQkM4MEQ5NDVCMzcwMDUzRjE4MyAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlPYmplY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEIxN0NCQ0EwRDk0NUI5MTAwNTNGMTgz
IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzczLDYgKzk3OTMsOSBAQAogCQkJCTMxNkZFMDdBMEU2
Q0NDMjgwMEJGNjA4OCAvKiBET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi8sCiAJCQkJMzE2
RkUwN0IwRTZDQ0MyODAwQkY2MDg4IC8qIERPTVdlYktpdENTU0tleWZyYW1lc1J1bGUubW0gKi8s
CiAJCQkJMzE2RkUwN0MwRTZDQ0MyODAwQkY2MDg4IC8qIERPTVdlYktpdENTU0tleWZyYW1lc1J1
bGVJbnRlcm5hbC5oICovLAorCQkJCTQ5MzMzMzlFMEU5QUM1MkIwMDQ5OTI4MiAvKiBET01XZWJL
aXRDU1NNYXRyaXgubW0gKi8sCisJCQkJNDkzMzMzOUYwRTlBQzUyQjAwNDk5MjgyIC8qIERPTVdl
YktpdENTU01hdHJpeC5oICovLAorCQkJCTQ5MzMzM0EyMEU5QUM1QjAwMDQ5OTI4MiAvKiBET01X
ZWJLaXRDU1NNYXRyaXhJbnRlcm5hbC5oICovLAogCQkJCTMxNjExRTVFMEUxQzRFMTQwMEY2QTU3
OSAvKiBET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAogCQkJCTMxNjExRTVGMEUxQzRF
MTQwMEY2QTU3OSAvKiBET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5tbSAqLywKIAkJCQkzMTYx
MUU2MDBFMUM0RTE0MDBGNkE1NzkgLyogRE9NV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWVJbnRlcm5h
bC5oICovLApAQCAtMTE3MDksNiArMTE3MzIsOCBAQAogCQkJCTMxNkZFMDZFMEU2Q0NCRUUwMEJG
NjA4OCAvKiBKU1dlYktpdENTU0tleWZyYW1lUnVsZS5oICovLAogCQkJCTMxNkZFMDZGMEU2Q0NC
RUUwMEJGNjA4OCAvKiBKU1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovLAogCQkJCTMxNkZF
MDcwMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU1dlYktpdENTU0tleWZyYW1lc1J1bGUuaCAqLywKKwkJ
CQk0OTMzMzM5ODBFOUFDNEIzMDA0OTkyODIgLyogSlNXZWJLaXRDU1NNYXRyaXguaCAqLywKKwkJ
CQk0OTMzMzM5OTBFOUFDNEIzMDA0OTkyODIgLyogSlNXZWJLaXRDU1NNYXRyaXguY3BwICovLAog
CQkJCTMxNjExRTU4MEUxQzRERTAwMEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVl
LmNwcCAqLywKIAkJCQkzMTYxMUU1OTBFMUM0REUwMDBGNkE1NzkgLyogSlNXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZS5oICovLAogCQkJKTsKQEAgLTEyNzQ2LDYgKzEyNzcxLDggQEAKIAkJCQlCQzM0
NTI0MTBEN0UwMEVBMDAxNjU3NEEgLyogSlNSR0JDb2xvci5jcHAgKi8sCiAJCQkJQkMzNDUyNDIw
RDdFMDBFQTAwMTY1NzRBIC8qIEpTUkdCQ29sb3IuaCAqLywKIAkJCQlCMjExMjdBNTBCMzE4Njc3
MDAwOUJFNTMgLyogSlNTVkdQT0RUeXBlV3JhcHBlci5oICovLAorCQkJCTQ5MzMzMzhFMEU5QUMz
MTIwMDQ5OTI4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQk0
OTMzMzM4RjBFOUFDMzEyMDA0OTkyODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5o
ICovLAogCQkJCUJDMzQ4QkU3MERCODAzNTQwMDRBQkFCOSAvKiBKU1hNTEh0dHBSZXF1ZXN0Q29u
c3RydWN0b3IuY3BwICovLAogCQkJCUJDMzQ4QkU4MERCODAzNTQwMDRBQkFCOSAvKiBKU1hNTEh0
dHBSZXF1ZXN0Q29uc3RydWN0b3IuaCAqLywKIAkJCQlCQ0U5OUVDMTBEQ0E2MjQxMDAxODI2ODMg
LyogSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwICovLApAQCAtMTM0NTcsNiArMTM0ODQs
OSBAQAogCQkJCTMxMjg4RTcwMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlLmNwcCAqLywKIAkJCQkzMTI4OEU3MTBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZS5oICovLAogCQkJCTMxNkZFMDkyMEU2Q0NEN0YwMEJGNjA4OCAvKiBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLmlkbCAqLywKKwkJCQk0OTMzMzI5QjBFOUFCREREMDA0OTkyODIgLyog
V2ViS2l0Q1NTTWF0cml4LmNwcCAqLywKKwkJCQk0OTMzMzI5QzBFOUFCREREMDA0OTkyODIgLyog
V2ViS2l0Q1NTTWF0cml4LmggKi8sCisJCQkJNDkzMzMyOUQwRTlBQkRERDAwNDk5MjgyIC8qIFdl
YktpdENTU01hdHJpeC5pZGwgKi8sCiAJCQkJQkM5QUREN0YwQ0M0MDkyMjAwMDk4QzRDIC8qIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLywKIAkJCQlCQzlBREQyMjBDQzQwMzI2MDAwOThD
NEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCAqLywKIAkJCQkzMTYxMUU1NDBFMUM0RDRB
MDBGNkE1NzkgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaWRsICovLApAQCAtMTU5NjIsNiAr
MTU5OTIsMTEgQEAKIAkJCQlCQzYwOTAxRjBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzQkMyOUMwRTkxQUIwRjAwODM1NTg4IC8qIEhvc3RX
aW5kb3cuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQ0E4NDkyMEU5MjNCRTkwMDExNDI1MSAvKiBE
T01Qcm90ZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTMzMzI5RjBFOUFCREREMDA0OTkyODIg
LyogV2ViS2l0Q1NTTWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTMzMzM5MTBFOUFDMzEy
MDA0OTkyODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDkzMzMzOUEwRTlBQzRCMzAwNDk5MjgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggaW4g
SGVhZGVycyAqLywKKwkJCQk0OTMzMzNBMTBFOUFDNTJCMDA0OTkyODIgLyogRE9NV2ViS2l0Q1NT
TWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTMzMzNBMzBFOUFDNUIwMDA0OTkyODIgLyog
RE9NV2ViS2l0Q1NTTWF0cml4SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTYwNzksNiAr
MTYxMTQsNyBAQAogCQkJCUUxQURFQ0M3MEU3NkFEMUYwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5p
ZGwgaW4gUmVzb3VyY2VzICovLAogCQkJCUUxQURFQ0QxMEU3NkFEQUIwMDRBMUE1RSAvKiBNZXNz
YWdlQ2hhbm5lbC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJCUJDM0I3QUYwMEU5MTlBREEwMEQ1
NDA2NSAvKiBFdmVudFRhcmdldE5vZGUuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OTMzMzJB
MDBFOUFCREREMDA0OTkyODIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCBpbiBSZXNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkBAIC0xNzgxMyw2ICsxNzg0OSwxMCBAQAogCQkJCUJDM0I3QjIxMEU5MUFBRjQwMEQ1NDA2NSAv
KiBKU0V2ZW50VGFyZ2V0Tm9kZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzYwOTAy
MDBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMUNBODQ5NDBFOTIzQkVGMDAxMTQyNTEgLyogRE9NUHJvdGVjdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0OTMzMzI5RTBFOUFCREREMDA0OTkyODIgLyogV2ViS2l0Q1NTTWF0cml4LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTQ5MzMzMzkwMEU5QUMzMTIwMDQ5OTI4MiAvKiBKU1dlYktpdENT
U01hdHJpeENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5MzMzMzlCMEU5QUM0
QjMwMDQ5OTI4MiAvKiBKU1dlYktpdENTU01hdHJpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
OTMzMzNBMDBFOUFDNTJCMDA0OTkyODIgLyogRE9NV2ViS2l0Q1NTTWF0cml4Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZp
c2lvbiAzNzE0NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkpTSW1hZ2VDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKQEAgLTkyLDYgKzkzLDggQEAgc3RhdGlj
IEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZU1lc3NhZ2VDaAogc3RhdGljIHZvaWQgc2V0SlNET01X
aW5kb3dCYXNlTWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7
CiBzdGF0aWMgSlNWYWx1ZSoganNET01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIHN0YXRpYyB2b2lkIHNldEpTRE9N
V2luZG93QmFzZU9wdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKK3N0YXRp
YyBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VXZWJLaXRDU1NNYXRyaXgoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworc3RhdGljIHZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlV2ViS2l0Q1NTTWF0cml4KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSopOwogc3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIHN0YXRpYyB2
b2lkIHNldEpTRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSopOwogc3RhdGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVhTTFRQcm9jZXNz
b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwpA
QCAtMTY4LDYgKzE3MSw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU0RPTVdpbmRvd0Jhc2U6OnNfaW5m
byAKICAgSW1hZ2UgICAgICAgICAgICAgICAgICAgICAgICAganNET01XaW5kb3dCYXNlSW1hZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCiAgIE1lc3NhZ2VDaGFubmVsICAgICAg
ICAgICAgICAgIGpzRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsICAgICAgICAgICAgICAgRG9u
dERlbGV0ZQogICBPcHRpb24gICAgICAgICAgICAgICAgICAgICAgICBqc0RPTVdpbmRvd0Jhc2VP
cHRpb24gICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKKyAgV2ViS2l0Q1NTTWF0cml4
ICAgICAgICAgICAgICAganNET01XaW5kb3dCYXNlV2ViS2l0Q1NTTWF0cml4ICAgICAgICAgICAg
ICBEb250RGVsZXRlCiAgIFhNTEh0dHBSZXF1ZXN0ICAgICAgICAgICAgICAgIGpzRE9NV2luZG93
QmFzZVhNTEh0dHBSZXF1ZXN0ICAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBYU0xUUHJvY2Vz
c29yICAgICAgICAgICAgICAgICBqc0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yICAgICAgICAg
ICAgICAgIERvbnREZWxldGUKIEBlbmQKQEAgLTQ2MCw2ICs0NjQsMTMgQEAgSlNWYWx1ZSoganNE
T01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZQogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9N
V2luZG93QmFzZSo+KHNsb3Quc2xvdEJhc2UoKSkpOwogfQogCitKU1ZhbHVlKiBqc0RPTVdpbmRv
d0Jhc2VXZWJLaXRDU1NNYXRyaXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01X
aW5kb3dCYXNlKj4oc2xvdC5zbG90QmFzZSgpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2lu
ZG93QmFzZSo+KHNsb3Quc2xvdEJhc2UoKSkpOworfQorCiBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jh
c2VYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRv
d0Jhc2UqPihzbG90LnNsb3RCYXNlKCkpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQpAQCAtNjAz
LDYgKzYxNCw3IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpwdXQoRXhlY1N0YXRlKiBleGUKICAg
ICAgICAgICAgICAgICB8fCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSA9PSBzZXRKU0RPTVdpbmRv
d0Jhc2VJbWFnZQogICAgICAgICAgICAgICAgIHx8IGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpID09
IHNldEpTRE9NV2luZG93QmFzZU9wdGlvbgogICAgICAgICAgICAgICAgIHx8IGVudHJ5LT5wcm9w
ZXJ0eVB1dHRlcigpID09IHNldEpTRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsCisgICAgICAg
ICAgICAgICAgfHwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkgPT0gc2V0SlNET01XaW5kb3dCYXNl
V2ViS2l0Q1NTTWF0cml4CiAgICAgICAgICAgICAgICAgfHwgZW50cnktPnByb3BlcnR5UHV0dGVy
KCkgPT0gc2V0SlNET01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QKICAgICAgICAgICAgICAgICB8
fCBlbnRyeS0+cHJvcGVydHlQdXR0ZXIoKSA9PSBzZXRKU0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vz
c29yKSkgewogICAgICAgICAgICAgZW50cnktPnByb3BlcnR5UHV0dGVyKCkoZXhlYywgdGhpcywg
dmFsdWUpOwpAQCAtNjQxLDYgKzY1MywxMSBAQCB2b2lkIHNldEpTRE9NV2luZG93QmFzZU9wdGlv
bihFeGVjU3RhdGUqCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgc2V0SlNE
T01XaW5kb3dCYXNlV2ViS2l0Q1NTTWF0cml4KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgc2V0SlNET01XaW5k
b3dCYXNlWE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKikKIHsK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NNYXRyaXguaCIKKyNpbmNsdWRlICJKU1dlYktp
dENTU01hdHJpeC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJLaXRDU1NNYXRy
aXhDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IiLCAw
LCAwLCAwIH07CisKK0pTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3I6OkpTV2ViS2l0Q1NTTWF0
cml4Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAg
OiBET01PYmplY3QoSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
SUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCisgICAg
LCBtX2RvY3VtZW50KHN0YXRpY19jYXN0PEpTRG9jdW1lbnQqPih0b0pTKGV4ZWMsIGRvY3VtZW50
KSkpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKGV4ZWMsIDEpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKK30KKworc3RhdGlj
IEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJLaXRDU1NNYXRyaXgoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgU3RyaW5nIHM7
CisgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDEpIHsKKyAgICAgICAgcyA9IGFyZ3MuYXQoZXhlYywg
MCktPnRvU3RyaW5nKGV4ZWMpOworICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogdGhyb3cgZXhj
ZXB0aW9ucyBvbiBwYXJzaW5nIGZhaWx1cmUKKyAgICBSZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiBt
YXRyaXggPSBXZWJLaXRDU1NNYXRyaXg6OmNyZWF0ZShzKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPih0b0pTKGV4ZWMsIG1hdHJpeC5nZXQoKSkpOworfQorCitDb25zdHJ1Y3RU
eXBlIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDOjpD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZl
LmZ1bmN0aW9uID0gY29uc3RydWN0V2ViS2l0Q1NTTWF0cml4OworICAgIHJldHVybiBDb25zdHJ1
Y3RUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0
b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3Ry
dWN0b3JfaAorI2RlZmluZSBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yX2gKKworI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgSlNXZWJLaXRDU1NNYXRyaXhD
b25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3QgeworcHVibGljOgorICAgIEpTV2ViS2l0Q1NT
TWF0cml4Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBEb2N1bWVudCopOworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQtPmltcGwoKTsgfQorICAg
IHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERh
dGEmKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmc19pbmZvOyB9CisKKyAgICBKU0RvY3VtZW50KiBtX2RvY3VtZW50OworfTsK
KworfQorCisjZW5kaWYgLy8gSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvcl9oCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAkocmV2aXNpb24gMzcxNDQpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCw3IEBACiAjaW1wb3J0ICJET01VSUV2ZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVdlYktp
dENTU0tleWZyYW1lUnVsZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01XZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVdlYktpdENTU01hdHJpeEludGVybmFsLmgi
CiAjaW1wb3J0ICJET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZUludGVybmFsLmgiCiAjaW1wb3J0
ICJET01XaGVlbEV2ZW50SW50ZXJuYWwuaCIKIApJbmRleDogV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
TWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjIgQEAKKy8qKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIChDKSAxOTk5LTIwMDMgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgi
CisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTTWF0cml4LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworV2ViS2l0Q1NTTWF0cml4OjpXZWJLaXRDU1NNYXRyaXgoKSA6IFN0eWxl
QmFzZSgwKQoreworfQorCitXZWJLaXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBX
ZWJLaXRDU1NNYXRyaXgmIG0pIDogU3R5bGVCYXNlKDApCit7CisgICAgbV9tYXRyaXggPSBtLm1f
bWF0cml4OworfQorCitXZWJLaXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIG0pIDogU3R5bGVCYXNlKDApCit7CisgICAgbV9tYXRyaXggPSBtOworfQor
CitXZWJLaXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBTdHJpbmcmIHMpIDogU3R5
bGVCYXNlKDApCit7CisgICAgc2V0TWF0cml4VmFsdWUocyk7Cit9CisKK1dlYktpdENTU01hdHJp
eDo6fldlYktpdENTU01hdHJpeCgpCit7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRN
YXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBDU1NQYXJzZXIgcCh1c2VT
dHJpY3RQYXJzaW5nKCkpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
c3R5bGVEZWNsYXJhdGlvbiA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsK
KyAgICBpZiAocC5wYXJzZVZhbHVlKHN0eWxlRGVjbGFyYXRpb24uZ2V0KCksIENTU1Byb3BlcnR5
V2Via2l0VHJhbnNmb3JtLCBzdHJpbmcsIHRydWUpKSB7CisgICAgICAgIC8vIENvbnZlcnQgdG8g
VHJhbnNmb3JtT3BlcmF0aW9ucy4gVGhpcyBjYW4gZmFpbCBpZiBhIHByb3BlcnR5IAorICAgICAg
ICAvLyByZXF1aXJlcyBzdHlsZSAoaS5lLiwgcGFyYW0gdXNlcyAnZW1zJyBvciAnZXhzJykKKyAg
ICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsID0gIHN0eWxlRGVjbGFyYXRpb24tPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworICAgICAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIGlmICghQ1NTU3R5bGVTZWxlY3Rv
cjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWwuZ2V0KCksIDAsIG9wZXJhdGlvbnMpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydCB0cmFuc2Zv
cm0gb3BlcmF0aW9ucyB0byBhbiBBZmZpbmVUcmFuc2Zvcm0uIFRoaXMgY2FuIGZhaWwKKyAgICAg
ICAgLy8gaWYgYSBwYXJhbSBoYXMgYSBwZXJjZW50YWdlICgnJScpCisgICAgICAgIEFmZmluZVRy
YW5zZm9ybSB0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKVtpXS5nZXQoKS0+YXBwbHkodCwgSW50U2l6ZSgwLCAwKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBzZXQgdGhlIG1h
dHJpeAorICAgICAgICBtX21hdHJpeCA9IHQ7CisgICAgfQorfQorCitXZWJLaXRDU1NNYXRyaXgq
IFdlYktpdENTU01hdHJpeDo6bXVsdGlwbHkoV2ViS2l0Q1NTTWF0cml4KiBzZWNvbmRNYXRyaXgp
Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRtcChzZWNvbmRNYXRyaXgtPm1fbWF0cml4KTsKKyAg
ICB0bXAubXVsdGlwbHkobV9tYXRyaXgpOworICAgIHJldHVybiBuZXcgV2ViS2l0Q1NTTWF0cml4
KHRtcCk7Cit9CisKK1dlYktpdENTU01hdHJpeCogV2ViS2l0Q1NTTWF0cml4OjppbnZlcnNlKCkK
K3sKKyAgICByZXR1cm4gbmV3IFdlYktpdENTU01hdHJpeChtX21hdHJpeC5pbnZlcnNlKCkpOwor
fQorCitXZWJLaXRDU1NNYXRyaXgqIFdlYktpdENTU01hdHJpeDo6dHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCit7CisgICAgaWYgKGlzbmFuKHgpKSB4ID0gMDsgCisgICAgaWYgKGlzbmFuKHkp
KSB5ID0gMDsgCisgICAgcmV0dXJuIG5ldyBXZWJLaXRDU1NNYXRyaXgoQWZmaW5lVHJhbnNmb3Jt
KG1fbWF0cml4KS50cmFuc2xhdGUoeCx5KSk7Cit9CisKK1dlYktpdENTU01hdHJpeCogV2ViS2l0
Q1NTTWF0cml4OjpzY2FsZShmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkKK3sKKyAgICBpZiAo
aXNuYW4oc2NhbGVYKSkgc2NhbGVYID0gMTsgCisgICAgaWYgKGlzbmFuKHNjYWxlWSkpIHNjYWxl
WSA9IHNjYWxlWDsgCisgICAgcmV0dXJuIG5ldyBXZWJLaXRDU1NNYXRyaXgoQWZmaW5lVHJhbnNm
b3JtKG1fbWF0cml4KS5zY2FsZShzY2FsZVgsc2NhbGVZKSk7Cit9CisKK1dlYktpdENTU01hdHJp
eCogV2ViS2l0Q1NTTWF0cml4Ojpyb3RhdGUoZmxvYXQgcm90KQoreworICAgIGlmIChpc25hbihy
b3QpKQorICAgICAgICByb3QgPSAwOworICAgIHJldHVybiBuZXcgV2ViS2l0Q1NTTWF0cml4KEFm
ZmluZVRyYW5zZm9ybShtX21hdHJpeCkucm90YXRlKHJvdCkpOworfQorCitTdHJpbmcgV2ViS2l0
Q1NTTWF0cml4Ojp0b1N0cmluZygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJtYXRy
aXgoJWYsICVmLCAlZiwgJWYsICVmLCAlZikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fbWF0cml4LmEoKSwgbV9tYXRyaXguYigpLCBtX21hdHJpeC5jKCksIG1fbWF0cml4LmQoKSwg
bV9tYXRyaXguZSgpLCBtX21hdHJpeC5mKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL1dl
YktpdENTU01hdHJpeC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAq
IChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIChDKSAyMDAyLTIw
MDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRDU1NNYXRyaXhfaAorI2Rl
ZmluZSBXZWJLaXRDU1NNYXRyaXhfaAorCisjaW5jbHVkZSAiU3R5bGVCYXNlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBXZWJL
aXRDU1NNYXRyaXggOiBwdWJsaWMgU3R5bGVCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYktpdENTU01hdHJpeCgpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiBjcmVhdGUoY29uc3QgV2ViS2l0Q1NTTWF0cml4JiBtKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRDU1NNYXRyaXgobSkpOwor
ICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IGNyZWF0ZShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIG0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYktpdENTU01hdHJpeChtKSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYktp
dENTU01hdHJpeD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcykKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV2ViS2l0Q1NTTWF0cml4KHMpKTsKKyAgICB9CisgICAgCisgICAgdmly
dHVhbCB+V2ViS2l0Q1NTTWF0cml4KCk7CisKKyAgICBmbG9hdCBhKCkgY29uc3QgeyByZXR1cm4g
KGZsb2F0KSBtX21hdHJpeC5hKCk7IH0KKyAgICBmbG9hdCBiKCkgY29uc3QgeyByZXR1cm4gKGZs
b2F0KSBtX21hdHJpeC5iKCk7IH0KKyAgICBmbG9hdCBjKCkgY29uc3QgeyByZXR1cm4gKGZsb2F0
KSBtX21hdHJpeC5jKCk7IH0KKyAgICBmbG9hdCBkKCkgY29uc3QgeyByZXR1cm4gKGZsb2F0KSBt
X21hdHJpeC5kKCk7IH0KKyAgICBmbG9hdCBlKCkgY29uc3QgeyByZXR1cm4gKGZsb2F0KSBtX21h
dHJpeC5lKCk7IH0KKyAgICBmbG9hdCBmKCkgY29uc3QgeyByZXR1cm4gKGZsb2F0KSBtX21hdHJp
eC5mKCk7IH0KKyAgICAKKyAgICB2b2lkIHNldEEoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldEEo
Zik7IH0KKyAgICB2b2lkIHNldEIoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldEIoZik7IH0KKyAg
ICB2b2lkIHNldEMoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldEMoZik7IH0KKyAgICB2b2lkIHNl
dEQoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldEQoZik7IH0KKyAgICB2b2lkIHNldEUoZmxvYXQg
ZikgICB7IG1fbWF0cml4LnNldEUoZik7IH0KKyAgICB2b2lkIHNldEYoZmxvYXQgZikgICB7IG1f
bWF0cml4LnNldEYoZik7IH0KKyAKKyAgICB2b2lkICAgICAgICAgICAgICAgIHNldE1hdHJpeFZh
bHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKTsKKyAgICAKKyAgICAvLyB0aGlzID0gdGhpcyAqIHNl
Y29uZE1hdHJpeAorICAgIFdlYktpdENTU01hdHJpeCogICAgbXVsdGlwbHkoV2ViS2l0Q1NTTWF0
cml4KiBzZWNvbmRNYXRyaXgpOworICAgIAorICAgIC8vIEZJWE1FOiB3ZSByZWFsbHkgc2hvdWxk
IGhhdmUgYW4gZXhjZXB0aW9uIGhlcmUsIGZvciB3aGVuIG1hdHJpeCBpcyBub3QgaW52ZXJ0aWJs
ZQorICAgIFdlYktpdENTU01hdHJpeCogICAgaW52ZXJzZSgpOworICAgIFdlYktpdENTU01hdHJp
eCogICAgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOworICAgIFdlYktpdENTU01hdHJpeCog
ICAgc2NhbGUoZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpOworICAgIFdlYktpdENTU01hdHJp
eCogICAgcm90YXRlKGZsb2F0IHJvdCk7CisgICAgCisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiAgICB0cmFuc2Zvcm0oKSB7IHJldHVybiBtX21hdHJpeDsgfQorICAgIAorICAgIFN0cmluZyB0
b1N0cmluZygpOworICAgIAorcHJvdGVjdGVkOgorICAgIFdlYktpdENTU01hdHJpeCgpOworICAg
IFdlYktpdENTU01hdHJpeChjb25zdCBXZWJLaXRDU1NNYXRyaXgmIG0pOworICAgIFdlYktpdENT
U01hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG0pOworICAgIFdlYktpdENTU01hdHJpeChj
b25zdCBTdHJpbmcmIHMpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbWF0cml4OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViS2l0Q1NTTWF0cml4X2gKSW5k
ZXg6IFdlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL1dl
YktpdENTU01hdHJpeC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBj
c3MgeworCisgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgPzoKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBJbnRlcmZhY2VVVUlEPTM0OWM5ODllLTg3N2YtNDE2ZS05Y2NlLWNhODExZTUy
ZDllOCwKKyAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPTVmZWIxNmU2LWY0NDEtNGI0Ni05YjEw
LTllODMzYTRkY2QxYgorICAgIF0gV2ViS2l0Q1NTTWF0cml4IHsKKworICAgICAgICBhdHRyaWJ1
dGUgZmxvYXQgYTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IGI7CisgICAgICAgIGF0dHJpYnV0
ZSBmbG9hdCBjOworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgZDsKKyAgICAgICAgYXR0cmlidXRl
IGZsb2F0IGU7CisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBmOworCisgICAgICAgIHZvaWQgICAg
ICAgICAgICBzZXRNYXRyaXhWYWx1ZShpbiBET01TdHJpbmcgc3RyaW5nKTsKKyAgICAgICAgV2Vi
S2l0Q1NTTWF0cml4IG11bHRpcGx5KGluIFdlYktpdENTU01hdHJpeCBzZWNvbmRNYXRyaXgpIHJh
aXNlcyBDU1NFeGNlcHRpb247CisgICAgICAgIFdlYktpdENTU01hdHJpeCBpbnZlcnNlKCkgcmFp
c2VzIENTU0V4Y2VwdGlvbjsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4IHRyYW5zbGF0ZShpbiBm
bG9hdCB4LCBpbiBmbG9hdCB5KTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4IHNjYWxlKGluIGZs
b2F0IHNjYWxlWCwgaW4gZmxvYXQgc2NhbGVZKTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4IHJv
dGF0ZShpbiBmbG9hdCByb3QpOworICAgICAgICAKKyAgICAgICAgRE9NU3RyaW5nIHRvU3RyaW5n
KCk7CisgICAgfTsKKworfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzczNTYpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0xMC0wNiAg
Q2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGNhc2UgZm9yIGltcGxlbWVudGF0aW9uIG9m
IFdlYktpdENTU01hdHJpeAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE0MjEKKworICAgICAgICAqIGFuaW1hdGlvbnMvY29tYm8tdHJhbnNmb3JtLXRy
YW5zbGF0ZStzY2FsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFuaW1hdGlvbnMv
Y29tYm8tdHJhbnNmb3JtLXRyYW5zbGF0ZStzY2FsZS5odG1sOiBBZGRlZC4KKwogMjAwOC0xMC0w
NCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9hbmltYXRpb25zL2NvbWJvLXRyYW5zZm9y
bS10cmFuc2xhdGUrc2NhbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2FuaW1hdGlvbnMvY29tYm8tdHJhbnNmb3JtLXRyYW5zbGF0ZStzY2FsZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hbmltYXRpb25zL2NvbWJvLXRyYW5zZm9ybS10
cmFuc2xhdGUrc2NhbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAK
K1RoaXMgdGVzdCBwZXJmb3JtcyBhbiBhbmltYXRpb24gb2YgdGhlIHRyYW5zbGF0ZSgpIGFuZCBz
Y2FsZSgpIG9wZXJhdG9ycy4gSXQgYW5pbWF0ZXMgb3ZlciAyIHNlY29uZHMuIEF0IDAuNSBhbmQg
MSBzZWNvbmQgaXQgdGFrZXMgYSBzbmFwc2hvdCBhbmQgZXhwZWN0cyB0aGUgcmVzdWx0IHRvIGJl
IHdpdGhpbiByYW5nZS4KK1BBU1MKSW5kZXg6IExheW91dFRlc3RzL2FuaW1hdGlvbnMvY29tYm8t
dHJhbnNmb3JtLXRyYW5zbGF0ZStzY2FsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2FuaW1hdGlvbnMvY29tYm8tdHJhbnNmb3JtLXRyYW5zbGF0ZStzY2FsZS5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9jb21iby10cmFuc2Zvcm0tdHJhbnNsYXRl
K3NjYWxlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBodG1s
IFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICAiaHR0
cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKworPGh0bWwgbGFuZz0iZW4iPgor
PGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9o
dG1sOyBjaGFyc2V0PXV0Zi04Ij4KKyAgPHRpdGxlPkNvbWJpbmVkIHRyYW5zZm9ybSB0cmFuc2xh
dGUoKSBzY2FsZSgpPC90aXRsZT4KKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2Ny
ZWVuIj4KKyAgICAjYm94IHsKKyAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICB3aWR0aDogMTAw
cHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOworICAgICAgLXdlYmtpdC1hbmltYXRp
b24tZHVyYXRpb246IDJzOworICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9u
OiBsaW5lYXI7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiAiYW5pbSI7CisgICAgfQor
ICAgIEAtd2Via2l0LWtleWZyYW1lcyAiYW5pbSIgeworICAgICAgICBmcm9tIHsgLXdlYmtpdC10
cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLDApIHNjYWxlKDEsMSk7IH0KKyAgICAgICAgdG8gICB7IC13
ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTAwcHgsIDIwMHB4KSBzY2FsZSgyLDQpOyB9Cisg
ICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNl
dD0idXRmLTgiPgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgcmVzdWx0ID0gIlBBU1Mi
OworICAgIGNvbnN0IGRlZmF1bHRUb2xlcmFuY2UgPSAwLjI7CisgICAgCisgICAgY29uc3QgZXhw
ZWN0ZWQgPSAgWyBbIDEuMjUsMCwwLDEuNzUsMjUsNTAgXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsgMS41LDAsMCwyLjUsNTAsMTAwIF0gXTsKKyAgICBjb25zdCB0b2xlcmFuY2UgPSBbIDAu
MiwwLjIsMC4yLDAuMiw1LDUgXTsKKyAgICBjb25zdCBwcm9wID0gWyAiYSIsICJiIiwgImMiLCAi
ZCIsICJlIiwgImYiIF07CisgICAgCisgICAgZnVuY3Rpb24gaXNFcXVhbChhY3R1YWwsIGRlc2ly
ZWQsIHRvbGVyYW5jZSkKKyAgICB7CisgICAgICAgIGlmICh0b2xlcmFuY2UgPT0gdW5kZWZpbmVk
IHx8IHRvbGVyYW5jZSA9PSAwKQorICAgICAgICAgICAgdG9sZXJhbmNlID0gZGVmYXVsdFRvbGVy
YW5jZTsKKyAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhhY3R1YWwgLSBkZXNpcmVkKTsKKyAg
ICAgICAgcmV0dXJuIGRpZmYgPD0gdG9sZXJhbmNlOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlv
biBzbmFwc2hvdCh3aGljaCkKKyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgIT0gIlBBU1MiKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdmFyIHQgPSBuZXcgV2ViS2l0
Q1NTTWF0cml4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdib3gnKSkud2Via2l0VHJhbnNmb3JtKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDY7ICsr
aSkKKyAgICAgICAgICAgIGlmICghaXNFcXVhbCh0W3Byb3BbaV1dLCBleHBlY3RlZFt3aGljaF1b
aV0sIHRvbGVyYW5jZVtpXSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAiRkFJTCgnIitw
cm9wW2ldKyInIHdhczoiK3RbcHJvcFtpXV0rIiwgZXhwZWN0ZWQ6IitleHBlY3RlZFt3aGljaF1b
aV0rIikiOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBzdGFydCgpCisgICAgeworICAgICAgICBzZXRUaW1lb3V0KCJzbmFwc2hv
dCgwKSIsIDUwMCk7CisgICAgICAgIHNldFRpbWVvdXQoInNuYXBzaG90KDEpIiwgMTAwMCk7Cisg
ICAgICAgIAorICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5pbm5lckhUTUwgPSByZXN1bHQ7
CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSwgMTEw
MCk7CisgICAgfQorICAgIAorICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdEFu
aW1hdGlvblN0YXJ0Jywgc3RhcnQsIGZhbHNlKTsKKyAgICAKKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KK1RoaXMgdGVzdCBwZXJmb3JtcyBhbiBhbmltYXRpb24gb2YgdGhlIHRyYW5zbGF0
ZSgpIGFuZCBzY2FsZSgpIG9wZXJhdG9ycy4gSXQgYW5pbWF0ZXMgb3ZlciAyIHNlY29uZHMuIAor
QXQgMC41IGFuZCAxIHNlY29uZCBpdCB0YWtlcyBhIHNuYXBzaG90IGFuZCBleHBlY3RzIHRoZSBy
ZXN1bHQgdG8gYmUgd2l0aGluIHJhbmdlLgorPGRpdiBpZD0iYm94Ij4KKzwvZGl2PgorPGRpdiBp
ZD0icmVzdWx0Ij4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="10956"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26735</attachid>
            <date>2009-01-14 16:00:35 -0800</date>
            <delta_ts>2009-01-14 16:27:22 -0800</delta_ts>
            <desc>Replacement patch</desc>
            <filename>21421.patch</filename>
            <type>text/plain</type>
            <size>44736</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTkxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMDktMDEtMTQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudGVkIDJEIFdlYktpdENTU01hdHJpeAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjEKKworICAgICAgICBUZXN0OiB0cmFuc2Zvcm1zLzJk
L2Nzc21hdHJpeC1pbnRlcmZhY2UueGh0bWwKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1h
a2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChqc0RPTVdpbmRv
d0Jhc2VXZWJLaXRDU1NNYXRyaXgpOgorICAgICAgICAoc2V0SlNET01XaW5kb3dCYXNlV2ViS2l0
Q1NTTWF0cml4KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0
cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvcjo6SlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RXZWJLaXRDU1NNYXRyaXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
RGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rv
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0
b3I6OmNsYXNzSW5mbyk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5oOgor
ICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdENTU01hdHJpeDo6V2ViS2l0Q1NTTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYktpdENTU01hdHJpeDo6fldlYktpdENTU01hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dENTU01hdHJpeDo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4
OjppbnZlcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6dHJhbnNsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
S2l0Q1NTTWF0cml4Ojp0b1N0cmluZyk6CisgICAgICAgICogY3NzL1dlYktpdENTU01hdHJpeC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6YSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJLaXRDU1NNYXRyaXg6OmIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4Ojpj
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6ZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJLaXRDU1NNYXRyaXg6OmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0
cml4OjpmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0QSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJLaXRDU1NNYXRyaXg6OnNldEIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0Q1NTTWF0cml4OjpzZXRDKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJp
eDo6c2V0RCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NNYXRyaXg6OnNldEUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4OjpzZXRGKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYktpdENTU01hdHJpeDo6dHJhbnNmb3JtKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0
cml4LmlkbDogQWRkZWQuCisKIDIwMDktMDEtMTQgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29y
ZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQkocmV2aXNpb24gMzk4ODApCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTM1NSw2ICszNTUsNyBAQCBET01fQ0xBU1NFUyA9IFwKICAgICBX
ZWJLaXRBbmltYXRpb25FdmVudCBcCiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlIFwKICAgICBX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlIFwKKyAgICBXZWJLaXRDU1NNYXRyaXggXAogICAgIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlIFwKICAgICBXZWJLaXRUcmFuc2l0aW9uRXZlbnQgXAogICAgIFdo
ZWVsRXZlbnQgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDM5ODgwKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw2ICs1OTMsMTYgQEAKIAkJNDZGOUQ1REQw
QjBENjAxNzAwMjhFRTM2IC8qIGFsaWFzQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZGOUQ1REEwQjBENjAxNzAwMjhFRTM2IC8qIGFs
aWFzQ3Vyc29yLnBuZyAqLzsgfTsKIAkJNDZGOUQ1REUwQjBENjAxNzAwMjhFRTM2IC8qIG5vRHJv
cEN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ2RjlENURCMEIwRDYwMTcwMDI4RUUzNiAvKiBub0Ryb3BDdXJzb3IucG5nICovOyB9Owog
CQk0NkY5RDVERjBCMEQ2MDE3MDAyOEVFMzYgLyogcHJvZ3Jlc3NDdXJzb3IucG5nIGluIFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkY5RDVEQzBCMEQ2MDE3
MDAyOEVFMzYgLyogcHJvZ3Jlc3NDdXJzb3IucG5nICovOyB9OworCQk0OTgzOTEzRjBGMUU3Njc1
MDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxM0QwRjFFNzY3NTAwQzIzNzgyIC8qIEpTV2Vi
S2l0Q1NTTWF0cml4LmNwcCAqLzsgfTsKKwkJNDk4MzkxNDAwRjFFNzY3NTAwQzIzNzgyIC8qIEpT
V2ViS2l0Q1NTTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OTgzOTEzRTBGMUU3Njc1MDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXguaCAq
LzsgfTsKKwkJNDk4MzkxNTAwRjFFNzZCNDAwQzIzNzgyIC8qIERPTVdlYktpdENTU01hdHJpeC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxNEQw
RjFFNzZCNDAwQzIzNzgyIC8qIERPTVdlYktpdENTU01hdHJpeC5oICovOyB9OworCQk0OTgzOTE1
MTBGMUU3NkI0MDBDMjM3ODIgLyogRE9NV2ViS2l0Q1NTTWF0cml4Lm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxNEUwRjFFNzZCNDAwQzIzNzgy
IC8qIERPTVdlYktpdENTU01hdHJpeC5tbSAqLzsgfTsKKwkJNDk4MzkxNTIwRjFFNzZCNDAwQzIz
NzgyIC8qIERPTVdlYktpdENTU01hdHJpeEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE0RjBGMUU3NkI0MDBDMjM3ODIgLyogRE9N
V2ViS2l0Q1NTTWF0cml4SW50ZXJuYWwuaCAqLzsgfTsKKwkJNDk4MzkxNTgwRjFFNzc2OTAwQzIz
NzgyIC8qIFdlYktpdENTU01hdHJpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE1NTBGMUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0
cml4LmNwcCAqLzsgfTsKKwkJNDk4MzkxNTkwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01h
dHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4
MzkxNTYwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5oICovOyB9OworCQk0OTgz
OTE1QTBGMUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCBpbiBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxNTcwRjFFNzc2OTAwQzIz
NzgyIC8qIFdlYktpdENTU01hdHJpeC5pZGwgKi87IH07CisJCTQ5ODM5MTYzMEYxRThFRTEwMEMy
Mzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTYxMEYxRThFRTEwMEMyMzc4MiAv
KiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJNDk4MzkxNjQwRjFF
OEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTYyMEYxRThFRTEwMEMy
Mzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmggKi87IH07CiAJCTQ5RTkxMUMz
MEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTFCMzBFRjg2RDQ3MDA5RDBD
QUYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwICovOyB9OwogCQk0OUU5MTFDNDBFRjg2RDQ3
MDA5RDBDQUYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RTkxMUI0MEVGODZENDcwMDlEMENBRiAvKiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQ5RTkxMUM1MEVGODZENDcwMDlEMENBRiAvKiBJZGVudGl0eVRyYW5zZm9y
bU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFOTExQjUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9u
LmggKi87IH07CkBAIC01NDQ3LDYgKzU0NTcsMTYgQEAKIAkJNDZGOUQ1REEwQjBENjAxNzAwMjhF
RTM2IC8qIGFsaWFzQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IGFsaWFzQ3Vyc29yLnBuZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOUQ1REIwQjBENjAxNzAwMjhFRTM2IC8qIG5vRHJv
cEN1cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBpbWFnZS5wbmc7IHBhdGggPSBub0Ryb3BDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NkY5RDVEQzBCMEQ2MDE3MDAyOEVFMzYgLyogcHJvZ3Jlc3NDdXJzb3Iu
cG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1h
Z2UucG5nOyBwYXRoID0gcHJvZ3Jlc3NDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0OTgzOTEzRDBGMUU3Njc1MDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRDU1NNYXRyaXgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTgzOTEzRTBGMUU3Njc1MDBDMjM3
ODIgLyogSlNXZWJLaXRDU1NNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNXZWJLaXRDU1NNYXRyaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk4
MzkxNEQwRjFFNzZCNDAwQzIzNzgyIC8qIERPTVdlYktpdENTU01hdHJpeC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01XZWJLaXRDU1NNYXRyaXguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDk4MzkxNEUwRjFFNzZCNDAwQzIzNzgyIC8qIERPTVdlYktpdENT
U01hdHJpeC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVdl
YktpdENTU01hdHJpeC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk4MzkxNEYw
RjFFNzZCNDAwQzIzNzgyIC8qIERPTVdlYktpdENTU01hdHJpeEludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVdlYktpdENTU01hdHJpeEludGVybmFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5ODM5MTU1MEYxRTc3NjkwMEMyMzc4MiAvKiBX
ZWJLaXRDU1NNYXRyaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViS2l0Q1NTTWF0cml4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk4Mzkx
NTYwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NNYXRyaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDk4MzkxNTcwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0Q1NTTWF0cml4LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDk4MzkxNjEwRjFFOEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NT
TWF0cml4Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5ODM5MTYyMEYxRThFRTEwMEMyMzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENv
bnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0Q1NT
TWF0cml4Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFOTEx
QjMwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcDsgcGF0
aCA9IHRyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0OUU5MTFCNDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtYXRpb25N
YXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVHJhbnNmb3JtYXRpb25N
YXRyaXguaDsgcGF0aCA9IHRyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFOTExQjUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50
aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg7IHBhdGggPSB0cmFuc2Zvcm1zL0lkZW50aXR5
VHJhbnNmb3JtT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDI2
MSw2ICsxMDI4MSw5IEBACiAJCQkJMzE2RkUwN0EwRTZDQ0MyODAwQkY2MDg4IC8qIERPTVdlYktp
dENTU0tleWZyYW1lc1J1bGUuaCAqLywKIAkJCQkzMTZGRTA3QjBFNkNDQzI4MDBCRjYwODggLyog
RE9NV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5tbSAqLywKIAkJCQkzMTZGRTA3QzBFNkNDQzI4MDBC
RjYwODggLyogRE9NV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZUludGVybmFsLmggKi8sCisJCQkJNDk4
MzkxNEQwRjFFNzZCNDAwQzIzNzgyIC8qIERPTVdlYktpdENTU01hdHJpeC5oICovLAorCQkJCTQ5
ODM5MTRFMEYxRTc2QjQwMEMyMzc4MiAvKiBET01XZWJLaXRDU1NNYXRyaXgubW0gKi8sCisJCQkJ
NDk4MzkxNEYwRjFFNzZCNDAwQzIzNzgyIC8qIERPTVdlYktpdENTU01hdHJpeEludGVybmFsLmgg
Ki8sCiAJCQkJMzE2MTFFNUUwRTFDNEUxNDAwRjZBNTc5IC8qIERPTVdlYktpdENTU1RyYW5zZm9y
bVZhbHVlLmggKi8sCiAJCQkJMzE2MTFFNUYwRTFDNEUxNDAwRjZBNTc5IC8qIERPTVdlYktpdENT
U1RyYW5zZm9ybVZhbHVlLm1tICovLAogCQkJCTMxNjExRTYwMEUxQzRFMTQwMEY2QTU3OSAvKiBE
T01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZUludGVybmFsLmggKi8sCkBAIC0xMjA5NCw2ICsxMjEx
Nyw4IEBACiAJCQkJMzE2RkUwNkUwRTZDQ0JFRTAwQkY2MDg4IC8qIEpTV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlLmggKi8sCiAJCQkJMzE2RkUwNkYwRTZDQ0JFRTAwQkY2MDg4IC8qIEpTV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZS5jcHAgKi8sCiAJCQkJMzE2RkUwNzAwRTZDQ0JFRTAwQkY2MDg4IC8qIEpT
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oICovLAorCQkJCTQ5ODM5MTNEMEYxRTc2NzUwMEMyMzc4
MiAvKiBKU1dlYktpdENTU01hdHJpeC5jcHAgKi8sCisJCQkJNDk4MzkxM0UwRjFFNzY3NTAwQzIz
NzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggKi8sCiAJCQkJMzE2MTFFNTgwRTFDNERFMDAwRjZB
NTc5IC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAogCQkJCTMxNjExRTU5MEUx
QzRERTAwMEY2QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi8sCiAJCQkpOwpA
QCAtMTMxMzksNiArMTMxNjQsOCBAQAogCQkJCUJDMzQ1MjQxMEQ3RTAwRUEwMDE2NTc0QSAvKiBK
U1JHQkNvbG9yLmNwcCAqLywKIAkJCQlCQzM0NTI0MjBEN0UwMEVBMDAxNjU3NEEgLyogSlNSR0JD
b2xvci5oICovLAogCQkJCUIyMTEyN0E1MEIzMTg2NzcwMDA5QkU1MyAvKiBKU1NWR1BPRFR5cGVX
cmFwcGVyLmggKi8sCisJCQkJNDk4MzkxNjEwRjFFOEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NT
TWF0cml4Q29uc3RydWN0b3IuY3BwICovLAorCQkJCTQ5ODM5MTYyMEYxRThFRTEwMEMyMzc4MiAv
KiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmggKi8sCiAJCQkJRTFDMzZEMzIwRUIwQTA5
NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dEJhc2UuY3BwICovLAogCQkJCUUxQzM2RDMzMEVC
MEEwOTQwMDc0MTBCQyAvKiBKU1dvcmtlckNvbnRleHRCYXNlLmggKi8sCiAJCQkJQkMzNDhCRTcw
REI4MDM1NDAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAgKi8sCkBA
IC0xMzg3NSw2ICsxMzkwMiw5IEBACiAJCQkJMzEyODhFNzAwRTMwMDVENjAwMzYxOUFFIC8qIFdl
YktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovLAogCQkJCTMxMjg4RTcxMEUzMDA1RDYwMDM2MTlB
RSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi8sCiAJCQkJMzE2RkUwOTIwRTZDQ0Q3RjAw
QkY2MDg4IC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaWRsICovLAorCQkJCTQ5ODM5MTU1MEYx
RTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguY3BwICovLAorCQkJCTQ5ODM5MTU2MEYx
RTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaCAqLywKKwkJCQk0OTgzOTE1NzBGMUU3
NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCAqLywKIAkJCQlCQzlBREQ3RjBDQzQw
OTIyMDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAogCQkJCUJDOUFE
RDIyMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAogCQkJ
CTMxNjExRTU0MEUxQzRENEEwMEY2QTU3OSAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwg
Ki8sCkBAIC0xNjUwNyw2ICsxNjUzNywxMSBAQAogCQkJCUUxMEJCMzc4MEYxNEI2MjIwMDU2MEUx
MyAvKiBET01TdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTBCQjM4NjBGMTRCOTUw
MDA1NjBFMTMgLyogSlNET01TdHJpbmdMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTgxQjM1
MTBGMTUwMDhBMDBGQjc4NDcgLyogU3RhdGljU3RyaW5nTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDk4MzkxNDAwRjFFNzY3NTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0OTgzOTE1MDBGMUU3NkI0MDBDMjM3ODIgLyogRE9NV2ViS2l0Q1NTTWF0
cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTgzOTE1MjBGMUU3NkI0MDBDMjM3ODIgLyogRE9N
V2ViS2l0Q1NTTWF0cml4SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5ODM5MTU5MEYx
RTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
ODM5MTY0MEYxRThFRTEwMEMyMzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTE2NjIxLDYgKzE2NjU2LDcgQEAKIAkJCQk4NTEzNkNBODBBRUQ2
NjU5MDBGOTBBM0QgLyogd2VzdFJlc2l6ZUN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAogCQkJ
CTFBQjFBRTdBMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tSW5DdXJzb3IucG5nIGluIFJlc291cmNl
cyAqLywKIAkJCQkxQUIxQUU3QjBDMDUxRkRFMDAxMzlGNEYgLyogem9vbU91dEN1cnNvci5wbmcg
aW4gUmVzb3VyY2VzICovLAorCQkJCTQ5ODM5MTVBMEYxRTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRD
U1NNYXRyaXguaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4NDYxLDYgKzE4NDk3LDEwIEBACiAJ
CQkJRTEwQkIzODcwRjE0Qjk1MDAwNTYwRTEzIC8qIEpTRE9NU3RyaW5nTGlzdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFMTgxQjI1NzBGMTRDMUE2MDBGQjc4NDcgLyogSlNET01TdHJpbmdMaXN0
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxODFCMzU2MEYxNTAwRDcwMEZCNzg0NyAv
KiBTdGF0aWNTdHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5ODM5MTNGMEYxRTc2
NzUwMEMyMzc4MiAvKiBKU1dlYktpdENTU01hdHJpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
OTgzOTE1MTBGMUU3NkI0MDBDMjM3ODIgLyogRE9NV2ViS2l0Q1NTTWF0cml4Lm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJNDk4MzkxNTgwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTgzOTE2MzBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJL
aXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDM5ODgwKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2
ICs0Niw3IEBACiAjaW5jbHVkZSAiSlNJbWFnZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5jbHVk
ZSAiSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTT3B0aW9uQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJKU1dvcmtlckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmgiCkBAIC04OCw2ICs4OSw4IEBAIHN0YXRpYyBK
U1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVdvcmtlcigKIHN0YXRpYyB2b2lkIHNldEpTRE9NV2lu
ZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIpOwogc3RhdGlj
IEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIHN0YXRpYyB2b2lkIHNldEpTRE9NV2luZG93
QmFzZU9wdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIpOworc3RhdGljIEpT
VmFsdWVQdHIganNET01XaW5kb3dCYXNlV2ViS2l0Q1NTTWF0cml4KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2b2lkIHNldEpTRE9N
V2luZG93QmFzZVdlYktpdENTU01hdHJpeChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQ
dHIpOwogc3RhdGljIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogc3RhdGlj
IHZvaWQgc2V0SlNET01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlUHRyKTsKIHN0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVhTTFRQ
cm9jZXNzb3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYpOwpAQCAtMTE3LDYgKzEyMCw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU0RPTVdpbmRvd0Jhc2U6
OnNfaW5mbyAKICAgSW1hZ2UgICAgICAgICAgICAgICAgICAgICAgICAganNET01XaW5kb3dCYXNl
SW1hZ2UgICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCiAgIE1lc3NhZ2VDaGFubmVs
ICAgICAgICAgICAgICAgIGpzRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsICAgICAgICAgICAg
ICAgRG9udERlbGV0ZQogICBPcHRpb24gICAgICAgICAgICAgICAgICAgICAgICBqc0RPTVdpbmRv
d0Jhc2VPcHRpb24gICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKKyAgV2ViS2l0Q1NT
TWF0cml4ICAgICAgICAgICAgICAganNET01XaW5kb3dCYXNlV2ViS2l0Q1NTTWF0cml4ICAgICAg
ICAgICAgICBEb250RGVsZXRlCiAgIFdvcmtlciAgICAgICAgICAgICAgICAgICAgICAgIGpzRE9N
V2luZG93QmFzZVdvcmtlciAgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBYTUxI
dHRwUmVxdWVzdCAgICAgICAgICAgICAgICBqc0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdCAg
ICAgICAgICAgICAgIERvbnREZWxldGUKICAgWFNMVFByb2Nlc3NvciAgICAgICAgICAgICAgICAg
anNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvciAgICAgICAgICAgICAgICBEb250RGVsZXRlCkBA
IC00MDEsNiArNDA1LDEzIEBAIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNT
dGEKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNPcHRpb25Db25zdHJ1Y3Rvcj4oZXhl
Yywgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgp
KSkpOwogfQogCitKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVdlYktpdENTU01hdHJpeChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihhc09iamVjdChzbG90
LnNsb3RCYXNlKCkpKS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTV2ViS2l0Q1NTTWF0
cml4Q29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KGFzT2Jq
ZWN0KHNsb3Quc2xvdEJhc2UoKSkpKTsKK30KKyAKIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNl
WE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dC
YXNlKj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykp
CkBAIC00OTEsNiArNTAyLDE0IEBAIHZvaWQgc2V0SlNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNT
dGF0ZSoKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0
RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIldvcmtlciIpLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgc2V0
SlNET01XaW5kb3dCYXNlV2ViS2l0Q1NTTWF0cml4KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCit7CisgICAgaWYgKCFzdGF0aWNfY2FzdDxK
U0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisg
ICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09iamVjdCktPnB1dERpcmVjdChJ
ZGVudGlmaWVyKGV4ZWMsICJXZWJLaXRDU1NNYXRyaXgiKSwgdmFsdWUpOworfQorCiB2b2lkIHNl
dEpTRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IHRoaXNPYmplY3QsIEpTVmFsdWVQdHIgdmFsdWUpCiB7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxK
U0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+YWxsb3dzQWNjZXNzRnJvbShleGVjKSkKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRD
U1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCIKKworI2lu
Y2x1ZGUgIldlYktpdENTU01hdHJpeC5oIgorI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4Lmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIldlYktp
dENTU01hdHJpeENvbnN0cnVjdG9yIiwgMCwgMCwgMCB9OworCitKU1dlYktpdENTU01hdHJpeENv
bnN0cnVjdG9yOjpKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICA6IERPTU9iamVjdChKU1dlYktp
dENTU01hdHJpeENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKK30KKwor
c3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJLaXRDU1NNYXRyaXgoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgU3RyaW5nIHM7CisgICAg
aWYgKGFyZ3Muc2l6ZSgpID49IDEpCisgICAgICAgIHMgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0
cmluZyhleGVjKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8
V2ViS2l0Q1NTTWF0cml4PiBtYXRyaXggPSBXZWJLaXRDU1NNYXRyaXg6OmNyZWF0ZShzLCBlYyk7
CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gQ1JFQVRFX0RPTV9P
QkpFQ1RfV1JBUFBFUihleGVjLCBXZWJLaXRDU1NNYXRyaXgsIG1hdHJpeC5nZXQoKSk7Cit9CisK
K0NvbnN0cnVjdFR5cGUgSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0V2ViS2l0Q1NTTWF0cml4OworICAgIHJldHVybiBD
b25zdHJ1Y3RUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0Q1NTTWF0cml4Q29u
c3RydWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTV2ViS2l0Q1NTTWF0cml4
Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yX2gKKwor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yIDog
cHVibGljIERPTU9iamVjdCB7CitwdWJsaWM6CisgICAgSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBzdGF0
aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRlOgorICAgIHZpcnR1YWwg
SlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7
CisgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJnNfaW5mbzsgfQorfTsKKworfQorCisjZW5kaWYgLy8gSlNXZWJLaXRDU1NNYXRyaXhD
b25zdHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAkocmV2aXNp
b24gMzk4ODApCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw3IEBACiAjaW1wb3J0ICJET01VSUV2ZW50SW50ZXJuYWwu
aCIKICNpbXBvcnQgIkRPTVdlYktpdENTU0tleWZyYW1lUnVsZUludGVybmFsLmgiCiAjaW1wb3J0
ICJET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVdlYktp
dENTU01hdHJpeEludGVybmFsLmgiCiAjaW1wb3J0ICJET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01XaGVlbEV2ZW50SW50ZXJuYWwuaCIKIApJbmRleDog
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9XZWJLaXRDU1NNYXRyaXguY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTTWF0cml4LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgor
I2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJv
cGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU01hdHJpeC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1dlYktpdENTU01hdHJpeDo6V2ViS2l0Q1NTTWF0cml4KCkKKyAgICA6IFN0eWxl
QmFzZSgwKQoreworfQorCitXZWJLaXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBX
ZWJLaXRDU1NNYXRyaXgmIG0pCisgICAgOiBTdHlsZUJhc2UoMCkKKyAgICAsIG1fbWF0cml4KG0u
bV9tYXRyaXgpCit7Cit9CisKK1dlYktpdENTU01hdHJpeDo6V2ViS2l0Q1NTTWF0cml4KGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQorICAgIDogU3R5bGVCYXNlKDApCisgICAgLCBtX21h
dHJpeChtKQoreworfQorCitXZWJLaXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBT
dHJpbmcmIHMsIEV4Y2VwdGlvbkNvZGUmIGVjKSAKKyAgICA6IFN0eWxlQmFzZSgwKQoreworICAg
IHNldE1hdHJpeFZhbHVlKHMsIGVjKTsKK30KKworV2ViS2l0Q1NTTWF0cml4Ojp+V2ViS2l0Q1NT
TWF0cml4KCkKK3sKK30KKwordm9pZCBXZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBDU1NQYXJzZXIg
cCh1c2VTdHJpY3RQYXJzaW5nKCkpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gc3R5bGVEZWNsYXJhdGlvbiA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVh
dGUoKTsKKyAgICBpZiAocC5wYXJzZVZhbHVlKHN0eWxlRGVjbGFyYXRpb24uZ2V0KCksIENTU1By
b3BlcnR5V2Via2l0VHJhbnNmb3JtLCBzdHJpbmcsIHRydWUpKSB7CisgICAgICAgIC8vIENvbnZl
cnQgdG8gVHJhbnNmb3JtT3BlcmF0aW9ucy4gVGhpcyBjYW4gZmFpbCBpZiBhIHByb3BlcnR5IAor
ICAgICAgICAvLyByZXF1aXJlcyBzdHlsZSAoaS5lLiwgcGFyYW0gdXNlcyAnZW1zJyBvciAnZXhz
JykKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsID0gIHN0eWxlRGVjbGFyYXRpb24t
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOworICAgICAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIGlmICghQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWwuZ2V0KCksIDAsIG9wZXJhdGlv
bnMpKSB7CisgICAgICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnQgdHJhbnNmb3JtIG9wZXJh
dGlvbnMgdG8gYSBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4gVGhpcyBjYW4gZmFpbAorICAgICAgICAv
LyBpZiBhIHBhcmFtIGhhcyBhIHBlcmNlbnRhZ2UgKCclJykKKyAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAob3BlcmF0aW9ucy5v
cGVyYXRpb25zKClbaV0uZ2V0KCktPmFwcGx5KHQsIEludFNpemUoMCwgMCkpKSB7CisgICAgICAg
ICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gc2V0IHRoZSBtYXRyaXgK
KyAgICAgICAgbV9tYXRyaXggPSB0OworICAgIH0gZWxzZQorICAgICAgICBpZiAoIXN0cmluZy5p
c0VtcHR5KCkpIC8vIHRoZXJlIGlzIHNvbWV0aGluZyB0aGVyZSBidXQgcGFyc2luZyBmYWlsZWQK
KyAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKK30KKworLy8gdGhpcyBpcyBhIG11bHRSaWdo
dCAodGhpcyA9IHRoaXMgKiBzZWNvbmRNYXRyaXgpCitQYXNzUmVmUHRyPFdlYktpdENTU01hdHJp
eD4gV2ViS2l0Q1NTTWF0cml4OjptdWx0aXBseShXZWJLaXRDU1NNYXRyaXgqIHNlY29uZE1hdHJp
eCkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0bXAobV9tYXRyaXgpOworICAgIHRtcC5t
dWx0aXBseShzZWNvbmRNYXRyaXgtPm1fbWF0cml4KTsKKyAgICByZXR1cm4gV2ViS2l0Q1NTTWF0
cml4OjpjcmVhdGUodG1wKTsKK30KKworUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IFdlYktp
dENTU01hdHJpeDo6aW52ZXJzZShFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fbWF0
cml4LmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gV2ViS2l0Q1NTTWF0cml4
OjpjcmVhdGUobV9tYXRyaXguaW52ZXJzZSgpKTsKK30KKworUGFzc1JlZlB0cjxXZWJLaXRDU1NN
YXRyaXg+IFdlYktpdENTU01hdHJpeDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit7Cisg
ICAgaWYgKGlzbmFuKHgpKQorICAgICAgICB4ID0gMDsgCisgICAgaWYgKGlzbmFuKHkpKQorICAg
ICAgICB5ID0gMDsgCisgICAgcmV0dXJuIFdlYktpdENTU01hdHJpeDo6Y3JlYXRlKG1fbWF0cml4
LnRyYW5zbGF0ZSh4LCB5KSk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiBXZWJL
aXRDU1NNYXRyaXg6OnNjYWxlKGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKQoreworICAgIGlm
IChpc25hbihzY2FsZVgpKSBzY2FsZVggPSAxOyAKKyAgICBpZiAoaXNuYW4oc2NhbGVZKSkgc2Nh
bGVZID0gc2NhbGVYOyAKKyAgICByZXR1cm4gV2ViS2l0Q1NTTWF0cml4OjpjcmVhdGUobV9tYXRy
aXguc2NhbGUoc2NhbGVYLHNjYWxlWSkpOworfQorCitQYXNzUmVmUHRyPFdlYktpdENTU01hdHJp
eD4gV2ViS2l0Q1NTTWF0cml4Ojpyb3RhdGUoZmxvYXQgcm90KQoreworICAgIGlmIChpc25hbihy
b3QpKQorICAgICAgICByb3QgPSAwOworICAgIHJldHVybiBXZWJLaXRDU1NNYXRyaXg6OmNyZWF0
ZShtX21hdHJpeC5yb3RhdGUocm90KSk7Cit9CisKK1N0cmluZyBXZWJLaXRDU1NNYXRyaXg6OnRv
U3RyaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIm1hdHJpeCglZiwgJWYsICVm
LCAlZiwgJWYsICVmKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9tYXRyaXguYSgp
LCBtX21hdHJpeC5iKCksIG1fbWF0cml4LmMoKSwgbV9tYXRyaXguZCgpLCBtX21hdHJpeC5lKCks
IG1fbWF0cml4LmYoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvY3NzL1dlYktpdENTU01hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1dlYktp
dENTU01hdHJpeC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJLaXRDU1NNYXRyaXhfaAorI2RlZmlu
ZSBXZWJLaXRDU1NNYXRyaXhfaAorCisjaW5jbHVkZSAiU3R5bGVCYXNlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdlYktpdENTU01hdHJpeCA6IHB1YmxpYyBTdHlsZUJh
c2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYktpdENTU01hdHJpeD4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViS2l0Q1NTTWF0cml4
KCkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IGNyZWF0
ZShjb25zdCBXZWJLaXRDU1NNYXRyaXgmIG0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYktpdENTU01hdHJpeChtKSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYktpdENTU01hdHJpeD4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRDU1NNYXRyaXgobSkpOwor
ICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IGNyZWF0ZShjb25z
dCBTdHJpbmcmIHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXZWJLaXRDU1NNYXRyaXgocywgZWMpKTsKKyAgICB9CisgICAgCisgICAgdmly
dHVhbCB+V2ViS2l0Q1NTTWF0cml4KCk7CisKKyAgICBmbG9hdCBhKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4LmEoKSk7IH0KKyAgICBmbG9hdCBiKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4LmIoKSk7IH0KKyAgICBmbG9hdCBj
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4LmMoKSk7IH0KKyAg
ICBmbG9hdCBkKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4LmQo
KSk7IH0KKyAgICBmbG9hdCBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
bWF0cml4LmUoKSk7IH0KKyAgICBmbG9hdCBmKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fbWF0cml4LmYoKSk7IH0KKyAgICAKKyAgICB2b2lkIHNldEEoZmxvYXQgZikgeyBt
X21hdHJpeC5zZXRBKGYpOyB9CisgICAgdm9pZCBzZXRCKGZsb2F0IGYpIHsgbV9tYXRyaXguc2V0
QihmKTsgfQorICAgIHZvaWQgc2V0QyhmbG9hdCBmKSB7IG1fbWF0cml4LnNldEMoZik7IH0KKyAg
ICB2b2lkIHNldEQoZmxvYXQgZikgeyBtX21hdHJpeC5zZXREKGYpOyB9CisgICAgdm9pZCBzZXRF
KGZsb2F0IGYpIHsgbV9tYXRyaXguc2V0RShmKTsgfQorICAgIHZvaWQgc2V0RihmbG9hdCBmKSB7
IG1fbWF0cml4LnNldEYoZik7IH0KKyAKKyAgICB2b2lkIHNldE1hdHJpeFZhbHVlKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJik7CisgICAgCisgICAgLy8gdGhpcyA9IHRoaXMg
KiBzZWNvbmRNYXRyaXgKKyAgICBQYXNzUmVmUHRyPFdlYktpdENTU01hdHJpeD4gbXVsdGlwbHko
V2ViS2l0Q1NTTWF0cml4KiBzZWNvbmRNYXRyaXgpOworICAgIAorICAgIC8vIEZJWE1FOiB3ZSBy
ZWFsbHkgc2hvdWxkIGhhdmUgYW4gZXhjZXB0aW9uIGhlcmUsIGZvciB3aGVuIG1hdHJpeCBpcyBu
b3QgaW52ZXJ0aWJsZQorICAgIFBhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiBpbnZlcnNlKEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYktpdENTU01hdHJpeD4gdHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpOworICAgIFBhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiBzY2Fs
ZShmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSk7CisgICAgUGFzc1JlZlB0cjxXZWJLaXRDU1NN
YXRyaXg+IHJvdGF0ZShmbG9hdCByb3QpOworICAgIAorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0oKSB7IHJldHVybiBtX21hdHJpeDsgfQorICAgIAorICAgIFN0cmlu
ZyB0b1N0cmluZygpOworICAgIAorcHJvdGVjdGVkOgorICAgIFdlYktpdENTU01hdHJpeCgpOwor
ICAgIFdlYktpdENTU01hdHJpeChjb25zdCBXZWJLaXRDU1NNYXRyaXgmKTsKKyAgICBXZWJLaXRD
U1NNYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICBXZWJLaXRDU1NNYXRy
aXgoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgKTsKKworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fbWF0cml4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gV2ViS2l0Q1NTTWF0cml4X2gKSW5kZXg6IFdlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmlkbAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5pZGwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworbW9kdWxlIGNzcyB7CisKKyAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCA/Ogor
ICAgIGludGVyZmFjZSBbCisgICAgXSBXZWJLaXRDU1NNYXRyaXggeworCisgICAgICAgIGF0dHJp
YnV0ZSBmbG9hdCBhOworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgYjsKKyAgICAgICAgYXR0cmli
dXRlIGZsb2F0IGM7CisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBkOworICAgICAgICBhdHRyaWJ1
dGUgZmxvYXQgZTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IGY7CisKKyAgICAgICAgdm9pZCAg
ICAgICAgICAgIHNldE1hdHJpeFZhbHVlKGluIERPTVN0cmluZyBzdHJpbmcpIHJhaXNlcyAoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4IG11bHRpcGx5KGluIFdlYktpdENT
U01hdHJpeCBzZWNvbmRNYXRyaXgpOworICAgICAgICBXZWJLaXRDU1NNYXRyaXggaW52ZXJzZSgp
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4IHRyYW5zbGF0
ZShpbiBmbG9hdCB4LCBpbiBmbG9hdCB5KTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4IHNjYWxl
KGluIGZsb2F0IHNjYWxlWCwgaW4gZmxvYXQgc2NhbGVZKTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0
cml4IHJvdGF0ZShpbiBmbG9hdCByb3QpOworICAgICAgICAKKyAgICAgICAgW0RvbnRFbnVtXSBE
T01TdHJpbmcgdG9TdHJpbmcoKTsKKyAgICB9OworCit9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzOTkx
OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1
IEBACisyMDA5LTAxLTE0ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCAy
RCBXZWJLaXRDU1NNYXRyaXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNDIxCisKKyAgICAgICAgKiBhbmltYXRpb25zL2NvbWJvLXRyYW5zZm9ybS10
cmFuc2xhdGUrc2NhbGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGFuaW1hdGlvbnMvY29tYm8t
dHJhbnNmb3JtLXRyYW5zbGF0ZStzY2FsZS5odG1sOgorICAgICAgICAqIHRyYW5zZm9ybXMvMmQv
Y3NzbWF0cml4LWludGVyZmFjZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRyYW5z
Zm9ybXMvMmQvY3NzbWF0cml4LWludGVyZmFjZS54aHRtbDogQWRkZWQuCisKKzIwMDktMDEtMTMg
IENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RjYXNlIGZvciBpbXBsZW1lbnRhdGlvbiBv
ZiBXZWJLaXRDU1NNYXRyaXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNDIxCisKKyAgICAgICAgKiBhbmltYXRpb25zL2NvbWJvLXRyYW5zZm9ybS10
cmFuc2xhdGUrc2NhbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhbmltYXRpb25z
L2NvbWJvLXRyYW5zZm9ybS10cmFuc2xhdGUrc2NhbGUuaHRtbDogQWRkZWQuCisKIDIwMDktMDEt
MTQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEJldGggRGFraW4uCkluZGV4OiBMYXlvdXRUZXN0cy9hbmltYXRpb25zL2NvbWJvLXRyYW5zZm9y
bS10cmFuc2xhdGUrc2NhbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2FuaW1hdGlvbnMvY29tYm8tdHJhbnNmb3JtLXRyYW5zbGF0ZStzY2FsZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDM5ODgwKQorKysgTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9jb21iby10cmFuc2Zv
cm0tdHJhbnNsYXRlK3NjYWxlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDIgQEAKIFRoaXMgdGVzdCBwZXJmb3JtcyBhbiBhbmltYXRpb24gb2YgdGhlIHRyYW5zbGF0ZSgp
IGFuZCBzY2FsZSgpIG9wZXJhdG9ycy4gSXQgYW5pbWF0ZXMgb3ZlciAyIHNlY29uZHMuIEF0IDAu
NSBhbmQgMSBzZWNvbmQgaXQgdGFrZXMgYSBzbmFwc2hvdCBhbmQgZXhwZWN0cyB0aGUgcmVzdWx0
IHRvIGJlIHdpdGhpbiByYW5nZS4KLVBBU1MgLSAid2Via2l0VHJhbnNmb3JtIiBwcm9wZXJ0eSBm
b3IgImJveCIgZWxlbWVudCBhdCAwLjVzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IDEuMjUsMCww
LDEuNzUsMjUsNTAKLVBBU1MgLSAid2Via2l0VHJhbnNmb3JtIiBwcm9wZXJ0eSBmb3IgImJveCIg
ZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiAxLjUsMCwwLDIuNSw1MCwxMDAK
LQorUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9jb21iby10cmFuc2Zvcm0tdHJh
bnNsYXRlK3NjYWxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9j
b21iby10cmFuc2Zvcm0tdHJhbnNsYXRlK3NjYWxlLmh0bWwJKHJldmlzaW9uIDM5ODgwKQorKysg
TGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9jb21iby10cmFuc2Zvcm0tdHJhbnNsYXRlK3NjYWxlLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTE5LDE2ICsxOSw1NCBAQAogICAgICAgICB0byAgIHsgLXdl
YmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDBweCwgMjAwcHgpIHNjYWxlKDIsNCk7IH0KICAg
ICB9CiAgIDwvc3R5bGU+Ci0gIDxzY3JpcHQgc3JjPSJhbmltYXRpb24tdGVzdC1oZWxwZXJzLmpz
IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4KICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgfQorICAgIAorICAgIHJlc3VsdCA9ICJQQVNTIjsKKyAgICBjb25zdCBkZWZhdWx0VG9s
ZXJhbmNlID0gMC4yOwogICAgIAotICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gWwotICAgICAg
Ly8gW2FuaW1hdGlvbi1uYW1lLCB0aW1lLCBlbGVtZW50LWlkLCBwcm9wZXJ0eSwgZXhwZWN0ZWQt
dmFsdWUsIHRvbGVyYW5jZV0KLSAgICAgIFsiYW5pbSIsIDAuNSwgImJveCIsICJ3ZWJraXRUcmFu
c2Zvcm0iLCBbMS4yNSwwLDAsMS43NSwyNSw1MF0sIDAuMl0sCi0gICAgICBbImFuaW0iLCAxLjAs
ICJib3giLCAid2Via2l0VHJhbnNmb3JtIiwgWzEuNSwwLDAsMi41LDUwLDEwMF0sIDAuMl0sCi0g
ICAgXTsKKyAgICBjb25zdCBleHBlY3RlZCA9ICBbIFsgMS4yNSwwLDAsMS43NSwyNSw1MCBdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgWyAxLjUsMCwwLDIuNSw1MCwxMDAgXSBdOworICAgIGNv
bnN0IHRvbGVyYW5jZSA9IFsgMC4yLDAuMiwwLjIsMC4yLDUsNSBdOworICAgIGNvbnN0IHByb3Ag
PSBbICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIgXTsKKyAgICAKKyAgICBmdW5jdGlvbiBp
c0VxdWFsKGFjdHVhbCwgZGVzaXJlZCwgdG9sZXJhbmNlKQorICAgIHsKKyAgICAgICAgaWYgKHRv
bGVyYW5jZSA9PSB1bmRlZmluZWQgfHwgdG9sZXJhbmNlID09IDApCisgICAgICAgICAgICB0b2xl
cmFuY2UgPSBkZWZhdWx0VG9sZXJhbmNlOworICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKGFj
dHVhbCAtIGRlc2lyZWQpOworICAgICAgICByZXR1cm4gZGlmZiA8PSB0b2xlcmFuY2U7CisgICAg
fQorICAgIAorICAgIGZ1bmN0aW9uIHNuYXBzaG90KHdoaWNoKQorICAgIHsKKyAgICAgICAgaWYg
KHJlc3VsdCAhPSAiUEFTUyIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICB2YXIgdCA9IG5ldyBXZWJLaXRDU1NNYXRyaXgod2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveCcpKS53ZWJraXRUcmFuc2Zvcm0pOworICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgNjsgKytpKQorICAgICAgICAgICAgaWYgKCFpc0VxdWFsKHRbcHJvcFtp
XV0sIGV4cGVjdGVkW3doaWNoXVtpXSwgdG9sZXJhbmNlW2ldKSkgeworICAgICAgICAgICAgICAg
IHJlc3VsdCA9ICJGQUlMKCciK3Byb3BbaV0rIicgd2FzOiIrdFtwcm9wW2ldXSsiLCBleHBlY3Rl
ZDoiK2V4cGVjdGVkW3doaWNoXVtpXSsiKSI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHN0YXJ0KCkKKyAgICB7CisgICAgICAg
IHNldFRpbWVvdXQoInNuYXBzaG90KDApIiwgNTAwKTsKKyAgICAgICAgc2V0VGltZW91dCgic25h
cHNob3QoMSkiLCAxMDAwKTsKKyAgICAgICAgCisgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcp
LmlubmVySFRNTCA9IHJlc3VsdDsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgICAgICB9LCAxMTAwKTsKKyAgICB9CiAgICAgCi0gICAgcnVuQW5pbWF0aW9uVGVz
dChleHBlY3RlZFZhbHVlcyk7CisgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0
QW5pbWF0aW9uU3RhcnQnLCBzdGFydCwgZmFsc2UpOwogICAgIAogICA8L3NjcmlwdD4KIDwvaGVh
ZD4KSW5kZXg6IExheW91dFRlc3RzL3RyYW5zZm9ybXMvMmQvY3NzbWF0cml4LWludGVyZmFjZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvdHJhbnNmb3Jtcy8yZC9jc3Nt
YXRyaXgtaW50ZXJmYWNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3RyYW5zZm9ybXMvMmQvY3NzbWF0cml4LWludGVyZmFjZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTA1IEBACitUaGlzIHRlc3QgZXhlcmNpc2VzIHRoZSBDU1NNYXRyaXgg
aW50ZXJmYWNlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDU1NNYXRyaXggY29u
c3RydWN0b3JzCitQQVNTIGRlZmF1bHQgY29uc3RydWN0b3IKK1BBU1Mgb2JqZWN0IGNvbnN0cnVj
dG9yCitQQVNTIHN0cmluZyBjb25zdHJ1Y3RvcgorCitUZXN0IGJhZCBpbnB1dCB0byBzdHJpbmcg
Y29uc3RydWN0b3IKK1BBU1MgbmV3IFdlYktpdENTU01hdHJpeCgiYmFuYW5hIikgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorCitUZXN0IGF0dHJp
YnV0ZXMgb24gZGVmYXVsdCBtYXRyaXgKK1BBU1MgbS5hIGlzIDEKK1BBU1MgbS5iIGlzIDAKK1BB
U1MgbS5jIGlzIDAKK1BBU1MgbS5kIGlzIDEKK1BBU1MgbS5lIGlzIDAKK1BBU1MgbS5mIGlzIDAK
KworVGVzdCBhdHRyaWJ1dGVzIG9uIGN1c3RvbSBtYXRyaXgKK1BBU1MgbS5hIGlzIDExCitQQVNT
IG0uYiBpcyAxMgorUEFTUyBtLmMgaXMgMjEKK1BBU1MgbS5kIGlzIDIyCitQQVNTIG0uZSBpcyA0
MQorUEFTUyBtLmYgaXMgNDIKKworVGVzdCBzZXRNYXRyaXhWYWx1ZSAtIHNldCB0byBtYXRyaXgo
KQorUEFTUyBtLmEgaXMgMTEKK1BBU1MgbS5iIGlzIDEyCitQQVNTIG0uYyBpcyAyMQorUEFTUyBt
LmQgaXMgMjIKK1BBU1MgbS5lIGlzIDQxCitQQVNTIG0uZiBpcyA0MgorCitUZXN0IHNldE1hdHJp
eFZhbHVlIC0gc2V0IHRvIHRyYW5zbGF0ZSgxMHB4LCAyMHB4KSBzY2FsZSgyLCAzKQorUEFTUyBt
LmEgaXMgMgorUEFTUyBtLmIgaXMgMAorUEFTUyBtLmMgaXMgMAorUEFTUyBtLmQgaXMgMworUEFT
UyBtLmUgaXMgMTAKK1BBU1MgbS5mIGlzIDIwCisKK1Rlc3QgdGhyb3dpbmcgZXhjZXB0aW9uIGZy
b20gc2V0TWF0cml4VmFsdWUKK1BBU1MgbS5zZXRNYXRyaXhWYWx1ZSgiYmFuYW5hIikgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBtLnNl
dE1hdHJpeFZhbHVlKCJ0cmFuc2xhdGUoMTBlbSwgMjAlKSIpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbS5zZXRNYXRyaXhWYWx1ZSgi
dHJhbnNsYXRlKDEwcHgsIDIwcHgpIHNjYWxlKCkiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCisKK1Rlc3QgbXVsdGlwbHkKK1BBU1MgcGFyc2VG
bG9hdChtMy5hKSBpcyAyNQorUEFTUyBwYXJzZUZsb2F0KG0zLmIpIGlzIDI4CitQQVNTIHBhcnNl
RmxvYXQobTMuYykgaXMgNTcKK1BBU1MgcGFyc2VGbG9hdChtMy5kKSBpcyA2NAorUEFTUyBwYXJz
ZUZsb2F0KG0zLmUpIGlzIDEwMAorUEFTUyBwYXJzZUZsb2F0KG0zLmYpIGlzIDExMgorCitUZXN0
IFNWRyBtdWx0aXBseQorUEFTUyBwYXJzZUZsb2F0KG0zLmEpIGlzIDI1CitQQVNTIHBhcnNlRmxv
YXQobTMuYikgaXMgMjgKK1BBU1MgcGFyc2VGbG9hdChtMy5jKSBpcyA1NworUEFTUyBwYXJzZUZs
b2F0KG0zLmQpIGlzIDY0CitQQVNTIHBhcnNlRmxvYXQobTMuZSkgaXMgMTAwCitQQVNTIHBhcnNl
RmxvYXQobTMuZikgaXMgMTEyCisKK1Rlc3QgaW52ZXJzZQorUEFTUyBwYXJzZUZsb2F0KG0yLmEp
IGlzIDAuNQorUEFTUyBwYXJzZUZsb2F0KG0yLmIpIGlzIDAKK1BBU1MgcGFyc2VGbG9hdChtMi5j
KSBpcyAwCitQQVNTIHBhcnNlRmxvYXQobTIuZCkgaXMgMC41CitQQVNTIHBhcnNlRmxvYXQobTIu
ZSkgaXMgLTUKK1BBU1MgcGFyc2VGbG9hdChtMi5mKSBpcyAtMTAKKworVGVzdCB0aHJvd2luZyBl
eGNlcHRpb24gZnJvbSBpbnZlcnNlCitQQVNTIG0uaW52ZXJzZSgpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogTk9UX1NVUFBPUlRFRF9FUlI6IERPTSBFeGNlcHRpb24gOS4KKworVGVzdCB0cmFuc2xh
dGUKK1BBU1MgbS5hIGlzIDEKK1BBU1MgbS5iIGlzIDAKK1BBU1MgbS5jIGlzIDAKK1BBU1MgbS5k
IGlzIDEKK1BBU1MgbS5lIGlzIDEwCitQQVNTIG0uZiBpcyAyMAorCitUZXN0IHNjYWxlCitQQVNT
IG0uYSBpcyAxMAorUEFTUyBtLmIgaXMgMAorUEFTUyBtLmMgaXMgMAorUEFTUyBtLmQgaXMgMjAK
K1BBU1MgbS5lIGlzIDAKK1BBU1MgbS5mIGlzIDAKKworVGVzdCByb3RhdGUKK1BBU1MgbS5hIGlz
IDAuOTg0ODA3Nzg5MzI1NzE0MQorUEFTUyBtLmIgaXMgMC4xNzM2NDgxNzg1Nzc0MjMxCitQQVNT
IG0uYyBpcyAtMC4xNzM2NDgxNzg1Nzc0MjMxCitQQVNTIG0uZCBpcyAwLjk4NDgwNzc4OTMyNTcx
NDEKK1BBU1MgbS5lIGlzIDAKK1BBU1MgbS5mIGlzIDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3RyYW5zZm9y
bXMvMmQvY3NzbWF0cml4LWludGVyZmFjZS54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy90cmFuc2Zvcm1zLzJkL2Nzc21hdHJpeC1pbnRlcmZhY2UueGh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy90cmFuc2Zvcm1zLzJkL2Nzc21hdHJpeC1pbnRlcmZhY2UueGh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTc3IEBACis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorCis8c3ZnIGlkPSJmb28iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPiA8L3N2Zz4KKworPHNjcmlwdD4KKworZGVzY3Jp
cHRpb24oIlRoaXMgdGVzdCBleGVyY2lzZXMgdGhlIENTU01hdHJpeCBpbnRlcmZhY2UiKTsKKwor
ZGVidWcoIiIpOworZGVidWcoIkNTU01hdHJpeCBjb25zdHJ1Y3RvcnMiKTsKKwordmFyIG0gPSBu
dWxsOworbSA9IG5ldyBXZWJLaXRDU1NNYXRyaXgoKTsKK2lmIChtKQorICB0ZXN0UGFzc2VkKCJk
ZWZhdWx0IGNvbnN0cnVjdG9yIik7CitlbHNlCisgIHRlc3RGYWlsZWQoImRlZmF1bHQgY29uc3Ry
dWN0b3IiKTsKKwordmFyIG0yID0gbmV3IFdlYktpdENTU01hdHJpeChtKTsKK2lmIChtMikKKyAg
dGVzdFBhc3NlZCgib2JqZWN0IGNvbnN0cnVjdG9yIik7CitlbHNlCisgIHRlc3RGYWlsZWQoIm9i
amVjdCBjb25zdHJ1Y3RvciIpOworCittID0gbmV3IFdlYktpdENTU01hdHJpeCgibWF0cml4KDEs
IDAsIDAsIDEsIDAsIDApIik7CitpZiAobSkKKyAgdGVzdFBhc3NlZCgic3RyaW5nIGNvbnN0cnVj
dG9yIik7CitlbHNlCisgIHRlc3RGYWlsZWQoInN0cmluZyBjb25zdHJ1Y3RvciIpOworCitkZWJ1
ZygiIik7CitkZWJ1ZygiVGVzdCBiYWQgaW5wdXQgdG8gc3RyaW5nIGNvbnN0cnVjdG9yIik7Citz
aG91bGRUaHJvdygnbmV3IFdlYktpdENTU01hdHJpeCgiYmFuYW5hIiknKTsKKworZGVidWcoIiIp
OworZGVidWcoIlRlc3QgYXR0cmlidXRlcyBvbiBkZWZhdWx0IG1hdHJpeCIpOworbSA9IG5ldyBX
ZWJLaXRDU1NNYXRyaXgoKTsKK3Nob3VsZEJlKCdtLmEnLCAnMScpOworc2hvdWxkQmUoJ20uYics
ICcwJyk7CitzaG91bGRCZSgnbS5jJywgJzAnKTsKK3Nob3VsZEJlKCdtLmQnLCAnMScpOworc2hv
dWxkQmUoJ20uZScsICcwJyk7CitzaG91bGRCZSgnbS5mJywgJzAnKTsKKworZGVidWcoIiIpOwor
ZGVidWcoIlRlc3QgYXR0cmlidXRlcyBvbiBjdXN0b20gbWF0cml4Iik7CittID0gbmV3IFdlYktp
dENTU01hdHJpeCgibWF0cml4KDExLCAxMiwgMjEsIDIyLCA0MSwgNDIpIik7CitzaG91bGRCZSgn
bS5hJywgJzExJyk7CitzaG91bGRCZSgnbS5iJywgJzEyJyk7CitzaG91bGRCZSgnbS5jJywgJzIx
Jyk7CitzaG91bGRCZSgnbS5kJywgJzIyJyk7CitzaG91bGRCZSgnbS5lJywgJzQxJyk7CitzaG91
bGRCZSgnbS5mJywgJzQyJyk7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJUZXN0IHNldE1hdHJpeFZh
bHVlIC0gc2V0IHRvIG1hdHJpeCgpIik7CittID0gbmV3IFdlYktpdENTU01hdHJpeCgpOworbS5z
ZXRNYXRyaXhWYWx1ZSgibWF0cml4KDExLCAxMiwgMjEsIDIyLCA0MSwgNDIpIik7CitzaG91bGRC
ZSgnbS5hJywgJzExJyk7CitzaG91bGRCZSgnbS5iJywgJzEyJyk7CitzaG91bGRCZSgnbS5jJywg
JzIxJyk7CitzaG91bGRCZSgnbS5kJywgJzIyJyk7CitzaG91bGRCZSgnbS5lJywgJzQxJyk7Citz
aG91bGRCZSgnbS5mJywgJzQyJyk7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJUZXN0IHNldE1hdHJp
eFZhbHVlIC0gc2V0IHRvIHRyYW5zbGF0ZSgxMHB4LCAyMHB4KSBzY2FsZSgyLCAzKSIpOworbSA9
IG5ldyBXZWJLaXRDU1NNYXRyaXgoKTsKK20uc2V0TWF0cml4VmFsdWUoInRyYW5zbGF0ZSgxMHB4
LCAyMHB4KSBzY2FsZSgyLCAzKSIpOworc2hvdWxkQmUoJ20uYScsICcyJyk7CitzaG91bGRCZSgn
bS5iJywgJzAnKTsKK3Nob3VsZEJlKCdtLmMnLCAnMCcpOworc2hvdWxkQmUoJ20uZCcsICczJyk7
CitzaG91bGRCZSgnbS5lJywgJzEwJyk7CitzaG91bGRCZSgnbS5mJywgJzIwJyk7CisKK2RlYnVn
KCIiKTsKK2RlYnVnKCJUZXN0IHRocm93aW5nIGV4Y2VwdGlvbiBmcm9tIHNldE1hdHJpeFZhbHVl
Iik7CitzaG91bGRUaHJvdygnbS5zZXRNYXRyaXhWYWx1ZSgiYmFuYW5hIiknKTsKK3Nob3VsZFRo
cm93KCdtLnNldE1hdHJpeFZhbHVlKCJ0cmFuc2xhdGUoMTBlbSwgMjAlKSIpJyk7CitzaG91bGRU
aHJvdygnbS5zZXRNYXRyaXhWYWx1ZSgidHJhbnNsYXRlKDEwcHgsIDIwcHgpIHNjYWxlKCkiKScp
OworCitkZWJ1ZygiIik7CitkZWJ1ZygiVGVzdCBtdWx0aXBseSIpOworbSA9IG5ldyBXZWJLaXRD
U1NNYXRyaXgoIm1hdHJpeCgxLCAyLCAzLCA0LCA1LCA2KSIpOworbTIgPSBuZXcgV2ViS2l0Q1NT
TWF0cml4KCJtYXRyaXgoNywgOCwgOSwgMTAsIDExLCAxMikiKTsKK3ZhciBtMyA9IG0ubXVsdGlw
bHkobTIpOworc2hvdWxkQmUoJ3BhcnNlRmxvYXQobTMuYSknLCAnMjUnKTsKK3Nob3VsZEJlKCdw
YXJzZUZsb2F0KG0zLmIpJywgJzI4Jyk7CitzaG91bGRCZSgncGFyc2VGbG9hdChtMy5jKScsICc1
NycpOworc2hvdWxkQmUoJ3BhcnNlRmxvYXQobTMuZCknLCAnNjQnKTsKK3Nob3VsZEJlKCdwYXJz
ZUZsb2F0KG0zLmUpJywgJzEwMCcpOworc2hvdWxkQmUoJ3BhcnNlRmxvYXQobTMuZiknLCAnMTEy
Jyk7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJUZXN0IFNWRyBtdWx0aXBseSIpOworc3ZnID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpOworbSA9IHN2Zy5jcmVhdGVTVkdNYXRyaXgoKTsK
K20uYSA9IDE7IG0uYiA9IDI7IG0uYyA9IDM7IG0uZCA9IDQ7IG0uZSA9IDU7IG0uZiA9IDY7IAor
bTIgPSBzdmcuY3JlYXRlU1ZHTWF0cml4KCk7CittMi5hID0gNzsgbTIuYiA9IDg7IG0yLmMgPSA5
OyBtMi5kID0gMTA7IG0yLmUgPSAxMTsgbTIuZiA9IDEyOyAKK3ZhciBtMyA9IG0ubXVsdGlwbHko
bTIpOworc2hvdWxkQmUoJ3BhcnNlRmxvYXQobTMuYSknLCAnMjUnKTsKK3Nob3VsZEJlKCdwYXJz
ZUZsb2F0KG0zLmIpJywgJzI4Jyk7CitzaG91bGRCZSgncGFyc2VGbG9hdChtMy5jKScsICc1Nycp
Oworc2hvdWxkQmUoJ3BhcnNlRmxvYXQobTMuZCknLCAnNjQnKTsKK3Nob3VsZEJlKCdwYXJzZUZs
b2F0KG0zLmUpJywgJzEwMCcpOworc2hvdWxkQmUoJ3BhcnNlRmxvYXQobTMuZiknLCAnMTEyJyk7
CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJUZXN0IGludmVyc2UiKTsKK20gPSBuZXcgV2ViS2l0Q1NT
TWF0cml4KCJtYXRyaXgoMiwgMCwgMCwgMiwgMTAsIDIwKSIpOworbTIgPSBtLmludmVyc2UoKTsK
Kworc2hvdWxkQmUoJ3BhcnNlRmxvYXQobTIuYSknLCAnMC41Jyk7CitzaG91bGRCZSgncGFyc2VG
bG9hdChtMi5iKScsICcwJyk7CitzaG91bGRCZSgncGFyc2VGbG9hdChtMi5jKScsICcwJyk7Citz
aG91bGRCZSgncGFyc2VGbG9hdChtMi5kKScsICcwLjUnKTsKK3Nob3VsZEJlKCdwYXJzZUZsb2F0
KG0yLmUpJywgJy01Jyk7CitzaG91bGRCZSgncGFyc2VGbG9hdChtMi5mKScsICctMTAnKTsKKwor
ZGVidWcoIiIpOworZGVidWcoIlRlc3QgdGhyb3dpbmcgZXhjZXB0aW9uIGZyb20gaW52ZXJzZSIp
OworbSA9IG5ldyBXZWJLaXRDU1NNYXRyaXgoIm1hdHJpeCgwLCAwLCAwLCAwLCAwLCAwKSIpOyAv
LyBub3QgaW52ZXJ0aWJsZQorc2hvdWxkVGhyb3coJ20uaW52ZXJzZSgpJyk7CisKK2RlYnVnKCIi
KTsKK2RlYnVnKCJUZXN0IHRyYW5zbGF0ZSIpOworbSA9IG5ldyBXZWJLaXRDU1NNYXRyaXgoKTsK
K20gPSBtLnRyYW5zbGF0ZSgxMCwgMjApOworc2hvdWxkQmUoJ20uYScsICcxJyk7CitzaG91bGRC
ZSgnbS5iJywgJzAnKTsKK3Nob3VsZEJlKCdtLmMnLCAnMCcpOworc2hvdWxkQmUoJ20uZCcsICcx
Jyk7CitzaG91bGRCZSgnbS5lJywgJzEwJyk7CitzaG91bGRCZSgnbS5mJywgJzIwJyk7CisKK2Rl
YnVnKCIiKTsKK2RlYnVnKCJUZXN0IHNjYWxlIik7CittID0gbmV3IFdlYktpdENTU01hdHJpeCgp
OworbSA9IG0uc2NhbGUoMTAsIDIwKTsKK3Nob3VsZEJlKCdtLmEnLCAnMTAnKTsKK3Nob3VsZEJl
KCdtLmInLCAnMCcpOworc2hvdWxkQmUoJ20uYycsICcwJyk7CitzaG91bGRCZSgnbS5kJywgJzIw
Jyk7CitzaG91bGRCZSgnbS5lJywgJzAnKTsKK3Nob3VsZEJlKCdtLmYnLCAnMCcpOworCitkZWJ1
ZygiIik7CitkZWJ1ZygiVGVzdCByb3RhdGUiKTsKK20gPSBuZXcgV2ViS2l0Q1NTTWF0cml4KCk7
CittID0gbS5yb3RhdGUoMTApOworc2hvdWxkQmUoJ20uYScsICcwLjk4NDgwNzc4OTMyNTcxNDEn
KTsKK3Nob3VsZEJlKCdtLmInLCAnMC4xNzM2NDgxNzg1Nzc0MjMxJyk7CitzaG91bGRCZSgnbS5j
JywgJy0wLjE3MzY0ODE3ODU3NzQyMzEnKTsKK3Nob3VsZEJlKCdtLmQnLCAnMC45ODQ4MDc3ODkz
MjU3MTQxJyk7CitzaG91bGRCZSgnbS5lJywgJzAnKTsKK3Nob3VsZEJlKCdtLmYnLCAnMCcpOwor
CitkZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorCis8c2NyaXB0PgorPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="12746"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26763</attachid>
            <date>2009-01-15 11:17:43 -0800</date>
            <delta_ts>2009-01-15 11:19:40 -0800</delta_ts>
            <desc>Patch to update Windows project file</desc>
            <filename>21421-windows-build.patch</filename>
            <type>text/plain</type>
            <size>1995</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTkzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEgQEAKKzIwMDktMDEtMTUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVkIFdpbmRvd3MgcHJvamVjdCBmaWxlIGFmdGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTQyMQorCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisKIDIwMDktMDEtMTUgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMzk5MzQpCisrKyBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE2LDYgKzE3MTYsMTQg
QEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iJChX
ZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1dlYktp
dENTU01hdHJpeC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRT
b3VyY2VzXEpTV2ViS2l0Q1NTTWF0cml4LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCkBAIC04NjE0LDYgKzg2MjIsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFdlYktpdENTU01hdHJpeC5jcHAi
DQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlX1BH
T3xXaW4zMiINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCINCisJCQkJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiDQorCQkJCQkvPg0K
KwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGNzc1xXZWJLaXRDU1NNYXRyaXguaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZS5jcHAiDQogCQkJCT4NCiAJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMTQ0MTcs
NiArMTQ0NDEsMTQgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3Iu
Y3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGJpbmRpbmdzXGpzXEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCINCisJCQkJ
CT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5k
aW5nc1xqc1xKU1dvcmtlckNvbnN0cnVjdG9yLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0K
</data>
<flag name="review"
          id="12767"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26779</attachid>
            <date>2009-01-15 17:30:42 -0800</date>
            <delta_ts>2009-01-15 17:32:46 -0800</delta_ts>
            <desc>patch to fix test case on ppc and get rid of idl file in Resources</desc>
            <filename>21421-fix-testcase.patch</filename>
            <type>text/plain</type>
            <size>3663</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTk1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMDktMDEtMTUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdv
dCByaWQgb2YgLmlkbCBmaWxlIGluIFJlc291cmNlcyBmb3IgYnVnIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQyMS4KKyAgICAgICAgQWxzbyBmaXhlZCB0aGUgdGVz
dCBjYXNlIHRvIHdvcmsgb24gcHBjLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCiAyMDA5LTAxLTE1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzk5NTYp
CisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjAwLDcgKzYwMCw2IEBACiAJCTQ5ODM5MTUyMEYxRTc2QjQwMEMyMzc4MiAvKiBE
T01XZWJLaXRDU1NNYXRyaXhJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxNEYwRjFFNzZCNDAwQzIzNzgyIC8qIERPTVdlYktpdENT
U01hdHJpeEludGVybmFsLmggKi87IH07CiAJCTQ5ODM5MTU4MEYxRTc3NjkwMEMyMzc4MiAvKiBX
ZWJLaXRDU1NNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDk4MzkxNTUwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5jcHAg
Ki87IH07CiAJCTQ5ODM5MTU5MEYxRTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTU2MEYx
RTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaCAqLzsgfTsKLQkJNDk4MzkxNUEwRjFF
Nzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTU3MEYxRTc3NjkwMEMyMzc4MiAvKiBX
ZWJLaXRDU1NNYXRyaXguaWRsICovOyB9OwogCQk0OTgzOTE2MzBGMUU4RUUxMDBDMjM3ODIgLyog
SlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE2MTBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJL
aXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAgKi87IH07CiAJCTQ5ODM5MTY0MEYxRThFRTEwMEMy
Mzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE2MjBGMUU4RUUxMDBDMjM3ODIgLyog
SlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oICovOyB9OwogCQk0OUU5MTFDMzBFRjg2RDQ3
MDA5RDBDQUYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFOTExQjMwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRy
YW5zZm9ybWF0aW9uTWF0cml4LmNwcCAqLzsgfTsKQEAgLTE2NjU2LDcgKzE2NjU1LDYgQEAKIAkJ
CQk4NTEzNkNBODBBRUQ2NjU5MDBGOTBBM0QgLyogd2VzdFJlc2l6ZUN1cnNvci5wbmcgaW4gUmVz
b3VyY2VzICovLAogCQkJCTFBQjFBRTdBMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tSW5DdXJzb3Iu
cG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QjBDMDUxRkRFMDAxMzlGNEYgLyogem9v
bU91dEN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAotCQkJCTQ5ODM5MTVBMEYxRTc3NjkwMEMy
Mzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDM5OTU2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEgQEAKKzIwMDktMDEtMTUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVkIHRlc3QgY2FzZSB0byB3b3JrIG9uIHBwYywgd2hpY2ggKGFwcGFyZW50bHkpIGhhcyBzb21l
IGRpZmZlcmVuY2UgaW4gc2luKCkgYW5kIGNvcygpCisKKyAgICAgICAgKiB0cmFuc2Zvcm1zLzJk
L2Nzc21hdHJpeC1pbnRlcmZhY2UueGh0bWw6CisKIDIwMDktMDEtMTUgIE9saXZlciBIdW50ICA8
b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5k
ZXg6IExheW91dFRlc3RzL3RyYW5zZm9ybXMvMmQvY3NzbWF0cml4LWludGVyZmFjZS54aHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy90cmFuc2Zvcm1zLzJkL2Nzc21hdHJpeC1pbnRlcmZh
Y2UueGh0bWwJKHJldmlzaW9uIDM5OTU2KQorKysgTGF5b3V0VGVzdHMvdHJhbnNmb3Jtcy8yZC9j
c3NtYXRyaXgtaW50ZXJmYWNlLnhodG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsMTAgKzE0MCwx
MCBAQCBkZWJ1ZygiIik7CiBkZWJ1ZygiVGVzdCByb3RhdGUiKTsKIG0gPSBuZXcgV2ViS2l0Q1NT
TWF0cml4KCk7CiBtID0gbS5yb3RhdGUoMTApOwotc2hvdWxkQmUoJ20uYScsICcwLjk4NDgwNzc4
OTMyNTcxNDEnKTsKLXNob3VsZEJlKCdtLmInLCAnMC4xNzM2NDgxNzg1Nzc0MjMxJyk7Ci1zaG91
bGRCZSgnbS5jJywgJy0wLjE3MzY0ODE3ODU3NzQyMzEnKTsKLXNob3VsZEJlKCdtLmQnLCAnMC45
ODQ4MDc3ODkzMjU3MTQxJyk7CitzaG91bGRCZSgnTWF0aC5yb3VuZChtLmEqMTAwMDAwMCkvMTAw
MDAwMCcsICcwLjk4NDgwOCcpOworc2hvdWxkQmUoJ01hdGgucm91bmQobS5iKjEwMDAwMDApLzEw
MDAwMDAnLCAnMC4xNzM2NDgnKTsKK3Nob3VsZEJlKCdNYXRoLnJvdW5kKG0uYyoxMDAwMDAwKS8x
MDAwMDAwJywgJy0wLjE3MzY0OCcpOworc2hvdWxkQmUoJ01hdGgucm91bmQobS5kKjEwMDAwMDAp
LzEwMDAwMDAnLCAnMC45ODQ4MDgnKTsKIHNob3VsZEJlKCdtLmUnLCAnMCcpOwogc2hvdWxkQmUo
J20uZicsICcwJyk7CiAK
</data>
<flag name="review"
          id="12779"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>