<?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>43691</bug_id>
          
          <creation_ts>2010-08-08 10:07:31 -0700</creation_ts>
          <short_desc>Add missing SVGPathSegList source for SVGPathParser</short_desc>
          <delta_ts>2010-08-10 01:48:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43696</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261896</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-08 10:07:31 -0700</bug_when>
    <thetext>Add missing SVGPathSegList source for SVGPathParser, to create different Path data from SVGPathSegList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261901</commentid>
    <comment_count>1</comment_count>
      <attachid>63847</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-08 10:31:05 -0700</bug_when>
    <thetext>Created attachment 63847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262504</commentid>
    <comment_count>2</comment_count>
      <attachid>63847</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-09 23:08:49 -0700</bug_when>
    <thetext>Comment on attachment 63847
Patch

Still needs some tweaks:

WebCore/ChangeLog:11
 +          Did some refactoring of SVGPathSource, the input data of SVGPathParser. The parsing process
Refactored SVGPathSource code, to read concrete path segments instead of type/flag/coordinates from the data sources.
This is a further abstraction and seperates the reading of content from the parsing and interpreting.

WebCore/svg/SVGPathByteStreamSource.cpp:79
 +  bool SVGPathByteStreamSource::parseCurveToCubicSegment(FloatPoint&amp; point1 , FloatPoint&amp; point2, FloatPoint&amp; targetPoint)
Superfluous space before comma.

WebCore/svg/SVGPathParser.cpp:76
 +      if (!m_source-&gt;parseMoveToSegment(targetPoint))
parseLineToSegment! :-)

WebCore/svg/SVGPathSegListSource.cpp:39
 +      m_itemEnd = pathSegList-&gt;numberOfItems();
For consistency: s/pathSegList/m_pathSegList/

WebCore/svg/SVGPathSegListSource.cpp:78
 +      SVGPathSegSingleCoord* moveTo = static_cast&lt;SVGPathSegSingleCoord*&gt;(m_segment);
You should ASSERT that the type is correct before casting, and also in all the other parse*Segment functions.

WebCore/svg/SVGPathSegListSource.cpp:107
 +  bool SVGPathSegListSource::parseCurveToCubicSegment(FloatPoint&amp; point1 , FloatPoint&amp; point2, FloatPoint&amp; targetPoint)
Superfluous space before comma.

WebCore/svg/SVGPathSegListSource.cpp:138
 +      SVGPathSegSingleCoord* quadraticSmooth = static_cast&lt;SVGPathSegSingleCoord*&gt;(m_segment);
You can cast to the concrete SVGPathSegCurveToQudaraticSmoothSegment, no?

WebCore/svg/SVGPathSegListSource.h:60
 +      SVGPathSeg* m_segment;
Hm, as SVGPathSeg is refcounted, you&apos;d better store a RefPtr&lt;SVGPathSeg&gt; here, it&apos;s safer.
Instead of using static_cast to cast from SVGPathSeg to the individual types, you can use static_pointer_cast, that gives the same functionality but operates on RefPtrs.

WebCore/svg/SVGPathStringSource.cpp:164
 +  bool SVGPathStringSource::parseCurveToCubicSegment(FloatPoint&amp; point1 , FloatPoint&amp; point2, FloatPoint&amp; targetPoint)
Superfluous space before comma.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262510</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-09 23:22:58 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 63847 [details])

&gt; WebCore/svg/SVGPathSegListSource.cpp:138
&gt;  +      SVGPathSegSingleCoord* quadraticSmooth = static_cast&lt;SVGPathSegSingleCoord*&gt;(m_segment);
&gt; You can cast to the concrete SVGPathSegCurveToQudaraticSmoothSegment, no?

Sure, but I want to avoid unneccessary includes here. The same for lineTo and moveTo. All of them need to be included, just to get x and y. Not needed in my eyes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262513</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-09 23:42:58 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 63847 [details] [details])
&gt; 
&gt; &gt; WebCore/svg/SVGPathSegListSource.cpp:138
&gt; &gt;  +      SVGPathSegSingleCoord* quadraticSmooth = static_cast&lt;SVGPathSegSingleCoord*&gt;(m_segment);
&gt; &gt; You can cast to the concrete SVGPathSegCurveToQudaraticSmoothSegment, no?
&gt; 
&gt; Sure, but I want to avoid unneccessary includes here. The same for lineTo and moveTo. All of them need to be included, just to get x and y. Not needed in my eyes.

With ther type ASSERT you mentioned above, I had to include all these files and have to write something like:

    ASSERT(static_cast&lt;SVGPathSegType&gt;(m_segment-&gt;pathSegType()) == PathSegMoveToAbs
           || static_cast&lt;SVGPathSegType&gt;(m_segment-&gt;pathSegType()) == PathSegMoveToRel);

for every function :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262521</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-10 00:07:56 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 63847 [details] [details])
&gt; 
&gt; &gt; WebCore/svg/SVGPathSegListSource.cpp:138
&gt; &gt;  +      SVGPathSegSingleCoord* quadraticSmooth = static_cast&lt;SVGPathSegSingleCoord*&gt;(m_segment);
&gt; &gt; You can cast to the concrete SVGPathSegCurveToQudaraticSmoothSegment, no?
&gt; 
&gt; Sure, but I want to avoid unneccessary includes here. The same for lineTo and moveTo. All of them need to be included, just to get x and y. Not needed in my eyes.

Ok, you can leave it as is.

