<?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>76453</bug_id>
          
          <creation_ts>2012-01-17 07:09:08 -0800</creation_ts>
          <short_desc>[CSSRegions]Fix region style code in CSSStyleSelector</short_desc>
          <delta_ts>2012-07-23 23:34:22 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>57312</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihnea Ovidenie">mihnea</reporter>
          <assigned_to name="Mihnea Ovidenie">mihnea</assigned_to>
          <cc>macpherson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>537080</commentid>
    <comment_count>0</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-17 07:09:08 -0800</bug_when>
    <thetext>Follow up after comments on https://bugs.webkit.org/show_bug.cgi?id=76064</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537087</commentid>
    <comment_count>1</comment_count>
      <attachid>122765</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-17 07:24:27 -0800</bug_when>
    <thetext>Created attachment 122765
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537119</commentid>
    <comment_count>2</comment_count>
      <attachid>122765</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-17 08:26:47 -0800</bug_when>
    <thetext>Comment on attachment 122765
Patch

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

Looks good. I would still like to see another patch due to some factoring and naming issues, and other nits.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:257
&gt; +    Vector&lt;pair&lt;CSSSelector*, RuleSet*&gt; &gt; m_regionSelectorsAndRuleSets;

I would prefer 

struct SelectorRuleSetPair {
    CSSSelector* selector;
    OwnPtr&lt;RuleSet&gt; ruleSet;
};

instead of pair&lt;&gt;, the resulting code will read better (which is why I said &quot;roughly&quot; in the comment that where I told to use a pair :).

You should use use OwnPtr&lt;RuleSet&gt; so you don&apos;t need explicit deletion.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:636
&gt; -void CSSStyleSelector::matchRules(RuleSet* rules, int&amp; firstRuleIndex, int&amp; lastRuleIndex, bool includeEmptyRules)
&gt; +void CSSStyleSelector::collectRules(RuleSet* rules, int&amp; firstRuleIndex, int&amp; lastRuleIndex, bool includeEmptyRules)

collectRules() is somewhat vague.

How about collectMatchingRules()?  Also rename matchRulesForList() to -&gt; collectMatchingRulesForList().

&gt; Source/WebCore/css/CSSStyleSelector.cpp:682
&gt; +    collectRules(rules, firstRuleIndex, lastRuleIndex, includeEmptyRules);
&gt; +
&gt; +    if (m_regionForStyling) {
&gt; +        for (unsigned index = 0; index &lt; rules-&gt;m_regionSelectorsAndRuleSets.size(); ++index) {
&gt; +            CSSSelector* regionSelector = rules-&gt;m_regionSelectorsAndRuleSets.at(index).first;
&gt; +            if (checkRegionSelector(regionSelector, static_cast&lt;Element*&gt;(m_regionForStyling-&gt;node()))) {
&gt; +                RuleSet* regionRules = rules-&gt;m_regionSelectorsAndRuleSets.at(index).second;
&gt; +                collectRules(regionRules, firstRuleIndex, lastRuleIndex, includeEmptyRules);
&gt; +            }
&gt; +        }
&gt; +    }

I think the loop should be factored into a separate function, collectMatchingRulesForRegion() or similar.

You should copy the size to variable before looping.
unsigned size = rules-&gt;m_regionSelectorsAndRuleSets.size();

