<?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>142408</bug_id>
          
          <creation_ts>2015-03-06 13:13:59 -0800</creation_ts>
          <short_desc>[ES6] Implement WeakSet</short_desc>
          <delta_ts>2015-04-19 11:09:23 -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>528+ (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>142348</dependson>
    
    <dependson>142556</dependson>
          <blocked>143919</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1075071</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-06 13:13:59 -0800</bug_when>
    <thetext>During upgrade of Map/Set/WeakMap constructor interface, I&apos;ve found that WeakSet implementation is missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076174</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-10 19:04:11 -0700</bug_when>
    <thetext>Since MapData change becomes a little bit large, at first, I&apos;ll create the separate patch to integrate MapData into JSMap / JSSet.
https://bugs.webkit.org/show_bug.cgi?id=142556</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077131</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-14 00:49:58 -0700</bug_when>
    <thetext>OK, MapData is done.
So I&apos;ll perform the same thing on WeakMapData :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086563</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-18 11:49:02 -0700</bug_when>
    <thetext>At first, implement ES6 WeakSet and after that, optimize WeakMapData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086564</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-18 11:49:28 -0700</bug_when>
    <thetext>Since WeakMap / WeakSet doesn&apos;t have iterators, optimization is a little bit easier than MapData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086600</commentid>
    <comment_count>5</comment_count>
      <attachid>251103</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-18 18:10:57 -0700</bug_when>
    <thetext>Created attachment 251103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086642</commentid>
    <comment_count>6</comment_count>
      <attachid>251103</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-19 09:23:39 -0700</bug_when>
    <thetext>Comment on attachment 251103
Patch

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

&gt; Source/JavaScriptCore/runtime/JSWeakSet.cpp:2
&gt; + * Copyright (C) 2013 Apple, Inc. All rights reserved.

Copyright is based on date of publication (the time we publish in the open source repository). So it should be 2015 unless this code was published in 2013.

&gt; Source/JavaScriptCore/runtime/JSWeakSet.h:2
&gt; + * Copyright (C) 2013 Apple, Inc. All rights reserved.

Same issue with copyright date.

&gt; Source/JavaScriptCore/runtime/WeakMapPrototype.cpp:88
&gt;      if (!key.isObject())
&gt; -        return JSValue::encode(throwTypeError(callFrame, WTF::ASCIILiteral(&quot;A WeakMap cannot have a non-object key&quot;)));
&gt; +        return JSValue::encode(jsBoolean(false));
&gt;      return JSValue::encode(jsBoolean(map-&gt;remove(asObject(key))));

Now that this is always a boolean, I think we can write it more cleanly:

    return JSValue::encode(jsBoolean(key.isObject() &amp;&amp; map-&gt;remove(asObject(key)));

No need for the three-line version with the separate early return.

&gt; Source/JavaScriptCore/runtime/WeakMapPrototype.cpp:98
&gt; +        return JSValue::encode(jsUndefined());

Should this be undefined, or null? The change log comment mentions only &quot;false&quot;.

&gt; Source/JavaScriptCore/runtime/WeakMapPrototype.cpp:110
&gt;      if (!key.isObject())
&gt; -        return JSValue::encode(throwTypeError(callFrame, WTF::ASCIILiteral(&quot;A WeakMap cannot have a non-object key&quot;)));
&gt; +        return JSValue::encode(jsBoolean(false));
&gt;      return JSValue::encode(jsBoolean(map-&gt;contains(asObject(key))));

Now that this is always a boolean, I think we can write it more cleanly:

    return JSValue::encode(jsBoolean(key.isObject() &amp;&amp; map-&gt;contains(asObject(key)));

No need for the three-line version with the separate early return.

&gt; Source/JavaScriptCore/runtime/WeakSetConstructor.cpp:2
&gt; + * Copyright (C) 2013 Apple, Inc. All rights reserved.

Same issue with copyright.

&gt; Source/JavaScriptCore/runtime/WeakSetConstructor.h:2
&gt; + * Copyright (C) 2013 Apple, Inc. All rights reserved.

Same issue with copyright.

&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.cpp:2
&gt; + * Copyright (C) 2013 Apple, Inc. All rights reserved.

Same issue with copyright.

&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.cpp:57
&gt; +        return 0;

nullptr

&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.cpp:64
&gt; +    return 0;

nullptr

&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.cpp:75
&gt; +    JSValue key = callFrame-&gt;argument(0);
&gt; +    if (!key.isObject())
&gt; +        return JSValue::encode(jsBoolean(false));
&gt; +    return JSValue::encode(jsBoolean(map-&gt;remove(asObject(key))));

Now that this is always a boolean, I think we can write it more cleanly:

    return JSValue::encode(jsBoolean(key.isObject() &amp;&amp; map-&gt;remove(asObject(key)));

No need for the three-line version with the separate early return.

&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.cpp:86
&gt; +    if (!key.isObject())
&gt; +        return JSValue::encode(jsBoolean(false));
&gt; +    return JSValue::encode(jsBoolean(map-&gt;contains(asObject(key))));

Now that this is always a boolean, I think we can write it more cleanly:

    return JSValue::encode(jsBoolean(key.isObject() &amp;&amp; map-&gt;contains(asObject(key)));

No need for the three-line version with the separate early return.

&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.h:2
&gt; + * Copyright (C) 2013 Apple, Inc. All rights reserved.

Same issue with copyright date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086646</commentid>
    <comment_count>7</comment_count>
      <attachid>251103</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-19 10:46:00 -0700</bug_when>
    <thetext>Comment on attachment 251103
Patch

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

Thank you for your review and detailed comments!

&gt;&gt; Source/JavaScriptCore/runtime/JSWeakSet.cpp:2
&gt;&gt; + * Copyright (C) 2013 Apple, Inc. All rights reserved.
&gt; 
&gt; Copyright is based on date of publication (the time we publish in the open source repository). So it should be 2015 unless this code was published in 2013.

Thanks! I&apos;ll fix it.

&gt;&gt; Source/JavaScriptCore/runtime/JSWeakSet.h:2
&gt;&gt; + * Copyright (C) 2013 Apple, Inc. All rights reserved.
&gt; 
&gt; Same issue with copyright date.

Done

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapPrototype.cpp:88
&gt;&gt;      return JSValue::encode(jsBoolean(map-&gt;remove(asObject(key))));
&gt; 
&gt; Now that this is always a boolean, I think we can write it more cleanly:
&gt; 
&gt;     return JSValue::encode(jsBoolean(key.isObject() &amp;&amp; map-&gt;remove(asObject(key)));
&gt; 
&gt; No need for the three-line version with the separate early return.

OK. I&apos;ll follow it :)

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapPrototype.cpp:98
&gt;&gt; +        return JSValue::encode(jsUndefined());
&gt; 
&gt; Should this be undefined, or null? The change log comment mentions only &quot;false&quot;.

Oops! Thank you. The code is correct. We need to fix change log comment.
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-weakmap.prototype.get

&gt;&gt; Source/JavaScriptCore/runtime/WeakMapPrototype.cpp:110
&gt;&gt;      return JSValue::encode(jsBoolean(map-&gt;contains(asObject(key))));
&gt; 
&gt; Now that this is always a boolean, I think we can write it more cleanly:
&gt; 
&gt;     return JSValue::encode(jsBoolean(key.isObject() &amp;&amp; map-&gt;contains(asObject(key)));
&gt; 
&gt; No need for the three-line version with the separate early return.

Done.

&gt;&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.cpp:57
&gt;&gt; +        return 0;
&gt; 
&gt; nullptr

Nice! I also fixed them in WeakMapPrototype.cpp.

&gt;&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.cpp:64
&gt;&gt; +    return 0;
&gt; 
&gt; nullptr

Done.

&gt;&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.cpp:75
&gt;&gt; +    return JSValue::encode(jsBoolean(map-&gt;remove(asObject(key))));
&gt; 
&gt; Now that this is always a boolean, I think we can write it more cleanly:
&gt; 
&gt;     return JSValue::encode(jsBoolean(key.isObject() &amp;&amp; map-&gt;remove(asObject(key)));
&gt; 
&gt; No need for the three-line version with the separate early return.

Done.

&gt;&gt; Source/JavaScriptCore/runtime/WeakSetPrototype.cpp:86
&gt;&gt; +    return JSValue::encode(jsBoolean(map-&gt;contains(asObject(key))));
&gt; 
&gt; Now that this is always a boolean, I think we can write it more cleanly:
&gt; 
&gt;     return JSValue::encode(jsBoolean(key.isObject() &amp;&amp; map-&gt;contains(asObject(key)));
&gt; 
&gt; No need for the three-line version with the separate early return.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086648</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-19 11:09:23 -0700</bug_when>
    <thetext>Committed r182994: &lt;http://trac.webkit.org/changeset/182994&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251103</attachid>
            <date>2015-04-18 18:10:57 -0700</date>
            <delta_ts>2015-04-19 09:23:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142408-20150419100956.patch</filename>
            <type>text/plain</type>
            <size>56665</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyOTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZjgxNmY4OTBjZmYxZmViOTNiZGMyYzY4NGI4MjJiZDRlMDVmZGY4Li45MDMzYzNlMzQyMDA0YzJl
ZGUxOWE4NmRiODkxOTZlZTQzNDBhZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNS0wNC0xOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbRVM2XSBJbXBsZW1lbnQgV2Vha1NldAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNDA4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIEVT
NiBXZWFrU2V0LgorICAgICAgICBDdXJyZW50IGltcGxlbWVudGF0aW9uIHNpbXBseSBsZXZlcmFn
ZXMgV2Vha01hcERhdGEgd2l0aCB1bmRlZmluZWQgdmFsdWUuCisgICAgICAgIFRoaXMgV2Vha01h
cERhdGEgc2hvdWxkIGJlIG9wdGltaXplZCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgTWFwRGF0YS9T
ZXREYXRhIGluIHRoZSBzdWJzZXF1ZW50IHBhdGNoWzFdLgorCisgICAgICAgIEFuZCBpbiB0aGlz
IHBhdGNoLCB3ZSBhbHNvIGZpeCBXZWFrTWFwL1dlYWtTZXQgYmVoYXZpb3IgdG8gY29uZm9ybSB0
aGUgRVM2IHNwZWMuCisgICAgICAgIEV4Y2VwdCBmb3IgYWRkZXJzIChXZWFrTWFwLnByb3RvdHlw
ZS5zZXQvV2Vha1NldC5wcm90b3R5cGUuYWRkKSwKKyAgICAgICAgbWV0aG9kcyByZXR1cm4gZmFs
c2Ugd2hlbiBhIGtleSBpcyBub3QgT2JqZWN0LgorCisgICAgICAgIFsxXTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzkxOQorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTV2Vha1NldC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpKU1dlYWtTZXQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SlNXZWFrU2V0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTV2Vha1NldC5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWFrU2V0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAoSlNDOjpKU1dlYWtTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2Vha1NldDo6
d2Vha01hcERhdGEpOgorICAgICAgICAoSlNDOjpKU1dlYWtTZXQ6OkpTV2Vha1NldCk6CisgICAg
ICAgICogcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cHJvdG9G
dW5jV2Vha01hcERlbGV0ZSk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtNYXBHZXQpOgor
ICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrTWFwSGFzKToKKyAgICAgICAgKiBydW50aW1lL1dl
YWtTZXRDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXZWFrU2V0Q29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Y2FsbFdlYWtTZXQpOgorICAg
ICAgICAoSlNDOjpjb25zdHJ1Y3RXZWFrU2V0KToKKyAgICAgICAgKEpTQzo6V2Vha1NldENvbnN0
cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6V2Vha1NldENvbnN0cnVj
dG9yOjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3Iu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OldlYWtTZXRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6V2Vha1NldENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpXZWFrU2V0Q29uc3RydWN0b3I6OldlYWtTZXRDb25zdHJ1Y3Rvcik6CisgICAgICAg
ICogcnVudGltZS9XZWFrU2V0UHJvdG90eXBlLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAuCisgICAgICAgIChKU0M6Oldl
YWtTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0V2Vha01h
cERhdGEpOgorICAgICAgICAoSlNDOjpwcm90b0Z1bmNXZWFrU2V0RGVsZXRlKToKKyAgICAgICAg
KEpTQzo6cHJvdG9GdW5jV2Vha1NldEhhcyk6CisgICAgICAgIChKU0M6OnByb3RvRnVuY1dlYWtT
ZXRBZGQpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha1NldFByb3RvdHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6V2Vha1NldFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2Vh
a1NldFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V2Vha1NldFBy
b3RvdHlwZTo6V2Vha1NldFByb3RvdHlwZSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dlYWst
c2V0LWNvbnN0cnVjdG9yLWFkZGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYWtTZXQucHJvdG90
eXBlLmFkZCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dlYWstc2V0LWNvbnN0cnVjdG9yLmpz
OiBBZGRlZC4KKwogMjAxNS0wNC0xNyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIEJvdW5kc0NoZWNrZWRQb2ludGVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZmJjZTBiNmI5OTZjMjE4OTI3ZWUzNDRhM2Yz
MjFiZmI4NDcwYzc5Mi4uNjE5YThhYWI4YWVmNzMwNDVhZDQwNWEwNDY0YzU0MDA1ZDY2NWQxZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTA4LDYgKzUwOCw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0pTVHlwZWRBcnJh
eVByb3RvdHlwZXMuY3BwCiAgICAgcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAogICAgIHJ1bnRp
bWUvSlNXZWFrTWFwLmNwcAorICAgIHJ1bnRpbWUvSlNXZWFrU2V0LmNwcAogICAgIHJ1bnRpbWUv
SlNXaXRoU2NvcGUuY3BwCiAgICAgcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCiAgICAgcnVu
dGltZS9MaXRlcmFsUGFyc2VyLmNwcApAQCAtNTg1LDYgKzU4Niw4IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAK
ICAgICBydW50aW1lL1dlYWtNYXBEYXRhLmNwcAogICAgIHJ1bnRpbWUvV2Vha01hcFByb3RvdHlw
ZS5jcHAKKyAgICBydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL1dl
YWtTZXRQcm90b3R5cGUuY3BwCiApCiAKIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCmluZGV4IGZmN2E4ZTE2NzI3
YWYyNGViY2FjMzY4NzBhNTBkYTUxNGZjOTBmNmUuLmY2ZjFhNTk0MWU1NGJkYjg3NTRlM2ZiMzk1
MmI5NjM3MWNiZjk4MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagpA
QCAtNzcyLDYgKzc3Miw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
VHlwZWRBcnJheXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U0Vudmlyb25tZW50UmVjb3JkLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNXZWFrTWFwLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNXZWFrU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNXaXRoU2NvcGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U1dyYXBwZXJPYmplY3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxMaXRlcmFsUGFyc2VyLmNwcCIgLz4KQEAgLTg0OSw2ICs4NTAsOCBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrTWFwQ29uc3RydWN0b3IuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrTWFwRGF0YS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtNYXBQcm90b3R5cGUuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrU2V0Q29uc3RydWN0b3IuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrU2V0UHJvdG90eXBlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHRvb2xzXENvZGVQcm9maWxlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHRvb2xzXENvZGVQcm9maWxpbmcuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdG9vbHNcRnVuY3Rpb25PdmVycmlkZXMuY3Bw
IiAvPgpAQCAtMTU4OSw2ICsxNTkyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNVaW50OENsYW1wZWRBcnJheS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0Vudmlyb25tZW50UmVjb3JkLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTV2Vha01hcC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU1dlYWtTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNXaXRoU2NvcGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNXcmFwcGVyT2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXExpdGVyYWxQYXJzZXIuaCIgLz4KQEAgLTE2OTQsNiArMTY5OCw4IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtNYXBDb25zdHJ1Y3Rvci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrTWFwRGF0YS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrTWFwUHJvdG90eXBlLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtTZXRDb25zdHJ1Y3Rvci5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrU2V0UHJvdG90eXBlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtSYW5kb20uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV3JpdGVCYXJyaWVyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdyaXRlQmFycmllcklubGluZXMuaCIgLz4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBh
ODY4OTNlYjEwZGM1NzkyOTNjMzYwMGNiOTU2MjhmNWI4ODUyZjM1Li5lYzQ0ODg4NmNjZmVlZGVk
NjYzMDkxY2FhMjliOWNmZGNmN2UzM2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC03MTcsNiArNzE3LDkgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXZWFrTWFwLmNwcCI+CiAgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNXZWFrU2V0LmNwcCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNXcmFwcGVyT2JqZWN0LmNwcCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTEwMjYsNiArMTAyOSwxMiBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxXZWFrTWFwUHJvdG90eXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcV2Vha1NldENvbnN0cnVjdG9yLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcV2Vha1NldFByb3RvdHlwZS5jcHAiPgorICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFw
XENvZGVCbG9ja1NldC5jcHAiPgogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+CkBAIC0zNzUzLDkgKzM3NjIsMTggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcV2Vha01hcENvbnN0cnVjdG9yLmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFdlYWtTZXRDb25zdHJ1Y3Rvci5oIj4KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxXZWFrU2V0UHJvdG90eXBlLmgiPgorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Cisg
ICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTV2Vh
a01hcC5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dlYWtTZXQuaCI+CisgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUl0ZXJhdG9yLmgiPgogICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGJhOWJlMGZiNjFiYzY4ZGM4ZmQyNWIwZjMxODVjNzMwM2I4OGIyZDkuLjFi
ZGY0OWI4YWY0ZjJjZGU5MDRjMGY2YmE0Y2ZiMGE0ZDQ3OWJlZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC05ODUsNiArOTg1LDEyIEBACiAJCTcwNUI0MUIwMUE2RTUwMUUwMDcx
Njc1NyAvKiBTeW1ib2xPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcwNUI0MUE4MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFC
MTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwNUI0MUE5MUE2RTUwMUUwMDcxNjc1NyAv
KiBTeW1ib2xQcm90b3R5cGUuY3BwICovOyB9OwogCQk3MDVCNDFCMjFBNkU1MDFFMDA3MTY3NTcg
LyogU3ltYm9sUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MDVCNDFBQTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzA5RkI4
NjcxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDlGQjg2MTFBRTMzNUM2MDAzOUQwNjkgLyogSlNX
ZWFrU2V0LmNwcCAqLzsgfTsKKwkJNzA5RkI4NjgxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1Nl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA5RkI4
NjIxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcwOUZCODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBX
ZWFrU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzA5RkI4NjMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rv
ci5jcHAgKi87IH07CisJCTcwOUZCODZBMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
OUZCODY0MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MDlGQjg2QjFBRTMzNUM2
MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDlGQjg2NTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1Nl
dFByb3RvdHlwZS5jcHAgKi87IH07CisJCTcwOUZCODZDMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFr
U2V0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MDlGQjg2NjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwQjBBOUQxMUE5
QjY2NDYwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwQjBBOUQwMUE5QjY2MjAwMDAxMzA2QSAvKiBSdW50aW1l
RmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MEVDMEVDMjFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDMEVCQzFBQTBEN0RB
MDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5jcHAgKi87IH07CiAJCTcwRUMwRUMzMUFBMEQ3
REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDMEVCRDFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJp
bmdJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yNzA1LDYgKzI3MTEsMTIgQEAKIAkJNzA1QjQxQTgxQTZFNTAxRTAwNzE2NzU3IC8q
IFN5bWJvbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA1QjQxQTkxQTZFNTAxRTAw
NzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTeW1ib2xQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MDVCNDFBQTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbFByb3RvdHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MDlGQjg2MTFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFrU2V0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2Vha1NldC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwOUZCODYyMUFFMzM1QzYwMDM5RDA2OSAv
KiBKU1dlYWtTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWFrU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwOUZCODYzMUFFMzM1QzYwMDM5RDA2
OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2Vha1NldENvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzA5RkI4NjQxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrU2V0Q29uc3RydWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzA5RkI4NjUxQUUzMzVDNjAwMzlEMDY5IC8qIFdl
YWtTZXRQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2Vha1NldFByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwOUZC
ODY2MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtTZXRQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzBCMEE5RDAxQTlCNjYyMDAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdW50aW1lRmxhZ3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQzBFQkMxQUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5n
SXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHJp
bmdJdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUMwRUJEMUFB
MEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU3RyaW5nSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTQ1NTAsNiArNDU2Miw4IEBACiAJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDMyQXJyYXkuaCAqLywKIAkJCQlBN0NBM0FFMTE3REE0MUFFMDA2NTM4QUYgLyogSlNX
ZWFrTWFwLmNwcCAqLywKIAkJCQlBN0NBM0FFMjE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFw
LmggKi8sCisJCQkJNzA5RkI4NjExQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgKi8s
CisJCQkJNzA5RkI4NjIxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5oICovLAogCQkJCTE0
NDI1NjVGMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgKi8sCiAJCQkJMTQ0MjU2
NjAxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmggKi8sCiAJCQkJNjVDN0ExNzEwQThF
QUFDQjAwRkEzN0VBIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgKi8sCkBAIC00NzM5LDYgKzQ3NTMs
MTAgQEAKIAkJCQlBN0NBM0FERjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5j
cHAgKi8sCiAJCQkJQTdDQTNBRTAxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUu
aCAqLywKIAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAor
CQkJCTcwOUZCODYzMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuY3BwICov
LAorCQkJCTcwOUZCODY0MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuaCAq
LywKKwkJCQk3MDlGQjg2NTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5jcHAg
Ki8sCisJCQkJNzA5RkI4NjYxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuaCAq
LywKIAkJCQlBN0RDQjc3OTEyRTNEOTA1MDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggKi8sCiAJ
CQkJQzJCNkQ3NTIxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMuaCAqLywK
IAkJCSk7CkBAIC01NjYwLDYgKzU2NzgsNyBAQAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0
QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNB
NzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
M0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzA5RkI4NkMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0
aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21t
b25TbG93UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFC
MTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLApAQCAtNTc4
MCw2ICs1Nzk5LDcgQEAKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZH
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5QjE2Qjcy
OUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTcw
OUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1By
b21vdGVkSGVhcExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNzE3QTBCQUE4
MDA2QkE1NTQgLyogREZHTWVyZ2VNb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMTIsNiArNjEz
Miw3IEBACiAJCQkJQTU4NDBFMkIxODdDQTc1QjAwODQzQjEwIC8qIGpzbWluLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQ4NzRBRTQxNUVCREU0QTAwMkUzNTg3IC8qIEpTTmFtZVNjb3BlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTcwOUZCODZBMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyODBBMjgxMTU1N0UzMDAwRDU2
OTU3IC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdGOTkzNUYw
RkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtNzEwOCw2
ICs3MTI5LDcgQEAKIAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0
YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZH
VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3MDlGQjg2NzFBRTMzNUM2
MDAzOUQwNjkgLyogSlNXZWFrU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdE
NTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDhBMzI5MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MjE5NkI4
RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzIyOCw2
ICs3MjUwLDcgQEAKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdG
QSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0
Mzg3MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4OTE4NTY4MzM1MDAyRUQ2OTIg
LyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JS
dW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MzIwLDYgKzczNDMsNyBAQAogCQkJ
CTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFFMTdCRUUyMkUwMDdDQjYzQSAvKiBK
U1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzA5RkI4NkIxQUUzMzVD
NjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Mw
MDhDREUxODcxMjU4RDAwOTU1QzI0IC8qIEpTUHJvbWlzZVJlYWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk5MjhGRjNCMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25JZGVudGlmaWVycy5oCmluZGV4IDgyMjg2YjI3OTMzOTRkNmU0YTNmZWUzZjRjYzI0YjVj
MWM5NDQ3YjkuLjcwNDZmMDJjYzBmM2ExODMxNmM4MmY4NzE2ZjQ3NzUyZWI3MTkwOTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApA
QCAtNTcsNiArNTcsNyBAQAogICAgIG1hY3JvKFVSSUVycm9yKSBcCiAgICAgbWFjcm8oVVRDKSBc
CiAgICAgbWFjcm8oV2Vha01hcClcCisgICAgbWFjcm8oV2Vha1NldClcCiAgICAgbWFjcm8oX19k
ZWZpbmVHZXR0ZXJfXykgXAogICAgIG1hY3JvKF9fZGVmaW5lU2V0dGVyX18pIFwKICAgICBtYWNy
byhfX2xvb2t1cEdldHRlcl9fKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggZTM0YWRkMTI4MjQxYTk2MDM0ZWQ4NTc2YWNlYTg1
MDNkM2JiZjEzNC4uZDkxYjYxZmZjNmM1NTQwZWQ1ZGE4ZTczZTVlZjYwNjU3Yjk4ZWZmZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApA
QCAtODcsNiArODcsNyBAQAogI2luY2x1ZGUgIkpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCIKICNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgiCisjaW5jbHVk
ZSAiSlNXZWFrU2V0LmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMZWdh
Y3lQcm9maWxlci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpAQCAtMTI3LDYgKzEyOCw4IEBACiAj
aW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIldlYWtNYXBQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJXZWFrU2V0Q29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJXZWFrU2V0UHJvdG90eXBlLmgiCiAKICNpZiBFTkFCTEUo
UFJPTUlTRVMpCiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBkMTdiNGEzNDhmYTE0ZGFkMDNhYjc2
MDZjNzkzMWViZWZiMTc5Y2QyLi5jNGMwYmQwMDE3ZDE4NzE5OThhODUwZDAxNmNhZTA2MjEyMDk3
MmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgKQEAgLTEwMiw2ICsxMDIsNyBAQAogICAgIG1hY3JvKEVycm9yLCBlcnJvciwgZXJyb3IsIEVy
cm9ySW5zdGFuY2UsIEVycm9yKSBcCiAgICAgbWFjcm8oSlNBcnJheUJ1ZmZlciwgYXJyYXlCdWZm
ZXIsIGFycmF5QnVmZmVyLCBKU0FycmF5QnVmZmVyLCBBcnJheUJ1ZmZlcikgXAogICAgIERFRklO
RV9TVEFOREFSRF9CVUlMVElOKG1hY3JvLCBXZWFrTWFwLCB3ZWFrTWFwKSBcCisgICAgREVGSU5F
X1NUQU5EQVJEX0JVSUxUSU4obWFjcm8sIFdlYWtTZXQsIHdlYWtTZXQpIFwKIAogI2RlZmluZSBG
T1JfRUFDSF9TSU1QTEVfQlVJTFRJTl9UWVBFKG1hY3JvKSBcCiAgICAgRk9SX0VBQ0hfU0lNUExF
X0JVSUxUSU5fVFlQRV9XSVRIX0NPTlNUUlVDVE9SKG1hY3JvKSBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dlYWtTZXQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWQwMTJkMTQ1MjVlZjEw
MzcwNDc3NjI3MTI1ZmZiYzg4YzBiYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNXZWFrU2V0LmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJXZWFrTWFwRGF0YS5oIgorI2luY2x1ZGUgIldyaXRlQmFy
cmllcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1dl
YWtTZXQ6OnNfaW5mbyA9IHsgIldlYWtTZXQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTV2Vha1NldCkgfTsKKwordm9pZCBKU1dlYWtTZXQ6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV93ZWFrTWFw
RGF0YS5zZXQodm0sIHRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGUodm0pKTsKK30KKwordm9pZCBK
U1dlYWtTZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEpTV2Vh
a1NldCogdGhpc09iaiA9IGpzQ2FzdDxKU1dlYWtTZXQqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iai0+bV93ZWFrTWFwRGF0YSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2Vha1NldC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNXZWFrU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIwYTUwODY2YzE0Y2FiNmQ2Mzk0
OWYwODQ3ODdjNzA4MWQ3MjM0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTV2Vha1NldC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNXZWFrU2V0X2gKKyNk
ZWZpbmUgSlNXZWFrU2V0X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBXZWFrTWFwRGF0YTsKKworY2xhc3MgSlNXZWFrU2V0IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBC
YXNlOworCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU1dlYWtTZXQqIGNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNXZWFrU2V0
KiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2Vha1NldD4odm0uaGVh
cCkpIEpTV2Vha1NldCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRp
YyBKU1dlYWtTZXQqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwor
ICAgIH0KKworICAgIFdlYWtNYXBEYXRhKiB3ZWFrTWFwRGF0YSgpIHsgcmV0dXJuIG1fd2Vha01h
cERhdGEuZ2V0KCk7IH0KKworICAgIEpTVmFsdWUgZ2V0KENhbGxGcmFtZSosIEpTT2JqZWN0Kik7
CisgICAgYm9vbCBoYXMoQ2FsbEZyYW1lKiwgSlNPYmplY3QqKTsKKyAgICBib29sIHJlbW92ZShD
YWxsRnJhbWUqLCBKU09iamVjdCopOworCisgICAgdm9pZCBzZXQoQ2FsbEZyYW1lKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKTsKKyAgICB2b2lkIGNsZWFyKENhbGxGcmFtZSopOworCitwcml2YXRlOgor
ICAgIEpTV2Vha1NldChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworICAgIFdyaXRlQmFycmllcjxXZWFrTWFwRGF0YT4gbV93ZWFrTWFwRGF0YTsKK307
CisKK30KKworI2VuZGlmIC8vICFkZWZpbmVkKEpTV2Vha1NldF9oKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcFByb3RvdHlwZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcAppbmRleCA5MjE1ODMx
NDcyYjg2ZTY2MGE4MDFjOGY1YjFkMDhkOWZmY2I3MTQyLi5iOTE2YTQyOTQ3MjAzZDQzNmFkNGU2
ZmQwZTkxNWFkOWI4ZWI1ZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwUHJvdG90eXBlLmNwcApAQCAtODQsNyArODQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dlYWtNYXBEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
SlNWYWx1ZSBrZXkgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGlmICgha2V5LmlzT2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2Fs
bEZyYW1lLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiQSBXZWFrTWFwIGNhbm5vdCBoYXZlIGEgbm9uLW9i
amVjdCBrZXkiKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG1hcC0+cmVtb3Zl
KGFzT2JqZWN0KGtleSkpKSk7CiB9CiAKQEAgLTk1LDcgKzk1LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBwcm90b0Z1bmNXZWFrTWFwR2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIWtleS5pc09iamVjdCgp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFt
ZSwgV1RGOjpBU0NJSUxpdGVyYWwoIkEgV2Vha01hcCBjYW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qg
a2V5IikpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcC0+Z2V0KGFzT2JqZWN0KGtleSkpKTsKIH0K
IApAQCAtMTA2LDcgKzEwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9G
dW5jV2Vha01hcEhhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIGtleSA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCk7CiAgICAgaWYgKCFrZXkuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIFdURjo6QVNDSUlMaXRlcmFs
KCJBIFdlYWtNYXAgY2Fubm90IGhhdmUgYSBub24tb2JqZWN0IGtleSIpKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4obWFwLT5jb250YWlucyhhc09iamVjdChrZXkpKSkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVj
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hMmQyNmM3NmU0NzQ0NzIxMGJiYzgxOTE2MDhmNTQwNWI0ZDY2
ZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a1NldENvbnN0cnVjdG9yLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYWtTZXRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRl
ICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgor
I2luY2x1ZGUgIkpTV2Vha1NldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNp
bmNsdWRlICJXZWFrU2V0UHJvdG90eXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBD
bGFzc0luZm8gV2Vha1NldENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNl
OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoV2Vha1NldENvbnN0cnVjdG9yKSB9Owor
Cit2b2lkIFdlYWtTZXRDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBXZWFrU2V0
UHJvdG90eXBlKiBwcm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIHBy
b3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5
IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFdlYWtTZXQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWFrU2V0
IGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbiIpKSk7Cit9CisKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdlYWtTZXQoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBTdHJ1Y3R1cmUqIHdlYWtTZXRT
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKTsKKyAgICBKU1dlYWtT
ZXQqIHdlYWtTZXQgPSBKU1dlYWtTZXQ6OmNyZWF0ZShleGVjLCB3ZWFrU2V0U3RydWN0dXJlKTsK
KyAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgaWYgKGl0ZXJh
YmxlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
d2Vha1NldCk7CisKKyAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSB3ZWFrU2V0LT5KU09iamVj
dDo6Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hZGQpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKworICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxsRGF0YTsKKyAgICBDYWxsVHlw
ZSBhZGRlckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShhZGRlckZ1bmN0aW9uLCBhZGRl
ckZ1bmN0aW9uQ2FsbERhdGEpOworICAgIGlmIChhZGRlckZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2Fs
bFR5cGVOb25lKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9y
KGV4ZWMpKTsKKworICAgIEpTVmFsdWUgaXRlcmF0b3JGdW5jdGlvbiA9IGl0ZXJhYmxlLmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXRlcmF0b3JTeW1ib2wpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKworICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKKyAgICBD
YWxsVHlwZSBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShpdGVyYXRvckZ1
bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEpOworICAgIGlmIChpdGVyYXRvckZ1bmN0
aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93VHlwZUVycm9yKGV4ZWMpKTsKKworICAgIEFyZ0xpc3QgaXRlcmF0b3JGdW5jdGlv
bkFyZ3VtZW50czsKKyAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChleGVjLCBpdGVyYXRvckZ1
bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0
YSwgaXRlcmFibGUsIGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHMpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKworICAgIGlmICghaXRlcmF0b3IuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjKSk7CisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0b3IpOwor
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgICAgIGlmIChuZXh0LmlzRmFsc2Uo
KSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha1NldCk7CisKKyAgICAg
ICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKGV4ZWMsIG5leHQpOworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChuZXh0VmFsdWUpOworICAgICAgICBj
YWxsKGV4ZWMsIGFkZGVyRnVuY3Rpb24sIGFkZGVyRnVuY3Rpb25DYWxsVHlwZSwgYWRkZXJGdW5j
dGlvbkNhbGxEYXRhLCB3ZWFrU2V0LCBhcmd1bWVudHMpOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yQ2xvc2UoZXhlYywgaXRlcmF0b3Ip
OworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha1NldCk7Cit9CisKK0NvbnN0cnVjdFR5cGUgV2Vha1Nl
dENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25z
dHJ1Y3RXZWFrU2V0OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKworQ2FsbFR5
cGUgV2Vha1NldENvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2Fs
bERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbFdlYWtTZXQ7Cisg
ICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDAyOWYxNjVh
ZjhiY2RiN2ViYTg0YTEyNTNmMTg2NmJiMzY3NWU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmgKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBXZWFrU2V0Q29uc3RydWN0b3JfaAorI2RlZmluZSBXZWFrU2V0Q29uc3RydWN0b3JfaAor
CisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgV2Vha1NldFByb3RvdHlwZTsKKworY2xhc3MgV2Vha1NldENvbnN0cnVjdG9yIDogcHVibGlj
IEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlv
biBCYXNlOworCisgICAgc3RhdGljIFdlYWtTZXRDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdlYWtTZXRQcm90b3R5cGUqIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIFdlYWtTZXRDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxXZWFrU2V0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBXZWFrU2V0Q29uc3Ry
dWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlv
bih2bSwgcHJvdG90eXBlKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgIH0KKwor
ICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWFrU2V0Q29uc3RydWN0b3IoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAg
eworICAgIH0KKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2Vha1NldFByb3RvdHlwZSop
OworICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29u
c3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBD
YWxsRGF0YSYpOworfTsKKworfQorCisjZW5kaWYgLy8gIWRlZmluZWQoV2Vha1NldENvbnN0cnVj
dG9yX2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0
UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRQcm90
b3R5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkMjkzNGJhNzVjZjU2NWY3ZmNkYjQzZDMwYzRkZTUwNzM0
N2M5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrU2V0UHJvdG90eXBlLmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYWtTZXRQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgor
I2luY2x1ZGUgIldlYWtNYXBEYXRhLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFz
c0luZm8gV2Vha1NldFByb3RvdHlwZTo6c19pbmZvID0geyAiV2Vha1NldCIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoV2Vha1NldFByb3RvdHlwZSkgfTsKKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldERlbGV0ZShFeGVj
U3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByb3RvRnVuY1dl
YWtTZXRIYXMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBwcm90b0Z1bmNXZWFrU2V0QWRkKEV4ZWNTdGF0ZSopOworCit2b2lkIFdlYWtTZXRQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGlu
Zm8oKSkpOworICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CisKKyAgICBK
U0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIHByb3Rv
RnVuY1dlYWtTZXREZWxldGUsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPmhhcywgcHJvdG9GdW5jV2Vha1NldEhhcywgRG9udEVudW0sIDEp
OworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+YWRkLCBwcm90b0Z1
bmNXZWFrU2V0QWRkLCBEb250RW51bSwgMSk7Cit9CisKK3N0YXRpYyBXZWFrTWFwRGF0YSogZ2V0
V2Vha01hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFt
ZSwgV1RGOjpBU0NJSUxpdGVyYWwoIkNhbGxlZCBXZWFrU2V0IGZ1bmN0aW9uIG9uIG5vbi1vYmpl
Y3QiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChKU1dlYWtTZXQqIHdl
YWtTZXQgPSBqc0R5bmFtaWNDYXN0PEpTV2Vha1NldCo+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IHdlYWtTZXQtPndlYWtNYXBEYXRhKCk7CisKKyAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUs
IFdURjo6QVNDSUlMaXRlcmFsKCJDYWxsZWQgV2Vha1NldCBmdW5jdGlvbiBvbiBhIG5vbi1XZWFr
U2V0IG9iamVjdCIpKTsKKyAgICByZXR1cm4gMDsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwcm90b0Z1bmNXZWFrU2V0RGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQorewor
ICAgIFdlYWtNYXBEYXRhKiBtYXAgPSBnZXRXZWFrTWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbWFwKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIEpTVmFsdWUga2V5ID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKKyAgICBpZiAoIWtleS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKG1hcC0+cmVtb3ZlKGFzT2JqZWN0KGtleSkpKSk7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEhhcyhDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK3sKKyAgICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vha01hcERhdGEoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIW1hcCkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBKU1ZhbHVlIGtleSA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFrZXkuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihtYXAtPmNvbnRhaW5zKGFzT2JqZWN0KGtleSkpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJvdG9GdW5jV2Vha1NldEFkZChDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKK3sKKyAgICBXZWFrTWFwRGF0YSogbWFwID0gZ2V0V2Vha01hcERhdGEoY2Fs
bEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIW1hcCkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBKU1ZhbHVlIGtleSA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgaWYgKCFrZXkuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIFdURjo6
QVNDSUlMaXRlcmFsKCJBdHRlbXB0ZWQgdG8gYWRkIGEgbm9uLW9iamVjdCBrZXkgdG8gYSBXZWFr
U2V0IikpKTsKKyAgICBtYXAtPnNldChjYWxsRnJhbWUtPnZtKCksIGFzT2JqZWN0KGtleSksIGpz
VW5kZWZpbmVkKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtTZXRQcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtTZXRQcm90b3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZGIwNjhkZWIyMmJmNjM3OTQ0ODBmMDU4Njg0
Mzg2MmE0YzM4MTEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha1NldFByb3RvdHlwZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2Vha1NldFByb3RvdHlw
ZV9oCisjZGVmaW5lIFdlYWtTZXRQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYWtTZXRQcm90b3R5cGUgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJh
c2U7CisKKyAgICBzdGF0aWMgV2Vha1NldFByb3RvdHlwZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICBXZWFrU2V0UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxXZWFrU2V0UHJvdG90eXBlPih2bS5oZWFwKSkgV2Vha1NldFByb3RvdHlwZSh2bSwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIHByb3RvdHlwZTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lO
Rk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgV2Vha1NldFByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOworfTsKKworfQorCisjZW5k
aWYgLy8gIWRlZmluZWQoV2Vha1NldFByb3RvdHlwZV9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93ZWFrLXNldC1jb25zdHJ1Y3Rvci1hZGRlci5qcyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2Vhay1zZXQtY29uc3RydWN0b3It
YWRkZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M2MDBjMWI0YWU1NmFmYzk1ZTZkODRkNjI5ZDA1YjBkMDkx
Yjg5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvd2Vhay1zZXQtY29uc3RydWN0b3ItYWRkZXIuanMKQEAgLTAsMCArMSw1MSBAQAorLy8gV2Vh
a1NldCBjb25zdHJ1Y3RvciB3aXRoIGFkZGVyIGNoYW5nZS4KKwordmFyIG9yaWdpbmFsQWRkZXIg
PSBXZWFrU2V0LnByb3RvdHlwZS5hZGQ7Cit2YXIgY291bnRlciA9IDA7CisKK1dlYWtTZXQucHJv
dG90eXBlLmFkZCA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICBjb3VudGVyKys7CisgICAgcmV0dXJu
IG9yaWdpbmFsQWRkZXIuY2FsbCh0aGlzLCBrZXkpOworfTsKKwordmFyIG9iajAgPSB7fTsKK3Zh
ciBvYmoxID0ge307Cit2YXIgb2JqMiA9IFtdOwordmFyIG9iajMgPSBuZXcgRGF0ZSgpOwordmFy
IG9iajQgPSBuZXcgRXJyb3IoKTsKK3ZhciBvYmo1ID0gSlNPTjsKKwordmFyIHZhbHVlcyA9IFsK
KyAgICBvYmowLAorICAgIG9iajEsCisgICAgb2JqMiwKKyAgICBvYmozLAorICAgIG9iajQsCisg
ICAgb2JqNSwKKyAgICBvYmo0LAorICAgIG9iajMsCisgICAgb2JqMiwKKyAgICBvYmoxLAorICAg
IG9iajAsCitdOwordmFyIHNldCA9IG5ldyBXZWFrU2V0KHZhbHVlcyk7CitpZiAoY291bnRlciAh
PT0gdmFsdWVzLmxlbmd0aCkKKyAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBjb3VudGVyICIgKyBj
b3VudGVyKTsKKworV2Vha1NldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkgeworICAgIHRo
cm93IG5ldyBFcnJvcigiYWRkZXIgY2FsbGVkIik7Cit9OworCit2YXIgc2V0ID0gbmV3IFdlYWtT
ZXQoKTsKK3ZhciBzZXQgPSBuZXcgV2Vha1NldChbXSk7Cit2YXIgZXJyb3IgPSBudWxsOwordHJ5
IHsKKyAgICB2YXIgc2V0ID0gbmV3IFdlYWtTZXQoWyAwIF0pOworfSBjYXRjaCAoZSkgeworICAg
IGVycm9yID0gZTsKK30KK2lmICghZXJyb3IpCisgICAgdGhyb3cgbmV3IEVycm9yKCJlcnJvciBu
b3QgdGhyb3duIik7CitpZiAoU3RyaW5nKGVycm9yKSAhPT0gIkVycm9yOiBhZGRlciBjYWxsZWQi
KQorICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGVycm9yICIgKyBTdHJpbmcoZXJyb3IpKTsKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93ZWFrLXNldC1j
b25zdHJ1Y3Rvci5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2Vhay1z
ZXQtY29uc3RydWN0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJiNzk4NTI0OTkzZjI4ZWI4NWMyN2Y3ZjZk
OWRiMTJmZDMxMTJiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3Mvd2Vhay1zZXQtY29uc3RydWN0b3IuanMKQEAgLTAsMCArMSwxNDYgQEAKKy8v
IFdlYWtTZXQgY29uc3RydWN0b3IgYmVoYXZpb3JzLgorCitpZiAodHlwZW9mIFdlYWtTZXQgIT09
ICdmdW5jdGlvbicpCisgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgdmFsdWUiICsgdHlwZW9mIFdl
YWtTZXQpOworCitmdW5jdGlvbiB0ZXN0Q2FsbFR5cGVFcnJvcihpdGVtKSB7CisgICAgdmFyIGVy
cm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICB2YXIgc2V0ID0gV2Vha1NldChpdGVtKTsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFl
cnJvcikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJlcnJvciBub3QgdGhyb3duIik7CisgICAg
aWYgKFN0cmluZyhlcnJvcikgIT09ICJUeXBlRXJyb3I6IFdlYWtTZXQgY2Fubm90IGJlIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uIikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3IgIiAr
IFN0cmluZyhlcnJvcikpOworfQordmFyIG9iajEgPSB7fTsKK3ZhciBvYmoyID0gW107Cit2YXIg
b2JqMyA9IG5ldyBEYXRlKCk7Cit2YXIgb2JqNCA9IG5ldyBFcnJvcigpOworCit2YXIgcGFzcyA9
IFsKKyAgICBudWxsLAorICAgIHVuZGVmaW5lZCwKKyAgICBbXSwKKyAgICBuZXcgU2V0KCksCisg
ICAgbmV3IE1hcCgpLAorICAgICIiLAorCisgICAgWworICAgICAgICBvYmoxLAorICAgICAgICBv
YmoyLAorICAgICAgICBvYmozLAorICAgIF0sCisKKyAgICBbCisgICAgICAgIG9iajEsCisgICAg
ICAgIG9iajEsCisgICAgICAgIG9iajEsCisgICAgXSwKKworICAgIFsKKyAgICAgICAgb2JqMiwK
KyAgICAgICAgb2JqMywKKyAgICAgICAgb2JqNCwKKyAgICBdLAorCisgICAgbmV3IE1hcChbCisg
ICAgICAgIFtvYmoxLCAxXSwKKyAgICAgICAgW29iajIsIDJdLAorICAgICAgICBbb2JqMywgM10s
CisgICAgXSksCisKKyAgICBuZXcgTWFwKFsKKyAgICAgICAgW29iajEsIDFdLAorICAgICAgICBb
b2JqMSwgMl0sCisgICAgICAgIFtvYmoxLCAzXSwKKyAgICBdKSwKKworICAgIG5ldyBTZXQoWwor
ICAgICAgICBvYmoxLAorICAgICAgICBvYmoyLAorICAgICAgICBvYmozLAorICAgIF0pLAorCisg
ICAgbmV3IFNldChbCisgICAgICAgIG9iajEsCisgICAgICAgIG9iajEsCisgICAgICAgIG9iajEs
CisgICAgXSksCisKKyAgICBuZXcgTWFwKFsKKyAgICAgICAgeyAwOiBvYmoyLCAxOiAnTycgfSwK
KyAgICAgICAgeyAwOiBvYmozLCAxOiAnSycgfSwKKyAgICAgICAgeyAwOiBvYmo0LCAxOiAnSycg
fSwKKyAgICBdKSwKKworICAgIG5ldyBTZXQoWworICAgICAgICBvYmoyLAorICAgICAgICBvYmoz
LAorICAgICAgICBvYmo0LAorICAgIF0pCitdOworCitmb3IgKHZhciB2YWx1ZSBvZiBwYXNzKSB7
CisgICAgdmFyIHNldCA9IG5ldyBXZWFrU2V0KHZhbHVlKTsKKyAgICB0ZXN0Q2FsbFR5cGVFcnJv
cih2YWx1ZSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RUeXBlRXJyb3IoaXRlbSwgbWVzc2FnZSkgewor
ICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgdmFyIHNldCA9IG5ldyBX
ZWFrU2V0KGl0ZW0pOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAg
IH0KKyAgICBpZiAoIWVycm9yKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImVycm9yIG5vdCB0
aHJvd24iKTsKKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIG1lc3NhZ2UgPSAiVHlwZUVycm9y
OiBUeXBlIGVycm9yIjsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gbWVzc2FnZSkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3IgIiArIFN0cmluZyhlcnJvcikpOworfQorCit2
YXIgbm9uSXRlcmFibGUgPSBbCisgICAgNDIsCisgICAgU3ltYm9sKCJDYXBwdWNjaW5vIiksCisg
ICAgdHJ1ZSwKKyAgICBmYWxzZSwKKyAgICB7fSwKKyAgICBuZXcgRGF0ZSgpLAorICAgIG5ldyBF
cnJvcigpLAorICAgIE9iamVjdChTeW1ib2woIk1hdGNoYSIpKSwKKyAgICAoZnVuY3Rpb24gKCkg
eyB9KSwKK107CisKK2ZvciAodmFyIGl0ZW0gb2Ygbm9uSXRlcmFibGUpIHsKKyAgICB0ZXN0VHlw
ZUVycm9yKGl0ZW0pOworICAgIHRlc3RDYWxsVHlwZUVycm9yKGl0ZW0pOworfQorCit2YXIgbm9u
T2JqZWN0S2V5cyA9IFsKKyAgICBbCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDEs
CisgICAgXSwKKworICAgIFsKKyAgICAgICAgMSwKKyAgICAgICAgMSwKKyAgICAgICAgMSwKKyAg
ICBdLAorCisgICAgWworICAgICAgICAnQycsCisgICAgICAgICdDJywKKyAgICAgICAgJ1YnLAor
ICAgIF0sCitdOworCitmb3IgKHZhciBpdGVtIG9mIG5vbk9iamVjdEtleXMpIHsKKyAgICB0ZXN0
VHlwZUVycm9yKGl0ZW0sICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhZGQgYSBub24tb2JqZWN0
IGtleSB0byBhIFdlYWtTZXQnKTsKKyAgICB0ZXN0Q2FsbFR5cGVFcnJvcihpdGVtKTsKK30KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCBhMzE0ZjBlZjgwNTVkOTBkZTQ0ZGI2MjBlNmVlYjk3YWQzYzJiODQ5Li5mNjc4NDE0Yzc3
YWQwN2I5MzQ4NmE2NGY3MmI0ODAwYzRkY2IyMDM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTUtMDQtMTggIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAg
ICAgW0VTNl0gSW1wbGVtZW50IFdlYWtTZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MjQwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBiYXNpYy13ZWFrc2V0IHRlc3QgYW5kIGZpeCBXZWFrTWFw
IGJlaGF2aW9yIHRvIGNvbmZvcm0gdGhlIGxhdGVzdCBzcGVjLgorCisgICAgICAgICoganMvZG9t
L2Jhc2ljLXdlYWttYXAtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGpzL2RvbS9iYXNpYy13ZWFr
c2V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvZG9tL2Jhc2ljLXdlYWtzZXQu
aHRtbDogQWRkZWQuCisgICAgICAgICoganMvZG9tL3NjcmlwdC10ZXN0cy9iYXNpYy13ZWFrbWFw
LmpzOgorICAgICAgICAqIGpzL2RvbS9zY3JpcHQtdGVzdHMvYmFzaWMtd2Vha3NldC5qczogQWRk
ZWQuCisKIDIwMTUtMDQtMTggIE1pY2hhxYIgUGFrdcWCYSB2ZWwgUnV0a2EgIDxtLnBha3VsYUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBVbnJldmlld2VkIGdhcmRlbmluZwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL2Jhc2ljLXdlYWttYXAtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvanMvZG9tL2Jhc2ljLXdlYWttYXAtZXhwZWN0ZWQudHh0CmluZGV4IGQwN2Q4OGNh
ZmQyOTE0MGZkMWI0MjM4MWIzNDM2MGZjNjI2MmJlZDcuLjJkMGJhMWFkMjE0ZmNiNjJjYTNlNTE1
NzhlNGE0YTBmYjM1YzMzYTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2pzL2RvbS9iYXNpYy13
ZWFrbWFwLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9qcy9kb20vYmFzaWMtd2Vha21h
cC1leHBlY3RlZC50eHQKQEAgLTE0LDMwICsxNCwzNyBAQCBQQVNTIG1hcC5zZXQodHJ1ZSwgMSkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIHNldCBhIG5vbi1vYmplY3Qg
awogUEFTUyBtYXAuc2V0KGZhbHNlLCAxKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBdHRl
bXB0ZWQgdG8gc2V0IGEgbm9uLW9iamVjdCBrZXkgaW4gYSBXZWFrTWFwLgogUEFTUyBtYXAuc2V0
KG51bGwsIDEpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBzZXQgYSBu
b24tb2JqZWN0IGtleSBpbiBhIFdlYWtNYXAuCiBQQVNTIG1hcC5zZXQodW5kZWZpbmVkLCAxKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gc2V0IGEgbm9uLW9iamVjdCBr
ZXkgaW4gYSBXZWFrTWFwLgotUEFTUyBtYXAuZ2V0KDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEEgV2Vha01hcCBjYW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qga2V5LgotUEFTUyBtYXAuZ2V0
KDAuNSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQSBXZWFrTWFwIGNhbm5vdCBoYXZlIGEg
bm9uLW9iamVjdCBrZXkuCi1QQVNTIG1hcC5nZXQoJ2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IEEgV2Vha01hcCBjYW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qga2V5LgotUEFTUyBtYXAu
Z2V0KHRydWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEEgV2Vha01hcCBjYW5ub3QgaGF2
ZSBhIG5vbi1vYmplY3Qga2V5LgotUEFTUyBtYXAuZ2V0KGZhbHNlKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBBIFdlYWtNYXAgY2Fubm90IGhhdmUgYSBub24tb2JqZWN0IGtleS4KLVBBU1Mg
bWFwLmdldChudWxsKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBIFdlYWtNYXAgY2Fubm90
IGhhdmUgYSBub24tb2JqZWN0IGtleS4KLVBBU1MgbWFwLmdldCh1bmRlZmluZWQpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IEEgV2Vha01hcCBjYW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qga2V5
LgotUEFTUyBtYXAuaGFzKDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEEgV2Vha01hcCBj
YW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qga2V5LgotUEFTUyBtYXAuaGFzKDAuNSkgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogQSBXZWFrTWFwIGNhbm5vdCBoYXZlIGEgbm9uLW9iamVjdCBrZXku
Ci1QQVNTIG1hcC5oYXMoJ2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEEgV2Vha01h
cCBjYW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qga2V5LgotUEFTUyBtYXAuaGFzKHRydWUpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEEgV2Vha01hcCBjYW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qg
a2V5LgotUEFTUyBtYXAuaGFzKGZhbHNlKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBIFdl
YWtNYXAgY2Fubm90IGhhdmUgYSBub24tb2JqZWN0IGtleS4KLVBBU1MgbWFwLmhhcyhudWxsKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBIFdlYWtNYXAgY2Fubm90IGhhdmUgYSBub24tb2Jq
ZWN0IGtleS4KLVBBU1MgbWFwLmhhcyh1bmRlZmluZWQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEEgV2Vha01hcCBjYW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qga2V5LgotUEFTUyBtYXAuZGVs
ZXRlKDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEEgV2Vha01hcCBjYW5ub3QgaGF2ZSBh
IG5vbi1vYmplY3Qga2V5LgotUEFTUyBtYXAuZGVsZXRlKDAuNSkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogQSBXZWFrTWFwIGNhbm5vdCBoYXZlIGEgbm9uLW9iamVjdCBrZXkuCi1QQVNTIG1h
cC5kZWxldGUoJ2ZvbycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEEgV2Vha01hcCBjYW5u
b3QgaGF2ZSBhIG5vbi1vYmplY3Qga2V5LgotUEFTUyBtYXAuZGVsZXRlKHRydWUpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IEEgV2Vha01hcCBjYW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qga2V5
LgotUEFTUyBtYXAuZGVsZXRlKGZhbHNlKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBIFdl
YWtNYXAgY2Fubm90IGhhdmUgYSBub24tb2JqZWN0IGtleS4KLVBBU1MgbWFwLmRlbGV0ZShudWxs
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBIFdlYWtNYXAgY2Fubm90IGhhdmUgYSBub24t
b2JqZWN0IGtleS4KLVBBU1MgbWFwLmRlbGV0ZSh1bmRlZmluZWQpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IEEgV2Vha01hcCBjYW5ub3QgaGF2ZSBhIG5vbi1vYmplY3Qga2V5LgorUEFTUyBt
YXAuZ2V0KDApIGlzIHVuZGVmaW5lZC4KK1BBU1MgbWFwLmdldCgwLjUpIGlzIHVuZGVmaW5lZC4K
K1BBU1MgbWFwLmdldCgnZm9vJykgaXMgdW5kZWZpbmVkLgorUEFTUyBtYXAuZ2V0KHRydWUpIGlz
IHVuZGVmaW5lZC4KK1BBU1MgbWFwLmdldChmYWxzZSkgaXMgdW5kZWZpbmVkLgorUEFTUyBtYXAu
Z2V0KG51bGwpIGlzIHVuZGVmaW5lZC4KK1BBU1MgbWFwLmdldCh1bmRlZmluZWQpIGlzIHVuZGVm
aW5lZC4KK1BBU1MgbWFwLmhhcygwKSBpcyBmYWxzZQorUEFTUyBtYXAuaGFzKDAuNSkgaXMgZmFs
c2UKK1BBU1MgbWFwLmhhcygnZm9vJykgaXMgZmFsc2UKK1BBU1MgbWFwLmhhcyh0cnVlKSBpcyBm
YWxzZQorUEFTUyBtYXAuaGFzKGZhbHNlKSBpcyBmYWxzZQorUEFTUyBtYXAuaGFzKG51bGwpIGlz
IGZhbHNlCitQQVNTIG1hcC5oYXModW5kZWZpbmVkKSBpcyBmYWxzZQorUEFTUyBtYXAuZGVsZXRl
KDApIGlzIGZhbHNlCitQQVNTIG1hcC5kZWxldGUoMC41KSBpcyBmYWxzZQorUEFTUyBtYXAuZGVs
ZXRlKCdmb28nKSBpcyBmYWxzZQorUEFTUyBtYXAuZGVsZXRlKHRydWUpIGlzIGZhbHNlCitQQVNT
IG1hcC5kZWxldGUoZmFsc2UpIGlzIGZhbHNlCitQQVNTIG1hcC5kZWxldGUobnVsbCkgaXMgZmFs
c2UKK1BBU1MgbWFwLmRlbGV0ZSh1bmRlZmluZWQpIGlzIGZhbHNlCiBQQVNTIG1hcC5zZXQobmV3
IFN0cmluZygnZm9vJyksICdmb28nKSBpcyBtYXAKLVBBU1MgbWFwLmdldChuZXcgU3RyaW5nKCdm
b28nKSkgaXMgdW5kZWZpbmVkCitQQVNTIG1hcC5nZXQobmV3IFN0cmluZygnZm9vJykpIGlzIHVu
ZGVmaW5lZC4KIFBBU1MgbWFwLmhhcyhuZXcgU3RyaW5nKCdmb28nKSkgaXMgZmFsc2UKK1BBU1Mg
bWFwLnNldChvYmplY3QsICdmb28nKSBpcyBtYXAKK1BBU1MgbWFwLmhhcyhvYmplY3QpIGlzIHRy
dWUKK1BBU1MgbWFwLmdldChvYmplY3QpIGlzICdmb28nCitQQVNTIG1hcC5kZWxldGUob2JqZWN0
KSBpcyB0cnVlCitQQVNTIG1hcC5oYXMob2JqZWN0KSBpcyBmYWxzZQorUEFTUyBtYXAuZGVsZXRl
KG9iamVjdCkgaXMgZmFsc2UKK1BBU1MgbWFwLmdldChvYmplY3QpIGlzIHVuZGVmaW5lZC4KIFBB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvanMvZG9tL2Jhc2ljLXdlYWtzZXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvanMvZG9tL2Jhc2ljLXdlYWtzZXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0ZDIw
ZGMzYWUwYTQ3NWVkM2UxZDBjN2NmY2NjZjMwODAxOWEwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9qcy9kb20vYmFzaWMtd2Vha3NldC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0
NiBAQAorVGVzdHMgYmFzaWMgY29ycmVjdG5lc3Mgb2YgRVMgV2Vha1NldCBvYmplY3QKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgV2Vha1NldCBpbnN0YW5jZW9mIFdlYWtT
ZXQgaXMgZmFsc2UKK1BBU1MgV2Vha1NldC5wcm90b3R5cGUgaW5zdGFuY2VvZiBXZWFrU2V0IGlz
IGZhbHNlCitQQVNTIG5ldyBXZWFrU2V0KCkgaW5zdGFuY2VvZiBXZWFrU2V0IGlzIHRydWUKK1BB
U1MgV2Vha1NldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFdlYWtTZXQgY2Fubm90IGJl
IGNhbGxlZCBhcyBhIGZ1bmN0aW9uLgorUEFTUyBzZXQuYWRkKDApIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhZGQgYSBub24tb2JqZWN0IGtleSB0byBhIFdlYWtTZXQu
CitQQVNTIHNldC5hZGQoMC41KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBdHRlbXB0ZWQg
dG8gYWRkIGEgbm9uLW9iamVjdCBrZXkgdG8gYSBXZWFrU2V0LgorUEFTUyBzZXQuYWRkKCdmb28n
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYWRkIGEgbm9uLW9iamVj
dCBrZXkgdG8gYSBXZWFrU2V0LgorUEFTUyBzZXQuYWRkKHRydWUpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhZGQgYSBub24tb2JqZWN0IGtleSB0byBhIFdlYWtTZXQu
CitQQVNTIHNldC5hZGQoZmFsc2UpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEF0dGVtcHRl
ZCB0byBhZGQgYSBub24tb2JqZWN0IGtleSB0byBhIFdlYWtTZXQuCitQQVNTIHNldC5hZGQobnVs
bCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFkZCBhIG5vbi1vYmpl
Y3Qga2V5IHRvIGEgV2Vha1NldC4KK1BBU1Mgc2V0LmFkZCh1bmRlZmluZWQpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhZGQgYSBub24tb2JqZWN0IGtleSB0byBhIFdl
YWtTZXQuCitQQVNTIHNldC5hZGQoU3ltYm9sLml0ZXJhdG9yKSB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBBdHRlbXB0ZWQgdG8gYWRkIGEgbm9uLW9iamVjdCBrZXkgdG8gYSBXZWFrU2V0Lgor
UEFTUyBzZXQuaGFzKDApIGlzIGZhbHNlCitQQVNTIHNldC5oYXMoMC41KSBpcyBmYWxzZQorUEFT
UyBzZXQuaGFzKCdmb28nKSBpcyBmYWxzZQorUEFTUyBzZXQuaGFzKHRydWUpIGlzIGZhbHNlCitQ
QVNTIHNldC5oYXMoZmFsc2UpIGlzIGZhbHNlCitQQVNTIHNldC5oYXMobnVsbCkgaXMgZmFsc2UK
K1BBU1Mgc2V0Lmhhcyh1bmRlZmluZWQpIGlzIGZhbHNlCitQQVNTIHNldC5oYXMoU3ltYm9sLml0
ZXJhdG9yKSBpcyBmYWxzZQorUEFTUyBzZXQuZGVsZXRlKDApIGlzIGZhbHNlCitQQVNTIHNldC5k
ZWxldGUoMC41KSBpcyBmYWxzZQorUEFTUyBzZXQuZGVsZXRlKCdmb28nKSBpcyBmYWxzZQorUEFT
UyBzZXQuZGVsZXRlKHRydWUpIGlzIGZhbHNlCitQQVNTIHNldC5kZWxldGUoZmFsc2UpIGlzIGZh
bHNlCitQQVNTIHNldC5kZWxldGUobnVsbCkgaXMgZmFsc2UKK1BBU1Mgc2V0LmRlbGV0ZSh1bmRl
ZmluZWQpIGlzIGZhbHNlCitQQVNTIHNldC5kZWxldGUoU3ltYm9sLml0ZXJhdG9yKSBpcyBmYWxz
ZQorUEFTUyBzZXQuYWRkKG5ldyBTdHJpbmcoJ2ZvbycpKSBpcyBzZXQKK1BBU1Mgc2V0LmFkZChu
ZXcgU3RyaW5nKCdmb28nKSkgaXMgc2V0CitQQVNTIHNldC5oYXMobmV3IFN0cmluZygnZm9vJykp
IGlzIGZhbHNlCitQQVNTIHNldC5hZGQob2JqZWN0KSBpcyBzZXQKK1BBU1Mgc2V0LmhhcyhvYmpl
Y3QpIGlzIHRydWUKK1BBU1Mgc2V0LmRlbGV0ZShuZXcgU3RyaW5nKCdmb28nKSkgaXMgZmFsc2UK
K1BBU1Mgc2V0LmRlbGV0ZShvYmplY3QpIGlzIHRydWUKK1BBU1Mgc2V0LmhhcyhvYmplY3QpIGlz
IGZhbHNlCitQQVNTIHNldC5kZWxldGUob2JqZWN0KSBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL2RvbS9iYXNpYy13ZWFrc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9kb20vYmFzaWMt
d2Vha3NldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2M2RmMDdjNmUwYmYxNmZiMDE2ODRmNTgxY2JhODc1
OGE2M2Q5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9kb20vYmFzaWMtd2Vh
a3NldC5odG1sCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9iYXNpYy13ZWFrc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvYmFz
aWMtd2Vha21hcC5qcyBiL0xheW91dFRlc3RzL2pzL2RvbS9zY3JpcHQtdGVzdHMvYmFzaWMtd2Vh
a21hcC5qcwppbmRleCAzODZlYTQ1MzMyY2M5NTYxZjBlYTMyZmRjZmUzNGI2NTJiODNhOTBmLi5l
OWQxNGYyNTRhNTIxYjY2NjZiYWI1NmVmNGU4YzEyMjQyNzQ3M2ZlIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL2Jhc2ljLXdlYWttYXAuanMKKysrIGIvTGF5b3V0
VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9iYXNpYy13ZWFrbWFwLmpzCkBAIC0xNiwyOCArMTYs
MzYgQEAKIHNob3VsZFRocm93KCJtYXAuc2V0KGZhbHNlLCAxKSIpCiBzaG91bGRUaHJvdygibWFw
LnNldChudWxsLCAxKSIpCiBzaG91bGRUaHJvdygibWFwLnNldCh1bmRlZmluZWQsIDEpIikKLXNo
b3VsZFRocm93KCJtYXAuZ2V0KDApIikKLXNob3VsZFRocm93KCJtYXAuZ2V0KDAuNSkiKQotc2hv
dWxkVGhyb3coIm1hcC5nZXQoJ2ZvbycpIikKLXNob3VsZFRocm93KCJtYXAuZ2V0KHRydWUpIikK
LXNob3VsZFRocm93KCJtYXAuZ2V0KGZhbHNlKSIpCi1zaG91bGRUaHJvdygibWFwLmdldChudWxs
KSIpCi1zaG91bGRUaHJvdygibWFwLmdldCh1bmRlZmluZWQpIikKLXNob3VsZFRocm93KCJtYXAu
aGFzKDApIikKLXNob3VsZFRocm93KCJtYXAuaGFzKDAuNSkiKQotc2hvdWxkVGhyb3coIm1hcC5o
YXMoJ2ZvbycpIikKLXNob3VsZFRocm93KCJtYXAuaGFzKHRydWUpIikKLXNob3VsZFRocm93KCJt
YXAuaGFzKGZhbHNlKSIpCi1zaG91bGRUaHJvdygibWFwLmhhcyhudWxsKSIpCi1zaG91bGRUaHJv
dygibWFwLmhhcyh1bmRlZmluZWQpIikKLXNob3VsZFRocm93KCJtYXAuZGVsZXRlKDApIikKLXNo
b3VsZFRocm93KCJtYXAuZGVsZXRlKDAuNSkiKQotc2hvdWxkVGhyb3coIm1hcC5kZWxldGUoJ2Zv
bycpIikKLXNob3VsZFRocm93KCJtYXAuZGVsZXRlKHRydWUpIikKLXNob3VsZFRocm93KCJtYXAu
ZGVsZXRlKGZhbHNlKSIpCi1zaG91bGRUaHJvdygibWFwLmRlbGV0ZShudWxsKSIpCi1zaG91bGRU
aHJvdygibWFwLmRlbGV0ZSh1bmRlZmluZWQpIikKK3Nob3VsZEJlVW5kZWZpbmVkKCJtYXAuZ2V0
KDApIikKK3Nob3VsZEJlVW5kZWZpbmVkKCJtYXAuZ2V0KDAuNSkiKQorc2hvdWxkQmVVbmRlZmlu
ZWQoIm1hcC5nZXQoJ2ZvbycpIikKK3Nob3VsZEJlVW5kZWZpbmVkKCJtYXAuZ2V0KHRydWUpIikK
K3Nob3VsZEJlVW5kZWZpbmVkKCJtYXAuZ2V0KGZhbHNlKSIpCitzaG91bGRCZVVuZGVmaW5lZCgi
bWFwLmdldChudWxsKSIpCitzaG91bGRCZVVuZGVmaW5lZCgibWFwLmdldCh1bmRlZmluZWQpIikK
K3Nob3VsZEJlRmFsc2UoIm1hcC5oYXMoMCkiKQorc2hvdWxkQmVGYWxzZSgibWFwLmhhcygwLjUp
IikKK3Nob3VsZEJlRmFsc2UoIm1hcC5oYXMoJ2ZvbycpIikKK3Nob3VsZEJlRmFsc2UoIm1hcC5o
YXModHJ1ZSkiKQorc2hvdWxkQmVGYWxzZSgibWFwLmhhcyhmYWxzZSkiKQorc2hvdWxkQmVGYWxz
ZSgibWFwLmhhcyhudWxsKSIpCitzaG91bGRCZUZhbHNlKCJtYXAuaGFzKHVuZGVmaW5lZCkiKQor
c2hvdWxkQmVGYWxzZSgibWFwLmRlbGV0ZSgwKSIpCitzaG91bGRCZUZhbHNlKCJtYXAuZGVsZXRl
KDAuNSkiKQorc2hvdWxkQmVGYWxzZSgibWFwLmRlbGV0ZSgnZm9vJykiKQorc2hvdWxkQmVGYWxz
ZSgibWFwLmRlbGV0ZSh0cnVlKSIpCitzaG91bGRCZUZhbHNlKCJtYXAuZGVsZXRlKGZhbHNlKSIp
CitzaG91bGRCZUZhbHNlKCJtYXAuZGVsZXRlKG51bGwpIikKK3Nob3VsZEJlRmFsc2UoIm1hcC5k
ZWxldGUodW5kZWZpbmVkKSIpCiAKK3ZhciBvYmplY3QgPSBuZXcgU3RyaW5nKCdoZWxsbycpOwog
c2hvdWxkQmUoIm1hcC5zZXQobmV3IFN0cmluZygnZm9vJyksICdmb28nKSIsICJtYXAiKTsKLXNo
b3VsZEJlKCJtYXAuZ2V0KG5ldyBTdHJpbmcoJ2ZvbycpKSIsICJ1bmRlZmluZWQiKTsKK3Nob3Vs
ZEJlVW5kZWZpbmVkKCJtYXAuZ2V0KG5ldyBTdHJpbmcoJ2ZvbycpKSIpOwogc2hvdWxkQmVGYWxz
ZSgibWFwLmhhcyhuZXcgU3RyaW5nKCdmb28nKSkiKTsKK3Nob3VsZEJlKCJtYXAuc2V0KG9iamVj
dCwgJ2ZvbycpIiwgIm1hcCIpOworc2hvdWxkQmVUcnVlKCJtYXAuaGFzKG9iamVjdCkiKTsKK3No
b3VsZEJlKCJtYXAuZ2V0KG9iamVjdCkiLCAiJ2ZvbyciKTsKK3Nob3VsZEJlVHJ1ZSgibWFwLmRl
bGV0ZShvYmplY3QpIik7CitzaG91bGRCZUZhbHNlKCJtYXAuaGFzKG9iamVjdCkiKTsKK3Nob3Vs
ZEJlRmFsc2UoIm1hcC5kZWxldGUob2JqZWN0KSIpOworc2hvdWxkQmVVbmRlZmluZWQoIm1hcC5n
ZXQob2JqZWN0KSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0
cy9iYXNpYy13ZWFrc2V0LmpzIGIvTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9iYXNp
Yy13ZWFrc2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyOTAyYjFhMjAzMjgyMjFmYTJlYjcxMzUyNTYzYzFh
OTcyZWVmODUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRl
c3RzL2Jhc2ljLXdlYWtzZXQuanMKQEAgLTAsMCArMSw0NCBAQAorZGVzY3JpcHRpb24oIlRlc3Rz
IGJhc2ljIGNvcnJlY3RuZXNzIG9mIEVTIFdlYWtTZXQgb2JqZWN0Iik7CisKK3Nob3VsZEJlRmFs
c2UoIldlYWtTZXQgaW5zdGFuY2VvZiBXZWFrU2V0Iik7CitzaG91bGRCZUZhbHNlKCJXZWFrU2V0
LnByb3RvdHlwZSBpbnN0YW5jZW9mIFdlYWtTZXQiKTsKK3Nob3VsZEJlVHJ1ZSgibmV3IFdlYWtT
ZXQoKSBpbnN0YW5jZW9mIFdlYWtTZXQiKTsKKworc2hvdWxkVGhyb3coIldlYWtTZXQoKSIpOwor
Cit2YXIgc2V0ID0gbmV3IFdlYWtTZXQ7CitzaG91bGRUaHJvdygic2V0LmFkZCgwKSIpCitzaG91
bGRUaHJvdygic2V0LmFkZCgwLjUpIikKK3Nob3VsZFRocm93KCJzZXQuYWRkKCdmb28nKSIpCitz
aG91bGRUaHJvdygic2V0LmFkZCh0cnVlKSIpCitzaG91bGRUaHJvdygic2V0LmFkZChmYWxzZSki
KQorc2hvdWxkVGhyb3coInNldC5hZGQobnVsbCkiKQorc2hvdWxkVGhyb3coInNldC5hZGQodW5k
ZWZpbmVkKSIpCitzaG91bGRUaHJvdygic2V0LmFkZChTeW1ib2wuaXRlcmF0b3IpIikKK3Nob3Vs
ZEJlRmFsc2UoInNldC5oYXMoMCkiKQorc2hvdWxkQmVGYWxzZSgic2V0LmhhcygwLjUpIikKK3No
b3VsZEJlRmFsc2UoInNldC5oYXMoJ2ZvbycpIikKK3Nob3VsZEJlRmFsc2UoInNldC5oYXModHJ1
ZSkiKQorc2hvdWxkQmVGYWxzZSgic2V0LmhhcyhmYWxzZSkiKQorc2hvdWxkQmVGYWxzZSgic2V0
LmhhcyhudWxsKSIpCitzaG91bGRCZUZhbHNlKCJzZXQuaGFzKHVuZGVmaW5lZCkiKQorc2hvdWxk
QmVGYWxzZSgic2V0LmhhcyhTeW1ib2wuaXRlcmF0b3IpIikKK3Nob3VsZEJlRmFsc2UoInNldC5k
ZWxldGUoMCkiKQorc2hvdWxkQmVGYWxzZSgic2V0LmRlbGV0ZSgwLjUpIikKK3Nob3VsZEJlRmFs
c2UoInNldC5kZWxldGUoJ2ZvbycpIikKK3Nob3VsZEJlRmFsc2UoInNldC5kZWxldGUodHJ1ZSki
KQorc2hvdWxkQmVGYWxzZSgic2V0LmRlbGV0ZShmYWxzZSkiKQorc2hvdWxkQmVGYWxzZSgic2V0
LmRlbGV0ZShudWxsKSIpCitzaG91bGRCZUZhbHNlKCJzZXQuZGVsZXRlKHVuZGVmaW5lZCkiKQor
c2hvdWxkQmVGYWxzZSgic2V0LmRlbGV0ZShTeW1ib2wuaXRlcmF0b3IpIikKKwordmFyIG9iamVj
dCA9IG5ldyBTdHJpbmcoJ2hlbGxvJyk7CitzaG91bGRCZSgic2V0LmFkZChuZXcgU3RyaW5nKCdm
b28nKSkiLCAic2V0Iik7CitzaG91bGRCZSgic2V0LmFkZChuZXcgU3RyaW5nKCdmb28nKSkiLCAi
c2V0Iik7CitzaG91bGRCZUZhbHNlKCJzZXQuaGFzKG5ldyBTdHJpbmcoJ2ZvbycpKSIsICJmYWxz
ZSIpOworc2hvdWxkQmUoInNldC5hZGQob2JqZWN0KSIsICJzZXQiKTsKK3Nob3VsZEJlVHJ1ZSgi
c2V0LmhhcyhvYmplY3QpIik7CitzaG91bGRCZUZhbHNlKCJzZXQuZGVsZXRlKG5ldyBTdHJpbmco
J2ZvbycpKSIpOworc2hvdWxkQmVUcnVlKCJzZXQuZGVsZXRlKG9iamVjdCkiKTsKK3Nob3VsZEJl
RmFsc2UoInNldC5oYXMob2JqZWN0KSIpOworc2hvdWxkQmVGYWxzZSgic2V0LmRlbGV0ZShvYmpl
Y3QpIik7Cg==
</data>
<flag name="review"
          id="275902"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>