<?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>193618</bug_id>
          
          <creation_ts>2019-01-20 03:19:26 -0800</creation_ts>
          <short_desc>Implement @copyDataProperties in C++ to optimize object rest / spread</short_desc>
          <delta_ts>2021-01-08 20:33:19 -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>JavaScriptCore</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>193606</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1496317</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-01-20 03:19:26 -0800</bug_when>
    <thetext>Let&apos;s move copyDataPropertiesNoExclusions, copyDataProperties to C++, since it is not beneficial to implement it in JS. Drop defineEnumerableWritableConfigurableDataProperty.
Then, remove @Reflect reference. Then, make Reflect lazy-initialized in JSGlobalObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718118</commentid>
    <comment_count>1</comment_count>
      <attachid>417220</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-07 15:43:12 -0800</bug_when>
    <thetext>Created attachment 417220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718120</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-07 15:43:54 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #1)
&gt; Created attachment 417220 [details]
&gt; Patch

                                    r271191                   patch

object-spread                  178.7996+-2.7727     ^     34.7401+-0.4879        ^ definitely 5.1468x faster
object-rest-destructuring      124.6139+-2.3242     ^     39.2901+-0.4814        ^ definitely 3.1716x faster

&lt;geometric&gt;                    149.1572+-1.7371     ^     36.9301+-0.3394        ^ definitely 4.0389x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718125</commentid>
    <comment_count>3</comment_count>
      <attachid>417220</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-01-07 15:56:33 -0800</bug_when>
    <thetext>Comment on attachment 417220
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:24
&gt; +           c) unlike Object.assign, properties are copied directly in Structure::forEachProperty(),
&gt; +              because it&apos;s guaranteed that `target` and `source` are different objects. I suspect
&gt; +              that crashes before r234022 could be caused by code like `Object.assign(X, X)`.

what do the objects being different have to do with their structures being different? I don&apos;t follow the reasoning here. They can share the same structure, right?

Also, if this is an invariant we&apos;re relying on, let&apos;s add an assert for it.

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +           (+170%)

?

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:917
&gt; +            PropertySlot slot(source, PropertySlot::InternalMethodType::GetOwnProperty);

given we do get below (in tainted case), this shouldn&apos;t be HasOwnProperty?

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:929
&gt; +                value = source-&gt;get(globalObject, propertyName);

the spec calls for get twice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718128</commentid>
    <comment_count>4</comment_count>
      <attachid>417220</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-01-07 15:58:05 -0800</bug_when>
    <thetext>Comment on attachment 417220
Patch

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

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:907
&gt; +        source-&gt;structure(vm)-&gt;forEachProperty(vm, [&amp;] (const PropertyMapEntry&amp; entry) -&gt; bool {
&gt; +            PropertyName propertyName(entry.key);
&gt; +            if (propertyName.isPrivateName())
&gt; +                return true;
&gt; +            if (isPropertyNameExcluded(propertyName))
&gt; +                return true;
&gt; +            if (entry.attributes &amp; PropertyAttribute::DontEnum)
&gt; +                return true;
&gt; +
&gt; +            target-&gt;putDirect(vm, propertyName, source-&gt;getDirect(entry.offset));
&gt; +            return true;
&gt; +        });

For now, let&apos;s first store values into buffer and iterate them later as is done in the Object.assign.
See FIXME in Object.assign and https://bugs.webkit.org/show_bug.cgi?id=187837</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718158</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-07 17:09:47 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; what do the objects being different have to do with their structures being
&gt; different? I don&apos;t follow the reasoning here. They can share the same
&gt; structure, right?

They can, right. Aligned with Object.assign to copy via buffer (for now).

&gt; &gt; Source/JavaScriptCore/ChangeLog:25
&gt; &gt; +           (+170%)
&gt; 
&gt; ?

That was microbenchmark progression for each sub-change (I was curious). Removed it as outdated (and useless).

&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:917
&gt; &gt; +            PropertySlot slot(source, PropertySlot::InternalMethodType::GetOwnProperty);
&gt; 
&gt; given we do get below (in tainted case), this shouldn&apos;t be HasOwnProperty?

We don&apos;t have HasOwnProperty, only HasProperty for `in`.

&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:929
&gt; &gt; +                value = source-&gt;get(globalObject, propertyName);
&gt; 
&gt; the spec calls for get twice?

