<?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>29664</bug_id>
          
          <creation_ts>2009-09-22 17:33:54 -0700</creation_ts>
          <short_desc>[Chromium] Add initial V8 bindings for WebGL</short_desc>
          <delta_ts>2009-12-15 14:41:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>149291</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-09-22 17:33:54 -0700</bug_when>
    <thetext>Need to add the initial V8 bindings for the WebGL implementation already in WebKit. Refer to the following bugs for more information:

https://bugs.webkit.org/show_bug.cgi?id=28018
https://bugs.webkit.org/show_bug.cgi?id=29010

This patch also slightly changes how WebCore/platform/graphics/GraphicsContext3D.h abstracts out its platform-dependent portions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149295</commentid>
    <comment_count>1</comment_count>
      <attachid>39968</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-09-22 17:40:10 -0700</bug_when>
    <thetext>Created attachment 39968
Adds V8 bindings for WebGL implementation and modifies how GraphicsContext3D abstracts platform-dependent portions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149487</commentid>
    <comment_count>2</comment_count>
      <attachid>39968</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-23 13:24:57 -0700</bug_when>
    <thetext>Comment on attachment 39968
Adds V8 bindings for WebGL implementation and modifies how GraphicsContext3D abstracts platform-dependent portions.

Welcome to the club, kbr! :)

Here&apos;s your first round of hazing. I only looked at style so far. Let&apos;s get that out of the way first.

&gt; +    if (argLen != 1) {
&gt; +        return throwError(&quot;Wrong number of arguments specified to constructor (requires 1)&quot;);
&gt; +    }

No braces for one-liner conditions.

&gt; +    int len = 0;
&gt; +    if (!args[0]-&gt;IsInt32()) {
&gt; +        return throwError(&quot;Argument to CanvasArrayBuffer constructor was not an integer&quot;);
&gt; +    }

Ditto.

&gt; +        if (argLen == 0) {
&gt; +            return throwError(&quot;No arguments specified to constructor&quot;);
&gt; +        }

Ditto.

