<?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>148173</bug_id>
          
          <creation_ts>2015-08-19 00:43:08 -0700</creation_ts>
          <short_desc>[ES6] Return JSInternalPromise as result of evaluateModule</short_desc>
          <delta_ts>2015-08-24 16:49:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>148262</dependson>
          <blocked>147340</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ggaren</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1118875</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-19 00:43:08 -0700</bug_when>
    <thetext>Report asynchronous module loader errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119427</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-20 16:18:32 -0700</bug_when>
    <thetext>While implementing this, I&apos;ve found one memory leak error in the JSStdFunction...
I&apos;ll create the separate patch to fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119676</commentid>
    <comment_count>2</comment_count>
      <attachid>259587</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-20 23:48:01 -0700</bug_when>
    <thetext>Created attachment 259587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119677</commentid>
    <comment_count>3</comment_count>
      <attachid>259587</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-20 23:56:12 -0700</bug_when>
    <thetext>Comment on attachment 259587
Patch

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

The patch is ready. Added comment for the ease of the review.

&gt; Source/JavaScriptCore/jsc.cpp:1375
&gt; +    });

The error handler function to catch the asynchronous errors and report them.

&gt; Source/JavaScriptCore/jsc.cpp:1388
&gt; +                promise = evaluateModule(globalObject-&gt;globalExec(), fileName);

Load the module with the entry point moduleName.

&gt; Source/JavaScriptCore/jsc.cpp:1407
&gt; +                promise = evaluateModule(globalObject-&gt;globalExec(), jscSource(script, fileName));

Load the module with the source string.

&gt; Source/JavaScriptCore/jsc.cpp:1409
&gt; +            promise-&gt;then(globalObject-&gt;globalExec(), nullptr, errorHandler);

JSInernalPromise.then with the error handler to report the asynchronous errors.

&gt; Source/JavaScriptCore/jsc.cpp:1410
&gt;              globalObject-&gt;vm().drainMicrotasks();

This draining ensures that the loading, execution and error reporting of the module are done here before loading the next file.

&gt; Source/JavaScriptCore/runtime/JSInternalPromise.h:42
&gt; +// CAUTION: Must not leak the JSInternalPromise to the user space to keep its integrity.

Add the note about JSInternalPromise.

&gt; Source/JavaScriptCore/runtime/JSInternalPromise.h:52
&gt; +    JS_EXPORT_PRIVATE JSInternalPromise* then(ExecState*, JSFunction* = nullptr, JSFunction* = nullptr);

We just add &quot;then&quot; helper only to JSInternalPromise (we don&apos;t add it to JSPromise) because &quot;then&quot; method may be replaced/modified in the user-exposed Promises.

&gt; Source/JavaScriptCore/runtime/ModuleLoaderObject.cpp:150
&gt; +    return jsCast&lt;JSInternalPromise*&gt;(call(exec, function, callType, callData, this, arguments));

Since &quot;requestInstantiateAll&quot; is builtin internal method, we can ensure that the result of this function is always JSInternalPromise*.

&gt; Source/JavaScriptCore/runtime/ModuleLoaderObject.cpp:164
&gt; +    return jsCast&lt;JSInternalPromise*&gt;(call(exec, function, callType, callData, this, arguments));

Ditto.

&gt; Source/JavaScriptCore/runtime/ModuleLoaderObject.h:74
&gt; +    JSInternalPromise* instantiate(ExecState*, JSValue key, JSValue source);

Ensure the result value is JSInternalPromise* by type!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119678</commentid>
    <comment_count>4</comment_count>
      <attachid>259588</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-20 23:59:41 -0700</bug_when>
    <thetext>Created attachment 259588
Patch

add ifdef guard for promise = ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119679</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-21 00:10:13 -0700</bug_when>
    <thetext>The patch is ready. 
The following is the loading results.


===== tmp/main.js
import &quot;tmp/test001.js&quot;

===== tmp/test001.js
import &apos;tmp/arith.js&apos;
import &apos;tmp/test001.js&apos;

===== tmp/arith.js
import &quot;tmp/test001.js&quot;

export function add(a, b)
{
    return a + b;
}

= result
$ Tools/Scripts/run-jsc -m tmp/main.js
Running 1 time(s): DYLD_FRAMEWORK_PATH=/Users/yusukesuzuki/development/Modules/WebKitBuild/async/Release /Users/yusukesuzuki/development/Modules/WebKitBuild/async/Release/jsc -m tmp/main.js
Loader [resolve] tmp/main.js
Loader [fetch] tmp/main.js
Loader [translate] tmp/main.js
Loader [instantiate] tmp/main.js

Analyzing ModuleRecord key(&apos;tmp/main.js&apos;)
    Dependencies: 1 modules
      module(&apos;tmp/test001.js&apos;)
    Import: 0 entries
    Export: 0 entries
Loader [resolve] tmp/test001.js
Loader [fetch] tmp/test001.js
Loader [translate] tmp/test001.js
Loader [instantiate] tmp/test001.js

Analyzing ModuleRecord key(&apos;tmp/test001.js&apos;)
    Dependencies: 2 modules
      module(&apos;tmp/arith.js&apos;)
      module(&apos;tmp/test001.js&apos;)
    Import: 0 entries
    Export: 0 entries
Loader [resolve] tmp/arith.js
Loader [resolve] tmp/test001.js
Loader [fetch] tmp/arith.js
Loader [translate] tmp/arith.js
Loader [instantiate] tmp/arith.js

Analyzing ModuleRecord key(&apos;tmp/arith.js&apos;)
    Dependencies: 1 modules
      module(&apos;tmp/test001.js&apos;)
    Import: 0 entries
    Export: 1 entries
      [Local] export(&apos;add&apos;), local(&apos;add&apos;)
Loader [resolve] tmp/test001.js


===== tmp/bad.js
import &quot;tmp/not-found.js&quot;


= result
$ Tools/Scripts/run-jsc -m tmp/bad.js
Running 1 time(s): DYLD_FRAMEWORK_PATH=/Users/yusukesuzuki/development/Modules/WebKitBuild/async/Release /Users/yusukesuzuki/development/Modules/WebKitBuild/async/Release/jsc -m tmp/bad.js
Loader [resolve] tmp/bad.js
Loader [fetch] tmp/bad.js
Loader [translate] tmp/bad.js
Loader [instantiate] tmp/bad.js

Analyzing ModuleRecord key(&apos;tmp/bad.js&apos;)
    Dependencies: 1 modules
      module(&apos;tmp/not-found.js&apos;)
    Import: 0 entries
    Export: 0 entries
Loader [resolve] tmp/not-found.js
Loader [fetch] tmp/not-found.js
Could not open file: tmp/not-found.js
Exception: Error: Could not open file &apos;tmp/not-found.js&apos;.
fetch@[native code]
requestFetch@[native code]
requestTranslate@[native code]
requestInstantiate@[native code]
requestResolveDependencies@[native code]
[native code]
promiseReactionJob@[native code]




===== tmp/bad2.js
import &quot;tmp/bad-syntax.js&quot;


===== tmp/bad-syntax.js
function


= result
$ Tools/Scripts/run-jsc -m tmp/bad2.js
Running 1 time(s): DYLD_FRAMEWORK_PATH=/Users/yusukesuzuki/development/Modules/WebKitBuild/async/Release /Users/yusukesuzuki/development/Modules/WebKitBuild/async/Release/jsc -m tmp/bad2.js
Loader [resolve] tmp/bad2.js
Loader [fetch] tmp/bad2.js
Loader [translate] tmp/bad2.js
Loader [instantiate] tmp/bad2.js

Analyzing ModuleRecord key(&apos;tmp/bad2.js&apos;)
    Dependencies: 1 modules
      module(&apos;tmp/bad-syntax.js&apos;)
    Import: 0 entries
    Export: 0 entries
Loader [resolve] tmp/bad-syntax.js
Loader [fetch] tmp/bad-syntax.js
Loader [translate] tmp/bad-syntax.js
Loader [instantiate] tmp/bad-syntax.js
Exception: SyntaxError: Unexpected end of script
parseModule@[native code]
instantiation@[native code]
commitInstantiated@[native code]
[native code]
promiseReactionJob@[native code]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120453</commentid>
    <comment_count>6</comment_count>
      <attachid>259588</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-24 16:39:03 -0700</bug_when>
    <thetext>Comment on attachment 259588
Patch

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

r=me

&gt; Source/JavaScriptCore/builtins/ModuleLoaderObject.js:404
&gt; +    // Loader.resolve hook point.

Maybe it would nice to also say: &quot;resolve: moduleName =&gt; Promise(moduleKey)&quot;
This is slightly redundant with the code, but I think it makes these hook points explicitly clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120461</commentid>
    <comment_count>7</comment_count>
      <attachid>259588</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-24 16:44:49 -0700</bug_when>
    <thetext>Comment on attachment 259588
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/builtins/ModuleLoaderObject.js:404
&gt;&gt; +    // Loader.resolve hook point.
&gt; 
&gt; Maybe it would nice to also say: &quot;resolve: moduleName =&gt; Promise(moduleKey)&quot;
&gt; This is slightly redundant with the code, but I think it makes these hook points explicitly clear.

Agreed. The name &quot;resolve&quot; is slightly vague. Adding these notes makes the code more readable.
When completing the prototype, we have the chance to rename these APIs more descriptive ones :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120464</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-24 16:49:08 -0700</bug_when>
    <thetext>Committed r188894: &lt;http://trac.webkit.org/changeset/188894&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259587</attachid>
            <date>2015-08-20 23:48:01 -0700</date>
            <delta_ts>2015-08-20 23:59:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148173-20150820234757.patch</filename>
            <type>text/plain</type>
            <size>21202</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