Yes, it does (step 6.c.ii.1 of https://tc39.es/ecma262/#sec-copydataproperties), and it follows this pattern in a few other ops/built-ins, even WebIDL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718159</commentid>
    <comment_count>6</comment_count>
      <attachid>417227</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-07 17:10:01 -0800</bug_when>
    <thetext>Created attachment 417227
Patch

Put properties via buffer and tweak ASSERTs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718162</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-07 17:12:57 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #6)
&gt; Created attachment 417227 [details]
&gt; Patch
&gt; 
&gt; Put properties via buffer and tweak ASSERTs.

                                    r271191                     patch

object-spread                  181.2128+-1.8450     ^     54.3278+-0.8577        ^ definitely 3.3355x faster
object-rest-destructuring      129.6295+-1.8733     ^     44.5497+-0.7565        ^ definitely 2.9098x faster

&lt;geometric&gt;                    153.1926+-1.0826     ^     49.1639+-0.5471        ^ definitely 3.1160x faster

===

~22% slower.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718163</commentid>
    <comment_count>8</comment_count>
      <attachid>417229</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-07 17:17:05 -0800</bug_when>
    <thetext>Created attachment 417229
Patch

We don&apos;t need to clear vectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718188</commentid>
    <comment_count>9</comment_count>
      <attachid>417229</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-01-07 19:15:45 -0800</bug_when>
    <thetext>Comment on attachment 417229
Patch

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

Looking, early comments. I&apos;ll look more.

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:868
&gt; +    JSObject* target = asObject(callFrame-&gt;uncheckedArgument(0));
&gt; +    ASSERT(jsDynamicCast&lt;JSFinalObject*&gt;(vm, target));

Let&apos;s do

JSFinalObject* target = jsCast&lt;JSFinalObject*&gt;(allFrame-&gt;uncheckedArgument(0));

jsCast also has assert.

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:873
&gt; +        return { };

Let&apos;s return `JSValue::encode(jsUndefined())` for non-exception path for robustness.

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:954
&gt; +    return { };

Let&apos;s return `JSValue::encode(jsUndefined())` for non-exception path for robustness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718440</commentid>
    <comment_count>10</comment_count>
      <attachid>417229</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-01-08 14:20:55 -0800</bug_when>
    <thetext>Comment on attachment 417229
Patch

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

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:889
&gt; +    auto isPropertyNameExcluded = [&amp;] (PropertyName propertyName) {
&gt; +        ASSERT(!propertyName.isPrivateName());
&gt; +        if (!excludedSet)
&gt; +            return false;
&gt; +
&gt; +        JSValue propertyNameValue = identifierToJSValue(vm, Identifier::fromUid(vm, propertyName.uid()));
&gt; +        return excludedSet-&gt;has(globalObject, propertyNameValue);
&gt; +    };

Let&apos;s take `JSGlobalObject*` as a parameter in this function to make it explicit that this can throw an error.

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:912
&gt; +            if (isPropertyNameExcluded(propertyName))
&gt; +                return true;

We need to do an error check since this can throw an error. And if an error is thrown, we should stop iteration.

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:933
&gt; +            if (isPropertyNameExcluded(propertyName))
&gt; +                continue;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718441</commentid>
    <comment_count>11</comment_count>
      <attachid>417229</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-01-08 14:22:11 -0800</bug_when>
    <thetext>Comment on attachment 417229
Patch

r=me with some comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718539</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-08 20:31:17 -0800</bug_when>
    <thetext>Committed r271343: &lt;https://trac.webkit.org/changeset/271343&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718540</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-08 20:32:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/72954769&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718541</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-08 20:33:07 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #12)
&gt; Committed r271343: &lt;https://trac.webkit.org/changeset/271343&gt;

Landed accounting the comments.
test262 coverage: https://github.com/tc39/test262/pull/2930.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718542</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-08 20:33:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/72954785&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417220</attachid>
            <date>2021-01-07 15:43:12 -0800</date>
            <delta_ts>2021-01-07 17:09:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193618-20210108014310.patch</filename>
            <type>text/plain</type>
            <size>30291</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzEyNjcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDIxLTAxLTA3ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgQGNvcHlEYXRhUHJvcGVydGllcyBpbiBD
KysgdG8gb3B0aW1pemUgb2JqZWN0IHJlc3QgLyBzcHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzYxOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0
LWRlc3RydWN0dXJpbmcuanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9vYmpl
Y3Qtc3ByZWFkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3Mvb2JqZWN0LXJlc3QtZGVjb25z
dHJ1Y3QuanM6CisgICAgICAgICogc3RyZXNzL29iamVjdC1zcHJlYWQuanM6CisKIDIwMjEtMDEt
MDcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBO
ZXcgZXhwcmVzc2lvbiBhbmQgdmFsdWUgZnVuY3Rpb24gY2FsbCBzaG91bGQgcmVzZXJ2ZSBmdW5j
dGlvbiByZWdpc3RlciBpZiBhcmd1bWVudHMgaW5jbHVkZSBhc3NpZ25tZW50cwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LXJlc3QtZGVzdHJ1Y3R1cmluZy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9vYmplY3QtcmVzdC1kZXN0cnVjdHVyaW5n
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0
LWRlc3RydWN0dXJpbmcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorKGZ1bmN0
aW9uKCkgeworICAgIHZhciBvYmogPSB7IGE6IDAsIGI6IDAsIGM6IDAsIGQ6IDEsIGU6IDAsIGY6
IDAsIGc6IDAsIGg6IDAsIGk6IDAsIGo6IDAgfTsKKyAgICB2YXIgYWNjID0gMDsKKworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgdmFyIHsgYSwgYiwgYywgLi4u
cmVzdCB9ID0gb2JqOworICAgICAgICBhY2MgKz0gcmVzdC5kOworICAgIH0KKworICAgIGlmIChh
Y2MgIT09IDFlNSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOwor
fSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1zcHJlYWQuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LXNwcmVhZC5qcwkobm9u
ZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9vYmplY3Qtc3ByZWFkLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgb2Jq
ID0geyBhOiAxLCBiOiAyLCBjOiAzLCBkOiAwLCBlOiAwLCBmOiAwLCBnOiAwLCBoOiAwLCBpOiAw
LCBqOiAwIH07CisgICAgdmFyIGFjYyA9IDA7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NTsgaSsrKQorICAgICAgICBhY2MgKz0gKHsgYTogMCwgYjogMCwgYzogMCwgLi4ub2JqIH0pLmE7
CisKKyAgICBpZiAoYWNjICE9PSAxZTUpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFz
c2VydGlvbiEiKTsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9vYmplY3QtcmVzdC1kZWNv
bnN0cnVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9vYmplY3QtcmVzdC1kZWNv
bnN0cnVjdC5qcwkocmV2aXNpb24gMjcxMTMxKQorKysgSlNUZXN0cy9zdHJlc3Mvb2JqZWN0LXJl
c3QtZGVjb25zdHJ1Y3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMywxNSBAQCBsZXQgYXNz
ZXJ0ID0gKGUpID0+IHsKICAgICAgICAgdGhyb3cgRXJyb3IoIkJhZCBhc3NlcnRpb24hIik7CiB9
CiAKLWxldCBhc3NlcnRQcm9wRGVzY3JpcHRvciA9IChyZXN0T2JqLCBwcm9wKSA9PiB7CitmdW5j
dGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhw
ZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7
Cit9CisKK2Z1bmN0aW9uIGFzc2VydERhdGFQcm9wZXJ0eShyZXN0T2JqLCBwcm9wLCB2YWx1ZSkg
eworICAgIHNob3VsZEJlKHJlc3RPYmpbcHJvcF0sIHZhbHVlKTsKICAgICBsZXQgZGVzYyA9IE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocmVzdE9iaiwgcHJvcCk7CisgICAgc2hvdWxk
QmUoZGVzYy52YWx1ZSwgdmFsdWUpOwogICAgIGFzc2VydChkZXNjLmVudW1lcmFibGUpOwogICAg
IGFzc2VydChkZXNjLndyaXRhYmxlKTsKICAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUpOwpA
QCAtMTksMTEgKzI2LDggQEAgbGV0IGFzc2VydFByb3BEZXNjcmlwdG9yID0gKHJlc3RPYmosIHBy
bwogICAgIGFzc2VydChhID09PSA1KTsKICAgICBhc3NlcnQoYiA9PT0gMyk7CiAKLSAgICBhc3Nl
cnQocmVzdC54ID09PSAxKTsKLSAgICBhc3NlcnQocmVzdC55ID09PSAyKTsKLQotICAgIGFzc2Vy
dFByb3BEZXNjcmlwdG9yKHJlc3QsICd4Jyk7Ci0gICAgYXNzZXJ0UHJvcERlc2NyaXB0b3IocmVz
dCwgJ3knKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkocmVzdCwgJ3gnLCAxKTsKKyAgICBhc3Nl
cnREYXRhUHJvcGVydHkocmVzdCwgJ3knLCAyKTsKIH0pKCk7CiAKIC8vIEVtcHR5IE9iamVjdApA
QCAtMTAxLDggKzEwNSw3IEBAIGxldCBhc3NlcnRQcm9wRGVzY3JpcHRvciA9IChyZXN0T2JqLCBw
cm8KICAgICBhc3NlcnQoYSA9PT0gMyk7CiAgICAgYXNzZXJ0KGIgPT09IDQpOwogCi0gICAgYXNz
ZXJ0KHJlc3QueCA9PT0gMyk7Ci0gICAgYXNzZXJ0UHJvcERlc2NyaXB0b3IocmVzdCwgJ3gnKTsK
KyAgICBhc3NlcnREYXRhUHJvcGVydHkocmVzdCwgJ3gnLCAzKTsKIH0pKCk7CiAKIC8vIFNraXAg
bm9uLWVudW1lcmFibGUgY2FzZQpAQCAtMTI4LDggKzEzMSw4IEBAIGxldCBhc3NlcnRQcm9wRGVz
Y3JpcHRvciA9IChyZXN0T2JqLCBwcm8KICAgICBhc3NlcnQocmVzdC5hID09PSAzKTsKICAgICBh
c3NlcnQocmVzdC5iID09PSA0KTsKIAotICAgIGFzc2VydFByb3BEZXNjcmlwdG9yKHJlc3QsICdh
Jyk7Ci0gICAgYXNzZXJ0UHJvcERlc2NyaXB0b3IocmVzdCwgJ2InKTsKKyAgICBhc3NlcnREYXRh
UHJvcGVydHkocmVzdCwgJ2EnLCAzKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkocmVzdCwgJ2In
LCA0KTsKIH0pKCk7CiAKIC8vIERlc3RydWN0dXJpbmcgZnVuY3Rpb24gcGFyYW1ldGVyCkBAIC0y
MzUsMyArMjM4LDEyNiBAQCBsZXQgYXNzZXJ0UHJvcERlc2NyaXB0b3IgPSAocmVzdE9iaiwgcHJv
CiAgICAgfQogfSkoKTsKIAorKGZ1bmN0aW9uIG5vbkVudW1lcmFibGVTeW1ib2woKSB7CisgICAg
dmFyIF9fczAgPSBTeW1ib2woInMwIik7CisgICAgdmFyIF9fczEgPSBTeW1ib2woInMxIik7CisK
KyAgICB2YXIgc291cmNlID0ge307CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc291cmNl
LCB7CisgICAgICAgIFtfX3MwXToge3ZhbHVlOiAwLCBlbnVtZXJhYmxlOiBmYWxzZX0sCisgICAg
ICAgIFtfX3MxXToge3ZhbHVlOiAxLCBlbnVtZXJhYmxlOiBmYWxzZX0sCisgICAgfSk7CisKKyAg
ICB2YXIge1tfX3MwXTogczAsIC4uLnRhcmdldH0gPSBzb3VyY2U7CisKKyAgICBzaG91bGRCZShz
MCwgMCk7CisgICAgYXNzZXJ0KCFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCku
bGVuZ3RoKTsKK30pKCk7CisKKyhmdW5jdGlvbiBkdW5kZXJQcm90bygpIHsKKyAgICB2YXIgc291
cmNlID0ge307CisgICAgdmFyIHByb3RvVmFsdWUgPSB7fTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoc291cmNlLCAiX19wcm90b19fIiwge3ZhbHVlOiBwcm90b1ZhbHVlLCBlbnVtZXJhYmxl
OiB0cnVlfSk7CisgICAgdmFyIHsuLi50YXJnZXR9ID0gc291cmNlOworCisgICAgYXNzZXJ0RGF0
YVByb3BlcnR5KHRhcmdldCwgIl9fcHJvdG9fXyIsIHByb3RvVmFsdWUpOworICAgIHNob3VsZEJl
KE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpLCBPYmplY3QucHJvdG90eXBlKTsKK30pKCk7
CisKKyhmdW5jdGlvbiBzdHJpbmdQcmltaXRpdmUoKSB7CisgICAgdmFyIHNvdXJjZSA9ICIwMTIi
OworICAgIHZhciB7MDogYSwgWyIyIl06IGMsIC4uLnRhcmdldH0gPSBzb3VyY2U7CisKKyAgICBz
aG91bGRCZShhLCAiMCIpOworICAgIHNob3VsZEJlKGMsICIyIik7CisgICAgYXNzZXJ0RGF0YVBy
b3BlcnR5KHRhcmdldCwgMSwgIjEiKTsKKyAgICBzaG91bGRCZShPYmplY3Qua2V5cyh0YXJnZXQp
LmpvaW4oKSwgIjEiKTsKK30pKCk7CisKKyhmdW5jdGlvbiBQcm94eU9iamVjdCgpIHsKKyAgICB2
YXIgX19zMCA9IFN5bWJvbCgiczAiKTsKKyAgICB2YXIgX19zMSA9IFN5bWJvbCgiczEiKTsKKwor
ICAgIHZhciBvd25LZXlzQ2FsbHMgPSAwOworICAgIHZhciBnb3BkQ2FsbHMgPSBbXTsKKyAgICB2
YXIgZ2V0Q2FsbHMgPSBbXTsKKworICAgIHZhciBzb3VyY2UgPSBuZXcgUHJveHkoeworICAgICAg
ICBbX19zMF06ICJzMCIsIFtfX3MxXTogInMxIiwKKyAgICAgICAgYTogMCwgYjogMSwgYzogMiwg
ZDogMywKKyAgICB9LCB7CisgICAgICAgIG93bktleXM6ICh0KSA9PiB7CisgICAgICAgICAgICAr
K293bktleXNDYWxsczsKKyAgICAgICAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModCk7Cisg
ICAgICAgIH0sCisgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogKHQsIGtleSkgPT4g
eworICAgICAgICAgICAgZ29wZENhbGxzLnB1c2goa2V5KTsKKyAgICAgICAgICAgIHZhciBkZXNj
ID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwga2V5KTsKKyAgICAgICAgICAg
IGlmIChrZXkgPT09ICJiIiB8fCBrZXkgPT09IF9fczApCisgICAgICAgICAgICAgICAgZGVzYy5l
bnVtZXJhYmxlID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZGVzYzsKKyAgICAgICAgfSwK
KyAgICAgICAgZ2V0OiAodCwga2V5LCByZWNlaXZlcikgPT4geworICAgICAgICAgICAgZ2V0Q2Fs
bHMucHVzaChrZXkpOworICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHQsIGtleSwgcmVj
ZWl2ZXIpOworICAgICAgICB9LAorICAgIH0pOworCisgICAgdmFyIHtjLCBbImQiXTogZCwgLi4u
dGFyZ2V0fSA9IHNvdXJjZTsKKworICAgIHNob3VsZEJlKG93bktleXNDYWxscywgMSk7CisgICAg
c2hvdWxkQmUoZ29wZENhbGxzLm1hcChTdHJpbmcpLmpvaW4oKSwgImEsYixTeW1ib2woczApLFN5
bWJvbChzMSkiKTsKKyAgICBzaG91bGRCZShnZXRDYWxscy5tYXAoU3RyaW5nKS5qb2luKCksICJj
LGQsYSxTeW1ib2woczEpIik7CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYSIs
IDApOworICAgIHNob3VsZEJlKGMsIDIpOworICAgIHNob3VsZEJlKGQsIDMpOworICAgIHNob3Vs
ZEJlKE9iamVjdC5rZXlzKHRhcmdldCkuam9pbigpLCAiYSIpOworCisgICAgdmFyIHN5bWJvbHMg
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCk7CisgICAgc2hvdWxkQmUoc3lt
Ym9sc1swXSwgX19zMSk7CisgICAgc2hvdWxkQmUoc3ltYm9scy5sZW5ndGgsIDEpOworfSkoKTsK
KworKGZ1bmN0aW9uIGluZGV4ZWRQcm9wZXJ0aWVzKCkgeworICAgIHZhciBzb3VyY2UgPSBbMCwg
MSwgMiwgM107CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNvdXJjZSwgIjEiLCB7ZW51bWVy
YWJsZTogZmFsc2V9KTsKKyAgICB2YXIgezI6IGMsIFsiMyJdOiBkLCAuLi50YXJnZXR9ID0gc291
cmNlOworCisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgIjAiLCAwKTsKKyAgICBzaG91
bGRCZShPYmplY3Qua2V5cyh0YXJnZXQpLmpvaW4oKSwgIjAiKTsKK30pKCk7CisKKyhmdW5jdGlv
biBDdXN0b21BY2Nlc3NvcigpIHsKKyAgICB2YXIgc291cmNlID0gJHZtLmNyZWF0ZUN1c3RvbVRl
c3RHZXR0ZXJTZXR0ZXIoKTsKKyAgICB2YXIge2N1c3RvbVZhbHVlR2xvYmFsT2JqZWN0LCAuLi50
YXJnZXR9ID0gc291cmNlOworCisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgImN1c3Rv
bVZhbHVlIiwgc291cmNlKTsKKyAgICBhc3NlcnQoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eSgiY3Vz
dG9tVmFsdWVHbG9iYWxPYmplY3QiKSk7CisgICAgc2hvdWxkQmUoY3VzdG9tVmFsdWVHbG9iYWxP
YmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSwgImdsb2JhbCIpOworICAgIGFzc2VydERhdGFQcm9w
ZXJ0eSh0YXJnZXQsICJjdXN0b21BY2Nlc3NvciIsIHNvdXJjZSk7CisgICAgYXNzZXJ0RGF0YVBy
b3BlcnR5KHRhcmdldCwgImN1c3RvbUFjY2Vzc29yR2xvYmFsT2JqZWN0IiwgY3VzdG9tVmFsdWVH
bG9iYWxPYmplY3QpOworfSkoKTsKKworKGZ1bmN0aW9uIEN1c3RvbUFjY2Vzc29ySW5Ob25SZWlm
aWVkUHJvcGVydHlUYWJsZSgpIHsKKyAgICAvLyBtYWtlIHN1cmUgd2UgcmVpZnlBbGxTdGF0aWNQ
cm9wZXJ0aWVzKCkgYmVmb3JlIGRlY2lkaW5nIG9uIHRoZSBmYXN0L3Nsb3cgcGF0aAorCisgICAg
dmFyIHNvdXJjZSA9ICR2bS5jcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcigpOworICAgIHNvdXJj
ZS50ZXN0RmllbGQgPSA0MjsKKyAgICB2YXIgey4uLnRhcmdldH0gPSBzb3VyY2U7CisKKyAgICBh
c3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAidGVzdEZpZWxkIiwgNDIpOworICAgIGFzc2VydERh
dGFQcm9wZXJ0eSh0YXJnZXQsICJ0ZXN0U3RhdGljQWNjZXNzb3IiLCA0Mik7Cit9KSgpOworCiso
ZnVuY3Rpb24gdW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgeworICAgIHZhciBzb3VyY2UgPSB7YTog
MCwgYjogMSwgYzogMiwgZDogM307CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNvdXJjZSwg
ImMiLCB7ZW51bWVyYWJsZTogZmFsc2V9KTsKKyAgICAkdm0udG9VbmNhY2hlYWJsZURpY3Rpb25h
cnkoc291cmNlKTsKKyAgICB2YXIge2IsIFsiZCJdOiBkLCAuLi50YXJnZXR9ID0gc291cmNlOwor
CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgImEiLCAwKTsKKyAgICBzaG91bGRCZShi
LCAxKTsKKyAgICBzaG91bGRCZShkLCAzKTsKKyAgICBzaG91bGRCZShPYmplY3Qua2V5cyh0YXJn
ZXQpLmpvaW4oKSwgImEiKTsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9vYmplY3Qtc3By
ZWFkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL29iamVjdC1zcHJlYWQuanMJKHJl
dmlzaW9uIDI3MTEzMSkKKysrIEpTVGVzdHMvc3RyZXNzL29iamVjdC1zcHJlYWQuanMJKHdvcmtp
bmcgY29weSkKQEAgLTcsMTIgKzcsMTggQEAgYXNzZXJ0LnNhbWVWYWx1ZSA9IChhLCBiKSA9PiAg
ewogICAgIGFzc2VydChhID09PSBiKTsKIH0KIAotZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURl
c2NyaXB0b3IobywgcCkgewotICAgIGxldCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihvLCBwKTsKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAg
ICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQg
dmFsdWU6ICR7YWN0dWFsfSFgKTsKK30KIAorZnVuY3Rpb24gYXNzZXJ0RGF0YVByb3BlcnR5KHRh
cmdldCwgcHJvcCwgdmFsdWUpIHsKKyAgICBzaG91bGRCZSh0YXJnZXRbcHJvcF0sIHZhbHVlKTsK
KyAgICBsZXQgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBw
cm9wKTsKKyAgICBzaG91bGRCZShkZXNjLnZhbHVlLCB2YWx1ZSk7CiAgICAgYXNzZXJ0KGRlc2Mu
ZW51bWVyYWJsZSk7Ci0gICAgYXNzZXJ0KGRlc2MuY29uZmlndXJhYmxlKTsKICAgICBhc3NlcnQo
ZGVzYy53cml0YWJsZSk7CisgICAgYXNzZXJ0KGRlc2MuY29uZmlndXJhYmxlKTsKIH0KIAogLy8g
QmFzZSBjYXNlcwpAQCAtMjIsMTAgKzI4LDggQEAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURl
c2NyaXB0b3IobywgcAogCiAgICAgYXNzZXJ0LnNhbWVWYWx1ZShvYmouYSwgMSk7CiAgICAgYXNz
ZXJ0KG9iai5iLCAyKTsKLSAgICBhc3NlcnQob2JqLmMsIDMpOwotICAgIGFzc2VydChvYmouZCwg
NCk7Ci0gICAgdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiYyIpOwotICAgIHZhbGlk
YXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgImQiKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHko
b2JqLCAiYyIsIDMpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShvYmosICJkIiwgNCk7CiAgICAg
YXNzZXJ0KE9iamVjdC5rZXlzKG9iaiksIDIpOwogfSkoKTsKIApAQCAtMzMsMTYgKzM3LDExIEBA
IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHlEZXNjcmlwdG9yKG8sIHAKICAgICBsZXQgbyA9IHtj
OiAzLCBkOiA0fTsKICAgICBsZXQgb2JqID0ge2E6IDEsIGI6IDIsIC4uLm99OwogCi0gICAgYXNz
ZXJ0LnNhbWVWYWx1ZShvYmouYSwgMSk7Ci0gICAgYXNzZXJ0LnNhbWVWYWx1ZShvYmouYiwgMik7
Ci0gICAgYXNzZXJ0LnNhbWVWYWx1ZShvYmouYywgMyk7Ci0gICAgYXNzZXJ0LnNhbWVWYWx1ZShv
YmouZCwgNCk7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KG9iaiwgImEiLCAxKTsKKyAgICBhc3Nl
cnREYXRhUHJvcGVydHkob2JqLCAiYiIsIDIpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShvYmos
ICJjIiwgMyk7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KG9iaiwgImQiLCA0KTsKICAgICBhc3Nl
cnQuc2FtZVZhbHVlKE9iamVjdC5rZXlzKG9iaikubGVuZ3RoLCA0KTsKLQotICAgIHZhbGlkYXRl
UHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgImEiKTsKLSAgICB2YWxpZGF0ZVByb3BlcnR5RGVzY3Jp
cHRvcihvYmosICJiIik7Ci0gICAgdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiYyIp
OwotICAgIHZhbGlkYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgImQiKTsKIH0pKCk7CiAKICgo
KSA9PiB7CkBAIC0xMjgsMTIgKzEyNywxMCBAQCBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5RGVz
Y3JpcHRvcihvLCBwCiAKICAgICBsZXQgb2JqID0gey4uLm8sIGM6IDQsIGQ6IDV9OwogCi0gICAg
YXNzZXJ0LnNhbWVWYWx1ZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgImEi
KS52YWx1ZSwgNDIpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShvYmosICJhIiwgNDIpOwogICAg
IGFzc2VydC5zYW1lVmFsdWUob2JqLmMsIDQpOwogICAgIGFzc2VydC5zYW1lVmFsdWUob2JqLmQs
IDUpOwogICAgIGFzc2VydC5zYW1lVmFsdWUoT2JqZWN0LmtleXMob2JqKS5sZW5ndGgsIDMpOwot
Ci0gICAgdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiYSIpOwogfSkoKTsKIAogKCgp
ID0+IHsKQEAgLTIyMywxMCArMjIwLDggQEAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURlc2Ny
aXB0b3IobywgcAogCiAgICAgbGV0IG9iaiA9IHsuLi5vLCBhOiAzfTsKIAotICAgIGFzc2VydC5z
YW1lVmFsdWUob2JqLmEsIDMpCi0gICAgYXNzZXJ0LnNhbWVWYWx1ZShvYmouYiwgMik7Ci0gICAg
dmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiYSIpOwotICAgIHZhbGlkYXRlUHJvcGVy
dHlEZXNjcmlwdG9yKG9iaiwgImIiKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkob2JqLCAiYSIs
IDMpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShvYmosICJiIiwgMik7CiB9KSgpOwogCiAvLyBT
ZXR0ZXIKQEAgLTMxMSwzICszMDYsMTE5IEBAIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHlEZXNj
cmlwdG9yKG8sIHAKICAgICBhc3NlcnQoZXhlY3V0ZWRTZXR0ZXIpOwogfSkoKTsKIAorKGZ1bmN0
aW9uIG5vbkVudW1lcmFibGVTeW1ib2woKSB7CisgICAgdmFyIF9fczAgPSBTeW1ib2woInMwIik7
CisgICAgdmFyIHNvdXJjZSA9IHt9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHNvdXJj
ZSwgeworICAgICAgICBbX19zMF06IHt2YWx1ZTogMCwgZW51bWVyYWJsZTogZmFsc2V9LAorICAg
IH0pOworCisgICAgdmFyIHRhcmdldCA9IHtbX19zMF06IDEsIC4uLnRhcmdldH07CisgICAgYXNz
ZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgX19zMCwgMSk7Cit9KSgpOworCisoZnVuY3Rpb24gZHVu
ZGVyUHJvdG8oKSB7CisgICAgdmFyIHNvdXJjZSA9IHt9OworICAgIHZhciBwcm90b1ZhbHVlID0g
e307CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNvdXJjZSwgIl9fcHJvdG9fXyIsIHt2YWx1
ZTogcHJvdG9WYWx1ZSwgZW51bWVyYWJsZTogdHJ1ZX0pOworICAgIHZhciB0YXJnZXQgPSB7Li4u
c291cmNlfTsKKworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsICJfX3Byb3RvX18iLCBw
cm90b1ZhbHVlKTsKKyAgICBzaG91bGRCZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSwg
T2JqZWN0LnByb3RvdHlwZSk7Cit9KSgpOworCisoZnVuY3Rpb24gc3RyaW5nUHJpbWl0aXZlKCkg
eworICAgIHZhciBzb3VyY2UgPSAiMDEyIjsKKyAgICB2YXIgdGFyZ2V0ID0ge2dldCAwKCkge30s
IFsiMiJdOiAyMiwgLi4uc291cmNlfTsKKworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQs
IDAsICIwIik7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgMSwgIjEiKTsKKyAgICBh
c3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAyLCAiMiIpOworICAgIHNob3VsZEJlKE9iamVjdC5r
ZXlzKHRhcmdldCkuam9pbigpLCAiMCwxLDIiKTsKK30pKCk7CisKKyhmdW5jdGlvbiBQcm94eU9i
amVjdCgpIHsKKyAgICB2YXIgX19zMCA9IFN5bWJvbCgiczAiKTsKKyAgICB2YXIgX19zMSA9IFN5
bWJvbCgiczEiKTsKKworICAgIHZhciBvd25LZXlzQ2FsbHMgPSAwOworICAgIHZhciBnb3BkQ2Fs
bHMgPSBbXTsKKyAgICB2YXIgZ2V0Q2FsbHMgPSBbXTsKKworICAgIHZhciBzb3VyY2UgPSBuZXcg
UHJveHkoeworICAgICAgICBbX19zMF06ICJzMCIsIFtfX3MxXTogInMxIiwKKyAgICAgICAgYTog
MCwgYjogMSwgYzogMiwgZDogMywKKyAgICB9LCB7CisgICAgICAgIG93bktleXM6ICh0KSA9PiB7
CisgICAgICAgICAgICArK293bktleXNDYWxsczsKKyAgICAgICAgICAgIHJldHVybiBSZWZsZWN0
Lm93bktleXModCk7CisgICAgICAgIH0sCisgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cjogKHQsIGtleSkgPT4geworICAgICAgICAgICAgZ29wZENhbGxzLnB1c2goa2V5KTsKKyAgICAg
ICAgICAgIHZhciBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwga2V5
KTsKKyAgICAgICAgICAgIGlmIChrZXkgPT09ICJiIiB8fCBrZXkgPT09IF9fczApCisgICAgICAg
ICAgICAgICAgZGVzYy5lbnVtZXJhYmxlID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZGVz
YzsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0OiAodCwga2V5LCByZWNlaXZlcikgPT4geworICAg
ICAgICAgICAgZ2V0Q2FsbHMucHVzaChrZXkpOworICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Qu
Z2V0KHQsIGtleSwgcmVjZWl2ZXIpOworICAgICAgICB9LAorICAgIH0pOworCisgICAgdmFyIHRh
cmdldCA9IHthKCkge30sIGI6IDExLCBbX19zMV06ICJmb28iLCAuLi5zb3VyY2UsIFsiZCJdOiAz
M307CisKKyAgICBzaG91bGRCZShvd25LZXlzQ2FsbHMsIDEpOworICAgIHNob3VsZEJlKGdvcGRD
YWxscy5tYXAoU3RyaW5nKS5qb2luKCksICJhLGIsYyxkLFN5bWJvbChzMCksU3ltYm9sKHMxKSIp
OworICAgIHNob3VsZEJlKGdldENhbGxzLm1hcChTdHJpbmcpLmpvaW4oKSwgImEsYyxkLFN5bWJv
bChzMSkiKTsKKworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsICJhIiwgMCk7CisgICAg
YXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgImIiLCAxMSk7CisgICAgYXNzZXJ0RGF0YVByb3Bl
cnR5KHRhcmdldCwgImMiLCAyKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiZCIs
IDMzKTsKKworICAgIHNob3VsZEJlKFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpLm1hcChTdHJpbmcp
LmpvaW4oKSwgImEsYixjLGQsU3ltYm9sKHMxKSIpOworfSkoKTsKKworKGZ1bmN0aW9uIGluZGV4
ZWRQcm9wZXJ0aWVzKCkgeworICAgIHZhciBzb3VyY2UgPSBbMCwgMSwgMl07CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KHNvdXJjZSwgIjEiLCB7ZW51bWVyYWJsZTogZmFsc2V9KTsKKyAgICB2
YXIgdGFyZ2V0ID0ge3NldCBbIjIiXShfdikge30sIC4uLnNvdXJjZX07CisKKyAgICBhc3NlcnRE
YXRhUHJvcGVydHkodGFyZ2V0LCAiMCIsIDApOworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJn
ZXQsICIyIiwgMik7CisgICAgc2hvdWxkQmUoT2JqZWN0LmtleXModGFyZ2V0KS5qb2luKCksICIw
LDIiKTsKK30pKCk7CisKKyhmdW5jdGlvbiBDdXN0b21BY2Nlc3NvcigpIHsKKyAgICB2YXIgc291
cmNlID0gJHZtLmNyZWF0ZUN1c3RvbVRlc3RHZXR0ZXJTZXR0ZXIoKTsKKyAgICB2YXIgdGFyZ2V0
ID0gey4uLnNvdXJjZX07CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiY3VzdG9t
VmFsdWUiLCBzb3VyY2UpOworICAgIHNob3VsZEJlKHRhcmdldC5jdXN0b21WYWx1ZUdsb2JhbE9i
amVjdCwgdGFyZ2V0LmN1c3RvbUFjY2Vzc29yR2xvYmFsT2JqZWN0KTsKKyAgICBzaG91bGRCZSh0
YXJnZXQuY3VzdG9tVmFsdWVHbG9iYWxPYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSwgImdsb2Jh
bCIpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsICJjdXN0b21BY2Nlc3NvciIsIHNv
dXJjZSk7Cit9KSgpOworCisoZnVuY3Rpb24gQ3VzdG9tQWNjZXNzb3JJbk5vblJlaWZpZWRQcm9w
ZXJ0eVRhYmxlKCkgeworICAgIC8vIG1ha2Ugc3VyZSB3ZSByZWlmeUFsbFN0YXRpY1Byb3BlcnRp
ZXMoKSBiZWZvcmUgZGVjaWRpbmcgb24gdGhlIGZhc3Qvc2xvdyBwYXRoCisKKyAgICB2YXIgc291
cmNlID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCk7CisgICAgc291cmNlLnRlc3RG
aWVsZCA9IDQyOworICAgIHZhciB0YXJnZXQgPSB7Li4uc291cmNlfTsKKworICAgIGFzc2VydERh
dGFQcm9wZXJ0eSh0YXJnZXQsICJ0ZXN0RmllbGQiLCA0Mik7CisgICAgYXNzZXJ0RGF0YVByb3Bl
cnR5KHRhcmdldCwgInRlc3RTdGF0aWNBY2Nlc3NvciIsIDQyKTsKK30pKCk7CisKKyhmdW5jdGlv
biB1bmNhY2hlYWJsZURpY3Rpb25hcnkoKSB7CisgICAgdmFyIHNvdXJjZSA9IHthOiAwLCBiOiAx
LCBjOiAyfTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNlLCAiYyIsIHtlbnVtZXJh
YmxlOiBmYWxzZX0pOworICAgICR2bS50b1VuY2FjaGVhYmxlRGljdGlvbmFyeShzb3VyY2UpOwor
ICAgIHZhciBiID0gMTE7CisgICAgdmFyIHRhcmdldCA9IHtnZXQgYSgpIHt9LCBiLCAuLi5zb3Vy
Y2V9OworCisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgImEiLCAwKTsKKyAgICBhc3Nl
cnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYiIsIDEpOworICAgIHNob3VsZEJlKE9iamVjdC5rZXlz
KHRhcmdldCkuam9pbigpLCAiYSxiIik7Cit9KSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNzExMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjEtMDEtMDcgIEFsZXhleSBTaHZh
eWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIEltcGxlbWVudCBAY29weURh
dGFQcm9wZXJ0aWVzIGluIEMrKyB0byBvcHRpbWl6ZSBvYmplY3QgcmVzdCAvIHNwcmVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzNjE4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2UgQGNvcHlE
YXRhUHJvcGVydGllcyBpcyBpbmhlcmVudGx5IHBvbHltb3JwaGljLCBpbXBsZW1lbnRpbmcgaXQg
aW4gSlMgaXMgbm90IGJlbmVmaWNpYWwuCisgICAgICAgIFRoaXMgcGF0Y2g6CisKKyAgICAgICAg
MS4gTWVyZ2VzIGFsbW9zdCBpZGVudGljYWwgQGNvcHlEYXRhUHJvcGVydGllcyB2YXJpYW50cyBh
bmQgbW92ZXMgdGhlbSB0byBDKyssIGF2b2lkaW5nCisgICAgICAgICAgIGFsbG9jYXRpb25zIG9m
IEpTQXJyYXkgaW5zdGFuY2VzIGFuZCBJZGVudGlmaWVyIHdyYXBwZXJzLiAoKzQwJSkKKyAgICAg
ICAgMi4gU2tpcHMgbm9uLW9ic2VydmFibGUgW1tHZXRdXSBjYWxscywgbGV2ZXJhZ2luZyBgc2xv
dC5pc1RhaW50ZWRCeU9wYXF1ZU9iamVjdCgpYC4gKCsyMCUpCisgICAgICAgIDMuIFBlcmZvcm1z
IFtbRGVmaW5lT3duUHJvcGVydHldXSB2aWEgcHV0RGlyZWN0TWF5QmVJbmRleCgpLCBzaW5jZSB0
aGUgc3BlYyBndWFyYW50ZWVzCisgICAgICAgICAgIHByb3BlcnR5IGNyZWF0aW9uIHRvIGJlIHN1
Y2Nlc3NmdWwgWzFdOiBgdGFyZ2V0YCBpcyBhbiBuZXdseSBjcmVhdGVkIG9iamVjdCB0aGF0IGlz
CisgICAgICAgICAgIG5vdCB5ZXQgYWNjZXNzaWJsZSB0byB1c2VybGFuZCBjb2RlLiBJdCdzIGlt
cG9zc2libGUgZm9yIGB0YXJnZXRgIHRvIGJlIG5vbi1leHRlbnNpYmxlCisgICAgICAgICAgIG5v
ciBoYXZlIGEgbm9uLWNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4gKCs3MCUpCisgICAgICAgIDQuIElu
dHJvZHVjZXMgYSBmYXN0IHBhdGggc2ltaWxhciB0byBPYmplY3QuYXNzaWduLCBidXQ6CisgICAg
ICAgICAgIGEpIHdpdGggbm8gY2hlY2tzIG9uIGB0YXJnZXRgLCBiZWNhdXNlIGl0J3MgZ3VhcmFu
dGVlZCB0byBiZSBhbiBleHRlbnNpYmxlIEpTRmluYWxPYmplY3Q7CisgICAgICAgICAgIGIpIHdp
dGggbGVzcyBjaGVja3Mgb24gYHNvdXJjZWAsIHNpbmNlIHdlIGFyZSBwZXJmb3JtaW5nIHB1dERp
cmVjdCgpIGFuZCBkb24ndCBjYXJlIGFib3V0CisgICAgICAgICAgICAgIHJlYWQtb25seSBwcm9w
ZXJ0aWVzIG5vciBfX3Byb3RvX187CisgICAgICAgICAgIGMpIHVubGlrZSBPYmplY3QuYXNzaWdu
LCBwcm9wZXJ0aWVzIGFyZSBjb3BpZWQgZGlyZWN0bHkgaW4gU3RydWN0dXJlOjpmb3JFYWNoUHJv
cGVydHkoKSwKKyAgICAgICAgICAgICAgYmVjYXVzZSBpdCdzIGd1YXJhbnRlZWQgdGhhdCBgdGFy
Z2V0YCBhbmQgYHNvdXJjZWAgYXJlIGRpZmZlcmVudCBvYmplY3RzLiBJIHN1c3BlY3QKKyAgICAg
ICAgICAgICAgdGhhdCBjcmFzaGVzIGJlZm9yZSByMjM0MDIyIGNvdWxkIGJlIGNhdXNlZCBieSBj
b2RlIGxpa2UgYE9iamVjdC5hc3NpZ24oWCwgWClgLgorICAgICAgICAgICAoKzE3MCUpCisKKyAg
ICAgICAgQWx0b2dldGhlciwgdGhlc2UgY2hhbmdlcyByZXN1bHQgaW4gKzMwMCUgc3BlZWQtdXAg
Zm9yIG9iamVjdCByZXN0IC8gc3ByZWFkLgorICAgICAgICBBbHNvLCB0aGlzIHBhdGNoIHJlbW92
ZXMgdW5uZWNlc3NhcnkgYHRhcmdldGAgcmV0dXJuIGFuZCBAaXNPYmplY3QgY2hlY2suCisKKyAg
ICAgICAgWzFdOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNvcHlkYXRhcHJvcGVydGll
cyAoc3RlcCA2LmMuaWkuMiwgbm90ZSB0aGUgIiEiIHByZWZpeCkKKworICAgICAgICAqIGJ1aWx0
aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ1aWx0aW5zL0dsb2JhbE9wZXJhdGlvbnMu
anM6CisgICAgICAgIChnbG9iYWxQcml2YXRlLnNwZWNpZXNDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChnbG9iYWxQcml2YXRlLmNvcHlEYXRhUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChn
bG9iYWxQcml2YXRlLmNvcHlEYXRhUHJvcGVydGllc05vRXhjbHVzaW9ucyk6IERlbGV0ZWQuCisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6T2JqZWN0UGF0dGVybk5vZGU6OmJpbmRWYWx1
ZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok9iamVjdFNwcmVhZEV4cHJlc3Npb25Ob2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50
cmluc2ljX2RlZmluZUVudW1lcmFibGVXcml0YWJsZUNvbmZpZ3VyYWJsZURhdGFQcm9wZXJ0eSk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FuUGVyZm9ybUZhc3RQcm9wZXJ0
eUVudW1lcmF0aW9uRm9yQ29weURhdGFQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6SlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmg6CisKIDIwMjEtMDEtMDQgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgog
CiAgICAgICAgIFVwZGF0ZSB1c2VyLXZpc2libGUgY29weXJpZ2h0IHN0cmluZ3MgdG8gaW5jbHVk
ZSAyMDIxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5O
YW1lcy5oCShyZXZpc2lvbiAyNzExMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvQnVpbHRpbk5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgbWFjcm8oZGVmaW5lUHJvcGVydHkpIFwKICAgICBtYWNybyhkZWZhdWx0
UHJvbWlzZVRoZW4pIFwKICAgICBtYWNybyhnZXRPd25Qcm9wZXJ0eU5hbWVzKSBcCi0gICAgbWFj
cm8ob3duS2V5cykgXAogICAgIG1hY3JvKFNldCkgXAogICAgIG1hY3JvKHRocm93VHlwZUVycm9y
RnVuY3Rpb24pIFwKICAgICBtYWNybyh0eXBlZEFycmF5TGVuZ3RoKSBcCkBAIC0xNjksNiArMTY4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oaGFzT3duTGVuZ3RoUHJvcGVydHkpIFwK
ICAgICBtYWNybyhpbXBvcnRNb2R1bGUpIFwKICAgICBtYWNybyhwcm9wZXJ0eUlzRW51bWVyYWJs
ZSkgXAorICAgIG1hY3JvKGNvcHlEYXRhUHJvcGVydGllcykgXAogICAgIG1hY3JvKG1ldGEpIFwK
ICAgICBtYWNybyh3ZWJBc3NlbWJseUNvbXBpbGVTdHJlYW1pbmdJbnRlcm5hbCkgXAogICAgIG1h
Y3JvKHdlYkFzc2VtYmx5SW5zdGFudGlhdGVTdHJlYW1pbmdJbnRlcm5hbCkgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0dsb2JhbE9wZXJhdGlvbnMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0dsb2JhbE9wZXJhdGlvbnMuanMJ
KHJldmlzaW9uIDI3MTEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9HbG9i
YWxPcGVyYXRpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03NSw1NSArNzUsMyBAQCBmdW5jdGlv
biBzcGVjaWVzQ29uc3RydWN0b3Iob2JqLCBkZWZhdWx0CiAgICAgICAgIHJldHVybiBjb25zdHJ1
Y3RvcjsKICAgICBAdGhyb3dUeXBlRXJyb3IoInx0aGlzfC5jb25zdHJ1Y3RvcltTeW1ib2wuc3Bl
Y2llc10gaXMgbm90IGEgY29uc3RydWN0b3IiKTsKIH0KLQotQGdsb2JhbFByaXZhdGUKLWZ1bmN0
aW9uIGNvcHlEYXRhUHJvcGVydGllcyh0YXJnZXQsIHNvdXJjZSwgZXhjbHVkZWRTZXQpCi17Ci0g
ICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKCFAaXNPYmplY3QodGFyZ2V0KSkKLSAgICAgICAg
QHRocm93VHlwZUVycm9yKCJ0YXJnZXQgbmVlZHMgdG8gYmUgYW4gb2JqZWN0Iik7Ci0KLSAgICBp
ZiAoQGlzVW5kZWZpbmVkT3JOdWxsKHNvdXJjZSkpCi0gICAgICAgIHJldHVybiB0YXJnZXQ7Ci0K
LSAgICB2YXIgZnJvbSA9IEB0b09iamVjdChzb3VyY2UpOwotICAgIHZhciBrZXlzID0gQG93bktl
eXMoZnJvbSk7Ci0gICAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDsKLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGtleXNMZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgbmV4dEtleSA9IGtl
eXNbaV07Ci0gICAgICAgIGlmICghZXhjbHVkZWRTZXQuQGhhcyhuZXh0S2V5KSkgewotICAgICAg
ICAgICAgaWYgKEBwcm9wZXJ0eUlzRW51bWVyYWJsZShmcm9tLCBuZXh0S2V5KSkgewotICAgICAg
ICAgICAgICAgIHZhciBwcm9wVmFsdWUgPSBmcm9tW25leHRLZXldOwotICAgICAgICAgICAgICAg
IEBkZWZpbmVFbnVtZXJhYmxlV3JpdGFibGVDb25maWd1cmFibGVEYXRhUHJvcGVydHkodGFyZ2V0
LCBuZXh0S2V5LCBwcm9wVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRhcmdldDsKLX0KLQotQGdsb2JhbFByaXZhdGUKLWZ1bmN0aW9uIGNvcHlE
YXRhUHJvcGVydGllc05vRXhjbHVzaW9ucyh0YXJnZXQsIHNvdXJjZSkKLXsKLSAgICAidXNlIHN0
cmljdCI7Ci0KLSAgICBpZiAoIUBpc09iamVjdCh0YXJnZXQpKQotICAgICAgICBAdGhyb3dUeXBl
RXJyb3IoInRhcmdldCBuZWVkcyB0byBiZSBhbiBvYmplY3QiKTsKLQotICAgIGlmIChAaXNVbmRl
ZmluZWRPck51bGwoc291cmNlKSkKLSAgICAgICAgcmV0dXJuIHRhcmdldDsKLQotICAgIHZhciBm
cm9tID0gQHRvT2JqZWN0KHNvdXJjZSk7Ci0gICAgdmFyIGtleXMgPSBAb3duS2V5cyhmcm9tKTsK
LSAgICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwga2V5c0xlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBuZXh0S2V5ID0ga2V5c1tpXTsKLSAg
ICAgICAgaWYgKEBwcm9wZXJ0eUlzRW51bWVyYWJsZShmcm9tLCBuZXh0S2V5KSkgewotICAgICAg
ICAgICAgdmFyIHByb3BWYWx1ZSA9IGZyb21bbmV4dEtleV07Ci0gICAgICAgICAgICBAZGVmaW5l
RW51bWVyYWJsZVdyaXRhYmxlQ29uZmlndXJhYmxlRGF0YVByb3BlcnR5KHRhcmdldCwgbmV4dEtl
eSwgcHJvcFZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0YXJnZXQ7Ci19
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNS
ZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgJKHJldmlzaW9uIDI3MTEzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDcgKzkyLDYgQEAgZW51bSBjbGFzcyBMaW5rVGltZUNvbnN0YW50IDog
aW50MzJfdDsKICAgICBtYWNybyhuZXdQcm9taXNlKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJvbWlz
ZSkgXAogICAgIG1hY3JvKGNyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseSkgXAotICAgIG1hY3JvKGRl
ZmluZUVudW1lcmFibGVXcml0YWJsZUNvbmZpZ3VyYWJsZURhdGFQcm9wZXJ0eSkgXAogCiAjZGVm
aW5lIEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNIX05BTUUobWFj
cm8pIFwKICAgICBKU0NfQ09NTU9OX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVFNfU0lNUExF
X0VBQ0hfTkFNRShtYWNybykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0xpbmtUaW1lQ29uc3RhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCShyZXZpc2lvbiAyNzExMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoc2V0QnVja2V0
S2V5LCBudWxscHRyKSBcCiAgICAgdihzZXRQcm90b3R5cGVEaXJlY3QsIG51bGxwdHIpIFwKICAg
ICB2KHByb3BlcnR5SXNFbnVtZXJhYmxlLCBudWxscHRyKSBcCi0gICAgdihvd25LZXlzLCBudWxs
cHRyKSBcCisgICAgdihjb3B5RGF0YVByb3BlcnRpZXMsIG51bGxwdHIpIFwKICAgICB2KGVucXVl
dWVKb2IsIG51bGxwdHIpIFwKICAgICB2KG1ha2VUeXBlRXJyb3IsIG51bGxwdHIpIFwKICAgICB2
KEFnZ3JlZ2F0ZUVycm9yLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAyNzExMzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NzEsMjAgKzE3NzEsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUludHJpbnNpY05vZGU6OmVtaXRfCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q3JlYXRlQXJn
dW1lbnRzQnV0dGVyZmx5KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCkpOwogfQogCi1S
ZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX2RlZmluZUVu
dW1lcmFibGVXcml0YWJsZUNvbmZpZ3VyYWJsZURhdGFQcm9wZXJ0eShKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIEpTQzo6UmVnaXN0ZXJJRCogZHN0KQotewotICAgIEFyZ3VtZW50
TGlzdE5vZGUqIG5vZGUgPSBtX2FyZ3MtPm1fbGlzdE5vZGU7Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG5ld09iaiA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsKLSAgICBub2RlID0gbm9kZS0+
bV9uZXh0OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWVSZWdpc3RlciA9IGdl
bmVyYXRvci5lbWl0Tm9kZShub2RlKTsKLSAgICBub2RlID0gbm9kZS0+bV9uZXh0OwotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsKLSAgICBB
U1NFUlQoIW5vZGUtPm1fbmV4dCk7Ci0KLSAgICBnZW5lcmF0b3IuZW1pdENhbGxEZWZpbmVQcm9w
ZXJ0eShuZXdPYmouZ2V0KCksIHByb3BlcnR5TmFtZVJlZ2lzdGVyLmdldCgpLCB2YWx1ZS5nZXQo
KSwgbnVsbHB0ciwgbnVsbHB0ciwgQnl0ZWNvZGVHZW5lcmF0b3I6OlByb3BlcnR5Q29uZmlndXJh
YmxlIHwgQnl0ZWNvZGVHZW5lcmF0b3I6OlByb3BlcnR5V3JpdGFibGUgfCBCeXRlY29kZUdlbmVy
YXRvcjo6UHJvcGVydHlFbnVtZXJhYmxlLCBtX3Bvc2l0aW9uKTsKLSAgICByZXR1cm4gZHN0Owot
fQotCiAjZGVmaW5lIEpTQ19ERUNMQVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5F
UkFUT1JTKG5hbWUpIFwKICAgICBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVt
aXRfaW50cmluc2ljXyMjbmFtZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpIFwKICAgICB7IFwKQEAgLTUzNTEsOSArNTMzNyw4IEBAIHZvaWQgT2JqZWN0UGF0
dGVybk5vZGU6OmJpbmRWYWx1ZShCeXRlY28KICAgICAgICAgICAgICAgICBnZW5lcmF0b3IubW92
ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMiksIGV4Y2x1ZGVkU2V0UmVnLmdldCgpKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChyZXN1
bHQuZ2V0KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBh
cmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpO
byk7Ci0gICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVyYXRvciwgcmVz
dWx0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9u
LCBhcmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxs
OjpObyk7CisgICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVyYXRvciwg
bmV3T2JqZWN0LmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTU2Miw4ICs1NTQ3LDcg
QEAgUmVnaXN0ZXJJRCogT2JqZWN0U3ByZWFkRXhwcmVzc2lvbk5vZGU6OgogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzcmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKHNyYy5nZXQoKSwgbV9leHByZXNzaW9uKTsKICAgICAKLSAgICAvLyBsb2FkIGFu
ZCBjYWxsIEBjb3B5RGF0YVByb3BlcnRpZXNOb0V4Y2x1c2lvbnMKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gY29weURhdGFQcm9wZXJ0aWVzID0gZ2VuZXJhdG9yLm1vdmVMaW5rVGltZUNvbnN0YW50
KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OmNvcHlEYXRhUHJvcGVydGllc05vRXhjbHVzaW9u
cyk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvcHlEYXRhUHJvcGVydGllcyA9IGdlbmVyYXRv
ci5tb3ZlTGlua1RpbWVDb25zdGFudChudWxscHRyLCBMaW5rVGltZUNvbnN0YW50Ojpjb3B5RGF0
YVByb3BlcnRpZXMpOwogICAgIAogICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51
bGxwdHIsIDIpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBq
c1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTEzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4
OSw4ICsxMTg5LDggQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIwog
ICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29u
c3RhbnQ6OnByb3BlcnR5SXNFbnVtZXJhYmxlKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFs
aXplcjxKU0NlbGw+JiBpbml0KSB7CiAgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpj
cmVhdGUoaW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0
cmluZygpLCBnbG9iYWxGdW5jUHJvcGVydHlJc0VudW1lcmFibGUpKTsKICAgICAgICAgfSk7Ci0g
ICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25z
dGFudDo6b3duS2V5cyldLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYg
aW5pdCkgewotICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0s
IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpLCAwLCBTdHJpbmcoKSwgZ2xvYmFs
RnVuY093bktleXMpKTsKKyAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19jYXN0PHVuc2ln
bmVkPihMaW5rVGltZUNvbnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpXS5pbml0TGF0ZXIoW10g
KGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0
KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0
Lm93bmVyKSwgMiwgU3RyaW5nKCksIGdsb2JhbEZ1bmNDb3B5RGF0YVByb3BlcnRpZXMpKTsKICAg
ICAgICAgfSk7CiAgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
TGlua1RpbWVDb25zdGFudDo6ZW5xdWV1ZUpvYildLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlh
bGl6ZXI8SlNDZWxsPiYgaW5pdCkgewogICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6
Y3JlYXRlKGluaXQudm0sIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpLCAwLCAi
ZW5xdWV1ZUpvYiJfcywgZW5xdWV1ZUpvYikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2
aXNpb24gMjcxMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzksMTMgKzgzOSwxMDEgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNQcm9wZQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGVudW1lcmFibGUpKTsKIH0KIAotSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGdsb2JhbEZ1bmNPd25LZXlzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQorc3RhdGljIGJvb2wgY2FuUGVyZm9ybUZhc3RQcm9w
ZXJ0eUVudW1lcmF0aW9uRm9yQ29weURhdGFQcm9wZXJ0aWVzKFN0cnVjdHVyZSogc3RydWN0dXJl
KQoreworICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT50eXBl
SW5mbygpLm92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGllcyhzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdHJ1Y3R1cmUtPmhh
c0dldHRlclNldHRlclByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChzdHJ1Y3R1cmUtPmhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK307CisKKy8vIGh0
dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY29weWRhdGFwcm9wZXJ0aWVzCitKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRv
T2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUob3duUHJvcGVydHlLZXlzKGdsb2JhbE9iamVjdCwgb2JqZWN0LCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSwg
V1RGOjpudWxsb3B0KSkpOworCisgICAgSlNPYmplY3QqIHRhcmdldCA9IGFzT2JqZWN0KGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGpzRHluYW1p
Y0Nhc3Q8SlNGaW5hbE9iamVjdCo+KHZtLCB0YXJnZXQpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0
YXJnZXQtPmlzU3RydWN0dXJlRXh0ZW5zaWJsZSh2bSkpOworCisgICAgSlNWYWx1ZSBzb3VyY2VW
YWx1ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgaWYgKHNvdXJjZVZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBKU09i
amVjdCogc291cmNlID0gc291cmNlVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBz
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIFJFTEVBU0VfQVNTRVJUKHNvdXJjZSAhPSB0
YXJnZXQpOworCisgICAgSlNTZXQqIGV4Y2x1ZGVkU2V0ID0gbnVsbHB0cjsKKyAgICBpZiAoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPiAyKQorICAgICAgICBleGNsdWRlZFNldCA9IGpzQ2Fz
dDxKU1NldCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMikpOworCisgICAgYXV0byBp
c1Byb3BlcnR5TmFtZUV4Y2x1ZGVkID0gWyZdIChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSB7
CisgICAgICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzUHJpdmF0ZU5hbWUoKSk7CisgICAgICAg
IGlmICghZXhjbHVkZWRTZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
SlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSA9IGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkpOworICAgICAgICByZXR1cm4g
ZXhjbHVkZWRTZXQtPmhhcyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZVZhbHVlKTsKKyAgICB9
OworCisgICAgaWYgKCFzb3VyY2UtPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHZtKSkgeworICAg
ICAgICBzb3VyY2UtPnJlaWZ5QWxsU3RhdGljUHJvcGVydGllcyhnbG9iYWxPYmplY3QpOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworICAgIGlmIChj
YW5QZXJmb3JtRmFzdFByb3BlcnR5RW51bWVyYXRpb25Gb3JDb3B5RGF0YVByb3BlcnRpZXMoc291
cmNlLT5zdHJ1Y3R1cmUodm0pKSkgeworICAgICAgICBzb3VyY2UtPnN0cnVjdHVyZSh2bSktPmZv
ckVhY2hQcm9wZXJ0eSh2bSwgWyZdIChjb25zdCBQcm9wZXJ0eU1hcEVudHJ5JiBlbnRyeSkgLT4g
Ym9vbCB7CisgICAgICAgICAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKGVudHJ5LmtleSk7
CisgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lLmlzUHJpdmF0ZU5hbWUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChpc1Byb3BlcnR5TmFtZUV4Y2x1
ZGVkKHByb3BlcnR5TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgdGFyZ2V0LT5wdXRE
aXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgc291cmNlLT5nZXREaXJlY3QoZW50cnkub2Zmc2V0KSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICAg
ICAgc291cmNlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMoc291cmNlLCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwcm9wZXJ0eU5hbWUgOiBwcm9wZXJ0
eU5hbWVzKSB7CisgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eU5hbWVFeGNsdWRlZChwcm9wZXJ0
eU5hbWUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChzb3VyY2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRP
d25Qcm9wZXJ0eSk7CisgICAgICAgICAgICBib29sIGhhc1Byb3BlcnR5ID0gc291cmNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdChzb3VyY2UsIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lLCBzbG90KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgICAgICAgICBpZiAoIWhhc1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlOworICAgICAgICAgICAgaWYgKExJS0VMWSghc2xvdC5pc1RhaW50ZWRC
eU9wYXF1ZU9iamVjdCgpKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHZhbHVlID0gc291cmNlLT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAg
ICAgdGFyZ2V0LT5wdXREaXJlY3RNYXlCZUluZGV4KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0RhdGVUaW1lRm9ybWF0LCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5oCShyZXZpc2lvbiAyNzExMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3
IEBAIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0J1aWwKIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0J1aWx0aW5EZXNjcmliZSk7CiBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNJbXBvcnRNb2R1bGUpOwogSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihnbG9iYWxGdW5jUHJvcGVydHlJc0VudW1lcmFibGUpOwotSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihnbG9iYWxGdW5jT3duS2V5cyk7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGdsb2JhbEZ1bmNDb3B5RGF0YVByb3BlcnRpZXMpOwogSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihnbG9iYWxGdW5jRGF0ZVRpbWVGb3JtYXQpOwogCiBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUg
anNUb051bWJlcihTdHJpbmdWaWV3KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417227</attachid>
            <date>2021-01-07 17:10:01 -0800</date>
            <delta_ts>2021-01-07 17:17:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193618-20210108031000.patch</filename>
            <type>text/plain</type>
            <size>31012</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzEyNjkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDIxLTAxLTA3ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgQGNvcHlEYXRhUHJvcGVydGllcyBpbiBD
KysgdG8gb3B0aW1pemUgb2JqZWN0IHJlc3QgLyBzcHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzYxOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0
LWRlc3RydWN0dXJpbmcuanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9vYmpl
Y3Qtc3ByZWFkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3Mvb2JqZWN0LXJlc3QtZGVjb25z
dHJ1Y3QuanM6CisgICAgICAgICogc3RyZXNzL29iamVjdC1zcHJlYWQuanM6CisKIDIwMjEtMDEt
MDcgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFtK
U0NdIFNpbXBsaWZ5IGdldCpQcm9wZXJ0eU5hbWVzKCkgbWV0aG9kcyBhbmQgRW51bWVyYXRpb25N
b2RlCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9vYmplY3QtcmVzdC1kZXN0cnVjdHVy
aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0
LWRlc3RydWN0dXJpbmcuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFy
a3Mvb2JqZWN0LXJlc3QtZGVzdHJ1Y3R1cmluZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG9iaiA9IHsgYTogMCwgYjogMCwgYzogMCwg
ZDogMSwgZTogMCwgZjogMCwgZzogMCwgaDogMCwgaTogMCwgajogMCB9OworICAgIHZhciBhY2Mg
PSAwOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7IGkrKykgeworICAgICAgICB2YXIg
eyBhLCBiLCBjLCAuLi5yZXN0IH0gPSBvYmo7CisgICAgICAgIGFjYyArPSByZXN0LmQ7CisgICAg
fQorCisgICAgaWYgKGFjYyAhPT0gMWU1KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBh
c3NlcnRpb24hIik7Cit9KSgpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0
LXNwcmVhZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9vYmplY3Qt
c3ByZWFkLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVj
dC1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorKGZ1bmN0aW9uKCkg
eworICAgIHZhciBvYmogPSB7IGE6IDEsIGI6IDIsIGM6IDMsIGQ6IDAsIGU6IDAsIGY6IDAsIGc6
IDAsIGg6IDAsIGk6IDAsIGo6IDAgfTsKKyAgICB2YXIgYWNjID0gMDsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgICAgIGFjYyArPSAoeyBhOiAwLCBiOiAwLCBjOiAw
LCAuLi5vYmogfSkuYTsKKworICAgIGlmIChhY2MgIT09IDFlNSkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL29i
amVjdC1yZXN0LWRlY29uc3RydWN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL29i
amVjdC1yZXN0LWRlY29uc3RydWN0LmpzCShyZXZpc2lvbiAyNzEyNjcpCisrKyBKU1Rlc3RzL3N0
cmVzcy9vYmplY3QtcmVzdC1kZWNvbnN0cnVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMyw4ICsz
LDE1IEBAIGxldCBhc3NlcnQgPSAoZSkgPT4gewogICAgICAgICB0aHJvdyBFcnJvcigiQmFkIGFz
c2VydGlvbiEiKTsKIH0KIAotbGV0IGFzc2VydFByb3BEZXNjcmlwdG9yID0gKHJlc3RPYmosIHBy
b3ApID0+IHsKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAo
YWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgdmFsdWU6
ICR7YWN0dWFsfSFgKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0RGF0YVByb3BlcnR5KHJlc3RPYmos
IHByb3AsIHZhbHVlKSB7CisgICAgc2hvdWxkQmUocmVzdE9ialtwcm9wXSwgdmFsdWUpOwogICAg
IGxldCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyZXN0T2JqLCBwcm9w
KTsKKyAgICBzaG91bGRCZShkZXNjLnZhbHVlLCB2YWx1ZSk7CiAgICAgYXNzZXJ0KGRlc2MuZW51
bWVyYWJsZSk7CiAgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUpOwogICAgIGFzc2VydChkZXNjLmNv
bmZpZ3VyYWJsZSk7CkBAIC0xOSwxMSArMjYsOCBAQCBsZXQgYXNzZXJ0UHJvcERlc2NyaXB0b3Ig
PSAocmVzdE9iaiwgcHJvCiAgICAgYXNzZXJ0KGEgPT09IDUpOwogICAgIGFzc2VydChiID09PSAz
KTsKIAotICAgIGFzc2VydChyZXN0LnggPT09IDEpOwotICAgIGFzc2VydChyZXN0LnkgPT09IDIp
OwotCi0gICAgYXNzZXJ0UHJvcERlc2NyaXB0b3IocmVzdCwgJ3gnKTsKLSAgICBhc3NlcnRQcm9w
RGVzY3JpcHRvcihyZXN0LCAneScpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShyZXN0LCAneCcs
IDEpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShyZXN0LCAneScsIDIpOwogfSkoKTsKIAogLy8g
RW1wdHkgT2JqZWN0CkBAIC0xMDEsOCArMTA1LDcgQEAgbGV0IGFzc2VydFByb3BEZXNjcmlwdG9y
ID0gKHJlc3RPYmosIHBybwogICAgIGFzc2VydChhID09PSAzKTsKICAgICBhc3NlcnQoYiA9PT0g
NCk7CiAKLSAgICBhc3NlcnQocmVzdC54ID09PSAzKTsKLSAgICBhc3NlcnRQcm9wRGVzY3JpcHRv
cihyZXN0LCAneCcpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShyZXN0LCAneCcsIDMpOwogfSko
KTsKIAogLy8gU2tpcCBub24tZW51bWVyYWJsZSBjYXNlCkBAIC0xMjgsOCArMTMxLDggQEAgbGV0
IGFzc2VydFByb3BEZXNjcmlwdG9yID0gKHJlc3RPYmosIHBybwogICAgIGFzc2VydChyZXN0LmEg
PT09IDMpOwogICAgIGFzc2VydChyZXN0LmIgPT09IDQpOwogCi0gICAgYXNzZXJ0UHJvcERlc2Ny
aXB0b3IocmVzdCwgJ2EnKTsKLSAgICBhc3NlcnRQcm9wRGVzY3JpcHRvcihyZXN0LCAnYicpOwor
ICAgIGFzc2VydERhdGFQcm9wZXJ0eShyZXN0LCAnYScsIDMpOworICAgIGFzc2VydERhdGFQcm9w
ZXJ0eShyZXN0LCAnYicsIDQpOwogfSkoKTsKIAogLy8gRGVzdHJ1Y3R1cmluZyBmdW5jdGlvbiBw
YXJhbWV0ZXIKQEAgLTIzNSwzICsyMzgsMTI2IEBAIGxldCBhc3NlcnRQcm9wRGVzY3JpcHRvciA9
IChyZXN0T2JqLCBwcm8KICAgICB9CiB9KSgpOwogCisoZnVuY3Rpb24gbm9uRW51bWVyYWJsZVN5
bWJvbCgpIHsKKyAgICB2YXIgX19zMCA9IFN5bWJvbCgiczAiKTsKKyAgICB2YXIgX19zMSA9IFN5
bWJvbCgiczEiKTsKKworICAgIHZhciBzb3VyY2UgPSB7fTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydGllcyhzb3VyY2UsIHsKKyAgICAgICAgW19fczBdOiB7dmFsdWU6IDAsIGVudW1lcmFibGU6
IGZhbHNlfSwKKyAgICAgICAgW19fczFdOiB7dmFsdWU6IDEsIGVudW1lcmFibGU6IGZhbHNlfSwK
KyAgICB9KTsKKworICAgIHZhciB7W19fczBdOiBzMCwgLi4udGFyZ2V0fSA9IHNvdXJjZTsKKwor
ICAgIHNob3VsZEJlKHMwLCAwKTsKKyAgICBhc3NlcnQoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5
bWJvbHModGFyZ2V0KS5sZW5ndGgpOworfSkoKTsKKworKGZ1bmN0aW9uIGR1bmRlclByb3RvKCkg
eworICAgIHZhciBzb3VyY2UgPSB7fTsKKyAgICB2YXIgcHJvdG9WYWx1ZSA9IHt9OworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2UsICJfX3Byb3RvX18iLCB7dmFsdWU6IHByb3RvVmFs
dWUsIGVudW1lcmFibGU6IHRydWV9KTsKKyAgICB2YXIgey4uLnRhcmdldH0gPSBzb3VyY2U7CisK
KyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiX19wcm90b19fIiwgcHJvdG9WYWx1ZSk7
CisgICAgc2hvdWxkQmUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCksIE9iamVjdC5wcm90
b3R5cGUpOworfSkoKTsKKworKGZ1bmN0aW9uIHN0cmluZ1ByaW1pdGl2ZSgpIHsKKyAgICB2YXIg
c291cmNlID0gIjAxMiI7CisgICAgdmFyIHswOiBhLCBbIjIiXTogYywgLi4udGFyZ2V0fSA9IHNv
dXJjZTsKKworICAgIHNob3VsZEJlKGEsICIwIik7CisgICAgc2hvdWxkQmUoYywgIjIiKTsKKyAg
ICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAxLCAiMSIpOworICAgIHNob3VsZEJlKE9iamVj
dC5rZXlzKHRhcmdldCkuam9pbigpLCAiMSIpOworfSkoKTsKKworKGZ1bmN0aW9uIFByb3h5T2Jq
ZWN0KCkgeworICAgIHZhciBfX3MwID0gU3ltYm9sKCJzMCIpOworICAgIHZhciBfX3MxID0gU3lt
Ym9sKCJzMSIpOworCisgICAgdmFyIG93bktleXNDYWxscyA9IDA7CisgICAgdmFyIGdvcGRDYWxs
cyA9IFtdOworICAgIHZhciBnZXRDYWxscyA9IFtdOworCisgICAgdmFyIHNvdXJjZSA9IG5ldyBQ
cm94eSh7CisgICAgICAgIFtfX3MwXTogInMwIiwgW19fczFdOiAiczEiLAorICAgICAgICBhOiAw
LCBiOiAxLCBjOiAyLCBkOiAzLAorICAgIH0sIHsKKyAgICAgICAgb3duS2V5czogKHQpID0+IHsK
KyAgICAgICAgICAgICsrb3duS2V5c0NhbGxzOworICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Qu
b3duS2V5cyh0KTsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
OiAodCwga2V5KSA9PiB7CisgICAgICAgICAgICBnb3BkQ2FsbHMucHVzaChrZXkpOworICAgICAg
ICAgICAgdmFyIGRlc2MgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCBrZXkp
OworICAgICAgICAgICAgaWYgKGtleSA9PT0gImIiIHx8IGtleSA9PT0gX19zMCkKKyAgICAgICAg
ICAgICAgICBkZXNjLmVudW1lcmFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBkZXNj
OworICAgICAgICB9LAorICAgICAgICBnZXQ6ICh0LCBrZXksIHJlY2VpdmVyKSA9PiB7CisgICAg
ICAgICAgICBnZXRDYWxscy5wdXNoKGtleSk7CisgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5n
ZXQodCwga2V5LCByZWNlaXZlcik7CisgICAgICAgIH0sCisgICAgfSk7CisKKyAgICB2YXIge2Ms
IFsiZCJdOiBkLCAuLi50YXJnZXR9ID0gc291cmNlOworCisgICAgc2hvdWxkQmUob3duS2V5c0Nh
bGxzLCAxKTsKKyAgICBzaG91bGRCZShnb3BkQ2FsbHMubWFwKFN0cmluZykuam9pbigpLCAiYSxi
LFN5bWJvbChzMCksU3ltYm9sKHMxKSIpOworICAgIHNob3VsZEJlKGdldENhbGxzLm1hcChTdHJp
bmcpLmpvaW4oKSwgImMsZCxhLFN5bWJvbChzMSkiKTsKKworICAgIGFzc2VydERhdGFQcm9wZXJ0
eSh0YXJnZXQsICJhIiwgMCk7CisgICAgc2hvdWxkQmUoYywgMik7CisgICAgc2hvdWxkQmUoZCwg
Myk7CisgICAgc2hvdWxkQmUoT2JqZWN0LmtleXModGFyZ2V0KS5qb2luKCksICJhIik7CisKKyAg
ICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KTsKKyAg
ICBzaG91bGRCZShzeW1ib2xzWzBdLCBfX3MxKTsKKyAgICBzaG91bGRCZShzeW1ib2xzLmxlbmd0
aCwgMSk7Cit9KSgpOworCisoZnVuY3Rpb24gaW5kZXhlZFByb3BlcnRpZXMoKSB7CisgICAgdmFy
IHNvdXJjZSA9IFswLCAxLCAyLCAzXTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNl
LCAiMSIsIHtlbnVtZXJhYmxlOiBmYWxzZX0pOworICAgIHZhciB7MjogYywgWyIzIl06IGQsIC4u
LnRhcmdldH0gPSBzb3VyY2U7CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiMCIs
IDApOworICAgIHNob3VsZEJlKE9iamVjdC5rZXlzKHRhcmdldCkuam9pbigpLCAiMCIpOworfSko
KTsKKworKGZ1bmN0aW9uIEN1c3RvbUFjY2Vzc29yKCkgeworICAgIHZhciBzb3VyY2UgPSAkdm0u
Y3JlYXRlQ3VzdG9tVGVzdEdldHRlclNldHRlcigpOworICAgIHZhciB7Y3VzdG9tVmFsdWVHbG9i
YWxPYmplY3QsIC4uLnRhcmdldH0gPSBzb3VyY2U7CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHko
dGFyZ2V0LCAiY3VzdG9tVmFsdWUiLCBzb3VyY2UpOworICAgIGFzc2VydCghdGFyZ2V0Lmhhc093
blByb3BlcnR5KCJjdXN0b21WYWx1ZUdsb2JhbE9iamVjdCIpKTsKKyAgICBzaG91bGRCZShjdXN0
b21WYWx1ZUdsb2JhbE9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddLCAiZ2xvYmFsIik7CisgICAg
YXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgImN1c3RvbUFjY2Vzc29yIiwgc291cmNlKTsKKyAg
ICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiY3VzdG9tQWNjZXNzb3JHbG9iYWxPYmplY3Qi
LCBjdXN0b21WYWx1ZUdsb2JhbE9iamVjdCk7Cit9KSgpOworCisoZnVuY3Rpb24gQ3VzdG9tQWNj
ZXNzb3JJbk5vblJlaWZpZWRQcm9wZXJ0eVRhYmxlKCkgeworICAgIC8vIG1ha2Ugc3VyZSB3ZSBy
ZWlmeUFsbFN0YXRpY1Byb3BlcnRpZXMoKSBiZWZvcmUgZGVjaWRpbmcgb24gdGhlIGZhc3Qvc2xv
dyBwYXRoCisKKyAgICB2YXIgc291cmNlID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29y
KCk7CisgICAgc291cmNlLnRlc3RGaWVsZCA9IDQyOworICAgIHZhciB7Li4udGFyZ2V0fSA9IHNv
dXJjZTsKKworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsICJ0ZXN0RmllbGQiLCA0Mik7
CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgInRlc3RTdGF0aWNBY2Nlc3NvciIsIDQy
KTsKK30pKCk7CisKKyhmdW5jdGlvbiB1bmNhY2hlYWJsZURpY3Rpb25hcnkoKSB7CisgICAgdmFy
IHNvdXJjZSA9IHthOiAwLCBiOiAxLCBjOiAyLCBkOiAzfTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoc291cmNlLCAiYyIsIHtlbnVtZXJhYmxlOiBmYWxzZX0pOworICAgICR2bS50b1VuY2Fj
aGVhYmxlRGljdGlvbmFyeShzb3VyY2UpOworICAgIHZhciB7YiwgWyJkIl06IGQsIC4uLnRhcmdl
dH0gPSBzb3VyY2U7CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYSIsIDApOwor
ICAgIHNob3VsZEJlKGIsIDEpOworICAgIHNob3VsZEJlKGQsIDMpOworICAgIHNob3VsZEJlKE9i
amVjdC5rZXlzKHRhcmdldCkuam9pbigpLCAiYSIpOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL29iamVjdC1zcHJlYWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvb2JqZWN0
LXNwcmVhZC5qcwkocmV2aXNpb24gMjcxMjY3KQorKysgSlNUZXN0cy9zdHJlc3Mvb2JqZWN0LXNw
cmVhZC5qcwkod29ya2luZyBjb3B5KQpAQCAtNywxMiArNywxOCBAQCBhc3NlcnQuc2FtZVZhbHVl
ID0gKGEsIGIpID0+ICB7CiAgICAgYXNzZXJ0KGEgPT09IGIpOwogfQogCi1mdW5jdGlvbiB2YWxp
ZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvLCBwKSB7Ci0gICAgbGV0IGRlc2MgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHApOworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBl
eHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoYEJhZCB2YWx1ZTogJHthY3R1YWx9IWApOworfQogCitmdW5jdGlvbiBhc3NlcnRE
YXRhUHJvcGVydHkodGFyZ2V0LCBwcm9wLCB2YWx1ZSkgeworICAgIHNob3VsZEJlKHRhcmdldFtw
cm9wXSwgdmFsdWUpOworICAgIGxldCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0YXJnZXQsIHByb3ApOworICAgIHNob3VsZEJlKGRlc2MudmFsdWUsIHZhbHVlKTsKICAg
ICBhc3NlcnQoZGVzYy5lbnVtZXJhYmxlKTsKLSAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUp
OwogICAgIGFzc2VydChkZXNjLndyaXRhYmxlKTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFi
bGUpOwogfQogCiAvLyBCYXNlIGNhc2VzCkBAIC0yMiwxMCArMjgsOCBAQCBmdW5jdGlvbiB2YWxp
ZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvLCBwCiAKICAgICBhc3NlcnQuc2FtZVZhbHVlKG9iai5h
LCAxKTsKICAgICBhc3NlcnQob2JqLmIsIDIpOwotICAgIGFzc2VydChvYmouYywgMyk7Ci0gICAg
YXNzZXJ0KG9iai5kLCA0KTsKLSAgICB2YWxpZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmosICJj
Iik7Ci0gICAgdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiZCIpOworICAgIGFzc2Vy
dERhdGFQcm9wZXJ0eShvYmosICJjIiwgMyk7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KG9iaiwg
ImQiLCA0KTsKICAgICBhc3NlcnQoT2JqZWN0LmtleXMob2JqKSwgMik7CiB9KSgpOwogCkBAIC0z
MywxNiArMzcsMTEgQEAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3IobywgcAog
ICAgIGxldCBvID0ge2M6IDMsIGQ6IDR9OwogICAgIGxldCBvYmogPSB7YTogMSwgYjogMiwgLi4u
b307CiAKLSAgICBhc3NlcnQuc2FtZVZhbHVlKG9iai5hLCAxKTsKLSAgICBhc3NlcnQuc2FtZVZh
bHVlKG9iai5iLCAyKTsKLSAgICBhc3NlcnQuc2FtZVZhbHVlKG9iai5jLCAzKTsKLSAgICBhc3Nl
cnQuc2FtZVZhbHVlKG9iai5kLCA0KTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkob2JqLCAiYSIs
IDEpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShvYmosICJiIiwgMik7CisgICAgYXNzZXJ0RGF0
YVByb3BlcnR5KG9iaiwgImMiLCAzKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkob2JqLCAiZCIs
IDQpOwogICAgIGFzc2VydC5zYW1lVmFsdWUoT2JqZWN0LmtleXMob2JqKS5sZW5ndGgsIDQpOwot
Ci0gICAgdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiYSIpOwotICAgIHZhbGlkYXRl
UHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgImIiKTsKLSAgICB2YWxpZGF0ZVByb3BlcnR5RGVzY3Jp
cHRvcihvYmosICJjIik7Ci0gICAgdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiZCIp
OwogfSkoKTsKIAogKCgpID0+IHsKQEAgLTEyOCwxMiArMTI3LDEwIEBAIGZ1bmN0aW9uIHZhbGlk
YXRlUHJvcGVydHlEZXNjcmlwdG9yKG8sIHAKIAogICAgIGxldCBvYmogPSB7Li4ubywgYzogNCwg
ZDogNX07CiAKLSAgICBhc3NlcnQuc2FtZVZhbHVlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3Iob2JqLCAiYSIpLnZhbHVlLCA0Mik7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KG9iaiwg
ImEiLCA0Mik7CiAgICAgYXNzZXJ0LnNhbWVWYWx1ZShvYmouYywgNCk7CiAgICAgYXNzZXJ0LnNh
bWVWYWx1ZShvYmouZCwgNSk7CiAgICAgYXNzZXJ0LnNhbWVWYWx1ZShPYmplY3Qua2V5cyhvYmop
Lmxlbmd0aCwgMyk7Ci0KLSAgICB2YWxpZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmosICJhIik7
CiB9KSgpOwogCiAoKCkgPT4gewpAQCAtMjIzLDEwICsyMjAsOCBAQCBmdW5jdGlvbiB2YWxpZGF0
ZVByb3BlcnR5RGVzY3JpcHRvcihvLCBwCiAKICAgICBsZXQgb2JqID0gey4uLm8sIGE6IDN9Owog
Ci0gICAgYXNzZXJ0LnNhbWVWYWx1ZShvYmouYSwgMykKLSAgICBhc3NlcnQuc2FtZVZhbHVlKG9i
ai5iLCAyKTsKLSAgICB2YWxpZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmosICJhIik7Ci0gICAg
dmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiYiIpOworICAgIGFzc2VydERhdGFQcm9w
ZXJ0eShvYmosICJhIiwgMyk7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KG9iaiwgImIiLCAyKTsK
IH0pKCk7CiAKIC8vIFNldHRlcgpAQCAtMzExLDMgKzMwNiwxMTkgQEAgZnVuY3Rpb24gdmFsaWRh
dGVQcm9wZXJ0eURlc2NyaXB0b3IobywgcAogICAgIGFzc2VydChleGVjdXRlZFNldHRlcik7CiB9
KSgpOwogCisoZnVuY3Rpb24gbm9uRW51bWVyYWJsZVN5bWJvbCgpIHsKKyAgICB2YXIgX19zMCA9
IFN5bWJvbCgiczAiKTsKKyAgICB2YXIgc291cmNlID0ge307CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXMoc291cmNlLCB7CisgICAgICAgIFtfX3MwXToge3ZhbHVlOiAwLCBlbnVtZXJhYmxl
OiBmYWxzZX0sCisgICAgfSk7CisKKyAgICB2YXIgdGFyZ2V0ID0ge1tfX3MwXTogMSwgLi4udGFy
Z2V0fTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCBfX3MwLCAxKTsKK30pKCk7CisK
KyhmdW5jdGlvbiBkdW5kZXJQcm90bygpIHsKKyAgICB2YXIgc291cmNlID0ge307CisgICAgdmFy
IHByb3RvVmFsdWUgPSB7fTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNlLCAiX19w
cm90b19fIiwge3ZhbHVlOiBwcm90b1ZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlfSk7CisgICAgdmFy
IHRhcmdldCA9IHsuLi5zb3VyY2V9OworCisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwg
Il9fcHJvdG9fXyIsIHByb3RvVmFsdWUpOworICAgIHNob3VsZEJlKE9iamVjdC5nZXRQcm90b3R5
cGVPZih0YXJnZXQpLCBPYmplY3QucHJvdG90eXBlKTsKK30pKCk7CisKKyhmdW5jdGlvbiBzdHJp
bmdQcmltaXRpdmUoKSB7CisgICAgdmFyIHNvdXJjZSA9ICIwMTIiOworICAgIHZhciB0YXJnZXQg
PSB7Z2V0IDAoKSB7fSwgWyIyIl06IDIyLCAuLi5zb3VyY2V9OworCisgICAgYXNzZXJ0RGF0YVBy
b3BlcnR5KHRhcmdldCwgMCwgIjAiKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAx
LCAiMSIpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsIDIsICIyIik7CisgICAgc2hv
dWxkQmUoT2JqZWN0LmtleXModGFyZ2V0KS5qb2luKCksICIwLDEsMiIpOworfSkoKTsKKworKGZ1
bmN0aW9uIFByb3h5T2JqZWN0KCkgeworICAgIHZhciBfX3MwID0gU3ltYm9sKCJzMCIpOworICAg
IHZhciBfX3MxID0gU3ltYm9sKCJzMSIpOworCisgICAgdmFyIG93bktleXNDYWxscyA9IDA7Cisg
ICAgdmFyIGdvcGRDYWxscyA9IFtdOworICAgIHZhciBnZXRDYWxscyA9IFtdOworCisgICAgdmFy
IHNvdXJjZSA9IG5ldyBQcm94eSh7CisgICAgICAgIFtfX3MwXTogInMwIiwgW19fczFdOiAiczEi
LAorICAgICAgICBhOiAwLCBiOiAxLCBjOiAyLCBkOiAzLAorICAgIH0sIHsKKyAgICAgICAgb3du
S2V5czogKHQpID0+IHsKKyAgICAgICAgICAgICsrb3duS2V5c0NhbGxzOworICAgICAgICAgICAg
cmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0KTsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yOiAodCwga2V5KSA9PiB7CisgICAgICAgICAgICBnb3BkQ2FsbHMucHVz
aChrZXkpOworICAgICAgICAgICAgdmFyIGRlc2MgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcih0LCBrZXkpOworICAgICAgICAgICAgaWYgKGtleSA9PT0gImIiIHx8IGtleSA9PT0g
X19zMCkKKyAgICAgICAgICAgICAgICBkZXNjLmVudW1lcmFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBkZXNjOworICAgICAgICB9LAorICAgICAgICBnZXQ6ICh0LCBrZXksIHJlY2Vp
dmVyKSA9PiB7CisgICAgICAgICAgICBnZXRDYWxscy5wdXNoKGtleSk7CisgICAgICAgICAgICBy
ZXR1cm4gUmVmbGVjdC5nZXQodCwga2V5LCByZWNlaXZlcik7CisgICAgICAgIH0sCisgICAgfSk7
CisKKyAgICB2YXIgdGFyZ2V0ID0ge2EoKSB7fSwgYjogMTEsIFtfX3MxXTogImZvbyIsIC4uLnNv
dXJjZSwgWyJkIl06IDMzfTsKKworICAgIHNob3VsZEJlKG93bktleXNDYWxscywgMSk7CisgICAg
c2hvdWxkQmUoZ29wZENhbGxzLm1hcChTdHJpbmcpLmpvaW4oKSwgImEsYixjLGQsU3ltYm9sKHMw
KSxTeW1ib2woczEpIik7CisgICAgc2hvdWxkQmUoZ2V0Q2FsbHMubWFwKFN0cmluZykuam9pbigp
LCAiYSxjLGQsU3ltYm9sKHMxKSIpOworCisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwg
ImEiLCAwKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYiIsIDExKTsKKyAgICBh
c3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYyIsIDIpOworICAgIGFzc2VydERhdGFQcm9wZXJ0
eSh0YXJnZXQsICJkIiwgMzMpOworCisgICAgc2hvdWxkQmUoUmVmbGVjdC5vd25LZXlzKHRhcmdl
dCkubWFwKFN0cmluZykuam9pbigpLCAiYSxiLGMsZCxTeW1ib2woczEpIik7Cit9KSgpOworCiso
ZnVuY3Rpb24gaW5kZXhlZFByb3BlcnRpZXMoKSB7CisgICAgdmFyIHNvdXJjZSA9IFswLCAxLCAy
XTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNlLCAiMSIsIHtlbnVtZXJhYmxlOiBm
YWxzZX0pOworICAgIHZhciB0YXJnZXQgPSB7c2V0IFsiMiJdKF92KSB7fSwgLi4uc291cmNlfTsK
KworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsICIwIiwgMCk7CisgICAgYXNzZXJ0RGF0
YVByb3BlcnR5KHRhcmdldCwgIjIiLCAyKTsKKyAgICBzaG91bGRCZShPYmplY3Qua2V5cyh0YXJn
ZXQpLmpvaW4oKSwgIjAsMiIpOworfSkoKTsKKworKGZ1bmN0aW9uIEN1c3RvbUFjY2Vzc29yKCkg
eworICAgIHZhciBzb3VyY2UgPSAkdm0uY3JlYXRlQ3VzdG9tVGVzdEdldHRlclNldHRlcigpOwor
ICAgIHZhciB0YXJnZXQgPSB7Li4uc291cmNlfTsKKworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0
YXJnZXQsICJjdXN0b21WYWx1ZSIsIHNvdXJjZSk7CisgICAgc2hvdWxkQmUodGFyZ2V0LmN1c3Rv
bVZhbHVlR2xvYmFsT2JqZWN0LCB0YXJnZXQuY3VzdG9tQWNjZXNzb3JHbG9iYWxPYmplY3QpOwor
ICAgIHNob3VsZEJlKHRhcmdldC5jdXN0b21WYWx1ZUdsb2JhbE9iamVjdFtTeW1ib2wudG9TdHJp
bmdUYWddLCAiZ2xvYmFsIik7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgImN1c3Rv
bUFjY2Vzc29yIiwgc291cmNlKTsKK30pKCk7CisKKyhmdW5jdGlvbiBDdXN0b21BY2Nlc3Nvcklu
Tm9uUmVpZmllZFByb3BlcnR5VGFibGUoKSB7CisgICAgLy8gbWFrZSBzdXJlIHdlIHJlaWZ5QWxs
U3RhdGljUHJvcGVydGllcygpIGJlZm9yZSBkZWNpZGluZyBvbiB0aGUgZmFzdC9zbG93IHBhdGgK
KworICAgIHZhciBzb3VyY2UgPSAkdm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKTsKKyAg
ICBzb3VyY2UudGVzdEZpZWxkID0gNDI7CisgICAgdmFyIHRhcmdldCA9IHsuLi5zb3VyY2V9Owor
CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgInRlc3RGaWVsZCIsIDQyKTsKKyAgICBh
c3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAidGVzdFN0YXRpY0FjY2Vzc29yIiwgNDIpOworfSko
KTsKKworKGZ1bmN0aW9uIHVuY2FjaGVhYmxlRGljdGlvbmFyeSgpIHsKKyAgICB2YXIgc291cmNl
ID0ge2E6IDAsIGI6IDEsIGM6IDJ9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2Us
ICJjIiwge2VudW1lcmFibGU6IGZhbHNlfSk7CisgICAgJHZtLnRvVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KHNvdXJjZSk7CisgICAgdmFyIGIgPSAxMTsKKyAgICB2YXIgdGFyZ2V0ID0ge2dldCBhKCkg
e30sIGIsIC4uLnNvdXJjZX07CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYSIs
IDApOworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsICJiIiwgMSk7CisgICAgc2hvdWxk
QmUoT2JqZWN0LmtleXModGFyZ2V0KS5qb2luKCksICJhLGIiKTsKK30pKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTI2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OCBAQAorMjAyMS0wMS0w
NyAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgSW1w
bGVtZW50IEBjb3B5RGF0YVByb3BlcnRpZXMgaW4gQysrIHRvIG9wdGltaXplIG9iamVjdCByZXN0
IC8gc3ByZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTM2MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTaW5jZSBAY29weURhdGFQcm9wZXJ0aWVzIGlzIGluaGVyZW50bHkgcG9seW1vcnBoaWMsIGlt
cGxlbWVudGluZyBpdCBpbiBKUyBpcyBub3QgYmVuZWZpY2lhbC4KKyAgICAgICAgVGhpcyBwYXRj
aDoKKworICAgICAgICAxLiBNZXJnZXMgYWxtb3N0IGlkZW50aWNhbCBAY29weURhdGFQcm9wZXJ0
aWVzIHZhcmlhbnRzIGFuZCBtb3ZlcyB0aGVtIHRvIEMrKywgYXZvaWRpbmcKKyAgICAgICAgICAg
YWxsb2NhdGlvbnMgb2YgSlNBcnJheSBpbnN0YW5jZXMgYW5kIElkZW50aWZpZXIgd3JhcHBlcnMu
CisgICAgICAgIDIuIFNraXBzIG5vbi1vYnNlcnZhYmxlIFtbR2V0XV0gY2FsbHMsIGxldmVyYWdp
bmcgYHNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKWAuCisgICAgICAgIDMuIFBlcmZvcm1z
IFtbRGVmaW5lT3duUHJvcGVydHldXSB2aWEgcHV0RGlyZWN0TWF5QmVJbmRleCgpLCBzaW5jZSB0
aGUgc3BlYyBndWFyYW50ZWVzCisgICAgICAgICAgIHByb3BlcnR5IGNyZWF0aW9uIHRvIGJlIHN1
Y2Nlc3NmdWwgWzFdOiBgdGFyZ2V0YCBpcyBhbiBuZXdseSBjcmVhdGVkIG9iamVjdCB0aGF0IGlz
CisgICAgICAgICAgIG5vdCB5ZXQgYWNjZXNzaWJsZSB0byB1c2VybGFuZCBjb2RlLiBJdCdzIGlt
cG9zc2libGUgZm9yIGB0YXJnZXRgIHRvIGJlIG5vbi1leHRlbnNpYmxlCisgICAgICAgICAgIG5v
ciBoYXZlIGEgbm9uLWNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4KKyAgICAgICAgNC4gSW50cm9kdWNl
cyBhIGZhc3QgcGF0aCBzaW1pbGFyIHRvIE9iamVjdC5hc3NpZ24sIGJ1dDoKKyAgICAgICAgICAg
YSkgd2l0aCBubyBjaGVja3Mgb24gYHRhcmdldGAsIGJlY2F1c2UgaXQncyBndWFyYW50ZWVkIHRv
IGJlIGFuIGV4dGVuc2libGUgSlNGaW5hbE9iamVjdDsKKyAgICAgICAgICAgYikgd2l0aCBsZXNz
IGNoZWNrcyBvbiBgc291cmNlYCwgc2luY2Ugd2UgYXJlIHBlcmZvcm1pbmcgcHV0RGlyZWN0KCkg
YW5kIGRvbid0IGNhcmUgYWJvdXQKKyAgICAgICAgICAgICAgcmVhZC1vbmx5IHByb3BlcnRpZXMg
bm9yIF9fcHJvdG9fXy4KKworICAgICAgICBBbHRvZ2V0aGVyLCB0aGVzZSBjaGFuZ2VzIHJlc3Vs
dCBpbiAzLjF4IHNwZWVkLXVwIGZvciBvYmplY3QgcmVzdCAvIHNwcmVhZC4KKyAgICAgICAgQWxz
bywgdGhpcyBwYXRjaCByZW1vdmVzIHVubmVjZXNzYXJ5IGB0YXJnZXRgIHJldHVybiBhbmQgQGlz
T2JqZWN0IGNoZWNrLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Nl
Yy1jb3B5ZGF0YXByb3BlcnRpZXMgKHN0ZXAgNi5jLmlpLjIsIG5vdGUgdGhlICIhIiBwcmVmaXgp
CisKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBidWlsdGlu
cy9HbG9iYWxPcGVyYXRpb25zLmpzOgorICAgICAgICAoZ2xvYmFsUHJpdmF0ZS5zcGVjaWVzQ29u
c3RydWN0b3IpOgorICAgICAgICAoZ2xvYmFsUHJpdmF0ZS5jb3B5RGF0YVByb3BlcnRpZXMpOiBE
ZWxldGVkLgorICAgICAgICAoZ2xvYmFsUHJpdmF0ZS5jb3B5RGF0YVByb3BlcnRpZXNOb0V4Y2x1
c2lvbnMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVn
aXN0cnkuaDoKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFBh
dHRlcm5Ob2RlOjpiaW5kVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpPYmplY3RTcHJlYWRF
eHByZXNzaW9uTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbnRy
aW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19kZWZpbmVFbnVtZXJhYmxlV3JpdGFibGVDb25maWd1
cmFibGVEYXRhUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmNh
blBlcmZvcm1GYXN0UHJvcGVydHlFbnVtZXJhdGlvbkZvckNvcHlEYXRhUHJvcGVydGllcyk6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oOgorCiAyMDIxLTAxLTA3ICBBbGV4ZXkgU2h2YXlr
YSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBTaW1wbGlmeSBnZXQq
UHJvcGVydHlOYW1lcygpIG1ldGhvZHMgYW5kIEVudW1lcmF0aW9uTW9kZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAkocmV2aXNpb24gMjcx
MjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3Jv
KGRlZmluZVByb3BlcnR5KSBcCiAgICAgbWFjcm8oZGVmYXVsdFByb21pc2VUaGVuKSBcCiAgICAg
bWFjcm8oZ2V0T3duUHJvcGVydHlOYW1lcykgXAotICAgIG1hY3JvKG93bktleXMpIFwKICAgICBt
YWNybyhTZXQpIFwKICAgICBtYWNybyh0aHJvd1R5cGVFcnJvckZ1bmN0aW9uKSBcCiAgICAgbWFj
cm8odHlwZWRBcnJheUxlbmd0aCkgXApAQCAtMTY5LDYgKzE2OCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIG1hY3JvKGhhc093bkxlbmd0aFByb3BlcnR5KSBcCiAgICAgbWFjcm8oaW1wb3J0TW9k
dWxlKSBcCiAgICAgbWFjcm8ocHJvcGVydHlJc0VudW1lcmFibGUpIFwKKyAgICBtYWNybyhjb3B5
RGF0YVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhtZXRhKSBcCiAgICAgbWFjcm8od2ViQXNzZW1i
bHlDb21waWxlU3RyZWFtaW5nSW50ZXJuYWwpIFwKICAgICBtYWNybyh3ZWJBc3NlbWJseUluc3Rh
bnRpYXRlU3RyZWFtaW5nSW50ZXJuYWwpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9HbG9iYWxPcGVyYXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9HbG9iYWxPcGVyYXRpb25zLmpzCShyZXZpc2lvbiAyNzEyNjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvR2xvYmFsT3BlcmF0aW9ucy5qcwkod29y
a2luZyBjb3B5KQpAQCAtNzUsNTUgKzc1LDMgQEAgZnVuY3Rpb24gc3BlY2llc0NvbnN0cnVjdG9y
KG9iaiwgZGVmYXVsdAogICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgQHRocm93VHlw
ZUVycm9yKCJ8dGhpc3wuY29uc3RydWN0b3JbU3ltYm9sLnNwZWNpZXNdIGlzIG5vdCBhIGNvbnN0
cnVjdG9yIik7CiB9Ci0KLUBnbG9iYWxQcml2YXRlCi1mdW5jdGlvbiBjb3B5RGF0YVByb3BlcnRp
ZXModGFyZ2V0LCBzb3VyY2UsIGV4Y2x1ZGVkU2V0KQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQot
ICAgIGlmICghQGlzT2JqZWN0KHRhcmdldCkpCi0gICAgICAgIEB0aHJvd1R5cGVFcnJvcigidGFy
Z2V0IG5lZWRzIHRvIGJlIGFuIG9iamVjdCIpOwotCi0gICAgaWYgKEBpc1VuZGVmaW5lZE9yTnVs
bChzb3VyY2UpKQotICAgICAgICByZXR1cm4gdGFyZ2V0OwotCi0gICAgdmFyIGZyb20gPSBAdG9P
YmplY3Qoc291cmNlKTsKLSAgICB2YXIga2V5cyA9IEBvd25LZXlzKGZyb20pOwotICAgIHZhciBr
ZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzTGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgdmFyIG5leHRLZXkgPSBrZXlzW2ldOwotICAgICAgICBpZiAo
IWV4Y2x1ZGVkU2V0LkBoYXMobmV4dEtleSkpIHsKLSAgICAgICAgICAgIGlmIChAcHJvcGVydHlJ
c0VudW1lcmFibGUoZnJvbSwgbmV4dEtleSkpIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJvcFZh
bHVlID0gZnJvbVtuZXh0S2V5XTsKLSAgICAgICAgICAgICAgICBAZGVmaW5lRW51bWVyYWJsZVdy
aXRhYmxlQ29uZmlndXJhYmxlRGF0YVByb3BlcnR5KHRhcmdldCwgbmV4dEtleSwgcHJvcFZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0YXJnZXQ7
Ci19Ci0KLUBnbG9iYWxQcml2YXRlCi1mdW5jdGlvbiBjb3B5RGF0YVByb3BlcnRpZXNOb0V4Y2x1
c2lvbnModGFyZ2V0LCBzb3VyY2UpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKCFA
aXNPYmplY3QodGFyZ2V0KSkKLSAgICAgICAgQHRocm93VHlwZUVycm9yKCJ0YXJnZXQgbmVlZHMg
dG8gYmUgYW4gb2JqZWN0Iik7Ci0KLSAgICBpZiAoQGlzVW5kZWZpbmVkT3JOdWxsKHNvdXJjZSkp
Ci0gICAgICAgIHJldHVybiB0YXJnZXQ7Ci0KLSAgICB2YXIgZnJvbSA9IEB0b09iamVjdChzb3Vy
Y2UpOwotICAgIHZhciBrZXlzID0gQG93bktleXMoZnJvbSk7Ci0gICAgdmFyIGtleXNMZW5ndGgg
PSBrZXlzLmxlbmd0aDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNMZW5ndGg7IGkrKykg
ewotICAgICAgICB2YXIgbmV4dEtleSA9IGtleXNbaV07Ci0gICAgICAgIGlmIChAcHJvcGVydHlJ
c0VudW1lcmFibGUoZnJvbSwgbmV4dEtleSkpIHsKLSAgICAgICAgICAgIHZhciBwcm9wVmFsdWUg
PSBmcm9tW25leHRLZXldOwotICAgICAgICAgICAgQGRlZmluZUVudW1lcmFibGVXcml0YWJsZUNv
bmZpZ3VyYWJsZURhdGFQcm9wZXJ0eSh0YXJnZXQsIG5leHRLZXksIHByb3BWYWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGFyZ2V0OwotfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oCShyZXZpc2lvbiAyNzEyNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5
Miw2IEBAIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAgICAgbWFjcm8o
bmV3UHJvbWlzZSkgXAogICAgIG1hY3JvKGNyZWF0ZVByb21pc2UpIFwKICAgICBtYWNybyhjcmVh
dGVBcmd1bWVudHNCdXR0ZXJmbHkpIFwKLSAgICBtYWNybyhkZWZpbmVFbnVtZXJhYmxlV3JpdGFi
bGVDb25maWd1cmFibGVEYXRhUHJvcGVydHkpIFwKIAogI2RlZmluZSBKU0NfQ09NTU9OX0JZVEVD
T0RFX0lOVFJJTlNJQ19DT05TVEFOVFNfRUFDSF9OQU1FKG1hY3JvKSBcCiAgICAgSlNDX0NPTU1P
Tl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX1NJTVBMRV9FQUNIX05BTUUobWFjcm8pIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29u
c3RhbnQuaAkocmV2aXNpb24gMjcxMjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xpbmtUaW1lQ29uc3RhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICB2KHNldEJ1Y2tldEtleSwgbnVsbHB0cikgXAogICAg
IHYoc2V0UHJvdG90eXBlRGlyZWN0LCBudWxscHRyKSBcCiAgICAgdihwcm9wZXJ0eUlzRW51bWVy
YWJsZSwgbnVsbHB0cikgXAotICAgIHYob3duS2V5cywgbnVsbHB0cikgXAorICAgIHYoY29weURh
dGFQcm9wZXJ0aWVzLCBudWxscHRyKSBcCiAgICAgdihlbnF1ZXVlSm9iLCBudWxscHRyKSBcCiAg
ICAgdihtYWtlVHlwZUVycm9yLCBudWxscHRyKSBcCiAgICAgdihBZ2dyZWdhdGVFcnJvciwgbnVs
bHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMjcxMjY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
Nzc4LDIwICsxNzc4LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0
XwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseShnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpKTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVJ
bnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19kZWZpbmVFbnVtZXJhYmxlV3JpdGFibGVDb25m
aWd1cmFibGVEYXRhUHJvcGVydHkoSlNDOjpCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBK
U0M6OlJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBBcmd1bWVudExpc3ROb2RlKiBub2RlID0gbV9h
cmdzLT5tX2xpc3ROb2RlOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmogPSBnZW5lcmF0
b3IuZW1pdE5vZGUobm9kZSk7Ci0gICAgbm9kZSA9IG5vZGUtPm1fbmV4dDsKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9k
ZSk7Ci0gICAgbm9kZSA9IG5vZGUtPm1fbmV4dDsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFs
dWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZSk7Ci0gICAgQVNTRVJUKCFub2RlLT5tX25leHQp
OwotCi0gICAgZ2VuZXJhdG9yLmVtaXRDYWxsRGVmaW5lUHJvcGVydHkobmV3T2JqLmdldCgpLCBw
cm9wZXJ0eU5hbWVSZWdpc3Rlci5nZXQoKSwgdmFsdWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIs
IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcm9wZXJ0eUNvbmZpZ3VyYWJsZSB8IEJ5dGVjb2RlR2VuZXJh
dG9yOjpQcm9wZXJ0eVdyaXRhYmxlIHwgQnl0ZWNvZGVHZW5lcmF0b3I6OlByb3BlcnR5RW51bWVy
YWJsZSwgbV9wb3NpdGlvbik7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQogI2RlZmluZSBKU0NfREVD
TEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBcCiAgICAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY18jI25hbWUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KSBcCiAgICAgeyBc
CkBAIC01MzU4LDkgKzUzNDQsOCBAQCB2b2lkIE9iamVjdFBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUo
Qnl0ZWNvCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lz
dGVyKDIpLCBleGNsdWRlZFNldFJlZy5nZXQoKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7
Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmVzdWx0LmdldCgpLCBjb3B5RGF0YVBy
b3BlcnRpZXMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwotICAgICAgICAgICAgdGFy
Z2V0LnBhdHRlcm4tPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHJlc3VsdC5nZXQoKSk7CisgICAgICAg
ICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBjb3B5RGF0
YVByb3BlcnRpZXMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworICAgICAgICAgICAg
dGFyZ2V0LnBhdHRlcm4tPmJpbmRWYWx1ZShnZW5lcmF0b3IsIG5ld09iamVjdC5nZXQoKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTU1NjksOCArNTU1NCw3IEBAIFJlZ2lzdGVySUQqIE9iamVj
dFNwcmVhZEV4cHJlc3Npb25Ob2RlOjoKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShzcmMuZ2V0KCks
IG1fZXhwcmVzc2lvbik7CiAgICAgCi0gICAgLy8gbG9hZCBhbmQgY2FsbCBAY29weURhdGFQcm9w
ZXJ0aWVzTm9FeGNsdXNpb25zCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvcHlEYXRhUHJvcGVy
dGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChudWxscHRyLCBMaW5rVGltZUNv
bnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXNOb0V4Y2x1c2lvbnMpOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBjb3B5RGF0YVByb3BlcnRpZXMgPSBnZW5lcmF0b3IubW92ZUxpbmtUaW1lQ29uc3Rh
bnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6Y29weURhdGFQcm9wZXJ0aWVzKTsKICAgICAK
ICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBudWxscHRyLCAyKTsKICAgICBnZW5l
cmF0b3IuZW1pdExvYWQoYXJncy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzEyNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODksOCArMTE4OSw4IEBAIGNhcGl0
YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMKICAgICBtX2xpbmtUaW1lQ29uc3Rh
bnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojpwcm9wZXJ0eUlzRW51
bWVyYWJsZSldLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5pdCkg
ewogICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGpzQ2Fz
dDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1By
b3BlcnR5SXNFbnVtZXJhYmxlKSk7CiAgICAgICAgIH0pOwotICAgIG1fbGlua1RpbWVDb25zdGFu
dHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6Om93bktleXMpXS5pbml0
TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKLSAgICAgICAgICAg
IGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNPd25LZXlzKSk7CisgICAg
bV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFu
dDo6Y29weURhdGFQcm9wZXJ0aWVzKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxK
U0NlbGw+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUo
aW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDIsIFN0cmluZygp
LCBnbG9iYWxGdW5jQ29weURhdGFQcm9wZXJ0aWVzKSk7CiAgICAgICAgIH0pOwogICAgIG1fbGlu
a1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OmVu
cXVldWVKb2IpXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQp
IHsKICAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwgImVucXVldWVKb2IiX3MsIGVucXVl
dWVKb2IpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTI2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODM5LDEzICs4MzksMTIyIEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihnbG9iYWxGdW5jUHJvcGUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihlbnVtZXJhYmxlKSk7CiB9CiAKLUpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5j
T3duS2V5cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKSkKK3N0YXRpYyBib29sIGNhblBlcmZvcm1GYXN0UHJvcGVydHlFbnVtZXJhdGlvbkZvckNv
cHlEYXRhUHJvcGVydGllcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoc3RydWN0
dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNBbnlG
b3JtT2ZHZXRPd25Qcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAv
LyBGSVhNRTogSW5kZXhlZCBwcm9wZXJ0aWVzIGNhbiBiZSBoYW5kbGVkLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUzNTgKKyAgICBpZiAoaGFzSW5k
ZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5oYXNDdXN0b21HZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7Cit9OworCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2Vj
LWNvcHlkYXRhcHJvcGVydGllcworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmND
b3B5RGF0YVByb3BlcnRpZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU09iamVjdCogb2Jq
ZWN0ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhnbG9i
YWxPYmplY3QsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUsIFdURjo6bnVsbG9wdCkpKTsKKworICAgIEpT
T2JqZWN0KiB0YXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4odm0sIHRhcmdldCkp
OworICAgIEFTU0VSVCh0YXJnZXQtPmlzU3RydWN0dXJlRXh0ZW5zaWJsZSh2bSkpOworCisgICAg
SlNWYWx1ZSBzb3VyY2VWYWx1ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7Cisg
ICAgaWYgKHNvdXJjZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBKU09iamVjdCogc291cmNlID0gc291cmNlVmFsdWUudG9PYmplY3QoZ2xvYmFs
T2JqZWN0KTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgSlNTZXQqIGV4
Y2x1ZGVkU2V0ID0gbnVsbHB0cjsKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PiAyKQorICAgICAgICBleGNsdWRlZFNldCA9IGpzQ2FzdDxKU1NldCo+KGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMikpOworCisgICAgYXV0byBpc1Byb3BlcnR5TmFtZUV4Y2x1ZGVkID0g
WyZdIChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSB7CisgICAgICAgIEFTU0VSVCghcHJvcGVy
dHlOYW1lLmlzUHJpdmF0ZU5hbWUoKSk7CisgICAgICAgIGlmICghZXhjbHVkZWRTZXQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1
ZSA9IGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3Bl
cnR5TmFtZS51aWQoKSkpOworICAgICAgICByZXR1cm4gZXhjbHVkZWRTZXQtPmhhcyhnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZVZhbHVlKTsKKyAgICB9OworCisgICAgaWYgKCFzb3VyY2UtPnN0
YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHZtKSkgeworICAgICAgICBzb3VyY2UtPnJlaWZ5QWxsU3Rh
dGljUHJvcGVydGllcyhnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgIH0KKworICAgIGlmIChjYW5QZXJmb3JtRmFzdFByb3BlcnR5RW51
bWVyYXRpb25Gb3JDb3B5RGF0YVByb3BlcnRpZXMoc291cmNlLT5zdHJ1Y3R1cmUodm0pKSkgewor
ICAgICAgICBWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgOD4gcHJvcGVydGllczsK
KyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgdmFsdWVzOworCisgICAgICAgIC8vIEZJWE1F
OiBJdCBkb2Vzbid0IHNlZW0gbGlrZSB3ZSBzaG91bGQgaGF2ZSB0byBkbyB0aGlzIGluIHR3byBw
aGFzZXMsIGJ1dAorICAgICAgICAvLyB3ZSdyZSBydW5uaW5nIGludG8gY3Jhc2hlcyB3aGVyZSBp
dCBhcHBlYXJzIHRoYXQgc291cmNlIGlzIHRyYW5zaXRpb25pbmcKKyAgICAgICAgLy8gdW5kZXIg
dXMsIGFuZCBldmVuIGVuZHMgdXAgaW4gYSBzdGF0ZSB3aGVyZSBpdCBoYXMgYSBudWxsIGJ1dHRl
cmZseS4gTXkKKyAgICAgICAgLy8gbGVhZGluZyBoeXBvdGhlc2lzIGhlcmUgaXMgdGhhdCB3ZSBm
aXJlIHNvbWUgdmFsdWUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludAorICAgICAgICAvLyB0aGF0IGVu
ZHMgdXAgdHJhbnNpdGlvbmluZyB0aGUgc3RydWN0dXJlIHVuZGVybmVhdGggdXMuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODc4MzcKKworICAg
ICAgICAvLyBEbyBub3QgY2xlYXIgc2luY2UgVmVjdG9yOjpjbGVhciBzaHJpbmtzIHRoZSBiYWNr
aW5nIHN0b3JlLgorICAgICAgICBwcm9wZXJ0aWVzLnJlc2l6ZSgwKTsKKyAgICAgICAgdmFsdWVz
LmNsZWFyKCk7CisgICAgICAgIHNvdXJjZS0+c3RydWN0dXJlKHZtKS0+Zm9yRWFjaFByb3BlcnR5
KHZtLCBbJl0gKGNvbnN0IFByb3BlcnR5TWFwRW50cnkmIGVudHJ5KSAtPiBib29sIHsKKyAgICAg
ICAgICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUoZW50cnkua2V5KTsKKyAgICAgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUuaXNQcml2YXRlTmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgaWYgKGlzUHJvcGVydHlOYW1lRXhjbHVkZWQocHJvcGVydHlO
YW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChlbnRy
eS5hdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChlbnRyeS5r
ZXkpOworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coc291cmNl
LT5nZXREaXJlY3QoZW50cnkub2Zmc2V0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgcHV0IHByb3BlcnRp
ZXMgaW4gYSBiYXRjaGluZyBtYW5uZXIgdG8gYWNjZWxlcmF0ZSBDb3B5RGF0YVByb3BlcnRpZXMg
bW9yZS4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODUzNTgKKyAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0KHZtLCBwcm9wZXJ0aWVz
W2ldLmdldCgpLCB2YWx1ZXMuYXQoaSkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAg
c291cmNlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMoc291cmNlLCBnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgcHJvcGVydHlOYW1lIDogcHJvcGVydHlOYW1lcykgeworICAgICAgICAg
ICAgaWYgKGlzUHJvcGVydHlOYW1lRXhjbHVkZWQocHJvcGVydHlOYW1lKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qoc291cmNlLCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOworICAgICAg
ICAgICAgYm9vbCBoYXNQcm9wZXJ0eSA9IHNvdXJjZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Q
cm9wZXJ0eVNsb3Qoc291cmNlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAg
aWYgKCFoYXNQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKKyAg
ICAgICAgICAgIGlmIChMSUtFTFkoIXNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKSkpCisg
ICAgICAgICAgICAgICAgdmFsdWUgPSBzbG90LmdldFZhbHVlKGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNvdXJj
ZS0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0
TWF5QmVJbmRleChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGdsb2JhbEZ1bmNEYXRlVGltZUZvcm1hdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMjcx
MjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGdsb2JhbEZ1bmNCdWlsCiBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGdsb2Jh
bEZ1bmNCdWlsdGluRGVzY3JpYmUpOwogSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihnbG9iYWxG
dW5jSW1wb3J0TW9kdWxlKTsKIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY1By
b3BlcnR5SXNFbnVtZXJhYmxlKTsKLUpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVu
Y093bktleXMpOworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jQ29weURhdGFQ
cm9wZXJ0aWVzKTsKIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0RhdGVUaW1l
Rm9ybWF0KTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIGpzVG9OdW1iZXIoU3RyaW5nVmll
dyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417229</attachid>
            <date>2021-01-07 17:17:05 -0800</date>
            <delta_ts>2021-01-08 14:22:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193618-20210108031703.patch</filename>
            <type>text/plain</type>
            <size>30884</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzEyNjkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDIxLTAxLTA3ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgQGNvcHlEYXRhUHJvcGVydGllcyBpbiBD
KysgdG8gb3B0aW1pemUgb2JqZWN0IHJlc3QgLyBzcHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzYxOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0
LWRlc3RydWN0dXJpbmcuanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9vYmpl
Y3Qtc3ByZWFkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3Mvb2JqZWN0LXJlc3QtZGVjb25z
dHJ1Y3QuanM6CisgICAgICAgICogc3RyZXNzL29iamVjdC1zcHJlYWQuanM6CisKIDIwMjEtMDEt
MDcgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFtK
U0NdIFNpbXBsaWZ5IGdldCpQcm9wZXJ0eU5hbWVzKCkgbWV0aG9kcyBhbmQgRW51bWVyYXRpb25N
b2RlCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9vYmplY3QtcmVzdC1kZXN0cnVjdHVy
aW5nLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0
LWRlc3RydWN0dXJpbmcuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFy
a3Mvb2JqZWN0LXJlc3QtZGVzdHJ1Y3R1cmluZy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG9iaiA9IHsgYTogMCwgYjogMCwgYzogMCwg
ZDogMSwgZTogMCwgZjogMCwgZzogMCwgaDogMCwgaTogMCwgajogMCB9OworICAgIHZhciBhY2Mg
PSAwOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7IGkrKykgeworICAgICAgICB2YXIg
eyBhLCBiLCBjLCAuLi5yZXN0IH0gPSBvYmo7CisgICAgICAgIGFjYyArPSByZXN0LmQ7CisgICAg
fQorCisgICAgaWYgKGFjYyAhPT0gMWU1KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBh
c3NlcnRpb24hIik7Cit9KSgpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0
LXNwcmVhZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9vYmplY3Qt
c3ByZWFkLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVj
dC1zcHJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorKGZ1bmN0aW9uKCkg
eworICAgIHZhciBvYmogPSB7IGE6IDEsIGI6IDIsIGM6IDMsIGQ6IDAsIGU6IDAsIGY6IDAsIGc6
IDAsIGg6IDAsIGk6IDAsIGo6IDAgfTsKKyAgICB2YXIgYWNjID0gMDsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyBpKyspCisgICAgICAgIGFjYyArPSAoeyBhOiAwLCBiOiAwLCBjOiAw
LCAuLi5vYmogfSkuYTsKKworICAgIGlmIChhY2MgIT09IDFlNSkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL29i
amVjdC1yZXN0LWRlY29uc3RydWN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL29i
amVjdC1yZXN0LWRlY29uc3RydWN0LmpzCShyZXZpc2lvbiAyNzEyNjcpCisrKyBKU1Rlc3RzL3N0
cmVzcy9vYmplY3QtcmVzdC1kZWNvbnN0cnVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMyw4ICsz
LDE1IEBAIGxldCBhc3NlcnQgPSAoZSkgPT4gewogICAgICAgICB0aHJvdyBFcnJvcigiQmFkIGFz
c2VydGlvbiEiKTsKIH0KIAotbGV0IGFzc2VydFByb3BEZXNjcmlwdG9yID0gKHJlc3RPYmosIHBy
b3ApID0+IHsKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAo
YWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgdmFsdWU6
ICR7YWN0dWFsfSFgKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0RGF0YVByb3BlcnR5KHJlc3RPYmos
IHByb3AsIHZhbHVlKSB7CisgICAgc2hvdWxkQmUocmVzdE9ialtwcm9wXSwgdmFsdWUpOwogICAg
IGxldCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyZXN0T2JqLCBwcm9w
KTsKKyAgICBzaG91bGRCZShkZXNjLnZhbHVlLCB2YWx1ZSk7CiAgICAgYXNzZXJ0KGRlc2MuZW51
bWVyYWJsZSk7CiAgICAgYXNzZXJ0KGRlc2Mud3JpdGFibGUpOwogICAgIGFzc2VydChkZXNjLmNv
bmZpZ3VyYWJsZSk7CkBAIC0xOSwxMSArMjYsOCBAQCBsZXQgYXNzZXJ0UHJvcERlc2NyaXB0b3Ig
PSAocmVzdE9iaiwgcHJvCiAgICAgYXNzZXJ0KGEgPT09IDUpOwogICAgIGFzc2VydChiID09PSAz
KTsKIAotICAgIGFzc2VydChyZXN0LnggPT09IDEpOwotICAgIGFzc2VydChyZXN0LnkgPT09IDIp
OwotCi0gICAgYXNzZXJ0UHJvcERlc2NyaXB0b3IocmVzdCwgJ3gnKTsKLSAgICBhc3NlcnRQcm9w
RGVzY3JpcHRvcihyZXN0LCAneScpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShyZXN0LCAneCcs
IDEpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShyZXN0LCAneScsIDIpOwogfSkoKTsKIAogLy8g
RW1wdHkgT2JqZWN0CkBAIC0xMDEsOCArMTA1LDcgQEAgbGV0IGFzc2VydFByb3BEZXNjcmlwdG9y
ID0gKHJlc3RPYmosIHBybwogICAgIGFzc2VydChhID09PSAzKTsKICAgICBhc3NlcnQoYiA9PT0g
NCk7CiAKLSAgICBhc3NlcnQocmVzdC54ID09PSAzKTsKLSAgICBhc3NlcnRQcm9wRGVzY3JpcHRv
cihyZXN0LCAneCcpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShyZXN0LCAneCcsIDMpOwogfSko
KTsKIAogLy8gU2tpcCBub24tZW51bWVyYWJsZSBjYXNlCkBAIC0xMjgsOCArMTMxLDggQEAgbGV0
IGFzc2VydFByb3BEZXNjcmlwdG9yID0gKHJlc3RPYmosIHBybwogICAgIGFzc2VydChyZXN0LmEg
PT09IDMpOwogICAgIGFzc2VydChyZXN0LmIgPT09IDQpOwogCi0gICAgYXNzZXJ0UHJvcERlc2Ny
aXB0b3IocmVzdCwgJ2EnKTsKLSAgICBhc3NlcnRQcm9wRGVzY3JpcHRvcihyZXN0LCAnYicpOwor
ICAgIGFzc2VydERhdGFQcm9wZXJ0eShyZXN0LCAnYScsIDMpOworICAgIGFzc2VydERhdGFQcm9w
ZXJ0eShyZXN0LCAnYicsIDQpOwogfSkoKTsKIAogLy8gRGVzdHJ1Y3R1cmluZyBmdW5jdGlvbiBw
YXJhbWV0ZXIKQEAgLTIzNSwzICsyMzgsMTI2IEBAIGxldCBhc3NlcnRQcm9wRGVzY3JpcHRvciA9
IChyZXN0T2JqLCBwcm8KICAgICB9CiB9KSgpOwogCisoZnVuY3Rpb24gbm9uRW51bWVyYWJsZVN5
bWJvbCgpIHsKKyAgICB2YXIgX19zMCA9IFN5bWJvbCgiczAiKTsKKyAgICB2YXIgX19zMSA9IFN5
bWJvbCgiczEiKTsKKworICAgIHZhciBzb3VyY2UgPSB7fTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydGllcyhzb3VyY2UsIHsKKyAgICAgICAgW19fczBdOiB7dmFsdWU6IDAsIGVudW1lcmFibGU6
IGZhbHNlfSwKKyAgICAgICAgW19fczFdOiB7dmFsdWU6IDEsIGVudW1lcmFibGU6IGZhbHNlfSwK
KyAgICB9KTsKKworICAgIHZhciB7W19fczBdOiBzMCwgLi4udGFyZ2V0fSA9IHNvdXJjZTsKKwor
ICAgIHNob3VsZEJlKHMwLCAwKTsKKyAgICBhc3NlcnQoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5
bWJvbHModGFyZ2V0KS5sZW5ndGgpOworfSkoKTsKKworKGZ1bmN0aW9uIGR1bmRlclByb3RvKCkg
eworICAgIHZhciBzb3VyY2UgPSB7fTsKKyAgICB2YXIgcHJvdG9WYWx1ZSA9IHt9OworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2UsICJfX3Byb3RvX18iLCB7dmFsdWU6IHByb3RvVmFs
dWUsIGVudW1lcmFibGU6IHRydWV9KTsKKyAgICB2YXIgey4uLnRhcmdldH0gPSBzb3VyY2U7CisK
KyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiX19wcm90b19fIiwgcHJvdG9WYWx1ZSk7
CisgICAgc2hvdWxkQmUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCksIE9iamVjdC5wcm90
b3R5cGUpOworfSkoKTsKKworKGZ1bmN0aW9uIHN0cmluZ1ByaW1pdGl2ZSgpIHsKKyAgICB2YXIg
c291cmNlID0gIjAxMiI7CisgICAgdmFyIHswOiBhLCBbIjIiXTogYywgLi4udGFyZ2V0fSA9IHNv
dXJjZTsKKworICAgIHNob3VsZEJlKGEsICIwIik7CisgICAgc2hvdWxkQmUoYywgIjIiKTsKKyAg
ICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAxLCAiMSIpOworICAgIHNob3VsZEJlKE9iamVj
dC5rZXlzKHRhcmdldCkuam9pbigpLCAiMSIpOworfSkoKTsKKworKGZ1bmN0aW9uIFByb3h5T2Jq
ZWN0KCkgeworICAgIHZhciBfX3MwID0gU3ltYm9sKCJzMCIpOworICAgIHZhciBfX3MxID0gU3lt
Ym9sKCJzMSIpOworCisgICAgdmFyIG93bktleXNDYWxscyA9IDA7CisgICAgdmFyIGdvcGRDYWxs
cyA9IFtdOworICAgIHZhciBnZXRDYWxscyA9IFtdOworCisgICAgdmFyIHNvdXJjZSA9IG5ldyBQ
cm94eSh7CisgICAgICAgIFtfX3MwXTogInMwIiwgW19fczFdOiAiczEiLAorICAgICAgICBhOiAw
LCBiOiAxLCBjOiAyLCBkOiAzLAorICAgIH0sIHsKKyAgICAgICAgb3duS2V5czogKHQpID0+IHsK
KyAgICAgICAgICAgICsrb3duS2V5c0NhbGxzOworICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Qu
b3duS2V5cyh0KTsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
OiAodCwga2V5KSA9PiB7CisgICAgICAgICAgICBnb3BkQ2FsbHMucHVzaChrZXkpOworICAgICAg
ICAgICAgdmFyIGRlc2MgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCBrZXkp
OworICAgICAgICAgICAgaWYgKGtleSA9PT0gImIiIHx8IGtleSA9PT0gX19zMCkKKyAgICAgICAg
ICAgICAgICBkZXNjLmVudW1lcmFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBkZXNj
OworICAgICAgICB9LAorICAgICAgICBnZXQ6ICh0LCBrZXksIHJlY2VpdmVyKSA9PiB7CisgICAg
ICAgICAgICBnZXRDYWxscy5wdXNoKGtleSk7CisgICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5n
ZXQodCwga2V5LCByZWNlaXZlcik7CisgICAgICAgIH0sCisgICAgfSk7CisKKyAgICB2YXIge2Ms
IFsiZCJdOiBkLCAuLi50YXJnZXR9ID0gc291cmNlOworCisgICAgc2hvdWxkQmUob3duS2V5c0Nh
bGxzLCAxKTsKKyAgICBzaG91bGRCZShnb3BkQ2FsbHMubWFwKFN0cmluZykuam9pbigpLCAiYSxi
LFN5bWJvbChzMCksU3ltYm9sKHMxKSIpOworICAgIHNob3VsZEJlKGdldENhbGxzLm1hcChTdHJp
bmcpLmpvaW4oKSwgImMsZCxhLFN5bWJvbChzMSkiKTsKKworICAgIGFzc2VydERhdGFQcm9wZXJ0
eSh0YXJnZXQsICJhIiwgMCk7CisgICAgc2hvdWxkQmUoYywgMik7CisgICAgc2hvdWxkQmUoZCwg
Myk7CisgICAgc2hvdWxkQmUoT2JqZWN0LmtleXModGFyZ2V0KS5qb2luKCksICJhIik7CisKKyAg
ICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KTsKKyAg
ICBzaG91bGRCZShzeW1ib2xzWzBdLCBfX3MxKTsKKyAgICBzaG91bGRCZShzeW1ib2xzLmxlbmd0
aCwgMSk7Cit9KSgpOworCisoZnVuY3Rpb24gaW5kZXhlZFByb3BlcnRpZXMoKSB7CisgICAgdmFy
IHNvdXJjZSA9IFswLCAxLCAyLCAzXTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNl
LCAiMSIsIHtlbnVtZXJhYmxlOiBmYWxzZX0pOworICAgIHZhciB7MjogYywgWyIzIl06IGQsIC4u
LnRhcmdldH0gPSBzb3VyY2U7CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiMCIs
IDApOworICAgIHNob3VsZEJlKE9iamVjdC5rZXlzKHRhcmdldCkuam9pbigpLCAiMCIpOworfSko
KTsKKworKGZ1bmN0aW9uIEN1c3RvbUFjY2Vzc29yKCkgeworICAgIHZhciBzb3VyY2UgPSAkdm0u
Y3JlYXRlQ3VzdG9tVGVzdEdldHRlclNldHRlcigpOworICAgIHZhciB7Y3VzdG9tVmFsdWVHbG9i
YWxPYmplY3QsIC4uLnRhcmdldH0gPSBzb3VyY2U7CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHko
dGFyZ2V0LCAiY3VzdG9tVmFsdWUiLCBzb3VyY2UpOworICAgIGFzc2VydCghdGFyZ2V0Lmhhc093
blByb3BlcnR5KCJjdXN0b21WYWx1ZUdsb2JhbE9iamVjdCIpKTsKKyAgICBzaG91bGRCZShjdXN0
b21WYWx1ZUdsb2JhbE9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddLCAiZ2xvYmFsIik7CisgICAg
YXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgImN1c3RvbUFjY2Vzc29yIiwgc291cmNlKTsKKyAg
ICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiY3VzdG9tQWNjZXNzb3JHbG9iYWxPYmplY3Qi
LCBjdXN0b21WYWx1ZUdsb2JhbE9iamVjdCk7Cit9KSgpOworCisoZnVuY3Rpb24gQ3VzdG9tQWNj
ZXNzb3JJbk5vblJlaWZpZWRQcm9wZXJ0eVRhYmxlKCkgeworICAgIC8vIG1ha2Ugc3VyZSB3ZSBy
ZWlmeUFsbFN0YXRpY1Byb3BlcnRpZXMoKSBiZWZvcmUgZGVjaWRpbmcgb24gdGhlIGZhc3Qvc2xv
dyBwYXRoCisKKyAgICB2YXIgc291cmNlID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29y
KCk7CisgICAgc291cmNlLnRlc3RGaWVsZCA9IDQyOworICAgIHZhciB7Li4udGFyZ2V0fSA9IHNv
dXJjZTsKKworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsICJ0ZXN0RmllbGQiLCA0Mik7
CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgInRlc3RTdGF0aWNBY2Nlc3NvciIsIDQy
KTsKK30pKCk7CisKKyhmdW5jdGlvbiB1bmNhY2hlYWJsZURpY3Rpb25hcnkoKSB7CisgICAgdmFy
IHNvdXJjZSA9IHthOiAwLCBiOiAxLCBjOiAyLCBkOiAzfTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoc291cmNlLCAiYyIsIHtlbnVtZXJhYmxlOiBmYWxzZX0pOworICAgICR2bS50b1VuY2Fj
aGVhYmxlRGljdGlvbmFyeShzb3VyY2UpOworICAgIHZhciB7YiwgWyJkIl06IGQsIC4uLnRhcmdl
dH0gPSBzb3VyY2U7CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYSIsIDApOwor
ICAgIHNob3VsZEJlKGIsIDEpOworICAgIHNob3VsZEJlKGQsIDMpOworICAgIHNob3VsZEJlKE9i
amVjdC5rZXlzKHRhcmdldCkuam9pbigpLCAiYSIpOworfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL29iamVjdC1zcHJlYWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mvb2JqZWN0
LXNwcmVhZC5qcwkocmV2aXNpb24gMjcxMjY3KQorKysgSlNUZXN0cy9zdHJlc3Mvb2JqZWN0LXNw
cmVhZC5qcwkod29ya2luZyBjb3B5KQpAQCAtNywxMiArNywxOCBAQCBhc3NlcnQuc2FtZVZhbHVl
ID0gKGEsIGIpID0+ICB7CiAgICAgYXNzZXJ0KGEgPT09IGIpOwogfQogCi1mdW5jdGlvbiB2YWxp
ZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvLCBwKSB7Ci0gICAgbGV0IGRlc2MgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sIHApOworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBl
eHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoYEJhZCB2YWx1ZTogJHthY3R1YWx9IWApOworfQogCitmdW5jdGlvbiBhc3NlcnRE
YXRhUHJvcGVydHkodGFyZ2V0LCBwcm9wLCB2YWx1ZSkgeworICAgIHNob3VsZEJlKHRhcmdldFtw
cm9wXSwgdmFsdWUpOworICAgIGxldCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0YXJnZXQsIHByb3ApOworICAgIHNob3VsZEJlKGRlc2MudmFsdWUsIHZhbHVlKTsKICAg
ICBhc3NlcnQoZGVzYy5lbnVtZXJhYmxlKTsKLSAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFibGUp
OwogICAgIGFzc2VydChkZXNjLndyaXRhYmxlKTsKKyAgICBhc3NlcnQoZGVzYy5jb25maWd1cmFi
bGUpOwogfQogCiAvLyBCYXNlIGNhc2VzCkBAIC0yMiwxMCArMjgsOCBAQCBmdW5jdGlvbiB2YWxp
ZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvLCBwCiAKICAgICBhc3NlcnQuc2FtZVZhbHVlKG9iai5h
LCAxKTsKICAgICBhc3NlcnQob2JqLmIsIDIpOwotICAgIGFzc2VydChvYmouYywgMyk7Ci0gICAg
YXNzZXJ0KG9iai5kLCA0KTsKLSAgICB2YWxpZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmosICJj
Iik7Ci0gICAgdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiZCIpOworICAgIGFzc2Vy
dERhdGFQcm9wZXJ0eShvYmosICJjIiwgMyk7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KG9iaiwg
ImQiLCA0KTsKICAgICBhc3NlcnQoT2JqZWN0LmtleXMob2JqKSwgMik7CiB9KSgpOwogCkBAIC0z
MywxNiArMzcsMTEgQEAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3IobywgcAog
ICAgIGxldCBvID0ge2M6IDMsIGQ6IDR9OwogICAgIGxldCBvYmogPSB7YTogMSwgYjogMiwgLi4u
b307CiAKLSAgICBhc3NlcnQuc2FtZVZhbHVlKG9iai5hLCAxKTsKLSAgICBhc3NlcnQuc2FtZVZh
bHVlKG9iai5iLCAyKTsKLSAgICBhc3NlcnQuc2FtZVZhbHVlKG9iai5jLCAzKTsKLSAgICBhc3Nl
cnQuc2FtZVZhbHVlKG9iai5kLCA0KTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkob2JqLCAiYSIs
IDEpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eShvYmosICJiIiwgMik7CisgICAgYXNzZXJ0RGF0
YVByb3BlcnR5KG9iaiwgImMiLCAzKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkob2JqLCAiZCIs
IDQpOwogICAgIGFzc2VydC5zYW1lVmFsdWUoT2JqZWN0LmtleXMob2JqKS5sZW5ndGgsIDQpOwot
Ci0gICAgdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiYSIpOwotICAgIHZhbGlkYXRl
UHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgImIiKTsKLSAgICB2YWxpZGF0ZVByb3BlcnR5RGVzY3Jp
cHRvcihvYmosICJjIik7Ci0gICAgdmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiZCIp
OwogfSkoKTsKIAogKCgpID0+IHsKQEAgLTEyOCwxMiArMTI3LDEwIEBAIGZ1bmN0aW9uIHZhbGlk
YXRlUHJvcGVydHlEZXNjcmlwdG9yKG8sIHAKIAogICAgIGxldCBvYmogPSB7Li4ubywgYzogNCwg
ZDogNX07CiAKLSAgICBhc3NlcnQuc2FtZVZhbHVlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3Iob2JqLCAiYSIpLnZhbHVlLCA0Mik7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KG9iaiwg
ImEiLCA0Mik7CiAgICAgYXNzZXJ0LnNhbWVWYWx1ZShvYmouYywgNCk7CiAgICAgYXNzZXJ0LnNh
bWVWYWx1ZShvYmouZCwgNSk7CiAgICAgYXNzZXJ0LnNhbWVWYWx1ZShPYmplY3Qua2V5cyhvYmop
Lmxlbmd0aCwgMyk7Ci0KLSAgICB2YWxpZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmosICJhIik7
CiB9KSgpOwogCiAoKCkgPT4gewpAQCAtMjIzLDEwICsyMjAsOCBAQCBmdW5jdGlvbiB2YWxpZGF0
ZVByb3BlcnR5RGVzY3JpcHRvcihvLCBwCiAKICAgICBsZXQgb2JqID0gey4uLm8sIGE6IDN9Owog
Ci0gICAgYXNzZXJ0LnNhbWVWYWx1ZShvYmouYSwgMykKLSAgICBhc3NlcnQuc2FtZVZhbHVlKG9i
ai5iLCAyKTsKLSAgICB2YWxpZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmosICJhIik7Ci0gICAg
dmFsaWRhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiYiIpOworICAgIGFzc2VydERhdGFQcm9w
ZXJ0eShvYmosICJhIiwgMyk7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KG9iaiwgImIiLCAyKTsK
IH0pKCk7CiAKIC8vIFNldHRlcgpAQCAtMzExLDMgKzMwNiwxMTkgQEAgZnVuY3Rpb24gdmFsaWRh
dGVQcm9wZXJ0eURlc2NyaXB0b3IobywgcAogICAgIGFzc2VydChleGVjdXRlZFNldHRlcik7CiB9
KSgpOwogCisoZnVuY3Rpb24gbm9uRW51bWVyYWJsZVN5bWJvbCgpIHsKKyAgICB2YXIgX19zMCA9
IFN5bWJvbCgiczAiKTsKKyAgICB2YXIgc291cmNlID0ge307CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXMoc291cmNlLCB7CisgICAgICAgIFtfX3MwXToge3ZhbHVlOiAwLCBlbnVtZXJhYmxl
OiBmYWxzZX0sCisgICAgfSk7CisKKyAgICB2YXIgdGFyZ2V0ID0ge1tfX3MwXTogMSwgLi4udGFy
Z2V0fTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCBfX3MwLCAxKTsKK30pKCk7CisK
KyhmdW5jdGlvbiBkdW5kZXJQcm90bygpIHsKKyAgICB2YXIgc291cmNlID0ge307CisgICAgdmFy
IHByb3RvVmFsdWUgPSB7fTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNlLCAiX19w
cm90b19fIiwge3ZhbHVlOiBwcm90b1ZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlfSk7CisgICAgdmFy
IHRhcmdldCA9IHsuLi5zb3VyY2V9OworCisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwg
Il9fcHJvdG9fXyIsIHByb3RvVmFsdWUpOworICAgIHNob3VsZEJlKE9iamVjdC5nZXRQcm90b3R5
cGVPZih0YXJnZXQpLCBPYmplY3QucHJvdG90eXBlKTsKK30pKCk7CisKKyhmdW5jdGlvbiBzdHJp
bmdQcmltaXRpdmUoKSB7CisgICAgdmFyIHNvdXJjZSA9ICIwMTIiOworICAgIHZhciB0YXJnZXQg
PSB7Z2V0IDAoKSB7fSwgWyIyIl06IDIyLCAuLi5zb3VyY2V9OworCisgICAgYXNzZXJ0RGF0YVBy
b3BlcnR5KHRhcmdldCwgMCwgIjAiKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAx
LCAiMSIpOworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsIDIsICIyIik7CisgICAgc2hv
dWxkQmUoT2JqZWN0LmtleXModGFyZ2V0KS5qb2luKCksICIwLDEsMiIpOworfSkoKTsKKworKGZ1
bmN0aW9uIFByb3h5T2JqZWN0KCkgeworICAgIHZhciBfX3MwID0gU3ltYm9sKCJzMCIpOworICAg
IHZhciBfX3MxID0gU3ltYm9sKCJzMSIpOworCisgICAgdmFyIG93bktleXNDYWxscyA9IDA7Cisg
ICAgdmFyIGdvcGRDYWxscyA9IFtdOworICAgIHZhciBnZXRDYWxscyA9IFtdOworCisgICAgdmFy
IHNvdXJjZSA9IG5ldyBQcm94eSh7CisgICAgICAgIFtfX3MwXTogInMwIiwgW19fczFdOiAiczEi
LAorICAgICAgICBhOiAwLCBiOiAxLCBjOiAyLCBkOiAzLAorICAgIH0sIHsKKyAgICAgICAgb3du
S2V5czogKHQpID0+IHsKKyAgICAgICAgICAgICsrb3duS2V5c0NhbGxzOworICAgICAgICAgICAg
cmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0KTsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yOiAodCwga2V5KSA9PiB7CisgICAgICAgICAgICBnb3BkQ2FsbHMucHVz
aChrZXkpOworICAgICAgICAgICAgdmFyIGRlc2MgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcih0LCBrZXkpOworICAgICAgICAgICAgaWYgKGtleSA9PT0gImIiIHx8IGtleSA9PT0g
X19zMCkKKyAgICAgICAgICAgICAgICBkZXNjLmVudW1lcmFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBkZXNjOworICAgICAgICB9LAorICAgICAgICBnZXQ6ICh0LCBrZXksIHJlY2Vp
dmVyKSA9PiB7CisgICAgICAgICAgICBnZXRDYWxscy5wdXNoKGtleSk7CisgICAgICAgICAgICBy
ZXR1cm4gUmVmbGVjdC5nZXQodCwga2V5LCByZWNlaXZlcik7CisgICAgICAgIH0sCisgICAgfSk7
CisKKyAgICB2YXIgdGFyZ2V0ID0ge2EoKSB7fSwgYjogMTEsIFtfX3MxXTogImZvbyIsIC4uLnNv
dXJjZSwgWyJkIl06IDMzfTsKKworICAgIHNob3VsZEJlKG93bktleXNDYWxscywgMSk7CisgICAg
c2hvdWxkQmUoZ29wZENhbGxzLm1hcChTdHJpbmcpLmpvaW4oKSwgImEsYixjLGQsU3ltYm9sKHMw
KSxTeW1ib2woczEpIik7CisgICAgc2hvdWxkQmUoZ2V0Q2FsbHMubWFwKFN0cmluZykuam9pbigp
LCAiYSxjLGQsU3ltYm9sKHMxKSIpOworCisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwg
ImEiLCAwKTsKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYiIsIDExKTsKKyAgICBh
c3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYyIsIDIpOworICAgIGFzc2VydERhdGFQcm9wZXJ0
eSh0YXJnZXQsICJkIiwgMzMpOworCisgICAgc2hvdWxkQmUoUmVmbGVjdC5vd25LZXlzKHRhcmdl
dCkubWFwKFN0cmluZykuam9pbigpLCAiYSxiLGMsZCxTeW1ib2woczEpIik7Cit9KSgpOworCiso
ZnVuY3Rpb24gaW5kZXhlZFByb3BlcnRpZXMoKSB7CisgICAgdmFyIHNvdXJjZSA9IFswLCAxLCAy
XTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNlLCAiMSIsIHtlbnVtZXJhYmxlOiBm
YWxzZX0pOworICAgIHZhciB0YXJnZXQgPSB7c2V0IFsiMiJdKF92KSB7fSwgLi4uc291cmNlfTsK
KworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsICIwIiwgMCk7CisgICAgYXNzZXJ0RGF0
YVByb3BlcnR5KHRhcmdldCwgIjIiLCAyKTsKKyAgICBzaG91bGRCZShPYmplY3Qua2V5cyh0YXJn
ZXQpLmpvaW4oKSwgIjAsMiIpOworfSkoKTsKKworKGZ1bmN0aW9uIEN1c3RvbUFjY2Vzc29yKCkg
eworICAgIHZhciBzb3VyY2UgPSAkdm0uY3JlYXRlQ3VzdG9tVGVzdEdldHRlclNldHRlcigpOwor
ICAgIHZhciB0YXJnZXQgPSB7Li4uc291cmNlfTsKKworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0
YXJnZXQsICJjdXN0b21WYWx1ZSIsIHNvdXJjZSk7CisgICAgc2hvdWxkQmUodGFyZ2V0LmN1c3Rv
bVZhbHVlR2xvYmFsT2JqZWN0LCB0YXJnZXQuY3VzdG9tQWNjZXNzb3JHbG9iYWxPYmplY3QpOwor
ICAgIHNob3VsZEJlKHRhcmdldC5jdXN0b21WYWx1ZUdsb2JhbE9iamVjdFtTeW1ib2wudG9TdHJp
bmdUYWddLCAiZ2xvYmFsIik7CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgImN1c3Rv
bUFjY2Vzc29yIiwgc291cmNlKTsKK30pKCk7CisKKyhmdW5jdGlvbiBDdXN0b21BY2Nlc3Nvcklu
Tm9uUmVpZmllZFByb3BlcnR5VGFibGUoKSB7CisgICAgLy8gbWFrZSBzdXJlIHdlIHJlaWZ5QWxs
U3RhdGljUHJvcGVydGllcygpIGJlZm9yZSBkZWNpZGluZyBvbiB0aGUgZmFzdC9zbG93IHBhdGgK
KworICAgIHZhciBzb3VyY2UgPSAkdm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKTsKKyAg
ICBzb3VyY2UudGVzdEZpZWxkID0gNDI7CisgICAgdmFyIHRhcmdldCA9IHsuLi5zb3VyY2V9Owor
CisgICAgYXNzZXJ0RGF0YVByb3BlcnR5KHRhcmdldCwgInRlc3RGaWVsZCIsIDQyKTsKKyAgICBh
c3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAidGVzdFN0YXRpY0FjY2Vzc29yIiwgNDIpOworfSko
KTsKKworKGZ1bmN0aW9uIHVuY2FjaGVhYmxlRGljdGlvbmFyeSgpIHsKKyAgICB2YXIgc291cmNl
ID0ge2E6IDAsIGI6IDEsIGM6IDJ9OworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2Us
ICJjIiwge2VudW1lcmFibGU6IGZhbHNlfSk7CisgICAgJHZtLnRvVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KHNvdXJjZSk7CisgICAgdmFyIGIgPSAxMTsKKyAgICB2YXIgdGFyZ2V0ID0ge2dldCBhKCkg
e30sIGIsIC4uLnNvdXJjZX07CisKKyAgICBhc3NlcnREYXRhUHJvcGVydHkodGFyZ2V0LCAiYSIs
IDApOworICAgIGFzc2VydERhdGFQcm9wZXJ0eSh0YXJnZXQsICJiIiwgMSk7CisgICAgc2hvdWxk
QmUoT2JqZWN0LmtleXModGFyZ2V0KS5qb2luKCksICJhLGIiKTsKK30pKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTI2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OCBAQAorMjAyMS0wMS0w
NyAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgSW1w
bGVtZW50IEBjb3B5RGF0YVByb3BlcnRpZXMgaW4gQysrIHRvIG9wdGltaXplIG9iamVjdCByZXN0
IC8gc3ByZWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTM2MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTaW5jZSBAY29weURhdGFQcm9wZXJ0aWVzIGlzIGluaGVyZW50bHkgcG9seW1vcnBoaWMsIGlt
cGxlbWVudGluZyBpdCBpbiBKUyBpcyBub3QgYmVuZWZpY2lhbC4KKyAgICAgICAgVGhpcyBwYXRj
aDoKKworICAgICAgICAxLiBNZXJnZXMgYWxtb3N0IGlkZW50aWNhbCBAY29weURhdGFQcm9wZXJ0
aWVzIHZhcmlhbnRzIGFuZCBtb3ZlcyB0aGVtIHRvIEMrKywgYXZvaWRpbmcKKyAgICAgICAgICAg
YWxsb2NhdGlvbnMgb2YgSlNBcnJheSBpbnN0YW5jZXMgYW5kIElkZW50aWZpZXIgd3JhcHBlcnMu
CisgICAgICAgIDIuIFNraXBzIG5vbi1vYnNlcnZhYmxlIFtbR2V0XV0gY2FsbHMsIGxldmVyYWdp
bmcgYHNsb3QuaXNUYWludGVkQnlPcGFxdWVPYmplY3QoKWAuCisgICAgICAgIDMuIFBlcmZvcm1z
IFtbRGVmaW5lT3duUHJvcGVydHldXSB2aWEgcHV0RGlyZWN0TWF5QmVJbmRleCgpLCBzaW5jZSB0
aGUgc3BlYyBndWFyYW50ZWVzCisgICAgICAgICAgIHByb3BlcnR5IGNyZWF0aW9uIHRvIGJlIHN1
Y2Nlc3NmdWwgWzFdOiBgdGFyZ2V0YCBpcyBhbiBuZXdseSBjcmVhdGVkIG9iamVjdCB0aGF0IGlz
CisgICAgICAgICAgIG5vdCB5ZXQgYWNjZXNzaWJsZSB0byB1c2VybGFuZCBjb2RlLiBJdCdzIGlt
cG9zc2libGUgZm9yIGB0YXJnZXRgIHRvIGJlIG5vbi1leHRlbnNpYmxlCisgICAgICAgICAgIG5v
ciBoYXZlIGEgbm9uLWNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4KKyAgICAgICAgNC4gSW50cm9kdWNl
cyBhIGZhc3QgcGF0aCBzaW1pbGFyIHRvIE9iamVjdC5hc3NpZ24sIGJ1dDoKKyAgICAgICAgICAg
YSkgd2l0aCBubyBjaGVja3Mgb24gYHRhcmdldGAsIGJlY2F1c2UgaXQncyBndWFyYW50ZWVkIHRv
IGJlIGFuIGV4dGVuc2libGUgSlNGaW5hbE9iamVjdDsKKyAgICAgICAgICAgYikgd2l0aCBsZXNz
IGNoZWNrcyBvbiBgc291cmNlYCwgc2luY2Ugd2UgYXJlIHBlcmZvcm1pbmcgcHV0RGlyZWN0KCkg
YW5kIGRvbid0IGNhcmUgYWJvdXQKKyAgICAgICAgICAgICAgcmVhZC1vbmx5IHByb3BlcnRpZXMg
bm9yIF9fcHJvdG9fXy4KKworICAgICAgICBBbHRvZ2V0aGVyLCB0aGVzZSBjaGFuZ2VzIHJlc3Vs
dCBpbiAzLjF4IHNwZWVkLXVwIGZvciBvYmplY3QgcmVzdCAvIHNwcmVhZC4KKyAgICAgICAgQWxz
bywgdGhpcyBwYXRjaCByZW1vdmVzIHVubmVjZXNzYXJ5IGB0YXJnZXRgIHJldHVybiBhbmQgQGlz
T2JqZWN0IGNoZWNrLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3Nl
Yy1jb3B5ZGF0YXByb3BlcnRpZXMgKHN0ZXAgNi5jLmlpLjIsIG5vdGUgdGhlICIhIiBwcmVmaXgp
CisKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBidWlsdGlu
cy9HbG9iYWxPcGVyYXRpb25zLmpzOgorICAgICAgICAoZ2xvYmFsUHJpdmF0ZS5zcGVjaWVzQ29u
c3RydWN0b3IpOgorICAgICAgICAoZ2xvYmFsUHJpdmF0ZS5jb3B5RGF0YVByb3BlcnRpZXMpOiBE
ZWxldGVkLgorICAgICAgICAoZ2xvYmFsUHJpdmF0ZS5jb3B5RGF0YVByb3BlcnRpZXNOb0V4Y2x1
c2lvbnMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVn
aXN0cnkuaDoKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFBh
dHRlcm5Ob2RlOjpiaW5kVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpPYmplY3RTcHJlYWRF
eHByZXNzaW9uTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbnRy
aW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19kZWZpbmVFbnVtZXJhYmxlV3JpdGFibGVDb25maWd1
cmFibGVEYXRhUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmNh
blBlcmZvcm1GYXN0UHJvcGVydHlFbnVtZXJhdGlvbkZvckNvcHlEYXRhUHJvcGVydGllcyk6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oOgorCiAyMDIxLTAxLTA3ICBBbGV4ZXkgU2h2YXlr
YSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBTaW1wbGlmeSBnZXQq
UHJvcGVydHlOYW1lcygpIG1ldGhvZHMgYW5kIEVudW1lcmF0aW9uTW9kZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAkocmV2aXNpb24gMjcx
MjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3Jv
KGRlZmluZVByb3BlcnR5KSBcCiAgICAgbWFjcm8oZGVmYXVsdFByb21pc2VUaGVuKSBcCiAgICAg
bWFjcm8oZ2V0T3duUHJvcGVydHlOYW1lcykgXAotICAgIG1hY3JvKG93bktleXMpIFwKICAgICBt
YWNybyhTZXQpIFwKICAgICBtYWNybyh0aHJvd1R5cGVFcnJvckZ1bmN0aW9uKSBcCiAgICAgbWFj
cm8odHlwZWRBcnJheUxlbmd0aCkgXApAQCAtMTY5LDYgKzE2OCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIG1hY3JvKGhhc093bkxlbmd0aFByb3BlcnR5KSBcCiAgICAgbWFjcm8oaW1wb3J0TW9k
dWxlKSBcCiAgICAgbWFjcm8ocHJvcGVydHlJc0VudW1lcmFibGUpIFwKKyAgICBtYWNybyhjb3B5
RGF0YVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhtZXRhKSBcCiAgICAgbWFjcm8od2ViQXNzZW1i
bHlDb21waWxlU3RyZWFtaW5nSW50ZXJuYWwpIFwKICAgICBtYWNybyh3ZWJBc3NlbWJseUluc3Rh
bnRpYXRlU3RyZWFtaW5nSW50ZXJuYWwpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9HbG9iYWxPcGVyYXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9HbG9iYWxPcGVyYXRpb25zLmpzCShyZXZpc2lvbiAyNzEyNjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvR2xvYmFsT3BlcmF0aW9ucy5qcwkod29y
a2luZyBjb3B5KQpAQCAtNzUsNTUgKzc1LDMgQEAgZnVuY3Rpb24gc3BlY2llc0NvbnN0cnVjdG9y
KG9iaiwgZGVmYXVsdAogICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgQHRocm93VHlw
ZUVycm9yKCJ8dGhpc3wuY29uc3RydWN0b3JbU3ltYm9sLnNwZWNpZXNdIGlzIG5vdCBhIGNvbnN0
cnVjdG9yIik7CiB9Ci0KLUBnbG9iYWxQcml2YXRlCi1mdW5jdGlvbiBjb3B5RGF0YVByb3BlcnRp
ZXModGFyZ2V0LCBzb3VyY2UsIGV4Y2x1ZGVkU2V0KQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQot
ICAgIGlmICghQGlzT2JqZWN0KHRhcmdldCkpCi0gICAgICAgIEB0aHJvd1R5cGVFcnJvcigidGFy
Z2V0IG5lZWRzIHRvIGJlIGFuIG9iamVjdCIpOwotCi0gICAgaWYgKEBpc1VuZGVmaW5lZE9yTnVs
bChzb3VyY2UpKQotICAgICAgICByZXR1cm4gdGFyZ2V0OwotCi0gICAgdmFyIGZyb20gPSBAdG9P
YmplY3Qoc291cmNlKTsKLSAgICB2YXIga2V5cyA9IEBvd25LZXlzKGZyb20pOwotICAgIHZhciBr
ZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzTGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgdmFyIG5leHRLZXkgPSBrZXlzW2ldOwotICAgICAgICBpZiAo
IWV4Y2x1ZGVkU2V0LkBoYXMobmV4dEtleSkpIHsKLSAgICAgICAgICAgIGlmIChAcHJvcGVydHlJ
c0VudW1lcmFibGUoZnJvbSwgbmV4dEtleSkpIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJvcFZh
bHVlID0gZnJvbVtuZXh0S2V5XTsKLSAgICAgICAgICAgICAgICBAZGVmaW5lRW51bWVyYWJsZVdy
aXRhYmxlQ29uZmlndXJhYmxlRGF0YVByb3BlcnR5KHRhcmdldCwgbmV4dEtleSwgcHJvcFZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0YXJnZXQ7
Ci19Ci0KLUBnbG9iYWxQcml2YXRlCi1mdW5jdGlvbiBjb3B5RGF0YVByb3BlcnRpZXNOb0V4Y2x1
c2lvbnModGFyZ2V0LCBzb3VyY2UpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKCFA
aXNPYmplY3QodGFyZ2V0KSkKLSAgICAgICAgQHRocm93VHlwZUVycm9yKCJ0YXJnZXQgbmVlZHMg
dG8gYmUgYW4gb2JqZWN0Iik7Ci0KLSAgICBpZiAoQGlzVW5kZWZpbmVkT3JOdWxsKHNvdXJjZSkp
Ci0gICAgICAgIHJldHVybiB0YXJnZXQ7Ci0KLSAgICB2YXIgZnJvbSA9IEB0b09iamVjdChzb3Vy
Y2UpOwotICAgIHZhciBrZXlzID0gQG93bktleXMoZnJvbSk7Ci0gICAgdmFyIGtleXNMZW5ndGgg
PSBrZXlzLmxlbmd0aDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNMZW5ndGg7IGkrKykg
ewotICAgICAgICB2YXIgbmV4dEtleSA9IGtleXNbaV07Ci0gICAgICAgIGlmIChAcHJvcGVydHlJ
c0VudW1lcmFibGUoZnJvbSwgbmV4dEtleSkpIHsKLSAgICAgICAgICAgIHZhciBwcm9wVmFsdWUg
PSBmcm9tW25leHRLZXldOwotICAgICAgICAgICAgQGRlZmluZUVudW1lcmFibGVXcml0YWJsZUNv
bmZpZ3VyYWJsZURhdGFQcm9wZXJ0eSh0YXJnZXQsIG5leHRLZXksIHByb3BWYWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGFyZ2V0OwotfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdp
c3RyeS5oCShyZXZpc2lvbiAyNzEyNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5
Miw2IEBAIGVudW0gY2xhc3MgTGlua1RpbWVDb25zdGFudCA6IGludDMyX3Q7CiAgICAgbWFjcm8o
bmV3UHJvbWlzZSkgXAogICAgIG1hY3JvKGNyZWF0ZVByb21pc2UpIFwKICAgICBtYWNybyhjcmVh
dGVBcmd1bWVudHNCdXR0ZXJmbHkpIFwKLSAgICBtYWNybyhkZWZpbmVFbnVtZXJhYmxlV3JpdGFi
bGVDb25maWd1cmFibGVEYXRhUHJvcGVydHkpIFwKIAogI2RlZmluZSBKU0NfQ09NTU9OX0JZVEVD
T0RFX0lOVFJJTlNJQ19DT05TVEFOVFNfRUFDSF9OQU1FKG1hY3JvKSBcCiAgICAgSlNDX0NPTU1P
Tl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX1NJTVBMRV9FQUNIX05BTUUobWFjcm8pIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29u
c3RhbnQuaAkocmV2aXNpb24gMjcxMjY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xpbmtUaW1lQ29uc3RhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICB2KHNldEJ1Y2tldEtleSwgbnVsbHB0cikgXAogICAg
IHYoc2V0UHJvdG90eXBlRGlyZWN0LCBudWxscHRyKSBcCiAgICAgdihwcm9wZXJ0eUlzRW51bWVy
YWJsZSwgbnVsbHB0cikgXAotICAgIHYob3duS2V5cywgbnVsbHB0cikgXAorICAgIHYoY29weURh
dGFQcm9wZXJ0aWVzLCBudWxscHRyKSBcCiAgICAgdihlbnF1ZXVlSm9iLCBudWxscHRyKSBcCiAg
ICAgdihtYWtlVHlwZUVycm9yLCBudWxscHRyKSBcCiAgICAgdihBZ2dyZWdhdGVFcnJvciwgbnVs
bHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMjcxMjY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
Nzc4LDIwICsxNzc4LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0
XwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENyZWF0ZUFyZ3VtZW50c0J1dHRlcmZseShnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpKTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVJ
bnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19kZWZpbmVFbnVtZXJhYmxlV3JpdGFibGVDb25m
aWd1cmFibGVEYXRhUHJvcGVydHkoSlNDOjpCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBK
U0M6OlJlZ2lzdGVySUQqIGRzdCkKLXsKLSAgICBBcmd1bWVudExpc3ROb2RlKiBub2RlID0gbV9h
cmdzLT5tX2xpc3ROb2RlOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmogPSBnZW5lcmF0
b3IuZW1pdE5vZGUobm9kZSk7Ci0gICAgbm9kZSA9IG5vZGUtPm1fbmV4dDsKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9k
ZSk7Ci0gICAgbm9kZSA9IG5vZGUtPm1fbmV4dDsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFs
dWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZSk7Ci0gICAgQVNTRVJUKCFub2RlLT5tX25leHQp
OwotCi0gICAgZ2VuZXJhdG9yLmVtaXRDYWxsRGVmaW5lUHJvcGVydHkobmV3T2JqLmdldCgpLCBw
cm9wZXJ0eU5hbWVSZWdpc3Rlci5nZXQoKSwgdmFsdWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIs
IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcm9wZXJ0eUNvbmZpZ3VyYWJsZSB8IEJ5dGVjb2RlR2VuZXJh
dG9yOjpQcm9wZXJ0eVdyaXRhYmxlIHwgQnl0ZWNvZGVHZW5lcmF0b3I6OlByb3BlcnR5RW51bWVy
YWJsZSwgbV9wb3NpdGlvbik7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQogI2RlZmluZSBKU0NfREVD
TEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBcCiAgICAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY18jI25hbWUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KSBcCiAgICAgeyBc
CkBAIC01MzU4LDkgKzUzNDQsOCBAQCB2b2lkIE9iamVjdFBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUo
Qnl0ZWNvCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lz
dGVyKDIpLCBleGNsdWRlZFNldFJlZy5nZXQoKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7
Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmVzdWx0LmdldCgpLCBjb3B5RGF0YVBy
b3BlcnRpZXMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwotICAgICAgICAgICAgdGFy
Z2V0LnBhdHRlcm4tPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHJlc3VsdC5nZXQoKSk7CisgICAgICAg
ICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBjb3B5RGF0
YVByb3BlcnRpZXMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworICAgICAgICAgICAg
dGFyZ2V0LnBhdHRlcm4tPmJpbmRWYWx1ZShnZW5lcmF0b3IsIG5ld09iamVjdC5nZXQoKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTU1NjksOCArNTU1NCw3IEBAIFJlZ2lzdGVySUQqIE9iamVj
dFNwcmVhZEV4cHJlc3Npb25Ob2RlOjoKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShzcmMuZ2V0KCks
IG1fZXhwcmVzc2lvbik7CiAgICAgCi0gICAgLy8gbG9hZCBhbmQgY2FsbCBAY29weURhdGFQcm9w
ZXJ0aWVzTm9FeGNsdXNpb25zCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvcHlEYXRhUHJvcGVy
dGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChudWxscHRyLCBMaW5rVGltZUNv
bnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXNOb0V4Y2x1c2lvbnMpOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBjb3B5RGF0YVByb3BlcnRpZXMgPSBnZW5lcmF0b3IubW92ZUxpbmtUaW1lQ29uc3Rh
bnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6Y29weURhdGFQcm9wZXJ0aWVzKTsKICAgICAK
ICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBudWxscHRyLCAyKTsKICAgICBnZW5l
cmF0b3IuZW1pdExvYWQoYXJncy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzEyNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODksOCArMTE4OSw4IEBAIGNhcGl0
YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMKICAgICBtX2xpbmtUaW1lQ29uc3Rh
bnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojpwcm9wZXJ0eUlzRW51
bWVyYWJsZSldLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5pdCkg
ewogICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGpzQ2Fz
dDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1By
b3BlcnR5SXNFbnVtZXJhYmxlKSk7CiAgICAgICAgIH0pOwotICAgIG1fbGlua1RpbWVDb25zdGFu
dHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6Om93bktleXMpXS5pbml0
TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKLSAgICAgICAgICAg
IGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNPd25LZXlzKSk7CisgICAg
bV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFu
dDo6Y29weURhdGFQcm9wZXJ0aWVzKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxK
U0NlbGw+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUo
aW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDIsIFN0cmluZygp
LCBnbG9iYWxGdW5jQ29weURhdGFQcm9wZXJ0aWVzKSk7CiAgICAgICAgIH0pOwogICAgIG1fbGlu
a1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OmVu
cXVldWVKb2IpXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQp
IHsKICAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwgImVucXVldWVKb2IiX3MsIGVucXVl
dWVKb2IpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTI2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODM5LDEzICs4MzksMTE5IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihnbG9iYWxGdW5jUHJvcGUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihlbnVtZXJhYmxlKSk7CiB9CiAKLUpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5j
T3duS2V5cywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKSkKK3N0YXRpYyBib29sIGNhblBlcmZvcm1GYXN0UHJvcGVydHlFbnVtZXJhdGlvbkZvckNv
cHlEYXRhUHJvcGVydGllcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoc3RydWN0
dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNBbnlG
b3JtT2ZHZXRPd25Qcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAv
LyBGSVhNRTogSW5kZXhlZCBwcm9wZXJ0aWVzIGNhbiBiZSBoYW5kbGVkLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUzNTgKKyAgICBpZiAoaGFzSW5k
ZXhlZFByb3BlcnRpZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RydWN0dXJlLT5oYXNDdXN0b21HZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7Cit9OworCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2Vj
LWNvcHlkYXRhcHJvcGVydGllcworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmND
b3B5RGF0YVByb3BlcnRpZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBKU09iamVjdCogb2Jq
ZWN0ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhnbG9i
YWxPYmplY3QsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUsIFdURjo6bnVsbG9wdCkpKTsKKworICAgIEpT
T2JqZWN0KiB0YXJnZXQgPSBhc09iamVjdChjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4odm0sIHRhcmdldCkp
OworICAgIEFTU0VSVCh0YXJnZXQtPmlzU3RydWN0dXJlRXh0ZW5zaWJsZSh2bSkpOworCisgICAg
SlNWYWx1ZSBzb3VyY2VWYWx1ZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7Cisg
ICAgaWYgKHNvdXJjZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBKU09iamVjdCogc291cmNlID0gc291cmNlVmFsdWUudG9PYmplY3QoZ2xvYmFs
T2JqZWN0KTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgSlNTZXQqIGV4
Y2x1ZGVkU2V0ID0gbnVsbHB0cjsKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PiAyKQorICAgICAgICBleGNsdWRlZFNldCA9IGpzQ2FzdDxKU1NldCo+KGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMikpOworCisgICAgYXV0byBpc1Byb3BlcnR5TmFtZUV4Y2x1ZGVkID0g
WyZdIChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSB7CisgICAgICAgIEFTU0VSVCghcHJvcGVy
dHlOYW1lLmlzUHJpdmF0ZU5hbWUoKSk7CisgICAgICAgIGlmICghZXhjbHVkZWRTZXQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1
ZSA9IGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3Bl
cnR5TmFtZS51aWQoKSkpOworICAgICAgICByZXR1cm4gZXhjbHVkZWRTZXQtPmhhcyhnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZVZhbHVlKTsKKyAgICB9OworCisgICAgaWYgKCFzb3VyY2UtPnN0
YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHZtKSkgeworICAgICAgICBzb3VyY2UtPnJlaWZ5QWxsU3Rh
dGljUHJvcGVydGllcyhnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgIH0KKworICAgIGlmIChjYW5QZXJmb3JtRmFzdFByb3BlcnR5RW51
bWVyYXRpb25Gb3JDb3B5RGF0YVByb3BlcnRpZXMoc291cmNlLT5zdHJ1Y3R1cmUodm0pKSkgewor
ICAgICAgICBWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiwgOD4gcHJvcGVydGllczsK
KyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgdmFsdWVzOworCisgICAgICAgIC8vIEZJWE1F
OiBJdCBkb2Vzbid0IHNlZW0gbGlrZSB3ZSBzaG91bGQgaGF2ZSB0byBkbyB0aGlzIGluIHR3byBw
aGFzZXMsIGJ1dAorICAgICAgICAvLyB3ZSdyZSBydW5uaW5nIGludG8gY3Jhc2hlcyB3aGVyZSBp
dCBhcHBlYXJzIHRoYXQgc291cmNlIGlzIHRyYW5zaXRpb25pbmcKKyAgICAgICAgLy8gdW5kZXIg
dXMsIGFuZCBldmVuIGVuZHMgdXAgaW4gYSBzdGF0ZSB3aGVyZSBpdCBoYXMgYSBudWxsIGJ1dHRl
cmZseS4gTXkKKyAgICAgICAgLy8gbGVhZGluZyBoeXBvdGhlc2lzIGhlcmUgaXMgdGhhdCB3ZSBm
aXJlIHNvbWUgdmFsdWUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludAorICAgICAgICAvLyB0aGF0IGVu
ZHMgdXAgdHJhbnNpdGlvbmluZyB0aGUgc3RydWN0dXJlIHVuZGVybmVhdGggdXMuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODc4MzcKKworICAg
ICAgICBzb3VyY2UtPnN0cnVjdHVyZSh2bSktPmZvckVhY2hQcm9wZXJ0eSh2bSwgWyZdIChjb25z
dCBQcm9wZXJ0eU1hcEVudHJ5JiBlbnRyeSkgLT4gYm9vbCB7CisgICAgICAgICAgICBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKGVudHJ5LmtleSk7CisgICAgICAgICAgICBpZiAocHJvcGVydHlO
YW1lLmlzUHJpdmF0ZU5hbWUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIGlmIChpc1Byb3BlcnR5TmFtZUV4Y2x1ZGVkKHByb3BlcnR5TmFtZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAm
IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICAgICAgcHJvcGVydGllcy5hcHBlbmQoZW50cnkua2V5KTsKKyAgICAgICAg
ICAgIHZhbHVlcy5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KHNvdXJjZS0+Z2V0RGlyZWN0KGVu
dHJ5Lm9mZnNldCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHB1dCBwcm9wZXJ0aWVzIGluIGEgYmF0Y2hp
bmcgbWFubmVyIHRvIGFjY2VsZXJhdGUgQ29weURhdGFQcm9wZXJ0aWVzIG1vcmUuCisgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MzU4Cisg
ICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdCh2bSwgcHJvcGVydGllc1tpXS5nZXQoKSwgdmFs
dWVzLmF0KGkpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1i
b2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7CisgICAgICAgIHNvdXJjZS0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IHByb3BlcnR5TmFtZSA6IHByb3BlcnR5TmFtZXMpIHsKKyAgICAgICAgICAgIGlmIChpc1Byb3Bl
cnR5TmFtZUV4Y2x1ZGVkKHByb3BlcnR5TmFtZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHNvdXJjZSwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKKyAgICAgICAgICAgIGJvb2wgaGFz
UHJvcGVydHkgPSBzb3VyY2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KHNv
dXJjZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgIGlmICghaGFzUHJvcGVy
dHkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc2xvdC5hdHRy
aWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWU7CisgICAgICAgICAgICBpZiAo
TElLRUxZKCFzbG90LmlzVGFpbnRlZEJ5T3BhcXVlT2JqZWN0KCkpKQorICAgICAgICAgICAgICAg
IHZhbHVlID0gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzb3VyY2UtPmdldChnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdE1heUJlSW5kZXgoZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB7IH07CiB9CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jRGF0
ZVRpbWVGb3JtYXQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDI3MTI2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihnbG9i
YWxGdW5jQnVpbAogSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jQnVpbHRpbkRl
c2NyaWJlKTsKIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0ltcG9ydE1vZHVs
ZSk7CiBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNQcm9wZXJ0eUlzRW51bWVy
YWJsZSk7Ci1KU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNPd25LZXlzKTsKK0pT
Q19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0NvcHlEYXRhUHJvcGVydGllcyk7CiBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNEYXRlVGltZUZvcm1hdCk7CiAKIEpT
X0VYUE9SVF9QUklWQVRFIGRvdWJsZSBqc1RvTnVtYmVyKFN0cmluZ1ZpZXcpOwo=
</data>
<flag name="review"
          id="434896"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="434910"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>