(In reply to comment #4)
&gt; 
&gt; With ther type ASSERT you mentioned above, I had to include all these files and have to write something like:
&gt; 
&gt;     ASSERT(static_cast&lt;SVGPathSegType&gt;(m_segment-&gt;pathSegType()) == PathSegMoveToAbs
&gt;            || static_cast&lt;SVGPathSegType&gt;(m_segment-&gt;pathSegType()) == PathSegMoveToRel);

Not at all, why would you want to cast?
ASSERT(m_segment-&gt;pathSegType() == PathSegMoveToAbs || m_segment-&gt;pathSegType() == PathSegMoveToRel); would work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262539</commentid>
    <comment_count>6</comment_count>
      <attachid>63982</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-10 01:01:24 -0700</bug_when>
    <thetext>Created attachment 63982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262544</commentid>
    <comment_count>7</comment_count>
      <attachid>63982</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-10 01:11:33 -0700</bug_when>
    <thetext>Comment on attachment 63982
Patch

Ok, I gave a bad suggestion. Storing m_segment as RefPtr is fine, but using static_pointer_cast is pointless, as we&apos;d ref/and deref the object during RefPtr&lt;&gt; creation and destruction, in parse*Segment, which is unncessary and just creates usless refs/derefs.

Leave RefPtr&lt;SVGPathSeg&gt; m_segment this is fine, but use:
SVGPathSegSingleCoord* moveTo = static_cast&lt;SVGPathSegSingleCoord*&gt;(m_segment.get());

here. Sorry for the wrong suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262547</commentid>
    <comment_count>8</comment_count>
      <attachid>63982</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-10 01:13:15 -0700</bug_when>
    <thetext>Comment on attachment 63982
Patch

Forgot to say, other than that it looks great. Please fix the casts, then I&apos;ll r+ it... r- for now as EWS is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262549</commentid>
    <comment_count>9</comment_count>
      <attachid>63986</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-10 01:23:22 -0700</bug_when>
    <thetext>Created attachment 63986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262552</commentid>
    <comment_count>10</comment_count>
      <attachid>63986</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-10 01:36:49 -0700</bug_when>
    <thetext>Comment on attachment 63986
Patch

Looks good, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262555</commentid>
    <comment_count>11</comment_count>
      <attachid>63986</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-10 01:47:57 -0700</bug_when>
    <thetext>Comment on attachment 63986
Patch

Clearing flags on attachment: 63986

Committed r65059: &lt;http://trac.webkit.org/changeset/65059&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262556</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-10 01:48:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63847</attachid>
            <date>2010-08-08 10:31:05 -0700</date>
            <delta_ts>2010-08-10 01:01:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43691-20100808193102.patch</filename>
            <type>text/plain</type>
            <size>39813</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDk1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMDgtMDggIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
bWlzc2luZyBTVkdQYXRoU2VnTGlzdCBzb3VyY2UgZm9yIFNWR1BhdGhQYXJzZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjkxCisKKyAgICAgICAg
QWRkZWQgU1ZHUGF0aFNlZ0xpc3RTb3VyY2UgdG8gcGFyc2Ugbm9ybWFsaXplZCBvciB1bmFsdGVy
ZWQgU1ZHUGF0aFNlZ0xpc3RzIGFuZCB0cmFuc2Zvcm0KKyAgICAgICAgdGhlbSB0byBlaXRoZXIg
YSBTVkcgcGF0aCBzdHJpbmcsIG9yIGEgU1ZHUGF0aEJ5dGVTdHJlYW0uIFRoaXMgd2lsbCBiZSBu
ZWVkZWQgdG8gc3luY2hyb25pemUKKyAgICAgICAgYWxsIFNWR1BhdGhTZWdMaXN0cyBhbmQgdGhl
IFNWRyBwYXRoIHN0cmluZyBvZiB0aGUgJ2QnIGF0dHJpYnV0ZS4KKyAgICAgICAgRGlkIHNvbWUg
cmVmYWN0b3Jpbmcgb2YgU1ZHUGF0aFNvdXJjZSwgdGhlIGlucHV0IGRhdGEgb2YgU1ZHUGF0aFBh
cnNlci4gVGhlIHBhcnNpbmcgcHJvY2VzcworICAgICAgICBjYWxscyByZWFkaW5nIG9yZGVycyBv
ZiB0aGUgc291cmNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHR5cGUgb2YgdGhlIFNWRyBw
YXRoCisgICAgICAgIHNnZW1lbnQuIFRoaXMgaXMgYSBmdXJ0aGVyIGFic3RyYWN0aW9uIGFuZCBz
ZXBlcmF0ZXMgdGhlIHJlYWRpbmcgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHNvdXJjZQorICAgICAg
ICBmcm9tIHBhcnNpbmcgYW5kIGludGVycHJldGluZyB0aGUgY29udGVudC4KKworICAgICAgICBE
b2Vzbid0IGFmZmVjdCBhbnkgdGVzdHMuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL1NWR0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBz
dmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9v
dGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVu
dCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bW92ZVRvTmV4dFRva2VuKToKKyAgICAg
ICAgKiBzdmcvU1ZHUGF0aFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFy
c2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNl
cjo6cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6
OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFBhcnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VB
cmNUb1NlZ21lbnQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OlNWR1BhdGhTZWdM
aXN0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjp+U1ZH
UGF0aFNlZ0xpc3RTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6Omhhc01vcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNl
OjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0
U291cmNlOjpuZXh0Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNv
dXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9D
dWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VB
cmNUb1NlZ21lbnQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Om1vdmVUb05leHRUb2tlbik6Cisg
ICAgICAgICogc3ZnL1NWR1BhdGhTb3VyY2UuaDoKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJz
ZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQpOgorICAg
ICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmg6CisKIDIwMTAtMDgtMDggIElseWEgVGlr
aG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBh
dmVsIEZlbGRtYW4uCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2NDk0OSkKKysrIFdlYkNvcmUvQW5kcm9pZC5tawko
d29ya2luZyBjb3B5KQpAQCAtODg4LDYgKzg4OCw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExP
Q0FMX1NSQ19GSUxFUykgXAogCXN2Zy9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuY3BwIFwKIAlz
dmcvU1ZHUGF0aFNlZ0xpc3QuY3BwIFwKIAlzdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNwcCBc
CisJc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcCBcCiAJc3ZnL1NWR1BhdGhTZWdNb3ZldG8u
Y3BwIFwKIAlzdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwIFwKIAlzdmcvU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5jcHAgXApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2NDk0OSkKKysrIFdlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2OTYsNiArMTY5Niw3IEBAIElGIChFTkFC
TEVfU1ZHKQogICAgICAgICBzdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmNwcAogICAgICAg
ICBzdmcvU1ZHUGF0aFNlZ0xpc3QuY3BwCiAgICAgICAgIHN2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxk
ZXIuY3BwCisgICAgICAgIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAKICAgICAgICAgc3Zn
L1NWR1BhdGhTZWdNb3ZldG8uY3BwCiAgICAgICAgIHN2Zy9TVkdQYXRoU291cmNlU3RyaW5nLmNw
cAogICAgICAgICBzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9u
IDY0OTQ5KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtNDEx
MCw2ICs0MTEwLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRo
U2VnTGlzdC5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwIFwKIAlX
ZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaCBcCisJV2ViQ29yZS9zdmcvU1ZHUGF0
aFNlZ0xpc3RTb3VyY2UuY3BwIFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5o
IFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmNwcCBcCiAJV2ViQ29yZS9zdmcvU1ZH
UGF0aFNlZ01vdmV0by5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmggXApJbmRleDog
V2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHJldmlzaW9uIDY0OTQ5KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTM4NjQsNiArMzg2NCw4IEBACiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhTZWdMaXN0Lmgn
LAogICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwJywKICAgICAgICAg
ICAgICdzdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmgnLAorICAgICAgICAgICAgJ3N2Zy9TVkdQ
YXRoU2VnTGlzdFNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ3N2Zy9TVkdQYXRoU2VnTGlzdFNv
dXJjZS5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFNlZ01vdmV0by5jcHAnLAogICAgICAg
ICAgICAgJ3N2Zy9TVkdQYXRoU2VnTW92ZXRvLmgnLAogICAgICAgICAgICAgJ3N2Zy9TVkdQYXRo
U291cmNlLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2NDk0OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTI4NzAsNiArMjg3MCw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9TVkc9MSkgewogICAgICAgICBzdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmNwcCBc
CiAgICAgICAgIHN2Zy9TVkdQYXRoU2VnTGlzdC5jcHAgXAogICAgICAgICBzdmcvU1ZHUGF0aFNl
Z0xpc3RCdWlsZGVyLmNwcCBcCisgICAgICAgIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAg
XAogICAgICAgICBzdmcvU1ZHUGF0aFNlZ01vdmV0by5jcHAgXAogICAgICAgICBzdmcvU1ZHUGF0
aFN0cmluZ0J1aWxkZXIuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3Bw
IFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjQ5
NDkpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00OTUxNyw2ICs0OTUxNywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdmdcU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xT
VkdQYXRoU2VnTW92ZXRvLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY0OTQ5KQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE0ODAsNiArMTQ4MCw4IEBACiAJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VB
bHBoYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRB
ODFGM0MwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggKi87IH07CiAJCTg0QTgxRjQx
MEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QTgxRjNGMEZDN0UwMjcwMDk1NTMwMCAvKiBT
b3VyY2VHcmFwaGljLmNwcCAqLzsgfTsKIAkJODRBODFGNDIwRkM3RTAyNzAwOTU1MzAwIC8qIFNv
dXJjZUdyYXBoaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg0QTgxRjQwMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggKi87IH07CisJ
CTg0QjZCOTc3MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEI2Qjk3NTEyMEYx
M0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwICovOyB9OworCQk4NEI2Qjk3
ODEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QjZCOTc2MTIwRjEzRTUwMEI4RUZB
RiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5oICovOyB9OwogCQk4NEJEQTE2QjExMzU4RDJBMDBE
QkY2NEMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0QkRBMTY5MTEzNThEMkEwMERCRjY0QyAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICovOyB9OwogCQk4NEJEQTE2QzExMzU4RDJBMDBE
QkY2NEMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEJEQTE2QTExMzU4RDJBMDBEQkY2NEMgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggKi87IH07CiAJCTg0RDBDNDA0MTExNUYxRDQwMDE4QUEz
NCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODREMEM0MDMxMTE1RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9y
bS5jcHAgKi87IH07CkBAIC03MzIwLDYgKzczMjIsOCBAQAogCQk4NEIyQjFGNzA1NkJFRjNBMDBE
MkI3NzEgLyogV2ViQ29yZUtleUdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlS2V5R2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk4NEIyQjFG
ODA1NkJFRjNBMDBEMkI3NzEgLyogV2ViQ29yZUtleUdlbmVyYXRvci5tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBXZWJDb3JlS2V5R2VuZXJh
dG9yLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQk4NEIyQjI0RjA1NkJGMTVGMDBEMkI3NzEgLyogU1NMS2V5R2VuZXJhdG9yTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU1NMS2V5R2VuZXJhdG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJODRCNkI5NzUxMjBGMTNFNTAwQjhFRkFGIC8qIFNW
R1BhdGhTZWdMaXN0U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR1BhdGhTZWdMaXN0U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhTZWdMaXN0U291cmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QkRBMTY5MTEzNThEMkEwMERCRjY0QyAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODRCREExNkExMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODREMEM0MDMxMTE1
RjFENDAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBZmZpbmVUcmFuc2Zvcm0uY3BwOyBwYXRoID0gdHJhbnNmb3Jtcy9B
ZmZpbmVUcmFuc2Zvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUzNjcs
NiArMTUzNzEsOCBAQAogCQkJCUIyMjI3OEVDMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRoU2Vn
TGlzdC5pZGwgKi8sCiAJCQkJODQ3NkM5RTMxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdM
aXN0QnVpbGRlci5jcHAgKi8sCiAJCQkJODQ3NkM5RTQxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1Bh
dGhTZWdMaXN0QnVpbGRlci5oICovLAorCQkJCTg0QjZCOTc1MTIwRjEzRTUwMEI4RUZBRiAvKiBT
VkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgKi8sCisJCQkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFG
IC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggKi8sCiAJCQkJQjIyMjc4RUQwRDAwQkYyMTAwNzFC
NzgyIC8qIFNWR1BhdGhTZWdNb3ZldG8uY3BwICovLAogCQkJCUIyMjI3OEVFMEQwMEJGMjEwMDcx
Qjc4MiAvKiBTVkdQYXRoU2VnTW92ZXRvLmggKi8sCiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFC
NzgyIC8qIFNWR1BhdGhTZWdNb3ZldG9BYnMuaWRsICovLApAQCAtMTk4NDUsNiArMTk4NTEsNyBA
QAogCQkJCUIyMjI3QTdEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTGluZXRvVmVydGlj
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTgxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQ
YXRoU2VnTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3NkM5RTYxMURGNkEwQjAwNTU1QjAy
IC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODRCNkI5Nzgx
MjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0E4NDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ01vdmV0by5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODQzMDBCRDgxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1BhdGhTb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg0MTlEMkJBMTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQYXRo
U3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMxMCw2ICsyMjMxNyw3IEBACiAJ
CQkJQjIyMjdBN0MwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E4MDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0
aFNlZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ3NkM5RTUxMURGNkEwQjAwNTU1QjAy
IC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NEI2Qjk3
NzEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjIyMjdBODMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdNb3ZldG8uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODQxOUQyQjkxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhT
dHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0MzAwQkRBMTIwQzlBRUQwMDIx
OTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0Fs
bEluT25lLmNwcAkocmV2aXNpb24gNjQ5NDkpCisrKyBXZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsNyBAQAogI2luY2x1ZGUgIlNWR1BhdGhT
ZWdMaW5ldG9WZXJ0aWNhbC5jcHAiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuY3BwIgogI2lu
Y2x1ZGUgIlNWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xp
c3RTb3VyY2UuY3BwIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdNb3ZldG8uY3BwIgogI2luY2x1ZGUg
IlNWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCIKICNpbmNsdWRlICJTVkdQYXRoU3RyaW5nU291cmNl
LmNwcCIKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAJKHJldmlz
aW9uIDY0OTQ5KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwyNyArNDEsNzggQEAgYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6aGFzTW9yZURhdAogICAgIHJldHVybiBtX3N0cmVhbUN1cnJlbnQgPCBtX3N0cmVhbUVu
ZDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VGbG9hdChmbG9hdCYg
cmVzdWx0KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlw
ZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCiB7Ci0gICAgcmVzdWx0ID0gcmVhZEZsb2F0
KCk7CisgICAgcGF0aFNlZ1R5cGUgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNW
R1NlZ21lbnRUeXBlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhCeXRl
U3RyZWFtU291cmNlOjpwYXJzZUZsYWcoYm9vbCYgcmVzdWx0KQorU1ZHUGF0aFNlZ1R5cGUgU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQogewotICAg
IHJlc3VsdCA9IHJlYWRGbGFnKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdU
eXBlPihyZWFkU1ZHU2VnbWVudFR5cGUoKSk7Cit9CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK3sKKyAg
ICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0
aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQogewotICAgIHBhdGhTZWdU
eXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsK
KyAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLVNWR1BhdGhTZWdUeXBlIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpuZXh0Q29tbWFuZChT
VkdQYXRoU2VnVHlwZSkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRv
SG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmIHgpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdUeXBlPihyZWFkU1ZHU2VnbWVudFR5cGUoKSk7CisgICAgeCA9IHJlYWRGbG9hdCgp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpw
YXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCYgeSkKK3sKKyAgICB5ID0gcmVhZEZsb2F0
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEgLCBGbG9hdFBvaW50
JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIHBvaW50MSA9IHJlYWRG
bG9hdFBvaW50KCk7CisgICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICB0YXJnZXRQ
b2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9h
dFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIHBvaW50MiA9
IHJlYWRGbG9hdFBvaW50KCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYg
dGFyZ2V0UG9pbnQpCit7CisgICAgcG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICB0YXJn
ZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxv
YXRQb2ludCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFu
Z2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
KQoreworICAgIHJ4ID0gcmVhZEZsb2F0KCk7CisgICAgcnkgPSByZWFkRmxvYXQoKTsKKyAgICBh
bmdsZSA9IHJlYWRGbG9hdCgpOworICAgIGxhcmdlQXJjID0gcmVhZEZsYWcoKTsKKyAgICBzd2Vl
cCA9IHJlYWRGbGFnKCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAg
IHJldHVybiB0cnVlOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVh
bVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291
cmNlLmgJKHJldmlzaW9uIDY0OTQ5KQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDE5IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBtb3Zl
VG9OZXh0VG9rZW4oKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHBhcnNlRmxv
YXQoZmxvYXQmIHJlc3VsdCk7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlRmxhZyhib29sJiByZXN1
bHQpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBl
Jik7CiAgICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlw
ZSk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQm
LCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3Ro
U2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7CisgICAg
dmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2lu
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0Jiwg
ZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKTsKKwogcHJpdmF0ZToKICAgICBTVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZShTVkdQYXRoQnl0ZVN0cmVhbSopOwogCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRo
UGFyc2VyLmNwcAkocmV2aXNpb24gNjQ5NDkpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNDggKzUzLDQ0IEBAIHZvaWQgU1ZHUGF0aFBhcnNl
cjo6cGFyc2VDbG9zZVBhdGhTZWdtZW4KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZU1vdmVU
b1NlZ21lbnQoKQogewotICAgIGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0b1k7Ci0gICAgaWYgKCFt
X3NvdXJjZS0+cGFyc2VGbG9hdCh0b1gpIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1kpKQor
ICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VNb3Zl
VG9TZWdtZW50KHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxv
YXRQb2ludCB0b1BvaW50KHRvWCwgdG9ZKTsKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0g
Tm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3Jk
aW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gdG9Qb2ludDsKKyAgICAgICAg
ICAgIG1fY3VycmVudFBvaW50ICs9IHRhcmdldFBvaW50OwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2N1cnJlbnRQb2ludCA9IHRvUG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2lu
dCA9IHRhcmdldFBvaW50OwogICAgICAgICBtX3N1YlBhdGhQb2ludCA9IG1fY3VycmVudFBvaW50
OwogICAgICAgICBtX2NvbnN1bWVyLT5tb3ZlVG8obV9jdXJyZW50UG9pbnQsIG1fY2xvc2VQYXRo
LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci0+
bW92ZVRvKHRvUG9pbnQsIG1fY2xvc2VQYXRoLCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVy
LT5tb3ZlVG8odGFyZ2V0UG9pbnQsIG1fY2xvc2VQYXRoLCBtX21vZGUpOwogICAgIG1fY2xvc2VQ
YXRoID0gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6
cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAgICBmbG9hdCB0b1g7Ci0gICAgZmxvYXQgdG9ZOwot
ICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQodG9YKSB8fCAhbV9zb3VyY2UtPnBhcnNlRmxv
YXQodG9ZKSkKKyAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIGlmICghbV9zb3VyY2Ut
PnBhcnNlTW92ZVRvU2VnbWVudCh0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEZsb2F0UG9pbnQgdG9Qb2ludCh0b1gsIHRvWSk7CiAgICAgaWYgKG1fcGF0aFBhcnNp
bmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVs
YXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRvUG9pbnQ7
CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0b1BvaW50OworICAgICAgICAgICAgbV9j
dXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKICAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKG1f
Y3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAg
bV9jb25zdW1lci0+bGluZVRvKHRvUG9pbnQsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIt
PmxpbmVUbyh0YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKICAgICBm
bG9hdCB0b1g7Ci0gICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1gpKQorICAgIGlmICgh
bV9zb3VyY2UtPnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQodG9YKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJz
aW5nKSB7CkBAIC0xMTEsNyArMTA3LDcgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVU
b0hvcml6b250YQogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVu
dCgpCiB7CiAgICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQodG9Z
KSkKKyAgICBpZiAoIW1fc291cmNlLT5wYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCh0b1kpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9y
bWFsaXplZFBhcnNpbmcpIHsKQEAgLTEyNywyMyArMTIzLDEyIEBAIGJvb2wgU1ZHUGF0aFBhcnNl
cjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFMKIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQoKQogewotICAgIGZsb2F0IHgxOwotICAgIGZsb2F0IHkxOwotICAgIGZs
b2F0IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0b1k7IAot
ICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQoeDEpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+
cGFyc2VGbG9hdCh5MSkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZsb2F0KHgyKQotICAg
ICAgICB8fCAhbV9zb3VyY2UtPnBhcnNlRmxvYXQoeTIpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+
cGFyc2VGbG9hdCh0b1gpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1kpKQor
ICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAgIEZsb2F0UG9pbnQgcG9pbnQyOworICAgIEZsb2F0
UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VDdXJ2ZVRvQ3ViaWNT
ZWdtZW50KHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEZsb2F0UG9pbnQgcG9pbnQxKHgxLCB5MSk7Ci0gICAgRmxvYXRQb2ludCBwb2lu
dDIoeDIsIHkyKTsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50KHRvWCwgdG9ZKTsKICAgICBp
ZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYg
KG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CiAgICAgICAgICAgICBwb2ludDEgKz0g
bV9jdXJyZW50UG9pbnQ7CkBAIC0xNjEsMTQgKzE0Niw5IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWcKIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9D
dWJpY1Ntb290aFNlZ21lbnQoKQogewotICAgIGZsb2F0IHgyOwotICAgIGZsb2F0IHkyOwotICAg
IGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0b1k7IAotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxv
YXQoeDIpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh5MikKLSAgICAgICAgfHwg
IW1fc291cmNlLT5wYXJzZUZsb2F0KHRvWCkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZs
b2F0KHRvWSkpCisgICAgRmxvYXRQb2ludCBwb2ludDI7CisgICAgRmxvYXRQb2ludCB0YXJnZXRQ
b2ludDsKKyAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQo
cG9pbnQyLCB0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICht
X2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMKQEAgLTE3Nyw4ICsxNTcsNiBA
QCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21vCiAgICAgICAgICYmIG1f
bGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCkKICAgICAgICAgbV9j
b250cm9sUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKIAotICAgIEZsb2F0UG9pbnQgcG9pbnQyKHgy
LCB5Mik7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludCh0b1gsIHRvWSk7CiAgICAgaWYgKG1f
cGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIEZsb2F0UG9p
bnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50MS5zY2FsZSgyLCAyKTsK
QEAgLTE5OSwyMSArMTc3LDE2IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTbW8KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
KCkKIHsKLSAgICBmbG9hdCB4MTsKLSAgICBmbG9hdCB5MTsKLSAgICBmbG9hdCB0b1g7Ci0gICAg
ZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQoeDEpCi0gICAgICAgIHx8
ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh5MSkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZs
b2F0KHRvWCkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZsb2F0KHRvWSkpCisgICAgRmxv
YXRQb2ludCBwb2ludDE7CisgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICBpZiAoIW1f
c291cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KHBvaW50MSwgdGFyZ2V0UG9pbnQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50KHRv
WCwgdG9ZKTsKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcp
IHsKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDE7CiAgICAgICAgIEZsb2F0UG9pbnQg
cG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgIHBvaW50MS5tb3ZlKDIgKiB4MSwgMiAq
IHkxKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodG9YICsgMiAqIHgxLCB0b1kgKyAyICog
eTEpOworICAgICAgICBwb2ludDEubW92ZSgyICogbV9jb250cm9sUG9pbnQueCgpLCAyICogbV9j
b250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodGFyZ2V0UG9pbnQu
eCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIG1fY29u
dHJvbFBvaW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cykgewogICAgICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVudFBvaW50LngoKSwgMiAq
IG1fY3VycmVudFBvaW50LnkoKSk7CiAgICAgICAgICAgICBwb2ludDIubW92ZSgzICogbV9jdXJy
ZW50UG9pbnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKQEAgLTIyNCwyMCArMTk3LDE4
IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGkKIAogICAgICAgICBt
X2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNv
bHV0ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBtX2NvbnRyb2xQb2ludCA9IEZsb2F0UG9pbnQo
eDEsIHkxKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQogICAg
ICAgICAgICAgbV9jb250cm9sUG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIG1fY3Vy
cmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9RdWFkcmF0aWMoRmxvYXRQb2ludCh4MSwgeTEpLCB0YXJnZXRQb2ludCwgbV9tb2Rl
KTsKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhwb2ludDEsIHRhcmdldFBv
aW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6
OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogewotICAgIGZsb2F0IHRvWDsK
LSAgICBmbG9hdCB0b1k7Ci0gICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1gpIHx8ICFt
X3NvdXJjZS0+cGFyc2VGbG9hdCh0b1kpKQorICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Cisg
ICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCh0YXJn
ZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX2xhc3RDb21tYW5k
ICE9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzCkBAIC0yNTEsOCArMjIyLDcgQEAgYm9vbCBT
VkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAgICAgICBjdWJpY1BvaW50LnNj
YWxlKDIsIDIpOwogICAgICAgICBjdWJpY1BvaW50Lm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwg
LW1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxKG1fY3VycmVu
dFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgbV9jdXJyZW50UG9pbnQueSgpICsgMiAq
IGN1YmljUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodG9YICsgMiAqIGN1
YmljUG9pbnQueCgpLCB0b1kgKyAyICogY3ViaWNQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBv
aW50IHRhcmdldFBvaW50KHRvWCwgdG9ZKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodGFy
Z2V0UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICog
Y3ViaWNQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0
ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgICAg
IHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwpAQCAtMjY1LDI5ICsyMzUsMjEgQEAgYm9v
bCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAgICAgICBtX2NvbnRyb2xQ
b2ludCA9IGN1YmljUG9pbnQ7CiAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7
CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgo
RmxvYXRQb2ludCh0b1gsIHRvWSksIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXItPmN1cnZl
VG9RdWFkcmF0aWNTbW9vdGgodGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1NlZ21lbnQoKQogewotICAgIGJv
b2wgbGFyZ2VBcmM7Ci0gICAgYm9vbCBzd2VlcDsKLSAgICBmbG9hdCBhbmdsZTsKICAgICBmbG9h
dCByeDsKICAgICBmbG9hdCByeTsKLSAgICBmbG9hdCB0b1g7Ci0gICAgZmxvYXQgdG9ZOwotICAg
IGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQocngpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFy
c2VGbG9hdChyeSkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZsb2F0KGFuZ2xlKQotICAg
ICAgICB8fCAhbV9zb3VyY2UtPnBhcnNlRmxhZyhsYXJnZUFyYykKLSAgICAgICAgfHwgIW1fc291
cmNlLT5wYXJzZUZsYWcoc3dlZXApCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0
b1gpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1kpKQorICAgIGZsb2F0IGFu
Z2xlOworICAgIGJvb2wgbGFyZ2VBcmM7CisgICAgYm9vbCBzd2VlcDsKKyAgICBGbG9hdFBvaW50
IHRhcmdldFBvaW50OworICAgIGlmICghbV9zb3VyY2UtPnBhcnNlQXJjVG9TZWdtZW50KHJ4LCBy
eSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRv
WSk7CiAgICAgLy8gSWYgcnggPSAwIG9yIHJ5ID0gMCB0aGVuIHRoaXMgYXJjIGlzIHRyZWF0ZWQg
YXMgYSBzdHJhaWdodCBsaW5lIHNlZ21lbnQgKGEgImxpbmV0byIpIGpvaW5pbmcgdGhlIGVuZHBv
aW50cy4KICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvaW1wbG5vdGUuaHRtbCNBcmNP
dXRPZlJhbmdlUGFyYW1ldGVycwogICAgIHJ4ID0gZmFic2YocngpOwpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1BhdGhTZWdMaXN0U291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1Bh
dGhTZWdMaXN0U291cmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCIKKworI2luY2x1ZGUgIlNWR1BhdGhTZWdBcmMu
aCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgiCisjaW5jbHVkZSAiU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oIgorI2luY2x1ZGUgIlNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaCIKKyNpbmNs
dWRlICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTVkdQYXRoU2VnTGlzdFNvdXJjZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2UoU1ZHUGF0aFNlZ0xp
c3QqIHBhdGhTZWdMaXN0KQorICAgIDogbV9wYXRoU2VnTGlzdChwYXRoU2VnTGlzdCkKK3sKKyAg
ICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CisgICAgbV9pdGVtQ3VycmVudCA9IDA7CisgICAgbV9p
dGVtRW5kID0gcGF0aFNlZ0xpc3QtPm51bWJlck9mSXRlbXMoKTsKK30KKworU1ZHUGF0aFNlZ0xp
c3RTb3VyY2U6On5TVkdQYXRoU2VnTGlzdFNvdXJjZSgpCit7Cit9CisKK2Jvb2wgU1ZHUGF0aFNl
Z0xpc3RTb3VyY2U6Omhhc01vcmVEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pdGVtQ3Vy
cmVudCA8IG1faXRlbUVuZDsKK30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VT
VkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCit7CisgICAgQVNTRVJU
KG1fcGF0aFNlZ0xpc3QpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG1fc2VnbWVu
dCA9IG1fcGF0aFNlZ0xpc3QtPmdldEl0ZW0obV9pdGVtQ3VycmVudCwgZWMpLmdldCgpOworICAg
IGlmIChlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBhdGhTZWdUeXBlID0gc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7CisgICAgKytt
X2l0ZW1DdXJyZW50OworICAgIHJldHVybiB0cnVlOworfQorCitTVkdQYXRoU2VnVHlwZSBTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCit7CisgICAgQVNT
RVJUKG1fcGF0aFNlZ0xpc3QpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG1fc2Vn
bWVudCA9IG1fcGF0aFNlZ0xpc3QtPmdldEl0ZW0obV9pdGVtQ3VycmVudCwgZWMpLmdldCgpOwor
ICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdVbmtub3duOworICAgIFNWR1BhdGhT
ZWdUeXBlIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KG1fc2VnbWVu
dC0+cGF0aFNlZ1R5cGUoKSk7CisgICAgKyttX2l0ZW1DdXJyZW50OworICAgIHJldHVybiBwYXRo
U2VnVHlwZTsKK30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdt
ZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIEFTU0VSVChtX3NlZ21lbnQpOwor
ICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZCogbW92ZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z1NpbmdsZUNvb3JkKj4obV9zZWdtZW50KTsKKyAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQo
bW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBT
VkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdl
dFBvaW50KQoreworICAgIEFTU0VSVChtX3NlZ21lbnQpOworICAgIFNWR1BhdGhTZWdTaW5nbGVD
b29yZCogbGluZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkKj4obV9zZWdt
ZW50KTsKKyAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+
eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6
cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYgeCkKK3sKKyAgICBBU1NFUlQobV9z
ZWdtZW50KTsKKyAgICBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbCogaG9yaXpvbnRhbCA9IHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsKj4obV9zZWdtZW50KTsKKyAgICB4
ID0gaG9yaXpvbnRhbC0+eCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCYgeSkKK3sKKyAg
ICBBU1NFUlQobV9zZWdtZW50KTsKKyAgICBTVkdQYXRoU2VnTGluZXRvVmVydGljYWwqIHZlcnRp
Y2FsID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsKj4obV9zZWdtZW50KTsK
KyAgICB5ID0gdmVydGljYWwtPnkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBv
aW50MSAsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7Cisg
ICAgQVNTRVJUKG1fc2VnbWVudCk7CisgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyogY3ViaWMg
PSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljKj4obV9zZWdtZW50KTsKKyAgICBw
b2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7CisgICAgcG9pbnQy
ID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOworICAgIHRhcmdldFBvaW50
ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7Cisg
ICAgQVNTRVJUKG1fc2VnbWVudCk7CisgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aCog
Y3ViaWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoKj4o
bV9zZWdtZW50KTsKKyAgICBwb2ludDIgPSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54MigpLCBj
dWJpY1Ntb290aC0+eTIoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGN1YmljU21v
b3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0
UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgQVNTRVJUKG1f
c2VnbWVudCk7CisgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMqIHF1YWRyYXRpYyA9IHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljKj4obV9zZWdtZW50KTsKKyAgICBw
b2ludDEgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJhdGljLT55MSgpKTsKKyAg
ICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54KCksIHF1YWRyYXRpYy0+eSgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkK
K3sKKyAgICBBU1NFUlQobV9zZWdtZW50KTsKKyAgICBTVkdQYXRoU2VnU2luZ2xlQ29vcmQqIHF1
YWRyYXRpY1Ntb290aCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZCo+KG1fc2Vn
bWVudCk7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpY1Ntb290aC0+eCgp
LCBxdWFkcmF0aWNTbW9vdGgtPnkoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5
LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYg
dGFyZ2V0UG9pbnQpCit7CisgICAgQVNTRVJUKG1fc2VnbWVudCk7CisgICAgU1ZHUGF0aFNlZ0Fy
YyogYXJjVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjKj4obV9zZWdtZW50KTsKKyAgICBy
eCA9IGFyY1RvLT5yMSgpOworICAgIHJ5ID0gYXJjVG8tPnIyKCk7CisgICAgYW5nbGUgPSBhcmNU
by0+YW5nbGUoKTsKKyAgICBsYXJnZUFyYyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKKyAgICBz
d2VlcCA9IGFyY1RvLT5zd2VlcEZsYWcoKTsKKyAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQo
YXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR1BhdGhT
ZWdMaXN0U291cmNlX2gKKyNkZWZpbmUgU1ZHUGF0aFNlZ0xpc3RTb3VyY2VfaAorCisjaWYgRU5B
QkxFKFNWRykKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZy5o
IgorI2luY2x1ZGUgIlNWR1BhdGhTZWdMaXN0LmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNvdXJjZS5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU1ZHUGF0aFNlZ0xpc3RTb3VyY2UgOiBwdWJsaWMgU1ZHUGF0aFNvdXJjZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U1ZHUGF0aFNlZ0xpc3RTb3VyY2U+IGNyZWF0ZShT
VkdQYXRoU2VnTGlzdCogcGF0aFNlZ0xpc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFNWR1BhdGhTZWdMaXN0U291cmNlKHBhdGhTZWdMaXN0KSk7CisgICAgfQorCisgICAg
dmlydHVhbCB+U1ZHUGF0aFNlZ0xpc3RTb3VyY2UoKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNN
b3JlRGF0YSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0
aFNlZ1R5cGUmKTsKKyAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1Bh
dGhTZWdUeXBlKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQ
b2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0Jik7
CisgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxv
YXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3Vi
aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBi
b29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChG
bG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0Jiwg
ZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpOworCitwcml2YXRlOgor
ICAgIFNWR1BhdGhTZWdMaXN0U291cmNlKFNWR1BhdGhTZWdMaXN0Kik7CisKKyAgICBTVkdQYXRo
U2VnTGlzdCogbV9wYXRoU2VnTGlzdDsKKyAgICBTVkdQYXRoU2VnKiBtX3NlZ21lbnQ7CisgICAg
aW50IG1faXRlbUN1cnJlbnQ7CisgICAgaW50IG1faXRlbUVuZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gU1ZHUGF0aFNl
Z0xpc3RTb3VyY2VfaApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAkocmV2aXNpb24gNjQ5NDkpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwx
OSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBib29sIG1vdmVUb05leHRUb2tlbigpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VGbG9hdChmbG9hdCYgcmVzdWx0KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNl
RmxhZyhib29sJiByZXN1bHQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTVkdTZWdtZW50
VHlwZShTVkdQYXRoU2VnVHlwZSYpID0gMDsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5l
eHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkgPSAwOwogCisgICAgdmly
dHVhbCBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2lu
dCYsIEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2lu
dCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2Vn
bWVudChGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVu
dChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSA9IDA7
CisKIHB1YmxpYzoKICAgICBTVkdQYXRoU291cmNlKCkgeyB9CiB9OwpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
UGF0aFN0cmluZ1NvdXJjZS5jcHAJKHJldmlzaW9uIDY0OTQ5KQorKysgV2ViQ29yZS9zdmcvU1ZH
UGF0aFN0cmluZ1NvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIGJv
b2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6aGFzTW9yZURhdGEoKSAKICAgICByZXR1cm4gbV9jdXJy
ZW50IDwgbV9lbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VGbG9hdChm
bG9hdCYgcmVzdWx0KQotewotICAgIHJldHVybiBwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5k
LCByZXN1bHQpOwotfQotCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlRmxhZyhib29s
JiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHBhcnNlQXJjRmxhZyhtX2N1cnJlbnQsIG1fZW5kLCBy
ZXN1bHQpOwotfQotCiBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om1vdmVUb05leHRUb2tlbigp
CiB7CiAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNwYWNlcyhtX2N1cnJlbnQsIG1fZW5kKTsKQEAg
LTE0MSw2ICsxMzEsMTE3IEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om5l
eHQKICAgICByZXR1cm4gbmV4dENvbW1hbmQ7CiB9CiAKK2Jvb2wgU1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIGZs
b2F0IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAgaWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQs
IG1fZW5kLCB0b1gpIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9Z
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJz
ZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgZmxvYXQgdG9Y
OworICAgIGZsb2F0IHRvWTsKKyAgICBpZiAoIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQs
IHRvWCkgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRv
SG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmIHgpCit7CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1f
Y3VycmVudCwgbV9lbmQsIHgpOworfQorCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNl
TGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JiB5KQoreworICAgIHJldHVybiBwYXJzZU51bWJl
cihtX2N1cnJlbnQsIG1fZW5kLCB5KTsKK30KKworYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpw
YXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxICwgRmxvYXRQb2ludCYg
cG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK3sKKyAgICBmbG9hdCB4MTsKKyAgICBm
bG9hdCB5MTsKKyAgICBmbG9hdCB4MjsKKyAgICBmbG9hdCB5MjsKKyAgICBmbG9hdCB0b1g7Cisg
ICAgZmxvYXQgdG9ZOworICAgIGlmICghcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeDEp
CisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB5MSkKKyAgICAgICAg
fHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHgyKQorICAgICAgICB8fCAhcGFyc2VO
dW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeTIpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1
cnJlbnQsIG1fZW5kLCB0b1gpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1f
ZW5kLCB0b1kpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9pbnQxID0gRmxvYXRQb2lu
dCh4MSwgeTEpOworICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKKyAgICB0YXJnZXRQ
b2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9h
dFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIGZsb2F0IHgx
OworICAgIGZsb2F0IHkxOworICAgIGZsb2F0IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAgaWYg
KCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB4MSkKKyAgICAgICAgfHwgIXBhcnNlTnVt
YmVyKG1fY3VycmVudCwgbV9lbmQsIHkxKQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJy
ZW50LCBtX2VuZCwgdG9YKQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2Vu
ZCwgdG9ZKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBvaW50MSA9IEZsb2F0UG9pbnQo
eDEsIHkxKTsKKyAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1
YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCkKK3sKKyAgICBmbG9hdCB4MjsKKyAgICBmbG9hdCB5MjsKKyAgICBmbG9hdCB0b1g7CisgICAg
ZmxvYXQgdG9ZOworICAgIGlmICghcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeDIpCisg
ICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB5MikKKyAgICAgICAgfHwg
IXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkKKyAgICAgICAgfHwgIXBhcnNlTnVt
YmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBw
b2ludDIgPSBGbG9hdFBvaW50KHgyLCB5Mik7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50
KHRvWCwgdG9ZKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdl
dFBvaW50KQoreworICAgIGZsb2F0IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAgaWYgKCFwYXJz
ZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCisgICAgICAgIHx8ICFwYXJzZU51bWJlciht
X2N1cnJlbnQsIG1fZW5kLCB0b1kpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFyZ2V0
UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0
JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50KQoreworICAgIGZsb2F0IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAg
aWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCByeCkKKyAgICAgICAgfHwgIXBhcnNl
TnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHJ5KQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9j
dXJyZW50LCBtX2VuZCwgYW5nbGUpCisgICAgICAgIHx8ICFwYXJzZUFyY0ZsYWcobV9jdXJyZW50
LCBtX2VuZCwgbGFyZ2VBcmMpCisgICAgICAgIHx8ICFwYXJzZUFyY0ZsYWcobV9jdXJyZW50LCBt
X2VuZCwgc3dlZXApCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0
b1gpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9Z
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAkocmV2aXNpb24gNjQ5NDkpCisrKyBXZWJD
b3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIx
LDcgQEAKICNkZWZpbmUgU1ZHUGF0aFN0cmluZ1NvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlNWR1BhdGhTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAt
MzgsMTEgKzM5LDE5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNNb3JlRGF0YSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VGbG9hdChmbG9hdCYgcmVzdWx0KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VG
bGFnKGJvb2wmIHJlc3VsdCk7CiAgICAgdmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUo
U1ZHUGF0aFNlZ1R5cGUmKTsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5k
KFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5l
VG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudChmbG9hdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1ZlcnRp
Y2FsU2VnbWVudChmbG9hdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVh
bCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQ
b2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZs
b2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1
YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0
UG9pbnQmKTsKKwogcHJpdmF0ZToKICAgICBTVkdQYXRoU3RyaW5nU291cmNlKGNvbnN0IFN0cmlu
ZyYpOwogICAgIFN0cmluZyBtX3N0cmluZzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63982</attachid>
            <date>2010-08-10 01:01:24 -0700</date>
            <delta_ts>2010-08-10 01:23:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43691-20100810100122.patch</filename>
            <type>text/plain</type>
            <size>40941</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTA1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODIgQEAKKzIwMTAtMDgtMDkgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
bWlzc2luZyBTVkdQYXRoU2VnTGlzdCBzb3VyY2UgZm9yIFNWR1BhdGhQYXJzZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjkxCisKKyAgICAgICAg
QWRkZWQgU1ZHUGF0aFNlZ0xpc3RTb3VyY2UgdG8gcGFyc2Ugbm9ybWFsaXplZCBvciB1bmFsdGVy
ZWQgU1ZHUGF0aFNlZ0xpc3RzIGFuZCB0cmFuc2Zvcm0KKyAgICAgICAgdGhlbSB0byBlaXRoZXIg
YSBTVkcgcGF0aCBzdHJpbmcsIG9yIGEgU1ZHUGF0aEJ5dGVTdHJlYW0uIFRoaXMgd2lsbCBiZSBu
ZWVkZWQgdG8gc3luY2hyb25pemUKKyAgICAgICAgYWxsIFNWR1BhdGhTZWdMaXN0cyBhbmQgdGhl
IFNWRyBwYXRoIHN0cmluZyBvZiB0aGUgJ2QnIGF0dHJpYnV0ZS4KKyAgICAgICAgUmVmYWN0b3Jl
ZCBTVkdQYXRoU291cmNlIGNvZGUsIHRvIHJlYWQgY29uY3JldGUgcGF0aCBzZWdtZW50cyBpbnN0
ZWFkIG9mIHR5cGUvZmxhZy9jb29yZGluYXRlcworICAgICAgICBmcm9tIHRoZSBkYXRhIHNvdXJj
ZXMuIFRoaXMgaXMgYSBmdXJ0aGVyIGFic3RyYWN0aW9uIGFuZCBzZXBlcmF0ZXMgdGhlIHJlYWRp
bmcgb2YgY29udGVudCBmcm9tCisgICAgICAgIHRoZSBwYXJzaW5nIGFuZCBpbnRlcnByZXRpbmcu
CisKKyAgICAgICAgRG9lc24ndCBhZmZlY3QgYW55IHRlc3RzLgorCisgICAgICAgICogQW5kcm9p
ZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHN2Zy9TVkdBbGxJbk9uZS5jcHA6
CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpuZXh0Q29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxp
bmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om1vdmVUb05leHRU
b2tlbik6CisgICAgICAgICogc3ZnL1NWR1BhdGhQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQ
YXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0xpc3RT
b3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNl
OjpTVkdQYXRoU2VnTGlzdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlz
dFNvdXJjZTo6flNWR1BhdGhTZWdMaXN0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTZWdMaXN0U291cmNlOjpoYXNNb3JlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb1Zl
cnRpY2FsU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1
YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0xpc3RT
b3VyY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjptb3ZlVG9O
ZXh0VG9rZW4pOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJz
ZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9T
ZWdtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oOgorCiAyMDEwLTA4
LTA5ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNjUwNTIpCisrKyBXZWJDb3Jl
L0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTg4OCw2ICs4ODgsNyBAQCBMT0NBTF9TUkNf
RklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlzdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsLmNwcCBcCiAJc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcCBcCiAJc3ZnL1NWR1BhdGhTZWdMaXN0
QnVpbGRlci5jcHAgXAorCXN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgXAogCXN2Zy9TVkdQ
YXRoU2VnTW92ZXRvLmNwcCBcCiAJc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCBcCiAJc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNjUwNTIpCisr
KyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNjk0LDYgKzE2OTQs
NyBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bC5jcHAKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAogICAgICAgICBzdmcvU1ZHUGF0
aFNlZ0xpc3RCdWlsZGVyLmNwcAorICAgICAgICBzdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3Bw
CiAgICAgICAgIHN2Zy9TVkdQYXRoU2VnTW92ZXRvLmNwcAogICAgICAgICBzdmcvU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwCiAgICAgICAgIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcApJbmRl
eDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCShyZXZpc2lvbiA2NTA1MikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTQxMTAsNiArNDExMCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuaCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RC
dWlsZGVyLmNwcCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmggXAorCVdl
YkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcCBcCisJV2ViQ29yZS9zdmcvU1ZHUGF0
aFNlZ0xpc3RTb3VyY2UuaCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ01vdmV0by5jcHAgXAog
CVdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdNb3ZldG8uaCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aFNv
dXJjZS5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2NTA1MikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC0zODYwLDYgKzM4NjAsOCBAQAogICAgICAgICAgICAgJ3N2Zy9T
VkdQYXRoU2VnTGlzdC5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVy
LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5oJywKKyAgICAg
ICAgICAgICdzdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwJywKKyAgICAgICAgICAgICdzdmcv
U1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhTZWdNb3Zl
dG8uY3BwJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFNlZ01vdmV0by5oJywKICAgICAgICAg
ICAgICdzdmcvU1ZHUGF0aFNvdXJjZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjUwNTIpCisrKyBXZWJD
b3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yODcwLDYgKzI4NzAsNyBAQCBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbC5jcHAgXAogICAgICAgICBzdmcvU1ZHUGF0aFNlZ0xpc3QuY3BwIFwKICAgICAg
ICAgc3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAgXAorICAgICAgICBzdmcvU1ZHUGF0aFNl
Z0xpc3RTb3VyY2UuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdNb3ZldG8uY3BwIFwKICAg
ICAgICAgc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdQYXRo
U3RyaW5nU291cmNlLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDY1MDUyKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk0MTMsNiArNDk0MTMsMTAgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR1BhdGhTZWdM
aXN0U291cmNlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdmdcU1ZHUGF0aFNlZ01vdmV0by5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2NTA1MikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDg0LDYgKzE0ODQsOCBAQAogCQk4NEE4MUYzRTBGQzdERkYwMDA5
NTUzMDAgLyogU291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oICov
OyB9OwogCQk4NEE4MUY0MTBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEE4MUYzRjBGQzdF
MDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5jcHAgKi87IH07CiAJCTg0QTgxRjQyMEZDN0Uw
MjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NEE4MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3Jh
cGhpYy5oICovOyB9OworCQk4NEI2Qjk3NzEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xp
c3RTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODRCNkI5NzUxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmNwcCAq
LzsgfTsKKwkJODRCNkI5NzgxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEI2Qjk3
NjEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCAqLzsgfTsKIAkJODRC
REExNkIxMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEJEQTE2OTExMzU4
RDJBMDBEQkY2NEMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLzsgfTsKIAkJODRC
REExNkMxMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRCREExNkExMTM1OEQy
QTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oICovOyB9OwogCQk4NEQwQzQw
NDExMTVGMUQ0MDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0RDBDNDAzMTExNUYxRDQwMDE4QUEzNCAv
KiBBZmZpbmVUcmFuc2Zvcm0uY3BwICovOyB9OwpAQCAtNzMyNiw2ICs3MzI4LDggQEAKIAkJODRC
MkIxRjcwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUtleUdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJODRCMkIxRjgwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3Iu
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0g
V2ViQ29yZUtleUdlbmVyYXRvci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCMkIyNEYwNTZCRjE1RjAwRDJCNzcxIC8qIFNTTEtl
eUdlbmVyYXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFNTTEtleUdlbmVyYXRvck1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTg0QjZCOTc1MTIwRjEz
RTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg0QjZCOTc2MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2Vn
TGlzdFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU2Vn
TGlzdFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NEJEQTE2OTExMzU4
RDJBMDBEQkY2NEMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QkRBMTZBMTEzNThEMkEwMERCRjY0QyAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg0RDBDNDAzMTExNUYxRDQwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWZmaW5lVHJhbnNmb3JtLmNwcDsgcGF0
aCA9IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1MzcyLDYgKzE1Mzc2LDggQEAKIAkJCQlCMjIyNzhFQzBEMDBCRjIxMDA3MUI3
ODIgLyogU1ZHUGF0aFNlZ0xpc3QuaWRsICovLAogCQkJCTg0NzZDOUUzMTFERjZBMEIwMDU1NUIw
MiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwICovLAogCQkJCTg0NzZDOUU0MTFERjZBMEIw
MDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaCAqLywKKwkJCQk4NEI2Qjk3NTEyMEYx
M0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwICovLAorCQkJCTg0QjZCOTc2
MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5oICovLAogCQkJCUIyMjI3
OEVEMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTW92ZXRvLmNwcCAqLywKIAkJCQlCMjIy
NzhFRTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ01vdmV0by5oICovLAogCQkJCUIyMjI3
OEVGMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTW92ZXRvQWJzLmlkbCAqLywKQEAgLTE5
ODUyLDYgKzE5ODU4LDcgQEAKIAkJCQlCMjIyN0E3RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E4MTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHUGF0aFNlZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NzZDOUU2
MTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTg0QjZCOTc4MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBODQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhT
ZWdNb3ZldG8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MzAwQkQ4MTIwQzlBRDQwMDIxOTU0QSAv
KiBTVkdQYXRoU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDE5RDJCQTEyMEUwQzc2MDAx
NDFGOEYgLyogU1ZHUGF0aFN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjIzMTcs
NiArMjIzMjQsNyBAQAogCQkJCUIyMjI3QTdDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2Vn
TGluZXRvVmVydGljYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBODAwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR1BhdGhTZWdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0NzZDOUU1
MTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJODRCNkI5NzcxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTgzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQ
YXRoU2VnTW92ZXRvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0MTlEMkI5MTIwRTBDNzYwMDE0
MUY4RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDMw
MEJEQTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDY1MDUyKQorKysgV2ViQ29yZS9z
dmcvU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICNp
bmNsdWRlICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWwuY3BwIgogI2luY2x1ZGUgIlNWR1BhdGhT
ZWdMaXN0LmNwcCIKICNpbmNsdWRlICJTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwIgorI2luY2x1
ZGUgIlNWR1BhdGhTZWdMaXN0U291cmNlLmNwcCIKICNpbmNsdWRlICJTVkdQYXRoU2VnTW92ZXRv
LmNwcCIKICNpbmNsdWRlICJTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAiCiAjaW5jbHVkZSAiU1ZH
UGF0aFN0cmluZ1NvdXJjZS5jcHAiCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVh
bVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuY3BwCShyZXZpc2lvbiA2NTA1MikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjcgKzQxLDc4IEBAIGJvb2wgU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Omhhc01vcmVEYXQKICAgICByZXR1cm4gbV9zdHJlYW1DdXJy
ZW50IDwgbV9zdHJlYW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlRmxvYXQoZmxvYXQmIHJlc3VsdCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQogewotICAgIHJl
c3VsdCA9IHJlYWRGbG9hdCgpOworICAgIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0
aFNlZ1R5cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VGbGFnKGJvb2wmIHJlc3VsdCkKK1NW
R1BhdGhTZWdUeXBlIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRo
U2VnVHlwZSkKIHsKLSAgICByZXN1bHQgPSByZWFkRmxhZygpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOworfQorCitib29sIFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQpCit7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZVNWR1Nl
Z21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJiBwYXRoU2VnVHlwZSkKK2Jvb2wgU1ZHUGF0aEJ5dGVT
dHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkK
IHsKLSAgICBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihyZWFkU1ZH
U2VnbWVudFR5cGUoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1TVkdQYXRoU2VnVHlwZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCitib29sIFNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQogewotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOworICAg
IHggPSByZWFkRmxvYXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCit7Cisg
ICAgeSA9IHJlYWRGbG9hdCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9p
bnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAg
IHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQo
KTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQor
eworICAgIHBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFk
RmxvYXRQb2ludCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50
MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgcG9pbnQxID0gcmVhZEZsb2F0UG9p
bnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgdGFyZ2V0
UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0
JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50KQoreworICAgIHJ4ID0gcmVhZEZsb2F0KCk7CisgICAgcnkgPSByZWFk
RmxvYXQoKTsKKyAgICBhbmdsZSA9IHJlYWRGbG9hdCgpOworICAgIGxhcmdlQXJjID0gcmVhZEZs
YWcoKTsKKyAgICBzd2VlcCA9IHJlYWRGbGFnKCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxv
YXRQb2ludCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1Bh
dGhCeXRlU3RyZWFtU291cmNlLmgJKHJldmlzaW9uIDY1MDUyKQorKysgV2ViQ29yZS9zdmcvU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDE5IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIHBhcnNlRmxvYXQoZmxvYXQmIHJlc3VsdCk7Ci0gICAgdmlydHVhbCBib29sIHBhcnNl
RmxhZyhib29sJiByZXN1bHQpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBl
KFNWR1BhdGhTZWdUeXBlJik7CiAgICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFu
ZChTVkdQYXRoU2VnVHlwZSk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50
KEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChm
bG9hdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9h
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2lu
dCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9h
dFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKTsKKwogcHJp
dmF0ZToKICAgICBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZShTVkdQYXRoQnl0ZVN0cmVhbSopOwog
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAkocmV2aXNpb24gNjUwNTIpCisrKyBXZWJDb3JlL3N2
Zy9TVkdQYXRoUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNDggKzUzLDQ0IEBAIHZv
aWQgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDbG9zZVBhdGhTZWdtZW4KIAogYm9vbCBTVkdQYXRoUGFy
c2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0
b1k7Ci0gICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1gpIHx8ICFtX3NvdXJjZS0+cGFy
c2VGbG9hdCh0b1kpKQorICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgaWYgKCFtX3Nv
dXJjZS0+cGFyc2VNb3ZlVG9TZWdtZW50KHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgRmxvYXRQb2ludCB0b1BvaW50KHRvWCwgdG9ZKTsKICAgICBpZiAobV9wYXRo
UGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9
PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gdG9Q
b2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRhcmdldFBvaW50OwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRvUG9pbnQ7CisgICAgICAgICAg
ICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OwogICAgICAgICBtX3N1YlBhdGhQb2ludCA9
IG1fY3VycmVudFBvaW50OwogICAgICAgICBtX2NvbnN1bWVyLT5tb3ZlVG8obV9jdXJyZW50UG9p
bnQsIG1fY2xvc2VQYXRoLCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbV9jb25zdW1lci0+bW92ZVRvKHRvUG9pbnQsIG1fY2xvc2VQYXRoLCBtX21vZGUpOworICAg
ICAgICBtX2NvbnN1bWVyLT5tb3ZlVG8odGFyZ2V0UG9pbnQsIG1fY2xvc2VQYXRoLCBtX21vZGUp
OwogICAgIG1fY2xvc2VQYXRoID0gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAgICBmbG9hdCB0b1g7Ci0g
ICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQodG9YKSB8fCAhbV9z
b3VyY2UtPnBhcnNlRmxvYXQodG9ZKSkKKyAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAg
IGlmICghbV9zb3VyY2UtPnBhcnNlTGluZVRvU2VnbWVudCh0YXJnZXRQb2ludCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UG9pbnQgdG9Qb2ludCh0b1gsIHRvWSk7CiAgICAg
aWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlm
IChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBv
aW50ICs9IHRvUG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2lu
dDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0b1BvaW50Owor
ICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKICAgICAgICAgbV9jb25z
dW1lci0+bGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9
IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKHRvUG9pbnQsIG1fbW9kZSk7CisgICAg
ICAgIG1fY29uc3VtZXItPmxpbmVUbyh0YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KCkKIHsKICAgICBmbG9hdCB0b1g7Ci0gICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0
b1gpKQorICAgIGlmICghbV9zb3VyY2UtPnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQodG9Y
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09
IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CkBAIC0xMTEsNyArMTA3LDcgQEAgYm9vbCBTVkdQYXRoUGFy
c2VyOjpwYXJzZUxpbmVUb0hvcml6b250YQogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVU
b1ZlcnRpY2FsU2VnbWVudCgpCiB7CiAgICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2Ut
PnBhcnNlRmxvYXQodG9ZKSkKKyAgICBpZiAoIW1fc291cmNlLT5wYXJzZUxpbmVUb1ZlcnRpY2Fs
U2VnbWVudCh0b1kpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFy
c2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKQEAgLTEyNywyMyArMTIzLDEyIEBAIGJv
b2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFMKIAogYm9vbCBTVkdQYXRoUGFy
c2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAgIGZsb2F0IHgxOwotICAgIGZs
b2F0IHkxOwotICAgIGZsb2F0IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGZsb2F0IHRvWDsKLSAg
ICBmbG9hdCB0b1k7IAotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQoeDEpCi0gICAgICAg
IHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh5MSkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJz
ZUZsb2F0KHgyKQotICAgICAgICB8fCAhbV9zb3VyY2UtPnBhcnNlRmxvYXQoeTIpCi0gICAgICAg
IHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1gpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFy
c2VGbG9hdCh0b1kpKQorICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAgIEZsb2F0UG9pbnQgcG9p
bnQyOworICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgaWYgKCFtX3NvdXJjZS0+cGFy
c2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UG9pbnQgcG9pbnQxKHgxLCB5MSk7Ci0gICAg
RmxvYXRQb2ludCBwb2ludDIoeDIsIHkyKTsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50KHRv
WCwgdG9ZKTsKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcp
IHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CiAgICAgICAg
ICAgICBwb2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7CkBAIC0xNjEsMTQgKzE0Niw5IEBAIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWcKIAogYm9vbCBTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewotICAgIGZsb2F0IHgyOwotICAg
IGZsb2F0IHkyOwotICAgIGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0b1k7IAotICAgIGlmICghbV9z
b3VyY2UtPnBhcnNlRmxvYXQoeDIpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh5
MikKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZsb2F0KHRvWCkKLSAgICAgICAgfHwgIW1f
c291cmNlLT5wYXJzZUZsb2F0KHRvWSkpCisgICAgRmxvYXRQb2ludCBwb2ludDI7CisgICAgRmxv
YXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQocG9pbnQyLCB0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMKQEAg
LTE3Nyw4ICsxNTcsNiBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21v
CiAgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJl
bCkKICAgICAgICAgbV9jb250cm9sUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKIAotICAgIEZsb2F0
UG9pbnQgcG9pbnQyKHgyLCB5Mik7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludCh0b1gsIHRv
WSk7CiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAg
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50
MS5zY2FsZSgyLCAyKTsKQEAgLTE5OSwyMSArMTc3LDE2IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW8KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KCkKIHsKLSAgICBmbG9hdCB4MTsKLSAgICBmbG9hdCB5MTsKLSAgICBm
bG9hdCB0b1g7Ci0gICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQo
eDEpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh5MSkKLSAgICAgICAgfHwgIW1f
c291cmNlLT5wYXJzZUZsb2F0KHRvWCkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZsb2F0
KHRvWSkpCisgICAgRmxvYXRQb2ludCBwb2ludDE7CisgICAgRmxvYXRQb2ludCB0YXJnZXRQb2lu
dDsKKyAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KHBvaW50
MSwgdGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50
IHRhcmdldFBvaW50KHRvWCwgdG9ZKTsKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9y
bWFsaXplZFBhcnNpbmcpIHsKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDE7CiAgICAg
ICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgIHBvaW50MS5t
b3ZlKDIgKiB4MSwgMiAqIHkxKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodG9YICsgMiAq
IHgxLCB0b1kgKyAyICogeTEpOworICAgICAgICBwb2ludDEubW92ZSgyICogbV9jb250cm9sUG9p
bnQueCgpLCAyICogbV9jb250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2lu
dDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQu
eSgpICsgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVs
YXRpdmVDb29yZGluYXRlcykgewogICAgICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVu
dFBvaW50LngoKSwgMiAqIG1fY3VycmVudFBvaW50LnkoKSk7CiAgICAgICAgICAgICBwb2ludDIu
bW92ZSgzICogbV9jdXJyZW50UG9pbnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKQEAg
LTIyNCwyMCArMTk3LDE4IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGkKIAogICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRh
cmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBtX2NvbnRyb2xQb2lu
dCA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNv
b3JkaW5hdGVzKQogICAgICAgICAgICAgbV9jb250cm9sUG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7
CiAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWMoRmxvYXRQb2ludCh4MSwgeTEpLCB0YXJn
ZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhw
b2ludDEsIHRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29s
IFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogewot
ICAgIGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0b1k7Ci0gICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VG
bG9hdCh0b1gpIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1kpKQorICAgIEZsb2F0UG9pbnQg
dGFyZ2V0UG9pbnQ7CisgICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCh0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzCkBAIC0yNTEsOCAr
MjIyLDcgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAgICAg
ICBjdWJpY1BvaW50LnNjYWxlKDIsIDIpOwogICAgICAgICBjdWJpY1BvaW50Lm1vdmUoLW1fY29u
dHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIEZsb2F0UG9pbnQg
cG9pbnQxKG1fY3VycmVudFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgbV9jdXJyZW50
UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2lu
dDIodG9YICsgMiAqIGN1YmljUG9pbnQueCgpLCB0b1kgKyAyICogY3ViaWNQb2ludC55KCkpOwot
ICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50KHRvWCwgdG9ZKTsKKyAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCB0YXJnZXRQ
b2ludC55KCkgKyAyICogY3ViaWNQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJl
bGF0aXZlQ29vcmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2lu
dDsKICAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwpAQCAtMjY1LDI5
ICsyMzUsMjEgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAg
ICAgICBtX2NvbnRyb2xQb2ludCA9IGN1YmljUG9pbnQ7CiAgICAgICAgIG1fY3VycmVudFBvaW50
ID0gdGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9R
dWFkcmF0aWNTbW9vdGgoRmxvYXRQb2ludCh0b1gsIHRvWSksIG1fbW9kZSk7CisgICAgICAgIG1f
Y29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgodGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1NlZ21l
bnQoKQogewotICAgIGJvb2wgbGFyZ2VBcmM7Ci0gICAgYm9vbCBzd2VlcDsKLSAgICBmbG9hdCBh
bmdsZTsKICAgICBmbG9hdCByeDsKICAgICBmbG9hdCByeTsKLSAgICBmbG9hdCB0b1g7Ci0gICAg
ZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQocngpCi0gICAgICAgIHx8
ICFtX3NvdXJjZS0+cGFyc2VGbG9hdChyeSkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZs
b2F0KGFuZ2xlKQotICAgICAgICB8fCAhbV9zb3VyY2UtPnBhcnNlRmxhZyhsYXJnZUFyYykKLSAg
ICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZsYWcoc3dlZXApCi0gICAgICAgIHx8ICFtX3NvdXJj
ZS0+cGFyc2VGbG9hdCh0b1gpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1kp
KQorICAgIGZsb2F0IGFuZ2xlOworICAgIGJvb2wgbGFyZ2VBcmM7CisgICAgYm9vbCBzd2VlcDsK
KyAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIGlmICghbV9zb3VyY2UtPnBhcnNlQXJj
VG9TZWdtZW50KHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50ID0gRmxv
YXRQb2ludCh0b1gsIHRvWSk7CiAgICAgLy8gSWYgcnggPSAwIG9yIHJ5ID0gMCB0aGVuIHRoaXMg
YXJjIGlzIHRyZWF0ZWQgYXMgYSBzdHJhaWdodCBsaW5lIHNlZ21lbnQgKGEgImxpbmV0byIpIGpv
aW5pbmcgdGhlIGVuZHBvaW50cy4KICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvaW1w
bG5vdGUuaHRtbCNBcmNPdXRPZlJhbmdlUGFyYW1ldGVycwogICAgIHJ4ID0gZmFic2YocngpOwpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCIKKworI2luY2x1ZGUg
IlNWR1BhdGhTZWdBcmMuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgiCisj
aW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oIgorI2luY2x1ZGUgIlNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWwuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitTVkdQYXRoU2VnTGlzdFNvdXJjZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2UoU1ZHUGF0aFNlZ0xpc3QqIHBhdGhTZWdMaXN0KQorICAgIDogbV9wYXRoU2VnTGlzdChwYXRo
U2VnTGlzdCkKK3sKKyAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CisgICAgbV9pdGVtQ3VycmVu
dCA9IDA7CisgICAgbV9pdGVtRW5kID0gbV9wYXRoU2VnTGlzdC0+bnVtYmVyT2ZJdGVtcygpOwor
fQorCitTVkdQYXRoU2VnTGlzdFNvdXJjZTo6flNWR1BhdGhTZWdMaXN0U291cmNlKCkKK3sKK30K
KworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6aGFzTW9yZURhdGEoKSBjb25zdAoreworICAg
IHJldHVybiBtX2l0ZW1DdXJyZW50IDwgbV9pdGVtRW5kOworfQorCitib29sIFNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJiBwYXRoU2VnVHlw
ZSkKK3sKKyAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC0+Z2V0SXRlbShtX2l0ZW1DdXJyZW50
LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcGF0aFNlZ1R5
cGUgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4obV9zZWdtZW50LT5wYXRoU2VnVHlwZSgp
KTsKKyAgICArK21faXRlbUN1cnJlbnQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NWR1BhdGhT
ZWdUeXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkK
K3sKKyAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC0+Z2V0SXRlbShtX2l0ZW1DdXJyZW50LCBl
Yyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gUGF0aFNlZ1Vua25vd247CisgICAgU1ZH
UGF0aFNlZ1R5cGUgcGF0aFNlZ1R5cGUgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4obV9z
ZWdtZW50LT5wYXRoU2VnVHlwZSgpKTsKKyAgICArK21faXRlbUN1cnJlbnQ7CisgICAgcmV0dXJu
IHBhdGhTZWdUeXBlOworfQorCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVU
b1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgQVNTRVJUKG1fc2VnbWVu
dCk7CisgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTW92ZVRv
QWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTW92ZVRvUmVsKTsKKyAg
ICBSZWZQdHI8U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkPiBtb3ZlVG8gPSBzdGF0aWNfcG9pbnRlcl9j
YXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZD4obV9zZWdtZW50KTsKKyAgICB0YXJnZXRQb2ludCA9
IEZsb2F0UG9pbnQobW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIEFTU0VSVChtX3NlZ21lbnQpOworICAgIEFTU0VS
VChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0FicyB8fCBtX3NlZ21l
bnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1JlbCk7CisgICAgUmVmUHRyPFNWR1Bh
dGhTZWdTaW5nbGVDb29yZD4gbGluZVRvID0gc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQYXRoU2Vn
U2luZ2xlQ29vcmQ+KG1fc2VnbWVudCk7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGxp
bmVUby0+eCgpLCBsaW5lVG8tPnkoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmIHgp
Cit7CisgICAgQVNTRVJUKG1fc2VnbWVudCk7CisgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNl
Z1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFicyB8fCBtX3NlZ21lbnQtPnBhdGhT
ZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWwpOworICAgIFJlZlB0cjxTVkdQ
YXRoU2VnTGluZXRvSG9yaXpvbnRhbD4gaG9yaXpvbnRhbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8
U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWw+KG1fc2VnbWVudCk7CisgICAgeCA9IGhvcml6b250
YWwtPngoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCit7CisgICAgQVNTRVJUKG1f
c2VnbWVudCk7CisgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2Vn
TGluZVRvVmVydGljYWxBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdM
aW5lVG9WZXJ0aWNhbFJlbCk7CisgICAgUmVmUHRyPFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbD4g
dmVydGljYWwgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbD4o
bV9zZWdtZW50KTsKKyAgICB5ID0gdmVydGljYWwtPnkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZs
b2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCkKK3sKKyAgICBBU1NFUlQobV9zZWdtZW50KTsKKyAgICBBU1NFUlQobV9zZWdtZW50LT5w
YXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMgfHwgbV9zZWdtZW50LT5wYXRo
U2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWwpOworICAgIFJlZlB0cjxTVkdQYXRo
U2VnQ3VydmV0b0N1YmljPiBjdWJpYyA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHUGF0aFNlZ0N1
cnZldG9DdWJpYz4obV9zZWdtZW50KTsKKyAgICBwb2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54
MSgpLCBjdWJpYy0+eTEoKSk7CisgICAgcG9pbnQyID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwg
Y3ViaWMtPnkyKCkpOworICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBj
dWJpYy0+eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNv
dXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50Miwg
RmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgQVNTRVJUKG1fc2VnbWVudCk7CisgICAg
QVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21v
b3RoQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1Ymlj
U21vb3RoUmVsKTsKKyAgICBSZWZQdHI8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aD4gY3Vi
aWNTbW9vdGggPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGg+KG1fc2VnbWVudCk7CisgICAgcG9pbnQyID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+eDIo
KSwgY3ViaWNTbW9vdGgtPnkyKCkpOworICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJp
Y1Ntb290aC0+eCgpLCBjdWJpY1Ntb290aC0+eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChG
bG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIEFTU0VS
VChtX3NlZ21lbnQpOworICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0
aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBh
dGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsKTsKKyAgICBSZWZQdHI8U1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWM+IHF1YWRyYXRpYyA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWM+KG1fc2VnbWVudCk7CisgICAgcG9pbnQxID0gRmxvYXRQb2ludChxdWFkcmF0
aWMtPngxKCksIHF1YWRyYXRpYy0+eTEoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50
KHF1YWRyYXRpYy0+eCgpLCBxdWFkcmF0aWMtPnkoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgQVNTRVJUKG1fc2VnbWVudCk7
CisgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1
YWRyYXRpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1
cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwpOworICAgIFJlZlB0cjxTVkdQYXRoU2VnU2luZ2xlQ29v
cmQ+IHF1YWRyYXRpY1Ntb290aCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHUGF0aFNlZ1Npbmds
ZUNvb3JkPihtX3NlZ21lbnQpOworICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0
aWNTbW9vdGgtPngoKSwgcXVhZHJhdGljU21vb3RoLT55KCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYg
cngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAs
IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIEFTU0VSVChtX3NlZ21lbnQpOworICAg
IEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0FyY0FicyB8fCBtX3Nl
Z21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0FyY1JlbCk7CisgICAgUmVmUHRyPFNWR1Bh
dGhTZWdBcmM+IGFyY1RvID0gc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQYXRoU2VnQXJjPihtX3Nl
Z21lbnQpOworICAgIHJ4ID0gYXJjVG8tPnIxKCk7CisgICAgcnkgPSBhcmNUby0+cjIoKTsKKyAg
ICBhbmdsZSA9IGFyY1RvLT5hbmdsZSgpOworICAgIGxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJj
RmxhZygpOworICAgIHN3ZWVwID0gYXJjVG8tPnN3ZWVwRmxhZygpOworICAgIHRhcmdldFBvaW50
ID0gRmxvYXRQb2ludChhcmNUby0+eCgpLCBhcmNUby0+eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1Bh
dGhTZWdMaXN0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xp
c3RTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291
cmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgU1ZHUGF0aFNlZ0xpc3RTb3VyY2VfaAorI2RlZmluZSBTVkdQYXRoU2VnTGlzdFNvdXJj
ZV9oCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJTVkdQYXRoU2VnLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKKyNpbmNsdWRlICJT
VkdQYXRoU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHUGF0aFNlZ0xp
c3RTb3VyY2UgOiBwdWJsaWMgU1ZHUGF0aFNvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8U1ZHUGF0aFNlZ0xpc3RTb3VyY2U+IGNyZWF0ZShTVkdQYXRoU2VnTGlzdCogcGF0
aFNlZ0xpc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNWR1BhdGhTZWdM
aXN0U291cmNlKHBhdGhTZWdMaXN0KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+U1ZHUGF0aFNl
Z0xpc3RTb3VyY2UoKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKTsKKyAgICB2
aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKTsKKworICAg
IHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0Jik7CisgICAgdmlydHVhbCBib29s
IHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0Jik7CisgICAgdmlydHVhbCBib29sIHBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZs
b2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1
YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50Jik7CisgICAg
dmlydHVhbCBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJv
b2wmLCBib29sJiwgRmxvYXRQb2ludCYpOworCitwcml2YXRlOgorICAgIFNWR1BhdGhTZWdMaXN0
U291cmNlKFNWR1BhdGhTZWdMaXN0Kik7CisKKyAgICBTVkdQYXRoU2VnTGlzdCogbV9wYXRoU2Vn
TGlzdDsKKyAgICBSZWZQdHI8U1ZHUGF0aFNlZz4gbV9zZWdtZW50OworICAgIGludCBtX2l0ZW1D
dXJyZW50OworICAgIGludCBtX2l0ZW1FbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFNWR1BhdGhTZWdMaXN0U291cmNl
X2gKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlzaW9uIDY1MDUyKQorKysgV2ViQ29yZS9zdmcv
U1ZHUGF0aFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGhhc01vcmVEYXRhKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlRmxv
YXQoZmxvYXQmIHJlc3VsdCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUZsYWcoYm9vbCYg
cmVzdWx0KSA9IDA7CiAgICAgdmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0
aFNlZ1R5cGUmKSA9IDA7CiAgICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChT
VkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpID0gMDsKIAorICAgIHZpcnR1YWwgYm9vbCBw
YXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNl
TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBv
aW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQ
b2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBm
bG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworCiBwdWJsaWM6
CiAgICAgU1ZHUGF0aFNvdXJjZSgpIHsgfQogfTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhT
dHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdT
b3VyY2UuY3BwCShyZXZpc2lvbiA2NTA1MikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdT
b3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCBib29sIFNWR1BhdGhT
dHJpbmdTb3VyY2U6Omhhc01vcmVEYXRhKCkgCiAgICAgcmV0dXJuIG1fY3VycmVudCA8IG1fZW5k
OwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlRmxvYXQoZmxvYXQmIHJlc3Vs
dCkKLXsKLSAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgcmVzdWx0KTsK
LX0KLQotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUZsYWcoYm9vbCYgcmVzdWx0KQot
ewotICAgIHJldHVybiBwYXJzZUFyY0ZsYWcobV9jdXJyZW50LCBtX2VuZCwgcmVzdWx0KTsKLX0K
LQogYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjptb3ZlVG9OZXh0VG9rZW4oKQogewogICAgIHJl
dHVybiBza2lwT3B0aW9uYWxTcGFjZXMobV9jdXJyZW50LCBtX2VuZCk7CkBAIC0xNDEsNiArMTMx
LDExNyBAQCBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0CiAgICAgcmV0
dXJuIG5leHRDb21tYW5kOwogfQogCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTW92
ZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK3sKKyAgICBmbG9hdCB0b1g7Cisg
ICAgZmxvYXQgdG9ZOworICAgIGlmICghcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9Y
KSB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdt
ZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIGZsb2F0IHRvWDsKKyAgICBmbG9h
dCB0b1k7CisgICAgaWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpIHx8ICFw
YXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxT
ZWdtZW50KGZsb2F0JiB4KQoreworICAgIHJldHVybiBwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1f
ZW5kLCB4KTsKK30KKworYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRp
Y2FsU2VnbWVudChmbG9hdCYgeSkKK3sKKyAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50
LCBtX2VuZCwgeSk7Cit9CisKK2Jvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRv
Q3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9h
dFBvaW50JiB0YXJnZXRQb2ludCkKK3sKKyAgICBmbG9hdCB4MTsKKyAgICBmbG9hdCB5MTsKKyAg
ICBmbG9hdCB4MjsKKyAgICBmbG9hdCB5MjsKKyAgICBmbG9hdCB0b1g7CisgICAgZmxvYXQgdG9Z
OworICAgIGlmICghcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeDEpCisgICAgICAgIHx8
ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB5MSkKKyAgICAgICAgfHwgIXBhcnNlTnVt
YmVyKG1fY3VycmVudCwgbV9lbmQsIHgyKQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJy
ZW50LCBtX2VuZCwgeTIpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5k
LCB0b1gpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwgeTEpOwor
ICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKKyAgICB0YXJnZXRQb2ludCA9IEZsb2F0
UG9pbnQodG9YLCB0b1kpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhTdHJp
bmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2lu
dDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIGZsb2F0IHgxOworICAgIGZsb2F0
IHkxOworICAgIGZsb2F0IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAgaWYgKCFwYXJzZU51bWJl
cihtX2N1cnJlbnQsIG1fZW5kLCB4MSkKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVu
dCwgbV9lbmQsIHkxKQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwg
dG9YKQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBvaW50MSA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKKyAg
ICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK3sKKyAgICBm
bG9hdCB4MjsKKyAgICBmbG9hdCB5MjsKKyAgICBmbG9hdCB0b1g7CisgICAgZmxvYXQgdG9ZOwor
ICAgIGlmICghcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeDIpCisgICAgICAgIHx8ICFw
YXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB5MikKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVy
KG1fY3VycmVudCwgbV9lbmQsIHRvWCkKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVu
dCwgbV9lbmQsIHRvWSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwb2ludDIgPSBGbG9h
dFBvaW50KHgyLCB5Mik7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorewor
ICAgIGZsb2F0IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAgaWYgKCFwYXJzZU51bWJlcihtX2N1
cnJlbnQsIG1fZW5kLCB0b1gpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1f
ZW5kLCB0b1kpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9h
dFBvaW50KHRvWCwgdG9ZKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQm
IGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50KQoreworICAgIGZsb2F0IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAgaWYgKCFwYXJzZU51
bWJlcihtX2N1cnJlbnQsIG1fZW5kLCByeCkKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3Vy
cmVudCwgbV9lbmQsIHJ5KQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2Vu
ZCwgYW5nbGUpCisgICAgICAgIHx8ICFwYXJzZUFyY0ZsYWcobV9jdXJyZW50LCBtX2VuZCwgbGFy
Z2VBcmMpCisgICAgICAgIHx8ICFwYXJzZUFyY0ZsYWcobV9jdXJyZW50LCBtX2VuZCwgc3dlZXAp
CisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCisgICAgICAg
IHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1BhdGhTdHJpbmdTb3VyY2UuaAkocmV2aXNpb24gNjUwNTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdQ
YXRoU3RyaW5nU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZp
bmUgU1ZHUGF0aFN0cmluZ1NvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNWR1Bh
dGhTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMzgsMTEgKzM5LDE5
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VG
bG9hdChmbG9hdCYgcmVzdWx0KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VGbGFnKGJvb2wmIHJl
c3VsdCk7CiAgICAgdmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5
cGUmKTsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdU
eXBlIHByZXZpb3VzQ29tbWFuZCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VNb3ZlVG9TZWdt
ZW50KEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZs
b2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVu
dChmbG9hdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChm
bG9hdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQ
b2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOworICAg
IHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBG
bG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFNlZ21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVu
dChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKTsKKwog
cHJpdmF0ZToKICAgICBTVkdQYXRoU3RyaW5nU291cmNlKGNvbnN0IFN0cmluZyYpOwogICAgIFN0
cmluZyBtX3N0cmluZzsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63986</attachid>
            <date>2010-08-10 01:23:22 -0700</date>
            <delta_ts>2010-08-10 01:47:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43691-20100810102320.patch</filename>
            <type>text/plain</type>
            <size>40869</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTA1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODIgQEAKKzIwMTAtMDgtMDkgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
bWlzc2luZyBTVkdQYXRoU2VnTGlzdCBzb3VyY2UgZm9yIFNWR1BhdGhQYXJzZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNjkxCisKKyAgICAgICAg
QWRkZWQgU1ZHUGF0aFNlZ0xpc3RTb3VyY2UgdG8gcGFyc2Ugbm9ybWFsaXplZCBvciB1bmFsdGVy
ZWQgU1ZHUGF0aFNlZ0xpc3RzIGFuZCB0cmFuc2Zvcm0KKyAgICAgICAgdGhlbSB0byBlaXRoZXIg
YSBTVkcgcGF0aCBzdHJpbmcsIG9yIGEgU1ZHUGF0aEJ5dGVTdHJlYW0uIFRoaXMgd2lsbCBiZSBu
ZWVkZWQgdG8gc3luY2hyb25pemUKKyAgICAgICAgYWxsIFNWR1BhdGhTZWdMaXN0cyBhbmQgdGhl
IFNWRyBwYXRoIHN0cmluZyBvZiB0aGUgJ2QnIGF0dHJpYnV0ZS4KKyAgICAgICAgUmVmYWN0b3Jl
ZCBTVkdQYXRoU291cmNlIGNvZGUsIHRvIHJlYWQgY29uY3JldGUgcGF0aCBzZWdtZW50cyBpbnN0
ZWFkIG9mIHR5cGUvZmxhZy9jb29yZGluYXRlcworICAgICAgICBmcm9tIHRoZSBkYXRhIHNvdXJj
ZXMuIFRoaXMgaXMgYSBmdXJ0aGVyIGFic3RyYWN0aW9uIGFuZCBzZXBlcmF0ZXMgdGhlIHJlYWRp
bmcgb2YgY29udGVudCBmcm9tCisgICAgICAgIHRoZSBwYXJzaW5nIGFuZCBpbnRlcnByZXRpbmcu
CisKKyAgICAgICAgRG9lc24ndCBhZmZlY3QgYW55IHRlc3RzLgorCisgICAgICAgICogQW5kcm9p
ZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHN2Zy9TVkdBbGxJbk9uZS5jcHA6
CisgICAgICAgICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpuZXh0Q29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxp
bmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om1vdmVUb05leHRU
b2tlbik6CisgICAgICAgICogc3ZnL1NWR1BhdGhQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQ
YXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0xpc3RT
b3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNl
OjpTVkdQYXRoU2VnTGlzdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlz
dFNvdXJjZTo6flNWR1BhdGhTZWdMaXN0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTZWdMaXN0U291cmNlOjpoYXNNb3JlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb1Zl
cnRpY2FsU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1
YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0xpc3RT
b3VyY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjptb3ZlVG9O
ZXh0VG9rZW4pOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJz
ZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9T
ZWdtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oOgorCiAyMDEwLTA4
LTA5ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNjUwNTIpCisrKyBXZWJDb3Jl
L0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTg4OCw2ICs4ODgsNyBAQCBMT0NBTF9TUkNf
RklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlzdmcvU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsLmNwcCBcCiAJc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcCBcCiAJc3ZnL1NWR1BhdGhTZWdMaXN0
QnVpbGRlci5jcHAgXAorCXN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgXAogCXN2Zy9TVkdQ
YXRoU2VnTW92ZXRvLmNwcCBcCiAJc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCBcCiAJc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNjUwNTIpCisr
KyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNjk0LDYgKzE2OTQs
NyBAQCBJRiAoRU5BQkxFX1NWRykKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bC5jcHAKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdMaXN0LmNwcAogICAgICAgICBzdmcvU1ZHUGF0
aFNlZ0xpc3RCdWlsZGVyLmNwcAorICAgICAgICBzdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3Bw
CiAgICAgICAgIHN2Zy9TVkdQYXRoU2VnTW92ZXRvLmNwcAogICAgICAgICBzdmcvU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwCiAgICAgICAgIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcApJbmRl
eDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCShyZXZpc2lvbiA2NTA1MikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTQxMTAsNiArNDExMCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3QuaCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RC
dWlsZGVyLmNwcCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmggXAorCVdl
YkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcCBcCisJV2ViQ29yZS9zdmcvU1ZHUGF0
aFNlZ0xpc3RTb3VyY2UuaCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ01vdmV0by5jcHAgXAog
CVdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdNb3ZldG8uaCBcCiAJV2ViQ29yZS9zdmcvU1ZHUGF0aFNv
dXJjZS5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2NTA1MikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC0zODYwLDYgKzM4NjAsOCBAQAogICAgICAgICAgICAgJ3N2Zy9T
VkdQYXRoU2VnTGlzdC5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVy
LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5oJywKKyAgICAg
ICAgICAgICdzdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwJywKKyAgICAgICAgICAgICdzdmcv
U1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhTZWdNb3Zl
dG8uY3BwJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFNlZ01vdmV0by5oJywKICAgICAgICAg
ICAgICdzdmcvU1ZHUGF0aFNvdXJjZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjUwNTIpCisrKyBXZWJD
b3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yODcwLDYgKzI4NzAsNyBAQCBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbC5jcHAgXAogICAgICAgICBzdmcvU1ZHUGF0aFNlZ0xpc3QuY3BwIFwKICAgICAg
ICAgc3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAgXAorICAgICAgICBzdmcvU1ZHUGF0aFNl
Z0xpc3RTb3VyY2UuY3BwIFwKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdNb3ZldG8uY3BwIFwKICAg
ICAgICAgc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdQYXRo
U3RyaW5nU291cmNlLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDY1MDUyKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk0MTMsNiArNDk0MTMsMTAgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR1BhdGhTZWdM
aXN0U291cmNlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdmdcU1ZHUGF0aFNlZ01vdmV0by5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2NTA1MikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDg0LDYgKzE0ODQsOCBAQAogCQk4NEE4MUYzRTBGQzdERkYwMDA5
NTUzMDAgLyogU291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg0QTgxRjNDMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oICov
OyB9OwogCQk4NEE4MUY0MTBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEE4MUYzRjBGQzdF
MDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5jcHAgKi87IH07CiAJCTg0QTgxRjQyMEZDN0Uw
MjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NEE4MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3Jh
cGhpYy5oICovOyB9OworCQk4NEI2Qjk3NzEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xp
c3RTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODRCNkI5NzUxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNlLmNwcCAq
LzsgfTsKKwkJODRCNkI5NzgxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEI2Qjk3
NjEyMEYxM0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCAqLzsgfTsKIAkJODRC
REExNkIxMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NEJEQTE2OTExMzU4
RDJBMDBEQkY2NEMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLzsgfTsKIAkJODRC
REExNkMxMTM1OEQyQTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODRCREExNkExMTM1OEQy
QTAwREJGNjRDIC8qIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oICovOyB9OwogCQk4NEQwQzQw
NDExMTVGMUQ0MDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0RDBDNDAzMTExNUYxRDQwMDE4QUEzNCAv
KiBBZmZpbmVUcmFuc2Zvcm0uY3BwICovOyB9OwpAQCAtNzMyNiw2ICs3MzI4LDggQEAKIAkJODRC
MkIxRjcwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUtleUdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJODRCMkIxRjgwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3Iu
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0g
V2ViQ29yZUtleUdlbmVyYXRvci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJODRCMkIyNEYwNTZCRjE1RjAwRDJCNzcxIC8qIFNTTEtl
eUdlbmVyYXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFNTTEtleUdlbmVyYXRvck1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTg0QjZCOTc1MTIwRjEz
RTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg0QjZCOTc2MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2Vn
TGlzdFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYXRoU2Vn
TGlzdFNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NEJEQTE2OTExMzU4
RDJBMDBEQkY2NEMgLyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QkRBMTZBMTEzNThEMkEwMERCRjY0QyAvKiBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg0RDBDNDAzMTExNUYxRDQwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWZmaW5lVHJhbnNmb3JtLmNwcDsgcGF0
aCA9IHRyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1MzcyLDYgKzE1Mzc2LDggQEAKIAkJCQlCMjIyNzhFQzBEMDBCRjIxMDA3MUI3
ODIgLyogU1ZHUGF0aFNlZ0xpc3QuaWRsICovLAogCQkJCTg0NzZDOUUzMTFERjZBMEIwMDU1NUIw
MiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwICovLAogCQkJCTg0NzZDOUU0MTFERjZBMEIw
MDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaCAqLywKKwkJCQk4NEI2Qjk3NTEyMEYx
M0U1MDBCOEVGQUYgLyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwICovLAorCQkJCTg0QjZCOTc2
MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5oICovLAogCQkJCUIyMjI3
OEVEMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTW92ZXRvLmNwcCAqLywKIAkJCQlCMjIy
NzhFRTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ01vdmV0by5oICovLAogCQkJCUIyMjI3
OEVGMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTW92ZXRvQWJzLmlkbCAqLywKQEAgLTE5
ODUyLDYgKzE5ODU4LDcgQEAKIAkJCQlCMjIyN0E3RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E4MTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHUGF0aFNlZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NzZDOUU2
MTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTg0QjZCOTc4MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBODQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhT
ZWdNb3ZldG8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MzAwQkQ4MTIwQzlBRDQwMDIxOTU0QSAv
KiBTVkdQYXRoU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDE5RDJCQTEyMEUwQzc2MDAx
NDFGOEYgLyogU1ZHUGF0aFN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjIzMTcs
NiArMjIzMjQsNyBAQAogCQkJCUIyMjI3QTdDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2Vn
TGluZXRvVmVydGljYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBODAwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR1BhdGhTZWdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0NzZDOUU1
MTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJODRCNkI5NzcxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0U291cmNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTgzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQ
YXRoU2VnTW92ZXRvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0MTlEMkI5MTIwRTBDNzYwMDE0
MUY4RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDMw
MEJEQTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDY1MDUyKQorKysgV2ViQ29yZS9z
dmcvU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICNp
bmNsdWRlICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWwuY3BwIgogI2luY2x1ZGUgIlNWR1BhdGhT
ZWdMaXN0LmNwcCIKICNpbmNsdWRlICJTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwIgorI2luY2x1
ZGUgIlNWR1BhdGhTZWdMaXN0U291cmNlLmNwcCIKICNpbmNsdWRlICJTVkdQYXRoU2VnTW92ZXRv
LmNwcCIKICNpbmNsdWRlICJTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAiCiAjaW5jbHVkZSAiU1ZH
UGF0aFN0cmluZ1NvdXJjZS5jcHAiCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVh
bVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuY3BwCShyZXZpc2lvbiA2NTA1MikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjcgKzQxLDc4IEBAIGJvb2wgU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Omhhc01vcmVEYXQKICAgICByZXR1cm4gbV9zdHJlYW1DdXJy
ZW50IDwgbV9zdHJlYW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlRmxvYXQoZmxvYXQmIHJlc3VsdCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQogewotICAgIHJl
c3VsdCA9IHJlYWRGbG9hdCgpOworICAgIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0
aFNlZ1R5cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VGbGFnKGJvb2wmIHJlc3VsdCkKK1NW
R1BhdGhTZWdUeXBlIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRo
U2VnVHlwZSkKIHsKLSAgICByZXN1bHQgPSByZWFkRmxhZygpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOworfQorCitib29sIFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQpCit7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZVNWR1Nl
Z21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJiBwYXRoU2VnVHlwZSkKK2Jvb2wgU1ZHUGF0aEJ5dGVT
dHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkK
IHsKLSAgICBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihyZWFkU1ZH
U2VnbWVudFR5cGUoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1TVkdQYXRoU2VnVHlwZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCitib29sIFNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQogewotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOworICAg
IHggPSByZWFkRmxvYXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCit7Cisg
ICAgeSA9IHJlYWRGbG9hdCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9p
bnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAg
IHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQo
KTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQor
eworICAgIHBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFk
RmxvYXRQb2ludCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50
MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgcG9pbnQxID0gcmVhZEZsb2F0UG9p
bnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgdGFyZ2V0
UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0
JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50KQoreworICAgIHJ4ID0gcmVhZEZsb2F0KCk7CisgICAgcnkgPSByZWFk
RmxvYXQoKTsKKyAgICBhbmdsZSA9IHJlYWRGbG9hdCgpOworICAgIGxhcmdlQXJjID0gcmVhZEZs
YWcoKTsKKyAgICBzd2VlcCA9IHJlYWRGbGFnKCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxv
YXRQb2ludCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1Bh
dGhCeXRlU3RyZWFtU291cmNlLmgJKHJldmlzaW9uIDY1MDUyKQorKysgV2ViQ29yZS9zdmcvU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDE5IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIHBhcnNlRmxvYXQoZmxvYXQmIHJlc3VsdCk7Ci0gICAgdmlydHVhbCBib29sIHBhcnNl
RmxhZyhib29sJiByZXN1bHQpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBl
KFNWR1BhdGhTZWdUeXBlJik7CiAgICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFu
ZChTVkdQYXRoU2VnVHlwZSk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50
KEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChm
bG9hdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9h
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2lu
dCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9h
dFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKTsKKwogcHJp
dmF0ZToKICAgICBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZShTVkdQYXRoQnl0ZVN0cmVhbSopOwog
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAkocmV2aXNpb24gNjUwNTIpCisrKyBXZWJDb3JlL3N2
Zy9TVkdQYXRoUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNDggKzUzLDQ0IEBAIHZv
aWQgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDbG9zZVBhdGhTZWdtZW4KIAogYm9vbCBTVkdQYXRoUGFy
c2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0
b1k7Ci0gICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1gpIHx8ICFtX3NvdXJjZS0+cGFy
c2VGbG9hdCh0b1kpKQorICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgaWYgKCFtX3Nv
dXJjZS0+cGFyc2VNb3ZlVG9TZWdtZW50KHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgRmxvYXRQb2ludCB0b1BvaW50KHRvWCwgdG9ZKTsKICAgICBpZiAobV9wYXRo
UGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9
PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gdG9Q
b2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRhcmdldFBvaW50OwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRvUG9pbnQ7CisgICAgICAgICAg
ICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OwogICAgICAgICBtX3N1YlBhdGhQb2ludCA9
IG1fY3VycmVudFBvaW50OwogICAgICAgICBtX2NvbnN1bWVyLT5tb3ZlVG8obV9jdXJyZW50UG9p
bnQsIG1fY2xvc2VQYXRoLCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbV9jb25zdW1lci0+bW92ZVRvKHRvUG9pbnQsIG1fY2xvc2VQYXRoLCBtX21vZGUpOworICAg
ICAgICBtX2NvbnN1bWVyLT5tb3ZlVG8odGFyZ2V0UG9pbnQsIG1fY2xvc2VQYXRoLCBtX21vZGUp
OwogICAgIG1fY2xvc2VQYXRoID0gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAgICBmbG9hdCB0b1g7Ci0g
ICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQodG9YKSB8fCAhbV9z
b3VyY2UtPnBhcnNlRmxvYXQodG9ZKSkKKyAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAg
IGlmICghbV9zb3VyY2UtPnBhcnNlTGluZVRvU2VnbWVudCh0YXJnZXRQb2ludCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UG9pbnQgdG9Qb2ludCh0b1gsIHRvWSk7CiAgICAg
aWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlm
IChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBv
aW50ICs9IHRvUG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2lu
dDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0b1BvaW50Owor
ICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKICAgICAgICAgbV9jb25z
dW1lci0+bGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9
IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci0+bGluZVRvKHRvUG9pbnQsIG1fbW9kZSk7CisgICAg
ICAgIG1fY29uc3VtZXItPmxpbmVUbyh0YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KCkKIHsKICAgICBmbG9hdCB0b1g7Ci0gICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0
b1gpKQorICAgIGlmICghbV9zb3VyY2UtPnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQodG9Y
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09
IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CkBAIC0xMTEsNyArMTA3LDcgQEAgYm9vbCBTVkdQYXRoUGFy
c2VyOjpwYXJzZUxpbmVUb0hvcml6b250YQogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVU
b1ZlcnRpY2FsU2VnbWVudCgpCiB7CiAgICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2Ut
PnBhcnNlRmxvYXQodG9ZKSkKKyAgICBpZiAoIW1fc291cmNlLT5wYXJzZUxpbmVUb1ZlcnRpY2Fs
U2VnbWVudCh0b1kpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFy
c2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKQEAgLTEyNywyMyArMTIzLDEyIEBAIGJv
b2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFMKIAogYm9vbCBTVkdQYXRoUGFy
c2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAgIGZsb2F0IHgxOwotICAgIGZs
b2F0IHkxOwotICAgIGZsb2F0IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGZsb2F0IHRvWDsKLSAg
ICBmbG9hdCB0b1k7IAotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQoeDEpCi0gICAgICAg
IHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh5MSkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJz
ZUZsb2F0KHgyKQotICAgICAgICB8fCAhbV9zb3VyY2UtPnBhcnNlRmxvYXQoeTIpCi0gICAgICAg
IHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1gpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFy
c2VGbG9hdCh0b1kpKQorICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAgIEZsb2F0UG9pbnQgcG9p
bnQyOworICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgaWYgKCFtX3NvdXJjZS0+cGFy
c2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UG9pbnQgcG9pbnQxKHgxLCB5MSk7Ci0gICAg
RmxvYXRQb2ludCBwb2ludDIoeDIsIHkyKTsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50KHRv
WCwgdG9ZKTsKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcp
IHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CiAgICAgICAg
ICAgICBwb2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7CkBAIC0xNjEsMTQgKzE0Niw5IEBAIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWcKIAogYm9vbCBTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewotICAgIGZsb2F0IHgyOwotICAg
IGZsb2F0IHkyOwotICAgIGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0b1k7IAotICAgIGlmICghbV9z
b3VyY2UtPnBhcnNlRmxvYXQoeDIpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh5
MikKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZsb2F0KHRvWCkKLSAgICAgICAgfHwgIW1f
c291cmNlLT5wYXJzZUZsb2F0KHRvWSkpCisgICAgRmxvYXRQb2ludCBwb2ludDI7CisgICAgRmxv
YXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQocG9pbnQyLCB0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMKQEAg
LTE3Nyw4ICsxNTcsNiBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21v
CiAgICAgICAgICYmIG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJl
bCkKICAgICAgICAgbV9jb250cm9sUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKIAotICAgIEZsb2F0
UG9pbnQgcG9pbnQyKHgyLCB5Mik7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludCh0b1gsIHRv
WSk7CiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAg
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50
MS5zY2FsZSgyLCAyKTsKQEAgLTE5OSwyMSArMTc3LDE2IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW8KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KCkKIHsKLSAgICBmbG9hdCB4MTsKLSAgICBmbG9hdCB5MTsKLSAgICBm
bG9hdCB0b1g7Ci0gICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQo
eDEpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh5MSkKLSAgICAgICAgfHwgIW1f
c291cmNlLT5wYXJzZUZsb2F0KHRvWCkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZsb2F0
KHRvWSkpCisgICAgRmxvYXRQb2ludCBwb2ludDE7CisgICAgRmxvYXRQb2ludCB0YXJnZXRQb2lu
dDsKKyAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KHBvaW50
MSwgdGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50
IHRhcmdldFBvaW50KHRvWCwgdG9ZKTsKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9y
bWFsaXplZFBhcnNpbmcpIHsKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDE7CiAgICAg
ICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgIHBvaW50MS5t
b3ZlKDIgKiB4MSwgMiAqIHkxKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodG9YICsgMiAq
IHgxLCB0b1kgKyAyICogeTEpOworICAgICAgICBwb2ludDEubW92ZSgyICogbV9jb250cm9sUG9p
bnQueCgpLCAyICogbV9jb250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2lu
dDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQu
eSgpICsgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVs
YXRpdmVDb29yZGluYXRlcykgewogICAgICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVu
dFBvaW50LngoKSwgMiAqIG1fY3VycmVudFBvaW50LnkoKSk7CiAgICAgICAgICAgICBwb2ludDIu
bW92ZSgzICogbV9jdXJyZW50UG9pbnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKQEAg
LTIyNCwyMCArMTk3LDE4IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGkKIAogICAgICAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRh
cmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBtX2NvbnRyb2xQb2lu
dCA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNv
b3JkaW5hdGVzKQogICAgICAgICAgICAgbV9jb250cm9sUG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7
CiAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWMoRmxvYXRQb2ludCh4MSwgeTEpLCB0YXJn
ZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhw
b2ludDEsIHRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29s
IFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogewot
ICAgIGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0b1k7Ci0gICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VG
bG9hdCh0b1gpIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1kpKQorICAgIEZsb2F0UG9pbnQg
dGFyZ2V0UG9pbnQ7CisgICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCh0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzCkBAIC0yNTEsOCAr
MjIyLDcgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAgICAg
ICBjdWJpY1BvaW50LnNjYWxlKDIsIDIpOwogICAgICAgICBjdWJpY1BvaW50Lm1vdmUoLW1fY29u
dHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIEZsb2F0UG9pbnQg
cG9pbnQxKG1fY3VycmVudFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgbV9jdXJyZW50
UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2lu
dDIodG9YICsgMiAqIGN1YmljUG9pbnQueCgpLCB0b1kgKyAyICogY3ViaWNQb2ludC55KCkpOwot
ICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50KHRvWCwgdG9ZKTsKKyAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCB0YXJnZXRQ
b2ludC55KCkgKyAyICogY3ViaWNQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJl
bGF0aXZlQ29vcmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2lu
dDsKICAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwpAQCAtMjY1LDI5
ICsyMzUsMjEgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAg
ICAgICBtX2NvbnRyb2xQb2ludCA9IGN1YmljUG9pbnQ7CiAgICAgICAgIG1fY3VycmVudFBvaW50
ID0gdGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXItPmN1cnZlVG9R
dWFkcmF0aWNTbW9vdGgoRmxvYXRQb2ludCh0b1gsIHRvWSksIG1fbW9kZSk7CisgICAgICAgIG1f
Y29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgodGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1NlZ21l
bnQoKQogewotICAgIGJvb2wgbGFyZ2VBcmM7Ci0gICAgYm9vbCBzd2VlcDsKLSAgICBmbG9hdCBh
bmdsZTsKICAgICBmbG9hdCByeDsKICAgICBmbG9hdCByeTsKLSAgICBmbG9hdCB0b1g7Ci0gICAg
ZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UtPnBhcnNlRmxvYXQocngpCi0gICAgICAgIHx8
ICFtX3NvdXJjZS0+cGFyc2VGbG9hdChyeSkKLSAgICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZs
b2F0KGFuZ2xlKQotICAgICAgICB8fCAhbV9zb3VyY2UtPnBhcnNlRmxhZyhsYXJnZUFyYykKLSAg
ICAgICAgfHwgIW1fc291cmNlLT5wYXJzZUZsYWcoc3dlZXApCi0gICAgICAgIHx8ICFtX3NvdXJj
ZS0+cGFyc2VGbG9hdCh0b1gpCi0gICAgICAgIHx8ICFtX3NvdXJjZS0+cGFyc2VGbG9hdCh0b1kp
KQorICAgIGZsb2F0IGFuZ2xlOworICAgIGJvb2wgbGFyZ2VBcmM7CisgICAgYm9vbCBzd2VlcDsK
KyAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIGlmICghbV9zb3VyY2UtPnBhcnNlQXJj
VG9TZWdtZW50KHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50ID0gRmxv
YXRQb2ludCh0b1gsIHRvWSk7CiAgICAgLy8gSWYgcnggPSAwIG9yIHJ5ID0gMCB0aGVuIHRoaXMg
YXJjIGlzIHRyZWF0ZWQgYXMgYSBzdHJhaWdodCBsaW5lIHNlZ21lbnQgKGEgImxpbmV0byIpIGpv
aW5pbmcgdGhlIGVuZHBvaW50cy4KICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvaW1w
bG5vdGUuaHRtbCNBcmNPdXRPZlJhbmdlUGFyYW1ldGVycwogICAgIHJ4ID0gZmFic2YocngpOwpJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCIKKworI2luY2x1ZGUg
IlNWR1BhdGhTZWdBcmMuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgiCisj
aW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oIgorI2luY2x1ZGUgIlNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWwuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitTVkdQYXRoU2VnTGlzdFNvdXJjZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2UoU1ZHUGF0aFNlZ0xpc3QqIHBhdGhTZWdMaXN0KQorICAgIDogbV9wYXRoU2VnTGlzdChwYXRo
U2VnTGlzdCkKK3sKKyAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CisgICAgbV9pdGVtQ3VycmVu
dCA9IDA7CisgICAgbV9pdGVtRW5kID0gbV9wYXRoU2VnTGlzdC0+bnVtYmVyT2ZJdGVtcygpOwor
fQorCitTVkdQYXRoU2VnTGlzdFNvdXJjZTo6flNWR1BhdGhTZWdMaXN0U291cmNlKCkKK3sKK30K
KworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6aGFzTW9yZURhdGEoKSBjb25zdAoreworICAg
IHJldHVybiBtX2l0ZW1DdXJyZW50IDwgbV9pdGVtRW5kOworfQorCitib29sIFNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJiBwYXRoU2VnVHlw
ZSkKK3sKKyAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC0+Z2V0SXRlbShtX2l0ZW1DdXJyZW50
LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcGF0aFNlZ1R5
cGUgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4obV9zZWdtZW50LT5wYXRoU2VnVHlwZSgp
KTsKKyAgICArK21faXRlbUN1cnJlbnQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NWR1BhdGhT
ZWdUeXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkK
K3sKKyAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC0+Z2V0SXRlbShtX2l0ZW1DdXJyZW50LCBl
Yyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gUGF0aFNlZ1Vua25vd247CisgICAgU1ZH
UGF0aFNlZ1R5cGUgcGF0aFNlZ1R5cGUgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4obV9z
ZWdtZW50LT5wYXRoU2VnVHlwZSgpKTsKKyAgICArK21faXRlbUN1cnJlbnQ7CisgICAgcmV0dXJu
IHBhdGhTZWdUeXBlOworfQorCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVU
b1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgQVNTRVJUKG1fc2VnbWVu
dCk7CisgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTW92ZVRv
QWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTW92ZVRvUmVsKTsKKyAg
ICBTVkdQYXRoU2VnU2luZ2xlQ29vcmQqIG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdT
aW5nbGVDb29yZCo+KG1fc2VnbWVudC5nZXQoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBv
aW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnkoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCkKK3sKKyAgICBBU1NFUlQobV9zZWdtZW50KTsKKyAgICBBU1NFUlQobV9zZWdt
ZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9BYnMgfHwgbV9zZWdtZW50LT5wYXRo
U2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9SZWwpOworICAgIFNWR1BhdGhTZWdTaW5nbGVDb29y
ZCogbGluZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkKj4obV9zZWdtZW50
LmdldCgpKTsKKyAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobGluZVRvLT54KCksIGxpbmVU
by0+eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYgeCkKK3sKKyAgICBBU1NFUlQo
bV9zZWdtZW50KTsKKyAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhT
ZWdMaW5lVG9Ib3Jpem9udGFsQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRo
U2VnTGluZVRvSG9yaXpvbnRhbFJlbCk7CisgICAgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwq
IGhvcml6b250YWwgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbCo+KG1f
c2VnbWVudC5nZXQoKSk7CisgICAgeCA9IGhvcml6b250YWwtPngoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoZmxvYXQmIHkpCit7CisgICAgQVNTRVJUKG1fc2VnbWVudCk7CisgICAgQVNTRVJUKG1f
c2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnMgfHwgbV9z
ZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbCk7CisgICAg
U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsKiB2ZXJ0aWNhbCA9IHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdMaW5ldG9WZXJ0aWNhbCo+KG1fc2VnbWVudC5nZXQoKSk7CisgICAgeSA9IHZlcnRpY2FsLT55
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBv
aW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgQVNTRVJUKG1fc2VnbWVudCk7
CisgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1
YmljQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1Ymlj
UmVsKTsKKyAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljKiBjdWJpYyA9IHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWMqPihtX3NlZ21lbnQuZ2V0KCkpOworICAgIHBvaW50MSA9IEZs
b2F0UG9pbnQoY3ViaWMtPngxKCksIGN1YmljLT55MSgpKTsKKyAgICBwb2ludDIgPSBGbG9hdFBv
aW50KGN1YmljLT54MigpLCBjdWJpYy0+eTIoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBv
aW50KGN1YmljLT54KCksIGN1YmljLT55KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxv
YXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK3sKKyAgICBBU1NFUlQo
bV9zZWdtZW50KTsKKyAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhT
ZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBh
dGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwpOworICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGgqIGN1YmljU21vb3RoID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aCo+KG1fc2VnbWVudC5nZXQoKSk7CisgICAgcG9pbnQyID0gRmxvYXRQb2ludChjdWJpY1Nt
b290aC0+eDIoKSwgY3ViaWNTbW9vdGgtPnkyKCkpOworICAgIHRhcmdldFBvaW50ID0gRmxvYXRQ
b2ludChjdWJpY1Ntb290aC0+eCgpLCBjdWJpY1Ntb290aC0+eSgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGlj
U2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorewor
ICAgIEFTU0VSVChtX3NlZ21lbnQpOworICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlw
ZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsKTsKKyAgICBTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpYyogcXVhZHJhdGljID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWMqPihtX3NlZ21lbnQuZ2V0KCkpOworICAgIHBvaW50MSA9IEZsb2F0UG9pbnQocXVhZHJh
dGljLT54MSgpLCBxdWFkcmF0aWMtPnkxKCkpOworICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2lu
dChxdWFkcmF0aWMtPngoKSwgcXVhZHJhdGljLT55KCkpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIEFTU0VSVChtX3NlZ21lbnQp
OworICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNTbW9vdGhBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsKTsKKyAgICBTVkdQYXRoU2VnU2luZ2xlQ29vcmQqIHF1
YWRyYXRpY1Ntb290aCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZCo+KG1fc2Vn
bWVudC5nZXQoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpY1Ntb290
aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnkoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxv
YXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAgQVNTRVJUKG1fc2VnbWVudCk7CisgICAgQVNTRVJU
KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQXJjQWJzIHx8IG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQXJjUmVsKTsKKyAgICBTVkdQYXRoU2VnQXJjKiBhcmNU
byA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdBcmMqPihtX3NlZ21lbnQuZ2V0KCkpOworICAgIHJ4
ID0gYXJjVG8tPnIxKCk7CisgICAgcnkgPSBhcmNUby0+cjIoKTsKKyAgICBhbmdsZSA9IGFyY1Rv
LT5hbmdsZSgpOworICAgIGxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOworICAgIHN3
ZWVwID0gYXJjVG8tPnN3ZWVwRmxhZygpOworICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChh
cmNUby0+eCgpLCBhcmNUby0+eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCisjZW5k
aWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU1ZHUGF0aFNl
Z0xpc3RTb3VyY2VfaAorI2RlZmluZSBTVkdQYXRoU2VnTGlzdFNvdXJjZV9oCisKKyNpZiBFTkFC
TEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJTVkdQYXRoU2VnLmgi
CisjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKKyNpbmNsdWRlICJTVkdQYXRoU291cmNlLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHUGF0aFNlZ0xpc3RTb3VyY2UgOiBwdWJs
aWMgU1ZHUGF0aFNvdXJjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U1ZHUGF0
aFNlZ0xpc3RTb3VyY2U+IGNyZWF0ZShTVkdQYXRoU2VnTGlzdCogcGF0aFNlZ0xpc3QpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNWR1BhdGhTZWdMaXN0U291cmNlKHBhdGhT
ZWdMaXN0KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+U1ZHUGF0aFNlZ0xpc3RTb3VyY2UoKTsK
KworICAgIHZpcnR1YWwgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBtb3ZlVG9OZXh0VG9rZW4oKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBh
cnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKTsKKyAgICB2aXJ0dWFsIFNWR1BhdGhT
ZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKTsKKworICAgIHZpcnR1YWwgYm9vbCBw
YXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxp
bmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb0hv
cml6b250YWxTZWdtZW50KGZsb2F0Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVy
dGljYWxTZWdtZW50KGZsb2F0Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1Ymlj
U2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9h
dFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQo
RmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBh
cnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwgRmxv
YXRQb2ludCYpOworCitwcml2YXRlOgorICAgIFNWR1BhdGhTZWdMaXN0U291cmNlKFNWR1BhdGhT
ZWdMaXN0Kik7CisKKyAgICBTVkdQYXRoU2VnTGlzdCogbV9wYXRoU2VnTGlzdDsKKyAgICBSZWZQ
dHI8U1ZHUGF0aFNlZz4gbV9zZWdtZW50OworICAgIGludCBtX2l0ZW1DdXJyZW50OworICAgIGlu
dCBtX2l0ZW1FbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoU1ZHKQorI2VuZGlmIC8vIFNWR1BhdGhTZWdMaXN0U291cmNlX2gKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRo
U291cmNlLmgJKHJldmlzaW9uIDY1MDUyKQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTkgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGhhc01vcmVEYXRhKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBtb3ZlVG9O
ZXh0VG9rZW4oKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlRmxvYXQoZmxvYXQmIHJlc3Vs
dCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUZsYWcoYm9vbCYgcmVzdWx0KSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSA9IDA7
CiAgICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBw
cmV2aW91c0NvbW1hbmQpID0gMDsKIAorICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21l
bnQoRmxvYXRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50
KEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQoZmxvYXQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVydGlj
YWxTZWdtZW50KGZsb2F0JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJp
Y1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYs
IEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29s
IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0Jiwg
Ym9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworCiBwdWJsaWM6CiAgICAgU1ZHUGF0aFNv
dXJjZSgpIHsgfQogfTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCShyZXZp
c2lvbiA2NTA1MikKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6Omhh
c01vcmVEYXRhKCkgCiAgICAgcmV0dXJuIG1fY3VycmVudCA8IG1fZW5kOwogfQogCi1ib29sIFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlRmxvYXQoZmxvYXQmIHJlc3VsdCkKLXsKLSAgICByZXR1
cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgcmVzdWx0KTsKLX0KLQotYm9vbCBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUZsYWcoYm9vbCYgcmVzdWx0KQotewotICAgIHJldHVybiBw
YXJzZUFyY0ZsYWcobV9jdXJyZW50LCBtX2VuZCwgcmVzdWx0KTsKLX0KLQogYm9vbCBTVkdQYXRo
U3RyaW5nU291cmNlOjptb3ZlVG9OZXh0VG9rZW4oKQogewogICAgIHJldHVybiBza2lwT3B0aW9u
YWxTcGFjZXMobV9jdXJyZW50LCBtX2VuZCk7CkBAIC0xNDEsNiArMTMxLDExNyBAQCBTVkdQYXRo
U2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0CiAgICAgcmV0dXJuIG5leHRDb21tYW5k
OwogfQogCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudChGbG9h
dFBvaW50JiB0YXJnZXRQb2ludCkKK3sKKyAgICBmbG9hdCB0b1g7CisgICAgZmxvYXQgdG9ZOwor
ICAgIGlmICghcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9YKSB8fCAhcGFyc2VOdW1i
ZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHRh
cmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQoreworICAgIGZsb2F0IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAgaWYg
KCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpIHx8ICFwYXJzZU51bWJlcihtX2N1
cnJlbnQsIG1fZW5kLCB0b1kpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFyZ2V0UG9p
bnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4
KQoreworICAgIHJldHVybiBwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB4KTsKK30KKwor
Ym9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9h
dCYgeSkKK3sKKyAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeSk7Cit9
CisKK2Jvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZs
b2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCkKK3sKKyAgICBmbG9hdCB4MTsKKyAgICBmbG9hdCB5MTsKKyAgICBmbG9hdCB4MjsKKyAg
ICBmbG9hdCB5MjsKKyAgICBmbG9hdCB0b1g7CisgICAgZmxvYXQgdG9ZOworICAgIGlmICghcGFy
c2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeDEpCisgICAgICAgIHx8ICFwYXJzZU51bWJlciht
X2N1cnJlbnQsIG1fZW5kLCB5MSkKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwg
bV9lbmQsIHgyKQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeTIp
CisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCisgICAgICAg
IHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwgeTEpOworICAgIHBvaW50MiA9IEZs
b2F0UG9pbnQoeDIsIHkyKTsKKyAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQoreworICAgIGZsb2F0IHgxOworICAgIGZsb2F0IHkxOworICAgIGZsb2F0
IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAgaWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1f
ZW5kLCB4MSkKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHkxKQor
ICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9YKQorICAgICAgICB8
fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHBvaW50MSA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKKyAgICB0YXJnZXRQb2ludCA9
IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYg
cG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK3sKKyAgICBmbG9hdCB4MjsKKyAgICBm
bG9hdCB5MjsKKyAgICBmbG9hdCB0b1g7CisgICAgZmxvYXQgdG9ZOworICAgIGlmICghcGFyc2VO
dW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeDIpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1
cnJlbnQsIG1fZW5kLCB5MikKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9l
bmQsIHRvWCkKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwb2ludDIgPSBGbG9hdFBvaW50KHgyLCB5Mik7
CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNT
bW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIGZsb2F0IHRvWDsK
KyAgICBmbG9hdCB0b1k7CisgICAgaWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0
b1gpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9Z
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJz
ZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBs
YXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQoreworICAgIGZs
b2F0IHRvWDsKKyAgICBmbG9hdCB0b1k7CisgICAgaWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQs
IG1fZW5kLCByeCkKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHJ5
KQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgYW5nbGUpCisgICAg
ICAgIHx8ICFwYXJzZUFyY0ZsYWcobV9jdXJyZW50LCBtX2VuZCwgbGFyZ2VBcmMpCisgICAgICAg
IHx8ICFwYXJzZUFyY0ZsYWcobV9jdXJyZW50LCBtX2VuZCwgc3dlZXApCisgICAgICAgIHx8ICFw
YXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCisgICAgICAgIHx8ICFwYXJzZU51bWJl
cihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdGFy
Z2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFN0
cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3Vy
Y2UuaAkocmV2aXNpb24gNjUwNTIpCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgU1ZHUGF0aFN0cmlu
Z1NvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNWR1BhdGhTb3VyY2UuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMzgsMTEgKzM5LDE5IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBt
b3ZlVG9OZXh0VG9rZW4oKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VGbG9hdChmbG9hdCYgcmVz
dWx0KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VGbGFnKGJvb2wmIHJlc3VsdCk7CiAgICAgdmly
dHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKTsKICAgICB2aXJ0
dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29t
bWFuZCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpOworICAg
IHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9p
bnQmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQ
b2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0
JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKTsKKwogcHJpdmF0ZToKICAgICBT
VkdQYXRoU3RyaW5nU291cmNlKGNvbnN0IFN0cmluZyYpOwogICAgIFN0cmluZyBtX3N0cmluZzsK
</data>

          </attachment>
      

    </bug>

</bugzilla>