Please use the usual &apos;i&apos; instead of &apos;index&apos; as the loop variable name.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1758
&gt; +    for (unsigned index = 0; index &lt; m_authorStyle-&gt;m_regionSelectorsAndRuleSets.size(); ++index) {

The same comment about index variable name and size in a local.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1764
&gt; +        for (unsigned index = 0; index &lt; m_userStyle-&gt;m_regionSelectorsAndRuleSets.size(); ++index) {

The same comment about index variable name and size in a local.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2041
&gt; +RuleSet::~RuleSet()
&gt; +{
&gt; +    for (unsigned index = 0; index &lt; m_regionSelectorsAndRuleSets.size(); ++index)
&gt; +        delete m_regionSelectorsAndRuleSets.at(index).second;
&gt; +}

With OwnPtr this won&apos;t be needed.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2098
&gt; +    for (unsigned index = 0; index &lt; regionStylingRules-&gt;length(); ++index) {

The same comment about index variable name and size in a local.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2248
&gt; +    bool styleDeclarationInsideRegionRule = false;
&gt; +    if (m_regionForStyling) {
&gt; +        CSSRule* parentRule = styleDeclaration-&gt;parentRule();
&gt; +        while (parentRule) {
&gt; +            if (parentRule-&gt;isRegionRule()) {
&gt; +                styleDeclarationInsideRegionRule = true;
&gt; +                break;
&gt; +            }
&gt; +            parentRule = parentRule-&gt;parentRule();
&gt; +        }
&gt; +    }

You should factor this into an inline function, isInRegionRule(CSSStyleDeclaration*) or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537825</commentid>
    <comment_count>3</comment_count>
      <attachid>122916</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-18 06:22:57 -0800</bug_when>
    <thetext>Created attachment 122916
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537831</commentid>
    <comment_count>4</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-18 06:33:07 -0800</bug_when>
    <thetext>Filed a bug about adding a new test for region styling that will test how specificity/position of css rules inside region rules is taken into account: https://bugs.webkit.org/show_bug.cgi?id=76537</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537833</commentid>
    <comment_count>5</comment_count>
      <attachid>122916</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-18 06:47:38 -0800</bug_when>
    <thetext>Comment on attachment 122916
Patch 2

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

r=me, with a few nits

&gt; Source/WebCore/css/CSSStyleSelector.cpp:674
&gt; +void CSSStyleSelector::collectMatchingRulesForRegion(RuleSet* rules, int&amp; firstRuleIndex, int&amp; lastRuleIndex, bool includeEmptyRules)
&gt; +{
&gt; +    if (m_regionForStyling) {

You should use early return here:

if (!m_regionForStyling)
    return;

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2245
&gt; +inline bool CSSStyleSelector::isInsideRegionRule(CSSMutableStyleDeclaration* styleDeclaration)
&gt; +{

This would be nicer as a static non-member inline. The caller should test if it needs to be called (m_regionForStyling is set).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537864</commentid>
    <comment_count>6</comment_count>
      <attachid>122929</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-18 07:33:55 -0800</bug_when>
    <thetext>Created attachment 122929
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537897</commentid>
    <comment_count>7</comment_count>
      <attachid>122929</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 08:57:34 -0800</bug_when>
    <thetext>Comment on attachment 122929
Patch for landing

Clearing flags on attachment: 122929

Committed r105280: &lt;http://trac.webkit.org/changeset/105280&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537898</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 08:57:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122765</attachid>
            <date>2012-01-17 07:24:27 -0800</date>
            <delta_ts>2012-01-18 06:22:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>76453.patch</filename>
            <type>text/plain</type>
            <size>27725</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0ZjNhYzI3Li5kNjkxM2ExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDEt
MTcgIE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTU1Jl
Z2lvbnNdRml4IHJlZ2lvbiBzdHlsZSBjb2RlIGluIENTU1N0eWxlU2VsZWN0b3IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDUzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHRoZSB0ZXN0IGFzIGl0
IHdhcyBub3QgdGFraW5nIGludG8gYWNjb3VudCB0aGUgc2VsZWN0b3Igc3BlY2lmaWNpdHkuCisg
ICAgICAgICogZmFzdC9yZWdpb25zL3JlZ2lvbi1zdHlsZS1ibG9jay1iYWNrZ3JvdW5kLWNvbG9y
Lmh0bWw6CisKIDIwMTItMDEtMTcgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJp
bS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLiBVcGRhdGUgUXQgcmVzdWx0cyBhZnRlciBy
MTA1MTQzLi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9yZWdpb24tc3R5
bGUtYmxvY2stYmFja2dyb3VuZC1jb2xvci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9yZWdpb25z
L3JlZ2lvbi1zdHlsZS1ibG9jay1iYWNrZ3JvdW5kLWNvbG9yLmh0bWwKaW5kZXggZDdkYzI3YTgu
LjFmNzYwZmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9yZWdpb24tc3R5
bGUtYmxvY2stYmFja2dyb3VuZC1jb2xvci5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvcmVn
aW9ucy9yZWdpb24tc3R5bGUtYmxvY2stYmFja2dyb3VuZC1jb2xvci5odG1sCkBAIC00NCw3ICs0
NCw3IEBACiAgICAgICAgICAgICAjcmVnaW9uNzEgIHsgLXdlYmtpdC1mbG93LWZyb206IGZsb3c3
OyB9CiAgICAgICAgICAgICAjcmVnaW9uNzIgIHsgLXdlYmtpdC1mbG93LWZyb206IGZsb3c3OyB9
CiAgICAgICAgICAgICAjcDcgeyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgfQotICAgICAgICAg
ICAgQC13ZWJraXQtcmVnaW9uICNyZWdpb243MSB7IHAgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFu
c3BhcmVudDsgfSB9CisgICAgICAgICAgICBALXdlYmtpdC1yZWdpb24gI3JlZ2lvbjcxIHsgI3A3
IHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0gfQogICAgICAgICA8L3N0eWxlPgog
ICAgPC9oZWFkPgogICAgIDxib2R5IGNsYXNzPSJib2R5Ij4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMjY2OWJi
Li5kMWE0NjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTItMDEtMTcgIE1paG5l
YSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTU1JlZ2lvbnNdRml4
IHJlZ2lvbiBzdHlsZSBjb2RlIGluIENTU1N0eWxlU2VsZWN0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDUzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9sbG93IHVwIGFmdGVyIGNvbW1lbnRzIGlu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA2NC4KKyAgICAgICAg
V2l0aCB0aGUgbmV3IGFwcHJvYWNoLCB0aGUgY3NzIHJ1bGUgc3BlY2lmaWNpdHkgaXMgY29ycmVj
dGx5IHRha2VuIGludG8gYWNjb3VudAorICAgICAgICB3aGVuIGFwcGx5aW5nIHRoZSByZWdpb24g
c3R5bGUgcnVsZS4KKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGUgcmVnaW9uIHN0eWxlIHRlc3Rz
IGFyZSBzdGlsbCBkaXNhYmxlZC4KKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU2VsZWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVT
ZXQ6OlJ1bGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6flJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxl
U2V0OjphZGRSZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVj
bGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNs
YXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6aXNWYWxpZFJl
Z2lvblN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKwogMjAx
Mi0wMS0xNyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAg
ICAgICBMYXJnZSBTVkcgdGV4dCBsYXlvdXQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBpbiByODEx
NjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCAwZmJjOTA0Li44
ZTU4ZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0xNzAs
NyArMTcwLDcgQEAgaWYgKHByaW1pdGl2ZVZhbHVlKSBcCiAKIGNsYXNzIFJ1bGVEYXRhIHsKIHB1
YmxpYzoKLSAgICBSdWxlRGF0YShDU1NTdHlsZVJ1bGUqLCBDU1NTZWxlY3RvciosIHVuc2lnbmVk
IHBvc2l0aW9uLCBFUmVnaW9uU3R5bGVFbmFibGVkIHVzZUluUmVnaW9uU3R5bGUgPSBEb05vdFVz
ZUluUmVnaW9uU3R5bGUpOworICAgIFJ1bGVEYXRhKENTU1N0eWxlUnVsZSosIENTU1NlbGVjdG9y
KiwgdW5zaWduZWQgcG9zaXRpb24pOwogCiAgICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAgQ1NTU3R5bGVSdWxlKiBydWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydWxlOyB9CkBAIC0xODIsNyArMTgyLDYgQEAgcHVibGljOgogICAgIGJvb2wgY29u
dGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWlu
c1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0KICAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNpdHk7IH0KICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9saW5rTWF0Y2hUeXBlOyB9Ci0gICAgRVJlZ2lvblN0eWxl
RW5hYmxlZCB1c2VJblJlZ2lvblN0eWxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RVJl
Z2lvblN0eWxlRW5hYmxlZD4obV91c2VJblJlZ2lvblN0eWxlKTsgfQogCiAgICAgLy8gVHJ5IHRv
IGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgKHRoZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVE
YXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmluZyBwZXJmb3JtYW5jZS4KICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCA9IDQ7CkBAIC0xOTQsMTMgKzE5
MywxMiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNpdHk7CiAgICAgLy8gVGhp
cyBudW1iZXIgd2FzIHBpY2tlZCBmYWlybHkgYXJiaXRyYXJpbHkuIFdlIGNhbiBwcm9iYWJseSBs
b3dlciBpdCBpZiB3ZSBuZWVkIHRvLgogICAgIC8vIFNvbWUgc2ltcGxlIHRlc3Rpbmcgc2hvd2Vk
IDwxMDAsMDAwIFJ1bGVEYXRhJ3Mgb24gbGFyZ2Ugc2l0ZXMuCi0gICAgdW5zaWduZWQgbV9wb3Np
dGlvbiA6IDI1OworICAgIHVuc2lnbmVkIG1fcG9zaXRpb24gOiAyNjsKICAgICB1bnNpZ25lZCBt
X2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvciA6IDE7CiAgICAgdW5zaWduZWQgbV9oYXNNdWx0aXBh
cnRTZWxlY3RvciA6IDE7CiAgICAgdW5zaWduZWQgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNo
aW5nSFRNTEJhc2VkT25SdWxlSGFzaCA6IDE7CiAgICAgdW5zaWduZWQgbV9jb250YWluc1VuY29t
bW9uQXR0cmlidXRlU2VsZWN0b3IgOiAxOwogICAgIHVuc2lnbmVkIG1fbGlua01hdGNoVHlwZSA6
IDI7IC8vICBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sKLSAgICB1bnNpZ25lZCBtX3Vz
ZUluUmVnaW9uU3R5bGUgOiAxOyAvLyBFUmVnaW9uU3R5bGVFbmFibGVkCiAgICAgLy8gVXNlIHBs
YWluIGFycmF5IGluc3RlYWQgb2YgYSBWZWN0b3IgdG8gbWluaW1pemUgbWVtb3J5IG92ZXJoZWFk
LgogICAgIHVuc2lnbmVkIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1ttYXhp
bXVtSWRlbnRpZmllckNvdW50XTsKIH07CkBAIC0yMTgsNyArMjE2LDggQEAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKFJ1bGVEYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc1J1bGVEYXRhKSwgUnVsZURh
dGFfc2hvdWxkX3MKIGNsYXNzIFJ1bGVTZXQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJ1
bGVTZXQpOwogcHVibGljOgotICAgIFJ1bGVTZXQoRVJlZ2lvblN0eWxlRW5hYmxlZCB1c2VJblJl
Z2lvblN0eWxlID0gRG9Ob3RVc2VJblJlZ2lvblN0eWxlKTsKKyAgICBSdWxlU2V0KCk7CisgICAg
flJ1bGVTZXQoKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgT3du
UHRyPFZlY3RvcjxSdWxlRGF0YT4gPiA+IEF0b21SdWxlTWFwOwogCkBAIC0yMjgsNiArMjI3LDcg
QEAgcHVibGljOgogICAgIHZvaWQgYWRkUnVsZShDU1NTdHlsZVJ1bGUqLCBDU1NTZWxlY3Rvciop
OwogICAgIHZvaWQgYWRkUGFnZVJ1bGUoQ1NTUGFnZVJ1bGUqKTsKICAgICB2b2lkIGFkZFRvUnVs
ZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEm
KTsKKyAgICB2b2lkIGFkZFJlZ2lvblJ1bGUoV2ViS2l0Q1NTUmVnaW9uUnVsZSopOwogICAgIHZv
aWQgc2hyaW5rVG9GaXQoKTsKICAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1f
YXV0b1Nocmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9CiAKQEAgLTI1Myw5ICsyNTMsOCBAQCBw
dWJsaWM6CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3BhZ2VSdWxlczsKICAgICB1bnNpZ25lZCBt
X3J1bGVDb3VudDsKICAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZDsKLSAgICBFUmVn
aW9uU3R5bGVFbmFibGVkIG1fdXNlSW5SZWdpb25TdHlsZTsKLQogICAgIENTU1N0eWxlU2VsZWN0
b3I6OkZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgVmVjdG9yPHBhaXI8Q1NTU2VsZWN0b3IqLCBS
dWxlU2V0Kj4gPiBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzOwogfTsKIAogc3RhdGljIFJ1
bGVTZXQqIGRlZmF1bHRTdHlsZTsKQEAgLTMyNSw3ICszMjQsNiBAQCBDU1NTdHlsZVNlbGVjdG9y
OjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0
eWxlU2hlZQogICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9j
dW1lbnQpKQogICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSkKICAgICAs
IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSkKLSAgICAsIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVnaW9uU3R5bGUoZmFsc2UpCiAgICAgLCBtX2FwcGx5UHJvcGVydHkoQ1NTU3R5
bGVBcHBseVByb3BlcnR5OjpzaGFyZWRDU1NTdHlsZUFwcGx5UHJvcGVydHkoKSkKICNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCiAgICAgLCBtX2hhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKQpAQCAtNDQw
LDExICs0MzgsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGVuZEF1dGhvclN0eWxlc2hl
ZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UgogICAgICAgICBkb2N1bWVudCgp
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKIH0K
IAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRSZWdpb25SdWxlKFBhc3NSZWZQdHI8V2ViS2l0
Q1NTUmVnaW9uUnVsZT4gcmVnaW9uU3R5bGVSdWxlKQotewotICAgIG1fcmVnaW9uU3R5bGVSdWxl
cy5hcHBlbmQocmVnaW9uU3R5bGVSdWxlKTsKLX0KLQogLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQg
c3R5bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCiB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFkZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlPiBydWxlKQogewpAQCAtNjMyLDIxICs2MjUsMTggQEAgc3RhdGljIHZvaWQgZW5zdXJlRGVm
YXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgIEFTU0VSVF9V
TlVTRUQobG9hZGVkTWF0aE1MVXNlckFnZW50U2hlZXQsIGxvYWRlZE1hdGhNTFVzZXJBZ2VudFNo
ZWV0IHx8IGRlZmF1bHRTdHlsZS0+ZmVhdHVyZXMoKS5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpKTsK
IH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24sIHVuc2lnbmVkIGxpbmtNYXRj
aFR5cGUsIEVSZWdpb25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSkKK3ZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZURlY2xhcmF0aW9uLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKQogewogICAgIG1f
bWF0Y2hlZERlY2xzLmdyb3cobV9tYXRjaGVkRGVjbHMuc2l6ZSgpICsgMSk7CiAgICAgTWF0Y2hl
ZFN0eWxlRGVjbGFyYXRpb24mIG5ld0RlY2xhcmF0aW9uID0gbV9tYXRjaGVkRGVjbHMubGFzdCgp
OwogICAgIG5ld0RlY2xhcmF0aW9uLnN0eWxlRGVjbGFyYXRpb24gPSBzdHlsZURlY2xhcmF0aW9u
OwogICAgIG5ld0RlY2xhcmF0aW9uLmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOwotICAg
IG5ld0RlY2xhcmF0aW9uLnVzZUluUmVnaW9uU3R5bGUgPSB1c2VJblJlZ2lvblN0eWxlOwogfQog
Ci12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cykKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCiB7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKLQotICAgIGlmICghcnVsZXMg
fHwgIW1fZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChydWxlcyk7CisgICAg
QVNTRVJUKG1fZWxlbWVudCk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHJ1bGVz
IGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbnRvIGEgYnVmZmVyIGFu
ZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgpAQCAtNjcwLDYgKzY2MCwyNiBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RS
dWxlSW5kZXgsIGludCYgbGFzdAogICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Zm9j
dXNQc2V1ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNs
dWRlRW1wdHlSdWxlcyk7CiAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnRhZ1J1bGVzKG1f
ZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5k
ZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+dW5p
dmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQq
IHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCit7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKworICAgIGlm
ICghcnVsZXMgfHwgIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29sbGVjdFJ1
bGVzKHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOworCisgICAgaWYgKG1fcmVnaW9uRm9yU3R5bGluZykgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0
cy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIENTU1NlbGVjdG9yKiByZWdpb25TZWxl
Y3RvciA9IHJ1bGVzLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGluZGV4KS5maXJz
dDsKKyAgICAgICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgeworICAg
ICAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gcnVsZXMtPm1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMuYXQoaW5kZXgpLnNlY29uZDsKKyAgICAgICAgICAgICAgICBjb2xsZWN0
UnVsZXMocmVnaW9uUnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAKICAgICBpZiAo
bV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC02OTMsNyArNzAz
LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3QKICAgICAgICAgdW5zaWduZWQgbGlua01hdGNo
VHlwZSA9IG1fbWF0Y2hlZFJ1bGVzW2ldLT5saW5rTWF0Y2hUeXBlKCk7CiAgICAgICAgIGlmIChz
d2FwVmlzaXRlZFVudmlzaXRlZCAmJiBsaW5rTWF0Y2hUeXBlICYmIGxpbmtNYXRjaFR5cGUgIT0g
U2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCkKICAgICAgICAgICAgIGxpbmtNYXRjaFR5cGUgPSAo
bGlua01hdGNoVHlwZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCkgPyBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoTGluayA6IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwotICAg
ICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVj
bGFyYXRpb24oKSwgbGlua01hdGNoVHlwZSwgbV9tYXRjaGVkUnVsZXNbaV0tPnVzZUluUmVnaW9u
U3R5bGUoKSk7CisgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tp
XS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpLCBsaW5rTWF0Y2hUeXBlKTsKICAgICB9CiB9CiAKQEAg
LTg1MSw5ICs4NjEsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCkKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAg
ICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgcmVzdWx0LmZpcnN0QXV0aG9y
UnVsZSwgcmVzdWx0Lmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CiAKLSAgICBpZiAobV9yZWdpb25G
b3JTdHlsaW5nKQotICAgICAgICBtYXRjaFJ1bGVzKG1fcmVnaW9uUnVsZXMuZ2V0KCksIHJlc3Vs
dC5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5sYXN0QXV0aG9yUnVsZSwgZmFsc2UpOwotCiAgICAg
Ly8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgogICAgIGlmIChtX21hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQpIHsKICAgICAgICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZURlY2wgPSBtX3N0eWxlZEVsZW1lbnQtPmlubGlu
ZVN0eWxlRGVjbCgpOwpAQCAtOTA2LDM3ICs5MTMsNiBAQCBpbmxpbmUgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjppbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJl
bgogICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CiB9CiAKLWlubGluZSB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmluaXRGb3JSZWdpb25TdHlsaW5nKFJlbmRlclJlZ2lvbiogcmVnaW9uKQotewotICAg
IHNldFJlZ2lvbkZvclN0eWxpbmcocmVnaW9uKTsKLQotICAgIGlmIChyZWdpb24pCi0gICAgICAg
IGluaXRSZWdpb25SdWxlcyhyZWdpb24pOwotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Omlu
aXRSZWdpb25SdWxlcyhSZW5kZXJSZWdpb24qIHJlZ2lvbikKLXsKLSAgICBBU1NFUlQocmVnaW9u
KTsKLSAgICAvLyBNYXJrIHRoYXQgdGhlIHNldCBvZiBydWxlcyBjb21lcyBmcm9tIHJlZ2lvbiBz
dHlsaW5nIHNpbmNlIHdlIG5lZWQgdG8gZmlsdGVyCi0gICAgLy8gdGhlIHByb3BlcnRpZXMgdGhh
dCBjYW4gYmUgYXBwbGllZC4KLSAgICBtX3JlZ2lvblJ1bGVzID0gYWRvcHRQdHIobmV3IFJ1bGVT
ZXQoVXNlSW5SZWdpb25TdHlsZSkpOwotCi0gICAgLy8gRnJvbSBhbGwgdGhlIHJlZ2lvbiBzdHls
ZSBydWxlcywgc2VsZWN0IHRob3NlIHRoYXQgYXBwbHkgdG8gdGhlIHNwZWNpZmllZCByZWdpb24u
Ci0gICAgZm9yIChWZWN0b3I8UmVmUHRyPFdlYktpdENTU1JlZ2lvblJ1bGU+ID46Oml0ZXJhdG9y
IGl0ID0gbV9yZWdpb25TdHlsZVJ1bGVzLmJlZ2luKCk7IGl0ICE9IG1fcmVnaW9uU3R5bGVSdWxl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHJlZ2lvblNl
bGVjdG9yTGlzdCA9ICgqaXQpLT5zZWxlY3Rvckxpc3QoKTsKLSAgICAgICAgZm9yIChDU1NTZWxl
Y3RvciogcyA9IHJlZ2lvblNlbGVjdG9yTGlzdC5maXJzdCgpOyBzOyBzID0gcmVnaW9uU2VsZWN0
b3JMaXN0Lm5leHQocykpIHsKLSAgICAgICAgICAgIGlmICghbV9jaGVja2VyLmNoZWNrU2VsZWN0
b3Iocywgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHJlZ2lvbi0+bm9kZSgpKSkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NSdWxlTGlzdCogcmVnaW9uU3R5bGluZ1J1
bGVzID0gKCppdCktPmNzc1J1bGVzKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCByZWdpb25TdHlsaW5nUnVsZXMtPmxlbmd0aCgpOyArK2luZGV4KSB7Ci0g
ICAgICAgICAgICAgICAgQ1NTUnVsZSogcmVnaW9uU3R5bGluZ1J1bGUgPSByZWdpb25TdHlsaW5n
UnVsZXMtPml0ZW0oaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChyZWdpb25TdHlsaW5nUnVs
ZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9yZWdpb25SdWxlcy0+YWRk
U3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj
U3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCA9IDEwOwogCkBAIC0xMzIwLDcgKzEyOTYsNyBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCwgUmVuZAogCiAgICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7CiAgICAg
aW5pdEZvclN0eWxlUmVzb2x2ZShlbGVtZW50LCBkZWZhdWx0UGFyZW50KTsKLSAgICBpbml0Rm9y
UmVnaW9uU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsKKyAgICBtX3JlZ2lvbkZvclN0eWxpbmcg
PSByZWdpb25Gb3JTdHlsaW5nOwogICAgIGlmIChhbGxvd1NoYXJpbmcpIHsKICAgICAgICAgUmVu
ZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICAgICAgaWYg
KHNoYXJlZFN0eWxlKQpAQCAtMTQ3Nyw3ICsxNDUzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHls
ZSoKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6
OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKQorUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVt
ZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQogewogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDg1LDcgKzE0NjEsNiBA
QCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZv
ckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLAogICAgIGluaXRFbGVtZW50KGUpOwogCiAgICAgaW5p
dEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsKLSAgICBpbml0Rm9yUmVn
aW9uU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsKICAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6
OmNyZWF0ZSgpOwogCiAgICAgaWYgKG1fcGFyZW50U3R5bGUpCkBAIC0xNzc4LDE1ICsxNzUzLDE2
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50CiAjZW5kaWYKIH0KIAotYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIGUpCitib29sIENTU1N0eWxlU2VsZWN0
b3I6OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCkKIHsKLSAgICBtX2No
ZWNrZXIuY2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMoKTsKLSAgICBtX2NoZWNrZXIuc2V0
UHNldWRvU3R5bGUoTk9QU0VVRE8pOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOyAr
K2luZGV4KSB7CisgICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKG1fYXV0aG9yU3R5bGUt
Pm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaW5kZXgpLmZpcnN0LCByZWdpb25FbGVt
ZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAgIGZvciAoVmVjdG9y
PFJlZlB0cjxXZWJLaXRDU1NSZWdpb25SdWxlPiA+OjppdGVyYXRvciBpdCA9IG1fcmVnaW9uU3R5
bGVSdWxlcy5iZWdpbigpOyBpdCAhPSBtX3JlZ2lvblN0eWxlUnVsZXMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiByZWdpb25TZWxlY3Rvckxpc3QgPSAoKml0
KS0+c2VsZWN0b3JMaXN0KCk7Ci0gICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSByZWdpb25T
ZWxlY3Rvckxpc3QuZmlyc3QoKTsgczsgcyA9IHJlZ2lvblNlbGVjdG9yTGlzdC5uZXh0KHMpKSB7
Ci0gICAgICAgICAgICBpZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgZSkpCisgICAgaWYg
KG1fdXNlclN0eWxlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IobV91c2VyU3R5bGUtPm1f
cmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaW5kZXgpLmZpcnN0LCByZWdpb25FbGVtZW50
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE4
ODUsNiArMTg2MSwyMSBAQCBpbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVj
dG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiB0cnVlOwogfQorCitib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBFbGVtZW50KiByZWdpb25FbGVtZW50
KQoreworICAgIGlmICghcmVnaW9uU2VsZWN0b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1fY2hlY2tlci5jbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVt
ZW50cygpOworICAgIG1fY2hlY2tlci5zZXRQc2V1ZG9TdHlsZShOT1BTRVVETyk7CisKKyAgICBm
b3IgKENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rvckxp
c3Q6Om5leHQocykpCisgICAgICAgIGlmIChtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzLCByZWdp
b25FbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNl
OworfQogICAgIAogYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpkZXRlcm1pbmVTdHlsZXNoZWV0U2Vs
ZWN0b3JTY29wZXMoQ1NTU3R5bGVTaGVldCogc3R5bGVzaGVldCwgSGFzaFNldDxBdG9taWNTdHJp
bmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29w
ZXMpCiB7CkBAIC0xOTY5LDcgKzE5NjAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNV
bmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotUnVsZURhdGE6OlJ1bGVEYXRhKENTU1N0eWxlUnVsZSogcnVs
ZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbiwgRVJlZ2lvblN0eWxl
RW5hYmxlZCB1c2VJblJlZ2lvblN0eWxlKQorUnVsZURhdGE6OlJ1bGVEYXRhKENTU1N0eWxlUnVs
ZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbikKICAgICA6
IG1fcnVsZShydWxlKQogICAgICwgbV9zZWxlY3RvcihzZWxlY3RvcikKICAgICAsIG1fc3BlY2lm
aWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCkBAIC0xOTc5LDE1ICsxOTcwLDEzIEBAIFJ1
bGVEYXRhOjpSdWxlRGF0YShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3Rv
ciwgdW5zaWduZWQgcG9zaXRpb24sCiAgICAgLCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hp
bmdIVE1MQmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhh
c2goc2VsZWN0b3IpKQogICAgICwgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Io
V2ViQ29yZTo6Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKICAg
ICAsIG1fbGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5
cGUoc2VsZWN0b3IpKQotICAgICwgbV91c2VJblJlZ2lvblN0eWxlKHVzZUluUmVnaW9uU3R5bGUp
CiB7CiAgICAgU2VsZWN0b3JDaGVja2VyOjpjb2xsZWN0SWRlbnRpZmllckhhc2hlcyhtX3NlbGVj
dG9yLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMsIG1heGltdW1JZGVudGlm
aWVyQ291bnQpOwogfQogCi1SdWxlU2V0OjpSdWxlU2V0KEVSZWdpb25TdHlsZUVuYWJsZWQgdXNl
SW5SZWdpb25TdHlsZSkKK1J1bGVTZXQ6OlJ1bGVTZXQoKQogICAgIDogbV9ydWxlQ291bnQoMCkK
ICAgICAsIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCh0cnVlKQotICAgICwgbV91c2VJblJlZ2lv
blN0eWxlKHVzZUluUmVnaW9uU3R5bGUpCiB7CiB9CiAKQEAgLTIwNDUsOSArMjAzNCwxNSBAQCB2
b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxl
TWFwJiBtYXAsIGNvbnN0IFJ1bGVEYQogICAgIHJ1bGVzLT5hcHBlbmQocnVsZURhdGEpOwogfQog
CitSdWxlU2V0Ojp+UnVsZVNldCgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7ICsraW5kZXgpCisgICAg
ICAgIGRlbGV0ZSBtX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGluZGV4KS5zZWNvbmQ7
Cit9CisKIHZvaWQgUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVj
dG9yKiBzZWxlY3RvcikKIHsKLSAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3Rvciwg
bV9ydWxlQ291bnQrKywgbV91c2VJblJlZ2lvblN0eWxlKTsKKyAgICBSdWxlRGF0YSBydWxlRGF0
YShydWxlLCBzZWxlY3RvciwgbV9ydWxlQ291bnQrKyk7CiAgICAgY29sbGVjdEZlYXR1cmVzRnJv
bVJ1bGVEYXRhKG1fZmVhdHVyZXMsIHJ1bGVEYXRhKTsKIAogICAgIGlmIChzZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKQEAgLTIwOTAsNiArMjA4NSwyNSBAQCB2b2lkIFJ1
bGVTZXQ6OmFkZFBhZ2VSdWxlKENTU1BhZ2VSdWxlKiBydWxlKQogICAgIG1fcGFnZVJ1bGVzLmFw
cGVuZChSdWxlRGF0YShydWxlLCBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCBtX3BhZ2VS
dWxlcy5zaXplKCkpKTsKIH0KIAordm9pZCBSdWxlU2V0OjphZGRSZWdpb25SdWxlKFdlYktpdENT
U1JlZ2lvblJ1bGUqIHJ1bGUpCit7CisgICAgUnVsZVNldCogcmVnaW9uUnVsZVNldCA9IG5ldyBS
dWxlU2V0OworICAgIC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxkIHRha2UgaW50byBhY2Nv
dW50IHRoZSBwb3NpdGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNldC4KKyAgICAvLyBPdGhl
cndpc2UsIHRoZSBydWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0IGJlIGluY29ycmVjdGx5
IHBvc2l0aW9uZWQgYmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJvbQorICAgIC8vIHRoZSBz
dHlsZXNoZWV0IHRoYXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4KKyAgICByZWdpb25SdWxl
U2V0LT5tX3J1bGVDb3VudCA9IG1fcnVsZUNvdW50OworCisgICAgLy8gQ29sbGVjdCB0aGUgcmVn
aW9uIHJ1bGVzIGludG8gYSBydWxlIHNldAorICAgIENTU1J1bGVMaXN0KiByZWdpb25TdHlsaW5n
UnVsZXMgPSBydWxlLT5jc3NSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IHJlZ2lvblN0eWxpbmdSdWxlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
Q1NTUnVsZSogcmVnaW9uU3R5bGluZ1J1bGUgPSByZWdpb25TdHlsaW5nUnVsZXMtPml0ZW0oaW5k
ZXgpOworICAgICAgICBpZiAocmVnaW9uU3R5bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAg
ICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVS
dWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpKTsKKyAgICB9CisKKyAgICBtX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzLmFwcGVuZChwYWlyPENTU1NlbGVjdG9yKiwgUnVsZVNldCo+KHJ1bGUtPnNl
bGVjdG9yTGlzdCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVTZXQpKTsKK30KKwogdm9pZCBSdWxlU2V0
OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKQogewog
ICAgIEFTU0VSVChzaGVldCk7CkBAIC0yMTQzLDcgKzIxNTcsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFk
ZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJgogICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKQogICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlKj4ocnVsZSkpOwogICAgICAgICBlbHNlIGlmIChydWxlLT5pc1Jl
Z2lvblJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKQotICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+
YWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxlKj4ocnVsZSkpOwor
ICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxl
Kj4ocnVsZSkpOwogICAgIH0KICAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQogICAg
ICAgICBzaHJpbmtUb0ZpdCgpOwpAQCAtMjIyMCw2ICsyMjM0LDE5IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGVEZWNsYXJhCiB7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50KCksIHN0
eWxlRGVjbGFyYXRpb24tPnBhcmVudFJ1bGUoKSk7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlRGVjbGFyYXRpb24tPmVuZCgpOworCisg
ICAgYm9vbCBzdHlsZURlY2xhcmF0aW9uSW5zaWRlUmVnaW9uUnVsZSA9IGZhbHNlOworICAgIGlm
IChtX3JlZ2lvbkZvclN0eWxpbmcpIHsKKyAgICAgICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IHN0
eWxlRGVjbGFyYXRpb24tPnBhcmVudFJ1bGUoKTsKKyAgICAgICAgd2hpbGUgKHBhcmVudFJ1bGUp
IHsKKyAgICAgICAgICAgIGlmIChwYXJlbnRSdWxlLT5pc1JlZ2lvblJ1bGUoKSkgeworICAgICAg
ICAgICAgICAgIHN0eWxlRGVjbGFyYXRpb25JbnNpZGVSZWdpb25SdWxlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcmVudFJ1bGUg
PSBwYXJlbnRSdWxlLT5wYXJlbnRSdWxlKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3Ig
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlRGVj
bGFyYXRpb24tPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBDU1NQ
cm9wZXJ0eSYgY3VycmVudCA9ICppdDsKICAgICAgICAgaWYgKGlzSW1wb3J0YW50ICE9IGN1cnJl
bnQuaXNJbXBvcnRhbnQoKSkKQEAgLTIyMzIsNiArMjI1OSwxMSBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
RGVjbGFyYQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaW50IHBy
b3BlcnR5ID0gY3VycmVudC5pZCgpOworCisgICAgICAgIC8vIEZpbHRlciB0aGUgcHJvcGVydGll
cyB0aGF0IGNhbiBiZSBhcHBsaWVkIHVzaW5nIHJlZ2lvbiBzdHlsaW5nLgorICAgICAgICBpZiAo
c3R5bGVEZWNsYXJhdGlvbkluc2lkZVJlZ2lvblJ1bGUgJiYgIUNTU1N0eWxlU2VsZWN0b3I6Omlz
VmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCiAgICAgICAgIGlmIChhcHBseUZpcnN0KSB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChmaXJzdENTU1Byb3BlcnR5ID09IENTU1Byb3BlcnR5Q29sb3IsIENTU19jb2xvcl9pc19maXJz
dF9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eVpvb20g
PT0gQ1NTUHJvcGVydHlDb2xvciArIDE4LCBDU1Nfem9vbV9pc19lbmRfb2ZfZmlyc3RfcHJvcF9y
YW5nZSk7CkBAIC0yMjczLDExICsyMzA1LDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBs
eURlY2xhcmF0aW9ucyhib29sIGlzSW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGUKICAg
ICAgICAgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5k
ZXg7ICsraSkgewotICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlID0gbV9tYXRj
aGVkRGVjbHNbaV0udXNlSW5SZWdpb25TdHlsZTsKKyAgICBmb3IgKGludCBpID0gc3RhcnRJbmRl
eDsgaSA8PSBlbmRJbmRleDsgKytpKQogICAgICAgICBhcHBseURlY2xhcmF0aW9uPGFwcGx5Rmly
c3Q+KG1fbWF0Y2hlZERlY2xzW2ldLnN0eWxlRGVjbGFyYXRpb24uZ2V0KCksIGlzSW1wb3J0YW50
LCBpbmhlcml0ZWRPbmx5KTsKLSAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWdpb25TdHlsZSA9
IGZhbHNlOwotICAgIH0KIH0KIAogdW5zaWduZWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29tcHV0ZURl
Y2xhcmF0aW9uSGFzaChNYXRjaGVkU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb25zLCB1bnNp
Z25lZCBzaXplKQpAQCAtMjU2NSw3ICsyNTk0LDcgQEAgaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0
ZWRMaW5rUHJvcGVydHkoaW50IGlkKQogCiAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3Mz
LXJlZ2lvbnMvI3RoZS1hdC1yZWdpb24tc3R5bGUtcnVsZQogLy8gRklYTUU6IGFkZCBpbmNyZW1l
bnRhbCBzdXBwb3J0IGZvciBvdGhlciByZWdpb24gc3R5bGluZyBwcm9wZXJ0aWVzLgotaW5saW5l
IGJvb2wgaXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkoaW50IGlkKQoraW5saW5lIGJvb2wgQ1NT
U3R5bGVTZWxlY3Rvcjo6aXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkoaW50IGlkKQogewogICAg
IHN3aXRjaCAoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oaWQpKSB7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKQEAgLTI2NTYsMTAgKzI2ODUsNiBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGaWx0ZXIgcmVnaW9uIHN0eWxlIHByb3BlcnR5
Ci0gICAgaWYgKGFwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlKCkgJiYgIWlzVmFsaWRSZWdpb25T
dHlsZVByb3BlcnR5KGlkKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGlkKTsKIAogICAgIGlmIChpc0lu
aGVyaXQgJiYgbV9wYXJlbnRTdHlsZSAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUlu
aGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHko
cHJvcGVydHkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggMmZlZDE4
My4uMzlkZjk5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCkBAIC0zNiw3
ICszNiw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gRVNtYXJ0TWluaW11bUZvckZv
bnRTaXplIHsgRG9Ob3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVt
Rm9yRm9udEZpemUgfTsKLWVudW0gRVJlZ2lvblN0eWxlRW5hYmxlZCB7IERvTm90VXNlSW5SZWdp
b25TdHlsZSwgVXNlSW5SZWdpb25TdHlsZSB9OwogCiBjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBj
bGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKQEAgLTExMCw3ICsxMDksNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqLCBjb25z
dCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYpOwogCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkLCBFbGVtZW50KiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gMCwgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7
CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVk
b0lkLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCk7CiAKICAgICBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7CiAKQEAgLTEz
Nyw4ICsxMzYsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgaW5pdEZvclN0eWxlUmVz
b2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBO
T1BTRVVETyk7CiAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCBpbml0
Rm9yUmVnaW9uU3R5bGluZyhSZW5kZXJSZWdpb24qKTsKLSAgICB2b2lkIGluaXRSZWdpb25SdWxl
cyhSZW5kZXJSZWdpb24qKTsKICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRl
clN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZSgpOwogICAgIGJvb2wgbWF0Y2hlc1J1bGVTZXQoUnVs
ZVNldCopOwpAQCAtMTQ3LDggKzE0NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjYW5TaGFyZVN0
eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCopIGNvbnN0OwogCiAgICAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFdl
YktpdENTU0tleWZyYW1lUnVsZSosIEtleWZyYW1lVmFsdWUmKTsKLSAgICB2b2lkIHNldFJlZ2lv
bkZvclN0eWxpbmcoUmVuZGVyUmVnaW9uKiByZWdpb24pIHsgbV9yZWdpb25Gb3JTdHlsaW5nID0g
cmVnaW9uOyB9Ci0gICAgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWdpb25Gb3JTdHlsaW5nOyB9CiAKIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRo
b2RzIHdpbGwgZ2l2ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdp
dmVuIGVsZW1lbnQgKG9yIGEgcHNldWRvLWVsZW1lbnQpLgpAQCAtMjA0LDkgKzE5OSw4IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgYWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tl
eWZyYW1lc1J1bGU+KTsKICAgICB2b2lkIGFkZFBhZ2VTdHlsZShQYXNzUmVmUHRyPENTU1BhZ2VS
dWxlPik7Ci0gICAgdm9pZCBhZGRSZWdpb25SdWxlKFBhc3NSZWZQdHI8V2ViS2l0Q1NTUmVnaW9u
UnVsZT4pOwogCi0gICAgYm9vbCBjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqKTsKKyAgICBib29s
IGNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCk7CiAKICAgICBib29sIHVz
ZXNTaWJsaW5nUnVsZXMoKSBjb25zdCB7IHJldHVybiAhbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMu
aXNFbXB0eSgpOyB9CiAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVy
biBtX2ZlYXR1cmVzLnVzZXNGaXJzdExpbmVSdWxlczsgfQpAQCAtMjU1LDcgKzI0OSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0Fk
anVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7CiAKICAgICB2b2lkIGFk
ZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVu
ZChydWxlKTsgfQotICAgIHZvaWQgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hBbGwsIEVSZWdpb25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSA9IERvTm90VXNl
SW5SZWdpb25TdHlsZSk7CisgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaEFsbCk7CiAKICAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgewogICAgICAgICBNYXRj
aFJlc3VsdCgpIDogZmlyc3RVQVJ1bGUoLTEpLCBsYXN0VUFSdWxlKC0xKSwgZmlyc3RBdXRob3JS
dWxlKC0xKSwgbGFzdEF1dGhvclJ1bGUoLTEpLCBmaXJzdFVzZXJSdWxlKC0xKSwgbGFzdFVzZXJS
dWxlKC0xKSwgaXNDYWNoZWFibGUodHJ1ZSkgeyB9CkBAIC0yNzAsMTEgKzI2NCwxMyBAQCBwcml2
YXRlOgogICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgbWF0
Y2hVQVJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpOworICAgIHZvaWQgY29sbGVjdFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZv
aWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RS
dWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAg
ICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2
b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKIAogICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBS
dWxlRGF0YSYpOworICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3RvcihDU1NTZWxlY3RvciogcmVn
aW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwogCiAgICAgdm9pZCBhcHBseU1h
dGNoZWREZWNsYXJhdGlvbnMoY29uc3QgTWF0Y2hSZXN1bHQmKTsKICAgICB0ZW1wbGF0ZSA8Ym9v
bCBmaXJzdFBhc3M+CkBAIC0yODIsNiArMjc4LDggQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8
Ym9vbCBmaXJzdFBhc3M+CiAgICAgdm9pZCBhcHBseURlY2xhcmF0aW9uKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsKIAor
ICAgIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KGludCBpZCk7CisKICAg
ICB2b2lkIG1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNG
aXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogICAgIHZvaWQgbWF0Y2hQYWdlUnVs
ZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wg
aXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogICAgIGJvb2wgaXNMZWZ0UGFn
ZShpbnQgcGFnZUluZGV4KSBjb25zdDsKQEAgLTI5MSw3ICsyODksNiBAQCBwcml2YXRlOgogCiAg
ICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1f
dXNlclN0eWxlOwotICAgIE93blB0cjxSdWxlU2V0PiBtX3JlZ2lvblJ1bGVzOwogCiAgICAgRmVh
dHVyZXMgbV9mZWF0dXJlczsKICAgICBPd25QdHI8UnVsZVNldD4gbV9zaWJsaW5nUnVsZVNldDsK
QEAgLTMwNSw5ICszMDIsNiBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNT
dHJpbmdJbXBsKiwgUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+ID4gS2V5ZnJhbWVzUnVs
ZU1hcDsKICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVzUnVsZU1hcDsKIAotICAgIHR5
cGVkZWYgVmVjdG9yPFJlZlB0cjxXZWJLaXRDU1NSZWdpb25SdWxlPiA+IFJlZ2lvblN0eWxlUnVs
ZXM7Ci0gICAgUmVnaW9uU3R5bGVSdWxlcyBtX3JlZ2lvblN0eWxlUnVsZXM7Ci0KIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4g
c19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCkBAIC0zMTcsNyArMzExLDYgQEAgcHVibGljOgog
CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZTsgfQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVnaW9uU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlOyB9CiAKIHByaXZhdGU6CiAg
ICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwpAQCAtMzY2LDEw
ICszNTksNyBAQCBwcml2YXRlOgogCiAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gc3R5bGVEZWNsYXJhdGlvbjsKICAgICAgICAgdW5pb24gewotICAgICAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlIDogMzE7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgdXNlSW5SZWdpb25TdHlsZSA6IDE7IC8vIEVSZWdpb25T
dHlsZUVuYWJsZWQKLSAgICAgICAgICAgIH07CisgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0
Y2hUeXBlOwogICAgICAgICAgICAgLy8gVXNlZCB0byBtYWtlIHN1cmUgYWxsIG1lbW9yeSBpcyB6
ZXJvLWluaXRpYWxpemVkIHNpbmNlIHdlIGNvbXB1dGUgdGhlIGhhc2ggb3ZlciB0aGUgYnl0ZXMg
b2YgdGhpcyBvYmplY3QuCiAgICAgICAgICAgICB2b2lkKiBwb3NzaWJseVBhZGRlZE1lbWJlcjsK
ICAgICAgICAgfTsKQEAgLTQzMSw3ICs0MjEsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2Fw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKICAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZTsKLSAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVnaW9uU3R5bGU7CiAg
ICAgY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5JiBtX2FwcGx5UHJvcGVydHk7CiAgICAgCiAj
aWYgRU5BQkxFKENTU19TSEFERVJTKQo=
</data>
<flag name="review"
          id="123639"
          type_id="1"
          status="-"
          setter="koivisto"
    />
    <flag name="commit-queue"
          id="123640"
          type_id="3"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122916</attachid>
            <date>2012-01-18 06:22:57 -0800</date>
            <delta_ts>2012-01-18 07:33:37 -0800</delta_ts>
            <desc>Patch 2</desc>
            <filename>76453-2.patch</filename>
            <type>text/plain</type>
            <size>31733</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3MDA3ZDA2Li5jZWE4MjVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDEt
MTggIE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTU1Jl
Z2lvbnNdRml4IHJlZ2lvbiBzdHlsZSBjb2RlIGluIENTU1N0eWxlU2VsZWN0b3IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDUzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHRoZSB0ZXN0IGFzIGl0
IHdhcyBub3QgdGFraW5nIGludG8gYWNjb3VudCB0aGUgc2VsZWN0b3Igc3BlY2lmaWNpdHkuCisg
ICAgICAgICogZmFzdC9yZWdpb25zL3JlZ2lvbi1zdHlsZS1ibG9jay1iYWNrZ3JvdW5kLWNvbG9y
Lmh0bWw6CisKIDIwMTItMDEtMTggIEdhYm9yIFJhcGNzYW55aSAgPHJnYWJvckB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFtRdF0gVXBkYXRlIHNvbWUgU1ZHIGV4cGVjdGVkIGFmdGVyIHIxMDUyNDcu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvcmVnaW9uLXN0eWxlLWJsb2Nr
LWJhY2tncm91bmQtY29sb3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9yZWdpb24t
c3R5bGUtYmxvY2stYmFja2dyb3VuZC1jb2xvci5odG1sCmluZGV4IGQ3ZGMyN2E4Li4xZjc2MGZh
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvcmVnaW9uLXN0eWxlLWJsb2Nr
LWJhY2tncm91bmQtY29sb3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvcmVn
aW9uLXN0eWxlLWJsb2NrLWJhY2tncm91bmQtY29sb3IuaHRtbApAQCAtNDQsNyArNDQsNyBAQAog
ICAgICAgICAgICAgI3JlZ2lvbjcxICB7IC13ZWJraXQtZmxvdy1mcm9tOiBmbG93NzsgfQogICAg
ICAgICAgICAgI3JlZ2lvbjcyICB7IC13ZWJraXQtZmxvdy1mcm9tOiBmbG93NzsgfQogICAgICAg
ICAgICAgI3A3IHsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IH0KLSAgICAgICAgICAgIEAtd2Vi
a2l0LXJlZ2lvbiAjcmVnaW9uNzEgeyBwIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7
IH0gfQorICAgICAgICAgICAgQC13ZWJraXQtcmVnaW9uICNyZWdpb243MSB7ICNwNyB7IGJhY2tn
cm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9IH0KICAgICAgICAgPC9zdHlsZT4KICAgIDwvaGVh
ZD4KICAgICA8Ym9keSBjbGFzcz0iYm9keSI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjMzNDQ5MS4uMjc1Mzkz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAxLTE4ICBNaWhuZWEgT3ZpZGVu
aWUgIDxtaWhuZWFAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1NSZWdpb25zXUZpeCByZWdpb24g
c3R5bGUgY29kZSBpbiBDU1NTdHlsZVNlbGVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZvbGxvdyB1cCBhZnRlciBjb21tZW50cyBpbiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNjQuCisgICAgICAgIFdpdGggdGhl
IG5ldyBhcHByb2FjaCwgdGhlIGNzcyBydWxlIHNwZWNpZmljaXR5IGlzIGNvcnJlY3RseSB0YWtl
biBpbnRvIGFjY291bnQKKyAgICAgICAgd2hlbiBhcHBseWluZyB0aGUgcmVnaW9uIHN0eWxlIHJ1
bGUuCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhlIHJlZ2lvbiBzdHlsZSB0ZXN0cyBhcmUgc3Rp
bGwgZGlzYWJsZWQuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSdWxlU2V0OjpSdWxlU2V0U2VsZWN0b3JQYWlyOjpSdWxlU2V0U2VsZWN0
b3JQYWlyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERl
Y2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RN
YXRjaGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6Om1hdGNoUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjpjaGVja1JlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OmNoZWNrUmVnaW9uU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6
OlJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OlJ1bGVTZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0
OjphZGRSZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJv
bVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmlzSW5zaWRlUmVn
aW9uUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xh
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFy
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmlzVmFsaWRSZWdp
b25TdHlsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5UHJvcGVydHkpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisKIDIwMTIt
MDEtMTcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IHRyYWNrIEhUTUwgcmV2aXNpb25zIHdoZW4gZWRpdGluZyBET00gYW5kIC8g
b3IgdXBvbiBmcmVlIGZsb3cgZWRpdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAKaW5kZXggMGZiYzkwNC4uODNhMmJjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIGlmIChwcmltaXRpdmVWYWx1ZSkgXAog
CiBjbGFzcyBSdWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAgUnVsZURhdGEoQ1NTU3R5bGVSdWxlKiwg
Q1NTU2VsZWN0b3IqLCB1bnNpZ25lZCBwb3NpdGlvbiwgRVJlZ2lvblN0eWxlRW5hYmxlZCB1c2VJ
blJlZ2lvblN0eWxlID0gRG9Ob3RVc2VJblJlZ2lvblN0eWxlKTsKKyAgICBSdWxlRGF0YShDU1NT
dHlsZVJ1bGUqLCBDU1NTZWxlY3RvciosIHVuc2lnbmVkIHBvc2l0aW9uKTsKIAogICAgIHVuc2ln
bmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIENTU1N0eWxl
UnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQpAQCAtMTgyLDcgKzE4Miw2IEBA
IHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yOyB9CiAgICAg
dW5zaWduZWQgc3BlY2lmaWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmljaXR5OyB9CiAg
ICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlw
ZTsgfQotICAgIEVSZWdpb25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEVSZWdpb25TdHlsZUVuYWJsZWQ+KG1fdXNlSW5SZWdpb25TdHls
ZSk7IH0KIAogICAgIC8vIFRyeSB0byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVy
ZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVy
Zm9ybWFuY2UuCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291
bnQgPSA0OwpAQCAtMTk0LDEzICsxOTMsMTIgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3Nw
ZWNpZmljaXR5OwogICAgIC8vIFRoaXMgbnVtYmVyIHdhcyBwaWNrZWQgZmFpcmx5IGFyYml0cmFy
aWx5LiBXZSBjYW4gcHJvYmFibHkgbG93ZXIgaXQgaWYgd2UgbmVlZCB0by4KICAgICAvLyBTb21l
IHNpbXBsZSB0ZXN0aW5nIHNob3dlZCA8MTAwLDAwMCBSdWxlRGF0YSdzIG9uIGxhcmdlIHNpdGVz
LgotICAgIHVuc2lnbmVkIG1fcG9zaXRpb24gOiAyNTsKKyAgICB1bnNpZ25lZCBtX3Bvc2l0aW9u
IDogMjY7CiAgICAgdW5zaWduZWQgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgOiAxOwogICAg
IHVuc2lnbmVkIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IgOiAxOwogICAgIHVuc2lnbmVkIG1faGFz
UmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2ggOiAxOwogICAgIHVu
c2lnbmVkIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yIDogMTsKICAgICB1bnNp
Z25lZCBtX2xpbmtNYXRjaFR5cGUgOiAyOyAvLyAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hN
YXNrCi0gICAgdW5zaWduZWQgbV91c2VJblJlZ2lvblN0eWxlIDogMTsgLy8gRVJlZ2lvblN0eWxl
RW5hYmxlZAogICAgIC8vIFVzZSBwbGFpbiBhcnJheSBpbnN0ZWFkIG9mIGEgVmVjdG9yIHRvIG1p
bmltaXplIG1lbW9yeSBvdmVyaGVhZC4KICAgICB1bnNpZ25lZCBtX2Rlc2NlbmRhbnRTZWxlY3Rv
cklkZW50aWZpZXJIYXNoZXNbbWF4aW11bUlkZW50aWZpZXJDb3VudF07CiB9OwpAQCAtMjE4LDcg
KzIxNiw3IEBAIENPTVBJTEVfQVNTRVJUKHNpemVvZihSdWxlRGF0YSkgPT0gc2l6ZW9mKFNhbWVT
aXplQXNSdWxlRGF0YSksIFJ1bGVEYXRhX3Nob3VsZF9zCiBjbGFzcyBSdWxlU2V0IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShSdWxlU2V0KTsKIHB1YmxpYzoKLSAgICBSdWxlU2V0KEVSZWdp
b25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSA9IERvTm90VXNlSW5SZWdpb25TdHlsZSk7
CisgICAgUnVsZVNldCgpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRvbVJ1bGVNYXA7CiAKQEAgLTIyOCw2ICsy
MjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSosIENTU1NlbGVj
dG9yKik7CiAgICAgdm9pZCBhZGRQYWdlUnVsZShDU1NQYWdlUnVsZSopOwogICAgIHZvaWQgYWRk
VG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxl
RGF0YSYpOworICAgIHZvaWQgYWRkUmVnaW9uUnVsZShXZWJLaXRDU1NSZWdpb25SdWxlKik7CiAg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgp
IHsgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkID0gZmFsc2U7IH0KIApAQCAtMjUzLDkgKzI1Miwx
NiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3BhZ2VSdWxlczsKICAgICB1bnNp
Z25lZCBtX3J1bGVDb3VudDsKICAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZDsKLSAg
ICBFUmVnaW9uU3R5bGVFbmFibGVkIG1fdXNlSW5SZWdpb25TdHlsZTsKLQogICAgIENTU1N0eWxl
U2VsZWN0b3I6OkZlYXR1cmVzIG1fZmVhdHVyZXM7CisKKyAgICBzdHJ1Y3QgUnVsZVNldFNlbGVj
dG9yUGFpciB7CisgICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yLCBSdWxlU2V0KiBydWxlU2V0KSA6IHNlbGVjdG9yKHNlbGVjdG9yKSwgcnVsZVNldChhZG9w
dFB0cihydWxlU2V0KSkgeyB9CisgICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoY29uc3QgUnVs
ZVNldFNlbGVjdG9yUGFpciYgcnMpIDogc2VsZWN0b3IocnMuc2VsZWN0b3IpLCBydWxlU2V0KGNv
bnN0X2Nhc3Q8UnVsZVNldFNlbGVjdG9yUGFpcio+KCZycyktPnJ1bGVTZXQucmVsZWFzZSgpKSB7
IH0KKyAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOworICAgICAgICBPd25QdHI8UnVsZVNl
dD4gcnVsZVNldDsKKyAgICB9OworCisgICAgVmVjdG9yPFJ1bGVTZXRTZWxlY3RvclBhaXI+IG1f
cmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHM7CiB9OwogCiBzdGF0aWMgUnVsZVNldCogZGVmYXVs
dFN0eWxlOwpAQCAtMzI1LDcgKzMzMSw2IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAg
LCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2N1bWVudCkpCiAgICAg
LCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQogICAgICwgbV9hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKQotICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWdp
b25TdHlsZShmYWxzZSkKICAgICAsIG1fYXBwbHlQcm9wZXJ0eShDU1NTdHlsZUFwcGx5UHJvcGVy
dHk6OnNoYXJlZENTU1N0eWxlQXBwbHlQcm9wZXJ0eSgpKQogI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKICAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCkBAIC00NDAsMTEgKzQ0NSw2IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQg
Zmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSCiAgICAgICAgIGRvY3VtZW50KCktPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogfQogCi12b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFkZFJlZ2lvblJ1bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NSZWdpb25SdWxl
PiByZWdpb25TdHlsZVJ1bGUpCi17Ci0gICAgbV9yZWdpb25TdHlsZVJ1bGVzLmFwcGVuZChyZWdp
b25TdHlsZVJ1bGUpOwotfQotCiAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBzdHlsZSBzZXR0aW5n
IGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHlsZXMKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRk
S2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+IHJ1bGUpCiB7
CkBAIC02MzIsNDQgKzYzMiw2NyBAQCBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVl
dHNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgQVNTRVJUX1VOVVNFRChsb2FkZWRN
YXRoTUxVc2VyQWdlbnRTaGVldCwgbG9hZGVkTWF0aE1MVXNlckFnZW50U2hlZXQgfHwgZGVmYXVs
dFN0eWxlLT5mZWF0dXJlcygpLnNpYmxpbmdSdWxlcy5pc0VtcHR5KCkpOwogfQogCi12b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgRVJlZ2lv
blN0eWxlRW5hYmxlZCB1c2VJblJlZ2lvblN0eWxlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
ZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVj
bGFyYXRpb24sIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUpCiB7CiAgICAgbV9tYXRjaGVkRGVjbHMu
Z3JvdyhtX21hdGNoZWREZWNscy5zaXplKCkgKyAxKTsKICAgICBNYXRjaGVkU3R5bGVEZWNsYXJh
dGlvbiYgbmV3RGVjbGFyYXRpb24gPSBtX21hdGNoZWREZWNscy5sYXN0KCk7CiAgICAgbmV3RGVj
bGFyYXRpb24uc3R5bGVEZWNsYXJhdGlvbiA9IHN0eWxlRGVjbGFyYXRpb247CiAgICAgbmV3RGVj
bGFyYXRpb24ubGlua01hdGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7Ci0gICAgbmV3RGVjbGFyYXRp
b24udXNlSW5SZWdpb25TdHlsZSA9IHVzZUluUmVnaW9uU3R5bGU7CiB9CiAKLXZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRl
eCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVz
KQogewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7Ci0KLSAgICBpZiAoIXJ1bGVzIHx8ICFt
X2VsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQocnVsZXMpOworICAgIEFTU0VS
VChtX2VsZW1lbnQpOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3Ig
aWQsIGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAg
ICAvLyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KICAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQot
ICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+aWRSdWxlcyhtX2VsZW1lbnQtPmlkRm9y
U3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KHJ1bGVzLT5pZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkp
LCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAg
IGlmIChtX2VsZW1lbnQtPmhhc0NsYXNzKCkpIHsKICAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxl
bWVudCk7CiAgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMgPSBtX3N0
eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKTsKICAgICAgICAgc2l6ZV90IHNpemUgPSBjbGFzc05h
bWVzLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0g
ICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Y2xhc3NSdWxlcyhjbGFzc05hbWVz
W2ldLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QocnVsZXMtPmNs
YXNzUnVsZXMoY2xhc3NOYW1lc1tpXS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIH0KICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHBzZXVkb0lkID0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwogICAgIGlmICghcHNldWRv
SWQuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChtX3N0eWxlZEVsZW1lbnQpOwotICAgICAg
ICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVk
b0lkLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+c2hhZG93
UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0
UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgfQogICAgIGlmIChtX2VsZW1lbnQt
PmlzTGluaygpKQotICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+bGlua1BzZXVkb0Ns
YXNzUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT5saW5rUHNl
dWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVt
cHR5UnVsZXMpOwogICAgIGlmIChtX2NoZWNrZXIubWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MobV9l
bGVtZW50KSkKLSAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmZvY3VzUHNldWRvQ2xh
c3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOwotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdSdWxlcyhtX2VsZW1lbnQtPmxv
Y2FsTmFtZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRl
RW1wdHlSdWxlcyk7Ci0gICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnVuaXZlcnNhbFJ1bGVz
KCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Cisg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+Zm9jdXNQc2V1ZG9DbGFz
c1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdSdWxlcyhtX2Vs
ZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4
LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1
bGVzLT51bml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5j
bHVkZUVtcHR5UnVsZXMpOworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBp
bnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisgICAgaWYgKG1f
cmVnaW9uRm9yU3R5bGluZykgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gcnVsZXMtPm1fcmVn
aW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBDU1NTZWxlY3RvciogcmVnaW9uU2Vs
ZWN0b3IgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3Rv
cjsKKyAgICAgICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKHJlZ2lvblNlbGVjdG9yLCBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obV9yZWdpb25Gb3JTdHlsaW5nLT5ub2RlKCkpKSkgeworICAg
ICAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gcnVsZXMtPm1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQocmVnaW9uUnVsZXMpOworICAgICAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJl
Z2lvblJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyAgICBtX21h
dGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgaWYgKCFydWxlcyB8fCAhbV9lbGVtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhydWxlcywgZmlyc3RSdWxl
SW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihydWxlcywgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKIAogICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTY5Myw3ICs3MTYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdAogICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbV9tYXRjaGVkUnVsZXNbaV0t
PmxpbmtNYXRjaFR5cGUoKTsKICAgICAgICAgaWYgKHN3YXBWaXNpdGVkVW52aXNpdGVkICYmIGxp
bmtNYXRjaFR5cGUgJiYgbGlua01hdGNoVHlwZSAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxs
KQogICAgICAgICAgICAgbGlua01hdGNoVHlwZSA9IChsaW5rTWF0Y2hUeXBlID09IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hWaXNpdGVkKSA/IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rIDogU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7Ci0gICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlv
bihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpLCBsaW5rTWF0Y2hUeXBl
LCBtX21hdGNoZWRSdWxlc1tpXS0+dXNlSW5SZWdpb25TdHlsZSgpKTsKKyAgICAgICAgYWRkTWF0
Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCks
IGxpbmtNYXRjaFR5cGUpOwogICAgIH0KIH0KIApAQCAtNzMxLDcgKzc1NCw3IEBAIGlubGluZSBz
dGF0aWMgYm9vbCBtYXRjaGVzSW5UcmVlU2NvcGUoVHJlZVNjb3BlKiB0cmVlU2NvcGUsIGJvb2wg
cnVsZVJlYWNoZXNJbnRvCiAgICAgcmV0dXJuIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNo
aW5nVUFSdWxlcygpIHx8IHRyZWVTY29wZS0+YXBwbHlBdXRob3JTaGVldHMoKSB8fCBydWxlUmVh
Y2hlc0ludG9TaGFkb3dET007CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxl
c0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5k
ZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxS
dWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcmV0
dXJuOwpAQCAtODUxLDkgKzg3NCw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBbGxS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcykKICAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQuZmly
c3RBdXRob3JSdWxlLCByZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKIAotICAgIGlmICht
X3JlZ2lvbkZvclN0eWxpbmcpCi0gICAgICAgIG1hdGNoUnVsZXMobV9yZWdpb25SdWxlcy5nZXQo
KSwgcmVzdWx0LmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0Lmxhc3RBdXRob3JSdWxlLCBmYWxzZSk7
Ci0KICAgICAvLyBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgaWYg
KG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewogICAgICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lRGVjbCA9IG1fc3R5bGVkRWxlbWVu
dC0+aW5saW5lU3R5bGVEZWNsKCk7CkBAIC05MDYsMzcgKzkyNiw2IEBAIGlubGluZSB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCogZSwgUmVuZGVyU3R5
bGUqIHBhcmVuCiAgICAgbV9mb250RGlydHkgPSBmYWxzZTsKIH0KIAotaW5saW5lIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6aW5pdEZvclJlZ2lvblN0eWxpbmcoUmVuZGVyUmVnaW9uKiByZWdpb24p
Ci17Ci0gICAgc2V0UmVnaW9uRm9yU3R5bGluZyhyZWdpb24pOwotCi0gICAgaWYgKHJlZ2lvbikK
LSAgICAgICAgaW5pdFJlZ2lvblJ1bGVzKHJlZ2lvbik7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6aW5pdFJlZ2lvblJ1bGVzKFJlbmRlclJlZ2lvbiogcmVnaW9uKQotewotICAgIEFTU0VS
VChyZWdpb24pOwotICAgIC8vIE1hcmsgdGhhdCB0aGUgc2V0IG9mIHJ1bGVzIGNvbWVzIGZyb20g
cmVnaW9uIHN0eWxpbmcgc2luY2Ugd2UgbmVlZCB0byBmaWx0ZXIKLSAgICAvLyB0aGUgcHJvcGVy
dGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkLgotICAgIG1fcmVnaW9uUnVsZXMgPSBhZG9wdFB0cihu
ZXcgUnVsZVNldChVc2VJblJlZ2lvblN0eWxlKSk7Ci0KLSAgICAvLyBGcm9tIGFsbCB0aGUgcmVn
aW9uIHN0eWxlIHJ1bGVzLCBzZWxlY3QgdGhvc2UgdGhhdCBhcHBseSB0byB0aGUgc3BlY2lmaWVk
IHJlZ2lvbi4KLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8V2ViS2l0Q1NTUmVnaW9uUnVsZT4gPjo6
aXRlcmF0b3IgaXQgPSBtX3JlZ2lvblN0eWxlUnVsZXMuYmVnaW4oKTsgaXQgIT0gbV9yZWdpb25T
dHlsZVJ1bGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYg
cmVnaW9uU2VsZWN0b3JMaXN0ID0gKCppdCktPnNlbGVjdG9yTGlzdCgpOwotICAgICAgICBmb3Ig
KENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3JMaXN0LmZpcnN0KCk7IHM7IHMgPSByZWdp
b25TZWxlY3Rvckxpc3QubmV4dChzKSkgewotICAgICAgICAgICAgaWYgKCFtX2NoZWNrZXIuY2hl
Y2tTZWxlY3RvcihzLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocmVnaW9uLT5ub2RlKCkpKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1J1bGVMaXN0KiByZWdpb25T
dHlsaW5nUnVsZXMgPSAoKml0KS0+Y3NzUnVsZXMoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IHJlZ2lvblN0eWxpbmdSdWxlcy0+bGVuZ3RoKCk7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICBDU1NSdWxlKiByZWdpb25TdHlsaW5nUnVsZSA9IHJlZ2lv
blN0eWxpbmdSdWxlcy0+aXRlbShpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlZ2lvblN0
eWxpbmdSdWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgICAgICAgICBtX3JlZ2lvblJ1
bGVzLT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocmVnaW9uU3R5bGlu
Z1J1bGUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwogc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkID0gMTA7CiAKQEAgLTEzMjAsNyArMTMw
OSw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9y
RWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kCiAKICAgICBpbml0RWxlbWVudChlbGVtZW50
KTsKICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQpOwotICAg
IGluaXRGb3JSZWdpb25TdHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpOworICAgIG1fcmVnaW9uRm9y
U3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7CiAgICAgaWYgKGFsbG93U2hhcmluZykgewogICAg
ICAgICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwogICAg
ICAgICBpZiAoc2hhcmVkU3R5bGUpCkBAIC0xNDc3LDcgKzE0NjYsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJl
bmRlclN0eWxlKgogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVT
ZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCog
ZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxp
bmcpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpCiB7CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE0ODUsNyAr
MTQ3NCw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVk
b1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sCiAgICAgaW5pdEVsZW1lbnQoZSk7CiAK
ICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIHBhcmVudFN0eWxlLCBwc2V1ZG8pOwotICAgIGlu
aXRGb3JSZWdpb25TdHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpOwogICAgIG1fc3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y3JlYXRlKCk7CiAKICAgICBpZiAobV9wYXJlbnRTdHlsZSkKQEAgLTE3NzgsMTUg
KzE3NjYsMjAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZShSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnQKICNlbmRpZgogfQogCi1ib29sIENT
U1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogZSkKK2Jvb2wgQ1NTU3R5
bGVTZWxlY3Rvcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25FbGVtZW50KQogewot
ICAgIG1fY2hlY2tlci5jbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOwotICAgIG1fY2hl
Y2tlci5zZXRQc2V1ZG9TdHlsZShOT1BTRVVETyk7CisgICAgdW5zaWduZWQgcnVsZXNTaXplID0g
bV9hdXRob3JTdHlsZS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7CisgICAgICAgIEFTU0VS
VChtX2F1dGhvclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVT
ZXQuZ2V0KCkpOworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX2F1dGhvclN0eWxl
LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVt
ZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAgIGZvciAoVmVjdG9y
PFJlZlB0cjxXZWJLaXRDU1NSZWdpb25SdWxlPiA+OjppdGVyYXRvciBpdCA9IG1fcmVnaW9uU3R5
bGVSdWxlcy5iZWdpbigpOyBpdCAhPSBtX3JlZ2lvblN0eWxlUnVsZXMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiByZWdpb25TZWxlY3Rvckxpc3QgPSAoKml0
KS0+c2VsZWN0b3JMaXN0KCk7Ci0gICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSByZWdpb25T
ZWxlY3Rvckxpc3QuZmlyc3QoKTsgczsgcyA9IHJlZ2lvblNlbGVjdG9yTGlzdC5uZXh0KHMpKSB7
Ci0gICAgICAgICAgICBpZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgZSkpCisgICAgaWYg
KG1fdXNlclN0eWxlKSB7CisgICAgICAgIHJ1bGVzU2l6ZSA9IG1fdXNlclN0eWxlLT5tX3JlZ2lv
blNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQobV91c2VyU3R5bGUt
Pm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKSk7CisgICAg
ICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX3VzZXJTdHlsZS0+bV9yZWdpb25TZWxl
Y3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvciwgcmVnaW9uRWxlbWVudCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0xODg1LDYgKzE4Nzgs
MjEgQEAgaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBS
dWxlRGF0YSYgcnVsZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KKworYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lvblNlbGVjdG9yKENTU1Nl
bGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCkKK3sKKyAgICBp
ZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBtX2NoZWNrZXIuY2xlYXJIYXNVbmtub3duUHNldWRvRWxlbWVudHMoKTsKKyAg
ICBtX2NoZWNrZXIuc2V0UHNldWRvU3R5bGUoTk9QU0VVRE8pOworCisgICAgZm9yIChDU1NTZWxl
Y3RvciogcyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMp
KQorICAgICAgICBpZiAobV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocywgcmVnaW9uRWxlbWVudCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KICAgICAK
IGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVz
KENTU1N0eWxlU2hlZXQqIHN0eWxlc2hlZXQsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBp
ZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKQogewpAQCAt
MTk2OSw3ICsxOTc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVJ1bGVEYXRhOjpSdWxlRGF0YShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVj
dG9yKiBzZWxlY3RvciwgdW5zaWduZWQgcG9zaXRpb24sIEVSZWdpb25TdHlsZUVuYWJsZWQgdXNl
SW5SZWdpb25TdHlsZSkKK1J1bGVEYXRhOjpSdWxlRGF0YShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWduZWQgcG9zaXRpb24pCiAgICAgOiBtX3J1bGUocnVs
ZSkKICAgICAsIG1fc2VsZWN0b3Ioc2VsZWN0b3IpCiAgICAgLCBtX3NwZWNpZmljaXR5KHNlbGVj
dG9yLT5zcGVjaWZpY2l0eSgpKQpAQCAtMTk3OSwxNSArMTk4NywxMyBAQCBSdWxlRGF0YTo6UnVs
ZURhdGEoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIHVuc2lnbmVk
IHBvc2l0aW9uLAogICAgICwgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2Vk
T25SdWxlSGFzaChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNlbGVjdG9y
KSkKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKFdlYkNvcmU6OmNv
bnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCiAgICAgLCBtX2xpbmtN
YXRjaFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKHNlbGVjdG9y
KSkKLSAgICAsIG1fdXNlSW5SZWdpb25TdHlsZSh1c2VJblJlZ2lvblN0eWxlKQogewogICAgIFNl
bGVjdG9yQ2hlY2tlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMobV9zZWxlY3RvciwgbV9kZXNj
ZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzLCBtYXhpbXVtSWRlbnRpZmllckNvdW50KTsK
IH0KIAotUnVsZVNldDo6UnVsZVNldChFUmVnaW9uU3R5bGVFbmFibGVkIHVzZUluUmVnaW9uU3R5
bGUpCitSdWxlU2V0OjpSdWxlU2V0KCkKICAgICA6IG1fcnVsZUNvdW50KDApCiAgICAgLCBtX2F1
dG9TaHJpbmtUb0ZpdEVuYWJsZWQodHJ1ZSkKLSAgICAsIG1fdXNlSW5SZWdpb25TdHlsZSh1c2VJ
blJlZ2lvblN0eWxlKQogewogfQogCkBAIC0yMDQ3LDcgKzIwNTMsNyBAQCB2b2lkIFJ1bGVTZXQ6
OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNv
bnN0IFJ1bGVEYQogCiB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBD
U1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2Vs
ZWN0b3IsIG1fcnVsZUNvdW50KyssIG1fdXNlSW5SZWdpb25TdHlsZSk7CisgICAgUnVsZURhdGEg
cnVsZURhdGEocnVsZSwgc2VsZWN0b3IsIG1fcnVsZUNvdW50KyspOwogICAgIGNvbGxlY3RGZWF0
dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1cmVzLCBydWxlRGF0YSk7CiAKICAgICBpZiAoc2VsZWN0
b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKSB7CkBAIC0yMDkwLDYgKzIwOTYsMjYgQEAg
dm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShDU1NQYWdlUnVsZSogcnVsZSkKICAgICBtX3BhZ2VS
dWxlcy5hcHBlbmQoUnVsZURhdGEocnVsZSwgcnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSwg
bV9wYWdlUnVsZXMuc2l6ZSgpKSk7CiB9CiAKK3ZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShX
ZWJLaXRDU1NSZWdpb25SdWxlKiBydWxlKQoreworICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVTZXQg
PSBuZXcgUnVsZVNldDsKKyAgICAvLyBUaGUgcmVnaW9uIHJ1bGUgc2V0IHNob3VsZCB0YWtlIGlu
dG8gYWNjb3VudCB0aGUgcG9zaXRpb24gaW5zaWRlIHRoZSBwYXJlbnQgcnVsZSBzZXQuCisgICAg
Ly8gT3RoZXJ3aXNlLCB0aGUgcnVsZXMgaW5zaWRlIHJlZ2lvbiBibG9jayBtaWdodCBiZSBpbmNv
cnJlY3RseSBwb3NpdGlvbmVkIGJlZm9yZSBvdGhlciBzaW1pbGFyIHJ1bGVzIGZyb20KKyAgICAv
LyB0aGUgc3R5bGVzaGVldCB0aGF0IGNvbnRhaW5zIHRoZSByZWdpb24gYmxvY2suCisgICAgcmVn
aW9uUnVsZVNldC0+bV9ydWxlQ291bnQgPSBtX3J1bGVDb3VudDsKKworICAgIC8vIENvbGxlY3Qg
dGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVsZSBzZXQKKyAgICBDU1NSdWxlTGlzdCogcmVnaW9u
U3R5bGluZ1J1bGVzID0gcnVsZS0+Y3NzUnVsZXMoKTsKKyAgICB1bnNpZ25lZCBydWxlc1NpemUg
PSByZWdpb25TdHlsaW5nUnVsZXMtPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBydWxlc1NpemU7ICsraSkgeworICAgICAgICBDU1NSdWxlKiByZWdpb25TdHlsaW5nUnVs
ZSA9IHJlZ2lvblN0eWxpbmdSdWxlcy0+aXRlbShpKTsKKyAgICAgICAgaWYgKHJlZ2lvblN0eWxp
bmdSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5
bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSk7Cisg
ICAgfQorCisgICAgbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNl
bGVjdG9yUGFpcihydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0KSk7
Cit9CisKIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hl
ZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciog
c3R5bGVTZWxlY3RvcikKIHsKICAgICBBU1NFUlQoc2hlZXQpOwpAQCAtMjE0Myw3ICsyMTY5LDcg
QEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0tl
eWZyYW1lc1J1bGUoKSkKICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5
bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHJ1bGUpKTsKICAgICAgICAg
ZWxzZSBpZiAocnVsZS0+aXNSZWdpb25SdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikKLSAgICAgICAg
ICAgIHN0eWxlU2VsZWN0b3ItPmFkZFJlZ2lvblJ1bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTUmVn
aW9uUnVsZSo+KHJ1bGUpKTsKKyAgICAgICAgICAgIGFkZFJlZ2lvblJ1bGUoc3RhdGljX2Nhc3Q8
V2ViS2l0Q1NTUmVnaW9uUnVsZSo+KHJ1bGUpKTsKICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlu
a1RvRml0RW5hYmxlZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKQEAgLTIyMTUsMTEgKzIyNDEs
MjkgQEAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUsIFJlbmRlclN0eWwKICAgICByZXR1cm4gY29udmVydFRvTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB0cnVlLCBtdWx0aXBsaWVyLCBvayk7
CiB9CiAKK2lubGluZSBib29sIENTU1N0eWxlU2VsZWN0b3I6OmlzSW5zaWRlUmVnaW9uUnVsZShD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NF
UlQoc3R5bGVEZWNsYXJhdGlvbik7CisKKyAgICBpZiAobV9yZWdpb25Gb3JTdHlsaW5nKSB7Cisg
ICAgICAgIENTU1J1bGUqIHBhcmVudFJ1bGUgPSBzdHlsZURlY2xhcmF0aW9uLT5wYXJlbnRSdWxl
KCk7CisgICAgICAgIHdoaWxlIChwYXJlbnRSdWxlKSB7CisgICAgICAgICAgICBpZiAocGFyZW50
UnVsZS0+aXNSZWdpb25SdWxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBwYXJlbnRSdWxlID0gcGFyZW50UnVsZS0+cGFyZW50UnVsZSgpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdGVtcGxhdGUgPGJvb2wgYXBwbHlGaXJz
dD4KIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBp
bmhlcml0ZWRPbmx5KQogewogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgp
LCBzdHlsZURlY2xhcmF0aW9uLT5wYXJlbnRSdWxlKCkpOwogICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZURlY2xhcmF0aW9uLT5lbmQoKTsK
KworICAgIGJvb2wgc3R5bGVEZWNsYXJhdGlvbkluc2lkZVJlZ2lvblJ1bGUgPSBpc0luc2lkZVJl
Z2lvblJ1bGUoc3R5bGVEZWNsYXJhdGlvbik7CisKICAgICBmb3IgKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlRGVjbGFyYXRpb24tPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgY3VycmVudCA9
ICppdDsKICAgICAgICAgaWYgKGlzSW1wb3J0YW50ICE9IGN1cnJlbnQuaXNJbXBvcnRhbnQoKSkK
QEAgLTIyMzIsNiArMjI3NiwxMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFy
YXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaW50IHByb3BlcnR5ID0gY3VycmVudC5p
ZCgpOworCisgICAgICAgIC8vIEZpbHRlciB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBs
aWVkIHVzaW5nIHJlZ2lvbiBzdHlsaW5nLgorICAgICAgICBpZiAoc3R5bGVEZWNsYXJhdGlvbklu
c2lkZVJlZ2lvblJ1bGUgJiYgIUNTU1N0eWxlU2VsZWN0b3I6OmlzVmFsaWRSZWdpb25TdHlsZVBy
b3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIGlmIChh
cHBseUZpcnN0KSB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChmaXJzdENTU1Byb3BlcnR5
ID09IENTU1Byb3BlcnR5Q29sb3IsIENTU19jb2xvcl9pc19maXJzdF9wcm9wZXJ0eSk7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eVpvb20gPT0gQ1NTUHJvcGVydHlDb2xv
ciArIDE4LCBDU1Nfem9vbV9pc19lbmRfb2ZfZmlyc3RfcHJvcF9yYW5nZSk7CkBAIC0yMjczLDEx
ICsyMzIyLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9ucyhib29s
IGlzSW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGUKICAgICAgICAgbV9hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewotICAgICAg
ICBtX2FwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlID0gbV9tYXRjaGVkRGVjbHNbaV0udXNlSW5S
ZWdpb25TdHlsZTsKKyAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsg
KytpKQogICAgICAgICBhcHBseURlY2xhcmF0aW9uPGFwcGx5Rmlyc3Q+KG1fbWF0Y2hlZERlY2xz
W2ldLnN0eWxlRGVjbGFyYXRpb24uZ2V0KCksIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5KTsK
LSAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWdpb25TdHlsZSA9IGZhbHNlOwotICAgIH0KIH0K
IAogdW5zaWduZWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29tcHV0ZURlY2xhcmF0aW9uSGFzaChNYXRj
aGVkU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb25zLCB1bnNpZ25lZCBzaXplKQpAQCAtMjU2
NSw3ICsyNjExLDcgQEAgaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaW50
IGlkKQogCiAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLXJlZ2lvbnMvI3RoZS1hdC1y
ZWdpb24tc3R5bGUtcnVsZQogLy8gRklYTUU6IGFkZCBpbmNyZW1lbnRhbCBzdXBwb3J0IGZvciBv
dGhlciByZWdpb24gc3R5bGluZyBwcm9wZXJ0aWVzLgotaW5saW5lIGJvb2wgaXNWYWxpZFJlZ2lv
blN0eWxlUHJvcGVydHkoaW50IGlkKQoraW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6aXNW
YWxpZFJlZ2lvblN0eWxlUHJvcGVydHkoaW50IGlkKQogewogICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8Q1NTUHJvcGVydHlJRD4oaWQpKSB7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcjoKQEAgLTI2NTYsMTAgKzI3MDIsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICAvLyBGaWx0ZXIgcmVnaW9uIHN0eWxlIHByb3BlcnR5Ci0gICAgaWYgKGFwcGx5UHJv
cGVydHlUb1JlZ2lvblN0eWxlKCkgJiYgIWlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KGlkKSkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSA9IHN0YXRpY19j
YXN0PENTU1Byb3BlcnR5SUQ+KGlkKTsKIAogICAgIGlmIChpc0luaGVyaXQgJiYgbV9wYXJlbnRT
dHlsZSAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMo
KSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkocHJvcGVydHkpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggMmZlZDE4My4uZDI5NjNmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCkBAIC0zNiw3ICszNiw2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGVudW0gRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHsgRG9Ob3RVc2VT
bWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUgfTsKLWVu
dW0gRVJlZ2lvblN0eWxlRW5hYmxlZCB7IERvTm90VXNlSW5SZWdpb25TdHlsZSwgVXNlSW5SZWdp
b25TdHlsZSB9OwogCiBjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFzcyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjsKQEAgLTExMCw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGtl
eWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIEtl
eWZyYW1lTGlzdCYpOwogCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVG
b3JFbGVtZW50KFBzZXVkb0lkLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
MCwgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CisgICAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkLCBFbGVtZW50KiwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCk7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7CiAKQEAgLTEzNyw4ICsxMzYsNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CiAgICAgdm9p
ZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCBpbml0Rm9yUmVnaW9uU3R5bGluZyhS
ZW5kZXJSZWdpb24qKTsKLSAgICB2b2lkIGluaXRSZWdpb25SdWxlcyhSZW5kZXJSZWdpb24qKTsK
ICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFy
ZWRTdHlsZSgpOwogICAgIGJvb2wgbWF0Y2hlc1J1bGVTZXQoUnVsZVNldCopOwpAQCAtMTQ3LDgg
KzE0NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5
bGVkRWxlbWVudCopIGNvbnN0OwogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVG
b3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFdlYktpdENTU0tleWZyYW1lUnVs
ZSosIEtleWZyYW1lVmFsdWUmKTsKLSAgICB2b2lkIHNldFJlZ2lvbkZvclN0eWxpbmcoUmVuZGVy
UmVnaW9uKiByZWdpb24pIHsgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uOyB9Ci0gICAgUmVu
ZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb25Gb3JT
dHlsaW5nOyB9CiAKIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBiYWNr
IHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9yIGEg
cHNldWRvLWVsZW1lbnQpLgpAQCAtMjA0LDkgKzE5OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
YWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+KTsKICAg
ICB2b2lkIGFkZFBhZ2VTdHlsZShQYXNzUmVmUHRyPENTU1BhZ2VSdWxlPik7Ci0gICAgdm9pZCBh
ZGRSZWdpb25SdWxlKFBhc3NSZWZQdHI8V2ViS2l0Q1NTUmVnaW9uUnVsZT4pOwogCi0gICAgYm9v
bCBjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqKTsKKyAgICBib29sIGNoZWNrUmVnaW9uU3R5bGUo
RWxlbWVudCogcmVnaW9uRWxlbWVudCk7CiAKICAgICBib29sIHVzZXNTaWJsaW5nUnVsZXMoKSBj
b25zdCB7IHJldHVybiAhbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOyB9CiAgICAg
Ym9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLnVzZXNG
aXJzdExpbmVSdWxlczsgfQpAQCAtMjU1LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBh
ZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlLCBFbGVtZW50Kik7CiAKICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0
IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQotICAgIHZv
aWQgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgdW5z
aWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIEVSZWdpb25T
dHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSA9IERvTm90VXNlSW5SZWdpb25TdHlsZSk7Cisg
ICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
LCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCk7CiAK
ICAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgewogICAgICAgICBNYXRjaFJlc3VsdCgpIDogZmlyc3RV
QVJ1bGUoLTEpLCBsYXN0VUFSdWxlKC0xKSwgZmlyc3RBdXRob3JSdWxlKC0xKSwgbGFzdEF1dGhv
clJ1bGUoLTEpLCBmaXJzdFVzZXJSdWxlKC0xKSwgbGFzdFVzZXJSdWxlKC0xKSwgaXNDYWNoZWFi
bGUodHJ1ZSkgeyB9CkBAIC0yNzAsMTggKzI2NCwyMyBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0
Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1hdGNoUmVz
dWx0Jik7CiAgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQg
bWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAg
dm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIGNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQg
Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpOwogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7
CiAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CiAKICAgICBib29sIGNoZWNrU2VsZWN0b3Io
Y29uc3QgUnVsZURhdGEmKTsKLQorICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3RvcihDU1NTZWxl
Y3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOworICAgIGJvb2wg
aXNJbnNpZGVSZWdpb25SdWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgdm9p
ZCBhcHBseU1hdGNoZWREZWNsYXJhdGlvbnMoY29uc3QgTWF0Y2hSZXN1bHQmKTsKICAgICB0ZW1w
bGF0ZSA8Ym9vbCBmaXJzdFBhc3M+CiAgICAgdm9pZCBhcHBseURlY2xhcmF0aW9ucyhib29sIGlt
cG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5
KTsKICAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+CiAgICAgdm9pZCBhcHBseURlY2xhcmF0
aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBp
bmhlcml0ZWRPbmx5KTsKIAorICAgIHN0YXRpYyBib29sIGlzVmFsaWRSZWdpb25TdHlsZVByb3Bl
cnR5KGludCBpZCk7CisKICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqLCBib29sIGlz
TGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogICAg
IHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBib29s
IGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwog
ICAgIGJvb2wgaXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKQEAgLTI5MSw3ICsyOTAs
NiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CiAgICAg
T3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOwotICAgIE93blB0cjxSdWxlU2V0PiBtX3JlZ2lv
blJ1bGVzOwogCiAgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBPd25QdHI8UnVsZVNldD4g
bV9zaWJsaW5nUnVsZVNldDsKQEAgLTMwNSw5ICszMDMsNiBAQCBwcml2YXRlOgogICAgIHR5cGVk
ZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1
bGU+ID4gS2V5ZnJhbWVzUnVsZU1hcDsKICAgICBLZXlmcmFtZXNSdWxlTWFwIG1fa2V5ZnJhbWVz
UnVsZU1hcDsKIAotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxXZWJLaXRDU1NSZWdpb25SdWxl
PiA+IFJlZ2lvblN0eWxlUnVsZXM7Ci0gICAgUmVnaW9uU3R5bGVSdWxlcyBtX3JlZ2lvblN0eWxl
UnVsZXM7Ci0KIHB1YmxpYzoKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZh
aWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCkBAIC0zMTcsNyAr
MzEyLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQogICAgIGJv
b2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRv
UmVnaW9uU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxl
OyB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzX3N0eWxlTm90WWV0QXZh
aWxhYmxlOwpAQCAtMzY2LDEwICszNjAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVEZWNsYXJhdGlvbjsKICAgICAgICAgdW5p
b24gewotICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW5r
TWF0Y2hUeXBlIDogMzE7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgdXNlSW5SZWdpb25TdHls
ZSA6IDE7IC8vIEVSZWdpb25TdHlsZUVuYWJsZWQKLSAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlOwogICAgICAgICAgICAgLy8gVXNlZCB0byBtYWtlIHN1
cmUgYWxsIG1lbW9yeSBpcyB6ZXJvLWluaXRpYWxpemVkIHNpbmNlIHdlIGNvbXB1dGUgdGhlIGhh
c2ggb3ZlciB0aGUgYnl0ZXMgb2YgdGhpcyBvYmplY3QuCiAgICAgICAgICAgICB2b2lkKiBwb3Nz
aWJseVBhZGRlZE1lbWJlcjsKICAgICAgICAgfTsKQEAgLTQzMSw3ICs0MjIsNiBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKICAgICBib29sIG1f
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKLSAgICBib29sIG1fYXBwbHlQcm9wZXJ0
eVRvUmVnaW9uU3R5bGU7CiAgICAgY29uc3QgQ1NTU3R5bGVBcHBseVByb3BlcnR5JiBtX2FwcGx5
UHJvcGVydHk7CiAgICAgCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122929</attachid>
            <date>2012-01-18 07:33:55 -0800</date>
            <delta_ts>2012-01-18 08:57:34 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-76453-20120118173352.patch</filename>
            <type>text/plain</type>
            <size>31956</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTYxYTQ0MjcwNjhjODQy
MjU4ZWIwYThkMzYyYzI3MTM0NjRiMmRiNS4uOGEyOTk2MmVlY2MzYjhkN2VjYTM4Y2MyZmMxM2Ew
NTg1MTBlMzNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAxLTE4ICBNaWhu
ZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1NSZWdpb25zXUZp
eCByZWdpb24gc3R5bGUgY29kZSBpbiBDU1NTdHlsZVNlbGVjdG9yCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ1MworCisgICAgICAgIFJldmlld2Vk
IGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIEZvbGxvdyB1cCBhZnRlciBjb21tZW50cyBp
biBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNjQuCisgICAgICAg
IFdpdGggdGhlIG5ldyBhcHByb2FjaCwgdGhlIGNzcyBydWxlIHNwZWNpZmljaXR5IGlzIGNvcnJl
Y3RseSB0YWtlbiBpbnRvIGFjY291bnQKKyAgICAgICAgd2hlbiBhcHBseWluZyB0aGUgcmVnaW9u
IHN0eWxlIHJ1bGUuCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhlIHJlZ2lvbiBzdHlsZSB0ZXN0
cyBhcmUgc3RpbGwgZGlzYWJsZWQuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpSdWxlU2V0U2VsZWN0b3JQYWlyOjpSdWxl
U2V0U2VsZWN0b3JQYWlyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YWRk
TWF0Y2hlZERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjpjaGVja1JlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OlJ1bGVTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlU2V0OjphZGRSZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFk
ZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OmlzSW5zaWRlUmVnaW9uUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmlzVmFsaWRSZWdpb25TdHlsZVBy
b3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVy
dHkpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisKIDIwMTItMDEtMTcgIFZz
ZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogRW5hYmxlIHN1cHBvcnQgZm9yIE9wZW4gU2NyaXB0IGRpYWxvZyBiYXNlZCBvbiBGaWx0
ZXJlZEl0ZW1TZWxlY3Rpb25EaWFsb2cuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAKaW5kZXggMGZiYzkwNGFiYmUwODUwNmFjZGMxYTg3ZjRjZWM2MGY3ZjAwYjcxNy4uZmQx
NDY2ZWNmNGZhN2E4NGZiYWFiZjc0NjE3ODg2MzA5MDRiN2E4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIGlmIChwcmltaXRpdmVW
YWx1ZSkgXAogCiBjbGFzcyBSdWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAgUnVsZURhdGEoQ1NTU3R5
bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCB1bnNpZ25lZCBwb3NpdGlvbiwgRVJlZ2lvblN0eWxlRW5h
YmxlZCB1c2VJblJlZ2lvblN0eWxlID0gRG9Ob3RVc2VJblJlZ2lvblN0eWxlKTsKKyAgICBSdWxl
RGF0YShDU1NTdHlsZVJ1bGUqLCBDU1NTZWxlY3RvciosIHVuc2lnbmVkIHBvc2l0aW9uKTsKIAog
ICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAg
IENTU1N0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQpAQCAtMTgyLDcg
KzE4Miw2IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxl
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
OyB9CiAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpZmlj
aXR5OyB9CiAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
a01hdGNoVHlwZTsgfQotICAgIEVSZWdpb25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVSZWdpb25TdHlsZUVuYWJsZWQ+KG1fdXNlSW5S
ZWdpb25TdHlsZSk7IH0KIAogICAgIC8vIFRyeSB0byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVz
YWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0
ZXJpbmcgcGVyZm9ybWFuY2UuCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVu
dGlmaWVyQ291bnQgPSA0OwpAQCAtMTk0LDEzICsxOTMsMTIgQEAgcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX3NwZWNpZmljaXR5OwogICAgIC8vIFRoaXMgbnVtYmVyIHdhcyBwaWNrZWQgZmFpcmx5
IGFyYml0cmFyaWx5LiBXZSBjYW4gcHJvYmFibHkgbG93ZXIgaXQgaWYgd2UgbmVlZCB0by4KICAg
ICAvLyBTb21lIHNpbXBsZSB0ZXN0aW5nIHNob3dlZCA8MTAwLDAwMCBSdWxlRGF0YSdzIG9uIGxh
cmdlIHNpdGVzLgotICAgIHVuc2lnbmVkIG1fcG9zaXRpb24gOiAyNTsKKyAgICB1bnNpZ25lZCBt
X3Bvc2l0aW9uIDogMjY7CiAgICAgdW5zaWduZWQgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ig
OiAxOwogICAgIHVuc2lnbmVkIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IgOiAxOwogICAgIHVuc2ln
bmVkIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2ggOiAx
OwogICAgIHVuc2lnbmVkIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yIDogMTsK
ICAgICB1bnNpZ25lZCBtX2xpbmtNYXRjaFR5cGUgOiAyOyAvLyAgU2VsZWN0b3JDaGVja2VyOjpM
aW5rTWF0Y2hNYXNrCi0gICAgdW5zaWduZWQgbV91c2VJblJlZ2lvblN0eWxlIDogMTsgLy8gRVJl
Z2lvblN0eWxlRW5hYmxlZAogICAgIC8vIFVzZSBwbGFpbiBhcnJheSBpbnN0ZWFkIG9mIGEgVmVj
dG9yIHRvIG1pbmltaXplIG1lbW9yeSBvdmVyaGVhZC4KICAgICB1bnNpZ25lZCBtX2Rlc2NlbmRh
bnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXNbbWF4aW11bUlkZW50aWZpZXJDb3VudF07CiB9OwpA
QCAtMjE4LDcgKzIxNiw3IEBAIENPTVBJTEVfQVNTRVJUKHNpemVvZihSdWxlRGF0YSkgPT0gc2l6
ZW9mKFNhbWVTaXplQXNSdWxlRGF0YSksIFJ1bGVEYXRhX3Nob3VsZF9zCiBjbGFzcyBSdWxlU2V0
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSdWxlU2V0KTsKIHB1YmxpYzoKLSAgICBSdWxl
U2V0KEVSZWdpb25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSA9IERvTm90VXNlSW5SZWdp
b25TdHlsZSk7CisgICAgUnVsZVNldCgpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0
cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRvbVJ1bGVNYXA7CiAKQEAg
LTIyOCw2ICsyMjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSos
IENTU1NlbGVjdG9yKik7CiAgICAgdm9pZCBhZGRQYWdlUnVsZShDU1NQYWdlUnVsZSopOwogICAg
IHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBj
b25zdCBSdWxlRGF0YSYpOworICAgIHZvaWQgYWRkUmVnaW9uUnVsZShXZWJLaXRDU1NSZWdpb25S
dWxlKik7CiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJp
bmtUb0ZpdCgpIHsgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkID0gZmFsc2U7IH0KIApAQCAtMjUz
LDkgKzI1MiwxNiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3BhZ2VSdWxlczsK
ICAgICB1bnNpZ25lZCBtX3J1bGVDb3VudDsKICAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5h
YmxlZDsKLSAgICBFUmVnaW9uU3R5bGVFbmFibGVkIG1fdXNlSW5SZWdpb25TdHlsZTsKLQogICAg
IENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzIG1fZmVhdHVyZXM7CisKKyAgICBzdHJ1Y3QgUnVs
ZVNldFNlbGVjdG9yUGFpciB7CisgICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIoQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yLCBSdWxlU2V0KiBydWxlU2V0KSA6IHNlbGVjdG9yKHNlbGVjdG9yKSwgcnVs
ZVNldChhZG9wdFB0cihydWxlU2V0KSkgeyB9CisgICAgICAgIFJ1bGVTZXRTZWxlY3RvclBhaXIo
Y29uc3QgUnVsZVNldFNlbGVjdG9yUGFpciYgcnMpIDogc2VsZWN0b3IocnMuc2VsZWN0b3IpLCBy
dWxlU2V0KGNvbnN0X2Nhc3Q8UnVsZVNldFNlbGVjdG9yUGFpcio+KCZycyktPnJ1bGVTZXQucmVs
ZWFzZSgpKSB7IH0KKyAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOworICAgICAgICBPd25Q
dHI8UnVsZVNldD4gcnVsZVNldDsKKyAgICB9OworCisgICAgVmVjdG9yPFJ1bGVTZXRTZWxlY3Rv
clBhaXI+IG1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHM7CiB9OwogCiBzdGF0aWMgUnVsZVNl
dCogZGVmYXVsdFN0eWxlOwpAQCAtMzI1LDcgKzMzMSw2IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVT
aGVlCiAgICAgLCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2N1bWVu
dCkpCiAgICAgLCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKQogICAgICwgbV9h
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKQotICAgICwgbV9hcHBseVByb3Bl
cnR5VG9SZWdpb25TdHlsZShmYWxzZSkKICAgICAsIG1fYXBwbHlQcm9wZXJ0eShDU1NTdHlsZUFw
cGx5UHJvcGVydHk6OnNoYXJlZENTU1N0eWxlQXBwbHlQcm9wZXJ0eSgpKQogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKICAgICAsIG1faGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpCkBAIC00NDAsMTEg
KzQ0NSw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHMo
dW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSCiAgICAgICAgIGRvY3VtZW50KCktPnJl
bmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogfQogCi12
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZFJlZ2lvblJ1bGUoUGFzc1JlZlB0cjxXZWJLaXRDU1NS
ZWdpb25SdWxlPiByZWdpb25TdHlsZVJ1bGUpCi17Ci0gICAgbV9yZWdpb25TdHlsZVJ1bGVzLmFw
cGVuZChyZWdpb25TdHlsZVJ1bGUpOwotfQotCiAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBzdHls
ZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHlsZXMKIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+
IHJ1bGUpCiB7CkBAIC02MzIsNDQgKzYzMiw2OCBAQCBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0
U3R5bGVTaGVldHNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgQVNTRVJUX1VOVVNF
RChsb2FkZWRNYXRoTUxVc2VyQWdlbnRTaGVldCwgbG9hZGVkTWF0aE1MVXNlckFnZW50U2hlZXQg
fHwgZGVmYXVsdFN0eWxlLT5mZWF0dXJlcygpLnNpYmxpbmdSdWxlcy5pc0VtcHR5KCkpOwogfQog
Ci12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiwgdW5zaWduZWQgbGlua01hdGNoVHlw
ZSwgRVJlZ2lvblN0eWxlRW5hYmxlZCB1c2VJblJlZ2lvblN0eWxlKQordm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlRGVjbGFyYXRpb24sIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUpCiB7CiAgICAgbV9tYXRj
aGVkRGVjbHMuZ3JvdyhtX21hdGNoZWREZWNscy5zaXplKCkgKyAxKTsKICAgICBNYXRjaGVkU3R5
bGVEZWNsYXJhdGlvbiYgbmV3RGVjbGFyYXRpb24gPSBtX21hdGNoZWREZWNscy5sYXN0KCk7CiAg
ICAgbmV3RGVjbGFyYXRpb24uc3R5bGVEZWNsYXJhdGlvbiA9IHN0eWxlRGVjbGFyYXRpb247CiAg
ICAgbmV3RGVjbGFyYXRpb24ubGlua01hdGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7Ci0gICAgbmV3
RGVjbGFyYXRpb24udXNlSW5SZWdpb25TdHlsZSA9IHVzZUluUmVnaW9uU3R5bGU7CiB9CiAKLXZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQor
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxl
cywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQogewotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7Ci0KLSAgICBpZiAoIXJ1
bGVzIHx8ICFtX2VsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQocnVsZXMpOwor
ICAgIEFTU0VSVChtX2VsZW1lbnQpOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBy
dWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZl
ciBhbmQKICAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KICAgICBpZiAobV9lbGVtZW50LT5o
YXNJRCgpKQotICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+aWRSdWxlcyhtX2VsZW1l
bnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KHJ1bGVzLT5pZFJ1bGVzKG1fZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24o
KS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOwogICAgIGlmIChtX2VsZW1lbnQtPmhhc0NsYXNzKCkpIHsKICAgICAgICAgQVNTRVJUKG1f
c3R5bGVkRWxlbWVudCk7CiAgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFt
ZXMgPSBtX3N0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKTsKICAgICAgICAgc2l6ZV90IHNpemUg
PSBjbGFzc05hbWVzLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCi0gICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Y2xhc3NSdWxlcyhj
bGFzc05hbWVzW2ldLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNs
dWRlRW1wdHlSdWxlcyk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qo
cnVsZXMtPmNsYXNzUnVsZXMoY2xhc3NOYW1lc1tpXS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIH0KICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHBzZXVkb0lkID0gbV9lbGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwogICAgIGlm
ICghcHNldWRvSWQuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChtX3N0eWxlZEVsZW1lbnQp
OwotICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+c2hhZG93UHNldWRvRWxlbWVudFJ1
bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNs
dWRlRW1wdHlSdWxlcyk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxl
cy0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgfQogICAgIGlmICht
X2VsZW1lbnQtPmlzTGluaygpKQotICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+bGlu
a1BzZXVkb0NsYXNzUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVz
LT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwg
aW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIGlmIChtX2NoZWNrZXIubWF0Y2hlc0ZvY3VzUHNldWRv
Q2xhc3MobV9lbGVtZW50KSkKLSAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmZvY3Vz
UHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdSdWxlcyhtX2Vs
ZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4
LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPnVuaXZl
cnNhbFJ1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChydWxlcy0+Zm9jdXNQ
c2V1ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHJ1bGVzLT50YWdS
dWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0
UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0KHJ1bGVzLT51bml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7Cisg
ICAgaWYgKCFtX3JlZ2lvbkZvclN0eWxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2ln
bmVkIHNpemUgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBDU1NTZWxl
Y3RvciogcmVnaW9uU2VsZWN0b3IgPSBydWxlcy0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0
cy5hdChpKS5zZWxlY3RvcjsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9u
U2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3JlZ2lvbkZvclN0eWxpbmctPm5vZGUo
KSkpKSB7CisgICAgICAgICAgICBSdWxlU2V0KiByZWdpb25SdWxlcyA9IHJ1bGVzLT5tX3JlZ2lv
blNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCk7CisgICAgICAgICAgICBB
U1NFUlQocmVnaW9uUnVsZXMpOworICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMocmVn
aW9uUnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hS
dWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUlu
ZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFy
KCk7CisKKyAgICBpZiAoIXJ1bGVzIHx8ICFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOwogCiAgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNjkzLDcgKzcxNyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhS
dWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0CiAgICAgICAgIHVu
c2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtX21hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgp
OwogICAgICAgICBpZiAoc3dhcFZpc2l0ZWRVbnZpc2l0ZWQgJiYgbGlua01hdGNoVHlwZSAmJiBs
aW5rTWF0Y2hUeXBlICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpCiAgICAgICAgICAgICBs
aW5rTWF0Y2hUeXBlID0gKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZp
c2l0ZWQpID8gU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmsgOiBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZDsKLSAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVz
W2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCksIGxpbmtNYXRjaFR5cGUsIG1fbWF0Y2hlZFJ1bGVz
W2ldLT51c2VJblJlZ2lvblN0eWxlKCkpOworICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24o
bV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSwgbGlua01hdGNoVHlwZSk7
CiAgICAgfQogfQogCkBAIC03MzEsNyArNzU1LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIG1hdGNo
ZXNJblRyZWVTY29wZShUcmVlU2NvcGUqIHRyZWVTY29wZSwgYm9vbCBydWxlUmVhY2hlc0ludG8K
ICAgICByZXR1cm4gTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkgfHwg
dHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygpIHx8IHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RP
TTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBW
ZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMs
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcykKIHsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICByZXR1cm47CkBAIC04NTEsOSAr
ODc1LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQpCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogICAgICAgICBt
YXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5maXJzdEF1dGhvclJ1bGUsIHJl
c3VsdC5sYXN0QXV0aG9yUnVsZSwgZmFsc2UpOwogCi0gICAgaWYgKG1fcmVnaW9uRm9yU3R5bGlu
ZykKLSAgICAgICAgbWF0Y2hSdWxlcyhtX3JlZ2lvblJ1bGVzLmdldCgpLCByZXN1bHQuZmlyc3RB
dXRob3JSdWxlLCByZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKLQogICAgIC8vIE5vdyBj
aGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KICAgICBpZiAobV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50KSB7CiAgICAgICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBpbmxpbmVEZWNsID0gbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZURl
Y2woKTsKQEAgLTkwNiwzNyArOTI3LDYgQEAgaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW4KICAgICBt
X2ZvbnREaXJ0eSA9IGZhbHNlOwogfQogCi1pbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpp
bml0Rm9yUmVnaW9uU3R5bGluZyhSZW5kZXJSZWdpb24qIHJlZ2lvbikKLXsKLSAgICBzZXRSZWdp
b25Gb3JTdHlsaW5nKHJlZ2lvbik7Ci0KLSAgICBpZiAocmVnaW9uKQotICAgICAgICBpbml0UmVn
aW9uUnVsZXMocmVnaW9uKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0UmVnaW9u
UnVsZXMoUmVuZGVyUmVnaW9uKiByZWdpb24pCi17Ci0gICAgQVNTRVJUKHJlZ2lvbik7Ci0gICAg
Ly8gTWFyayB0aGF0IHRoZSBzZXQgb2YgcnVsZXMgY29tZXMgZnJvbSByZWdpb24gc3R5bGluZyBz
aW5jZSB3ZSBuZWVkIHRvIGZpbHRlcgotICAgIC8vIHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJl
IGFwcGxpZWQuCi0gICAgbV9yZWdpb25SdWxlcyA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KFVzZUlu
UmVnaW9uU3R5bGUpKTsKLQotICAgIC8vIEZyb20gYWxsIHRoZSByZWdpb24gc3R5bGUgcnVsZXMs
IHNlbGVjdCB0aG9zZSB0aGF0IGFwcGx5IHRvIHRoZSBzcGVjaWZpZWQgcmVnaW9uLgotICAgIGZv
ciAoVmVjdG9yPFJlZlB0cjxXZWJLaXRDU1NSZWdpb25SdWxlPiA+OjppdGVyYXRvciBpdCA9IG1f
cmVnaW9uU3R5bGVSdWxlcy5iZWdpbigpOyBpdCAhPSBtX3JlZ2lvblN0eWxlUnVsZXMuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiByZWdpb25TZWxlY3Rvckxp
c3QgPSAoKml0KS0+c2VsZWN0b3JMaXN0KCk7Ci0gICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMg
PSByZWdpb25TZWxlY3Rvckxpc3QuZmlyc3QoKTsgczsgcyA9IHJlZ2lvblNlbGVjdG9yTGlzdC5u
ZXh0KHMpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHMsIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihyZWdpb24tPm5vZGUoKSkpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgQ1NTUnVsZUxpc3QqIHJlZ2lvblN0eWxpbmdSdWxlcyA9ICgq
aXQpLT5jc3NSdWxlcygpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgcmVnaW9uU3R5bGluZ1J1bGVzLT5sZW5ndGgoKTsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIENTU1J1bGUqIHJlZ2lvblN0eWxpbmdSdWxlID0gcmVnaW9uU3R5bGluZ1J1bGVzLT5p
dGVtKGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAocmVnaW9uU3R5bGluZ1J1bGUtPmlzU3R5
bGVSdWxlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fcmVnaW9uUnVsZXMtPmFkZFN0eWxlUnVs
ZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihyZWdpb25TdHlsaW5nUnVsZSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0
eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2Vh
cmNoTGV2ZWxUaHJlc2hvbGQgPSAxMDsKIApAQCAtMTMyMCw3ICsxMzEwLDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQq
IGVsZW1lbnQsIFJlbmQKIAogICAgIGluaXRFbGVtZW50KGVsZW1lbnQpOwogICAgIGluaXRGb3JT
dHlsZVJlc29sdmUoZWxlbWVudCwgZGVmYXVsdFBhcmVudCk7Ci0gICAgaW5pdEZvclJlZ2lvblN0
eWxpbmcocmVnaW9uRm9yU3R5bGluZyk7CisgICAgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9u
Rm9yU3R5bGluZzsKICAgICBpZiAoYWxsb3dTaGFyaW5nKSB7CiAgICAgICAgIFJlbmRlclN0eWxl
KiBzaGFyZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgICAgIGlmIChzaGFyZWRT
dHlsZSkKQEAgLTE0NzcsNyArMTQ2Nyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJh
bWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAg
fQogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9T
dHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZykKK1Bhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1
ZG9JZCBwc2V1ZG8sIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAg
ICBpZiAoIWUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQ4NSw3ICsxNDc1LDYgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50
KFBzZXVkb0lkIHBzZXVkbywKICAgICBpbml0RWxlbWVudChlKTsKIAogICAgIGluaXRGb3JTdHls
ZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBzZXVkbyk7Ci0gICAgaW5pdEZvclJlZ2lvblN0eWxp
bmcocmVnaW9uRm9yU3R5bGluZyk7CiAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKIAogICAgIGlmIChtX3BhcmVudFN0eWxlKQpAQCAtMTc3OCwxNSArMTc2NywyMCBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwg
UmVuZGVyU3R5bGUqIHBhcmVudAogI2VuZGlmCiB9CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiBlKQorYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVj
a1JlZ2lvblN0eWxlKEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpCiB7Ci0gICAgbV9jaGVja2VyLmNs
ZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCk7Ci0gICAgbV9jaGVja2VyLnNldFBzZXVkb1N0
eWxlKE5PUFNFVURPKTsKKyAgICB1bnNpZ25lZCBydWxlc1NpemUgPSBtX2F1dGhvclN0eWxlLT5t
X3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcnVsZXNTaXplOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKG1fYXV0aG9yU3R5bGUt
Pm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKSk7CisgICAg
ICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKG1fYXV0aG9yU3R5bGUtPm1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgZm9yIChWZWN0b3I8UmVmUHRyPFdlYktpdENT
U1JlZ2lvblJ1bGU+ID46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpb25TdHlsZVJ1bGVzLmJlZ2luKCk7
IGl0ICE9IG1fcmVnaW9uU3R5bGVSdWxlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBjb25zdCBD
U1NTZWxlY3Rvckxpc3QmIHJlZ2lvblNlbGVjdG9yTGlzdCA9ICgqaXQpLT5zZWxlY3Rvckxpc3Qo
KTsKLSAgICAgICAgZm9yIChDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9yTGlzdC5maXJz
dCgpOyBzOyBzID0gcmVnaW9uU2VsZWN0b3JMaXN0Lm5leHQocykpIHsKLSAgICAgICAgICAgIGlm
IChtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzLCBlKSkKKyAgICBpZiAobV91c2VyU3R5bGUpIHsK
KyAgICAgICAgcnVsZXNTaXplID0gbV91c2VyU3R5bGUtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVs
ZVNldHMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXNTaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3VzZXJTdHlsZS0+bV9yZWdpb25TZWxlY3Rv
cnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChjaGVj
a1JlZ2lvblNlbGVjdG9yKG1fdXNlclN0eWxlLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRz
LmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTE4ODUsNiArMTg3OSwyMSBAQCBpbmxpbmUgYm9v
bCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0
YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQorCitib29sIENT
U1N0eWxlU2VsZWN0b3I6OmNoZWNrUmVnaW9uU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHJlZ2lvblNl
bGVjdG9yLCBFbGVtZW50KiByZWdpb25FbGVtZW50KQoreworICAgIGlmICghcmVnaW9uU2VsZWN0
b3IgfHwgIXJlZ2lvbkVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fY2hl
Y2tlci5jbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpOworICAgIG1fY2hlY2tlci5zZXRQ
c2V1ZG9TdHlsZShOT1BTRVVETyk7CisKKyAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcmVnaW9u
U2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCisgICAgICAgIGlmICht
X2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQogICAgIAogYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoQ1NTU3R5bGVTaGVldCog
c3R5bGVzaGVldCwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0
PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCiB7CkBAIC0xOTY5LDcgKzE5NzgsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUnVsZURh
dGE6OlJ1bGVEYXRhKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1
bnNpZ25lZCBwb3NpdGlvbiwgRVJlZ2lvblN0eWxlRW5hYmxlZCB1c2VJblJlZ2lvblN0eWxlKQor
UnVsZURhdGE6OlJ1bGVEYXRhKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yLCB1bnNpZ25lZCBwb3NpdGlvbikKICAgICA6IG1fcnVsZShydWxlKQogICAgICwgbV9zZWxl
Y3RvcihzZWxlY3RvcikKICAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5
KCkpCkBAIC0xOTc5LDE1ICsxOTg4LDEzIEBAIFJ1bGVEYXRhOjpSdWxlRGF0YShDU1NTdHlsZVJ1
bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWduZWQgcG9zaXRpb24sCiAgICAg
LCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKGlzU2Vs
ZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2VsZWN0b3IpKQogICAgICwgbV9jb250
YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29yZTo6Y29udGFpbnNVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKSkKICAgICAsIG1fbGlua01hdGNoVHlwZShTZWxlY3Rv
ckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoc2VsZWN0b3IpKQotICAgICwgbV91c2VJ
blJlZ2lvblN0eWxlKHVzZUluUmVnaW9uU3R5bGUpCiB7CiAgICAgU2VsZWN0b3JDaGVja2VyOjpj
b2xsZWN0SWRlbnRpZmllckhhc2hlcyhtX3NlbGVjdG9yLCBtX2Rlc2NlbmRhbnRTZWxlY3Rvcklk
ZW50aWZpZXJIYXNoZXMsIG1heGltdW1JZGVudGlmaWVyQ291bnQpOwogfQogCi1SdWxlU2V0OjpS
dWxlU2V0KEVSZWdpb25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSkKK1J1bGVTZXQ6OlJ1
bGVTZXQoKQogICAgIDogbV9ydWxlQ291bnQoMCkKICAgICAsIG1fYXV0b1Nocmlua1RvRml0RW5h
YmxlZCh0cnVlKQotICAgICwgbV91c2VJblJlZ2lvblN0eWxlKHVzZUluUmVnaW9uU3R5bGUpCiB7
CiB9CiAKQEAgLTIwNDcsNyArMjA1NCw3IEBAIHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0
b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhCiAKIHZv
aWQgUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxl
Y3RvcikKIHsKLSAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvciwgbV9ydWxlQ291
bnQrKywgbV91c2VJblJlZ2lvblN0eWxlKTsKKyAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBz
ZWxlY3RvciwgbV9ydWxlQ291bnQrKyk7CiAgICAgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRh
KG1fZmVhdHVyZXMsIHJ1bGVEYXRhKTsKIAogICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6SWQpIHsKQEAgLTIwOTAsNiArMjA5NywyNiBAQCB2b2lkIFJ1bGVTZXQ6OmFk
ZFBhZ2VSdWxlKENTU1BhZ2VSdWxlKiBydWxlKQogICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxl
RGF0YShydWxlLCBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCBtX3BhZ2VSdWxlcy5zaXpl
KCkpKTsKIH0KIAordm9pZCBSdWxlU2V0OjphZGRSZWdpb25SdWxlKFdlYktpdENTU1JlZ2lvblJ1
bGUqIHJ1bGUpCit7CisgICAgUnVsZVNldCogcmVnaW9uUnVsZVNldCA9IG5ldyBSdWxlU2V0Owor
ICAgIC8vIFRoZSByZWdpb24gcnVsZSBzZXQgc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSBw
b3NpdGlvbiBpbnNpZGUgdGhlIHBhcmVudCBydWxlIHNldC4KKyAgICAvLyBPdGhlcndpc2UsIHRo
ZSBydWxlcyBpbnNpZGUgcmVnaW9uIGJsb2NrIG1pZ2h0IGJlIGluY29ycmVjdGx5IHBvc2l0aW9u
ZWQgYmVmb3JlIG90aGVyIHNpbWlsYXIgcnVsZXMgZnJvbQorICAgIC8vIHRoZSBzdHlsZXNoZWV0
IHRoYXQgY29udGFpbnMgdGhlIHJlZ2lvbiBibG9jay4KKyAgICByZWdpb25SdWxlU2V0LT5tX3J1
bGVDb3VudCA9IG1fcnVsZUNvdW50OworCisgICAgLy8gQ29sbGVjdCB0aGUgcmVnaW9uIHJ1bGVz
IGludG8gYSBydWxlIHNldAorICAgIENTU1J1bGVMaXN0KiByZWdpb25TdHlsaW5nUnVsZXMgPSBy
dWxlLT5jc3NSdWxlcygpOworICAgIHVuc2lnbmVkIHJ1bGVzU2l6ZSA9IHJlZ2lvblN0eWxpbmdS
dWxlcy0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsg
KytpKSB7CisgICAgICAgIENTU1J1bGUqIHJlZ2lvblN0eWxpbmdSdWxlID0gcmVnaW9uU3R5bGlu
Z1J1bGVzLT5pdGVtKGkpOworICAgICAgICBpZiAocmVnaW9uU3R5bGluZ1J1bGUtPmlzU3R5bGVS
dWxlKCkpCisgICAgICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpKTsKKyAgICB9CisKKyAgICBtX3Jl
Z2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmFwcGVuZChSdWxlU2V0U2VsZWN0b3JQYWlyKHJ1bGUt
PnNlbGVjdG9yTGlzdCgpLmZpcnN0KCksIHJlZ2lvblJ1bGVTZXQpKTsKK30KKwogdm9pZCBSdWxl
U2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKQog
ewogICAgIEFTU0VSVChzaGVldCk7CkBAIC0yMTQzLDcgKzIxNzAsNyBAQCB2b2lkIFJ1bGVTZXQ6
OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yJgogICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKQog
ICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4ocnVsZSkpOwogICAgICAgICBlbHNlIGlmIChydWxlLT5p
c1JlZ2lvblJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKQotICAgICAgICAgICAgc3R5bGVTZWxlY3Rv
ci0+YWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxlKj4ocnVsZSkp
OworICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25S
dWxlKj4ocnVsZSkpOwogICAgIH0KICAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQog
ICAgICAgICBzaHJpbmtUb0ZpdCgpOwpAQCAtMjIxNSwxMSArMjI0MiwyNyBAQCBzdGF0aWMgTGVu
Z3RoIGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSwgUmVuZGVyU3R5bAogICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGgocHJpbWl0aXZlVmFsdWUs
IHN0eWxlLCByb290U3R5bGUsIHRydWUsIG11bHRpcGxpZXIsIG9rKTsKIH0KIAorc3RhdGljIGlu
bGluZSBib29sIGlzSW5zaWRlUmVnaW9uUnVsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NFUlQoc3R5bGVEZWNsYXJhdGlvbik7CisKKyAg
ICBDU1NSdWxlKiBwYXJlbnRSdWxlID0gc3R5bGVEZWNsYXJhdGlvbi0+cGFyZW50UnVsZSgpOwor
ICAgIHdoaWxlIChwYXJlbnRSdWxlKSB7CisgICAgICAgIGlmIChwYXJlbnRSdWxlLT5pc1JlZ2lv
blJ1bGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBwYXJlbnRSdWxlID0g
cGFyZW50UnVsZS0+cGFyZW50UnVsZSgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IHRlbXBsYXRlIDxib29sIGFwcGx5Rmlyc3Q+CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24s
IGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSkKIHsKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgc3R5bGVEZWNsYXJhdGlvbi0+cGFyZW50UnVsZSgp
KTsKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
c3R5bGVEZWNsYXJhdGlvbi0+ZW5kKCk7CisKKyAgICBib29sIHN0eWxlRGVjbGFyYXRpb25JbnNp
ZGVSZWdpb25SdWxlID0gbV9yZWdpb25Gb3JTdHlsaW5nID8gaXNJbnNpZGVSZWdpb25SdWxlKHN0
eWxlRGVjbGFyYXRpb24pIDogZmFsc2U7CisKICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlRGVjbGFyYXRpb24tPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgY3VycmVudCA9ICpp
dDsKICAgICAgICAgaWYgKGlzSW1wb3J0YW50ICE9IGN1cnJlbnQuaXNJbXBvcnRhbnQoKSkKQEAg
LTIyMzIsNiArMjI3NSwxMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRp
b24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaW50IHByb3BlcnR5ID0gY3VycmVudC5pZCgp
OworCisgICAgICAgIC8vIEZpbHRlciB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVk
IHVzaW5nIHJlZ2lvbiBzdHlsaW5nLgorICAgICAgICBpZiAoc3R5bGVEZWNsYXJhdGlvbkluc2lk
ZVJlZ2lvblJ1bGUgJiYgIUNTU1N0eWxlU2VsZWN0b3I6OmlzVmFsaWRSZWdpb25TdHlsZVByb3Bl
cnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIGlmIChhcHBs
eUZpcnN0KSB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChmaXJzdENTU1Byb3BlcnR5ID09
IENTU1Byb3BlcnR5Q29sb3IsIENTU19jb2xvcl9pc19maXJzdF9wcm9wZXJ0eSk7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eVpvb20gPT0gQ1NTUHJvcGVydHlDb2xvciAr
IDE4LCBDU1Nfem9vbV9pc19lbmRfb2ZfZmlyc3RfcHJvcF9yYW5nZSk7CkBAIC0yMjczLDExICsy
MzIxLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9ucyhib29sIGlz
SW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGUKICAgICAgICAgbV9hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
Zm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewotICAgICAgICBt
X2FwcGx5UHJvcGVydHlUb1JlZ2lvblN0eWxlID0gbV9tYXRjaGVkRGVjbHNbaV0udXNlSW5SZWdp
b25TdHlsZTsKKyAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytp
KQogICAgICAgICBhcHBseURlY2xhcmF0aW9uPGFwcGx5Rmlyc3Q+KG1fbWF0Y2hlZERlY2xzW2ld
LnN0eWxlRGVjbGFyYXRpb24uZ2V0KCksIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5KTsKLSAg
ICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWdpb25TdHlsZSA9IGZhbHNlOwotICAgIH0KIH0KIAog
dW5zaWduZWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29tcHV0ZURlY2xhcmF0aW9uSGFzaChNYXRjaGVk
U3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb25zLCB1bnNpZ25lZCBzaXplKQpAQCAtMjU2NSw3
ICsyNjEwLDcgQEAgaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaW50IGlk
KQogCiAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLXJlZ2lvbnMvI3RoZS1hdC1yZWdp
b24tc3R5bGUtcnVsZQogLy8gRklYTUU6IGFkZCBpbmNyZW1lbnRhbCBzdXBwb3J0IGZvciBvdGhl
ciByZWdpb24gc3R5bGluZyBwcm9wZXJ0aWVzLgotaW5saW5lIGJvb2wgaXNWYWxpZFJlZ2lvblN0
eWxlUHJvcGVydHkoaW50IGlkKQoraW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6aXNWYWxp
ZFJlZ2lvblN0eWxlUHJvcGVydHkoaW50IGlkKQogewogICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8
Q1NTUHJvcGVydHlJRD4oaWQpKSB7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cjoKQEAgLTI2NTYsMTAgKzI3MDEsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJv
cGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICAvLyBGaWx0ZXIgcmVnaW9uIHN0eWxlIHByb3BlcnR5Ci0gICAgaWYgKGFwcGx5UHJvcGVy
dHlUb1JlZ2lvblN0eWxlKCkgJiYgIWlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KGlkKSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0
PENTU1Byb3BlcnR5SUQ+KGlkKTsKIAogICAgIGlmIChpc0luaGVyaXQgJiYgbV9wYXJlbnRTdHls
ZSAmJiAhbV9wYXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAm
JiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkocHJvcGVydHkpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggMmZlZDE4MzNlNmQwNmNjOGY4NzI5NzhlYTc4
NmYxYTI2NjFhMTFlMC4uNTc2MTliZjEwNTA3OWNjYjlmMmMwZGY2ODNkMzExOTYxOTNjMDNhYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCkBAIC0zNiw3ICszNiw2IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHsgRG9O
b3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUg
fTsKLWVudW0gRVJlZ2lvblN0eWxlRW5hYmxlZCB7IERvTm90VXNlSW5SZWdpb25TdHlsZSwgVXNl
SW5SZWdpb25TdHlsZSB9OwogCiBjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFzcyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjsKQEAgLTExMCw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHls
ZSosIEtleWZyYW1lTGlzdCYpOwogCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRv
U3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gMCwgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CisgICAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkLCBFbGVtZW50
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCk7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7CiAKQEAgLTEzNyw4ICsxMzYsNiBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CiAg
ICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0gICAgdm9pZCBpbml0Rm9yUmVnaW9uU3R5
bGluZyhSZW5kZXJSZWdpb24qKTsKLSAgICB2b2lkIGluaXRSZWdpb25SdWxlcyhSZW5kZXJSZWdp
b24qKTsKICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRlclN0eWxlKiBsb2Nh
dGVTaGFyZWRTdHlsZSgpOwogICAgIGJvb2wgbWF0Y2hlc1J1bGVTZXQoUnVsZVNldCopOwpAQCAt
MTQ3LDggKzE0NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoU3R5bGVkRWxlbWVudCopIGNvbnN0OwogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFdlYktpdENTU0tleWZy
YW1lUnVsZSosIEtleWZyYW1lVmFsdWUmKTsKLSAgICB2b2lkIHNldFJlZ2lvbkZvclN0eWxpbmco
UmVuZGVyUmVnaW9uKiByZWdpb24pIHsgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uOyB9Ci0g
ICAgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZWdp
b25Gb3JTdHlsaW5nOyB9CiAKIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2
ZSBiYWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQg
KG9yIGEgcHNldWRvLWVsZW1lbnQpLgpAQCAtMjA0LDkgKzE5OSw4IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgYWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+
KTsKICAgICB2b2lkIGFkZFBhZ2VTdHlsZShQYXNzUmVmUHRyPENTU1BhZ2VSdWxlPik7Ci0gICAg
dm9pZCBhZGRSZWdpb25SdWxlKFBhc3NSZWZQdHI8V2ViS2l0Q1NTUmVnaW9uUnVsZT4pOwogCi0g
ICAgYm9vbCBjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqKTsKKyAgICBib29sIGNoZWNrUmVnaW9u
U3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCk7CiAKICAgICBib29sIHVzZXNTaWJsaW5nUnVs
ZXMoKSBjb25zdCB7IHJldHVybiAhbV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMuaXNFbXB0eSgpOyB9
CiAgICAgYm9vbCB1c2VzRmlyc3RMaW5lUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVz
LnVzZXNGaXJzdExpbmVSdWxlczsgfQpAQCAtMjU1LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7CiAKICAgICB2b2lkIGFkZE1hdGNoZWRSdWxl
KGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQot
ICAgIHZvaWQgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIEVS
ZWdpb25TdHlsZUVuYWJsZWQgdXNlSW5SZWdpb25TdHlsZSA9IERvTm90VXNlSW5SZWdpb25TdHls
ZSk7CisgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFs
bCk7CiAKICAgICBzdHJ1Y3QgTWF0Y2hSZXN1bHQgewogICAgICAgICBNYXRjaFJlc3VsdCgpIDog
Zmlyc3RVQVJ1bGUoLTEpLCBsYXN0VUFSdWxlKC0xKSwgZmlyc3RBdXRob3JSdWxlKC0xKSwgbGFz
dEF1dGhvclJ1bGUoLTEpLCBmaXJzdFVzZXJSdWxlKC0xKSwgbGFzdFVzZXJSdWxlKC0xKSwgaXND
YWNoZWFibGUodHJ1ZSkgeyB9CkBAIC0yNzAsMTggKzI2NCwyMiBAQCBwcml2YXRlOgogICAgIHZv
aWQgbWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKE1h
dGNoUmVzdWx0Jik7CiAgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAg
IHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmly
c3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7
CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2
b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAg
IHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpOwogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikg
Y29uc3Q7CiAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CiAKICAgICBib29sIGNoZWNrU2Vs
ZWN0b3IoY29uc3QgUnVsZURhdGEmKTsKLQorICAgIGJvb2wgY2hlY2tSZWdpb25TZWxlY3RvcihD
U1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lvbkVsZW1lbnQpOwogICAg
IHZvaWQgYXBwbHlNYXRjaGVkRGVjbGFyYXRpb25zKGNvbnN0IE1hdGNoUmVzdWx0Jik7CiAgICAg
dGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgogICAgIHZvaWQgYXBwbHlEZWNsYXJhdGlvbnMoYm9v
bCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVk
T25seSk7CiAgICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgogICAgIHZvaWQgYXBwbHlEZWNs
YXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgaXNJbXBvcnRhbnQsIGJv
b2wgaW5oZXJpdGVkT25seSk7CiAKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUmVnaW9uU3R5bGVQ
cm9wZXJ0eShpbnQgaWQpOworCiAgICAgdm9pZCBtYXRjaFBhZ2VSdWxlcyhSdWxlU2V0KiwgYm9v
bCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsK
ICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+Kiwg
Ym9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1l
KTsKICAgICBib29sIGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CkBAIC0yOTEsNyAr
Mjg5LDYgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOwog
ICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsKLSAgICBPd25QdHI8UnVsZVNldD4gbV9y
ZWdpb25SdWxlczsKIAogICAgIEZlYXR1cmVzIG1fZmVhdHVyZXM7CiAgICAgT3duUHRyPFJ1bGVT
ZXQ+IG1fc2libGluZ1J1bGVTZXQ7CkBAIC0zMDUsOSArMzAyLDYgQEAgcHJpdmF0ZToKICAgICB0
eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlPiA+IEtleWZyYW1lc1J1bGVNYXA7CiAgICAgS2V5ZnJhbWVzUnVsZU1hcCBtX2tleWZy
YW1lc1J1bGVNYXA7CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8V2ViS2l0Q1NTUmVnaW9u
UnVsZT4gPiBSZWdpb25TdHlsZVJ1bGVzOwotICAgIFJlZ2lvblN0eWxlUnVsZXMgbV9yZWdpb25T
dHlsZVJ1bGVzOwotCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFll
dEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KIApAQCAtMzE3
LDcgKzMxMSw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0KICAg
ICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KLSAgICBib29sIGFwcGx5UHJvcGVy
dHlUb1JlZ2lvblN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWdpb25T
dHlsZTsgfQogCiBwcml2YXRlOgogICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc19zdHlsZU5vdFll
dEF2YWlsYWJsZTsKQEAgLTM2NiwxMCArMzU5LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlRGVjbGFyYXRpb247CiAgICAgICAg
IHVuaW9uIHsKLSAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQg
bGlua01hdGNoVHlwZSA6IDMxOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVzZUluUmVnaW9u
U3R5bGUgOiAxOyAvLyBFUmVnaW9uU3R5bGVFbmFibGVkCi0gICAgICAgICAgICB9OworICAgICAg
ICAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZTsKICAgICAgICAgICAgIC8vIFVzZWQgdG8gbWFr
ZSBzdXJlIGFsbCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBzaW5jZSB3ZSBjb21wdXRlIHRo
ZSBoYXNoIG92ZXIgdGhlIGJ5dGVzIG9mIHRoaXMgb2JqZWN0LgogICAgICAgICAgICAgdm9pZCog
cG9zc2libHlQYWRkZWRNZW1iZXI7CiAgICAgICAgIH07CkBAIC00MzEsNyArNDIxLDYgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7CiAgICAgYm9v
bCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7Ci0gICAgYm9vbCBtX2FwcGx5UHJv
cGVydHlUb1JlZ2lvblN0eWxlOwogICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0eSYgbV9h
cHBseVByb3BlcnR5OwogICAgIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0NWRi
YjhlMjNkZWRiM2VkYjNmNTMxMjI0OWFmY2FkMWU0NmViMzdlLi4wOWEwNjMyZjA4NDIyMjc0MDlh
NjVhZWI0YjcyYjEyOGRiYzVlZjEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDEtMTgg
IE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CisKKyAgICAgICAgW0NTU1JlZ2lv
bnNdRml4IHJlZ2lvbiBzdHlsZSBjb2RlIGluIENTU1N0eWxlU2VsZWN0b3IKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDUzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgRml4IHRoZSB0ZXN0IGFzIGl0IHdh
cyBub3QgdGFraW5nIGludG8gYWNjb3VudCB0aGUgc2VsZWN0b3Igc3BlY2lmaWNpdHkuCisgICAg
ICAgICogZmFzdC9yZWdpb25zL3JlZ2lvbi1zdHlsZS1ibG9jay1iYWNrZ3JvdW5kLWNvbG9yLmh0
bWw6CisKIDIwMTItMDEtMTggIEdhYm9yIFJhcGNzYW55aSAgPHJnYWJvckB3ZWJraXQub3JnPgog
CiAgICAgICAgIFtRdF0gVXBkYXRlIGFub3RoZXIgU1ZHIGV4cGVjdGVkIGFmdGVyIHIxMDUyNDcu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvcmVnaW9uLXN0eWxlLWJsb2Nr
LWJhY2tncm91bmQtY29sb3IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9yZWdpb24t
c3R5bGUtYmxvY2stYmFja2dyb3VuZC1jb2xvci5odG1sCmluZGV4IGQ3ZGMyN2E4OWUzZTA1ZTZi
MTlhNTJjYzMzMWM1YmIwMDkxM2E2MjcuLjFmNzYwZmE2MDM3ZDI4MGZlY2VmZmI1NDgzZjY0ZGFk
ZTIwMTE5MzggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9yZWdpb24tc3R5
bGUtYmxvY2stYmFja2dyb3VuZC1jb2xvci5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvcmVn
aW9ucy9yZWdpb24tc3R5bGUtYmxvY2stYmFja2dyb3VuZC1jb2xvci5odG1sCkBAIC00NCw3ICs0
NCw3IEBACiAgICAgICAgICAgICAjcmVnaW9uNzEgIHsgLXdlYmtpdC1mbG93LWZyb206IGZsb3c3
OyB9CiAgICAgICAgICAgICAjcmVnaW9uNzIgIHsgLXdlYmtpdC1mbG93LWZyb206IGZsb3c3OyB9
CiAgICAgICAgICAgICAjcDcgeyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgfQotICAgICAgICAg
ICAgQC13ZWJraXQtcmVnaW9uICNyZWdpb243MSB7IHAgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFu
c3BhcmVudDsgfSB9CisgICAgICAgICAgICBALXdlYmtpdC1yZWdpb24gI3JlZ2lvbjcxIHsgI3A3
IHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0gfQogICAgICAgICA8L3N0eWxlPgog
ICAgPC9oZWFkPgogICAgIDxib2R5IGNsYXNzPSJib2R5Ij4K
</data>

          </attachment>
      

    </bug>

</bugzilla>