<?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>52768</bug_id>
          
          <creation_ts>2011-01-19 16:50:00 -0800</creation_ts>
          <short_desc>Construction of Uint8Array from JS Array (and possibly others) incorrectly clamps values</short_desc>
          <delta_ts>2011-02-17 15:13:15 -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>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>jamesr</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>336941</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-19 16:50:00 -0800</bug_when>
    <thetext>Tim Johansson from Opera has pointed out that in the WebGL test more/functions/drawElementsBadArgs.html in the Khronos repository, construction of Uint8Array (and possibly other types) taking a JS array is clamping values rather than performing modulo arithmetic. In other words, construction with an array containing the value 256 is resulting in a Uint8Array containing 255 rather than 0. It isn&apos;t clear yet whether this bug is in both the JSC and V8 bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336960</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-19 17:15:24 -0800</bug_when>
    <thetext>The bug is in the common C++ code, specifically IntegralTypedArrayBase.h. It&apos;s explicitly clamping the incoming double value to the element type&apos;s minimum and maximum values, where it should be using casting behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339334</commentid>
    <comment_count>2</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-24 15:57:12 -0800</bug_when>
    <thetext>Also the conformance test array-unit-tests.html is failing due to 0.6 is mapped to 1 instead of 0.  According to Web IDL type mapping, floor(abs(x)) * sign(x) is the correct behavior.  Maybe it could be fixed in one patch as the code is in the same function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339351</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-24 16:16:37 -0800</bug_when>
    <thetext>The rounding mode failure in array-unit-tests.html in Chromium is a different problem. That fix has been committed to V8 and we are waiting for it to be rolled into Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339406</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-01-24 17:40:26 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; Tim Johansson from Opera has pointed out that in the WebGL test more/functions/drawElementsBadArgs.html in the Khronos repository, construction of Uint8Array (and possibly other types) taking a JS array is clamping values rather than performing modulo arithmetic. In other words, construction with an array containing the value 256 is resulting in a Uint8Array containing 255 rather than 0. It isn&apos;t clear yet whether this bug is in both the JSC and V8 bindings.

Looking at the typed array spec, it could be more clear about these conversions. There is one statement in the &quot;omittable setter&quot; part of section 5 that gives a link to the WebIDL spec. But I think it would be better call this out into its own section.

I&apos;ve opened a spec bug about this: https://www.khronos.org/bugzilla/show_bug.cgi?id=420. It&apos;s in the WebGL area, which I suppose is an appropriate place for it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352491</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-02-16 17:31:56 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #0)
&gt; &gt; Tim Johansson from Opera has pointed out that in the WebGL test more/functions/drawElementsBadArgs.html in the Khronos repository, construction of Uint8Array (and possibly other types) taking a JS array is clamping values rather than performing modulo arithmetic. In other words, construction with an array containing the value 256 is resulting in a Uint8Array containing 255 rather than 0. It isn&apos;t clear yet whether this bug is in both the JSC and V8 bindings.
&gt; 
&gt; Looking at the typed array spec, it could be more clear about these conversions. There is one statement in the &quot;omittable setter&quot; part of section 5 that gives a link to the WebIDL spec. But I think it would be better call this out into its own section.
&gt; 
&gt; I&apos;ve opened a spec bug about this: https://www.khronos.org/bugzilla/show_bug.cgi?id=420. It&apos;s in the WebGL area, which I suppose is an appropriate place for it for now.

For the record, the spec bug has been fixed; the typed array spec is much more clear about rounding mode and type conversion behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352495</commentid>
    <comment_count>6</comment_count>
      <attachid>82729</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-02-16 17:38:03 -0800</bug_when>
    <thetext>Created attachment 82729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353023</commentid>
    <comment_count>7</comment_count>
      <attachid>82729</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-02-17 10:53:20 -0800</bug_when>
    <thetext>Comment on attachment 82729
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=82729&amp;action=review

Generally fine, one nit, and one question about the necessity of LargestIntType in the template. r=me, after settling those.

&gt; Source/WebCore/ChangeLog:13
&gt; +        required template parameter.

I don&apos;t understand the second parameter to IntegralTypedArrayBase. It&apos;s always a 64 bit int, which it would have to be to hold a any possible double. I don&apos;t think having it be a uint64 in some places is useful because a signed 64 bit number is plenty to hold all possible double values. I think JS requires numbers to be doubles so why not just eliminate it? Seems like unnecessary future-proofing

&gt; Source/WebCore/bindings/js/JSArrayBufferViewHelper.h:137
&gt; +        unsigned length = srcArray-&gt;get(exec, JSC::Identifier(exec, &quot;length&quot;)).toUInt32(exec);

It would be more consistent to use uint32_t instead of unsigned here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353162</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-02-17 14:06:27 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 82729 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82729&amp;action=review
&gt; 
&gt; Generally fine, one nit, and one question about the necessity of LargestIntType in the template. r=me, after settling those.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +        required template parameter.
&gt; 
&gt; I don&apos;t understand the second parameter to IntegralTypedArrayBase. It&apos;s always a 64 bit int, which it would have to be to hold a any possible double. I don&apos;t think having it be a uint64 in some places is useful because a signed 64 bit number is plenty to hold all possible double values. I think JS requires numbers to be doubles so why not just eliminate it? Seems like unnecessary future-proofing

I didn&apos;t experiment enough, but you&apos;re right; the intermediate cast can always be to int64_t, so the LargestIntType template parameter can be eliminated. This simplifies the patch.

&gt; &gt; Source/WebCore/bindings/js/JSArrayBufferViewHelper.h:137
&gt; &gt; +        unsigned length = srcArray-&gt;get(exec, JSC::Identifier(exec, &quot;length&quot;)).toUInt32(exec);
&gt; 
&gt; It would be more consistent to use uint32_t instead of unsigned here?

OK, I&apos;ll make this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353193</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-02-17 15:13:15 -0800</bug_when>
    <thetext>Committed r78919: &lt;http://trac.webkit.org/changeset/78919&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82729</attachid>
            <date>2011-02-16 17:38:03 -0800</date>
            <delta_ts>2011-02-17 10:53:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52768-20110216173802.patch</filename>
            <type>text/plain</type>
            <size>32589</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NzU2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDItMTYgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENvbnN0cnVjdGlvbiBvZiBVaW50OEFycmF5IGZyb20gSlMgQXJy
