<?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>40676</bug_id>
          
          <creation_ts>2010-06-16 07:03:07 -0700</creation_ts>
          <short_desc>Add new files, needed in SVG Text rewrite</short_desc>
          <delta_ts>2010-06-17 00:12:43 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>40663</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>eric</cc>
    
    <cc>krit</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>238841</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-16 07:03:07 -0700</bug_when>
    <thetext>Add new files SVGTextChunkLayoutInfo.cpp / SVGTextQuery.(cpp|h) and integrate them in the build systems.
Added &quot;if 0&quot; on top of all files, until the SVG Text rewrite patch lands. This is supposed to reduce the review amount in the upcoming laaaarge SVG text patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238842</commentid>
    <comment_count>1</comment_count>
      <attachid>58891</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-16 07:06:01 -0700</bug_when>
    <thetext>Created attachment 58891
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238843</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-16 07:08:11 -0700</bug_when>
    <thetext>Attachment 58891 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/SVGTextChunkLayoutInfo.cpp:223:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238844</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-16 07:14:38 -0700</bug_when>
    <thetext>Attachment 58891 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/3272243</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238845</commentid>
    <comment_count>4</comment_count>
      <attachid>58892</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-16 07:17:19 -0700</bug_when>
    <thetext>Created attachment 58892
Updated patch

Missing include.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238846</commentid>
    <comment_count>5</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-16 07:17:42 -0700</bug_when>
    <thetext>Attachment 58891 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3266244</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238847</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-16 07:19:25 -0700</bug_when>
    <thetext>Attachment 58892 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/SVGTextChunkLayoutInfo.cpp:223:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextChunkLayoutInfo.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238882</commentid>
    <comment_count>7</comment_count>
      <attachid>58892</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-16 07:59:52 -0700</bug_when>
    <thetext>Comment on attachment 58892
Updated patch

WebCore/rendering/SVGTextQuery.cpp:77
 +      if (transform.isIdentity())
It looks like you just look at the scaling part of the affine. Checking a and d for 1 can be faster :-)

WebCore/rendering/SVGTextChunkLayoutInfo.cpp:199
 +      return (chunk.textLength - computedLength) / float(chunk.end - chunk.start);
c-style

And please fix the alphabetic order problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238883</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-16 08:05:16 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 58892 [details])
&gt; WebCore/rendering/SVGTextQuery.cpp:77
&gt;  +      if (transform.isIdentity())
&gt; It looks like you just look at the scaling part of the affine. Checking a and d for 1 can be faster :-)
That would involve two if&apos;s as isVerticalText has to be respected, sth like
if (isVerticalText &amp;&amp; transform.d() == 1)
return;
if (!isVerticalText &amp;&amp; transform.a() == 1)
return;

isIdentity seems more elegant to me, and shouldn&apos;t be a speed issue.

&gt; 
&gt; WebCore/rendering/SVGTextChunkLayoutInfo.cpp:199
&gt;  +      return (chunk.textLength - computedLength) / float(chunk.end - chunk.start);
&gt; c-style
No, I&apos;m calling the float() constructor ;-)

&gt; 
&gt; And please fix the alphabetic order problem.
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238885</commentid>
    <comment_count>9</comment_count>
      <attachid>58892</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-16 08:08:41 -0700</bug_when>
    <thetext>Comment on attachment 58892
Updated patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238886</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-16 08:10:54 -0700</bug_when>
    <thetext>Landed in r61255.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238977</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-16 11:23:25 -0700</bug_when>
    <thetext>Why was this landed.   We don&apos;t land #if 0 or commented out code.  I think this is bad because it doesn&apos;t get a real review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239030</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-16 12:55:04 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Why was this landed.   We don&apos;t land #if 0 or commented out code.  I think this is bad because it doesn&apos;t get a real review.

It did get a review. I&apos;m realy sorry for the temporary code style violence. The complete text patch was more than 200k which is realy unreviewable. I asked Niko to split the patch into smaler parts. He tried his best to avoid the #if 0 but this was simply not doable without breaking the bots. Niko will upload the other parts as soon as posible, so that #if 0 can be removed soon. Please be a bit more patient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239065</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-16 13:52:54 -0700</bug_when>
    <thetext>I just question your (or anyone&apos;s) ability to review commented out code.  WildFox should ideally be splitting up his 200k patch into tiny pieces.  Including landing the (failing) layout tests first and then landing incremental patches to fix them.  It&apos;s difficult, but it pays off in spades when your reviewers can actually understand and make intellegent commentary on your changes.

