<?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>178689</bug_id>
          
          <creation_ts>2017-10-23 16:25:52 -0700</creation_ts>
          <short_desc>[Payment Request] Implement the &quot;PaymentRequest updated&quot; algorithm</short_desc>
          <delta_ts>2017-10-24 14:05:42 -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>New Bugs</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174796</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1363452</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-10-23 16:25:52 -0700</bug_when>
    <thetext>[Payment Request] Implement the &quot;PaymentRequest updated&quot; algorithm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363458</commentid>
    <comment_count>1</comment_count>
      <attachid>324609</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-10-23 16:37:54 -0700</bug_when>
    <thetext>Created attachment 324609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363459</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-23 16:40:52 -0700</bug_when>
    <thetext>Attachment 324609 did not pass style-queue:


ERROR: Source/WebCore/Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363757</commentid>
    <comment_count>3</comment_count>
      <attachid>324609</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-24 11:11:51 -0700</bug_when>
    <thetext>Comment on attachment 324609
Patch

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

r=me

&gt; Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:249
&gt; +enum class ValidatePaymentMethodIdentifier {
&gt; +    Yes,

I think this enum should be called ShouldValidatePaymentMethodIdentifier.
Also, I have a pet peeve that No should come first so it&apos;s binary value is 0.  I&apos;m pretty sure it doesn&apos;t matter that much.

&gt; Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:253
&gt; +static ExceptionOr&lt;std::tuple&lt;String, Vector&lt;String&gt;&gt;&gt; checkAndCanonicalizeDetails(JSC::ExecState&amp; execState, PaymentDetailsBase&amp; details, bool requestShipping, ValidatePaymentMethodIdentifier shouldValidatePaymentMethodIdentifier)

Do you plan to add more things to this tuple, or could you use std::pair?

&gt; Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:284
&gt; +                return Exception { RangeError, makeString(&quot;\&quot;&quot;, modifier.supportedMethods, &quot;\&quot; is an invalid payment method identifier.&quot;) };

This string does not appear in the tests.  Could you add a test that makes sure this is working correctly?

&gt; Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:352
&gt; +    Vector&lt;String&gt; serializedModifierData;
&gt; +    std::tie(selectedShippingOption, serializedModifierData) = shippingOptionAndModifierData.releaseReturnValue();

Interesting.  I don&apos;t think there&apos;s a compelling reason to use std::tie and make local variables here.  This doesn&apos;t add a Vector copy, does it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363800</commentid>
    <comment_count>4</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-10-24 11:58:55 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #3)
&gt; Comment on attachment 324609 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=324609&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:249
&gt; &gt; +enum class ValidatePaymentMethodIdentifier {
&gt; &gt; +    Yes,
&gt; 
&gt; I think this enum should be called ShouldValidatePaymentMethodIdentifier.
&gt; Also, I have a pet peeve that No should come first so it&apos;s binary value is
&gt; 0.  I&apos;m pretty sure it doesn&apos;t matter that much.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:253
&gt; &gt; +static ExceptionOr&lt;std::tuple&lt;String, Vector&lt;String&gt;&gt;&gt; checkAndCanonicalizeDetails(JSC::ExecState&amp; execState, PaymentDetailsBase&amp; details, bool requestShipping, ValidatePaymentMethodIdentifier shouldValidatePaymentMethodIdentifier)
&gt; 
&gt; Do you plan to add more things to this tuple, or could you use std::pair?

Likely, yes. I&apos;ll leave it as a tuple for now.

&gt; 
&gt; &gt; Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:284
&gt; &gt; +                return Exception { RangeError, makeString(&quot;\&quot;&quot;, modifier.supportedMethods, &quot;\&quot; is an invalid payment method identifier.&quot;) };
&gt; 
&gt; This string does not appear in the tests.  Could you add a test that makes
&gt; sure this is working correctly?

This is covered by updateWith-method-pmi-handling.https.html

&gt; 
&gt; &gt; Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:352
&gt; &gt; +    Vector&lt;String&gt; serializedModifierData;
&gt; &gt; +    std::tie(selectedShippingOption, serializedModifierData) = shippingOptionAndModifierData.releaseReturnValue();
&gt; 
&gt; Interesting.  I don&apos;t think there&apos;s a compelling reason to use std::tie and
&gt; make local variables here.  This doesn&apos;t add a Vector copy, does it?

I agree, I&apos;ll just use std::get to retrieve the values.

Thanks for reviewing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363808</commentid>
    <comment_count>5</comment_count>
      <attachid>324700</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-10-24 12:18:51 -0700</bug_when>
    <thetext>Created attachment 324700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363816</commentid>
    <comment_count>6</comment_count>
      <attachid>324700</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-24 12:53:48 -0700</bug_when>
    <thetext>Comment on attachment 324700
Patch

Clearing flags on attachment: 324700

Committed r223910: &lt;https://trac.webkit.org/changeset/223910&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363817</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-24 12:53:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363877</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-24 13:59:59 -0700</bug_when>
    <thetext>&lt;rdar://problem/35158633&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324609</attachid>
            <date>2017-10-23 16:37:54 -0700</date>
            <delta_ts>2017-10-24 12:18:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178689-20171023163753.patch</filename>
            <type>text/plain</type>
            <size>49476</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMxNDZiYzk4MDUyNmU5
NTE0NWE0NTBlMzE3YjdmYzIyODA1YTE1ZS4uNGY1YjIyYjhmZjZlNDA2MGJmM2ZiMDk4ZGI5NjVl
YThjYzUwZWVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE3LTEwLTIzICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBJ
bXBsZW1lbnQgdGhlICJQYXltZW50UmVxdWVzdCB1cGRhdGVkIiBhbGdvcml0aG0KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODY4OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIHRoZSAi
UGF5bWVudFJlcXVlc3QgdXBkYXRlZCIgYWxnb3JpdGhtIGJ5IGZpcmluZyBzaGlwcGluZ2FkZHJl
c3NjaGFuZ2UgYW5kCisgICAgICAgIHNoaXBwaW5nb3B0aW9uY2hhbmdlIGV2ZW50cyBhdCB0aGUg
cmlnaHQgdGltZXMgYW5kIGltcGxlbWVudGluZworICAgICAgICBQYXltZW50UmVxdWVzdFVwZGF0
ZUV2ZW50LnVwZGF0ZVdpdGgoKS4KKworICAgICAgICBUZXN0czogaHR0cC90ZXN0cy9wYXltZW50
cmVxdWVzdC9wYXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBwaW5nLWFkZHJlc3MuaHR0cHMuaHRt
bAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC9wYXltZW50LXJlcXVl
c3QtY2hhbmdlLXNoaXBwaW5nLW9wdGlvbi5odHRwcy5odG1sCisgICAgICAgICAgICAgICBodHRw
L3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3VwZGF0ZVdpdGgtbWV0aG9kLXBtaS1oYW5kbGluZy5odHRw
cy5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0FwcGxl
UGF5UGF5bWVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFuZFZhbGlk
YXRlKTogQWRkZWQuIENvbnZlcnRzIGEgUGF5bWVudERldGFpbHNJbml0IHRvIGEKKyAgICAgICAg
QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6OlRvdGFsQW5kTGluZUl0ZW1zLgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGVQYXlQYXltZW50SGFuZGxlcjo6c2hpcHBpbmdBZGRyZXNzVXBkYXRl
ZCk6IENyZWF0ZWQgYSBTaGlwcGluZ0NvbnRhY3RVcGRhdGUKKyAgICAgICAgYW5kIHBhc3NlZCBp
dCB0byBQYXltZW50Q29vcmRpbmF0b3I6OmNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9u
KCkuCisgICAgICAgIChXZWJDb3JlOjpBcHBsZVBheVBheW1lbnRIYW5kbGVyOjpzaGlwcGluZ09w
dGlvblVwZGF0ZWQpOiBDcmVhdGVkIGEgU2hpcHBpbmdNZXRob2RVcGRhdGUgYW5kCisgICAgICAg
IHBhc3NlZCBpdCB0byBQYXltZW50Q29vcmRpbmF0b3I6OmNvbXBsZXRlU2hpcHBpbmdNZXRob2RT
ZWxlY3Rpb24oKS4KKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0Fw
cGxlUGF5UGF5bWVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0
L1BheW1lbnRIYW5kbGVyLmg6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXlt
ZW50UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0FuZENhbm9uaWNhbGl6ZURl
dGFpbHMpOiBNb3ZlZCB0aGUgbG9naWMgZm9yIGNoZWNraW5nIGFuZCBjYW5vbmljYWxpemluZyBh
CisgICAgICAgIFBheW1lbnREZXRhaWxzQmFzZSBmcm9tIFBheW1lbnRSZXF1ZXN0OjpjcmVhdGUo
KSB0byBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OmNyZWF0ZSk6IENh
bGxlZCBjaGVja0FuZENhbm9uaWNhbGl6ZURldGFpbHMoKS4KKyAgICAgICAgKFdlYkNvcmU6OlBh
eW1lbnRSZXF1ZXN0OjphYm9ydFdpdGhFeGNlcHRpb24pOiBNb3ZlZCB0aGUgYm9keSBvZiBzdG9w
KCkgdG8gaGVyZSBhbmQKKyAgICAgICAgcGFyYW1ldGVyaXplZCB0aGUgRXhjZXB0aW9uIHdpdGgg
d2hpY2ggdG8gYWJvcnQgbV9zaG93UHJvbWlzZS4KKyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRS
ZXF1ZXN0OjpzdG9wKTogQ2FsbGVkIGFib3J0V2l0aEV4Y2VwdGlvbigpIHdpdGggYW4gQWJvcnRF
cnJvci4KKyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpzaGlwcGluZ0FkZHJlc3ND
aGFuZ2VkKTogQ2FsbGVkIGRpc3BhdGNoVXBkYXRlRXZlbnQoKSB3aXRoCisgICAgICAgIHNoaXBw
aW5nYWRkcmVzc2NoYW5nZUV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6
OnNoaXBwaW5nT3B0aW9uQ2hhbmdlZCk6IERpdHRvIHdpdGggc2hpcHBpbmdvcHRpb25jaGFuZ2VF
dmVudC4KKyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpkaXNwYXRjaFVwZGF0ZUV2
ZW50KTogQ3JlYXRlZCBhIFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQgYW5kCisgICAgICAgIGRp
c3BhdGNoZWQgaXQuCisgICAgICAgIChXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6dXBkYXRlV2l0
aCk6IEFkZGVkIGEgc2V0dGxlIGhhbmRsZXIgdG8gbV9kZXRhaWxzUHJvbWlzZS4KKyAgICAgICAg
KFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0OjpzZXR0bGVEZXRhaWxzUHJvbWlzZSk6IFVwZGF0ZWQg
dGhlIFBheW1lbnRSZXF1ZXN0IHdpdGggdGhlIG5ldworICAgICAgICBkZXRhaWxzIGFuZCBjYWxs
ZWQgUGF5bWVudEhhbmRsZXI6OnNoaXBwaW5nQWRkcmVzc1VwZGF0ZWQoKSBvcgorICAgICAgICBQ
YXltZW50SGFuZGxlcjo6c2hpcHBpbmdPcHRpb25VcGRhdGVkKCkuCisgICAgICAgICogTW9kdWxl
cy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50OjpQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ6OnVwZGF0ZVdp
dGgpOiBDYWxsZWQgUGF5bWVudFJlcXVlc3Q6OnVwZGF0ZVdpdGgoKS4KKyAgICAgICAgKFdlYkNv
cmU6OlBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlIGNvbnN0KTogUmV0
dXJuZWQKKyAgICAgICAgUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudEludGVyZmFjZVR5cGUuCisg
ICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50
Lmg6CisgICAgICAgICogTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdFVwZGF0
ZUV2ZW50LmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja1BheW1lbnRDb29yZGluYXRvcjo6Y2FuTWFrZVBheW1l
bnRzV2l0aEFjdGl2ZUNhcmQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1BheW1lbnRDb29yZGlu
YXRvcjo6b3BlblBheW1lbnRTZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUGF5bWVudENv
b3JkaW5hdG9yOjpjb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbik6IFN0b3BwZWQgY2FsbGluZwor
ICAgICAgICBQYXltZW50Q29vcmRpbmF0b3I6OmRpZEF1dGhvcml6ZVBheW1lbnQoKS4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tQYXltZW50Q29vcmRpbmF0b3I6OmNoYW5nZVNoaXBwaW5nT3B0aW9u
KTogQ2FsbGVkCisgICAgICAgIFBheW1lbnRDb29yZGluYXRvcjo6ZGlkU2VsZWN0U2hpcHBpbmdN
ZXRob2QoKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tQYXltZW50Q29vcmRpbmF0b3I6OmFjY2Vw
dFBheW1lbnQpOiBDYWxsZWQKKyAgICAgICAgUGF5bWVudENvb3JkaW5hdG9yOjpkaWRBdXRob3Jp
emVQYXltZW50KCkuCisgICAgICAgICogdGVzdGluZy9Nb2NrUGF5bWVudENvb3JkaW5hdG9yLmg6
CisgICAgICAgICogdGVzdGluZy9Nb2NrUGF5bWVudENvb3JkaW5hdG9yLmlkbDoKKwogMjAxNy0x
MC0yMyAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW1BheW1lbnQg
UmVxdWVzdF0gVGFrZSB0aGUgSlNDIEFQSSBsb2NrIGJlZm9yZSBjcmVhdGluZyB0aGUgUGF5bWVu
dFJlc3BvbnNlLmRldGFpbHMgb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0FwcGxlUGF5UGF5bWVudEhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9wYXltZW50cmVxdWVzdC9BcHBsZVBheVBh
eW1lbnRIYW5kbGVyLmNwcAppbmRleCAzOTNiZjRmNjdkNDNjYzQ4NTFiN2IzNDFmMWI2NWI2NjQ5
MjNiZmVhLi5lZWYyYTBjOWEyNmI3MDFiM2NhYjZlN2ZjMmZlMzU0NmQwMGFhZDg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0FwcGxl
UGF5UGF5bWVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVw
YXkvcGF5bWVudHJlcXVlc3QvQXBwbGVQYXlQYXltZW50SGFuZGxlci5jcHAKQEAgLTI1Myw2ICsy
NTMsNTMgQEAgdm9pZCBBcHBsZVBheVBheW1lbnRIYW5kbGVyOjpjYW5NYWtlUGF5bWVudChGdW5j
dGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW4KICAgICBwYXltZW50Q29vcmRpbmF0b3Io
KS5jYW5NYWtlUGF5bWVudHNXaXRoQWN0aXZlQ2FyZChtX2FwcGxlUGF5UmVxdWVzdC0+bWVyY2hh
bnRJZGVudGlmaWVyLCBkb2N1bWVudCgpLmRvbWFpbigpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiB9CiAKK3N0YXRpYyBFeGNlcHRpb25PcjxBcHBsZVBheVNlc3Npb25QYXltZW50UmVx
dWVzdDo6VG90YWxBbmRMaW5lSXRlbXM+IGNvbnZlcnRBbmRWYWxpZGF0ZShjb25zdCBQYXltZW50
RGV0YWlsc0luaXQmIGRldGFpbHMpCit7CisgICAgU3RyaW5nIGN1cnJlbmN5ID0gZGV0YWlscy50
b3RhbC5hbW91bnQuY3VycmVuY3k7CisgICAgYXV0byB0b3RhbCA9IGNvbnZlcnRBbmRWYWxpZGF0
ZShkZXRhaWxzLnRvdGFsLCBjdXJyZW5jeSk7CisgICAgaWYgKHRvdGFsLmhhc0V4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gdG90YWwucmVsZWFzZUV4Y2VwdGlvbigpOworCisgICAgYXV0byBs
aW5lSXRlbXMgPSBjb252ZXJ0QW5kVmFsaWRhdGUoZGV0YWlscy5kaXNwbGF5SXRlbXMsIGN1cnJl
bmN5KTsKKyAgICBpZiAobGluZUl0ZW1zLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
bGluZUl0ZW1zLnJlbGVhc2VFeGNlcHRpb24oKTsKKworICAgIHJldHVybiBBcHBsZVBheVNlc3Np
b25QYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXMgeyB0b3RhbC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSwgbGluZUl0ZW1zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIH07Cit9CisKK0V4Y2VwdGlv
bk9yPHZvaWQ+IEFwcGxlUGF5UGF5bWVudEhhbmRsZXI6OnNoaXBwaW5nQWRkcmVzc1VwZGF0ZWQo
Y29uc3QgU3RyaW5nJiBlcnJvcikKK3sKKyAgICBTaGlwcGluZ0NvbnRhY3RVcGRhdGUgdXBkYXRl
OworCisgICAgaWYgKG1fcGF5bWVudFJlcXVlc3QtPnBheW1lbnRPcHRpb25zKCkucmVxdWVzdFNo
aXBwaW5nICYmIG1fcGF5bWVudFJlcXVlc3QtPnBheW1lbnREZXRhaWxzKCkuc2hpcHBpbmdPcHRp
b25zLmlzRW1wdHkoKSkgeworICAgICAgICBQYXltZW50RXJyb3IgcGF5bWVudEVycm9yOworICAg
ICAgICBwYXltZW50RXJyb3IuY29kZSA9IFBheW1lbnRFcnJvcjo6Q29kZTo6U2hpcHBpbmdDb250
YWN0SW52YWxpZDsKKyAgICAgICAgcGF5bWVudEVycm9yLm1lc3NhZ2UgPSBlcnJvcjsKKyAgICAg
ICAgdXBkYXRlLmVycm9ycy5hcHBlbmQoV1RGTW92ZShwYXltZW50RXJyb3IpKTsKKyAgICB9CisK
KyAgICBhdXRvIG5ld1RvdGFsQW5kTGluZUl0ZW1zID0gY29udmVydEFuZFZhbGlkYXRlKG1fcGF5
bWVudFJlcXVlc3QtPnBheW1lbnREZXRhaWxzKCkpOworICAgIGlmIChuZXdUb3RhbEFuZExpbmVJ
dGVtcy5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG5ld1RvdGFsQW5kTGluZUl0ZW1z
LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICB1cGRhdGUubmV3VG90YWxBbmRMaW5lSXRlbXMgPSBu
ZXdUb3RhbEFuZExpbmVJdGVtcy5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKworICAgIHBheW1lbnRD
b29yZGluYXRvcigpLmNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKFdURk1vdmUodXBk
YXRlKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlQ
YXltZW50SGFuZGxlcjo6c2hpcHBpbmdPcHRpb25VcGRhdGVkKCkKK3sKKyAgICBTaGlwcGluZ01l
dGhvZFVwZGF0ZSB1cGRhdGU7CisKKyAgICBhdXRvIG5ld1RvdGFsQW5kTGluZUl0ZW1zID0gY29u
dmVydEFuZFZhbGlkYXRlKG1fcGF5bWVudFJlcXVlc3QtPnBheW1lbnREZXRhaWxzKCkpOworICAg
IGlmIChuZXdUb3RhbEFuZExpbmVJdGVtcy5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IG5ld1RvdGFsQW5kTGluZUl0ZW1zLnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICB1cGRhdGUubmV3
VG90YWxBbmRMaW5lSXRlbXMgPSBuZXdUb3RhbEFuZExpbmVJdGVtcy5yZWxlYXNlUmV0dXJuVmFs
dWUoKTsKKworICAgIHBheW1lbnRDb29yZGluYXRvcigpLmNvbXBsZXRlU2hpcHBpbmdNZXRob2RT
ZWxlY3Rpb24oV1RGTW92ZSh1cGRhdGUpKTsKKyAgICByZXR1cm4geyB9OworfQorCiB2b2lkIEFw
cGxlUGF5UGF5bWVudEhhbmRsZXI6OmNvbXBsZXRlKHN0ZDo6b3B0aW9uYWw8UGF5bWVudENvbXBs
ZXRlPiYmIHJlc3VsdCkKIHsKICAgICBpZiAoIXJlc3VsdCkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9wYXltZW50cmVxdWVzdC9BcHBsZVBheVBheW1lbnRI
YW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0
L0FwcGxlUGF5UGF5bWVudEhhbmRsZXIuaAppbmRleCA1NWU2N2U2Zjc4ZTlmMzk5NTQxZjAxZDYy
M2U1NmJiYzk5NTk2N2UyLi45ZWFmOTI3NGUyZTI3MTRjM2U5OWRmODQ1NzE3YzUwNGIwMGIxMGEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1
ZXN0L0FwcGxlUGF5UGF5bWVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0FwcGxlUGF5UGF5bWVudEhhbmRsZXIuaApAQCAtNTYs
NiArNTYsOCBAQCBwcml2YXRlOgogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNob3coKSBmaW5hbDsK
ICAgICB2b2lkIGhpZGUoKSBmaW5hbDsKICAgICB2b2lkIGNhbk1ha2VQYXltZW50KFdURjo6RnVu
Y3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWw7CisgICAgRXhjZXB0
aW9uT3I8dm9pZD4gc2hpcHBpbmdBZGRyZXNzVXBkYXRlZChjb25zdCBTdHJpbmcmIGVycm9yKSBm
aW5hbDsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzaGlwcGluZ09wdGlvblVwZGF0ZWQoKSBmaW5h
bDsKICAgICB2b2lkIGNvbXBsZXRlKHN0ZDo6b3B0aW9uYWw8UGF5bWVudENvbXBsZXRlPiYmKSBm
aW5hbDsKIAogICAgIC8vIFBheW1lbnRTZXNzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmgKaW5kZXggODI3MjAyNjUz
N2NlOWViYmY5ZDdhZTY3MjcwNTVhNzlhYzc2NGM1Yy4uYzQ4ZmE5YjEzYjE1Y2RmZjc1MTE3OTBj
ZmJlZTIxYWE2OTE2ZTVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXlt
ZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
cGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuaApAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBFeGNlcHRpb25Pcjx2b2lkPiBzaG93KCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBoaWRlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjYW5NYWtlUGF5bWVudChXVEY6OkZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpID0gMDsKKyAgICB2aXJ0dWFs
IEV4Y2VwdGlvbk9yPHZvaWQ+IHNoaXBwaW5nQWRkcmVzc1VwZGF0ZWQoY29uc3QgU3RyaW5nJiBl
cnJvcikgPSAwOworICAgIHZpcnR1YWwgRXhjZXB0aW9uT3I8dm9pZD4gc2hpcHBpbmdPcHRpb25V
cGRhdGVkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjb21wbGV0ZShzdGQ6Om9wdGlvbmFsPFBh
eW1lbnRDb21wbGV0ZT4mJikgPSAwOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcAppbmRleCA4YTViYWJk
MDU0NDk3M2M2NzcwMDlmZDdiNmFkY2YzNzJkN2QwYjFhLi42MWQ4MDEwMTdmZDA5NDgwNjAzNGNh
MTM2ODM2MmIzYjU4MDljM2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bh
eW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcApAQCAtMzAsNiArMzAsOSBAQAog
CiAjaW5jbHVkZSAiQXBwbGVQYXlQYXltZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgor
I2luY2x1ZGUgIkpTUGF5bWVudERldGFpbHNVcGRhdGUuaCIKICNpbmNsdWRlICJKU1BheW1lbnRS
ZXNwb25zZS5oIgogI2luY2x1ZGUgIlBheW1lbnRBZGRyZXNzLmgiCiAjaW5jbHVkZSAiUGF5bWVu
dEN1cnJlbmN5QW1vdW50LmgiCkBAIC0zNywxMiArNDAsMTQgQEAKICNpbmNsdWRlICJQYXltZW50
SGFuZGxlci5oIgogI2luY2x1ZGUgIlBheW1lbnRNZXRob2REYXRhLmgiCiAjaW5jbHVkZSAiUGF5
bWVudE9wdGlvbnMuaCIKKyNpbmNsdWRlICJQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmgiCiAj
aW5jbHVkZSAiUGF5bWVudFJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT05PYmplY3QuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9UaHJvd1Njb3BlLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogI2luY2x1ZGUg
PHd0Zi9VVUlELmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI0MCwzOSArMjQ1LDEzIEBA
IHN0ZDo6b3B0aW9uYWw8UGF5bWVudFJlcXVlc3Q6Ok1ldGhvZElkZW50aWZpZXI+IGNvbnZlcnRB
bmRWYWxpZGF0ZVBheW1lbnRNZXRob2RJCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAot
Ly8gSW1wbGVtZW50cyB0aGUgUGF5bWVudFJlcXVlc3QgQ29uc3RydWN0b3IKLS8vIGh0dHBzOi8v
d3d3LnczLm9yZy9UUi9wYXltZW50LXJlcXVlc3QvI2NvbnN0cnVjdG9yCi1FeGNlcHRpb25PcjxS
ZWY8UGF5bWVudFJlcXVlc3Q+PiBQYXltZW50UmVxdWVzdDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1
bWVudCwgVmVjdG9yPFBheW1lbnRNZXRob2REYXRhPiYmIG1ldGhvZERhdGEsIFBheW1lbnREZXRh
aWxzSW5pdCYmIGRldGFpbHMsIFBheW1lbnRPcHRpb25zJiYgb3B0aW9ucykKLXsKLSAgICAvLyBG
SVhNRTogQ2hlY2sgaWYgdGhpcyBkb2N1bWVudCBpcyBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgUGF5
bWVudFJlcXVlc3QgQVBJIGJhc2VkIG9uIHRoZSBhbGxvd3BheW1lbnRyZXF1ZXN0IGF0dHJpYnV0
ZS4KLQotICAgIGlmIChkZXRhaWxzLmlkLmlzTnVsbCgpKQotICAgICAgICBkZXRhaWxzLmlkID0g
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwotCi0gICAgaWYgKG1ldGhvZERhdGEuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCBBU0NJSUxpdGVyYWwo
IkF0IGxlYXN0IG9uZSBwYXltZW50IG1ldGhvZCBpcyByZXF1aXJlZC4iKSB9OwotCi0gICAgVmVj
dG9yPE1ldGhvZD4gc2VyaWFsaXplZE1ldGhvZERhdGE7Ci0gICAgc2VyaWFsaXplZE1ldGhvZERh
dGEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtZXRob2REYXRhLnNpemUoKSk7Ci0gICAgZm9yIChh
dXRvJiBwYXltZW50TWV0aG9kIDogbWV0aG9kRGF0YSkgewotICAgICAgICBhdXRvIGlkZW50aWZp
ZXIgPSBjb252ZXJ0QW5kVmFsaWRhdGVQYXltZW50TWV0aG9kSWRlbnRpZmllcihwYXltZW50TWV0
aG9kLnN1cHBvcnRlZE1ldGhvZHMpOwotICAgICAgICBpZiAoIWlkZW50aWZpZXIpCi0gICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUmFuZ2VFcnJvciwgbWFrZVN0cmluZygiXCIiLCBwYXlt
ZW50TWV0aG9kLnN1cHBvcnRlZE1ldGhvZHMsICJcIiBpcyBhbiBpbnZhbGlkIHBheW1lbnQgbWV0
aG9kIGlkZW50aWZpZXIuIikgfTsKLQotICAgICAgICBTdHJpbmcgc2VyaWFsaXplZERhdGE7Ci0g
ICAgICAgIGlmIChwYXltZW50TWV0aG9kLmRhdGEpIHsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKGRvY3VtZW50LmV4ZWNTdGF0ZSgpLT52bSgpKTsKLSAgICAg
ICAgICAgIHNlcmlhbGl6ZWREYXRhID0gSlNPTlN0cmluZ2lmeShkb2N1bWVudC5leGVjU3RhdGUo
KSwgcGF5bWVudE1ldGhvZC5kYXRhLmdldCgpLCAwKTsKLSAgICAgICAgICAgIGlmIChzY29wZS5l
eGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgRXhpc3RpbmdF
eGNlcHRpb25FcnJvciB9OwotICAgICAgICB9Ci0gICAgICAgIHNlcmlhbGl6ZWRNZXRob2REYXRh
LnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoKmlkZW50aWZpZXIpLCBXVEZNb3ZlKHNlcmlhbGl6
ZWREYXRhKSB9KTsKLSAgICB9Ci0KLSAgICBhdXRvIGV4Y2VwdGlvbiA9IGNoZWNrQW5kQ2Fub25p
Y2FsaXplVG90YWwoZGV0YWlscy50b3RhbC5hbW91bnQpOwotICAgIGlmIChleGNlcHRpb24uaGFz
RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBleGNlcHRpb24ucmVsZWFzZUV4Y2VwdGlvbigp
OworZW51bSBjbGFzcyBWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVudGlmaWVyIHsKKyAgICBZZXMs
CisgICAgTm8sCit9OwogCitzdGF0aWMgRXhjZXB0aW9uT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFZl
Y3RvcjxTdHJpbmc+Pj4gY2hlY2tBbmRDYW5vbmljYWxpemVEZXRhaWxzKEpTQzo6RXhlY1N0YXRl
JiBleGVjU3RhdGUsIFBheW1lbnREZXRhaWxzQmFzZSYgZGV0YWlscywgYm9vbCByZXF1ZXN0U2hp
cHBpbmcsIFZhbGlkYXRlUGF5bWVudE1ldGhvZElkZW50aWZpZXIgc2hvdWxkVmFsaWRhdGVQYXlt
ZW50TWV0aG9kSWRlbnRpZmllcikKK3sKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkZXRhaWxzLmRp
c3BsYXlJdGVtcykgewogICAgICAgICBhdXRvIGV4Y2VwdGlvbiA9IGNoZWNrQW5kQ2Fub25pY2Fs
aXplQW1vdW50KGl0ZW0uYW1vdW50KTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbi5oYXNFeGNlcHRp
b24oKSkKQEAgLTI4MCw3ICsyNTksNyBAQCBFeGNlcHRpb25PcjxSZWY8UGF5bWVudFJlcXVlc3Q+
PiBQYXltZW50UmVxdWVzdDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgVmVjdAogICAgIH0K
IAogICAgIFN0cmluZyBzZWxlY3RlZFNoaXBwaW5nT3B0aW9uOwotICAgIGlmIChvcHRpb25zLnJl
cXVlc3RTaGlwcGluZykgeworICAgIGlmIChyZXF1ZXN0U2hpcHBpbmcpIHsKICAgICAgICAgSGFz
aFNldDxTdHJpbmc+IHNlZW5TaGlwcGluZ09wdGlvbklEczsKICAgICAgICAgZm9yIChhdXRvJiBz
aGlwcGluZ09wdGlvbiA6IGRldGFpbHMuc2hpcHBpbmdPcHRpb25zKSB7CiAgICAgICAgICAgICBh
dXRvIGV4Y2VwdGlvbiA9IGNoZWNrQW5kQ2Fub25pY2FsaXplQW1vdW50KHNoaXBwaW5nT3B0aW9u
LmFtb3VudCk7CkBAIC0yOTksNiArMjc4LDEyIEBAIEV4Y2VwdGlvbk9yPFJlZjxQYXltZW50UmVx
dWVzdD4+IFBheW1lbnRSZXF1ZXN0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0CiAg
ICAgVmVjdG9yPFN0cmluZz4gc2VyaWFsaXplZE1vZGlmaWVyRGF0YTsKICAgICBzZXJpYWxpemVk
TW9kaWZpZXJEYXRhLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGV0YWlscy5tb2RpZmllcnMuc2l6
ZSgpKTsKICAgICBmb3IgKGF1dG8mIG1vZGlmaWVyIDogZGV0YWlscy5tb2RpZmllcnMpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFZhbGlkYXRlUGF5bWVudE1ldGhvZElkZW50aWZpZXIgPT0gVmFsaWRh
dGVQYXltZW50TWV0aG9kSWRlbnRpZmllcjo6WWVzKSB7CisgICAgICAgICAgICBhdXRvIHBheW1l
bnRNZXRob2RJZGVudGlmaWVyID0gY29udmVydEFuZFZhbGlkYXRlUGF5bWVudE1ldGhvZElkZW50
aWZpZXIobW9kaWZpZXIuc3VwcG9ydGVkTWV0aG9kcyk7CisgICAgICAgICAgICBpZiAoIXBheW1l
bnRNZXRob2RJZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBS
YW5nZUVycm9yLCBtYWtlU3RyaW5nKCJcIiIsIG1vZGlmaWVyLnN1cHBvcnRlZE1ldGhvZHMsICJc
IiBpcyBhbiBpbnZhbGlkIHBheW1lbnQgbWV0aG9kIGlkZW50aWZpZXIuIikgfTsKKyAgICAgICAg
fQorCiAgICAgICAgIGlmIChtb2RpZmllci50b3RhbCkgewogICAgICAgICAgICAgYXV0byBleGNl
cHRpb24gPSBjaGVja0FuZENhbm9uaWNhbGl6ZVRvdGFsKG1vZGlmaWVyLnRvdGFsLT5hbW91bnQp
OwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbi5oYXNFeGNlcHRpb24oKSkKQEAgLTMxMywxNCAr
Mjk4LDU4IEBAIEV4Y2VwdGlvbk9yPFJlZjxQYXltZW50UmVxdWVzdD4+IFBheW1lbnRSZXF1ZXN0
OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0CiAKICAgICAgICAgU3RyaW5nIHNlcmlh
bGl6ZWREYXRhOwogICAgICAgICBpZiAobW9kaWZpZXIuZGF0YSkgewotICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZG9jdW1lbnQuZXhlY1N0YXRlKCktPnZtKCkp
OwotICAgICAgICAgICAgc2VyaWFsaXplZERhdGEgPSBKU09OU3RyaW5naWZ5KGRvY3VtZW50LmV4
ZWNTdGF0ZSgpLCBtb2RpZmllci5kYXRhLmdldCgpLCAwKTsKKyAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWNTdGF0ZS52bSgpKTsKKyAgICAgICAgICAgIHNl
cmlhbGl6ZWREYXRhID0gSlNPTlN0cmluZ2lmeSgmZXhlY1N0YXRlLCBtb2RpZmllci5kYXRhLmdl
dCgpLCAwKTsKICAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25FcnJvciB9OworICAgICAg
ICAgICAgbW9kaWZpZXIuZGF0YS5jbGVhcigpOwogICAgICAgICB9CiAgICAgICAgIHNlcmlhbGl6
ZWRNb2RpZmllckRhdGEudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc2VyaWFsaXplZERhdGEpKTsK
ICAgICB9CiAKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURk1vdmUoc2VsZWN0ZWRTaGlw
cGluZ09wdGlvbiksIFdURk1vdmUoc2VyaWFsaXplZE1vZGlmaWVyRGF0YSkpOworfQorCisvLyBJ
bXBsZW1lbnRzIHRoZSBQYXltZW50UmVxdWVzdCBDb25zdHJ1Y3RvcgorLy8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL3BheW1lbnQtcmVxdWVzdC8jY29uc3RydWN0b3IKK0V4Y2VwdGlvbk9yPFJlZjxQ
YXltZW50UmVxdWVzdD4+IFBheW1lbnRSZXF1ZXN0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50
LCBWZWN0b3I8UGF5bWVudE1ldGhvZERhdGE+JiYgbWV0aG9kRGF0YSwgUGF5bWVudERldGFpbHNJ
bml0JiYgZGV0YWlscywgUGF5bWVudE9wdGlvbnMmJiBvcHRpb25zKQoreworICAgIC8vIEZJWE1F
OiBDaGVjayBpZiB0aGlzIGRvY3VtZW50IGlzIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBQYXltZW50
UmVxdWVzdCBBUEkgYmFzZWQgb24gdGhlIGFsbG93cGF5bWVudHJlcXVlc3QgYXR0cmlidXRlLgor
CisgICAgaWYgKGRldGFpbHMuaWQuaXNOdWxsKCkpCisgICAgICAgIGRldGFpbHMuaWQgPSBjcmVh
dGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisKKyAgICBpZiAobWV0aG9kRGF0YS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiQXQg
bGVhc3Qgb25lIHBheW1lbnQgbWV0aG9kIGlzIHJlcXVpcmVkLiIpIH07CisKKyAgICBWZWN0b3I8
TWV0aG9kPiBzZXJpYWxpemVkTWV0aG9kRGF0YTsKKyAgICBzZXJpYWxpemVkTWV0aG9kRGF0YS5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1ldGhvZERhdGEuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8m
IHBheW1lbnRNZXRob2QgOiBtZXRob2REYXRhKSB7CisgICAgICAgIGF1dG8gaWRlbnRpZmllciA9
IGNvbnZlcnRBbmRWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVudGlmaWVyKHBheW1lbnRNZXRob2Qu
c3VwcG9ydGVkTWV0aG9kcyk7CisgICAgICAgIGlmICghaWRlbnRpZmllcikKKyAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCBtYWtlU3RyaW5nKCJcIiIsIHBheW1lbnRN
ZXRob2Quc3VwcG9ydGVkTWV0aG9kcywgIlwiIGlzIGFuIGludmFsaWQgcGF5bWVudCBtZXRob2Qg
aWRlbnRpZmllci4iKSB9OworCisgICAgICAgIFN0cmluZyBzZXJpYWxpemVkRGF0YTsKKyAgICAg
ICAgaWYgKHBheW1lbnRNZXRob2QuZGF0YSkgeworICAgICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoZG9jdW1lbnQuZXhlY1N0YXRlKCktPnZtKCkpOworICAgICAgICAg
ICAgc2VyaWFsaXplZERhdGEgPSBKU09OU3RyaW5naWZ5KGRvY3VtZW50LmV4ZWNTdGF0ZSgpLCBw
YXltZW50TWV0aG9kLmRhdGEuZ2V0KCksIDApOworICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2Vw
dGlvbkVycm9yIH07CisgICAgICAgIH0KKyAgICAgICAgc2VyaWFsaXplZE1ldGhvZERhdGEudW5j
aGVja2VkQXBwZW5kKHsgV1RGTW92ZSgqaWRlbnRpZmllciksIFdURk1vdmUoc2VyaWFsaXplZERh
dGEpIH0pOworICAgIH0KKworICAgIGF1dG8gZXhjZXB0aW9uID0gY2hlY2tBbmRDYW5vbmljYWxp
emVUb3RhbChkZXRhaWxzLnRvdGFsLmFtb3VudCk7CisgICAgaWYgKGV4Y2VwdGlvbi5oYXNFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbi5yZWxlYXNlRXhjZXB0aW9uKCk7CisK
KyAgICBhdXRvIHNoaXBwaW5nT3B0aW9uQW5kTW9kaWZpZXJEYXRhID0gY2hlY2tBbmRDYW5vbmlj
YWxpemVEZXRhaWxzKCpkb2N1bWVudC5leGVjU3RhdGUoKSwgZGV0YWlscywgb3B0aW9ucy5yZXF1
ZXN0U2hpcHBpbmcsIFZhbGlkYXRlUGF5bWVudE1ldGhvZElkZW50aWZpZXI6Ok5vKTsKKyAgICBp
ZiAoc2hpcHBpbmdPcHRpb25BbmRNb2RpZmllckRhdGEuaGFzRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBzaGlwcGluZ09wdGlvbkFuZE1vZGlmaWVyRGF0YS5yZWxlYXNlRXhjZXB0aW9uKCk7
CisKKyAgICBTdHJpbmcgc2VsZWN0ZWRTaGlwcGluZ09wdGlvbjsKKyAgICBWZWN0b3I8U3RyaW5n
PiBzZXJpYWxpemVkTW9kaWZpZXJEYXRhOworICAgIHN0ZDo6dGllKHNlbGVjdGVkU2hpcHBpbmdP
cHRpb24sIHNlcmlhbGl6ZWRNb2RpZmllckRhdGEpID0gc2hpcHBpbmdPcHRpb25BbmRNb2RpZmll
ckRhdGEucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGF5
bWVudFJlcXVlc3QoZG9jdW1lbnQsIFdURk1vdmUob3B0aW9ucyksIFdURk1vdmUoZGV0YWlscyks
IFdURk1vdmUoc2VyaWFsaXplZE1vZGlmaWVyRGF0YSksIFdURk1vdmUoc2VyaWFsaXplZE1ldGhv
ZERhdGEpLCBXVEZNb3ZlKHNlbGVjdGVkU2hpcHBpbmdPcHRpb24pKSk7CiB9CiAKQEAgLTQwOCw3
ICs0MzcsNyBAQCB2b2lkIFBheW1lbnRSZXF1ZXN0OjpzaG93KERvY3VtZW50JiBkb2N1bWVudCwg
U2hvd1Byb21pc2UmJiBwcm9taXNlKQogICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsgLy8g
dW5zZXRQZW5kaW5nQWN0aXZpdHkoKSBpcyBjYWxsZWQgYmVsb3cgaW4gc3RvcCgpCiB9CiAKLXZv
aWQgUGF5bWVudFJlcXVlc3Q6OnN0b3AoKQordm9pZCBQYXltZW50UmVxdWVzdDo6YWJvcnRXaXRo
RXhjZXB0aW9uKEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKIHsKICAgICBpZiAobV9zdGF0ZSAhPSBT
dGF0ZTo6SW50ZXJhY3RpdmUpCiAgICAgICAgIHJldHVybjsKQEAgLTQyMCw3ICs0NDksMTIgQEAg
dm9pZCBQYXltZW50UmVxdWVzdDo6c3RvcCgpCiAKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0
ZTo6SW50ZXJhY3RpdmUpOwogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2xvc2VkOwotICAgIG1fc2hv
d1Byb21pc2UtPnJlamVjdChFeGNlcHRpb24geyBBYm9ydEVycm9yIH0pOworICAgIG1fc2hvd1By
b21pc2UtPnJlamVjdChXVEZNb3ZlKGV4Y2VwdGlvbikpOworfQorCit2b2lkIFBheW1lbnRSZXF1
ZXN0OjpzdG9wKCkKK3sKKyAgICBhYm9ydFdpdGhFeGNlcHRpb24oRXhjZXB0aW9uIHsgQWJvcnRF
cnJvciB9KTsKIH0KIAogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3BheW1lbnQtcmVxdWVzdC8j
YWJvcnQoKS1tZXRob2QKQEAgLTQ5MiwxNCArNTI2LDEwNiBAQCB2b2lkIFBheW1lbnRSZXF1ZXN0
OjpzaGlwcGluZ0FkZHJlc3NDaGFuZ2VkKFJlZjxQYXltZW50QWRkcmVzcz4mJiBzaGlwcGluZ0Fk
ZHJlcwogewogICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpJbnRlcmFjdGl2ZSk7CiAgICAg
bV9zaGlwcGluZ0FkZHJlc3MgPSBXVEZNb3ZlKHNoaXBwaW5nQWRkcmVzcyk7Ci0gICAgLy8gRklY
TUU6IHJ1biB0aGUgUGF5bWVudFJlcXVlc3QgdXBkYXRlZCBhbGdvcml0aG0uCisgICAgZGlzcGF0
Y2hVcGRhdGVFdmVudChldmVudE5hbWVzKCkuc2hpcHBpbmdhZGRyZXNzY2hhbmdlRXZlbnQpOwog
fQogCiB2b2lkIFBheW1lbnRSZXF1ZXN0OjpzaGlwcGluZ09wdGlvbkNoYW5nZWQoY29uc3QgU3Ry
aW5nJiBzaGlwcGluZ09wdGlvbikKIHsKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6SW50
ZXJhY3RpdmUpOwogICAgIG1fc2hpcHBpbmdPcHRpb24gPSBzaGlwcGluZ09wdGlvbjsKLSAgICAv
LyBGSVhNRTogcnVuIHRoZSBQYXltZW50UmVxdWVzdCB1cGRhdGVkIGFsZ29yaXRobS4KKyAgICBk
aXNwYXRjaFVwZGF0ZUV2ZW50KGV2ZW50TmFtZXMoKS5zaGlwcGluZ29wdGlvbmNoYW5nZUV2ZW50
KTsKK30KKwordm9pZCBQYXltZW50UmVxdWVzdDo6ZGlzcGF0Y2hVcGRhdGVFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKG1faXNVcGRhdGluZykKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkludGVyYWN0aXZlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIGV2ZW50ID0gUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDo6Y3Jl
YXRlKHR5cGUsICp0aGlzKTsKKyAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKK30KKwor
RXhjZXB0aW9uT3I8dm9pZD4gUGF5bWVudFJlcXVlc3Q6OnVwZGF0ZVdpdGgoUGF5bWVudFJlcXVl
c3RVcGRhdGVFdmVudCYgZXZlbnQsIFJlZjxET01Qcm9taXNlPiYmIHByb21pc2UpCit7CisgICAg
aWYgKCFldmVudC5pc1RydXN0ZWQoKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yIH07CisKKyAgICBpZiAoZXZlbnQud2FpdEZvclVwZGF0ZSgpKQorICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKKworICAgIGlmIChtX3N0
YXRlICE9IFN0YXRlOjpJbnRlcmFjdGl2ZSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRTdGF0ZUVycm9yIH07CisKKyAgICBpZiAobV9pc1VwZGF0aW5nKQorICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKKworICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbigpOworICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworICAgIGV2
ZW50LnNldFdhaXRGb3JVcGRhdGUodHJ1ZSk7CisgICAgbV9pc1VwZGF0aW5nID0gdHJ1ZTsKKwor
ICAgIG1fZGV0YWlsc1Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpOworICAgIG1fZGV0YWlsc1By
b21pc2UtPndoZW5TZXR0bGVkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cih0aGlz
KSwgdHlwZSA9IGV2ZW50LnR5cGUoKV0oKSB7CisgICAgICAgIHNldHRsZURldGFpbHNQcm9taXNl
KHR5cGUpOworICAgIH0pOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBQYXltZW50UmVx
dWVzdDo6c2V0dGxlRGV0YWlsc1Byb21pc2UoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQorewor
ICAgIGF1dG8gc2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBtX2lzVXBk
YXRpbmcgPSBmYWxzZTsKKyAgICB9KTsKKworICAgIGlmIChtX2RldGFpbHNQcm9taXNlLT5zdGF0
dXMoKSA9PSBET01Qcm9taXNlOjpTdGF0dXM6OlJlamVjdGVkKSB7CisgICAgICAgIHN0b3AoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8mIGNvbnRleHQgPSAqbV9kZXRhaWxz
UHJvbWlzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoY29udGV4dC52bSgpKTsKKyAgICBhdXRvIHBheW1lbnREZXRh
aWxzVXBkYXRlID0gY29udmVydERpY3Rpb25hcnk8UGF5bWVudERldGFpbHNVcGRhdGU+KCpjb250
ZXh0LmV4ZWNTdGF0ZSgpLCBtX2RldGFpbHNQcm9taXNlLT5yZXN1bHQoKSk7CisgICAgaWYgKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgYWJvcnRXaXRoRXhjZXB0aW9uKEV4Y2Vw
dGlvbiB7IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvIGV4Y2VwdGlvbiA9IGNoZWNrQW5kQ2Fub25pY2FsaXplVG90YWwocGF5bWVu
dERldGFpbHNVcGRhdGUudG90YWwuYW1vdW50KTsKKyAgICBpZiAoZXhjZXB0aW9uLmhhc0V4Y2Vw
dGlvbigpKSB7CisgICAgICAgIGFib3J0V2l0aEV4Y2VwdGlvbihleGNlcHRpb24ucmVsZWFzZUV4
Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc2hpcHBpbmdP
cHRpb25BbmRNb2RpZmllckRhdGEgPSBjaGVja0FuZENhbm9uaWNhbGl6ZURldGFpbHMoKmNvbnRl
eHQuZXhlY1N0YXRlKCksIHBheW1lbnREZXRhaWxzVXBkYXRlLCBtX29wdGlvbnMucmVxdWVzdFNo
aXBwaW5nLCBWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVudGlmaWVyOjpZZXMpOworICAgIGlmIChz
aGlwcGluZ09wdGlvbkFuZE1vZGlmaWVyRGF0YS5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBh
Ym9ydFdpdGhFeGNlcHRpb24oc2hpcHBpbmdPcHRpb25BbmRNb2RpZmllckRhdGEucmVsZWFzZUV4
Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cmluZyBzZWxlY3Rl
ZFNoaXBwaW5nT3B0aW9uOworICAgIFZlY3RvcjxTdHJpbmc+IHNlcmlhbGl6ZWRNb2RpZmllckRh
dGE7CisgICAgc3RkOjp0aWUoc2VsZWN0ZWRTaGlwcGluZ09wdGlvbiwgc2VyaWFsaXplZE1vZGlm
aWVyRGF0YSkgPSBzaGlwcGluZ09wdGlvbkFuZE1vZGlmaWVyRGF0YS5yZWxlYXNlUmV0dXJuVmFs
dWUoKTsKKworICAgIG1fZGV0YWlscy50b3RhbCA9IFdURk1vdmUocGF5bWVudERldGFpbHNVcGRh
dGUudG90YWwpOworICAgIG1fZGV0YWlscy5kaXNwbGF5SXRlbXMgPSBXVEZNb3ZlKHBheW1lbnRE
ZXRhaWxzVXBkYXRlLmRpc3BsYXlJdGVtcyk7CisgICAgaWYgKG1fb3B0aW9ucy5yZXF1ZXN0U2hp
cHBpbmcpIHsKKyAgICAgICAgbV9kZXRhaWxzLnNoaXBwaW5nT3B0aW9ucyA9IFdURk1vdmUocGF5
bWVudERldGFpbHNVcGRhdGUuc2hpcHBpbmdPcHRpb25zKTsKKyAgICAgICAgbV9zaGlwcGluZ09w
dGlvbiA9IFdURk1vdmUoc2VsZWN0ZWRTaGlwcGluZ09wdGlvbik7CisgICAgfQorCisgICAgbV9k
ZXRhaWxzLm1vZGlmaWVycyA9IFdURk1vdmUocGF5bWVudERldGFpbHNVcGRhdGUubW9kaWZpZXJz
KTsKKyAgICBtX3NlcmlhbGl6ZWRNb2RpZmllckRhdGEgPSBXVEZNb3ZlKHNlcmlhbGl6ZWRNb2Rp
ZmllckRhdGEpOworCisgICAgaWYgKHR5cGUgPT0gZXZlbnROYW1lcygpLnNoaXBwaW5nYWRkcmVz
c2NoYW5nZUV2ZW50KQorICAgICAgICBtX2FjdGl2ZVBheW1lbnRIYW5kbGVyLT5zaGlwcGluZ0Fk
ZHJlc3NVcGRhdGVkKHBheW1lbnREZXRhaWxzVXBkYXRlLmVycm9yKTsKKyAgICBlbHNlIGlmICh0
eXBlID09IGV2ZW50TmFtZXMoKS5zaGlwcGluZ29wdGlvbmNoYW5nZUV2ZW50KQorICAgICAgICBt
X2FjdGl2ZVBheW1lbnRIYW5kbGVyLT5zaGlwcGluZ09wdGlvblVwZGF0ZWQoKTsKKyAgICBlbHNl
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIFBheW1lbnRSZXF1ZXN0
OjphY2NlcHQoY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiYmIGRldGFpbHMsIFJlZjxQYXltZW50QWRkcmVzcz4mJiBzaGlwcGluZ0FkZHJlc3MsIGNv
bnN0IFN0cmluZyYgcGF5ZXJOYW1lLCBjb25zdCBTdHJpbmcmIHBheWVyRW1haWwsIGNvbnN0IFN0
cmluZyYgcGF5ZXJQaG9uZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaAppbmRleCBhOGRhNGQxOTYzM2JmYjY0NjlmMGQx
OGZkYjI2M2M5ZDUyMmE4MWUzLi4zMDgwYWEzMzUwNDFhZDc2ODc1NTVlN2UwZmE0YmZiNzdmY2E4
MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1Bh
eW1lbnRSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVz
dC9QYXltZW50UmVxdWVzdC5oCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgUGF5bWVudEFkZHJlc3M7CiBjbGFzcyBQYXltZW50SGFu
ZGxlcjsKK2NsYXNzIFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ7CiBjbGFzcyBQYXltZW50UmVz
cG9uc2U7CiBlbnVtIGNsYXNzIFBheW1lbnRDb21wbGV0ZTsKIGVudW0gY2xhc3MgUGF5bWVudFNo
aXBwaW5nVHlwZTsKQEAgLTY5LDYgKzcwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzaGlwcGlu
Z0FkZHJlc3NDaGFuZ2VkKFJlZjxQYXltZW50QWRkcmVzcz4mJik7CiAgICAgdm9pZCBzaGlwcGlu
Z09wdGlvbkNoYW5nZWQoY29uc3QgU3RyaW5nJiBzaGlwcGluZ09wdGlvbik7CisgICAgRXhjZXB0
aW9uT3I8dm9pZD4gdXBkYXRlV2l0aChQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50JiwgUmVmPERP
TVByb21pc2U+JiYpOwogICAgIHZvaWQgYWNjZXB0KGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwg
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mJiBkZXRhaWxzLCBSZWY8UGF5bWVudEFkZHJlc3M+
JiYgc2hpcHBpbmdBZGRyZXNzLCBjb25zdCBTdHJpbmcmIHBheWVyTmFtZSwgY29uc3QgU3RyaW5n
JiBwYXllckVtYWlsLCBjb25zdCBTdHJpbmcmIHBheWVyUGhvbmUpOwogICAgIHZvaWQgY29tcGxl
dGUoc3RkOjpvcHRpb25hbDxQYXltZW50Q29tcGxldGU+JiYpOwogCkBAIC05MCw2ICs5MiwxMCBA
QCBwcml2YXRlOgogCiAgICAgUGF5bWVudFJlcXVlc3QoRG9jdW1lbnQmLCBQYXltZW50T3B0aW9u
cyYmLCBQYXltZW50RGV0YWlsc0luaXQmJiwgVmVjdG9yPFN0cmluZz4mJiBzZXJpYWxpemVkTW9k
aWZpZXJEYXRhLCBWZWN0b3I8TWV0aG9kPiYmIHNlcmlhbGl6ZWRNZXRob2REYXRhLCBTdHJpbmcm
JiBzZWxlY3RlZFNoaXBwaW5nT3B0aW9uKTsKIAorICAgIHZvaWQgZGlzcGF0Y2hVcGRhdGVFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpOworICAgIHZvaWQgc2V0dGxlRGV0YWlsc1Byb21p
c2UoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKKyAgICB2b2lkIGFib3J0V2l0aEV4Y2VwdGlv
bihFeGNlcHRpb24mJik7CisKICAgICAvLyBBY3RpdmVET01PYmplY3QKICAgICBjb25zdCBjaGFy
KiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlBheW1lbnRSZXF1
ZXN0IjsgfQogICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0
IGZpbmFsOwpAQCAtMTEwLDYgKzExNiw4IEBAIHByaXZhdGU6CiAgICAgU3RhdGUgbV9zdGF0ZSB7
IFN0YXRlOjpDcmVhdGVkIH07CiAgICAgc3RkOjpvcHRpb25hbDxTaG93UHJvbWlzZT4gbV9zaG93
UHJvbWlzZTsKICAgICBSZWZQdHI8UGF5bWVudEhhbmRsZXI+IG1fYWN0aXZlUGF5bWVudEhhbmRs
ZXI7CisgICAgUmVmUHRyPERPTVByb21pc2U+IG1fZGV0YWlsc1Byb21pc2U7CisgICAgYm9vbCBt
X2lzVXBkYXRpbmcgeyBmYWxzZSB9OwogfTsKIAogc3RkOjpvcHRpb25hbDxQYXltZW50UmVxdWVz
dDo6TWV0aG9kSWRlbnRpZmllcj4gY29udmVydEFuZFZhbGlkYXRlUGF5bWVudE1ldGhvZElkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBk
YXRlRXZlbnQuY3BwCmluZGV4IGMxNzdhNDg1YmFhZDE1ODBiNjAyZmM0MGE2MzBiZmJlNTM5YWI5
ZjUuLmNlZWRiZDFiZjJiOWYxMGJhZDZlMWVhNWZmZDAzYzNkMzRhYzc1MGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3RVcGRh
dGVFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9Q
YXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmNwcApAQCAtMjgsMTIgKzI4LDMxIEBACiAKICNpZiBF
TkFCTEUoUEFZTUVOVF9SRVFVRVNUKQogCisjaW5jbHVkZSAiUGF5bWVudFJlcXVlc3QuaCIKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50OjpQYXltZW50
UmVxdWVzdFVwZGF0ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgUGF5bWVudFJlcXVl
c3RVcGRhdGVFdmVudEluaXQmJiBldmVudEluaXQpCisgICAgOiBFdmVudCB7IHR5cGUsIFdURk1v
dmUoZXZlbnRJbml0KSwgSXNUcnVzdGVkOjpObyB9Cit7Cit9CisKK1BheW1lbnRSZXF1ZXN0VXBk
YXRlRXZlbnQ6OlBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCBQYXltZW50UmVxdWVzdCYgcGF5bWVudFJlcXVlc3QpCisgICAgOiBFdmVudCB7IHR5cGUs
IGZhbHNlLCBmYWxzZSB9CisgICAgLCBtX3BheW1lbnRSZXF1ZXN0IHsgJnBheW1lbnRSZXF1ZXN0
IH0KK3sKK30KKwogUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDo6flBheW1lbnRSZXF1ZXN0VXBk
YXRlRXZlbnQoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDo6
dXBkYXRlV2l0aChSZWY8RE9NUHJvbWlzZT4mJikKK0V4Y2VwdGlvbk9yPHZvaWQ+IFBheW1lbnRS
ZXF1ZXN0VXBkYXRlRXZlbnQ6OnVwZGF0ZVdpdGgoUmVmPERPTVByb21pc2U+JiYgZGV0YWlsc1By
b21pc2UpCit7CisgICAgcmV0dXJuIG1fcGF5bWVudFJlcXVlc3QtPnVwZGF0ZVdpdGgoKnRoaXMs
IFdURk1vdmUoZGV0YWlsc1Byb21pc2UpKTsKK30KKworRXZlbnRJbnRlcmZhY2UgUGF5bWVudFJl
cXVlc3RVcGRhdGVFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogeworICAgIHJldHVybiBQ
YXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50SW50ZXJmYWNlVHlwZTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVx
dWVzdC9QYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQuaAppbmRleCA2MTZlZjhi
MTc1MzAzMTQ5NjdlNjMwYmE5NjlkN2NhNjE4M2YwNWEyLi40ZmFkNjQ0OGI0MWZkZTNjOWE1NDJl
NjY2ZWFiOTA3NGRlZGU3ZDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bh
eW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQuaApA
QCAtMjgsMTUgKzI4LDM1IEBACiAjaWYgRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKIAogI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudEluaXQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBET01Qcm9taXNlOworY2xhc3MgUGF5bWVu
dFJlcXVlc3Q7CitzdHJ1Y3QgUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudEluaXQ7CiAKIGNsYXNz
IFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQgZmluYWwgOiBwdWJsaWMgRXZlbnQgewogcHVibGlj
OgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPiBzdGF0aWMgUmVmPFBheW1lbnRSZXF1
ZXN0VXBkYXRlRXZlbnQ+IGNyZWF0ZShBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQoc3RkOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSk7CisgICAgfQogICAgIH5QYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50
KCk7Ci0gICAgdm9pZCB1cGRhdGVXaXRoKFJlZjxET01Qcm9taXNlPiYmKTsKKyAgICBFeGNlcHRp
b25Pcjx2b2lkPiB1cGRhdGVXaXRoKFJlZjxET01Qcm9taXNlPiYmKTsKKworICAgIGJvb2wgd2Fp
dEZvclVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FpdEZvclVwZGF0ZTsgfQorICAgIHZvaWQg
c2V0V2FpdEZvclVwZGF0ZShib29sIHdhaXRGb3JVcGRhdGUpIHsgbV93YWl0Rm9yVXBkYXRlID0g
d2FpdEZvclVwZGF0ZTsgfQorCitwcml2YXRlOgorICAgIFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50SW5p
dCYmKTsKKyAgICBQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSwgUGF5bWVudFJlcXVlc3QmKTsKKworICAgIC8vIEV2ZW50CisgICAgRXZlbnRJbnRlcmZh
Y2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbDsKKworICAgIFJlZlB0cjxQYXltZW50UmVx
dWVzdD4gbV9wYXltZW50UmVxdWVzdDsKKyAgICBib29sIG1fd2FpdEZvclVwZGF0ZSB7IGZhbHNl
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQuaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdFVw
ZGF0ZUV2ZW50LmlkbAppbmRleCA3ZTUyMjY0YmE5OGFjNmQxMGJiMjEyNTg1YTM3OGFlMTI4YzRi
ZWQwLi4xNWY4ZGI5ZGE5ZTI5MzU3MTc5MjA1MGY4OGZiOWM4MGFiOGQ2MzkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBk
YXRlRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3Qv
UGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudC5pZGwKQEAgLTI3LDcgKzI3LDggQEAKICAgICBDb25k
aXRpb25hbD1QQVlNRU5UX1JFUVVFU1QsCiAgICAgQ29uc3RydWN0b3IoRE9NU3RyaW5nIHR5cGUs
IG9wdGlvbmFsIFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnRJbml0IGV2ZW50SW5pdERpY3QpLAog
ICAgIEVuYWJsZWRCeVNldHRpbmc9UGF5bWVudFJlcXVlc3QsCisgICAgRXhwb3NlZD1XaW5kb3cs
CiAgICAgU2VjdXJlQ29udGV4dAogXSBpbnRlcmZhY2UgUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVu
dCA6IEV2ZW50IHsKLSAgICB2b2lkIHVwZGF0ZVdpdGgoUHJvbWlzZTxQYXltZW50RGV0YWlsc1Vw
ZGF0ZT4gZGV0YWlsc1Byb21pc2UpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCB1cGRh
dGVXaXRoKFByb21pc2U8UGF5bWVudERldGFpbHNVcGRhdGU+IGRldGFpbHNQcm9taXNlKTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGF5bWVudENvb3JkaW5hdG9yLmNw
cAppbmRleCA1ZjUxOGYwNmE4NTY5MjNhODRkMDczZTBmMWFmMzllMmQ2NDgwMTlhLi5mOTdhMjg1
YzU0NTNjYzUxMDk4ZTNhYTEyMmQ2NWI4OTI1MTA5ZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvTW9ja1BheW1lbnRDb29yZGluYXRvci5jcHAKQEAgLTYyLDE0ICs2MiwxNCBA
QCBib29sIE1vY2tQYXltZW50Q29vcmRpbmF0b3I6OmNhbk1ha2VQYXltZW50cygpCiAKIHZvaWQg
TW9ja1BheW1lbnRDb29yZGluYXRvcjo6Y2FuTWFrZVBheW1lbnRzV2l0aEFjdGl2ZUNhcmQoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgRnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgeworICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKICAgICB9KTsKIH0KIAog
dm9pZCBNb2NrUGF5bWVudENvb3JkaW5hdG9yOjpvcGVuUGF5bWVudFNldHVwKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIHsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7CiAgICAgfSk7CiB9CkBAIC0xMDEsOSAr
MTAxLDIzIEBAIHZvaWQgTW9ja1BheW1lbnRDb29yZGluYXRvcjo6Y29tcGxldGVNZXJjaGFudFZh
bGlkYXRpb24oY29uc3QgUGF5bWVudE1lcmNoYW50U2VzCiAgICAgZGlzcGF0Y2hJZlNob3dpbmco
W21haW5GcmFtZSA9IG1ha2VSZWYobV9tYWluRnJhbWUpLCBzaGlwcGluZ0FkZHJlc3MgPSBtX3No
aXBwaW5nQWRkcmVzc10oKSB7CiAgICAgICAgIEFwcGxlUGF5UGF5bWVudENvbnRhY3QgY29udGFj
dCA9IHNoaXBwaW5nQWRkcmVzczsKICAgICAgICAgbWFpbkZyYW1lLT5wYXltZW50Q29vcmRpbmF0
b3IoKS5kaWRTZWxlY3RTaGlwcGluZ0NvbnRhY3QoTW9ja1BheW1lbnRDb250YWN0IHsgV1RGTW92
ZShjb250YWN0KSB9KTsKKyAgICB9KTsKK30KIAordm9pZCBNb2NrUGF5bWVudENvb3JkaW5hdG9y
OjpjaGFuZ2VTaGlwcGluZ09wdGlvbihTdHJpbmcmJiBzaGlwcGluZ09wdGlvbikKK3sKKyAgICBk
aXNwYXRjaElmU2hvd2luZyhbbWFpbkZyYW1lID0gbWFrZVJlZihtX21haW5GcmFtZSksIHNoaXBw
aW5nT3B0aW9uID0gV1RGTW92ZShzaGlwcGluZ09wdGlvbildKCkgbXV0YWJsZSB7CisgICAgICAg
IEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZCBzaGlwcGluZ01l
dGhvZDsKKyAgICAgICAgc2hpcHBpbmdNZXRob2QuaWRlbnRpZmllciA9IFdURk1vdmUoc2hpcHBp
bmdPcHRpb24pOworICAgICAgICBtYWluRnJhbWUtPnBheW1lbnRDb29yZGluYXRvcigpLmRpZFNl
bGVjdFNoaXBwaW5nTWV0aG9kKHNoaXBwaW5nTWV0aG9kKTsKKyAgICB9KTsKK30KKwordm9pZCBN
b2NrUGF5bWVudENvb3JkaW5hdG9yOjphY2NlcHRQYXltZW50KCkKK3sKKyAgICBkaXNwYXRjaElm
U2hvd2luZyhbbWFpbkZyYW1lID0gbWFrZVJlZihtX21haW5GcmFtZSksIHNoaXBwaW5nQWRkcmVz
cyA9IG1fc2hpcHBpbmdBZGRyZXNzXSgpIG11dGFibGUgewogICAgICAgICBBcHBsZVBheVBheW1l
bnQgcGF5bWVudDsKLSAgICAgICAgcGF5bWVudC5zaGlwcGluZ0NvbnRhY3QgPSBzaGlwcGluZ0Fk
ZHJlc3M7CisgICAgICAgIHBheW1lbnQuc2hpcHBpbmdDb250YWN0ID0gV1RGTW92ZShzaGlwcGlu
Z0FkZHJlc3MpOwogICAgICAgICBtYWluRnJhbWUtPnBheW1lbnRDb29yZGluYXRvcigpLmRpZEF1
dGhvcml6ZVBheW1lbnQoTW9ja1BheW1lbnQgeyBXVEZNb3ZlKHBheW1lbnQpIH0pOwogICAgIH0p
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGF5bWVudENvb3Jk
aW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0b3Iu
aAppbmRleCA2OWU4Y2Q5OTE5MTE3NDMxMmExNjA4MjU3YmM0ZWFkOTlhMDQyNGNmLi42ZTdiNWY3
ZmM4Mzg2Y2ViYzUwODgwZTljYWQ4YTBhOThlMjIwZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0b3IuaApAQCAtMzksNiArMzksOCBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgTW9ja1BheW1lbnRDb29yZGluYXRvcihNYWluRnJhbWUmKTsKIAog
ICAgIHZvaWQgc2V0U2hpcHBpbmdBZGRyZXNzKE1vY2tQYXltZW50QWRkcmVzcyYmIHNoaXBwaW5n
QWRkcmVzcykgeyBtX3NoaXBwaW5nQWRkcmVzcyA9IFdURk1vdmUoc2hpcHBpbmdBZGRyZXNzKTsg
fQorICAgIHZvaWQgY2hhbmdlU2hpcHBpbmdPcHRpb24oU3RyaW5nJiYgc2hpcHBpbmdPcHRpb24p
OworICAgIHZvaWQgYWNjZXB0UGF5bWVudCgpOwogCiAgICAgdm9pZCByZWYoKSBjb25zdCB7IH0K
ICAgICB2b2lkIGRlcmVmKCkgY29uc3QgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0b3IuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9Nb2NrUGF5bWVudENvb3JkaW5hdG9yLmlkbAppbmRleCBlNWJhMzA5YWQ2ZTg1ODZmMGJiMTg0
MmMxYmZmNjU3YTkxODU2Yjk0Li4xYjRkYzAxMjI4NWYxYjg3ZDFmMjdlOGUxZDYwMGZhY2M5MDcw
MDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYXltZW50Q29vcmRp
bmF0b3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1BheW1lbnRDb29yZGlu
YXRvci5pZGwKQEAgLTI4LDQgKzI4LDYgQEAKICAgICBOb0ludGVyZmFjZU9iamVjdCwKIF0gaW50
ZXJmYWNlIE1vY2tQYXltZW50Q29vcmRpbmF0b3IgewogICAgIHZvaWQgc2V0U2hpcHBpbmdBZGRy
ZXNzKE1vY2tQYXltZW50QWRkcmVzcyBzaGlwcGluZ0FkZHJlc3MpOworICAgIHZvaWQgY2hhbmdl
U2hpcHBpbmdPcHRpb24oRE9NU3RyaW5nIHNoaXBwaW5nT3B0aW9uKTsKKyAgICB2b2lkIGFjY2Vw
dFBheW1lbnQoKTsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjJiZTE2NWVjODViMWM3MGU5MDg2ZTgxZjYyNmVjNjJl
Yzc1ZDU0NC4uZmY1MGQyZTg5ZmM1MzYxM2QzZDM0MWMzMTg3YWVhNzVjYTUxYjg5ZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDE3LTEwLTIzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNv
bT4KKworICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBJbXBsZW1lbnQgdGhlICJQYXltZW50UmVx
dWVzdCB1cGRhdGVkIiBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3ODY4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC9wYXltZW50LXJlcXVl
c3QtY2hhbmdlLXNoaXBwaW5nLWFkZHJlc3MuaHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC1jaGFuZ2Ut
c2hpcHBpbmctYWRkcmVzcy5odHRwcy5odG1sOiBDb3BpZWQgZnJvbSBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3BheW1lbnQtcmVxdWVzdC9zaGlwcGluZy1hZGRyZXNzLWNoYW5nZWQt
bWFudWFsLmh0dHBzLmh0bWwuCisgICAgICAgICogaHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC9w
YXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBwaW5nLW9wdGlvbi5odHRwcy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1
ZXN0LWNoYW5nZS1zaGlwcGluZy1vcHRpb24uaHR0cHMuaHRtbDogQ29waWVkIGZyb20gaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9wYXltZW50LXJlcXVlc3QvY2hhbmdlLXNoaXBwaW5n
LW9wdGlvbi1tYW51YWwuaHR0cHMuaHRtbC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BheW1lbnRy
ZXF1ZXN0L3Jlc291cmNlcy9oZWxwZXJzLmpzOgorICAgICAgICAoYXN5bmMuZ2V0UGF5bWVudFJl
cXVlc3RSZXNwb25zZSk6CisgICAgICAgICogaHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC91cGRh
dGVXaXRoLW1ldGhvZC1wbWktaGFuZGxpbmcuaHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3VwZGF0ZVdpdGgtbWV0aG9kLXBtaS1o
YW5kbGluZy5odHRwcy5odG1sOiBDb3BpZWQgZnJvbSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3BheW1lbnQtcmVxdWVzdC91cGRhdGVXaXRoLW1ldGhvZC1wbWktaGFuZGxpbmctbWFu
dWFsLmh0dHBzLmh0bWwuCisKIDIwMTctMTAtMjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBQbGVhc2Ugc3VwcG9ydCBIQVIg
RXhwb3J0IGZvciBuZXR3b3JrIHRyYWZmaWMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmlu
ZGV4IGQ1ZmZlNjliNzAwYzJjMTE2OWZlNDY2ZWIxNWMyZGExN2UxMGJiNDYuLmJiNjU2ZGM4NmM2
MTMyMTViZjZhYmQ0OGQwZDUwZTZmMjE2MWQ5MDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE3LTEwLTIzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFw
cGxlLmNvbT4KKworICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBJbXBsZW1lbnQgdGhlICJQYXlt
ZW50UmVxdWVzdCB1cGRhdGVkIiBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODY4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3BheW1lbnQtcmVxdWVz
dC9wYXltZW50LXJlcXVlc3QtdXBkYXRlLWV2ZW50LXVwZGF0ZXdpdGgtbWV0aG9kLmh0dHBzLWV4
cGVjdGVkLnR4dDoKKwogMjAxNy0xMC0yMiAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+
CiAKICAgICAgICAgSW1wbGVtZW50IGRyYXdJbWFnZShJbWFnZUJpdG1hcCkgb24gMmQgY2FudmFz
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3BheW1l
bnQtcmVxdWVzdC1jaGFuZ2Utc2hpcHBpbmctYWRkcmVzcy5odHRwcy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC1jaGFu
Z2Utc2hpcHBpbmctYWRkcmVzcy5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJlM2Yx
ODNkOTc1MzdiNzRkZWZmMjljMDk1YTc1NzFmZWM0ZmJmYgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1ZXN0LWNoYW5n
ZS1zaGlwcGluZy1hZGRyZXNzLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKwor
UEFTUyBUZXN0IGZvciBQYXltZW50UmVxdWVzdCBzaGlwcGluZ0FkZHJlc3MgYXR0cmlidXRlIAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3BheW1l
bnQtcmVxdWVzdC1jaGFuZ2Utc2hpcHBpbmctYWRkcmVzcy5odHRwcy5odG1sIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC9wYXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBw
aW5nLWFkZHJlc3MuaHR0cHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmJjZTQ5YzMwZGQwOWRlN2YzMjgw
NjQ0YzYzZjBjNmY3OTY5ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9wYXltZW50cmVxdWVzdC9wYXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBwaW5nLWFkZHJl
c3MuaHR0cHMuaHRtbApAQCAtMCwwICsxLDkwIEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0gIENv
cHlyaWdodCDCqSAyMDE3IENocm9taXVtIGF1dGhvcnMgYW5kIFdvcmxkIFdpZGUgV2ViIENvbnNv
cnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBFUkNJTSwgS2Vp
byBVbml2ZXJzaXR5LCBCZWloYW5nKS4gIC0tPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHRp
dGxlPlRlc3QgZm9yIFBheW1lbnRSZXF1ZXN0IHNoaXBwaW5nQWRkcmVzcyBhdHRyaWJ1dGU8L3Rp
dGxlPgorPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwczovL3czYy5naXRodWIuaW8vcGF5bWVu
dC1yZXF1ZXN0LyNzaGlwcGluZ2FkZHJlc3MtYXR0cmlidXRlIj4KKzxsaW5rIHJlbD0iaGVscCIg
aHJlZj0iaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3BheW1lbnQtcmVxdWVzdC8jb25zaGlwcGluZ2Fk
ZHJlc3NjaGFuZ2UtYXR0cmlidXRlIj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IGV4cGxpY2l0X2RvbmU6IHRydWUs
IGV4cGxpY2l0X3RpbWVvdXQ6IHRydWUgfSk7Citjb25zdCBhcHBsZVBheSA9IE9iamVjdC5mcmVl
emUoeworICAgIHN1cHBvcnRlZE1ldGhvZHM6ICJodHRwczovL2FwcGxlLmNvbS9hcHBsZS1wYXki
LAorICAgIGRhdGE6IHsKKyAgICAgICAgdmVyc2lvbjogMiwKKyAgICAgICAgbWVyY2hhbnRJZGVu
dGlmaWVyOiAnJywKKyAgICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFsnc3VwcG9ydHMzRFMn
XSwKKyAgICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFsndmlzYScsICdtYXN0ZXJDYXJkJ10sCisg
ICAgICAgIGNvdW50cnlDb2RlOiAnVVMnLAorICAgIH0sCit9KTsKK2NvbnN0IHZhbGlkTWV0aG9k
cyA9IE9iamVjdC5mcmVlemUoW2FwcGxlUGF5XSk7Citjb25zdCB2YWxpZEFtb3VudCA9IE9iamVj
dC5mcmVlemUoeyBjdXJyZW5jeTogIlVTRCIsIHZhbHVlOiAiNS4wMCIgfSk7Citjb25zdCB2YWxp
ZFRvdGFsID0gT2JqZWN0LmZyZWV6ZSh7CisgIGxhYmVsOiAibGFiZWwiLAorICBhbW91bnQ6IHZh
bGlkQW1vdW50LAorfSk7Citjb25zdCB2YWxpZFNoaXBwaW5nT3B0aW9uID0gT2JqZWN0LmZyZWV6
ZSh7CisgIGlkOiAidmFsaWQiLAorICBsYWJlbDogIlNoaXBwaW5nIE9wdGlvbiIsCisgIGFtb3Vu
dDogdmFsaWRBbW91bnQsCisgIHNlbGVjdGVkOiBmYWxzZSwKK30pOworY29uc3QgdmFsaWREZXRh
aWxzID0gT2JqZWN0LmZyZWV6ZSh7CisgIHRvdGFsOiB2YWxpZFRvdGFsLAorICBzaGlwcGluZ09w
dGlvbnM6IFt2YWxpZFNoaXBwaW5nT3B0aW9uXSwKK30pOworY29uc3QgcmVxdWVzdFNoaXBwaW5n
ID0gT2JqZWN0LmZyZWV6ZSh7CisgIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSwKK30pOworCitmdW5j
dGlvbiB0ZXN0U2hpcHBpbmdBZGRyZXNzQ2hhbmdlKCkgeworICBjb25zdCBzaGlwcGluZ0FkZHJl
c3MgPSB7CisgICAgICBjb3VudHJ5Q29kZTogJ1VTJywKKyAgICAgIGFkZHJlc3NMaW5lczogWycn
XSwKKyAgICAgIGFkbWluaXN0cmF0aXZlQXJlYTogJycsCisgICAgICBsb2NhbGl0eTogJycsCisg
ICAgICBzdWJMb2NhbGl0eTogJycsCisgICAgICBwb3N0YWxDb2RlOiAnJywKKyAgICAgIGxvY2Fs
aXplZE5hbWU6ICcnLAorICAgICAgcGhvbmVOdW1iZXI6ICcnLAorICAgICAgZW1haWxBZGRyZXNz
OiAnJywKKyAgfTsKKyAgaW50ZXJuYWxzLm1vY2tQYXltZW50Q29vcmRpbmF0b3Iuc2V0U2hpcHBp
bmdBZGRyZXNzKHNoaXBwaW5nQWRkcmVzcyk7CisgIHByb21pc2VfdGVzdChhc3luYyB0ID0+IHsK
KyAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFBheW1lbnRSZXF1ZXN0KAorICAgICAgdmFsaWRNZXRo
b2RzLAorICAgICAgdmFsaWREZXRhaWxzLAorICAgICAgcmVxdWVzdFNoaXBwaW5nCisgICAgKTsK
KyAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgcmVxdWVzdC5zaGlwcGluZ0FkZHJlc3MsCisgICAg
ICBudWxsLAorICAgICAgInJlcXVlc3Quc2hpcHBpbmdBZGRyZXNzIG11c3QgaW5pdGlhbGx5IGJl
IG51bGwiCisgICAgKTsKKyAgICByZXF1ZXN0Lm9uYXBwbGVwYXl2YWxpZGF0ZW1lcmNoYW50ID0g
ZXZlbnQgPT4geworICAgICAgICBldmVudC5jb21wbGV0ZSh7IH0pOworICAgIH07CisgICAgY29u
c3QgbGlzdGVuZXJQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICByZXF1
ZXN0LmFkZEV2ZW50TGlzdGVuZXIoInNoaXBwaW5nYWRkcmVzc2NoYW5nZSIsICgpID0+IHsKKyAg
ICAgICAgcmVzb2x2ZShyZXF1ZXN0LnNoaXBwaW5nQWRkcmVzcyk7CisgICAgICB9KTsKKyAgICB9
KTsKKyAgICBjb25zdCBoYW5kbGVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gewor
ICAgICAgcmVxdWVzdC5vbnNoaXBwaW5nYWRkcmVzc2NoYW5nZSA9ICgpID0+IHsKKyAgICAgICAg
cmVzb2x2ZShyZXF1ZXN0LnNoaXBwaW5nQWRkcmVzcyk7CisgICAgICB9OworICAgIH0pOworICAg
IHJlcXVlc3Quc2hvdygpLmNhdGNoKGVyciA9PiBlcnIpOworICAgIGNvbnN0IHJlc3VsdHMgPSBh
d2FpdCBQcm9taXNlLmFsbChbbGlzdGVuZXJQcm9taXNlLCBoYW5kbGVyUHJvbWlzZV0pOworICAg
IGFzc2VydF90cnVlKAorICAgICAgcmVzdWx0cy5ldmVyeShvYmogPT4gb2JqIGluc3RhbmNlb2Yg
UGF5bWVudEFkZHJlc3MpLAorICAgICAgIkV4cGVjdGVkIGluc3RhbmNlcyBvZiBQYXltZW50QWRk
cmVzcyIKKyAgICApOworICAgIGF3YWl0IHJlcXVlc3QuYWJvcnQoKTsKKyAgfSk7CisgIGRvbmUo
KTsKK30KK3Rlc3RTaGlwcGluZ0FkZHJlc3NDaGFuZ2UoKTsKKzwvc2NyaXB0PgorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3BheW1lbnQtcmVxdWVz
dC1jaGFuZ2Utc2hpcHBpbmctb3B0aW9uLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1ZXN0LWNoYW5nZS1zaGlwcGlu
Zy1vcHRpb24uaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5ODViMzA1MzY2NGMxNDA0
ZWE3MjYxOWE1ZWNiYTE5ODRkZGYwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC1jaGFuZ2Utc2hpcHBpbmct
b3B0aW9uLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMgQEAKKworUEFTUyBUZXN0IGZv
ciBQYXltZW50UmVxdWVzdCBzaGlwcGluZ09wdGlvbiBhdHRyaWJ1dGUgCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1ZXN0LWNo
YW5nZS1zaGlwcGluZy1vcHRpb24uaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
cGF5bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1ZXN0LWNoYW5nZS1zaGlwcGluZy1vcHRpb24uaHR0
cHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mNTc0OTUzYWJhYzEyZjcyMjM3MjU3NGZiNjFlYjcyYzg1OWI2
MDNjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wYXltZW50cmVx
dWVzdC9wYXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBwaW5nLW9wdGlvbi5odHRwcy5odG1sCkBA
IC0wLDAgKzEsOTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLSAgQ29weXJpZ2h0IMKpIDIwMTcg
Q2hyb21pdW0gYXV0aG9ycyBhbmQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1
c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEVSQ0lNLCBLZWlvIFVuaXZlcnNpdHksIEJl
aWhhbmcpLiAgLS0+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAgLS0+Cis8IS0tIEZJWE1FOiBVcHN0cmVhbSB0aGlzIHRlc3QgdG8gd2Vi
LXBsYXRmb3JtLXRlc3RzL3BheW1lbnQtcmVxdWVzdC8uIC0tPgorPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorPHRpdGxlPlRlc3QgZm9yIFBheW1lbnRSZXF1ZXN0IHNoaXBwaW5nT3B0aW9uIGF0dHJp
YnV0ZTwvdGl0bGU+Cis8bGluayByZWw9ImhlbHAiIGhyZWY9Imh0dHBzOi8vdzNjLmdpdGh1Yi5p
by9wYXltZW50LXJlcXVlc3QvI3NoaXBwaW5nb3B0aW9uLWF0dHJpYnV0ZSI+Cis8bGluayByZWw9
ImhlbHAiIGhyZWY9Imh0dHBzOi8vdzNjLmdpdGh1Yi5pby9wYXltZW50LXJlcXVlc3QvI29uc2hp
cHBpbmdvcHRpb25jaGFuZ2UtYXR0cmlidXRlIj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IGV4cGxpY2l0X2RvbmU6
IHRydWUsIGV4cGxpY2l0X3RpbWVvdXQ6IHRydWUgfSk7Citjb25zdCBhcHBsZVBheSA9IE9iamVj
dC5mcmVlemUoeworICAgIHN1cHBvcnRlZE1ldGhvZHM6ICJodHRwczovL2FwcGxlLmNvbS9hcHBs
ZS1wYXkiLAorICAgIGRhdGE6IHsKKyAgICAgICAgdmVyc2lvbjogMiwKKyAgICAgICAgbWVyY2hh
bnRJZGVudGlmaWVyOiAnJywKKyAgICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFsnc3VwcG9y
dHMzRFMnXSwKKyAgICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFsndmlzYScsICdtYXN0ZXJDYXJk
J10sCisgICAgICAgIGNvdW50cnlDb2RlOiAnVVMnLAorICAgIH0sCit9KTsKK2NvbnN0IHZhbGlk
TWV0aG9kcyA9IE9iamVjdC5mcmVlemUoW2FwcGxlUGF5XSk7Citjb25zdCB2YWxpZEFtb3VudCA9
IE9iamVjdC5mcmVlemUoeyBjdXJyZW5jeTogIlVTRCIsIHZhbHVlOiAiNS4wMCIgfSk7Citjb25z
dCB2YWxpZFRvdGFsID0gT2JqZWN0LmZyZWV6ZSh7CisgIGxhYmVsOiAibGFiZWwiLAorICBhbW91
bnQ6IHZhbGlkQW1vdW50LAorfSk7Citjb25zdCB2YWxpZERldGFpbHMgPSBPYmplY3QuZnJlZXpl
KHsgdG90YWw6IHZhbGlkVG90YWwgfSk7CisKK2NvbnN0IHZhbGlkU2hpcHBpbmdPcHRpb24xID0g
T2JqZWN0LmZyZWV6ZSh7CisgIGlkOiAidmFsaWQtMSIsCisgIGxhYmVsOiAiUElDSyBNRSEiLAor
ICBhbW91bnQ6IHZhbGlkQW1vdW50LAorICBzZWxlY3RlZDogZmFsc2UsCit9KTsKKworY29uc3Qg
dmFsaWRTaGlwcGluZ09wdGlvbjIgPSBPYmplY3QuZnJlZXplKHsKKyAgaWQ6ICJpbml0aWFsbHkt
c2VsZWN0ZWQiLAorICBsYWJlbDogIlZhbGlkIHNoaXBwaW5nIG9wdGlvbiAyIiwKKyAgYW1vdW50
OiB2YWxpZEFtb3VudCwKKyAgc2VsZWN0ZWQ6IHRydWUsCit9KTsKKworY29uc3QgcmVxdWVzdFNo
aXBwaW5nID0gT2JqZWN0LmZyZWV6ZSh7CisgIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSwKK30pOwor
CitmdW5jdGlvbiB0ZXN0U2hpcHBpbmdPcHRpb25DaGFuZ2VkKCkgeworICBwcm9taXNlX3Rlc3Qo
YXN5bmMgdCA9PiB7CisgICAgY29uc3QgZGV0YWlsc1dpdGhTaGlwcGluZ09wdGlvbnMgPSBPYmpl
Y3QuYXNzaWduKHt9LCB2YWxpZERldGFpbHMsIHsKKyAgICAgIHNoaXBwaW5nT3B0aW9uczogW3Zh
bGlkU2hpcHBpbmdPcHRpb24xLCB2YWxpZFNoaXBwaW5nT3B0aW9uMl0sCisgICAgfSk7CisgICAg
Y29uc3QgcmVxdWVzdCA9IG5ldyBQYXltZW50UmVxdWVzdCgKKyAgICAgIHZhbGlkTWV0aG9kcywK
KyAgICAgIGRldGFpbHNXaXRoU2hpcHBpbmdPcHRpb25zLAorICAgICAgcmVxdWVzdFNoaXBwaW5n
CisgICAgKTsKKyAgICByZXF1ZXN0Lm9uYXBwbGVwYXl2YWxpZGF0ZW1lcmNoYW50ID0gZXZlbnQg
PT4geworICAgICAgICBldmVudC5jb21wbGV0ZSh7IH0pOworICAgICAgICBpbnRlcm5hbHMubW9j
a1BheW1lbnRDb29yZGluYXRvci5jaGFuZ2VTaGlwcGluZ09wdGlvbigidmFsaWQtMSIpOworICAg
IH07CisgICAgYXNzZXJ0X2VxdWFscygKKyAgICAgIHJlcXVlc3Quc2hpcHBpbmdPcHRpb24sCisg
ICAgICAiaW5pdGlhbGx5LXNlbGVjdGVkIiwKKyAgICAgICJNdXN0IGJlICdpbml0aWFsbHktc2Vs
ZWN0ZWQnLCBhcyB0aGUgc2VsZWN0ZWQgbWVtYmVyIGlzIHRydWUiCisgICAgKTsKKyAgICBjb25z
dCBsaXN0ZW5lclByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgIHJlcXVl
c3QuYWRkRXZlbnRMaXN0ZW5lcigic2hpcHBpbmdvcHRpb25jaGFuZ2UiLCAoKSA9PiB7CisgICAg
ICAgIHJlc29sdmUocmVxdWVzdC5zaGlwcGluZ09wdGlvbik7CisgICAgICB9KTsKKyAgICB9KTsK
KyAgICBjb25zdCBoYW5kbGVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4geworICAg
ICAgcmVxdWVzdC5vbnNoaXBwaW5nb3B0aW9uY2hhbmdlID0gKCkgPT4geworICAgICAgICByZXNv
bHZlKHJlcXVlc3Quc2hpcHBpbmdPcHRpb24pOworICAgICAgfTsKKyAgICB9KTsKKyAgICByZXF1
ZXN0LnNob3coKS5jYXRjaChlcnIgPT4gZXJyKTsKKworICAgIGNvbnN0IHJlc3VsdHMgPSBhd2Fp
dCBQcm9taXNlLmFsbChbbGlzdGVuZXJQcm9taXNlLCBoYW5kbGVyUHJvbWlzZV0pOworICAgIGFz
c2VydF90cnVlKAorICAgICAgcmVzdWx0cy5ldmVyeShyZXN1bHQgPT4gcmVzdWx0ID09PSAidmFs
aWQtMSIpLAorICAgICAgIkV4cGVjdGVkIHZhbGlkLTEgYXMgdGhlIHNoaXBwaW5nT3B0aW9uIgor
ICAgICk7CisgICAgYXdhaXQgcmVxdWVzdC5hYm9ydCgpOworICB9KTsKKyAgZG9uZSgpOworfQor
dGVzdFNoaXBwaW5nT3B0aW9uQ2hhbmdlZCgpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3Jlc291cmNlcy9oZWxwZXJzLmpzIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC9yZXNvdXJjZXMvaGVscGVycy5q
cwppbmRleCAwMTIyYzI5NDVjMjYwMTBlNDI3NWQwMTNlZGVlM2FhNzcwODZjOGExLi4xMTYxZTJj
ZTQ0ZDZlMzgwODBjYmVmMTE4Y2Y3YTZmODQxYzhkZDM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3Jlc291cmNlcy9oZWxwZXJzLmpzCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvcmVzb3VyY2VzL2hlbHBlcnMuanMK
QEAgLTk0LDcgKzk0LDEwIEBAIGFzeW5jIGZ1bmN0aW9uIGdldFBheW1lbnRSZXF1ZXN0UmVzcG9u
c2Uob3B0aW9ucywgaWQpIHsKICAgY29uc3QgcmVxdWVzdCA9IG5ldyBQYXltZW50UmVxdWVzdCht
ZXRob2RzLCBkZXRhaWxzLCBvcHRpb25zKTsKICAgcmVxdWVzdC5vbnNoaXBwaW5nYWRkcmVzc2No
YW5nZSA9IGV2ID0+IGV2LnVwZGF0ZVdpdGgoZGV0YWlscyk7CiAgIHJlcXVlc3Qub25zaGlwcGlu
Z29wdGlvbmNoYW5nZSA9IGV2ID0+IGV2LnVwZGF0ZVdpdGgoZGV0YWlscyk7Ci0gIHJlcXVlc3Qu
b25hcHBsZXBheXZhbGlkYXRlbWVyY2hhbnQgPSBldiA9PiBldi5jb21wbGV0ZSh7fSk7CisgIHJl
cXVlc3Qub25hcHBsZXBheXZhbGlkYXRlbWVyY2hhbnQgPSBldiA9PiB7CisgICAgICBldi5jb21w
bGV0ZSh7fSk7CisgICAgICBpbnRlcm5hbHMubW9ja1BheW1lbnRDb29yZGluYXRvci5hY2NlcHRQ
YXltZW50KCk7CisgIH07CiAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdC5zaG93KCk7
CiAgIHJldHVybiB7IHJlcXVlc3QsIHJlc3BvbnNlIH07CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3VwZGF0ZVdpdGgtbWV0aG9kLXBtaS1oYW5k
bGluZy5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRy
ZXF1ZXN0L3VwZGF0ZVdpdGgtbWV0aG9kLXBtaS1oYW5kbGluZy5odHRwcy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWIxYjFlNTRmMzZkN2FkZTNiMTc2OWJiYmI0YTZmNDljZjdiMzQ0NgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvdXBk
YXRlV2l0aC1tZXRob2QtcG1pLWhhbmRsaW5nLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDIxIEBACitNdXN0IHRocm93IGlmIHRoZSBVUkwgaGFzIGEgcGFzc3dvcmQuCitNdXN0IHRocm93
IGlmIHRoZSBVUkwgaGFzIGEgdXNlcm5hbWUuCitNdXN0IHRocm93IGlmIHRoZSBVUkwgaGFzIGEg
dXNlcm5hbWUgYW5kIGEgcGFzc3dvcmQuCitNdXN0IHRocm93IGlmIGl0J3MgaHR0cCwgYW5kIGhh
cyBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4KK011c3QgdGhyb3cgaWYgdGhlIFVSTCBpcyBpbnZh
bGlkIChwb3J0IHJhbmdlKS4KK011c3QgdGhyb3cgaWYgdGhlIFBNSSBjb250YWlucyBjaGFyYWN0
ZXJzIHRoYXQgYXJlIG91dCBvZiByYW5nZS4KK011c3QgdGhyb3cgaWYgbm90IGh0dHBzLgorTXVz
dCB0aHJvdyBpZiB0aGUgc3RhbmRhcmRpemVkIFBNSSBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNp
ZGUgdGhlIGFzY2lpIHJhbmdlLgorTXVzdCB0aHJvdyBpZiBzdGFuZGFyZGl6ZWQgUE1JIGhhcyB1
cHBlcmNhc2UgY2hhcmFjdGVycy4KKworUEFTUyBzbW9rZSB0ZXN0IAorUEFTUyBNdXN0IHRocm93
IGlmIHRoZSBVUkwgaGFzIGEgcGFzc3dvcmQuIAorUEFTUyBNdXN0IHRocm93IGlmIHRoZSBVUkwg
aGFzIGEgdXNlcm5hbWUuIAorUEFTUyBNdXN0IHRocm93IGlmIHRoZSBVUkwgaGFzIGEgdXNlcm5h
bWUgYW5kIGEgcGFzc3dvcmQuIAorUEFTUyBNdXN0IHRocm93IGlmIGl0J3MgaHR0cCwgYW5kIGhh
cyBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4gCitQQVNTIE11c3QgdGhyb3cgaWYgdGhlIFVSTCBp
cyBpbnZhbGlkIChwb3J0IHJhbmdlKS4gCitQQVNTIE11c3QgdGhyb3cgaWYgdGhlIFBNSSBjb250
YWlucyBjaGFyYWN0ZXJzIHRoYXQgYXJlIG91dCBvZiByYW5nZS4gCitQQVNTIE11c3QgdGhyb3cg
aWYgbm90IGh0dHBzLiAKK1BBU1MgTXVzdCB0aHJvdyBpZiB0aGUgc3RhbmRhcmRpemVkIFBNSSBj
b250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIGFzY2lpIHJhbmdlLiAKK1BBU1MgTXVzdCB0
aHJvdyBpZiBzdGFuZGFyZGl6ZWQgUE1JIGhhcyB1cHBlcmNhc2UgY2hhcmFjdGVycy4gCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvdXBkYXRlV2l0
aC1tZXRob2QtcG1pLWhhbmRsaW5nLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3BheW1lbnRyZXF1ZXN0L3VwZGF0ZVdpdGgtbWV0aG9kLXBtaS1oYW5kbGluZy5odHRwcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjcyN2E2ZjIwNzI1MWU3NjI2ZWQzNGYzNTQ0MmNjMWUwMGVhZDE3MDgKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3Vw
ZGF0ZVdpdGgtbWV0aG9kLXBtaS1oYW5kbGluZy5odHRwcy5odG1sCkBAIC0wLDAgKzEsMTUzIEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzwhLS0gIENvcHlyaWdodCDCqSAyMDE3IE1vemlsbGEgYW5kIFdv
cmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNo
bm9sb2d5LCBFUkNJTSwgS2VpbyBVbml2ZXJzaXR5LCBCZWloYW5nKS4gIC0tPgorPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorPHRpdGxlPlRlc3QgZm9yIHZhbGlkaXR5IG9mIHBheW1lbnQgbWV0aG9k
IGlkZW50aWZpZXJzIHdoZW4gY2FsbGluZyB1cGRhdGVXaXRoKCkgbWV0aG9kPC90aXRsZT4KKzxs
aW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cHM6Ly93d3cudzMub3JnL1RSL3BheW1lbnQtcmVxdWVz
dC8jdXBkYXRld2l0aCgpLW1ldGhvZCI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworc2V0dXAoeyBleHBs
aWNpdF9kb25lOiB0cnVlLCBleHBsaWNpdF90aW1lb3V0OiB0cnVlIH0pOworY29uc3QgdmFsaWRN
ZXRob2QgPSBPYmplY3QuZnJlZXplKHsKKyAgc3VwcG9ydGVkTWV0aG9kczogImh0dHBzOi8vOkB3
cHQuZnlpOjQ0My9wYXltZW50LXJlcXVlc3QiLAorfSk7CisKK2NvbnN0IHZhbGlkTWV0aG9kcyA9
IE9iamVjdC5mcmVlemUoW3ZhbGlkTWV0aG9kXSk7CisKK2NvbnN0IHZhbGlkQW1vdW50ID0gT2Jq
ZWN0LmZyZWV6ZSh7CisgIGN1cnJlbmN5OiAiVVNEIiwKKyAgdmFsdWU6ICIxLjAiLAorfSk7CisK
K2NvbnN0IHZhbGlkVG90YWwgPSBPYmplY3QuZnJlZXplKHsKKyAgbGFiZWw6ICJEZWZhdWx0IFRv
dGFsIiwKKyAgYW1vdW50OiB2YWxpZEFtb3VudCwKK30pOworCitjb25zdCB2YWxpZFNoaXBwaW5n
T3B0aW9uID0gT2JqZWN0LmZyZWV6ZSh7CisgIGlkOiAic3RhbmRhcmQiLAorICBsYWJlbDogIlNo
aXBwaW5nIG9wdGlvbiIsCisgIGFtb3VudDogdmFsaWRBbW91bnQsCisgIHNlbGVjdGVkOiB0cnVl
LAorfSk7CisKK2NvbnN0IHZhbGlkRGV0YWlscyA9IE9iamVjdC5mcmVlemUoeworICB0b3RhbDog
dmFsaWRUb3RhbCwKKyAgc2hpcHBpbmdPcHRpb25zOiBbdmFsaWRTaGlwcGluZ09wdGlvbl0sCit9
KTsKKworY29uc3QgdmFsaWRNb2RpZmllciA9IE9iamVjdC5mcmVlemUoeworICBzdXBwb3J0ZWRN
ZXRob2RzOiAiYmFzaWMtY2FyZCIsCisgIHRvdGFsOiB2YWxpZFRvdGFsLAorfSk7CisKK3Rlc3Qo
KCkgPT4geworICB0cnkgeworICAgIG5ldyBQYXltZW50UmVxdWVzdCh2YWxpZE1ldGhvZHMsIHZh
bGlkRGV0YWlscyk7CisgIH0gY2F0Y2ggKGVycikgeworICAgIGRvbmUoKTsKKyAgICB0aHJvdyBl
cnI7CisgIH0KK30sICJzbW9rZSB0ZXN0Iik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoYnV0dG9uLCB7
IGludmFsaWRNZXRob2QgfSkgeworICBidXR0b24uZGlzYWJsZWQgPSB0cnVlOworICBjb25zdCBh
cHBsZVBheSA9IE9iamVjdC5mcmVlemUoeworICAgICAgc3VwcG9ydGVkTWV0aG9kczogImh0dHBz
Oi8vYXBwbGUuY29tL2FwcGxlLXBheSIsCisgICAgICBkYXRhOiB7CisgICAgICAgICAgdmVyc2lv
bjogMiwKKyAgICAgICAgICBtZXJjaGFudElkZW50aWZpZXI6ICcnLAorICAgICAgICAgIG1lcmNo
YW50Q2FwYWJpbGl0aWVzOiBbJ3N1cHBvcnRzM0RTJ10sCisgICAgICAgICAgc3VwcG9ydGVkTmV0
d29ya3M6IFsndmlzYScsICdtYXN0ZXJDYXJkJ10sCisgICAgICAgICAgY291bnRyeUNvZGU6ICdV
UycsCisgICAgICB9LAorICB9KTsKKyAgcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4geworICAgIGNv
bnN0IHJlcXVlc3QgPSBuZXcgUGF5bWVudFJlcXVlc3QoCisgICAgICBbYXBwbGVQYXldLAorICAg
ICAgdmFsaWREZXRhaWxzLAorICAgICAgeyByZXF1ZXN0U2hpcHBpbmc6IHRydWUgfQorICAgICk7
CisgICAgcmVxdWVzdC5vbmFwcGxlcGF5dmFsaWRhdGVtZXJjaGFudCA9IGV2ZW50ID0+IHsKKyAg
ICAgICAgZXZlbnQuY29tcGxldGUoeyB9KTsKKyAgICB9OworICAgIGNvbnN0IGxpc3RlbmVyID0g
ZXYgPT4geworICAgICAgY29uc3QgaW52YWxpZE1vZGlmaWVyID0gT2JqZWN0LmFzc2lnbih7fSwg
dmFsaWRNb2RpZmllciwgeworICAgICAgICBzdXBwb3J0ZWRNZXRob2RzOiBpbnZhbGlkTWV0aG9k
LAorICAgICAgfSk7CisgICAgICBjb25zdCBpbnZhbGlkRGV0YWlscyA9IE9iamVjdC5hc3NpZ24o
e30sIHZhbGlkRGV0YWlscywgeworICAgICAgICBtb2RpZmllcnM6IFt2YWxpZE1vZGlmaWVyLCBp
bnZhbGlkTW9kaWZpZXJdLAorICAgICAgfSk7CisgICAgICBldi51cGRhdGVXaXRoKGludmFsaWRE
ZXRhaWxzKTsKKyAgICB9OworICAgIC8vIFdlIHRlc3QgYWdhaW5zdCBhIHZhbGlkIGFuZCBhbiBp
bnZhbGlkIG1vZGlmaWVyCisgICAgcmVxdWVzdC5vbnNoaXBwaW5nYWRkcmVzc2NoYW5nZSA9IGxp
c3RlbmVyOworICAgIC8vIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigic2hpcHBpbmdhZGRyZXNz
Y2hhbmdlIiwgbGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTsKKyAgICBjb25zdCBzaG93UHJvbWlz
ZSA9IHJlcXVlc3Quc2hvdygpOworICAgIGF3YWl0IHByb21pc2VfcmVqZWN0cyh0LCBuZXcgUmFu
Z2VFcnJvcigpLCBzaG93UHJvbWlzZSk7CisgIH0sIGJ1dHRvbi50ZXh0Q29udGVudC50cmltKCkp
OworfQorPC9zY3JpcHQ+Cis8b2w+CisgIDxsaT4KKyAgICA8YnV0dG9uIGlkPSJidXR0b24xIj4K
KyAgICAgIE11c3QgdGhyb3cgaWYgdGhlIFVSTCBoYXMgYSBwYXNzd29yZC4KKyAgICA8L2J1dHRv
bj4KKyAgPC9saT4KKyAgPGxpPgorICAgIDxidXR0b24gaWQ9ImJ1dHRvbjIiPgorICAgICAgTXVz
dCB0aHJvdyBpZiB0aGUgVVJMIGhhcyBhIHVzZXJuYW1lLgorICAgIDwvYnV0dG9uPgorICA8L2xp
PgorICA8bGk+CisgICAgPGJ1dHRvbiBpZD0iYnV0dG9uMyI+CisgICAgICBNdXN0IHRocm93IGlm
IHRoZSBVUkwgaGFzIGEgdXNlcm5hbWUgYW5kIGEgcGFzc3dvcmQuCisgICAgPC9idXR0b24+Cisg
IDwvbGk+CisgIDxsaT4KKyAgICA8YnV0dG9uIGlkPSJidXR0b240Ij4KKyAgICAgIE11c3QgdGhy
b3cgaWYgaXQncyBodHRwLCBhbmQgaGFzIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLgorICAgIDwv
YnV0dG9uPgorICA8L2xpPgorICA8bGk+CisgICAgPGJ1dHRvbiBpZD0iYnV0dG9uNSI+CisgICAg
ICBNdXN0IHRocm93IGlmIHRoZSBVUkwgaXMgaW52YWxpZCAocG9ydCByYW5nZSkuCisgICAgPC9i
dXR0b24+CisgIDwvbGk+CisgIDxsaT4KKyAgICA8YnV0dG9uIGlkPSJidXR0b242Ij4KKyAgICAg
IE11c3QgdGhyb3cgaWYgdGhlIFBNSSBjb250YWlucyBjaGFyYWN0ZXJzIHRoYXQgYXJlIG91dCBv
ZiByYW5nZS4KKyAgICA8L2J1dHRvbj4KKyAgPC9saT4KKyAgPGxpPgorICAgIDxidXR0b24gaWQ9
ImJ1dHRvbjciPgorICAgICAgTXVzdCB0aHJvdyBpZiBub3QgaHR0cHMuCisgICAgPC9idXR0b24+
CisgIDwvbGk+CisgIDxsaT4KKyAgICA8YnV0dG9uIGlkPSJidXR0b244Ij4KKyAgICAgIE11c3Qg
dGhyb3cgaWYgdGhlIHN0YW5kYXJkaXplZCBQTUkgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRl
IHRoZSBhc2NpaSByYW5nZS4KKyAgICA8L2J1dHRvbj4KKyAgPC9saT4KKyAgPGxpPgorICAgIDxi
dXR0b24gaWQ9ImJ1dHRvbjkiPgorICAgICAgTXVzdCB0aHJvdyBpZiBzdGFuZGFyZGl6ZWQgUE1J
IGhhcyB1cHBlcmNhc2UgY2hhcmFjdGVycy4KKyAgICA8L2J1dHRvbj4KKyAgPC9saT4KKzwvb2w+
Cis8c2NyaXB0PgorICAgIGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAg
IGF3YWl0IHJ1blRlc3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbjEiKSwge2ludmFs
aWRNZXRob2Q6ICdodHRwczovLzpwYXNzd29yZEBleGFtcGxlLmNvbSd9KTsKKyAgICAgICAgYXdh
aXQgcnVuVGVzdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uMiIpLCB7aW52YWxpZE1l
dGhvZDogJ2h0dHBzOi8vdXNlcm5hbWVAZXhhbXBsZS5jb20nfSk7CisgICAgICAgIGF3YWl0IHJ1
blRlc3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbjMiKSwge2ludmFsaWRNZXRob2Q6
ICdodHRwczovL3VzZXJuYW1lOnBhc3N3b3JkQGV4YW1wbGUuY29tL3BheSd9KTsKKyAgICAgICAg
YXdhaXQgcnVuVGVzdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uNCIpLCB7aW52YWxp
ZE1ldGhvZDogJ2h0dHA6Ly91c2VybmFtZTpwYXNzd29yZEBleGFtcGxlLmNvbS9wYXknfSk7Cisg
ICAgICAgIGF3YWl0IHJ1blRlc3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbjUiKSwg
e2ludmFsaWRNZXRob2Q6ICdodHRwOi8vZm9vLmNvbToxMDAwMDAwMDAvcGF5J30pOworICAgICAg
ICBhd2FpdCBydW5UZXN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b242IiksIHtpbnZh
bGlkTWV0aG9kOiAnYmFzaWMt8J+Ssyd9KTsKKyAgICAgICAgYXdhaXQgcnVuVGVzdChkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uNyIpLCB7aW52YWxpZE1ldGhvZDogJ25vdC1odHRwczov
L3dwdC5meWkvcGF5bWVudC1yZXF1ZXN0J30pOworICAgICAgICBhd2FpdCBydW5UZXN0KGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b244IiksIHtpbnZhbGlkTWV0aG9kOiAnwqFiYXNpYy0q
LWNhcmQhJ30pOworICAgICAgICBhd2FpdCBydW5UZXN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJidXR0b245IiksIHtpbnZhbGlkTWV0aG9kOiAnQmFzaWMtQ2FyZCd9KTsKKyAgICAgICAgZG9u
ZSgpOworICAgIH0KKyAgICBydW5UZXN0cygpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3BheW1lbnQtcmVxdWVzdC9w
YXltZW50LXJlcXVlc3QtdXBkYXRlLWV2ZW50LXVwZGF0ZXdpdGgtbWV0aG9kLmh0dHBzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcGF5
bWVudC1yZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC11cGRhdGUtZXZlbnQtdXBkYXRld2l0aC1tZXRo
b2QuaHR0cHMtZXhwZWN0ZWQudHh0CmluZGV4IGUyMmZiNWQzMmU3YzkzNmNmMTIyOTlkZjdiZjU0
YzA5MDBlYzA5OWQuLjdjNmE2NTdiZWZlYzU3Y2RkYTRlMWQ5NzNhZWU0OTk2MTk4YzZiN2IgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcGF5
bWVudC1yZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC11cGRhdGUtZXZlbnQtdXBkYXRld2l0aC1tZXRo
b2QuaHR0cHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcGF5bWVudC1yZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC11cGRhdGUtZXZl
bnQtdXBkYXRld2l0aC1tZXRob2QuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0xLDkgKzEsNSBAQAog
CiBQQVNTIExldCB0YXJnZXQgYmUgdGhlIHJlcXVlc3Qgd2hpY2ggaXMgZGlzcGF0Y2hpbmcgdGhl
IGV2ZW50LiAKLUZBSUwgQ2FsbGluZyAudXBkYXRlV2l0aCgpIHdpdGggYW4gdW5kaXNwYXRjaGVk
IHVudHJ1c3RlZCBldmVudCB0aHJvd3MgIkludmFsaWRTdGF0ZUVycm9yIiBhc3NlcnRfdGhyb3dz
OiB1bnRydXN0ZWQgZXZlbnQgb2YgdHlwZSAianVzdCBhIHRlc3QiIG11c3QgdGhyb3cgIkludmFs
aWRTdGF0ZUVycm9yIiBmdW5jdGlvbiAiKCkgPT4gewotICAgICAgICBldi51cGRhdGVXaXRoKFBy
b21pc2UucmVzb2x2ZSgpKTsKLSAgICAgIH0iIHRocmV3IG9iamVjdCAiVHlwZUVycm9yOiBldi51
cGRhdGVXaXRoIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2V2LnVwZGF0ZVdpdGgoUHJvbWlzZS5y
ZXNvbHZlKCkpJywgJ2V2LnVwZGF0ZVdpdGgnIGlzIHVuZGVmaW5lZCkiIHRoYXQgaXMgbm90IGEg
RE9NRXhjZXB0aW9uIEludmFsaWRTdGF0ZUVycm9yOiBwcm9wZXJ0eSAiY29kZSIgaXMgZXF1YWwg
dG8gdW5kZWZpbmVkLCBleHBlY3RlZCAxMQotRkFJTCBDYWxsaW5nIC51cGRhdGVXaXRoKCkgd2l0
aCBhIGRpc3BhdGNoZWQsIHVudHJ1c3RlZCBldmVudCwgdGhyb3dzICJJbnZhbGlkU3RhdGVFcnJv
ciIgYXNzZXJ0X3Rocm93czogdW50cnVzdGVkIGV2ZW50IG9mIHR5cGUgImp1c3QgYSB0ZXN0IiBt
dXN0IHRocm93ICJJbnZhbGlkU3RhdGVFcnJvciIgZnVuY3Rpb24gIigpID0+IHsKLSAgICAgICAg
ZXYudXBkYXRlV2l0aChQcm9taXNlLnJlc29sdmUoKSkKLSAgICAgIH0iIHRocmV3IG9iamVjdCAi
VHlwZUVycm9yOiBldi51cGRhdGVXaXRoIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2V2LnVwZGF0
ZVdpdGgoUHJvbWlzZS5yZXNvbHZlKCkpJywgJ2V2LnVwZGF0ZVdpdGgnIGlzIHVuZGVmaW5lZCki
IHRoYXQgaXMgbm90IGEgRE9NRXhjZXB0aW9uIEludmFsaWRTdGF0ZUVycm9yOiBwcm9wZXJ0eSAi
Y29kZSIgaXMgZXF1YWwgdG8gdW5kZWZpbmVkLCBleHBlY3RlZCAxMQorUEFTUyBDYWxsaW5nIC51
cGRhdGVXaXRoKCkgd2l0aCBhbiB1bmRpc3BhdGNoZWQgdW50cnVzdGVkIGV2ZW50IHRocm93cyAi
SW52YWxpZFN0YXRlRXJyb3IiIAorUEFTUyBDYWxsaW5nIC51cGRhdGVXaXRoKCkgd2l0aCBhIGRp
c3BhdGNoZWQsIHVudHJ1c3RlZCBldmVudCwgdGhyb3dzICJJbnZhbGlkU3RhdGVFcnJvciIgCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324700</attachid>
            <date>2017-10-24 12:18:51 -0700</date>
            <delta_ts>2017-10-24 12:53:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178689-20171024121850.patch</filename>
            <type>text/plain</type>
            <size>49679</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMxNDZiYzk4MDUyNmU5
NTE0NWE0NTBlMzE3YjdmYzIyODA1YTE1ZS4uZmI5MzEwODMzY2M0OGI4NjBlZTY1OTQ5NjRjZjAz
YjRiNDA0ZTdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE3LTEwLTIzICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbUGF5bWVudCBSZXF1ZXN0XSBJ
bXBsZW1lbnQgdGhlICJQYXltZW50UmVxdWVzdCB1cGRhdGVkIiBhbGdvcml0aG0KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODY4OQorCisgICAgICAg
IFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgSW1wbGVtZW50ZWQgdGhl
ICJQYXltZW50UmVxdWVzdCB1cGRhdGVkIiBhbGdvcml0aG0gYnkgZmlyaW5nIHNoaXBwaW5nYWRk
cmVzc2NoYW5nZSBhbmQKKyAgICAgICAgc2hpcHBpbmdvcHRpb25jaGFuZ2UgZXZlbnRzIGF0IHRo
ZSByaWdodCB0aW1lcyBhbmQgaW1wbGVtZW50aW5nCisgICAgICAgIFBheW1lbnRSZXF1ZXN0VXBk
YXRlRXZlbnQudXBkYXRlV2l0aCgpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3BheW1l
bnRyZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC1jaGFuZ2Utc2hpcHBpbmctYWRkcmVzcy5odHRwcy5o
dG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3BheW1lbnQtcmVx
dWVzdC1jaGFuZ2Utc2hpcHBpbmctb3B0aW9uLmh0dHBzLmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvdXBkYXRlV2l0aC1tZXRob2QtcG1pLWhhbmRsaW5nLmh0
dHBzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvcGF5bWVudHJlcXVlc3QvQXBw
bGVQYXlQYXltZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0QW5kVmFs
aWRhdGUpOiBBZGRlZC4gQ29udmVydHMgYSBQYXltZW50RGV0YWlsc0luaXQgdG8gYQorICAgICAg
ICBBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6VG90YWxBbmRMaW5lSXRlbXMuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBsZVBheVBheW1lbnRIYW5kbGVyOjpzaGlwcGluZ0FkZHJlc3NVcGRh
dGVkKTogQ3JlYXRlZCBhIFNoaXBwaW5nQ29udGFjdFVwZGF0ZQorICAgICAgICBhbmQgcGFzc2Vk
IGl0IHRvIFBheW1lbnRDb29yZGluYXRvcjo6Y29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rp
b24oKS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxlUGF5UGF5bWVudEhhbmRsZXI6OnNoaXBwaW5n
T3B0aW9uVXBkYXRlZCk6IENyZWF0ZWQgYSBTaGlwcGluZ01ldGhvZFVwZGF0ZSBhbmQKKyAgICAg
ICAgcGFzc2VkIGl0IHRvIFBheW1lbnRDb29yZGluYXRvcjo6Y29tcGxldGVTaGlwcGluZ01ldGhv
ZFNlbGVjdGlvbigpLgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvcGF5bWVudHJlcXVlc3Qv
QXBwbGVQYXlQYXltZW50SGFuZGxlci5oOgorICAgICAgICAqIE1vZHVsZXMvcGF5bWVudHJlcXVl
c3QvUGF5bWVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1Bh
eW1lbnRSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrQW5kQ2Fub25pY2FsaXpl
RGV0YWlscyk6IE1vdmVkIHRoZSBsb2dpYyBmb3IgY2hlY2tpbmcgYW5kIGNhbm9uaWNhbGl6aW5n
IGEKKyAgICAgICAgUGF5bWVudERldGFpbHNCYXNlIGZyb20gUGF5bWVudFJlcXVlc3Q6OmNyZWF0
ZSgpIHRvIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpQYXltZW50UmVxdWVzdDo6Y3JlYXRlKTog
Q2FsbGVkIGNoZWNrQW5kQ2Fub25pY2FsaXplRGV0YWlscygpLgorICAgICAgICAoV2ViQ29yZTo6
UGF5bWVudFJlcXVlc3Q6OmFib3J0V2l0aEV4Y2VwdGlvbik6IE1vdmVkIHRoZSBib2R5IG9mIHN0
b3AoKSB0byBoZXJlIGFuZAorICAgICAgICBwYXJhbWV0ZXJpemVkIHRoZSBFeGNlcHRpb24gd2l0
aCB3aGljaCB0byBhYm9ydCBtX3Nob3dQcm9taXNlLgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVu
dFJlcXVlc3Q6OnN0b3ApOiBDYWxsZWQgYWJvcnRXaXRoRXhjZXB0aW9uKCkgd2l0aCBhbiBBYm9y
dEVycm9yLgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OnNoaXBwaW5nQWRkcmVz
c0NoYW5nZWQpOiBDYWxsZWQgZGlzcGF0Y2hVcGRhdGVFdmVudCgpIHdpdGgKKyAgICAgICAgc2hp
cHBpbmdhZGRyZXNzY2hhbmdlRXZlbnQuCisgICAgICAgIChXZWJDb3JlOjpQYXltZW50UmVxdWVz
dDo6c2hpcHBpbmdPcHRpb25DaGFuZ2VkKTogRGl0dG8gd2l0aCBzaGlwcGluZ29wdGlvbmNoYW5n
ZUV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OmRpc3BhdGNoVXBkYXRl
RXZlbnQpOiBDcmVhdGVkIGEgUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudCBhbmQKKyAgICAgICAg
ZGlzcGF0Y2hlZCBpdC4KKyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRSZXF1ZXN0Ojp1cGRhdGVX
aXRoKTogQWRkZWQgYSBzZXR0bGUgaGFuZGxlciB0byBtX2RldGFpbHNQcm9taXNlLgorICAgICAg
ICAoV2ViQ29yZTo6UGF5bWVudFJlcXVlc3Q6OnNldHRsZURldGFpbHNQcm9taXNlKTogVXBkYXRl
ZCB0aGUgUGF5bWVudFJlcXVlc3Qgd2l0aCB0aGUgbmV3CisgICAgICAgIGRldGFpbHMgYW5kIGNh
bGxlZCBQYXltZW50SGFuZGxlcjo6c2hpcHBpbmdBZGRyZXNzVXBkYXRlZCgpIG9yCisgICAgICAg
IFBheW1lbnRIYW5kbGVyOjpzaGlwcGluZ09wdGlvblVwZGF0ZWQoKS4KKyAgICAgICAgKiBNb2R1
bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9w
YXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ6OlBheW1lbnRSZXF1ZXN0VXBkYXRlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDo6dXBkYXRl
V2l0aCk6IENhbGxlZCBQYXltZW50UmVxdWVzdDo6dXBkYXRlV2l0aCgpLgorICAgICAgICAoV2Vi
Q29yZTo6UGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDo6ZXZlbnRJbnRlcmZhY2UgY29uc3QpOiBS
ZXR1cm5lZAorICAgICAgICBQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50SW50ZXJmYWNlVHlwZS4K
KyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBkYXRlRXZl
bnQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBk
YXRlRXZlbnQuaWRsOgorICAgICAgICAqIHRlc3RpbmcvTW9ja1BheW1lbnRDb29yZGluYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUGF5bWVudENvb3JkaW5hdG9yOjpjYW5NYWtlUGF5
bWVudHNXaXRoQWN0aXZlQ2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUGF5bWVudENvb3Jk
aW5hdG9yOjpvcGVuUGF5bWVudFNldHVwKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tQYXltZW50
Q29vcmRpbmF0b3I6OmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKTogU3RvcHBlZCBjYWxsaW5n
CisgICAgICAgIFBheW1lbnRDb29yZGluYXRvcjo6ZGlkQXV0aG9yaXplUGF5bWVudCgpLgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1BheW1lbnRDb29yZGluYXRvcjo6Y2hhbmdlU2hpcHBpbmdPcHRp
b24pOiBDYWxsZWQKKyAgICAgICAgUGF5bWVudENvb3JkaW5hdG9yOjpkaWRTZWxlY3RTaGlwcGlu
Z01ldGhvZCgpLgorICAgICAgICAoV2ViQ29yZTo6TW9ja1BheW1lbnRDb29yZGluYXRvcjo6YWNj
ZXB0UGF5bWVudCk6IENhbGxlZAorICAgICAgICBQYXltZW50Q29vcmRpbmF0b3I6OmRpZEF1dGhv
cml6ZVBheW1lbnQoKS4KKyAgICAgICAgKiB0ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0b3Iu
aDoKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0b3IuaWRsOgorCiAyMDE3
LTEwLTIzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbUGF5bWVu
dCBSZXF1ZXN0XSBUYWtlIHRoZSBKU0MgQVBJIGxvY2sgYmVmb3JlIGNyZWF0aW5nIHRoZSBQYXlt
ZW50UmVzcG9uc2UuZGV0YWlscyBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGVwYXkvcGF5bWVudHJlcXVlc3QvQXBwbGVQYXlQYXltZW50SGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0FwcGxlUGF5
UGF5bWVudEhhbmRsZXIuY3BwCmluZGV4IDM5M2JmNGY2N2Q0M2NjNDg1MWI3YjM0MWYxYjY1YjY2
NDkyM2JmZWEuLmVlZjJhMGM5YTI2YjcwMWIzY2FiNmU3ZmMyZmUzNTQ2ZDAwYWFkODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvcGF5bWVudHJlcXVlc3QvQXBw
bGVQYXlQYXltZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
ZXBheS9wYXltZW50cmVxdWVzdC9BcHBsZVBheVBheW1lbnRIYW5kbGVyLmNwcApAQCAtMjUzLDYg
KzI1Myw1MyBAQCB2b2lkIEFwcGxlUGF5UGF5bWVudEhhbmRsZXI6OmNhbk1ha2VQYXltZW50KEZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbgogICAgIHBheW1lbnRDb29yZGluYXRv
cigpLmNhbk1ha2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKG1fYXBwbGVQYXlSZXF1ZXN0LT5tZXJj
aGFudElkZW50aWZpZXIsIGRvY3VtZW50KCkuZG9tYWluKCksIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKIH0KIAorc3RhdGljIEV4Y2VwdGlvbk9yPEFwcGxlUGF5U2Vzc2lvblBheW1lbnRS
ZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcz4gY29udmVydEFuZFZhbGlkYXRlKGNvbnN0IFBheW1l
bnREZXRhaWxzSW5pdCYgZGV0YWlscykKK3sKKyAgICBTdHJpbmcgY3VycmVuY3kgPSBkZXRhaWxz
LnRvdGFsLmFtb3VudC5jdXJyZW5jeTsKKyAgICBhdXRvIHRvdGFsID0gY29udmVydEFuZFZhbGlk
YXRlKGRldGFpbHMudG90YWwsIGN1cnJlbmN5KTsKKyAgICBpZiAodG90YWwuaGFzRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiB0b3RhbC5yZWxlYXNlRXhjZXB0aW9uKCk7CisKKyAgICBhdXRv
IGxpbmVJdGVtcyA9IGNvbnZlcnRBbmRWYWxpZGF0ZShkZXRhaWxzLmRpc3BsYXlJdGVtcywgY3Vy
cmVuY3kpOworICAgIGlmIChsaW5lSXRlbXMuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBsaW5lSXRlbXMucmVsZWFzZUV4Y2VwdGlvbigpOworCisgICAgcmV0dXJuIEFwcGxlUGF5U2Vz
c2lvblBheW1lbnRSZXF1ZXN0OjpUb3RhbEFuZExpbmVJdGVtcyB7IHRvdGFsLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpLCBsaW5lSXRlbXMucmVsZWFzZVJldHVyblZhbHVlKCkgfTsKK30KKworRXhjZXB0
aW9uT3I8dm9pZD4gQXBwbGVQYXlQYXltZW50SGFuZGxlcjo6c2hpcHBpbmdBZGRyZXNzVXBkYXRl
ZChjb25zdCBTdHJpbmcmIGVycm9yKQoreworICAgIFNoaXBwaW5nQ29udGFjdFVwZGF0ZSB1cGRh
dGU7CisKKyAgICBpZiAobV9wYXltZW50UmVxdWVzdC0+cGF5bWVudE9wdGlvbnMoKS5yZXF1ZXN0
U2hpcHBpbmcgJiYgbV9wYXltZW50UmVxdWVzdC0+cGF5bWVudERldGFpbHMoKS5zaGlwcGluZ09w
dGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIFBheW1lbnRFcnJvciBwYXltZW50RXJyb3I7Cisg
ICAgICAgIHBheW1lbnRFcnJvci5jb2RlID0gUGF5bWVudEVycm9yOjpDb2RlOjpTaGlwcGluZ0Nv
bnRhY3RJbnZhbGlkOworICAgICAgICBwYXltZW50RXJyb3IubWVzc2FnZSA9IGVycm9yOworICAg
ICAgICB1cGRhdGUuZXJyb3JzLmFwcGVuZChXVEZNb3ZlKHBheW1lbnRFcnJvcikpOworICAgIH0K
KworICAgIGF1dG8gbmV3VG90YWxBbmRMaW5lSXRlbXMgPSBjb252ZXJ0QW5kVmFsaWRhdGUobV9w
YXltZW50UmVxdWVzdC0+cGF5bWVudERldGFpbHMoKSk7CisgICAgaWYgKG5ld1RvdGFsQW5kTGlu
ZUl0ZW1zLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbmV3VG90YWxBbmRMaW5lSXRl
bXMucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHVwZGF0ZS5uZXdUb3RhbEFuZExpbmVJdGVtcyA9
IG5ld1RvdGFsQW5kTGluZUl0ZW1zLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworCisgICAgcGF5bWVu
dENvb3JkaW5hdG9yKCkuY29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oV1RGTW92ZSh1
cGRhdGUpKTsKKyAgICByZXR1cm4geyB9OworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBBcHBsZVBh
eVBheW1lbnRIYW5kbGVyOjpzaGlwcGluZ09wdGlvblVwZGF0ZWQoKQoreworICAgIFNoaXBwaW5n
TWV0aG9kVXBkYXRlIHVwZGF0ZTsKKworICAgIGF1dG8gbmV3VG90YWxBbmRMaW5lSXRlbXMgPSBj
b252ZXJ0QW5kVmFsaWRhdGUobV9wYXltZW50UmVxdWVzdC0+cGF5bWVudERldGFpbHMoKSk7Cisg
ICAgaWYgKG5ld1RvdGFsQW5kTGluZUl0ZW1zLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gbmV3VG90YWxBbmRMaW5lSXRlbXMucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHVwZGF0ZS5u
ZXdUb3RhbEFuZExpbmVJdGVtcyA9IG5ld1RvdGFsQW5kTGluZUl0ZW1zLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpOworCisgICAgcGF5bWVudENvb3JkaW5hdG9yKCkuY29tcGxldGVTaGlwcGluZ01ldGhv
ZFNlbGVjdGlvbihXVEZNb3ZlKHVwZGF0ZSkpOworICAgIHJldHVybiB7IH07Cit9CisKIHZvaWQg
QXBwbGVQYXlQYXltZW50SGFuZGxlcjo6Y29tcGxldGUoc3RkOjpvcHRpb25hbDxQYXltZW50Q29t
cGxldGU+JiYgcmVzdWx0KQogewogICAgIGlmICghcmVzdWx0KSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0FwcGxlUGF5UGF5bWVu
dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvcGF5bWVudHJlcXVl
c3QvQXBwbGVQYXlQYXltZW50SGFuZGxlci5oCmluZGV4IDU1ZTY3ZTZmNzhlOWYzOTk1NDFmMDFk
NjIzZTU2YmJjOTk1OTY3ZTIuLjllYWY5Mjc0ZTJlMjcxNGMzZTk5ZGY4NDU3MTdjNTA0YjAwYjEw
YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvcGF5bWVudHJl
cXVlc3QvQXBwbGVQYXlQYXltZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvcGF5bWVudHJlcXVlc3QvQXBwbGVQYXlQYXltZW50SGFuZGxlci5oCkBAIC01
Niw2ICs1Niw4IEBAIHByaXZhdGU6CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2hvdygpIGZpbmFs
OwogICAgIHZvaWQgaGlkZSgpIGZpbmFsOwogICAgIHZvaWQgY2FuTWFrZVBheW1lbnQoV1RGOjpG
dW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbDsKKyAgICBFeGNl
cHRpb25Pcjx2b2lkPiBzaGlwcGluZ0FkZHJlc3NVcGRhdGVkKGNvbnN0IFN0cmluZyYgZXJyb3Ip
IGZpbmFsOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNoaXBwaW5nT3B0aW9uVXBkYXRlZCgpIGZp
bmFsOwogICAgIHZvaWQgY29tcGxldGUoc3RkOjpvcHRpb25hbDxQYXltZW50Q29tcGxldGU+JiYp
IGZpbmFsOwogCiAgICAgLy8gUGF5bWVudFNlc3Npb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudEhhbmRsZXIuaAppbmRleCA4MjcyMDI2
NTM3Y2U5ZWJiZjlkN2FlNjcyNzA1NWE3OWFjNzY0YzVjLi5jNDhmYTliMTNiMTVjZGZmNzUxMTc5
MGNmYmVlMjFhYTY5MTZlNWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bh
eW1lbnRyZXF1ZXN0L1BheW1lbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wYXltZW50cmVxdWVzdC9QYXltZW50SGFuZGxlci5oCkBAIC00OCw2ICs0OCw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIEV4Y2VwdGlvbk9yPHZvaWQ+IHNob3coKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGhpZGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbk1ha2VQYXltZW50KFdURjo6
RnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgPSAwOworICAgIHZpcnR1
YWwgRXhjZXB0aW9uT3I8dm9pZD4gc2hpcHBpbmdBZGRyZXNzVXBkYXRlZChjb25zdCBTdHJpbmcm
IGVycm9yKSA9IDA7CisgICAgdmlydHVhbCBFeGNlcHRpb25Pcjx2b2lkPiBzaGlwcGluZ09wdGlv
blVwZGF0ZWQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNvbXBsZXRlKHN0ZDo6b3B0aW9uYWw8
UGF5bWVudENvbXBsZXRlPiYmKSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuY3BwCmluZGV4IDhhNWJh
YmQwNTQ0OTczYzY3NzAwOWZkN2I2YWRjZjM3MmQ3ZDBiMWEuLmIyNTg4MjBiYmQxNTkwMDQ4YzU4
Nzg2NjEzOTAxNTZiNjliZWMzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
cGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuY3BwCkBAIC0zMCw2ICszMCw5IEBA
CiAKICNpbmNsdWRlICJBcHBsZVBheVBheW1lbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgi
CisjaW5jbHVkZSAiSlNQYXltZW50RGV0YWlsc1VwZGF0ZS5oIgogI2luY2x1ZGUgIkpTUGF5bWVu
dFJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiUGF5bWVudEFkZHJlc3MuaCIKICNpbmNsdWRlICJQYXlt
ZW50Q3VycmVuY3lBbW91bnQuaCIKQEAgLTM3LDEyICs0MCwxNCBAQAogI2luY2x1ZGUgIlBheW1l
bnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUGF5bWVudE1ldGhvZERhdGEuaCIKICNpbmNsdWRlICJQ
YXltZW50T3B0aW9ucy5oIgorI2luY2x1ZGUgIlBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQuaCIK
ICNpbmNsdWRlICJQYXltZW50UmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPTk9iamVjdC5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1Rocm93U2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgog
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAjaW5jbHVk
ZSA8d3RmL1VVSUQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjQwLDM5ICsyNDUsMTMg
QEAgc3RkOjpvcHRpb25hbDxQYXltZW50UmVxdWVzdDo6TWV0aG9kSWRlbnRpZmllcj4gY29udmVy
dEFuZFZhbGlkYXRlUGF5bWVudE1ldGhvZEkKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQog
Ci0vLyBJbXBsZW1lbnRzIHRoZSBQYXltZW50UmVxdWVzdCBDb25zdHJ1Y3RvcgotLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL3BheW1lbnQtcmVxdWVzdC8jY29uc3RydWN0b3IKLUV4Y2VwdGlvbk9y
PFJlZjxQYXltZW50UmVxdWVzdD4+IFBheW1lbnRSZXF1ZXN0OjpjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50LCBWZWN0b3I8UGF5bWVudE1ldGhvZERhdGE+JiYgbWV0aG9kRGF0YSwgUGF5bWVudERl
dGFpbHNJbml0JiYgZGV0YWlscywgUGF5bWVudE9wdGlvbnMmJiBvcHRpb25zKQotewotICAgIC8v
IEZJWE1FOiBDaGVjayBpZiB0aGlzIGRvY3VtZW50IGlzIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBQ
YXltZW50UmVxdWVzdCBBUEkgYmFzZWQgb24gdGhlIGFsbG93cGF5bWVudHJlcXVlc3QgYXR0cmli
dXRlLgotCi0gICAgaWYgKGRldGFpbHMuaWQuaXNOdWxsKCkpCi0gICAgICAgIGRldGFpbHMuaWQg
PSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0KLSAgICBpZiAobWV0aG9kRGF0YS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiQXQgbGVhc3Qgb25lIHBheW1lbnQgbWV0aG9kIGlzIHJlcXVpcmVkLiIpIH07Ci0KLSAgICBW
ZWN0b3I8TWV0aG9kPiBzZXJpYWxpemVkTWV0aG9kRGF0YTsKLSAgICBzZXJpYWxpemVkTWV0aG9k
RGF0YS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1ldGhvZERhdGEuc2l6ZSgpKTsKLSAgICBmb3Ig
KGF1dG8mIHBheW1lbnRNZXRob2QgOiBtZXRob2REYXRhKSB7Ci0gICAgICAgIGF1dG8gaWRlbnRp
ZmllciA9IGNvbnZlcnRBbmRWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVudGlmaWVyKHBheW1lbnRN
ZXRob2Quc3VwcG9ydGVkTWV0aG9kcyk7Ci0gICAgICAgIGlmICghaWRlbnRpZmllcikKLSAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBSYW5nZUVycm9yLCBtYWtlU3RyaW5nKCJcIiIsIHBh
eW1lbnRNZXRob2Quc3VwcG9ydGVkTWV0aG9kcywgIlwiIGlzIGFuIGludmFsaWQgcGF5bWVudCBt
ZXRob2QgaWRlbnRpZmllci4iKSB9OwotCi0gICAgICAgIFN0cmluZyBzZXJpYWxpemVkRGF0YTsK
LSAgICAgICAgaWYgKHBheW1lbnRNZXRob2QuZGF0YSkgewotICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZG9jdW1lbnQuZXhlY1N0YXRlKCktPnZtKCkpOwotICAg
ICAgICAgICAgc2VyaWFsaXplZERhdGEgPSBKU09OU3RyaW5naWZ5KGRvY3VtZW50LmV4ZWNTdGF0
ZSgpLCBwYXltZW50TWV0aG9kLmRhdGEuZ2V0KCksIDApOwotICAgICAgICAgICAgaWYgKHNjb3Bl
LmV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBFeGlzdGlu
Z0V4Y2VwdGlvbkVycm9yIH07Ci0gICAgICAgIH0KLSAgICAgICAgc2VyaWFsaXplZE1ldGhvZERh
dGEudW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZSgqaWRlbnRpZmllciksIFdURk1vdmUoc2VyaWFs
aXplZERhdGEpIH0pOwotICAgIH0KLQotICAgIGF1dG8gZXhjZXB0aW9uID0gY2hlY2tBbmRDYW5v
bmljYWxpemVUb3RhbChkZXRhaWxzLnRvdGFsLmFtb3VudCk7Ci0gICAgaWYgKGV4Y2VwdGlvbi5o
YXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbi5yZWxlYXNlRXhjZXB0aW9u
KCk7CitlbnVtIGNsYXNzIFNob3VsZFZhbGlkYXRlUGF5bWVudE1ldGhvZElkZW50aWZpZXIgewor
ICAgIE5vLAorICAgIFllcywKK307CiAKK3N0YXRpYyBFeGNlcHRpb25PcjxzdGQ6OnR1cGxlPFN0
cmluZywgVmVjdG9yPFN0cmluZz4+PiBjaGVja0FuZENhbm9uaWNhbGl6ZURldGFpbHMoSlNDOjpF
eGVjU3RhdGUmIGV4ZWNTdGF0ZSwgUGF5bWVudERldGFpbHNCYXNlJiBkZXRhaWxzLCBib29sIHJl
cXVlc3RTaGlwcGluZywgU2hvdWxkVmFsaWRhdGVQYXltZW50TWV0aG9kSWRlbnRpZmllciBzaG91
bGRWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVudGlmaWVyKQorewogICAgIGZvciAoYXV0byYgaXRl
bSA6IGRldGFpbHMuZGlzcGxheUl0ZW1zKSB7CiAgICAgICAgIGF1dG8gZXhjZXB0aW9uID0gY2hl
Y2tBbmRDYW5vbmljYWxpemVBbW91bnQoaXRlbS5hbW91bnQpOwogICAgICAgICBpZiAoZXhjZXB0
aW9uLmhhc0V4Y2VwdGlvbigpKQpAQCAtMjgwLDcgKzI1OSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxQ
YXltZW50UmVxdWVzdD4+IFBheW1lbnRSZXF1ZXN0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50
LCBWZWN0CiAgICAgfQogCiAgICAgU3RyaW5nIHNlbGVjdGVkU2hpcHBpbmdPcHRpb247Ci0gICAg
aWYgKG9wdGlvbnMucmVxdWVzdFNoaXBwaW5nKSB7CisgICAgaWYgKHJlcXVlc3RTaGlwcGluZykg
ewogICAgICAgICBIYXNoU2V0PFN0cmluZz4gc2VlblNoaXBwaW5nT3B0aW9uSURzOwogICAgICAg
ICBmb3IgKGF1dG8mIHNoaXBwaW5nT3B0aW9uIDogZGV0YWlscy5zaGlwcGluZ09wdGlvbnMpIHsK
ICAgICAgICAgICAgIGF1dG8gZXhjZXB0aW9uID0gY2hlY2tBbmRDYW5vbmljYWxpemVBbW91bnQo
c2hpcHBpbmdPcHRpb24uYW1vdW50KTsKQEAgLTI5OSw2ICsyNzgsMTIgQEAgRXhjZXB0aW9uT3I8
UmVmPFBheW1lbnRSZXF1ZXN0Pj4gUGF5bWVudFJlcXVlc3Q6OmNyZWF0ZShEb2N1bWVudCYgZG9j
dW1lbnQsIFZlY3QKICAgICBWZWN0b3I8U3RyaW5nPiBzZXJpYWxpemVkTW9kaWZpZXJEYXRhOwog
ICAgIHNlcmlhbGl6ZWRNb2RpZmllckRhdGEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXRhaWxz
Lm1vZGlmaWVycy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgbW9kaWZpZXIgOiBkZXRhaWxzLm1v
ZGlmaWVycykgeworICAgICAgICBpZiAoc2hvdWxkVmFsaWRhdGVQYXltZW50TWV0aG9kSWRlbnRp
ZmllciA9PSBTaG91bGRWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVudGlmaWVyOjpZZXMpIHsKKyAg
ICAgICAgICAgIGF1dG8gcGF5bWVudE1ldGhvZElkZW50aWZpZXIgPSBjb252ZXJ0QW5kVmFsaWRh
dGVQYXltZW50TWV0aG9kSWRlbnRpZmllcihtb2RpZmllci5zdXBwb3J0ZWRNZXRob2RzKTsKKyAg
ICAgICAgICAgIGlmICghcGF5bWVudE1ldGhvZElkZW50aWZpZXIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFJhbmdlRXJyb3IsIG1ha2VTdHJpbmcoIlwiIiwgbW9kaWZpZXIu
c3VwcG9ydGVkTWV0aG9kcywgIlwiIGlzIGFuIGludmFsaWQgcGF5bWVudCBtZXRob2QgaWRlbnRp
Zmllci4iKSB9OworICAgICAgICB9CisKICAgICAgICAgaWYgKG1vZGlmaWVyLnRvdGFsKSB7CiAg
ICAgICAgICAgICBhdXRvIGV4Y2VwdGlvbiA9IGNoZWNrQW5kQ2Fub25pY2FsaXplVG90YWwobW9k
aWZpZXIudG90YWwtPmFtb3VudCk7CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uLmhhc0V4Y2Vw
dGlvbigpKQpAQCAtMzEzLDE1ICsyOTgsNTcgQEAgRXhjZXB0aW9uT3I8UmVmPFBheW1lbnRSZXF1
ZXN0Pj4gUGF5bWVudFJlcXVlc3Q6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3QKIAog
ICAgICAgICBTdHJpbmcgc2VyaWFsaXplZERhdGE7CiAgICAgICAgIGlmIChtb2RpZmllci5kYXRh
KSB7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShkb2N1bWVu
dC5leGVjU3RhdGUoKS0+dm0oKSk7Ci0gICAgICAgICAgICBzZXJpYWxpemVkRGF0YSA9IEpTT05T
dHJpbmdpZnkoZG9jdW1lbnQuZXhlY1N0YXRlKCksIG1vZGlmaWVyLmRhdGEuZ2V0KCksIDApOwor
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlY1N0YXRlLnZt
KCkpOworICAgICAgICAgICAgc2VyaWFsaXplZERhdGEgPSBKU09OU3RyaW5naWZ5KCZleGVjU3Rh
dGUsIG1vZGlmaWVyLmRhdGEuZ2V0KCksIDApOwogICAgICAgICAgICAgaWYgKHNjb3BlLmV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2Vw
dGlvbkVycm9yIH07CisgICAgICAgICAgICBtb2RpZmllci5kYXRhLmNsZWFyKCk7CiAgICAgICAg
IH0KICAgICAgICAgc2VyaWFsaXplZE1vZGlmaWVyRGF0YS51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZShzZXJpYWxpemVkRGF0YSkpOwogICAgIH0KIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBh
eW1lbnRSZXF1ZXN0KGRvY3VtZW50LCBXVEZNb3ZlKG9wdGlvbnMpLCBXVEZNb3ZlKGRldGFpbHMp
LCBXVEZNb3ZlKHNlcmlhbGl6ZWRNb2RpZmllckRhdGEpLCBXVEZNb3ZlKHNlcmlhbGl6ZWRNZXRo
b2REYXRhKSwgV1RGTW92ZShzZWxlY3RlZFNoaXBwaW5nT3B0aW9uKSkpOworICAgIHJldHVybiBz
dGQ6Om1ha2VfdHVwbGUoV1RGTW92ZShzZWxlY3RlZFNoaXBwaW5nT3B0aW9uKSwgV1RGTW92ZShz
ZXJpYWxpemVkTW9kaWZpZXJEYXRhKSk7Cit9CisKKy8vIEltcGxlbWVudHMgdGhlIFBheW1lbnRS
ZXF1ZXN0IENvbnN0cnVjdG9yCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvcGF5bWVudC1yZXF1
ZXN0LyNjb25zdHJ1Y3RvcgorRXhjZXB0aW9uT3I8UmVmPFBheW1lbnRSZXF1ZXN0Pj4gUGF5bWVu
dFJlcXVlc3Q6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3RvcjxQYXltZW50TWV0aG9k
RGF0YT4mJiBtZXRob2REYXRhLCBQYXltZW50RGV0YWlsc0luaXQmJiBkZXRhaWxzLCBQYXltZW50
T3B0aW9ucyYmIG9wdGlvbnMpCit7CisgICAgLy8gRklYTUU6IENoZWNrIGlmIHRoaXMgZG9jdW1l
bnQgaXMgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIFBheW1lbnRSZXF1ZXN0IEFQSSBiYXNlZCBvbiB0
aGUgYWxsb3dwYXltZW50cmVxdWVzdCBhdHRyaWJ1dGUuCisKKyAgICBpZiAoZGV0YWlscy5pZC5p
c051bGwoKSkKKyAgICAgICAgZGV0YWlscy5pZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmco
KTsKKworICAgIGlmIChtZXRob2REYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFR5cGVFcnJvciwgQVNDSUlMaXRlcmFsKCJBdCBsZWFzdCBvbmUgcGF5bWVudCBtZXRo
b2QgaXMgcmVxdWlyZWQuIikgfTsKKworICAgIFZlY3RvcjxNZXRob2Q+IHNlcmlhbGl6ZWRNZXRo
b2REYXRhOworICAgIHNlcmlhbGl6ZWRNZXRob2REYXRhLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bWV0aG9kRGF0YS5zaXplKCkpOworICAgIGZvciAoYXV0byYgcGF5bWVudE1ldGhvZCA6IG1ldGhv
ZERhdGEpIHsKKyAgICAgICAgYXV0byBpZGVudGlmaWVyID0gY29udmVydEFuZFZhbGlkYXRlUGF5
bWVudE1ldGhvZElkZW50aWZpZXIocGF5bWVudE1ldGhvZC5zdXBwb3J0ZWRNZXRob2RzKTsKKyAg
ICAgICAgaWYgKCFpZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFJh
bmdlRXJyb3IsIG1ha2VTdHJpbmcoIlwiIiwgcGF5bWVudE1ldGhvZC5zdXBwb3J0ZWRNZXRob2Rz
LCAiXCIgaXMgYW4gaW52YWxpZCBwYXltZW50IG1ldGhvZCBpZGVudGlmaWVyLiIpIH07CisKKyAg
ICAgICAgU3RyaW5nIHNlcmlhbGl6ZWREYXRhOworICAgICAgICBpZiAocGF5bWVudE1ldGhvZC5k
YXRhKSB7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShkb2N1
bWVudC5leGVjU3RhdGUoKS0+dm0oKSk7CisgICAgICAgICAgICBzZXJpYWxpemVkRGF0YSA9IEpT
T05TdHJpbmdpZnkoZG9jdW1lbnQuZXhlY1N0YXRlKCksIHBheW1lbnRNZXRob2QuZGF0YS5nZXQo
KSwgMCk7CisgICAgICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IgfTsKKyAgICAgICAg
fQorICAgICAgICBzZXJpYWxpemVkTWV0aG9kRGF0YS51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3Zl
KCppZGVudGlmaWVyKSwgV1RGTW92ZShzZXJpYWxpemVkRGF0YSkgfSk7CisgICAgfQorCisgICAg
YXV0byB0b3RhbFJlc3VsdCA9IGNoZWNrQW5kQ2Fub25pY2FsaXplVG90YWwoZGV0YWlscy50b3Rh
bC5hbW91bnQpOworICAgIGlmICh0b3RhbFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIHRvdGFsUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKworICAgIGF1dG8gZGV0YWls
c1Jlc3VsdCA9IGNoZWNrQW5kQ2Fub25pY2FsaXplRGV0YWlscygqZG9jdW1lbnQuZXhlY1N0YXRl
KCksIGRldGFpbHMsIG9wdGlvbnMucmVxdWVzdFNoaXBwaW5nLCBTaG91bGRWYWxpZGF0ZVBheW1l
bnRNZXRob2RJZGVudGlmaWVyOjpObyk7CisgICAgaWYgKGRldGFpbHNSZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBkZXRhaWxzUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsK
KworICAgIGF1dG8gc2hpcHBpbmdPcHRpb25BbmRNb2RpZmllckRhdGEgPSBkZXRhaWxzUmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBheW1lbnRS
ZXF1ZXN0KGRvY3VtZW50LCBXVEZNb3ZlKG9wdGlvbnMpLCBXVEZNb3ZlKGRldGFpbHMpLCBXVEZN
b3ZlKHN0ZDo6Z2V0PDE+KHNoaXBwaW5nT3B0aW9uQW5kTW9kaWZpZXJEYXRhKSksIFdURk1vdmUo
c2VyaWFsaXplZE1ldGhvZERhdGEpLCBXVEZNb3ZlKHN0ZDo6Z2V0PDA+KHNoaXBwaW5nT3B0aW9u
QW5kTW9kaWZpZXJEYXRhKSkpKTsKIH0KIAogUGF5bWVudFJlcXVlc3Q6OlBheW1lbnRSZXF1ZXN0
KERvY3VtZW50JiBkb2N1bWVudCwgUGF5bWVudE9wdGlvbnMmJiBvcHRpb25zLCBQYXltZW50RGV0
YWlsc0luaXQmJiBkZXRhaWxzLCBWZWN0b3I8U3RyaW5nPiYmIHNlcmlhbGl6ZWRNb2RpZmllckRh
dGEsIFZlY3RvcjxNZXRob2Q+JiYgc2VyaWFsaXplZE1ldGhvZERhdGEsIFN0cmluZyYmIHNlbGVj
dGVkU2hpcHBpbmdPcHRpb24pCkBAIC00MDgsNyArNDM1LDcgQEAgdm9pZCBQYXltZW50UmVxdWVz
dDo6c2hvdyhEb2N1bWVudCYgZG9jdW1lbnQsIFNob3dQcm9taXNlJiYgcHJvbWlzZSkKICAgICBz
ZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7IC8vIHVuc2V0UGVuZGluZ0FjdGl2aXR5KCkgaXMgY2Fs
bGVkIGJlbG93IGluIHN0b3AoKQogfQogCi12b2lkIFBheW1lbnRSZXF1ZXN0OjpzdG9wKCkKK3Zv
aWQgUGF5bWVudFJlcXVlc3Q6OmFib3J0V2l0aEV4Y2VwdGlvbihFeGNlcHRpb24mJiBleGNlcHRp
b24pCiB7CiAgICAgaWYgKG1fc3RhdGUgIT0gU3RhdGU6OkludGVyYWN0aXZlKQogICAgICAgICBy
ZXR1cm47CkBAIC00MjAsNyArNDQ3LDEyIEBAIHZvaWQgUGF5bWVudFJlcXVlc3Q6OnN0b3AoKQog
CiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OkludGVyYWN0aXZlKTsKICAgICBtX3N0YXRl
ID0gU3RhdGU6OkNsb3NlZDsKLSAgICBtX3Nob3dQcm9taXNlLT5yZWplY3QoRXhjZXB0aW9uIHsg
QWJvcnRFcnJvciB9KTsKKyAgICBtX3Nob3dQcm9taXNlLT5yZWplY3QoV1RGTW92ZShleGNlcHRp
b24pKTsKK30KKwordm9pZCBQYXltZW50UmVxdWVzdDo6c3RvcCgpCit7CisgICAgYWJvcnRXaXRo
RXhjZXB0aW9uKEV4Y2VwdGlvbiB7IEFib3J0RXJyb3IgfSk7CiB9CiAKIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9wYXltZW50LXJlcXVlc3QvI2Fib3J0KCktbWV0aG9kCkBAIC00OTIsMTQgKzUy
NCwxMDQgQEAgdm9pZCBQYXltZW50UmVxdWVzdDo6c2hpcHBpbmdBZGRyZXNzQ2hhbmdlZChSZWY8
UGF5bWVudEFkZHJlc3M+JiYgc2hpcHBpbmdBZGRyZXMKIHsKICAgICBBU1NFUlQobV9zdGF0ZSA9
PSBTdGF0ZTo6SW50ZXJhY3RpdmUpOwogICAgIG1fc2hpcHBpbmdBZGRyZXNzID0gV1RGTW92ZShz
aGlwcGluZ0FkZHJlc3MpOwotICAgIC8vIEZJWE1FOiBydW4gdGhlIFBheW1lbnRSZXF1ZXN0IHVw
ZGF0ZWQgYWxnb3JpdGhtLgorICAgIGRpc3BhdGNoVXBkYXRlRXZlbnQoZXZlbnROYW1lcygpLnNo
aXBwaW5nYWRkcmVzc2NoYW5nZUV2ZW50KTsKIH0KIAogdm9pZCBQYXltZW50UmVxdWVzdDo6c2hp
cHBpbmdPcHRpb25DaGFuZ2VkKGNvbnN0IFN0cmluZyYgc2hpcHBpbmdPcHRpb24pCiB7CiAgICAg
QVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OkludGVyYWN0aXZlKTsKICAgICBtX3NoaXBwaW5nT3B0
aW9uID0gc2hpcHBpbmdPcHRpb247Ci0gICAgLy8gRklYTUU6IHJ1biB0aGUgUGF5bWVudFJlcXVl
c3QgdXBkYXRlZCBhbGdvcml0aG0uCisgICAgZGlzcGF0Y2hVcGRhdGVFdmVudChldmVudE5hbWVz
KCkuc2hpcHBpbmdvcHRpb25jaGFuZ2VFdmVudCk7Cit9CisKK3ZvaWQgUGF5bWVudFJlcXVlc3Q6
OmRpc3BhdGNoVXBkYXRlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQoreworICAgIGlm
IChtX2lzVXBkYXRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXRlICE9IFN0
YXRlOjpJbnRlcmFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBldmVudCA9IFBh
eW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ6OmNyZWF0ZSh0eXBlLCAqdGhpcyk7CisgICAgZGlzcGF0
Y2hFdmVudChldmVudC5nZXQoKSk7Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+IFBheW1lbnRSZXF1
ZXN0Ojp1cGRhdGVXaXRoKFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQmIGV2ZW50LCBSZWY8RE9N
UHJvbWlzZT4mJiBwcm9taXNlKQoreworICAgIGlmICghZXZlbnQuaXNUcnVzdGVkKCkpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgaWYgKGV2
ZW50LndhaXRGb3JVcGRhdGUoKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRT
dGF0ZUVycm9yIH07CisKKyAgICBpZiAobV9zdGF0ZSAhPSBTdGF0ZTo6SW50ZXJhY3RpdmUpCisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgaWYg
KG1faXNVcGRhdGluZykKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CisKKyAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICBldmVudC5zdG9wSW1t
ZWRpYXRlUHJvcGFnYXRpb24oKTsKKyAgICBldmVudC5zZXRXYWl0Rm9yVXBkYXRlKHRydWUpOwor
ICAgIG1faXNVcGRhdGluZyA9IHRydWU7CisKKyAgICBtX2RldGFpbHNQcm9taXNlID0gV1RGTW92
ZShwcm9taXNlKTsKKyAgICBtX2RldGFpbHNQcm9taXNlLT53aGVuU2V0dGxlZChbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWZQdHIodGhpcyksIHR5cGUgPSBldmVudC50eXBlKCldKCkgewor
ICAgICAgICBzZXR0bGVEZXRhaWxzUHJvbWlzZSh0eXBlKTsKKyAgICB9KTsKKworICAgIHJldHVy
biB7IH07Cit9CisKK3ZvaWQgUGF5bWVudFJlcXVlc3Q6OnNldHRsZURldGFpbHNQcm9taXNlKGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29w
ZUV4aXQoWyZdIHsKKyAgICAgICAgbV9pc1VwZGF0aW5nID0gZmFsc2U7CisgICAgfSk7CisKKyAg
ICBpZiAobV9kZXRhaWxzUHJvbWlzZS0+c3RhdHVzKCkgPT0gRE9NUHJvbWlzZTo6U3RhdHVzOjpS
ZWplY3RlZCkgeworICAgICAgICBzdG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvJiBjb250ZXh0ID0gKm1fZGV0YWlsc1Byb21pc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGNvbnRleHQu
dm0oKSk7CisgICAgYXV0byBwYXltZW50RGV0YWlsc1VwZGF0ZSA9IGNvbnZlcnREaWN0aW9uYXJ5
PFBheW1lbnREZXRhaWxzVXBkYXRlPigqY29udGV4dC5leGVjU3RhdGUoKSwgbV9kZXRhaWxzUHJv
bWlzZS0+cmVzdWx0KCkpOworICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSB7CisgICAg
ICAgIGFib3J0V2l0aEV4Y2VwdGlvbihFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9y
IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byB0b3RhbFJlc3VsdCA9IGNo
ZWNrQW5kQ2Fub25pY2FsaXplVG90YWwocGF5bWVudERldGFpbHNVcGRhdGUudG90YWwuYW1vdW50
KTsKKyAgICBpZiAodG90YWxSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgYWJvcnRX
aXRoRXhjZXB0aW9uKHRvdGFsUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBhdXRvIGRldGFpbHNSZXN1bHQgPSBjaGVja0FuZENhbm9uaWNh
bGl6ZURldGFpbHMoKmNvbnRleHQuZXhlY1N0YXRlKCksIHBheW1lbnREZXRhaWxzVXBkYXRlLCBt
X29wdGlvbnMucmVxdWVzdFNoaXBwaW5nLCBTaG91bGRWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVu
dGlmaWVyOjpZZXMpOworICAgIGlmIChkZXRhaWxzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIGFib3J0V2l0aEV4Y2VwdGlvbihkZXRhaWxzUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHNoaXBwaW5nT3B0aW9uQW5k
TW9kaWZpZXJEYXRhID0gZGV0YWlsc1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKworICAg
IG1fZGV0YWlscy50b3RhbCA9IFdURk1vdmUocGF5bWVudERldGFpbHNVcGRhdGUudG90YWwpOwor
ICAgIG1fZGV0YWlscy5kaXNwbGF5SXRlbXMgPSBXVEZNb3ZlKHBheW1lbnREZXRhaWxzVXBkYXRl
LmRpc3BsYXlJdGVtcyk7CisgICAgaWYgKG1fb3B0aW9ucy5yZXF1ZXN0U2hpcHBpbmcpIHsKKyAg
ICAgICAgbV9kZXRhaWxzLnNoaXBwaW5nT3B0aW9ucyA9IFdURk1vdmUocGF5bWVudERldGFpbHNV
cGRhdGUuc2hpcHBpbmdPcHRpb25zKTsKKyAgICAgICAgbV9zaGlwcGluZ09wdGlvbiA9IFdURk1v
dmUoc3RkOjpnZXQ8MD4oc2hpcHBpbmdPcHRpb25BbmRNb2RpZmllckRhdGEpKTsKKyAgICB9CisK
KyAgICBtX2RldGFpbHMubW9kaWZpZXJzID0gV1RGTW92ZShwYXltZW50RGV0YWlsc1VwZGF0ZS5t
b2RpZmllcnMpOworICAgIG1fc2VyaWFsaXplZE1vZGlmaWVyRGF0YSA9IFdURk1vdmUoc3RkOjpn
ZXQ8MT4oc2hpcHBpbmdPcHRpb25BbmRNb2RpZmllckRhdGEpKTsKKworICAgIGlmICh0eXBlID09
IGV2ZW50TmFtZXMoKS5zaGlwcGluZ2FkZHJlc3NjaGFuZ2VFdmVudCkKKyAgICAgICAgbV9hY3Rp
dmVQYXltZW50SGFuZGxlci0+c2hpcHBpbmdBZGRyZXNzVXBkYXRlZChwYXltZW50RGV0YWlsc1Vw
ZGF0ZS5lcnJvcik7CisgICAgZWxzZSBpZiAodHlwZSA9PSBldmVudE5hbWVzKCkuc2hpcHBpbmdv
cHRpb25jaGFuZ2VFdmVudCkKKyAgICAgICAgbV9hY3RpdmVQYXltZW50SGFuZGxlci0+c2hpcHBp
bmdPcHRpb25VcGRhdGVkKCk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBQYXltZW50UmVxdWVzdDo6YWNjZXB0KGNvbnN0IFN0cmluZyYgbWV0aG9k
TmFtZSwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mJiBkZXRhaWxzLCBSZWY8UGF5bWVudEFk
ZHJlc3M+JiYgc2hpcHBpbmdBZGRyZXNzLCBjb25zdCBTdHJpbmcmIHBheWVyTmFtZSwgY29uc3Qg
U3RyaW5nJiBwYXllckVtYWlsLCBjb25zdCBTdHJpbmcmIHBheWVyUGhvbmUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0LmgK
aW5kZXggYThkYTRkMTk2MzNiZmI2NDY5ZjBkMThmZGIyNjNjOWQ1MjJhODFlMy4uMzA4MGFhMzM1
MDQxYWQ3Njg3NTU1ZTdlMGZhNGJmYjc3ZmNhODAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3QuaApAQCAtNDEsNiAr
NDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFBheW1l
bnRBZGRyZXNzOwogY2xhc3MgUGF5bWVudEhhbmRsZXI7CitjbGFzcyBQYXltZW50UmVxdWVzdFVw
ZGF0ZUV2ZW50OwogY2xhc3MgUGF5bWVudFJlc3BvbnNlOwogZW51bSBjbGFzcyBQYXltZW50Q29t
cGxldGU7CiBlbnVtIGNsYXNzIFBheW1lbnRTaGlwcGluZ1R5cGU7CkBAIC02OSw2ICs3MCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2hpcHBpbmdBZGRyZXNzQ2hhbmdlZChSZWY8UGF5bWVudEFk
ZHJlc3M+JiYpOwogICAgIHZvaWQgc2hpcHBpbmdPcHRpb25DaGFuZ2VkKGNvbnN0IFN0cmluZyYg
c2hpcHBpbmdPcHRpb24pOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHVwZGF0ZVdpdGgoUGF5bWVu
dFJlcXVlc3RVcGRhdGVFdmVudCYsIFJlZjxET01Qcm9taXNlPiYmKTsKICAgICB2b2lkIGFjY2Vw
dChjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiYg
ZGV0YWlscywgUmVmPFBheW1lbnRBZGRyZXNzPiYmIHNoaXBwaW5nQWRkcmVzcywgY29uc3QgU3Ry
aW5nJiBwYXllck5hbWUsIGNvbnN0IFN0cmluZyYgcGF5ZXJFbWFpbCwgY29uc3QgU3RyaW5nJiBw
YXllclBob25lKTsKICAgICB2b2lkIGNvbXBsZXRlKHN0ZDo6b3B0aW9uYWw8UGF5bWVudENvbXBs
ZXRlPiYmKTsKIApAQCAtOTAsNiArOTIsMTAgQEAgcHJpdmF0ZToKIAogICAgIFBheW1lbnRSZXF1
ZXN0KERvY3VtZW50JiwgUGF5bWVudE9wdGlvbnMmJiwgUGF5bWVudERldGFpbHNJbml0JiYsIFZl
Y3RvcjxTdHJpbmc+JiYgc2VyaWFsaXplZE1vZGlmaWVyRGF0YSwgVmVjdG9yPE1ldGhvZD4mJiBz
ZXJpYWxpemVkTWV0aG9kRGF0YSwgU3RyaW5nJiYgc2VsZWN0ZWRTaGlwcGluZ09wdGlvbik7CiAK
KyAgICB2b2lkIGRpc3BhdGNoVXBkYXRlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsK
KyAgICB2b2lkIHNldHRsZURldGFpbHNQcm9taXNlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7
CisgICAgdm9pZCBhYm9ydFdpdGhFeGNlcHRpb24oRXhjZXB0aW9uJiYpOworCiAgICAgLy8gQWN0
aXZlRE9NT2JqZWN0CiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuICJQYXltZW50UmVxdWVzdCI7IH0KICAgICBib29sIGNhblN1c3BlbmRG
b3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBmaW5hbDsKQEAgLTExMCw2ICsxMTYsOCBAQCBw
cml2YXRlOgogICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6Q3JlYXRlZCB9OwogICAgIHN0ZDo6
b3B0aW9uYWw8U2hvd1Byb21pc2U+IG1fc2hvd1Byb21pc2U7CiAgICAgUmVmUHRyPFBheW1lbnRI
YW5kbGVyPiBtX2FjdGl2ZVBheW1lbnRIYW5kbGVyOworICAgIFJlZlB0cjxET01Qcm9taXNlPiBt
X2RldGFpbHNQcm9taXNlOworICAgIGJvb2wgbV9pc1VwZGF0aW5nIHsgZmFsc2UgfTsKIH07CiAK
IHN0ZDo6b3B0aW9uYWw8UGF5bWVudFJlcXVlc3Q6Ok1ldGhvZElkZW50aWZpZXI+IGNvbnZlcnRB
bmRWYWxpZGF0ZVBheW1lbnRNZXRob2RJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmll
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1Bh
eW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXlt
ZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmNwcAppbmRleCBjMTc3YTQ4NWJh
YWQxNTgwYjYwMmZjNDBhNjMwYmZiZTUzOWFiOWY1Li5jZWVkYmQxYmYyYjlmMTBiYWQ2ZTFlYTVm
ZmQwM2MzZDM0YWM3NTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BheW1l
bnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudC5jcHAK
QEAgLTI4LDEyICsyOCwzMSBAQAogCiAjaWYgRU5BQkxFKFBBWU1FTlRfUkVRVUVTVCkKIAorI2lu
Y2x1ZGUgIlBheW1lbnRSZXF1ZXN0LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGF5bWVu
dFJlcXVlc3RVcGRhdGVFdmVudDo6UGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnRJbml0JiYgZXZlbnRJbml0
KQorICAgIDogRXZlbnQgeyB0eXBlLCBXVEZNb3ZlKGV2ZW50SW5pdCksIElzVHJ1c3RlZDo6Tm8g
fQoreworfQorCitQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50OjpQYXltZW50UmVxdWVzdFVwZGF0
ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgUGF5bWVudFJlcXVlc3QmIHBheW1lbnRS
ZXF1ZXN0KQorICAgIDogRXZlbnQgeyB0eXBlLCBmYWxzZSwgZmFsc2UgfQorICAgICwgbV9wYXlt
ZW50UmVxdWVzdCB7ICZwYXltZW50UmVxdWVzdCB9Cit7Cit9CisKIFBheW1lbnRSZXF1ZXN0VXBk
YXRlRXZlbnQ6On5QYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50KCkgPSBkZWZhdWx0OwogCi12b2lk
IFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ6OnVwZGF0ZVdpdGgoUmVmPERPTVByb21pc2U+JiYp
CitFeGNlcHRpb25Pcjx2b2lkPiBQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50Ojp1cGRhdGVXaXRo
KFJlZjxET01Qcm9taXNlPiYmIGRldGFpbHNQcm9taXNlKQoreworICAgIHJldHVybiBtX3BheW1l
bnRSZXF1ZXN0LT51cGRhdGVXaXRoKCp0aGlzLCBXVEZNb3ZlKGRldGFpbHNQcm9taXNlKSk7Cit9
CisKK0V2ZW50SW50ZXJmYWNlIFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ6OmV2ZW50SW50ZXJm
YWNlKCkgY29uc3QKIHsKKyAgICByZXR1cm4gUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudEludGVy
ZmFjZVR5cGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGF5bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVu
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVz
dFVwZGF0ZUV2ZW50LmgKaW5kZXggNjE2ZWY4YjE3NTMwMzE0OTY3ZTYzMGJhOTY5ZDdjYTYxODNm
MDVhMi4uNGZhZDY0NDhiNDFmZGUzYzlhNTQyZTY2NmVhYjkwNzRkZWRlN2QzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdFVw
ZGF0ZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9Q
YXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmgKQEAgLTI4LDE1ICsyOCwzNSBAQAogI2lmIEVOQUJM
RShQQVlNRU5UX1JFUVVFU1QpCiAKICNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIlBheW1l
bnRSZXF1ZXN0VXBkYXRlRXZlbnRJbml0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRE9NUHJvbWlzZTsKK2NsYXNzIFBheW1lbnRSZXF1ZXN0Oworc3RydWN0IFBheW1lbnRSZXF1
ZXN0VXBkYXRlRXZlbnRJbml0OwogCiBjbGFzcyBQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50IGZp
bmFsIDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4g
QXJncz4gc3RhdGljIFJlZjxQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50PiBjcmVhdGUoQXJncyYm
Li4uIGFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXltZW50UmVx
dWVzdFVwZGF0ZUV2ZW50KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOworICAgIH0KICAg
ICB+UGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudCgpOwotICAgIHZvaWQgdXBkYXRlV2l0aChSZWY8
RE9NUHJvbWlzZT4mJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gdXBkYXRlV2l0aChSZWY8RE9N
UHJvbWlzZT4mJik7CisKKyAgICBib29sIHdhaXRGb3JVcGRhdGUoKSBjb25zdCB7IHJldHVybiBt
X3dhaXRGb3JVcGRhdGU7IH0KKyAgICB2b2lkIHNldFdhaXRGb3JVcGRhdGUoYm9vbCB3YWl0Rm9y
VXBkYXRlKSB7IG1fd2FpdEZvclVwZGF0ZSA9IHdhaXRGb3JVcGRhdGU7IH0KKworcHJpdmF0ZToK
KyAgICBQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
UGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudEluaXQmJik7CisgICAgUGF5bWVudFJlcXVlc3RVcGRh
dGVFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIFBheW1lbnRSZXF1ZXN0Jik7CisKKyAg
ICAvLyBFdmVudAorICAgIEV2ZW50SW50ZXJmYWNlIGV2ZW50SW50ZXJmYWNlKCkgY29uc3QgZmlu
YWw7CisKKyAgICBSZWZQdHI8UGF5bWVudFJlcXVlc3Q+IG1fcGF5bWVudFJlcXVlc3Q7CisgICAg
Ym9vbCBtX3dhaXRGb3JVcGRhdGUgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXltZW50cmVxdWVzdC9Q
YXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGF5
bWVudHJlcXVlc3QvUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudC5pZGwKaW5kZXggN2U1MjI2NGJh
OThhYzZkMTBiYjIxMjU4NWEzNzhhZTEyOGM0YmVkMC4uMTVmOGRiOWRhOWUyOTM1NzE3OTIwNTBm
ODhmYjljODBhYjhkNjM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wYXlt
ZW50cmVxdWVzdC9QYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BheW1lbnRyZXF1ZXN0L1BheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQuaWRs
CkBAIC0yNyw3ICsyNyw4IEBACiAgICAgQ29uZGl0aW9uYWw9UEFZTUVOVF9SRVFVRVNULAogICAg
IENvbnN0cnVjdG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBQYXltZW50UmVxdWVzdFVwZGF0
ZUV2ZW50SW5pdCBldmVudEluaXREaWN0KSwKICAgICBFbmFibGVkQnlTZXR0aW5nPVBheW1lbnRS
ZXF1ZXN0LAorICAgIEV4cG9zZWQ9V2luZG93LAogICAgIFNlY3VyZUNvbnRleHQKIF0gaW50ZXJm
YWNlIFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQgOiBFdmVudCB7Ci0gICAgdm9pZCB1cGRhdGVX
aXRoKFByb21pc2U8UGF5bWVudERldGFpbHNVcGRhdGU+IGRldGFpbHNQcm9taXNlKTsKKyAgICBb
TWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgdXBkYXRlV2l0aChQcm9taXNlPFBheW1lbnREZXRhaWxz
VXBkYXRlPiBkZXRhaWxzUHJvbWlzZSk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9Nb2NrUGF5bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvTW9ja1BheW1lbnRDb29yZGluYXRvci5jcHAKaW5kZXggNWY1MThmMDZhODU2OTIzYTg0ZDA3
M2UwZjFhZjM5ZTJkNjQ4MDE5YS4uZjk3YTI4NWM1NDUzY2M1MTA5OGUzYWExMjJkNjViODkyNTEw
OWRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGF5bWVudENvb3Jk
aW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYXltZW50Q29vcmRp
bmF0b3IuY3BwCkBAIC02MiwxNCArNjIsMTQgQEAgYm9vbCBNb2NrUGF5bWVudENvb3JkaW5hdG9y
OjpjYW5NYWtlUGF5bWVudHMoKQogCiB2b2lkIE1vY2tQYXltZW50Q29vcmRpbmF0b3I6OmNhbk1h
a2VQYXltZW50c1dpdGhBY3RpdmVDYXJkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIEZ1
bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIHsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIodHJ1ZSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgTW9ja1BheW1lbnRDb29yZGluYXRvcjo6
b3BlblBheW1lbnRTZXR1cChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBGdW5jdGlvbjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSB7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRy
dWUpOwogICAgIH0pOwogfQpAQCAtMTAxLDkgKzEwMSwyMyBAQCB2b2lkIE1vY2tQYXltZW50Q29v
cmRpbmF0b3I6OmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGNvbnN0IFBheW1lbnRNZXJjaGFu
dFNlcwogICAgIGRpc3BhdGNoSWZTaG93aW5nKFttYWluRnJhbWUgPSBtYWtlUmVmKG1fbWFpbkZy
YW1lKSwgc2hpcHBpbmdBZGRyZXNzID0gbV9zaGlwcGluZ0FkZHJlc3NdKCkgewogICAgICAgICBB
cHBsZVBheVBheW1lbnRDb250YWN0IGNvbnRhY3QgPSBzaGlwcGluZ0FkZHJlc3M7CiAgICAgICAg
IG1haW5GcmFtZS0+cGF5bWVudENvb3JkaW5hdG9yKCkuZGlkU2VsZWN0U2hpcHBpbmdDb250YWN0
KE1vY2tQYXltZW50Q29udGFjdCB7IFdURk1vdmUoY29udGFjdCkgfSk7CisgICAgfSk7Cit9CiAK
K3ZvaWQgTW9ja1BheW1lbnRDb29yZGluYXRvcjo6Y2hhbmdlU2hpcHBpbmdPcHRpb24oU3RyaW5n
JiYgc2hpcHBpbmdPcHRpb24pCit7CisgICAgZGlzcGF0Y2hJZlNob3dpbmcoW21haW5GcmFtZSA9
IG1ha2VSZWYobV9tYWluRnJhbWUpLCBzaGlwcGluZ09wdGlvbiA9IFdURk1vdmUoc2hpcHBpbmdP
cHRpb24pXSgpIG11dGFibGUgeworICAgICAgICBBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVz
dDo6U2hpcHBpbmdNZXRob2Qgc2hpcHBpbmdNZXRob2Q7CisgICAgICAgIHNoaXBwaW5nTWV0aG9k
LmlkZW50aWZpZXIgPSBXVEZNb3ZlKHNoaXBwaW5nT3B0aW9uKTsKKyAgICAgICAgbWFpbkZyYW1l
LT5wYXltZW50Q29vcmRpbmF0b3IoKS5kaWRTZWxlY3RTaGlwcGluZ01ldGhvZChzaGlwcGluZ01l
dGhvZCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTW9ja1BheW1lbnRDb29yZGluYXRvcjo6YWNjZXB0
UGF5bWVudCgpCit7CisgICAgZGlzcGF0Y2hJZlNob3dpbmcoW21haW5GcmFtZSA9IG1ha2VSZWYo
bV9tYWluRnJhbWUpLCBzaGlwcGluZ0FkZHJlc3MgPSBtX3NoaXBwaW5nQWRkcmVzc10oKSBtdXRh
YmxlIHsKICAgICAgICAgQXBwbGVQYXlQYXltZW50IHBheW1lbnQ7Ci0gICAgICAgIHBheW1lbnQu
c2hpcHBpbmdDb250YWN0ID0gc2hpcHBpbmdBZGRyZXNzOworICAgICAgICBwYXltZW50LnNoaXBw
aW5nQ29udGFjdCA9IFdURk1vdmUoc2hpcHBpbmdBZGRyZXNzKTsKICAgICAgICAgbWFpbkZyYW1l
LT5wYXltZW50Q29vcmRpbmF0b3IoKS5kaWRBdXRob3JpemVQYXltZW50KE1vY2tQYXltZW50IHsg
V1RGTW92ZShwYXltZW50KSB9KTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvTW9ja1BheW1lbnRDb29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrUGF5bWVudENvb3JkaW5hdG9yLmgKaW5kZXggNjllOGNkOTkxOTExNzQzMTJhMTYw
ODI1N2JjNGVhZDk5YTA0MjRjZi4uNmU3YjVmN2ZjODM4NmNlYmM1MDg4MGU5Y2FkOGEwYTk4ZTIy
MGZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGF5bWVudENvb3Jk
aW5hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGF5bWVudENvb3JkaW5h
dG9yLmgKQEAgLTM5LDYgKzM5LDggQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE1vY2tQYXltZW50
Q29vcmRpbmF0b3IoTWFpbkZyYW1lJik7CiAKICAgICB2b2lkIHNldFNoaXBwaW5nQWRkcmVzcyhN
b2NrUGF5bWVudEFkZHJlc3MmJiBzaGlwcGluZ0FkZHJlc3MpIHsgbV9zaGlwcGluZ0FkZHJlc3Mg
PSBXVEZNb3ZlKHNoaXBwaW5nQWRkcmVzcyk7IH0KKyAgICB2b2lkIGNoYW5nZVNoaXBwaW5nT3B0
aW9uKFN0cmluZyYmIHNoaXBwaW5nT3B0aW9uKTsKKyAgICB2b2lkIGFjY2VwdFBheW1lbnQoKTsK
IAogICAgIHZvaWQgcmVmKCkgY29uc3QgeyB9CiAgICAgdm9pZCBkZXJlZigpIGNvbnN0IHsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGF5bWVudENvb3JkaW5hdG9y
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1BheW1lbnRDb29yZGluYXRvci5pZGwK
aW5kZXggZTViYTMwOWFkNmU4NTg2ZjBiYjE4NDJjMWJmZjY1N2E5MTg1NmI5NC4uMWI0ZGMwMTIy
ODVmMWI4N2QxZjI3ZThlMWQ2MDBmYWNjOTA3MDA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9Nb2NrUGF5bWVudENvb3JkaW5hdG9yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL01vY2tQYXltZW50Q29vcmRpbmF0b3IuaWRsCkBAIC0yOCw0ICsyOCw2IEBACiAg
ICAgTm9JbnRlcmZhY2VPYmplY3QsCiBdIGludGVyZmFjZSBNb2NrUGF5bWVudENvb3JkaW5hdG9y
IHsKICAgICB2b2lkIHNldFNoaXBwaW5nQWRkcmVzcyhNb2NrUGF5bWVudEFkZHJlc3Mgc2hpcHBp
bmdBZGRyZXNzKTsKKyAgICB2b2lkIGNoYW5nZVNoaXBwaW5nT3B0aW9uKERPTVN0cmluZyBzaGlw
cGluZ09wdGlvbik7CisgICAgdm9pZCBhY2NlcHRQYXltZW50KCk7CiB9OwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDYyYmUx
NjVlYzg1YjFjNzBlOTA4NmU4MWY2MjZlYzYyZWM3NWQ1NDQuLjJlZWNjM2RiOTkwNjZkOTkyNmE1
YWEyODE0OGIzYWM3NmRhYTQyNzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNy0xMC0yMyAg
QW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CisKKyAgICAgICAgW1BheW1lbnQgUmVxdWVz
dF0gSW1wbGVtZW50IHRoZSAiUGF5bWVudFJlcXVlc3QgdXBkYXRlZCIgYWxnb3JpdGhtCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg2ODkKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICogaHR0cC90ZXN0
cy9wYXltZW50cmVxdWVzdC9wYXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBwaW5nLWFkZHJlc3Mu
aHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BheW1lbnRy
ZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC1jaGFuZ2Utc2hpcHBpbmctYWRkcmVzcy5odHRwcy5odG1s
OiBDb3BpZWQgZnJvbSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3BheW1lbnQtcmVx
dWVzdC9zaGlwcGluZy1hZGRyZXNzLWNoYW5nZWQtbWFudWFsLmh0dHBzLmh0bWwuCisgICAgICAg
ICogaHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC9wYXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBw
aW5nLW9wdGlvbi5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvcGF5bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1ZXN0LWNoYW5nZS1zaGlwcGluZy1vcHRpb24u
aHR0cHMuaHRtbDogQ29waWVkIGZyb20gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9w
YXltZW50LXJlcXVlc3QvY2hhbmdlLXNoaXBwaW5nLW9wdGlvbi1tYW51YWwuaHR0cHMuaHRtbC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3Jlc291cmNlcy9oZWxwZXJzLmpz
OgorICAgICAgICAoYXN5bmMuZ2V0UGF5bWVudFJlcXVlc3RSZXNwb25zZSk6CisgICAgICAgICog
aHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC91cGRhdGVXaXRoLW1ldGhvZC1wbWktaGFuZGxpbmcu
aHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BheW1lbnRy
ZXF1ZXN0L3VwZGF0ZVdpdGgtbWV0aG9kLXBtaS1oYW5kbGluZy5odHRwcy5odG1sOiBDb3BpZWQg
ZnJvbSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3BheW1lbnQtcmVxdWVzdC91cGRh
dGVXaXRoLW1ldGhvZC1wbWktaGFuZGxpbmctbWFudWFsLmh0dHBzLmh0bWwuCisKIDIwMTctMTAt
MjMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBQbGVhc2Ugc3VwcG9ydCBIQVIgRXhwb3J0IGZvciBuZXR3b3JrIHRyYWZmaWMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IGQ1ZmZlNjliNzAwYzJjMTE2OWZlNDY2
ZWIxNWMyZGExN2UxMGJiNDYuLjVlNWJkNjQ2ZDI2OTA2MzIxNWViNzc2OWFhNzQyNjY3ZmI3YTBk
Y2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE3
LTEwLTIzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbUGF5bWVu
dCBSZXF1ZXN0XSBJbXBsZW1lbnQgdGhlICJQYXltZW50UmVxdWVzdCB1cGRhdGVkIiBhbGdvcml0
aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODY4
OQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcGF5bWVudC1yZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC11cGRhdGUt
ZXZlbnQtdXBkYXRld2l0aC1tZXRob2QuaHR0cHMtZXhwZWN0ZWQudHh0OgorCiAyMDE3LTEwLTIy
ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgZHJh
d0ltYWdlKEltYWdlQml0bWFwKSBvbiAyZCBjYW52YXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1ZXN0LWNoYW5nZS1zaGlwcGlu
Zy1hZGRyZXNzLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5
bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1ZXN0LWNoYW5nZS1zaGlwcGluZy1hZGRyZXNzLmh0dHBz
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmUzZjE4M2Q5NzUzN2I3NGRlZmYyOWMwOTVhNzU3
MWZlYzRmYmZiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wYXlt
ZW50cmVxdWVzdC9wYXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBwaW5nLWFkZHJlc3MuaHR0cHMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIFRlc3QgZm9yIFBheW1lbnRSZXF1
ZXN0IHNoaXBwaW5nQWRkcmVzcyBhdHRyaWJ1dGUgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1ZXN0LWNoYW5nZS1zaGlwcGlu
Zy1hZGRyZXNzLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1
ZXN0L3BheW1lbnQtcmVxdWVzdC1jaGFuZ2Utc2hpcHBpbmctYWRkcmVzcy5odHRwcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRiYmNlNDljMzBkZDA5ZGU3ZjMyODA2NDRjNjNmMGM2Zjc5NjlmZTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3BheW1l
bnQtcmVxdWVzdC1jaGFuZ2Utc2hpcHBpbmctYWRkcmVzcy5odHRwcy5odG1sCkBAIC0wLDAgKzEs
OTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLSAgQ29weXJpZ2h0IMKpIDIwMTcgQ2hyb21pdW0g
YXV0aG9ycyBhbmQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5z
dGl0dXRlIG9mIFRlY2hub2xvZ3ksIEVSQ0lNLCBLZWlvIFVuaXZlcnNpdHksIEJlaWhhbmcpLiAg
LS0+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+VGVzdCBmb3IgUGF5bWVudFJlcXVl
c3Qgc2hpcHBpbmdBZGRyZXNzIGF0dHJpYnV0ZTwvdGl0bGU+Cis8bGluayByZWw9ImhlbHAiIGhy
ZWY9Imh0dHBzOi8vdzNjLmdpdGh1Yi5pby9wYXltZW50LXJlcXVlc3QvI3NoaXBwaW5nYWRkcmVz
cy1hdHRyaWJ1dGUiPgorPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRwczovL3czYy5naXRodWIu
aW8vcGF5bWVudC1yZXF1ZXN0LyNvbnNoaXBwaW5nYWRkcmVzc2NoYW5nZS1hdHRyaWJ1dGUiPgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KK3NldHVwKHsgZXhwbGljaXRfZG9uZTogdHJ1ZSwgZXhwbGljaXRfdGltZW91dDogdHJ1ZSB9
KTsKK2NvbnN0IGFwcGxlUGF5ID0gT2JqZWN0LmZyZWV6ZSh7CisgICAgc3VwcG9ydGVkTWV0aG9k
czogImh0dHBzOi8vYXBwbGUuY29tL2FwcGxlLXBheSIsCisgICAgZGF0YTogeworICAgICAgICB2
ZXJzaW9uOiAyLAorICAgICAgICBtZXJjaGFudElkZW50aWZpZXI6ICcnLAorICAgICAgICBtZXJj
aGFudENhcGFiaWxpdGllczogWydzdXBwb3J0czNEUyddLAorICAgICAgICBzdXBwb3J0ZWROZXR3
b3JrczogWyd2aXNhJywgJ21hc3RlckNhcmQnXSwKKyAgICAgICAgY291bnRyeUNvZGU6ICdVUycs
CisgICAgfSwKK30pOworY29uc3QgdmFsaWRNZXRob2RzID0gT2JqZWN0LmZyZWV6ZShbYXBwbGVQ
YXldKTsKK2NvbnN0IHZhbGlkQW1vdW50ID0gT2JqZWN0LmZyZWV6ZSh7IGN1cnJlbmN5OiAiVVNE
IiwgdmFsdWU6ICI1LjAwIiB9KTsKK2NvbnN0IHZhbGlkVG90YWwgPSBPYmplY3QuZnJlZXplKHsK
KyAgbGFiZWw6ICJsYWJlbCIsCisgIGFtb3VudDogdmFsaWRBbW91bnQsCit9KTsKK2NvbnN0IHZh
bGlkU2hpcHBpbmdPcHRpb24gPSBPYmplY3QuZnJlZXplKHsKKyAgaWQ6ICJ2YWxpZCIsCisgIGxh
YmVsOiAiU2hpcHBpbmcgT3B0aW9uIiwKKyAgYW1vdW50OiB2YWxpZEFtb3VudCwKKyAgc2VsZWN0
ZWQ6IGZhbHNlLAorfSk7Citjb25zdCB2YWxpZERldGFpbHMgPSBPYmplY3QuZnJlZXplKHsKKyAg
dG90YWw6IHZhbGlkVG90YWwsCisgIHNoaXBwaW5nT3B0aW9uczogW3ZhbGlkU2hpcHBpbmdPcHRp
b25dLAorfSk7Citjb25zdCByZXF1ZXN0U2hpcHBpbmcgPSBPYmplY3QuZnJlZXplKHsKKyAgcmVx
dWVzdFNoaXBwaW5nOiB0cnVlLAorfSk7CisKK2Z1bmN0aW9uIHRlc3RTaGlwcGluZ0FkZHJlc3ND
aGFuZ2UoKSB7CisgIGNvbnN0IHNoaXBwaW5nQWRkcmVzcyA9IHsKKyAgICAgIGNvdW50cnlDb2Rl
OiAnVVMnLAorICAgICAgYWRkcmVzc0xpbmVzOiBbJyddLAorICAgICAgYWRtaW5pc3RyYXRpdmVB
cmVhOiAnJywKKyAgICAgIGxvY2FsaXR5OiAnJywKKyAgICAgIHN1YkxvY2FsaXR5OiAnJywKKyAg
ICAgIHBvc3RhbENvZGU6ICcnLAorICAgICAgbG9jYWxpemVkTmFtZTogJycsCisgICAgICBwaG9u
ZU51bWJlcjogJycsCisgICAgICBlbWFpbEFkZHJlc3M6ICcnLAorICB9OworICBpbnRlcm5hbHMu
bW9ja1BheW1lbnRDb29yZGluYXRvci5zZXRTaGlwcGluZ0FkZHJlc3Moc2hpcHBpbmdBZGRyZXNz
KTsKKyAgcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4geworICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcg
UGF5bWVudFJlcXVlc3QoCisgICAgICB2YWxpZE1ldGhvZHMsCisgICAgICB2YWxpZERldGFpbHMs
CisgICAgICByZXF1ZXN0U2hpcHBpbmcKKyAgICApOworICAgIGFzc2VydF9lcXVhbHMoCisgICAg
ICByZXF1ZXN0LnNoaXBwaW5nQWRkcmVzcywKKyAgICAgIG51bGwsCisgICAgICAicmVxdWVzdC5z
aGlwcGluZ0FkZHJlc3MgbXVzdCBpbml0aWFsbHkgYmUgbnVsbCIKKyAgICApOworICAgIHJlcXVl
c3Qub25hcHBsZXBheXZhbGlkYXRlbWVyY2hhbnQgPSBldmVudCA9PiB7CisgICAgICAgIGV2ZW50
LmNvbXBsZXRlKHsgfSk7CisgICAgfTsKKyAgICBjb25zdCBsaXN0ZW5lclByb21pc2UgPSBuZXcg
UHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigic2hp
cHBpbmdhZGRyZXNzY2hhbmdlIiwgKCkgPT4geworICAgICAgICByZXNvbHZlKHJlcXVlc3Quc2hp
cHBpbmdBZGRyZXNzKTsKKyAgICAgIH0pOworICAgIH0pOworICAgIGNvbnN0IGhhbmRsZXJQcm9t
aXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICByZXF1ZXN0Lm9uc2hpcHBpbmdh
ZGRyZXNzY2hhbmdlID0gKCkgPT4geworICAgICAgICByZXNvbHZlKHJlcXVlc3Quc2hpcHBpbmdB
ZGRyZXNzKTsKKyAgICAgIH07CisgICAgfSk7CisgICAgcmVxdWVzdC5zaG93KCkuY2F0Y2goZXJy
ID0+IGVycik7CisgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFtsaXN0ZW5l
clByb21pc2UsIGhhbmRsZXJQcm9taXNlXSk7CisgICAgYXNzZXJ0X3RydWUoCisgICAgICByZXN1
bHRzLmV2ZXJ5KG9iaiA9PiBvYmogaW5zdGFuY2VvZiBQYXltZW50QWRkcmVzcyksCisgICAgICAi
RXhwZWN0ZWQgaW5zdGFuY2VzIG9mIFBheW1lbnRBZGRyZXNzIgorICAgICk7CisgICAgYXdhaXQg
cmVxdWVzdC5hYm9ydCgpOworICB9KTsKKyAgZG9uZSgpOworfQordGVzdFNoaXBwaW5nQWRkcmVz
c0NoYW5nZSgpOworPC9zY3JpcHQ+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvcGF5bWVudHJlcXVlc3QvcGF5bWVudC1yZXF1ZXN0LWNoYW5nZS1zaGlwcGluZy1vcHRpb24u
aHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wYXltZW50cmVxdWVz
dC9wYXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBwaW5nLW9wdGlvbi5odHRwcy1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzk4NWIzMDUzNjY0YzE0MDRlYTcyNjE5YTVlY2JhMTk4NGRkZjBkMgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3Qv
cGF5bWVudC1yZXF1ZXN0LWNoYW5nZS1zaGlwcGluZy1vcHRpb24uaHR0cHMtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMyBAQAorCitQQVNTIFRlc3QgZm9yIFBheW1lbnRSZXF1ZXN0IHNoaXBwaW5n
T3B0aW9uIGF0dHJpYnV0ZSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9w
YXltZW50cmVxdWVzdC9wYXltZW50LXJlcXVlc3QtY2hhbmdlLXNoaXBwaW5nLW9wdGlvbi5odHRw
cy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC9wYXltZW50LXJl
cXVlc3QtY2hhbmdlLXNoaXBwaW5nLW9wdGlvbi5odHRwcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1NzQ5
NTNhYmFjMTJmNzIyMzcyNTc0ZmI2MWViNzJjODU5YjYwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BheW1lbnRyZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC1jaGFu
Z2Utc2hpcHBpbmctb3B0aW9uLmh0dHBzLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8IS0tICBDb3B5cmlnaHQgwqkgMjAxNyBDaHJvbWl1bSBhdXRob3JzIGFuZCBXb3Js
ZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5v
bG9neSwgRVJDSU0sIEtlaW8gVW5pdmVyc2l0eSwgQmVpaGFuZykuICAtLT4KKzwhLS0gIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAtLT4KKzwhLS0g
RklYTUU6IFVwc3RyZWFtIHRoaXMgdGVzdCB0byB3ZWItcGxhdGZvcm0tdGVzdHMvcGF5bWVudC1y
ZXF1ZXN0Ly4gLS0+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+VGVzdCBmb3IgUGF5
bWVudFJlcXVlc3Qgc2hpcHBpbmdPcHRpb24gYXR0cmlidXRlPC90aXRsZT4KKzxsaW5rIHJlbD0i
aGVscCIgaHJlZj0iaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3BheW1lbnQtcmVxdWVzdC8jc2hpcHBp
bmdvcHRpb24tYXR0cmlidXRlIj4KKzxsaW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cHM6Ly93M2Mu
Z2l0aHViLmlvL3BheW1lbnQtcmVxdWVzdC8jb25zaGlwcGluZ29wdGlvbmNoYW5nZS1hdHRyaWJ1
dGUiPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KK3NldHVwKHsgZXhwbGljaXRfZG9uZTogdHJ1ZSwgZXhwbGljaXRfdGltZW91dDog
dHJ1ZSB9KTsKK2NvbnN0IGFwcGxlUGF5ID0gT2JqZWN0LmZyZWV6ZSh7CisgICAgc3VwcG9ydGVk
TWV0aG9kczogImh0dHBzOi8vYXBwbGUuY29tL2FwcGxlLXBheSIsCisgICAgZGF0YTogeworICAg
ICAgICB2ZXJzaW9uOiAyLAorICAgICAgICBtZXJjaGFudElkZW50aWZpZXI6ICcnLAorICAgICAg
ICBtZXJjaGFudENhcGFiaWxpdGllczogWydzdXBwb3J0czNEUyddLAorICAgICAgICBzdXBwb3J0
ZWROZXR3b3JrczogWyd2aXNhJywgJ21hc3RlckNhcmQnXSwKKyAgICAgICAgY291bnRyeUNvZGU6
ICdVUycsCisgICAgfSwKK30pOworY29uc3QgdmFsaWRNZXRob2RzID0gT2JqZWN0LmZyZWV6ZShb
YXBwbGVQYXldKTsKK2NvbnN0IHZhbGlkQW1vdW50ID0gT2JqZWN0LmZyZWV6ZSh7IGN1cnJlbmN5
OiAiVVNEIiwgdmFsdWU6ICI1LjAwIiB9KTsKK2NvbnN0IHZhbGlkVG90YWwgPSBPYmplY3QuZnJl
ZXplKHsKKyAgbGFiZWw6ICJsYWJlbCIsCisgIGFtb3VudDogdmFsaWRBbW91bnQsCit9KTsKK2Nv
bnN0IHZhbGlkRGV0YWlscyA9IE9iamVjdC5mcmVlemUoeyB0b3RhbDogdmFsaWRUb3RhbCB9KTsK
KworY29uc3QgdmFsaWRTaGlwcGluZ09wdGlvbjEgPSBPYmplY3QuZnJlZXplKHsKKyAgaWQ6ICJ2
YWxpZC0xIiwKKyAgbGFiZWw6ICJQSUNLIE1FISIsCisgIGFtb3VudDogdmFsaWRBbW91bnQsCisg
IHNlbGVjdGVkOiBmYWxzZSwKK30pOworCitjb25zdCB2YWxpZFNoaXBwaW5nT3B0aW9uMiA9IE9i
amVjdC5mcmVlemUoeworICBpZDogImluaXRpYWxseS1zZWxlY3RlZCIsCisgIGxhYmVsOiAiVmFs
aWQgc2hpcHBpbmcgb3B0aW9uIDIiLAorICBhbW91bnQ6IHZhbGlkQW1vdW50LAorICBzZWxlY3Rl
ZDogdHJ1ZSwKK30pOworCitjb25zdCByZXF1ZXN0U2hpcHBpbmcgPSBPYmplY3QuZnJlZXplKHsK
KyAgcmVxdWVzdFNoaXBwaW5nOiB0cnVlLAorfSk7CisKK2Z1bmN0aW9uIHRlc3RTaGlwcGluZ09w
dGlvbkNoYW5nZWQoKSB7CisgIHByb21pc2VfdGVzdChhc3luYyB0ID0+IHsKKyAgICBjb25zdCBk
ZXRhaWxzV2l0aFNoaXBwaW5nT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHZhbGlkRGV0YWls
cywgeworICAgICAgc2hpcHBpbmdPcHRpb25zOiBbdmFsaWRTaGlwcGluZ09wdGlvbjEsIHZhbGlk
U2hpcHBpbmdPcHRpb24yXSwKKyAgICB9KTsKKyAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFBheW1l
bnRSZXF1ZXN0KAorICAgICAgdmFsaWRNZXRob2RzLAorICAgICAgZGV0YWlsc1dpdGhTaGlwcGlu
Z09wdGlvbnMsCisgICAgICByZXF1ZXN0U2hpcHBpbmcKKyAgICApOworICAgIHJlcXVlc3Qub25h
cHBsZXBheXZhbGlkYXRlbWVyY2hhbnQgPSBldmVudCA9PiB7CisgICAgICAgIGV2ZW50LmNvbXBs
ZXRlKHsgfSk7CisgICAgICAgIGludGVybmFscy5tb2NrUGF5bWVudENvb3JkaW5hdG9yLmNoYW5n
ZVNoaXBwaW5nT3B0aW9uKCJ2YWxpZC0xIik7CisgICAgfTsKKyAgICBhc3NlcnRfZXF1YWxzKAor
ICAgICAgcmVxdWVzdC5zaGlwcGluZ09wdGlvbiwKKyAgICAgICJpbml0aWFsbHktc2VsZWN0ZWQi
LAorICAgICAgIk11c3QgYmUgJ2luaXRpYWxseS1zZWxlY3RlZCcsIGFzIHRoZSBzZWxlY3RlZCBt
ZW1iZXIgaXMgdHJ1ZSIKKyAgICApOworICAgIGNvbnN0IGxpc3RlbmVyUHJvbWlzZSA9IG5ldyBQ
cm9taXNlKHJlc29sdmUgPT4geworICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCJzaGlw
cGluZ29wdGlvbmNoYW5nZSIsICgpID0+IHsKKyAgICAgICAgcmVzb2x2ZShyZXF1ZXN0LnNoaXBw
aW5nT3B0aW9uKTsKKyAgICAgIH0pOworICAgIH0pOworICAgIGNvbnN0IGhhbmRsZXJQcm9taXNl
ID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICByZXF1ZXN0Lm9uc2hpcHBpbmdvcHRp
b25jaGFuZ2UgPSAoKSA9PiB7CisgICAgICAgIHJlc29sdmUocmVxdWVzdC5zaGlwcGluZ09wdGlv
bik7CisgICAgICB9OworICAgIH0pOworICAgIHJlcXVlc3Quc2hvdygpLmNhdGNoKGVyciA9PiBl
cnIpOworCisgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFtsaXN0ZW5lclBy
b21pc2UsIGhhbmRsZXJQcm9taXNlXSk7CisgICAgYXNzZXJ0X3RydWUoCisgICAgICByZXN1bHRz
LmV2ZXJ5KHJlc3VsdCA9PiByZXN1bHQgPT09ICJ2YWxpZC0xIiksCisgICAgICAiRXhwZWN0ZWQg
dmFsaWQtMSBhcyB0aGUgc2hpcHBpbmdPcHRpb24iCisgICAgKTsKKyAgICBhd2FpdCByZXF1ZXN0
LmFib3J0KCk7CisgIH0pOworICBkb25lKCk7Cit9Cit0ZXN0U2hpcHBpbmdPcHRpb25DaGFuZ2Vk
KCk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVu
dHJlcXVlc3QvcmVzb3VyY2VzL2hlbHBlcnMuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Bh
eW1lbnRyZXF1ZXN0L3Jlc291cmNlcy9oZWxwZXJzLmpzCmluZGV4IDAxMjJjMjk0NWMyNjAxMGU0
Mjc1ZDAxM2VkZWUzYWE3NzA4NmM4YTEuLjExNjFlMmNlNDRkNmUzODA4MGNiZWYxMThjZjdhNmY4
NDFjOGRkMzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVl
c3QvcmVzb3VyY2VzL2hlbHBlcnMuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wYXlt
ZW50cmVxdWVzdC9yZXNvdXJjZXMvaGVscGVycy5qcwpAQCAtOTQsNyArOTQsMTAgQEAgYXN5bmMg
ZnVuY3Rpb24gZ2V0UGF5bWVudFJlcXVlc3RSZXNwb25zZShvcHRpb25zLCBpZCkgewogICBjb25z
dCByZXF1ZXN0ID0gbmV3IFBheW1lbnRSZXF1ZXN0KG1ldGhvZHMsIGRldGFpbHMsIG9wdGlvbnMp
OwogICByZXF1ZXN0Lm9uc2hpcHBpbmdhZGRyZXNzY2hhbmdlID0gZXYgPT4gZXYudXBkYXRlV2l0
aChkZXRhaWxzKTsKICAgcmVxdWVzdC5vbnNoaXBwaW5nb3B0aW9uY2hhbmdlID0gZXYgPT4gZXYu
dXBkYXRlV2l0aChkZXRhaWxzKTsKLSAgcmVxdWVzdC5vbmFwcGxlcGF5dmFsaWRhdGVtZXJjaGFu
dCA9IGV2ID0+IGV2LmNvbXBsZXRlKHt9KTsKKyAgcmVxdWVzdC5vbmFwcGxlcGF5dmFsaWRhdGVt
ZXJjaGFudCA9IGV2ID0+IHsKKyAgICAgIGV2LmNvbXBsZXRlKHt9KTsKKyAgICAgIGludGVybmFs
cy5tb2NrUGF5bWVudENvb3JkaW5hdG9yLmFjY2VwdFBheW1lbnQoKTsKKyAgfTsKICAgY29uc3Qg
cmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0LnNob3coKTsKICAgcmV0dXJuIHsgcmVxdWVzdCwgcmVz
cG9uc2UgfTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJl
cXVlc3QvdXBkYXRlV2l0aC1tZXRob2QtcG1pLWhhbmRsaW5nLmh0dHBzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvdXBkYXRlV2l0aC1tZXRob2Qt
cG1pLWhhbmRsaW5nLmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjFiMWU1NGYzNmQ3
YWRlM2IxNzY5YmJiYjRhNmY0OWNmN2IzNDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9wYXltZW50cmVxdWVzdC91cGRhdGVXaXRoLW1ldGhvZC1wbWktaGFuZGxp
bmcuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjEgQEAKK011c3QgdGhyb3cgaWYgdGhl
IFVSTCBoYXMgYSBwYXNzd29yZC4KK011c3QgdGhyb3cgaWYgdGhlIFVSTCBoYXMgYSB1c2VybmFt
ZS4KK011c3QgdGhyb3cgaWYgdGhlIFVSTCBoYXMgYSB1c2VybmFtZSBhbmQgYSBwYXNzd29yZC4K
K011c3QgdGhyb3cgaWYgaXQncyBodHRwLCBhbmQgaGFzIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3Jk
LgorTXVzdCB0aHJvdyBpZiB0aGUgVVJMIGlzIGludmFsaWQgKHBvcnQgcmFuZ2UpLgorTXVzdCB0
aHJvdyBpZiB0aGUgUE1JIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBhcmUgb3V0IG9mIHJhbmdl
LgorTXVzdCB0aHJvdyBpZiBub3QgaHR0cHMuCitNdXN0IHRocm93IGlmIHRoZSBzdGFuZGFyZGl6
ZWQgUE1JIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYXNjaWkgcmFuZ2UuCitNdXN0
IHRocm93IGlmIHN0YW5kYXJkaXplZCBQTUkgaGFzIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLgorCitQ
QVNTIHNtb2tlIHRlc3QgCitQQVNTIE11c3QgdGhyb3cgaWYgdGhlIFVSTCBoYXMgYSBwYXNzd29y
ZC4gCitQQVNTIE11c3QgdGhyb3cgaWYgdGhlIFVSTCBoYXMgYSB1c2VybmFtZS4gCitQQVNTIE11
c3QgdGhyb3cgaWYgdGhlIFVSTCBoYXMgYSB1c2VybmFtZSBhbmQgYSBwYXNzd29yZC4gCitQQVNT
IE11c3QgdGhyb3cgaWYgaXQncyBodHRwLCBhbmQgaGFzIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3Jk
LiAKK1BBU1MgTXVzdCB0aHJvdyBpZiB0aGUgVVJMIGlzIGludmFsaWQgKHBvcnQgcmFuZ2UpLiAK
K1BBU1MgTXVzdCB0aHJvdyBpZiB0aGUgUE1JIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBhcmUg
b3V0IG9mIHJhbmdlLiAKK1BBU1MgTXVzdCB0aHJvdyBpZiBub3QgaHR0cHMuIAorUEFTUyBNdXN0
IHRocm93IGlmIHRoZSBzdGFuZGFyZGl6ZWQgUE1JIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lk
ZSB0aGUgYXNjaWkgcmFuZ2UuIAorUEFTUyBNdXN0IHRocm93IGlmIHN0YW5kYXJkaXplZCBQTUkg
aGFzIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9wYXltZW50cmVxdWVzdC91cGRhdGVXaXRoLW1ldGhvZC1wbWktaGFuZGxpbmcuaHR0
cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvdXBkYXRlV2l0
aC1tZXRob2QtcG1pLWhhbmRsaW5nLmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI3YTZmMjA3MjUx
ZTc2MjZlZDM0ZjM1NDQyY2MxZTAwZWFkMTcwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvcGF5bWVudHJlcXVlc3QvdXBkYXRlV2l0aC1tZXRob2QtcG1pLWhhbmRs
aW5nLmh0dHBzLmh0bWwKQEAgLTAsMCArMSwxNTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLSAg
Q29weXJpZ2h0IMKpIDIwMTcgTW96aWxsYSBhbmQgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwg
KE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEVSQ0lNLCBLZWlvIFVuaXZl
cnNpdHksIEJlaWhhbmcpLiAgLS0+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+VGVz
dCBmb3IgdmFsaWRpdHkgb2YgcGF5bWVudCBtZXRob2QgaWRlbnRpZmllcnMgd2hlbiBjYWxsaW5n
IHVwZGF0ZVdpdGgoKSBtZXRob2Q8L3RpdGxlPgorPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRw
czovL3d3dy53My5vcmcvVFIvcGF5bWVudC1yZXF1ZXN0LyN1cGRhdGV3aXRoKCktbWV0aG9kIj4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CisidXNlIHN0cmljdCI7CitzZXR1cCh7IGV4cGxpY2l0X2RvbmU6IHRydWUsIGV4cGxpY2l0
X3RpbWVvdXQ6IHRydWUgfSk7Citjb25zdCB2YWxpZE1ldGhvZCA9IE9iamVjdC5mcmVlemUoewor
ICBzdXBwb3J0ZWRNZXRob2RzOiAiaHR0cHM6Ly86QHdwdC5meWk6NDQzL3BheW1lbnQtcmVxdWVz
dCIsCit9KTsKKworY29uc3QgdmFsaWRNZXRob2RzID0gT2JqZWN0LmZyZWV6ZShbdmFsaWRNZXRo
b2RdKTsKKworY29uc3QgdmFsaWRBbW91bnQgPSBPYmplY3QuZnJlZXplKHsKKyAgY3VycmVuY3k6
ICJVU0QiLAorICB2YWx1ZTogIjEuMCIsCit9KTsKKworY29uc3QgdmFsaWRUb3RhbCA9IE9iamVj
dC5mcmVlemUoeworICBsYWJlbDogIkRlZmF1bHQgVG90YWwiLAorICBhbW91bnQ6IHZhbGlkQW1v
dW50LAorfSk7CisKK2NvbnN0IHZhbGlkU2hpcHBpbmdPcHRpb24gPSBPYmplY3QuZnJlZXplKHsK
KyAgaWQ6ICJzdGFuZGFyZCIsCisgIGxhYmVsOiAiU2hpcHBpbmcgb3B0aW9uIiwKKyAgYW1vdW50
OiB2YWxpZEFtb3VudCwKKyAgc2VsZWN0ZWQ6IHRydWUsCit9KTsKKworY29uc3QgdmFsaWREZXRh
aWxzID0gT2JqZWN0LmZyZWV6ZSh7CisgIHRvdGFsOiB2YWxpZFRvdGFsLAorICBzaGlwcGluZ09w
dGlvbnM6IFt2YWxpZFNoaXBwaW5nT3B0aW9uXSwKK30pOworCitjb25zdCB2YWxpZE1vZGlmaWVy
ID0gT2JqZWN0LmZyZWV6ZSh7CisgIHN1cHBvcnRlZE1ldGhvZHM6ICJiYXNpYy1jYXJkIiwKKyAg
dG90YWw6IHZhbGlkVG90YWwsCit9KTsKKwordGVzdCgoKSA9PiB7CisgIHRyeSB7CisgICAgbmV3
IFBheW1lbnRSZXF1ZXN0KHZhbGlkTWV0aG9kcywgdmFsaWREZXRhaWxzKTsKKyAgfSBjYXRjaCAo
ZXJyKSB7CisgICAgZG9uZSgpOworICAgIHRocm93IGVycjsKKyAgfQorfSwgInNtb2tlIHRlc3Qi
KTsKKworZnVuY3Rpb24gcnVuVGVzdChidXR0b24sIHsgaW52YWxpZE1ldGhvZCB9KSB7CisgIGJ1
dHRvbi5kaXNhYmxlZCA9IHRydWU7CisgIGNvbnN0IGFwcGxlUGF5ID0gT2JqZWN0LmZyZWV6ZSh7
CisgICAgICBzdXBwb3J0ZWRNZXRob2RzOiAiaHR0cHM6Ly9hcHBsZS5jb20vYXBwbGUtcGF5IiwK
KyAgICAgIGRhdGE6IHsKKyAgICAgICAgICB2ZXJzaW9uOiAyLAorICAgICAgICAgIG1lcmNoYW50
SWRlbnRpZmllcjogJycsCisgICAgICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFsnc3VwcG9y
dHMzRFMnXSwKKyAgICAgICAgICBzdXBwb3J0ZWROZXR3b3JrczogWyd2aXNhJywgJ21hc3RlckNh
cmQnXSwKKyAgICAgICAgICBjb3VudHJ5Q29kZTogJ1VTJywKKyAgICAgIH0sCisgIH0pOworICBw
cm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBQYXltZW50
UmVxdWVzdCgKKyAgICAgIFthcHBsZVBheV0sCisgICAgICB2YWxpZERldGFpbHMsCisgICAgICB7
IHJlcXVlc3RTaGlwcGluZzogdHJ1ZSB9CisgICAgKTsKKyAgICByZXF1ZXN0Lm9uYXBwbGVwYXl2
YWxpZGF0ZW1lcmNoYW50ID0gZXZlbnQgPT4geworICAgICAgICBldmVudC5jb21wbGV0ZSh7IH0p
OworICAgIH07CisgICAgY29uc3QgbGlzdGVuZXIgPSBldiA9PiB7CisgICAgICBjb25zdCBpbnZh
bGlkTW9kaWZpZXIgPSBPYmplY3QuYXNzaWduKHt9LCB2YWxpZE1vZGlmaWVyLCB7CisgICAgICAg
IHN1cHBvcnRlZE1ldGhvZHM6IGludmFsaWRNZXRob2QsCisgICAgICB9KTsKKyAgICAgIGNvbnN0
IGludmFsaWREZXRhaWxzID0gT2JqZWN0LmFzc2lnbih7fSwgdmFsaWREZXRhaWxzLCB7CisgICAg
ICAgIG1vZGlmaWVyczogW3ZhbGlkTW9kaWZpZXIsIGludmFsaWRNb2RpZmllcl0sCisgICAgICB9
KTsKKyAgICAgIGV2LnVwZGF0ZVdpdGgoaW52YWxpZERldGFpbHMpOworICAgIH07CisgICAgLy8g
V2UgdGVzdCBhZ2FpbnN0IGEgdmFsaWQgYW5kIGFuIGludmFsaWQgbW9kaWZpZXIKKyAgICByZXF1
ZXN0Lm9uc2hpcHBpbmdhZGRyZXNzY2hhbmdlID0gbGlzdGVuZXI7CisgICAgLy8gcmVxdWVzdC5h
ZGRFdmVudExpc3RlbmVyKCJzaGlwcGluZ2FkZHJlc3NjaGFuZ2UiLCBsaXN0ZW5lciwgeyBvbmNl
OiB0cnVlIH0pOworICAgIGNvbnN0IHNob3dQcm9taXNlID0gcmVxdWVzdC5zaG93KCk7CisgICAg
YXdhaXQgcHJvbWlzZV9yZWplY3RzKHQsIG5ldyBSYW5nZUVycm9yKCksIHNob3dQcm9taXNlKTsK
KyAgfSwgYnV0dG9uLnRleHRDb250ZW50LnRyaW0oKSk7Cit9Cis8L3NjcmlwdD4KKzxvbD4KKyAg
PGxpPgorICAgIDxidXR0b24gaWQ9ImJ1dHRvbjEiPgorICAgICAgTXVzdCB0aHJvdyBpZiB0aGUg
VVJMIGhhcyBhIHBhc3N3b3JkLgorICAgIDwvYnV0dG9uPgorICA8L2xpPgorICA8bGk+CisgICAg
PGJ1dHRvbiBpZD0iYnV0dG9uMiI+CisgICAgICBNdXN0IHRocm93IGlmIHRoZSBVUkwgaGFzIGEg
dXNlcm5hbWUuCisgICAgPC9idXR0b24+CisgIDwvbGk+CisgIDxsaT4KKyAgICA8YnV0dG9uIGlk
PSJidXR0b24zIj4KKyAgICAgIE11c3QgdGhyb3cgaWYgdGhlIFVSTCBoYXMgYSB1c2VybmFtZSBh
bmQgYSBwYXNzd29yZC4KKyAgICA8L2J1dHRvbj4KKyAgPC9saT4KKyAgPGxpPgorICAgIDxidXR0
b24gaWQ9ImJ1dHRvbjQiPgorICAgICAgTXVzdCB0aHJvdyBpZiBpdCdzIGh0dHAsIGFuZCBoYXMg
YSB1c2VybmFtZSBhbmQgcGFzc3dvcmQuCisgICAgPC9idXR0b24+CisgIDwvbGk+CisgIDxsaT4K
KyAgICA8YnV0dG9uIGlkPSJidXR0b241Ij4KKyAgICAgIE11c3QgdGhyb3cgaWYgdGhlIFVSTCBp
cyBpbnZhbGlkIChwb3J0IHJhbmdlKS4KKyAgICA8L2J1dHRvbj4KKyAgPC9saT4KKyAgPGxpPgor
ICAgIDxidXR0b24gaWQ9ImJ1dHRvbjYiPgorICAgICAgTXVzdCB0aHJvdyBpZiB0aGUgUE1JIGNv
bnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBhcmUgb3V0IG9mIHJhbmdlLgorICAgIDwvYnV0dG9uPgor
ICA8L2xpPgorICA8bGk+CisgICAgPGJ1dHRvbiBpZD0iYnV0dG9uNyI+CisgICAgICBNdXN0IHRo
cm93IGlmIG5vdCBodHRwcy4KKyAgICA8L2J1dHRvbj4KKyAgPC9saT4KKyAgPGxpPgorICAgIDxi
dXR0b24gaWQ9ImJ1dHRvbjgiPgorICAgICAgTXVzdCB0aHJvdyBpZiB0aGUgc3RhbmRhcmRpemVk
IFBNSSBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIGFzY2lpIHJhbmdlLgorICAgIDwv
YnV0dG9uPgorICA8L2xpPgorICA8bGk+CisgICAgPGJ1dHRvbiBpZD0iYnV0dG9uOSI+CisgICAg
ICBNdXN0IHRocm93IGlmIHN0YW5kYXJkaXplZCBQTUkgaGFzIHVwcGVyY2FzZSBjaGFyYWN0ZXJz
LgorICAgIDwvYnV0dG9uPgorICA8L2xpPgorPC9vbD4KKzxzY3JpcHQ+CisgICAgYXN5bmMgZnVu
Y3Rpb24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgYXdhaXQgcnVuVGVzdChkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiYnV0dG9uMSIpLCB7aW52YWxpZE1ldGhvZDogJ2h0dHBzOi8vOnBhc3N3
b3JkQGV4YW1wbGUuY29tJ30pOworICAgICAgICBhd2FpdCBydW5UZXN0KGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJidXR0b24yIiksIHtpbnZhbGlkTWV0aG9kOiAnaHR0cHM6Ly91c2VybmFtZUBl
eGFtcGxlLmNvbSd9KTsKKyAgICAgICAgYXdhaXQgcnVuVGVzdChkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiYnV0dG9uMyIpLCB7aW52YWxpZE1ldGhvZDogJ2h0dHBzOi8vdXNlcm5hbWU6cGFzc3dv
cmRAZXhhbXBsZS5jb20vcGF5J30pOworICAgICAgICBhd2FpdCBydW5UZXN0KGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJidXR0b240IiksIHtpbnZhbGlkTWV0aG9kOiAnaHR0cDovL3VzZXJuYW1l
OnBhc3N3b3JkQGV4YW1wbGUuY29tL3BheSd9KTsKKyAgICAgICAgYXdhaXQgcnVuVGVzdChkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYnV0dG9uNSIpLCB7aW52YWxpZE1ldGhvZDogJ2h0dHA6Ly9m
b28uY29tOjEwMDAwMDAwMC9wYXknfSk7CisgICAgICAgIGF3YWl0IHJ1blRlc3QoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImJ1dHRvbjYiKSwge2ludmFsaWRNZXRob2Q6ICdiYXNpYy3wn5KzJ30p
OworICAgICAgICBhd2FpdCBydW5UZXN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidXR0b243
IiksIHtpbnZhbGlkTWV0aG9kOiAnbm90LWh0dHBzOi8vd3B0LmZ5aS9wYXltZW50LXJlcXVlc3Qn
fSk7CisgICAgICAgIGF3YWl0IHJ1blRlc3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRv
bjgiKSwge2ludmFsaWRNZXRob2Q6ICfCoWJhc2ljLSotY2FyZCEnfSk7CisgICAgICAgIGF3YWl0
IHJ1blRlc3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbjkiKSwge2ludmFsaWRNZXRo
b2Q6ICdCYXNpYy1DYXJkJ30pOworICAgICAgICBkb25lKCk7CisgICAgfQorICAgIHJ1blRlc3Rz
KCk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcGF5bWVudC1yZXF1ZXN0L3BheW1lbnQtcmVxdWVzdC11cGRhdGUtZXZl
bnQtdXBkYXRld2l0aC1tZXRob2QuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9wYXltZW50LXJlcXVlc3QvcGF5bWVudC1yZXF1
ZXN0LXVwZGF0ZS1ldmVudC11cGRhdGV3aXRoLW1ldGhvZC5odHRwcy1leHBlY3RlZC50eHQKaW5k
ZXggZTIyZmI1ZDMyZTdjOTM2Y2YxMjI5OWRmN2JmNTRjMDkwMGVjMDk5ZC4uN2M2YTY1N2JlZmVj
NTdjZGRhNGUxZDk3M2FlZTQ5OTYxOThjNmI3YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9wYXltZW50LXJlcXVlc3QvcGF5bWVudC1yZXF1
ZXN0LXVwZGF0ZS1ldmVudC11cGRhdGV3aXRoLW1ldGhvZC5odHRwcy1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9wYXltZW50LXJl
cXVlc3QvcGF5bWVudC1yZXF1ZXN0LXVwZGF0ZS1ldmVudC11cGRhdGV3aXRoLW1ldGhvZC5odHRw
cy1leHBlY3RlZC50eHQKQEAgLTEsOSArMSw1IEBACiAKIFBBU1MgTGV0IHRhcmdldCBiZSB0aGUg
cmVxdWVzdCB3aGljaCBpcyBkaXNwYXRjaGluZyB0aGUgZXZlbnQuIAotRkFJTCBDYWxsaW5nIC51
cGRhdGVXaXRoKCkgd2l0aCBhbiB1bmRpc3BhdGNoZWQgdW50cnVzdGVkIGV2ZW50IHRocm93cyAi
SW52YWxpZFN0YXRlRXJyb3IiIGFzc2VydF90aHJvd3M6IHVudHJ1c3RlZCBldmVudCBvZiB0eXBl
ICJqdXN0IGEgdGVzdCIgbXVzdCB0aHJvdyAiSW52YWxpZFN0YXRlRXJyb3IiIGZ1bmN0aW9uICIo
KSA9PiB7Ci0gICAgICAgIGV2LnVwZGF0ZVdpdGgoUHJvbWlzZS5yZXNvbHZlKCkpOwotICAgICAg
fSIgdGhyZXcgb2JqZWN0ICJUeXBlRXJyb3I6IGV2LnVwZGF0ZVdpdGggaXMgbm90IGEgZnVuY3Rp
b24uIChJbiAnZXYudXBkYXRlV2l0aChQcm9taXNlLnJlc29sdmUoKSknLCAnZXYudXBkYXRlV2l0
aCcgaXMgdW5kZWZpbmVkKSIgdGhhdCBpcyBub3QgYSBET01FeGNlcHRpb24gSW52YWxpZFN0YXRl
RXJyb3I6IHByb3BlcnR5ICJjb2RlIiBpcyBlcXVhbCB0byB1bmRlZmluZWQsIGV4cGVjdGVkIDEx
Ci1GQUlMIENhbGxpbmcgLnVwZGF0ZVdpdGgoKSB3aXRoIGEgZGlzcGF0Y2hlZCwgdW50cnVzdGVk
IGV2ZW50LCB0aHJvd3MgIkludmFsaWRTdGF0ZUVycm9yIiBhc3NlcnRfdGhyb3dzOiB1bnRydXN0
ZWQgZXZlbnQgb2YgdHlwZSAianVzdCBhIHRlc3QiIG11c3QgdGhyb3cgIkludmFsaWRTdGF0ZUVy
cm9yIiBmdW5jdGlvbiAiKCkgPT4gewotICAgICAgICBldi51cGRhdGVXaXRoKFByb21pc2UucmVz
b2x2ZSgpKQotICAgICAgfSIgdGhyZXcgb2JqZWN0ICJUeXBlRXJyb3I6IGV2LnVwZGF0ZVdpdGgg
aXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZXYudXBkYXRlV2l0aChQcm9taXNlLnJlc29sdmUoKSkn
LCAnZXYudXBkYXRlV2l0aCcgaXMgdW5kZWZpbmVkKSIgdGhhdCBpcyBub3QgYSBET01FeGNlcHRp
b24gSW52YWxpZFN0YXRlRXJyb3I6IHByb3BlcnR5ICJjb2RlIiBpcyBlcXVhbCB0byB1bmRlZmlu
ZWQsIGV4cGVjdGVkIDExCitQQVNTIENhbGxpbmcgLnVwZGF0ZVdpdGgoKSB3aXRoIGFuIHVuZGlz
cGF0Y2hlZCB1bnRydXN0ZWQgZXZlbnQgdGhyb3dzICJJbnZhbGlkU3RhdGVFcnJvciIgCitQQVNT
IENhbGxpbmcgLnVwZGF0ZVdpdGgoKSB3aXRoIGEgZGlzcGF0Y2hlZCwgdW50cnVzdGVkIGV2ZW50
LCB0aHJvd3MgIkludmFsaWRTdGF0ZUVycm9yIiAKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>