YXkgKGFuZCBwb3NzaWJseSBvdGhlcnMpIGluY29ycmVjdGx5IGNsYW1wcyB2YWx1ZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzY4CisKKyAgICAg
ICAgUmVtb3ZlZCBpbmNvcnJlY3QgY2xhbXBpbmcgY29kZSBmcm9tIEludGVncmFsVHlwZWRBcnJh
eUJhc2UuIEZpeGVkCisgICAgICAgIGNvZGUgd2hpY2ggY2FzdHMgZnJvbSBpbmNvbWluZyBkb3Vi
bGUgdG8gdGhlIGRlc3RpbmF0aW9uIHR5cGUuCisgICAgICAgIENoYW5nZWQgdGhlIEpTQyBiaW5k
aW5ncyB0byB1c2UgdGhpcyBjb2RlLCByYXRoZXIgdGhhbiBhIGNvcHkgb2YKKyAgICAgICAgdGhl
IGNhc3RpbmcgY29kZSBhbmQgYSBkaWZmZXJlbnQgY29uc3RydWN0b3IsIGluIG9yZGVyIHRvIHJl
dXNlCisgICAgICAgIHRoZSBmaXguIFVwZGF0ZWQgc3ViY2xhc3NlcyBvZiBJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlIHdpdGggbmV3bHkKKyAgICAgICAgcmVxdWlyZWQgdGVtcGxhdGUgcGFyYW1ldGVy
LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEFycmF5QnVmZmVyVmlldyk6CisgICAgICAgICogaHRt
bC9jYW52YXMvSW50MTZBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnQxNkFycmF5OjpJ
bnQxNkFycmF5KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQxNkFycmF5Lmg6CisgICAgICAg
ICogaHRtbC9jYW52YXMvSW50MzJBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnQzMkFy
cmF5OjpJbnQzMkFycmF5KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQzMkFycmF5Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnQzMkFycmF5OjpzZXQpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L0ludDhBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnQ4QXJyYXk6OkludDhBcnJheSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvSW50OEFycmF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bnQ4QXJyYXk6OnNldCk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW50ZWdyYWxUeXBlZEFycmF5
QmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW50ZWdyYWxUeXBlZEFycmF5QmFzZTo6c2V0KToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9VaW50MTZBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpVaW50MTZBcnJheTo6VWludDE2QXJyYXkpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1VpbnQx
NkFycmF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpVaW50MTZBcnJheTo6c2V0KToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9VaW50MzJBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVaW50MzJB
cnJheTo6VWludDMyQXJyYXkpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1VpbnQzMkFycmF5Lmg6
CisgICAgICAgIChXZWJDb3JlOjpVaW50MzJBcnJheTo6c2V0KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9VaW50OEFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVpbnQ4QXJyYXk6OlVpbnQ4
QXJyYXkpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlVpbnQ4QXJyYXk6OnNldCk6CisKIDIwMTEtMDItMTYgIEJyaWFuIFNhbG9tb24gIDxi
c2Fsb21vbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29u
LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxw
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVm
ZmVyVmlld0hlbHBlci5oCShyZXZpc2lvbiA3ODc1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwy
NSArMTA0LDYgQEAgUGFzc1JlZlB0cjxDPiBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaQogICAg
IHJldHVybiBhcnJheTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUIGNvbnZl
cnRBcnJheVZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdikKLXsKLSAg
ICAvLyBGb3IgaW50ZWdyYWwgdHlwZXMsIE5hTiB2YWx1ZXMgbXVzdCBiZSBjb252ZXJ0ZWQgdG8g
emVyby4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odi50b0ludGVnZXIoZXhlYykpOwotfQot
Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUgZmxvYXQgY29udmVydEFycmF5VmFsdWUoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4odi50b051bWJlcihleGVjKSk7Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBkb3VibGUgY29u
dmVydEFycmF5VmFsdWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2KQotewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHYudG9OdW1iZXIoZXhlYykpOwotfQotCiB0
ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgogUGFzc1JlZlB0cjxDPiBjb25zdHJ1Y3RBcnJh
eUJ1ZmZlclZpZXcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7CkBAIC0xNTIsMjQgKzEzMywxOSBA
QCBQYXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldyhKCiAgICAgICAgIGlmICh2
aWV3KQogICAgICAgICAgICAgcmV0dXJuIHZpZXc7CiAgICAgCi0gICAgICAgIEpTQzo6SlNPYmpl
Y3QqIGFycmF5ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcihleGVjLCAibGVuZ3Ro
IikpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICB2b2lkKiB0ZW1wVmFsdWVzOwotICAgICAgICBp
ZiAoIXRyeUZhc3RDYWxsb2MobGVuZ3RoLCBzaXplb2YoVCkpLmdldFZhbHVlKHRlbXBWYWx1ZXMp
KSB7Ci0gICAgICAgICAgICBKU0M6OnRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywg
IkVycm9yIikpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEpTQzo6SlNPYmplY3Qq
IHNyY0FycmF5ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOworICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzcmNBcnJheS0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcihleGVjLCAibGVu
Z3RoIikpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBSZWZQdHI8Qz4gYXJyYXkgPSBDOjpjcmVh
dGUobGVuZ3RoKTsKKyAgICAgICAgaWYgKCFhcnJheSkgeworICAgICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIElOREVYX1NJWkVfRVJSKTsKKyAgICAgICAgICAgIHJldHVybiBhcnJheTsK
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgT3duRmFzdE1hbGxvY1B0cjxUPiB2YWx1ZXMo
c3RhdGljX2Nhc3Q8VCo+KHRlbXBWYWx1ZXMpKTsKKwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gYXJy
YXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgIHZhbHVlcy5nZXQoKVtpXSA9IGNvbnZlcnRB
cnJheVZhbHVlPFQ+KGV4ZWMsIHYpOworICAgICAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBzcmNB
cnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgYXJyYXktPnNldChpLCB2LnRvTnVtYmVy
KGV4ZWMpKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVmUHRyPEM+IHJlc3VsdCA9
IEM6OmNyZWF0ZSh2YWx1ZXMuZ2V0KCksIGxlbmd0aCk7Ci0gICAgICAgIGlmICghcmVzdWx0KQot
ICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOREVYX1NJWkVfRVJSKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAogICAgIGlu
dCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvSW50OEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuY3BwCShyZXZpc2lvbiA3ODc1NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDhBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKAog
fQogCiBJbnQ4QXJyYXk6OkludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlw
ZWRBcnJheUJhc2U8c2lnbmVkIGNoYXI+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQorICAg
IDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxzaWduZWQgY2hhciwgaW50NjRfdD4oYnVmZmVyLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0ludDhBcnJheS5oCShyZXZpc2lvbiA3ODc1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNSArMzMsMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIAotY2xhc3MgSW50OEFycmF5IDog
cHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8c2lnbmVkIGNoYXI+IHsKK2NsYXNzIEludDhB
cnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBjaGFyLCBpbnQ2NF90
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUodW5z
aWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZShz
aWduZWQgY2hhciogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW50OEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgLy8gQ2Fu4oCZdCB1c2Ug
InVzaW5nIiBoZXJlIGR1ZSB0byBhIGJ1ZyBpbiB0aGUgUlZDVCBjb21waWxlci4KLSAgICB2b2lk
IHNldChUeXBlZEFycmF5QmFzZTxzaWduZWQgY2hhcj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBUeXBlZEFycmF5QmFzZTxzaWduZWQgY2hhcj46
OnNldChhcnJheSwgb2Zmc2V0LCBlYyk7IH0KLSAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwg
ZG91YmxlIHZhbHVlKSB7IHJldHVybiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBjaGFy
Pjo6c2V0KGluZGV4LCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldChUeXBlZEFycmF5QmFzZTxzaWdu
ZWQgY2hhcj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IFR5
cGVkQXJyYXlCYXNlPHNpZ25lZCBjaGFyPjo6c2V0KGFycmF5LCBvZmZzZXQsIGVjKTsgfQorICAg
IHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIHsgSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZTxzaWduZWQgY2hhciwgaW50NjRfdD46OnNldChpbmRleCwgdmFsdWUpOyB9CiAKICAg
ICBQYXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKICAgICBQ
YXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuY3BwCShyZXZpc2lv
biA3ODc1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50
MTZBcnJheTo6Y3JlYXQKIH0KIAogSW50MTZBcnJheTo6SW50MTZBcnJheShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
LSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8c2hvcnQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwg
bGVuZ3RoKQorICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxzaG9ydCwgaW50NjRfdD4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9JbnQxNkFycmF5LmgJKHJldmlzaW9uIDc4NzU0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMTQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIAotY2xhc3MgSW50
MTZBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHNob3J0PiB7CitjbGFzcyBJ
bnQxNkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8c2hvcnQsIGludDY0X3Q+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUodW5z
aWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUo
c2hvcnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
dDE2QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB1c2luZyBUeXBlZEFycmF5QmFz
ZTxzaG9ydD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHNob3J0Pjo6
c2V0OworICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8c2hvcnQsIGludDY0X3Q+Ojpz
ZXQ7CiAKICAgICBQYXNzUmVmUHRyPEludDE2QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29u
c3Q7CiAgICAgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5j
cHAJKHJldmlzaW9uIDc4NzU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJB
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgUGFzc1JlZlB0cjxJbnQz
MkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdAogfQogCiBJbnQzMkFycmF5OjpJbnQzMkFycmF5KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+KGJ1ZmZlciwgYnl0
ZU9mZnNldCwgbGVuZ3RoKQorICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQsIGludDY0
X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQogewogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5oCShyZXZpc2lvbiA3ODc1NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUg
KzMxLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW50MzJBcnJheSA6IHB1
YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4geworY2xhc3MgSW50MzJBcnJheSA6IHB1
YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludCwgaW50NjRfdD4gewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZShpbnQqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CiAKICAgICAvLyBDYW7igJl0IHVzZSAidXNpbmciIGhlcmUgZHVlIHRvIGEg
YnVnIGluIHRoZSBSVkNUIGNvbXBpbGVyLgotICAgIHZvaWQgc2V0KFR5cGVkQXJyYXlCYXNlPGlu
dD4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBU
eXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQoYXJyYXksIG9mZnNldCwgZWMpOyB9Ci0gICAgdm9pZCBz
ZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgeyByZXR1cm4gSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZTxpbnQ+OjpzZXQoaW5kZXgsIHZhbHVlKTsgfQorICAgIHZvaWQgc2V0KFR5cGVkQXJy
YXlCYXNlPGludD4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IFR5cGVkQXJyYXlCYXNlPGludD46OnNldChhcnJheSwgb2Zmc2V0LCBlYyk7IH0KKyAgICB2b2lk
IHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKSB7IEludGVncmFsVHlwZWRBcnJheUJh
c2U8aW50LCBpbnQ2NF90Pjo6c2V0KGluZGV4LCB2YWx1ZSk7IH0KIAogICAgIFBhc3NSZWZQdHI8
SW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPElu
dDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5o
CShyZXZpc2lvbiA3ODc1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludGVncmFs
VHlwZWRBcnJheUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIExhcmdlc3RJbnRUeXBlPgogY2xhc3MgSW50ZWdyYWxUeXBlZEFycmF5
QmFzZSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxUPiB7CiAgIHB1YmxpYzoKICAgICB2b2lkIHNl
dCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQpAQCAtNDUsMTEgKzQ1LDkgQEAgY2xhc3Mg
SW50ZWdyYWxUeXBlZEFycmF5QmFzZSA6IHB1YmxpYyBUeQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8gMAogICAgICAgICAgICAg
dmFsdWUgPSAwOwotICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojpt
aW4oKSkKLSAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWluKCk7
Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkp
Ci0gICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOwotICAg
ICAgICBUeXBlZEFycmF5QmFzZTxUPjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PFQ+KHZh
bHVlKTsKKyAgICAgICAgLy8gVGhlIGRvdWJsZSBjYXN0IGlzIG5lY2Vzc2FyeSB0byBnZXQgdGhl
IGNvcnJlY3Qgcm91bmRpbmcKKyAgICAgICAgLy8gZm9yIG91dC1vZi1yYW5nZSB2YWx1ZXMgd2l0
aCBJbnQzMkFycmF5IGFuZCBVaW50MzJBcnJheS4KKyAgICAgICAgVHlwZWRBcnJheUJhc2U8VD46
OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxUPihzdGF0aWNfY2FzdDxMYXJnZXN0SW50VHlw
ZT4odmFsdWUpKTsKICAgICB9CiAKICAgICAvLyBJbnZva2VkIGJ5IHRoZSBpbmRleGVkIGdldHRl
ci4gRG9lcyBub3QgcGVyZm9ybSByYW5nZSBjaGVja3M7IGNhbGxlcgpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvVWludDhBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvVWludDhBcnJheS5jcHAJKHJldmlzaW9uIDc4NzU0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdAog
fQogCiBVaW50OEFycmF5OjpVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxU
eXBlZEFycmF5QmFzZTx1bnNpZ25lZCBjaGFyPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkK
KyAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgY2hhciwgdWludDY0X3Q+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9VaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvVWludDhBcnJheS5oCShyZXZpc2lvbiA3ODc1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDE1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXJyYXlCdWZmZXI7CiAKLWNsYXNzIFVp
bnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBjaGFyPiB7
CitjbGFzcyBVaW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8dW5zaWdu
ZWQgY2hhciwgdWludDY0X3Q+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVaW50
OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxV
aW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQgY2hhciogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
IAogICAgIC8vIENhbuKAmXQgdXNlICJ1c2luZyIgaGVyZSBkdWUgdG8gYSBidWcgaW4gdGhlIFJW
Q1QgY29tcGlsZXIuCi0gICAgdm9pZCBzZXQoVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgY2hhcj4q
IGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1bnNpZ25lZCBjaGFyPjo6c2V0KGFycmF5LCBvZmZzZXQsIGVjKTsgfQotICAg
IHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIHsgcmV0dXJuIEludGVncmFs
VHlwZWRBcnJheUJhc2U8dW5zaWduZWQgY2hhcj46OnNldChpbmRleCwgdmFsdWUpOyB9CisgICAg
dm9pZCBzZXQoVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgY2hhcj4qIGFycmF5LCB1bnNpZ25lZCBv
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGNoYXI+
OjpzZXQoYXJyYXksIG9mZnNldCwgZWMpOyB9CisgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgs
IGRvdWJsZSB2YWx1ZSkgeyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGNoYXIsIHVp
bnQ2NF90Pjo6c2V0KGluZGV4LCB2YWx1ZSk7IH0KIAogICAgIFBhc3NSZWZQdHI8VWludDhBcnJh
eT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuY3BwCShyZXZpc2lvbiA3ODc1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlCiB9
CiAKIFVpbnQxNkFycmF5OjpVaW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFs
VHlwZWRBcnJheUJhc2U8dW5zaWduZWQgc2hvcnQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KQorICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBzaG9ydCwgdWludDY0X3Q+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDc4NzU0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTUg
KzMzLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXJyYXlCdWZmZXI7CiAKLWNs
YXNzIFVpbnQxNkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8dW5zaWduZWQg
c2hvcnQ+IHsKK2NsYXNzIFVpbnQxNkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJh
c2U8dW5zaWduZWQgc2hvcnQsIHVpbnQ2NF90PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgc2hvcnQqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwogCiAgICAgLy8gQ2Fu4oCZdCB1c2UgInVzaW5nIiBoZXJlIGR1ZSB0byBh
IGJ1ZyBpbiB0aGUgUlZDVCBjb21waWxlci4KLSAgICB2b2lkIHNldChUeXBlZEFycmF5QmFzZTx1
bnNpZ25lZCBzaG9ydD4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBzaG9ydD46OnNldChhcnJheSwgb2Zm
c2V0LCBlYyk7IH0KLSAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKSB7
IHJldHVybiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIHNob3J0Pjo6c2V0KGluZGV4
LCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldChUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBzaG9ydD4q
IGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IFR5cGVkQXJyYXlC
YXNlPHVuc2lnbmVkIHNob3J0Pjo6c2V0KGFycmF5LCBvZmZzZXQsIGVjKTsgfQorICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIHsgSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZTx1bnNpZ25lZCBzaG9ydCwgdWludDY0X3Q+OjpzZXQoaW5kZXgsIHZhbHVlKTsgfQogCiAgICAg
UGFzc1JlZlB0cjxVaW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKICAgICBQ
YXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmNwcAkocmV2
aXNpb24gNzg3NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgUGFzc1JlZlB0cjxVaW50MzJBcnJh
eT4gVWludDMyQXJyYXk6OmNyZQogfQogCiBVaW50MzJBcnJheTo6VWludDMyQXJyYXkoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGludD4oYnVmZmVy
LCBieXRlT2Zmc2V0LCBsZW5ndGgpCisgICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVuc2ln
bmVkIGludCwgdWludDY0X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQogewogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDc4
NzU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
QXJyYXlCdWZmZXI7CiAKLWNsYXNzIFVpbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRB
cnJheUJhc2U8dW5zaWduZWQgaW50PiB7CitjbGFzcyBVaW50MzJBcnJheSA6IHB1YmxpYyBJbnRl
Z3JhbFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGludCwgdWludDY0X3Q+IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBpbnQq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgLy8gQ2Fu4oCZdCB1c2UgInVzaW5nIiBo
ZXJlIGR1ZSB0byBhIGJ1ZyBpbiB0aGUgUlZDVCBjb21waWxlci4KLSAgICB2b2lkIHNldChUeXBl
ZEFycmF5QmFzZTx1bnNpZ25lZCBpbnQ+KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgaW50Pjo6c2V0KGFy
cmF5LCBvZmZzZXQsIGVjKTsgfQotICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUg
dmFsdWUpIHsgcmV0dXJuIEludGVncmFsVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgaW50Pjo6c2V0
KGluZGV4LCB2YWx1ZSk7IH0KKyAgICB2b2lkIHNldChUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBp
bnQ+KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyBUeXBlZEFy
cmF5QmFzZTx1bnNpZ25lZCBpbnQ+OjpzZXQoYXJyYXksIG9mZnNldCwgZWMpOyB9CisgICAgdm9p
ZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgeyBJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlPHVuc2lnbmVkIGludCwgdWludDY0X3Q+OjpzZXQoaW5kZXgsIHZhbHVlKTsgfQogCiAgICAg
UGFzc1JlZlB0cjxVaW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKICAgICBQ
YXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0
OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gNzg3NTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMi0xNiAgS2VubmV0aCBSdXNzZWxs
ICA8a2JyQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ29uc3RydWN0aW9uIG9mIFVpbnQ4QXJyYXkgZnJvbSBKUyBBcnJheSAoYW5k
IHBvc3NpYmx5IG90aGVycykgaW5jb3JyZWN0bHkgY2xhbXBzIHZhbHVlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3NjgKKworICAgICAgICBTeW5j
aHJvbml6ZWQgYXJyYXktdW5pdC10ZXN0cy5odG1sIHdpdGggdmVyc2lvbiBpbiBLaHJvbm9zCisg
ICAgICAgIHJlcG9zaXRvcnkuIFRlc3RlZCBpbiBDaHJvbWl1bSwgU2FmYXJpLCBDaHJvbWl1bSBE
UlQgb24gTWFjIGFuZAorICAgICAgICBXZWJLaXQgRFJUIG9uIE1hYy4KKworICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGZhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbDoKKwogMjAxMS0wMi0xNiAg
S2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
U2tpcCByZWNlbnRseSBhZGRlZCB0ZXN0cyBmb3IgYWRqdXN0aW5nIG1pbmltdW0gdGltZXIKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5
LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3ODc1NCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xNiw3ICsxNiw4IEBAIFBBU1MgdGVzdCBGbG9hdDMyQXJyYXkgU2V0RnJvbUFy
cmF5CiBQQVNTIG5lZ2F0aXZlVGVzdCBGbG9hdDMyQXJyYXkgU2V0RnJvbUFycmF5CiBQQVNTIHRl
c3QgRmxvYXQzMkFycmF5IFN1YmFycmF5CiBQQVNTIG5lZ2F0aXZlVGVzdCBGbG9hdDMyQXJyYXkg
U3ViYXJyYXkKLVBBU1MgdGVzdCBGbG9hdDMyQXJyYXkgQm91bmRhcnlDb25kaXRpb25zKC01MDAu
NSwgLTUwMC41LCA1MDAuNSwgNTAwLjUpCitQQVNTIHRlc3QgRmxvYXQzMkFycmF5IFNldEJvdW5k
YXJ5Q29uZGl0aW9ucworUEFTUyB0ZXN0IEZsb2F0MzJBcnJheSBDb25zdHJ1Y3Rpb25Cb3VuZGFy
eUNvbmRpdGlvbnMKIFBBU1MgQ29uc3RydWN0aW9uIG9mIEZsb2F0MzJBcnJheSB3aXRoIG51bGwg
YnVmZmVyIHRocmV3IGV4Y2VwdGlvbgogUEFTUyBDb25zdHJ1Y3Rpb24gb2YgRmxvYXQzMkFycmF5
IHdpdGggKG51bGwgYnVmZmVyLCAwKSB0aHJldyBleGNlcHRpb24KIFBBU1MgQ29uc3RydWN0aW9u
IG9mIEZsb2F0MzJBcnJheSB3aXRoIChudWxsIGJ1ZmZlciwgMCwgMCkgdGhyZXcgZXhjZXB0aW9u
CkBAIC00OCw2ICs0OSw3IEBAIFBBU1MgdGVzdCBzdG9yaW5nIE5hTiBpbiBGbG9hdDMyQXJyYXkK
IFBBU1MgdGVzdCBJbnQ4QXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCiBQQVNTIHRlc3QgSW50
OEFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCiBQQVNTIHRlc3QgSW50OEFy
cmF5IENvbnN0cnVjdFdpdGhUeXBlZEFycmF5T2ZTaWduZWRWYWx1ZXMKK1BBU1MgdGVzdCBpbnRl
Z3JhbCBhcnJheSB0cnVuY2F0aW9uIGJlaGF2aW9yIGZvciBJbnQ4QXJyYXkKIFRlc3RpbmcgSW50
OEFycmF5IEdldFdpdGhPdXRPZlJhbmdlSW5kaWNlcwogUEFTUyBhcnJheVsyXSBpcyB1bmRlZmlu
ZWQuCiBQQVNTIGFycmF5Wy0xXSBpcyB1bmRlZmluZWQuCkBAIC01OSw3ICs2MSw4IEBAIFBBU1Mg
dGVzdCBJbnQ4QXJyYXkgU2V0RnJvbUFycmF5CiBQQVNTIG5lZ2F0aXZlVGVzdCBJbnQ4QXJyYXkg
U2V0RnJvbUFycmF5CiBQQVNTIHRlc3QgSW50OEFycmF5IFN1YmFycmF5CiBQQVNTIG5lZ2F0aXZl
VGVzdCBJbnQ4QXJyYXkgU3ViYXJyYXkKLVBBU1MgdGVzdCBJbnQ4QXJyYXkgQm91bmRhcnlDb25k
aXRpb25zKC0xMjgsIC0xMjgsIDEyNywgMTI3KQorUEFTUyB0ZXN0IEludDhBcnJheSBTZXRCb3Vu
ZGFyeUNvbmRpdGlvbnMKK1BBU1MgdGVzdCBJbnQ4QXJyYXkgQ29uc3RydWN0aW9uQm91bmRhcnlD
b25kaXRpb25zCiBQQVNTIENvbnN0cnVjdGlvbiBvZiBJbnQ4QXJyYXkgd2l0aCBudWxsIGJ1ZmZl
ciB0aHJldyBleGNlcHRpb24KIFBBU1MgQ29uc3RydWN0aW9uIG9mIEludDhBcnJheSB3aXRoIChu
dWxsIGJ1ZmZlciwgMCkgdGhyZXcgZXhjZXB0aW9uCiBQQVNTIENvbnN0cnVjdGlvbiBvZiBJbnQ4
QXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDAsIDApIHRocmV3IGV4Y2VwdGlvbgpAQCAtODcsNiAr
OTAsNyBAQCBQQVNTIHRlc3Qgc3RvcmluZyBOYU4gaW4gSW50OEFycmF5CiBQQVNTIHRlc3QgSW50
MTZBcnJheSBTZXRBbmRHZXRQb3MxMFRvTmVnMTAKIFBBU1MgdGVzdCBJbnQxNkFycmF5IENvbnN0
cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCiBQQVNTIHRlc3QgSW50MTZBcnJheSBDb25zdHJ1
Y3RXaXRoVHlwZWRBcnJheU9mU2lnbmVkVmFsdWVzCitQQVNTIHRlc3QgaW50ZWdyYWwgYXJyYXkg
dHJ1bmNhdGlvbiBiZWhhdmlvciBmb3IgSW50MTZBcnJheQogVGVzdGluZyBJbnQxNkFycmF5IEdl
dFdpdGhPdXRPZlJhbmdlSW5kaWNlcwogUEFTUyBhcnJheVsyXSBpcyB1bmRlZmluZWQuCiBQQVNT
IGFycmF5Wy0xXSBpcyB1bmRlZmluZWQuCkBAIC05OCw3ICsxMDIsOCBAQCBQQVNTIHRlc3QgSW50
MTZBcnJheSBTZXRGcm9tQXJyYXkKIFBBU1MgbmVnYXRpdmVUZXN0IEludDE2QXJyYXkgU2V0RnJv
bUFycmF5CiBQQVNTIHRlc3QgSW50MTZBcnJheSBTdWJhcnJheQogUEFTUyBuZWdhdGl2ZVRlc3Qg
SW50MTZBcnJheSBTdWJhcnJheQotUEFTUyB0ZXN0IEludDE2QXJyYXkgQm91bmRhcnlDb25kaXRp
b25zKC0zMjc2OCwgLTMyNzY4LCAzMjc2NywgMzI3NjcpCitQQVNTIHRlc3QgSW50MTZBcnJheSBT
ZXRCb3VuZGFyeUNvbmRpdGlvbnMKK1BBU1MgdGVzdCBJbnQxNkFycmF5IENvbnN0cnVjdGlvbkJv
dW5kYXJ5Q29uZGl0aW9ucwogUEFTUyBDb25zdHJ1Y3Rpb24gb2YgSW50MTZBcnJheSB3aXRoIG51
bGwgYnVmZmVyIHRocmV3IGV4Y2VwdGlvbgogUEFTUyBDb25zdHJ1Y3Rpb24gb2YgSW50MTZBcnJh
eSB3aXRoIChudWxsIGJ1ZmZlciwgMCkgdGhyZXcgZXhjZXB0aW9uCiBQQVNTIENvbnN0cnVjdGlv
biBvZiBJbnQxNkFycmF5IHdpdGggKG51bGwgYnVmZmVyLCAwLCAwKSB0aHJldyBleGNlcHRpb24K
QEAgLTEzMCw2ICsxMzUsNyBAQCBQQVNTIHRlc3Qgc3RvcmluZyBOYU4gaW4gSW50MTZBcnJheQog
UEFTUyB0ZXN0IEludDMyQXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCiBQQVNTIHRlc3QgSW50
MzJBcnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlPZlNpZ25lZFZhbHVlcwogUEFTUyB0ZXN0IEludDMy
QXJyYXkgQ29uc3RydWN0V2l0aFR5cGVkQXJyYXlPZlNpZ25lZFZhbHVlcworUEFTUyB0ZXN0IGlu
dGVncmFsIGFycmF5IHRydW5jYXRpb24gYmVoYXZpb3IgZm9yIEludDMyQXJyYXkKIFRlc3Rpbmcg
SW50MzJBcnJheSBHZXRXaXRoT3V0T2ZSYW5nZUluZGljZXMKIFBBU1MgYXJyYXlbMl0gaXMgdW5k
ZWZpbmVkLgogUEFTUyBhcnJheVstMV0gaXMgdW5kZWZpbmVkLgpAQCAtMTQxLDcgKzE0Nyw4IEBA
IFBBU1MgdGVzdCBJbnQzMkFycmF5IFNldEZyb21BcnJheQogUEFTUyBuZWdhdGl2ZVRlc3QgSW50
MzJBcnJheSBTZXRGcm9tQXJyYXkKIFBBU1MgdGVzdCBJbnQzMkFycmF5IFN1YmFycmF5CiBQQVNT
IG5lZ2F0aXZlVGVzdCBJbnQzMkFycmF5IFN1YmFycmF5Ci1QQVNTIHRlc3QgSW50MzJBcnJheSBC
b3VuZGFyeUNvbmRpdGlvbnMoLTIxNDc0ODM2NDgsIC0yMTQ3NDgzNjQ4LCAyMTQ3NDgzNjQ3LCAy
MTQ3NDgzNjQ3KQorUEFTUyB0ZXN0IEludDMyQXJyYXkgU2V0Qm91bmRhcnlDb25kaXRpb25zCitQ
QVNTIHRlc3QgSW50MzJBcnJheSBDb25zdHJ1Y3Rpb25Cb3VuZGFyeUNvbmRpdGlvbnMKIFBBU1Mg
Q29uc3RydWN0aW9uIG9mIEludDMyQXJyYXkgd2l0aCBudWxsIGJ1ZmZlciB0aHJldyBleGNlcHRp
b24KIFBBU1MgQ29uc3RydWN0aW9uIG9mIEludDMyQXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDAp
IHRocmV3IGV4Y2VwdGlvbgogUEFTUyBDb25zdHJ1Y3Rpb24gb2YgSW50MzJBcnJheSB3aXRoIChu
dWxsIGJ1ZmZlciwgMCwgMCkgdGhyZXcgZXhjZXB0aW9uCkBAIC0xNzMsNiArMTgwLDcgQEAgUEFT
UyB0ZXN0IHN0b3JpbmcgTmFOIGluIEludDMyQXJyYXkKIFBBU1MgdGVzdCBVaW50OEFycmF5IFNl
dEFuZEdldDEwVG8xCiBQQVNTIHRlc3QgVWludDhBcnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlPZlVu
c2lnbmVkVmFsdWVzCiBQQVNTIHRlc3QgVWludDhBcnJheSBDb25zdHJ1Y3RXaXRoVHlwZWRBcnJh
eU9mVW5zaWduZWRWYWx1ZXMKK1BBU1MgdGVzdCBpbnRlZ3JhbCBhcnJheSB0cnVuY2F0aW9uIGJl
aGF2aW9yIGZvciBVaW50OEFycmF5CiBUZXN0aW5nIFVpbnQ4QXJyYXkgR2V0V2l0aE91dE9mUmFu
Z2VJbmRpY2VzCiBQQVNTIGFycmF5WzJdIGlzIHVuZGVmaW5lZC4KIFBBU1MgYXJyYXlbLTFdIGlz
IHVuZGVmaW5lZC4KQEAgLTE4NCw3ICsxOTIsOCBAQCBQQVNTIHRlc3QgVWludDhBcnJheSBTZXRG
cm9tQXJyYXkKIFBBU1MgbmVnYXRpdmVUZXN0IFVpbnQ4QXJyYXkgU2V0RnJvbUFycmF5CiBQQVNT
IHRlc3QgVWludDhBcnJheSBTdWJhcnJheQogUEFTUyBuZWdhdGl2ZVRlc3QgVWludDhBcnJheSBT
dWJhcnJheQotUEFTUyB0ZXN0IFVpbnQ4QXJyYXkgQm91bmRhcnlDb25kaXRpb25zKDAsIDAsIDI1
NSwgMjU1KQorUEFTUyB0ZXN0IFVpbnQ4QXJyYXkgU2V0Qm91bmRhcnlDb25kaXRpb25zCitQQVNT
IHRlc3QgVWludDhBcnJheSBDb25zdHJ1Y3Rpb25Cb3VuZGFyeUNvbmRpdGlvbnMKIFBBU1MgQ29u
c3RydWN0aW9uIG9mIFVpbnQ4QXJyYXkgd2l0aCBudWxsIGJ1ZmZlciB0aHJldyBleGNlcHRpb24K
IFBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQ4QXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDApIHRo
cmV3IGV4Y2VwdGlvbgogUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDhBcnJheSB3aXRoIChudWxs
IGJ1ZmZlciwgMCwgMCkgdGhyZXcgZXhjZXB0aW9uCkBAIC0yMTIsNiArMjIxLDcgQEAgUEFTUyB0
ZXN0IHN0b3JpbmcgTmFOIGluIFVpbnQ4QXJyYXkKIFBBU1MgdGVzdCBVaW50MTZBcnJheSBTZXRB
bmRHZXQxMFRvMQogUEFTUyB0ZXN0IFVpbnQxNkFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mVW5z
aWduZWRWYWx1ZXMKIFBBU1MgdGVzdCBVaW50MTZBcnJheSBDb25zdHJ1Y3RXaXRoVHlwZWRBcnJh
eU9mVW5zaWduZWRWYWx1ZXMKK1BBU1MgdGVzdCBpbnRlZ3JhbCBhcnJheSB0cnVuY2F0aW9uIGJl
aGF2aW9yIGZvciBVaW50MTZBcnJheQogVGVzdGluZyBVaW50MTZBcnJheSBHZXRXaXRoT3V0T2ZS
YW5nZUluZGljZXMKIFBBU1MgYXJyYXlbMl0gaXMgdW5kZWZpbmVkLgogUEFTUyBhcnJheVstMV0g
aXMgdW5kZWZpbmVkLgpAQCAtMjIzLDcgKzIzMyw4IEBAIFBBU1MgdGVzdCBVaW50MTZBcnJheSBT
ZXRGcm9tQXJyYXkKIFBBU1MgbmVnYXRpdmVUZXN0IFVpbnQxNkFycmF5IFNldEZyb21BcnJheQog
UEFTUyB0ZXN0IFVpbnQxNkFycmF5IFN1YmFycmF5CiBQQVNTIG5lZ2F0aXZlVGVzdCBVaW50MTZB
cnJheSBTdWJhcnJheQotUEFTUyB0ZXN0IFVpbnQxNkFycmF5IEJvdW5kYXJ5Q29uZGl0aW9ucygw
LCAwLCA2NTUzNSwgNjU1MzUpCitQQVNTIHRlc3QgVWludDE2QXJyYXkgU2V0Qm91bmRhcnlDb25k
aXRpb25zCitQQVNTIHRlc3QgVWludDE2QXJyYXkgQ29uc3RydWN0aW9uQm91bmRhcnlDb25kaXRp
b25zCiBQQVNTIENvbnN0cnVjdGlvbiBvZiBVaW50MTZBcnJheSB3aXRoIG51bGwgYnVmZmVyIHRo
cmV3IGV4Y2VwdGlvbgogUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDE2QXJyYXkgd2l0aCAobnVs
bCBidWZmZXIsIDApIHRocmV3IGV4Y2VwdGlvbgogUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDE2
QXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDAsIDApIHRocmV3IGV4Y2VwdGlvbgpAQCAtMjU1LDYg
KzI2Niw3IEBAIFBBU1MgdGVzdCBzdG9yaW5nIE5hTiBpbiBVaW50MTZBcnJheQogUEFTUyB0ZXN0
IFVpbnQzMkFycmF5IFNldEFuZEdldDEwVG8xCiBQQVNTIHRlc3QgVWludDMyQXJyYXkgQ29uc3Ry
dWN0V2l0aEFycmF5T2ZVbnNpZ25lZFZhbHVlcwogUEFTUyB0ZXN0IFVpbnQzMkFycmF5IENvbnN0
cnVjdFdpdGhUeXBlZEFycmF5T2ZVbnNpZ25lZFZhbHVlcworUEFTUyB0ZXN0IGludGVncmFsIGFy
cmF5IHRydW5jYXRpb24gYmVoYXZpb3IgZm9yIFVpbnQzMkFycmF5CiBUZXN0aW5nIFVpbnQzMkFy
cmF5IEdldFdpdGhPdXRPZlJhbmdlSW5kaWNlcwogUEFTUyBhcnJheVsyXSBpcyB1bmRlZmluZWQu
CiBQQVNTIGFycmF5Wy0xXSBpcyB1bmRlZmluZWQuCkBAIC0yNjYsNyArMjc4LDggQEAgUEFTUyB0
ZXN0IFVpbnQzMkFycmF5IFNldEZyb21BcnJheQogUEFTUyBuZWdhdGl2ZVRlc3QgVWludDMyQXJy
YXkgU2V0RnJvbUFycmF5CiBQQVNTIHRlc3QgVWludDMyQXJyYXkgU3ViYXJyYXkKIFBBU1MgbmVn
YXRpdmVUZXN0IFVpbnQzMkFycmF5IFN1YmFycmF5Ci1QQVNTIHRlc3QgVWludDMyQXJyYXkgQm91
bmRhcnlDb25kaXRpb25zKDAsIDAsIDQyOTQ5NjcyOTUsIDQyOTQ5NjcyOTUpCitQQVNTIHRlc3Qg
VWludDMyQXJyYXkgU2V0Qm91bmRhcnlDb25kaXRpb25zCitQQVNTIHRlc3QgVWludDMyQXJyYXkg
Q29uc3RydWN0aW9uQm91bmRhcnlDb25kaXRpb25zCiBQQVNTIENvbnN0cnVjdGlvbiBvZiBVaW50
MzJBcnJheSB3aXRoIG51bGwgYnVmZmVyIHRocmV3IGV4Y2VwdGlvbgogUEFTUyBDb25zdHJ1Y3Rp
b24gb2YgVWludDMyQXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDApIHRocmV3IGV4Y2VwdGlvbgog
UEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDMyQXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDAsIDAp
IHRocmV3IGV4Y2VwdGlvbgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJy
YXktdW5pdC10ZXN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbAkocmV2aXNpb24gNzg3NTQpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Nyw2ICsxNTcsOTUgQEAgZnVuY3Rpb24gdGVzdENvbnN0cnVjdFdpdGhUeXBlZEFy
cmF5T2ZTaQogfQogCiAvLworLy8gVGVzdCBjYXNlcyBmb3IgaW50ZWdyYWwgdHlwZXMuCisvLyBT
b21lIEphdmFTY3JpcHQgZW5naW5lcyBuZWVkIHNlcGFyYXRlIGNvcGllcyBvZiB0aGlzIGNvZGUg
aW4gb3JkZXIKKy8vIHRvIGV4ZXJjaXNlIGFsbCBvZiB0aGVpciBvcHRpbWl6ZWQgY29kZSBwYXRo
cy4KKy8vCisKK2Z1bmN0aW9uIHRlc3RJbnRlZ3JhbEFycmF5VHJ1bmNhdGlvbkJlaGF2aW9yKHR5
cGUsIG5hbWUsIHVuc2lnbmVkKSB7CisgIHJ1bm5pbmcoJ3Rlc3QgaW50ZWdyYWwgYXJyYXkgdHJ1
bmNhdGlvbiBiZWhhdmlvciBmb3IgJyArIG5hbWUpOworCisgIHZhciBzb3VyY2VEYXRhOworICB2
YXIgZXhwZWN0ZWRSZXN1bHRzOworCisgIGlmICh1bnNpZ25lZCkgeworICAgIHNvdXJjZURhdGEg
PSBbMC42LCAxMC42XTsKKyAgICBleHBlY3RlZFJlc3VsdHMgPSBbMCwgMTBdOworICB9IGVsc2Ug
eworICAgIHNvdXJjZURhdGEgPSBbMC42LCAxMC42LCAtMC42LCAtMTAuNl07CisgICAgZXhwZWN0
ZWRSZXN1bHRzID0gWzAsIDEwLCAwLCAtMTBdOworICB9CisKKyAgdmFyIG51bUl0ZXJhdGlvbnMg
PSAxMDsKKyAgdmFyIGFycmF5ID0gbmV3IHR5cGUobnVtSXRlcmF0aW9ucyk7CisKKyAgLy8gVGhl
IGNvZGUgYmxvY2sgaW4gZWFjaCBvZiB0aGUgY2FzZSBzdGF0ZW1lbnRzIGJlbG93IGlzIGlkZW50
aWNhbCwgYnV0IHNvbWUKKyAgLy8gSmF2YVNjcmlwdCBlbmdpbmVzIG5lZWQgc2VwYXJhdGUgY29w
aWVzIGluIG9yZGVyIHRvIGV4ZXJjaXNlIGFsbCBvZgorICAvLyB0aGVpciBvcHRpbWl6ZWQgY29k
ZSBwYXRocy4KKworICB0cnkgeworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSW50OEFy
cmF5OgorICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNvdXJjZURhdGEubGVuZ3RoOyArK2lp
KSB7CisgICAgICAgIGZvciAodmFyIGpqID0gMDsgamogPCBudW1JdGVyYXRpb25zOyArK2pqKSB7
CisgICAgICAgICAgYXJyYXlbampdID0gc291cmNlRGF0YVtpaV07CisgICAgICAgICAgYXNzZXJ0
RXEoJ1N0b3JpbmcgJyArIHNvdXJjZURhdGFbaWldLCBleHBlY3RlZFJlc3VsdHNbaWldLCBhcnJh
eVtqal0pOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEludDE2
QXJyYXk6CisgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgc291cmNlRGF0YS5sZW5ndGg7ICsr
aWkpIHsKKyAgICAgICAgZm9yICh2YXIgamogPSAwOyBqaiA8IG51bUl0ZXJhdGlvbnM7ICsramop
IHsKKyAgICAgICAgICBhcnJheVtqal0gPSBzb3VyY2VEYXRhW2lpXTsKKyAgICAgICAgICBhc3Nl
cnRFcSgnU3RvcmluZyAnICsgc291cmNlRGF0YVtpaV0sIGV4cGVjdGVkUmVzdWx0c1tpaV0sIGFy
cmF5W2pqXSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgSW50
MzJBcnJheToKKyAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBzb3VyY2VEYXRhLmxlbmd0aDsg
KytpaSkgeworICAgICAgICBmb3IgKHZhciBqaiA9IDA7IGpqIDwgbnVtSXRlcmF0aW9uczsgKytq
aikgeworICAgICAgICAgIGFycmF5W2pqXSA9IHNvdXJjZURhdGFbaWldOworICAgICAgICAgIGFz
c2VydEVxKCdTdG9yaW5nICcgKyBzb3VyY2VEYXRhW2lpXSwgZXhwZWN0ZWRSZXN1bHRzW2lpXSwg
YXJyYXlbampdKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBV
aW50OEFycmF5OgorICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNvdXJjZURhdGEubGVuZ3Ro
OyArK2lpKSB7CisgICAgICAgIGZvciAodmFyIGpqID0gMDsgamogPCBudW1JdGVyYXRpb25zOyAr
K2pqKSB7CisgICAgICAgICAgYXJyYXlbampdID0gc291cmNlRGF0YVtpaV07CisgICAgICAgICAg
YXNzZXJ0RXEoJ1N0b3JpbmcgJyArIHNvdXJjZURhdGFbaWldLCBleHBlY3RlZFJlc3VsdHNbaWld
LCBhcnJheVtqal0pOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNl
IFVpbnQxNkFycmF5OgorICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNvdXJjZURhdGEubGVu
Z3RoOyArK2lpKSB7CisgICAgICAgIGZvciAodmFyIGpqID0gMDsgamogPCBudW1JdGVyYXRpb25z
OyArK2pqKSB7CisgICAgICAgICAgYXJyYXlbampdID0gc291cmNlRGF0YVtpaV07CisgICAgICAg
ICAgYXNzZXJ0RXEoJ1N0b3JpbmcgJyArIHNvdXJjZURhdGFbaWldLCBleHBlY3RlZFJlc3VsdHNb
aWldLCBhcnJheVtqal0pOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBj
YXNlIFVpbnQzMkFycmF5OgorICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNvdXJjZURhdGEu
bGVuZ3RoOyArK2lpKSB7CisgICAgICAgIGZvciAodmFyIGpqID0gMDsgamogPCBudW1JdGVyYXRp
b25zOyArK2pqKSB7CisgICAgICAgICAgYXJyYXlbampdID0gc291cmNlRGF0YVtpaV07CisgICAg
ICAgICAgYXNzZXJ0RXEoJ1N0b3JpbmcgJyArIHNvdXJjZURhdGFbaWldLCBleHBlY3RlZFJlc3Vs
dHNbaWldLCBhcnJheVtqal0pOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgZmFpbCgiVW5oYW5kbGVkIHR5cGUiKTsKKyAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHBhc3MoKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGZhaWwoZSk7CisgIH0K
K30KKworCisvLwogLy8gVGVzdCBjYXNlcyBmb3IgYm90aCBzaWduZWQgYW5kIHVuc2lnbmVkIHR5
cGVzCiAvLwogCkBAIC0zMjQsMTcgKzQxMywzMSBAQCBmdW5jdGlvbiBuZWdhdGl2ZVRlc3RTdWJh
cnJheSh0eXBlLCBuYW1lCiAgIH0KIH0KIAotZnVuY3Rpb24gdGVzdEJvdW5kYXJ5Q29uZGl0aW9u
cyh0eXBlLCBuYW1lLCBsb3dWYWx1ZSwgZXhwZWN0ZWRMb3dWYWx1ZSwgaGlnaFZhbHVlLCBleHBl
Y3RlZEhpZ2hWYWx1ZSkgewotICBydW5uaW5nKCd0ZXN0ICcgKyBuYW1lICsgJyBCb3VuZGFyeUNv
bmRpdGlvbnMoJyArCi0gICAgICAgICAgbG93VmFsdWUgKyAnLCAnICsgZXhwZWN0ZWRMb3dWYWx1
ZSArICcsICcgKwotICAgICAgICAgIGhpZ2hWYWx1ZSArICcsICcgKyBleHBlY3RlZEhpZ2hWYWx1
ZSArICcpJyk7CitmdW5jdGlvbiB0ZXN0U2V0Qm91bmRhcnlDb25kaXRpb25zKHR5cGUsIG5hbWUs
IHRlc3RWYWx1ZXMsIGV4cGVjdGVkVmFsdWVzKSB7CisgIHJ1bm5pbmcoJ3Rlc3QgJyArIG5hbWUg
KyAnIFNldEJvdW5kYXJ5Q29uZGl0aW9ucycpOwogICB0cnkgewogICAgIHZhciBhcnJheSA9IG5l
dyB0eXBlKDEpOwogICAgIGFzc2VydEVxKCdBcnJheSBsZW5ndGgnLCAxLCBhcnJheS5sZW5ndGgp
OwotICAgIGFycmF5WzBdID0gbG93VmFsdWU7Ci0gICAgYXNzZXJ0RXEoJ0VsZW1lbnQgMCcsIGV4
cGVjdGVkTG93VmFsdWUsIGFycmF5WzBdKTsKLSAgICBhcnJheVswXSA9IGhpZ2hWYWx1ZTsKLSAg
ICBhc3NlcnRFcSgnRWxlbWVudCAwJywgZXhwZWN0ZWRIaWdoVmFsdWUsIGFycmF5WzBdKTsKKyAg
ICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGVzdFZhbHVlcy5sZW5ndGg7ICsraWkpIHsKKyAgICAg
IGZvciAodmFyIGpqID0gMDsgamogPCAxMDsgKytqaikgeworICAgICAgICBhcnJheVswXSA9IHRl
c3RWYWx1ZXNbaWldOworICAgICAgICBhc3NlcnRFcSgnRWxlbWVudCAwJywgZXhwZWN0ZWRWYWx1
ZXNbaWldLCBhcnJheVswXSk7CisgICAgICB9CisgICAgfQorICAgIHBhc3MoKTsKKyAgfSBjYXRj
aCAoZSkgeworICAgIGZhaWwoZSk7CisgIH0KK30KKworZnVuY3Rpb24gdGVzdENvbnN0cnVjdGlv
bkJvdW5kYXJ5Q29uZGl0aW9ucyh0eXBlLCBuYW1lLCB0ZXN0VmFsdWVzLCBleHBlY3RlZFZhbHVl
cykgeworICBydW5uaW5nKCd0ZXN0ICcgKyBuYW1lICsgJyBDb25zdHJ1Y3Rpb25Cb3VuZGFyeUNv
bmRpdGlvbnMnKTsKKyAgdHJ5IHsKKyAgICB2YXIgYXJyYXkgPSBuZXcgdHlwZSh0ZXN0VmFsdWVz
KTsKKyAgICBhc3NlcnRFcSgnQXJyYXkgbGVuZ3RoJywgdGVzdFZhbHVlcy5sZW5ndGgsIGFycmF5
Lmxlbmd0aCk7CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHRlc3RWYWx1ZXMubGVuZ3RoOyAr
K2lpKSB7CisgICAgICBhc3NlcnRFcSgnRWxlbWVudCAnICsgaWksIGV4cGVjdGVkVmFsdWVzW2lp
XSwgYXJyYXlbaWldKTsKKyAgICB9CiAgICAgcGFzcygpOwogICB9IGNhdGNoIChlKSB7CiAgICAg
ZmFpbChlKTsKQEAgLTY0MSw1NCArNzQ0LDU0IEBAIGZ1bmN0aW9uIHJ1blRlc3RzKCkgewogICB2
YXIgdGVzdENhc2VzID0KICAgICBbIHtuYW1lOiAiRmxvYXQzMkFycmF5IiwKICAgICAgICB1bnNp
Z25lZDogZmFsc2UsCisgICAgICAgaW50ZWdyYWw6IGZhbHNlLAogICAgICAgIGVsZW1lbnRTaXpl
SW5CeXRlczogNCwKLSAgICAgICBsb3c6IC01MDAuNSwKLSAgICAgICBleHBlY3RlZExvdzogLTUw
MC41LAotICAgICAgIGhpZ2g6IDUwMC41LAotICAgICAgIGV4cGVjdGVkSGlnaDogNTAwLjV9LAor
ICAgICAgIHRlc3RWYWx1ZXM6ICAgICBbIC01MDAuNSwgNTAwLjUgXSwKKyAgICAgICBleHBlY3Rl
ZFZhbHVlczogWyAtNTAwLjUsIDUwMC41IF0KKyAgICAgIH0sCiAgICAgICB7bmFtZTogIkludDhB
cnJheSIsCiAgICAgICAgdW5zaWduZWQ6IGZhbHNlLAorICAgICAgIGludGVncmFsOiB0cnVlLAog
ICAgICAgIGVsZW1lbnRTaXplSW5CeXRlczogMSwKLSAgICAgICBsb3c6IC0xMjgsCi0gICAgICAg
ZXhwZWN0ZWRMb3c6IC0xMjgsCi0gICAgICAgaGlnaDogMTI3LAotICAgICAgIGV4cGVjdGVkSGln
aDogMTI3fSwKKyAgICAgICB0ZXN0VmFsdWVzOiAgICAgWyAtMTI4LCAxMjcsIC0xMjksICAxMjgg
XSwKKyAgICAgICBleHBlY3RlZFZhbHVlczogWyAtMTI4LCAxMjcsICAxMjcsIC0xMjggXQorICAg
ICAgfSwKICAgICAgIHtuYW1lOiAiSW50MTZBcnJheSIsCiAgICAgICAgdW5zaWduZWQ6IGZhbHNl
LAorICAgICAgIGludGVncmFsOiB0cnVlLAogICAgICAgIGVsZW1lbnRTaXplSW5CeXRlczogMiwK
LSAgICAgICBsb3c6IC0zMjc2OCwKLSAgICAgICBleHBlY3RlZExvdzogLTMyNzY4LAotICAgICAg
IGhpZ2g6IDMyNzY3LAotICAgICAgIGV4cGVjdGVkSGlnaDogMzI3Njd9LAorICAgICAgIHRlc3RW
YWx1ZXM6ICAgICBbIC0zMjc2OCwgMzI3NjcsIC0zMjc2OSwgIDMyNzY4IF0sCisgICAgICAgZXhw
ZWN0ZWRWYWx1ZXM6IFsgLTMyNzY4LCAzMjc2NywgIDMyNzY3LCAtMzI3NjggXQorICAgICAgfSwK
ICAgICAgIHtuYW1lOiAiSW50MzJBcnJheSIsCiAgICAgICAgdW5zaWduZWQ6IGZhbHNlLAorICAg
ICAgIGludGVncmFsOiB0cnVlLAogICAgICAgIGVsZW1lbnRTaXplSW5CeXRlczogNCwKLSAgICAg
ICBsb3c6IC0yMTQ3NDgzNjQ4LAotICAgICAgIGV4cGVjdGVkTG93OiAtMjE0NzQ4MzY0OCwKLSAg
ICAgICBoaWdoOiAyMTQ3NDgzNjQ3LAotICAgICAgIGV4cGVjdGVkSGlnaDogMjE0NzQ4MzY0N30s
CisgICAgICAgdGVzdFZhbHVlczogICAgIFsgLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDcsIC0yMTQ3
NDgzNjQ5LCAgMjE0NzQ4MzY0OCBdLAorICAgICAgIGV4cGVjdGVkVmFsdWVzOiBbIC0yMTQ3NDgz
NjQ4LCAyMTQ3NDgzNjQ3LCAgMjE0NzQ4MzY0NywgLTIxNDc0ODM2NDggXQorICAgICAgfSwKICAg
ICAgIHtuYW1lOiAiVWludDhBcnJheSIsCiAgICAgICAgdW5zaWduZWQ6IHRydWUsCisgICAgICAg
aW50ZWdyYWw6IHRydWUsCiAgICAgICAgZWxlbWVudFNpemVJbkJ5dGVzOiAxLAotICAgICAgIGxv
dzogMCwKLSAgICAgICBleHBlY3RlZExvdzogMCwKLSAgICAgICBoaWdoOiAyNTUsCi0gICAgICAg
ZXhwZWN0ZWRIaWdoOiAyNTV9LAorICAgICAgIHRlc3RWYWx1ZXM6ICAgICBbIDAsIDI1NSwgIC0x
LCAyNTYgXSwKKyAgICAgICBleHBlY3RlZFZhbHVlczogWyAwLCAyNTUsIDI1NSwgICAwIF0KKyAg
ICAgIH0sCiAgICAgICB7bmFtZTogIlVpbnQxNkFycmF5IiwKICAgICAgICB1bnNpZ25lZDogdHJ1
ZSwKKyAgICAgICBpbnRlZ3JhbDogdHJ1ZSwKICAgICAgICBlbGVtZW50U2l6ZUluQnl0ZXM6IDIs
Ci0gICAgICAgbG93OiAwLAotICAgICAgIGV4cGVjdGVkTG93OiAwLAotICAgICAgIGhpZ2g6IDY1
NTM1LAotICAgICAgIGV4cGVjdGVkSGlnaDogNjU1MzV9LAorICAgICAgIHRlc3RWYWx1ZXM6ICAg
ICBbIDAsIDY1NTM1LCAgICAtMSwgNjU1MzYgXSwKKyAgICAgICBleHBlY3RlZFZhbHVlczogWyAw
LCA2NTUzNSwgNjU1MzUsICAgICAwIF0KKyAgICAgIH0sCiAgICAgICB7bmFtZTogIlVpbnQzMkFy
cmF5IiwKICAgICAgICB1bnNpZ25lZDogdHJ1ZSwKKyAgICAgICBpbnRlZ3JhbDogdHJ1ZSwKICAg
ICAgICBlbGVtZW50U2l6ZUluQnl0ZXM6IDQsCi0gICAgICAgbG93OiAwLAotICAgICAgIGV4cGVj
dGVkTG93OiAwLAotICAgICAgIGhpZ2g6IDQyOTQ5NjcyOTUsCi0gICAgICAgZXhwZWN0ZWRIaWdo
OiA0Mjk0OTY3Mjk1fSBdOwotCisgICAgICAgdGVzdFZhbHVlczogICAgIFsgMCwgNDI5NDk2NzI5
NSwgICAgICAgICAtMSwgNDI5NDk2NzI5NiBdLAorICAgICAgIGV4cGVjdGVkVmFsdWVzOiBbIDAs
IDQyOTQ5NjcyOTUsIDQyOTQ5NjcyOTUsICAgICAgICAgIDAgXQorICAgICAgfQorICAgIF07CiAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdENhc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgdmFyIHRl
c3RDYXNlID0gdGVzdENhc2VzW2ldOwogICAgIHJ1bm5pbmcodGVzdENhc2UubmFtZSk7CkBAIC03
MDcsNiArODEwLDkgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAgICAgICB0ZXN0Q29uc3RydWN0
V2l0aEFycmF5T2ZTaWduZWRWYWx1ZXModHlwZSwgbmFtZSk7CiAgICAgICB0ZXN0Q29uc3RydWN0
V2l0aFR5cGVkQXJyYXlPZlNpZ25lZFZhbHVlcyh0eXBlLCBuYW1lKTsKICAgICB9CisgICAgaWYg
KHRlc3RDYXNlLmludGVncmFsKSB7CisgICAgICB0ZXN0SW50ZWdyYWxBcnJheVRydW5jYXRpb25C
ZWhhdmlvcih0eXBlLCBuYW1lLCB0ZXN0Q2FzZS51bnNpZ25lZCk7CisgICAgfQogICAgIHRlc3RH
ZXRXaXRoT3V0T2ZSYW5nZUluZGljZXModHlwZSwgbmFtZSk7CiAgICAgdGVzdE9mZnNldHNBbmRT
aXplcyh0eXBlLCBuYW1lLCB0ZXN0Q2FzZS5lbGVtZW50U2l6ZUluQnl0ZXMpOwogICAgIHRlc3RT
ZXRGcm9tVHlwZWRBcnJheSh0eXBlLCBuYW1lKTsKQEAgLTcxNSwxMiArODIxLDE0IEBAIGZ1bmN0
aW9uIHJ1blRlc3RzKCkgewogICAgIG5lZ2F0aXZlVGVzdFNldEZyb21BcnJheSh0eXBlLCBuYW1l
KTsKICAgICB0ZXN0U3ViYXJyYXkodHlwZSwgbmFtZSk7CiAgICAgbmVnYXRpdmVUZXN0U3ViYXJy
YXkodHlwZSwgbmFtZSk7Ci0gICAgdGVzdEJvdW5kYXJ5Q29uZGl0aW9ucyh0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RDYXNlLmxvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDYXNlLmV4cGVjdGVk
TG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENhc2UuaGlnaCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RDYXNlLmV4cGVjdGVkSGlnaCk7CisgICAgdGVzdFNldEJv
dW5kYXJ5Q29uZGl0aW9ucyh0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDYXNlLnRlc3RWYWx1ZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q2FzZS5leHBlY3RlZFZhbHVlcyk7Cisg
ICAgdGVzdENvbnN0cnVjdGlvbkJvdW5kYXJ5Q29uZGl0aW9ucyh0eXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3RDYXNlLnRlc3RWYWx1ZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0Q2FzZS5leHBlY3RlZFZhbHVlcyk7CiAgICAgdGVzdENv
bnN0cnVjdGlvbldpdGhOdWxsQnVmZmVyKHR5cGUsIG5hbWUpOwogICAgIHRlc3RDb25zdHJ1Y3Rp
b25XaXRoT3V0T2ZSYW5nZVZhbHVlcyh0eXBlLCBuYW1lKTsKICAgICB0ZXN0Q29uc3RydWN0aW9u
V2l0aE5lZ2F0aXZlT3V0T2ZSYW5nZVZhbHVlcyh0eXBlLCBuYW1lKTsK
</data>
<flag name="review"
          id="74422"
          type_id="1"
          status="+"
          setter="cmarrin"
    />
    <flag name="commit-queue"
          id="74423"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>