Mzk4MTA2MmFjNDZhY2JlZGZmNTExNWY2MDM0YWE4OWM1MTA0N2YxLi42YTlmYzI2MjNiOGJlMzYw
N2EyZDk1Zjk0MGZmZDFkZjNlNDQ3MGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0MiBAQAogMjAxNS0wOC0yMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBbRVM2XSBSZXR1cm4gSlNJbnRlcm5hbFByb21pc2UgYXMgcmVzdWx0
IG9mIGV2YWx1YXRlTW9kdWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDgxNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBOb3cgZXZhbHVhdGVNb2R1bGUgcmV0dXJucyBKU0ludGVybmFsUHJvbWlzZSog
YXMgaXRzIHJlc3VsdCB2YWx1ZS4KKyAgICAgICAgV2hlbiBhbiBlcnJvciBvY2N1cnMgd2hpbGUg
bG9hZGluZyBvciBleGVjdXRpbmcgdGhlIG1vZHVsZXMsCisgICAgICAgIHRoaXMgcHJvbWlzZSBp
cyByZWplY3RlZCBieSB0aGF0IGVycm9yLiBCeSBsZXZlcmFnaW5nIHRoaXMsIHdlIGltcGxlbWVu
dGVkCisgICAgICAgIGFzeW5jaHJvbm91cyBlcnJvciByZXBvcnRpbmcgd2hlbiBleGVjdXRpbmcg
dGhlIG1vZHVsZXMgaW4gSlNDIHNoZWxsLgorCisgICAgICAgIEFuZCB0aGlzIHBhdGNoIGFsc28g
Y2hhbmdlcyB0aGUgZXZhbHVhdGVNb2R1bGUgc2lnbmF0dXJlIHRvIGFjY2VwdCB0aGUgZW50cnkK
KyAgICAgICAgcG9pbnQgYnkgdGhlIG1vZHVsZU5hbWUuIEJ5IHVzaW5nIGl0LCBKU0Mgc2hlbGwg
Y2FuIHN0YXJ0IGV4ZWN1dGluZyB0aGUgbW9kdWxlcworICAgICAgICB3aXRoIHRoZSBlbnRyeSBw
b2ludCBtb2R1bGUgbmFtZS4KKworICAgICAgICAqIGJ1aWx0aW5zL01vZHVsZUxvYWRlck9iamVj
dC5qczoKKyAgICAgICAgKGxvYWRNb2R1bGUpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAg
IChkdW1wRXhjZXB0aW9uKToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAgICAgICAgKiBy
dW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZU1vZHVsZSk6Cisg
ICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0ludGVy
bmFsUHJvbWlzZS5jcHA6CisgICAgICAgIChKU0M6OkpTSW50ZXJuYWxQcm9taXNlOjp0aGVuKToK
KyAgICAgICAgKiBydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmg6CisgICAgICAgICogcnVudGlt
ZS9Nb2R1bGVMb2FkZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVMb2FkZXJPYmpl
Y3Q6OnJlcXVlc3RJbnN0YW50aWF0ZUFsbCk6CisgICAgICAgIChKU0M6Ok1vZHVsZUxvYWRlck9i
amVjdDo6bG9hZE1vZHVsZSk6CisgICAgICAgIChKU0M6Ok1vZHVsZUxvYWRlck9iamVjdDo6cmVz
b2x2ZSk6CisgICAgICAgIChKU0M6Ok1vZHVsZUxvYWRlck9iamVjdDo6ZmV0Y2gpOgorICAgICAg
ICAoSlNDOjpNb2R1bGVMb2FkZXJPYmplY3Q6OnRyYW5zbGF0ZSk6CisgICAgICAgIChKU0M6Ok1v
ZHVsZUxvYWRlck9iamVjdDo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2Fk
ZXJPYmplY3RQYXJzZU1vZHVsZSk6CisgICAgICAgICogcnVudGltZS9Nb2R1bGVMb2FkZXJPYmpl
Y3QuaDoKKworMjAxNS0wOC0yMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KKwogICAgICAgICBbRVM2XSBwcm90b3R5cGluZyBtb2R1bGUgbG9hZGVyIGluIEpTQyBzaGVs
bAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODc2
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2Fk
ZXJPYmplY3QuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9hZGVy
T2JqZWN0LmpzCmluZGV4IDFiNTVkN2Y2YmRmNzAyNjg5ZTFjNWFkNzIyZWViNzBhM2ViNWFiMzEu
LmY1MzYxMjdjYzEwZDAwNjA0NDgzODhmNGVkYjI3NzRhODU0ZDA5Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXJPYmplY3QuanMKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVsZUxvYWRlck9iamVjdC5qcwpAQCAt
Mzk2LDYgKzM5NiwyMSBAQCBmdW5jdGlvbiByZXF1ZXN0SW5zdGFudGlhdGVBbGwoa2V5KQogICAg
IHJldHVybiB0aGlzLnJlcXVlc3RSZXNvbHZlRGVwZW5kZW5jaWVzKGtleSk7CiB9CiAKK2Z1bmN0
aW9uIGxvYWRNb2R1bGUobW9kdWxlTmFtZSwgcmVmZXJyZXIpCit7CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgdmFyIGxvYWRlciA9IHRoaXM7CisgICAgLy8gTG9hZGVyLnJlc29sdmUgaG9vayBw
b2ludC4KKyAgICByZXR1cm4gdGhpcy5yZXNvbHZlKG1vZHVsZU5hbWUsIHJlZmVycmVyKS50aGVu
KGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgLy8gRklYTUU6IE5vdywgd2UgZG9uJ3QgaW1wbGVt
ZW50IHRoZSBsaW5raW5nIHBoYXNlIHlldC4KKyAgICAgICAgLy8gU28gaGVyZSwgd2UganVzdCBj
YWxsIHJlcXVlc3RJbnN0YW50aWF0ZUFsbCB0byBvbmx5IHBlcmZvcm0gdGhlIG1vZHVsZSBsb2Fk
aW5nLgorICAgICAgICAvLyBBdCBsYXN0LCBpdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCByZXF1
ZXN0UmVhZHkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDgxNzIKKyAgICAgICAgcmV0dXJuIGxvYWRlci5yZXF1ZXN0SW5zdGFudGlhdGVBbGwo
a2V5KTsKKyAgICB9KTsKK30KKwogZnVuY3Rpb24gcHJvdmlkZShrZXksIHN0YWdlLCB2YWx1ZSkK
IHsKICAgICAidXNlIHN0cmljdCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDkxODMxNmQzOTA0
ZDUwNGM5YzJjMDg2NzRkNTg0NDA5MjVmOTc2ZDEuLjZkNDZmNDBlNDM1NmU1YTUwYjI0NjVhYmYw
MzBlYzA2ODBkZWZjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0xMzQwLDE1ICsxMzQwLDE5
IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBqc2NFeGl0KHJlcyk7CiB9
CiAKK3N0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgZXhjZXB0aW9uKQoreworICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXhj
ZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOworICAgIElkZW50aWZpZXIgc3Rh
Y2tJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
ICJzdGFjayIpOworICAgIEpTVmFsdWUgc3RhY2tWYWx1ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOworICAgIGlmICghc3RhY2tWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBwcmludGYoIiVzXG4iLCBzdGFja1ZhbHVlLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOworfQorCiBzdGF0aWMgdm9pZCBkdW1wRXhjZXB0aW9u
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRp
b25FeGNlcHRpb24pCiB7Ci0gICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pIHsKLSAgICAgICAg
cHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpLnRv
U3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBJZGVudGlmaWVyIHN0YWNrSUQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAic3Rh
Y2siKTsKLSAgICAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+
dmFsdWUoKS5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOwotICAgICAg
ICBpZiAoIXN0YWNrVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHByaW50
ZigiJXNcbiIsIHN0YWNrVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkp
LT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7Ci0gICAg
fQorICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQorICAgICAgICBkdW1wRXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKSk7CiB9CiAKIHN0YXRpYyBi
b29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8U2NyaXB0PiYgc2NyaXB0cywgYm9vbCBkdW1wLCBib29sIG1vZHVsZSkKQEAgLTEzNjEsMTgg
KzEzNjUsMzUgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxTY3JpcHQ+JiBzY3IKICAgICAgICAgSlNDOjpPcHRpb25z
OjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkgPSB0cnVlOwogCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyNpZiBFTkFCTEUoRVM2
X01PRFVMRVMpCisgICAgSlNGdW5jdGlvbiogZXJyb3JIYW5kbGVyID0gSlNGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsIFN0cmluZygpLCBbJl0oRXhlY1N0YXRlKiBleGVjKSB7
CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgZHVtcEV4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9KTsKKyNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTVBMSU5H
X0ZMQUdTKQogICAgIFNhbXBsaW5nRmxhZ3M6OnN0YXJ0KCk7CiAjZW5kaWYKIAotICAgIGJvb2wg
c3VjY2VzcyA9IHRydWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JpcHRzLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIEpTSW50ZXJuYWxQcm9taXNlKiBwcm9taXNlID0gbnVsbHB0cjsK
ICAgICAgICAgaWYgKHNjcmlwdHNbaV0uaXNGaWxlKSB7CiAgICAgICAgICAgICBmaWxlTmFtZSA9
IHNjcmlwdHNbaV0uYXJndW1lbnQ7Ci0gICAgICAgICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29u
dGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBmYWlsIGVhcmx5IHNvIHdlIGNhbiBjYXRjaCBtaXNzaW5nIGZpbGVzCi0g
ICAgICAgICAgICBzY3JpcHQgPSBzY3JpcHRCdWZmZXIuZGF0YSgpOworICAgICAgICAgICAgaWYg
KG1vZHVsZSkgeworI2lmIEVOQUJMRShFUzZfTU9EVUxFUykKKyAgICAgICAgICAgICAgICBwcm9t
aXNlID0gZXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZpbGVOYW1l
KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbGxC
dWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdEJ1ZmZlcikpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZmFpbCBlYXJseSBzbyB3ZSBjYW4gY2F0Y2gg
bWlzc2luZyBmaWxlcworICAgICAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdEJ1ZmZlci5kYXRh
KCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzY3JpcHQg
PSBzY3JpcHRzW2ldLmFyZ3VtZW50OwogICAgICAgICAgICAgZmlsZU5hbWUgPSBBU0NJSUxpdGVy
YWwoIltDb21tYW5kIExpbmVdIik7CkBAIC0xMzgyLDEwICsxNDAzLDEwIEBAIHN0YXRpYyBib29s
IHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8
U2NyaXB0PiYgc2NyCiAKICAgICAgICAgaWYgKG1vZHVsZSkgewogI2lmIEVOQUJMRShFUzZfTU9E
VUxFUykKLSAgICAgICAgICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlv
bjsKLSAgICAgICAgICAgIGV2YWx1YXRlTW9kdWxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxlTmFtZSksIGV2YWx1YXRpb25FeGNlcHRpb24pOwotICAg
ICAgICAgICAgZHVtcEV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24p
OworICAgICAgICAgICAgaWYgKCFwcm9taXNlKQorICAgICAgICAgICAgICAgIHByb21pc2UgPSBl
dmFsdWF0ZU1vZHVsZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlw
dCwgZmlsZU5hbWUpKTsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLT5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgcHJvbWlzZS0+dGhlbihnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgbnVsbHB0ciwgZXJyb3JIYW5kbGVyKTsKICAgICAgICAgICAgIGdsb2Jh
bE9iamVjdC0+dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKICNlbHNlCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21wbGV0aW9uLmNwcAppbmRleCAyZWRlNDFjYzFmYTc2NTE4ZDVlMzIxZGJmNzIwYjQzYzE3
NjRjMjY0Li4yNzExNzhjMmI1ZjY0MzdlNjhkZTU5MmQ2MTRiODEyZmE1MWVmMjVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcApAQCAtMzAsNiArMzAs
OCBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2Uu
aCIKKyNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNM
b2NrLmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKICNpbmNsdWRlICJNb2R1bGVBbmFs
eXplci5oIgpAQCAtMTExLDQzICsxMTMsNjMgQEAgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIE4KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIGV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5l
ZEV4Y2VwdGlvbikKK3N0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogZXZhbHVhdGVNb2R1bGUoY29u
c3QgSlNMb2NrSG9sZGVyJiwgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIG1vZHVsZU5hbWUsIEpTVmFsdWUgcmVmZXJyZXIpCit7CisgICAgcmV0
dXJuIGdsb2JhbE9iamVjdC0+bW9kdWxlTG9hZGVyKCktPmxvYWRNb2R1bGUoZXhlYywgbW9kdWxl
TmFtZSwgcmVmZXJyZXIpOworfQorCitzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIGV2YWx1YXRl
TW9kdWxlKGNvbnN0IEpTTG9ja0hvbGRlciYgbG9jaywgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQorewor
ICAgIEpTVmFsdWUgbW9kdWxlTmFtZVZhbHVlOworICAgIGlmIChtb2R1bGVOYW1lLmlzU3ltYm9s
KCkpCisgICAgICAgIG1vZHVsZU5hbWVWYWx1ZSA9IFN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCks
IHN0YXRpY19jYXN0PFN5bWJvbEltcGwmPigqbW9kdWxlTmFtZS5pbXBsKCkpKTsKKyAgICBlbHNl
CisgICAgICAgIG1vZHVsZU5hbWVWYWx1ZSA9IGpzU3RyaW5nKCZleGVjLT52bSgpLCBtb2R1bGVO
YW1lLmltcGwoKSk7CisKKyAgICByZXR1cm4gZXZhbHVhdGVNb2R1bGUobG9jaywgZXhlYywgZ2xv
YmFsT2JqZWN0LCBtb2R1bGVOYW1lVmFsdWUsIGpzVW5kZWZpbmVkKCkpOworfQorCitKU0ludGVy
bmFsUHJvbWlzZSogZXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UpCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUkVMRUFT
RV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEo
KS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0oKS5p
c0NvbGxlY3RvckJ1c3koKSk7CiAKLSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsK
LQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFs
T2JqZWN0KCk7CiAKICAgICAvLyBHZW5lcmF0ZSB0aGUgdW5pcXVlIGtleSBmb3IgdGhlIHNvdXJj
ZS1wcm92aWRlZCBtb2R1bGUuCiAgICAgUHJpdmF0ZU5hbWUgcHJpdmF0ZU5hbWUoUHJpdmF0ZU5h
bWU6OkRlc2NyaXB0aW9uLCAiRW50cnlQb2ludE1vZHVsZSIpOwogICAgIFN5bWJvbCoga2V5ID0g
U3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0oKSwgKnByaXZhdGVOYW1lLnVpZCgpKTsKIAotICAgIE1v
ZHVsZUxvYWRlck9iamVjdCogbW9kdWxlTG9hZGVyID0gZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2Fk
ZXIoKTsKLQogICAgIC8vIEluc2VydCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUgdG8gdGhlIE1vZHVs
ZUxvYWRlciByZWdpc3RyeSBhcyB0aGUgZmV0Y2hlZCByZWdpc3RyeSBlbnRyeS4KLSAgICBtb2R1
bGVMb2FkZXItPnByb3ZpZGUoZXhlYywga2V5LCBNb2R1bGVMb2FkZXJPYmplY3Q6OlN0YXR1czo6
RmV0Y2gsIHNvdXJjZS50b1N0cmluZygpKTsKKyAgICBnbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRl
cigpLT5wcm92aWRlKGV4ZWMsIGtleSwgTW9kdWxlTG9hZGVyT2JqZWN0OjpTdGF0dXM6OkZldGNo
LCBzb3VyY2UudG9TdHJpbmcoKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0g
ICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgSlNJbnRlcm5h
bFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVj
LCBleGNlcHRpb24pOworICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKICAgICB9
CiAKLSAgICAvLyBGSVhNRTogTm93LCB3ZSBkb24ndCBpbXBsZW1lbnQgdGhlIGxpbmtpbmcgcGhh
c2UgeWV0LgotICAgIC8vIFNvIGhlcmUsIHdlIGp1c3QgY2FsbCByZXF1ZXN0SW5zdGFudGlhdGVB
bGwgdG8gb25seSBwZXJmb3JtIHRoZSBtb2R1bGUgbG9hZGluZy4KLSAgICAvLyBBdCBsYXN0LCBp
dCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCByZXF1ZXN0UmVhZHkuCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODE3MgotICAgIG1vZHVsZUxvYWRlci0+
cmVxdWVzdEluc3RhbnRpYXRlQWxsKGV4ZWMsIGtleSk7CisgICAgcmV0dXJuIGV2YWx1YXRlTW9k
dWxlKGxvY2ssIGV4ZWMsIGdsb2JhbE9iamVjdCwga2V5LCBqc1VuZGVmaW5lZCgpKTsKK30KIAot
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWxzbyBoYW5kbGUgdGhlIGFzeW5jaHJvbm91cyBTeW50
YXggRXJyb3JzIHRoYXQgd2lsbCBiZSBkZWxpdmVyZWQgYnkgdGhlIHJlamVjdGVkIHByb21pc2Uu
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODE3Mwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXR1cm5lZEV4Y2VwdGlv
biA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorSlNJbnRlcm5hbFByb21pc2UqIGV2YWx1YXRlTW9kdWxl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSkKK3sKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmF0
b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKKwor
ICAgIHJldHVybiBldmFsdWF0ZU1vZHVsZShsb2NrLCBleGVjLCBleGVjLT52bUVudHJ5R2xvYmFs
T2JqZWN0KCksIG1vZHVsZU5hbWUpOworfQorCitKU0ludGVybmFsUHJvbWlzZSogZXZhbHVhdGVN
b2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUpCit7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5h
dG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0oKS5pc0NvbGxlY3RvckJ1c3koKSk7CisK
KyAgICByZXR1cm4gZXZhbHVhdGVNb2R1bGUobG9jaywgZXhlYywgZXhlYy0+dm1FbnRyeUdsb2Jh
bE9iamVjdCgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG1vZHVsZU5hbWUpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmgKaW5kZXggZGUzMmQ2M2U2M2FjN2NlZDQ5ZDgxN2UyM2MwYjg3ODg2N2EwNWE2OS4u
Y2IwOTFmZjE2NGIyMjhkYzAyYzIyM2RkMWVkOGNkNjQ4MjkxNWE2NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaApAQCAtMzQsNiArMzQsNyBAQCBjbGFzcyBK
U1Njb3BlOwogY2xhc3MgUGFyc2VyRXJyb3I7CiBjbGFzcyBTb3VyY2VDb2RlOwogY2xhc3MgVk07
CitjbGFzcyBKU0ludGVybmFsUHJvbWlzZTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVj
a1N5bnRheChWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBQYXJzZXJFcnJvciYpOwogSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwg
SlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7CkBAIC00NCw3ICs0NSw5IEBAIGlubGluZSBKU1ZhbHVl
IGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwg
SlNWYWx1ZSB0CiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiB1bnVzZWQ7CiAgICAgcmV0dXJuIGV2
YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUsIHRoaXNWYWx1ZSwgdW51c2VkKTsKIH0KLUpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29k
ZSYsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKK0pTX0VYUE9SVF9Q
UklWQVRFIEpTSW50ZXJuYWxQcm9taXNlKiBldmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBjb25z
dCBTb3VyY2VDb2RlJik7CitKU19FWFBPUlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogZXZh
bHVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSk7CitK
U19FWFBPUlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogZXZhbHVhdGVNb2R1bGUoRXhlY1N0
YXRlKiwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9t
aXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNl
LmNwcAppbmRleCA0MjI0ZDJmNGVkODYzMjRhMGRkMmVkYzhmZDVkMGEwNmNlYjA3MmMzLi4wOTM1
OTZiYWRhYTdjNzc5NWI1NDQwMDVhMjQ5YzYxYWNkNjkwNThlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbFByb21pc2UuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2Uu
aCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlu
bGluZXMuaCIKQEAgLTUxLDQgKzUyLDE4IEBAIEpTSW50ZXJuYWxQcm9taXNlOjpKU0ludGVybmFs
UHJvbWlzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogfQogCitKU0ludGVybmFs
UHJvbWlzZSogSlNJbnRlcm5hbFByb21pc2U6OnRoZW4oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0
aW9uKiBvbkZ1bGZpbGxlZCwgSlNGdW5jdGlvbiogb25SZWplY3RlZCkKK3sKKyAgICBKU09iamVj
dCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ1aWx0aW5OYW1lcygpLnRoZW5QdWJsaWNOYW1lKCkpKTsKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rp
b24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsKKwor
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KG9uRnVsZmlsbGVkID8gb25GdWxmaWxsZWQgOiBqc1VuZGVmaW5lZCgpKTsKKyAgICBhcmd1bWVu
dHMuYXBwZW5kKG9uUmVqZWN0ZWQgPyBvblJlamVjdGVkIDoganNVbmRlZmluZWQoKSk7CisKKyAg
ICByZXR1cm4ganNDYXN0PEpTSW50ZXJuYWxQcm9taXNlKj4oY2FsbChleGVjLCBmdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzLCBhcmd1bWVudHMpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVy
bmFsUHJvbWlzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbFBy
b21pc2UuaAppbmRleCAxOTM2YWVlZTRmMDA3MjIyNTA3NzQxNGRhZjRhNDVjNjYwMDkyMGQ2Li45
N2NmMDJlOGI0MjVhODg4N2NkZjVmZWM2ZDE0ZjJhZjhkNDVhNjcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmgKQEAgLTMwLDYgKzMw
LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU0Z1bmN0aW9uOworCisvLyBKU0lu
dGVybmFsUHJvbWlzZSBpcyBjb21wbGV0ZWx5IHNlcGFyYXRlZCBpbnN0YW5jZSBmcm9tIHRoZSBK
U1Byb21pc2UuCisvLyBTaW5jZSBpdHMgcHJvdG90eXBlIGFuZCBjb25zdHJ1Y3RvciBhcmUgZGlm
ZmVyZW50IGZyb20gdGhlIGV4cG9zZWQgUHJvbWlzZXMnIG9uZXMsCisvLyBhbGwgdGhlIHVzZXIg
bW9kaWZpY2F0aW9uIG9udG8gdGhlIGV4cG9zZWQgUHJvbWlzZSBkb2VzIG5vdCBoYXZlIGVmZmVj
dCBvbiBKU0ludGVybmFsUHJvbWlzZS4KKy8vCisvLyBlLmcuCisvLyAgICAgUmVwbGFjaW5nIFBy
b21pc2UucHJvdG90eXBlLnRoZW4gd2l0aCB0aGUgdXNlci1jdXN0b21pemVkIG9uZSBkb2VzIG5v
dCBlZmZlY3Qgb24gSlNJbnRlcm5hbFByb21pc2UuCisvLworLy8gQ0FVVElPTjogTXVzdCBub3Qg
bGVhayB0aGUgSlNJbnRlcm5hbFByb21pc2UgdG8gdGhlIHVzZXIgc3BhY2UgdG8ga2VlcCBpdHMg
aW50ZWdyaXR5LgogY2xhc3MgSlNJbnRlcm5hbFByb21pc2UgOiBwdWJsaWMgSlNQcm9taXNlIHsK
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTUHJvbWlzZSBCYXNlOwpAQCAtMzksNiArNDksOCBAQCBj
bGFzcyBKU0ludGVybmFsUHJvbWlzZSA6IHB1YmxpYyBKU1Byb21pc2UgewogCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNl
KiB0aGVuKEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qID0gbnVsbHB0ciwgSlNGdW5jdGlvbiogPSBu
dWxscHRyKTsKKwogcHJpdmF0ZToKICAgICBKU0ludGVybmFsUHJvbWlzZShWTSYsIFN0cnVjdHVy
ZSopOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVs
ZUxvYWRlck9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVM
b2FkZXJPYmplY3QuY3BwCmluZGV4IDUxMmE4ZmE3ZDYwNWFjZjlmMWZhMDc3MGNhNzhkNDIzMTIy
MWM1MjkuLjFkNjdhNGNhZGU4YjQ3Y2MxOGNmNTg2NDJkNjQ0NmQwMzJmNWU3OTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlck9iamVjdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyT2JqZWN0LmNw
cApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIk1vZHVsZUxvYWRlck9iamVjdC5oIgogCiAj
aW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCisjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2lu
Y2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgpAQCAtNzUsNiArNzYsNyBAQCBjb25zdCBDbGFzc0luZm8gTW9kdWxlTG9hZGVyT2Jq
ZWN0OjpzX2luZm8gPSB7ICJNb2R1bGVMb2FkZXIiLCAmQmFzZTo6c19pbmZvLCAmbQogICAgIHJl
cXVlc3RJbnN0YW50aWF0ZSAgICAgICAgIG1vZHVsZUxvYWRlck9iamVjdFJlcXVlc3RJbnN0YW50
aWF0ZSAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKICAgICByZXF1ZXN0UmVzb2x2ZURlcGVu
ZGVuY2llcyBtb2R1bGVMb2FkZXJPYmplY3RSZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyBEb250
RW51bXxGdW5jdGlvbiAxCiAgICAgcmVxdWVzdEluc3RhbnRpYXRlQWxsICAgICAgbW9kdWxlTG9h
ZGVyT2JqZWN0UmVxdWVzdEluc3RhbnRpYXRlQWxsICAgICAgRG9udEVudW18RnVuY3Rpb24gMQor
ICAgIGxvYWRNb2R1bGUgICAgICAgICAgICAgICAgIG1vZHVsZUxvYWRlck9iamVjdExvYWRNb2R1
bGUgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKICAgICBwcm92aWRlICAgICAg
ICAgICAgICAgICAgICBtb2R1bGVMb2FkZXJPYmplY3RQcm92aWRlICAgICAgICAgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAzCiAgICAgcGFyc2VNb2R1bGUgICAgICAgICAgICAgICAgbW9k
dWxlTG9hZGVyT2JqZWN0UGFyc2VNb2R1bGUgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gMgogICAgIHJlcXVlc3RlZE1vZHVsZXMgICAgICAgICAgIG1vZHVsZUxvYWRlck9iamVjdFJl
cXVlc3RlZE1vZHVsZXMgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKQEAgLTEzNSw3ICsx
MzcsNyBAQCBKU1ZhbHVlIE1vZHVsZUxvYWRlck9iamVjdDo6cHJvdmlkZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUga2V5LCBTdGF0dXMgc3RhdHVzLAogICAgIHJldHVybiBjYWxsKGV4ZWMsIGZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3VtZW50cyk7CiB9CiAKLUpTVmFs
dWUgTW9kdWxlTG9hZGVyT2JqZWN0OjpyZXF1ZXN0SW5zdGFudGlhdGVBbGwoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGtleSkKK0pTSW50ZXJuYWxQcm9taXNlKiBNb2R1bGVMb2FkZXJPYmplY3Q6
OnJlcXVlc3RJbnN0YW50aWF0ZUFsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogewog
ICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkucmVxdWVzdEluc3RhbnRpYXRlQWxsUHVi
bGljTmFtZSgpKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC0xNDUsMTAgKzE0NywyNCBA
QCBKU1ZhbHVlIE1vZHVsZUxvYWRlck9iamVjdDo6cmVxdWVzdEluc3RhbnRpYXRlQWxsKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1l
bnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoa2V5KTsKIAotICAgIHJldHVybiBjYWxsKGV4ZWMs
IGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXMsIGFyZ3VtZW50cyk7CisgICAgcmV0
dXJuIGpzQ2FzdDxKU0ludGVybmFsUHJvbWlzZSo+KGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpcywgYXJndW1lbnRzKSk7CiB9CiAKLUpTVmFsdWUgTW9kdWxlTG9h
ZGVyT2JqZWN0OjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVl
IHJlZmVycmVyKQorSlNJbnRlcm5hbFByb21pc2UqIE1vZHVsZUxvYWRlck9iamVjdDo6bG9hZE1v
ZHVsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbW9kdWxlTmFtZSwgSlNWYWx1ZSByZWZlcnJl
cikKK3sKKyAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmxvYWRNb2R1bGVQdWJsaWNO
YW1lKCkpKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5
cGUgIT0gQ2FsbFR5cGVOb25lKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50
czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKG1vZHVsZU5hbWUpOworICAgIGFyZ3VtZW50cy5hcHBl
bmQocmVmZXJyZXIpOworCisgICAgcmV0dXJuIGpzQ2FzdDxKU0ludGVybmFsUHJvbWlzZSo+KGNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpcywgYXJndW1lbnRzKSk7
Cit9CisKK0pTSW50ZXJuYWxQcm9taXNlKiBNb2R1bGVMb2FkZXJPYmplY3Q6OnJlc29sdmUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIG5hbWUsIEpTVmFsdWUgcmVmZXJyZXIpCiB7CiAgICAgaWYg
KE9wdGlvbnM6OmR1bXBNb2R1bGVMb2FkaW5nU3RhdGUoKSkKICAgICAgICAgZGF0YUxvZygiTG9h
ZGVyIFtyZXNvbHZlXSAiLCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywgbmFtZSksICJcbiIpOwpA
QCAtMTYxLDcgKzE3Nyw3IEBAIEpTVmFsdWUgTW9kdWxlTG9hZGVyT2JqZWN0OjpyZXNvbHZlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJlZmVyCiAgICAgcmV0dXJuIGRl
ZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgTW9kdWxlTG9hZGVyT2JqZWN0OjpmZXRj
aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorSlNJbnRlcm5hbFByb21pc2UqIE1vZHVs
ZUxvYWRlck9iamVjdDo6ZmV0Y2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKIHsKICAg
ICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQogICAgICAgICBkYXRhTG9n
KCJMb2FkZXIgW2ZldGNoXSAiLCBwcmludGFibGVNb2R1bGVLZXkoZXhlYywga2V5KSwgIlxuIik7
CkBAIC0xODEsNyArMTk3LDcgQEAgSlNWYWx1ZSBNb2R1bGVMb2FkZXJPYmplY3Q6OmZldGNoKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNl
KCk7CiB9CiAKLUpTVmFsdWUgTW9kdWxlTG9hZGVyT2JqZWN0Ojp0cmFuc2xhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBwYXlsb2FkKQorSlNJbnRlcm5hbFByb21pc2Uq
IE1vZHVsZUxvYWRlck9iamVjdDo6dHJhbnNsYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXksIEpTVmFsdWUgcGF5bG9hZCkKIHsKICAgICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVsZUxvYWRp
bmdTdGF0ZSgpKQogICAgICAgICBkYXRhTG9nKCJMb2FkZXIgW3RyYW5zbGF0ZV0gIiwgcHJpbnRh
YmxlTW9kdWxlS2V5KGV4ZWMsIGtleSksICJcbiIpOwpAQCAtMTk0LDcgKzIxMCw3IEBAIEpTVmFs
dWUgTW9kdWxlTG9hZGVyT2JqZWN0Ojp0cmFuc2xhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGtleSwgSlNWYWx1ZSBwYXlsCiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAK
LUpTVmFsdWUgTW9kdWxlTG9hZGVyT2JqZWN0OjppbnN0YW50aWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5LCBKU1ZhbHVlIHNvdXJjZSkKK0pTSW50ZXJuYWxQcm9taXNlKiBNb2R1bGVM
b2FkZXJPYmplY3Q6Omluc3RhbnRpYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpT
VmFsdWUgc291cmNlKQogewogICAgIGlmIChPcHRpb25zOjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRl
KCkpCiAgICAgICAgIGRhdGFMb2coIkxvYWRlciBbaW5zdGFudGlhdGVdICIsIHByaW50YWJsZU1v
ZHVsZUtleShleGVjLCBrZXkpLCAiXG4iKTsKQEAgLTIyMCw2ICsyMzYsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlck9iamVjdFBhcnNlTW9kdWxlKEV4ZWNTdGF0
ZSogZXhlYykKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uoc291cmNl
LCBtb2R1bGVLZXkuaW1wbCgpKTsKIAorICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VD
b2RlKTsKKwogICAgIFBhcnNlckVycm9yIGVycm9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1
bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJvZ3JhbU5vZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9k
ZT4oCiAgICAgICAgICZ2bSwgc291cmNlQ29kZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0
aW5Nb2RlOjpOb3RCdWlsdGluLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTW9kdWxlTG9hZGVyT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Nb2R1bGVMb2FkZXJPYmplY3QuaAppbmRleCBmZDZjNjAxMDg4NGE0ZjQzNDlmMDlmZmY3OTNm
NDJhNWNlMjA4NDA3Li40NWI5MzJhYzU4MGFmNjBhYjUyZmQxNTAxOTM5MDk1OWFiZTA1MTAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmpl
Y3QuaApAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNJbnRl
cm5hbFByb21pc2U7CisKIGNsYXNzIE1vZHVsZUxvYWRlck9iamVjdCA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKIHByaXZhdGU6CiAgICAgTW9kdWxlTG9hZGVyT2JqZWN0KFZNJiwgU3RydWN0
dXJlKik7CkBAIC02MiwxMyArNjQsMTQgQEAgY2xhc3MgTW9kdWxlTG9hZGVyT2JqZWN0IDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogCiAgICAgLy8gQVBJcyB0byBjb250cm9sIHRoZSBtb2R1
bGUgbG9hZGVyLgogICAgIEpTVmFsdWUgcHJvdmlkZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwg
U3RhdHVzLCBjb25zdCBTdHJpbmcmKTsKLSAgICBKU1ZhbHVlIHJlcXVlc3RJbnN0YW50aWF0ZUFs
bChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHJlcXVl
c3RJbnN0YW50aWF0ZUFsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSk7CisgICAgSlNJbnRlcm5h
bFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBtb2R1bGVOYW1lLCBKU1Zh
bHVlIHJlZmVycmVyKTsKIAogICAgIC8vIFBsYXRmb3JtIGRlcGVuZGVudCBob29rZWQgQVBJcy4K
LSAgICBKU1ZhbHVlIHJlc29sdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJl
ZmVycmVyKTsKLSAgICBKU1ZhbHVlIGZldGNoKEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5KTsKLSAg
ICBKU1ZhbHVlIHRyYW5zbGF0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBwYXls
b2FkKTsKLSAgICBKU1ZhbHVlIGluc3RhbnRpYXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBK
U1ZhbHVlIHNvdXJjZSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHJlc29sdmUoRXhlY1N0YXRl
KiwgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJlZmVycmVyKTsKKyAgICBKU0ludGVybmFsUHJvbWlz
ZSogZmV0Y2goRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXkpOworICAgIEpTSW50ZXJuYWxQcm9taXNl
KiB0cmFuc2xhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgcGF5bG9hZCk7Cisg
ICAgSlNJbnRlcm5hbFByb21pc2UqIGluc3RhbnRpYXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5
LCBKU1ZhbHVlIHNvdXJjZSk7CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259588</attachid>
            <date>2015-08-20 23:59:41 -0700</date>
            <delta_ts>2015-08-24 16:39:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148173-20150820235936.patch</filename>
            <type>text/plain</type>
            <size>21235</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NzUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