I find Git super useful for this kind of change. I commonly will write a huge patch, and then re-write it in smaller pieces, committing each one to git, making sure they build after each change.   Landing massive hunks of code blindly (as we did with this #if 0, or will do when he removes the &amp;&amp; 0, is not good. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239263</commentid>
    <comment_count>14</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-17 00:12:43 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I just question your (or anyone&apos;s) ability to review commented out code.  WildFox should ideally be splitting up his 200k patch into tiny pieces.  Including landing the (failing) layout tests first and then landing incremental patches to fix them.  It&apos;s difficult, but it pays off in spades when your reviewers can actually understand and make intellegent commentary on your changes.

To clarify: the patch as is would be unreviewable, as it&apos;s lacking all the context (who calls the code, when is it used, etc..) But Dirk reviewed the _full_ SVG Text patch before I even created the master bug.
So no worries, this hs already gone through our normal review process.

&gt; 
&gt; I find Git super useful for this kind of change. I commonly will write a huge patch, and then re-write it in smaller pieces, committing each one to git, making sure they build after each change.   Landing massive hunks of code blindly (as we did with this #if 0, or will do when he removes the &amp;&amp; 0, is not good. :(
You have a point here, EWS is not used. I did not think about this in advance. Next time I&apos;ll take it into account.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58891</attachid>
            <date>2010-06-16 07:06:01 -0700</date>
            <delta_ts>2010-06-16 07:17:19 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>SVGTextPrepare.patch</filename>
            <type>text/plain</type>
            <size>51794</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTI1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzAgQEAKKzIwMTAtMDYtMTYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIG5ldyBmaWxlcywgbmVlZGVkIGluIFNWRyBUZXh0IHJld3JpdGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjc2CisKKyAgICAgICAg
TGFuZCBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCBhbmQgU1ZHVGV4dFF1ZXJ5LihjcHB8aCks
IGJvdGggd2l0aCBhbiAiI2lmIDAiIG9uIHRvcCwgYXMgdGhleSB3aWxsIGJlIG5lZWRlZAorICAg
ICAgICBpbiBhIGxhdGVyIHBhdGNoLCBjb21wbGV0aW5nIHRoZSBTVkcgVGV4dCByZXdyaXRlLCB0
aGF0IHdpbGwgZW5hYmxlIHRoZW0uCisKKyAgICAgICAgRG9lc24ndCBhZmZlY3QgYW55IGNvZGUg
Zm9yIG5vdywgaXQgc2hvdWxkIGp1c3QgcmVkdWNlIHRoZSByZXZpZXcgYW1vdW50LgorCisgICAg
ICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJlbmRlcmlu
Zy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpj
dW1tdWxhdGVkV2lkdGhPckhlaWdodE9mVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmN1
bW11bGF0ZWRXaWR0aE9mVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmN1bW11bGF0ZWRI
ZWlnaHRPZlRleHRDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVUZXh0QW5jaG9y
U2hpZnRGb3JUZXh0Q2h1bmspOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUZXh0QW5jaG9yVG9U
ZXh0Q2h1bmspOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlVGV4dExlbmd0aENvcnJlY3Rp
b25Gb3JUZXh0Q2h1bmspOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUZXh0TGVuZ3RoQ29ycmVj
dGlvblRvVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua0xheW91dElu
Zm86OnN0YXJ0VGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua0xheW91
dEluZm86OmNsb3NlVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRDaHVua0xh
eW91dEluZm86OmJ1aWxkVGV4dENodW5rcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1
bmtMYXlvdXRJbmZvOjpyZWN1cnNpdmVCdWlsZFRleHRDaHVua3MpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dENodW5rTGF5b3V0SW5mbzo6bGF5b3V0VGV4dENodW5rcyk6CisgICAgICAgICog
cmVuZGVyaW5nL1NWR1RleHRRdWVyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dFF1ZXJ5OjpEYXRhOjpEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmZsb3dCb3hGb3JSZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjptYXBMZW5ndGhUaHJvdWdoQ2h1bmtUcmFuc2Zvcm1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OlNWR1RleHRRdWVyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpleGVjdXRlUXVlcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRD
b29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6Om1lYXN1cmVDaGFy
YWN0ZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpOdW1iZXJPZkNoYXJhY3RlcnNEYXRhOjpO
dW1iZXJPZkNoYXJhY3RlcnNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6
bnVtYmVyT2ZDaGFyYWN0ZXJzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1
ZXJ5OjpudW1iZXJPZkNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dExlbmd0aERh
dGE6OlRleHRMZW5ndGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6dGV4
dExlbmd0aENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6dGV4dExl
bmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdWJTdHJpbmdMZW5ndGhEYXRhOjpTdWJTdHJpbmdM
ZW5ndGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVu
Z3RoQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpzdWJTdHJpbmdM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YTo6
U3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0
UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhOjpFbmRQb3NpdGlvbk9mQ2hhcmFjdGVy
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFy
YWN0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmVuZFBvc2l0
aW9uT2ZDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Um90YXRpb25PZkNoYXJhY3RlckRh
dGE6OlJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRR
dWVyeTo6cm90YXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnRPZkNoYXJhY3RlckRhdGE6OkV4dGVudE9mQ2hhcmFjdGVyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YTo6Q2hhcmFjdGVyTnVtYmVyQXRQb3Np
dGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1i
ZXJBdFBvc2l0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojpj
aGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHVGV4dFF1
ZXJ5Lmg6IEFkZGVkLgorCiAyMDEwLTA2LTE2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KSW5kZXg6
IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJl
dmlzaW9uIDYxMjUzKQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC02
NjksNyArNjY5LDkgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJ
cmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIFwKIAlyZW5kZXJpbmcvU1ZHUm9vdElu
bGluZUJveC5jcHAgXAogCXJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIFwKLQly
ZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAKKwlyZW5kZXJpbmcvU1ZHVGV4dENo
dW5rTGF5b3V0SW5mby5jcHAgXAorCXJlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNw
cCBcCisJcmVuZGVyaW5nL1NWR1RleHRRdWVyeS5jcHAKIGVuZGlmCiAKIExPQ0FMX1NSQ19GSUxF
UyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2MTI1MykKKysr
IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0OTgsNyArMTQ5OCw5
IEBAIElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKICAgICAgICAgcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCiAgICAgICAgIHJl
bmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCisgICAgICAgIHJlbmRlcmluZy9TVkdU
ZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcAogICAgICAgICByZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0
aWxpdGllcy5jcHAKKyAgICAgICAgcmVuZGVyaW5nL1NWR1RleHRRdWVyeS5jcHAKICAgICAgICAg
cmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3R5
bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmNwcAogICAgICAgICBzdmcvQ29sb3JEaXN0YW5jZS5jcHAK
SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNjEyNTMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzMxLDkgKzMzMzEsMTIgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3JlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmggXAogCVdlYkNvcmUvcmVuZGVy
aW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1No
YWRvd1RyZWVFbGVtZW50cy5oIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlv
dXRJbmZvLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5o
IFwKIAlXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcCBcCiAJV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIFwKKwlXZWJDb3JlL3JlbmRl
cmluZy9TVkdUZXh0UXVlcnkuY3BwIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0UXVlcnku
aCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuY3BwIFwKIAlXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oIFwKIAlXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5n
eXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2MTI1MykK
KysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMwLDkgKzMzMzAs
MTIgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5oJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdU
ZXh0TGF5b3V0VXRpbGl0aWVzLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1NWR1RleHRM
YXlvdXRVdGlsaXRpZXMuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1NWR1RleHRRdWVyeS5j
cHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdUZXh0UXVlcnkuaCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MTI1MykKKysrIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE4MzgsNiArMTgzOCw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaCBcCiAgICAgcmVuZGVy
aW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uaCBcCiAgICAgcmVuZGVyaW5nL1NWR1RleHRMYXlv
dXRVdGlsaXRpZXMuaCBcCisgICAgcmVuZGVyaW5nL1NWR1RleHRRdWVyeS5oIFwKICAgICByZW5k
ZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggXAogICAgIHJlbmRlcmluZy9UcmFuc2Zv
cm1TdGF0ZS5oIFwKICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggXApAQCAt
Mjg0NSw3ICsyODQ2LDkgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAg
ICAgIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9T
VkdSb290SW5saW5lQm94LmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxl
bWVudHMuY3BwIFwKLSAgICAgICAgcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3Bw
CisgICAgICAgIHJlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCBcCisgICAgICAg
IHJlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcCBcCisgICAgICAgIHJlbmRlcmlu
Zy9TVkdUZXh0UXVlcnkuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9KQVZBU0NS
SVBUX0RFQlVHR0VSPTEpIHsKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkocmV2aXNpb24gNjEyNTMpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODkzOSw2ICsyODkzOSwxMCBAQAogCQkJCT4NCiAJCQk8
L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHVGV4
dENodW5rTGF5b3V0SW5mby5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTI4OTUwLDYgKzI4OTU0LDE0IEBACiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KKwkJIAk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xT
VkdUZXh0UXVlcnkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1RleHRRdWVyeS5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFRhYmxlTGF5
b3V0LmgiDQogCQkJCT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNjEyNTMpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOSBAQAogCQkwODREMjgz
NDExMEE3RkNCMDAzODIzOUEgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRyYWl0cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0RDI4MzIxMTBBN0ZDQjAw
MzgyMzlBIC8qIFNWR0FuaW1hdGVkUHJvcGVydHlUcmFpdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwODREQkFBMTBFRDM5RDM2MDAzOEMyMjYg
LyogV01MVmFyaWFibGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4NERCQTlEMEVEMzlEMzUwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuY3BwICov
OyB9OwogCQkwODREQkFBMjBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODREQkE5RTBFRDM5RDM2
MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggKi87IH07CisJCTA4NTNENzMyMTFDOTEwOTAwMEIy
RkQ0MiAvKiBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTNENzJGMTFDOTEwOEYwMEIyRkQ0MiAvKiBTVkdU
ZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCAqLzsgfTsKKwkJMDg1M0Q3MzMxMUM5MTA5MDAwQjJGRDQy
IC8qIFNWR1RleHRRdWVyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODUzRDczMDExQzkxMDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1ZXJ5LmNwcCAq
LzsgfTsKKwkJMDg1M0Q3MzQxMUM5MTA5MDAwQjJGRDQyIC8qIFNWR1RleHRRdWVyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1M0Q3MzExMUM5MTA5
MDAwQjJGRDQyIC8qIFNWR1RleHRRdWVyeS5oICovOyB9OwogCQkwODU2M0JCNDExNzg2MTc4MDAx
MkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTYzQkIyMTE3ODYxNzcwMDEyQjU3OCAvKiBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICovOyB9OwogCQkwODU2M0JCNTExNzg2MTc4MDAx
MkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU2M0JCMzExNzg2MTc3MDAxMkI1NzggLyogUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggKi87IH07CiAJCTA4NTYzQkQwMTE3ODY1RjUwMDEyQjU3
OCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODU2M0JDRjExNzg2NUY1MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVz
b3VyY2UuY3BwICovOyB9OwpAQCAtNTYwNSw2ICs1NjA4LDkgQEAKIAkJMDg0RDI4MzIxMTBBN0ZD
QjAwMzgyMzlBIC8qIFNWR0FuaW1hdGVkUHJvcGVydHlUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRyYWl0cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwODREQkE5RDBFRDM5RDM1MDAzOEMyMjYgLyogV01MVmFyaWFi
bGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFZhcmlhYmxl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NERCQTlFMEVEMzlEMzYwMDM4
QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V01MVmFyaWFibGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4NTNENzJGMTFD
OTEwOEYwMEIyRkQ0MiAvKiBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRDaHVua0xheW91dEluZm8uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODUzRDczMDExQzkxMDkwMDBCMkZENDIgLyogU1ZH
VGV4dFF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1Rl
eHRRdWVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4NTNENzMxMTFDOTEw
OTAwMEIyRkQ0MiAvKiBTVkdUZXh0UXVlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHVGV4dFF1ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTYz
QkIyMTE3ODYxNzcwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1NjNCQjMxMTc4NjE3NzAwMTJC
NTc4IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDg1NjNCQ0YxMTc4NjVGNTAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR1Jlc291
cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NTA2LDkgKzE2NTEyLDEy
IEBACiAJCQkJODUzQ0E5RTUwQUVFQzYwODAwMjM3MkRDIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAq
LywKIAkJCQkwOERBQjlDMDExMDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRz
LmNwcCAqLywKIAkJCQkwOERBQjlDMTExMDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVs
ZW1lbnRzLmggKi8sCisJCQkJMDg1M0Q3MkYxMUM5MTA4RjAwQjJGRDQyIC8qIFNWR1RleHRDaHVu
a0xheW91dEluZm8uY3BwICovLAogCQkJCTA4NDJCQzgwMTE5MDE0NzIwMEM3RDA4RiAvKiBTVkdU
ZXh0Q2h1bmtMYXlvdXRJbmZvLmggKi8sCiAJCQkJMDgzRjUyOTcxMTk1N0ZCRTAwNjUzRUJFIC8q
IFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwICovLAogCQkJCTA4M0Y1Mjk4MTE5NTdGQkUwMDY1
M0VCRSAvKiBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmggKi8sCisJCQkJMDg1M0Q3MzAxMUM5MTA5
MDAwQjJGRDQyIC8qIFNWR1RleHRRdWVyeS5jcHAgKi8sCisJCQkJMDg1M0Q3MzExMUM5MTA5MDAw
QjJGRDQyIC8qIFNWR1RleHRRdWVyeS5oICovLAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIz
NCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJCUFCMDE0REUxMEU2ODlBNDMwMEUxMDQ0NSAvKiBU
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwICovLAogCQkJCUFCMDE0REUyMEU2ODlBNDMwMEUx
MDQ0NSAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCAqLywKQEAgLTE5NDE1LDYgKzE5NDI0
LDcgQEAKIAkJCQlCNkIwNTQwQTExQjY4RjEwMDAyNTY0QzUgLyogSURCT2JqZWN0U3RvcmVJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4MTZDODA2OTExQkU4ODdFMDA5QTQ1RTkgLyogSURCS2V5
UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgxNkM4MEFGMTFCRTk5MEQwMDlBNDVFOSAvKiBK
U0lEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwODUzRDczNDExQzkxMDkwMDBCMkZE
NDIgLyogU1ZHVGV4dFF1ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIxNzIwLDYgKzIxNzMwLDgg
QEAKIAkJCQlCNkIwNTQwOTExQjY4RjEwMDAyNTY0QzUgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTgxNkM4MDY4MTFCRTg4N0UwMDlBNDVFOSAvKiBJREJLZXlS
YW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MTZDODBCMTExQkU5OTM0MDA5QTQ1RTkgLyog
SlNJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwODUzRDczMjExQzkxMDkwMDBC
MkZENDIgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
ODUzRDczMzExQzkxMDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1ZXJ5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZv
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1ZHVGV4dENodW5rTGF5b3V0
SW5mby5oIgorCisvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkZWFjdGl2YXRlZCwg
dW50aWwgdGhlIFNWRyBUZXh0IHJld3JpdGUgcGF0Y2ggbGFuZHMuCisjaWYgRU5BQkxFKFNWRykg
JiYgMAorI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKKyNpbmNsdWRlICJTVkdJbmxpbmVUZXh0
Qm94LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKworLy8gVGV4dCBjaHVuayBjcmVh
dGlvbiBpcyBjb21wbGV4IGFuZCB0aGUgd2hvbGUgcHJvY2VzcworLy8gY2FuIGVhc2lseSBiZSB0
cmFjZWQgYnkgc2V0dGluZyB0aGlzIHZhcmlhYmxlID4gMC4KKyNkZWZpbmUgREVCVUdfQ0hVTktf
QlVJTERJTkcgMAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBmbG9hdCBjdW1tdWxh
dGVkV2lkdGhPckhlaWdodE9mVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmssIGJvb2wgY2Fs
Y1dpZHRoT25seSkKK3sKKyAgICBmbG9hdCBsZW5ndGggPSAwLjBmOworICAgIFZlY3RvcjxTVkdD
aGFyPjo6aXRlcmF0b3IgY2hhckl0ID0gY2h1bmsuc3RhcnQ7CisKKyAgICBWZWN0b3I8U1ZHSW5s
aW5lQm94Q2hhcmFjdGVyUmFuZ2U+OjppdGVyYXRvciBpdCA9IGNodW5rLmJveGVzLmJlZ2luKCk7
CisgICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0b3IgZW5kID0g
Y2h1bmsuYm94ZXMuZW5kKCk7CisKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSA9ICppdDsKKworICAgICAgICBT
VkdJbmxpbmVUZXh0Qm94KiBib3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4ocmFu
Z2UuYm94KTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gYm94LT5yZW5kZXJlcigpLT5z
dHlsZSgpOworCisgICAgICAgIGZvciAoaW50IGkgPSByYW5nZS5zdGFydE9mZnNldDsgaSA8IHJh
bmdlLmVuZE9mZnNldDsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQoY2hhckl0IDw9IGNodW5r
LmVuZCk7CisKKyAgICAgICAgICAgIC8vIERldGVybWluZSBob3cgbWFueSBjaGFyYWN0ZXJzIC0g
c3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAtIGNhbiBiZSBtZWFzdXJlZCBhdCBvbmNlLgorICAg
ICAgICAgICAgLy8gSW1wb3J0YW50IGZvciBub24tYWJzb2x1dGUgcG9zaXRpb25lZCBub24tbGF0
aW4xIHRleHQgKGllLiBBcmFiaWMpIHdoZXJlIGllLiB0aGUgd2lkdGgKKyAgICAgICAgICAgIC8v
IG9mIGEgc3RyaW5nIGlzIG5vdCB0aGUgc3VtIG9mIHRoZSBib3VuZGFyaWVzIG9mIGFsbCBjb250
YWluZWQgZ2x5cGhzLgorICAgICAgICAgICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBpdFNl
YXJjaCA9IGNoYXJJdCArIDE7CisgICAgICAgICAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9y
IGVuZFNlYXJjaCA9IGNoYXJJdCArIHJhbmdlLmVuZE9mZnNldCAtIGk7CisgICAgICAgICAgICB3
aGlsZSAoaXRTZWFyY2ggIT0gZW5kU2VhcmNoKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gbmVl
ZCB0byBjaGVjayBmb3IgJ2lzSGlkZGVuKCknIGhlcmUgYXMgdGhpcyBmdW5jdGlvbiBpcyBub3Qg
Y2FsbGVkIGZvciB0ZXh0IHBhdGhzLgorICAgICAgICAgICAgICAgIGlmIChpdFNlYXJjaC0+ZHJh
d25TZXBlcmF0ZWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgaXRTZWFyY2grKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdW5zaWduZWQgaW50
IHBvc2l0aW9uT2Zmc2V0ID0gaXRTZWFyY2ggLSBjaGFySXQ7CisKKyAgICAgICAgICAgIC8vIENh
bGN1bGF0ZSB3aWR0aC9oZWlnaHQgb2Ygc3VicmFuZ2UKKyAgICAgICAgICAgIFNWR0lubGluZUJv
eENoYXJhY3RlclJhbmdlIHN1YlJhbmdlOworICAgICAgICAgICAgc3ViUmFuZ2UuYm94ID0gcmFu
Z2UuYm94OworICAgICAgICAgICAgc3ViUmFuZ2Uuc3RhcnRPZmZzZXQgPSBpOworICAgICAgICAg
ICAgc3ViUmFuZ2UuZW5kT2Zmc2V0ID0gaSArIHBvc2l0aW9uT2Zmc2V0OworCisgICAgICAgICAg
ICBpZiAoY2FsY1dpZHRoT25seSkKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gY3VtbXVsYXRl
ZFdpZHRoT2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShzdWJSYW5nZSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJv
eENoYXJhY3RlclJhbmdlKHN1YlJhbmdlKTsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGdh
cCBiZXR3ZWVuIHRoZSBwcmV2aW91cyAmIGN1cnJlbnQgcmFuZ2UKKyAgICAgICAgICAgIC8vIDx0
ZXh0IHg9IjEwIDUwIDcwIj5BQkNEPC90ZXh0PiAtIHdlIG5lZWQgdG8gdGFrZSB0aGUgZ2FwcyBi
ZXR3ZWVuIEEgJiBCIGludG8gYWNjb3VudAorICAgICAgICAgICAgLy8gc28gYWRkICI0MCIgYXMg
d2lkdGgsIGFuZCBhbmFsb2dvdXMgZm9yIEIgJiBDLCBhZGQgIjIwIiBhcyB3aWR0aC4KKyAgICAg
ICAgICAgIGlmIChpdFNlYXJjaCA+IGNodW5rLnN0YXJ0ICYmIGl0U2VhcmNoIDwgY2h1bmsuZW5k
KSB7CisgICAgICAgICAgICAgICAgU1ZHQ2hhciYgbGFzdENoYXJhY3RlciA9ICooaXRTZWFyY2gg
LSAxKTsKKyAgICAgICAgICAgICAgICBTVkdDaGFyJiBjdXJyZW50Q2hhcmFjdGVyID0gKml0U2Vh
cmNoOworCisgICAgICAgICAgICAgICAgaW50IGNoYXJzQ29uc3VtZWQgPSAwOworICAgICAgICAg
ICAgICAgIGZsb2F0IGdseXBoV2lkdGggPSAwLjBmOworICAgICAgICAgICAgICAgIGZsb2F0IGds
eXBoSGVpZ2h0ID0gMC4wZjsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZ2x5cGhOYW1lOworICAg
ICAgICAgICAgICAgIFN0cmluZyB1bmljb2RlU3RyaW5nOworICAgICAgICAgICAgICAgIGJveC0+
bWVhc3VyZUNoYXJhY3RlcihzdHlsZSwgaSArIHBvc2l0aW9uT2Zmc2V0IC0gMSwgY2hhcnNDb25z
dW1lZCwgZ2x5cGhOYW1lLCB1bmljb2RlU3RyaW5nLCBnbHlwaFdpZHRoLCBnbHlwaEhlaWdodCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoY2FsY1dpZHRoT25seSkKKyAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoICs9IGN1cnJlbnRDaGFyYWN0ZXIueCAtIGxhc3RDaGFyYWN0ZXIueCAtIGdseXBo
V2lkdGg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsZW5ndGgg
Kz0gY3VycmVudENoYXJhY3Rlci55IC0gbGFzdENoYXJhY3Rlci55IC0gZ2x5cGhIZWlnaHQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkdmFuY2UgcHJvY2Vzc2VkIGNoYXJhY3Rl
cnMKKyAgICAgICAgICAgIGkgKz0gcG9zaXRpb25PZmZzZXQgLSAxOworICAgICAgICAgICAgY2hh
ckl0ID0gaXRTZWFyY2g7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoY2hhckl0ID09
IGNodW5rLmVuZCk7CisgICAgcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIGZsb2F0IGN1bW11
bGF0ZWRXaWR0aE9mVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmspCit7CisgICAgcmV0dXJu
IGN1bW11bGF0ZWRXaWR0aE9ySGVpZ2h0T2ZUZXh0Q2h1bmsoY2h1bmssIHRydWUpOworfQorCitz
dGF0aWMgZmxvYXQgY3VtbXVsYXRlZEhlaWdodE9mVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1
bmspCit7CisgICAgcmV0dXJuIGN1bW11bGF0ZWRXaWR0aE9ySGVpZ2h0T2ZUZXh0Q2h1bmsoY2h1
bmssIGZhbHNlKTsKK30KKworZmxvYXQgY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0Rm9yVGV4dENo
dW5rKFNWR1RleHRDaHVuayYgY2h1bmssIEVUZXh0QW5jaG9yIGFuY2hvcikKK3sKKyAgICBmbG9h
dCBzaGlmdCA9IDAuMGY7CisKKyAgICBpZiAoY2h1bmsuaXNWZXJ0aWNhbFRleHQpCisgICAgICAg
IHNoaWZ0ID0gY3VtbXVsYXRlZEhlaWdodE9mVGV4dENodW5rKGNodW5rKTsKKyAgICBlbHNlCisg
ICAgICAgIHNoaWZ0ID0gY3VtbXVsYXRlZFdpZHRoT2ZUZXh0Q2h1bmsoY2h1bmspOworCisgICAg
aWYgKGFuY2hvciA9PSBUQV9NSURETEUpCisgICAgICAgIHNoaWZ0ICo9IC0wLjVmOworICAgIGVs
c2UKKyAgICAgICAgc2hpZnQgKj0gLTEuMGY7CisKKyAgICByZXR1cm4gc2hpZnQ7Cit9CisKK3N0
YXRpYyB2b2lkIGFwcGx5VGV4dEFuY2hvclRvVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmsp
Cit7CisgICAgLy8gVGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBmb3IgY2h1bmtzIGNvbnRhaW5p
bmcgY2hhcnMgYWxpZ25lZCBvbiBhIHBhdGguCisgICAgLy8gLT4gYWxsIGNoYXJhY3RlcnMgYXJl
IHZpc2libGUsIG5vIG5lZWQgdG8gY2hlY2sgZm9yICJpc0hpZGRlbigpIiBhbnl3aGVyZS4KKwor
ICAgIGlmIChjaHVuay5hbmNob3IgPT0gVEFfU1RBUlQpCisgICAgICAgIHJldHVybjsKKworICAg
IGZsb2F0IHNoaWZ0ID0gY2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0Rm9yVGV4dENodW5rKGNodW5r
LCBjaHVuay5hbmNob3IpOworCisgICAgLy8gQXBwbHkgY29ycmVjdGlvbiB0byBjaHVuaworICAg
IFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgY2h1bmtJdCA9IGNodW5rLnN0YXJ0OworICAgIGZv
ciAoOyBjaHVua0l0ICE9IGNodW5rLmVuZDsgKytjaHVua0l0KSB7CisgICAgICAgIFNWR0NoYXIm
IGN1ckNoYXIgPSAqY2h1bmtJdDsKKworICAgICAgICBpZiAoY2h1bmsuaXNWZXJ0aWNhbFRleHQp
CisgICAgICAgICAgICBjdXJDaGFyLnkgKz0gc2hpZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGN1ckNoYXIueCArPSBzaGlmdDsKKyAgICB9CisKKyAgICAvLyBNb3ZlIGlubGluZSBib3hl
cworICAgIFZlY3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGJveEl0
ID0gY2h1bmsuYm94ZXMuYmVnaW4oKTsKKyAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFjdGVy
UmFuZ2U+OjppdGVyYXRvciBib3hFbmQgPSBjaHVuay5ib3hlcy5lbmQoKTsKKworICAgIGZvciAo
OyBib3hJdCAhPSBib3hFbmQ7ICsrYm94SXQpIHsKKyAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFj
dGVyUmFuZ2UmIHJhbmdlID0gKmJveEl0OworCisgICAgICAgIElubGluZUJveCogY3VyQm94ID0g
cmFuZ2UuYm94OworICAgICAgICBBU1NFUlQoY3VyQm94LT5pc1NWR0lubGluZVRleHRCb3goKSk7
CisKKyAgICAgICAgLy8gTW92ZSB0YXJnZXQgYm94CisgICAgICAgIGlmIChjaHVuay5pc1ZlcnRp
Y2FsVGV4dCkKKyAgICAgICAgICAgIGN1ckJveC0+c2V0WShjdXJCb3gtPnkoKSArIHN0YXRpY19j
YXN0PGludD4oc2hpZnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VyQm94LT5zZXRY
KGN1ckJveC0+eCgpICsgc3RhdGljX2Nhc3Q8aW50PihzaGlmdCkpOworICAgIH0KK30KKworZmxv
YXQgY2FsY3VsYXRlVGV4dExlbmd0aENvcnJlY3Rpb25Gb3JUZXh0Q2h1bmsoU1ZHVGV4dENodW5r
JiBjaHVuaywgRUxlbmd0aEFkanVzdCBsZW5ndGhBZGp1c3QsIGZsb2F0JiBjb21wdXRlZExlbmd0
aCkKK3sKKyAgICBpZiAoY2h1bmsudGV4dExlbmd0aCA8PSAwLjBmKQorICAgICAgICByZXR1cm4g
MC4wZjsKKworICAgIGNvbXB1dGVkTGVuZ3RoID0gMC4wZjsKKworICAgIGZsb2F0IGNvbXB1dGVk
V2lkdGggPSBjdW1tdWxhdGVkV2lkdGhPZlRleHRDaHVuayhjaHVuayk7CisgICAgZmxvYXQgY29t
cHV0ZWRIZWlnaHQgPSBjdW1tdWxhdGVkSGVpZ2h0T2ZUZXh0Q2h1bmsoY2h1bmspOworICAgIGlm
ICgoY29tcHV0ZWRXaWR0aCA8PSAwLjBmICYmICFjaHVuay5pc1ZlcnRpY2FsVGV4dCkKKyAgICAg
ICAgfHwgKGNvbXB1dGVkSGVpZ2h0IDw9IDAuMGYgJiYgY2h1bmsuaXNWZXJ0aWNhbFRleHQpKQor
ICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIGNvbXB1dGVkTGVuZ3RoID0gY2h1bmsuaXNWZXJ0
aWNhbFRleHQgPyBjb21wdXRlZEhlaWdodCA6IGNvbXB1dGVkV2lkdGg7CisgICAgaWYgKGxlbmd0
aEFkanVzdCA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVTVF9TUEFDSU5HQU5E
R0xZUEhTKSB7CisgICAgICAgIGlmIChjaHVuay5pc1ZlcnRpY2FsVGV4dCkgICAgCisgICAgICAg
ICAgICBjaHVuay5jdG0uc2NhbGVOb25Vbmlmb3JtKDEuMGYsIGNodW5rLnRleHRMZW5ndGggLyBj
b21wdXRlZExlbmd0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNodW5rLmN0bS5zY2Fs
ZU5vblVuaWZvcm0oY2h1bmsudGV4dExlbmd0aCAvIGNvbXB1dGVkTGVuZ3RoLCAxLjBmKTsKKwor
ICAgICAgICByZXR1cm4gMC4wZjsKKyAgICB9CisKKyAgICByZXR1cm4gKGNodW5rLnRleHRMZW5n
dGggLSBjb21wdXRlZExlbmd0aCkgLyBmbG9hdChjaHVuay5lbmQgLSBjaHVuay5zdGFydCk7Cit9
CisKK3N0YXRpYyB2b2lkIGFwcGx5VGV4dExlbmd0aENvcnJlY3Rpb25Ub1RleHRDaHVuayhTVkdU
ZXh0Q2h1bmsmIGNodW5rKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGlzIG5vdCBjYWxsZWQgZm9y
IGNodW5rcyBjb250YWluaW5nIGNoYXJzIGFsaWduZWQgb24gYSBwYXRoLgorICAgIC8vIC0+IGFs
bCBjaGFyYWN0ZXJzIGFyZSB2aXNpYmxlLCBubyBuZWVkIHRvIGNoZWNrIGZvciAiaXNIaWRkZW4o
KSIgYW55d2hlcmUuCisKKyAgICAvLyBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIGlz
IGhhbmRsZWQgYnkgc2V0dGluZyBhIHNjYWxlIGZhY3RvciBmb3IgdGhlIHdob2xlIGNodW5rCisg
ICAgZmxvYXQgdGV4dExlbmd0aCA9IDAuMGY7CisgICAgZmxvYXQgc3BhY2luZ1RvQXBwbHkgPSBj
YWxjdWxhdGVUZXh0TGVuZ3RoQ29ycmVjdGlvbkZvclRleHRDaHVuayhjaHVuaywgY2h1bmsubGVu
Z3RoQWRqdXN0LCB0ZXh0TGVuZ3RoKTsKKworICAgIGlmICghY2h1bmsuY3RtLmlzSWRlbnRpdHko
KSAmJiBjaHVuay5sZW5ndGhBZGp1c3QgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpMRU5HVEhB
REpVU1RfU1BBQ0lOR0FOREdMWVBIUykgeworICAgICAgICBTVkdDaGFyJiBmaXJzdENoYXIgPSAq
KGNodW5rLnN0YXJ0KTsKKworICAgICAgICAvLyBBc3N1cmUgd2UgYXBwbHkgdGhlIGNodW5rIHNj
YWxpbmcgaW4gdGhlIHJpZ2h0IG9yaWdpbgorICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3Q2h1
bmtDdG0oY2h1bmsuY3RtKTsKKyAgICAgICAgbmV3Q2h1bmtDdG0udHJhbnNsYXRlUmlnaHQoZmly
c3RDaGFyLngsIGZpcnN0Q2hhci55KTsKKyAgICAgICAgbmV3Q2h1bmtDdG0udHJhbnNsYXRlKC1m
aXJzdENoYXIueCwgLWZpcnN0Q2hhci55KTsKKworICAgICAgICBjaHVuay5jdG0gPSBuZXdDaHVu
a0N0bTsKKyAgICB9CisKKyAgICAvLyBBcHBseSBjb3JyZWN0aW9uIHRvIGNodW5rIAorICAgIGlm
IChzcGFjaW5nVG9BcHBseSAhPSAwLjBmKSB7CisgICAgICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRl
cmF0b3IgY2h1bmtJdCA9IGNodW5rLnN0YXJ0OworICAgICAgICBmb3IgKDsgY2h1bmtJdCAhPSBj
aHVuay5lbmQ7ICsrY2h1bmtJdCkgeworICAgICAgICAgICAgU1ZHQ2hhciYgY3VyQ2hhciA9ICpj
aHVua0l0OworICAgICAgICAgICAgY3VyQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7CisKKyAg
ICAgICAgICAgIGlmIChjaHVuay5pc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAgICBjdXJD
aGFyLnkgKz0gKGNodW5rSXQgLSBjaHVuay5zdGFydCkgKiBzcGFjaW5nVG9BcHBseTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJDaGFyLnggKz0gKGNodW5rSXQgLSBjaHVu
ay5zdGFydCkgKiBzcGFjaW5nVG9BcHBseTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBT
VkdUZXh0Q2h1bmtMYXlvdXRJbmZvOjpzdGFydFRleHRDaHVuaygpCit7CisgICAgbV9jaHVuay5i
b3hlcy5jbGVhcigpOworICAgIG1fY2h1bmsuYm94ZXMuYXBwZW5kKFNWR0lubGluZUJveENoYXJh
Y3RlclJhbmdlKCkpOworCisgICAgbV9jaHVuay5zdGFydCA9IG1fY2hhcnNJdDsKKyAgICBtX2Fz
c2lnbkNodW5rUHJvcGVydGllcyA9IHRydWU7Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rTGF5b3V0
SW5mbzo6Y2xvc2VUZXh0Q2h1bmsoKQoreworICAgIEFTU0VSVCghbV9jaHVuay5ib3hlcy5sYXN0
KCkuaXNPcGVuKCkpOworICAgIEFTU0VSVChtX2NodW5rLmJveGVzLmxhc3QoKS5pc0Nsb3NlZCgp
KTsKKworICAgIG1fY2h1bmsuZW5kID0gbV9jaGFyc0l0OworICAgIEFTU0VSVChtX2NodW5rLmVu
ZCA+PSBtX2NodW5rLnN0YXJ0KTsKKworICAgIG1fc3ZnVGV4dENodW5rcy5hcHBlbmQobV9jaHVu
ayk7Cit9CisKK3ZvaWQgU1ZHVGV4dENodW5rTGF5b3V0SW5mbzo6YnVpbGRUZXh0Q2h1bmtzKFZl
Y3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgYmVnaW4sIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3Ig
ZW5kLCBJbmxpbmVGbG93Qm94KiBzdGFydCkKK3sKKyAgICBtX2NoYXJzQmVnaW4gPSBiZWdpbjsK
KyAgICBtX2NoYXJzRW5kID0gZW5kOworCisgICAgbV9jaGFyc0l0ID0gYmVnaW47CisgICAgbV9j
aHVuayA9IFNWR1RleHRDaHVuayhiZWdpbik7CisKKyAgICByZWN1cnNpdmVCdWlsZFRleHRDaHVu
a3Moc3RhcnQpOworICAgIEFTU0VSVChtX2NoYXJzSXQgPT0gbV9jaGFyc0VuZCk7Cit9CisKK3Zv
aWQgU1ZHVGV4dENodW5rTGF5b3V0SW5mbzo6cmVjdXJzaXZlQnVpbGRUZXh0Q2h1bmtzKElubGlu
ZUZsb3dCb3gqIHN0YXJ0KQoreworI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQorICAgIGZw
cmludGYoc3RkZXJyLCAiIC0+IGJ1aWxkVGV4dENodW5rcyhzdGFydD0lcClcbiIsIHN0YXJ0KTsK
KyNlbmRpZgorCisgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBzdGFydC0+Zmlyc3RDaGlsZCgp
OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgIGlmIChjdXJyLT5y
ZW5kZXJlcigpLT5pc1RleHQoKSkgeworICAgICAgICAgICAgSW5saW5lVGV4dEJveCogdGV4dEJv
eCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihjdXJyKTsKKworICAgICAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gdGV4dEJveC0+bGVuKCk7CisgICAgICAgICAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4g
MQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gSGFuZGxlIGlubGluZSB0ZXh0IGJv
eCAoJXApIHdpdGggJWkgY2hhcmFjdGVycyAoc3RhcnQ6ICVpLCBlbmQ6ICVpKSwgaGFuZGxpbmdU
ZXh0UGF0aD0laVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94LCBsZW5n
dGgsIHRleHRCb3gtPnN0YXJ0KCksIHRleHRCb3gtPmVuZCgpLCAoaW50KSBtX2hhbmRsaW5nVGV4
dFBhdGgpOworI2VuZGlmCisKKyAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHQgPSB0ZXh0Qm94
LT50ZXh0UmVuZGVyZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVCh0ZXh0KTsKKyAgICAgICAgICAg
IEFTU0VSVCh0ZXh0LT5ub2RlKCkpOworCisgICAgICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1l
bnQqIHRleHRDb250ZW50ID0gMDsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSB0ZXh0LT5ub2Rl
KCktPnBhcmVudCgpOworICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNTVkdFbGVt
ZW50KCkgJiYgIXRleHRDb250ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihub2RlKS0+aXNUZXh0Q29udGVudCgpKQorICAgICAgICAgICAgICAgICAg
ICB0ZXh0Q29udGVudCA9IHN0YXRpY19jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudCo+KG5vZGUp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCh0ZXh0Q29u
dGVudCk7CisKKyAgICAgICAgICAgIC8vIFN0YXJ0IG5ldyBjaGFyYWN0ZXIgcmFuZ2UgZm9yIHRo
ZSBmaXJzdCBjaHVuaworICAgICAgICAgICAgYm9vbCBpc0ZpcnN0Q2hhcmFjdGVyID0gbV9zdmdU
ZXh0Q2h1bmtzLmlzRW1wdHkoKSAmJiBtX2NodW5rLnN0YXJ0ID09IG1fY2hhcnNJdCAmJiBtX2No
dW5rLnN0YXJ0ID09IG1fY2h1bmsuZW5kOworICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGFyYWN0
ZXIpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9jaHVuay5ib3hlcy5pc0VtcHR5KCkpOwor
ICAgICAgICAgICAgICAgIG1fY2h1bmsuYm94ZXMuYXBwZW5kKFNWR0lubGluZUJveENoYXJhY3Rl
clJhbmdlKCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUKCFt
X2NodW5rLmJveGVzLmlzRW1wdHkoKSk7CisKKyAgICAgICAgICAgIC8vIFdhbGsgc3RyaW5nIHRv
IGZpbmQgb3V0IG5ldyBjaHVuayBwb3NpdGlvbnMsIGlmIGV4aXN0ZW50CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobV9jaGFyc0l0ICE9IG1fY2hhcnNFbmQpOworCisgICAgICAgICAgICAgICAgU1ZHSW5s
aW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlID0gbV9jaHVuay5ib3hlcy5sYXN0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJhbmdlLmlzT3BlbigpKSB7CisgICAgICAgICAgICAgICAgICAgIHJh
bmdlLmJveCA9IGN1cnI7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID0g
IWkgPyAwIDogaSAtIDE7CisKKyNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEKKyAgICAgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfCAtPiBSYW5nZSBpcyBvcGVuISBib3g9JXAs
IHN0YXJ0T2Zmc2V0PSVpXG4iLCByYW5nZS5ib3gsIHJhbmdlLnN0YXJ0T2Zmc2V0KTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElmIGEgbmV3IChvciB0
aGUgZmlyc3QpIGNodW5rIGhhcyBiZWVuIHN0YXJ0ZWQsIHJlY29yZCBpdCdzIHRleHQtYW5jaG9y
IGFuZCB3cml0aW5nIG1vZGUuCisgICAgICAgICAgICAgICAgaWYgKG1fYXNzaWduQ2h1bmtQcm9w
ZXJ0aWVzKSB7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzaWduQ2h1bmtQcm9wZXJ0aWVzID0g
ZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgbV9jaHVuay5pc1ZlcnRpY2FsVGV4dCA9IGlz
VmVydGljYWxXcml0aW5nTW9kZSh0ZXh0LT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9jaHVuay5pc1RleHRQYXRoID0gbV9oYW5kbGluZ1RleHRQYXRoOworICAg
ICAgICAgICAgICAgICAgICBtX2NodW5rLmFuY2hvciA9IHRleHQtPnN0eWxlKCktPnN2Z1N0eWxl
KCktPnRleHRBbmNob3IoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaHVuay50ZXh0TGVuZ3Ro
ID0gdGV4dENvbnRlbnQtPnRleHRMZW5ndGgoKS52YWx1ZSh0ZXh0Q29udGVudCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fY2h1bmsubGVuZ3RoQWRqdXN0ID0gKEVMZW5ndGhBZGp1c3QpIHRleHRD
b250ZW50LT5sZW5ndGhBZGp1c3QoKTsKKworI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQor
ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8IC0+IEFzc2lnbiBjaHVuayBw
cm9wZXJ0aWVzLCBpc1ZlcnRpY2FsVGV4dD0laSwgYW5jaG9yPSVpXG4iLCBtX2NodW5rLmlzVmVy
dGljYWxUZXh0LCBtX2NodW5rLmFuY2hvcik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgIWlzRmlyc3RDaGFyYWN0ZXIgJiYgbV9jaGFy
c0l0LT5uZXdUZXh0Q2h1bmspIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgbWlkIGNo
dW5rICYgY2hhcmFjdGVyIHJhbmdlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghcmFuZ2Uu
aXNPcGVuKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXJhbmdlLmlzQ2xvc2VkKCkp
OworCisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IGk7CisgICAgICAgICAg
ICAgICAgICAgIGNsb3NlVGV4dENodW5rKCk7CisKKyNpZiBERUJVR19DSFVOS19CVUlMRElORyA+
IDEKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfCAtPiBDbG9zZSBtaWQt
dGV4dCBjaHVuaywgYXQgZW5kT2Zmc2V0OiAlaSBhbmQgc3RhcnRpbmcgbmV3IG1pZCBjaHVuayFc
biIsIHJhbmdlLmVuZE9mZnNldCk7CisjZW5kaWYKKyAgICAKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUHJlcGFyZSBmb3IgbmV4dCBjaHVuaywgaWYgd2UncmUgbm90IGF0IHRoZSBlbmQKKyAgICAg
ICAgICAgICAgICAgICAgc3RhcnRUZXh0Q2h1bmsoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGkgKyAxID09IGxlbmd0aCkgeworI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQorICAgICAg
ICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfCAtPiBSZWNvcmQgbGFzdCBjaHVu
ayBvZiBpbmxpbmUgdGV4dCBib3ghXG4iKTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFydFRleHRDaHVuaygpOworICAgICAgICAgICAgICAgICAgICAgICAgU1ZHSW5saW5l
Qm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlID0gbV9jaHVuay5ib3hlcy5sYXN0KCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYXNzaWduQ2h1bmtQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NodW5rLmlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdy
aXRpbmdNb2RlKHRleHQtPnN0eWxlKCktPnN2Z1N0eWxlKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jaHVuay5pc1RleHRQYXRoID0gbV9oYW5kbGluZ1RleHRQYXRoOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jaHVuay5hbmNob3IgPSB0ZXh0LT5zdHlsZSgpLT5zdmdTdHlsZSgp
LT50ZXh0QW5jaG9yKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NodW5rLnRleHRMZW5n
dGggPSB0ZXh0Q29udGVudC0+dGV4dExlbmd0aCgpLnZhbHVlKHRleHRDb250ZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fY2h1bmsubGVuZ3RoQWRqdXN0ID0gKEVMZW5ndGhBZGp1c3Qp
IHRleHRDb250ZW50LT5sZW5ndGhBZGp1c3QoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
cmFuZ2UuYm94ID0gY3VycjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zm
c2V0ID0gaTsKKworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFyYW5nZS5pc09wZW4o
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXJhbmdlLmlzQ2xvc2VkKCkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBzaG91bGQgb25seSBob2xkIHRydWUgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIg
b2YgdGhlIGZpcnN0IGNodW5rCisgICAgICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGFyYWN0ZXIp
CisgICAgICAgICAgICAgICAgICAgIGlzRmlyc3RDaGFyYWN0ZXIgPSBmYWxzZTsKKyAgICAKKyAg
ICAgICAgICAgICAgICArK21fY2hhcnNJdDsKKyAgICAgICAgICAgIH0KKworI2lmIERFQlVHX0NI
VU5LX0JVSUxESU5HID4gMSAgICAKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IEZp
bmlzaGVkIGlubGluZSB0ZXh0IGJveCFcbiIpOworI2VuZGlmCisKKyAgICAgICAgICAgIFNWR0lu
bGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSA9IG1fY2h1bmsuYm94ZXMubGFzdCgpOworICAg
ICAgICAgICAgaWYgKCFyYW5nZS5pc09wZW4oKSAmJiAhcmFuZ2UuaXNDbG9zZWQoKSkgeworI2lm
IERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiIC0+IExhc3QgcmFuZ2Ugbm90IGNsb3NlZCAtIGNsb3Npbmcgd2l0aCBlbmRPZmZzZXQ6ICVp
XG4iLCBsZW5ndGgpOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICAvLyBDdXJyZW50IHRleHQg
Y2h1bmsgaXMgbm90IHlldCBjbG9zZWQuIEZpbmlzaCB0aGUgY3VycmVudCByYW5nZSwgYnV0IGRv
bid0IHN0YXJ0IGEgbmV3IGNodW5rLgorICAgICAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9
IGxlbmd0aDsKKworICAgICAgICAgICAgICAgIGlmIChtX2NoYXJzSXQgIT0gbV9jaGFyc0VuZCkg
eworI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQorICAgICAgICAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiAtPiBOb3QgYXQgbGFzdCBjaGFyYWN0ZXIgeWV0IVxuIik7CisjZW5kaWYK
KworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgYXQgdGhlIGVuZCBvZiB0aGUg
bGFzdCBib3ggdG8gYmUgcHJvY2Vzc2VkLCBhbmQgaWYgdGhlIG5leHQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gY2hhcmFjdGVyIHN0YXJ0cyBhIG5ldyBjaHVuaywgdGhlbiBjbG9zZSB0aGUgY3Vy
cmVudCBjaHVuayBhbmQgc3RhcnQgYSBuZXcgb25lLgorICAgICAgICAgICAgICAgICAgICBpZiAo
bV9jaGFyc0l0LT5uZXdUZXh0Q2h1bmspIHsKKyNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IE5leHQgY2hhcmFj
dGVyIHN0YXJ0cyBuZXcgY2h1bmshIENsb3NpbmcgY3VycmVudCBjaHVuaywgYW5kIHN0YXJ0aW5n
IGEgbmV3IG9uZS4uLlxuIik7CisjZW5kaWYKKworICAgICAgICAgICAgICAgICAgICAgICAgY2xv
c2VUZXh0Q2h1bmsoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGV4dENodW5rKCk7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBKdXN0IHN0YXJ0IGEgbmV3IGNoYXJhY3RlciByYW5nZQorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jaHVuay5ib3hlcy5hcHBlbmQoU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoKSk7CisK
KyNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiIC0+IE5leHQgY2hhcmFjdGVyIGRvZXMgTk9UIHN0YXJ0IGEgbmV3IGNo
dW5rISBTdGFydGluZyBuZXcgY2hhcmFjdGVyIHJhbmdlLi4uXG4iKTsKKyNlbmRpZgorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZiBERUJVR19DSFVO
S19CVUlMRElORyA+IDEKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4g
Q2xvc2luZyBmaW5hbCBjaHVuayEgRmluaXNoZWQgcHJvY2Vzc2luZyFcbiIpOworI2VuZGlmCisK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgZmluYWwgY2h1bmssIG9uY2Ugd2UncmUgYXQg
dGhlIGVuZCBvZiB0aGUgbGFzdCBib3gKKyAgICAgICAgICAgICAgICAgICAgY2xvc2VUZXh0Q2h1
bmsoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBBU1NFUlQoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpOworICAgICAgICAg
ICAgSW5saW5lRmxvd0JveCogZmxvd0JveCA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihj
dXJyKTsKKworICAgICAgICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgY29udGVudC4KKyAgICAgICAg
ICAgIGlmICghZmxvd0JveC0+cmVuZGVyZXIoKS0+bm9kZSgpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBib29sIGlzVGV4dFBhdGggPSBmbG93Qm94LT5yZW5kZXJl
cigpLT5ub2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRleHRQYXRoVGFnKTsKKworI2lmIERF
QlVHX0NIVU5LX0JVSUxESU5HID4gMQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4g
SGFuZGxlIGlubGluZSBmbG93IGJveCAoJXApLCBpc1RleHRQYXRoPSVpXG4iLCBmbG93Qm94LCAo
aW50KSBpc1RleHRQYXRoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBpZiAoaXNUZXh0UGF0aCkK
KyAgICAgICAgICAgICAgICBtX2hhbmRsaW5nVGV4dFBhdGggPSB0cnVlOworCisgICAgICAgICAg
ICByZWN1cnNpdmVCdWlsZFRleHRDaHVua3MoZmxvd0JveCk7CisKKyAgICAgICAgICAgIGlmIChp
c1RleHRQYXRoKQorICAgICAgICAgICAgICAgIG1faGFuZGxpbmdUZXh0UGF0aCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisjaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCisgICAgZnBy
aW50ZihzdGRlcnIsICIgPC0gYnVpbGRUZXh0Q2h1bmtzKHN0YXJ0PSVwKVxuIiwgc3RhcnQpOwor
I2VuZGlmCit9CisKK3ZvaWQgU1ZHVGV4dENodW5rTGF5b3V0SW5mbzo6bGF5b3V0VGV4dENodW5r
cygpCit7CisgICAgVmVjdG9yPFNWR1RleHRDaHVuaz46Oml0ZXJhdG9yIGl0ID0gbV9zdmdUZXh0
Q2h1bmtzLmJlZ2luKCk7CisgICAgVmVjdG9yPFNWR1RleHRDaHVuaz46Oml0ZXJhdG9yIGVuZCA9
IG1fc3ZnVGV4dENodW5rcy5lbmQoKTsKKworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgU1ZHVGV4dENodW5rJiBjaHVuayA9ICppdDsKKworI2lmIERFQlVHX0NIVU5LX0JV
SUxESU5HID4gMAorICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkhhbmRs
ZSBURVhUIENIVU5LISBhbmNob3I9JWksIHRleHRMZW5ndGg9JWYsIGxlbmd0aEFkanVzdD0laSwg
aXNWZXJ0aWNhbFRleHQ9JWksIGlzVGV4dFBhdGg9JWkgc3RhcnQ9JXAsIGVuZD0lcCAtPiBkaXN0
OiAlaVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKGludCkgY2h1bmsuYW5jaG9yLCBjaHVuay50
ZXh0TGVuZ3RoLCAoaW50KSBjaHVuay5sZW5ndGhBZGp1c3QsIChpbnQpIGNodW5rLmlzVmVydGlj
YWxUZXh0LAorICAgICAgICAgICAgICAgICAgICAoaW50KSBjaHVuay5pc1RleHRQYXRoLCBjaHVu
ay5zdGFydCwgY2h1bmsuZW5kLCAodW5zaWduZWQgaW50KSAoY2h1bmsuZW5kIC0gY2h1bmsuc3Rh
cnQpKTsKKworICAgICAgICAgICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6
aXRlcmF0b3IgYm94SXQgPSBjaHVuay5ib3hlcy5iZWdpbigpOworICAgICAgICAgICAgVmVjdG9y
PFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6aXRlcmF0b3IgYm94RW5kID0gY2h1bmsuYm94
ZXMuZW5kKCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpID0gMDsKKyAgICAgICAgICAg
IGZvciAoOyBib3hJdCAhPSBib3hFbmQ7ICsrYm94SXQpIHsKKyAgICAgICAgICAgICAgICBTVkdJ
bmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94SXQ7CisgICAgICAgICAgICAgICAg
KytpOworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IFJBTkdFICVpIFNUQVJU
T0ZGU0VUOiAlaSwgRU5ET0ZGU0VUOiAlaSwgQk9YOiAlcFxuIiwgaSwgcmFuZ2Uuc3RhcnRPZmZz
ZXQsIHJhbmdlLmVuZE9mZnNldCwgcmFuZ2UuYm94KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorI2VuZGlmCisKKyAgICAgICAgaWYgKGNodW5rLmlzVGV4dFBhdGgpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAvLyB0ZXh0LXBhdGggJiB0ZXh0TGVuZ3RoLCB3aXRoIGxlbmd0
aEFkanVzdD0ic3BhY2luZyIgaXMgYWxyZWFkeSBoYW5kbGVkIGZvciB0ZXh0UGF0aCBsYXlvdXRz
LgorICAgICAgICBhcHBseVRleHRMZW5ndGhDb3JyZWN0aW9uVG9UZXh0Q2h1bmsoY2h1bmspOwor
IAorICAgICAgICAvLyB0ZXh0LWFuY2hvciBpcyBhbHJlYWR5IGhhbmRsZWQgZm9yIHRleHRQYXRo
IGxheW91dHMuCisgICAgICAgIGFwcGx5VGV4dEFuY2hvclRvVGV4dENodW5rKGNodW5rKTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcp
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0UXVlcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRRdWVyeS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9TVkdUZXh0UXVlcnkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2
OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNWR1RleHRRdWVyeS5oIgorCisvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBk
ZWFjdGl2YXRlZCwgdW50aWwgdGhlIFNWRyBUZXh0IHJld3JpdGUgcGF0Y2ggbGFuZHMuCisjaWYg
RU5BQkxFKFNWRykgJiYgMAorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUg
IklubGluZUZsb3dCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJl
bmRlcklubGluZS5oIgorI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJW
aXNpYmxlUG9zaXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBCYXNlIHN0cnVj
dHVyZSBmb3IgY2FsbGJhY2sgdXNlciBkYXRhCitzdHJ1Y3QgU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsK
KyAgICBEYXRhKCkKKyAgICAgICAgOiBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnMoMCkKKyAgICB7
CisgICAgfQorCisgICAgdW5zaWduZWQgcHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJzOworfTsKKwor
c3RhdGljIGlubGluZSBJbmxpbmVGbG93Qm94KiBmbG93Qm94Rm9yUmVuZGVyZXIoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKK3sKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmIChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpKSB7CisgICAgICAgIC8vIElmIHdl
J3JlIGdpdmVuIGEgYmxvY2sgZWxlbWVudCwgaXQgaGFzIHRvIGJlIGEgUmVuZGVyU1ZHVGV4dC4K
KyAgICAgICAgQVNTRVJUKHJlbmRlcmVyLT5pc1NWR1RleHQoKSk7CisgICAgICAgIFJlbmRlckJs
b2NrKiByZW5kZXJCbG9jayA9IHRvUmVuZGVyQmxvY2socmVuZGVyZXIpOworCisgICAgICAgIC8v
IFJlbmRlclNWR1RleHQgb25seSBldmVyIGNvbnRhaW5zIGEgc2luZ2xlIGxpbmUgYm94LgorICAg
ICAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gcmVuZGVyQmxvY2stPmZpcnN0TGluZUJveCgp
OworICAgICAgICBBU1NFUlQoZmxvd0JveCA9PSByZW5kZXJCbG9jay0+bGFzdExpbmVCb3goKSk7
CisgICAgICAgIHJldHVybiBmbG93Qm94OworICAgIH0KKworICAgIGlmIChyZW5kZXJlci0+aXNS
ZW5kZXJJbmxpbmUoKSkgeworICAgICAgICAvLyBXZSdyZSBnaXZlbiBhIFJlbmRlclNWR0lubGlu
ZSBvciBvYmplY3RzIHRoYXQgZGVyaXZlIGZyb20gaXQgKFJlbmRlclNWR1RTcGFuIC8gUmVuZGVy
U1ZHVGV4dFBhdGgpCisgICAgICAgIFJlbmRlcklubGluZSogcmVuZGVySW5saW5lID0gdG9SZW5k
ZXJJbmxpbmUocmVuZGVyZXIpOworCisgICAgICAgIC8vIFJlbmRlclNWR0lubGluZSBvbmx5IGV2
ZXIgY29udGFpbnMgYSBzaW5nbGUgbGluZSBib3guCisgICAgICAgIElubGluZUZsb3dCb3gqIGZs
b3dCb3ggPSByZW5kZXJJbmxpbmUtPmZpcnN0TGluZUJveCgpOworICAgICAgICBBU1NFUlQoZmxv
d0JveCA9PSByZW5kZXJJbmxpbmUtPmxhc3RMaW5lQm94KCkpOworICAgICAgICByZXR1cm4gZmxv
d0JveDsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworc3RhdGljIGlubGluZSBmbG9hdCBtYXBMZW5ndGhUaHJvdWdoQ2h1bmtUcmFuc2Zvcm1h
dGlvbihjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBib29sIGlzVmVydGljYWxUZXh0
LCBmbG9hdCBsZW5ndGgpCit7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0g
PSB0ZXh0Qm94LT5jaHVua1RyYW5zZm9ybWF0aW9uKCk7CisgICAgaWYgKHRyYW5zZm9ybS5pc0lk
ZW50aXR5KCkpCisgICAgICAgIHJldHVybiBsZW5ndGg7CisgICAgICAgIAorICAgIHJldHVybiBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHN0YXRpY19jYXN0PGRvdWJsZT4obGVuZ3RoKSAqIChpc1Zl
cnRpY2FsVGV4dCA/IHRyYW5zZm9ybS5kKCkgOiB0cmFuc2Zvcm0uYSgpKSk7Cit9CisKK1NWR1Rl
eHRRdWVyeTo6U1ZHVGV4dFF1ZXJ5KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgY29s
bGVjdFRleHRCb3hlc0luRmxvd0JveChmbG93Qm94Rm9yUmVuZGVyZXIocmVuZGVyZXIpKTsKK30K
Kwordm9pZCBTVkdUZXh0UXVlcnk6OmNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3goSW5saW5lRmxv
d0JveCogZmxvd0JveCkKK3sKKyAgICBpZiAoIWZsb3dCb3gpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZsb3dCb3gtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzSW5s
aW5lRmxvd0JveCgpKSB7CisgICAgICAgICAgICAvLyBTa2lwIGdlbmVyYXRlZCBjb250ZW50Lgor
ICAgICAgICAgICAgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS0+bm9kZSgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjb2xsZWN0VGV4dEJveGVzSW5GbG93Qm94KHN0
YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjaGlsZCkpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dEJveCgp
KTsKKyAgICAgICAgbV90ZXh0Qm94ZXMuYXBwZW5kKHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRC
b3gqPihjaGlsZCkpOworICAgIH0KK30KKworYm9vbCBTVkdUZXh0UXVlcnk6OmV4ZWN1dGVRdWVy
eShEYXRhKiBxdWVyeURhdGEsIFByb2Nlc3NUZXh0Q2h1bmtQYXJ0Q2FsbGJhY2sgY2h1bmtQYXJ0
Q2FsbGJhY2spIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3RleHRCb3hlcy5pc0VtcHR5KCkpOwor
ICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKKworICAgIC8vIExvb3Agb3ZlciBhbGwgdGV4dCBi
b3hlcworICAgIGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fdGV4dEJveGVzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFNWR0lubGluZVRleHRC
b3gqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RleHRCb3hlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgY29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9ICppdDsK
KyAgICAgICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+JiBwYXJ0cyA9IHRleHRCb3gt
PnN2Z1RleHRDaHVua1BhcnRzKCk7CisKKyAgICAgICAgaW50IHByb2Nlc3NlZENoYXJhY3RlcnMg
PSAwOworCisgICAgICAgIC8vIExvb3Agb3ZlciBhbGwgdGV4dCBjaHVuayBwYXJ0cyBpbiB0aGlz
IHRleHQgYm94LCBmaXJpbmcgYSBjYWxsYmFjayBmb3IgZWFjaCBjaHVuayBwYXJ0LgorICAgICAg
ICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIHBhcnRFbmQg
PSBwYXJ0cy5lbmQoKTsKKyAgICAgICAgZm9yIChWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNv
bnN0X2l0ZXJhdG9yIHBhcnRJdCA9IHBhcnRzLmJlZ2luKCk7IHBhcnRJdCAhPSBwYXJ0RW5kOyAr
K3BhcnRJdCkgeworICAgICAgICAgICAgaWYgKCh0aGlzLT4qY2h1bmtQYXJ0Q2FsbGJhY2spKHF1
ZXJ5RGF0YSwgdGV4dEJveCwgKnBhcnRJdCkpIHsKKyAgICAgICAgICAgICAgICBmaW5pc2hlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHByb2Nlc3NlZENoYXJhY3RlcnMgKz0gcGFydEl0LT5sZW5ndGg7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZmluaXNoZWQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBxdWVy
eURhdGEtPnByb2Nlc3NlZENodW5rQ2hhcmFjdGVycyArPSBwcm9jZXNzZWRDaGFyYWN0ZXJzOwor
ICAgIH0KKworICAgIHJldHVybiBmaW5pc2hlZDsKK30KKworYm9vbCBTVkdUZXh0UXVlcnk6Om1h
cFN0YXJ0QW5kTGVuZ3RoSW50b0NodW5rUGFydENvb3JkaW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwg
Y29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYg
cGFydCwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdAoreworICAg
IC8vIFJldXNlIHRoZSBzYW1lIGxvZ2ljIHVzZWQgZm9yIHRleHQgc2VsZWN0aW9uICYgcGFpbnRp
bmcsIHRvIG1hcCBvdXIgcXVlcnkgc3RhcnQvbGVuZ3RoIGludG8gc3RhcnQvZW5kUG9zaXRpb25z
IG9mIHRoZSBjdXJyZW50IHRleHQgY2h1bmsgcGFydC4KKyAgICBzdGFydFBvc2l0aW9uIC09IHF1
ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJzOworICAgIGVuZFBvc2l0aW9uIC09IHF1
ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJzOworICAgIHRleHRCb3gtPm1hcFN0YXJ0
RW5kUG9zaXRpb25zSW50b0NodW5rUGFydENvb3JkaW5hdGVzKHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uLCBwYXJ0KTsKKworICAgIC8vIElmIHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbiwg
dGhlbiB0aGUgcG9zaXRpb24gd2UncmUgc3VwcG9zZWQgdG8gbWVhc3VyZSBsaWVzIGluIHRoaXMg
Y2h1bmsgcGFydC4KKyAgICByZXR1cm4gc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uOworfQor
CitmbG9hdCBTVkdUZXh0UXVlcnk6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTVkdJbmxp
bmVUZXh0Qm94KiB0ZXh0Qm94LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgbGVuZ3RoKSBjb25zdAoreworICAgIC8vIEZJWE1F
OiBWZXJ0aWNhbCB3cml0aW5nIG1vZGUgbmVlZHMgdG8gYmUgaGFuZGxlZCBtb3JlIGFjY3VyYXRl
LgorICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgcmV0dXJuIGxlbmd0aCAqIHN0eWxl
LT5mb250KCkuaGVpZ2h0KCk7CisKKyAgICBjb25zdCBVQ2hhciogc3RhcnRDaGFyYWN0ZXIgPSB0
ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+Y2hhcmFjdGVycygpICsgdGV4dEJveC0+c3RhcnQoKSAr
IHN0YXJ0UG9zaXRpb247CisgICAgcmV0dXJuIHN0eWxlLT5mb250KCkuZmxvYXRXaWR0aChzdmdU
ZXh0UnVuRm9ySW5saW5lVGV4dEJveChzdGFydENoYXJhY3RlciwgbGVuZ3RoLCBzdHlsZSwgdGV4
dEJveCkpOworfQorCisvLyBudW1iZXJPZkNoYXJhY3RlcnMoKSBpbXBsZW1lbnRhdGlvbgorc3Ry
dWN0IE51bWJlck9mQ2hhcmFjdGVyc0RhdGEgOiBTVkdUZXh0UXVlcnk6OkRhdGEgeworICAgIE51
bWJlck9mQ2hhcmFjdGVyc0RhdGEoKQorICAgICAgICA6IGNoYXJhY3RlcnMoMCkKKyAgICB7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgY2hhcmFjdGVyczsKK307CisKK2Jvb2wgU1ZHVGV4dFF1ZXJ5
OjpudW1iZXJPZkNoYXJhY3RlcnNDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lu
bGluZVRleHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSBjb25zdAoreworICAg
IE51bWJlck9mQ2hhcmFjdGVyc0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxOdW1iZXJPZkNoYXJh
Y3RlcnNEYXRhKj4ocXVlcnlEYXRhKTsKKyAgICBkYXRhLT5jaGFyYWN0ZXJzICs9IHBhcnQubGVu
Z3RoOworICAgIHJldHVybiBmYWxzZTsKK30KKwordW5zaWduZWQgU1ZHVGV4dFF1ZXJ5OjpudW1i
ZXJPZkNoYXJhY3RlcnMoKSBjb25zdAoreworICAgIGlmIChtX3RleHRCb3hlcy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgTnVtYmVyT2ZDaGFyYWN0ZXJzRGF0YSBkYXRhOwor
ICAgIGV4ZWN1dGVRdWVyeSgmZGF0YSwgJlNWR1RleHRRdWVyeTo6bnVtYmVyT2ZDaGFyYWN0ZXJz
Q2FsbGJhY2spOworICAgIHJldHVybiBkYXRhLmNoYXJhY3RlcnM7Cit9CisKKy8vIHRleHRMZW5n
dGgoKSBpbXBsZW1lbnRhdGlvbgorc3RydWN0IFRleHRMZW5ndGhEYXRhIDogU1ZHVGV4dFF1ZXJ5
OjpEYXRhIHsKKyAgICBUZXh0TGVuZ3RoRGF0YSgpCisgICAgICAgIDogdGV4dExlbmd0aCgwLjBm
KQorICAgIHsKKyAgICB9CisKKyAgICBmbG9hdCB0ZXh0TGVuZ3RoOworfTsKKworYm9vbCBTVkdU
ZXh0UXVlcnk6OnRleHRMZW5ndGhDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lu
bGluZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0
Cit7CisgICAgVGV4dExlbmd0aERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxUZXh0TGVuZ3RoRGF0
YSo+KHF1ZXJ5RGF0YSk7CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT50ZXh0
UmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgYm9vbCBpc1Zl
cnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShzdHlsZS0+c3ZnU3R5bGUoKSk7Cisg
ICAgZmxvYXQgcGFydExlbmd0aCA9IGlzVmVydGljYWxUZXh0ID8gcGFydC5oZWlnaHQgOiBwYXJ0
LndpZHRoOworCisgICAgZGF0YS0+dGV4dExlbmd0aCArPSBtYXBMZW5ndGhUaHJvdWdoQ2h1bmtU
cmFuc2Zvcm1hdGlvbih0ZXh0Qm94LCBpc1ZlcnRpY2FsVGV4dCwgcGFydExlbmd0aCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBTVkdUZXh0UXVlcnk6OnRleHRMZW5ndGgoKSBjb25z
dAoreworICAgIGlmIChtX3RleHRCb3hlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwLjBm
OworCisgICAgVGV4dExlbmd0aERhdGEgZGF0YTsKKyAgICBleGVjdXRlUXVlcnkoJmRhdGEsICZT
VkdUZXh0UXVlcnk6OnRleHRMZW5ndGhDYWxsYmFjayk7CisgICAgcmV0dXJuIGRhdGEudGV4dExl
bmd0aDsKK30KKworLy8gc3ViU3RyaW5nTGVuZ3RoKCkgaW1wbGVtZW50YXRpb24KK3N0cnVjdCBT
dWJTdHJpbmdMZW5ndGhEYXRhIDogU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKKyAgICBTdWJTdHJpbmdM
ZW5ndGhEYXRhKHVuc2lnbmVkIHF1ZXJ5U3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgcXVlcnlMZW5n
dGgpCisgICAgICAgIDogc3RhcnRQb3NpdGlvbihxdWVyeVN0YXJ0UG9zaXRpb24pCisgICAgICAg
ICwgbGVuZ3RoKHF1ZXJ5TGVuZ3RoKQorICAgICAgICAsIHN1YlN0cmluZ0xlbmd0aCgwLjBmKQor
ICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uOworICAgIHVuc2lnbmVk
IGxlbmd0aDsKKworICAgIGZsb2F0IHN1YlN0cmluZ0xlbmd0aDsKK307CisKK2Jvb2wgU1ZHVGV4
dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNW
R0lubGluZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNv
bnN0Cit7CisgICAgU3ViU3RyaW5nTGVuZ3RoRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFN1YlN0
cmluZ0xlbmd0aERhdGEqPihxdWVyeURhdGEpOworCisgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBk
YXRhLT5zdGFydFBvc2l0aW9uOworICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24g
KyBkYXRhLT5sZW5ndGg7CisgICAgaWYgKCFtYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRD
b29yZGluYXRlcyhxdWVyeURhdGEsIHRleHRCb3gsIHBhcnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxlKTsK
KworICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoc3R5bGUt
PnN2Z1N0eWxlKCkpOworICAgIGZsb2F0IHBhcnRMZW5ndGggPSBtZWFzdXJlQ2hhcmFjdGVyUmFu
Z2UodGV4dEJveCwgc3R5bGUsIGlzVmVydGljYWxXcml0aW5nTW9kZShzdHlsZS0+c3ZnU3R5bGUo
KSksIHBhcnQub2Zmc2V0ICsgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0
aW9uKTsKKworICAgIGRhdGEtPnN1YlN0cmluZ0xlbmd0aCArPSBtYXBMZW5ndGhUaHJvdWdoQ2h1
bmtUcmFuc2Zvcm1hdGlvbih0ZXh0Qm94LCBpc1ZlcnRpY2FsVGV4dCwgcGFydExlbmd0aCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0
aCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Cit7CisgICAg
aWYgKG1fdGV4dEJveGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBT
dWJTdHJpbmdMZW5ndGhEYXRhIGRhdGEoc3RhcnRQb3NpdGlvbiwgbGVuZ3RoKTsKKyAgICBleGVj
dXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKTsK
KyAgICByZXR1cm4gZGF0YS5zdWJTdHJpbmdMZW5ndGg7Cit9CisKKy8vIHN0YXJ0UG9zaXRpb25P
ZkNoYXJhY3RlcigpIGltcGxlbWVudGF0aW9uCitzdHJ1Y3QgU3RhcnRQb3NpdGlvbk9mQ2hhcmFj
dGVyRGF0YSA6IFNWR1RleHRRdWVyeTo6RGF0YSB7CisgICAgU3RhcnRQb3NpdGlvbk9mQ2hhcmFj
dGVyRGF0YSh1bnNpZ25lZCBxdWVyeVBvc2l0aW9uKQorICAgICAgICA6IHBvc2l0aW9uKHF1ZXJ5
UG9zaXRpb24pCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIHBvc2l0aW9uOworICAgIEZs
b2F0UG9pbnQgc3RhcnRQb3NpdGlvbjsKK307CisKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBv
c2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGlu
ZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Cit7
CisgICAgU3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFN0
YXJ0UG9zaXRpb25PZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOworCisgICAgaW50IHN0YXJ0
UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBv
c2l0aW9uICsgMTsKKyAgICBpZiAoIW1hcFN0YXJ0QW5kTGVuZ3RoSW50b0NodW5rUGFydENvb3Jk
aW5hdGVzKHF1ZXJ5RGF0YSwgdGV4dEJveCwgcGFydCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBTVkdDaGFyJiBjaGFyYWN0
ZXIgPSAqKHBhcnQuZmlyc3RDaGFyYWN0ZXIgKyBzdGFydFBvc2l0aW9uKTsKKyAgICBkYXRhLT5z
dGFydFBvc2l0aW9uID0gdGV4dEJveC0+Y2h1bmtUcmFuc2Zvcm1hdGlvbigpLm1hcFBvaW50KEZs
b2F0UG9pbnQoY2hhcmFjdGVyLngsIGNoYXJhY3Rlci55KSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0Zsb2F0UG9pbnQgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5z
aWduZWQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1fdGV4dEJveGVzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKworICAgIFN0YXJ0UG9zaXRpb25PZkNoYXJh
Y3RlckRhdGEgZGF0YShwb3NpdGlvbik7CisgICAgZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4
dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk7CisgICAgcmV0dXJuIGRh
dGEuc3RhcnRQb3NpdGlvbjsKK30KKworLy8gZW5kUG9zaXRpb25PZkNoYXJhY3RlcigpIGltcGxl
bWVudGF0aW9uCitzdHJ1Y3QgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEgOiBTVkdUZXh0UXVl
cnk6OkRhdGEgeworICAgIEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKHVuc2lnbmVkIHF1ZXJ5
UG9zaXRpb24pCisgICAgICAgIDogcG9zaXRpb24ocXVlcnlQb3NpdGlvbikKKyAgICB7CisgICAg
fQorCisgICAgdW5zaWduZWQgcG9zaXRpb247CisgICAgRmxvYXRQb2ludCBlbmRQb3NpdGlvbjsK
K307CisKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2so
RGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBjb25zdCBT
VkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSBjb25zdAoreworICAgIEVuZFBvc2l0aW9uT2ZDaGFyYWN0
ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEqPihx
dWVyeURhdGEpOworCisgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAg
ICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKKyAgICBpZiAoIW1hcFN0YXJ0
QW5kTGVuZ3RoSW50b0NodW5rUGFydENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgdGV4dEJveCwgcGFy
dCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBjb25zdCBTVkdDaGFyJiBjaGFyYWN0ZXIgPSAqKHBhcnQuZmlyc3RDaGFyYWN0ZXIgKyBz
dGFydFBvc2l0aW9uKTsKKyAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoY2hhcmFj
dGVyLngsIGNoYXJhY3Rlci55KTsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gt
PnRleHRSZW5kZXJlcigpLT5zdHlsZSgpOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBib29s
IGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN0eWxlLT5zdmdTdHlsZSgp
KTsKKyAgICBmbG9hdCBnbHlwaEFkdmFuY2UgPSBtZWFzdXJlQ2hhcmFjdGVyUmFuZ2UodGV4dEJv
eCwgc3R5bGUsIGlzVmVydGljYWxUZXh0LCBwYXJ0Lm9mZnNldCArIHN0YXJ0UG9zaXRpb24sIDEp
OworCisgICAgaWYgKGlzVmVydGljYWxUZXh0KQorICAgICAgICBkYXRhLT5lbmRQb3NpdGlvbi5t
b3ZlKDAuMGYsIGdseXBoQWR2YW5jZSk7CisgICAgZWxzZQorICAgICAgICBkYXRhLT5lbmRQb3Np
dGlvbi5tb3ZlKGdseXBoQWR2YW5jZSwgMC4wZik7CisKKyAgICBkYXRhLT5lbmRQb3NpdGlvbiA9
IHRleHRCb3gtPmNodW5rVHJhbnNmb3JtYXRpb24oKS5tYXBQb2ludChkYXRhLT5lbmRQb3NpdGlv
bik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0Zsb2F0UG9pbnQgU1ZHVGV4dFF1ZXJ5OjplbmRQ
b3NpdGlvbk9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICht
X3RleHRCb3hlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisKKyAg
ICBFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSBkYXRhKHBvc2l0aW9uKTsKKyAgICBleGVjdXRl
UXVlcnkoJmRhdGEsICZTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFj
ayk7CisgICAgcmV0dXJuIGRhdGEuZW5kUG9zaXRpb247Cit9CisKKy8vIHJvdGF0aW9uT2ZDaGFy
YWN0ZXIoKSBpbXBsZW1lbnRhdGlvbgorc3RydWN0IFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhIDog
U1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKKyAgICBSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSh1bnNpZ25l
ZCBxdWVyeVBvc2l0aW9uKQorICAgICAgICA6IHBvc2l0aW9uKHF1ZXJ5UG9zaXRpb24pCisgICAg
ICAgICwgcm90YXRpb24oMC4wZikKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgcG9zaXRp
b247CisgICAgZmxvYXQgcm90YXRpb247Cit9OworCitib29sIFNWR1RleHRRdWVyeTo6cm90YXRp
b25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHSW5saW5lVGV4
dEJveCogdGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkgY29uc3QKK3sKKyAg
ICBSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFJvdGF0aW9uT2ZD
aGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKKworICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0
YS0+cG9zaXRpb247CisgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7Cisg
ICAgaWYgKCFtYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRDb29yZGluYXRlcyhxdWVyeURh
dGEsIHRleHRCb3gsIHBhcnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU1ZHQ2hhciYgY2hhcmFjdGVyID0gKihwYXJ0LmZp
cnN0Q2hhcmFjdGVyICsgc3RhcnRQb3NpdGlvbik7CisgICAgZGF0YS0+cm90YXRpb24gPSBjaGFy
YWN0ZXIuYW5nbGU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Zsb2F0IFNWR1RleHRRdWVyeTo6
cm90YXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAo
bV90ZXh0Qm94ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIFJvdGF0
aW9uT2ZDaGFyYWN0ZXJEYXRhIGRhdGEocG9zaXRpb24pOworICAgIGV4ZWN1dGVRdWVyeSgmZGF0
YSwgJlNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKTsKKyAgICByZXR1
cm4gZGF0YS5yb3RhdGlvbjsKK30KKworLy8gZXh0ZW50T2ZDaGFyYWN0ZXIoKSBpbXBsZW1lbnRh
dGlvbgorc3RydWN0IEV4dGVudE9mQ2hhcmFjdGVyRGF0YSA6IFNWR1RleHRRdWVyeTo6RGF0YSB7
CisgICAgRXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKHVuc2lnbmVkIHF1ZXJ5UG9zaXRpb24pCisgICAg
ICAgIDogcG9zaXRpb24ocXVlcnlQb3NpdGlvbikKKyAgICB7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgcG9zaXRpb247CisgICAgRmxvYXRSZWN0IGV4dGVudDsKK307CisKK2Jvb2wgU1ZHVGV4dFF1
ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZH
SW5saW5lVGV4dEJveCogdGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkgY29u
c3QKK3sKKyAgICBFeHRlbnRPZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFeHRl
bnRPZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOworCisgICAgaW50IHN0YXJ0UG9zaXRpb24g
PSBkYXRhLT5wb3NpdGlvbjsKKyAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsg
MTsKKyAgICBpZiAoIW1hcFN0YXJ0QW5kTGVuZ3RoSW50b0NodW5rUGFydENvb3JkaW5hdGVzKHF1
ZXJ5RGF0YSwgdGV4dEJveCwgcGFydCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+
dGV4dFJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIGNvbnN0
IFNWR0NoYXImIGNoYXJhY3RlciA9ICoocGFydC5maXJzdENoYXJhY3RlciArIHN0YXJ0UG9zaXRp
b24pOworICAgIGRhdGEtPmV4dGVudCA9IHRleHRCb3gtPmNhbGN1bGF0ZUdseXBoQm91bmRhcmll
cyhzdHlsZSwgcGFydC5vZmZzZXQgKyBzdGFydFBvc2l0aW9uLCBjaGFyYWN0ZXIpOworICAgIHJl
dHVybiB0cnVlOworfQorCitGbG9hdFJlY3QgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3Rl
cih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAobV90ZXh0Qm94ZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBFeHRlbnRPZkNoYXJhY3Rl
ckRhdGEgZGF0YShwb3NpdGlvbik7CisgICAgZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1
ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNhbGxiYWNrKTsKKyAgICByZXR1cm4gZGF0YS5leHRlbnQ7
Cit9CisKKy8vIGNoYXJhY3Rlck51bWJlckF0UG9zaXRpb24oKSBpbXBsZW1lbnRhdGlvbgorc3Ry
dWN0IENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhIDogU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsK
KyAgICBDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YShjb25zdCBGbG9hdFBvaW50JiBxdWVy
eVBvc2l0aW9uKQorICAgICAgICA6IGNoYXJhY3Rlck51bWJlcigwKQorICAgICAgICAsIHBvc2l0
aW9uKHF1ZXJ5UG9zaXRpb24pCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXJhY3Rl
ck51bWJlcjsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uOworfTsKKworYm9vbCBTVkdUZXh0UXVl
cnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNv
bnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBh
cnQpIGNvbnN0Cit7CisgICAgQ2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEqIGRhdGEgPSBz
dGF0aWNfY2FzdDxDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YSo+KHF1ZXJ5RGF0YSk7CisK
KyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+c3R5bGUo
KTsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0Lmxl
bmd0aDsgKytpKSB7CisgICAgICAgIEZsb2F0UmVjdCBleHRlbnQodGV4dEJveC0+Y2FsY3VsYXRl
R2x5cGhCb3VuZGFyaWVzKHN0eWxlLCBwYXJ0Lm9mZnNldCArIGksICoocGFydC5maXJzdENoYXJh
Y3RlciArIGkpKSk7CisgICAgICAgIGlmIChleHRlbnQuY29udGFpbnMoZGF0YS0+cG9zaXRpb24p
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgKytkYXRhLT5jaGFyYWN0ZXJO
dW1iZXI7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgU1ZHVGV4dFF1ZXJ5
OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBj
b25zdAoreworICAgIGlmIChtX3RleHRCb3hlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAt
MTsKKworICAgIENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhIGRhdGEocG9zaXRpb24pOwor
ICAgIGlmICghZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1i
ZXJBdFBvc2l0aW9uQ2FsbGJhY2spKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4g
ZGF0YS5jaGFyYWN0ZXJOdW1iZXI7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdUZXh0UXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdUZXh0UXVlcnkuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRR
dWVyeS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIFNWR1RleHRRdWVyeV9oCisjZGVmaW5lIFNWR1RleHRRdWVyeV9oCisKKy8v
IEZJWE1FOiBUaGlzIGNvZGUgaXMgY3VycmVudGx5IGRlYWN0aXZhdGVkLCB1bnRpbCB0aGUgU1ZH
IFRleHQgcmV3cml0ZSBwYXRjaCBsYW5kcy4KKyNpZiBFTkFCTEUoU1ZHKSAmJiAwCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIElubGluZUZsb3dCb3g7CitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFz
cyBSZW5kZXJTdHlsZTsKK2NsYXNzIFNWR0lubGluZVRleHRCb3g7CitzdHJ1Y3QgU1ZHVGV4dENo
dW5rUGFydDsKKworY2xhc3MgU1ZHVGV4dFF1ZXJ5IHsKK3B1YmxpYzoKKyAgICBTVkdUZXh0UXVl
cnkoUmVuZGVyT2JqZWN0Kik7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnMoKSBj
b25zdDsKKyAgICBmbG9hdCB0ZXh0TGVuZ3RoKCkgY29uc3Q7CisgICAgZmxvYXQgc3ViU3RyaW5n
TGVuZ3RoKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Cisg
ICAgRmxvYXRQb2ludCBzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24p
IGNvbnN0OworICAgIEZsb2F0UG9pbnQgZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBw
b3NpdGlvbikgY29uc3Q7CisgICAgZmxvYXQgcm90YXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBw
b3NpdGlvbikgY29uc3Q7CisgICAgRmxvYXRSZWN0IGV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVk
IHBvc2l0aW9uKSBjb25zdDsKKyAgICBpbnQgY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisKKyAgICAvLyBQdWJsaWMgaGVscGVyIHN0cnVjdC4gUHJp
dmF0ZSBjbGFzc2VzIGluIFNWR1RleHRRdWVyeSBpbmhlcml0IGZyb20gaXQuCisgICAgc3RydWN0
IERhdGE7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBib29sIChTVkdUZXh0UXVlcnk6OipQcm9j
ZXNzVGV4dENodW5rUGFydENhbGxiYWNrKShEYXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCos
IGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25zdDsKKyAgICBib29sIGV4ZWN1dGVRdWVyeShE
YXRhKiwgUHJvY2Vzc1RleHRDaHVua1BhcnRDYWxsYmFjaykgY29uc3Q7CisKKyAgICB2b2lkIGNv
bGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3goSW5saW5lRmxvd0JveCopOworICAgIGZsb2F0IG1lYXN1
cmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgUmVuZGVyU3R5bGUqLCBi
b29sIGlzVmVydGljYWxUZXh0LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGxlbmd0aCkgY29uc3Q7
CisgICAgYm9vbCBtYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRDb29yZGluYXRlcyhEYXRh
KiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmLCBpbnQm
IHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAg
IGJvb2wgbnVtYmVyT2ZDaGFyYWN0ZXJzQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRl
eHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JikgY29uc3Q7CisgICAgYm9vbCB0ZXh0TGVu
Z3RoQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBjb25zdCBTVkdUZXh0
Q2h1bmtQYXJ0JikgY29uc3Q7CisgICAgYm9vbCBzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayhEYXRh
KiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25z
dDsKKyAgICBib29sIHN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqLCBjb25z
dCBTVkdJbmxpbmVUZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OworICAg
IGJvb2wgZW5kUG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdJbmxp
bmVUZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OworICAgIGJvb2wgcm90
YXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94Kiwg
Y29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OworICAgIGJvb2wgZXh0ZW50T2ZDaGFyYWN0
ZXJDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRD
aHVua1BhcnQmKSBjb25zdDsKKyAgICBib29sIGNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxs
YmFjayhEYXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1Bh
cnQmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+IG1f
dGV4dEJveGVzOworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58892</attachid>
            <date>2010-06-16 07:17:19 -0700</date>
            <delta_ts>2010-06-16 08:08:41 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>SVGTextPrepare.patch</filename>
            <type>text/plain</type>
            <size>52349</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTI1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzEgQEAKKzIwMTAtMDYtMTYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgorCisgICAg
ICAgIEFkZCBuZXcgZmlsZXMsIG5lZWRlZCBpbiBTVkcgVGV4dCByZXdyaXRlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDY3NgorCisgICAgICAgIExh
bmQgU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgYW5kIFNWR1RleHRRdWVyeS4oY3BwfGgpLCBi
b3RoIHdpdGggYW4gIiNpZiAwIiBvbiB0b3AsIGFzIHRoZXkgd2lsbCBiZSBuZWVkZWQKKyAgICAg
ICAgaW4gYSBsYXRlciBwYXRjaCwgY29tcGxldGluZyB0aGUgU1ZHIFRleHQgcmV3cml0ZSwgdGhh
dCB3aWxsIGVuYWJsZSB0aGVtLgorCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFueSBjb2RlIGZv
ciBub3csIGl0IHNob3VsZCBqdXN0IHJlZHVjZSB0aGUgcmV2aWV3IGFtb3VudC4KKworICAgICAg
ICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
cHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
U1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3Vt
bXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRleHRDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpjdW1t
dWxhdGVkV2lkdGhPZlRleHRDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpjdW1tdWxhdGVkSGVp
Z2h0T2ZUZXh0Q2h1bmspOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlVGV4dEFuY2hvclNo
aWZ0Rm9yVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5VGV4dEFuY2hvclRvVGV4
dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVRleHRMZW5ndGhDb3JyZWN0aW9u
Rm9yVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5VGV4dExlbmd0aENvcnJlY3Rp
b25Ub1RleHRDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtMYXlvdXRJbmZv
OjpzdGFydFRleHRDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtMYXlvdXRJ
bmZvOjpjbG9zZVRleHRDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bmtMYXlv
dXRJbmZvOjpidWlsZFRleHRDaHVua3MpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENodW5r
TGF5b3V0SW5mbzo6cmVjdXJzaXZlQnVpbGRUZXh0Q2h1bmtzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRDaHVua0xheW91dEluZm86OmxheW91dFRleHRDaHVua3MpOgorICAgICAgICAqIHJl
bmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmg6IEFkZCBtaXNzaW5nIGluY2x1ZGUsIG90
aGVyd2hpc2UgY29tcGlsaW5nIFNWR1RleHRDaHVua0xheW91dEluZm8uY3BwIHdpbGwgZmFpbC4K
KyAgICAgICAgKiByZW5kZXJpbmcvU1ZHVGV4dFF1ZXJ5LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdUZXh0UXVlcnk6OkRhdGE6OkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Zmxv
d0JveEZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcExlbmd0aFRocm91Z2hDaHVu
a1RyYW5zZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6U1ZHVGV4
dFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6Y29sbGVjdFRleHRCb3hl
c0luRmxvd0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmV4ZWN1dGVRdWVy
eSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0QW5kTGVuZ3RoSW50
b0NodW5rUGFydENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6
bWVhc3VyZUNoYXJhY3RlclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWJlck9mQ2hhcmFj
dGVyc0RhdGE6Ok51bWJlck9mQ2hhcmFjdGVyc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dFF1ZXJ5OjpudW1iZXJPZkNoYXJhY3RlcnNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0UXVlcnk6Om51bWJlck9mQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0TGVuZ3RoRGF0YTo6VGV4dExlbmd0aERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dFF1ZXJ5Ojp0ZXh0TGVuZ3RoQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1
ZXJ5Ojp0ZXh0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YlN0cmluZ0xlbmd0aERhdGE6
OlN1YlN0cmluZ0xlbmd0aERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojpz
dWJTdHJpbmdMZW5ndGhDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6
OnN1YlN0cmluZ0xlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdGFydFBvc2l0aW9uT2ZDaGFy
YWN0ZXJEYXRhOjpTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGE6OkVuZFBvc2l0aW9u
T2ZDaGFyYWN0ZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6ZW5kUG9z
aXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVy
eTo6ZW5kUG9zaXRpb25PZkNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSb3RhdGlvbk9m
Q2hhcmFjdGVyRGF0YTo6Um90YXRpb25PZkNoYXJhY3RlckRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlvbk9mQ2hhcmFjdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVudE9mQ2hhcmFjdGVyRGF0YTo6RXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6ZXh0ZW50T2ZDaGFyYWN0ZXJDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhOjpDaGFyYWN0ZXJO
dW1iZXJBdFBvc2l0aW9uRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmNo
YXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmlu
Zy9TVkdUZXh0UXVlcnkuaDogQWRkZWQuCisKIDIwMTAtMDYtMTYgIE5pa29sYXMgWmltbWVybWFu
biAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1
bHplLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5k
cm9pZC5tawkocmV2aXNpb24gNjEyNTMpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcg
Y29weSkKQEAgLTY2OSw3ICs2NjksOSBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNf
RklMRVMpIFwKIAlyZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgXAogCXJlbmRlcmlu
Zy9TVkdSb290SW5saW5lQm94LmNwcCBcCiAJcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50
cy5jcHAgXAotCXJlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcAorCXJlbmRlcmlu
Zy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCBcCisJcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRV
dGlsaXRpZXMuY3BwIFwKKwlyZW5kZXJpbmcvU1ZHVGV4dFF1ZXJ5LmNwcAogZW5kaWYKIAogTE9D
QUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCkluZGV4OiBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDYxMjUzKQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQ5
OCw3ICsxNDk4LDkgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcAogICAgICAgICByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAK
ICAgICAgICAgcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAKKyAgICAgICAgcmVu
ZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uY3BwCiAgICAgICAgIHJlbmRlcmluZy9TVkdU
ZXh0TGF5b3V0VXRpbGl0aWVzLmNwcAorICAgICAgICByZW5kZXJpbmcvU1ZHVGV4dFF1ZXJ5LmNw
cAogICAgICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuY3BwCiAgICAgICAgIHJl
bmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwCiAgICAgICAgIHN2Zy9Db2xvckRp
c3RhbmNlLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2MTI1MykKKysrIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMzMzEsOSArMzMzMSwxMiBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guaCBcCiAJV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCBcCiAJV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggXAorCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1Rl
eHRDaHVua0xheW91dEluZm8uY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtM
YXlvdXRJbmZvLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMu
Y3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmggXAorCVdl
YkNvcmUvcmVuZGVyaW5nL1NWR1RleHRRdWVyeS5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL1NW
R1RleHRRdWVyeS5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5j
cHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmggXAogCVdlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXApJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlz
aW9uIDYxMjUzKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMz
MzAsOSArMzMzMCwxMiBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdSb290SW5saW5lQm94
LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwJywK
ICAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgnLAorICAgICAg
ICAgICAgJ3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uaCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZH
VGV4dFF1ZXJ5LmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1NWR1RleHRRdWVyeS5oJywK
ICAgICAgICAgICAgICdyZW5kZXJpbmcvVGFibGVMYXlvdXQuaCcsCiAgICAgICAgICAgICAncmVu
ZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAnLAogICAgICAgICAgICAgJ3JlbmRl
cmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDYxMjUzKQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTgzOCw2ICsxODM4LDcg
QEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oIFwK
ICAgICByZW5kZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oIFwKICAgICByZW5kZXJpbmcv
U1ZHVGV4dExheW91dFV0aWxpdGllcy5oIFwKKyAgICByZW5kZXJpbmcvU1ZHVGV4dFF1ZXJ5Lmgg
XAogICAgIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCBcCiAgICAgcmVuZGVy
aW5nL1RyYW5zZm9ybVN0YXRlLmggXAogICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuaCBcCkBAIC0yODQ1LDcgKzI4NDYsOSBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZH
PTEpIHsKICAgICAgICAgcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwIFwKICAgICAgICAg
cmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwIFwKICAgICAgICAgcmVuZGVyaW5nL1NWR1No
YWRvd1RyZWVFbGVtZW50cy5jcHAgXAotICAgICAgICByZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0
aWxpdGllcy5jcHAKKyAgICAgICAgcmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uY3Bw
IFwKKyAgICAgICAgcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIFwKKyAgICAg
ICAgcmVuZGVyaW5nL1NWR1RleHRRdWVyeS5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX0pBVkFTQ1JJUFRfREVCVUdHRVI9MSkgewpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiA2MTI1MykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4OTM5LDYgKzI4OTM5LDEwIEBACiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRl
cmluZ1xTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdUZXh0Q2h1bmtMYXlv
dXRJbmZvLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMjg5NTAsNiArMjg5NTQsMTQgQEAK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQorCQkgCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXFNWR1RleHRRdWVyeS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHVGV4dFF1ZXJ5LmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcVGFibGVMYXlvdXQuaCINCiAJCQkJPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MTI1MykKKysrIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw5IEBA
CiAJCTA4NEQyODM0MTEwQTdGQ0IwMDM4MjM5QSAvKiBTVkdBbmltYXRlZFByb3BlcnR5VHJhaXRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODREMjgz
MjExMEE3RkNCMDAzODIzOUEgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRyYWl0cy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4NERCQUExMEVEMzlE
MzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0REJBOUQwRUQzOUQzNTAwMzhDMjI2IC8qIFdNTFZhcmlh
Ymxlcy5jcHAgKi87IH07CiAJCTA4NERCQUEyMEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJs
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NERC
QTlFMEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCAqLzsgfTsKKwkJMDg1M0Q3MzIx
MUM5MTA5MDAwQjJGRDQyIC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1M0Q3MkYxMUM5MTA4RjAwQjJG
RDQyIC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uY3BwICovOyB9OworCQkwODUzRDczMzExQzkx
MDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTNENzMwMTFDOTEwOTAwMEIyRkQ0MiAvKiBTVkdUZXh0
UXVlcnkuY3BwICovOyB9OworCQkwODUzRDczNDExQzkxMDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1
ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODUz
RDczMTExQzkxMDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1ZXJ5LmggKi87IH07CiAJCTA4NTYzQkI0
MTE3ODYxNzgwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NjNCQjIxMTc4NjE3NzAw
MTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAgKi87IH07CiAJCTA4NTYzQkI1
MTE3ODYxNzgwMDEyQjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTYzQkIzMTE3ODYxNzcwMDEy
QjU3OCAvKiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaCAqLzsgfTsKIAkJMDg1NjNCRDAxMTc4
NjVGNTAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTYzQkNGMTE3ODY1RjUwMDEyQjU3OCAvKiBS
ZW5kZXJTVkdSZXNvdXJjZS5jcHAgKi87IH07CkBAIC01NjA1LDYgKzU2MDgsOSBAQAogCQkwODRE
MjgzMjExMEE3RkNCMDAzODIzOUEgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRyYWl0cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5VHJhaXRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NERCQTlEMEVEMzlEMzUwMDM4QzIyNiAv
KiBXTUxWYXJpYWJsZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V01MVmFyaWFibGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg0REJBOUUw
RUQzOUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXTUxWYXJpYWJsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MDg1M0Q3MkYxMUM5MTA4RjAwQjJGRDQyIC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVGV4dENodW5rTGF5b3V0SW5m
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4NTNENzMwMTFDOTEwOTAwMEIy
RkQ0MiAvKiBTVkdUZXh0UXVlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU1ZHVGV4dFF1ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDg1
M0Q3MzExMUM5MTA5MDAwQjJGRDQyIC8qIFNWR1RleHRRdWVyeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdUZXh0UXVlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDg1NjNCQjIxMTc4NjE3NzAwMTJCNTc4IC8qIFJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU2M0JCMzEx
Nzg2MTc3MDAxMkI1NzggLyogUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODU2M0JDRjExNzg2NUY1MDAxMkI1NzggLyogUmVuZGVy
U1ZHUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyU1ZHUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY1MDYs
OSArMTY1MTIsMTIgQEAKIAkJCQk4NTNDQTlFNTBBRUVDNjA4MDAyMzcyREMgLyogU1ZHUm9vdElu
bGluZUJveC5oICovLAogCQkJCTA4REFCOUMwMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdTaGFkb3dU
cmVlRWxlbWVudHMuY3BwICovLAogCQkJCTA4REFCOUMxMTEwM0Q5QzEwMDNFN0FCQSAvKiBTVkdT
aGFkb3dUcmVlRWxlbWVudHMuaCAqLywKKwkJCQkwODUzRDcyRjExQzkxMDhGMDBCMkZENDIgLyog
U1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgKi8sCiAJCQkJMDg0MkJDODAxMTkwMTQ3MjAwQzdE
MDhGIC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uaCAqLywKIAkJCQkwODNGNTI5NzExOTU3RkJF
MDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAgKi8sCiAJCQkJMDgzRjUyOTgx
MTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCAqLywKKwkJCQkwODUz
RDczMDExQzkxMDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1ZXJ5LmNwcCAqLywKKwkJCQkwODUzRDcz
MTExQzkxMDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1ZXJ5LmggKi8sCiAJCQkJQThDRkYwNEMwQTE1
NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0LmggKi8sCiAJCQkJQUIwMTRERTEwRTY4OUE0MzAw
RTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgKi8sCiAJCQkJQUIwMTRERTIw
RTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oICovLApAQCAtMTk0
MTUsNiArMTk0MjQsNyBAQAogCQkJCUI2QjA1NDBBMTFCNjhGMTAwMDI1NjRDNSAvKiBJREJPYmpl
Y3RTdG9yZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTgxNkM4MDY5MTFCRTg4N0UwMDlBNDVF
OSAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODE2QzgwQUYxMUJFOTkwRDAw
OUE0NUU5IC8qIEpTSURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTA4NTNENzM0MTFD
OTEwOTAwMEIyRkQ0MiAvKiBTVkdUZXh0UXVlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjE3MjAs
NiArMjE3MzAsOCBAQAogCQkJCUI2QjA1NDA5MTFCNjhGMTAwMDI1NjRDNSAvKiBJREJPYmplY3RT
dG9yZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODE2QzgwNjgxMUJFODg3RTAwOUE0NUU5
IC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgxNkM4MEIxMTFCRTk5MzQw
MDlBNDVFOSAvKiBKU0lEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4NTNENzMy
MTFDOTEwOTAwMEIyRkQ0MiAvKiBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTA4NTNENzMzMTFDOTEwOTAwMEIyRkQ0MiAvKiBTVkdUZXh0UXVlcnkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlv
dXRJbmZvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRDaHVu
a0xheW91dEluZm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdUZXh0
Q2h1bmtMYXlvdXRJbmZvLmgiCisKKy8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgY3VycmVudGx5IGRl
YWN0aXZhdGVkLCB1bnRpbCB0aGUgU1ZHIFRleHQgcmV3cml0ZSBwYXRjaCBsYW5kcy4KKyNpZiBF
TkFCTEUoU1ZHKSAmJiAwCisjaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIlNW
R0lubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorCisvLyBUZXh0
IGNodW5rIGNyZWF0aW9uIGlzIGNvbXBsZXggYW5kIHRoZSB3aG9sZSBwcm9jZXNzCisvLyBjYW4g
ZWFzaWx5IGJlIHRyYWNlZCBieSBzZXR0aW5nIHRoaXMgdmFyaWFibGUgPiAwLgorI2RlZmluZSBE
RUJVR19DSFVOS19CVUlMRElORyAwCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGZs
b2F0IGN1bW11bGF0ZWRXaWR0aE9ySGVpZ2h0T2ZUZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVu
aywgYm9vbCBjYWxjV2lkdGhPbmx5KQoreworICAgIGZsb2F0IGxlbmd0aCA9IDAuMGY7CisgICAg
VmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBjaGFySXQgPSBjaHVuay5zdGFydDsKKworICAgIFZl
Y3RvcjxTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGl0ID0gY2h1bmsuYm94
ZXMuYmVnaW4oKTsKKyAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+OjppdGVy
YXRvciBlbmQgPSBjaHVuay5ib3hlcy5lbmQoKTsKKworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlID0gKml0Owor
CisgICAgICAgIFNWR0lubGluZVRleHRCb3gqIGJveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRl
eHRCb3gqPihyYW5nZS5ib3gpOworICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBib3gtPnJl
bmRlcmVyKCktPnN0eWxlKCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IHJhbmdlLnN0YXJ0T2Zm
c2V0OyBpIDwgcmFuZ2UuZW5kT2Zmc2V0OyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVChjaGFy
SXQgPD0gY2h1bmsuZW5kKTsKKworICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGhvdyBtYW55IGNo
YXJhY3RlcnMgLSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IC0gY2FuIGJlIG1lYXN1cmVkIGF0
IG9uY2UuCisgICAgICAgICAgICAvLyBJbXBvcnRhbnQgZm9yIG5vbi1hYnNvbHV0ZSBwb3NpdGlv
bmVkIG5vbi1sYXRpbjEgdGV4dCAoaWUuIEFyYWJpYykgd2hlcmUgaWUuIHRoZSB3aWR0aAorICAg
ICAgICAgICAgLy8gb2YgYSBzdHJpbmcgaXMgbm90IHRoZSBzdW0gb2YgdGhlIGJvdW5kYXJpZXMg
b2YgYWxsIGNvbnRhaW5lZCBnbHlwaHMuCisgICAgICAgICAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0
ZXJhdG9yIGl0U2VhcmNoID0gY2hhckl0ICsgMTsKKyAgICAgICAgICAgIFZlY3RvcjxTVkdDaGFy
Pjo6aXRlcmF0b3IgZW5kU2VhcmNoID0gY2hhckl0ICsgcmFuZ2UuZW5kT2Zmc2V0IC0gaTsKKyAg
ICAgICAgICAgIHdoaWxlIChpdFNlYXJjaCAhPSBlbmRTZWFyY2gpIHsKKyAgICAgICAgICAgICAg
ICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciAnaXNIaWRkZW4oKScgaGVyZSBhcyB0aGlzIGZ1bmN0
aW9uIGlzIG5vdCBjYWxsZWQgZm9yIHRleHQgcGF0aHMuCisgICAgICAgICAgICAgICAgaWYgKGl0
U2VhcmNoLT5kcmF3blNlcGVyYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICBpdFNlYXJjaCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgcG9zaXRpb25PZmZzZXQgPSBpdFNlYXJjaCAtIGNoYXJJdDsKKworICAgICAg
ICAgICAgLy8gQ2FsY3VsYXRlIHdpZHRoL2hlaWdodCBvZiBzdWJyYW5nZQorICAgICAgICAgICAg
U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2Ugc3ViUmFuZ2U7CisgICAgICAgICAgICBzdWJSYW5n
ZS5ib3ggPSByYW5nZS5ib3g7CisgICAgICAgICAgICBzdWJSYW5nZS5zdGFydE9mZnNldCA9IGk7
CisgICAgICAgICAgICBzdWJSYW5nZS5lbmRPZmZzZXQgPSBpICsgcG9zaXRpb25PZmZzZXQ7CisK
KyAgICAgICAgICAgIGlmIChjYWxjV2lkdGhPbmx5KQorICAgICAgICAgICAgICAgIGxlbmd0aCAr
PSBjdW1tdWxhdGVkV2lkdGhPZklubGluZUJveENoYXJhY3RlclJhbmdlKHN1YlJhbmdlKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gY3VtbXVsYXRlZEhlaWdo
dE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2Uoc3ViUmFuZ2UpOworCisgICAgICAgICAgICAvLyBD
YWxjdWxhdGUgZ2FwIGJldHdlZW4gdGhlIHByZXZpb3VzICYgY3VycmVudCByYW5nZQorICAgICAg
ICAgICAgLy8gPHRleHQgeD0iMTAgNTAgNzAiPkFCQ0Q8L3RleHQ+IC0gd2UgbmVlZCB0byB0YWtl
IHRoZSBnYXBzIGJldHdlZW4gQSAmIEIgaW50byBhY2NvdW50CisgICAgICAgICAgICAvLyBzbyBh
ZGQgIjQwIiBhcyB3aWR0aCwgYW5kIGFuYWxvZ291cyBmb3IgQiAmIEMsIGFkZCAiMjAiIGFzIHdp
ZHRoLgorICAgICAgICAgICAgaWYgKGl0U2VhcmNoID4gY2h1bmsuc3RhcnQgJiYgaXRTZWFyY2gg
PCBjaHVuay5lbmQpIHsKKyAgICAgICAgICAgICAgICBTVkdDaGFyJiBsYXN0Q2hhcmFjdGVyID0g
KihpdFNlYXJjaCAtIDEpOworICAgICAgICAgICAgICAgIFNWR0NoYXImIGN1cnJlbnRDaGFyYWN0
ZXIgPSAqaXRTZWFyY2g7CisKKyAgICAgICAgICAgICAgICBpbnQgY2hhcnNDb25zdW1lZCA9IDA7
CisgICAgICAgICAgICAgICAgZmxvYXQgZ2x5cGhXaWR0aCA9IDAuMGY7CisgICAgICAgICAgICAg
ICAgZmxvYXQgZ2x5cGhIZWlnaHQgPSAwLjBmOworICAgICAgICAgICAgICAgIFN0cmluZyBnbHlw
aE5hbWU7CisgICAgICAgICAgICAgICAgU3RyaW5nIHVuaWNvZGVTdHJpbmc7CisgICAgICAgICAg
ICAgICAgYm94LT5tZWFzdXJlQ2hhcmFjdGVyKHN0eWxlLCBpICsgcG9zaXRpb25PZmZzZXQgLSAx
LCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoV2lkdGgsIGds
eXBoSGVpZ2h0KTsKKworICAgICAgICAgICAgICAgIGlmIChjYWxjV2lkdGhPbmx5KQorICAgICAg
ICAgICAgICAgICAgICBsZW5ndGggKz0gY3VycmVudENoYXJhY3Rlci54IC0gbGFzdENoYXJhY3Rl
ci54IC0gZ2x5cGhXaWR0aDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGxlbmd0aCArPSBjdXJyZW50Q2hhcmFjdGVyLnkgLSBsYXN0Q2hhcmFjdGVyLnkgLSBnbHlw
aEhlaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWR2YW5jZSBwcm9jZXNz
ZWQgY2hhcmFjdGVycworICAgICAgICAgICAgaSArPSBwb3NpdGlvbk9mZnNldCAtIDE7CisgICAg
ICAgICAgICBjaGFySXQgPSBpdFNlYXJjaDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VS
VChjaGFySXQgPT0gY2h1bmsuZW5kKTsKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMg
ZmxvYXQgY3VtbXVsYXRlZFdpZHRoT2ZUZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVuaykKK3sK
KyAgICByZXR1cm4gY3VtbXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRleHRDaHVuayhjaHVuaywgdHJ1
ZSk7Cit9CisKK3N0YXRpYyBmbG9hdCBjdW1tdWxhdGVkSGVpZ2h0T2ZUZXh0Q2h1bmsoU1ZHVGV4
dENodW5rJiBjaHVuaykKK3sKKyAgICByZXR1cm4gY3VtbXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRl
eHRDaHVuayhjaHVuaywgZmFsc2UpOworfQorCitmbG9hdCBjYWxjdWxhdGVUZXh0QW5jaG9yU2hp
ZnRGb3JUZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVuaywgRVRleHRBbmNob3IgYW5jaG9yKQor
eworICAgIGZsb2F0IHNoaWZ0ID0gMC4wZjsKKworICAgIGlmIChjaHVuay5pc1ZlcnRpY2FsVGV4
dCkKKyAgICAgICAgc2hpZnQgPSBjdW1tdWxhdGVkSGVpZ2h0T2ZUZXh0Q2h1bmsoY2h1bmspOwor
ICAgIGVsc2UKKyAgICAgICAgc2hpZnQgPSBjdW1tdWxhdGVkV2lkdGhPZlRleHRDaHVuayhjaHVu
ayk7CisKKyAgICBpZiAoYW5jaG9yID09IFRBX01JRERMRSkKKyAgICAgICAgc2hpZnQgKj0gLTAu
NWY7CisgICAgZWxzZQorICAgICAgICBzaGlmdCAqPSAtMS4wZjsKKworICAgIHJldHVybiBzaGlm
dDsKK30KKworc3RhdGljIHZvaWQgYXBwbHlUZXh0QW5jaG9yVG9UZXh0Q2h1bmsoU1ZHVGV4dENo
dW5rJiBjaHVuaykKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIGZvciBjaHVu
a3MgY29udGFpbmluZyBjaGFycyBhbGlnbmVkIG9uIGEgcGF0aC4KKyAgICAvLyAtPiBhbGwgY2hh
cmFjdGVycyBhcmUgdmlzaWJsZSwgbm8gbmVlZCB0byBjaGVjayBmb3IgImlzSGlkZGVuKCkiIGFu
eXdoZXJlLgorCisgICAgaWYgKGNodW5rLmFuY2hvciA9PSBUQV9TVEFSVCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZmxvYXQgc2hpZnQgPSBjYWxjdWxhdGVUZXh0QW5jaG9yU2hpZnRGb3JUZXh0
Q2h1bmsoY2h1bmssIGNodW5rLmFuY2hvcik7CisKKyAgICAvLyBBcHBseSBjb3JyZWN0aW9uIHRv
IGNodW5rCisgICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBjaHVua0l0ID0gY2h1bmsuc3Rh
cnQ7CisgICAgZm9yICg7IGNodW5rSXQgIT0gY2h1bmsuZW5kOyArK2NodW5rSXQpIHsKKyAgICAg
ICAgU1ZHQ2hhciYgY3VyQ2hhciA9ICpjaHVua0l0OworCisgICAgICAgIGlmIChjaHVuay5pc1Zl
cnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGN1ckNoYXIueSArPSBzaGlmdDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY3VyQ2hhci54ICs9IHNoaWZ0OworICAgIH0KKworICAgIC8vIE1vdmUg
aW5saW5lIGJveGVzCisgICAgVmVjdG9yPFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlPjo6aXRl
cmF0b3IgYm94SXQgPSBjaHVuay5ib3hlcy5iZWdpbigpOworICAgIFZlY3RvcjxTVkdJbmxpbmVC
b3hDaGFyYWN0ZXJSYW5nZT46Oml0ZXJhdG9yIGJveEVuZCA9IGNodW5rLmJveGVzLmVuZCgpOwor
CisgICAgZm9yICg7IGJveEl0ICE9IGJveEVuZDsgKytib3hJdCkgeworICAgICAgICBTVkdJbmxp
bmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSAqYm94SXQ7CisKKyAgICAgICAgSW5saW5lQm94
KiBjdXJCb3ggPSByYW5nZS5ib3g7CisgICAgICAgIEFTU0VSVChjdXJCb3gtPmlzU1ZHSW5saW5l
VGV4dEJveCgpKTsKKworICAgICAgICAvLyBNb3ZlIHRhcmdldCBib3gKKyAgICAgICAgaWYgKGNo
dW5rLmlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgY3VyQm94LT5zZXRZKGN1ckJveC0+eSgp
ICsgc3RhdGljX2Nhc3Q8aW50PihzaGlmdCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
dXJCb3gtPnNldFgoY3VyQm94LT54KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNoaWZ0KSk7CisgICAg
fQorfQorCitmbG9hdCBjYWxjdWxhdGVUZXh0TGVuZ3RoQ29ycmVjdGlvbkZvclRleHRDaHVuayhT
VkdUZXh0Q2h1bmsmIGNodW5rLCBFTGVuZ3RoQWRqdXN0IGxlbmd0aEFkanVzdCwgZmxvYXQmIGNv
bXB1dGVkTGVuZ3RoKQoreworICAgIGlmIChjaHVuay50ZXh0TGVuZ3RoIDw9IDAuMGYpCisgICAg
ICAgIHJldHVybiAwLjBmOworCisgICAgY29tcHV0ZWRMZW5ndGggPSAwLjBmOworCisgICAgZmxv
YXQgY29tcHV0ZWRXaWR0aCA9IGN1bW11bGF0ZWRXaWR0aE9mVGV4dENodW5rKGNodW5rKTsKKyAg
ICBmbG9hdCBjb21wdXRlZEhlaWdodCA9IGN1bW11bGF0ZWRIZWlnaHRPZlRleHRDaHVuayhjaHVu
ayk7CisgICAgaWYgKChjb21wdXRlZFdpZHRoIDw9IDAuMGYgJiYgIWNodW5rLmlzVmVydGljYWxU
ZXh0KQorICAgICAgICB8fCAoY29tcHV0ZWRIZWlnaHQgPD0gMC4wZiAmJiBjaHVuay5pc1ZlcnRp
Y2FsVGV4dCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgY29tcHV0ZWRMZW5ndGggPSBj
aHVuay5pc1ZlcnRpY2FsVGV4dCA/IGNvbXB1dGVkSGVpZ2h0IDogY29tcHV0ZWRXaWR0aDsKKyAg
ICBpZiAobGVuZ3RoQWRqdXN0ID09IFNWR1RleHRDb250ZW50RWxlbWVudDo6TEVOR1RIQURKVVNU
X1NQQUNJTkdBTkRHTFlQSFMpIHsKKyAgICAgICAgaWYgKGNodW5rLmlzVmVydGljYWxUZXh0KSAg
ICAKKyAgICAgICAgICAgIGNodW5rLmN0bS5zY2FsZU5vblVuaWZvcm0oMS4wZiwgY2h1bmsudGV4
dExlbmd0aCAvIGNvbXB1dGVkTGVuZ3RoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2h1
bmsuY3RtLnNjYWxlTm9uVW5pZm9ybShjaHVuay50ZXh0TGVuZ3RoIC8gY29tcHV0ZWRMZW5ndGgs
IDEuMGYpOworCisgICAgICAgIHJldHVybiAwLjBmOworICAgIH0KKworICAgIHJldHVybiAoY2h1
bmsudGV4dExlbmd0aCAtIGNvbXB1dGVkTGVuZ3RoKSAvIGZsb2F0KGNodW5rLmVuZCAtIGNodW5r
LnN0YXJ0KTsKK30KKworc3RhdGljIHZvaWQgYXBwbHlUZXh0TGVuZ3RoQ29ycmVjdGlvblRvVGV4
dENodW5rKFNWR1RleHRDaHVuayYgY2h1bmspCit7CisgICAgLy8gVGhpcyBtZXRob2QgaXMgbm90
IGNhbGxlZCBmb3IgY2h1bmtzIGNvbnRhaW5pbmcgY2hhcnMgYWxpZ25lZCBvbiBhIHBhdGguCisg
ICAgLy8gLT4gYWxsIGNoYXJhY3RlcnMgYXJlIHZpc2libGUsIG5vIG5lZWQgdG8gY2hlY2sgZm9y
ICJpc0hpZGRlbigpIiBhbnl3aGVyZS4KKworICAgIC8vIGxlbmd0aEFkanVzdD0ic3BhY2luZ0Fu
ZEdseXBocyIgaXMgaGFuZGxlZCBieSBzZXR0aW5nIGEgc2NhbGUgZmFjdG9yIGZvciB0aGUgd2hv
bGUgY2h1bmsKKyAgICBmbG9hdCB0ZXh0TGVuZ3RoID0gMC4wZjsKKyAgICBmbG9hdCBzcGFjaW5n
VG9BcHBseSA9IGNhbGN1bGF0ZVRleHRMZW5ndGhDb3JyZWN0aW9uRm9yVGV4dENodW5rKGNodW5r
LCBjaHVuay5sZW5ndGhBZGp1c3QsIHRleHRMZW5ndGgpOworCisgICAgaWYgKCFjaHVuay5jdG0u
aXNJZGVudGl0eSgpICYmIGNodW5rLmxlbmd0aEFkanVzdCA9PSBTVkdUZXh0Q29udGVudEVsZW1l
bnQ6OkxFTkdUSEFESlVTVF9TUEFDSU5HQU5ER0xZUEhTKSB7CisgICAgICAgIFNWR0NoYXImIGZp
cnN0Q2hhciA9ICooY2h1bmsuc3RhcnQpOworCisgICAgICAgIC8vIEFzc3VyZSB3ZSBhcHBseSB0
aGUgY2h1bmsgc2NhbGluZyBpbiB0aGUgcmlnaHQgb3JpZ2luCisgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBuZXdDaHVua0N0bShjaHVuay5jdG0pOworICAgICAgICBuZXdDaHVua0N0bS50cmFuc2xh
dGVSaWdodChmaXJzdENoYXIueCwgZmlyc3RDaGFyLnkpOworICAgICAgICBuZXdDaHVua0N0bS50
cmFuc2xhdGUoLWZpcnN0Q2hhci54LCAtZmlyc3RDaGFyLnkpOworCisgICAgICAgIGNodW5rLmN0
bSA9IG5ld0NodW5rQ3RtOworICAgIH0KKworICAgIC8vIEFwcGx5IGNvcnJlY3Rpb24gdG8gY2h1
bmsgCisgICAgaWYgKHNwYWNpbmdUb0FwcGx5ICE9IDAuMGYpIHsKKyAgICAgICAgVmVjdG9yPFNW
R0NoYXI+OjppdGVyYXRvciBjaHVua0l0ID0gY2h1bmsuc3RhcnQ7CisgICAgICAgIGZvciAoOyBj
aHVua0l0ICE9IGNodW5rLmVuZDsgKytjaHVua0l0KSB7CisgICAgICAgICAgICBTVkdDaGFyJiBj
dXJDaGFyID0gKmNodW5rSXQ7CisgICAgICAgICAgICBjdXJDaGFyLmRyYXduU2VwZXJhdGVkID0g
dHJ1ZTsKKworICAgICAgICAgICAgaWYgKGNodW5rLmlzVmVydGljYWxUZXh0KQorICAgICAgICAg
ICAgICAgIGN1ckNoYXIueSArPSAoY2h1bmtJdCAtIGNodW5rLnN0YXJ0KSAqIHNwYWNpbmdUb0Fw
cGx5OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1ckNoYXIueCArPSAoY2h1
bmtJdCAtIGNodW5rLnN0YXJ0KSAqIHNwYWNpbmdUb0FwcGx5OworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFNWR1RleHRDaHVua0xheW91dEluZm86OnN0YXJ0VGV4dENodW5rKCkKK3sKKyAg
ICBtX2NodW5rLmJveGVzLmNsZWFyKCk7CisgICAgbV9jaHVuay5ib3hlcy5hcHBlbmQoU1ZHSW5s
aW5lQm94Q2hhcmFjdGVyUmFuZ2UoKSk7CisKKyAgICBtX2NodW5rLnN0YXJ0ID0gbV9jaGFyc0l0
OworICAgIG1fYXNzaWduQ2h1bmtQcm9wZXJ0aWVzID0gdHJ1ZTsKK30KKwordm9pZCBTVkdUZXh0
Q2h1bmtMYXlvdXRJbmZvOjpjbG9zZVRleHRDaHVuaygpCit7CisgICAgQVNTRVJUKCFtX2NodW5r
LmJveGVzLmxhc3QoKS5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fY2h1bmsuYm94ZXMubGFzdCgp
LmlzQ2xvc2VkKCkpOworCisgICAgbV9jaHVuay5lbmQgPSBtX2NoYXJzSXQ7CisgICAgQVNTRVJU
KG1fY2h1bmsuZW5kID49IG1fY2h1bmsuc3RhcnQpOworCisgICAgbV9zdmdUZXh0Q2h1bmtzLmFw
cGVuZChtX2NodW5rKTsKK30KKwordm9pZCBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvOjpidWlsZFRl
eHRDaHVua3MoVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBiZWdpbiwgVmVjdG9yPFNWR0NoYXI+
OjppdGVyYXRvciBlbmQsIElubGluZUZsb3dCb3gqIHN0YXJ0KQoreworICAgIG1fY2hhcnNCZWdp
biA9IGJlZ2luOworICAgIG1fY2hhcnNFbmQgPSBlbmQ7CisKKyAgICBtX2NoYXJzSXQgPSBiZWdp
bjsKKyAgICBtX2NodW5rID0gU1ZHVGV4dENodW5rKGJlZ2luKTsKKworICAgIHJlY3Vyc2l2ZUJ1
aWxkVGV4dENodW5rcyhzdGFydCk7CisgICAgQVNTRVJUKG1fY2hhcnNJdCA9PSBtX2NoYXJzRW5k
KTsKK30KKwordm9pZCBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvOjpyZWN1cnNpdmVCdWlsZFRleHRD
aHVua3MoSW5saW5lRmxvd0JveCogc3RhcnQpCit7CisjaWYgREVCVUdfQ0hVTktfQlVJTERJTkcg
PiAxCisgICAgZnByaW50ZihzdGRlcnIsICIgLT4gYnVpbGRUZXh0Q2h1bmtzKHN0YXJ0PSVwKVxu
Iiwgc3RhcnQpOworI2VuZGlmCisKKyAgICBmb3IgKElubGluZUJveCogY3VyciA9IHN0YXJ0LT5m
aXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAg
aWYgKGN1cnItPnJlbmRlcmVyKCktPmlzVGV4dCgpKSB7CisgICAgICAgICAgICBJbmxpbmVUZXh0
Qm94KiB0ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KGN1cnIpOworCisgICAg
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Qm94LT5sZW4oKTsKKyAgICAgICAgICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisjaWYgREVCVUdfQ0hVTktf
QlVJTERJTkcgPiAxCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiBIYW5kbGUgaW5s
aW5lIHRleHQgYm94ICglcCkgd2l0aCAlaSBjaGFyYWN0ZXJzIChzdGFydDogJWksIGVuZDogJWkp
LCBoYW5kbGluZ1RleHRQYXRoPSVpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHRCb3gsIGxlbmd0aCwgdGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+ZW5kKCksIChpbnQpIG1f
aGFuZGxpbmdUZXh0UGF0aCk7CisjZW5kaWYKKworICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4
dCA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigpOworICAgICAgICAgICAgQVNTRVJUKHRleHQpOwor
ICAgICAgICAgICAgQVNTRVJUKHRleHQtPm5vZGUoKSk7CisKKyAgICAgICAgICAgIFNWR1RleHRD
b250ZW50RWxlbWVudCogdGV4dENvbnRlbnQgPSAwOworICAgICAgICAgICAgTm9kZSogbm9kZSA9
IHRleHQtPm5vZGUoKS0+cGFyZW50KCk7CisgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2Rl
LT5pc1NWR0VsZW1lbnQoKSAmJiAhdGV4dENvbnRlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpLT5pc1RleHRDb250ZW50KCkpCisgICAgICAg
ICAgICAgICAgICAgIHRleHRDb250ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVt
ZW50Kj4obm9kZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNT
RVJUKHRleHRDb250ZW50KTsKKworICAgICAgICAgICAgLy8gU3RhcnQgbmV3IGNoYXJhY3RlciBy
YW5nZSBmb3IgdGhlIGZpcnN0IGNodW5rCisgICAgICAgICAgICBib29sIGlzRmlyc3RDaGFyYWN0
ZXIgPSBtX3N2Z1RleHRDaHVua3MuaXNFbXB0eSgpICYmIG1fY2h1bmsuc3RhcnQgPT0gbV9jaGFy
c0l0ICYmIG1fY2h1bmsuc3RhcnQgPT0gbV9jaHVuay5lbmQ7CisgICAgICAgICAgICBpZiAoaXNG
aXJzdENoYXJhY3RlcikgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX2NodW5rLmJveGVzLmlz
RW1wdHkoKSk7CisgICAgICAgICAgICAgICAgbV9jaHVuay5ib3hlcy5hcHBlbmQoU1ZHSW5saW5l
Qm94Q2hhcmFjdGVyUmFuZ2UoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoIW1fY2h1bmsuYm94ZXMuaXNFbXB0eSgpKTsKKworICAgICAgICAgICAgLy8gV2Fs
ayBzdHJpbmcgdG8gZmluZCBvdXQgbmV3IGNodW5rIHBvc2l0aW9ucywgaWYgZXhpc3RlbnQKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2NoYXJzSXQgIT0gbV9jaGFyc0VuZCk7CisKKyAgICAgICAgICAg
ICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSBtX2NodW5rLmJveGVzLmxh
c3QoKTsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaXNPcGVuKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmFuZ2UuYm94ID0gY3VycjsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3Rh
cnRPZmZzZXQgPSAhaSA/IDAgOiBpIC0gMTsKKworI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4g
MQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8IC0+IFJhbmdlIGlzIG9w
ZW4hIGJveD0lcCwgc3RhcnRPZmZzZXQ9JWlcbiIsIHJhbmdlLmJveCwgcmFuZ2Uuc3RhcnRPZmZz
ZXQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gSWYg
YSBuZXcgKG9yIHRoZSBmaXJzdCkgY2h1bmsgaGFzIGJlZW4gc3RhcnRlZCwgcmVjb3JkIGl0J3Mg
dGV4dC1hbmNob3IgYW5kIHdyaXRpbmcgbW9kZS4KKyAgICAgICAgICAgICAgICBpZiAobV9hc3Np
Z25DaHVua1Byb3BlcnRpZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NpZ25DaHVua1By
b3BlcnRpZXMgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBtX2NodW5rLmlzVmVydGlj
YWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHRleHQtPnN0eWxlKCktPnN2Z1N0eWxlKCkp
OworICAgICAgICAgICAgICAgICAgICBtX2NodW5rLmlzVGV4dFBhdGggPSBtX2hhbmRsaW5nVGV4
dFBhdGg7CisgICAgICAgICAgICAgICAgICAgIG1fY2h1bmsuYW5jaG9yID0gdGV4dC0+c3R5bGUo
KS0+c3ZnU3R5bGUoKS0+dGV4dEFuY2hvcigpOworICAgICAgICAgICAgICAgICAgICBtX2NodW5r
LnRleHRMZW5ndGggPSB0ZXh0Q29udGVudC0+dGV4dExlbmd0aCgpLnZhbHVlKHRleHRDb250ZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaHVuay5sZW5ndGhBZGp1c3QgPSAoRUxlbmd0aEFk
anVzdCkgdGV4dENvbnRlbnQtPmxlbmd0aEFkanVzdCgpOworCisjaWYgREVCVUdfQ0hVTktfQlVJ
TERJTkcgPiAxCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIHwgLT4gQXNz
aWduIGNodW5rIHByb3BlcnRpZXMsIGlzVmVydGljYWxUZXh0PSVpLCBhbmNob3I9JWlcbiIsIG1f
Y2h1bmsuaXNWZXJ0aWNhbFRleHQsIG1fY2h1bmsuYW5jaG9yKTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiAhaXNGaXJzdENoYXJhY3Rl
ciAmJiBtX2NoYXJzSXQtPm5ld1RleHRDaHVuaykgeworICAgICAgICAgICAgICAgICAgICAvLyBD
bG9zZSBtaWQgY2h1bmsgJiBjaGFyYWN0ZXIgcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKCFyYW5nZS5pc09wZW4oKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghcmFuZ2Uu
aXNDbG9zZWQoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID0gaTsK
KyAgICAgICAgICAgICAgICAgICAgY2xvc2VUZXh0Q2h1bmsoKTsKKworI2lmIERFQlVHX0NIVU5L
X0JVSUxESU5HID4gMQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8IC0+
IENsb3NlIG1pZC10ZXh0IGNodW5rLCBhdCBlbmRPZmZzZXQ6ICVpIGFuZCBzdGFydGluZyBuZXcg
bWlkIGNodW5rIVxuIiwgcmFuZ2UuZW5kT2Zmc2V0KTsKKyNlbmRpZgorICAgIAorICAgICAgICAg
ICAgICAgICAgICAvLyBQcmVwYXJlIGZvciBuZXh0IGNodW5rLCBpZiB3ZSdyZSBub3QgYXQgdGhl
IGVuZAorICAgICAgICAgICAgICAgICAgICBzdGFydFRleHRDaHVuaygpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3RoKSB7CisjaWYgREVCVUdfQ0hVTktfQlVJTERJTkcg
PiAxCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8IC0+IFJlY29y
ZCBsYXN0IGNodW5rIG9mIGlubGluZSB0ZXh0IGJveCFcbiIpOworI2VuZGlmCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0VGV4dENodW5rKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSBtX2NodW5rLmJveGVzLmxhc3Qo
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbV9hc3NpZ25DaHVua1Byb3BlcnRpZXMgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY2h1bmsuaXNWZXJ0aWNhbFRleHQgPSBp
c1ZlcnRpY2FsV3JpdGluZ01vZGUodGV4dC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NodW5rLmlzVGV4dFBhdGggPSBtX2hhbmRsaW5nVGV4dFBhdGg7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NodW5rLmFuY2hvciA9IHRleHQtPnN0eWxlKCkt
PnN2Z1N0eWxlKCktPnRleHRBbmNob3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY2h1
bmsudGV4dExlbmd0aCA9IHRleHRDb250ZW50LT50ZXh0TGVuZ3RoKCkudmFsdWUodGV4dENvbnRl
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jaHVuay5sZW5ndGhBZGp1c3QgPSAoRUxl
bmd0aEFkanVzdCkgdGV4dENvbnRlbnQtPmxlbmd0aEFkanVzdCgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICByYW5nZS5ib3ggPSBjdXJyOworICAgICAgICAgICAgICAgICAgICAgICAgcmFu
Z2Uuc3RhcnRPZmZzZXQgPSBpOworCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXJh
bmdlLmlzT3BlbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghcmFuZ2UuaXND
bG9zZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGhvbGQgdHJ1ZSBmb3IgdGhlIGZpcnN0
IGNoYXJhY3RlciBvZiB0aGUgZmlyc3QgY2h1bmsKKyAgICAgICAgICAgICAgICBpZiAoaXNGaXJz
dENoYXJhY3RlcikKKyAgICAgICAgICAgICAgICAgICAgaXNGaXJzdENoYXJhY3RlciA9IGZhbHNl
OworICAgIAorICAgICAgICAgICAgICAgICsrbV9jaGFyc0l0OworICAgICAgICAgICAgfQorCisj
aWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxICAgIAorICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICIgLT4gRmluaXNoZWQgaW5saW5lIHRleHQgYm94IVxuIik7CisjZW5kaWYKKworICAgICAg
ICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlID0gbV9jaHVuay5ib3hlcy5s
YXN0KCk7CisgICAgICAgICAgICBpZiAoIXJhbmdlLmlzT3BlbigpICYmICFyYW5nZS5pc0Nsb3Nl
ZCgpKSB7CisjaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCisgICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgLT4gTGFzdCByYW5nZSBub3QgY2xvc2VkIC0gY2xvc2luZyB3aXRoIGVu
ZE9mZnNldDogJWlcbiIsIGxlbmd0aCk7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIC8vIEN1
cnJlbnQgdGV4dCBjaHVuayBpcyBub3QgeWV0IGNsb3NlZC4gRmluaXNoIHRoZSBjdXJyZW50IHJh
bmdlLCBidXQgZG9uJ3Qgc3RhcnQgYSBuZXcgY2h1bmsuCisgICAgICAgICAgICAgICAgcmFuZ2Uu
ZW5kT2Zmc2V0ID0gbGVuZ3RoOworCisgICAgICAgICAgICAgICAgaWYgKG1fY2hhcnNJdCAhPSBt
X2NoYXJzRW5kKSB7CisjaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCisgICAgICAgICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IE5vdCBhdCBsYXN0IGNoYXJhY3RlciB5ZXQhXG4i
KTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBhdCB0aGUg
ZW5kIG9mIHRoZSBsYXN0IGJveCB0byBiZSBwcm9jZXNzZWQsIGFuZCBpZiB0aGUgbmV4dAorICAg
ICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgc3RhcnRzIGEgbmV3IGNodW5rLCB0aGVuIGNs
b3NlIHRoZSBjdXJyZW50IGNodW5rIGFuZCBzdGFydCBhIG5ldyBvbmUuCisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2NoYXJzSXQtPm5ld1RleHRDaHVuaykgeworI2lmIERFQlVHX0NIVU5LX0JV
SUxESU5HID4gMQorICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4g
TmV4dCBjaGFyYWN0ZXIgc3RhcnRzIG5ldyBjaHVuayEgQ2xvc2luZyBjdXJyZW50IGNodW5rLCBh
bmQgc3RhcnRpbmcgYSBuZXcgb25lLi4uXG4iKTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAg
ICAgICAgICBjbG9zZVRleHRDaHVuaygpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRU
ZXh0Q2h1bmsoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEp1c3Qgc3RhcnQgYSBuZXcgY2hhcmFjdGVyIHJhbmdlCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NodW5rLmJveGVzLmFwcGVuZChTVkdJbmxpbmVCb3hDaGFyYWN0ZXJS
YW5nZSgpKTsKKworI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQorICAgICAgICAgICAgICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gTmV4dCBjaGFyYWN0ZXIgZG9lcyBOT1Qgc3Rh
cnQgYSBuZXcgY2h1bmshIFN0YXJ0aW5nIG5ldyBjaGFyYWN0ZXIgcmFuZ2UuLi5cbiIpOworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworI2lm
IERFQlVHX0NIVU5LX0JVSUxESU5HID4gMQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAtPiBDbG9zaW5nIGZpbmFsIGNodW5rISBGaW5pc2hlZCBwcm9jZXNzaW5nIVxuIik7
CisjZW5kaWYKKworICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSBmaW5hbCBjaHVuaywgb25j
ZSB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGJveAorICAgICAgICAgICAgICAgICAgICBj
bG9zZVRleHRDaHVuaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyLT5pc0lubGluZUZsb3dCb3goKSk7
CisgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5l
Rmxvd0JveCo+KGN1cnIpOworCisgICAgICAgICAgICAvLyBTa2lwIGdlbmVyYXRlZCBjb250ZW50
LgorICAgICAgICAgICAgaWYgKCFmbG93Qm94LT5yZW5kZXJlcigpLT5ub2RlKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGJvb2wgaXNUZXh0UGF0aCA9IGZsb3dC
b3gtPnJlbmRlcmVyKCktPm5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6dGV4dFBhdGhUYWcp
OworCisjaWYgREVCVUdfQ0hVTktfQlVJTERJTkcgPiAxCisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAtPiBIYW5kbGUgaW5saW5lIGZsb3cgYm94ICglcCksIGlzVGV4dFBhdGg9JWlcbiIs
IGZsb3dCb3gsIChpbnQpIGlzVGV4dFBhdGgpOworI2VuZGlmCisKKyAgICAgICAgICAgIGlmIChp
c1RleHRQYXRoKQorICAgICAgICAgICAgICAgIG1faGFuZGxpbmdUZXh0UGF0aCA9IHRydWU7CisK
KyAgICAgICAgICAgIHJlY3Vyc2l2ZUJ1aWxkVGV4dENodW5rcyhmbG93Qm94KTsKKworICAgICAg
ICAgICAgaWYgKGlzVGV4dFBhdGgpCisgICAgICAgICAgICAgICAgbV9oYW5kbGluZ1RleHRQYXRo
ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBERUJVR19DSFVOS19CVUlMRElORyA+
IDEKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiA8LSBidWlsZFRleHRDaHVua3Moc3RhcnQ9JXApXG4i
LCBzdGFydCk7CisjZW5kaWYKK30KKwordm9pZCBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvOjpsYXlv
dXRUZXh0Q2h1bmtzKCkKK3sKKyAgICBWZWN0b3I8U1ZHVGV4dENodW5rPjo6aXRlcmF0b3IgaXQg
PSBtX3N2Z1RleHRDaHVua3MuYmVnaW4oKTsKKyAgICBWZWN0b3I8U1ZHVGV4dENodW5rPjo6aXRl
cmF0b3IgZW5kID0gbV9zdmdUZXh0Q2h1bmtzLmVuZCgpOworCisgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBTVkdUZXh0Q2h1bmsmIGNodW5rID0gKml0OworCisjaWYgREVC
VUdfQ0hVTktfQlVJTERJTkcgPiAwCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiSGFuZGxlIFRFWFQgQ0hVTkshIGFuY2hvcj0laSwgdGV4dExlbmd0aD0lZiwgbGVuZ3Ro
QWRqdXN0PSVpLCBpc1ZlcnRpY2FsVGV4dD0laSwgaXNUZXh0UGF0aD0laSBzdGFydD0lcCwgZW5k
PSVwIC0+IGRpc3Q6ICVpXG4iLAorICAgICAgICAgICAgICAgICAgICAoaW50KSBjaHVuay5hbmNo
b3IsIGNodW5rLnRleHRMZW5ndGgsIChpbnQpIGNodW5rLmxlbmd0aEFkanVzdCwgKGludCkgY2h1
bmsuaXNWZXJ0aWNhbFRleHQsCisgICAgICAgICAgICAgICAgICAgIChpbnQpIGNodW5rLmlzVGV4
dFBhdGgsIGNodW5rLnN0YXJ0LCBjaHVuay5lbmQsICh1bnNpZ25lZCBpbnQpIChjaHVuay5lbmQg
LSBjaHVuay5zdGFydCkpOworCisgICAgICAgICAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFj
dGVyUmFuZ2U+OjppdGVyYXRvciBib3hJdCA9IGNodW5rLmJveGVzLmJlZ2luKCk7CisgICAgICAg
ICAgICBWZWN0b3I8U1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2U+OjppdGVyYXRvciBib3hFbmQg
PSBjaHVuay5ib3hlcy5lbmQoKTsKKworICAgICAgICAgICAgdW5zaWduZWQgaW50IGkgPSAwOwor
ICAgICAgICAgICAgZm9yICg7IGJveEl0ICE9IGJveEVuZDsgKytib3hJdCkgeworICAgICAgICAg
ICAgICAgIFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSA9ICpib3hJdDsKKyAgICAg
ICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gUkFO
R0UgJWkgU1RBUlRPRkZTRVQ6ICVpLCBFTkRPRkZTRVQ6ICVpLCBCT1g6ICVwXG4iLCBpLCByYW5n
ZS5zdGFydE9mZnNldCwgcmFuZ2UuZW5kT2Zmc2V0LCByYW5nZS5ib3gpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBpZiAoY2h1bmsuaXNUZXh0UGF0aCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIHRleHQtcGF0aCAmIHRleHRMZW5ndGgs
IHdpdGggbGVuZ3RoQWRqdXN0PSJzcGFjaW5nIiBpcyBhbHJlYWR5IGhhbmRsZWQgZm9yIHRleHRQ
YXRoIGxheW91dHMuCisgICAgICAgIGFwcGx5VGV4dExlbmd0aENvcnJlY3Rpb25Ub1RleHRDaHVu
ayhjaHVuayk7CisgCisgICAgICAgIC8vIHRleHQtYW5jaG9yIGlzIGFscmVhZHkgaGFuZGxlZCBm
b3IgdGV4dFBhdGggbGF5b3V0cy4KKyAgICAgICAgYXBwbHlUZXh0QW5jaG9yVG9UZXh0Q2h1bmso
Y2h1bmspOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dElu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJ
bmZvLmgJKHJldmlzaW9uIDYxMjUzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dENodW5r
TGF5b3V0SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaWYgRU5BQkxF
KFNWRykKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdUZXh0Q29u
dGVudEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdUZXh0UXVlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1RleHRRdWVyeS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9T
VkdUZXh0UXVlcnkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2OCBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNWR1RleHRRdWVy
eS5oIgorCisvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBkZWFjdGl2YXRlZCwgdW50
aWwgdGhlIFNWRyBUZXh0IHJld3JpdGUgcGF0Y2ggbGFuZHMuCisjaWYgRU5BQkxFKFNWRykgJiYg
MAorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIklubGluZUZsb3dCb3gu
aCIKKyNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgor
I2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBCYXNlIHN0cnVjdHVyZSBmb3IgY2FsbGJh
Y2sgdXNlciBkYXRhCitzdHJ1Y3QgU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKKyAgICBEYXRhKCkKKyAg
ICAgICAgOiBwcm9jZXNzZWRDaHVua0NoYXJhY3RlcnMoMCkKKyAgICB7CisgICAgfQorCisgICAg
dW5zaWduZWQgcHJvY2Vzc2VkQ2h1bmtDaGFyYWN0ZXJzOworfTsKKworc3RhdGljIGlubGluZSBJ
bmxpbmVGbG93Qm94KiBmbG93Qm94Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
K3sKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChyZW5k
ZXJlci0+aXNSZW5kZXJCbG9jaygpKSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGdpdmVuIGEgYmxv
Y2sgZWxlbWVudCwgaXQgaGFzIHRvIGJlIGEgUmVuZGVyU1ZHVGV4dC4KKyAgICAgICAgQVNTRVJU
KHJlbmRlcmVyLT5pc1NWR1RleHQoKSk7CisgICAgICAgIFJlbmRlckJsb2NrKiByZW5kZXJCbG9j
ayA9IHRvUmVuZGVyQmxvY2socmVuZGVyZXIpOworCisgICAgICAgIC8vIFJlbmRlclNWR1RleHQg
b25seSBldmVyIGNvbnRhaW5zIGEgc2luZ2xlIGxpbmUgYm94LgorICAgICAgICBJbmxpbmVGbG93
Qm94KiBmbG93Qm94ID0gcmVuZGVyQmxvY2stPmZpcnN0TGluZUJveCgpOworICAgICAgICBBU1NF
UlQoZmxvd0JveCA9PSByZW5kZXJCbG9jay0+bGFzdExpbmVCb3goKSk7CisgICAgICAgIHJldHVy
biBmbG93Qm94OworICAgIH0KKworICAgIGlmIChyZW5kZXJlci0+aXNSZW5kZXJJbmxpbmUoKSkg
eworICAgICAgICAvLyBXZSdyZSBnaXZlbiBhIFJlbmRlclNWR0lubGluZSBvciBvYmplY3RzIHRo
YXQgZGVyaXZlIGZyb20gaXQgKFJlbmRlclNWR1RTcGFuIC8gUmVuZGVyU1ZHVGV4dFBhdGgpCisg
ICAgICAgIFJlbmRlcklubGluZSogcmVuZGVySW5saW5lID0gdG9SZW5kZXJJbmxpbmUocmVuZGVy
ZXIpOworCisgICAgICAgIC8vIFJlbmRlclNWR0lubGluZSBvbmx5IGV2ZXIgY29udGFpbnMgYSBz
aW5nbGUgbGluZSBib3guCisgICAgICAgIElubGluZUZsb3dCb3gqIGZsb3dCb3ggPSByZW5kZXJJ
bmxpbmUtPmZpcnN0TGluZUJveCgpOworICAgICAgICBBU1NFUlQoZmxvd0JveCA9PSByZW5kZXJJ
bmxpbmUtPmxhc3RMaW5lQm94KCkpOworICAgICAgICByZXR1cm4gZmxvd0JveDsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu
bGluZSBmbG9hdCBtYXBMZW5ndGhUaHJvdWdoQ2h1bmtUcmFuc2Zvcm1hdGlvbihjb25zdCBTVkdJ
bmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCBsZW5ndGgp
Cit7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0gPSB0ZXh0Qm94LT5jaHVu
a1RyYW5zZm9ybWF0aW9uKCk7CisgICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAg
ICAgIHJldHVybiBsZW5ndGg7CisgICAgICAgIAorICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KHN0YXRpY19jYXN0PGRvdWJsZT4obGVuZ3RoKSAqIChpc1ZlcnRpY2FsVGV4dCA/IHRy
YW5zZm9ybS5kKCkgOiB0cmFuc2Zvcm0uYSgpKSk7Cit9CisKK1NWR1RleHRRdWVyeTo6U1ZHVGV4
dFF1ZXJ5KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgY29sbGVjdFRleHRCb3hlc0lu
Rmxvd0JveChmbG93Qm94Rm9yUmVuZGVyZXIocmVuZGVyZXIpKTsKK30KKwordm9pZCBTVkdUZXh0
UXVlcnk6OmNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3goSW5saW5lRmxvd0JveCogZmxvd0JveCkK
K3sKKyAgICBpZiAoIWZsb3dCb3gpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoSW5saW5l
Qm94KiBjaGlsZCA9IGZsb3dCb3gtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRPbkxpbmUoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKSB7
CisgICAgICAgICAgICAvLyBTa2lwIGdlbmVyYXRlZCBjb250ZW50LgorICAgICAgICAgICAgaWYg
KCFjaGlsZC0+cmVuZGVyZXIoKS0+bm9kZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBjb2xsZWN0VGV4dEJveGVzSW5GbG93Qm94KHN0YXRpY19jYXN0PElubGlu
ZUZsb3dCb3gqPihjaGlsZCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICBBU1NFUlQoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dEJveCgpKTsKKyAgICAgICAgbV90
ZXh0Qm94ZXMuYXBwZW5kKHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihjaGlsZCkpOwor
ICAgIH0KK30KKworYm9vbCBTVkdUZXh0UXVlcnk6OmV4ZWN1dGVRdWVyeShEYXRhKiBxdWVyeURh
dGEsIFByb2Nlc3NUZXh0Q2h1bmtQYXJ0Q2FsbGJhY2sgY2h1bmtQYXJ0Q2FsbGJhY2spIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFtX3RleHRCb3hlcy5pc0VtcHR5KCkpOworICAgIGJvb2wgZmluaXNo
ZWQgPSBmYWxzZTsKKworICAgIC8vIExvb3Agb3ZlciBhbGwgdGV4dCBib3hlcworICAgIGNvbnN0
IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGV4dEJv
eGVzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RleHRCb3hlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgY29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9ICppdDsKKyAgICAgICAgY29uc3Qg
VmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+JiBwYXJ0cyA9IHRleHRCb3gtPnN2Z1RleHRDaHVua1Bh
cnRzKCk7CisKKyAgICAgICAgaW50IHByb2Nlc3NlZENoYXJhY3RlcnMgPSAwOworCisgICAgICAg
IC8vIExvb3Agb3ZlciBhbGwgdGV4dCBjaHVuayBwYXJ0cyBpbiB0aGlzIHRleHQgYm94LCBmaXJp
bmcgYSBjYWxsYmFjayBmb3IgZWFjaCBjaHVuayBwYXJ0LgorICAgICAgICBjb25zdCBWZWN0b3I8
U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIHBhcnRFbmQgPSBwYXJ0cy5lbmQoKTsK
KyAgICAgICAgZm9yIChWZWN0b3I8U1ZHVGV4dENodW5rUGFydD46OmNvbnN0X2l0ZXJhdG9yIHBh
cnRJdCA9IHBhcnRzLmJlZ2luKCk7IHBhcnRJdCAhPSBwYXJ0RW5kOyArK3BhcnRJdCkgeworICAg
ICAgICAgICAgaWYgKCh0aGlzLT4qY2h1bmtQYXJ0Q2FsbGJhY2spKHF1ZXJ5RGF0YSwgdGV4dEJv
eCwgKnBhcnRJdCkpIHsKKyAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2Nlc3NlZENo
YXJhY3RlcnMgKz0gcGFydEl0LT5sZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmlu
aXNoZWQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBxdWVyeURhdGEtPnByb2Nlc3Nl
ZENodW5rQ2hhcmFjdGVycyArPSBwcm9jZXNzZWRDaGFyYWN0ZXJzOworICAgIH0KKworICAgIHJl
dHVybiBmaW5pc2hlZDsKK30KKworYm9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0QW5kTGVuZ3Ro
SW50b0NodW5rUGFydENvb3JkaW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHSW5saW5l
VGV4dEJveCogdGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCwgaW50JiBzdGFy
dFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdAoreworICAgIC8vIFJldXNlIHRoZSBz
YW1lIGxvZ2ljIHVzZWQgZm9yIHRleHQgc2VsZWN0aW9uICYgcGFpbnRpbmcsIHRvIG1hcCBvdXIg
cXVlcnkgc3RhcnQvbGVuZ3RoIGludG8gc3RhcnQvZW5kUG9zaXRpb25zIG9mIHRoZSBjdXJyZW50
IHRleHQgY2h1bmsgcGFydC4KKyAgICBzdGFydFBvc2l0aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vz
c2VkQ2h1bmtDaGFyYWN0ZXJzOworICAgIGVuZFBvc2l0aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vz
c2VkQ2h1bmtDaGFyYWN0ZXJzOworICAgIHRleHRCb3gtPm1hcFN0YXJ0RW5kUG9zaXRpb25zSW50
b0NodW5rUGFydENvb3JkaW5hdGVzKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBwYXJ0KTsK
KworICAgIC8vIElmIHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbiwgdGhlbiB0aGUgcG9zaXRp
b24gd2UncmUgc3VwcG9zZWQgdG8gbWVhc3VyZSBsaWVzIGluIHRoaXMgY2h1bmsgcGFydC4KKyAg
ICByZXR1cm4gc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uOworfQorCitmbG9hdCBTVkdUZXh0
UXVlcnk6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0
Qm94LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNWZXJ0aWNhbFRleHQsIGludCBzdGFydFBv
c2l0aW9uLCBpbnQgbGVuZ3RoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBWZXJ0aWNhbCB3cml0
aW5nIG1vZGUgbmVlZHMgdG8gYmUgaGFuZGxlZCBtb3JlIGFjY3VyYXRlLgorICAgIGlmIChpc1Zl
cnRpY2FsVGV4dCkKKyAgICAgICAgcmV0dXJuIGxlbmd0aCAqIHN0eWxlLT5mb250KCkuaGVpZ2h0
KCk7CisKKyAgICBjb25zdCBVQ2hhciogc3RhcnRDaGFyYWN0ZXIgPSB0ZXh0Qm94LT50ZXh0UmVu
ZGVyZXIoKS0+Y2hhcmFjdGVycygpICsgdGV4dEJveC0+c3RhcnQoKSArIHN0YXJ0UG9zaXRpb247
CisgICAgcmV0dXJuIHN0eWxlLT5mb250KCkuZmxvYXRXaWR0aChzdmdUZXh0UnVuRm9ySW5saW5l
VGV4dEJveChzdGFydENoYXJhY3RlciwgbGVuZ3RoLCBzdHlsZSwgdGV4dEJveCkpOworfQorCisv
LyBudW1iZXJPZkNoYXJhY3RlcnMoKSBpbXBsZW1lbnRhdGlvbgorc3RydWN0IE51bWJlck9mQ2hh
cmFjdGVyc0RhdGEgOiBTVkdUZXh0UXVlcnk6OkRhdGEgeworICAgIE51bWJlck9mQ2hhcmFjdGVy
c0RhdGEoKQorICAgICAgICA6IGNoYXJhY3RlcnMoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5z
aWduZWQgY2hhcmFjdGVyczsKK307CisKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjpudW1iZXJPZkNoYXJh
Y3RlcnNDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBj
b25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0KSBjb25zdAoreworICAgIE51bWJlck9mQ2hhcmFj
dGVyc0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxOdW1iZXJPZkNoYXJhY3RlcnNEYXRhKj4ocXVl
cnlEYXRhKTsKKyAgICBkYXRhLT5jaGFyYWN0ZXJzICs9IHBhcnQubGVuZ3RoOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordW5zaWduZWQgU1ZHVGV4dFF1ZXJ5OjpudW1iZXJPZkNoYXJhY3RlcnMo
KSBjb25zdAoreworICAgIGlmIChtX3RleHRCb3hlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgTnVtYmVyT2ZDaGFyYWN0ZXJzRGF0YSBkYXRhOworICAgIGV4ZWN1dGVRdWVy
eSgmZGF0YSwgJlNWR1RleHRRdWVyeTo6bnVtYmVyT2ZDaGFyYWN0ZXJzQ2FsbGJhY2spOworICAg
IHJldHVybiBkYXRhLmNoYXJhY3RlcnM7Cit9CisKKy8vIHRleHRMZW5ndGgoKSBpbXBsZW1lbnRh
dGlvbgorc3RydWN0IFRleHRMZW5ndGhEYXRhIDogU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKKyAgICBU
ZXh0TGVuZ3RoRGF0YSgpCisgICAgICAgIDogdGV4dExlbmd0aCgwLjBmKQorICAgIHsKKyAgICB9
CisKKyAgICBmbG9hdCB0ZXh0TGVuZ3RoOworfTsKKworYm9vbCBTVkdUZXh0UXVlcnk6OnRleHRM
ZW5ndGhDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRl
eHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Cit7CisgICAgVGV4dExl
bmd0aERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxUZXh0TGVuZ3RoRGF0YSo+KHF1ZXJ5RGF0YSk7
CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+c3R5
bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGlz
VmVydGljYWxXcml0aW5nTW9kZShzdHlsZS0+c3ZnU3R5bGUoKSk7CisgICAgZmxvYXQgcGFydExl
bmd0aCA9IGlzVmVydGljYWxUZXh0ID8gcGFydC5oZWlnaHQgOiBwYXJ0LndpZHRoOworCisgICAg
ZGF0YS0+dGV4dExlbmd0aCArPSBtYXBMZW5ndGhUaHJvdWdoQ2h1bmtUcmFuc2Zvcm1hdGlvbih0
ZXh0Qm94LCBpc1ZlcnRpY2FsVGV4dCwgcGFydExlbmd0aCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitmbG9hdCBTVkdUZXh0UXVlcnk6OnRleHRMZW5ndGgoKSBjb25zdAoreworICAgIGlmICht
X3RleHRCb3hlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgVGV4dExl
bmd0aERhdGEgZGF0YTsKKyAgICBleGVjdXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0UXVlcnk6OnRl
eHRMZW5ndGhDYWxsYmFjayk7CisgICAgcmV0dXJuIGRhdGEudGV4dExlbmd0aDsKK30KKworLy8g
c3ViU3RyaW5nTGVuZ3RoKCkgaW1wbGVtZW50YXRpb24KK3N0cnVjdCBTdWJTdHJpbmdMZW5ndGhE
YXRhIDogU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKKyAgICBTdWJTdHJpbmdMZW5ndGhEYXRhKHVuc2ln
bmVkIHF1ZXJ5U3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgcXVlcnlMZW5ndGgpCisgICAgICAgIDog
c3RhcnRQb3NpdGlvbihxdWVyeVN0YXJ0UG9zaXRpb24pCisgICAgICAgICwgbGVuZ3RoKHF1ZXJ5
TGVuZ3RoKQorICAgICAgICAsIHN1YlN0cmluZ0xlbmd0aCgwLjBmKQorICAgIHsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKworICAg
IGZsb2F0IHN1YlN0cmluZ0xlbmd0aDsKK307CisKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjpzdWJTdHJp
bmdMZW5ndGhDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRleHRCb3gq
IHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Cit7CisgICAgU3Vi
U3RyaW5nTGVuZ3RoRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFN1YlN0cmluZ0xlbmd0aERhdGEq
PihxdWVyeURhdGEpOworCisgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5zdGFydFBvc2l0
aW9uOworICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBkYXRhLT5sZW5ndGg7
CisgICAgaWYgKCFtYXBTdGFydEFuZExlbmd0aEludG9DaHVua1BhcnRDb29yZGluYXRlcyhxdWVy
eURhdGEsIHRleHRCb3gsIHBhcnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+dGV4
dFJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIGJvb2wgaXNW
ZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoc3R5bGUtPnN2Z1N0eWxlKCkpOwor
ICAgIGZsb2F0IHBhcnRMZW5ndGggPSBtZWFzdXJlQ2hhcmFjdGVyUmFuZ2UodGV4dEJveCwgc3R5
bGUsIGlzVmVydGljYWxXcml0aW5nTW9kZShzdHlsZS0+c3ZnU3R5bGUoKSksIHBhcnQub2Zmc2V0
ICsgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKKworICAgIGRh
dGEtPnN1YlN0cmluZ0xlbmd0aCArPSBtYXBMZW5ndGhUaHJvdWdoQ2h1bmtUcmFuc2Zvcm1hdGlv
bih0ZXh0Qm94LCBpc1ZlcnRpY2FsVGV4dCwgcGFydExlbmd0aCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitmbG9hdCBTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBzdGFy
dFBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Cit7CisgICAgaWYgKG1fdGV4dEJveGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBTdWJTdHJpbmdMZW5ndGhE
YXRhIGRhdGEoc3RhcnRQb3NpdGlvbiwgbGVuZ3RoKTsKKyAgICBleGVjdXRlUXVlcnkoJmRhdGEs
ICZTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKTsKKyAgICByZXR1cm4gZGF0
YS5zdWJTdHJpbmdMZW5ndGg7Cit9CisKKy8vIHN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlcigpIGlt
cGxlbWVudGF0aW9uCitzdHJ1Y3QgU3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSA6IFNWR1Rl
eHRRdWVyeTo6RGF0YSB7CisgICAgU3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSh1bnNpZ25l
ZCBxdWVyeVBvc2l0aW9uKQorICAgICAgICA6IHBvc2l0aW9uKHF1ZXJ5UG9zaXRpb24pCisgICAg
eworICAgIH0KKworICAgIHVuc2lnbmVkIHBvc2l0aW9uOworICAgIEZsb2F0UG9pbnQgc3RhcnRQ
b3NpdGlvbjsKK307CisKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0
ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRC
b3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Cit7CisgICAgU3RhcnRQb3Np
dGlvbk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFN0YXJ0UG9zaXRpb25PZkNo
YXJhY3RlckRhdGEqPihxdWVyeURhdGEpOworCisgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRh
LT5wb3NpdGlvbjsKKyAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKKyAg
ICBpZiAoIW1hcFN0YXJ0QW5kTGVuZ3RoSW50b0NodW5rUGFydENvb3JkaW5hdGVzKHF1ZXJ5RGF0
YSwgdGV4dEJveCwgcGFydCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBTVkdDaGFyJiBjaGFyYWN0ZXIgPSAqKHBhcnQuZmly
c3RDaGFyYWN0ZXIgKyBzdGFydFBvc2l0aW9uKTsKKyAgICBkYXRhLT5zdGFydFBvc2l0aW9uID0g
dGV4dEJveC0+Y2h1bmtUcmFuc2Zvcm1hdGlvbigpLm1hcFBvaW50KEZsb2F0UG9pbnQoY2hhcmFj
dGVyLngsIGNoYXJhY3Rlci55KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0Zsb2F0UG9pbnQg
U1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24p
IGNvbnN0Cit7CisgICAgaWYgKG1fdGV4dEJveGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UG9pbnQoKTsKKworICAgIFN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckRhdGEgZGF0YShw
b3NpdGlvbik7CisgICAgZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpzdGFydFBv
c2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk7CisgICAgcmV0dXJuIGRhdGEuc3RhcnRQb3NpdGlv
bjsKK30KKworLy8gZW5kUG9zaXRpb25PZkNoYXJhY3RlcigpIGltcGxlbWVudGF0aW9uCitzdHJ1
Y3QgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEgOiBTVkdUZXh0UXVlcnk6OkRhdGEgeworICAg
IEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKHVuc2lnbmVkIHF1ZXJ5UG9zaXRpb24pCisgICAg
ICAgIDogcG9zaXRpb24ocXVlcnlQb3NpdGlvbikKKyAgICB7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgcG9zaXRpb247CisgICAgRmxvYXRQb2ludCBlbmRQb3NpdGlvbjsKK307CisKK2Jvb2wgU1ZH
VGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRh
LCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0
JiBwYXJ0KSBjb25zdAoreworICAgIEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0g
c3RhdGljX2Nhc3Q8RW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOworCisg
ICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICBpbnQgZW5kUG9zaXRp
b24gPSBzdGFydFBvc2l0aW9uICsgMTsKKyAgICBpZiAoIW1hcFN0YXJ0QW5kTGVuZ3RoSW50b0No
dW5rUGFydENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgdGV4dEJveCwgcGFydCwgc3RhcnRQb3NpdGlv
biwgZW5kUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBTVkdD
aGFyJiBjaGFyYWN0ZXIgPSAqKHBhcnQuZmlyc3RDaGFyYWN0ZXIgKyBzdGFydFBvc2l0aW9uKTsK
KyAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoY2hhcmFjdGVyLngsIGNoYXJhY3Rl
ci55KTsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigp
LT5zdHlsZSgpOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBib29sIGlzVmVydGljYWxUZXh0
ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN0eWxlLT5zdmdTdHlsZSgpKTsKKyAgICBmbG9hdCBn
bHlwaEFkdmFuY2UgPSBtZWFzdXJlQ2hhcmFjdGVyUmFuZ2UodGV4dEJveCwgc3R5bGUsIGlzVmVy
dGljYWxUZXh0LCBwYXJ0Lm9mZnNldCArIHN0YXJ0UG9zaXRpb24sIDEpOworCisgICAgaWYgKGlz
VmVydGljYWxUZXh0KQorICAgICAgICBkYXRhLT5lbmRQb3NpdGlvbi5tb3ZlKDAuMGYsIGdseXBo
QWR2YW5jZSk7CisgICAgZWxzZQorICAgICAgICBkYXRhLT5lbmRQb3NpdGlvbi5tb3ZlKGdseXBo
QWR2YW5jZSwgMC4wZik7CisKKyAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IHRleHRCb3gtPmNodW5r
VHJhbnNmb3JtYXRpb24oKS5tYXBQb2ludChkYXRhLT5lbmRQb3NpdGlvbik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0Zsb2F0UG9pbnQgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFj
dGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmIChtX3RleHRCb3hlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisKKyAgICBFbmRQb3NpdGlvbk9m
Q2hhcmFjdGVyRGF0YSBkYXRhKHBvc2l0aW9uKTsKKyAgICBleGVjdXRlUXVlcnkoJmRhdGEsICZT
VkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk7CisgICAgcmV0dXJu
IGRhdGEuZW5kUG9zaXRpb247Cit9CisKKy8vIHJvdGF0aW9uT2ZDaGFyYWN0ZXIoKSBpbXBsZW1l
bnRhdGlvbgorc3RydWN0IFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhIDogU1ZHVGV4dFF1ZXJ5OjpE
YXRhIHsKKyAgICBSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSh1bnNpZ25lZCBxdWVyeVBvc2l0aW9u
KQorICAgICAgICA6IHBvc2l0aW9uKHF1ZXJ5UG9zaXRpb24pCisgICAgICAgICwgcm90YXRpb24o
MC4wZikKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgcG9zaXRpb247CisgICAgZmxvYXQg
cm90YXRpb247Cit9OworCitib29sIFNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3RlckNh
bGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCwg
Y29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkgY29uc3QKK3sKKyAgICBSb3RhdGlvbk9mQ2hh
cmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhKj4o
cXVlcnlEYXRhKTsKKworICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Cisg
ICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgaWYgKCFtYXBTdGFy
dEFuZExlbmd0aEludG9DaHVua1BhcnRDb29yZGluYXRlcyhxdWVyeURhdGEsIHRleHRCb3gsIHBh
cnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3QgU1ZHQ2hhciYgY2hhcmFjdGVyID0gKihwYXJ0LmZpcnN0Q2hhcmFjdGVyICsg
c3RhcnRQb3NpdGlvbik7CisgICAgZGF0YS0+cm90YXRpb24gPSBjaGFyYWN0ZXIuYW5nbGU7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Zsb2F0IFNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJh
Y3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAobV90ZXh0Qm94ZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIFJvdGF0aW9uT2ZDaGFyYWN0ZXJE
YXRhIGRhdGEocG9zaXRpb24pOworICAgIGV4ZWN1dGVRdWVyeSgmZGF0YSwgJlNWR1RleHRRdWVy
eTo6cm90YXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKTsKKyAgICByZXR1cm4gZGF0YS5yb3RhdGlv
bjsKK30KKworLy8gZXh0ZW50T2ZDaGFyYWN0ZXIoKSBpbXBsZW1lbnRhdGlvbgorc3RydWN0IEV4
dGVudE9mQ2hhcmFjdGVyRGF0YSA6IFNWR1RleHRRdWVyeTo6RGF0YSB7CisgICAgRXh0ZW50T2ZD
aGFyYWN0ZXJEYXRhKHVuc2lnbmVkIHF1ZXJ5UG9zaXRpb24pCisgICAgICAgIDogcG9zaXRpb24o
cXVlcnlQb3NpdGlvbikKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgcG9zaXRpb247Cisg
ICAgRmxvYXRSZWN0IGV4dGVudDsKK307CisKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNo
YXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCog
dGV4dEJveCwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYgcGFydCkgY29uc3QKK3sKKyAgICBFeHRl
bnRPZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFeHRlbnRPZkNoYXJhY3RlckRh
dGEqPihxdWVyeURhdGEpOworCisgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlv
bjsKKyAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKKyAgICBpZiAoIW1h
cFN0YXJ0QW5kTGVuZ3RoSW50b0NodW5rUGFydENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgdGV4dEJv
eCwgcGFydCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCkt
PnN0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIGNvbnN0IFNWR0NoYXImIGNoYXJh
Y3RlciA9ICoocGFydC5maXJzdENoYXJhY3RlciArIHN0YXJ0UG9zaXRpb24pOworICAgIGRhdGEt
PmV4dGVudCA9IHRleHRCb3gtPmNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhzdHlsZSwgcGFydC5v
ZmZzZXQgKyBzdGFydFBvc2l0aW9uLCBjaGFyYWN0ZXIpOworICAgIHJldHVybiB0cnVlOworfQor
CitGbG9hdFJlY3QgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3QKK3sKKyAgICBpZiAobV90ZXh0Qm94ZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBFeHRlbnRPZkNoYXJhY3RlckRhdGEgZGF0YShwb3Np
dGlvbik7CisgICAgZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNo
YXJhY3RlckNhbGxiYWNrKTsKKyAgICByZXR1cm4gZGF0YS5leHRlbnQ7Cit9CisKKy8vIGNoYXJh
Y3Rlck51bWJlckF0UG9zaXRpb24oKSBpbXBsZW1lbnRhdGlvbgorc3RydWN0IENoYXJhY3Rlck51
bWJlckF0UG9zaXRpb25EYXRhIDogU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKKyAgICBDaGFyYWN0ZXJO
dW1iZXJBdFBvc2l0aW9uRGF0YShjb25zdCBGbG9hdFBvaW50JiBxdWVyeVBvc2l0aW9uKQorICAg
ICAgICA6IGNoYXJhY3Rlck51bWJlcigwKQorICAgICAgICAsIHBvc2l0aW9uKHF1ZXJ5UG9zaXRp
b24pCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXJhY3Rlck51bWJlcjsKKyAgICBG
bG9hdFBvaW50IHBvc2l0aW9uOworfTsKKworYm9vbCBTVkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51
bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR0lubGluZVRl
eHRCb3gqIHRleHRCb3gsIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmIHBhcnQpIGNvbnN0Cit7Cisg
ICAgQ2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxDaGFy
YWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YSo+KHF1ZXJ5RGF0YSk7CisKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBBU1NFUlQo
c3R5bGUpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0Lmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIEZsb2F0UmVjdCBleHRlbnQodGV4dEJveC0+Y2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVz
KHN0eWxlLCBwYXJ0Lm9mZnNldCArIGksICoocGFydC5maXJzdENoYXJhY3RlciArIGkpKSk7Cisg
ICAgICAgIGlmIChleHRlbnQuY29udGFpbnMoZGF0YS0+cG9zaXRpb24pKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgKytkYXRhLT5jaGFyYWN0ZXJOdW1iZXI7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1i
ZXJBdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAoreworICAgIGlm
IChtX3RleHRCb3hlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIENoYXJh
Y3Rlck51bWJlckF0UG9zaXRpb25EYXRhIGRhdGEocG9zaXRpb24pOworICAgIGlmICghZXhlY3V0
ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uQ2Fs
bGJhY2spKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gZGF0YS5jaGFyYWN0ZXJO
dW1iZXI7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0
UXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0UXVlcnkuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRRdWVyeS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFNW
R1RleHRRdWVyeV9oCisjZGVmaW5lIFNWR1RleHRRdWVyeV9oCisKKy8vIEZJWE1FOiBUaGlzIGNv
ZGUgaXMgY3VycmVudGx5IGRlYWN0aXZhdGVkLCB1bnRpbCB0aGUgU1ZHIFRleHQgcmV3cml0ZSBw
YXRjaCBsYW5kcy4KKyNpZiBFTkFCTEUoU1ZHKSAmJiAwCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IElubGluZUZsb3dCb3g7CitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJTdHlsZTsK
K2NsYXNzIFNWR0lubGluZVRleHRCb3g7CitzdHJ1Y3QgU1ZHVGV4dENodW5rUGFydDsKKworY2xh
c3MgU1ZHVGV4dFF1ZXJ5IHsKK3B1YmxpYzoKKyAgICBTVkdUZXh0UXVlcnkoUmVuZGVyT2JqZWN0
Kik7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnMoKSBjb25zdDsKKyAgICBmbG9h
dCB0ZXh0TGVuZ3RoKCkgY29uc3Q7CisgICAgZmxvYXQgc3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVk
IHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBz
dGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIEZs
b2F0UG9pbnQgZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7
CisgICAgZmxvYXQgcm90YXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7
CisgICAgRmxvYXRSZWN0IGV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25z
dDsKKyAgICBpbnQgY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisKKyAgICAvLyBQdWJsaWMgaGVscGVyIHN0cnVjdC4gUHJpdmF0ZSBjbGFzc2VzIGlu
IFNWR1RleHRRdWVyeSBpbmhlcml0IGZyb20gaXQuCisgICAgc3RydWN0IERhdGE7CisKK3ByaXZh
dGU6CisgICAgdHlwZWRlZiBib29sIChTVkdUZXh0UXVlcnk6OipQcm9jZXNzVGV4dENodW5rUGFy
dENhbGxiYWNrKShEYXRhKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRD
aHVua1BhcnQmKSBjb25zdDsKKyAgICBib29sIGV4ZWN1dGVRdWVyeShEYXRhKiwgUHJvY2Vzc1Rl
eHRDaHVua1BhcnRDYWxsYmFjaykgY29uc3Q7CisKKyAgICB2b2lkIGNvbGxlY3RUZXh0Qm94ZXNJ
bkZsb3dCb3goSW5saW5lRmxvd0JveCopOworICAgIGZsb2F0IG1lYXN1cmVDaGFyYWN0ZXJSYW5n
ZShjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgUmVuZGVyU3R5bGUqLCBib29sIGlzVmVydGljYWxU
ZXh0LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGxlbmd0aCkgY29uc3Q7CisgICAgYm9vbCBtYXBT
dGFydEFuZExlbmd0aEludG9DaHVua1BhcnRDb29yZGluYXRlcyhEYXRhKiwgY29uc3QgU1ZHSW5s
aW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmLCBpbnQmIHN0YXJ0UG9zaXRpb24s
IGludCYgZW5kUG9zaXRpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgbnVtYmVyT2ZD
aGFyYWN0ZXJzQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBjb25zdCBT
VkdUZXh0Q2h1bmtQYXJ0JikgY29uc3Q7CisgICAgYm9vbCB0ZXh0TGVuZ3RoQ2FsbGJhY2soRGF0
YSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqLCBjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JikgY29u
c3Q7CisgICAgYm9vbCBzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHSW5s
aW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25zdDsKKyAgICBib29sIHN0
YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdJbmxpbmVUZXh0
Qm94KiwgY29uc3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OworICAgIGJvb2wgZW5kUG9zaXRp
b25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgY29u
c3QgU1ZHVGV4dENodW5rUGFydCYpIGNvbnN0OworICAgIGJvb2wgcm90YXRpb25PZkNoYXJhY3Rl
ckNhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdJbmxpbmVUZXh0Qm94KiwgY29uc3QgU1ZHVGV4dENo
dW5rUGFydCYpIGNvbnN0OworICAgIGJvb2wgZXh0ZW50T2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRh
KiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25z
dDsKKyAgICBib29sIGNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiwgY29u
c3QgU1ZHSW5saW5lVGV4dEJveCosIGNvbnN0IFNWR1RleHRDaHVua1BhcnQmKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+IG1fdGV4dEJveGVzOworfTsK
KworfQorCisjZW5kaWYKKyNlbmRpZgo=
</data>
<flag name="review"
          id="45414"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>