&gt; +
&gt; +        // See whether the first argument is a CanvasArrayBuffer.
&gt; +        if (V8CanvasArrayBuffer::HasInstance(args[0])) {
&gt; +            if (argLen &gt; 3) {
&gt; +                return throwError(&quot;Wrong number of arguments to new Canvas&lt;T&gt;Array(CanvasArrayBuffer, int, int)&quot;);
&gt; +            }

Ditto.

&gt; +            CanvasArrayBuffer* buf =
&gt; +                V8DOMWrapper::convertToNativeObject&lt;CanvasArrayBuffer&gt;(V8ClassIndex::CANVASARRAYBUFFER,
&gt; +                                                                       args[0]-&gt;ToObject());

BTW, no need to constrain to 80 cols. WebKit style allows you to run free.

&gt; +            if (buf == NULL) {
&gt; +                return throwError(&quot;Could not convert argument 0 to a CanvasArrayBuffer&quot;);
&gt; +            }

No braces.

&gt; +            int offset = 0;
&gt; +            if (argLen &gt; 1) {
&gt; +                offset = toInt32(args[1], ok);
&gt; +                if (!ok) {
&gt; +                    return throwError(&quot;Could not convert argument 1 to an integer&quot;);
&gt; +                }

Ditto.

&gt; +            if (argLen &gt; 2) {
&gt; +                length = toInt32(args[2], ok);
&gt; +                if (!ok) {
&gt; +                    return throwError(&quot;Could not convert argument 2 to an integer&quot;);
&gt; +                }

Ditto.

&gt; +            }
&gt; +            if (length &lt; 0) {
&gt; +                return throwError(&quot;Length / offset out of range&quot;);

Ditto and elsewhere.

&gt; +                if (!val-&gt;IsNumber()) {
&gt; +                    char buf[256];
&gt; +                    sprintf(buf, &quot;Could not convert array element %d to a number&quot;, i);

Probably shouldn&apos;t be sprintf&apos;ing. LOG(...), perhaps?

&gt; +    if ((index &lt; 0) || (index &gt;= byteBuffer-&gt;length()))

too many parens here and elsewhere.

&gt; +    if ((index &gt;= 0) &amp;&amp; (index &lt; array-&gt;length())) {

Ditto.

&gt; +    float* data;
&gt; +    if (!tryFastMalloc(len * sizeof(float)).getValue(data)) {
&gt; +        return NULL;

return 0; here and elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149679</commentid>
    <comment_count>3</comment_count>
      <attachid>40047</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-09-23 23:15:23 -0700</bug_when>
    <thetext>Created attachment 40047
Revised patch

Throughout the patch, fixed the style issues that were pointed out.

sprintf is being used to construct an informative exception message for JavaScript. Logging would not produce the desired results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150044</commentid>
    <comment_count>4</comment_count>
      <attachid>40047</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-25 10:10:18 -0700</bug_when>
    <thetext>Comment on attachment 40047
Revised patch

We&apos;re almost there!

&gt; +        if (argLen == 0) {
&gt; +            return throwError(&quot;No arguments specified to constructor&quot;);
&gt; +        }

no braces for one-liners.

&gt; +        } else {
&gt; +            return throwError(&quot;Could not convert argument 0 to either an int32 or an array&quot;);
&gt; +        }

ditto.

&gt; +    if (data == NULL) {

if (!data) {

&gt; +    if (data == NULL) {

ditto.

&gt; +    if (data == NULL) {

ditto.

&gt; +        OwnPtr&lt;GraphicsContext3DInternal&gt; d;

would love a slightly more descriptive name :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150178</commentid>
    <comment_count>5</comment_count>
      <attachid>40150</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-09-25 15:15:13 -0700</bug_when>
    <thetext>Created attachment 40150
Revised patch

Made above requested changes. Comments:

&gt; &gt; +        } else {
&gt; &gt; +            return throwError(&quot;Could not convert argument 0 to either an int32 or an array&quot;);
&gt; &gt; +        }
&gt; 
&gt; ditto.

Changed this, but I think leaving the braces off the trailing else clause is ugly.

&gt; &gt; +        OwnPtr&lt;GraphicsContext3DInternal&gt; d;
&gt; 
&gt; would love a slightly more descriptive name :)

Renamed to m_internal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150189</commentid>
    <comment_count>6</comment_count>
      <attachid>40150</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-25 16:04:47 -0700</bug_when>
    <thetext>Comment on attachment 40150
Revised patch

r=me.

Marking cq+ as this shouldn&apos;t break anything, thanks to the compile flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150226</commentid>
    <comment_count>7</comment_count>
      <attachid>40150</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-25 19:13:24 -0700</bug_when>
    <thetext>Comment on attachment 40150
Revised patch

Clearing flags on attachment: 40150

Committed r48781: &lt;http://trac.webkit.org/changeset/48781&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150227</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-25 19:13:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39968</attachid>
            <date>2009-09-22 17:40:10 -0700</date>
            <delta_ts>2009-09-23 23:15:23 -0700</delta_ts>
            <desc>Adds V8 bindings for WebGL implementation and modifies how GraphicsContext3D abstracts platform-dependent portions.</desc>
            <filename>webgl-v8-bindings.patch</filename>
            <type>text/plain</type>
            <size>85832</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODY2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMDktMDktMjIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdig/KS4KKworICAgICAg
ICBbQ2hyb21pdW1dIEFkZCBpbml0aWFsIFY4IGJpbmRpbmdzIGZvciBXZWJHTAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk2NjQKKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBw
ZXI6OmdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4LmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzQXJyYXlCdWZmZXJDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2FudmFzQXJyYXlDdXN0b20uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RD
YW52YXNBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQnl0ZUFy
cmF5Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RF
Q0wpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAg
ICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9TRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOENhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVE
X1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX1NF
VFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzSW50QXJyYXlDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJD
b3JlOjpJTkRFWEVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpqc0FycmF5VG9GbG9hdEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzQXJy
YXlUb0ludEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6Cisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6dmVydGV4QXR0cmliQW5kVW5p
Zm9ybUhlbHBlcmYpOgorICAgICAgICAoV2ViQ29yZTo6dW5pZm9ybUhlbHBlcmkpOgorICAgICAg
ICAoV2ViQ29yZTo6dW5pZm9ybU1hdHJpeEhlbHBlcik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJP
UEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVS
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNM
KToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAg
KFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6SU5E
RVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJU
WV9TRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToK
KyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJB
Q0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFz
RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisKIDIw
MDktMDktMjIgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5
cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ4NjU5KQor
KysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTc2LDExICs3NiwyNyBA
QAogICAgICAgICAgICAgJ2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5pZGwnLAogICAgICAgICAg
ICAgJ2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsJywKICAgICAgICAgICAgICdkb20vV2hl
ZWxFdmVudC5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0FycmF5LmlkbCcs
CisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaWRsJywKKyAgICAg
ICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuaWRsJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9DYW52YXNCeXRlQXJyYXkuaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9D
YW52YXNGbG9hdEFycmF5LmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzRnJh
bWVidWZmZXIuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5p
ZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0ludEFycmF5LmlkbCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwnLAogICAgICAgICAgICAgJ2h0
bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZh
cy9DYW52YXNQcm9ncmFtLmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyYnVmZmVyLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1NoYWRlci5pZGwn
LAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuaWRsJywKKyAgICAg
ICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGwnLAorICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaWRsJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9E
YXRhR3JpZENvbHVtbi5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvRGF0YUdyaWRDb2x1bW5MaXN0
LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlLmlkbCcsCkBAIC02MDgsNyArNjI0LDE3IEBA
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RXb3JrZXJDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3Rv
bS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5Q3Vz
dG9tLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5QnVm
ZmVyQ3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFz
Qnl0ZUFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2FudmFzSW50QXJyYXlDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhDYW52YXNGbG9hdEFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCcsCisg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRJbnRBcnJheUN1
c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHAnLApAQCAtMTIyMiwxOCArMTI0OCw1MiBAQAogICAgICAgICAgICAgJ2hpc3Rv
cnkvSGlzdG9yeUl0ZW0uaCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9QYWdlQ2FjaGUuY3BwJywK
ICAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5oJywKKyAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9DYW52YXNBcnJheS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0Fy
cmF5LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0FycmF5QnVmZmVyLmNwcCcs
CisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaCcsCisgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVyLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9j
YW52YXMvQ2FudmFzQnVmZmVyLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0J5
dGVBcnJheS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5o
JywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNGbG9hdEFycmF5LmNwcCcsCisgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5oJywKKyAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9DYW52YXNGcmFtZWJ1ZmZlci5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZh
c0dyYWRpZW50LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQu
aCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzSW50QXJyYXkuY3BwJywKKyAgICAg
ICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5oJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9DYW52YXNPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52
YXNPYmplY3QuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5jcHAn
LAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaCcsCiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2Fu
dmFzUHJvZ3JhbS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Byb2dyYW0u
aCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCcsCisg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmgnLAogICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwJywKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgnLAogICAgICAgICAgICAgJ2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAnLAogICAgICAgICAgICAgJ2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCcsCisgICAgICAgICAgICAnaHRtbC9j
YW52YXMvQ2FudmFzU2hhZGVyLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFz
U2hhZGVyLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuY3Bw
JywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNTaG9ydEFycmF5LmgnLAogICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzVGV4
dHVyZS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1RleHR1cmUuaCcsCisg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuY3BwJywKKyAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oJywKKyAgICAg
ICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmNwcCcsCisgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oJywKKyAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuY3BwJywKKyAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCcsCiAgICAgICAgICAgICAn
aHRtbC9Db2xsZWN0aW9uQ2FjaGUuY3BwJywKICAgICAgICAgICAgICdodG1sL0NvbGxlY3Rpb25D
YWNoZS5oJywKICAgICAgICAgICAgICdodG1sL0NvbGxlY3Rpb25UeXBlLmgnLApAQCAtMjA4Miw2
ICsyMTQyLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oJywKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNDg2NTkpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTk2LDcgKzE1OTYsMjQgQEAgc3ViIElzUmVmUHRyVHlwZQogewogICAgIG15ICR0eXBlID0g
c2hpZnQ7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkF0dHIiOworICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICJDYW52YXNBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZh
c0FycmF5QnVmZmVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzQm9vbGVhbkFy
cmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzQnl0ZUFycmF5IjsKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzQnVmZmVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlw
ZSBlcSAiQ2FudmFzRmxvYXRBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZh
c0ZyYW1lYnVmZmVyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzR3JhZGllbnQi
OworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNJbnRBcnJheSI7CisgICAgcmV0dXJu
IDEgaWYgJHR5cGUgZXEgIkNhbnZhc09iamVjdCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEg
IkNhbnZhc1Byb2dyYW0iOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNSZW5kZXJi
dWZmZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNTaGFkZXIiOworICAgIHJl
dHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNTaG9ydEFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiQ2FudmFzVGV4dHVyZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZh
c1Vuc2lnbmVkQnl0ZUFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzVW5z
aWduZWRJbnRBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheSI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNsaWVudFJlY3QiOwogICAg
IHJldHVybiAxIGlmICR0eXBlIGVxICJDbGllbnRSZWN0TGlzdCI7CiAgICAgcmV0dXJuIDEgaWYg
JHR5cGUgZXEgIkNEQVRBU2VjdGlvbiI7CkBAIC0xNzI1LDYgKzE3NDIsMTkgQEAgc3ViIEdldE5h
dGl2ZVR5cGUKIG15ICV0eXBlQ2FuRmFpbENvbnZlcnNpb24gPSAoCiAgICAgIkF0b21pY1N0cmlu
ZyIgPT4gMCwKICAgICAiQXR0ciIgPT4gMSwKKyAgICAiQ2FudmFzQXJyYXkiID0+IDAsCisgICAg
IkNhbnZhc0J1ZmZlciIgPT4gMCwKKyAgICAiQ2FudmFzQnl0ZUFycmF5IiA9PiAwLAorICAgICJD
YW52YXNGbG9hdEFycmF5IiA9PiAwLAorICAgICJDYW52YXNGcmFtZWJ1ZmZlciIgPT4gMCwKKyAg
ICAiQ2FudmFzR3JhZGllbnQiID0+IDAsCisgICAgIkNhbnZhc0ludEFycmF5IiA9PiAwLAorICAg
ICJDYW52YXNQaXhlbEFycmF5IiA9PiAwLAorICAgICJDYW52YXNQcm9ncmFtIiA9PiAwLAorICAg
ICJDYW52YXNSZW5kZXJidWZmZXIiID0+IDAsCisgICAgIkNhbnZhc1NoYWRlciIgPT4gMCwKKyAg
ICAiQ2FudmFzU2hvcnRBcnJheSIgPT4gMCwKKyAgICAiQ2FudmFzVGV4dHVyZSIgPT4gMCwKICAg
ICAiQ29tcGFyZUhvdyIgPT4gMCwKICAgICAiRGF0YUdyaWRDb2x1bW4iID0+IDAsCiAgICAgIkRP
TVN0cmluZyIgPT4gMCwKQEAgLTE3MzQsOCArMTc2NCwxMSBAQCBteSAldHlwZUNhbkZhaWxDb252
ZXJzaW9uID0gKAogICAgICJFdmVudCIgPT4gMCwKICAgICAiRXZlbnRMaXN0ZW5lciIgPT4gMCwK
ICAgICAiRXZlbnRUYXJnZXQiID0+IDAsCisgICAgIkhUTUxDYW52YXNFbGVtZW50IiA9PiAwLAog
ICAgICJIVE1MRWxlbWVudCIgPT4gMCwKKyAgICAiSFRNTEltYWdlRWxlbWVudCIgPT4gMCwKICAg
ICAiSFRNTE9wdGlvbkVsZW1lbnQiID0+IDAsCisgICAgIkhUTUxWaWRlb0VsZW1lbnQiID0+IDAs
CiAgICAgIk5vZGUiID0+IDAsCiAgICAgIk5vZGVGaWx0ZXIiID0+IDAsCiAgICAgIk1lc3NhZ2VQ
b3J0IiA9PiAwLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0luY2x1ZGUuaAko
cmV2aXNpb24gNDg2NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywyOSBAQAogCiAjaW5jbHVkZSAiQWJzdHJh
Y3RXb3JrZXIuaCIKICNpbmNsdWRlICJCYXJJbmZvLmgiCisjaW5jbHVkZSAiQ2FudmFzQXJyYXku
aCIKKyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc0J1ZmZl
ci5oIgorI2luY2x1ZGUgIkNhbnZhc0J5dGVBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc0Zsb2F0
QXJyYXkuaCIKKyNpbmNsdWRlICJDYW52YXNGcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgIkNhbnZh
c0dyYWRpZW50LmgiCisjaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKKyNpbmNsdWRlICJDYW52
YXNPYmplY3QuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFz
UGl4ZWxBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc1Byb2dyYW0uaCIKKyNpbmNsdWRlICJDYW52
YXNSZW5kZXJidWZmZXIuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNELmgiCisjaW5jbHVkZSAiQ2FudmFzU2hhZGVyLmgiCisjaW5jbHVkZSAi
Q2FudmFzU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Lmgi
CisjaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc1Vu
c2lnbmVkU2hvcnRBcnJheS5oIgogI2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCisjaW5jbHVkZSAi
Q2FudmFzVGV4dHVyZS5oIgogI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEuaCIKICNpbmNsdWRlICJD
bGllbnRSZWN0LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdExpc3QuaCIKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25lLmNwcAkocmV2aXNpb24gNDg2
NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMjcgQEAKICNpbmNsdWRlICJiaW5kaW5ncy9WOEFi
c3RyYWN0V29ya2VyLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOEF0dHIuY3BwIgogI2luY2x1
ZGUgImJpbmRpbmdzL1Y4QmFySW5mby5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNB
cnJheS5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNBcnJheUJ1ZmZlci5jcHAiCisj
aW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNCdWZmZXIuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdz
L1Y4Q2FudmFzQnl0ZUFycmF5LmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc0Zsb2F0
QXJyYXkuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzRnJhbWVidWZmZXIuY3BwIgog
I2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzR3JhZGllbnQuY3BwIgorI2luY2x1ZGUgImJpbmRp
bmdzL1Y4Q2FudmFzSW50QXJyYXkuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzUGF0
dGVybi5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNQaXhlbEFycmF5LmNwcCIKKyNp
bmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1Byb2dyYW0uY3BwIgorI2luY2x1ZGUgImJpbmRpbmdz
L1Y4Q2FudmFzUmVuZGVyYnVmZmVyLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNTaGFkZXIuY3BwIgorI2luY2x1
ZGUgImJpbmRpbmdzL1Y4Q2FudmFzU2hvcnRBcnJheS5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3Mv
VjhDYW52YXNUZXh0dXJlLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5LmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1Vuc2lnbmVkSW50QXJy
YXkuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmNw
cCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOENEQVRBU2VjdGlvbi5jcHAiCiAjaW5jbHVkZSAiYmlu
ZGluZ3MvVjhDaGFyYWN0ZXJEYXRhLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOENsaWVudFJl
Y3QuY3BwIgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24g
NDg2NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzNiw3ICs0MzYsNDAgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IFY4RAogICAgIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKICAgICAv
LyBUaGUgZm9sbG93aW5nIG9iamVjdHMgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhU2NyaXB0LgorICAg
IGNhc2UgVjhDbGFzc0luZGV4OjpDQU5WQVNBUlJBWUJVRkZFUjoKKyAgICAgICAgZGVzY3JpcHRv
ci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKENhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0
b3IpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU0JZVEVB
UlJBWToKKyAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKENh
bnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yKSk7CisgICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNl
VGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0VfSU5ERVhFRF9QUk9QRVJU
WV9HRVRURVIoQ2FudmFzQnl0ZUFycmF5KSwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENh
bnZhc0J5dGVBcnJheSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
Q0FOVkFTRkxPQVRBUlJBWToKKyAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNF
X0NBTExCQUNLKENhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3RvcikpOworICAgICAgICBkZXNjcmlw
dG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX0lO
REVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc0Zsb2F0QXJyYXkpLCBVU0VfSU5ERVhFRF9QUk9Q
RVJUWV9TRVRURVIoQ2FudmFzRmxvYXRBcnJheSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFY4Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVk6CisgICAgICAgIGRlc2NyaXB0b3ItPlNldENh
bGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKSk7CisgICAg
ICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFu
ZGxlcihVU0VfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzSW50QXJyYXkpLCBVU0VfSU5E
RVhFRF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzSW50QXJyYXkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU1NIT1JUQVJSQVk6CisgICAgICAgIGRlc2NyaXB0
b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0
b3IpKTsKKyAgICAgICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVk
UHJvcGVydHlIYW5kbGVyKFVTRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNTaG9ydEFy
cmF5KSwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1Nob3J0QXJyYXkpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVEQllURUFS
UkFZOgorICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soQ2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvcikpOworICAgICAgICBkZXNjcmlwdG9yLT5J
bnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX0lOREVYRURf
UFJPUEVSVFlfR0VUVEVSKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KSwgVVNFX0lOREVYRURfUFJP
UEVSVFlfU0VUVEVSKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRElOVEFSUkFZOgorICAgICAgICBk
ZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soQ2FudmFzVW5zaWduZWRJbnRB
cnJheUNvbnN0cnVjdG9yKSk7CisgICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUo
KS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0VfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIo
Q2FudmFzVW5zaWduZWRJbnRBcnJheSksIFVTRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52
YXNVbnNpZ25lZEludEFycmF5KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhDbGFzc0lu
ZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVk6CisgICAgICAgIGRlc2NyaXB0b3ItPlNldENh
bGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rv
cikpOworICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQ
cm9wZXJ0eUhhbmRsZXIoVVNFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheSksIFVTRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25lZFNo
b3J0QXJyYXkpKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIFY4Q2xhc3NJbmRl
eDo6RE9NUEFSU0VSOgogICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FM
TEJBQ0soRE9NUGFyc2VyQ29uc3RydWN0b3IpKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhJbmRleC5jcHAJKHJldmlzaW9uIDQ4NjU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEluZGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDYgKzM5OSwyNSBAQAogI2luY2x1
ZGUgIlY4U2hhcmVkV29ya2VyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisj
aW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJWOENhbnZh
c0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgIlY4
Q2FudmFzQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNCdWZmZXIuaCIKKyNpbmNsdWRl
ICJWOENhbnZhc0Zsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJWOENhbnZhc0ZyYW1lYnVmZmVyLmgi
CisjaW5jbHVkZSAiVjhDYW52YXNJbnRBcnJheS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzUHJvZ3Jh
bS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDYW52
YXNTaGFkZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc1Nob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJW
OENhbnZhc1RleHR1cmUuaCIKKyNpbmNsdWRlICJWOENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Lmgi
CisjaW5jbHVkZSAiVjhDYW52YXNVbnNpZ25lZEludEFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52
YXNVbnNpZ25lZFNob3J0QXJyYXkuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEZ1bmN0aW9uVGVtcGxhdGVGYWN0b3J5IFY4Q2xhc3NJbmRleDo6R2V0RmFjdG9yeShWOFdyYXBw
ZXJUeXBlIHR5cGUpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkocmV2aXNpb24gNDg2NTkpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkod29ya2luZyBjb3B5KQpAQCAtNDQ0LDEy
ICs0NDQsMzUgQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogI2Rl
ZmluZSBET01fT0JKRUNUX1dPUktFUlNfVFlQRVMoVikKICNlbmRpZgogCisjaWYgRU5BQkxFKDNE
X0NBTlZBUykKKyNkZWZpbmUgRE9NX09CSkVDVF8zRF9DQU5WQVNfVFlQRVMoVikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU0FSUkFZLCBDYW52YXNBcnJh
eSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZB
U0FSUkFZQlVGRkVSLCBDYW52YXNBcnJheUJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBWKENBTlZBU0JVRkZFUiwgQ2FudmFzQnVmZmVyKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU0JZVEVBUlJBWSwgQ2FudmFzQnl0
ZUFycmF5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU0ZM
T0FUQVJSQVksIENhbnZhc0Zsb2F0QXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBWKENBTlZBU0ZSQU1FQlVGRkVSLCBDYW52YXNGcmFtZWJ1ZmZlcikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU0lOVEFSUkFZLCBDYW52YXNJbnRBcnJh
eSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU1BST0dS
QU0sIENhbnZhc1Byb2dyYW0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBWKENBTlZBU1JFTkRFUkJVRkZFUiwgQ2FudmFzUmVuZGVyYnVmZmVyKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU1JFTkRFUklOR0NPTlRFWFQzRCwgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEKSAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU1NIQURFUiwg
Q2FudmFzU2hhZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBWKENBTlZBU1NIT1JUQVJSQVksIENhbnZhc1Nob3J0QXJyYXkpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU1RFWFRVUkUsIENhbnZhc1RleHR1cmUpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU1VOU0lHTkVEQllU
RUFSUkFZLCBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSkgICAgICAgICAgICAgICAgIFwKKyAgICBW
KENBTlZBU1VOU0lHTkVESU5UQVJSQVksIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkpICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBWKENBTlZBU1VOU0lHTkVEU0hPUlRBUlJBWSwgQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5KQorI2Vsc2UKKyNkZWZpbmUgRE9NX09CSkVDVF8zRF9DQU5WQVNfVFlQRVMo
VikKKyNlbmRpZgorCiAjZGVmaW5lIERPTV9PQkpFQ1RfVFlQRVMoVikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9NX09CSkVDVF9UWVBFU18xKFYp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9N
X09CSkVDVF9UWVBFU18yKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgRE9NX09CSkVDVF9EQVRBQkFTRV9UWVBFUyhWKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9NX09CSkVDVF9TVE9SQUdFX1RZUEVT
KFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRE9NX09C
SkVDVF9XT1JLRVJTX1RZUEVTKFYpCisgICAgRE9NX09CSkVDVF9XT1JLRVJTX1RZUEVTKFYpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRE9NX09CSkVDVF8z
RF9DQU5WQVNfVFlQRVMoVikKIAogI2lmIEVOQUJMRShTVkcpCiAvLyBTVkdfT0JKRUNUX1RZUEVT
IGFyZSBzdmcgbm9uLW5vZGUsIG5vbi1wb2QgdHlwZXMuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5QnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5QnVmZmVyQ3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQXJyYXlC
dWZmZXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5
QnVmZmVyLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0Fy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQ
cm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52
YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0Fy
cmF5QnVmZmVyLkNvbnRydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwo
KSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fu
bm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpOworCisgICAgaW50IGFyZ0xlbiA9IGFyZ3Mu
TGVuZ3RoKCk7CisgICAgLy8gU3VwcG9ydGVkIGNvbnN0cnVjdG9yczoKKyAgICAvLyBDYW52YXNB
cnJheUJ1ZmZlcihuKSB3aGVyZSBuIGlzIGFuIGludGVnZXI6CisgICAgLy8gICAtLSBjcmVhdGUg
YW4gZW1wdHkgYnVmZmVyIG9mIG4gYnl0ZXMKKworICAgIGlmIChhcmdMZW4gIT0gMSkgeworICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBzcGVjaWZp
ZWQgdG8gY29uc3RydWN0b3IgKHJlcXVpcmVzIDEpIik7CisgICAgfQorCisgICAgaW50IGxlbiA9
IDA7CisgICAgaWYgKCFhcmdzWzBdLT5Jc0ludDMyKCkpIHsKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIkFyZ3VtZW50IHRvIENhbnZhc0FycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHdhcyBub3Qg
YW4gaW50ZWdlciIpOworICAgIH0KKyAgICBsZW4gPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIFJl
ZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQ2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0
ZShsZW4pOworICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVyIGludG8gYSB3cmFwcGVyIG9iamVj
dCBmb3IgdGhlIGFycmF5LgorICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhv
bGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVlCVUZG
RVIpLCBidWZmZXIuZ2V0KCkpOworICAgIHJldHVybiB0b1Y4KGJ1ZmZlci5yZWxlYXNlKCksIGFy
Z3MuSG9sZGVyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNBcnJheUN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzQXJyYXlDdXN0b20uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzQXJyYXlDdXN0b20uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5j
bHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2lu
Y2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8v
IFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIENhbnZhc0FycmF5KkNvbnN0cnVjdG9yIGNh
bGxiYWNrcy4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBBcnJheUNsYXNzPgorICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb25zdHJ1Y3RDYW52YXNBcnJheShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xh
c3NJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5v
dCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKTsKKworICAgICAgICBpbnQgYXJnTGVuID0gYXJn
cy5MZW5ndGgoKTsKKyAgICAgICAgLy8gU3VwcG9ydGVkIGNvbnN0cnVjdG9yczoKKyAgICAgICAg
Ly8gQ2FudmFzPFQ+QXJyYXkobikgd2hlcmUgbiBpcyBhbiBpbnRlZ2VyOgorICAgICAgICAvLyAg
IC0tIGNyZWF0ZSBhbiBlbXB0eSBhcnJheSBvZiBuIGVsZW1lbnRzCisgICAgICAgIC8vIENhbnZh
czxUPkFycmF5KGFycikgd2hlcmUgYXJyIGlzIGFuIGFycmF5OgorICAgICAgICAvLyAgIC0tIGNy
ZWF0ZSBhIENhbnZhczxUPkFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mICJhcnIiCisg
ICAgICAgIC8vIENhbnZhczxUPkFycmF5KGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpCisgICAgICAgIC8v
ICAgLS0gY3JlYXRlIGEgQ2FudmFzPFQ+QXJyYXkgcG9pbnRpbmcgdG8gdGhlIENhbnZhc0FycmF5
QnVmZmVyCisgICAgICAgIC8vICAgICAgImJ1ZiIsIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQg
b2Zmc2V0LCBmb3IgdGhlIGdpdmVuCisgICAgICAgIC8vICAgICAgbGVuZ3RoCisKKyAgICAgICAg
aWYgKGFyZ0xlbiA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm8gYXJn
dW1lbnRzIHNwZWNpZmllZCB0byBjb25zdHJ1Y3RvciIpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gU2VlIHdoZXRoZXIgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgQ2FudmFzQXJyYXlCdWZmZXIu
CisgICAgICAgIGlmIChWOENhbnZhc0FycmF5QnVmZmVyOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkg
eworICAgICAgICAgICAgaWYgKGFyZ0xlbiA+IDMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBuZXcgQ2FudmFzPFQ+QXJy
YXkoQ2FudmFzQXJyYXlCdWZmZXIsIGludCwgaW50KSIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBDYW52YXNBcnJheUJ1ZmZlciogYnVmID0KKyAgICAgICAgICAgICAgICBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNBcnJheUJ1ZmZlcj4oVjhDbGFzc0lu
ZGV4OjpDQU5WQVNBUlJBWUJVRkZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXS0+VG9PYmplY3Qo
KSk7CisgICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgMCB0byBhIENhbnZhc0Fy
cmF5QnVmZmVyIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sIG9rOworICAgICAg
ICAgICAgaW50IG9mZnNldCA9IDA7CisgICAgICAgICAgICBpZiAoYXJnTGVuID4gMSkgeworICAg
ICAgICAgICAgICAgIG9mZnNldCA9IHRvSW50MzIoYXJnc1sxXSwgb2spOworICAgICAgICAgICAg
ICAgIGlmICghb2spIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNv
dWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDEgdG8gYW4gaW50ZWdlciIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBsZW5ndGggPSBidWYtPmJ5dGVM
ZW5ndGgoKSAtIG9mZnNldDsKKyAgICAgICAgICAgIGlmIChhcmdMZW4gPiAyKSB7CisgICAgICAg
ICAgICAgICAgbGVuZ3RoID0gdG9JbnQzMihhcmdzWzJdLCBvayk7CisgICAgICAgICAgICAgICAg
aWYgKCFvaykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQg
bm90IGNvbnZlcnQgYXJndW1lbnQgMiB0byBhbiBpbnRlZ2VyIik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTGVuZ3RoIC8gb2Zmc2V0IG91dCBvZiByYW5nZSIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWZQdHI8QXJyYXlDbGFzcz4gYXJyYXkg
PSBBcnJheUNsYXNzOjpjcmVhdGUoYnVmLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgICAgICBp
ZiAoYXJyYXkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJJ
bnZhbGlkIGFyZ3VtZW50cyB0byBuZXcgQ2FudmFzPFQ+QXJyYXkoQ2FudmFzQXJyYXlCdWZmZXIs
IGludCwgaW50KSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRo
ZSBob2xkZXIgaW50byBhIHdyYXBwZXIgb2JqZWN0IGZvciB0aGUgYXJyYXkuCisgICAgICAgICAg
ICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgY2xhc3NJbmRleCwg
YXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgoYXJyYXkucmVsZWFzZSgpLCBh
cmdzLkhvbGRlcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBsZW4gPSAwOworICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gc3JjQXJyYXk7CisgICAgICAgIGlmIChhcmdMZW4gIT0g
MSkgeworICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1
bWVudHMgdG8gbmV3IENhbnZhczxUPkFycmF5KGludCAvIGFycmF5KSIpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGFyZ3NbMF0tPklzSW50MzIoKSkgeworICAgICAgICAgICAgbGVuID0gdG9J
bnQzMihhcmdzWzBdKTsKKyAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdLT5Jc0FycmF5KCkpIHsK
KyAgICAgICAgICAgIHNyY0FycmF5ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QoYXJnc1sw
XSk7CisgICAgICAgICAgICBpZiAoc3JjQXJyYXkuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDAgdG8gYW4g
YXJyYXkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiA9IHNyY0FycmF5LT5MZW5n
dGgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJD
b3VsZCBub3QgY29udmVydCBhcmd1bWVudCAwIHRvIGVpdGhlciBhbiBpbnQzMiBvciBhbiBhcnJh
eSIpOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPEFycmF5Q2xhc3M+IGFycmF5ID0gQXJy
YXlDbGFzczo6Y3JlYXRlKGxlbik7CisgICAgICAgIGlmICghc3JjQXJyYXkuSXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyBOZWVkIHRvIGNvcHkgdGhlIGluY29taW5nIGFycmF5IGludG8gdGhl
IG5ld2x5IGNyZWF0ZWQgQ2FudmFzQXJyYXkuCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
ID0gc3JjQXJyYXktPkdldCh2ODo6SW50ZWdlcjo6TmV3KGkpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXZhbC0+SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZlsyNTZd
OworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIkNvdWxkIG5vdCBjb252ZXJ0IGFy
cmF5IGVsZW1lbnQgJWQgdG8gYSBudW1iZXIiLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoYnVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YXJyYXktPnNldChpLCB2YWwtPk51bWJlclZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBob2xkZXIgaW50byBhIHdyYXBwZXIgb2Jq
ZWN0IGZvciB0aGUgYXJyYXkuCisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihh
cmdzLkhvbGRlcigpLCBjbGFzc0luZGV4LCBhcnJheS5nZXQoKSk7CisgICAgICAgIHJldHVybiB0
b1Y4KGFycmF5LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDYW52YXNCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1
ZGUgIkNhbnZhc0J5dGVBcnJheS5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlDdXN0b20u
aCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc0J5dGVBcnJh
eUNvbnN0cnVjdG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0J5dGVBcnJheS5Db250
cnVjdG9yIik7CisKKyAgICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJyYXk8Q2FudmFzQnl0ZUFy
cmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQllURUFS
UkFZKSk7Cit9CisKKy8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGJ5dGUgYnVm
ZmVyIGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0
byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYnl0ZSBidWZmZXIgcmFuZ2UgcmV0dXJu
ICJ1bmRlZmluZWQiLgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzQnl0ZUFycmF5KQor
eworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0J5dGVBcnJheS5JbmRleGVkUHJvcGVydHlHZXR0
ZXIiKTsKKyAgICBDYW52YXNCeXRlQXJyYXkqIGJ5dGVCdWZmZXIgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNCeXRlQXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFT
QllURUFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5k
ZXggPj0gYnl0ZUJ1ZmZlci0+bGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOworICAgIHNpZ25lZCBjaGFyIHJlc3VsdDsKKyAgICBpZiAoIWJ5dGVCdWZmZXItPmdldChp
bmRleCwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICByZXR1
cm4gdjg6Ok51bWJlcjo6TmV3KHJlc3VsdCk7Cit9CisKKy8vIFNldCB0aGUgc3BlY2lmaWVkIHZh
bHVlIGluIHRoZSBieXRlIGJ1ZmZlci4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYnl0ZSBi
dWZmZXIgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9yZWQuCitJTkRFWEVEX1BST1BFUlRZX1NFVFRF
UihDYW52YXNCeXRlQXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzQnl0ZUFycmF5
LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOworICAgIENhbnZhc0J5dGVBcnJheSogYXJyYXkgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNCeXRlQXJyYXk+KFY4Q2xh
c3NJbmRleDo6Q0FOVkFTQllURUFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5k
ZXggPj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkgeworICAgICAgICBpZiAoIXZh
bHVlLT5Jc051bWJlcigpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQg
bm90IGNvbnZlcnQgdmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsKKyAgICAgICAgfQorICAg
ICAgICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgfQorICAg
IHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2Fu
dmFzRmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDYW52YXNGbG9hdEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRl
ICJDYW52YXNGbG9hdEFycmF5LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheUN1c3RvbS5o
IgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzRmxvYXRBcnJh
eUNvbnN0cnVjdG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0Zsb2F0QXJyYXkuQ29u
dHJ1Y3RvciIpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc0Zsb2F0
QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9B
VEFSUkFZKSk7Cit9CisKKy8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGFycmF5
IGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0byBW
OC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgcmV0dXJuICJ1bmRlZmlu
ZWQiLgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzRmxvYXRBcnJheSkKK3sKKyAgICBJ
TkNfU1RBVFMoIkRPTS5DYW52YXNGbG9hdEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwor
ICAgIENhbnZhc0Zsb2F0QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8Q2FudmFzRmxvYXRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZ
LCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJy
YXktPmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBmbG9h
dCByZXN1bHQ7CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0
KTsKK30KKworLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3Nl
cyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lO
REVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc0Zsb2F0QXJyYXkpCit7CisgICAgSU5DX1NUQVRT
KCJET00uQ2FudmFzRmxvYXRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDYW52
YXNGbG9hdEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PENhbnZhc0Zsb2F0QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTRkxPQVRBUlJBWSwgaW5mby5I
b2xkZXIoKSk7CisKKyAgICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5n
dGgoKSkpCisgICAgICAgIGFycmF5LT5zZXQoaW5kZXgsIHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsK
KyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENhbnZhc0ludEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOENhbnZhc0ludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzSW50QXJyYXlDdXN0b20uY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAi
Q2FudmFzSW50QXJyYXkuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4
Q2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisj
aW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNJbnRBcnJheUNvbnN0
cnVjdG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0ludEFycmF5LkNvbnRydWN0b3Ii
KTsKKworICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxDYW52YXNJbnRBcnJheT4oYXJn
cywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU0lOVEFSUkFZKSk7Cit9
CisKKy8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGludGVnZXIgYXJyYXkgYW5k
IHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBB
Y2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBwaXhlbCBidWZmZXIgcmFuZ2UgcmV0dXJuICJ1bmRl
ZmluZWQiLgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzSW50QXJyYXkpCit7CisgICAg
SU5DX1NUQVRTKCJET00uQ2FudmFzSW50QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Cisg
ICAgQ2FudmFzSW50QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8Q2FudmFzSW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVksIGluZm8u
SG9sZGVyKCkpOworCisgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVu
Z3RoKCkpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIGludCByZXN1bHQ7
CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKwor
Ly8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGludGVnZXIgYXJyYXkuIEFjY2Vzc2Vz
IG91dHNpZGUgdGhlIHZhbGlkIGludGVnZXIgYXJyYXkgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9y
ZWQuCitJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNJbnRBcnJheSkKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5DYW52YXNJbnRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBD
YW52YXNJbnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxDYW52YXNJbnRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNJTlRBUlJBWSwgaW5mby5Ib2xk
ZXIoKSk7CisKKyAgICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgo
KSkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IHZhbHVlIGFyZ3VtZW50IHRvIGEgbnVt
YmVyIik7CisgICAgICAgIH0KKyAgICAgICAgYXJyYXktPnNldChpbmRleCwgdmFsdWUtPk51bWJl
clZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0RDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9D
QU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKworI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5j
bHVkZSAiVjhDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQnl0ZUFycmF5LmgiCisj
aW5jbHVkZSAiVjhDYW52YXNGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNJbnRBcnJh
eS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIlY4Q2FudmFz
VW5zaWduZWRCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJWOENhbnZhc1Vuc2lnbmVkSW50QXJyYXku
aCIKKyNpbmNsdWRlICJWOENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIlY4
SFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBBbGxvY2F0ZXMgbmV3IHN0b3JhZ2UgdmlhIHRyeUZhc3RNYWxsb2MuCisv
LyBSZXR1cm5zIE5VTEwgaWYgYXJyYXkgZmFpbGVkIHRvIGNvbnZlcnQgZm9yIGFueSByZWFzb24u
CitzdGF0aWMgZmxvYXQqIGpzQXJyYXlUb0Zsb2F0QXJyYXkodjg6OkhhbmRsZTx2ODo6QXJyYXk+
IGFycmF5LCB1aW50MzJfdCBsZW4pCit7CisgICAgLy8gQ29udmVydCB0aGUgZGF0YSBlbGVtZW50
LWJ5LWVsZW1lbnQuCisgICAgZmxvYXQqIGRhdGE7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxl
biAqIHNpemVvZihmbG9hdCkpLmdldFZhbHVlKGRhdGEpKSB7CisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsID0gYXJyYXktPkdldCh2ODo6SW50ZWdlcjo6TmV3
KGkpKTsKKyAgICAgICAgaWYgKCF2YWwtPklzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGZhc3RG
cmVlKGRhdGEpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAg
ZGF0YVtpXSA9IHRvRmxvYXQodmFsKTsKKyAgICB9CisgICAgcmV0dXJuIGRhdGE7Cit9CisKKy8v
IEFsbG9jYXRlcyBuZXcgc3RvcmFnZSB2aWEgdHJ5RmFzdE1hbGxvYy4KKy8vIFJldHVybnMgTlVM
TCBpZiBhcnJheSBmYWlsZWQgdG8gY29udmVydCBmb3IgYW55IHJlYXNvbi4KK3N0YXRpYyBpbnQq
IGpzQXJyYXlUb0ludEFycmF5KHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgdWludDMyX3Qg
bGVuKQoreworICAgIC8vIENvbnZlcnQgdGhlIGRhdGEgZWxlbWVudC1ieS1lbGVtZW50LgorICAg
IGludCogZGF0YTsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobGVuICogc2l6ZW9mKGludCkpLmdl
dFZhbHVlKGRhdGEpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsID0gYXJyYXktPkdldCh2ODo6SW50ZWdlcjo6TmV3KGkpKTsKKyAgICAgICAgYm9vbCBv
azsKKyAgICAgICAgaW50IGl2YWwgPSB0b0ludDMyKHZhbCwgb2spOworICAgICAgICBpZiAoIW9r
KSB7CisgICAgICAgICAgICBmYXN0RnJlZShkYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxM
OworICAgICAgICB9CisgICAgICAgIGRhdGFbaV0gPSBpdmFsOworICAgIH0KKyAgICByZXR1cm4g
ZGF0YTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREJ1
ZmZlckRhdGEpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
LmJ1ZmZlckRhdGEoKSIpOworCisgICAgLy8gRm9ybXM6CisgICAgLy8gKiBidWZmZXJEYXRhKEdM
ZW51bSB0YXJnZXQsIENhbnZhc0FycmF5IGRhdGEsIEdMZW51bSB1c2FnZSk7CisgICAgLy8gICAt
IFNldHMgdGhlIGJ1ZmZlcidzIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gQ2FudmFzQXJyYXkKKyAgICAv
LyAqIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNh
Z2UpOworICAgIC8vICAgLSBTZXRzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gdGhlIGdpdmVu
IHNpemUgaW4gYnl0ZXMKKyAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAzKSB7CisgICAgICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEKiBjb250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRD4oYXJncy5Ib2xkZXIoKSk7CisgICAgYm9v
bCBvazsKKyAgICBpbnQgdGFyZ2V0ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisgICAgaWYgKCFv
aykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAg
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICBpbnQgdXNh
Z2UgPSB0b0ludDMyKGFyZ3NbMl0sIG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJv
eHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRs
ZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGlmIChhcmdzWzFdLT5Jc0ludDMyKCkpIHsK
KyAgICAgICAgaW50IHNpemUgPSB0b0ludDMyKGFyZ3NbMV0pOworICAgICAgICBjb250ZXh0LT5i
dWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgdXNhZ2UpOworICAgIH0gZWxzZSBpZiAoVjhDYW52YXNB
cnJheTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkpIHsKKyAgICAgICAgQ2FudmFzQXJyYXkqIGFycmF5
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzQXJyYXk+KFY4Q2xh
c3NJbmRleDo6Q0FOVkFTQVJSQVksIGFyZ3NbMV0tPlRvT2JqZWN0KCkpOworICAgICAgICBjb250
ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgYXJyYXksIHVzYWdlKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
QnVmZmVyU3ViRGF0YSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QuYnVmZmVyU3ViRGF0YSgpIik7CisKKyAgICAvLyBGb3JtczoKKyAgICAvLyAqIGJ1ZmZl
clN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBDYW52YXNBcnJheSBkYXRh
KTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAzKSB7CisgICAgICAgIFY4UHJveHk6OnNldERP
TUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7CisgICAgfQorCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0
ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRD4oYXJncy5Ib2xkZXIoKSk7CisgICAgYm9vbCBvazsKKyAgICBp
bnQgdGFyZ2V0ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisgICAgaWYgKCFvaykgeworICAgICAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICBpbnQgb2Zmc2V0ID0gdG9JbnQz
MihhcmdzWzFdLCBvayk7CisgICAgaWYgKCFvaykgeworICAgICAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNl
cHRvcigpOworICAgIH0KKyAgICBpZiAoIVY4Q2FudmFzQXJyYXk6Okhhc0luc3RhbmNlKGFyZ3Nb
Ml0pKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIENhbnZh
c0FycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZh
c0FycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0FSUkFZLCBhcmdzWzJdLT5Ub09iamVjdCgpKTsK
KyAgICBjb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheSk7CisgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRFRleEltYWdlMkQpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELnRleEltYWdlMkQoKSIpOworCisgICAgLy8gQ3VycmVudGx5IHN1
cHBvcnRlZCBmb3JtczoKKyAgICAvLyAqIHZvaWQgdGV4SW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0
LCBpbiBHTGludCBsZXZlbCwKKyAgICAvLyAgICAgICAgICAgICAgICAgICBpbiBHTGludCBpbnRl
cm5hbGZvcm1hdCwKKyAgICAvLyAgICAgICAgICAgICAgICAgICBpbiBHTHNpemVpIHdpZHRoLCBp
biBHTHNpemVpIGhlaWdodCwgaW4gR0xpbnQgYm9yZGVyLAorICAgIC8vICAgICAgICAgICAgICAg
ICAgIGluIEdMZW51bSBmb3JtYXQsIGluIEdMZW51bSB0eXBlLCBpbiBDYW52YXNBcnJheSBwaXhl
bHMpOworICAgIC8vICogdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50
IGxldmVsLCBpbiBIVE1MSW1hZ2VFbGVtZW50IGltYWdlLAorICAgIC8vICAgICAgICAgICAgICAg
ICAgIFtPcHRpb25hbF0gaW4gR0xib29sZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIEdMYm9vbGVh
biBwcmVtdWx0aXBseUFscGhhKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAzICYmCisgICAg
ICAgIGFyZ3MuTGVuZ3RoKCkgIT0gNCAmJgorICAgICAgICBhcmdzLkxlbmd0aCgpICE9IDUgJiYK
KyAgICAgICAgYXJncy5MZW5ndGgoKSAhPSA5KSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4
Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2Vw
dG9yKCk7CisgICAgfQorCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0ID0K
KyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRD4oYXJncy5Ib2xkZXIoKSk7CisgICAgYm9vbCBvazsKKyAgICBpbnQg
dGFyZ2V0ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisgICAgaWYgKCFvaykgeworICAgICAgICBW
OFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RI
YW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICBpbnQgbGV2ZWwgPSB0b0ludDMyKGFy
Z3NbMV0sIG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9y
KCk7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPT0gMyB8fAorICAgICAgICBhcmdzLkxlbmd0aCgpID09IDQgfHwKKyAgICAgICAgYXJn
cy5MZW5ndGgoKSA9PSA1KSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmcgPSBh
cmdzWzJdOworICAgICAgICBpZiAoVjhIVE1MSW1hZ2VFbGVtZW50OjpIYXNJbnN0YW5jZShhcmcp
KSB7CisgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZV9lbGVtZW50ID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW1hZ2VFbGVtZW50Pih2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZykpOworICAgICAgICAgICAgYm9vbCBmbGlwWSA9IGZh
bHNlOworICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA0KSB7CisgICAgICAgICAgICAgICAgZmxpcFkgPSBh
cmdzWzNdLT5Cb29sZWFuVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChh
cmdzLkxlbmd0aCgpID49IDUpIHsKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhID0g
YXJnc1s0XS0+Qm9vbGVhblZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250
ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGltYWdlX2VsZW1lbnQsIGZsaXBZLCBwcmVt
dWx0aXBseUFscGhhLCBlYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogY29uc2lkZXIgZGlmZmVyZW50IC8gYmV0dGVyIGV4Y2VwdGlvbiB0eXBlLgorICAgICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFs
bCB0aHJvdWdoCisgICAgfSBlbHNlIGlmIChhcmdzLkxlbmd0aCgpID09IDkpIHsKKyAgICAgICAg
aW50IGludGVybmFsZm9ybWF0ID0gdG9JbnQzMihhcmdzWzJdLCBvayk7CisgICAgICAgIGlmICgh
b2spIHsKKyAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsK
KyAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgICAgICB9
CisgICAgICAgIGludCB3aWR0aCA9IHRvSW50MzIoYXJnc1szXSwgb2spOworICAgICAgICBpZiAo
IW9rKSB7CisgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7
CisgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICAgICAg
fQorICAgICAgICBpbnQgaGVpZ2h0ID0gdG9JbnQzMihhcmdzWzRdLCBvayk7CisgICAgICAgIGlm
ICghb2spIHsKKyAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJS
KTsKKyAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgICAg
ICB9CisgICAgICAgIGludCBib3JkZXIgPSB0b0ludDMyKGFyZ3NbNV0sIG9rKTsKKyAgICAgICAg
aWYgKCFvaykgeworICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9F
UlIpOworICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaW50IGZvcm1hdCA9IHRvSW50MzIoYXJnc1s2XSwgb2spOworICAgICAg
ICBpZiAoIW9rKSB7CisgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFY
X0VSUik7CisgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAg
ICAgICAgfQorICAgICAgICBpbnQgdHlwZSA9IHRvSW50MzIoYXJnc1s3XSwgb2spOworICAgICAg
ICBpZiAoIW9rKSB7CisgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFY
X0VSUik7CisgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAg
ICAgICAgfQorICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnID0gYXJnc1s4XTsKKyAg
ICAgICAgaWYgKFY4Q2FudmFzQXJyYXk6Okhhc0luc3RhbmNlKGFyZykpIHsKKyAgICAgICAgICAg
IENhbnZhc0FycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PENhbnZhc0FycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0FSUkFZLCBhcmctPlRvT2JqZWN0KCkp
OworICAgICAgICAgICAgLy8gRklYTUU6IG11c3QgZG8gdmFsaWRhdGlvbiBzaW1pbGFyIHRvIEpP
R0wncyB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgLy8gdGhlIGluY29taW5nIGFycmF5IGlz
IG9mIHRoZSBhcHByb3ByaWF0ZSBsZW5ndGggYW5kIHR5cGUKKyAgICAgICAgICAgIGNvbnRleHQt
PnRleEltYWdlMkQodGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZl
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWMpOworICAgICAgICAg
ICAgLy8gRmFsbCB0aHJvdWdoCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgICAgICByZXR1cm4gbm90SGFu
ZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lO
VEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAg
IH0KKyAgICBpZiAoZWMpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsK
KyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEVGV4U3ViSW1hZ2UyRCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QudGV4U3ViSW1hZ2UyRCgpIik7CisKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Cit9CisKK2VudW0gRnVuY3Rpb25Ub0NhbGwgeworICAgIGtVbmlmb3JtMXYsIGtVbmlmb3Jt
MnYsIGtVbmlmb3JtM3YsIGtVbmlmb3JtNHYsCisgICAga1ZlcnRleEF0dHJpYjF2LCBrVmVydGV4
QXR0cmliMnYsIGtWZXJ0ZXhBdHRyaWIzdiwga1ZlcnRleEF0dHJpYjR2Cit9OworCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVG9DYWxsIGZ1bmN0aW9uVG9DYWxsKSB7
CisgICAgLy8gRm9ybXM6CisgICAgLy8gKiBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEFy
cmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNG
bG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgQ2FudmFz
RmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwg
QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIENhbnZh
c0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24s
IEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBDYW52
YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9j
YXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9j
YXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJm
dihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJm
dihHTGludCBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVy
dGV4QXR0cmliM2Z2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVy
dGV4QXR0cmliM2Z2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAg
IC8vICogZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAg
IC8vICogZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkg
ZGF0YSk7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAzKSB7CisgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CisgICAgfQorCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBj
b250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZl
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRD4oYXJncy5Ib2xkZXIoKSk7CisgICAgYm9vbCBvazsK
KyAgICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9rKSB7
CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGlmIChWOENhbnZh
c0Zsb2F0QXJyYXk6Okhhc0luc3RhbmNlKGFyZ3NbMV0pKSB7CisgICAgICAgIENhbnZhc0Zsb2F0
QXJyYXkqIGFycmF5ID0gCisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxDYW52YXNGbG9hdEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0ZMT0FUQVJSQVks
IGFyZ3NbMV0tPlRvT2JqZWN0KCkpOworICAgICAgICBBU1NFUlQoYXJyYXkgIT0gTlVMTCk7Cisg
ICAgICAgIHN3aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKKyAgICAgICAgICAgIGNhc2Uga1VuaWZv
cm0xdjogY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAg
ICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgYXJy
YXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9y
bTNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1VuaWZvcm00
djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAgICAg
ICAgIGNhc2Uga1ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRp
b24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjogY29u
dGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBrVmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlv
biwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBjb250
ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxlPHY4OjpB
cnJheT4gYXJyYXkgPQorICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QoYXJnc1sxXSk7
CisgICAgaWYgKGFycmF5LklzRW1wdHkoKSkgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNl
cHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRv
cigpOworICAgIH0KKyAgICB1aW50MzJfdCBsZW4gPSBhcnJheS0+TGVuZ3RoKCk7CisgICAgZmxv
YXQqIGRhdGEgPSBqc0FycmF5VG9GbG9hdEFycmF5KGFycmF5LCBsZW4pOworICAgIGlmIChkYXRh
ID09IE5VTEwpIHsKKyAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRpZmZlcmVudCAvIGJldHRl
ciBleGNlcHRpb24gdHlwZS4KKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRB
WF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9
CisgICAgc3dpdGNoIChmdW5jdGlvblRvQ2FsbCkgeworICAgICAgICBjYXNlIGtVbmlmb3JtMXY6
IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAg
ICBjYXNlIGtVbmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIGRhdGEsIGxl
bik7IGJyZWFrOworICAgICAgICBjYXNlIGtVbmlmb3JtM3Y6IGNvbnRleHQtPnVuaWZvcm0zZnYo
bG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtVbmlmb3JtNHY6IGNv
bnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBj
YXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGxvY2F0aW9uLCBk
YXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6IGNvbnRleHQt
PnZlcnRleEF0dHJpYjJmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNh
c2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYobG9jYXRpb24sIGRh
dGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+
dmVydGV4QXR0cmliNGZ2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgZGVm
YXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOworICAgIH0KKyAgICBmYXN0RnJlZShk
YXRhKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHVuaWZvcm1IZWxwZXJpKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVG9DYWxs
IGZ1bmN0aW9uVG9DYWxsKSB7CisgICAgLy8gRm9ybXM6CisgICAgLy8gKiBnbFVuaWZvcm0xaXYo
R0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMWl2KEdMaW50
IGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJpdihH
TGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0yaXYoR0xpbnQg
bG9jYXRpb24sIENhbnZhc0ludEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtM2l2KEdM
aW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNpdihHTGludCBs
b2NhdGlvbiwgQ2FudmFzSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00aXYoR0xp
bnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtNGl2KEdMaW50IGxv
Y2F0aW9uLCBDYW52YXNJbnRBcnJheSBkYXRhKTsKKworICAgIGlmIChhcmdzLkxlbmd0aCgpICE9
IDMpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAg
ICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEPihhcmdzLkhv
bGRlcigpKTsKKyAgICBib29sIG9rOworICAgIGludCBsb2NhdGlvbiA9IHRvSW50MzIoYXJnc1sw
XSwgb2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
KyAgICB9CisgICAgaWYgKFY4Q2FudmFzSW50QXJyYXk6Okhhc0luc3RhbmNlKGFyZ3NbMV0pKSB7
CisgICAgICAgIENhbnZhc0ludEFycmF5KiBhcnJheSA9IAorICAgICAgICAgICAgVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzSW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6
Q0FOVkFTSU5UQVJSQVksIGFyZ3NbMV0tPlRvT2JqZWN0KCkpOworICAgICAgICBBU1NFUlQoYXJy
YXkgIT0gTlVMTCk7CisgICAgICAgIHN3aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKKyAgICAgICAg
ICAgIGNhc2Uga1VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkp
OyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJp
dihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0zdjog
Y29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAg
IGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXkpOyBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVhazsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKworICAg
IHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSA9CisgICAgICB2ODo6TG9jYWw8djg6OkFycmF5
Pjo6Q2FzdChhcmdzWzFdKTsKKyAgICBpZiAoYXJyYXkuSXNFbXB0eSgpKSB7CisgICAgICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIHVpbnQzMl90IGxlbiA9IGFycmF5LT5M
ZW5ndGgoKTsKKyAgICBpbnQqIGRhdGEgPSBqc0FycmF5VG9JbnRBcnJheShhcnJheSwgbGVuKTsK
KyAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkaWZm
ZXJlbnQgLyBiZXR0ZXIgZXhjZXB0aW9uIHR5cGUuCisgICAgICAgIFY4UHJveHk6OnNldERPTUV4
Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2Vw
dG9yKCk7CisgICAgfQorICAgIHN3aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKKyAgICAgICAgY2Fz
ZSBrVW5pZm9ybTF2OiBjb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBi
cmVhazsKKyAgICAgICAgY2FzZSBrVW5pZm9ybTJ2OiBjb250ZXh0LT51bmlmb3JtMml2KGxvY2F0
aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSBrVW5pZm9ybTN2OiBjb250ZXh0
LT51bmlmb3JtM2l2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSBr
VW5pZm9ybTR2OiBjb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVh
azsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOworICAgIH0K
KyAgICBmYXN0RnJlZShkYXRhKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitD
QUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTFmdikKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybTFmdigp
Iik7CisgICAgcmV0dXJuIHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKGFyZ3MsIGtVbmlm
b3JtMXYpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
VW5pZm9ybTFpdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QudW5pZm9ybTFpdigpIik7CisgICAgcmV0dXJuIHVuaWZvcm1IZWxwZXJpKGFyZ3MsIGtVbmlm
b3JtMXYpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
VW5pZm9ybTJmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QudW5pZm9ybTJmdigpIik7CisgICAgcmV0dXJuIHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxw
ZXJmKGFyZ3MsIGtVbmlmb3JtMnYpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEVW5pZm9ybTJpdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybTJpdigpIik7CisgICAgcmV0dXJuIHVuaWZvcm1IZWxw
ZXJpKGFyZ3MsIGtVbmlmb3JtMnYpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEVW5pZm9ybTNmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybTNmdigpIik7CisgICAgcmV0dXJuIHZlcnRleEF0dHJp
YkFuZFVuaWZvcm1IZWxwZXJmKGFyZ3MsIGtVbmlmb3JtM3YpOworfQorCitDQUxMQkFDS19GVU5D
X0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTNpdikKK3sKKyAgICBJTkNfU1RB
VFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybTNpdigpIik7CisgICAgcmV0
dXJuIHVuaWZvcm1IZWxwZXJpKGFyZ3MsIGtVbmlmb3JtM3YpOworfQorCitDQUxMQkFDS19GVU5D
X0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTRmdikKK3sKKyAgICBJTkNfU1RB
VFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybTRmdigpIik7CisgICAgcmV0
dXJuIHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKGFyZ3MsIGtVbmlmb3JtNHYpOworfQor
CitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTRpdikK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybTRp
digpIik7CisgICAgcmV0dXJuIHVuaWZvcm1IZWxwZXJpKGFyZ3MsIGtVbmlmb3JtNHYpOworfQor
CitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHVuaWZvcm1NYXRyaXhIZWxwZXIoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbWF0cml4U2l6ZSkKK3sKKyAgICAvLyBGb3JtczoKKyAgICAvLyAq
IGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwg
QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24s
IEdMYm9vbGVhbiB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBn
bFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEFy
cmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xV
bmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBBcnJh
eSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLworICAgIC8v
IEZJWE1FOiBuZWVkIHRvIGNoYW5nZSB0byBhY2NlcHQgQ2FudmFzRmxvYXRBcnJheSBhcyB3ZWxs
LgorICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDMpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKKyAgICB9CisKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQg
PQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKKyAgICBib29sIG9rOworICAgIGlu
dCBsb2NhdGlvbiA9IHRvSW50MzIoYXJnc1swXSwgb2spOworICAgIGlmICghb2spIHsKKyAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4g
bm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgYm9vbCB0cmFuc3Bvc2UgPSBh
cmdzWzFdLT5Cb29sZWFuVmFsdWUoKTsKKyAgICBpZiAoVjhDYW52YXNGbG9hdEFycmF5OjpIYXNJ
bnN0YW5jZShhcmdzWzJdKSkgeworICAgICAgICBDYW52YXNGbG9hdEFycmF5KiBhcnJheSA9IAor
ICAgICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzRmxv
YXRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZLCBhcmdzWzJdLT5Ub09iamVj
dCgpKTsKKyAgICAgICAgQVNTRVJUKGFycmF5ICE9IE5VTEwpOworICAgICAgICBzd2l0Y2ggKG1h
dHJpeFNpemUpIHsKKyAgICAgICAgICAgIGNhc2UgMjogY29udGV4dC0+dW5pZm9ybU1hdHJpeDJm
dihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAz
OiBjb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5KTsg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIDQ6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9j
YXRpb24sIHRyYW5zcG9zZSwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOworICAgIH0KKworICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSA9
CisgICAgICB2ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdChhcmdzWzJdKTsKKyAgICBpZiAoYXJy
YXkuSXNFbXB0eSgpKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhf
RVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQor
ICAgIHVpbnQzMl90IGxlbiA9IGFycmF5LT5MZW5ndGgoKTsKKyAgICBmbG9hdCogZGF0YSA9IGpz
QXJyYXlUb0Zsb2F0QXJyYXkoYXJyYXksIGxlbik7CisgICAgaWYgKGRhdGEgPT0gTlVMTCkgewor
ICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZGlmZmVyZW50IC8gYmV0dGVyIGV4Y2VwdGlvbiB0
eXBlLgorICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAg
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICBzd2l0Y2gg
KG1hdHJpeFNpemUpIHsKKyAgICAgICAgY2FzZSAyOiBjb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2
KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIDM6
IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgZGF0YSwgbGVu
KTsgYnJlYWs7CisgICAgICAgIGNhc2UgNDogY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbiwgdHJhbnNwb3NlLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNT
RVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOworICAgIH0KKyAgICBmYXN0RnJlZShkYXRhKTsKKyAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybU1hdHJpeDJmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRP
TS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybU1hdHJpeDJmdigpIik7CisgICAgcmV0
dXJuIHVuaWZvcm1NYXRyaXhIZWxwZXIoYXJncywgMik7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVD
TChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4M2Z2KQoreworICAgIElOQ19T
VEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtTWF0cml4M2Z2KCkiKTsK
KyAgICByZXR1cm4gdW5pZm9ybU1hdHJpeEhlbHBlcihhcmdzLCAzKTsKK30KKworQ0FMTEJBQ0tf
RlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm1NYXRyaXg0ZnYpCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm1NYXRyaXg0
ZnYoKSIpOworICAgIHJldHVybiB1bmlmb3JtTWF0cml4SGVscGVyKGFyZ3MsIDQpOworfQorCitD
QUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVydGV4QXR0cmliMWZ2
KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC52ZXJ0ZXhB
dHRyaWIxZnYoKSIpOworICAgIHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihh
cmdzLCBrVmVydGV4QXR0cmliMXYpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEVmVydGV4QXR0cmliMmZ2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRC52ZXJ0ZXhBdHRyaWIyZnYoKSIpOworICAgIHJldHVybiB2
ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVmVydGV4QXR0cmliMnYpOworfQor
CitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVydGV4QXR0cmli
M2Z2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC52ZXJ0
ZXhBdHRyaWIzZnYoKSIpOworICAgIHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVy
ZihhcmdzLCBrVmVydGV4QXR0cmliM3YpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEVmVydGV4QXR0cmliNGZ2KQoreworICAgIElOQ19TVEFUUygiRE9N
LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC52ZXJ0ZXhBdHRyaWI0ZnYoKSIpOworICAgIHJldHVy
biB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVmVydGV4QXR0cmliNHYpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFT
KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNTaG9ydEFycmF5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZh
c1Nob3J0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDYW52YXNTaG9ydEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisK
KyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc1Nob3J0QXJy
YXkuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhD
dXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IpCit7
CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzU2hvcnRBcnJheS5Db250cnVjdG9yIik7CisKKyAg
ICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJyYXk8Q2FudmFzU2hvcnRBcnJheT4oYXJncywgVjhD
bGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU1NIT1JUQVJSQVkpKTsKK30KKwor
Ly8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3
cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRz
aWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCitJTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUihDYW52YXNTaG9ydEFycmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNh
bnZhc1Nob3J0QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7CisgICAgQ2FudmFzU2hvcnRB
cnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNT
aG9ydEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1NIT1JUQVJSQVksIGluZm8uSG9sZGVyKCkp
OworCisgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3RoKCkpKQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHNob3J0IHJlc3VsdDsKKyAgICBp
ZiAoIWFycmF5LT5nZXQoaW5kZXgsIHJlc3VsdCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhyZXN1bHQpOworfQorCisvLyBTZXQg
dGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgYXJyYXkuIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZh
bGlkIGFycmF5IHJhbmdlIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorSU5ERVhFRF9QUk9QRVJUWV9T
RVRURVIoQ2FudmFzU2hvcnRBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNTaG9y
dEFycmF5LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOworICAgIENhbnZhc1Nob3J0QXJyYXkqIGFy
cmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzU2hvcnRBcnJh
eT4oVjhDbGFzc0luZGV4OjpDQU5WQVNTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAg
IGlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkgeworICAgICAg
ICBpZiAoIXZhbHVlLT5Jc051bWJlcigpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cigiQ291bGQgbm90IGNvbnZlcnQgdmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsKKyAgICAg
ICAgfQorICAgICAgICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7Cisg
ICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAi
Q2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5o
IgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlDdXN0b20uaCIKKyNpbmNsdWRlICJWOEN1c3Rv
bUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3Ip
Cit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuQ29udHJ1Y3Rv
ciIpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5T
SUdORURCWVRFQVJSQVkpKTsKK30KKworLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0
aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2Jq
ZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4g
InVuZGVmaW5lZCIuCitJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZEJ5dGVB
cnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5JbmRl
eGVkUHJvcGVydHlHZXR0ZXIiKTsKKyAgICBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSogYXJyYXkg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZEJ5dGVB
cnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FREJZVEVBUlJBWSwgaW5mby5Ib2xkZXIo
KSk7CisKKyAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5LT5sZW5ndGgoKSkp
CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgY2hhciByZXN1
bHQ7CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30K
KworLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRz
aWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lOREVYRURf
UFJPUEVSVFlfU0VUVEVSKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KQoreworICAgIElOQ19TVEFU
UygiRE9NLkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOwor
ICAgIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PihWOENsYXNzSW5kZXg6OkNB
TlZBU1VOU0lHTkVEQllURUFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXgg
Pj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkgeworICAgICAgICBpZiAoIXZhbHVl
LT5Jc051bWJlcigpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90
IGNvbnZlcnQgdmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsKKyAgICAgICAgfQorICAgICAg
ICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgfQorICAgIHJl
dHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFz
VW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRJbnRBcnJh
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZm
ZXIuaCIKKyNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEludEFycmF5LmgiCisKKyNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAi
VjhDYW52YXNBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQUxMQkFDS19GVU5D
X0RFQ0woQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yKQoreworICAgIElOQ19TVEFU
UygiRE9NLkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkuQ29udHJ1Y3RvciIpOworCisgICAgcmV0dXJu
IGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc1Vuc2lnbmVkSW50QXJyYXk+KGFyZ3MsIFY4Q2xh
c3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRElOVEFSUkFZKSk7Cit9
CisKKy8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGludGVnZXIgYXJyYXkgYW5k
IHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBB
Y2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBwaXhlbCBidWZmZXIgcmFuZ2UgcmV0dXJuICJ1bmRl
ZmluZWQiLgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzVW5zaWduZWRJbnRBcnJheSkK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZEludEFycmF5LkluZGV4ZWRQcm9w
ZXJ0eUdldHRlciIpOworICAgIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkqIGFycmF5ID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4oVjhD
bGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRElOVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAg
IGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBpbnQgcmVzdWx0OworICAgIGlm
ICghYXJyYXktPmdldChpbmRleCwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKKyAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHJlc3VsdCk7Cit9CisKKy8vIFNldCB0
aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoZSBpbnRlZ2VyIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRl
IHRoZSB2YWxpZCBpbnRlZ2VyIGFycmF5IHJhbmdlIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorSU5E
RVhFRF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzVW5zaWduZWRJbnRBcnJheSkKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZEludEFycmF5LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIp
OworICAgIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4oVjhDbGFzc0luZGV4OjpD
QU5WQVNVTlNJR05FRElOVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXgg
Pj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkgeworICAgICAgICBpZiAoIXZhbHVl
LT5Jc051bWJlcigpKSB7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90
IGNvbnZlcnQgdmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsKKyAgICAgICAgfQorICAgICAg
ICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgfQorICAgIHJl
dHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFz
VW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJy
YXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCIKKworI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKKyNp
bmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5n
LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBTExC
QUNLX0ZVTkNfREVDTChDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvcikKK3sKKyAg
ICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuQ29udHJ1Y3RvciIpOwor
CisgICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVE
U0hPUlRBUlJBWSkpOworfQorCisvLyBHZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRoZSBh
cnJheSBhbmQgcmV0dXJuIGl0IHdyYXBwZWQgYXMgYSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3Qg
dG8gVjguIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGFycmF5IHJhbmdlIHJldHVybiAidW5k
ZWZpbmVkIi4KK0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuSW5kZXhl
ZFByb3BlcnR5R2V0dGVyIik7CisgICAgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KiBhcnJheSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVksIGluZm8uSG9sZGVy
KCkpOworCisgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3RoKCkp
KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHVuc2lnbmVkIHNob3J0IHJl
c3VsdDsKKyAgICBpZiAoIWFycmF5LT5nZXQoaW5kZXgsIHJlc3VsdCkpCisgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhyZXN1bHQpOwor
fQorCisvLyBTZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgYXJyYXkuIEFjY2Vzc2VzIG91
dHNpZGUgdGhlIHZhbGlkIGFycmF5IHJhbmdlIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorSU5ERVhF
RF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KQoreworICAgIElOQ19T
VEFUUygiRE9NLkNhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIi
KTsKKyAgICBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PihWOENsYXNzSW5k
ZXg6OkNBTlZBU1VOU0lHTkVEU0hPUlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAo
KGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKKyAgICAgICAgaWYg
KCF2YWx1ZS0+SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNv
dWxkIG5vdCBjb252ZXJ0IHZhbHVlIGFyZ3VtZW50IHRvIGEgbnVtYmVyIik7CisgICAgICAgIH0K
KyAgICAgICAgYXJyYXktPnNldChpbmRleCwgdmFsdWUtPk51bWJlclZhbHVlKCkpOworICAgIH0K
KyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNDg2NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDYgKzMy
OCwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEU3Ryb2tlVGV4dCk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEUHV0SW1hZ2VEYXRhKTsKIAorI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEQnVmZmVyRGF0YSk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEQnVmZmVyU3ViRGF0YSk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEU2l6ZW9mKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0RUZXhJbWFnZTJEKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RUZXhTdWJJbWFnZTJEKTsKKyAgICAgICAgREVDTEFS
RV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMWZ2KTsKKyAgICAgICAg
REVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMWl2KTsKKyAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMmZ2
KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlm
b3JtMml2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0RVbmlmb3JtM2Z2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0RVbmlmb3JtM2l2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0RVbmlmb3JtNGZ2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtNGl2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4MmZ2KTsKKyAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4M2Z2KTsK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3Jt
TWF0cml4NGZ2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0RWZXJ0ZXhBdHRyaWIxZnYpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjJmdik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVydGV4QXR0cmliM2Z2KTsKKyAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RWZXJ0ZXhBdHRyaWI0ZnYpOwor
CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcik7
CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IpOwor
ICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcik7CisgICAg
ICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yKTsK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0
b3IpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNv
bnN0cnVjdG9yKTsKKyNlbmRpZgorCiAgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1Jf
R0VUVEVSKENsaXBib2FyZFR5cGVzKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDbGlwYm9h
cmRDbGVhckRhdGEpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKENsaXBib2FyZEdldERhdGEp
OwpAQCAtNDYyLDkgKzQ5NCwzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xB
UkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTFNlbGVjdEVsZW1lbnRDb2xsZWN0aW9uKTsK
ICAgICAgICAgREVDTEFSRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTENvbGxlY3Rpb24pOwog
CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZ
X0dFVFRFUihDYW52YXNCeXRlQXJyYXkpOworICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVS
VFlfU0VUVEVSKENhbnZhc0J5dGVBcnJheSk7CisKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUihDYW52YXNGbG9hdEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVE
X1BST1BFUlRZX1NFVFRFUihDYW52YXNGbG9hdEFycmF5KTsKKworICAgICAgICBERUNMQVJFX0lO
REVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc0ludEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9J
TkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNJbnRBcnJheSk7CisjZW5kaWYKKwogICAgICAg
ICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOwogICAg
ICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOwog
CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZ
X0dFVFRFUihDYW52YXNTaG9ydEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BF
UlRZX1NFVFRFUihDYW52YXNTaG9ydEFycmF5KTsKKworICAgICAgICBERUNMQVJFX0lOREVYRURf
UFJPUEVSVFlfR0VUVEVSKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KTsKKyAgICAgICAgREVDTEFS
RV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSk7CisKKyAg
ICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZEludEFy
cmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNp
Z25lZEludEFycmF5KTsKKworICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVS
KENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSk7CisgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9Q
RVJUWV9TRVRURVIoQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KTsKKyNlbmRpZgorCiAgICAgICAg
IERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1JfR0VUVEVSKE1lc3NhZ2VFdmVudFBvcnRzKTsKICAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhNZXNzYWdlRXZlbnRJbml0TWVzc2FnZUV2ZW50KTsKIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDQ4NjU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRl
ICJOb2RlLmgiCiAjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiWFBhdGhS
ZXN1bHQuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKQEAgLTk0LDEzICs5
NSwxNiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRG9jdW1lbnRHZXRDU1NDYW52YXNDCiAgICAgaW50
IHdpZHRoID0gdG9JbnQzMihhcmdzWzJdKTsKICAgICBpbnQgaGVpZ2h0ID0gdG9JbnQzMihhcmdz
WzNdKTsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZXN1bHQgPSBpbXAtPmdldENTU0Nh
bnZhc0NvbnRleHQoY29udGV4dElkLCBuYW1lLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICBpZiAocmVzdWx0LT5p
czJkKCkpCiAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCByZXN1bHQpOwotICAgIGVsc2Ug
ewotICAgICAgICAvLyBGSVhNRTogQWRkIHRoZSBjb252ZXJzaW9uIHRvIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRCB3aGVuIGl0IGlzIGhvb2tlZCB1cC4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAgICB9Cisj
aWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICBlbHNlIGlmIChyZXN1bHQtPmlzM2QoKSkKKyAgICAg
ICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpD
QU5WQVNSRU5ERVJJTkdDT05URVhUM0QsIHJlc3VsdCk7CisjZW5kaWYgLy8gRU5BQkxFKDNEX0NB
TlZBUykKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gNDg2NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCkBAIC00NiwxMiArNDcsMTYgQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxDYW52YXNFbGVtZW50R2V0QwogICAgIEhUTUxDYW52YXNF
bGVtZW50KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxD
YW52YXNFbGVtZW50Pihob2xkZXIpOwogICAgIFN0cmluZyBjb250ZXh0SWQgPSB0b1dlYkNvcmVT
dHJpbmcoYXJnc1swXSk7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVzdWx0ID0gaW1w
LT5nZXRDb250ZXh0KGNvbnRleHRJZCk7Ci0gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmlzMmQo
KSkKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAg
ICBpZiAocmVzdWx0LT5pczJkKCkpCiAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCByZXN1
bHQpOwotICAgIGVsc2UgewotICAgICAgICAvLyBGSVhNRTogQWRkIHRoZSBjb252ZXJzaW9uIHRv
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCB3aGVuIGl0IGlzIGhvb2tlZCB1cC4KLSAgICAgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotICAgIH0KKyNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQorICAgIGVsc2UgaWYgKHJlc3VsdC0+aXMzZCgpKQorICAgICAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NP
TlRFWFQzRCwgcmVzdWx0KTsKKyNlbmRpZgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJl
dmlzaW9uIDQ4NjU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgSW1hZ2VEYXRhOwogICAgIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAg
ICAKKyAgICAvLyBGSVhNRTogaWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRm
b3Jtcy4KKyNpZiBQTEFURk9STShTS0lBKQorICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw7CisjZW5kaWYKKwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEIDogTm9uY29weWFi
bGUgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBTaGFkZXJUeXBlIHsgRlJBR01FTlRfU0hB
REVSLCBWRVJURVhfU0hBREVSIH07CkBAIC0zMDgsMTAgKzMxMyw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBwcml2YXRlOiAgICAgICAgCiAgICAgICAgIGludCBtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0OwogICAgICAgICAKLSNpZiBQTEFURk9STShTS0lBKQotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNEU2tpYS5oIgotI2VuZGlmCi0KICNpZiBQTEFURk9STShNQUMpCiAg
ICAgICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKICAgICAgICAgCkBA
IC0zMjAsNiArMzIxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgR0x1aW50IG1f
ZmJvOwogICAgICAgICBHTHVpbnQgbV9kZXB0aEJ1ZmZlcjsKICNlbmRpZiAgICAgICAgCisKKyAg
ICAgICAgLy8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9y
bXMuCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw7CisgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFs
PiBkOworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="21122"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40047</attachid>
            <date>2009-09-23 23:15:23 -0700</date>
            <delta_ts>2009-09-25 15:15:13 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>webgl-v8-bindings-2.patch</filename>
            <type>text/plain</type>
            <size>85529</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODY2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMDktMDktMjIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KKworICAgICAgICBb
Q2hyb21pdW1dIEFkZCBpbml0aWFsIFY4IGJpbmRpbmdzIGZvciBXZWJHTAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk2NjQKKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OmdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4LmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzQXJyYXlCdWZmZXJDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2Fu
dmFzQXJyYXlDdXN0b20uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RDYW52
YXNBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQnl0ZUFycmF5
Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wp
OgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAo
V2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9TRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOENhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX1NFVFRF
Uik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzSW50QXJyYXlDdXN0b20u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3Jl
OjpJTkRFWEVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpqc0FycmF5VG9GbG9hdEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzQXJyYXlU
b0ludEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAg
ICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6dmVydGV4QXR0cmliQW5kVW5pZm9y
bUhlbHBlcmYpOgorICAgICAgICAoV2ViQ29yZTo6dW5pZm9ybUhlbHBlcmkpOgorICAgICAgICAo
V2ViQ29yZTo6dW5pZm9ybU1hdHJpeEhlbHBlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVS
VFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1
c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToK
KyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdl
YkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhF
RF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9T
RVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVO
Q19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAg
ICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxl
bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisKIDIwMDkt
MDktMjIgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ4NjU5KQorKysg
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTc2LDExICs3NiwyNyBAQAog
ICAgICAgICAgICAgJ2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5pZGwnLAogICAgICAgICAgICAg
J2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsJywKICAgICAgICAgICAgICdkb20vV2hlZWxF
dmVudC5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0FycmF5LmlkbCcsCisg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaWRsJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuaWRsJywKKyAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9DYW52YXNCeXRlQXJyYXkuaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52
YXNGbG9hdEFycmF5LmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzRnJhbWVi
dWZmZXIuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5pZGwn
LAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0ludEFycmF5LmlkbCcsCiAgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwnLAogICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9D
YW52YXNQcm9ncmFtLmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
YnVmZmVyLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1NoYWRlci5pZGwnLAor
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuaWRsJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGwnLAorICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsJywKKyAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaWRsJywKKyAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9EYXRh
R3JpZENvbHVtbi5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvRGF0YUdyaWRDb2x1bW5MaXN0Lmlk
bCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlLmlkbCcsCkBAIC02MDgsNyArNjI0LDE3IEBACiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RXb3JrZXJDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5j
cHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5Q3VzdG9t
LmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5QnVmZmVy
Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQnl0
ZUFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2Fu
dmFzSW50QXJyYXlDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhDYW52YXNGbG9hdEFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRJbnRBcnJheUN1c3Rv
bS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5jcHAnLApAQCAtMTIyMiwxOCArMTI0OCw1MiBAQAogICAgICAgICAgICAgJ2hpc3Rvcnkv
SGlzdG9yeUl0ZW0uaCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9QYWdlQ2FjaGUuY3BwJywKICAg
ICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZh
cy9DYW52YXNBcnJheS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0FycmF5
LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0FycmF5QnVmZmVyLmNwcCcsCisg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaCcsCisgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVyLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52
YXMvQ2FudmFzQnVmZmVyLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0J5dGVB
cnJheS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5oJywK
KyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNGbG9hdEFycmF5LmNwcCcsCisgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5oJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9DYW52YXNGcmFtZWJ1ZmZlci5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFz
L0NhbnZhc0ZyYW1lYnVmZmVyLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0dy
YWRpZW50LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaCcs
CisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzSW50QXJyYXkuY3BwJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5oJywKKyAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9DYW52YXNPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNP
YmplY3QuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5jcHAnLAog
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL0NhbnZhc1BpeGVsQXJyYXkuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFz
UHJvZ3JhbS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Byb2dyYW0uaCcs
CisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCcsCisgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmgnLAogICAgICAgICAgICAg
J2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwJywKICAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgnLAogICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oJywKKyAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwJywKKyAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52
YXMvQ2FudmFzU2hhZGVyLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzU2hh
ZGVyLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuY3BwJywK
KyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNTaG9ydEFycmF5LmgnLAogICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvQ2FudmFzU3R5bGUuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzVGV4dHVy
ZS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1RleHR1cmUuaCcsCisgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuY3BwJywKKyAgICAg
ICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmNwcCcsCisgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oJywKKyAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuY3BwJywKKyAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCcsCiAgICAgICAgICAgICAnaHRt
bC9Db2xsZWN0aW9uQ2FjaGUuY3BwJywKICAgICAgICAgICAgICdodG1sL0NvbGxlY3Rpb25DYWNo
ZS5oJywKICAgICAgICAgICAgICdodG1sL0NvbGxlY3Rpb25UeXBlLmgnLApAQCAtMjA4Miw2ICsy
MTQyLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oJywKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNDg2NTkpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTk2LDcgKzE1OTYsMjQgQEAgc3ViIElzUmVmUHRyVHlwZQogewogICAgIG15ICR0eXBlID0gc2hp
ZnQ7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkF0dHIiOworICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJDYW52YXNBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc0Fy
cmF5QnVmZmVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzQm9vbGVhbkFycmF5
IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzQnl0ZUFycmF5IjsKKyAgICByZXR1
cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzQnVmZmVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBl
cSAiQ2FudmFzRmxvYXRBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc0Zy
YW1lYnVmZmVyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzR3JhZGllbnQiOwor
ICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNJbnRBcnJheSI7CisgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIkNhbnZhc09iamVjdCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNh
bnZhc1Byb2dyYW0iOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNSZW5kZXJidWZm
ZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNTaGFkZXIiOworICAgIHJldHVy
biAxIGlmICR0eXBlIGVxICJDYW52YXNTaG9ydEFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlw
ZSBlcSAiQ2FudmFzVGV4dHVyZSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc1Vu
c2lnbmVkQnl0ZUFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzVW5zaWdu
ZWRJbnRBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheSI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNsaWVudFJlY3QiOwogICAgIHJl
dHVybiAxIGlmICR0eXBlIGVxICJDbGllbnRSZWN0TGlzdCI7CiAgICAgcmV0dXJuIDEgaWYgJHR5
cGUgZXEgIkNEQVRBU2VjdGlvbiI7CkBAIC0xNzI1LDYgKzE3NDIsMTkgQEAgc3ViIEdldE5hdGl2
ZVR5cGUKIG15ICV0eXBlQ2FuRmFpbENvbnZlcnNpb24gPSAoCiAgICAgIkF0b21pY1N0cmluZyIg
PT4gMCwKICAgICAiQXR0ciIgPT4gMSwKKyAgICAiQ2FudmFzQXJyYXkiID0+IDAsCisgICAgIkNh
bnZhc0J1ZmZlciIgPT4gMCwKKyAgICAiQ2FudmFzQnl0ZUFycmF5IiA9PiAwLAorICAgICJDYW52
YXNGbG9hdEFycmF5IiA9PiAwLAorICAgICJDYW52YXNGcmFtZWJ1ZmZlciIgPT4gMCwKKyAgICAi
Q2FudmFzR3JhZGllbnQiID0+IDAsCisgICAgIkNhbnZhc0ludEFycmF5IiA9PiAwLAorICAgICJD
YW52YXNQaXhlbEFycmF5IiA9PiAwLAorICAgICJDYW52YXNQcm9ncmFtIiA9PiAwLAorICAgICJD
YW52YXNSZW5kZXJidWZmZXIiID0+IDAsCisgICAgIkNhbnZhc1NoYWRlciIgPT4gMCwKKyAgICAi
Q2FudmFzU2hvcnRBcnJheSIgPT4gMCwKKyAgICAiQ2FudmFzVGV4dHVyZSIgPT4gMCwKICAgICAi
Q29tcGFyZUhvdyIgPT4gMCwKICAgICAiRGF0YUdyaWRDb2x1bW4iID0+IDAsCiAgICAgIkRPTVN0
cmluZyIgPT4gMCwKQEAgLTE3MzQsOCArMTc2NCwxMSBAQCBteSAldHlwZUNhbkZhaWxDb252ZXJz
aW9uID0gKAogICAgICJFdmVudCIgPT4gMCwKICAgICAiRXZlbnRMaXN0ZW5lciIgPT4gMCwKICAg
ICAiRXZlbnRUYXJnZXQiID0+IDAsCisgICAgIkhUTUxDYW52YXNFbGVtZW50IiA9PiAwLAogICAg
ICJIVE1MRWxlbWVudCIgPT4gMCwKKyAgICAiSFRNTEltYWdlRWxlbWVudCIgPT4gMCwKICAgICAi
SFRNTE9wdGlvbkVsZW1lbnQiID0+IDAsCisgICAgIkhUTUxWaWRlb0VsZW1lbnQiID0+IDAsCiAg
ICAgIk5vZGUiID0+IDAsCiAgICAgIk5vZGVGaWx0ZXIiID0+IDAsCiAgICAgIk1lc3NhZ2VQb3J0
IiA9PiAwLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0luY2x1ZGUuaAkocmV2
aXNpb24gNDg2NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywyOSBAQAogCiAjaW5jbHVkZSAiQWJzdHJhY3RX
b3JrZXIuaCIKICNpbmNsdWRlICJCYXJJbmZvLmgiCisjaW5jbHVkZSAiQ2FudmFzQXJyYXkuaCIK
KyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc0J1ZmZlci5o
IgorI2luY2x1ZGUgIkNhbnZhc0J5dGVBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc0Zsb2F0QXJy
YXkuaCIKKyNpbmNsdWRlICJDYW52YXNGcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgIkNhbnZhc0dy
YWRpZW50LmgiCisjaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKKyNpbmNsdWRlICJDYW52YXNP
YmplY3QuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUGl4
ZWxBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc1Byb2dyYW0uaCIKKyNpbmNsdWRlICJDYW52YXNS
ZW5kZXJidWZmZXIuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmgiCisjaW5jbHVkZSAiQ2FudmFzU2hhZGVyLmgiCisjaW5jbHVkZSAiQ2Fu
dmFzU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgiCisj
aW5jbHVkZSAiQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheS5oIgogI2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCisjaW5jbHVkZSAiQ2Fu
dmFzVGV4dHVyZS5oIgogI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEuaCIKICNpbmNsdWRlICJDbGll
bnRSZWN0LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdExpc3QuaCIKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25lLmNwcAkocmV2aXNpb24gNDg2NTkp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMjcgQEAKICNpbmNsdWRlICJiaW5kaW5ncy9WOEFic3Ry
YWN0V29ya2VyLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOEF0dHIuY3BwIgogI2luY2x1ZGUg
ImJpbmRpbmdzL1Y4QmFySW5mby5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNBcnJh
eS5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNBcnJheUJ1ZmZlci5jcHAiCisjaW5j
bHVkZSAiYmluZGluZ3MvVjhDYW52YXNCdWZmZXIuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4
Q2FudmFzQnl0ZUFycmF5LmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc0Zsb2F0QXJy
YXkuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzRnJhbWVidWZmZXIuY3BwIgogI2lu
Y2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzR3JhZGllbnQuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdz
L1Y4Q2FudmFzSW50QXJyYXkuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzUGF0dGVy
bi5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNQaXhlbEFycmF5LmNwcCIKKyNpbmNs
dWRlICJiaW5kaW5ncy9WOENhbnZhc1Byb2dyYW0uY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4
Q2FudmFzUmVuZGVyYnVmZmVyLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1JlbmRl
cmluZ0NvbnRleHQuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNTaGFkZXIuY3BwIgorI2luY2x1ZGUg
ImJpbmRpbmdzL1Y4Q2FudmFzU2hvcnRBcnJheS5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhD
YW52YXNUZXh0dXJlLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5LmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1Vuc2lnbmVkSW50QXJyYXku
Y3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmNwcCIK
ICNpbmNsdWRlICJiaW5kaW5ncy9WOENEQVRBU2VjdGlvbi5jcHAiCiAjaW5jbHVkZSAiYmluZGlu
Z3MvVjhDaGFyYWN0ZXJEYXRhLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOENsaWVudFJlY3Qu
Y3BwIgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24gNDg2
NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzNiw3ICs0MzYsNDAgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IFY4RAogICAgIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKICAgICAvLyBU
aGUgZm9sbG93aW5nIG9iamVjdHMgYXJlIGNyZWF0ZWQgZnJvbSBKYXZhU2NyaXB0LgorICAgIGNh
c2UgVjhDbGFzc0luZGV4OjpDQU5WQVNBUlJBWUJVRkZFUjoKKyAgICAgICAgZGVzY3JpcHRvci0+
U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKENhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3Ip
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU0JZVEVBUlJB
WToKKyAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKENhbnZh
c0J5dGVBcnJheUNvbnN0cnVjdG9yKSk7CisgICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVt
cGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0VfSU5ERVhFRF9QUk9QRVJUWV9H
RVRURVIoQ2FudmFzQnl0ZUFycmF5KSwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZh
c0J5dGVBcnJheSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FO
VkFTRkxPQVRBUlJBWToKKyAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NB
TExCQUNLKENhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3RvcikpOworICAgICAgICBkZXNjcmlwdG9y
LT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX0lOREVY
RURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc0Zsb2F0QXJyYXkpLCBVU0VfSU5ERVhFRF9QUk9QRVJU
WV9TRVRURVIoQ2FudmFzRmxvYXRBcnJheSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFY4
Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVk6CisgICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxI
YW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKSk7CisgICAgICAg
IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxl
cihVU0VfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzSW50QXJyYXkpLCBVU0VfSU5ERVhF
RF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzSW50QXJyYXkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU1NIT1JUQVJSQVk6CisgICAgICAgIGRlc2NyaXB0b3It
PlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3Ip
KTsKKyAgICAgICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJv
cGVydHlIYW5kbGVyKFVTRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNTaG9ydEFycmF5
KSwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1Nob3J0QXJyYXkpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVEQllURUFSUkFZ
OgorICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soQ2FudmFz
VW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvcikpOworICAgICAgICBkZXNjcmlwdG9yLT5JbnN0
YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX0lOREVYRURfUFJP
UEVSVFlfR0VUVEVSKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KSwgVVNFX0lOREVYRURfUFJPUEVS
VFlfU0VUVEVSKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRElOVEFSUkFZOgorICAgICAgICBkZXNj
cmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soQ2FudmFzVW5zaWduZWRJbnRBcnJh
eUNvbnN0cnVjdG9yKSk7CisgICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+
U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0VfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2Fu
dmFzVW5zaWduZWRJbnRBcnJheSksIFVTRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNV
bnNpZ25lZEludEFycmF5KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVk6CisgICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxI
YW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcikp
OworICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9w
ZXJ0eUhhbmRsZXIoVVNFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheSksIFVTRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkpKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
RE9NUEFSU0VSOgogICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJB
Q0soRE9NUGFyc2VyQ29uc3RydWN0b3IpKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhJbmRleC5jcHAJKHJldmlzaW9uIDQ4NjU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEluZGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDYgKzM5OSwyNSBAQAogI2luY2x1ZGUg
IlY4U2hhcmVkV29ya2VyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisjaW5j
bHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJWOENhbnZhc0Fy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgIlY4Q2Fu
dmFzQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNCdWZmZXIuaCIKKyNpbmNsdWRlICJW
OENhbnZhc0Zsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJWOENhbnZhc0ZyYW1lYnVmZmVyLmgiCisj
aW5jbHVkZSAiVjhDYW52YXNJbnRBcnJheS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzUHJvZ3JhbS5o
IgorI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDYW52YXNT
aGFkZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc1Nob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJWOENh
bnZhc1RleHR1cmUuaCIKKyNpbmNsdWRlICJWOENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgiCisj
aW5jbHVkZSAiVjhDYW52YXNVbnNpZ25lZEludEFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXkuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZ1
bmN0aW9uVGVtcGxhdGVGYWN0b3J5IFY4Q2xhc3NJbmRleDo6R2V0RmFjdG9yeShWOFdyYXBwZXJU
eXBlIHR5cGUpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkocmV2aXNpb24gNDg2NTkpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkod29ya2luZyBjb3B5KQpAQCAtNDQ0LDEyICs0
NDQsMzUgQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogI2RlZmlu
ZSBET01fT0JKRUNUX1dPUktFUlNfVFlQRVMoVikKICNlbmRpZgogCisjaWYgRU5BQkxFKDNEX0NB
TlZBUykKKyNkZWZpbmUgRE9NX09CSkVDVF8zRF9DQU5WQVNfVFlQRVMoVikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU0FSUkFZLCBDYW52YXNBcnJheSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU0FS
UkFZQlVGRkVSLCBDYW52YXNBcnJheUJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBWKENBTlZBU0JVRkZFUiwgQ2FudmFzQnVmZmVyKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU0JZVEVBUlJBWSwgQ2FudmFzQnl0ZUFy
cmF5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU0ZMT0FU
QVJSQVksIENhbnZhc0Zsb2F0QXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICBWKENBTlZBU0ZSQU1FQlVGRkVSLCBDYW52YXNGcmFtZWJ1ZmZlcikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU0lOVEFSUkFZLCBDYW52YXNJbnRBcnJheSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU1BST0dSQU0s
IENhbnZhc1Byb2dyYW0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBWKENBTlZBU1JFTkRFUkJVRkZFUiwgQ2FudmFzUmVuZGVyYnVmZmVyKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU1JFTkRFUklOR0NPTlRFWFQzRCwgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEKSAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU1NIQURFUiwgQ2Fu
dmFzU2hhZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBW
KENBTlZBU1NIT1JUQVJSQVksIENhbnZhc1Nob3J0QXJyYXkpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBWKENBTlZBU1RFWFRVUkUsIENhbnZhc1RleHR1cmUpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKENBTlZBU1VOU0lHTkVEQllURUFS
UkFZLCBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSkgICAgICAgICAgICAgICAgIFwKKyAgICBWKENB
TlZBU1VOU0lHTkVESU5UQVJSQVksIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkpICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBWKENBTlZBU1VOU0lHTkVEU0hPUlRBUlJBWSwgQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5KQorI2Vsc2UKKyNkZWZpbmUgRE9NX09CSkVDVF8zRF9DQU5WQVNfVFlQRVMoVikK
KyNlbmRpZgorCiAjZGVmaW5lIERPTV9PQkpFQ1RfVFlQRVMoVikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9NX09CSkVDVF9UWVBFU18xKFYpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9NX09C
SkVDVF9UWVBFU18yKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgRE9NX09CSkVDVF9EQVRBQkFTRV9UWVBFUyhWKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRE9NX09CSkVDVF9TVE9SQUdFX1RZUEVTKFYp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRE9NX09CSkVD
VF9XT1JLRVJTX1RZUEVTKFYpCisgICAgRE9NX09CSkVDVF9XT1JLRVJTX1RZUEVTKFYpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRE9NX09CSkVDVF8zRF9D
QU5WQVNfVFlQRVMoVikKIAogI2lmIEVOQUJMRShTVkcpCiAvLyBTVkdfT0JKRUNUX1RZUEVTIGFy
ZSBzdmcgbm9uLW5vZGUsIG5vbi1wb2QgdHlwZXMuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENhbnZhc0FycmF5QnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5QnVmZmVyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQXJyYXlCdWZm
ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVm
ZmVyLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5
QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0FycmF5
QnVmZmVyLkNvbnRydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90
IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpOworCisgICAgaW50IGFyZ0xlbiA9IGFyZ3MuTGVu
Z3RoKCk7CisgICAgLy8gU3VwcG9ydGVkIGNvbnN0cnVjdG9yczoKKyAgICAvLyBDYW52YXNBcnJh
eUJ1ZmZlcihuKSB3aGVyZSBuIGlzIGFuIGludGVnZXI6CisgICAgLy8gICAtLSBjcmVhdGUgYW4g
ZW1wdHkgYnVmZmVyIG9mIG4gYnl0ZXMKKworICAgIGlmIChhcmdMZW4gIT0gMSkKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgc3BlY2lmaWVkIHRv
IGNvbnN0cnVjdG9yIChyZXF1aXJlcyAxKSIpOworCisgICAgaW50IGxlbiA9IDA7CisgICAgaWYg
KCFhcmdzWzBdLT5Jc0ludDMyKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJBcmd1bWVu
dCB0byBDYW52YXNBcnJheUJ1ZmZlciBjb25zdHJ1Y3RvciB3YXMgbm90IGFuIGludGVnZXIiKTsK
KyAgICBsZW4gPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIFJlZlB0cjxDYW52YXNBcnJheUJ1ZmZl
cj4gYnVmZmVyID0gQ2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW4pOworICAgIC8vIFRyYW5z
Zm9ybSB0aGUgaG9sZGVyIGludG8gYSB3cmFwcGVyIG9iamVjdCBmb3IgdGhlIGFycmF5LgorICAg
IFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6
OlRvSW50KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVlCVUZGRVIpLCBidWZmZXIuZ2V0KCkpOwor
ICAgIHJldHVybiB0b1Y4KGJ1ZmZlci5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNBcnJheUN1c3RvbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQXJyYXlDdXN0b20u
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQXJy
YXlDdXN0b20uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZm
ZXIuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVz
ZWQgYnkgdGhlIENhbnZhc0FycmF5KkNvbnN0cnVjdG9yIGNhbGxiYWNrcy4KKyAgICB0ZW1wbGF0
ZTxjbGFzcyBBcnJheUNsYXNzPgorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1Y3RD
YW52YXNBcnJheShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xhc3NJbmRleCkKKyAgICB7CisgICAg
ICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5j
dGlvbi4iKTsKKworICAgICAgICBpbnQgYXJnTGVuID0gYXJncy5MZW5ndGgoKTsKKyAgICAgICAg
Ly8gU3VwcG9ydGVkIGNvbnN0cnVjdG9yczoKKyAgICAgICAgLy8gQ2FudmFzPFQ+QXJyYXkobikg
d2hlcmUgbiBpcyBhbiBpbnRlZ2VyOgorICAgICAgICAvLyAgIC0tIGNyZWF0ZSBhbiBlbXB0eSBh
cnJheSBvZiBuIGVsZW1lbnRzCisgICAgICAgIC8vIENhbnZhczxUPkFycmF5KGFycikgd2hlcmUg
YXJyIGlzIGFuIGFycmF5OgorICAgICAgICAvLyAgIC0tIGNyZWF0ZSBhIENhbnZhczxUPkFycmF5
IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mICJhcnIiCisgICAgICAgIC8vIENhbnZhczxUPkFy
cmF5KGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpCisgICAgICAgIC8vICAgLS0gY3JlYXRlIGEgQ2FudmFz
PFQ+QXJyYXkgcG9pbnRpbmcgdG8gdGhlIENhbnZhc0FycmF5QnVmZmVyCisgICAgICAgIC8vICAg
ICAgImJ1ZiIsIHN0YXJ0aW5nIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LCBmb3IgdGhlIGdpdmVu
CisgICAgICAgIC8vICAgICAgbGVuZ3RoCisKKyAgICAgICAgaWYgKGFyZ0xlbiA9PSAwKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm8gYXJndW1lbnRzIHNwZWNpZmllZCB0byBj
b25zdHJ1Y3RvciIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VlIHdoZXRoZXIgdGhlIGZp
cnN0IGFyZ3VtZW50IGlzIGEgQ2FudmFzQXJyYXlCdWZmZXIuCisgICAgICAgIGlmIChWOENhbnZh
c0FycmF5QnVmZmVyOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkgeworICAgICAgICAgICAgaWYgKGFy
Z0xlbiA+IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIldyb25nIG51bWJl
ciBvZiBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxUPkFycmF5KENhbnZhc0FycmF5QnVmZmVyLCBp
bnQsIGludCkiKTsKKworICAgICAgICAgICAgQ2FudmFzQXJyYXlCdWZmZXIqIGJ1ZiA9CisgICAg
ICAgICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzQXJy
YXlCdWZmZXI+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVlCVUZGRVIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3NbMF0tPlRvT2JqZWN0KCkpOworICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVu
dCAwIHRvIGEgQ2FudmFzQXJyYXlCdWZmZXIiKTsKKyAgICAgICAgICAgIGJvb2wgb2s7CisgICAg
ICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGlmIChhcmdMZW4gPiAxKSB7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gdG9JbnQzMihhcmdzWzFdLCBvayk7CisgICAgICAgICAg
ICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNv
dWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDEgdG8gYW4gaW50ZWdlciIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaW50IGxlbmd0aCA9IGJ1Zi0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0Owor
ICAgICAgICAgICAgaWYgKGFyZ0xlbiA+IDIpIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSB0
b0ludDMyKGFyZ3NbMl0sIG9rKTsKKyAgICAgICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQg
MiB0byBhbiBpbnRlZ2VyIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVuZ3Ro
IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTGVuZ3RoIC8gb2Zmc2V0
IG91dCBvZiByYW5nZSIpOworCisgICAgICAgICAgICBSZWZQdHI8QXJyYXlDbGFzcz4gYXJyYXkg
PSBBcnJheUNsYXNzOjpjcmVhdGUoYnVmLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgICAgICBp
ZiAoYXJyYXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiSW52
YWxpZCBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxUPkFycmF5KENhbnZhc0FycmF5QnVmZmVyLCBp
bnQsIGludCkiKTsKKyAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVyIGludG8gYSB3
cmFwcGVyIG9iamVjdCBmb3IgdGhlIGFycmF5LgorICAgICAgICAgICAgVjhET01XcmFwcGVyOjpz
ZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIGNsYXNzSW5kZXgsIGFycmF5LmdldCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0b1Y4KGFycmF5LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpbnQgbGVuID0gMDsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6
QXJyYXk+IHNyY0FycmF5OworICAgICAgICBpZiAoYXJnTGVuICE9IDEpCisgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBuZXcgQ2FudmFz
PFQ+QXJyYXkoaW50IC8gYXJyYXkpIik7CisKKyAgICAgICAgaWYgKGFyZ3NbMF0tPklzSW50MzIo
KSkgeworICAgICAgICAgICAgbGVuID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICAgICAgfSBlbHNl
IGlmIChhcmdzWzBdLT5Jc0FycmF5KCkpIHsKKyAgICAgICAgICAgIHNyY0FycmF5ID0gdjg6Okxv
Y2FsPHY4OjpBcnJheT46OkNhc3QoYXJnc1swXSk7CisgICAgICAgICAgICBpZiAoc3JjQXJyYXku
SXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3Qg
Y29udmVydCBhcmd1bWVudCAwIHRvIGFuIGFycmF5Iik7CisgICAgICAgICAgICBsZW4gPSBzcmNB
cnJheS0+TGVuZ3RoKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgMCB0byBlaXRoZXIgYW4gaW50MzIg
b3IgYW4gYXJyYXkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0cjxBcnJheUNsYXNzPiBh
cnJheSA9IEFycmF5Q2xhc3M6OmNyZWF0ZShsZW4pOworICAgICAgICBpZiAoIXNyY0FycmF5Lklz
RW1wdHkoKSkgeworICAgICAgICAgICAgLy8gTmVlZCB0byBjb3B5IHRoZSBpbmNvbWluZyBhcnJh
eSBpbnRvIHRoZSBuZXdseSBjcmVhdGVkIENhbnZhc0FycmF5LgorICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbCA9IHNyY0FycmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCF2YWwtPklzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hh
ciBidWZbMjU2XTsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJDb3VsZCBub3Qg
Y29udmVydCBhcnJheSBlbGVtZW50ICVkIHRvIGEgbnVtYmVyIiwgaSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGJ1Zik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFycmF5LT5zZXQoaSwgdmFsLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVyIGludG8gYSB3
cmFwcGVyIG9iamVjdCBmb3IgdGhlIGFycmF5LgorICAgICAgICBWOERPTVdyYXBwZXI6OnNldERP
TVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgY2xhc3NJbmRleCwgYXJyYXkuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gdG9WOChhcnJheS5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0J5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0J5dGVBcnJheUN1
c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIu
aCIKKyNpbmNsdWRlICJDYW52YXNCeXRlQXJyYXkuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0Fy
cmF5Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQ
cm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52
YXNCeXRlQXJyYXlDb25zdHJ1Y3RvcikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNCeXRl
QXJyYXkuQ29udHJ1Y3RvciIpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENh
bnZhc0J5dGVBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNB
TlZBU0JZVEVBUlJBWSkpOworfQorCisvLyBHZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRo
ZSBieXRlIGJ1ZmZlciBhbmQgcmV0dXJuIGl0IHdyYXBwZWQgYXMgYSBKYXZhU2NyaXB0IE51bWJl
ciBvYmplY3QgdG8gVjguIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGJ5dGUgYnVmZmVyIHJh
bmdlIHJldHVybiAidW5kZWZpbmVkIi4KK0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc0J5
dGVBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNCeXRlQXJyYXkuSW5kZXhlZFBy
b3BlcnR5R2V0dGVyIik7CisgICAgQ2FudmFzQnl0ZUFycmF5KiBieXRlQnVmZmVyID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzQnl0ZUFycmF5PihWOENsYXNzSW5k
ZXg6OkNBTlZBU0JZVEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoKGluZGV4IDwg
MCkgfHwgKGluZGV4ID49IGJ5dGVCdWZmZXItPmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKKyAgICBzaWduZWQgY2hhciByZXN1bHQ7CisgICAgaWYgKCFieXRlQnVm
ZmVyLT5nZXQoaW5kZXgsIHJlc3VsdCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhyZXN1bHQpOworfQorCisvLyBTZXQgdGhlIHNw
ZWNpZmllZCB2YWx1ZSBpbiB0aGUgYnl0ZSBidWZmZXIuIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZh
bGlkIGJ5dGUgYnVmZmVyIHJhbmdlIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorSU5ERVhFRF9QUk9Q
RVJUWV9TRVRURVIoQ2FudmFzQnl0ZUFycmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZh
c0J5dGVBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDYW52YXNCeXRlQXJyYXkq
IGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzQnl0ZUFy
cmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0JZVEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAg
ICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKKyAgICAg
ICAgaWYgKCF2YWx1ZS0+SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJDb3VsZCBub3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOworICAgICAg
ICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgfQorICAgIHJl
dHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFz
RmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDYW52YXNGbG9hdEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJD
YW52YXNGbG9hdEFycmF5LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OENhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheUN1c3RvbS5oIgor
I2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzRmxvYXRBcnJheUNv
bnN0cnVjdG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0Zsb2F0QXJyYXkuQ29udHJ1
Y3RvciIpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc0Zsb2F0QXJy
YXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFS
UkFZKSk7Cit9CisKKy8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGFycmF5IGFu
ZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0byBWOC4g
QWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQi
LgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzRmxvYXRBcnJheSkKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5DYW52YXNGbG9hdEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOworICAg
IENhbnZhc0Zsb2F0QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8Q2FudmFzRmxvYXRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZLCBp
bmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkt
Pmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBmbG9hdCBy
ZXN1bHQ7CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsK
K30KKworLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBv
dXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lOREVY
RURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc0Zsb2F0QXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJE
T00uQ2FudmFzRmxvYXRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDYW52YXNG
bG9hdEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENh
bnZhc0Zsb2F0QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTRkxPQVRBUlJBWSwgaW5mby5Ib2xk
ZXIoKSk7CisKKyAgICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgo
KSkpCisgICAgICAgIGFycmF5LT5zZXQoaW5kZXgsIHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKKyAg
ICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENh
bnZhc0ludEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENhbnZhc0ludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzSW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNE
X0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2Fu
dmFzSW50QXJyYXkuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2Fu
dmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5j
bHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNJbnRBcnJheUNvbnN0cnVj
dG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0ludEFycmF5LkNvbnRydWN0b3IiKTsK
KworICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxDYW52YXNJbnRBcnJheT4oYXJncywg
VjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU0lOVEFSUkFZKSk7Cit9CisK
Ky8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGludGVnZXIgYXJyYXkgYW5kIHJl
dHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nl
c3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBwaXhlbCBidWZmZXIgcmFuZ2UgcmV0dXJuICJ1bmRlZmlu
ZWQiLgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzSW50QXJyYXkpCit7CisgICAgSU5D
X1NUQVRTKCJET00uQ2FudmFzSW50QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7CisgICAg
Q2FudmFzSW50QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8Q2FudmFzSW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVksIGluZm8uSG9s
ZGVyKCkpOworCisgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3Ro
KCkpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIGludCByZXN1bHQ7Cisg
ICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKworLy8g
U2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGludGVnZXIgYXJyYXkuIEFjY2Vzc2VzIG91
dHNpZGUgdGhlIHZhbGlkIGludGVnZXIgYXJyYXkgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9yZWQu
CitJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNJbnRBcnJheSkKK3sKKyAgICBJTkNfU1RB
VFMoIkRPTS5DYW52YXNJbnRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDYW52
YXNJbnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxD
YW52YXNJbnRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNJTlRBUlJBWSwgaW5mby5Ib2xkZXIo
KSk7CisKKyAgICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkp
IHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIp
OworICAgICAgICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAg
fQorICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTk3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1
ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0Fy
cmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJWOENhbnZh
c0Zsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJWOENhbnZhc0ludEFycmF5LmgiCisjaW5jbHVkZSAi
VjhDYW52YXNTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzVW5zaWduZWRJbnRBcnJheS5oIgorI2luY2x1ZGUgIlY4
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiVjhIVE1MSW1hZ2VFbGVtZW50
LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEFs
bG9jYXRlcyBuZXcgc3RvcmFnZSB2aWEgdHJ5RmFzdE1hbGxvYy4KKy8vIFJldHVybnMgTlVMTCBp
ZiBhcnJheSBmYWlsZWQgdG8gY29udmVydCBmb3IgYW55IHJlYXNvbi4KK3N0YXRpYyBmbG9hdCog
anNBcnJheVRvRmxvYXRBcnJheSh2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXksIHVpbnQzMl90
IGxlbikKK3sKKyAgICAvLyBDb252ZXJ0IHRoZSBkYXRhIGVsZW1lbnQtYnktZWxlbWVudC4KKyAg
ICBmbG9hdCogZGF0YTsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobGVuICogc2l6ZW9mKGZsb2F0
KSkuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiAwOworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWwg
PSBhcnJheS0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkpOworICAgICAgICBpZiAoIXZhbC0+SXNO
dW1iZXIoKSkgeworICAgICAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgICAgICBkYXRhW2ldID0gdG9GbG9hdCh2YWwpOworICAgIH0K
KyAgICByZXR1cm4gZGF0YTsKK30KKworLy8gQWxsb2NhdGVzIG5ldyBzdG9yYWdlIHZpYSB0cnlG
YXN0TWFsbG9jLgorLy8gUmV0dXJucyBOVUxMIGlmIGFycmF5IGZhaWxlZCB0byBjb252ZXJ0IGZv
ciBhbnkgcmVhc29uLgorc3RhdGljIGludCoganNBcnJheVRvSW50QXJyYXkodjg6OkhhbmRsZTx2
ODo6QXJyYXk+IGFycmF5LCB1aW50MzJfdCBsZW4pCit7CisgICAgLy8gQ29udmVydCB0aGUgZGF0
YSBlbGVtZW50LWJ5LWVsZW1lbnQuCisgICAgaW50KiBkYXRhOworICAgIGlmICghdHJ5RmFzdE1h
bGxvYyhsZW4gKiBzaXplb2YoaW50KSkuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiAw
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWwgPSBhcnJheS0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkpOwor
ICAgICAgICBib29sIG9rOworICAgICAgICBpbnQgaXZhbCA9IHRvSW50MzIodmFsLCBvayk7Cisg
ICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIGZhc3RGcmVlKGRhdGEpOworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZGF0YVtpXSA9IGl2YWw7CisgICAgfQor
ICAgIHJldHVybiBkYXRhOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEQnVmZmVyRGF0YSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QuYnVmZmVyRGF0YSgpIik7CisKKyAgICAvLyBGb3JtczoKKyAgICAvLyAqIGJ1
ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQ2FudmFzQXJyYXkgZGF0YSwgR0xlbnVtIHVzYWdlKTsK
KyAgICAvLyAgIC0gU2V0cyB0aGUgYnVmZmVyJ3MgZGF0YSBmcm9tIHRoZSBnaXZlbiBDYW52YXNB
cnJheQorICAgIC8vICogYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUs
IEdMZW51bSB1c2FnZSk7CisgICAgLy8gICAtIFNldHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0
byB0aGUgZ2l2ZW4gc2l6ZSBpbiBieXRlcworICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDMpIHsK
KyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEPihhcmdzLkhvbGRlcigp
KTsKKyAgICBib29sIG9rOworICAgIGludCB0YXJnZXQgPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsK
KyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhf
RVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQor
ICAgIGludCB1c2FnZSA9IHRvSW50MzIoYXJnc1syXSwgb2spOworICAgIGlmICghb2spIHsKKyAg
ICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1
cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgaWYgKGFyZ3NbMV0tPklz
SW50MzIoKSkgeworICAgICAgICBpbnQgc2l6ZSA9IHRvSW50MzIoYXJnc1sxXSk7CisgICAgICAg
IGNvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCB1c2FnZSk7CisgICAgfSBlbHNlIGlm
IChWOENhbnZhc0FycmF5OjpIYXNJbnN0YW5jZShhcmdzWzFdKSkgeworICAgICAgICBDYW52YXNB
cnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNB
cnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNBUlJBWSwgYXJnc1sxXS0+VG9PYmplY3QoKSk7Cisg
ICAgICAgIGNvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBhcnJheSwgdXNhZ2UpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0RCdWZmZXJTdWJEYXRhKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5idWZmZXJTdWJEYXRhKCkiKTsKKworICAgIC8vIEZvcm1zOgorICAg
IC8vICogYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIENhbnZh
c0FycmF5IGRhdGEpOworICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDMpIHsKKyAgICAgICAgVjhQ
cm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFu
ZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QqIGNvbnRleHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
YXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKKyAgICBib29s
IG9rOworICAgIGludCB0YXJnZXQgPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9r
KSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAg
ICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGludCBvZmZz
ZXQgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJv
eHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRs
ZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGlmICghVjhDYW52YXNBcnJheTo6SGFzSW5z
dGFuY2UoYXJnc1syXSkpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRB
WF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9
CisgICAgQ2FudmFzQXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8Q2FudmFzQXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVksIGFyZ3NbMl0tPlRv
T2JqZWN0KCkpOworICAgIGNvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFy
cmF5KTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RF
Q0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVGV4SW1hZ2UyRCkKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudGV4SW1hZ2UyRCgpIik7CisKKyAgICAvLyBD
dXJyZW50bHkgc3VwcG9ydGVkIGZvcm1zOgorICAgIC8vICogdm9pZCB0ZXhJbWFnZTJEKGluIEdM
ZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLAorICAgIC8vICAgICAgICAgICAgICAgICAgIGlu
IEdMaW50IGludGVybmFsZm9ybWF0LAorICAgIC8vICAgICAgICAgICAgICAgICAgIGluIEdMc2l6
ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCBpbiBHTGludCBib3JkZXIsCisgICAgLy8gICAg
ICAgICAgICAgICAgICAgaW4gR0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5cGUsIGluIENhbnZh
c0FycmF5IHBpeGVscyk7CisgICAgLy8gKiB2b2lkIHRleEltYWdlMkQoaW4gR0xlbnVtIHRhcmdl
dCwgaW4gR0xpbnQgbGV2ZWwsIGluIEhUTUxJbWFnZUVsZW1lbnQgaW1hZ2UsCisgICAgLy8gICAg
ICAgICAgICAgICAgICAgW09wdGlvbmFsXSBpbiBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0g
aW4gR0xib29sZWFuIHByZW11bHRpcGx5QWxwaGEpOworICAgIGlmIChhcmdzLkxlbmd0aCgpICE9
IDMgJiYKKyAgICAgICAgYXJncy5MZW5ndGgoKSAhPSA0ICYmCisgICAgICAgIGFyZ3MuTGVuZ3Ro
KCkgIT0gNSAmJgorICAgICAgICBhcmdzLkxlbmd0aCgpICE9IDkpIHsKKyAgICAgICAgVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxl
ZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qq
IGNvbnRleHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRp
dmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKKyAgICBib29sIG9r
OworICAgIGludCB0YXJnZXQgPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9rKSB7
CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGludCBsZXZlbCA9
IHRvSW50MzIoYXJnc1sxXSwgb2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6
c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBp
ZiAoYXJncy5MZW5ndGgoKSA9PSAzIHx8CisgICAgICAgIGFyZ3MuTGVuZ3RoKCkgPT0gNCB8fAor
ICAgICAgICBhcmdzLkxlbmd0aCgpID09IDUpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGFyZyA9IGFyZ3NbMl07CisgICAgICAgIGlmIChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0lu
c3RhbmNlKGFyZykpIHsKKyAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlX2VsZW1l
bnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbWFnZUVsZW1l
bnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnKSk7CisgICAgICAgICAgICBib29s
IGZsaXBZID0gZmFsc2U7CisgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDQpCisgICAgICAgICAgICAgICAg
ZmxpcFkgPSBhcmdzWzNdLT5Cb29sZWFuVmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChhcmdzLkxl
bmd0aCgpID49IDUpCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYSA9IGFyZ3NbNF0t
PkJvb2xlYW5WYWx1ZSgpOworICAgICAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbWFnZV9lbGVtZW50LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRpZmZlcmVudCAv
IGJldHRlciBleGNlcHRpb24gdHlwZS4KKyAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNl
cHRvcigpOworICAgICAgICB9CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaAorICAgIH0gZWxzZSBp
ZiAoYXJncy5MZW5ndGgoKSA9PSA5KSB7CisgICAgICAgIGludCBpbnRlcm5hbGZvcm1hdCA9IHRv
SW50MzIoYXJnc1syXSwgb2spOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBWOFBy
b3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgICAgICByZXR1cm4gbm90
SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgd2lkdGggPSB0
b0ludDMyKGFyZ3NbM10sIG9rKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgVjhQ
cm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgcmV0dXJuIG5v
dEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGhlaWdodCA9
IHRvSW50MzIoYXJnc1s0XSwgb2spOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBW
OFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgICAgICByZXR1cm4g
bm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYm9yZGVy
ID0gdG9JbnQzMihhcmdzWzVdLCBvayk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAg
IFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgICAgICB9CisgICAgICAgIGludCBmb3Jt
YXQgPSB0b0ludDMyKGFyZ3NbNl0sIG9rKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IHR5
cGUgPSB0b0ludDMyKGFyZ3NbN10sIG9rKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGFyZyA9IGFyZ3NbOF07CisgICAgICAgIGlmIChWOENhbnZhc0FycmF5
OjpIYXNJbnN0YW5jZShhcmcpKSB7CisgICAgICAgICAgICBDYW52YXNBcnJheSogYXJyYXkgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNBcnJheT4oVjhDbGFzc0lu
ZGV4OjpDQU5WQVNBUlJBWSwgYXJnLT5Ub09iamVjdCgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBtdXN0IGRvIHZhbGlkYXRpb24gc2ltaWxhciB0byBKT0dMJ3MgdG8gZW5zdXJlIHRoYXQKKyAg
ICAgICAgICAgIC8vIHRoZSBpbmNvbWluZyBhcnJheSBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgbGVu
Z3RoIGFuZCB0eXBlCisgICAgICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVjKTsKKyAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaAorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRB
WF9FUlIpOworICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1
cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30K
KworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFRleFN1YkltYWdl
MkQpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnRleFN1
YkltYWdlMkQoKSIpOworCisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIG5vdEltcGxlbWVu
dGVkKCk7CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitlbnVtIEZ1bmN0aW9u
VG9DYWxsIHsKKyAgICBrVW5pZm9ybTF2LCBrVW5pZm9ybTJ2LCBrVW5pZm9ybTN2LCBrVW5pZm9y
bTR2LAorICAgIGtWZXJ0ZXhBdHRyaWIxdiwga1ZlcnRleEF0dHJpYjJ2LCBrVmVydGV4QXR0cmli
M3YsIGtWZXJ0ZXhBdHRyaWI0dgorfTsKKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGdW5jdGlvblRvQ2FsbCBmdW5jdGlvblRvQ2FsbCkgeworICAgIC8vIEZvcm1zOgorICAgIC8v
ICogZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGds
VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAv
LyAqIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBn
bFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAg
Ly8gKiBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICog
Z2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAg
IC8vICogZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAq
IGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5
IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIyZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5
IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIyZnYoR0xpbnQgbG9jYXRpb24sIENhbnZh
c0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjNmdihHTGludCBsb2Nh
dGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjNmdihHTGludCBsb2Nh
dGlvbiwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2
KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2
KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworCisgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgIT0gMykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFY
X0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0K
KworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9CisgICAgICAgIFY4RE9N
V3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q+KGFyZ3MuSG9sZGVyKCkpOworICAgIGJvb2wgb2s7CisgICAgaW50IGxvY2F0aW9uID0gdG9J
bnQzMihhcmdzWzBdLCBvayk7CisgICAgaWYgKCFvaykgeworICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRl
cmNlcHRvcigpOworICAgIH0KKyAgICBpZiAoVjhDYW52YXNGbG9hdEFycmF5OjpIYXNJbnN0YW5j
ZShhcmdzWzFdKSkgeworICAgICAgICBDYW52YXNGbG9hdEFycmF5KiBhcnJheSA9IAorICAgICAg
ICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzRmxvYXRBcnJh
eT4oVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZLCBhcmdzWzFdLT5Ub09iamVjdCgpKTsK
KyAgICAgICAgQVNTRVJUKGFycmF5ICE9IE5VTEwpOworICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9u
VG9DYWxsKSB7CisgICAgICAgICAgICBjYXNlIGtVbmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0x
ZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtVbmlmb3JtMnY6
IGNvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIGtVbmlmb3JtM3Y6IGNvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5KTsg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIGtVbmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYo
bG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIx
djogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihs
b2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2
OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGxv
Y2F0aW9uLCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9S
RUFDSEVEKCk7IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgfQorCisgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5ID0KKyAgICAgIHY4
OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KGFyZ3NbMV0pOworICAgIGlmIChhcnJheS5Jc0VtcHR5
KCkpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAg
ICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgdWludDMy
X3QgbGVuID0gYXJyYXktPkxlbmd0aCgpOworICAgIGZsb2F0KiBkYXRhID0ganNBcnJheVRvRmxv
YXRBcnJheShhcnJheSwgbGVuKTsKKyAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIC8v
IEZJWE1FOiBjb25zaWRlciBkaWZmZXJlbnQgLyBiZXR0ZXIgZXhjZXB0aW9uIHR5cGUuCisgICAg
ICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJu
IG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIHN3aXRjaCAoZnVuY3Rpb25U
b0NhbGwpIHsKKyAgICAgICAgY2FzZSBrVW5pZm9ybTF2OiBjb250ZXh0LT51bmlmb3JtMWZ2KGxv
Y2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSBrVW5pZm9ybTJ2OiBjb250
ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBrVW5pZm9ybTN2OiBjb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBi
cmVhazsKKyAgICAgICAgY2FzZSBrVW5pZm9ybTR2OiBjb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0
aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliMXY6IGNv
bnRleHQtPnZlcnRleEF0dHJpYjFmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAg
ICAgIGNhc2Uga1ZlcnRleEF0dHJpYjJ2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYobG9jYXRp
b24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIzdjogY29u
dGV4dC0+dmVydGV4QXR0cmliM2Z2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAg
ICAgY2FzZSBrVmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjRmdihsb2NhdGlv
biwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyBicmVhazsKKyAgICB9CisgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bmlmb3JtSGVs
cGVyaShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblRvQ2FsbCBmdW5jdGlvblRvQ2FsbCkgeworICAg
IC8vIEZvcm1zOgorICAgIC8vICogZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBk
YXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgQ2FudmFzSW50QXJy
YXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRh
dGEpOworICAgIC8vICogZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNJbnRBcnJh
eSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0
YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIENhbnZhc0ludEFycmF5
IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRh
KTsKKyAgICAvLyAqIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgQ2FudmFzSW50QXJyYXkg
ZGF0YSk7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAzKSB7CisgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CisgICAgfQorCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBj
b250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZl
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRD4oYXJncy5Ib2xkZXIoKSk7CisgICAgYm9vbCBvazsK
KyAgICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9rKSB7
CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGlmIChWOENhbnZh
c0ludEFycmF5OjpIYXNJbnN0YW5jZShhcmdzWzFdKSkgeworICAgICAgICBDYW52YXNJbnRBcnJh
eSogYXJyYXkgPSAKKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PENhbnZhc0ludEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0lOVEFSUkFZLCBhcmdzWzFd
LT5Ub09iamVjdCgpKTsKKyAgICAgICAgQVNTRVJUKGFycmF5ICE9IE5VTEwpOworICAgICAgICBz
d2l0Y2ggKGZ1bmN0aW9uVG9DYWxsKSB7CisgICAgICAgICAgICBjYXNlIGtVbmlmb3JtMXY6IGNv
bnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIGtVbmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5KTsgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIGtVbmlmb3JtM3Y6IGNvbnRleHQtPnVuaWZvcm0zaXYobG9j
YXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtVbmlmb3JtNHY6IGNvbnRl
eHQtPnVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4g
YXJyYXkgPQorICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QoYXJnc1sxXSk7CisgICAg
aWYgKGFycmF5LklzRW1wdHkoKSkgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
U1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwor
ICAgIH0KKyAgICB1aW50MzJfdCBsZW4gPSBhcnJheS0+TGVuZ3RoKCk7CisgICAgaW50KiBkYXRh
ID0ganNBcnJheVRvSW50QXJyYXkoYXJyYXksIGxlbik7CisgICAgaWYgKGRhdGEgPT0gTlVMTCkg
eworICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZGlmZmVyZW50IC8gYmV0dGVyIGV4Y2VwdGlv
biB0eXBlLgorICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7Cisg
ICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICBzd2l0
Y2ggKGZ1bmN0aW9uVG9DYWxsKSB7CisgICAgICAgIGNhc2Uga1VuaWZvcm0xdjogY29udGV4dC0+
dW5pZm9ybTFpdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1Vu
aWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7
CisgICAgICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbiwg
ZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5p
Zm9ybTRpdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVhazsKKyAgICB9CisgICAgZmFzdEZyZWUoZGF0YSk7Cisg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm0xZnYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm0xZnYoKSIpOworICAgIHJldHVybiB2ZXJ0ZXhB
dHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVW5pZm9ybTF2KTsKK30KKworQ0FMTEJBQ0tf
RlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm0xaXYpCit7CisgICAgSU5D
X1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm0xaXYoKSIpOworICAg
IHJldHVybiB1bmlmb3JtSGVscGVyaShhcmdzLCBrVW5pZm9ybTF2KTsKK30KKworQ0FMTEJBQ0tf
RlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm0yZnYpCit7CisgICAgSU5D
X1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm0yZnYoKSIpOworICAg
IHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVW5pZm9ybTJ2KTsK
K30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm0y
aXYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZv
cm0yaXYoKSIpOworICAgIHJldHVybiB1bmlmb3JtSGVscGVyaShhcmdzLCBrVW5pZm9ybTJ2KTsK
K30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm0z
ZnYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZv
cm0zZnYoKSIpOworICAgIHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdz
LCBrVW5pZm9ybTN2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRFVuaWZvcm0zaXYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNELnVuaWZvcm0zaXYoKSIpOworICAgIHJldHVybiB1bmlmb3JtSGVscGVyaShhcmdz
LCBrVW5pZm9ybTN2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRFVuaWZvcm00ZnYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNELnVuaWZvcm00ZnYoKSIpOworICAgIHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlm
b3JtSGVscGVyZihhcmdzLCBrVW5pZm9ybTR2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm00aXYpCit7CisgICAgSU5DX1NUQVRTKCJET00u
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm00aXYoKSIpOworICAgIHJldHVybiB1bmlm
b3JtSGVscGVyaShhcmdzLCBrVW5pZm9ybTR2KTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB1bmlmb3JtTWF0cml4SGVscGVyKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1hdHJp
eFNpemUpCit7CisgICAgLy8gRm9ybXM6CisgICAgLy8gKiBnbFVuaWZvcm1NYXRyaXgyZnYoR0xp
bnQgbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEFycmF5IGRhdGEpOworICAgIC8vICog
Z2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBD
YW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50
IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGds
VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgQ2Fu
dmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBs
b2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVu
aWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIENhbnZh
c0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8KKyAgICAvLyBGSVhNRTogbmVlZCB0byBjaGFuZ2Ug
dG8gYWNjZXB0IENhbnZhc0Zsb2F0QXJyYXkgYXMgd2VsbC4KKyAgICBpZiAoYXJncy5MZW5ndGgo
KSAhPSAzKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsK
KyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorCisgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRD4oYXJn
cy5Ib2xkZXIoKSk7CisgICAgYm9vbCBvazsKKyAgICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFy
Z3NbMF0sIG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9y
KCk7CisgICAgfQorICAgIGJvb2wgdHJhbnNwb3NlID0gYXJnc1sxXS0+Qm9vbGVhblZhbHVlKCk7
CisgICAgaWYgKFY4Q2FudmFzRmxvYXRBcnJheTo6SGFzSW5zdGFuY2UoYXJnc1syXSkpIHsKKyAg
ICAgICAgQ2FudmFzRmxvYXRBcnJheSogYXJyYXkgPSAKKyAgICAgICAgICAgIFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc0Zsb2F0QXJyYXk+KFY4Q2xhc3NJbmRleDo6
Q0FOVkFTRkxPQVRBUlJBWSwgYXJnc1syXS0+VG9PYmplY3QoKSk7CisgICAgICAgIEFTU0VSVChh
cnJheSAhPSBOVUxMKTsKKyAgICAgICAgc3dpdGNoIChtYXRyaXhTaXplKSB7CisgICAgICAgICAg
ICBjYXNlIDI6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
YXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzogY29udGV4dC0+dW5pZm9ybU1hdHJp
eDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSA0OiBjb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5
KTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXkgPQorICAgICAgdjg6OkxvY2FsPHY4OjpB
cnJheT46OkNhc3QoYXJnc1syXSk7CisgICAgaWYgKGFycmF5LklzRW1wdHkoKSkgeworICAgICAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICB1aW50MzJfdCBsZW4gPSBhcnJh
eS0+TGVuZ3RoKCk7CisgICAgZmxvYXQqIGRhdGEgPSBqc0FycmF5VG9GbG9hdEFycmF5KGFycmF5
LCBsZW4pOworICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICAgICAgLy8gRklYTUU6IGNvbnNp
ZGVyIGRpZmZlcmVudCAvIGJldHRlciBleGNlcHRpb24gdHlwZS4KKyAgICAgICAgVjhQcm94eTo6
c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgc3dpdGNoIChtYXRyaXhTaXplKSB7CisgICAgICAg
IGNhc2UgMjogY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBk
YXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSAzOiBjb250ZXh0LT51bmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNl
IDQ6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgZGF0YSwg
bGVuKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVh
azsKKyAgICB9CisgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZv
cm1NYXRyaXgyZnYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNELnVuaWZvcm1NYXRyaXgyZnYoKSIpOworICAgIHJldHVybiB1bmlmb3JtTWF0cml4SGVscGVy
KGFyZ3MsIDIpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEVW5pZm9ybU1hdHJpeDNmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QudW5pZm9ybU1hdHJpeDNmdigpIik7CisgICAgcmV0dXJuIHVuaWZvcm1NYXRy
aXhIZWxwZXIoYXJncywgMyk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0RVbmlmb3JtTWF0cml4NGZ2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtTWF0cml4NGZ2KCkiKTsKKyAgICByZXR1cm4gdW5p
Zm9ybU1hdHJpeEhlbHBlcihhcmdzLCA0KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjFmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRP
TS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudmVydGV4QXR0cmliMWZ2KCkiKTsKKyAgICByZXR1
cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjF2KTsK
K30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFZlcnRleEF0
dHJpYjJmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qu
dmVydGV4QXR0cmliMmZ2KCkiKTsKKyAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhl
bHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjJ2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjNmdikKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudmVydGV4QXR0cmliM2Z2KCkiKTsKKyAgICBy
ZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjN2
KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFZlcnRl
eEF0dHJpYjRmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QudmVydGV4QXR0cmliNGZ2KCkiKTsKKyAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9y
bUhlbHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjR2KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNTaG9ydEFycmF5Q3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzU2hvcnRB
cnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNTaG9ydEFycmF5LmgiCisKKyNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhD
YW52YXNBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1
ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQUxMQkFDS19GVU5DX0RF
Q0woQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNh
bnZhc1Nob3J0QXJyYXkuQ29udHJ1Y3RvciIpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdENhbnZh
c0FycmF5PENhbnZhc1Nob3J0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFz
c0luZGV4OjpDQU5WQVNTSE9SVEFSUkFZKSk7Cit9CisKKy8vIEdldCB0aGUgc3BlY2lmaWVkIHZh
bHVlIGZyb20gdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3JpcHQg
TnVtYmVyIG9iamVjdCB0byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFu
Z2UgcmV0dXJuICJ1bmRlZmluZWQiLgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzU2hv
cnRBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNTaG9ydEFycmF5LkluZGV4ZWRQ
cm9wZXJ0eUdldHRlciIpOworICAgIENhbnZhc1Nob3J0QXJyYXkqIGFycmF5ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzU2hvcnRBcnJheT4oVjhDbGFzc0luZGV4
OjpDQU5WQVNTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXggPCAw
KSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKKyAgICBzaG9ydCByZXN1bHQ7CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCBy
ZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6
TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKworLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4g
dGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSBhcmUgc2ls
ZW50bHkgaWdub3JlZC4KK0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1Nob3J0QXJyYXkp
Cit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzU2hvcnRBcnJheS5JbmRleGVkUHJvcGVydHlT
ZXR0ZXIiKTsKKyAgICBDYW52YXNTaG9ydEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Nob3J0QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFT
U0hPUlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoKGluZGV4ID49IDApICYmIChp
bmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+SXNOdW1iZXIo
KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVydCB2YWx1
ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOworICAgICAgICBhcnJheS0+c2V0KGluZGV4LCB2YWx1
ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5z
aWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52
YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlDdXN0b20u
aCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5Q29uc3RydWN0b3IpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXkuQ29udHJ1Y3RvciIpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0Fy
cmF5PENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4
Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURCWVRFQVJSQVkpKTsKK30KKworLy8gR2V0IHRoZSBz
cGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEg
SmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxp
ZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCitJTkRFWEVEX1BST1BFUlRZX0dFVFRF
UihDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNV
bnNpZ25lZEJ5dGVBcnJheS5JbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKKyAgICBDYW52YXNVbnNp
Z25lZEJ5dGVBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FREJZ
VEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4
ID49IGFycmF5LT5sZW5ndGgoKSkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cisg
ICAgdW5zaWduZWQgY2hhciByZXN1bHQ7CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1
bHQpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVt
YmVyOjpOZXcocmVzdWx0KTsKK30KKworLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhl
IGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSBhcmUgc2lsZW50
bHkgaWdub3JlZC4KK0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LkluZGV4
ZWRQcm9wZXJ0eVNldHRlciIpOworICAgIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KiBhcnJheSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVEQllURUFSUkFZLCBpbmZvLkhvbGRlcigp
KTsKKworICAgIGlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkg
eworICAgICAgICBpZiAoIXZhbHVlLT5Jc051bWJlcigpKQorICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IHZhbHVlIGFyZ3VtZW50IHRvIGEgbnVtYmVyIik7
CisgICAgICAgIGFycmF5LT5zZXQoaW5kZXgsIHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICB9
CisgICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25l
ZEludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKKworI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKKyNp
bmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5n
LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBTExC
QUNLX0ZVTkNfREVDTChDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IpCit7CisgICAg
SU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRJbnRBcnJheS5Db250cnVjdG9yIik7CisKKyAg
ICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJyYXk8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4oYXJn
cywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVESU5UQVJS
QVkpKTsKK30KKworLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgaW50ZWdlciBh
cnJheSBhbmQgcmV0dXJuIGl0IHdyYXBwZWQgYXMgYSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3Qg
dG8gVjguIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIHBpeGVsIGJ1ZmZlciByYW5nZSByZXR1
cm4gInVuZGVmaW5lZCIuCitJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZElu
dEFycmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkuSW5k
ZXhlZFByb3BlcnR5R2V0dGVyIik7CisgICAgQ2FudmFzVW5zaWduZWRJbnRBcnJheSogYXJyYXkg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZEludEFy
cmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVESU5UQVJSQVksIGluZm8uSG9sZGVyKCkp
OworCisgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3RoKCkpKQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHVuc2lnbmVkIGludCByZXN1bHQ7
CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKwor
Ly8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGludGVnZXIgYXJyYXkuIEFjY2Vzc2Vz
IG91dHNpZGUgdGhlIHZhbGlkIGludGVnZXIgYXJyYXkgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9y
ZWQuCitJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25lZEludEFycmF5KQorewor
ICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkuSW5kZXhlZFByb3BlcnR5
U2V0dGVyIik7CisgICAgQ2FudmFzVW5zaWduZWRJbnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZEludEFycmF5PihWOENsYXNz
SW5kZXg6OkNBTlZBU1VOU0lHTkVESU5UQVJSQVksIGluZm8uSG9sZGVyKCkpOworCisgICAgaWYg
KChpbmRleCA+PSAwKSAmJiAoaW5kZXggPCBhcnJheS0+bGVuZ3RoKCkpKSB7CisgICAgICAgIGlm
ICghdmFsdWUtPklzTnVtYmVyKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291
bGQgbm90IGNvbnZlcnQgdmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsKKyAgICAgICAgYXJy
YXktPnNldChpbmRleCwgdmFsdWUtPk51bWJlclZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgz
RF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZFNob3J0QXJy
YXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVm
ZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisKKyNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVk
ZSAiVjhDYW52YXNBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgor
I2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQUxMQkFDS19G
VU5DX0RFQ0woQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IpCit7CisgICAgSU5D
X1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LkNvbnRydWN0b3IiKTsKKworICAg
IHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+KGFy
Z3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JU
QVJSQVkpKTsKK30KKworLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkg
YW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4
LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5l
ZCIuCitJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkpCit7
CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LkluZGV4ZWRQcm9w
ZXJ0eUdldHRlciIpOworICAgIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSogYXJyYXkgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsK
KworICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKKyAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBzaG9ydCByZXN1bHQ7
CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKwor
Ly8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRl
IHRoZSB2YWxpZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lOREVYRURfUFJP
UEVSVFlfU0VUVEVSKENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7Cisg
ICAgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4oVjhDbGFzc0luZGV4OjpD
QU5WQVNVTlNJR05FRFNIT1JUQVJSQVksIGluZm8uSG9sZGVyKCkpOworCisgICAgaWYgKChpbmRl
eCA+PSAwKSAmJiAoaW5kZXggPCBhcnJheS0+bGVuZ3RoKCkpKSB7CisgICAgICAgIGlmICghdmFs
dWUtPklzTnVtYmVyKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90
IGNvbnZlcnQgdmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsKKyAgICAgICAgYXJyYXktPnNl
dChpbmRleCwgdmFsdWUtPk51bWJlclZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcu
aAkocmV2aXNpb24gNDg2NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDYgKzMyOCwzOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEU3Ryb2tlVGV4dCk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEUHV0SW1hZ2VEYXRhKTsKIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgICAg
IERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQnVmZmVyRGF0YSk7Cisg
ICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQnVmZmVyU3Vi
RGF0YSk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
U2l6ZW9mKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0RUZXhJbWFnZTJEKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0RUZXhTdWJJbWFnZTJEKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMWZ2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMWl2KTsKKyAgICAgICAgREVDTEFSRV9DQUxM
QkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMmZ2KTsKKyAgICAgICAgREVDTEFS
RV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMml2KTsKKyAgICAgICAg
REVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtM2Z2KTsKKyAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtM2l2
KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlm
b3JtNGZ2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0RVbmlmb3JtNGl2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0RVbmlmb3JtTWF0cml4MmZ2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4M2Z2KTsKKyAgICAgICAgREVDTEFSRV9D
QUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4NGZ2KTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RWZXJ0ZXhBdHRyaWIx
ZnYpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFZl
cnRleEF0dHJpYjJmdik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEVmVydGV4QXR0cmliM2Z2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0RWZXJ0ZXhBdHRyaWI0ZnYpOworCisgICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcik7CisgICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IpOworICAgICAgICBERUNMQVJFX0NB
TExCQUNLKENhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcik7CisgICAgICAgIERFQ0xBUkVfQ0FM
TEJBQ0soQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yKTsKKyAgICAgICAgREVDTEFSRV9D
QUxMQkFDSyhDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IpOworICAgICAgICBERUNM
QVJFX0NBTExCQUNLKENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yKTsKKyNlbmRp
ZgorCiAgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1JfR0VUVEVSKENsaXBib2FyZFR5
cGVzKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDbGlwYm9hcmRDbGVhckRhdGEpOwogICAg
ICAgICBERUNMQVJFX0NBTExCQUNLKENsaXBib2FyZEdldERhdGEpOwpAQCAtNDYyLDkgKzQ5NCwz
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJU
WV9TRVRURVIoSFRNTFNlbGVjdEVsZW1lbnRDb2xsZWN0aW9uKTsKICAgICAgICAgREVDTEFSRV9O
QU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTENvbGxlY3Rpb24pOwogCisjaWYgRU5BQkxFKDNEX0NB
TlZBUykKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNCeXRl
QXJyYXkpOworICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc0J5
dGVBcnJheSk7CisKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52
YXNGbG9hdEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihD
YW52YXNGbG9hdEFycmF5KTsKKworICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VU
VEVSKENhbnZhc0ludEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NF
VFRFUihDYW52YXNJbnRBcnJheSk7CisjZW5kaWYKKwogICAgICAgICBERUNMQVJFX0lOREVYRURf
UFJPUEVSVFlfR0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOwogICAgICAgICBERUNMQVJFX0lOREVY
RURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOwogCisjaWYgRU5BQkxFKDNEX0NB
TlZBUykKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNTaG9y
dEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNT
aG9ydEFycmF5KTsKKworICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZ
X1NFVFRFUihDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSk7CisKKyAgICAgICAgREVDTEFSRV9JTkRF
WEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZEludEFycmF5KTsKKyAgICAgICAgREVD
TEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25lZEludEFycmF5KTsKKwor
ICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheSk7CisgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoQ2FudmFz
VW5zaWduZWRTaG9ydEFycmF5KTsKKyNlbmRpZgorCiAgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlf
QUNDRVNTT1JfR0VUVEVSKE1lc3NhZ2VFdmVudFBvcnRzKTsKICAgICAgICAgREVDTEFSRV9DQUxM
QkFDSyhNZXNzYWdlRXZlbnRJbml0TWVzc2FnZUV2ZW50KTsKIApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4NjU5
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVk
ZSAiWFBhdGhOU1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKKyNpbmNsdWRl
ICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNp
bmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKQEAgLTk0LDEzICs5NSwxNiBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woRG9jdW1lbnRHZXRDU1NDYW52YXNDCiAgICAgaW50IHdpZHRoID0gdG9JbnQzMihh
cmdzWzJdKTsKICAgICBpbnQgaGVpZ2h0ID0gdG9JbnQzMihhcmdzWzNdKTsKICAgICBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiByZXN1bHQgPSBpbXAtPmdldENTU0NhbnZhc0NvbnRleHQoY29udGV4
dElkLCBuYW1lLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICBpZiAocmVzdWx0LT5pczJkKCkpCiAgICAgICAgIHJl
dHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFT
UkVOREVSSU5HQ09OVEVYVDJELCByZXN1bHQpOwotICAgIGVsc2UgewotICAgICAgICAvLyBGSVhN
RTogQWRkIHRoZSBjb252ZXJzaW9uIHRvIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCB3aGVuIGl0
IGlzIGhvb2tlZCB1cC4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAgICB9CisjaWYgRU5BQkxFKDNEX0NBTlZB
UykKKyAgICBlbHNlIGlmIChyZXN1bHQtPmlzM2QoKSkKKyAgICAgICAgcmV0dXJuIFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05U
RVhUM0QsIHJlc3VsdCk7CisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxD
YW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDg2NTkpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCiAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCkBAIC00NiwxMiArNDcsMTYgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KEhUTUxDYW52YXNFbGVtZW50R2V0QwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBpbXAgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxDYW52YXNFbGVtZW50Pihob2xk
ZXIpOwogICAgIFN0cmluZyBjb250ZXh0SWQgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAg
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVzdWx0ID0gaW1wLT5nZXRDb250ZXh0KGNvbnRl
eHRJZCk7Ci0gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmlzMmQoKSkKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBpZiAocmVzdWx0LT5pczJk
KCkpCiAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCByZXN1bHQpOwotICAgIGVsc2Ugewot
ICAgICAgICAvLyBGSVhNRTogQWRkIHRoZSBjb252ZXJzaW9uIHRvIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRCB3aGVuIGl0IGlzIGhvb2tlZCB1cC4KLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpOwotICAgIH0KKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIGVsc2UgaWYg
KHJlc3VsdC0+aXMzZCgpKQorICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQzRCwgcmVzdWx0KTsK
KyNlbmRpZgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDQ4NjU5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw2ICs2MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSW1h
Z2VEYXRhOwogICAgIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAKKyAgICAvLyBGSVhNRTog
aWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jtcy4KKyNpZiBQTEFURk9S
TShTS0lBKQorICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw7CisjZW5kaWYKKwog
ICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEIDogTm9uY29weWFibGUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgZW51bSBTaGFkZXJUeXBlIHsgRlJBR01FTlRfU0hBREVSLCBWRVJURVhfU0hBREVS
IH07CkBAIC0zMDgsMTAgKzMxMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRl
OiAgICAgICAgCiAgICAgICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0Owog
ICAgICAgICAKLSNpZiBQTEFURk9STShTS0lBKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
U2tpYS5oIgotI2VuZGlmCi0KICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFZlY3RvcjxWZWN0
b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKICAgICAgICAgCkBAIC0zMjAsNiArMzIxLDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgR0x1aW50IG1fZmJvOwogICAgICAgICBHTHVp
bnQgbV9kZXB0aEJ1ZmZlcjsKICNlbmRpZiAgICAgICAgCisKKyAgICAgICAgLy8gRklYTUU6IGlk
ZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCisjaWYgUExBVEZPUk0o
U0tJQSkKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw7Cisg
ICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBkOworI2VuZGlmCiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="21220"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40150</attachid>
            <date>2009-09-25 15:15:13 -0700</date>
            <delta_ts>2009-09-25 19:13:24 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>webgl-v8-bindings-3.patch</filename>
            <type>text/plain</type>
            <size>85948</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODc2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMDktMDktMjIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KKworICAgICAgICBb
Q2hyb21pdW1dIEFkZCBpbml0aWFsIFY4IGJpbmRpbmdzIGZvciBXZWJHTAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk2NjQKKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OmdldFRlbXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4LmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzQXJyYXlCdWZmZXJDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2Fu
dmFzQXJyYXlDdXN0b20uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RDYW52
YXNBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQnl0ZUFycmF5
Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wp
OgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAo
V2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9TRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOENhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX1NFVFRF
Uik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzSW50QXJyYXlDdXN0b20u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3Jl
OjpJTkRFWEVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpqc0FycmF5VG9GbG9hdEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzQXJyYXlU
b0ludEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAg
ICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6dmVydGV4QXR0cmliQW5kVW5pZm9y
bUhlbHBlcmYpOgorICAgICAgICAoV2ViQ29yZTo6dW5pZm9ybUhlbHBlcmkpOgorICAgICAgICAo
V2ViQ29yZTo6dW5pZm9ybU1hdHJpeEhlbHBlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVS
VFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1
c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToK
KyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdl
YkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhF
RF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9T
RVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVO
Q19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAg
ICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxl
bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisKIDIwMDkt
MDktMjQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNDg3
NjcpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNzYsMTEgKzc2
LDI3IEBACiAgICAgICAgICAgICAnZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmlkbCcsCiAgICAg
ICAgICAgICAnZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5pZGwnLAogICAgICAgICAgICAgJ2Rv
bS9XaGVlbEV2ZW50LmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQXJyYXku
aWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNBcnJheUJ1ZmZlci5pZGwnLAor
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0J1ZmZlci5pZGwnLAorICAgICAgICAgICAg
J2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL0NhbnZhc0Zsb2F0QXJyYXkuaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52
YXNGcmFtZWJ1ZmZlci5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0dyYWRp
ZW50LmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzSW50QXJyYXkuaWRsJywK
ICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCcsCiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL0NhbnZhc1Byb2dyYW0uaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJidWZmZXIuaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzU2hhZGVy
LmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5pZGwnLAor
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmlkbCcsCisg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5pZGwnLAorICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5pZGwnLAorICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1RleHR1cmUuaWRsJywKICAgICAgICAgICAgICdo
dG1sL0RhdGFHcmlkQ29sdW1uLmlkbCcsCiAgICAgICAgICAgICAnaHRtbC9EYXRhR3JpZENvbHVt
bkxpc3QuaWRsJywKICAgICAgICAgICAgICdodG1sL0ZpbGUuaWRsJywKQEAgLTYwNyw3ICs2MjMs
MTcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdvcmtlckN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhlbEFycmF5
Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQXJy
YXlDdXN0b20uaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQXJy
YXlCdWZmZXJDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhD
YW52YXNCeXRlQXJyYXlDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhDYW52YXNJbnRBcnJheUN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhDYW52YXNTaG9ydEFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3Bw
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEludEFy
cmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFz
VW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVjdExpc3RDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xh
cmF0aW9uQ3VzdG9tLmNwcCcsCkBAIC0xMjIxLDE4ICsxMjQ3LDUyIEBACiAgICAgICAgICAgICAn
aGlzdG9yeS9IaXN0b3J5SXRlbS5oJywKICAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5j
cHAnLAogICAgICAgICAgICAgJ2hpc3RvcnkvUGFnZUNhY2hlLmgnLAorICAgICAgICAgICAgJ2h0
bWwvY2FudmFzL0NhbnZhc0FycmF5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2Fu
dmFzQXJyYXkuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIu
Y3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNBcnJheUJ1ZmZlci5oJywKKyAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuY3BwJywKKyAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2Fu
dmFzQnl0ZUFycmF5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFy
cmF5LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuY3BwJywK
KyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNGbG9hdEFycmF5LmgnLAorICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmNwcCcsCisgICAgICAgICAgICAnaHRt
bC9jYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMv
Q2FudmFzR3JhZGllbnQuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNHcmFk
aWVudC5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5jcHAnLAor
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0ludEFycmF5LmgnLAorICAgICAgICAgICAg
J2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFz
L0NhbnZhc09iamVjdC5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJu
LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oJywKICAgICAg
ICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmNwcCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZh
cy9DYW52YXNQcm9ncmFtLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUHJv
Z3JhbS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuY3Bw
JywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuaCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAnLAogICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCcsCiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCcsCiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgnLAorICAgICAgICAgICAg
J2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAnLAorICAgICAgICAgICAg
J2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oJywKKyAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9DYW52YXNTaGFkZXIuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9D
YW52YXNTaGFkZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJh
eS5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuaCcsCiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwJywKICAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52
YXNUZXh0dXJlLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzVGV4dHVyZS5o
JywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5jcHAn
LAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgnLAor
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3BwJywKKyAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmgnLAorICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5jcHAnLAorICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oJywKICAgICAgICAg
ICAgICdodG1sL0NvbGxlY3Rpb25DYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvQ29sbGVj
dGlvbkNhY2hlLmgnLAogICAgICAgICAgICAgJ2h0bWwvQ29sbGVjdGlvblR5cGUuaCcsCkBAIC0y
MDg1LDYgKzIxNDUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgnLApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA0ODc2NykKKysr
IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTE1OTYsNyArMTU5NiwyNCBAQCBzdWIgSXNSZWZQdHJUeXBlCiB7CiAgICAgbXkgJHR5
cGUgPSBzaGlmdDsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQXR0ciI7CisgICAgcmV0dXJu
IDEgaWYgJHR5cGUgZXEgIkNhbnZhc0FycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
Q2FudmFzQXJyYXlCdWZmZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNCb29s
ZWFuQXJyYXkiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNCeXRlQXJyYXkiOwor
ICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNCdWZmZXIiOworICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICJDYW52YXNGbG9hdEFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
Q2FudmFzRnJhbWVidWZmZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNHcmFk
aWVudCI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc0ludEFycmF5IjsKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzT2JqZWN0IjsKKyAgICByZXR1cm4gMSBpZiAkdHlw
ZSBlcSAiQ2FudmFzUHJvZ3JhbSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc1Jl
bmRlcmJ1ZmZlciI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc1NoYWRlciI7Cisg
ICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc1Nob3J0QXJyYXkiOworICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJDYW52YXNUZXh0dXJlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXkiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52
YXNVbnNpZ25lZEludEFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2xpZW50UmVjdCI7
CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNsaWVudFJlY3RMaXN0IjsKICAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiQ0RBVEFTZWN0aW9uIjsKQEAgLTE3MjUsNiArMTc0MiwxOSBAQCBzdWIg
R2V0TmF0aXZlVHlwZQogbXkgJXR5cGVDYW5GYWlsQ29udmVyc2lvbiA9ICgKICAgICAiQXRvbWlj
U3RyaW5nIiA9PiAwLAogICAgICJBdHRyIiA9PiAxLAorICAgICJDYW52YXNBcnJheSIgPT4gMCwK
KyAgICAiQ2FudmFzQnVmZmVyIiA9PiAwLAorICAgICJDYW52YXNCeXRlQXJyYXkiID0+IDAsCisg
ICAgIkNhbnZhc0Zsb2F0QXJyYXkiID0+IDAsCisgICAgIkNhbnZhc0ZyYW1lYnVmZmVyIiA9PiAw
LAorICAgICJDYW52YXNHcmFkaWVudCIgPT4gMCwKKyAgICAiQ2FudmFzSW50QXJyYXkiID0+IDAs
CisgICAgIkNhbnZhc1BpeGVsQXJyYXkiID0+IDAsCisgICAgIkNhbnZhc1Byb2dyYW0iID0+IDAs
CisgICAgIkNhbnZhc1JlbmRlcmJ1ZmZlciIgPT4gMCwKKyAgICAiQ2FudmFzU2hhZGVyIiA9PiAw
LAorICAgICJDYW52YXNTaG9ydEFycmF5IiA9PiAwLAorICAgICJDYW52YXNUZXh0dXJlIiA9PiAw
LAogICAgICJDb21wYXJlSG93IiA9PiAwLAogICAgICJEYXRhR3JpZENvbHVtbiIgPT4gMCwKICAg
ICAiRE9NU3RyaW5nIiA9PiAwLApAQCAtMTczNCw4ICsxNzY0LDExIEBAIG15ICV0eXBlQ2FuRmFp
bENvbnZlcnNpb24gPSAoCiAgICAgIkV2ZW50IiA9PiAwLAogICAgICJFdmVudExpc3RlbmVyIiA9
PiAwLAogICAgICJFdmVudFRhcmdldCIgPT4gMCwKKyAgICAiSFRNTENhbnZhc0VsZW1lbnQiID0+
IDAsCiAgICAgIkhUTUxFbGVtZW50IiA9PiAwLAorICAgICJIVE1MSW1hZ2VFbGVtZW50IiA9PiAw
LAogICAgICJIVE1MT3B0aW9uRWxlbWVudCIgPT4gMCwKKyAgICAiSFRNTFZpZGVvRWxlbWVudCIg
PT4gMCwKICAgICAiTm9kZSIgPT4gMCwKICAgICAiTm9kZUZpbHRlciIgPT4gMCwKICAgICAiTWVz
c2FnZVBvcnQiID0+IDAsCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNs
dWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVk
ZS5oCShyZXZpc2lvbiA0ODc2NykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0lu
Y2x1ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDI5IEBACiAKICNpbmNsdWRlICJB
YnN0cmFjdFdvcmtlci5oIgogI2luY2x1ZGUgIkJhckluZm8uaCIKKyNpbmNsdWRlICJDYW52YXNB
cnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFz
QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiQ2FudmFz
RmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc0ZyYW1lYnVmZmVyLmgiCiAjaW5jbHVkZSAi
Q2FudmFzR3JhZGllbnQuaCIKKyNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgorI2luY2x1ZGUg
IkNhbnZhc09iamVjdC5oIgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJD
YW52YXNQaXhlbEFycmF5LmgiCisjaW5jbHVkZSAiQ2FudmFzUHJvZ3JhbS5oIgorI2luY2x1ZGUg
IkNhbnZhc1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJDYW52YXNTaGFkZXIuaCIKKyNpbmNs
dWRlICJDYW52YXNTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRCeXRlQXJy
YXkuaCIKKyNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEludEFycmF5LmgiCisjaW5jbHVkZSAiQ2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCiAjaW5jbHVkZSAiQ2FudmFzU3R5bGUuaCIKKyNpbmNs
dWRlICJDYW52YXNUZXh0dXJlLmgiCiAjaW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5oIgogI2luY2x1
ZGUgIkNsaWVudFJlY3QuaCIKICNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwCShyZXZpc2lv
biA0ODc2NykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwyNyBAQAogI2luY2x1ZGUgImJpbmRpbmdz
L1Y4QWJzdHJhY3RXb3JrZXIuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4QXR0ci5jcHAiCiAj
aW5jbHVkZSAiYmluZGluZ3MvVjhCYXJJbmZvLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENh
bnZhc0FycmF5LmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc0FycmF5QnVmZmVyLmNw
cCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc0J1ZmZlci5jcHAiCisjaW5jbHVkZSAiYmlu
ZGluZ3MvVjhDYW52YXNCeXRlQXJyYXkuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFz
RmxvYXRBcnJheS5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNGcmFtZWJ1ZmZlci5j
cHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNHcmFkaWVudC5jcHAiCisjaW5jbHVkZSAi
YmluZGluZ3MvVjhDYW52YXNJbnRBcnJheS5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52
YXNQYXR0ZXJuLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1BpeGVsQXJyYXkuY3Bw
IgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzUHJvZ3JhbS5jcHAiCisjaW5jbHVkZSAiYmlu
ZGluZ3MvVjhDYW52YXNSZW5kZXJidWZmZXIuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNELmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1NoYWRlci5jcHAiCisj
aW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNTaG9ydEFycmF5LmNwcCIKKyNpbmNsdWRlICJiaW5k
aW5ncy9WOENhbnZhc1RleHR1cmUuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzVW5z
aWduZWRCeXRlQXJyYXkuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzVW5zaWduZWRJ
bnRBcnJheS5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNVbnNpZ25lZFNob3J0QXJy
YXkuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q0RBVEFTZWN0aW9uLmNwcCIKICNpbmNsdWRl
ICJiaW5kaW5ncy9WOENoYXJhY3RlckRhdGEuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2xp
ZW50UmVjdC5jcHAiCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCShyZXZp
c2lvbiA0ODc2NykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDM2LDcgKzQzNiw0MCBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gVjhECiAgICAgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQog
ICAgIC8vIFRoZSBmb2xsb3dpbmcgb2JqZWN0cyBhcmUgY3JlYXRlZCBmcm9tIEphdmFTY3JpcHQu
CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU0FSUkFZQlVGRkVSOgorICAgICAgICBkZXNj
cmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soQ2FudmFzQXJyYXlCdWZmZXJDb25z
dHJ1Y3RvcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFT
QllURUFSUkFZOgorICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJB
Q0soQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IpKTsKKyAgICAgICAgZGVzY3JpcHRvci0+SW5z
dGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKFVTRV9JTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUihDYW52YXNCeXRlQXJyYXkpLCBVU0VfSU5ERVhFRF9QUk9QRVJUWV9TRVRU
RVIoQ2FudmFzQnl0ZUFycmF5KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhDbGFzc0lu
ZGV4OjpDQU5WQVNGTE9BVEFSUkFZOgorICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxl
cihVU0VfQ0FMTEJBQ0soQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yKSk7CisgICAgICAgIGRl
c2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihV
U0VfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzRmxvYXRBcnJheSksIFVTRV9JTkRFWEVE
X1BST1BFUlRZX1NFVFRFUihDYW52YXNGbG9hdEFycmF5KSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVjhDbGFzc0luZGV4OjpDQU5WQVNJTlRBUlJBWToKKyAgICAgICAgZGVzY3JpcHRvci0+
U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKENhbnZhc0ludEFycmF5Q29uc3RydWN0b3IpKTsK
KyAgICAgICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVy
dHlIYW5kbGVyKFVTRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNJbnRBcnJheSksIFVT
RV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNJbnRBcnJheSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTU0hPUlRBUlJBWToKKyAgICAgICAgZGVz
Y3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKENhbnZhc1Nob3J0QXJyYXlDb25z
dHJ1Y3RvcikpOworICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldElu
ZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc1No
b3J0QXJyYXkpLCBVU0VfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzU2hvcnRBcnJheSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURC
WVRFQVJSQVk6CisgICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFD
SyhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yKSk7CisgICAgICAgIGRlc2NyaXB0
b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0VfSU5E
RVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkpLCBVU0VfSU5ERVhF
RF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVESU5UQVJSQVk6CisgICAg
ICAgIGRlc2NyaXB0b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNVbnNpZ25l
ZEludEFycmF5Q29uc3RydWN0b3IpKTsKKyAgICAgICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1w
bGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKFVTRV9JTkRFWEVEX1BST1BFUlRZX0dF
VFRFUihDYW52YXNVbnNpZ25lZEludEFycmF5KSwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVS
KENhbnZhc1Vuc2lnbmVkSW50QXJyYXkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWOENs
YXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVEU0hPUlRBUlJBWToKKyAgICAgICAgZGVzY3JpcHRvci0+
U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0
cnVjdG9yKSk7CisgICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5k
ZXhlZFByb3BlcnR5SGFuZGxlcihVU0VfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5KSwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheSkpOworICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgVjhDbGFz
c0luZGV4OjpET01QQVJTRVI6CiAgICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxIYW5kbGVyKFVT
RV9DQUxMQkFDSyhET01QYXJzZXJDb25zdHJ1Y3RvcikpOwogICAgICAgICBicmVhazsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEluZGV4LmNwcAkocmV2aXNpb24gNDg3NjcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SW5kZXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksNiArMzk5LDI1IEBACiAj
aW5jbHVkZSAiVjhTaGFyZWRXb3JrZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKDNEX0NBTlZB
UykKKyNpbmNsdWRlICJWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlY4
Q2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5LmgiCisjaW5jbHVk
ZSAiVjhDYW52YXNCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJWOENhbnZhc0J1ZmZlci5oIgorI2lu
Y2x1ZGUgIlY4Q2FudmFzRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzRnJhbWVidWZm
ZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0ludEFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNQ
cm9ncmFtLmgiCisjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJW
OENhbnZhc1NoYWRlci5oIgorI2luY2x1ZGUgIlY4Q2FudmFzU2hvcnRBcnJheS5oIgorI2luY2x1
ZGUgIlY4Q2FudmFzVGV4dHVyZS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzVW5zaWduZWRCeXRlQXJy
YXkuaCIKKyNpbmNsdWRlICJWOENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKKyNpbmNsdWRlICJW
OENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogRnVuY3Rpb25UZW1wbGF0ZUZhY3RvcnkgVjhDbGFzc0luZGV4OjpHZXRGYWN0b3J5KFY4
V3JhcHBlclR5cGUgdHlwZSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCShyZXZpc2lvbiA0ODc2
NykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NDQsMTIgKzQ0NCwzNSBAQCB0eXBlZGVmIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
CiAjZGVmaW5lIERPTV9PQkpFQ1RfV09SS0VSU19UWVBFUyhWKQogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQorI2RlZmluZSBET01fT0JKRUNUXzNEX0NBTlZBU19UWVBFUyhWKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoQ0FOVkFTQVJSQVksIENhbnZh
c0FycmF5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYo
Q0FOVkFTQVJSQVlCVUZGRVIsIENhbnZhc0FycmF5QnVmZmVyKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIFYoQ0FOVkFTQlVGRkVSLCBDYW52YXNCdWZmZXIpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoQ0FOVkFTQllURUFSUkFZLCBDYW52
YXNCeXRlQXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoQ0FO
VkFTRkxPQVRBUlJBWSwgQ2FudmFzRmxvYXRBcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIFYoQ0FOVkFTRlJBTUVCVUZGRVIsIENhbnZhc0ZyYW1lYnVmZmVyKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoQ0FOVkFTSU5UQVJSQVksIENhbnZhc0lu
dEFycmF5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoQ0FOVkFT
UFJPR1JBTSwgQ2FudmFzUHJvZ3JhbSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIFYoQ0FOVkFTUkVOREVSQlVGRkVSLCBDYW52YXNSZW5kZXJidWZmZXIpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoQ0FOVkFTUkVOREVSSU5HQ09OVEVYVDNELCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QpICAgICAgICAgICAgICAgXAorICAgIFYoQ0FOVkFTU0hB
REVSLCBDYW52YXNTaGFkZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIFYoQ0FOVkFTU0hPUlRBUlJBWSwgQ2FudmFzU2hvcnRBcnJheSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIFYoQ0FOVkFTVEVYVFVSRSwgQ2FudmFzVGV4dHVyZSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoQ0FOVkFTVU5TSUdO
RURCWVRFQVJSQVksIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KSAgICAgICAgICAgICAgICAgXAor
ICAgIFYoQ0FOVkFTVU5TSUdORURJTlRBUlJBWSwgQ2FudmFzVW5zaWduZWRJbnRBcnJheSkgICAg
ICAgICAgICAgICAgICAgXAorICAgIFYoQ0FOVkFTVU5TSUdORURTSE9SVEFSUkFZLCBDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXkpCisjZWxzZQorI2RlZmluZSBET01fT0JKRUNUXzNEX0NBTlZBU19U
WVBFUyhWKQorI2VuZGlmCisKICNkZWZpbmUgRE9NX09CSkVDVF9UWVBFUyhWKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBET01fT0JKRUNUX1RZUEVT
XzEoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBET01fT0JKRUNUX1RZUEVTXzIoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICBET01fT0JKRUNUX0RBVEFCQVNFX1RZUEVTKFYpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBET01fT0JKRUNUX1NUT1JBR0Vf
VFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBE
T01fT0JKRUNUX1dPUktFUlNfVFlQRVMoVikKKyAgICBET01fT0JKRUNUX1dPUktFUlNfVFlQRVMo
VikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBET01fT0JK
RUNUXzNEX0NBTlZBU19UWVBFUyhWKQogCiAjaWYgRU5BQkxFKFNWRykKIC8vIFNWR19PQkpFQ1Rf
VFlQRVMgYXJlIHN2ZyBub24tbm9kZSwgbm9uLXBvZCB0eXBlcy4KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQXJyYXlCdWZmZXJDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQXJyYXlCdWZmZXJDdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNB
cnJheUJ1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFz
QXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2Fu
dmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19ERUNM
KENhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2Fu
dmFzQXJyYXlCdWZmZXIuQ29udHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0
Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3Rv
ciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIik7CisKKyAgICBpbnQgYXJnTGVuID0g
YXJncy5MZW5ndGgoKTsKKyAgICAvLyBTdXBwb3J0ZWQgY29uc3RydWN0b3JzOgorICAgIC8vIENh
bnZhc0FycmF5QnVmZmVyKG4pIHdoZXJlIG4gaXMgYW4gaW50ZWdlcjoKKyAgICAvLyAgIC0tIGNy
ZWF0ZSBhbiBlbXB0eSBidWZmZXIgb2YgbiBieXRlcworCisgICAgaWYgKGFyZ0xlbiAhPSAxKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBzcGVj
aWZpZWQgdG8gY29uc3RydWN0b3IgKHJlcXVpcmVzIDEpIik7CisKKyAgICBpbnQgbGVuID0gMDsK
KyAgICBpZiAoIWFyZ3NbMF0tPklzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
IkFyZ3VtZW50IHRvIENhbnZhc0FycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHdhcyBub3QgYW4gaW50
ZWdlciIpOworICAgIGxlbiA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgUmVmUHRyPENhbnZhc0Fy
cmF5QnVmZmVyPiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbik7CisgICAg
Ly8gVHJhbnNmb3JtIHRoZSBob2xkZXIgaW50byBhIHdyYXBwZXIgb2JqZWN0IGZvciB0aGUgYXJy
YXkuCisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xh
c3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNBUlJBWUJVRkZFUiksIGJ1ZmZlci5n
ZXQoKSk7CisgICAgcmV0dXJuIHRvVjgoYnVmZmVyLnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5Q3VzdG9t
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNBcnJh
eUN1c3RvbS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
YW52YXNBcnJheUN1c3RvbS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNB
cnJheUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDYW52
YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUg
IlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gVGVtcGxhdGUgZnVu
Y3Rpb24gdXNlZCBieSB0aGUgQ2FudmFzQXJyYXkqQ29uc3RydWN0b3IgY2FsbGJhY2tzLgorICAg
IHRlbXBsYXRlPGNsYXNzIEFycmF5Q2xhc3M+CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnN0cnVjdENhbnZhc0FycmF5KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGFzc0luZGV4KQorICAg
IHsKKyAgICAgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBh
cyBhIGZ1bmN0aW9uLiIpOworCisgICAgICAgIGludCBhcmdMZW4gPSBhcmdzLkxlbmd0aCgpOwor
ICAgICAgICAvLyBTdXBwb3J0ZWQgY29uc3RydWN0b3JzOgorICAgICAgICAvLyBDYW52YXM8VD5B
cnJheShuKSB3aGVyZSBuIGlzIGFuIGludGVnZXI6CisgICAgICAgIC8vICAgLS0gY3JlYXRlIGFu
IGVtcHR5IGFycmF5IG9mIG4gZWxlbWVudHMKKyAgICAgICAgLy8gQ2FudmFzPFQ+QXJyYXkoYXJy
KSB3aGVyZSBhcnIgaXMgYW4gYXJyYXk6CisgICAgICAgIC8vICAgLS0gY3JlYXRlIGEgQ2FudmFz
PFQ+QXJyYXkgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgImFyciIKKyAgICAgICAgLy8gQ2Fu
dmFzPFQ+QXJyYXkoYnVmLCBvZmZzZXQsIGxlbmd0aCkKKyAgICAgICAgLy8gICAtLSBjcmVhdGUg
YSBDYW52YXM8VD5BcnJheSBwb2ludGluZyB0byB0aGUgQ2FudmFzQXJyYXlCdWZmZXIKKyAgICAg
ICAgLy8gICAgICAiYnVmIiwgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBvZmZzZXQsIGZvciB0
aGUgZ2l2ZW4KKyAgICAgICAgLy8gICAgICBsZW5ndGgKKworICAgICAgICBpZiAoYXJnTGVuID09
IDApCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm8gYXJndW1lbnRzIHNwZWNpZmll
ZCB0byBjb25zdHJ1Y3RvciIpOworCisgICAgICAgIC8vIFNlZSB3aGV0aGVyIHRoZSBmaXJzdCBh
cmd1bWVudCBpcyBhIENhbnZhc0FycmF5QnVmZmVyLgorICAgICAgICBpZiAoVjhDYW52YXNBcnJh
eUJ1ZmZlcjo6SGFzSW5zdGFuY2UoYXJnc1swXSkpIHsKKyAgICAgICAgICAgIGlmIChhcmdMZW4g
PiAzKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJXcm9uZyBudW1iZXIgb2Yg
YXJndW1lbnRzIHRvIG5ldyBDYW52YXM8VD5BcnJheShDYW52YXNBcnJheUJ1ZmZlciwgaW50LCBp
bnQpIik7CisKKyAgICAgICAgICAgIENhbnZhc0FycmF5QnVmZmVyKiBidWYgPQorICAgICAgICAg
ICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc0FycmF5QnVm
ZmVyPihWOENsYXNzSW5kZXg6OkNBTlZBU0FSUkFZQlVGRkVSLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
WzBdLT5Ub09iamVjdCgpKTsKKyAgICAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgMCB0
byBhIENhbnZhc0FycmF5QnVmZmVyIik7CisgICAgICAgICAgICBib29sIG9rOworICAgICAgICAg
ICAgaW50IG9mZnNldCA9IDA7CisgICAgICAgICAgICBpZiAoYXJnTGVuID4gMSkgeworICAgICAg
ICAgICAgICAgIG9mZnNldCA9IHRvSW50MzIoYXJnc1sxXSwgb2spOworICAgICAgICAgICAgICAg
IGlmICghb2spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBu
b3QgY29udmVydCBhcmd1bWVudCAxIHRvIGFuIGludGVnZXIiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGludCBsZW5ndGggPSBidWYtPmJ5dGVMZW5ndGgoKSAtIG9mZnNldDsKKyAgICAg
ICAgICAgIGlmIChhcmdMZW4gPiAyKSB7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gdG9JbnQz
MihhcmdzWzJdLCBvayk7CisgICAgICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDIgdG8g
YW4gaW50ZWdlciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkxlbmd0aCAvIG9mZnNldCBvdXQg
b2YgcmFuZ2UiKTsKKworICAgICAgICAgICAgUmVmUHRyPEFycmF5Q2xhc3M+IGFycmF5ID0gQXJy
YXlDbGFzczo6Y3JlYXRlKGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICAgICAgaWYgKGFy
cmF5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkludmFsaWQg
YXJndW1lbnRzIHRvIG5ldyBDYW52YXM8VD5BcnJheShDYW52YXNBcnJheUJ1ZmZlciwgaW50LCBp
bnQpIik7CisgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIGhvbGRlciBpbnRvIGEgd3JhcHBl
ciBvYmplY3QgZm9yIHRoZSBhcnJheS4KKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9N
V3JhcHBlcihhcmdzLkhvbGRlcigpLCBjbGFzc0luZGV4LCBhcnJheS5nZXQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdG9WOChhcnJheS5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgICAg
ICB9CisKKyAgICAgICAgaW50IGxlbiA9IDA7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkFycmF5
PiBzcmNBcnJheTsKKyAgICAgICAgaWYgKGFyZ0xlbiAhPSAxKQorICAgICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxUPkFy
cmF5KGludCAvIGFycmF5KSIpOworCisgICAgICAgIGlmIChhcmdzWzBdLT5Jc0ludDMyKCkpIHsK
KyAgICAgICAgICAgIGxlbiA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgICAgIH0gZWxzZSBpZiAo
YXJnc1swXS0+SXNBcnJheSgpKSB7CisgICAgICAgICAgICBzcmNBcnJheSA9IHY4OjpMb2NhbDx2
ODo6QXJyYXk+OjpDYXN0KGFyZ3NbMF0pOworICAgICAgICAgICAgaWYgKHNyY0FycmF5LklzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZl
cnQgYXJndW1lbnQgMCB0byBhbiBhcnJheSIpOworICAgICAgICAgICAgbGVuID0gc3JjQXJyYXkt
Pkxlbmd0aCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAwIHRvIGVpdGhlciBhbiBpbnQzMiBvciBhbiBh
cnJheSIpOworCisgICAgICAgIFJlZlB0cjxBcnJheUNsYXNzPiBhcnJheSA9IEFycmF5Q2xhc3M6
OmNyZWF0ZShsZW4pOworICAgICAgICBpZiAoIXNyY0FycmF5LklzRW1wdHkoKSkgeworICAgICAg
ICAgICAgLy8gTmVlZCB0byBjb3B5IHRoZSBpbmNvbWluZyBhcnJheSBpbnRvIHRoZSBuZXdseSBj
cmVhdGVkIENhbnZhc0FycmF5LgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47
IGkrKykgeworICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbCA9IHNyY0Fy
cmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YWwt
PklzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBidWZbMjU2XTsKKyAgICAg
ICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJDb3VsZCBub3QgY29udmVydCBhcnJheSBlbGVt
ZW50ICVkIHRvIGEgbnVtYmVyIiwgaSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGJ1Zik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFycmF5LT5z
ZXQoaSwgdmFsLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVyIGludG8gYSB3cmFwcGVyIG9iamVjdCBmb3Ig
dGhlIGFycmF5LgorICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xk
ZXIoKSwgY2xhc3NJbmRleCwgYXJyYXkuZ2V0KCkpOworICAgICAgICByZXR1cm4gdG9WOChhcnJh
eS5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFz
Qnl0ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOENhbnZhc0J5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0J5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52
YXNCeXRlQXJyYXkuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2Fu
dmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5j
bHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNCeXRlQXJyYXlDb25zdHJ1
Y3RvcikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNCeXRlQXJyYXkuQ29udHJ1Y3RvciIp
OworCisgICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc0J5dGVBcnJheT4oYXJn
cywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU0JZVEVBUlJBWSkpOwor
fQorCisvLyBHZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRoZSBieXRlIGJ1ZmZlciBhbmQg
cmV0dXJuIGl0IHdyYXBwZWQgYXMgYSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3QgdG8gVjguIEFj
Y2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGJ5dGUgYnVmZmVyIHJhbmdlIHJldHVybiAidW5kZWZp
bmVkIi4KK0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc0J5dGVBcnJheSkKK3sKKyAgICBJ
TkNfU1RBVFMoIkRPTS5DYW52YXNCeXRlQXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Cisg
ICAgQ2FudmFzQnl0ZUFycmF5KiBieXRlQnVmZmVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8Q2FudmFzQnl0ZUFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0JZVEVBUlJB
WSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGJ5
dGVCdWZmZXItPmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAg
ICBzaWduZWQgY2hhciByZXN1bHQ7CisgICAgaWYgKCFieXRlQnVmZmVyLT5nZXQoaW5kZXgsIHJl
c3VsdCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIHY4OjpO
dW1iZXI6Ok5ldyhyZXN1bHQpOworfQorCisvLyBTZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0
aGUgYnl0ZSBidWZmZXIuIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGJ5dGUgYnVmZmVyIHJh
bmdlIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoQ2FudmFz
Qnl0ZUFycmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0J5dGVBcnJheS5JbmRleGVk
UHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDYW52YXNCeXRlQXJyYXkqIGFycmF5ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzQnl0ZUFycmF5PihWOENsYXNzSW5kZXg6
OkNBTlZBU0JZVEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoKGluZGV4ID49IDAp
ICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+SXNO
dW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVy
dCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOworICAgICAgICBhcnJheS0+c2V0KGluZGV4
LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzRmxvYXRBcnJheUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNGbG9h
dEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5j
bHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNGbG9hdEFycmF5Lmgi
CisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVy
LmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9t
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yKQoreworICAg
IElOQ19TVEFUUygiRE9NLkNhbnZhc0Zsb2F0QXJyYXkuQ29udHJ1Y3RvciIpOworCisgICAgcmV0
dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc0Zsb2F0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJ
bmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZKSk7Cit9CisKKy8vIEdl
dCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgd3JhcHBl
ZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0
aGUgdmFsaWQgYXJyYXkgcmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQiLgorSU5ERVhFRF9QUk9QRVJU
WV9HRVRURVIoQ2FudmFzRmxvYXRBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNG
bG9hdEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOworICAgIENhbnZhc0Zsb2F0QXJyYXkq
IGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzRmxvYXRB
cnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKwor
ICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKKyAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBmbG9hdCByZXN1bHQ7CisgICAgaWYgKCFh
cnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKworLy8gU2V0IHRoZSBz
cGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBh
cnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lOREVYRURfUFJPUEVSVFlfU0VUVEVS
KENhbnZhc0Zsb2F0QXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzRmxvYXRBcnJh
eS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDYW52YXNGbG9hdEFycmF5KiBhcnJheSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc0Zsb2F0QXJyYXk+KFY4
Q2xhc3NJbmRleDo6Q0FOVkFTRkxPQVRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAo
KGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpCisgICAgICAgIGFycmF5
LT5zZXQoaW5kZXgsIHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0ludEFycmF5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0lu
dEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzSW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1
ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKKwor
I2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5k
aW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NB
TExCQUNLX0ZVTkNfREVDTChDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKQoreworICAgIElOQ19T
VEFUUygiRE9NLkNhbnZhc0ludEFycmF5LkNvbnRydWN0b3IiKTsKKworICAgIHJldHVybiBjb25z
dHJ1Y3RDYW52YXNBcnJheTxDYW52YXNJbnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0lu
dChWOENsYXNzSW5kZXg6OkNBTlZBU0lOVEFSUkFZKSk7Cit9CisKKy8vIEdldCB0aGUgc3BlY2lm
aWVkIHZhbHVlIGZyb20gdGhlIGludGVnZXIgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFz
IGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2
YWxpZCBwaXhlbCBidWZmZXIgcmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQiLgorSU5ERVhFRF9QUk9Q
RVJUWV9HRVRURVIoQ2FudmFzSW50QXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFz
SW50QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7CisgICAgQ2FudmFzSW50QXJyYXkqIGFy
cmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzSW50QXJyYXk+
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVksIGluZm8uSG9sZGVyKCkpOworCisgICAgaWYg
KChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3RoKCkpKQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIGludCByZXN1bHQ7CisgICAgaWYgKCFhcnJheS0+Z2V0
KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJl
dHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKworLy8gU2V0IHRoZSBzcGVjaWZpZWQg
dmFsdWUgaW4gdGhlIGludGVnZXIgYXJyYXkuIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGlu
dGVnZXIgYXJyYXkgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9yZWQuCitJTkRFWEVEX1BST1BFUlRZ
X1NFVFRFUihDYW52YXNJbnRBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNJbnRB
cnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDYW52YXNJbnRBcnJheSogYXJyYXkg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNJbnRBcnJheT4oVjhD
bGFzc0luZGV4OjpDQU5WQVNJTlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoKGlu
ZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKKyAgICAgICAgaWYgKCF2
YWx1ZS0+SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBu
b3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOworICAgICAgICBhcnJheS0+
c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiB2YWx1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NB
TlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1
c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTk3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKKyNpbmNs
dWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5LmgiCisjaW5jbHVkZSAi
VjhDYW52YXNCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJWOENhbnZhc0Zsb2F0QXJyYXkuaCIKKyNp
bmNsdWRlICJWOENhbnZhc0ludEFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNTaG9ydEFycmF5
LmgiCisjaW5jbHVkZSAiVjhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgIlY4
Q2FudmFzVW5zaWduZWRJbnRBcnJheS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzVW5zaWduZWRTaG9y
dEFycmF5LmgiCisjaW5jbHVkZSAiVjhIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhQ
cm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEFsbG9jYXRlcyBuZXcgc3RvcmFn
ZSB2aWEgdHJ5RmFzdE1hbGxvYy4KKy8vIFJldHVybnMgTlVMTCBpZiBhcnJheSBmYWlsZWQgdG8g
Y29udmVydCBmb3IgYW55IHJlYXNvbi4KK3N0YXRpYyBmbG9hdCoganNBcnJheVRvRmxvYXRBcnJh
eSh2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXksIHVpbnQzMl90IGxlbikKK3sKKyAgICAvLyBD
b252ZXJ0IHRoZSBkYXRhIGVsZW1lbnQtYnktZWxlbWVudC4KKyAgICBmbG9hdCogZGF0YTsKKyAg
ICBpZiAoIXRyeUZhc3RNYWxsb2MobGVuICogc2l6ZW9mKGZsb2F0KSkuZ2V0VmFsdWUoZGF0YSkp
CisgICAgICAgIHJldHVybiAwOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW47IGkr
KykgeworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWwgPSBhcnJheS0+R2V0KHY4OjpJ
bnRlZ2VyOjpOZXcoaSkpOworICAgICAgICBpZiAoIXZhbC0+SXNOdW1iZXIoKSkgeworICAgICAg
ICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgICAgICBkYXRhW2ldID0gdG9GbG9hdCh2YWwpOworICAgIH0KKyAgICByZXR1cm4gZGF0YTsK
K30KKworLy8gQWxsb2NhdGVzIG5ldyBzdG9yYWdlIHZpYSB0cnlGYXN0TWFsbG9jLgorLy8gUmV0
dXJucyBOVUxMIGlmIGFycmF5IGZhaWxlZCB0byBjb252ZXJ0IGZvciBhbnkgcmVhc29uLgorc3Rh
dGljIGludCoganNBcnJheVRvSW50QXJyYXkodjg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5LCB1
aW50MzJfdCBsZW4pCit7CisgICAgLy8gQ29udmVydCB0aGUgZGF0YSBlbGVtZW50LWJ5LWVsZW1l
bnQuCisgICAgaW50KiBkYXRhOworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsZW4gKiBzaXplb2Yo
aW50KSkuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiAwOworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWwgPSBhcnJheS0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkpOworICAgICAgICBib29sIG9rOwor
ICAgICAgICBpbnQgaXZhbCA9IHRvSW50MzIodmFsLCBvayk7CisgICAgICAgIGlmICghb2spIHsK
KyAgICAgICAgICAgIGZhc3RGcmVlKGRhdGEpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKyAgICAgICAgZGF0YVtpXSA9IGl2YWw7CisgICAgfQorICAgIHJldHVybiBkYXRhOwor
fQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQnVmZmVyRGF0
YSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuYnVmZmVy
RGF0YSgpIik7CisKKyAgICAvLyBGb3JtczoKKyAgICAvLyAqIGJ1ZmZlckRhdGEoR0xlbnVtIHRh
cmdldCwgQ2FudmFzQXJyYXkgZGF0YSwgR0xlbnVtIHVzYWdlKTsKKyAgICAvLyAgIC0gU2V0cyB0
aGUgYnVmZmVyJ3MgZGF0YSBmcm9tIHRoZSBnaXZlbiBDYW52YXNBcnJheQorICAgIC8vICogYnVm
ZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7Cisg
ICAgLy8gICAtIFNldHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byB0aGUgZ2l2ZW4gc2l6ZSBp
biBieXRlcworICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDMpIHsKKyAgICAgICAgVjhQcm94eTo6
c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKKyAgICB9CisKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNv
bnRleHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKKyAgICBib29sIG9rOwor
ICAgIGludCB0YXJnZXQgPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9rKSB7Cisg
ICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGludCB1c2FnZSA9IHRv
SW50MzIoYXJnc1syXSwgb2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6c2V0
RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50
ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgaWYgKGFyZ3NbMV0tPklzSW50MzIoKSkgeworICAgICAg
ICBpbnQgc2l6ZSA9IHRvSW50MzIoYXJnc1sxXSk7CisgICAgICAgIGNvbnRleHQtPmJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplLCB1c2FnZSk7CisgICAgfSBlbHNlIGlmIChWOENhbnZhc0FycmF5OjpI
YXNJbnN0YW5jZShhcmdzWzFdKSkgeworICAgICAgICBDYW52YXNBcnJheSogYXJyYXkgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNBcnJheT4oVjhDbGFzc0luZGV4
OjpDQU5WQVNBUlJBWSwgYXJnc1sxXS0+VG9PYmplY3QoKSk7CisgICAgICAgIGNvbnRleHQtPmJ1
ZmZlckRhdGEodGFyZ2V0LCBhcnJheSwgdXNhZ2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RCdWZmZXJT
dWJEYXRhKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5i
dWZmZXJTdWJEYXRhKCkiKTsKKworICAgIC8vIEZvcm1zOgorICAgIC8vICogYnVmZmVyU3ViRGF0
YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIENhbnZhc0FycmF5IGRhdGEpOworICAg
IGlmIChhcmdzLkxlbmd0aCgpICE9IDMpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKKyAgICB9CisKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQorICAg
ICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKKyAgICBib29sIG9rOworICAgIGludCB0YXJn
ZXQgPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJv
eHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRs
ZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGludCBvZmZzZXQgPSB0b0ludDMyKGFyZ3Nb
MV0sIG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CisgICAgfQorICAgIGlmICghVjhDYW52YXNBcnJheTo6SGFzSW5zdGFuY2UoYXJnc1syXSkpIHsK
KyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgQ2FudmFzQXJyYXkq
IGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzQXJyYXk+
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVksIGFyZ3NbMl0tPlRvT2JqZWN0KCkpOworICAgIGNv
bnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5KTsKKyAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEVGV4SW1hZ2UyRCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QudGV4SW1hZ2UyRCgpIik7CisKKyAgICAvLyBDdXJyZW50bHkgc3VwcG9ydGVk
IGZvcm1zOgorICAgIC8vICogdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdM
aW50IGxldmVsLAorICAgIC8vICAgICAgICAgICAgICAgICAgIGluIEdMaW50IGludGVybmFsZm9y
bWF0LAorICAgIC8vICAgICAgICAgICAgICAgICAgIGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6
ZWkgaGVpZ2h0LCBpbiBHTGludCBib3JkZXIsCisgICAgLy8gICAgICAgICAgICAgICAgICAgaW4g
R0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5cGUsIGluIENhbnZhc0FycmF5IHBpeGVscyk7Cisg
ICAgLy8gKiB2b2lkIHRleEltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWws
IGluIEhUTUxJbWFnZUVsZW1lbnQgaW1hZ2UsCisgICAgLy8gICAgICAgICAgICAgICAgICAgW09w
dGlvbmFsXSBpbiBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0gaW4gR0xib29sZWFuIHByZW11
bHRpcGx5QWxwaGEpOworICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDMgJiYKKyAgICAgICAgYXJn
cy5MZW5ndGgoKSAhPSA0ICYmCisgICAgICAgIGFyZ3MuTGVuZ3RoKCkgIT0gNSAmJgorICAgICAg
ICBhcmdzLkxlbmd0aCgpICE9IDkpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
KyAgICB9CisKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQorICAgICAg
ICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKKyAgICBib29sIG9rOworICAgIGludCB0YXJnZXQg
PSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGludCBsZXZlbCA9IHRvSW50MzIoYXJnc1sxXSwg
b2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZ
TlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAg
ICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA9
PSAzIHx8CisgICAgICAgIGFyZ3MuTGVuZ3RoKCkgPT0gNCB8fAorICAgICAgICBhcmdzLkxlbmd0
aCgpID09IDUpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZyA9IGFyZ3NbMl07
CisgICAgICAgIGlmIChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKKyAg
ICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlX2VsZW1lbnQgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbWFnZUVsZW1lbnQ+KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoYXJnKSk7CisgICAgICAgICAgICBib29sIGZsaXBZID0gZmFsc2U7Cisg
ICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChhcmdzLkxlbmd0aCgpID49IDQpCisgICAgICAgICAgICAgICAgZmxpcFkgPSBhcmdzWzNdLT5C
b29sZWFuVmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDUpCisgICAg
ICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYSA9IGFyZ3NbNF0tPkJvb2xlYW5WYWx1ZSgpOwor
ICAgICAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbWFnZV9lbGVt
ZW50LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRpZmZlcmVudCAvIGJldHRlciBleGNlcHRpb24g
dHlwZS4KKyAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsK
KyAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgICAgICB9
CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaAorICAgIH0gZWxzZSBpZiAoYXJncy5MZW5ndGgoKSA9
PSA5KSB7CisgICAgICAgIGludCBpbnRlcm5hbGZvcm1hdCA9IHRvSW50MzIoYXJnc1syXSwgb2sp
OworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRp
b24oU1lOVEFYX0VSUik7CisgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0
b3IoKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgd2lkdGggPSB0b0ludDMyKGFyZ3NbM10sIG9r
KTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2Vw
dG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGhlaWdodCA9IHRvSW50MzIoYXJnc1s0XSwg
b2spOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNl
cHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYm9yZGVyID0gdG9JbnQzMihhcmdzWzVd
LCBvayk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4
Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRl
cmNlcHRvcigpOworICAgICAgICB9CisgICAgICAgIGludCBmb3JtYXQgPSB0b0ludDMyKGFyZ3Nb
Nl0sIG9rKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUlu
dGVyY2VwdG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IHR5cGUgPSB0b0ludDMyKGFyZ3Nb
N10sIG9rKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUlu
dGVyY2VwdG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFy
ZyA9IGFyZ3NbOF07CisgICAgICAgIGlmIChWOENhbnZhc0FycmF5OjpIYXNJbnN0YW5jZShhcmcp
KSB7CisgICAgICAgICAgICBDYW52YXNBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxDYW52YXNBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNBUlJBWSwg
YXJnLT5Ub09iamVjdCgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBtdXN0IGRvIHZhbGlkYXRp
b24gc2ltaWxhciB0byBKT0dMJ3MgdG8gZW5zdXJlIHRoYXQKKyAgICAgICAgICAgIC8vIHRoZSBp
bmNvbWluZyBhcnJheSBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgbGVuZ3RoIGFuZCB0eXBlCisgICAg
ICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVy
bmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVjKTsKKyAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaAorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICAg
ICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgVjhQcm94eTo6c2V0
RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50
ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgaWYgKGVjKSB7CisgICAgICAgIFY4UHJveHk6OnNldERP
TUV4Y2VwdGlvbihlYyk7CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
KyAgICB9CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19E
RUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFRleFN1YkltYWdlMkQpCit7CisgICAgSU5DX1NU
QVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnRleFN1YkltYWdlMkQoKSIpOworCisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitlbnVtIEZ1bmN0aW9uVG9DYWxsIHsKKyAgICBrVW5p
Zm9ybTF2LCBrVW5pZm9ybTJ2LCBrVW5pZm9ybTN2LCBrVW5pZm9ybTR2LAorICAgIGtWZXJ0ZXhB
dHRyaWIxdiwga1ZlcnRleEF0dHJpYjJ2LCBrVmVydGV4QXR0cmliM3YsIGtWZXJ0ZXhBdHRyaWI0
dgorfTsKKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2ZXJ0ZXhBdHRyaWJBbmRVbmlm
b3JtSGVscGVyZihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblRvQ2FsbCBm
dW5jdGlvblRvQ2FsbCkgeworICAgIC8vIEZvcm1zOgorICAgIC8vICogZ2xVbmlmb3JtMWZ2KEdM
aW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTFmdihHTGludCBs
b2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJmdihH
TGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0yZnYoR0xpbnQg
bG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zZnYo
R0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtM2Z2KEdMaW50
IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtNGZ2
KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTRmdihHTGlu
dCBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0
cmliMWZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0
cmliMWZ2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICog
Z2xWZXJ0ZXhBdHRyaWIyZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICog
Z2xWZXJ0ZXhBdHRyaWIyZnYoR0xpbnQgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7
CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjNmdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7
CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjNmdihHTGludCBsb2NhdGlvbiwgQ2FudmFzRmxvYXRB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGxvY2F0aW9uLCBB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGxvY2F0aW9uLCBD
YW52YXNGbG9hdEFycmF5IGRhdGEpOworCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgewor
ICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJl
dHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKworICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRCogY29udGV4dCA9CisgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERP
TVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q+KGFyZ3MuSG9sZGVyKCkp
OworICAgIGJvb2wgb2s7CisgICAgaW50IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7
CisgICAgaWYgKCFvaykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFY
X0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0K
KyAgICBpZiAoVjhDYW52YXNGbG9hdEFycmF5OjpIYXNJbnN0YW5jZShhcmdzWzFdKSkgeworICAg
ICAgICBDYW52YXNGbG9hdEFycmF5KiBhcnJheSA9IAorICAgICAgICAgICAgVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzRmxvYXRBcnJheT4oVjhDbGFzc0luZGV4OjpD
QU5WQVNGTE9BVEFSUkFZLCBhcmdzWzFdLT5Ub09iamVjdCgpKTsKKyAgICAgICAgQVNTRVJUKGFy
cmF5ICE9IE5VTEwpOworICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9uVG9DYWxsKSB7CisgICAgICAg
ICAgICBjYXNlIGtVbmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5
KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtVbmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0y
ZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtVbmlmb3JtM3Y6
IGNvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIGtVbmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5KTsg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4
QXR0cmliMWZ2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVmVy
dGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihsb2NhdGlvbiwgYXJyYXkpOyBi
cmVhazsKKyAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhB
dHRyaWIzZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0
ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGxvY2F0aW9uLCBhcnJheSk7IGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgfQorCisgICAg
djg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5ID0KKyAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+
OjpDYXN0KGFyZ3NbMV0pOworICAgIGlmIChhcnJheS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgVjhQ
cm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFu
ZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgdWludDMyX3QgbGVuID0gYXJyYXktPkxl
bmd0aCgpOworICAgIGZsb2F0KiBkYXRhID0ganNBcnJheVRvRmxvYXRBcnJheShhcnJheSwgbGVu
KTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRpZmZlcmVu
dCAvIGJldHRlciBleGNlcHRpb24gdHlwZS4KKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKKyAgICB9CisgICAgc3dpdGNoIChmdW5jdGlvblRvQ2FsbCkgeworICAgICAgICBjYXNlIGtV
bmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFr
OworICAgICAgICBjYXNlIGtVbmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24s
IGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtVbmlmb3JtM3Y6IGNvbnRleHQtPnVu
aWZvcm0zZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtVbmlm
b3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOwor
ICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGxv
Y2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6
IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYobG9j
YXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djog
Y29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOworICAgIH0KKyAgICBm
YXN0RnJlZShkYXRhKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHVuaWZvcm1IZWxwZXJpKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0
aW9uVG9DYWxsIGZ1bmN0aW9uVG9DYWxsKSB7CisgICAgLy8gRm9ybXM6CisgICAgLy8gKiBnbFVu
aWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5p
Zm9ybTJpdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0y
aXYoR0xpbnQgbG9jYXRpb24sIENhbnZhc0ludEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlm
b3JtM2l2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNp
dihHTGludCBsb2NhdGlvbiwgQ2FudmFzSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZv
cm00aXYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtNGl2
KEdMaW50IGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSBkYXRhKTsKKworICAgIGlmIChhcmdzLkxl
bmd0aCgpICE9IDMpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9F
UlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisK
KyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQorICAgICAgICBWOERPTVdy
YXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
PihhcmdzLkhvbGRlcigpKTsKKyAgICBib29sIG9rOworICAgIGludCBsb2NhdGlvbiA9IHRvSW50
MzIoYXJnc1swXSwgb2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKKyAgICB9CisgICAgaWYgKFY4Q2FudmFzSW50QXJyYXk6Okhhc0luc3RhbmNlKGFy
Z3NbMV0pKSB7CisgICAgICAgIENhbnZhc0ludEFycmF5KiBhcnJheSA9IAorICAgICAgICAgICAg
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzSW50QXJyYXk+KFY4Q2xh
c3NJbmRleDo6Q0FOVkFTSU5UQVJSQVksIGFyZ3NbMV0tPlRvT2JqZWN0KCkpOworICAgICAgICBB
U1NFUlQoYXJyYXkgIT0gTlVMTCk7CisgICAgICAgIHN3aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsK
KyAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlv
biwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+
dW5pZm9ybTJpdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1Vu
aWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwg
YXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAg
IH0KKworICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSA9CisgICAgICB2ODo6TG9jYWw8
djg6OkFycmF5Pjo6Q2FzdChhcmdzWzFdKTsKKyAgICBpZiAoYXJyYXkuSXNFbXB0eSgpKSB7Cisg
ICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIHVpbnQzMl90IGxlbiA9
IGFycmF5LT5MZW5ndGgoKTsKKyAgICBpbnQqIGRhdGEgPSBqc0FycmF5VG9JbnRBcnJheShhcnJh
eSwgbGVuKTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRp
ZmZlcmVudCAvIGJldHRlciBleGNlcHRpb24gdHlwZS4KKyAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKKyAgICB9CisgICAgc3dpdGNoIChmdW5jdGlvblRvQ2FsbCkgeworICAgICAgICBj
YXNlIGtVbmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24sIGRhdGEsIGxlbik7
IGJyZWFrOworICAgICAgICBjYXNlIGtVbmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yaXYobG9j
YXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIGtVbmlmb3JtM3Y6IGNvbnRl
eHQtPnVuaWZvcm0zaXYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNl
IGtVbmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJy
ZWFrOworICAgICAgICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgYnJlYWs7CisgICAg
fQorICAgIGZhc3RGcmVlKGRhdGEpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisK
K0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMWZ2KQor
eworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtMWZ2
KCkiKTsKKyAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1Vu
aWZvcm0xdik7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0RVbmlmb3JtMWl2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC51bmlmb3JtMWl2KCkiKTsKKyAgICByZXR1cm4gdW5pZm9ybUhlbHBlcmkoYXJncywga1Vu
aWZvcm0xdik7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0RVbmlmb3JtMmZ2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC51bmlmb3JtMmZ2KCkiKTsKKyAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhl
bHBlcmYoYXJncywga1VuaWZvcm0ydik7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMml2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtMml2KCkiKTsKKyAgICByZXR1cm4gdW5pZm9ybUhl
bHBlcmkoYXJncywga1VuaWZvcm0ydik7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtM2Z2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtM2Z2KCkiKTsKKyAgICByZXR1cm4gdmVydGV4QXR0
cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1VuaWZvcm0zdik7Cit9CisKK0NBTExCQUNLX0ZV
TkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtM2l2KQoreworICAgIElOQ19T
VEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtM2l2KCkiKTsKKyAgICBy
ZXR1cm4gdW5pZm9ybUhlbHBlcmkoYXJncywga1VuaWZvcm0zdik7Cit9CisKK0NBTExCQUNLX0ZV
TkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtNGZ2KQoreworICAgIElOQ19T
VEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtNGZ2KCkiKTsKKyAgICBy
ZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1VuaWZvcm00dik7Cit9
CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtNGl2
KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3Jt
NGl2KCkiKTsKKyAgICByZXR1cm4gdW5pZm9ybUhlbHBlcmkoYXJncywga1VuaWZvcm00dik7Cit9
CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5pZm9ybU1hdHJpeEhlbHBlcihjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBtYXRyaXhTaXplKQoreworICAgIC8vIEZvcm1zOgorICAgIC8v
ICogZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlv
biwgR0xib29sZWFuIHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAq
IGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwg
QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24s
IEdMYm9vbGVhbiB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBn
bFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEFy
cmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vCisgICAg
Ly8gRklYTUU6IG5lZWQgdG8gY2hhbmdlIHRvIGFjY2VwdCBDYW52YXNGbG9hdEFycmF5IGFzIHdl
bGwuCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgeworICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRl
cmNlcHRvcigpOworICAgIH0KKworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4
dCA9CisgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q+KGFyZ3MuSG9sZGVyKCkpOworICAgIGJvb2wgb2s7CisgICAg
aW50IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisgICAgaWYgKCFvaykgeworICAg
ICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICBib29sIHRyYW5zcG9zZSA9
IGFyZ3NbMV0tPkJvb2xlYW5WYWx1ZSgpOworICAgIGlmIChWOENhbnZhc0Zsb2F0QXJyYXk6Okhh
c0luc3RhbmNlKGFyZ3NbMl0pKSB7CisgICAgICAgIENhbnZhc0Zsb2F0QXJyYXkqIGFycmF5ID0g
CisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNG
bG9hdEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0ZMT0FUQVJSQVksIGFyZ3NbMl0tPlRvT2Jq
ZWN0KCkpOworICAgICAgICBBU1NFUlQoYXJyYXkgIT0gTlVMTCk7CisgICAgICAgIHN3aXRjaCAo
bWF0cml4U2l6ZSkgeworICAgICAgICAgICAgY2FzZSAyOiBjb250ZXh0LT51bmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IDM6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkp
OyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNDogY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihs
b2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDog
QVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5
ID0KKyAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KGFyZ3NbMl0pOworICAgIGlmIChh
cnJheS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRB
WF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9
CisgICAgdWludDMyX3QgbGVuID0gYXJyYXktPkxlbmd0aCgpOworICAgIGZsb2F0KiBkYXRhID0g
anNBcnJheVRvRmxvYXRBcnJheShhcnJheSwgbGVuKTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAg
ICAgLy8gRklYTUU6IGNvbnNpZGVyIGRpZmZlcmVudCAvIGJldHRlciBleGNlcHRpb24gdHlwZS4K
KyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgc3dpdGNoIChtYXRy
aXhTaXplKSB7CisgICAgICAgIGNhc2UgMjogY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2Nh
dGlvbiwgdHJhbnNwb3NlLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSAzOiBjb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGRhdGEsIGxlbik7IGJy
ZWFrOworICAgICAgICBjYXNlIDQ6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IHRyYW5zcG9zZSwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyBicmVhazsKKyAgICB9CisgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRFVuaWZvcm1NYXRyaXgyZnYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm1NYXRyaXgyZnYoKSIpOworICAgIHJldHVybiB1
bmlmb3JtTWF0cml4SGVscGVyKGFyZ3MsIDIpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybU1hdHJpeDNmdikKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybU1hdHJpeDNmdigpIik7CisgICAg
cmV0dXJuIHVuaWZvcm1NYXRyaXhIZWxwZXIoYXJncywgMyk7Cit9CisKK0NBTExCQUNLX0ZVTkNf
REVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4NGZ2KQoreworICAgIElO
Q19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtTWF0cml4NGZ2KCki
KTsKKyAgICByZXR1cm4gdW5pZm9ybU1hdHJpeEhlbHBlcihhcmdzLCA0KTsKK30KKworQ0FMTEJB
Q0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjFmdikKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudmVydGV4QXR0cmli
MWZ2KCkiKTsKKyAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywg
a1ZlcnRleEF0dHJpYjF2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRFZlcnRleEF0dHJpYjJmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QudmVydGV4QXR0cmliMmZ2KCkiKTsKKyAgICByZXR1cm4gdmVydGV4
QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjJ2KTsKK30KKworQ0FM
TEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjNmdikK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudmVydGV4QXR0
cmliM2Z2KCkiKTsKKyAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJn
cywga1ZlcnRleEF0dHJpYjN2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjRmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QudmVydGV4QXR0cmliNGZ2KCkiKTsKKyAgICByZXR1cm4gdmVy
dGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjR2KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNTaG9y
dEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5j
bHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNTaG9ydEFycmF5Lmgi
CisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVy
LmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9t
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yKQoreworICAg
IElOQ19TVEFUUygiRE9NLkNhbnZhc1Nob3J0QXJyYXkuQ29udHJ1Y3RvciIpOworCisgICAgcmV0
dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc1Nob3J0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJ
bmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNTSE9SVEFSUkFZKSk7Cit9CisKKy8vIEdl
dCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgd3JhcHBl
ZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0
aGUgdmFsaWQgYXJyYXkgcmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQiLgorSU5ERVhFRF9QUk9QRVJU
WV9HRVRURVIoQ2FudmFzU2hvcnRBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNT
aG9ydEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOworICAgIENhbnZhc1Nob3J0QXJyYXkq
IGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzU2hvcnRB
cnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKwor
ICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKKyAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBzaG9ydCByZXN1bHQ7CisgICAgaWYgKCFh
cnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKworLy8gU2V0IHRoZSBz
cGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBh
cnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lOREVYRURfUFJPUEVSVFlfU0VUVEVS
KENhbnZhc1Nob3J0QXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzU2hvcnRBcnJh
eS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDYW52YXNTaG9ydEFycmF5KiBhcnJheSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Nob3J0QXJyYXk+KFY4
Q2xhc3NJbmRleDo6Q0FOVkFTU0hPUlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAo
KGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKKyAgICAgICAgaWYg
KCF2YWx1ZS0+SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3Vs
ZCBub3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOworICAgICAgICBhcnJh
eS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiB2
YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNE
X0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1
c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIu
aCIKKyNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgorCisjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIlY4
Q2FudmFzQXJyYXlDdXN0b20uaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19E
RUNMKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IpCit7CisgICAgSU5DX1NUQVRT
KCJET00uQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuQ29udHJ1Y3RvciIpOworCisgICAgcmV0dXJu
IGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PihhcmdzLCBWOENs
YXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURCWVRFQVJSQVkpKTsK
K30KKworLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVy
biBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3Nl
cyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCitJTkRF
WEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSkKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5JbmRleGVkUHJvcGVydHlHZXR0ZXIi
KTsKKyAgICBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4oVjhDbGFzc0luZGV4
OjpDQU5WQVNVTlNJR05FREJZVEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoKGlu
ZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5LT5sZW5ndGgoKSkpCisgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgY2hhciByZXN1bHQ7CisgICAgaWYgKCFhcnJh
eS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwor
ICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKworLy8gU2V0IHRoZSBzcGVj
aWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJh
eSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOworICAgIENhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVEQllURUFS
UkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwg
YXJyYXktPmxlbmd0aCgpKSkgeworICAgICAgICBpZiAoIXZhbHVlLT5Jc051bWJlcigpKQorICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IHZhbHVlIGFyZ3Vt
ZW50IHRvIGEgbnVtYmVyIik7CisgICAgICAgIGFycmF5LT5zZXQoaW5kZXgsIHZhbHVlLT5OdW1i
ZXJWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVkSW50
QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisK
KyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVk
SW50QXJyYXkuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2FudmFz
QXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5jbHVk
ZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNVbnNpZ25lZEludEFycmF5Q29u
c3RydWN0b3IpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRJbnRBcnJheS5D
b250cnVjdG9yIik7CisKKyAgICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJyYXk8Q2FudmFzVW5z
aWduZWRJbnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNB
TlZBU1VOU0lHTkVESU5UQVJSQVkpKTsKK30KKworLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUg
ZnJvbSB0aGUgaW50ZWdlciBhcnJheSBhbmQgcmV0dXJuIGl0IHdyYXBwZWQgYXMgYSBKYXZhU2Ny
aXB0IE51bWJlciBvYmplY3QgdG8gVjguIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIHBpeGVs
IGJ1ZmZlciByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCitJTkRFWEVEX1BST1BFUlRZX0dFVFRF
UihDYW52YXNVbnNpZ25lZEludEFycmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vu
c2lnbmVkSW50QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7CisgICAgQ2FudmFzVW5zaWdu
ZWRJbnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxD
YW52YXNVbnNpZ25lZEludEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVESU5UQVJS
QVksIGluZm8uSG9sZGVyKCkpOworCisgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBh
cnJheS0+bGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHVu
c2lnbmVkIGludCByZXN1bHQ7CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpO
ZXcocmVzdWx0KTsKK30KKworLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGludGVn
ZXIgYXJyYXkuIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGludGVnZXIgYXJyYXkgcmFuZ2Ug
YXJlIHNpbGVudGx5IGlnbm9yZWQuCitJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNp
Z25lZEludEFycmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vuc2lnbmVkSW50QXJy
YXkuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7CisgICAgQ2FudmFzVW5zaWduZWRJbnRBcnJheSog
YXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25l
ZEludEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVESU5UQVJSQVksIGluZm8uSG9s
ZGVyKCkpOworCisgICAgaWYgKChpbmRleCA+PSAwKSAmJiAoaW5kZXggPCBhcnJheS0+bGVuZ3Ro
KCkpKSB7CisgICAgICAgIGlmICghdmFsdWUtPklzTnVtYmVyKCkpCisgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgdmFsdWUgYXJndW1lbnQgdG8gYSBudW1i
ZXIiKTsKKyAgICAgICAgYXJyYXktPnNldChpbmRleCwgdmFsdWUtPk51bWJlclZhbHVlKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDdXN0
b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1
ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5
QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4
Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3Ry
dWN0b3IpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LkNv
bnRydWN0b3IiKTsKKworICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpD
QU5WQVNVTlNJR05FRFNIT1JUQVJSQVkpKTsKK30KKworLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFs
dWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBO
dW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5n
ZSByZXR1cm4gInVuZGVmaW5lZCIuCitJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRTaG9y
dEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOworICAgIENhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURTSE9SVEFSUkFZ
LCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJy
YXktPmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB1bnNp
Z25lZCBzaG9ydCByZXN1bHQ7CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpO
ZXcocmVzdWx0KTsKK30KKworLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5
LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdu
b3JlZC4KK0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSkK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuSW5kZXhlZFBy
b3BlcnR5U2V0dGVyIik7CisgICAgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KiBhcnJheSA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eT4oVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVksIGluZm8uSG9sZGVyKCkp
OworCisgICAgaWYgKChpbmRleCA+PSAwKSAmJiAoaW5kZXggPCBhcnJheS0+bGVuZ3RoKCkpKSB7
CisgICAgICAgIGlmICghdmFsdWUtPklzTnVtYmVyKCkpCisgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgdmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsK
KyAgICAgICAgYXJyYXktPnNldChpbmRleCwgdmFsdWUtPk51bWJlclZhbHVlKCkpOworICAgIH0K
KyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNDg3NjcpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDYgKzMy
OCwzOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEU3Ryb2tlVGV4dCk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEUHV0SW1hZ2VEYXRhKTsKIAorI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEQnVmZmVyRGF0YSk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEQnVmZmVyU3ViRGF0YSk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEU2l6ZW9mKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0RUZXhJbWFnZTJEKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RUZXhTdWJJbWFnZTJEKTsKKyAgICAgICAgREVDTEFS
RV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMWZ2KTsKKyAgICAgICAg
REVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMWl2KTsKKyAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMmZ2
KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlm
b3JtMml2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0RVbmlmb3JtM2Z2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0RVbmlmb3JtM2l2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0RVbmlmb3JtNGZ2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtNGl2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4MmZ2KTsKKyAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4M2Z2KTsK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3Jt
TWF0cml4NGZ2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0RWZXJ0ZXhBdHRyaWIxZnYpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjJmdik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVydGV4QXR0cmliM2Z2KTsKKyAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RWZXJ0ZXhBdHRyaWI0ZnYpOwor
CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcik7
CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IpOwor
ICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcik7CisgICAg
ICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yKTsK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0
b3IpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNv
bnN0cnVjdG9yKTsKKyNlbmRpZgorCiAgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1Jf
R0VUVEVSKENsaXBib2FyZFR5cGVzKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDbGlwYm9h
cmRDbGVhckRhdGEpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKENsaXBib2FyZEdldERhdGEp
OwpAQCAtNDYyLDkgKzQ5NCwzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xB
UkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTFNlbGVjdEVsZW1lbnRDb2xsZWN0aW9uKTsK
ICAgICAgICAgREVDTEFSRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTENvbGxlY3Rpb24pOwog
CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZ
X0dFVFRFUihDYW52YXNCeXRlQXJyYXkpOworICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVS
VFlfU0VUVEVSKENhbnZhc0J5dGVBcnJheSk7CisKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUihDYW52YXNGbG9hdEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVE
X1BST1BFUlRZX1NFVFRFUihDYW52YXNGbG9hdEFycmF5KTsKKworICAgICAgICBERUNMQVJFX0lO
REVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc0ludEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9J
TkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNJbnRBcnJheSk7CisjZW5kaWYKKwogICAgICAg
ICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOwogICAg
ICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpOwog
CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZ
X0dFVFRFUihDYW52YXNTaG9ydEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BF
UlRZX1NFVFRFUihDYW52YXNTaG9ydEFycmF5KTsKKworICAgICAgICBERUNMQVJFX0lOREVYRURf
UFJPUEVSVFlfR0VUVEVSKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KTsKKyAgICAgICAgREVDTEFS
RV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSk7CisKKyAg
ICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZEludEFy
cmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNp
Z25lZEludEFycmF5KTsKKworICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVS
KENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSk7CisgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9Q
RVJUWV9TRVRURVIoQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KTsKKyNlbmRpZgorCiAgICAgICAg
IERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1JfR0VUVEVSKE1lc3NhZ2VFdmVudFBvcnRzKTsKICAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhNZXNzYWdlRXZlbnRJbml0TWVzc2FnZUV2ZW50KTsKIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDQ4NzY3KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRl
ICJOb2RlLmgiCiAjaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiWFBhdGhS
ZXN1bHQuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKQEAgLTk0LDEzICs5
NSwxNiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRG9jdW1lbnRHZXRDU1NDYW52YXNDCiAgICAgaW50
IHdpZHRoID0gdG9JbnQzMihhcmdzWzJdKTsKICAgICBpbnQgaGVpZ2h0ID0gdG9JbnQzMihhcmdz
WzNdKTsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZXN1bHQgPSBpbXAtPmdldENTU0Nh
bnZhc0NvbnRleHQoY29udGV4dElkLCBuYW1lLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICBpZiAocmVzdWx0LT5p
czJkKCkpCiAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCByZXN1bHQpOwotICAgIGVsc2Ug
ewotICAgICAgICAvLyBGSVhNRTogQWRkIHRoZSBjb252ZXJzaW9uIHRvIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRCB3aGVuIGl0IGlzIGhvb2tlZCB1cC4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAgICB9Cisj
aWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICBlbHNlIGlmIChyZXN1bHQtPmlzM2QoKSkKKyAgICAg
ICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpD
QU5WQVNSRU5ERVJJTkdDT05URVhUM0QsIHJlc3VsdCk7CisjZW5kaWYgLy8gRU5BQkxFKDNEX0NB
TlZBUykKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gNDg3NjcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCkBAIC00NiwxMiArNDcsMTYgQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxDYW52YXNFbGVtZW50R2V0QwogICAgIEhUTUxDYW52YXNF
bGVtZW50KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxD
YW52YXNFbGVtZW50Pihob2xkZXIpOwogICAgIFN0cmluZyBjb250ZXh0SWQgPSB0b1dlYkNvcmVT
dHJpbmcoYXJnc1swXSk7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVzdWx0ID0gaW1w
LT5nZXRDb250ZXh0KGNvbnRleHRJZCk7Ci0gICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmlzMmQo
KSkKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAg
ICBpZiAocmVzdWx0LT5pczJkKCkpCiAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCByZXN1
bHQpOwotICAgIGVsc2UgewotICAgICAgICAvLyBGSVhNRTogQWRkIHRoZSBjb252ZXJzaW9uIHRv
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCB3aGVuIGl0IGlzIGhvb2tlZCB1cC4KLSAgICAgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwotICAgIH0KKyNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQorICAgIGVsc2UgaWYgKHJlc3VsdC0+aXMzZCgpKQorICAgICAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NP
TlRFWFQzRCwgcmVzdWx0KTsKKyNlbmRpZgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJl
dmlzaW9uIDQ4NzY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgSW1hZ2VEYXRhOwogICAgIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAg
ICAKKyAgICAvLyBGSVhNRTogaWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRm
b3Jtcy4KKyNpZiBQTEFURk9STShTS0lBKQorICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw7CisjZW5kaWYKKwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEIDogTm9uY29weWFi
bGUgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBTaGFkZXJUeXBlIHsgRlJBR01FTlRfU0hB
REVSLCBWRVJURVhfU0hBREVSIH07CkBAIC0zMDgsMTAgKzMxMyw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBwcml2YXRlOiAgICAgICAgCiAgICAgICAgIGludCBtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0OwogICAgICAgICAKLSNpZiBQTEFURk9STShTS0lBKQotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNEU2tpYS5oIgotI2VuZGlmCi0KICNpZiBQTEFURk9STShNQUMpCiAg
ICAgICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKICAgICAgICAgCkBA
IC0zMjAsNiArMzIxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgR0x1aW50IG1f
ZmJvOwogICAgICAgICBHTHVpbnQgbV9kZXB0aEJ1ZmZlcjsKICNlbmRpZiAgICAgICAgCisKKyAg
ICAgICAgLy8gRklYTUU6IGlkZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9y
bXMuCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw7CisgICAgICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFs
PiBtX2ludGVybmFsOworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDQ4NzY3KQorKysgV2ViS2l0L2Nocm9t
aXVtL2ZlYXR1cmVzLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICAgIyBU
aGUgZm9sbG93aW5nIGRlZmluZXMgdHVybiB3ZWJraXQgZmVhdHVyZXMgb24gb3Igb2ZmLiAKICAg
J3ZhcmlhYmxlcyc6IHsKICAgICAnZmVhdHVyZV9kZWZpbmVzJzogWworICAgICAgJ0VOQUJMRV8z
RF9DQU5WQVM9MCcsCiAgICAgICAnRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HPTEnLAogICAgICAg
J0VOQUJMRV9EQVRBQkFTRT0xJywKICAgICAgICdFTkFCTEVfREFUQUdSSUQ9MCcsCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>