Mzk4MTA2MmFjNDZhY2JlZGZmNTExNWY2MDM0YWE4OWM1MTA0N2YxLi42YTlmYzI2MjNiOGJlMzYw
N2EyZDk1Zjk0MGZmZDFkZjNlNDQ3MGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw0MiBAQAogMjAxNS0wOC0yMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBbRVM2XSBSZXR1cm4gSlNJbnRlcm5hbFByb21pc2UgYXMgcmVzdWx0
IG9mIGV2YWx1YXRlTW9kdWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDgxNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBOb3cgZXZhbHVhdGVNb2R1bGUgcmV0dXJucyBKU0ludGVybmFsUHJvbWlzZSog
YXMgaXRzIHJlc3VsdCB2YWx1ZS4KKyAgICAgICAgV2hlbiBhbiBlcnJvciBvY2N1cnMgd2hpbGUg
bG9hZGluZyBvciBleGVjdXRpbmcgdGhlIG1vZHVsZXMsCisgICAgICAgIHRoaXMgcHJvbWlzZSBp
cyByZWplY3RlZCBieSB0aGF0IGVycm9yLiBCeSBsZXZlcmFnaW5nIHRoaXMsIHdlIGltcGxlbWVu
dGVkCisgICAgICAgIGFzeW5jaHJvbm91cyBlcnJvciByZXBvcnRpbmcgd2hlbiBleGVjdXRpbmcg
dGhlIG1vZHVsZXMgaW4gSlNDIHNoZWxsLgorCisgICAgICAgIEFuZCB0aGlzIHBhdGNoIGFsc28g
Y2hhbmdlcyB0aGUgZXZhbHVhdGVNb2R1bGUgc2lnbmF0dXJlIHRvIGFjY2VwdCB0aGUgZW50cnkK
KyAgICAgICAgcG9pbnQgYnkgdGhlIG1vZHVsZU5hbWUuIEJ5IHVzaW5nIGl0LCBKU0Mgc2hlbGwg
Y2FuIHN0YXJ0IGV4ZWN1dGluZyB0aGUgbW9kdWxlcworICAgICAgICB3aXRoIHRoZSBlbnRyeSBw
b2ludCBtb2R1bGUgbmFtZS4KKworICAgICAgICAqIGJ1aWx0aW5zL01vZHVsZUxvYWRlck9iamVj
dC5qczoKKyAgICAgICAgKGxvYWRNb2R1bGUpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAg
IChkdW1wRXhjZXB0aW9uKToKKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKToKKyAgICAgICAgKiBy
dW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZU1vZHVsZSk6Cisg
ICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0ludGVy
bmFsUHJvbWlzZS5jcHA6CisgICAgICAgIChKU0M6OkpTSW50ZXJuYWxQcm9taXNlOjp0aGVuKToK
KyAgICAgICAgKiBydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmg6CisgICAgICAgICogcnVudGlt
ZS9Nb2R1bGVMb2FkZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVMb2FkZXJPYmpl
Y3Q6OnJlcXVlc3RJbnN0YW50aWF0ZUFsbCk6CisgICAgICAgIChKU0M6Ok1vZHVsZUxvYWRlck9i
amVjdDo6bG9hZE1vZHVsZSk6CisgICAgICAgIChKU0M6Ok1vZHVsZUxvYWRlck9iamVjdDo6cmVz
b2x2ZSk6CisgICAgICAgIChKU0M6Ok1vZHVsZUxvYWRlck9iamVjdDo6ZmV0Y2gpOgorICAgICAg
ICAoSlNDOjpNb2R1bGVMb2FkZXJPYmplY3Q6OnRyYW5zbGF0ZSk6CisgICAgICAgIChKU0M6Ok1v
ZHVsZUxvYWRlck9iamVjdDo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2Fk
ZXJPYmplY3RQYXJzZU1vZHVsZSk6CisgICAgICAgICogcnVudGltZS9Nb2R1bGVMb2FkZXJPYmpl
Y3QuaDoKKworMjAxNS0wOC0yMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4KKwogICAgICAgICBbRVM2XSBwcm90b3R5cGluZyBtb2R1bGUgbG9hZGVyIGluIEpTQyBzaGVs
bAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODc2
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2Fk
ZXJPYmplY3QuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9hZGVy
T2JqZWN0LmpzCmluZGV4IDFiNTVkN2Y2YmRmNzAyNjg5ZTFjNWFkNzIyZWViNzBhM2ViNWFiMzEu
LmY1MzYxMjdjYzEwZDAwNjA0NDgzODhmNGVkYjI3NzRhODU0ZDA5Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXJPYmplY3QuanMKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01vZHVsZUxvYWRlck9iamVjdC5qcwpAQCAt
Mzk2LDYgKzM5NiwyMSBAQCBmdW5jdGlvbiByZXF1ZXN0SW5zdGFudGlhdGVBbGwoa2V5KQogICAg
IHJldHVybiB0aGlzLnJlcXVlc3RSZXNvbHZlRGVwZW5kZW5jaWVzKGtleSk7CiB9CiAKK2Z1bmN0
aW9uIGxvYWRNb2R1bGUobW9kdWxlTmFtZSwgcmVmZXJyZXIpCit7CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgdmFyIGxvYWRlciA9IHRoaXM7CisgICAgLy8gTG9hZGVyLnJlc29sdmUgaG9vayBw
b2ludC4KKyAgICByZXR1cm4gdGhpcy5yZXNvbHZlKG1vZHVsZU5hbWUsIHJlZmVycmVyKS50aGVu
KGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgLy8gRklYTUU6IE5vdywgd2UgZG9uJ3QgaW1wbGVt
ZW50IHRoZSBsaW5raW5nIHBoYXNlIHlldC4KKyAgICAgICAgLy8gU28gaGVyZSwgd2UganVzdCBj
YWxsIHJlcXVlc3RJbnN0YW50aWF0ZUFsbCB0byBvbmx5IHBlcmZvcm0gdGhlIG1vZHVsZSBsb2Fk
aW5nLgorICAgICAgICAvLyBBdCBsYXN0LCBpdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCByZXF1
ZXN0UmVhZHkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDgxNzIKKyAgICAgICAgcmV0dXJuIGxvYWRlci5yZXF1ZXN0SW5zdGFudGlhdGVBbGwo
a2V5KTsKKyAgICB9KTsKK30KKwogZnVuY3Rpb24gcHJvdmlkZShrZXksIHN0YWdlLCB2YWx1ZSkK
IHsKICAgICAidXNlIHN0cmljdCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDkxODMxNmQzOTA0
ZDUwNGM5YzJjMDg2NzRkNTg0NDA5MjVmOTc2ZDEuLjEwN2YyMDBkOTBjMDliYTIzZTIyMDBjMDc4
MDU3ZDQ4MjlkOWEzNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0xMzQwLDE1ICsxMzQwLDE5
IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBqc2NFeGl0KHJlcyk7CiB9
CiAKK3N0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgZXhjZXB0aW9uKQoreworICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXhj
ZXB0aW9uLnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOworICAgIElkZW50aWZpZXIgc3Rh
Y2tJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
ICJzdGFjayIpOworICAgIEpTVmFsdWUgc3RhY2tWYWx1ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOworICAgIGlmICghc3RhY2tWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBwcmludGYoIiVzXG4iLCBzdGFja1ZhbHVlLnRvU3Ry
aW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOworfQorCiBzdGF0aWMgdm9pZCBkdW1wRXhjZXB0aW9u
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRp
b25FeGNlcHRpb24pCiB7Ci0gICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pIHsKLSAgICAgICAg
cHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1ZSgpLnRv
U3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS0+dmFsdWUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBJZGVudGlmaWVyIHN0YWNrSUQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAic3Rh
Y2siKTsKLSAgICAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+
dmFsdWUoKS5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHN0YWNrSUQpOwotICAgICAg
ICBpZiAoIXN0YWNrVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHByaW50
ZigiJXNcbiIsIHN0YWNrVmFsdWUudG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkp
LT52YWx1ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7Ci0gICAg
fQorICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQorICAgICAgICBkdW1wRXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKSk7CiB9CiAKIHN0YXRpYyBi
b29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8U2NyaXB0PiYgc2NyaXB0cywgYm9vbCBkdW1wLCBib29sIG1vZHVsZSkKQEAgLTEzNjEsMTgg
KzEzNjUsMzcgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxTY3JpcHQ+JiBzY3IKICAgICAgICAgSlNDOjpPcHRpb25z
OjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkgPSB0cnVlOwogCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyNpZiBFTkFCTEUoRVM2
X01PRFVMRVMpCisgICAgSlNGdW5jdGlvbiogZXJyb3JIYW5kbGVyID0gSlNGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsIFN0cmluZygpLCBbJl0oRXhlY1N0YXRlKiBleGVjKSB7
CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgZHVtcEV4Y2VwdGlvbihnbG9iYWxP
YmplY3QsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9KTsKKyNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTVBMSU5H
X0ZMQUdTKQogICAgIFNhbXBsaW5nRmxhZ3M6OnN0YXJ0KCk7CiAjZW5kaWYKIAotICAgIGJvb2wg
c3VjY2VzcyA9IHRydWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JpcHRzLnNpemUo
KTsgaSsrKSB7CisjaWYgRU5BQkxFKEVTNl9NT0RVTEVTKQorICAgICAgICBKU0ludGVybmFsUHJv
bWlzZSogcHJvbWlzZSA9IG51bGxwdHI7CisjZW5kaWYKICAgICAgICAgaWYgKHNjcmlwdHNbaV0u
aXNGaWxlKSB7CiAgICAgICAgICAgICBmaWxlTmFtZSA9IHNjcmlwdHNbaV0uYXJndW1lbnQ7Ci0g
ICAgICAgICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNj
cmlwdEJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBmYWlsIGVhcmx5
IHNvIHdlIGNhbiBjYXRjaCBtaXNzaW5nIGZpbGVzCi0gICAgICAgICAgICBzY3JpcHQgPSBzY3Jp
cHRCdWZmZXIuZGF0YSgpOworICAgICAgICAgICAgaWYgKG1vZHVsZSkgeworI2lmIEVOQUJMRShF
UzZfTU9EVUxFUykKKyAgICAgICAgICAgICAgICBwcm9taXNlID0gZXZhbHVhdGVNb2R1bGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZpbGVOYW1lKTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUo
ZmlsZU5hbWUsIHNjcmlwdEJ1ZmZlcikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gZmFpbCBlYXJseSBzbyB3ZSBjYW4gY2F0Y2ggbWlzc2luZyBmaWxlcworICAgICAgICAg
ICAgICAgIHNjcmlwdCA9IHNjcmlwdEJ1ZmZlci5kYXRhKCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzY3JpcHQgPSBzY3JpcHRzW2ldLmFyZ3VtZW50Owog
ICAgICAgICAgICAgZmlsZU5hbWUgPSBBU0NJSUxpdGVyYWwoIltDb21tYW5kIExpbmVdIik7CkBA
IC0xMzgyLDEwICsxNDA1LDEwIEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyCiAKICAgICAgICAg
aWYgKG1vZHVsZSkgewogI2lmIEVOQUJMRShFUzZfTU9EVUxFUykKLSAgICAgICAgICAgIE5ha2Vk
UHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKLSAgICAgICAgICAgIGV2YWx1YXRl
TW9kdWxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0LCBmaWxl
TmFtZSksIGV2YWx1YXRpb25FeGNlcHRpb24pOwotICAgICAgICAgICAgZHVtcEV4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIGV2YWx1YXRpb25FeGNlcHRpb24pOworICAgICAgICAgICAgaWYgKCFwcm9t
aXNlKQorICAgICAgICAgICAgICAgIHByb21pc2UgPSBldmFsdWF0ZU1vZHVsZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdCwgZmlsZU5hbWUpKTsKICAgICAgICAg
ICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICAgICAgcHJvbWlzZS0+dGhlbihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbnVsbHB0ciwg
ZXJyb3JIYW5kbGVyKTsKICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+dm0oKS5kcmFpbk1pY3Jv
dGFza3MoKTsKICNlbHNlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAppbmRleCAy
ZWRlNDFjYzFmYTc2NTE4ZDVlMzIxZGJmNzIwYjQzYzE3NjRjMjY0Li4yNzExNzhjMmI1ZjY0Mzdl
NjhkZTU5MmQ2MTRiODEyZmE1MWVmMjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21wbGV0aW9uLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCisjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2UuaCIKKyNpbmNsdWRlICJKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNNb2R1
bGVSZWNvcmQuaCIKICNpbmNsdWRlICJNb2R1bGVBbmFseXplci5oIgpAQCAtMTExLDQzICsxMTMs
NjMgQEAgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIE4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIGV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291
cmNlLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKK3N0YXRpYyBKU0lu
dGVybmFsUHJvbWlzZSogZXZhbHVhdGVNb2R1bGUoY29uc3QgSlNMb2NrSG9sZGVyJiwgRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG1vZHVsZU5h
bWUsIEpTVmFsdWUgcmVmZXJyZXIpCit7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+bW9kdWxl
TG9hZGVyKCktPmxvYWRNb2R1bGUoZXhlYywgbW9kdWxlTmFtZSwgcmVmZXJyZXIpOworfQorCitz
dGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIGV2YWx1YXRlTW9kdWxlKGNvbnN0IEpTTG9ja0hvbGRl
ciYgbG9jaywgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBJZGVudGlmaWVyJiBtb2R1bGVOYW1lKQoreworICAgIEpTVmFsdWUgbW9kdWxlTmFtZVZh
bHVlOworICAgIGlmIChtb2R1bGVOYW1lLmlzU3ltYm9sKCkpCisgICAgICAgIG1vZHVsZU5hbWVW
YWx1ZSA9IFN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0YXRpY19jYXN0PFN5bWJvbEltcGwm
PigqbW9kdWxlTmFtZS5pbXBsKCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1vZHVsZU5hbWVWYWx1
ZSA9IGpzU3RyaW5nKCZleGVjLT52bSgpLCBtb2R1bGVOYW1lLmltcGwoKSk7CisKKyAgICByZXR1
cm4gZXZhbHVhdGVNb2R1bGUobG9jaywgZXhlYywgZ2xvYmFsT2JqZWN0LCBtb2R1bGVOYW1lVmFs
dWUsIGpzVW5kZWZpbmVkKCkpOworfQorCitKU0ludGVybmFsUHJvbWlzZSogZXZhbHVhdGVNb2R1
bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiB7CiAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9t
aWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0oKS5pc0NvbGxlY3RvckJ1c3koKSk7CiAKLSAg
ICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKLQogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBHZW5l
cmF0ZSB0aGUgdW5pcXVlIGtleSBmb3IgdGhlIHNvdXJjZS1wcm92aWRlZCBtb2R1bGUuCiAgICAg
UHJpdmF0ZU5hbWUgcHJpdmF0ZU5hbWUoUHJpdmF0ZU5hbWU6OkRlc2NyaXB0aW9uLCAiRW50cnlQ
b2ludE1vZHVsZSIpOwogICAgIFN5bWJvbCoga2V5ID0gU3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0o
KSwgKnByaXZhdGVOYW1lLnVpZCgpKTsKIAotICAgIE1vZHVsZUxvYWRlck9iamVjdCogbW9kdWxl
TG9hZGVyID0gZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKTsKLQogICAgIC8vIEluc2VydCB0
aGUgZ2l2ZW4gc291cmNlIGNvZGUgdG8gdGhlIE1vZHVsZUxvYWRlciByZWdpc3RyeSBhcyB0aGUg
ZmV0Y2hlZCByZWdpc3RyeSBlbnRyeS4KLSAgICBtb2R1bGVMb2FkZXItPnByb3ZpZGUoZXhlYywg
a2V5LCBNb2R1bGVMb2FkZXJPYmplY3Q6OlN0YXR1czo6RmV0Y2gsIHNvdXJjZS50b1N0cmluZygp
KTsKKyAgICBnbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92aWRlKGV4ZWMsIGtleSwg
TW9kdWxlTG9hZGVyT2JqZWN0OjpTdGF0dXM6OkZldGNoLCBzb3VyY2UudG9TdHJpbmcoKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHJldHVybmVkRXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+
ZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJy
ZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOworICAgICAgICBy
ZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogTm93LCB3
ZSBkb24ndCBpbXBsZW1lbnQgdGhlIGxpbmtpbmcgcGhhc2UgeWV0LgotICAgIC8vIFNvIGhlcmUs
IHdlIGp1c3QgY2FsbCByZXF1ZXN0SW5zdGFudGlhdGVBbGwgdG8gb25seSBwZXJmb3JtIHRoZSBt
b2R1bGUgbG9hZGluZy4KLSAgICAvLyBBdCBsYXN0LCBpdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0
aCByZXF1ZXN0UmVhZHkuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0ODE3MgotICAgIG1vZHVsZUxvYWRlci0+cmVxdWVzdEluc3RhbnRpYXRlQWxsKGV4
ZWMsIGtleSk7CisgICAgcmV0dXJuIGV2YWx1YXRlTW9kdWxlKGxvY2ssIGV4ZWMsIGdsb2JhbE9i
amVjdCwga2V5LCBqc1VuZGVmaW5lZCgpKTsKK30KIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YWxzbyBoYW5kbGUgdGhlIGFzeW5jaHJvbm91cyBTeW50YXggRXJyb3JzIHRoYXQgd2lsbCBiZSBk
ZWxpdmVyZWQgYnkgdGhlIHJlamVjdGVkIHByb21pc2UuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODE3MwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewotICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
SlNJbnRlcm5hbFByb21pc2UqIGV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgbW9kdWxlTmFtZSkKK3sKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3Rm
VGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFl
eGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKKworICAgIHJldHVybiBldmFsdWF0ZU1vZHVs
ZShsb2NrLCBleGVjLCBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCksIG1vZHVsZU5hbWUpOwor
fQorCitKU0ludGVybmFsUHJvbWlzZSogZXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIG1vZHVsZU5hbWUpCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CisgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0
ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
ZXhlYy0+dm0oKS5pc0NvbGxlY3RvckJ1c3koKSk7CisKKyAgICByZXR1cm4gZXZhbHVhdGVNb2R1
bGUobG9jaywgZXhlYywgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsIG1vZHVsZU5hbWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgKaW5kZXggZGUzMmQ2M2U2
M2FjN2NlZDQ5ZDgxN2UyM2MwYjg3ODg2N2EwNWE2OS4uY2IwOTFmZjE2NGIyMjhkYzAyYzIyM2Rk
MWVkOGNkNjQ4MjkxNWE2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tcGxldGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBs
ZXRpb24uaApAQCAtMzQsNiArMzQsNyBAQCBjbGFzcyBKU1Njb3BlOwogY2xhc3MgUGFyc2VyRXJy
b3I7CiBjbGFzcyBTb3VyY2VDb2RlOwogY2xhc3MgVk07CitjbGFzcyBKU0ludGVybmFsUHJvbWlz
ZTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVja1N5bnRheChWTSYsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBQYXJzZXJFcnJvciYpOwogSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjaGVja1N5bnRh
eChFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7
CkBAIC00NCw3ICs0NSw5IEBAIGlubGluZSBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgSlNWYWx1ZSB0CiAgICAgTmFrZWRQdHI8
RXhjZXB0aW9uPiB1bnVzZWQ7CiAgICAgcmV0dXJuIGV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUs
IHRoaXNWYWx1ZSwgdW51c2VkKTsKIH0KLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZXZhbHVhdGVN
b2R1bGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIE5ha2VkUHRyPEV4Y2VwdGlvbj4m
IHJldHVybmVkRXhjZXB0aW9uKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNl
KiBldmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CitKU19FWFBP
UlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogZXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgbW9kdWxlTmFtZSk7CitKU19FWFBPUlRfUFJJVkFURSBKU0ludGVy
bmFsUHJvbWlzZSogZXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBtb2R1
bGVOYW1lKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50ZXJuYWxQcm9taXNlLmNwcAppbmRleCA0MjI0ZDJmNGVkODYz
MjRhMGRkMmVkYzhmZDVkMGEwNmNlYjA3MmMzLi4wOTM1OTZiYWRhYTdjNzc5NWI1NDQwMDVhMjQ5
YzYxYWNkNjkwNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludGVybmFsUHJvbWlzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnRlcm5hbFByb21pc2UuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2UuaCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5O
YW1lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxs
SW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKQEAgLTUxLDQgKzUyLDE4
IEBAIEpTSW50ZXJuYWxQcm9taXNlOjpKU0ludGVybmFsUHJvbWlzZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogewogfQogCitKU0ludGVybmFsUHJvbWlzZSogSlNJbnRlcm5hbFByb21p
c2U6OnRoZW4oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBvbkZ1bGZpbGxlZCwgSlNGdW5j
dGlvbiogb25SZWplY3RlZCkKK3sKKyAgICBKU09iamVjdCogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNP
YmplY3QqPihnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLnRo
ZW5QdWJsaWNOYW1lKCkpKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBBU1NF
UlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5kKG9uRnVsZmlsbGVkID8gb25GdWxmaWxs
ZWQgOiBqc1VuZGVmaW5lZCgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKG9uUmVqZWN0ZWQgPyBv
blJlamVjdGVkIDoganNVbmRlZmluZWQoKSk7CisKKyAgICByZXR1cm4ganNDYXN0PEpTSW50ZXJu
YWxQcm9taXNlKj4oY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
LCBhcmd1bWVudHMpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludGVybmFsUHJvbWlzZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnRlcm5hbFByb21pc2UuaAppbmRleCAxOTM2YWVlZTRm
MDA3MjIyNTA3NzQxNGRhZjRhNDVjNjYwMDkyMGQ2Li45N2NmMDJlOGI0MjVhODg4N2NkZjVmZWM2
ZDE0ZjJhZjhkNDVhNjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ludGVybmFsUHJvbWlzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW50ZXJuYWxQcm9taXNlLmgKQEAgLTMwLDYgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBKU0Z1bmN0aW9uOworCisvLyBKU0ludGVybmFsUHJvbWlzZSBpcyBjb21wbGV0
ZWx5IHNlcGFyYXRlZCBpbnN0YW5jZSBmcm9tIHRoZSBKU1Byb21pc2UuCisvLyBTaW5jZSBpdHMg
cHJvdG90eXBlIGFuZCBjb25zdHJ1Y3RvciBhcmUgZGlmZmVyZW50IGZyb20gdGhlIGV4cG9zZWQg
UHJvbWlzZXMnIG9uZXMsCisvLyBhbGwgdGhlIHVzZXIgbW9kaWZpY2F0aW9uIG9udG8gdGhlIGV4
cG9zZWQgUHJvbWlzZSBkb2VzIG5vdCBoYXZlIGVmZmVjdCBvbiBKU0ludGVybmFsUHJvbWlzZS4K
Ky8vCisvLyBlLmcuCisvLyAgICAgUmVwbGFjaW5nIFByb21pc2UucHJvdG90eXBlLnRoZW4gd2l0
aCB0aGUgdXNlci1jdXN0b21pemVkIG9uZSBkb2VzIG5vdCBlZmZlY3Qgb24gSlNJbnRlcm5hbFBy
b21pc2UuCisvLworLy8gQ0FVVElPTjogTXVzdCBub3QgbGVhayB0aGUgSlNJbnRlcm5hbFByb21p
c2UgdG8gdGhlIHVzZXIgc3BhY2UgdG8ga2VlcCBpdHMgaW50ZWdyaXR5LgogY2xhc3MgSlNJbnRl
cm5hbFByb21pc2UgOiBwdWJsaWMgSlNQcm9taXNlIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpT
UHJvbWlzZSBCYXNlOwpAQCAtMzksNiArNDksOCBAQCBjbGFzcyBKU0ludGVybmFsUHJvbWlzZSA6
IHB1YmxpYyBKU1Byb21pc2UgewogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAorICAgIEpT
X0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNlKiB0aGVuKEV4ZWNTdGF0ZSosIEpTRnVu
Y3Rpb24qID0gbnVsbHB0ciwgSlNGdW5jdGlvbiogPSBudWxscHRyKTsKKwogcHJpdmF0ZToKICAg
ICBKU0ludGVybmFsUHJvbWlzZShWTSYsIFN0cnVjdHVyZSopOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlck9iamVjdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuY3BwCmluZGV4IDUx
MmE4ZmE3ZDYwNWFjZjlmMWZhMDc3MGNhNzhkNDIzMTIyMWM1MjkuLjFkNjdhNGNhZGU4YjQ3Y2Mx
OGNmNTg2NDJkNjQ0NmQwMzJmNWU3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01vZHVsZUxvYWRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyT2JqZWN0LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIk1vZHVsZUxvYWRlck9iamVjdC5oIgogCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgi
CisjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNzUsNiArNzYsNyBA
QCBjb25zdCBDbGFzc0luZm8gTW9kdWxlTG9hZGVyT2JqZWN0OjpzX2luZm8gPSB7ICJNb2R1bGVM
b2FkZXIiLCAmQmFzZTo6c19pbmZvLCAmbQogICAgIHJlcXVlc3RJbnN0YW50aWF0ZSAgICAgICAg
IG1vZHVsZUxvYWRlck9iamVjdFJlcXVlc3RJbnN0YW50aWF0ZSAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uIDEKICAgICByZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyBtb2R1bGVMb2FkZXJPYmpl
Y3RSZXF1ZXN0UmVzb2x2ZURlcGVuZGVuY2llcyBEb250RW51bXxGdW5jdGlvbiAxCiAgICAgcmVx
dWVzdEluc3RhbnRpYXRlQWxsICAgICAgbW9kdWxlTG9hZGVyT2JqZWN0UmVxdWVzdEluc3RhbnRp
YXRlQWxsICAgICAgRG9udEVudW18RnVuY3Rpb24gMQorICAgIGxvYWRNb2R1bGUgICAgICAgICAg
ICAgICAgIG1vZHVsZUxvYWRlck9iamVjdExvYWRNb2R1bGUgICAgICAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDIKICAgICBwcm92aWRlICAgICAgICAgICAgICAgICAgICBtb2R1bGVMb2Fk
ZXJPYmplY3RQcm92aWRlICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCiAg
ICAgcGFyc2VNb2R1bGUgICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVyT2JqZWN0UGFyc2VNb2R1
bGUgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgogICAgIHJlcXVlc3RlZE1vZHVs
ZXMgICAgICAgICAgIG1vZHVsZUxvYWRlck9iamVjdFJlcXVlc3RlZE1vZHVsZXMgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uIDEKQEAgLTEzNSw3ICsxMzcsNyBAQCBKU1ZhbHVlIE1vZHVsZUxv
YWRlck9iamVjdDo6cHJvdmlkZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBTdGF0dXMg
c3RhdHVzLAogICAgIHJldHVybiBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXMsIGFyZ3VtZW50cyk7CiB9CiAKLUpTVmFsdWUgTW9kdWxlTG9hZGVyT2JqZWN0Ojpy
ZXF1ZXN0SW5zdGFudGlhdGVBbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKK0pTSW50
ZXJuYWxQcm9taXNlKiBNb2R1bGVMb2FkZXJPYmplY3Q6OnJlcXVlc3RJbnN0YW50aWF0ZUFsbChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogewogICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9
IGpzQ2FzdDxKU09iamVjdCo+KGdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRp
bk5hbWVzKCkucmVxdWVzdEluc3RhbnRpYXRlQWxsUHVibGljTmFtZSgpKSk7CiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CkBAIC0xNDUsMTAgKzE0NywyNCBAQCBKU1ZhbHVlIE1vZHVsZUxvYWRlck9i
amVjdDo6cmVxdWVzdEluc3RhbnRpYXRlQWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkp
CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBl
bmQoa2V5KTsKIAotICAgIHJldHVybiBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIHRoaXMsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuIGpzQ2FzdDxKU0ludGVybmFsUHJv
bWlzZSo+KGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpcywgYXJn
dW1lbnRzKSk7CiB9CiAKLUpTVmFsdWUgTW9kdWxlTG9hZGVyT2JqZWN0OjpyZXNvbHZlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJlZmVycmVyKQorSlNJbnRlcm5hbFBy
b21pc2UqIE1vZHVsZUxvYWRlck9iamVjdDo6bG9hZE1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgbW9kdWxlTmFtZSwgSlNWYWx1ZSByZWZlcnJlcikKK3sKKyAgICBKU09iamVjdCogZnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNPYmplY3QqPihnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1aWx0aW5OYW1lcygpLmxvYWRNb2R1bGVQdWJsaWNOYW1lKCkpKTsKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoZnVuY3Rp
b24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsKKwor
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KG1vZHVsZU5hbWUpOworICAgIGFyZ3VtZW50cy5hcHBlbmQocmVmZXJyZXIpOworCisgICAgcmV0
dXJuIGpzQ2FzdDxKU0ludGVybmFsUHJvbWlzZSo+KGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpcywgYXJndW1lbnRzKSk7Cit9CisKK0pTSW50ZXJuYWxQcm9taXNl
KiBNb2R1bGVMb2FkZXJPYmplY3Q6OnJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG5h
bWUsIEpTVmFsdWUgcmVmZXJyZXIpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmR1bXBNb2R1bGVMb2Fk
aW5nU3RhdGUoKSkKICAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtyZXNvbHZlXSAiLCBwcmludGFi
bGVNb2R1bGVLZXkoZXhlYywgbmFtZSksICJcbiIpOwpAQCAtMTYxLDcgKzE3Nyw3IEBAIEpTVmFs
dWUgTW9kdWxlTG9hZGVyT2JqZWN0OjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBu
YW1lLCBKU1ZhbHVlIHJlZmVyCiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAK
LUpTVmFsdWUgTW9kdWxlTG9hZGVyT2JqZWN0OjpmZXRjaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUga2V5KQorSlNJbnRlcm5hbFByb21pc2UqIE1vZHVsZUxvYWRlck9iamVjdDo6ZmV0Y2goRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKIHsKICAgICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVs
ZUxvYWRpbmdTdGF0ZSgpKQogICAgICAgICBkYXRhTG9nKCJMb2FkZXIgW2ZldGNoXSAiLCBwcmlu
dGFibGVNb2R1bGVLZXkoZXhlYywga2V5KSwgIlxuIik7CkBAIC0xODEsNyArMTk3LDcgQEAgSlNW
YWx1ZSBNb2R1bGVMb2FkZXJPYmplY3Q6OmZldGNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXkpCiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgTW9kdWxl
TG9hZGVyT2JqZWN0Ojp0cmFuc2xhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNW
YWx1ZSBwYXlsb2FkKQorSlNJbnRlcm5hbFByb21pc2UqIE1vZHVsZUxvYWRlck9iamVjdDo6dHJh
bnNsYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgcGF5bG9hZCkKIHsK
ICAgICBpZiAoT3B0aW9uczo6ZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSgpKQogICAgICAgICBkYXRh
TG9nKCJMb2FkZXIgW3RyYW5zbGF0ZV0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIGtleSks
ICJcbiIpOwpAQCAtMTk0LDcgKzIxMCw3IEBAIEpTVmFsdWUgTW9kdWxlTG9hZGVyT2JqZWN0Ojp0
cmFuc2xhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBwYXlsCiAgICAg
cmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKLUpTVmFsdWUgTW9kdWxlTG9hZGVyT2Jq
ZWN0OjppbnN0YW50aWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHNv
dXJjZSkKK0pTSW50ZXJuYWxQcm9taXNlKiBNb2R1bGVMb2FkZXJPYmplY3Q6Omluc3RhbnRpYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgc291cmNlKQogewogICAgIGlm
IChPcHRpb25zOjpkdW1wTW9kdWxlTG9hZGluZ1N0YXRlKCkpCiAgICAgICAgIGRhdGFMb2coIkxv
YWRlciBbaW5zdGFudGlhdGVdICIsIHByaW50YWJsZU1vZHVsZUtleShleGVjLCBrZXkpLCAiXG4i
KTsKQEAgLTIyMCw2ICsyMzYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlck9iamVjdFBhcnNlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgIFNvdXJjZUNv
ZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uoc291cmNlLCBtb2R1bGVLZXkuaW1wbCgpKTsKIAor
ICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKKwogICAgIFBhcnNlckVycm9y
IGVycm9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJv
Z3JhbU5vZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9kZT4oCiAgICAgICAgICZ2bSwgc291cmNl
Q29kZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyT2JqZWN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuaApp
bmRleCBmZDZjNjAxMDg4NGE0ZjQzNDlmMDlmZmY3OTNmNDJhNWNlMjA4NDA3Li40NWI5MzJhYzU4
MGFmNjBhYjUyZmQxNTAxOTM5MDk1OWFiZTA1MTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJPYmplY3QuaApAQCAtMzAsNiArMzAsOCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNJbnRlcm5hbFByb21pc2U7CisKIGNsYXNzIE1v
ZHVsZUxvYWRlck9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHByaXZhdGU6CiAg
ICAgTW9kdWxlTG9hZGVyT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CkBAIC02MiwxMyArNjQsMTQg
QEAgY2xhc3MgTW9kdWxlTG9hZGVyT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
CiAgICAgLy8gQVBJcyB0byBjb250cm9sIHRoZSBtb2R1bGUgbG9hZGVyLgogICAgIEpTVmFsdWUg
cHJvdmlkZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgU3RhdHVzLCBjb25zdCBTdHJpbmcmKTsK
LSAgICBKU1ZhbHVlIHJlcXVlc3RJbnN0YW50aWF0ZUFsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtl
eSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIHJlcXVlc3RJbnN0YW50aWF0ZUFsbChFeGVjU3Rh
dGUqLCBKU1ZhbHVlIGtleSk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSBtb2R1bGVOYW1lLCBKU1ZhbHVlIHJlZmVycmVyKTsKIAogICAgIC8v
IFBsYXRmb3JtIGRlcGVuZGVudCBob29rZWQgQVBJcy4KLSAgICBKU1ZhbHVlIHJlc29sdmUoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVlIHJlZmVycmVyKTsKLSAgICBKU1ZhbHVlIGZl
dGNoKEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5KTsKLSAgICBKU1ZhbHVlIHRyYW5zbGF0ZShFeGVj
U3RhdGUqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSBwYXlsb2FkKTsKLSAgICBKU1ZhbHVlIGluc3Rh
bnRpYXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHNvdXJjZSk7CisgICAgSlNJ
bnRlcm5hbFByb21pc2UqIHJlc29sdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBuYW1lLCBKU1ZhbHVl
IHJlZmVycmVyKTsKKyAgICBKU0ludGVybmFsUHJvbWlzZSogZmV0Y2goRXhlY1N0YXRlKiwgSlNW
YWx1ZSBrZXkpOworICAgIEpTSW50ZXJuYWxQcm9taXNlKiB0cmFuc2xhdGUoRXhlY1N0YXRlKiwg
SlNWYWx1ZSBrZXksIEpTVmFsdWUgcGF5bG9hZCk7CisgICAgSlNJbnRlcm5hbFByb21pc2UqIGlu
c3RhbnRpYXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHNvdXJjZSk7CiAKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCg==
</data>
<flag name="review"
          id="284787"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>