<?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>77299</bug_id>
          
          <creation_ts>2012-01-29 08:36:03 -0800</creation_ts>
          <short_desc>Reduce non-CSSOM API of CSSStyleDeclaration</short_desc>
          <delta_ts>2012-02-07 12:41:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>77745</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>544738</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-29 08:36:03 -0800</bug_when>
    <thetext>CSSStyleDeclaration should expose CSSOM API only. Subclasses should expose the internal API only. This will move us closer to being able to split the CSSOM API from the CSS implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544744</commentid>
    <comment_count>1</comment_count>
      <attachid>124466</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-29 10:46:23 -0800</bug_when>
    <thetext>Created attachment 124466
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544746</commentid>
    <comment_count>2</comment_count>
      <attachid>124466</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-29 11:06:07 -0800</bug_when>
    <thetext>Comment on attachment 124466
patch

Attachment 124466 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11369330</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544747</commentid>
    <comment_count>3</comment_count>
      <attachid>124466</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-29 11:16:49 -0800</bug_when>
    <thetext>Comment on attachment 124466
patch

Attachment 124466 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11360662</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544751</commentid>
    <comment_count>4</comment_count>
      <attachid>124467</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-29 12:32:12 -0800</bug_when>
    <thetext>Created attachment 124467
try to fix chromium build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544752</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-29 12:35:58 -0800</bug_when>
    <thetext>Attachment 124467 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/ChangeLog:16:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Total errors found: 1 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544753</commentid>
    <comment_count>6</comment_count>
      <attachid>124467</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-29 12:51:41 -0800</bug_when>
    <thetext>Comment on attachment 124467
try to fix chromium build

Attachment 124467 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11359664</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544754</commentid>
    <comment_count>7</comment_count>
      <attachid>124467</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-29 13:03:31 -0800</bug_when>
    <thetext>Comment on attachment 124467
try to fix chromium build

Attachment 124467 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11366361</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544756</commentid>
    <comment_count>8</comment_count>
      <attachid>124468</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-29 13:16:35 -0800</bug_when>
    <thetext>Created attachment 124468
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544757</commentid>
    <comment_count>9</comment_count>
      <attachid>124468</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-29 13:34:32 -0800</bug_when>
    <thetext>Comment on attachment 124468
another

Attachment 124468 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11368348</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544837</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-29 19:23:13 -0800</bug_when>
    <thetext>Qt failures:

1) In qwebelement.cpp because QWebElement::styleProperty uses StyledElement::style() instead of StyledElement:: inlineStyleDecl() or StyledElement::ensureInlineStyleDecl().

2) In DumpRenderTreeSupportQt.cpp because DumpRenderTreeSupportQt::computedStyleIncludingVisitedInfo calls some functions on CSSComputedStyleDeclaration that are not used elsewhere to convert it to a QVariantMap. I am not sure why computedStyleIncludingVisitedInfo returns a QVariantMap, since the version in Mac WebKit returns a CSSComputedStyleDeclaration to JavaScript directly, which is better. The best thing to do with computedStyleIncludingVisitedInfo would be to move it out of the DumpRenderTree implementations and into the internals object now that we have that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544914</commentid>
    <comment_count>11</comment_count>
      <attachid>124503</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-30 00:21:19 -0800</bug_when>
    <thetext>Created attachment 124503
try to fix qt build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544918</commentid>
    <comment_count>12</comment_count>
      <attachid>124504</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-30 00:34:20 -0800</bug_when>
    <thetext>Created attachment 124504
updated to tot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544950</commentid>
    <comment_count>13</comment_count>
      <attachid>124504</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-01-30 01:55:29 -0800</bug_when>
    <thetext>Comment on attachment 124504
updated to tot

Attachment 124504 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11371073</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544990</commentid>
    <comment_count>14</comment_count>
      <attachid>124518</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-30 03:48:05 -0800</bug_when>
    <thetext>Created attachment 124518
another one

Another qt fix attempt
Removed unnecessary exception code taking setProperty/removeProperty versions from CSSMutableStyleDeclaration</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545000</commentid>
    <comment_count>15</comment_count>
      <attachid>124518</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-01-30 04:09:02 -0800</bug_when>
    <thetext>Comment on attachment 124518
another one

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

First round of comments, not changing r? state yet.

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2569
&gt; +    for (unsigned i = 0; i &lt; length; i++) {

nitpick: ++i

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2571
&gt; +        RefPtr&lt;CSSValue&gt; value = getPropertyCSSValue(set[i]);
&gt; +        if (value)

This can be turned into one line.

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2582
&gt; +    if (!propertyID)
&gt; +        return 0;
&gt; +    return getPropertyCSSValue(propertyID);

If the common case is property is found (which I assume), I&apos;d swap these.

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2589
&gt; +    if (!propertyID)
&gt; +        return String();

Ditto.

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2596
&gt; +    return &quot;&quot;;

return emptyString(), it&apos;s shared and more efficient.

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2601
&gt; +    return &quot;&quot;;

Ditto.

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2617
&gt; +    return String();

Ditto.

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:1052
&gt; +    if (!propertyID)
&gt; +        return 0;

Same swapping possible.

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:1060
&gt; +    if (!propertyID)
&gt; +        return String();

Ditto + use emptyString().

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:1069
&gt; +    if (!propertyID)
&gt; +        return String();
&gt; +    return getPropertyPriority(propertyID) ? &quot;important&quot; : &quot;&quot;;

Ditto + use emptyString().

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:1080
&gt; +    if (!propertyID)
&gt; +        return String();
&gt; +    int shorthandID = getPropertyShorthand(propertyID);
&gt; +    if (!shorthandID)
&gt; +        return String();
&gt; +    return getPropertyName(static_cast&lt;CSSPropertyID&gt;(shorthandID));

Ditto + use emptyString().

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:1086
&gt; +    if (!propertyID)

etc, .. not listing the others.

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:1147
&gt; +    {

Is the extra scope intentional? I don&apos;t see it&apos;s needed.

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:1158
&gt; +    // FIXME: This should use mass removal.
&gt; +    for (unsigned i = 0; i &lt; propertiesToRemove.size(); i++)
&gt; +        removeProperty(propertiesToRemove[i]);

How about adding removeProperty(Vector&lt;int&gt;&amp;) and moving the FIXME into that method?

&gt; Source/WebCore/editing/Editor.cpp:2754
&gt; +    style-&gt;setProperty(CSSPropertyWordWrap, &quot;break-word&quot;, false);

While you&apos;re at it, how about using getValueName(CSSValueBreakWord) instead of hard-coding it here?

&gt; Source/WebCore/editing/Editor.cpp:2755
&gt; +    style-&gt;setProperty(CSSPropertyWebkitNbspMode, &quot;space&quot;, false);

Ditto, for all other props.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545004</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-30 04:11:58 -0800</bug_when>
    <thetext>As mentioned in the IRC, there is huge amount of additional refactoring that could be done. This is not meant to be an end state. The patch is already so large it is unwieldy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545128</commentid>
    <comment_count>17</comment_count>
      <attachid>124518</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-01-30 08:41:19 -0800</bug_when>
    <thetext>Comment on attachment 124518
another one

r=me, I agree that we should refactor and cleanup separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545133</commentid>
    <comment_count>18</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-01-30 08:48:00 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/106247</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551252</commentid>
    <comment_count>19</comment_count>
      <attachid>124518</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-07 12:41:55 -0800</bug_when>
    <thetext>Comment on attachment 124518
another one

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

&gt;&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:2582
&gt;&gt; +    if (!propertyID)
&gt;&gt; +        return 0;
&gt;&gt; +    return getPropertyCSSValue(propertyID);
&gt; 
&gt; If the common case is property is found (which I assume), I&apos;d swap these.

We like early return for error cases. The comment implies we think that compilers run an if statement faster if it is true; that is not correct. The style here should not be changed!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124466</attachid>
            <date>2012-01-29 10:46:23 -0800</date>
            <delta_ts>2012-01-29 12:32:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>cssstyledeclaration-cleanup-5.patch</filename>
            <type>text/plain</type>
            <size>56456</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBAQAorMjAxMi0wMS0yOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIG5vbi1DU1NPTSBB
UEkgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzcyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uIHNob3VsZCBleHBvc2UgdGhlIENT
U09NIEFQSSBvbmx5LiBTdWJjbGFzc2VzIHNob3VsZCBleHBvc2UgdGhlIGludGVybmFsIEFQSSBv
bmx5LiAKKyAgICAgICAgVGhpcyB3aWxsIG1vdmUgdXMgY2xvc2VyIHRvIGJlaW5nIGFibGUgdG8g
c3BsaXQgdGhlIENTU09NIEFQSSBmcm9tIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIC0gTWFrZSBDU1NTdHlsZURlY2xhcmF0aW9uIENTU09NIGZ1bmN0aW9u
cyB2aXJ0dWFsLCBpbnRlcm5hbCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuCisgICAgICAgIC0gTW92
ZSBpbXBsZW1lbnRhdGlvbnMgdG8gc3ViY2xhc3NlcyAoQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbikuCisgICAgICAgIC0gTWFrZSBDU1NPTSBm
dW5jdGlvbnMgaW4gdGhlIHN1YmNsYXNzZXMgcHJpdmF0ZSAobWFraW5nIGl0IGhhcmRlciB0byBp
bnZva2UgdGhlbSBpbnRlcm5hbGx5KS4KKyAgICAgICAgLSBTd2l0Y2ggYSBidW5jaCBvZiBwbGFj
ZXMgdG8gdXNlIGludGVybmFsIEFQSSBpbnN0ZWFkIG9mIENTU09NLgorCisgICAgICAgICogY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlN
YXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIAorICAgICAgICAgICAgTW92ZSBjb3B5UHJv
cGVydGllc0luU2V0IHRvIHN1YmNsYXNzZXMsIGRldmlydHVhbGl6ZS4KKyAgICAgICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eUNTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNp
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnNldFBy
b3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
cmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uaDoKKyAgICAgICAgKENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgICog
Y3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVJ1
bGU6OmNzc1RleHQpOgorICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjphc1RleHQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNzc1RleHQp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlT
aG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmlzUHJvcGVydHlJbXBsaWNpdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KToKKyAgICAgICAgCisg
ICAgICAgICAgICBNb3ZlIGNvcHlQcm9wZXJ0aWVzSW5TZXQgdG8gc3ViY2xhc3NlcywgZGV2aXJ0
dWFsaXplLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjc3NQcm9wZXJ0eU1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKToKKyAgICAgICAg
CisgICAgICAgICAgICBNb3ZlIGRpZmYoKSB0byBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiwg
cmVuYW1lIHRvIHJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzLCBzd2l0Y2ggdG8gbXV0YXRlCisg
ICAgICAgICAgICB0aGlzIG9iamVjdCBpbnN0ZWFkIG9mIHRoZSBhcmd1bWVudCBvYmplY3QuCisg
ICAgCisgICAgICAgICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAg
IChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6cHJvcGVydHlDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cHJvcGVydHlBdCk6CisgICAgICAgIAorICAgICAg
ICAgICAgRXhwb3NlIHByb3BlcnRpZXMgYW5kIHByb3BlcnR5IGNvdW50IGludGVybmFsbHkgKGl0
ZXJhdG9yIHNob3VsZCBiZSByZW1vdmVkIGluIGZhdm9yIG9mIHRoZXNlKS4KKyAgICAgICAgCisg
ICAgICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKENTU1N0eWxl
RGVjbGFyYXRpb24pOgorICAgICAgICAoKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVSdWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6Y3NzVGV4dCk6CisgICAgICAgICog
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFRvUmlnaHRE
ZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyaWdodFRvTGVmdERlY2xhcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VS
dWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjc3NUZXh0KToKKyAgICAg
ICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVt
ZW50Ojp1cGRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlS
ZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hE
b3duKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlm
TmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgICgp
OgorICAgICAgICAoV2ViQ29yZTo6Y29weUVkaXRpbmdQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cHJvcGVydHlDU1NWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRSR0JBRm9udENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6b3ZlcnJpZGVXaXRoU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpy
ZW1vdmVTdHlsZUFkZGVkQnlOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6
cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJD
b3JlOjpyZW1vdmVQcm9wZXJ0aWVzSW5TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0aW5nU3R5bGU6OnJlbW92ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvbnRXZWlnaHRJc0JvbGQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvcGVydGll
c05vdEluKToKKyAgICAgICAgKFdlYkNvcmU6OmdldElkZW50aWZpZXJWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcik6CisgICAgICAgICogZWRp
dGluZy9FZGl0aW5nU3R5bGUuaDoKKyAgICAgICAgCisgICAgICAgICAgICBBZGFwdCB0byBjaGFu
Z2VzLgorICAgICAgICAgICAgU3dpdGNoIGEgZmV3IHBsYWNlcyBpbiBFZGl0aW5nU3R5bGUgdG8g
dXNlIENTU09NIGluc3RlYWQgb2YgdGhlIGludGVybmFsIEFQSS4gUGFydHMgb2YgdGhlIGVkaXRp
bmcgY29kZQorICAgICAgICAgICAgYXJlIGhlYXZpbGl0eSB0aWVkIHRvIHRoZSBleHRlcm5hbCBB
UEkuCisgICAgCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMpOgor
ICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5vZGVP
cGVuVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzaXplSW1hZ2VUb0ZpdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRG9jdW1lbnQ6OndpbmRvd1NpemVDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52
YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50Q29sb3IpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZSk6CisgICAgICAgICogcGFnZS9QYWdl
U2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6cmV0cmll
dmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eU9yVW5zdHlsZWRBcHBs
ZVN0eWxlU3Bhbik6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6Z2V0UHJlc2VudGF0aW9uQXR0cmlidXRlKToK
KwogMjAxMi0wMS0yOCAgQWxleGFuZGVyIEbDpnLDuHkgIDxhaGZAMHg5MC5kaz4KIAogICAgICAg
ICBbUXRdIFJlbW92ZSByZWZlcmVuY2VzIHRvIENTU0JvcmRlckltYWdlVmFsdWUuaCBpbiBUYXJn
ZXQucHJpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZS5oIgogI2luY2x1ZGUgIkNTU0xpbmVC
b3hDb250YWluVmFsdWUuaCIKICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1By
b3BlcnR5LmgiCkBAIC0yNDc1LDI0ICsyNDc2LDggQEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UAogICAgIHJldHVybiAiIjsKIH0KIAotYm9vbCBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHkoaW50IC8qcHJvcGVydHlJRCovKSBj
b25zdAotewotICAgIC8vIEFsbCBjb21wdXRlZCBzdHlsZXMgaGF2ZSBhIHByaW9yaXR5IG9mIGZh
bHNlIChub3QgImltcG9ydGFudCIpLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IC8qcHJvcGVydHlJ
RCovLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUjsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgLypwcm9wZXJ0eUlEKi8sIGNvbnN0IFN0cmlu
ZyYgLyp2YWx1ZSovLCBib29sIC8qaW1wb3J0YW50Ki8sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotfQogCi11bnNpZ25lZCBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnZpcnR1YWxMZW5ndGgoKSBjb25zdAordW5zaWduZWQg
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAogewogICAgIE5vZGUq
IG5vZGUgPSBtX25vZGUuZ2V0KCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMjUyNSw4ICsyNTEwLDgg
QEAgYm9vbCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNzc1BybwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIENTU1N0eWxl
RGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hlcyhwcm9wZXJ0eSk7CisgICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOworICAg
IHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgpLT5j
c3NUZXh0KCk7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0CkBAIC0yNTc3LDQgKzI1NjIs
NTkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU0NvbXB1dGVkU3R5bAogICAgIHJldHVy
biBsaXN0LnJlbGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNv
bnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Cit7CisgICAgVmVjdG9yPENTU1By
b3BlcnR5PiBsaXN0OworICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOworICAgICAg
ICBpZiAodmFsdWUpCisgICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0s
IHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKKyAgICB9CisgICAgcmV0dXJuIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobGlzdCk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChw
cm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcElEKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wSUQpOworfQorCitTdHJpbmcgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVy
dHlOYW1lKQoreworICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7
CisgICAgaWYgKCFwcm9wSUQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4g
Z2V0UHJvcGVydHlWYWx1ZShwcm9wSUQpOworfQorCitTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8g
QWxsIGNvbXB1dGVkIHN0eWxlcyBoYXZlIGEgcHJpb3JpdHkgb2Ygbm90ICJpbXBvcnRhbnQiLgor
ICAgIHJldHVybiAiIjsKK30KKworU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gIiI7Cit9
CisKK2Jvb2wgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQo
Y29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUjsKK30KKworU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAxMDYx
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDE2ICs1MCw5IEBAIHB1YmxpYzoKICAgICBmcmllbmQgUGFz
c1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUoUGFzc1Jl
ZlB0cjxOb2RlPiwgYm9vbCBhbGxvd1Zpc2l0ZWRTdHlsZSwgY29uc3QgU3RyaW5nJiBwc2V1ZG9F
bGVtZW50TmFtZSk7CiAgICAgdmlydHVhbCB+Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKCk7
CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIHZpcnR1YWxMZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCAvKnByb3BlcnR5SUQqLykgY29uc3Qg
eyByZXR1cm4gLTE7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCAv
KnByb3BlcnR5SUQqLykgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBT
dHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CisgICAgYm9vbCBn
ZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFi
bGUoKTsKQEAgLTcxLDE2ICs2NCwyNSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gZ2V0U1ZHUHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCwgRVVwZGF0ZUxheW91dCkg
Y29uc3Q7CiAjZW5kaWYKIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0
eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0
LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbihQYXNzUmVmUHRyPE5vZGU+LCBib29sIGFsbG93VmlzaXRlZFN0eWxlLCBj
b25zdCBTdHJpbmcmKTsKIAorICAgIC8vIENTU09NIGZ1bmN0aW9ucy4gRG9uJ3QgbWFrZSB0aGVz
ZSBwdWJsaWMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHko
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3Bl
cnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJik7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJv
cGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3Bl
cnR5KikgY29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvclNoYWRvdyhj
b25zdCBTaGFkb3dEYXRhKiwgaW50LCBSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJTdHls
ZSosIGNvbnN0IENvbG9yJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VSdWxlLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgU3RyaW5nIENT
U0ZvbnRGYWNlUnVsZTo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHJlc3VsdCgiQGZv
bnQtZmFjZSIpOwogICAgIHJlc3VsdCArPSAiIHsgIjsKLSAgICByZXN1bHQgKz0gbV9zdHlsZS0+
Y3NzVGV4dCgpOworICAgIHJlc3VsdCArPSBtX3N0eWxlLT5hc1RleHQoKTsKICAgICByZXN1bHQg
Kz0gIn0iOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDEwNjE5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyNiw5ICs4MjYsOSBAQCB2b2lkIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjphZGRQYXJzCiAjZW5kaWYKIH0KIAotdW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnZpcnR1YWxMZW5ndGgoKSBjb25zdAordW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGxlbmd0aCgpOworICAg
IHJldHVybiBwcm9wZXJ0eUNvdW50KCk7CiB9CiAKIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25zdApAQCAtODM4LDcgKzgzOCw3IEBAIFN0cmlu
ZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSgKICAgICByZXR1cm4gZ2V0UHJvcGVy
dHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1fcHJvcGVydGllc1tpXS5pZCgpKSk7
CiB9CiAKLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0
CitTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFzVGV4dCgpIGNvbnN0CiB7CiAg
ICAgU3RyaW5nIHJlc3VsdCA9ICIiOwogCkBAIC0xMDUyLDQgKzEwNTIsMTA0IEBAIENTU1Byb3Bl
cnR5KiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjoKICAgICByZXR1cm4gMDsKIH0KIAorU3Ry
aW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYXNUZXh0KCk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKQoreworICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Cisg
ICAgaWYgKCFwcm9wSUQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BJRCk7Cit9CisKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKK3sKKyAgICBp
bnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcElE
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUo
cHJvcElEKTsKK30KKworU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9w
ZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGludCBwcm9w
SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wSUQpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlQcmlvcml0eShwcm9w
SUQpID8gImltcG9ydGFudCIgOiAiIjsKK30KKworU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlm
ICghcHJvcElEKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaW50IHNob3J0aGFuZElE
ID0gZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcElEKTsKKyAgICBpZiAoIXNob3J0aGFuZElEKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzdGF0
aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihzaG9ydGhhbmRJRCkpOworfQorCitib29sIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1l
KTsKKyAgICBpZiAoIXByb3BJRCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBp
c1Byb3BlcnR5SW1wbGljaXQocHJvcElEKTsKK30KKwordm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYg
KCFwcm9wSUQpCisgICAgICAgIHJldHVybjsKKyAgICBib29sIGltcG9ydGFudCA9IHByaW9yaXR5
LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNlKSAhPSBub3RGb3VuZDsKKyAgICBzZXRQcm9wZXJ0
eShwcm9wSUQsIHZhbHVlLCBpbXBvcnRhbnQsIGVjKTsKK30KKworU3RyaW5nIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQo
cHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wSUQsIGVjKTsKK30KKyAgICAKK1Bhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgp
IGNvbnN0Cit7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5PiBsaXN0OworICAgIGxpc3QucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVy
dHlDU1NWYWx1ZShzZXRbaV0pOworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBsaXN0
LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKKyAg
ICB9CisgICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobGlzdCk7
Cit9CisKK2Jvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hl
cyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNvbnN0Cit7CisgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOworICAgIHJl
dHVybiB2YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgpLT5jc3NU
ZXh0KCk7Cit9CisKK3ZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUVxdWl2
YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAg
IFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKKyAgICB7CisgICAgICAgIHNpemVfdCBz
aXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9
IG1fcHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+Y3NzUHJvcGVydHlNYXRj
aGVzKCZwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVu
ZChwcm9wZXJ0eS5pZCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgdXNlIG1hc3MgcmVtb3ZhbC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcHJvcGVydGllc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQorICAgICAgICByZW1vdmVQcm9wZXJ0
eShwcm9wZXJ0aWVzVG9SZW1vdmVbaV0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgog
ICAgIHsgCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24oZWxlbWVudCwgZmFsc2UpKTsKICAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNQ
cm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBVc2VkIGJ5IFN0eWxlZEVsZW1l
bnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKCkuCiAgICAgdm9pZCBjb3B5UHJvcGVydGll
c0Zyb20oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mKTsKQEAgLTkyLDI3ICs5NCwy
MSBAQCBwdWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBjb25zdF9p
dGVyYXRvcih0aGlzLCBtX3Byb3BlcnRpZXMuYmVnaW4oKSk7IH0KICAgICBjb25zdF9pdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBtX3Byb3BlcnRpZXMuZW5kKCkp
OyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHVuc2ln
bmVkIHByb3BlcnR5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuc2l6ZSgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmlzRW1wdHko
KTsgfQorICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eUF0KHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXNbaW5kZXhdOyB9CisKKyAgICBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBT
dHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CisgICAgYm9vbCBn
ZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBpbnQgZ2V0UHJv
cGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0OworICAgIGJvb2wgaXNQcm9wZXJ0
eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQg
dmlydHVhbExlbmd0aCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGVydGllcy5zaXplKCk7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwg
U3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Ym9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgcmVtb3ZlUHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwogCi0gICAgdXNp
bmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZTsKLQogICAgIGJvb2wg
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBm
YWxzZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwg
dHJ1ZSk7IH0KICAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBkb3VibGUgdmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQgPSBm
YWxzZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIHVuaXQsIGltcG9y
dGFudCwgdHJ1ZSk7IH0KICAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsgfQpAQCAtMTM4LDYgKzEz
NCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VTdHJpY3RQYXJzaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJpY3RQYXJzaW5nOyB9CiAKICAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+Jik7CisgICAgCisgICAgdm9pZCByZW1vdmVFcXVpdmFsZW50UHJv
cGVydGllcyhjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uKik7CisKKyAgICBQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCog
c2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworCisgICAgU3RyaW5nIGFzVGV4dCgpIGNvbnN0
OwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKTsKQEAgLTE1
Myw2ICsxNTUsMTkgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKIAorICAgIC8vIENTU09NIGZ1bmN0
aW9ucy4gRG9uJ3QgbWFrZSB0aGVzZSBwdWJsaWMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUo
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3Bl
cnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgU3RyaW5n
IGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZp
cnR1YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3Jp
dHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisKICAgICB2b2lkIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKIAogICAgIFN0cmluZyBnZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRp
ZXMsIHNpemVfdCkgY29uc3Q7CkBAIC0xNzMsNiArMTg4LDggQEAgcHJpdmF0ZToKICAgICBib29s
IHJlbW92ZVNob3J0aGFuZFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5n
ZWQpOwogICAgIGJvb2wgcmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgY3Nz
UHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29uc3Q7CisKICAgICBWZWN0b3I8
Q1NTUHJvcGVydHk+Ojpjb25zdF9pdGVyYXRvciBmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3Bl
cnR5SWQpIGNvbnN0OwogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT46Oml0ZXJhdG9yIGZpbmRQcm9w
ZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTA5
ICs3NywxMSBAQCBDU1NTdHlsZVNoZWV0KiBDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlCiAgICAg
cmV0dXJuIG1fcGFyZW50LnJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKIH0KIAotUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFt
ZSkKLXsKLSAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAg
IGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFBy
b3BlcnR5VmFsdWUocHJvcElEKTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246Omdl
dFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50
IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVByaW9yaXR5
KHByb3BJRCkgPyAiaW1wb3J0YW50IiA6ICIiOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17
Ci0gICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAo
IXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGludCBzaG9ydGhhbmRJRCA9
IGdldFByb3BlcnR5U2hvcnRoYW5kKHByb3BJRCk7Ci0gICAgaWYgKCFzaG9ydGhhbmRJRCkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3RhdGlj
X2Nhc3Q8Q1NTUHJvcGVydHlJRD4oc2hvcnRoYW5kSUQpKTsKLX0KLQotYm9vbCBDU1NTdHlsZURl
Y2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBp
ZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc1Byb3BlcnR5
SW1wbGljaXQocHJvcElEKTsKLX0KLQotdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaW50IHByb3BJ
RCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGJvb2wgaW1wb3J0YW50ID0gcHJpb3JpdHkuZmluZCgiaW1wb3J0YW50
IiwgMCwgZmFsc2UpICE9IG5vdEZvdW5kOwotICAgIHNldFByb3BlcnR5KHByb3BJRCwgdmFsdWUs
IGltcG9ydGFudCwgZWMpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3Zl
UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYg
KCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gcmVtb3ZlUHJv
cGVydHkocHJvcElELCBlYyk7Ci19Ci0KIGJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9w
ZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgcmV0dXJuIGNzc1By
b3BlcnR5SUQocHJvcGVydHlOYW1lKTsKIH0KIAotYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjpj
c3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5KSBjb25zdAotewot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5
LT5pZCgpKTsKLSAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0
eS0+dmFsdWUoKS0+Y3NzVGV4dCgpOwotfQotCi12b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OmRp
ZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdAotewotICAgIGlmICgh
c3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1Jl
bW92ZTsKLSAgICB7Ci0gICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7Ci0gICAgICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gKml0
OwotICAgICAgICAgICAgaWYgKGNzc1Byb3BlcnR5TWF0Y2hlcygmcHJvcGVydHkpKQotICAgICAg
ICAgICAgICAgIHByb3BlcnRpZXNUb1JlbW92ZS5hcHBlbmQocHJvcGVydHkuaWQoKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIG1hc3MgcmVtb3Zh
bC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydGllc1RvUmVtb3ZlLnNpemUo
KTsgaSsrKQotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1RvUmVtb3Zl
W2ldKTsKLX0KLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdAotewotICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT4gbGlzdDsKLSAgICBs
aXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9
IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAg
ICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZh
bHNlKSk7Ci0gICAgfQotICAgIHJldHVybiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3Jl
YXRlKGxpc3QpOwotfQotCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9u
OjpzaG93U3R5bGUoKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFy
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJh
dGlvbi5oCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwzNSArNTEsMjAgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbExlbmd0aCgpOyB9Ci0gICAg
dmlydHVhbCB1bnNpZ25lZCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5k
ZXgpIGNvbnN0ID0gMDsKLQotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NT
VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0
eVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVy
dHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFBy
b3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBib29sIGlz
UHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5
SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBw
cm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3Jp
dHkoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0
eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBp
c1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLQotICAgIHZvaWQg
c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcg
cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZp
cnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2Rl
JikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5n
IGdldFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpID0gMDsKKyAgICB2
aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUlt
cGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZp
cnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBF
eGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBjb3B5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKSA9IDA7CiAKLSAgICB2
b2lkIGRpZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLQotICAgIFBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29u
c3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNz
c1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0ID0gMDsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICB2b2lkIHNob3dTdHlsZSgpOwpAQCAtOTIsOCArNzcsNiBAQCBwcm90ZWN0
ZWQ6CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlID0gMCk7CiAg
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbihTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBib29s
IGlzSW5saW5lKTsKIAotICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3Qg
Q1NTUHJvcGVydHkqKSBjb25zdDsKLQogICAgIC8vIFRoZSBiaXRzIGluIHRoaXMgc2VjdGlvbiBh
cmUgb25seSB1c2VkIGJ5IHNwZWNpZmljIHN1YmNsYXNzZXMgYnV0IGtlcHQgaGVyZQogICAgIC8v
IHRvIG1heGltaXplIHN0cnVjdCBwYWNraW5nLgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVSdWxlLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBTdHJpbmcgQ1NT
U3R5bGVSdWxlOjpjc3NUZXh0KCkgY29uc3QKICAgICBTdHJpbmcgcmVzdWx0ID0gc2VsZWN0b3JU
ZXh0KCk7CiAKICAgICByZXN1bHQgKz0gIiB7ICI7Ci0gICAgcmVzdWx0ICs9IG1fc3R5bGUtPmNz
c1RleHQoKTsKKyAgICByZXN1bHQgKz0gbV9zdHlsZS0+YXNUZXh0KCk7CiAgICAgcmVzdWx0ICs9
ICJ9IjsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksNyBAQCBz
dGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgcHJpbnRFCiBzdGF0aWMgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIGxlZnRUb1JpZ2h0RGVjbGFyYXRpb24oKQogewogICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwgbGVmdFRv
UmlnaHREZWNsLCAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpKSk7Ci0gICAg
aWYgKCFsZWZ0VG9SaWdodERlY2wtPmxlbmd0aCgpKQorICAgIGlmIChsZWZ0VG9SaWdodERlY2wt
PmlzRW1wdHkoKSkKICAgICAgICAgbGVmdFRvUmlnaHREZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVMdHIpOwogICAgIHJldHVybiBsZWZ0VG9SaWdodERlY2wu
Z2V0KCk7CiB9CkBAIC0zMDcsNyArMzA3LDcgQEAgc3RhdGljIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBsZWZ0VAogc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiByaWdodFRv
TGVmdERlY2xhcmF0aW9uKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4sIHJpZ2h0VG9MZWZ0RGVjbCwgKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpjcmVhdGUoKSkpOwotICAgIGlmICghcmlnaHRUb0xlZnREZWNsLT5sZW5n
dGgoKSkKKyAgICBpZiAocmlnaHRUb0xlZnREZWNsLT5pc0VtcHR5KCkpCiAgICAgICAgIHJpZ2h0
VG9MZWZ0RGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlUnRs
KTsKICAgICByZXR1cm4gcmlnaHRUb0xlZnREZWNsLmdldCgpOwogfQpAQCAtNzgwLDcgKzc4MCw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnUKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5
LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7Ci0gICAg
ICAgICAgICBpZiAoIWRlY2wgfHwgKCFkZWNsLT5sZW5ndGgoKSAmJiAhaW5jbHVkZUVtcHR5UnVs
ZXMpKSB7CisgICAgICAgICAgICBpZiAoIWRlY2wgfHwgKGRlY2wtPmlzRW1wdHkoKSAmJiAhaW5j
bHVkZUVtcHR5UnVsZXMpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CkBAIC0yNTI2LDcgKzI1MjYsNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hdGNoUGFnZVJ1bGVzRm9yCiAKICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5v
IHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0LgogICAgICAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7Ci0gICAgICAgIGlm
ICghZGVjbCB8fCAhZGVjbC0+bGVuZ3RoKCkpCisgICAgICAgIGlmICghZGVjbCB8fCBkZWNsLT5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBBZGQgdGhpcyBy
dWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgU3RyaW5nIFdlYktpdENTU0tleWZyYW1lUnVsZTo6Y3NzVGV4dCgp
IAogICAgIFN0cmluZyByZXN1bHQgPSBtX2tleTsKIAogICAgIHJlc3VsdCArPSAiIHsgIjsKLSAg
ICByZXN1bHQgKz0gbV9zdHlsZS0+Y3NzVGV4dCgpOworICAgIHJlc3VsdCArPSBtX3N0eWxlLT5h
c1RleHQoKTsKICAgICByZXN1bHQgKz0gIn0iOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUKICAg
ICBzZXRJc1N0eWxlQXR0cmlidXRlVmFsaWQoKTsKICAgICBzZXRJc1N5bmNocm9uaXppbmdTdHls
ZUF0dHJpYnV0ZSgpOwogICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5l
U3R5bGUgPSBpbmxpbmVTdHlsZURlY2woKSkKLSAgICAgICAgY29uc3RfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4odGhpcyktPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5jc3NUZXh0
KCkpOworICAgICAgICBjb25zdF9jYXN0PFN0eWxlZEVsZW1lbnQqPih0aGlzKS0+c2V0QXR0cmli
dXRlKHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKICAgICBjbGVhcklzU3luY2hy
b25pemluZ1N0eWxlQXR0cmlidXRlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzk1LDcgKzM5NSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb24K
ICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudEZvbnRTaXplICE9IGRlc2lyZWRGb250U2l6
ZSkgewogICAgICAgICAgICAgaW5saW5lU3R5bGVEZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRTaXplLCBTdHJpbmc6Om51bWJlcihkZXNpcmVkRm9udFNpemUpICsgInB4IiwgZmFsc2Up
OwotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIs
IGlubGluZVN0eWxlRGVjbC0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZURlY2wtPmFzVGV4dCgpKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoaW5saW5lU3R5bGVEZWNsLT5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyKTsK
QEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRp
bmdVCiAgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGlubGlu
ZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmNvcHkoKTsKICAgICAg
ICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBD
U1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlEaXJlY3Rpb24pOwotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVt
ZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgc2V0
Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7
CiAgICAgICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVT
cGFuKGVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oZWxlbWVudCk7CiAgICAgICAgIH0KQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGlubGluZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCktPmNvcHkoKTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5tZXJnZShzdHlsZS0+
c3R5bGUoKSk7Ci0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0
ciwgaW5saW5lU3R5bGUtPmNzc1RleHQoKSk7CisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRl
KGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKICAgICAgICAgICAg
IG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGUKICAgICAvLyBTaW5jZSBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkIGNh
bid0IGFkZCBzdHlsZXMgdG8gYmxvY2stZmxvdyByZW5kZXIgb2JqZWN0cywgYWRkIHN0eWxlIGF0
dHJpYnV0ZSBpbnN0ZWFkLgogICAgIC8vIEZJWE1FOiBhcHBseUlubGluZVN0eWxlVG9SYW5nZSBz
aG91bGQgYmUgdXNlZCBoZXJlIGluc3RlYWQuCiAgICAgaWYgKChub2RlLT5yZW5kZXJlcigpLT5p
c0Jsb2NrRmxvdygpIHx8IG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpICYmIG5vZGUtPmlzSFRNTEVs
ZW1lbnQoKSkgewotICAgICAgICBzZXROb2RlQXR0cmlidXRlKHRvSFRNTEVsZW1lbnQobm9kZSks
IHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSk7CisgICAgICAg
IHNldE5vZGVBdHRyaWJ1dGUodG9IVE1MRWxlbWVudChub2RlKSwgc3R5bGVBdHRyLCBuZXdJbmxp
bmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0xMzEyLDcgKzEzMTIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxl
KGNvCiAgICAgICAgIAogICAgIFN0cmluZyBjc3NUZXh0ID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUo
KTsKICAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wgPSBibG9jay0+aW5s
aW5lU3R5bGVEZWNsKCkpCi0gICAgICAgIGNzc1RleHQgKz0gZGVjbC0+Y3NzVGV4dCgpOworICAg
ICAgICBjc3NUZXh0ICs9IGRlY2wtPmFzVGV4dCgpOwogICAgIHNldE5vZGVBdHRyaWJ1dGUoYmxv
Y2ssIHN0eWxlQXR0ciwgY3NzVGV4dCk7CiB9CiAKQEAgLTEzNzcsNyArMTM3Nyw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWYKICAgICBpZiAoc3R5bGVDaGFuZ2Uu
Y3NzU3R5bGUoKS5sZW5ndGgoKSkgewogICAgICAgICBpZiAoc3R5bGVDb250YWluZXIpIHsKICAg
ICAgICAgICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZXhpc3RpbmdTdHlsZSA9
IHN0eWxlQ29udGFpbmVyLT5pbmxpbmVTdHlsZURlY2woKSkKLSAgICAgICAgICAgICAgICBzZXRO
b2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIGV4aXN0aW5nU3R5bGUtPmNz
c1RleHQoKSArIHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHNldE5v
ZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgZXhpc3RpbmdTdHlsZS0+YXNU
ZXh0KCkgKyBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIHN0
eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOwogICAgICAgICB9IGVsc2UgewpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3
ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBpbnQgZWRpdGluZ1Byb3BlcnRpZXNbXSA9IHsKIAogZW51
bSBFZGl0aW5nUHJvcGVydGllc1R5cGUgeyBPbmx5SW5oZXJpdGFibGVFZGl0aW5nUHJvcGVydGll
cywgQWxsRWRpdGluZ1Byb3BlcnRpZXMgfTsKIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlFZGl0aW5nUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwgRWRpdGluZ1Byb3BlcnRpZXNUeXBlIHR5cGUgPSBPbmx5SW5oZXJpdGFibGVF
ZGl0aW5nUHJvcGVydGllcykKK3RlbXBsYXRlIDxjbGFzcyBTdHlsZURlY2xhcmF0aW9uVHlwZT4K
K3N0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5RWRpdGlu
Z1Byb3BlcnRpZXMoU3R5bGVEZWNsYXJhdGlvblR5cGUqIHN0eWxlLCBFZGl0aW5nUHJvcGVydGll
c1R5cGUgdHlwZSA9IE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKQogewogICAgIGlm
ICh0eXBlID09IEFsbEVkaXRpbmdQcm9wZXJ0aWVzKQogICAgICAgICByZXR1cm4gc3R5bGUtPmNv
cHlQcm9wZXJ0aWVzSW5TZXQoZWRpdGluZ1Byb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgoZWRp
dGluZ1Byb3BlcnRpZXMpKTsKQEAgLTEwNCw2ICsxMDUsMTEgQEAgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYQogICAgICAgICByZXR1cm4gQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmNyZWF0ZSgpOwogICAgIHJldHVybiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoc3R5
bGUuZ2V0KCksIHR5cGUpOwogfQorICAgIAorc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBwcm9wZXJ0eUNTU1ZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRp
b24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3sKKyAgICByZXR1cm4gc3R5bGVEZWNsYXJh
dGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHlJRCkpOwor
fQogCiBzdGF0aWMgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQcm9wZXJ0
aWVzTm90SW4oQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGll
cywgQ1NTU3R5bGVEZWNsYXJhdGlvbiogYmFzZVN0eWxlKTsKIGVudW0gTGVnYWN5Rm9udFNpemVN
b2RlIHsgQWx3YXlzVXNlTGVnYWN5Rm9udFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4
ZWxWYWx1ZXNNYXRjaCB9OwpAQCAtMzQ3LDcgKzM1Myw3IEBAIHN0YXRpYyBSR0JBMzIgY3NzVmFs
dWVUb1JHQkEoQ1NTVmFsdWUqIGMKIAogc3RhdGljIGlubGluZSBSR0JBMzIgZ2V0UkdCQUZvbnRD
b2xvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKLSAgICByZXR1cm4gY3NzVmFsdWVU
b1JHQkEoc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlDb2xvcikuZ2V0KCkp
OworICAgIHJldHVybiBjc3NWYWx1ZVRvUkdCQShwcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLCBDU1NQ
cm9wZXJ0eUNvbG9yKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgUkdCQTMyIHJnYmFCYWNr
Z3JvdW5kQ29sb3JJbkVmZmVjdChOb2RlKiBub2RlKQpAQCAtNDgyLDcgKzQ4OCw3IEBAIHZvaWQg
RWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNzUmVmUHRyPEMKIAogdm9pZCBFZGl0aW5nU3R5bGU6
Om92ZXJyaWRlV2l0aFN0eWxlKGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkKIHsKLSAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkpCisgICAgaWYgKCFzdHls
ZSB8fCBzdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX211dGFi
bGVTdHlsZSkKICAgICAgICAgbV9tdXRhYmxlU3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y3JlYXRlKCk7CkBAIC01NDcsOCArNTUzLDggQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJl
bW92ZVN0eWxlQWRkZWRCeU5vZAogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBwYXJlbnRTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21wdXRl
ZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZS0+cGFyZW50Tm9kZSgpKSwgQWxsRWRpdGluZ1Byb3Bl
cnRpZXMpOwogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxl
ID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZShub2RlKSwgQWxs
RWRpdGluZ1Byb3BlcnRpZXMpOwotICAgIHBhcmVudFN0eWxlLT5kaWZmKG5vZGVTdHlsZS5nZXQo
KSk7Ci0gICAgbm9kZVN0eWxlLT5kaWZmKG1fbXV0YWJsZVN0eWxlLmdldCgpKTsKKyAgICBub2Rl
U3R5bGUtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKHBhcmVudFN0eWxlLmdldCgpKTsKKyAg
ICBtX211dGFibGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMobm9kZVN0eWxlLmdl
dCgpKTsKIH0KIAogdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRo
U3R5bGVPZk5vZGUoTm9kZSogbm9kZSkKQEAgLTU1OCw3ICs1NjQsNyBAQCB2b2lkIEVkaXRpbmdT
dHlsZTo6cmVtb3ZlU3R5bGVDb25mbGljdGluCiAKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IHBhcmVudFN0eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUo
Y29tcHV0ZWRTdHlsZShub2RlLT5wYXJlbnROb2RlKCkpLCBBbGxFZGl0aW5nUHJvcGVydGllcyk7
CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBub2RlU3R5bGUgPSBlZGl0
aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUpLCBBbGxFZGl0aW5n
UHJvcGVydGllcyk7Ci0gICAgcGFyZW50U3R5bGUtPmRpZmYobm9kZVN0eWxlLmdldCgpKTsKKyAg
ICBub2RlU3R5bGUtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKHBhcmVudFN0eWxlLmdldCgp
KTsKIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBub2RlU3R5bGUtPmVuZCgpOwogICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbm9kZVN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CkBAIC02MTAsOSArNjE2LDkgQEAgVHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5
bGUoQwogICAgIGlmIChzaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMgPT0gSWdub3JlVGV4
dE9ubHlQcm9wZXJ0aWVzKQogICAgICAgICBkaWZmZXJlbmNlLT5yZW1vdmVQcm9wZXJ0aWVzSW5T
ZXQodGV4dE9ubHlQcm9wZXJ0aWVzLCBXVEZfQVJSQVlfTEVOR1RIKHRleHRPbmx5UHJvcGVydGll
cykpOwogCi0gICAgaWYgKCFkaWZmZXJlbmNlLT5sZW5ndGgoKSkKKyAgICBpZiAoZGlmZmVyZW5j
ZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIGlmIChkaWZm
ZXJlbmNlLT5sZW5ndGgoKSA9PSBtX211dGFibGVTdHlsZS0+bGVuZ3RoKCkpCisgICAgaWYgKGRp
ZmZlcmVuY2UtPnByb3BlcnR5Q291bnQoKSA9PSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKIAogICAgIHJldHVybiBNaXhlZFRy
aVN0YXRlOwpAQCAtODAwLDcgKzgwNiw3IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpleHRyYWN0Q29u
ZmxpY3RpbmdJbXAKIAogYm9vbCBFZGl0aW5nU3R5bGU6OnN0eWxlSXNQcmVzZW50SW5Db21wdXRl
ZFN0eWxlT2ZOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX211dGFibGVT
dHlsZSB8fCAhZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgpLCBjb21wdXRl
ZFN0eWxlKG5vZGUpLmdldCgpKS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuICFtX211dGFibGVTdHls
ZSB8fCBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIGNvbXB1dGVkU3R5
bGUobm9kZSkuZ2V0KCkpLT5pc0VtcHR5KCk7CiB9CiAKIGJvb2wgRWRpdGluZ1N0eWxlOjplbGVt
ZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudChjb25zdCBIVE1MRWxlbWVudCogZWxlbWVu
dCkKQEAgLTg2OSw3ICs4NzUsOCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlB
dChjb25zCiAgICAgICAgIGRpcmVjdGlvbiA9IG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKICAgICB9CiAKLSAgICBzdHlsZS0+bV9tdXRh
YmxlU3R5bGUtPmRpZmYobV9tdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIG1fbXV0YWJsZVN0eWxl
LT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhzdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkp
OworCiAgICAgaWYgKGdldFJHQkFGb250Q29sb3IobV9tdXRhYmxlU3R5bGUuZ2V0KCkpID09IGdl
dFJHQkFGb250Q29sb3Ioc3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpKSkKICAgICAgICAgbV9t
dXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwogCkBAIC0xMDY4
LDcgKzEwNzUsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvCiAK
IHN0YXRpYyB2b2lkIHJlbW92ZVByb3BlcnRpZXNJblN0eWxlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZVRvUmVtb3ZlUHJvcGVydGllc0Zyb20sIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSkKIHsKLSAgICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzVG9SZW1vdmUoc3R5
bGUtPmxlbmd0aCgpKTsKKyAgICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzVG9SZW1vdmUoc3R5bGUt
PnByb3BlcnR5Q291bnQoKSk7CiAgICAgc2l6ZV90IGkgPSAwOwogICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CiAgICAgZm9y
IChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0LCArK2kpCkBAIC0xMDg1LDcgKzEwOTIsNyBAQCB2b2lk
IEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBCiAKICAgICAvLyAxLiBSZW1vdmUg
c3R5bGUgZnJvbSBtYXRjaGVkIHJ1bGVzIGJlY2F1c2Ugc3R5bGUgcmVtYWluIHdpdGhvdXQgcmVw
ZWF0aW5nIGl0IGluIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbgogICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzID0gc3R5bGVGcm9tTWF0
Y2hlZFJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBDU1NTdHlsZVNlbGVjdG9yOjpBbGxCdXRFbXB0
eUNTU1J1bGVzKTsKLSAgICBpZiAoc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzICYmIHN0eWxlRnJvbU1h
dGNoZWRSdWxlcy0+bGVuZ3RoKCkpCisgICAgaWYgKHN0eWxlRnJvbU1hdGNoZWRSdWxlcyAmJiAh
c3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5pc0VtcHR5KCkpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxl
ID0gZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgpLCBzdHlsZUZyb21NYXRj
aGVkUnVsZXMuZ2V0KCkpOwogCiAgICAgLy8gMi4gUmVtb3ZlIHN0eWxlIHByZXNlbnQgaW4gY29u
dGV4dCBhbmQgbm90IG92ZXJyaWRlbiBieSBtYXRjaGVkIHJ1bGVzLgpAQCAtMTExMCw3ICsxMTE3
LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQQogCiB2b2lkIEVk
aXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERlZmF1bHRTdHlsZShFbGVtZW50
KiBlbGVtZW50KQogewotICAgIGlmICghbV9tdXRhYmxlU3R5bGUgfHwgIW1fbXV0YWJsZVN0eWxl
LT5sZW5ndGgoKSkKKyAgICBpZiAoIW1fbXV0YWJsZVN0eWxlIHx8IG1fbXV0YWJsZVN0eWxlLT5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVu
dChlbGVtZW50LCBDU1NTdHlsZVNlbGVjdG9yOjpVQUFuZFVzZXJDU1NSdWxlcyk7CkBAIC0xMjE3
LDcgKzEyMjQsNyBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzCiAg
ICAgICAgIG11dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0
eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKSk7CiAK
ICAgICAvLyBTYXZlIHRoZSByZXN1bHQgZm9yIGxhdGVyCi0gICAgbV9jc3NTdHlsZSA9IG11dGFi
bGVTdHlsZS0+Y3NzVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIG1fY3NzU3R5bGUgPSBt
dXRhYmxlU3R5bGUtPmFzVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOwogfQogCiBzdGF0aWMgdm9p
ZCBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgY29uc3QgQ1NTVmFsdWVMaXN0KiBuZXdUZXh0RGVjb3JhdGlvbiwgaW50IHByb3BlcnR5
SUQpCkBAIC0xMzEyLDcgKzEzMTksNyBAQCBzdGF0aWMgdm9pZCBkaWZmVGV4dERlY29yYXRpb25z
KENTU011dGFiCiBzdGF0aWMgYm9vbCBmb250V2VpZ2h0SXNCb2xkKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlKQogewogICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBm
b250V2VpZ2h0ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2Vp
Z2h0KTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRXZWlnaHQgPSBwcm9wZXJ0eUNTU1ZhbHVl
KHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOwogCiAgICAgaWYgKCFmb250V2VpZ2h0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzY2LDMwICsxMzczLDMwIEBAIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHIKICAgICBBU1NFUlQoYmFzZVN0eWxlKTsKICAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHJlc3VsdCA9IHN0eWxlV2l0aFJl
ZHVuZGFudFByb3BlcnRpZXMtPmNvcHkoKTsKIAotICAgIGJhc2VTdHlsZS0+ZGlmZihyZXN1bHQu
Z2V0KCkpOworICAgIHJlc3VsdC0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoYmFzZVN0eWxl
KTsKIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0ID0g
YmFzZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29y
YXRpb25zSW5FZmZlY3QpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gYmFzZVRleHREZWNvcmF0aW9u
c0luRWZmZWN0ID0gcHJvcGVydHlDU1NWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwogICAgIGRpZmZUZXh0RGVjb3JhdGlvbnMocmVzdWx0
LmdldCgpLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBiYXNlVGV4dERlY29yYXRpb25zSW5F
ZmZlY3QuZ2V0KCkpOwogICAgIGRpZmZUZXh0RGVjb3JhdGlvbnMocmVzdWx0LmdldCgpLCBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCBiYXNlVGV4dERlY29yYXRpb25z
SW5FZmZlY3QuZ2V0KCkpOwogCi0gICAgaWYgKGJhc2VTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRTaXplKSAmJiBmb250V2VpZ2h0SXNCb2xkKHJlc3VsdC5nZXQoKSkg
PT0gZm9udFdlaWdodElzQm9sZChiYXNlU3R5bGUpKQorICAgIGlmIChwcm9wZXJ0eUNTU1ZhbHVl
KGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlGb250U2l6ZSkgJiYgZm9udFdlaWdodElzQm9sZChyZXN1
bHQuZ2V0KCkpID09IGZvbnRXZWlnaHRJc0JvbGQoYmFzZVN0eWxlKSkKICAgICAgICAgcmVzdWx0
LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOwogCi0gICAgaWYgKGJhc2VT
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSAmJiBnZXRSR0JBRm9u
dENvbG9yKHJlc3VsdC5nZXQoKSkgPT0gZ2V0UkdCQUZvbnRDb2xvcihiYXNlU3R5bGUpKQorICAg
IGlmIChwcm9wZXJ0eUNTU1ZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlDb2xvcikgJiYgZ2V0
UkdCQUZvbnRDb2xvcihyZXN1bHQuZ2V0KCkpID09IGdldFJHQkFGb250Q29sb3IoYmFzZVN0eWxl
KSkKICAgICAgICAgcmVzdWx0LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKIAot
ICAgIGlmIChiYXNlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0QWxp
Z24pICYmIGdldFRleHRBbGlnbm1lbnQocmVzdWx0LmdldCgpKSA9PSBnZXRUZXh0QWxpZ25tZW50
KGJhc2VTdHlsZSkpCisgICAgaWYgKHByb3BlcnR5Q1NTVmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9w
ZXJ0eVRleHRBbGlnbikgJiYgZ2V0VGV4dEFsaWdubWVudChyZXN1bHQuZ2V0KCkpID09IGdldFRl
eHRBbGlnbm1lbnQoYmFzZVN0eWxlKSkKICAgICAgICAgcmVzdWx0LT5yZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVRleHRBbGlnbik7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbnQgZ2V0
SWRlbnRpZmllclZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBpbnQgcHJvcGVydHlJ
RCkKK2ludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShwcm9wZXJ0eUlEKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gcHJvcGVy
dHlDU1NWYWx1ZShzdHlsZSwgcHJvcGVydHlJRCk7CiAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTE0MjIsNyArMTQy
OSw3IEBAIGludCBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShEb2N1bWVudCoKIAogYm9vbCBo
YXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkK
IHsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Y3NzVmFsdWUgPSBwcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcik7CiAgICAgaWYgKCFjc3NWYWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgJKHJldmlzaW9uIDEwNjE5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxNiw3ICsyMTYsNyBAQCBwcml2YXRlOgogfTsKIAogLy8gRklYTUU6IFJlbW92ZSB0aGVz
ZSBmdW5jdGlvbnMgb3IgbWFrZSB0aGVtIG5vbi1nbG9iYWwgdG8gZGlzY291cmFnZSB1c2luZyBD
U1NTdHlsZURlY2xhcmF0aW9uIGRpcmVjdGx5LgotaW50IGdldElkZW50aWZpZXJWYWx1ZShDU1NT
dHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BlcnR5SUQpOworaW50IGdldElkZW50aWZpZXJWYWx1
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgQ1NTUHJvcGVydHlJRCk7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDIsOCArNTAyLDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOwotICAgICAgICB9
IGVsc2UgaWYgKG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5sZW5ndGgoKSAhPSBpbmxpbmVTdHls
ZS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxl
QXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAobmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPnByb3BlcnR5Q291bnQoKSAhPSBpbmxpbmVT
dHlsZS0+cHJvcGVydHlDb3VudCgpKQorICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVt
ZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAKICAg
ICAgICAgLy8gRklYTUU6IFRvbGVyYXRlIGRpZmZlcmVuY2VzIGluIGlkLCBjbGFzcywgYW5kIHN0
eWxlIGF0dHJpYnV0ZXMuCiAgICAgICAgIGlmIChpc05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1l
bnQoZWxlbWVudCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudCwgZWxlbWVudC0+cGFy
ZW50Tm9kZSgpKQpAQCAtNjYwLDcgKzY2MCw3IEBAIHN0YXRpYyBib29sIGhhbmRsZVN0eWxlU3Bh
bnNCZWZvcmVJbnNlcnQKIAogICAgIE5vZGUqIHdyYXBwaW5nU3R5bGVTcGFuID0gdG9wTm9kZTsK
ICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZUF0SW5zZXJ0aW9uUG9zID0gRWRpdGluZ1N0
eWxlOjpjcmVhdGUoaW5zZXJ0aW9uUG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAg
ICBTdHJpbmcgc3R5bGVUZXh0ID0gc3R5bGVBdEluc2VydGlvblBvcy0+c3R5bGUoKS0+Y3NzVGV4
dCgpOworICAgIFN0cmluZyBzdHlsZVRleHQgPSBzdHlsZUF0SW5zZXJ0aW9uUG9zLT5zdHlsZSgp
LT5hc1RleHQoKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHN0cmluZyBjb21wYXJpc29uIGlzIGEg
bmFpdmUgd2F5IG9mIGNvbXBhcmluZyB0d28gc3R5bGVzLgogICAgIC8vIFdlIHNob3VsZCBiZSB0
YWtpbmcgdGhlIGRpZmYgYW5kIGNoZWNrIHRoYXQgdGhlIGRpZmYgaXMgZW1wdHkuCkBAIC03MjAs
NyArNzIwLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bAogICAg
ICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHdyYXBw
aW5nU3R5bGVTcGFuKTsKICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFw
cGluZ1N0eWxlU3Bhbik7CiAgICAgfSBlbHNlCi0gICAgICAgIHNldE5vZGVBdHRyaWJ1dGUod3Jh
cHBpbmdTdHlsZVNwYW4sIHN0eWxlQXR0ciwgc3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSk7Cisg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUod3JhcHBpbmdTdHlsZVNwYW4sIHN0eWxlQXR0ciwgc3R5
bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKIH0KIAogdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6bWVyZ2VFbmRJZk5lZWRlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShy
ZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRTdHlsCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGRp
dlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIHN0eWxlU3Bhbk9wZW4sICgiPHNwYW4gc3R5bGU9XCIiKSk7CiAgICAgb3V0LmFw
cGVuZChpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHlsZVNwYW5PcGVuKTsKLSAgICBhcHBlbmRBdHRy
aWJ1dGVWYWx1ZShvdXQsIHN0eWxlLT5jc3NUZXh0KCksIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVu
dCgpKTsKKyAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIHN0eWxlLT5hc1RleHQoKSwgZG9j
dW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOwogICAgIG91dC5hcHBlbmQoJ1wiJyk7CiAgICAgb3V0
LmFwcGVuZCgnPicpOwogfQpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEVsZW0KICAgICAgICAgaWYgKCFuZXdJbmxpbmVTdHlsZS0+aXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5
bGVQcmVmaXgsICgiIHN0eWxlPVwiIikpOwogICAgICAgICAgICAgb3V0LmFwcGVuZChzdHlsZVBy
ZWZpeCk7Ci0gICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIG5ld0lubGluZVN0
eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCksIGRvY3VtZW50SXNIVE1MKTsKKyAgICAgICAgICAgIGFw
cGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgp
LCBkb2N1bWVudElzSFRNTCk7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKCdcIicpOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQko
cmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIFJlbmRlclN0eWxl
KiBzdHlsZUZvclNlbGVjdGlvblN0YQogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxlRWxlbWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHNwYW5UYWcsIGZhbHNlKTsKIAot
ICAgIFN0cmluZyBzdHlsZVRleHQgPSB0eXBpbmdTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpICsg
IiBkaXNwbGF5OiBpbmxpbmUiOworICAgIFN0cmluZyBzdHlsZVRleHQgPSB0eXBpbmdTdHlsZS0+
c3R5bGUoKS0+YXNUZXh0KCkgKyAiIGRpc3BsYXk6IGlubGluZSI7CiAgICAgc3R5bGVFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBzdHlsZVRleHQuaW1wbCgpKTsKIAogICAgIHN0eWxl
RWxlbWVudC0+YXBwZW5kQ2hpbGQoZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0
Tm9kZSgiIiksIEFTU0VSVF9OT19FWENFUFRJT04pOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0lt
YWdlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9p
ZCBJbWFnZURvY3VtZW50OjpyZXNpemVJbWFnZVRvRml0KCkKICAgICBtX2ltYWdlRWxlbWVudC0+
c2V0SGVpZ2h0KHN0YXRpY19jYXN0PGludD4oaW1hZ2VTaXplLmhlaWdodCgpICogc2NhbGUpKTsK
ICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIG1faW1hZ2VFbGVtZW50LT5zdHlsZSgp
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1pbiIsIGZhbHNl
LCBlYyk7CisgICAgbV9pbWFnZUVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1pbiIsIGZhbHNlLCBlYyk7
CiB9CiAKIHZvaWQgSW1hZ2VEb2N1bWVudDo6aW1hZ2VDbGlja2VkKGludCB4LCBpbnQgeSkKQEAg
LTMwOSw5ICszMDksOSBAQCB2b2lkIEltYWdlRG9jdW1lbnQ6OnJlc3RvcmVJbWFnZVNpemUoKQog
ICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgaWYgKGltYWdlRml0c0luV2luZG93KCkp
Ci0gICAgICAgIG1faW1hZ2VFbGVtZW50LT5zdHlsZSgpLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUN1cnNvciwgZWMpOworICAgICAgICBtX2ltYWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCktPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCBlYyk7CiAgICAgZWxz
ZQotICAgICAgICBtX2ltYWdlRWxlbWVudC0+c3R5bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlDdXJzb3IsICItd2Via2l0LXpvb20tb3V0IiwgZmFsc2UsIGVjKTsKKyAgICAgICAgbV9pbWFn
ZUVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBmYWxzZSwgZWMpOwogICAgICAgICAKICAgICBt
X2RpZFNocmlua0ltYWdlID0gZmFsc2U7CiB9CkBAIC0zNDQsOSArMzQ0LDkgQEAgdm9pZCBJbWFn
ZURvY3VtZW50Ojp3aW5kb3dTaXplQ2hhbmdlZCgpCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7
CiAgICAgICAgIAogICAgICAgICBpZiAoZml0c0luV2luZG93KQotICAgICAgICAgICAgbV9pbWFn
ZUVsZW1lbnQtPnN0eWxlKCktPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCBlYyk7
CisgICAgICAgICAgICBtX2ltYWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnJl
bW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCBlYyk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1faW1hZ2VFbGVtZW50LT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1
cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBmYWxzZSwgZWMpOworICAgICAgICAgICAgbV9pbWFn
ZUVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBmYWxzZSwgZWMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTg3LDcgKzE5ODcsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0Rm9udChjCiAgICAgU3RyaW5nIGRlY2xhcmF0aW9uVGV4dCgiZm9udDogIik7
CiAgICAgZGVjbGFyYXRpb25UZXh0ICs9IG5ld0ZvbnQ7CiAgICAgcGFyc2VyLnBhcnNlRGVjbGFy
YXRpb24odGVtcERlY2wuZ2V0KCksIGRlY2xhcmF0aW9uVGV4dCk7Ci0gICAgaWYgKCF0ZW1wRGVj
bC0+bGVuZ3RoKCkpCisgICAgaWYgKHRlbXBEZWNsLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFRoZSBwYXJzZSBzdWNjZWVkZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDcgQEAgUkdCQTMyIGN1cnJlbnRDb2xvcihIVE1MQ2FudmFzRWxlbWVudCogYwogICAg
IGlmICghY2FudmFzIHx8ICFjYW52YXMtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIENv
bG9yOjpibGFjazsKICAgICBSR0JBMzIgcmdiYSA9IENvbG9yOjpibGFjazsKLSAgICBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IocmdiYSwgY2FudmFzLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKENT
U1Byb3BlcnR5Q29sb3IpKTsKKyAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IocmdiYSwgY2FudmFz
LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNv
bG9yKSk7CiAgICAgcmV0dXJuIHJnYmE7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpy
ZXZhbGlkYXRlU3R5bAogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBtX2ZsYXRSdWxl
cy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgQ1NTU3R5bGVSdWxlKiBwYXJzZWRS
dWxlID0gbV9mbGF0UnVsZXMuYXQoaSk7CiAgICAgICAgIGlmIChwYXJzZWRSdWxlLT5zdHlsZSgp
ID09IHBhZ2VTdHlsZSkgewotICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCktPmNz
c1RleHQoKSAhPSBwYWdlU3R5bGUtPmNzc1RleHQoKSkgeworICAgICAgICAgICAgaWYgKHBhcnNl
ZFJ1bGUtPnN0eWxlKCktPmFzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGRpc2FibGVkIHByb3BlcnRpZXMgZm9yIHRoZSBpbnZh
bGlkIHN0eWxlIGhlcmUuCiAgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JTdHlsZXMucmVtb3Zl
KHBhZ2VTdHlsZSk7CiAgICAgICAgICAgICAgICAgc2V0U3R5bGVUZXh0KHBhZ2VTdHlsZSwgcGFn
ZVN0eWxlLT5jc3NUZXh0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFs
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXpl
ci5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsMTIgKzMxNyw5IEBAIHZvaWQgUGFnZVNl
cmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm8KICAgICAvLyBUaGUgYmFja2dyb3VuZC1pbWFn
ZSBhbmQgbGlzdC1zdHlsZS1pbWFnZSAoZm9yIHVsIG9yIG9sKSBhcmUgdGhlIENTUyBwcm9wZXJ0
aWVzCiAgICAgLy8gdGhhdCBtYWtlIHVzZSBvZiBpbWFnZXMuIFdlIGl0ZXJhdGUgdG8gbWFrZSBz
dXJlIHdlIGluY2x1ZGUgYW55IG90aGVyCiAgICAgLy8gaW1hZ2UgcHJvcGVydGllcyB0aGVyZSBt
aWdodCBiZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVEZWNsYXJhdGlvbi0+
bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAvLyBGSVhNRTogSXQncyBraW5kIG9mIHJpZGljdWxv
dXMgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCB0aGVuIGdldAotICAgICAgICAvLyB0aGUg
dmFsdWUgb3V0IG9mIHRoZSBuYW1lLiBJZGVhbGx5IHdlIHdvdWxkIGdldCB0aGUgdmFsdWUgb3V0
IG9mIHRoZQotICAgICAgICAvLyBwcm9wZXJ0eSBJRCwgYnV0IENTU1N0eWxlRGVjbGFyYXRpb24g
b25seSBnaXZlcyBhY2Nlc3MgdG8gcHJvcGVydHkKLSAgICAgICAgLy8gbmFtZXMsIG5vdCBJRHMu
Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlRGVjbGFyYXRpb24tPml0ZW0oaSkpOworICAgIHVuc2ln
bmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUNvdW50KCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgeworICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlB
dChpKS52YWx1ZSgpOwogICAgICAgICBpZiAoIWNzc1ZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw3
ICsxODQsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5T3JVbnN0eWxlZEFwcGxlU3R5bGVTCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGlu
ZVN0eWxlRGVjbCA9IGVsZW0tPmlubGluZVN0eWxlRGVjbCgpOwotICAgIHJldHVybiAoIWlubGlu
ZVN0eWxlRGVjbCB8fCBpbmxpbmVTdHlsZURlY2wtPmxlbmd0aCgpID09IDApOworICAgIHJldHVy
biAoIWlubGluZVN0eWxlRGVjbCB8fCBpbmxpbmVTdHlsZURlY2wtPmlzRW1wdHkoKSk7CiB9CiAK
IFN0cmluZyBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoY29uc3QgU3RyaW5nJiBzKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTA2MTk4
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MzcsNyArNDM3LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gU1ZHU3R5bGVkRWxl
bWVudDo6ZwogICAgICAgICBpbnQgcHJvcElkID0gU1ZHU3R5bGVkRWxlbWVudDo6Y3NzUHJvcGVy
dHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoY3NzU1ZHQXR0ci0+bmFtZSgpKTsKICAgICAgICAgYWRk
Q1NTUHJvcGVydHkoY3NzU1ZHQXR0ciwgcHJvcElkLCBjc3NTVkdBdHRyLT52YWx1ZSgpKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGNzc1NWR0F0dHItPmRlY2woKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShu
YW1lKTsKKyAgICByZXR1cm4gY3NzU1ZHQXR0ci0+ZGVjbCgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KGNzc1Byb3BlcnR5SUQobmFtZSkpOwogfQogCiBib29sIFNWR1N0eWxlZEVsZW1lbnQ6Omluc3Rh
bmNlVXBkYXRlc0Jsb2NrZWQoKSBjb25zdAo=
</data>
<flag name="commit-queue"
          id="125718"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124467</attachid>
            <date>2012-01-29 12:32:12 -0800</date>
            <delta_ts>2012-01-29 13:16:35 -0800</delta_ts>
            <desc>try to fix chromium build</desc>
            <filename>cssstyledeclaration-cleanup-6.patch</filename>
            <type>text/plain</type>
            <size>60477</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0wMS0yOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIG5vbi1DU1NPTSBB
UEkgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzcyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uIHNob3VsZCBleHBvc2UgdGhlIENT
U09NIEFQSSBvbmx5LiBTdWJjbGFzc2VzIHNob3VsZCBleHBvc2UgdGhlIGludGVybmFsIEFQSSBv
bmx5LiAKKyAgICAgICAgVGhpcyB3aWxsIG1vdmUgdXMgY2xvc2VyIHRvIGJlaW5nIGFibGUgdG8g
c3BsaXQgdGhlIENTU09NIEFQSSBmcm9tIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIC0gTWFrZSBDU1NTdHlsZURlY2xhcmF0aW9uIENTU09NIGZ1bmN0aW9u
cyB2aXJ0dWFsLCBpbnRlcm5hbCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuCisgICAgICAgIC0gTW92
ZSBpbXBsZW1lbnRhdGlvbnMgdG8gc3ViY2xhc3NlcyAoQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbikuCisgICAgICAgIC0gTWFrZSBDU1NPTSBm
dW5jdGlvbnMgaW4gdGhlIHN1YmNsYXNzZXMgcHJpdmF0ZSAobWFraW5nIGl0IGhhcmRlciB0byBp
bnZva2UgdGhlbSBpbnRlcm5hbGx5KS4KKyAgICAgICAgLSBTd2l0Y2ggYSBidW5jaCBvZiBwbGFj
ZXMgdG8gdXNlIGludGVybmFsIEFQSSBpbnN0ZWFkIG9mIENTU09NLgorCisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKKyAgICAgICAg
KFdlYkNvcmU6OlY4Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFtZWRQcm9wZXJ0eUdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpWOENTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkUHJvcGVydHlTZXR0
ZXIpOgorICAgICAgICAKKyAgICAgICAgICAgIFN3aXRjaCB0byAqSW50ZXJuYWwgdmVyc2lvbnMg
b2YgdGhlIENTU09NIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3Bl
cnRpZXNJblNldCk6CisgICAgICAgIAorICAgICAgICAgICAgTW92ZSBjb3B5UHJvcGVydGllc0lu
U2V0IHRvIHN1YmNsYXNzZXMsIGRldmlydHVhbGl6ZS4KKyAgICAgICAgICAgIAorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJv
cGVydHkpOgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaDoKKyAg
ICAgICAgKENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgICogY3NzL0NTU0Zv
bnRGYWNlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVJ1bGU6OmNzc1Rl
eHQpOgorICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjphc1RleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNzc1RleHQpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlDU1NWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVy
dHlJbXBsaWNpdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KToKKyAgICAgICAgCisgICAgICAgICAg
ICBNb3ZlIGNvcHlQcm9wZXJ0aWVzSW5TZXQgdG8gc3ViY2xhc3NlcywgZGV2aXJ0dWFsaXplLgor
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
c3NQcm9wZXJ0eU1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKToKKyAgICAgICAgCisgICAgICAg
ICAgICBNb3ZlIGRpZmYoKSB0byBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiwgcmVuYW1lIHRv
IHJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzLCBzd2l0Y2ggdG8gbXV0YXRlCisgICAgICAgICAg
ICB0aGlzIG9iamVjdCBpbnN0ZWFkIG9mIHRoZSBhcmd1bWVudCBvYmplY3QuCisgICAgCisgICAg
ICAgICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIChDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6cHJvcGVydHlDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6cHJvcGVydHlBdCk6CisgICAgICAgIAorICAgICAgICAgICAgRXhw
b3NlIHByb3BlcnRpZXMgYW5kIHByb3BlcnR5IGNvdW50IGludGVybmFsbHkgKGl0ZXJhdG9yIHNo
b3VsZCBiZSByZW1vdmVkIGluIGZhdm9yIG9mIHRoZXNlKS4KKyAgICAgICAgCisgICAgICAgICog
Y3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKENTU1N0eWxlRGVjbGFyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlD
U1NWYWx1ZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURl
Y2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKToKKyAgICAgICAgCisgICAgICAgICAgICBB
ZGQgKkludGVybmFsIHZlcnNpb25zIG9mIHNvbWUgQ1NTT00gQVBJcyB0byBzdXBwb3J0IHNvbWUg
ZWRpdGluZyBhbmQgYmluZGluZ3MgdXNlcy4KKyAgICAgICAgICAgIFRoZXNlIHRha2UgcHJvcGVy
dHlJRHMgaW5zdGVhZCBvZiBzdHJpbmdzIG5hbWVzLgorCisgICAgICAgICogY3NzL0NTU1N0eWxl
UnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVJ1bGU6OmNzc1RleHQpOgorICAg
ICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxlZnRU
b1JpZ2h0RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmlnaHRUb0xlZnREZWNsYXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0
Y2hQYWdlUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lUnVsZTo6Y3NzVGV4dCk6
CisgICAgICAgICogZG9tL1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUpOgorICAgICAgICAqIGVkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUVtYmVkZGluZ1VwVG9FbmNsb3NpbmdCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxl
VG9QdXNoRG93bik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxv
Y2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5l
U3R5bGVJZk5lZWRlZCk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAg
ICAgICAoKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlFZGl0aW5nUHJvcGVydGllcyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnR5Q1NTVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0UkdCQUZvbnRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6Om92ZXJyaWRlV2l0aFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdT
dHlsZTo6cmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUlzUHJlc2VudEluQ29tcHV0ZWRTdHlsZU9mTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQpOgorICAgICAg
ICAoV2ViQ29yZTo6cmVtb3ZlUHJvcGVydGllc0luU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBy
b3BlcnRpZXNOb3RJbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRJZGVudGlmaWVyVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6aGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmg6CisgICAgICAgIAorICAgICAgICAgICAgQWRhcHQg
dG8gY2hhbmdlcy4KKyAgICAKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGVkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5Jbmxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bGVT
cGFucyk6CisgICAgICAgICogZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydCk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0
eWxlTm9kZU9wZW5UYWcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSW1hZ2VEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpyZXNpemVJbWFnZVRvRml0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OnJlc3RvcmVJbWFnZVNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6d2luZG93U2l6ZUNoYW5nZWQpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRDb2xvcik6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6cmV2YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKiBw
YWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVy
OjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0VtcHR5T3JVbnN0
eWxlZEFwcGxlU3R5bGVTcGFuKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50OjpnZXRQcmVzZW50YXRpb25BdHRy
aWJ1dGUpOgorCiAyMDEyLTAxLTI4ICBBbGV4YW5kZXIgRsOmcsO4eSAgPGFoZkAweDkwLmRrPgog
CiAgICAgICAgIFtRdF0gUmVtb3ZlIHJlZmVyZW5jZXMgdG8gQ1NTQm9yZGVySW1hZ2VWYWx1ZS5o
IGluIFRhcmdldC5wcmkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShy
ZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIw
Miw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENTU1N0eWxlRGVjbGFyYXQKICAgICAgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKICAgICBDU1NTdHlsZURlY2xhcmF0
aW9uKiBpbXAgPSBWOENTU1N0eWxlRGVjbGFyYXRpb246OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBpbXAtPmdldFByb3BlcnR5Q1NTVmFs
dWUocHJvcEluZm8tPnByb3BJRCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IGlt
cC0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHByb3BJbmZvLT5wcm9wSUQpOwogICAgIGlm
IChjc3NWYWx1ZSkgewogICAgICAgICBpZiAocHJvcEluZm8tPmhhZFBpeGVsT3JQb3NQcmVmaXgg
JiYKICAgICAgICAgICAgIGNzc1ZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKQEAgLTIxMiw3
ICsyMTIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAg
ICAgIHJldHVybiB2OFN0cmluZ09yTnVsbChjc3NWYWx1ZS0+Y3NzVGV4dCgpKTsKICAgICB9CiAK
LSAgICBTdHJpbmcgcmVzdWx0ID0gaW1wLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BJbmZvLT5wcm9w
SUQpOworICAgIFN0cmluZyByZXN1bHQgPSBpbXAtPmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChw
cm9wSW5mby0+cHJvcElEKTsKICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKQogICAgICAgICByZXN1
bHQgPSAiIjsgIC8vIGNvbnZlcnQgbnVsbCB0byBlbXB0eSBzdHJpbmcuCiAKQEAgLTIzMiw3ICsy
MzIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAgICAg
IHByb3BlcnR5VmFsdWUuYXBwZW5kKCJweCIpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgaW1wLT5zZXRQcm9wZXJ0eShwcm9wSW5mby0+cHJvcElELCBwcm9wZXJ0eVZhbHVlLCBm
YWxzZSwgZWMpOworICAgIGltcC0+c2V0UHJvcGVydHlJbnRlcm5hbChwcm9wSW5mby0+cHJvcElE
LCBwcm9wZXJ0eVZhbHVlLCBmYWxzZSwgZWMpOwogCiAgICAgaWYgKGVjKQogICAgICAgICB0aHJv
d0Vycm9yKGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNTU0JvcmRlckltYWdlLmgiCiAjaW5jbHVkZSAiQ1NT
TGluZUJveENvbnRhaW5WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHkuaCIKQEAgLTI0NzUsMjQgKzI0NzYsOCBAQCBTdHJpbmcgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpnZXRQCiAgICAgcmV0dXJuICIiOwogfQogCi1ib29sIENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShpbnQgLypwcm9wZXJ0eUlE
Ki8pIGNvbnN0Ci17Ci0gICAgLy8gQWxsIGNvbXB1dGVkIHN0eWxlcyBoYXZlIGEgcHJpb3JpdHkg
b2YgZmFsc2UgKG5vdCAiaW1wb3J0YW50IikuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1TdHJp
bmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShpbnQgLypwcm9w
ZXJ0eUlEKi8sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KIAotdm9pZCBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGludCAvKnByb3BlcnR5SUQqLywgY29uc3Qg
U3RyaW5nJiAvKnZhbHVlKi8sIGJvb2wgLyppbXBvcnRhbnQqLywgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci19Ci0KLXVuc2lnbmVk
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6dmlydHVhbExlbmd0aCgpIGNvbnN0Cit1bnNp
Z25lZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAg
Tm9kZSogbm9kZSA9IG1fbm9kZS5nZXQoKTsKICAgICBpZiAoIW5vZGUpCkBAIC0yNTI1LDggKzI1
MTAsOCBAQCBib29sIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVzKHByb3BlcnR5KTsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eS0+aWQoKSk7
CisgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLT5jc3NUZXh0KCkgPT0gcHJvcGVydHktPnZhbHVl
KCktPmNzc1RleHQoKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjb3B5KCkgY29uc3QKQEAgLTI1NzcsNCAr
MjU2Miw3NCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTQ29tcHV0ZWRTdHlsCiAgICAg
cmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0aWVzSW5T
ZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKK3sKKyAgICBWZWN0b3I8
Q1NTUHJvcGVydHk+IGxpc3Q7CisgICAgbGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0
aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7Cisg
ICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNl
dFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOworICAgIH0KKyAgICByZXR1cm4gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShsaXN0KTsKK30KKworUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJv
cGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Cit9CisK
K1N0cmluZyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUoY29u
c3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9w
ZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7Cit9
CisKK1N0cmluZyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3Jp
dHkoY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBBbGwgY29tcHV0ZWQgc3R5bGVzIGhhdmUgYSBw
cmlvcml0eSBvZiBub3QgImltcG9ydGFudCIuCisgICAgcmV0dXJuICIiOworfQorCitTdHJpbmcg
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBT
dHJpbmcmKQoreworICAgIHJldHVybiAiIjsKK30KKworYm9vbCBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnNldFByb3Bl
cnR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOworfQor
CitTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisgICAgCitQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFs
dWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCit7CisgICAgcmV0dXJuIGdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Cit9CisKK1N0cmluZyBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCit7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7Cit9CisK
K3ZvaWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKENT
U1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE2ICs1
MCw5IEBAIHB1YmxpYzoKICAgICBmcmllbmQgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24+IGNvbXB1dGVkU3R5bGUoUGFzc1JlZlB0cjxOb2RlPiwgYm9vbCBhbGxvd1Zpc2l0
ZWRTdHlsZSwgY29uc3QgU3RyaW5nJiBwc2V1ZG9FbGVtZW50TmFtZSk7CiAgICAgdmlydHVhbCB+
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKCk7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHZpcnR1YWxMZW5ndGgoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJv
cGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQg
cHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3JpdHko
aW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldFByb3BlcnR5U2hvcnRo
YW5kKGludCAvKnByb3BlcnR5SUQqLykgY29uc3QgeyByZXR1cm4gLTE7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCAvKnByb3BlcnR5SUQqLykgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVl
KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQg
cHJvcGVydHlJRCkgY29uc3Q7CisgICAgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9w
ZXJ0eUlEKSBjb25zdDsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKQEAgLTcxLDE2ICs2NCwyOCBAQCBw
dWJsaWM6CiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0U1ZHUHJvcGVydHlDU1NWYWx1ZShp
bnQgcHJvcGVydHlJRCwgRVVwZGF0ZUxheW91dCkgY29uc3Q7CiAjZW5kaWYKIAotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkq
KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5
UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbihQYXNzUmVmUHRyPE5v
ZGU+LCBib29sIGFsbG93VmlzaXRlZFN0eWxlLCBjb25zdCBTdHJpbmcmKTsKIAorICAgIC8vIENT
U09NIGZ1bmN0aW9ucy4gRG9uJ3QgbWFrZSB0aGVzZSBwdWJsaWMuCisgICAgdmlydHVhbCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5
Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgU3RyaW5n
IGdldFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1
YWwgU3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
OworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQ
cm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Nz
VGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCk7
CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5
SUQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJik7CiAK
LSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29u
c3Q7CiAKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvclNoYWRvdyhjb25zdCBTaGFk
b3dEYXRhKiwgaW50LCBSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJTdHlsZSosIGNvbnN0
IENvbG9yJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNw
cAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgU3RyaW5nIENTU0ZvbnRGYWNl
UnVsZTo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHJlc3VsdCgiQGZvbnQtZmFjZSIp
OwogICAgIHJlc3VsdCArPSAiIHsgIjsKLSAgICByZXN1bHQgKz0gbV9zdHlsZS0+Y3NzVGV4dCgp
OworICAgIHJlc3VsdCArPSBtX3N0eWxlLT5hc1RleHQoKTsKICAgICByZXN1bHQgKz0gIn0iOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyNiw5ICs4MjYsOSBAQCB2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjph
ZGRQYXJzCiAjZW5kaWYKIH0KIAotdW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnZpcnR1YWxMZW5ndGgoKSBjb25zdAordW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGxlbmd0aCgpOworICAgIHJldHVybiBw
cm9wZXJ0eUNvdW50KCk7CiB9CiAKIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
aXRlbSh1bnNpZ25lZCBpKSBjb25zdApAQCAtODM4LDcgKzgzOCw3IEBAIFN0cmluZyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSgKICAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKHN0
YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1fcHJvcGVydGllc1tpXS5pZCgpKSk7CiB9CiAKLVN0
cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0CitTdHJpbmcg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFzVGV4dCgpIGNvbnN0CiB7CiAgICAgU3RyaW5n
IHJlc3VsdCA9ICIiOwogCkBAIC0xMDUyLDQgKzEwNTIsMTE5IEBAIENTU1Byb3BlcnR5KiBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjoKICAgICByZXR1cm4gMDsKIH0KIAorU3RyaW5nIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXNU
ZXh0KCk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQorewor
ICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlm
ICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcGVydHlJRCk7Cit9CisKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKK3sKKyAg
ICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAo
IXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZ2V0UHJv
cGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKworU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQor
eworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAg
IGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBn
ZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BlcnR5SUQpID8gImltcG9ydGFudCIgOiAiIjsKK30KKwor
U3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1By
b3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICBpbnQgc2hvcnRoYW5kSUQgPSBnZXRQcm9wZXJ0eVNob3J0aGFu
ZChwcm9wZXJ0eUlEKTsKKyAgICBpZiAoIXNob3J0aGFuZElEKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0
eUlEPihzaG9ydGhhbmRJRCkpOworfQorCitib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Ojppc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAg
aW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFw
cm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlzUHJvcGVydHlJ
bXBsaWNpdChwcm9wZXJ0eUlEKTsKK30KKwordm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICgh
cHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgaW1wb3J0YW50ID0gcHJpb3Jp
dHkuZmluZCgiaW1wb3J0YW50IiwgMCwgZmFsc2UpICE9IG5vdEZvdW5kOworICAgIHNldFByb3Bl
cnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGVjKTsKK30KKworU3RyaW5nIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQ
cm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIGVj
KTsKK30KKworUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCit7
IAorICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOyAKK30KKworU3Ry
aW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreyAKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1
ZShwcm9wZXJ0eUlEKTsgCit9CisKK3ZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNl
dFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7IAorICAgIHJldHVy
biBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCBlYyk7IAorfQorCitQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVu
Z3RoKSBjb25zdAoreworICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT4gbGlzdDsKKyAgICBsaXN0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFBy
b3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAg
bGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7
CisgICAgfQorICAgIHJldHVybiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGxp
c3QpOworfQorCitib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NQcm9wZXJ0eU1h
dGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5KSBjb25zdAoreworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LT5pZCgpKTsKKyAg
ICByZXR1cm4gdmFsdWUgJiYgdmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+
Y3NzVGV4dCgpOworfQorCit2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVF
cXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sK
KyAgICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzVG9SZW1vdmU7CisgICAgeworICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVy
dHkgPSBtX3Byb3BlcnRpZXNbaV07CisgICAgICAgICAgICBpZiAoc3R5bGUtPmNzc1Byb3BlcnR5
TWF0Y2hlcygmcHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb1JlbW92ZS5h
cHBlbmQocHJvcGVydHkuaWQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVzZSBtYXNzIHJlbW92YWwuCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHByb3BlcnRpZXNUb1JlbW92ZS5zaXplKCk7IGkrKykKKyAgICAgICAgcmVtb3ZlUHJv
cGVydHkocHJvcGVydGllc1RvUmVtb3ZlW2ldKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uLmgJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBAIHB1Ymxp
YzoKICAgICB7IAogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKGVsZW1lbnQsIGZhbHNlKSk7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBib29s
IGlzUHJvcGVydHlOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgLy8gVXNlZCBieSBTdHlsZWRF
bGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcygpLgogICAgIHZvaWQgY29weVByb3Bl
cnRpZXNGcm9tKGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uJik7CkBAIC05MiwyNyAr
OTQsMjEgQEAgcHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gY29u
c3RfaXRlcmF0b3IodGhpcywgbV9wcm9wZXJ0aWVzLmJlZ2luKCkpOyB9CiAgICAgY29uc3RfaXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywgbV9wcm9wZXJ0aWVzLmVu
ZCgpKTsgfQogCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLnNpemUo
KTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5pc0Vt
cHR5KCk7IH0KKyAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHlBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzW2luZGV4XTsgfQorCisgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Cisg
ICAgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OworICAgIGJv
b2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CisgICAgaW50IGdl
dFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBib29sIGlzUHJv
cGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIHZpcnR1YWxMZW5ndGgoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnRpZXMuc2l6ZSgpOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAg
IHZpcnR1YWwgaW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0
dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIHJlbW92ZVBy
b3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdDsKIAotICAg
IHVzaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWU7Ci0KICAgICBi
b29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50
ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRh
bnQsIHRydWUpOyB9CiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgZG91Ymxl
IHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50
ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLCB1bml0LCBp
bXBvcnRhbnQsIHRydWUpOyB9CiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSkgeyByZXR1cm4gc2V0
UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgdHJ1ZSk7IH0KQEAgLTEzOCw2
ICsxMzQsMTIgQEAgcHVibGljOgogICAgIGJvb2wgdXNlU3RyaWN0UGFyc2luZygpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaWN0UGFyc2luZzsgfQogCiAgICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpOworICAgIAorICAgIHZvaWQgcmVtb3ZlRXF1aXZhbGVu
dFByb3BlcnRpZXMoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworCisgICAgUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBp
bnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKKworICAgIFN0cmluZyBhc1RleHQoKSBj
b25zdDsKIAogcHJvdGVjdGVkOgogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCk7CkBA
IC0xNTMsNiArMTU1LDIyIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCk7CiAKKyAgICAvLyBDU1NPTSBm
dW5jdGlvbnMuIERvbid0IG1ha2UgdGhlc2UgcHVibGljLgorICAgIHZpcnR1YWwgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1Zh
bHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQ
cm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIFN0
cmluZyBnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSk7CisgICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHBy
aW9yaXR5LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVy
dHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0
dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQo
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpOworICAg
IHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAg
dm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICBTdHJpbmcgZ2V0U2hvcnRoYW5kVmFs
dWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3QpIGNvbnN0OwpAQCAtMTczLDYgKzE5MSw4
IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKICAgICBib29sIHJlbW92ZVByb3BlcnRpZXNJblNl
dChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoLCBib29sIG5vdGlmeUNoYW5nZWQpOwog
CisgICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSop
IGNvbnN0OworCiAgICAgVmVjdG9yPENTU1Byb3BlcnR5Pjo6Y29uc3RfaXRlcmF0b3IgZmluZFBy
b3BlcnR5V2l0aElkKGludCBwcm9wZXJ0eUlkKSBjb25zdDsKICAgICBWZWN0b3I8Q1NTUHJvcGVy
dHk+OjppdGVyYXRvciBmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SWQpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAx
MDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc3LDEwOSArNzcsMTEgQEAgQ1NTU3R5bGVTaGVldCogQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6cGFyZQogICAgIHJldHVybiBtX3BhcmVudC5ydWxlLT5wYXJlbnRTdHlsZVNo
ZWV0KCk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1N0eWxlRGVjbGFyYXRpb246Omdl
dFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50
IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcElE
KTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUoY29u
c3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5
SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKHByb3BJRCk7Ci19Ci0KLVN0cmluZyBD
U1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFt
ZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1
cm4gZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wSUQpID8gImltcG9ydGFudCIgOiAiIjsKLX0KLQot
U3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHBy
b3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICBpbnQgc2hvcnRoYW5kSUQgPSBnZXRQcm9wZXJ0eVNob3J0aGFuZChwcm9wSUQpOwotICAg
IGlmICghc2hvcnRoYW5kSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4g
Z2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHNob3J0aGFuZElEKSk7
Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlE
KHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BJRCk7Ci19Ci0KLXZvaWQgQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0g
ICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGltcG9ydGFudCA9IHBy
aW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNlKSAhPSBub3RGb3VuZDsKLSAgICBzZXRQ
cm9wZXJ0eShwcm9wSUQsIHZhbHVlLCBpbXBvcnRhbnQsIGVjKTsKLX0KLQotU3RyaW5nIENTU1N0
eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChw
cm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BJRCwgZWMpOwotfQotCiBib29sIENTU1N0
eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlOYW1lKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KQogewogICAgIHJldHVybiBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CiB9CiAKLWJvb2wg
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5
KiBwcm9wZXJ0eSkgY29uc3QKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJv
cGVydHlDU1NWYWx1ZShwcm9wZXJ0eS0+aWQoKSk7Ci0gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVl
LT5jc3NUZXh0KCkgPT0gcHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKTsKLX0KLQotdm9pZCBD
U1NTdHlsZURlY2xhcmF0aW9uOjpkaWZmKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkgY29uc3QKLXsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0
b3I8aW50PiBwcm9wZXJ0aWVzVG9SZW1vdmU7Ci0gICAgewotICAgICAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwotICAgICAg
ICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0
eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IENTU1By
b3BlcnR5JiBwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgICAgIGlmIChjc3NQcm9wZXJ0eU1hdGNo
ZXMoJnByb3BlcnR5KSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5k
KHByb3BlcnR5LmlkKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBtYXNzIHJlbW92YWwuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBy
b3BlcnRpZXNUb1JlbW92ZS5zaXplKCk7IGkrKykKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3Bl
cnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IENTU1N0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0aWVzSW5TZXQo
Y29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKLXsKLSAgICBWZWN0b3I8Q1NT
UHJvcGVydHk+IGxpc3Q7Ci0gICAgbGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7Ci0gICAg
ICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtp
XSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOwotICAgIH0KLSAgICByZXR1cm4gQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShsaXN0KTsKLX0KLQogI2lmbmRlZiBOREVCVUcKIHZv
aWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2hvd1N0eWxlKCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
NiArMjEsNyBAQAogI2lmbmRlZiBDU1NTdHlsZURlY2xhcmF0aW9uX2gKICNkZWZpbmUgQ1NTU3R5
bGVEZWNsYXJhdGlvbl9oCiAKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVk
ZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKQEAgLTUxLDM1ICs1Miwy
NiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsTGVu
Z3RoKCk7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHZpcnR1YWxMZW5ndGgoKSBjb25zdCA9IDA7
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9CisgICAgdmly
dHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgaXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwotCi0gICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3Ry
aW5nIGdldFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0
cmluZyBnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAg
ICBTdHJpbmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
OwotICAgIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1
ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3Bl
cnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
aW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAw
OwotCi0gICAgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSA9IDA7CisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVNo
b3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKKyAgICAvLyBDU1NQcm9wZXJ0eUlE
IHZlcnNpb25zIG9mIHRoZSBDU1NPTSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBiaW5kaW5ncyBhbmQg
ZWRpdGluZy4KKyAgICAvLyBVc2UgdGhlIG5vbi12aXJ0dWFsIG1ldGhvZHMgaW4gdGhlIGNvbmNy
ZXRlIHN1YmNsYXNzZXMgd2hlbiBwb3NzaWJsZS4KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKSA9IDA7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlE
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
Y29weSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCkgPSAwOwogCi0gICAgdm9pZCBkaWZmKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNp
Z25lZCBsZW5ndGgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMo
Y29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdCA9IDA7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9p
ZCBzaG93U3R5bGUoKTsKQEAgLTkyLDggKzg0LDYgQEAgcHJvdGVjdGVkOgogICAgIENTU1N0eWxl
RGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSA9IDApOwogICAgIENTU1N0eWxlRGVjbGFy
YXRpb24oU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVudCwgYm9vbCBpc0lubGluZSk7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29u
c3Q7Ci0KICAgICAvLyBUaGUgYml0cyBpbiB0aGlzIHNlY3Rpb24gYXJlIG9ubHkgdXNlZCBieSBz
cGVjaWZpYyBzdWJjbGFzc2VzIGJ1dCBrZXB0IGhlcmUKICAgICAvLyB0byBtYXhpbWl6ZSBzdHJ1
Y3QgcGFja2luZy4KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHJldmlz
aW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgU3RyaW5nIENTU1N0eWxlUnVsZTo6Y3NzVGV4
dCgpIGNvbnN0CiAgICAgU3RyaW5nIHJlc3VsdCA9IHNlbGVjdG9yVGV4dCgpOwogCiAgICAgcmVz
dWx0ICs9ICIgeyAiOwotICAgIHJlc3VsdCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7CisgICAgcmVz
dWx0ICs9IG1fc3R5bGUtPmFzVGV4dCgpOwogICAgIHJlc3VsdCArPSAifSI7CiAKICAgICByZXR1
cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAko
cmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDcgQEAgc3RhdGljIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImIHByaW50RQogc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4sIGxlZnRUb1JpZ2h0RGVjbCwgKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKSkpOwotICAgIGlmICghbGVmdFRvUmlnaHRE
ZWNsLT5sZW5ndGgoKSkKKyAgICBpZiAobGVmdFRvUmlnaHREZWNsLT5pc0VtcHR5KCkpCiAgICAg
ICAgIGxlZnRUb1JpZ2h0RGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENT
U1ZhbHVlTHRyKTsKICAgICByZXR1cm4gbGVmdFRvUmlnaHREZWNsLmdldCgpOwogfQpAQCAtMzA3
LDcgKzMwNyw3IEBAIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbGVmdFQKIHN0
YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigp
CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+LCByaWdodFRvTGVmdERlY2wsIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3Jl
YXRlKCkpKTsKLSAgICBpZiAoIXJpZ2h0VG9MZWZ0RGVjbC0+bGVuZ3RoKCkpCisgICAgaWYgKHJp
Z2h0VG9MZWZ0RGVjbC0+aXNFbXB0eSgpKQogICAgICAgICByaWdodFRvTGVmdERlY2wtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZVJ0bCk7CiAgICAgcmV0dXJuIHJp
Z2h0VG9MZWZ0RGVjbC5nZXQoKTsKIH0KQEAgLTc4MCw3ICs3ODAsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmNvbGxlY3RNYXRjaGluZ1J1CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAv
LyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQg
aW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIGRlY2wgPSBydWxlLT5kZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgaWYgKCFkZWNs
IHx8ICghZGVjbC0+bGVuZ3RoKCkgJiYgIWluY2x1ZGVFbXB0eVJ1bGVzKSkgeworICAgICAgICAg
ICAgaWYgKCFkZWNsIHx8IChkZWNsLT5pc0VtcHR5KCkgJiYgIWluY2x1ZGVFbXB0eVJ1bGVzKSkg
ewogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxl
KGNvb2tpZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQpAQCAtMjUyNiw3ICsyNTI2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VS
dWxlc0ZvcgogCiAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFw
cGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IGRlY2wgPSBydWxlLT5kZWNsYXJhdGlvbigpOwotICAgICAgICBpZiAoIWRlY2wgfHwgIWRlY2wt
Pmxlbmd0aCgpKQorICAgICAgICBpZiAoIWRlY2wgfHwgZGVjbC0+aXNFbXB0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0byBvdXIgbGlzdCBv
ZiBtYXRjaGVkIHJ1bGVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZy
YW1lUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tl
eWZyYW1lUnVsZS5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IFN0cmluZyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQoKSAKICAgICBTdHJpbmcgcmVz
dWx0ID0gbV9rZXk7CiAKICAgICByZXN1bHQgKz0gIiB7ICI7Ci0gICAgcmVzdWx0ICs9IG1fc3R5
bGUtPmNzc1RleHQoKTsKKyAgICByZXN1bHQgKz0gbV9zdHlsZS0+YXNUZXh0KCk7CiAgICAgcmVz
dWx0ICs9ICJ9IjsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0
eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
U3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lk
IFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlCiAgICAgc2V0SXNTdHlsZUF0dHJp
YnV0ZVZhbGlkKCk7CiAgICAgc2V0SXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKTsKICAg
ICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlID0gaW5saW5lU3R5
bGVEZWNsKCkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHRoaXMpLT5zZXRB
dHRyaWJ1dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgY29u
c3RfY2FzdDxTdHlsZWRFbGVtZW50Kj4odGhpcyktPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIGlu
bGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgY2xlYXJJc1N5bmNocm9uaXppbmdTdHlsZUF0dHJp
YnV0ZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NSw3ICszOTUsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9uCiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGN1cnJlbnRGb250U2l6ZSAhPSBkZXNpcmVkRm9udFNpemUpIHsKICAgICAgICAgICAg
IGlubGluZVN0eWxlRGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgU3RyaW5n
OjpudW1iZXIoZGVzaXJlZEZvbnRTaXplKSArICJweCIsIGZhbHNlKTsKLSAgICAgICAgICAgIHNl
dE5vZGVBdHRyaWJ1dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZURlY2wt
PmNzc1RleHQoKSk7CisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQuZ2V0KCks
IHN0eWxlQXR0ciwgaW5saW5lU3R5bGVEZWNsLT5hc1RleHQoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGlubGluZVN0eWxlRGVjbC0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZW1vdmVO
b2RlQXR0cmlidXRlKGVsZW1lbnQuZ2V0KCksIHN0eWxlQXR0cik7CkBAIC01MTUsNyArNTE1LDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVQogICAgICAgICAgICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQt
PmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7CiAgICAgICAgICAgICBpbmxpbmVTdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQ1NTVmFsdWVOb3JtYWwpOwog
ICAgICAgICAgICAgaW5saW5lU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0
aW9uKTsKLSAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBp
bmxpbmVTdHlsZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxl
bWVudCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogICAgICAgICAgICAgaWYg
KGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3BhbihlbGVtZW50KSkKICAg
ICAgICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwogICAg
ICAgICB9CkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZQogICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVt
ZW50KG5vZGUpOwogICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7
CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+bWVyZ2Uoc3R5bGUtPnN0eWxlKCkpOwotICAgICAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5j
c3NUZXh0KCkpOworICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0
dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJh
dmVyc2VOZXh0U2libGluZygpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAg
LTk0Myw3ICs5NDMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxl
CiAgICAgLy8gU2luY2UgYWRkSW5saW5lU3R5bGVJZk5lZWRlZCBjYW4ndCBhZGQgc3R5bGVzIHRv
IGJsb2NrLWZsb3cgcmVuZGVyIG9iamVjdHMsIGFkZCBzdHlsZSBhdHRyaWJ1dGUgaW5zdGVhZC4K
ICAgICAvLyBGSVhNRTogYXBwbHlJbmxpbmVTdHlsZVRvUmFuZ2Ugc2hvdWxkIGJlIHVzZWQgaGVy
ZSBpbnN0ZWFkLgogICAgIGlmICgobm9kZS0+cmVuZGVyZXIoKS0+aXNCbG9ja0Zsb3coKSB8fCBu
b2RlLT5jaGlsZE5vZGVDb3VudCgpKSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAg
ICAgc2V0Tm9kZUF0dHJpYnV0ZSh0b0hUTUxFbGVtZW50KG5vZGUpLCBzdHlsZUF0dHIsIG5ld0lu
bGluZVN0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCkpOworICAgICAgICBzZXROb2RlQXR0cmlidXRl
KHRvSFRNTEVsZW1lbnQobm9kZSksIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCkt
PmFzVGV4dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMxMiw3ICsxMzEyLDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjbwogICAgICAgICAKICAg
ICBTdHJpbmcgY3NzVGV4dCA9IHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCk7CiAgICAgaWYgKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gYmxvY2stPmlubGluZVN0eWxlRGVjbCgpKQot
ICAgICAgICBjc3NUZXh0ICs9IGRlY2wtPmNzc1RleHQoKTsKKyAgICAgICAgY3NzVGV4dCArPSBk
ZWNsLT5hc1RleHQoKTsKICAgICBzZXROb2RlQXR0cmlidXRlKGJsb2NrLCBzdHlsZUF0dHIsIGNz
c1RleHQpOwogfQogCkBAIC0xMzc3LDcgKzEzNzcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphZGRJbmxpbmVTdHlsZUlmCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkubGVuZ3Ro
KCkpIHsKICAgICAgICAgaWYgKHN0eWxlQ29udGFpbmVyKSB7CiAgICAgICAgICAgICBpZiAoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4aXN0aW5nU3R5bGUgPSBzdHlsZUNvbnRhaW5lci0+
aW5saW5lU3R5bGVEZWNsKCkpCi0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHls
ZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBleGlzdGluZ1N0eWxlLT5jc3NUZXh0KCkgKyBzdHlsZUNo
YW5nZS5jc3NTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxl
Q29udGFpbmVyLCBzdHlsZUF0dHIsIGV4aXN0aW5nU3R5bGUtPmFzVGV4dCgpICsgc3R5bGVDaGFu
Z2UuY3NzU3R5bGUoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0Tm9k
ZUF0dHJpYnV0ZShzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBzdHlsZUNoYW5nZS5jc3NTdHls
ZSgpKTsKICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsOCBAQCBzdGF0aWMg
Y29uc3QgaW50IGVkaXRpbmdQcm9wZXJ0aWVzW10gPSB7CiAKIGVudW0gRWRpdGluZ1Byb3BlcnRp
ZXNUeXBlIHsgT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMsIEFsbEVkaXRpbmdQcm9w
ZXJ0aWVzIH07CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRp
bmdQcm9wZXJ0aWVzVHlwZSB0eXBlID0gT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMp
Cit0ZW1wbGF0ZSA8Y2xhc3MgU3R5bGVEZWNsYXJhdGlvblR5cGU+CitzdGF0aWMgUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKFN0eWxl
RGVjbGFyYXRpb25UeXBlKiBzdHlsZSwgRWRpdGluZ1Byb3BlcnRpZXNUeXBlIHR5cGUgPSBPbmx5
SW5oZXJpdGFibGVFZGl0aW5nUHJvcGVydGllcykKIHsKICAgICBpZiAodHlwZSA9PSBBbGxFZGl0
aW5nUHJvcGVydGllcykKICAgICAgICAgcmV0dXJuIHN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0
KGVkaXRpbmdQcm9wZXJ0aWVzLCBXVEZfQVJSQVlfTEVOR1RIKGVkaXRpbmdQcm9wZXJ0aWVzKSk7
CkBAIC0xMDQsNiArMTA1LDExIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmEKICAgICAgICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUo
KTsKICAgICByZXR1cm4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxlLmdldCgpLCB0eXBlKTsK
IH0KKyAgICAKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcHJvcGVydHlDU1NW
YWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCit7CisgICAgcmV0dXJuIHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5
Q1NTVmFsdWVJbnRlcm5hbChwcm9wZXJ0eUlEKTsKK30KIAogc3RhdGljIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGllc05vdEluKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIENTU1N0eWxlRGVjbGFyYXRpb24qIGJh
c2VTdHlsZSk7CiBlbnVtIExlZ2FjeUZvbnRTaXplTW9kZSB7IEFsd2F5c1VzZUxlZ2FjeUZvbnRT
aXplLCBVc2VMZWdhY3lGb250U2l6ZU9ubHlJZlBpeGVsVmFsdWVzTWF0Y2ggfTsKQEAgLTM0Nyw3
ICszNTMsNyBAQCBzdGF0aWMgUkdCQTMyIGNzc1ZhbHVlVG9SR0JBKENTU1ZhbHVlKiBjCiAKIHN0
YXRpYyBpbmxpbmUgUkdCQTMyIGdldFJHQkFGb250Q29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpCiB7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKHN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpLmdldCgpKTsKKyAgICByZXR1cm4gY3NzVmFsdWVUb1JH
QkEocHJvcGVydHlDU1NWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlDb2xvcikuZ2V0KCkpOwogfQog
CiBzdGF0aWMgaW5saW5lIFJHQkEzMiByZ2JhQmFja2dyb3VuZENvbG9ySW5FZmZlY3QoTm9kZSog
bm9kZSkKQEAgLTQ4Miw3ICs0ODgsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6c2V0U3R5bGUoUGFz
c1JlZlB0cjxDCiAKIHZvaWQgRWRpdGluZ1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZShjb25zdCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgaWYgKCFzdHlsZSB8fCAh
c3R5bGUtPmxlbmd0aCgpKQorICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIG1fbXV0YWJs
ZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwpAQCAtNTQ3LDgg
KzU1Myw4IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUFkZGVkQnlOb2QKICAgICAg
ICAgcmV0dXJuOwogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFyZW50
U3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUt
PnBhcmVudE5vZGUoKSksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsKICAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5vZGVTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21wdXRl
ZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZSksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsKLSAgICBw
YXJlbnRTdHlsZS0+ZGlmZihub2RlU3R5bGUuZ2V0KCkpOwotICAgIG5vZGVTdHlsZS0+ZGlmZiht
X211dGFibGVTdHlsZS5nZXQoKSk7CisgICAgbm9kZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJv
cGVydGllcyhwYXJlbnRTdHlsZS5nZXQoKSk7CisgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZUVx
dWl2YWxlbnRQcm9wZXJ0aWVzKG5vZGVTdHlsZS5nZXQoKSk7CiB9CiAKIHZvaWQgRWRpdGluZ1N0
eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW5nV2l0aFN0eWxlT2ZOb2RlKE5vZGUqIG5vZGUpCkBA
IC01NTgsNyArNTY0LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlQ29uZmxpY3Rp
bgogCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBwYXJlbnRTdHlsZSA9
IGVkaXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZS0+cGFyZW50
Tm9kZSgpKSwgQWxsRWRpdGluZ1Byb3BlcnRpZXMpOwogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUo
Y29tcHV0ZWRTdHlsZShub2RlKSwgQWxsRWRpdGluZ1Byb3BlcnRpZXMpOwotICAgIHBhcmVudFN0
eWxlLT5kaWZmKG5vZGVTdHlsZS5nZXQoKSk7CisgICAgbm9kZVN0eWxlLT5yZW1vdmVFcXVpdmFs
ZW50UHJvcGVydGllcyhwYXJlbnRTdHlsZS5nZXQoKSk7CiAKICAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbm9kZVN0eWxlLT5lbmQoKTsKICAgICBm
b3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vZGVT
dHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpAQCAtNjEwLDkgKzYxNiw5IEBAIFRyaVN0
YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKEMKICAgICBpZiAoc2hvdWxkSWdub3Jl
VGV4dE9ubHlQcm9wZXJ0aWVzID09IElnbm9yZVRleHRPbmx5UHJvcGVydGllcykKICAgICAgICAg
ZGlmZmVyZW5jZS0+cmVtb3ZlUHJvcGVydGllc0luU2V0KHRleHRPbmx5UHJvcGVydGllcywgV1RG
X0FSUkFZX0xFTkdUSCh0ZXh0T25seVByb3BlcnRpZXMpKTsKIAotICAgIGlmICghZGlmZmVyZW5j
ZS0+bGVuZ3RoKCkpCisgICAgaWYgKGRpZmZlcmVuY2UtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIFRydWVUcmlTdGF0ZTsKLSAgICBpZiAoZGlmZmVyZW5jZS0+bGVuZ3RoKCkgPT0gbV9tdXRh
YmxlU3R5bGUtPmxlbmd0aCgpKQorICAgIGlmIChkaWZmZXJlbmNlLT5wcm9wZXJ0eUNvdW50KCkg
PT0gbV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5Q291bnQoKSkKICAgICAgICAgcmV0dXJuIEZhbHNl
VHJpU3RhdGU7CiAKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKQEAgLTgwMCw3ICs4MDYsNyBA
QCBib29sIEVkaXRpbmdTdHlsZTo6ZXh0cmFjdENvbmZsaWN0aW5nSW1wCiAKIGJvb2wgRWRpdGlu
Z1N0eWxlOjpzdHlsZUlzUHJlc2VudEluQ29tcHV0ZWRTdHlsZU9mTm9kZShOb2RlKiBub2RlKSBj
b25zdAogewotICAgIHJldHVybiAhbV9tdXRhYmxlU3R5bGUgfHwgIWdldFByb3BlcnRpZXNOb3RJ
bihtX211dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZShub2RlKS5nZXQoKSktPmxlbmd0
aCgpOworICAgIHJldHVybiAhbV9tdXRhYmxlU3R5bGUgfHwgZ2V0UHJvcGVydGllc05vdEluKG1f
bXV0YWJsZVN0eWxlLmdldCgpLCBjb21wdXRlZFN0eWxlKG5vZGUpLmdldCgpKS0+aXNFbXB0eSgp
OwogfQogCiBib29sIEVkaXRpbmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9ySFRNTEVxdWl2
YWxlbnQoY29uc3QgSFRNTEVsZW1lbnQqIGVsZW1lbnQpCkBAIC04NjksNyArODc1LDggQEAgdm9p
ZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29ucwogICAgICAgICBkaXJlY3Rpb24g
PSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlv
bik7CiAgICAgfQogCi0gICAgc3R5bGUtPm1fbXV0YWJsZVN0eWxlLT5kaWZmKG1fbXV0YWJsZVN0
eWxlLmdldCgpKTsKKyAgICBtX211dGFibGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRp
ZXMoc3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpKTsKKwogICAgIGlmIChnZXRSR0JBRm9udENv
bG9yKG1fbXV0YWJsZVN0eWxlLmdldCgpKSA9PSBnZXRSR0JBRm9udENvbG9yKHN0eWxlLT5tX211
dGFibGVTdHlsZS5nZXQoKSkpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUNvbG9yKTsKIApAQCAtMTA2OCw3ICsxMDc1LDcgQEAgdm9pZCBFZGl0aW5n
U3R5bGU6Om1lcmdlU3R5bGVGcm9tUnVsZXNGbwogCiBzdGF0aWMgdm9pZCByZW1vdmVQcm9wZXJ0
aWVzSW5TdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb1JlbW92ZVByb3Bl
cnRpZXNGcm9tLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgVmVj
dG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlKHN0eWxlLT5sZW5ndGgoKSk7CisgICAgVmVjdG9y
PGludD4gcHJvcGVydGllc1RvUmVtb3ZlKHN0eWxlLT5wcm9wZXJ0eUNvdW50KCkpOwogICAgIHNp
emVfdCBpID0gMDsKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gc3R5bGUtPmVuZCgpOwogICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwg
KytpKQpAQCAtMTA4NSw3ICsxMDkyLDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxl
RnJvbVJ1bGVzQQogCiAgICAgLy8gMS4gUmVtb3ZlIHN0eWxlIGZyb20gbWF0Y2hlZCBydWxlcyBi
ZWNhdXNlIHN0eWxlIHJlbWFpbiB3aXRob3V0IHJlcGVhdGluZyBpdCBpbiBpbmxpbmUgc3R5bGUg
ZGVjbGFyYXRpb24KICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
RnJvbU1hdGNoZWRSdWxlcyA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVu
dCwgQ1NTU3R5bGVTZWxlY3Rvcjo6QWxsQnV0RW1wdHlDU1NSdWxlcyk7Ci0gICAgaWYgKHN0eWxl
RnJvbU1hdGNoZWRSdWxlcyAmJiBzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmxlbmd0aCgpKQorICAg
IGlmIChzdHlsZUZyb21NYXRjaGVkUnVsZXMgJiYgIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+aXNF
bXB0eSgpKQogICAgICAgICBtX211dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211
dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLmdldCgpKTsKIAogICAgIC8v
IDIuIFJlbW92ZSBzdHlsZSBwcmVzZW50IGluIGNvbnRleHQgYW5kIG5vdCBvdmVycmlkZW4gYnkg
bWF0Y2hlZCBydWxlcy4KQEAgLTExMTAsNyArMTExNyw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpy
ZW1vdmVTdHlsZUZyb21SdWxlc0EKIAogdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVByb3BlcnRp
ZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW1f
bXV0YWJsZVN0eWxlIHx8ICFtX211dGFibGVTdHlsZS0+bGVuZ3RoKCkpCisgICAgaWYgKCFtX211
dGFibGVTdHlsZSB8fCBtX211dGFibGVTdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRlZmF1bHRTdHlsZSA9
IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgQ1NTU3R5bGVTZWxlY3Rv
cjo6VUFBbmRVc2VyQ1NTUnVsZXMpOwpAQCAtMTIxNyw3ICsxMjI0LDcgQEAgU3R5bGVDaGFuZ2U6
OlN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogcwogICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBzdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlW
YWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbikpOwogCiAgICAgLy8gU2F2ZSB0aGUgcmVzdWx0IGZv
ciBsYXRlcgotICAgIG1fY3NzU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNzc1RleHQoKS5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICBtX2Nzc1N0eWxlID0gbXV0YWJsZVN0eWxlLT5hc1RleHQoKS5zdHJp
cFdoaXRlU3BhY2UoKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0
eShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IENTU1ZhbHVlTGlzdCog
bmV3VGV4dERlY29yYXRpb24sIGludCBwcm9wZXJ0eUlEKQpAQCAtMTMxMiw3ICsxMzE5LDcgQEAg
c3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhDU1NNdXRhYgogc3RhdGljIGJvb2wgZm9u
dFdlaWdodElzQm9sZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBBU1NFUlQo
c3R5bGUpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZm9udFdlaWdodCA9IHN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CisgICAgUmVmUHRyPENTU1ZhbHVl
PiBmb250V2VpZ2h0ID0gcHJvcGVydHlDU1NWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlGb250V2Vp
Z2h0KTsKIAogICAgIGlmICghZm9udFdlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTM2NiwzMCArMTM3MywzMCBAQCBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdl
dFByCiAgICAgQVNTRVJUKGJhc2VTdHlsZSk7CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiByZXN1bHQgPSBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLT5jb3B5KCk7
CiAKLSAgICBiYXNlU3R5bGUtPmRpZmYocmVzdWx0LmdldCgpKTsKKyAgICByZXN1bHQtPnJlbW92
ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGJhc2VTdHlsZSk7CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+
IGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IGJhc2VTdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IHByb3BlcnR5Q1NTVmFs
dWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsK
ICAgICBkaWZmVGV4dERlY29yYXRpb25zKHJlc3VsdC5nZXQoKSwgQ1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbiwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0LmdldCgpKTsKICAgICBkaWZmVGV4
dERlY29yYXRpb25zKHJlc3VsdC5nZXQoKSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCwgYmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0LmdldCgpKTsKIAotICAgIGlm
IChiYXNlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkgJiYg
Zm9udFdlaWdodElzQm9sZChyZXN1bHQuZ2V0KCkpID09IGZvbnRXZWlnaHRJc0JvbGQoYmFzZVN0
eWxlKSkKKyAgICBpZiAocHJvcGVydHlDU1NWYWx1ZShiYXNlU3R5bGUsIENTU1Byb3BlcnR5Rm9u
dFNpemUpICYmIGZvbnRXZWlnaHRJc0JvbGQocmVzdWx0LmdldCgpKSA9PSBmb250V2VpZ2h0SXNC
b2xkKGJhc2VTdHlsZSkpCiAgICAgICAgIHJlc3VsdC0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250V2VpZ2h0KTsKIAotICAgIGlmIChiYXNlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlDb2xvcikgJiYgZ2V0UkdCQUZvbnRDb2xvcihyZXN1bHQuZ2V0KCkpID09IGdl
dFJHQkFGb250Q29sb3IoYmFzZVN0eWxlKSkKKyAgICBpZiAocHJvcGVydHlDU1NWYWx1ZShiYXNl
U3R5bGUsIENTU1Byb3BlcnR5Q29sb3IpICYmIGdldFJHQkFGb250Q29sb3IocmVzdWx0LmdldCgp
KSA9PSBnZXRSR0JBRm9udENvbG9yKGJhc2VTdHlsZSkpCiAgICAgICAgIHJlc3VsdC0+cmVtb3Zl
UHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CiAKLSAgICBpZiAoYmFzZVN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dEFsaWduKSAmJiBnZXRUZXh0QWxpZ25tZW50KHJl
c3VsdC5nZXQoKSkgPT0gZ2V0VGV4dEFsaWdubWVudChiYXNlU3R5bGUpKQorICAgIGlmIChwcm9w
ZXJ0eUNTU1ZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlUZXh0QWxpZ24pICYmIGdldFRleHRB
bGlnbm1lbnQocmVzdWx0LmdldCgpKSA9PSBnZXRUZXh0QWxpZ25tZW50KGJhc2VTdHlsZSkpCiAg
ICAgICAgIHJlc3VsdC0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24pOwogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW50IGdldElkZW50aWZpZXJWYWx1ZShDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSwgaW50IHByb3BlcnR5SUQpCitpbnQgZ2V0SWRlbnRpZmllclZhbHVl
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7
CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8Q1NTVmFs
dWU+IHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7CisgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHByb3BlcnR5Q1NTVmFsdWUoc3R5bGUsIHByb3BlcnR5
SUQpOwogICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAg
ICAgIHJldHVybiAwOwogCkBAIC0xNDIyLDcgKzE0MjksNyBAQCBpbnQgbGVnYWN5Rm9udFNpemVG
cm9tQ1NTVmFsdWUoRG9jdW1lbnQqCiAKIGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29s
b3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBj
c3NWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gcHJvcGVydHlDU1NWYWx1
ZShzdHlsZSwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmICghY3NzVmFsdWUp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5oCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgcHJpdmF0
ZToKIH07CiAKIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgZnVuY3Rpb25zIG9yIG1ha2UgdGhlbSBu
b24tZ2xvYmFsIHRvIGRpc2NvdXJhZ2UgdXNpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbiBkaXJlY3Rs
eS4KLWludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9w
ZXJ0eUlEKTsKK2ludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIENT
U1Byb3BlcnR5SUQpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZp
c2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDggKzUwMiw4IEBAIHZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHUKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUo
ZWxlbWVudCwgc3R5bGVBdHRyKTsKLSAgICAgICAgfSBlbHNlIGlmIChuZXdJbmxpbmVTdHlsZS0+
c3R5bGUoKS0+bGVuZ3RoKCkgIT0gaW5saW5lU3R5bGUtPmxlbmd0aCgpKQotICAgICAgICAgICAg
c2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHls
ZSgpLT5jc3NUZXh0KCkpOworICAgICAgICB9IGVsc2UgaWYgKG5ld0lubGluZVN0eWxlLT5zdHls
ZSgpLT5wcm9wZXJ0eUNvdW50KCkgIT0gaW5saW5lU3R5bGUtPnByb3BlcnR5Q291bnQoKSkKKyAg
ICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBuZXdJbmxpbmVT
dHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUb2xlcmF0ZSBk
aWZmZXJlbmNlcyBpbiBpZCwgY2xhc3MsIGFuZCBzdHlsZSBhdHRyaWJ1dGVzLgogICAgICAgICBp
ZiAoaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KGVsZW1lbnQpICYmIGFyZUlkZW50aWNh
bEVsZW1lbnRzKGVsZW1lbnQsIGVsZW1lbnQtPnBhcmVudE5vZGUoKSkKQEAgLTY2MCw3ICs2NjAs
NyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVTdHlsZVNwYW5zQmVmb3JlSW5zZXJ0CiAKICAgICBOb2Rl
KiB3cmFwcGluZ1N0eWxlU3BhbiA9IHRvcE5vZGU7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4g
c3R5bGVBdEluc2VydGlvblBvcyA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGluc2VydGlvblBvcy5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgU3RyaW5nIHN0eWxlVGV4dCA9IHN0eWxl
QXRJbnNlcnRpb25Qb3MtPnN0eWxlKCktPmNzc1RleHQoKTsKKyAgICBTdHJpbmcgc3R5bGVUZXh0
ID0gc3R5bGVBdEluc2VydGlvblBvcy0+c3R5bGUoKS0+YXNUZXh0KCk7CiAKICAgICAvLyBGSVhN
RTogVGhpcyBzdHJpbmcgY29tcGFyaXNvbiBpcyBhIG5haXZlIHdheSBvZiBjb21wYXJpbmcgdHdv
IHN0eWxlcy4KICAgICAvLyBXZSBzaG91bGQgYmUgdGFraW5nIHRoZSBkaWZmIGFuZCBjaGVjayB0
aGF0IHRoZSBkaWZmIGlzIGVtcHR5LgpAQCAtNzIwLDcgKzcyMCw3IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWwKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFwcGluZ1N0eWxlU3Bhbik7CiAgICAgICAgIHJl
bW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4od3JhcHBpbmdTdHlsZVNwYW4pOwogICAgIH0gZWxz
ZQotICAgICAgICBzZXROb2RlQXR0cmlidXRlKHdyYXBwaW5nU3R5bGVTcGFuLCBzdHlsZUF0dHIs
IHN0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCkpOworICAgICAgICBzZXROb2RlQXR0cmlidXRlKHdy
YXBwaW5nU3R5bGVTcGFuLCBzdHlsZUF0dHIsIHN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiB9
CiAKIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlRW5kSWZOZWVkZWQoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkx
LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3R5bAogICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBkaXZTdHlsZSwgKCI8ZGl2IHN0eWxlPVwiIikp
OwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdHlsZVNwYW5PcGVuLCAo
IjxzcGFuIHN0eWxlPVwiIikpOwogICAgIG91dC5hcHBlbmQoaXNCbG9jayA/IGRpdlN0eWxlIDog
c3R5bGVTcGFuT3Blbik7Ci0gICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBzdHlsZS0+Y3Nz
VGV4dCgpLCBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CisgICAgYXBwZW5kQXR0cmlidXRl
VmFsdWUob3V0LCBzdHlsZS0+YXNUZXh0KCksIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKTsK
ICAgICBvdXQuYXBwZW5kKCdcIicpOwogICAgIG91dC5hcHBlbmQoJz4nKTsKIH0KQEAgLTMyOCw3
ICszMjgsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtCiAgICAg
ICAgIGlmICghbmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlUHJlZml4LCAoIiBzdHlsZT1cIiIpKTsK
ICAgICAgICAgICAgIG91dC5hcHBlbmQoc3R5bGVQcmVmaXgpOwotICAgICAgICAgICAgYXBwZW5k
QXR0cmlidXRlVmFsdWUob3V0LCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpLCBk
b2N1bWVudElzSFRNTCk7CisgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIG5l
d0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSwgZG9jdW1lbnRJc0hUTUwpOwogICAgICAg
ICAgICAgb3V0LmFwcGVuZCgnXCInKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEy
LDcgKzExMiw3IEBAIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGEKIAog
ICAgIFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3Jl
YXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CiAKLSAgICBTdHJpbmcgc3R5bGVUZXh0ID0gdHlw
aW5nU3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSArICIgZGlzcGxheTogaW5saW5lIjsKKyAgICBT
dHJpbmcgc3R5bGVUZXh0ID0gdHlwaW5nU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpICsgIiBkaXNw
bGF5OiBpbmxpbmUiOwogICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwg
c3R5bGVUZXh0LmltcGwoKSk7CiAKICAgICBzdHlsZUVsZW1lbnQtPmFwcGVuZENoaWxkKGZyYW1l
LT5kb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEb2N1bWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNpb24g
MTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6cmVzaXplSW1h
Z2VUb0ZpdCgpCiAgICAgbV9pbWFnZUVsZW1lbnQtPnNldEhlaWdodChzdGF0aWNfY2FzdDxpbnQ+
KGltYWdlU2l6ZS5oZWlnaHQoKSAqIHNjYWxlKSk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBl
YzsKLSAgICBtX2ltYWdlRWxlbWVudC0+c3R5bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlD
dXJzb3IsICItd2Via2l0LXpvb20taW4iLCBmYWxzZSwgZWMpOworICAgIG1faW1hZ2VFbGVtZW50
LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3Is
ICItd2Via2l0LXpvb20taW4iLCBmYWxzZSwgZWMpOwogfQogCiB2b2lkIEltYWdlRG9jdW1lbnQ6
OmltYWdlQ2xpY2tlZChpbnQgeCwgaW50IHkpCkBAIC0zMDksOSArMzA5LDkgQEAgdm9pZCBJbWFn
ZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKCkKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVj
OwogICAgIGlmIChpbWFnZUZpdHNJbldpbmRvdygpKQotICAgICAgICBtX2ltYWdlRWxlbWVudC0+
c3R5bGUoKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIGVjKTsKKyAgICAgICAg
bV9pbWFnZUVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5yZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUN1cnNvciwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUVsZW1lbnQt
PnN0eWxlKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91
dCIsIGZhbHNlLCBlYyk7CisgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVTdHls
ZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0LXpvb20tb3V0
IiwgZmFsc2UsIGVjKTsKICAgICAgICAgCiAgICAgbV9kaWRTaHJpbmtJbWFnZSA9IGZhbHNlOwog
fQpAQCAtMzQ0LDkgKzM0NCw5IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6d2luZG93U2l6ZUNoYW5n
ZWQoKQogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICAKICAgICAgICAgaWYgKGZp
dHNJbldpbmRvdykKLSAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5zdHlsZSgpLT5yZW1vdmVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgZWMpOworICAgICAgICAgICAgbV9pbWFnZUVsZW1l
bnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1
cnNvciwgZWMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ltYWdlRWxlbWVudC0+c3R5
bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0LXpvb20tb3V0Iiwg
ZmFsc2UsIGVjKTsKKyAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVTdHls
ZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0LXpvb20tb3V0
IiwgZmFsc2UsIGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4Nyw3ICsx
OTg3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoYwogICAgIFN0
cmluZyBkZWNsYXJhdGlvblRleHQoImZvbnQ6ICIpOwogICAgIGRlY2xhcmF0aW9uVGV4dCArPSBu
ZXdGb250OwogICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRlbXBEZWNsLmdldCgpLCBkZWNs
YXJhdGlvblRleHQpOwotICAgIGlmICghdGVtcERlY2wtPmxlbmd0aCgpKQorICAgIGlmICh0ZW1w
RGVjbC0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgcGFyc2Ugc3Vj
Y2VlZGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIFJHQkEzMiBjdXJyZW50
Q29sb3IoSFRNTENhbnZhc0VsZW1lbnQqIGMKICAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5p
bkRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBDb2xvcjo6YmxhY2s7CiAgICAgUkdCQTMyIHJn
YmEgPSBDb2xvcjo6YmxhY2s7Ci0gICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIGNhbnZh
cy0+c3R5bGUoKS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSk7CisgICAgQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIGNhbnZhcy0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCkt
PmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlDb2xvcikpOwogICAgIHJldHVybiByZ2JhOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODUsNyArMTA4NSw3
IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmV2YWxpZGF0ZVN0eWwKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBzaXplID0gbV9mbGF0UnVsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7
CiAgICAgICAgIENTU1N0eWxlUnVsZSogcGFyc2VkUnVsZSA9IG1fZmxhdFJ1bGVzLmF0KGkpOwog
ICAgICAgICBpZiAocGFyc2VkUnVsZS0+c3R5bGUoKSA9PSBwYWdlU3R5bGUpIHsKLSAgICAgICAg
ICAgIGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpLT5jc3NUZXh0KCkgIT0gcGFnZVN0eWxlLT5jc3NU
ZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpLT5hc1RleHQoKSAh
PSBwYWdlU3R5bGUtPmNzc1RleHQoKSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBk
aXNhYmxlZCBwcm9wZXJ0aWVzIGZvciB0aGUgaW52YWxpZCBzdHlsZSBoZXJlLgogICAgICAgICAg
ICAgICAgIG1faW5zcGVjdG9yU3R5bGVzLnJlbW92ZShwYWdlU3R5bGUpOwogICAgICAgICAgICAg
ICAgIHNldFN0eWxlVGV4dChwYWdlU3R5bGUsIHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzE3LDEyICszMTcsOSBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNl
c0ZvCiAgICAgLy8gVGhlIGJhY2tncm91bmQtaW1hZ2UgYW5kIGxpc3Qtc3R5bGUtaW1hZ2UgKGZv
ciB1bCBvciBvbCkgYXJlIHRoZSBDU1MgcHJvcGVydGllcwogICAgIC8vIHRoYXQgbWFrZSB1c2Ug
b2YgaW1hZ2VzLiBXZSBpdGVyYXRlIHRvIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIGFueSBvdGhlcgog
ICAgIC8vIGltYWdlIHByb3BlcnRpZXMgdGhlcmUgbWlnaHQgYmUuCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0eWxlRGVjbGFyYXRpb24tPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
Ly8gRklYTUU6IEl0J3Mga2luZCBvZiByaWRpY3Vsb3VzIHRvIGdldCB0aGUgcHJvcGVydHkgbmFt
ZSBhbmQgdGhlbiBnZXQKLSAgICAgICAgLy8gdGhlIHZhbHVlIG91dCBvZiB0aGUgbmFtZS4gSWRl
YWxseSB3ZSB3b3VsZCBnZXQgdGhlIHZhbHVlIG91dCBvZiB0aGUKLSAgICAgICAgLy8gcHJvcGVy
dHkgSUQsIGJ1dCBDU1NTdHlsZURlY2xhcmF0aW9uIG9ubHkgZ2l2ZXMgYWNjZXNzIHRvIHByb3Bl
cnR5Ci0gICAgICAgIC8vIG5hbWVzLCBub3QgSURzLgotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IGNzc1ZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZURl
Y2xhcmF0aW9uLT5pdGVtKGkpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGVE
ZWNsYXJhdGlvbi0+cHJvcGVydHlDb3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1
ZSA9IHN0eWxlRGVjbGFyYXRpb24tPnByb3BlcnR5QXQoaSkudmFsdWUoKTsKICAgICAgICAgaWYg
KCFjc3NWYWx1ZS0+aXNJbWFnZVZhbHVlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2
aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNyArMTg0LDcgQEAgc3RhdGljIGJvb2wgaXNF
bXB0eU9yVW5zdHlsZWRBcHBsZVN0eWxlUwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZURlY2wgPSBlbGVtLT5pbmxpbmVT
dHlsZURlY2woKTsKLSAgICByZXR1cm4gKCFpbmxpbmVTdHlsZURlY2wgfHwgaW5saW5lU3R5bGVE
ZWNsLT5sZW5ndGgoKSA9PSAwKTsKKyAgICByZXR1cm4gKCFpbmxpbmVTdHlsZURlY2wgfHwgaW5s
aW5lU3R5bGVEZWNsLT5pc0VtcHR5KCkpOwogfQogCiBTdHJpbmcgcXVvdGVBbmRFc2NhcGVOb25Q
cmludGFibGVzKGNvbnN0IFN0cmluZyYgcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdT
dHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5
bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDcgKzQzNyw3IEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IFNWR1N0eWxlZEVsZW1lbnQ6OmcKICAgICAgICAgaW50IHByb3BJ
ZCA9IFNWR1N0eWxlZEVsZW1lbnQ6OmNzc1Byb3BlcnR5SWRGb3JTVkdBdHRyaWJ1dGVOYW1lKGNz
c1NWR0F0dHItPm5hbWUoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGNzc1NWR0F0dHIsIHBy
b3BJZCwgY3NzU1ZHQXR0ci0+dmFsdWUoKSk7CiAgICAgfQotICAgIHJldHVybiBjc3NTVkdBdHRy
LT5kZWNsKCktPmdldFByb3BlcnR5Q1NTVmFsdWUobmFtZSk7CisgICAgcmV0dXJuIGNzc1NWR0F0
dHItPmRlY2woKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShjc3NQcm9wZXJ0eUlEKG5hbWUpKTsKIH0K
IAogYm9vbCBTVkdTdHlsZWRFbGVtZW50OjppbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKCkgY29uc3QK
</data>
<flag name="commit-queue"
          id="125720"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124468</attachid>
            <date>2012-01-29 13:16:35 -0800</date>
            <delta_ts>2012-01-30 00:21:19 -0800</delta_ts>
            <desc>another</desc>
            <filename>cssstyledeclaration-cleanup-7.patch</filename>
            <type>text/plain</type>
            <size>60562</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0wMS0yOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIG5vbi1DU1NPTSBB
UEkgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzcyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uIHNob3VsZCBleHBvc2UgdGhlIENT
U09NIEFQSSBvbmx5LiBTdWJjbGFzc2VzIHNob3VsZCBleHBvc2UgdGhlIGludGVybmFsIEFQSSBv
bmx5LiAKKyAgICAgICAgVGhpcyB3aWxsIG1vdmUgdXMgY2xvc2VyIHRvIGJlaW5nIGFibGUgdG8g
c3BsaXQgdGhlIENTU09NIEFQSSBmcm9tIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIC0gTWFrZSBDU1NTdHlsZURlY2xhcmF0aW9uIENTU09NIGZ1bmN0aW9u
cyB2aXJ0dWFsLCBpbnRlcm5hbCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuCisgICAgICAgIC0gTW92
ZSBpbXBsZW1lbnRhdGlvbnMgdG8gc3ViY2xhc3NlcyAoQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbikuCisgICAgICAgIC0gTWFrZSBDU1NPTSBm
dW5jdGlvbnMgaW4gdGhlIHN1YmNsYXNzZXMgcHJpdmF0ZSAobWFraW5nIGl0IGhhcmRlciB0byBp
bnZva2UgdGhlbSBpbnRlcm5hbGx5KS4KKyAgICAgICAgLSBTd2l0Y2ggYSBidW5jaCBvZiBwbGFj
ZXMgdG8gdXNlIGludGVybmFsIEFQSSBpbnN0ZWFkIG9mIENTU09NLgorCisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOENTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkUHJvcGVydHlHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lZFByb3BlcnR5U2V0
dGVyKToKKyAgICAgICAgCisgICAgICAgICAgICBTd2l0Y2ggdG8gKkludGVybmFsIHZlcnNpb25z
IG9mIHRoZSBDU1NPTSBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9w
ZXJ0aWVzSW5TZXQpOgorICAgICAgICAKKyAgICAgICAgICAgIE1vdmUgY29weVByb3BlcnRpZXNJ
blNldCB0byBzdWJjbGFzc2VzLCBkZXZpcnR1YWxpemUuCisgICAgICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFBy
b3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVBy
b3BlcnR5KToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6Cisg
ICAgICAgIChDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAqIGNzcy9DU1NG
b250RmFjZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxlOjpjc3NU
ZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppc1Byb3Bl
cnR5SW1wbGljaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIAorICAgICAgICAg
ICAgTW92ZSBjb3B5UHJvcGVydGllc0luU2V0IHRvIHN1YmNsYXNzZXMsIGRldmlydHVhbGl6ZS4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3NzUHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyk6CisgICAgICAgIAorICAgICAg
ICAgICAgTW92ZSBkaWZmKCkgdG8gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24sIHJlbmFtZSB0
byByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcywgc3dpdGNoIHRvIG11dGF0ZQorICAgICAgICAg
ICAgdGhpcyBvYmplY3QgaW5zdGVhZCBvZiB0aGUgYXJndW1lbnQgb2JqZWN0LgorICAgIAorICAg
ICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OnByb3BlcnR5Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnByb3BlcnR5QXQpOgorICAgICAgICAKKyAgICAgICAgICAgIEV4
cG9zZSBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSBjb3VudCBpbnRlcm5hbGx5IChpdGVyYXRvciBz
aG91bGQgYmUgcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGVzZSkuCisgICAgICAgIAorICAgICAgICAq
IGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIChDU1NTdHlsZURlY2xhcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbCk6CisgICAgICAgIAorICAgICAgICAgICAg
QWRkICpJbnRlcm5hbCB2ZXJzaW9ucyBvZiBzb21lIENTU09NIEFQSXMgdG8gc3VwcG9ydCBzb21l
IGVkaXRpbmcgYW5kIGJpbmRpbmdzIHVzZXMuCisgICAgICAgICAgICBUaGVzZSB0YWtlIHByb3Bl
cnR5SURzIGluc3RlYWQgb2Ygc3RyaW5ncyBuYW1lcy4KKworICAgICAgICAqIGNzcy9DU1NTdHls
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpjc3NUZXh0KToKKyAg
ICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0
VG9SaWdodERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lUnVs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQp
OgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2spOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZVRvUHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJs
b2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGlu
ZVN0eWxlSWZOZWVkZWQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAg
ICAgICAgKCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5RWRpdGluZ1Byb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUNTU1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFJHQkFGb250Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dGluZ1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnJlbW92ZVN0eWxlQWRkZWRCeU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW5nV2l0aFN0eWxlT2ZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRpbmdTdHlsZTo6c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5bGVPZk5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlbW92ZVByb3BlcnRpZXNJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERlZmF1bHRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udFdlaWdodElzQm9sZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQ
cm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SWRlbnRpZmllclZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6Omhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAKKyAgICAgICAgICAgIEFkYXB0
IHRvIGNoYW5nZXMuCisgICAgCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5s
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxl
U3BhbnMpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dHlsZU5vZGVPcGVuVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzaXplSW1hZ2VUb0ZpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OndpbmRvd1NpemVDaGFuZ2VkKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50Q29sb3IpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZSk6CisgICAgICAgICog
cGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXpl
cjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eU9yVW5z
dHlsZWRBcHBsZVN0eWxlU3Bhbik6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6Z2V0UHJlc2VudGF0aW9uQXR0
cmlidXRlKToKKwogMjAxMi0wMS0yOCAgQWxleGFuZGVyIEbDpnLDuHkgIDxhaGZAMHg5MC5kaz4K
IAogICAgICAgICBbUXRdIFJlbW92ZSByZWZlcmVuY2VzIHRvIENTU0JvcmRlckltYWdlVmFsdWUu
aCBpbiBUYXJnZXQucHJpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsy
MDIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAgICAg
IHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJh
dGlvbiogaW1wID0gVjhDU1NTdHlsZURlY2xhcmF0aW9uOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gaW1wLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKHByb3BJbmZvLT5wcm9wSUQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBp
bXAtPmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlE
Pihwcm9wSW5mby0+cHJvcElEKSk7CiAgICAgaWYgKGNzc1ZhbHVlKSB7CiAgICAgICAgIGlmIChw
cm9wSW5mby0+aGFkUGl4ZWxPclBvc1ByZWZpeCAmJgogICAgICAgICAgICAgY3NzVmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkgewpAQCAtMjEyLDcgKzIxMiw3IEBAIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOENTU1N0eWxlRGVjbGFyYXQKICAgICAgICAgcmV0dXJuIHY4U3RyaW5nT3JOdWxsKGNz
c1ZhbHVlLT5jc3NUZXh0KCkpOwogICAgIH0KIAotICAgIFN0cmluZyByZXN1bHQgPSBpbXAtPmdl
dFByb3BlcnR5VmFsdWUocHJvcEluZm8tPnByb3BJRCk7CisgICAgU3RyaW5nIHJlc3VsdCA9IGlt
cC0+Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHBy
b3BJbmZvLT5wcm9wSUQpKTsKICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKQogICAgICAgICByZXN1
bHQgPSAiIjsgIC8vIGNvbnZlcnQgbnVsbCB0byBlbXB0eSBzdHJpbmcuCiAKQEAgLTIzMiw3ICsy
MzIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAgICAg
IHByb3BlcnR5VmFsdWUuYXBwZW5kKCJweCIpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgaW1wLT5zZXRQcm9wZXJ0eShwcm9wSW5mby0+cHJvcElELCBwcm9wZXJ0eVZhbHVlLCBm
YWxzZSwgZWMpOworICAgIGltcC0+c2V0UHJvcGVydHlJbnRlcm5hbChzdGF0aWNfY2FzdDxDU1NQ
cm9wZXJ0eUlEPihwcm9wSW5mby0+cHJvcElEKSwgcHJvcGVydHlWYWx1ZSwgZmFsc2UsIGVjKTsK
IAogICAgIGlmIChlYykKICAgICAgICAgdGhyb3dFcnJvcihlYyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNp
b24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NC
b3JkZXJJbWFnZS5oIgogI2luY2x1ZGUgIkNTU0xpbmVCb3hDb250YWluVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCkBAIC0yNDc1LDI0ICsy
NDc2LDggQEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UAogICAgIHJl
dHVybiAiIjsKIH0KIAotYm9vbCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5UHJpb3JpdHkoaW50IC8qcHJvcGVydHlJRCovKSBjb25zdAotewotICAgIC8vIEFsbCBjb21w
dXRlZCBzdHlsZXMgaGF2ZSBhIHByaW9yaXR5IG9mIGZhbHNlIChub3QgImltcG9ydGFudCIpLgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bjo6cmVtb3ZlUHJvcGVydHkoaW50IC8qcHJvcGVydHlJRCovLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19CiAKLXZvaWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0
eShpbnQgLypwcm9wZXJ0eUlEKi8sIGNvbnN0IFN0cmluZyYgLyp2YWx1ZSovLCBib29sIC8qaW1w
b3J0YW50Ki8sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSOwotfQotCi11bnNpZ25lZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OnZpcnR1YWxMZW5ndGgoKSBjb25zdAordW5zaWduZWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpsZW5ndGgoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSBtX25vZGUuZ2V0KCk7CiAg
ICAgaWYgKCFub2RlKQpAQCAtMjUyNSw4ICsyNTEwLDggQEAgYm9vbCBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmNzc1BybwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQotCi0gICAgcmV0dXJuIENTU1N0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5
TWF0Y2hlcyhwcm9wZXJ0eSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3Bl
cnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOworICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+
Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7CiB9CiAKIFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bjo6Y29weSgpIGNvbnN0CkBAIC0yNTc3LDQgKzI1NjIsNzQgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZUxpc3Q+IENTU0NvbXB1dGVkU3R5bAogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KIAor
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpIGNvbnN0Cit7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5PiBsaXN0OworICAgIGxpc3Qu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0
UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAg
ICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2Up
KTsKKyAgICB9CisgICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUo
bGlzdCk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sK
KyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBp
ZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworfQorCitTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQorewor
ICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlm
ICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBnZXRQ
cm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOworfQorCitTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8g
QWxsIGNvbXB1dGVkIHN0eWxlcyBoYXZlIGEgcHJpb3JpdHkgb2Ygbm90ICJpbXBvcnRhbnQiLgor
ICAgIHJldHVybiAiIjsKK30KKworU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gIiI7Cit9
CisKK2Jvb2wgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQo
Y29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUjsKK30KKworU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorICAgIAorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlEKQoreworICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwor
fQorCitTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVl
SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAgIHJldHVybiBnZXRQcm9w
ZXJ0eVZhbHVlKHByb3BlcnR5SUQpOworfQorCit2b2lkIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBi
b29sLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTA2
MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIFBh
c3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlKFBhc3NS
ZWZQdHI8Tm9kZT4sIGJvb2wgYWxsb3dWaXNpdGVkU3R5bGUsIGNvbnN0IFN0cmluZyYgcHNldWRv
RWxlbWVudE5hbWUpOwogICAgIHZpcnR1YWwgfkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbigp
OwogCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1
bnNpZ25lZCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwg
U3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgLypwcm9wZXJ0eUlEKi8pIGNvbnN0
IHsgcmV0dXJuIC0xOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQg
Lypwcm9wZXJ0eUlEKi8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CisgICAg
U3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OworICAgIGJvb2wg
Z2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRh
YmxlKCk7CkBAIC03MSwxNiArNjQsMjggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IGdldFNWR1Byb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQsIEVVcGRhdGVMYXlvdXQp
IGNvbnN0OwogI2VuZGlmCiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgY3NzUHJvcGVy
dHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNl
dCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24oUGFzc1JlZlB0cjxOb2RlPiwgYm9vbCBhbGxvd1Zpc2l0ZWRTdHlsZSwg
Y29uc3QgU3RyaW5nJik7CiAKKyAgICAvLyBDU1NPTSBmdW5jdGlvbnMuIERvbid0IG1ha2UgdGhl
c2UgcHVibGljLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgdmly
dHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVByaW9yaXR5
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9w
ZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBi
b29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAg
dmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3Bl
cnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJv
cGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGlt
cG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0
Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0OwogCiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gdmFsdWVGb3JTaGFkb3coY29uc3QgU2hhZG93RGF0YSosIGludCwgUmVuZGVyU3R5bGUqKSBj
b25zdDsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZh
bGlkQ29sb3IoUmVuZGVyU3R5bGUqLCBjb25zdCBDb2xvciYpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3
ICs0Miw3IEBAIFN0cmluZyBDU1NGb250RmFjZVJ1bGU6OmNzc1RleHQoKSBjb25zdAogewogICAg
IFN0cmluZyByZXN1bHQoIkBmb250LWZhY2UiKTsKICAgICByZXN1bHQgKz0gIiB7ICI7Ci0gICAg
cmVzdWx0ICs9IG1fc3R5bGUtPmNzc1RleHQoKTsKKyAgICByZXN1bHQgKz0gbV9zdHlsZS0+YXNU
ZXh0KCk7CiAgICAgcmVzdWx0ICs9ICJ9IjsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3Bw
CShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjYsOSArODI2LDkgQEAgdm9pZCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YWRkUGFycwogI2VuZGlmCiB9CiAKLXVuc2lnbmVk
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjp2aXJ0dWFsTGVuZ3RoKCkgY29uc3QKK3Vuc2ln
bmVkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAogewotICAgIHJl
dHVybiBsZW5ndGgoKTsKKyAgICByZXR1cm4gcHJvcGVydHlDb3VudCgpOwogfQogCiBTdHJpbmcg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKQEAgLTgz
OCw3ICs4MzgsNyBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0ZW0oCiAg
ICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihtX3By
b3BlcnRpZXNbaV0uaWQoKSkpOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmNzc1RleHQoKSBjb25zdAorU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjph
c1RleHQoKSBjb25zdAogewogICAgIFN0cmluZyByZXN1bHQgPSAiIjsKIApAQCAtMTA1Miw0ICsx
MDUyLDExOSBAQCBDU1NQcm9wZXJ0eSogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246CiAgICAg
cmV0dXJuIDA7CiB9CiAKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzVGV4dCgpOworfQorCitQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3Bl
cnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworfQorCitT
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUoY29uc3Qg
U3RyaW5nICZwcm9wZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7Cit9CisK
K1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1By
b3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eUlE
KSA/ICJpbXBvcnRhbnQiIDogIiI7Cit9CisKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7
CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAg
aWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaW50IHNob3J0
aGFuZElEID0gZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcGVydHlJRCk7CisgICAgaWYgKCFzaG9y
dGhhbmRJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBnZXRQcm9wZXJ0
eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oc2hvcnRoYW5kSUQpKTsKK30KKworYm9v
bCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydHlJRCk7Cit9CisKK3Zv
aWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5
SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybjsK
KyAgICBib29sIGltcG9ydGFudCA9IHByaW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNl
KSAhPSBub3RGb3VuZDsKKyAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0
YW50LCBlYyk7Cit9CisKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3Zl
UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAg
IGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBy
ZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreyAKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsgCit9CisKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3sg
CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7IAorfQorCit2b2lkIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreyAKKyAgICByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFs
dWUsIGltcG9ydGFudCwgZWMpOyAKK30KKworUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0aWVzSW5TZXQo
Y29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q1NT
UHJvcGVydHk+IGxpc3Q7CisgICAgbGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7CisgICAg
ICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtp
XSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOworICAgIH0KKyAgICByZXR1cm4gQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShsaXN0KTsKK30KKworYm9vbCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9w
ZXJ0eSkgY29uc3QKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlD
U1NWYWx1ZShwcm9wZXJ0eS0+aWQoKSk7CisgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLT5jc3NU
ZXh0KCkgPT0gcHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKTsKK30KKwordm9pZCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgVmVjdG9yPGludD4gcHJvcGVydGllc1Rv
UmVtb3ZlOworICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAg
ICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW2ldOworICAgICAg
ICAgICAgaWYgKHN0eWxlLT5jc3NQcm9wZXJ0eU1hdGNoZXMoJnByb3BlcnR5KSkKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5kKHByb3BlcnR5LmlkKCkpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1v
dmFsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6
ZSgpOyBpKyspCisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAxMDYxOTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgeyAKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihlbGVtZW50LCBmYWxzZSkpOwog
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcm
KTsKIAogICAgIC8vIFVzZWQgYnkgU3R5bGVkRWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3Bl
cnRpZXMoKS4KICAgICB2b2lkIGNvcHlQcm9wZXJ0aWVzRnJvbShjb25zdCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiYpOwpAQCAtOTIsMjcgKzk0LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdF9p
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIG1fcHJvcGVydGll
cy5iZWdpbigpKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGNvbnN0X2l0
ZXJhdG9yKHRoaXMsIG1fcHJvcGVydGllcy5lbmQoKSk7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydGllcy5zaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnRpZXMuaXNFbXB0eSgpOyB9CisgICAgY29uc3QgQ1NTUHJvcGVy
dHkmIHByb3BlcnR5QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGll
c1tpbmRleF07IH0KKworICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OworICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHBy
b3BlcnR5SUQpIGNvbnN0OworICAgIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVy
dHlJRCkgY29uc3Q7CisgICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQp
IGNvbnN0OwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3Q7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLnNpemUoKTsg
fQotCi0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHBy
b3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50
IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5
KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0
aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJ
bXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJv
cGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFByb3BlcnR5KGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0
aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBjb3B5KCkgY29uc3Q7CiAKLSAgICB1c2luZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eUNTU1ZhbHVlOwotCiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9wZXJ0
eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsgfQogICAgIGJvb2wgc2V0UHJv
cGVydHkoaW50IHByb3BlcnR5SWQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9wZXJ0
eShwcm9wZXJ0eUlkLCB2YWx1ZSwgdW5pdCwgaW1wb3J0YW50LCB0cnVlKTsgfQogICAgIGJvb2wg
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBp
bXBvcnRhbnQsIHRydWUpOyB9CkBAIC0xMzgsNiArMTM0LDEyIEBAIHB1YmxpYzoKICAgICBib29s
IHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KIAog
ICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKTsKKyAg
ICAKKyAgICB2b2lkIHJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IENTU1N0eWxlRGVj
bGFyYXRpb24qKTsKKworICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29u
c3Q7CisKKyAgICBTdHJpbmcgYXNUZXh0KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwpAQCAtMTUzLDYgKzE1NSwyMiBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtl
TXV0YWJsZSgpOwogCisgICAgLy8gQ1NTT00gZnVuY3Rpb25zLiBEb24ndCBtYWtlIHRoZXNlIHB1
YmxpYy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwg
U3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlT
aG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgYm9vbCBp
c1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJ
bnRlcm5hbChDU1NQcm9wZXJ0eUlEKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZh
bHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCk7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5
SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQsIEV4Y2VwdGlvbkNvZGUmKTsKKwogICAgIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwog
CiAgICAgU3RyaW5nIGdldFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgc2l6
ZV90KSBjb25zdDsKQEAgLTE3Myw2ICsxOTEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVtb3Zl
U2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7CiAg
ICAgYm9vbCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKIAorICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0
eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsKKwogICAgIFZlY3RvcjxDU1NQcm9w
ZXJ0eT46OmNvbnN0X2l0ZXJhdG9yIGZpbmRQcm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJZCkg
Y29uc3Q7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5Pjo6aXRlcmF0b3IgZmluZFByb3BlcnR5V2l0
aElkKGludCBwcm9wZXJ0eUlkKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
RGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMDkgKzc3LDEx
IEBAIENTU1N0eWxlU2hlZXQqIENTU1N0eWxlRGVjbGFyYXRpb246OnBhcmUKICAgICByZXR1cm4g
bV9wYXJlbnQucnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOwogfQogCi1QYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3Bl
cnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BJRCk7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewot
ICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFw
cm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlW
YWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElE
ID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5UHJpb3JpdHkocHJvcElE
KSA/ICJpbXBvcnRhbnQiIDogIiI7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBp
bnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElE
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaW50IHNob3J0aGFuZElEID0gZ2V0UHJv
cGVydHlTaG9ydGhhbmQocHJvcElEKTsKLSAgICBpZiAoIXNob3J0aGFuZElEKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxD
U1NQcm9wZXJ0eUlEPihzaG9ydGhhbmRJRCkpOwotfQotCi1ib29sIENTU1N0eWxlRGVjbGFyYXRp
b246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJv
cElEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzUHJvcGVydHlJbXBsaWNp
dChwcm9wSUQpOwotfQotCi12b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJp
bmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnQgcHJvcElEID0gY3Nz
UHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1
cm47Ci0gICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBm
YWxzZSkgIT0gbm90Rm91bmQ7Ci0gICAgc2V0UHJvcGVydHkocHJvcElELCB2YWx1ZSwgaW1wb3J0
YW50LCBlYyk7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0
eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJ
RCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShw
cm9wSUQsIGVjKTsKLX0KLQogYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5TmFt
ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIENTU1N0eWxlRGVjbGFyYXRpb246OmNzc1Byb3Bl
cnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkp
OwotICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1
ZSgpLT5jc3NUZXh0KCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZihDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdHlsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOwot
ICAgIHsKLSAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHN0eWxlLT5lbmQoKTsKLSAgICAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7Ci0gICAg
ICAgICAgICBpZiAoY3NzUHJvcGVydHlNYXRjaGVzKCZwcm9wZXJ0eSkpCi0gICAgICAgICAgICAg
ICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1vdmFsLgotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgpOyBpKysp
Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzVG9SZW1vdmVbaV0pOwot
fQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NTdHlsZURlY2xh
cmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPENTU1Byb3BlcnR5PiBsaXN0OwotICAgIGxpc3QucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJv
cGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBs
aXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobGlz
dCk7Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiB2b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OnNob3dT
dHlsZSgpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJ
KHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgQ1NTU3R5bGVE
ZWNsYXJhdGlvbl9oCiAjZGVmaW5lIENTU1N0eWxlRGVjbGFyYXRpb25faAogCisjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogCkBAIC01MSwzNSArNTIsMjYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChj
b25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbExlbmd0aCgpOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25l
ZCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuICFsZW5ndGgoKTsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsK
LQotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5k
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBib29sIGlzUHJvcGVydHlJbXBsaWNp
dChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5
SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQg
cHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGlj
aXQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLQotICAgIHZvaWQgc2V0UHJvcGVydHkoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHko
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHJl
bW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFs
dWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBn
ZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSA9IDA7CisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJp
bmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHJl
bW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJikg
PSAwOworCisgICAgLy8gQ1NTUHJvcGVydHlJRCB2ZXJzaW9ucyBvZiB0aGUgQ1NTT00gZnVuY3Rp
b25zIHRvIHN1cHBvcnQgYmluZGluZ3MgYW5kIGVkaXRpbmcuCisgICAgLy8gVXNlIHRoZSBub24t
dmlydHVhbCBtZXRob2RzIGluIHRoZSBjb25jcmV0ZSBzdWJjbGFzc2VzIHdoZW4gcG9zc2libGUu
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50
ZXJuYWwoQ1NTUHJvcGVydHlJRCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5
VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFBy
b3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0g
MDsKIAotICAgIHZvaWQgZGlmZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0Owot
Ci0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRp
ZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29uc3QgPSAw
OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgc2hvd1N0eWxlKCk7CkBAIC05Miw4ICs4NCw2
IEBAIHByb3RlY3RlZDoKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1
bGUgPSAwKTsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlZEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQsIGJvb2wgaXNJbmxpbmUpOwogCi0gICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0
Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0OwotCiAgICAgLy8gVGhlIGJpdHMgaW4gdGhp
cyBzZWN0aW9uIGFyZSBvbmx5IHVzZWQgYnkgc3BlY2lmaWMgc3ViY2xhc3NlcyBidXQga2VwdCBo
ZXJlCiAgICAgLy8gdG8gbWF4aW1pemUgc3RydWN0IHBhY2tpbmcuCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBA
IFN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1RleHQoKSBjb25zdAogICAgIFN0cmluZyByZXN1bHQg
PSBzZWxlY3RvclRleHQoKTsKIAogICAgIHJlc3VsdCArPSAiIHsgIjsKLSAgICByZXN1bHQgKz0g
bV9zdHlsZS0+Y3NzVGV4dCgpOworICAgIHJlc3VsdCArPSBtX3N0eWxlLT5hc1RleHQoKTsKICAg
ICByZXN1bHQgKz0gIn0iOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcg
KzI5OSw3IEBAIHN0YXRpYyBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBwcmludEUKIHN0YXRp
YyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCiB7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+LCBsZWZ0VG9SaWdodERlY2wsIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KCkpKTsKLSAgICBpZiAoIWxlZnRUb1JpZ2h0RGVjbC0+bGVuZ3RoKCkpCisgICAgaWYgKGxlZnRU
b1JpZ2h0RGVjbC0+aXNFbXB0eSgpKQogICAgICAgICBsZWZ0VG9SaWdodERlY2wtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZUx0cik7CiAgICAgcmV0dXJuIGxlZnRU
b1JpZ2h0RGVjbC5nZXQoKTsKIH0KQEAgLTMwNyw3ICszMDcsNyBAQCBzdGF0aWMgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIGxlZnRUCiBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwgcmlnaHRUb0xlZnREZWNsLCAoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpKSk7Ci0gICAgaWYgKCFyaWdodFRvTGVm
dERlY2wtPmxlbmd0aCgpKQorICAgIGlmIChyaWdodFRvTGVmdERlY2wtPmlzRW1wdHkoKSkKICAg
ICAgICAgcmlnaHRUb0xlZnREZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwg
Q1NTVmFsdWVSdGwpOwogICAgIHJldHVybiByaWdodFRvTGVmdERlY2wuZ2V0KCk7CiB9CkBAIC03
ODAsNyArNzgwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRp
ZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAg
ICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRp
b24oKTsKLSAgICAgICAgICAgIGlmICghZGVjbCB8fCAoIWRlY2wtPmxlbmd0aCgpICYmICFpbmNs
dWRlRW1wdHlSdWxlcykpIHsKKyAgICAgICAgICAgIGlmICghZGVjbCB8fCAoZGVjbC0+aXNFbXB0
eSgpICYmICFpbmNsdWRlRW1wdHlSdWxlcykpIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTI1MjYsNyArMjUyNiw3IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXNGb3IKIAogICAgICAgICAvLyBJZiB0aGUg
cnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCiAgICAgICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsK
LSAgICAgICAgaWYgKCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgoKSkKKyAgICAgICAgaWYgKCFkZWNs
IHx8IGRlY2wtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8v
IEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0Y2hlZCBydWxlcy4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCShyZXZpc2lvbiAxMDYx
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBTdHJpbmcgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
Ojpjc3NUZXh0KCkgCiAgICAgU3RyaW5nIHJlc3VsdCA9IG1fa2V5OwogCiAgICAgcmVzdWx0ICs9
ICIgeyAiOwotICAgIHJlc3VsdCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7CisgICAgcmVzdWx0ICs9
IG1fc3R5bGUtPmFzVGV4dCgpOwogICAgIHJlc3VsdCArPSAifSI7CiAKICAgICByZXR1cm4gcmVz
dWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTA2
MTk4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRhdGVTdHlsZUF0
dHJpYnV0ZQogICAgIHNldElzU3R5bGVBdHRyaWJ1dGVWYWxpZCgpOwogICAgIHNldElzU3luY2hy
b25pemluZ1N0eWxlQXR0cmlidXRlKCk7CiAgICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBpbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlRGVjbCgpKQotICAgICAgICBjb25zdF9jYXN0
PFN0eWxlZEVsZW1lbnQqPih0aGlzKS0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgaW5saW5lU3R5
bGUtPmNzc1RleHQoKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHRoaXMp
LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogICAgIGNs
ZWFySXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNjE5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlS
ZWxhdGl2ZUZvbgogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50Rm9udFNpemUgIT0gZGVz
aXJlZEZvbnRTaXplKSB7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZURlY2wtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udFNpemUsIFN0cmluZzo6bnVtYmVyKGRlc2lyZWRGb250U2l6ZSkgKyAi
cHgiLCBmYWxzZSk7Ci0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQuZ2V0KCks
IHN0eWxlQXR0ciwgaW5saW5lU3R5bGVEZWNsLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgc2V0
Tm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIsIGlubGluZVN0eWxlRGVjbC0+
YXNUZXh0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbmxpbmVTdHlsZURlY2wtPmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBz
dHlsZUF0dHIpOwpAQCAtNTE1LDcgKzUxNSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUVtYmVkZGluZ1UKICAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+Y29w
eSgpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5p
Y29kZUJpZGksIENTU1ZhbHVlTm9ybWFsKTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5yZW1v
dmVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbik7Ci0gICAgICAgICAgICBzZXROb2RlQXR0
cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmNzc1RleHQoKSk7CisgICAg
ICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUt
PmFzVGV4dCgpKTsKICAgICAgICAgICAgIGlmIChpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5z
dHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbihlbGVtZW50KTsKICAgICAgICAgfQpAQCAtNzI4LDcgKzcyOCw3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKICAgICAgICAgICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1
cmVJbmxpbmVTdHlsZURlY2woKS0+Y29weSgpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPm1l
cmdlKHN0eWxlLT5zdHlsZSgpKTsKLSAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVu
dCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHNldE5v
ZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwog
ICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC05NDMsNyArOTQzLDcgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgIC8vIFNpbmNlIGFkZElubGluZVN0eWxl
SWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0byBibG9jay1mbG93IHJlbmRlciBvYmplY3RzLCBh
ZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IGFwcGx5SW5saW5lU3R5
bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhlcmUgaW5zdGVhZC4KICAgICBpZiAoKG5vZGUtPnJl
bmRlcmVyKCktPmlzQmxvY2tGbG93KCkgfHwgbm9kZS0+Y2hpbGROb2RlQ291bnQoKSkgJiYgbm9k
ZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIHNldE5vZGVBdHRyaWJ1dGUodG9IVE1MRWxl
bWVudChub2RlKSwgc3R5bGVBdHRyLCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgp
KTsKKyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSh0b0hUTUxFbGVtZW50KG5vZGUpLCBzdHlsZUF0
dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTEzMTIsNyArMTMxMiw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFk
ZEJsb2NrU3R5bGUoY28KICAgICAgICAgCiAgICAgU3RyaW5nIGNzc1RleHQgPSBzdHlsZUNoYW5n
ZS5jc3NTdHlsZSgpOwogICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9
IGJsb2NrLT5pbmxpbmVTdHlsZURlY2woKSkKLSAgICAgICAgY3NzVGV4dCArPSBkZWNsLT5jc3NU
ZXh0KCk7CisgICAgICAgIGNzc1RleHQgKz0gZGVjbC0+YXNUZXh0KCk7CiAgICAgc2V0Tm9kZUF0
dHJpYnV0ZShibG9jaywgc3R5bGVBdHRyLCBjc3NUZXh0KTsKIH0KIApAQCAtMTM3Nyw3ICsxMzc3
LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZgogICAgIGlmIChz
dHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CiAgICAgICAgIGlmIChzdHlsZUNvbnRh
aW5lcikgewogICAgICAgICAgICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBleGlz
dGluZ1N0eWxlID0gc3R5bGVDb250YWluZXItPmlubGluZVN0eWxlRGVjbCgpKQotICAgICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgZXhpc3Rp
bmdTdHlsZS0+Y3NzVGV4dCgpICsgc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSk7CisgICAgICAgICAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBleGlzdGlu
Z1N0eWxlLT5hc1RleHQoKSArIHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0
eWxlQXR0ciwgc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSk7CiAgICAgICAgIH0gZWxzZSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAxMDYxOTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDcgKzgyLDggQEAgc3RhdGljIGNvbnN0IGludCBlZGl0aW5nUHJvcGVydGllc1td
ID0gewogCiBlbnVtIEVkaXRpbmdQcm9wZXJ0aWVzVHlwZSB7IE9ubHlJbmhlcml0YWJsZUVkaXRp
bmdQcm9wZXJ0aWVzLCBBbGxFZGl0aW5nUHJvcGVydGllcyB9OwogCi1zdGF0aWMgUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBFZGl0aW5nUHJvcGVydGllc1R5cGUgdHlwZSA9IE9ubHlJ
bmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKQordGVtcGxhdGUgPGNsYXNzIFN0eWxlRGVjbGFy
YXRpb25UeXBlPgorc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGNvcHlFZGl0aW5nUHJvcGVydGllcyhTdHlsZURlY2xhcmF0aW9uVHlwZSogc3R5bGUsIEVkaXRp
bmdQcm9wZXJ0aWVzVHlwZSB0eXBlID0gT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMp
CiB7CiAgICAgaWYgKHR5cGUgPT0gQWxsRWRpdGluZ1Byb3BlcnRpZXMpCiAgICAgICAgIHJldHVy
biBzdHlsZS0+Y29weVByb3BlcnRpZXNJblNldChlZGl0aW5nUHJvcGVydGllcywgV1RGX0FSUkFZ
X0xFTkdUSChlZGl0aW5nUHJvcGVydGllcykpOwpAQCAtMTA0LDYgKzEwNSwxMSBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhCiAgICAgICAgIHJldHVybiBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgcmV0dXJuIGNvcHlFZGl0aW5nUHJv
cGVydGllcyhzdHlsZS5nZXQoKSwgdHlwZSk7CiB9CisgICAgCitzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHByb3BlcnR5Q1NTVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGVEZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAgIHJldHVybiBz
dHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwocHJvcGVydHlJRCk7
Cit9CiAKIHN0YXRpYyBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdldFByb3Bl
cnRpZXNOb3RJbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0
aWVzLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBiYXNlU3R5bGUpOwogZW51bSBMZWdhY3lGb250U2l6
ZU1vZGUgeyBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSwgVXNlTGVnYWN5Rm9udFNpemVPbmx5SWZQ
aXhlbFZhbHVlc01hdGNoIH07CkBAIC0zNDcsNyArMzUzLDcgQEAgc3RhdGljIFJHQkEzMiBjc3NW
YWx1ZVRvUkdCQShDU1NWYWx1ZSogYwogCiBzdGF0aWMgaW5saW5lIFJHQkEzMiBnZXRSR0JBRm9u
dENvbG9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewotICAgIHJldHVybiBjc3NWYWx1
ZVRvUkdCQShzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKS5nZXQo
KSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKHByb3BlcnR5Q1NTVmFsdWUoc3R5bGUsIENT
U1Byb3BlcnR5Q29sb3IpLmdldCgpKTsKIH0KIAogc3RhdGljIGlubGluZSBSR0JBMzIgcmdiYUJh
Y2tncm91bmRDb2xvckluRWZmZWN0KE5vZGUqIG5vZGUpCkBAIC00ODIsNyArNDg4LDcgQEAgdm9p
ZCBFZGl0aW5nU3R5bGU6OnNldFN0eWxlKFBhc3NSZWZQdHI8QwogCiB2b2lkIEVkaXRpbmdTdHls
ZTo6b3ZlcnJpZGVXaXRoU3R5bGUoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKQogewotICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fbXV0
YWJsZVN0eWxlKQogICAgICAgICBtX211dGFibGVTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjcmVhdGUoKTsKQEAgLTU0Nyw4ICs1NTMsOCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6
cmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHBhcmVudFN0eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1
dGVkU3R5bGUoY29tcHV0ZWRTdHlsZShub2RlLT5wYXJlbnROb2RlKCkpLCBBbGxFZGl0aW5nUHJv
cGVydGllcyk7CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBub2RlU3R5
bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUpLCBB
bGxFZGl0aW5nUHJvcGVydGllcyk7Ci0gICAgcGFyZW50U3R5bGUtPmRpZmYobm9kZVN0eWxlLmdl
dCgpKTsKLSAgICBub2RlU3R5bGUtPmRpZmYobV9tdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIG5v
ZGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMocGFyZW50U3R5bGUuZ2V0KCkpOwor
ICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhub2RlU3R5bGUu
Z2V0KCkpOwogfQogCiB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dp
dGhTdHlsZU9mTm9kZShOb2RlKiBub2RlKQpAQCAtNTU4LDcgKzU2NCw3IEBAIHZvaWQgRWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW4KIAogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHls
ZShjb21wdXRlZFN0eWxlKG5vZGUtPnBhcmVudE5vZGUoKSksIEFsbEVkaXRpbmdQcm9wZXJ0aWVz
KTsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5vZGVTdHlsZSA9IGVk
aXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZSksIEFsbEVkaXRp
bmdQcm9wZXJ0aWVzKTsKLSAgICBwYXJlbnRTdHlsZS0+ZGlmZihub2RlU3R5bGUuZ2V0KCkpOwor
ICAgIG5vZGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMocGFyZW50U3R5bGUuZ2V0
KCkpOwogCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG5vZGVTdHlsZS0+ZW5kKCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub2RlU3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKQEAgLTYxMCw5ICs2MTYsOSBAQCBUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZT
dHlsZShDCiAgICAgaWYgKHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyA9PSBJZ25vcmVU
ZXh0T25seVByb3BlcnRpZXMpCiAgICAgICAgIGRpZmZlcmVuY2UtPnJlbW92ZVByb3BlcnRpZXNJ
blNldCh0ZXh0T25seVByb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgodGV4dE9ubHlQcm9wZXJ0
aWVzKSk7CiAKLSAgICBpZiAoIWRpZmZlcmVuY2UtPmxlbmd0aCgpKQorICAgIGlmIChkaWZmZXJl
bmNlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgaWYgKGRp
ZmZlcmVuY2UtPmxlbmd0aCgpID09IG1fbXV0YWJsZVN0eWxlLT5sZW5ndGgoKSkKKyAgICBpZiAo
ZGlmZmVyZW5jZS0+cHJvcGVydHlDb3VudCgpID09IG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUNv
dW50KCkpCiAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwogCiAgICAgcmV0dXJuIE1peGVk
VHJpU3RhdGU7CkBAIC04MDAsNyArODA2LDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmV4dHJhY3RD
b25mbGljdGluZ0ltcAogCiBib29sIEVkaXRpbmdTdHlsZTo6c3R5bGVJc1ByZXNlbnRJbkNvbXB1
dGVkU3R5bGVPZk5vZGUoTm9kZSogbm9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fbXV0YWJs
ZVN0eWxlIHx8ICFnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIGNvbXB1
dGVkU3R5bGUobm9kZSkuZ2V0KCkpLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gIW1fbXV0YWJsZVN0
eWxlIHx8IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRT
dHlsZShub2RlKS5nZXQoKSktPmlzRW1wdHkoKTsKIH0KIAogYm9vbCBFZGl0aW5nU3R5bGU6OmVs
ZW1lbnRJc1N0eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KGNvbnN0IEhUTUxFbGVtZW50KiBlbGVt
ZW50KQpAQCAtODY5LDcgKzg3NSw4IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBs
eUF0KGNvbnMKICAgICAgICAgZGlyZWN0aW9uID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwogICAgIH0KIAotICAgIHN0eWxlLT5tX211
dGFibGVTdHlsZS0+ZGlmZihtX211dGFibGVTdHlsZS5nZXQoKSk7CisgICAgbV9tdXRhYmxlU3R5
bGUtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKHN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQo
KSk7CisKICAgICBpZiAoZ2V0UkdCQUZvbnRDb2xvcihtX211dGFibGVTdHlsZS5nZXQoKSkgPT0g
Z2V0UkdCQUZvbnRDb2xvcihzdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkpKQogICAgICAgICBt
X211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CiAKQEAgLTEw
NjgsNyArMTA3NSw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzRm8K
IAogc3RhdGljIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlVG9SZW1vdmVQcm9wZXJ0aWVzRnJvbSwgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQogewotICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZShz
dHlsZS0+bGVuZ3RoKCkpOworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZShzdHls
ZS0+cHJvcGVydHlDb3VudCgpKTsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKICAgICBm
b3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxl
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsraSkKQEAgLTEwODUsNyArMTA5Miw3IEBAIHZv
aWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0EKIAogICAgIC8vIDEuIFJlbW92
ZSBzdHlsZSBmcm9tIG1hdGNoZWQgcnVsZXMgYmVjYXVzZSBzdHlsZSByZW1haW4gd2l0aG91dCBy
ZXBlYXRpbmcgaXQgaW4gaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9uCiAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21N
YXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbEJ1dEVt
cHR5Q1NTUnVsZXMpOwotICAgIGlmIChzdHlsZUZyb21NYXRjaGVkUnVsZXMgJiYgc3R5bGVGcm9t
TWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkKKyAgICBpZiAoc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzICYm
ICFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmlzRW1wdHkoKSkKICAgICAgICAgbV9tdXRhYmxlU3R5
bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIHN0eWxlRnJvbU1h
dGNoZWRSdWxlcy5nZXQoKSk7CiAKICAgICAvLyAyLiBSZW1vdmUgc3R5bGUgcHJlc2VudCBpbiBj
b250ZXh0IGFuZCBub3Qgb3ZlcnJpZGVuIGJ5IG1hdGNoZWQgcnVsZXMuCkBAIC0xMTEwLDcgKzEx
MTcsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBCiAKIHZvaWQg
RWRpdGluZ1N0eWxlOjpyZW1vdmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKEVsZW1l
bnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFtX211dGFibGVTdHlsZSB8fCAhbV9tdXRhYmxlU3R5
bGUtPmxlbmd0aCgpKQorICAgIGlmICghbV9tdXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUt
PmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBkZWZhdWx0U3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVt
ZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OlVBQW5kVXNlckNTU1J1bGVzKTsKQEAgLTEy
MTcsNyArMTIyNCw3IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHMK
ICAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwg
c3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pKTsK
IAogICAgIC8vIFNhdmUgdGhlIHJlc3VsdCBmb3IgbGF0ZXIKLSAgICBtX2Nzc1N0eWxlID0gbXV0
YWJsZVN0eWxlLT5jc3NUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgbV9jc3NTdHlsZSA9
IG11dGFibGVTdHlsZS0+YXNUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiB9CiAKIHN0YXRpYyB2
b2lkIHNldFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlLCBjb25zdCBDU1NWYWx1ZUxpc3QqIG5ld1RleHREZWNvcmF0aW9uLCBpbnQgcHJvcGVy
dHlJRCkKQEAgLTEzMTIsNyArMTMxOSw3IEBAIHN0YXRpYyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlv
bnMoQ1NTTXV0YWIKIHN0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+
IGZvbnRXZWlnaHQgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gZm9udFdlaWdodCA9IHByb3BlcnR5Q1NTVmFs
dWUoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CiAKICAgICBpZiAoIWZvbnRXZWlnaHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEzNjYsMzAgKzEzNzMsMzAgQEAgUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQcgogICAgIEFTU0VSVChiYXNlU3R5bGUpOwog
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcmVzdWx0ID0gc3R5bGVXaXRo
UmVkdW5kYW50UHJvcGVydGllcy0+Y29weSgpOwogCi0gICAgYmFzZVN0eWxlLT5kaWZmKHJlc3Vs
dC5nZXQoKSk7CisgICAgcmVzdWx0LT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhiYXNlU3R5
bGUpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3Qg
PSBiYXNlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBiYXNlVGV4dERlY29yYXRp
b25zSW5FZmZlY3QgPSBwcm9wZXJ0eUNTU1ZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CiAgICAgZGlmZlRleHREZWNvcmF0aW9ucyhyZXN1
bHQuZ2V0KCksIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIGJhc2VUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdC5nZXQoKSk7CiAgICAgZGlmZlRleHREZWNvcmF0aW9ucyhyZXN1bHQuZ2V0KCksIENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsIGJhc2VUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdC5nZXQoKSk7CiAKLSAgICBpZiAoYmFzZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udFNpemUpICYmIGZvbnRXZWlnaHRJc0JvbGQocmVzdWx0LmdldCgp
KSA9PSBmb250V2VpZ2h0SXNCb2xkKGJhc2VTdHlsZSkpCisgICAgaWYgKHByb3BlcnR5Q1NTVmFs
dWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRTaXplKSAmJiBmb250V2VpZ2h0SXNCb2xkKHJl
c3VsdC5nZXQoKSkgPT0gZm9udFdlaWdodElzQm9sZChiYXNlU3R5bGUpKQogICAgICAgICByZXN1
bHQtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CiAKLSAgICBpZiAoYmFz
ZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpICYmIGdldFJHQkFG
b250Q29sb3IocmVzdWx0LmdldCgpKSA9PSBnZXRSR0JBRm9udENvbG9yKGJhc2VTdHlsZSkpCisg
ICAgaWYgKHByb3BlcnR5Q1NTVmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9yKSAmJiBn
ZXRSR0JBRm9udENvbG9yKHJlc3VsdC5nZXQoKSkgPT0gZ2V0UkdCQUZvbnRDb2xvcihiYXNlU3R5
bGUpKQogICAgICAgICByZXN1bHQtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwog
Ci0gICAgaWYgKGJhc2VTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHRB
bGlnbikgJiYgZ2V0VGV4dEFsaWdubWVudChyZXN1bHQuZ2V0KCkpID09IGdldFRleHRBbGlnbm1l
bnQoYmFzZVN0eWxlKSkKKyAgICBpZiAocHJvcGVydHlDU1NWYWx1ZShiYXNlU3R5bGUsIENTU1By
b3BlcnR5VGV4dEFsaWduKSAmJiBnZXRUZXh0QWxpZ25tZW50KHJlc3VsdC5nZXQoKSkgPT0gZ2V0
VGV4dEFsaWdubWVudChiYXNlU3R5bGUpKQogICAgICAgICByZXN1bHQtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5VGV4dEFsaWduKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWludCBn
ZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGludCBwcm9wZXJ0
eUlEKQoraW50IGdldElkZW50aWZpZXJWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBwcm9w
ZXJ0eUNTU1ZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlEKTsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTQyMiw3ICsx
NDI5LDcgQEAgaW50IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKERvY3VtZW50KgogCiBib29s
IGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KQogewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgUmVmUHRyPENTU1ZhbHVl
PiBjc3NWYWx1ZSA9IHByb3BlcnR5Q1NTVmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKICAgICBpZiAoIWNzc1ZhbHVlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMTA2MTk4
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHByaXZhdGU6CiB9OwogCiAvLyBGSVhNRTogUmVtb3ZlIHRo
ZXNlIGZ1bmN0aW9ucyBvciBtYWtlIHRoZW0gbm9uLWdsb2JhbCB0byBkaXNjb3VyYWdlIHVzaW5n
IENTU1N0eWxlRGVjbGFyYXRpb24gZGlyZWN0bHkuCi1pbnQgZ2V0SWRlbnRpZmllclZhbHVlKENT
U1N0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcGVydHlJRCk7CitpbnQgZ2V0SWRlbnRpZmllclZh
bHVlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBDU1NQcm9wZXJ0eUlEKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwMiw4ICs1MDIsOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0cik7Ci0gICAgICAg
IH0gZWxzZSBpZiAobmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmxlbmd0aCgpICE9IGlubGluZVN0
eWxlLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5
bGVBdHRyLCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+cHJvcGVydHlDb3VudCgpICE9IGlubGlu
ZVN0eWxlLT5wcm9wZXJ0eUNvdW50KCkpCisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVs
ZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKIAog
ICAgICAgICAvLyBGSVhNRTogVG9sZXJhdGUgZGlmZmVyZW5jZXMgaW4gaWQsIGNsYXNzLCBhbmQg
c3R5bGUgYXR0cmlidXRlcy4KICAgICAgICAgaWYgKGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxl
bWVudChlbGVtZW50KSAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LCBlbGVtZW50LT5w
YXJlbnROb2RlKCkpCkBAIC02NjAsNyArNjYwLDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVT
cGFuc0JlZm9yZUluc2VydAogCiAgICAgTm9kZSogd3JhcHBpbmdTdHlsZVNwYW4gPSB0b3BOb2Rl
OwogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlQXRJbnNlcnRpb25Qb3MgPSBFZGl0aW5n
U3R5bGU6OmNyZWF0ZShpbnNlcnRpb25Qb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwot
ICAgIFN0cmluZyBzdHlsZVRleHQgPSBzdHlsZUF0SW5zZXJ0aW9uUG9zLT5zdHlsZSgpLT5jc3NU
ZXh0KCk7CisgICAgU3RyaW5nIHN0eWxlVGV4dCA9IHN0eWxlQXRJbnNlcnRpb25Qb3MtPnN0eWxl
KCktPmFzVGV4dCgpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc3RyaW5nIGNvbXBhcmlzb24gaXMg
YSBuYWl2ZSB3YXkgb2YgY29tcGFyaW5nIHR3byBzdHlsZXMuCiAgICAgLy8gV2Ugc2hvdWxkIGJl
IHRha2luZyB0aGUgZGlmZiBhbmQgY2hlY2sgdGhhdCB0aGUgZGlmZiBpcyBlbXB0eS4KQEAgLTcy
MCw3ICs3MjAsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsCiAg
ICAgICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4od3Jh
cHBpbmdTdHlsZVNwYW4pOwogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHdy
YXBwaW5nU3R5bGVTcGFuKTsKICAgICB9IGVsc2UKLSAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSh3
cmFwcGluZ1N0eWxlU3Bhbiwgc3R5bGVBdHRyLCBzdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpKTsK
KyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSh3cmFwcGluZ1N0eWxlU3Bhbiwgc3R5bGVBdHRyLCBz
dHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOwogfQogCiB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjptZXJnZUVuZElmTmVlZGVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJ
KHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFN0eWwKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
ZGl2U3R5bGUsICgiPGRpdiBzdHlsZT1cIiIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IFN0cmluZywgc3R5bGVTcGFuT3BlbiwgKCI8c3BhbiBzdHlsZT1cIiIpKTsKICAgICBvdXQu
YXBwZW5kKGlzQmxvY2sgPyBkaXZTdHlsZSA6IHN0eWxlU3Bhbk9wZW4pOwotICAgIGFwcGVuZEF0
dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmNzc1RleHQoKSwgZG9jdW1lbnQtPmlzSFRNTERvY3Vt
ZW50KCkpOworICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmFzVGV4dCgpLCBk
b2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CiAgICAgb3V0LmFwcGVuZCgnXCInKTsKICAgICBv
dXQuYXBwZW5kKCc+Jyk7CiB9CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRWxlbQogICAgICAgICBpZiAoIW5ld0lubGluZVN0eWxlLT5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBz
dHlsZVByZWZpeCwgKCIgc3R5bGU9XCIiKSk7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKHN0eWxl
UHJlZml4KTsKLSAgICAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgbmV3SW5saW5l
U3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSwgZG9jdW1lbnRJc0hUTUwpOworICAgICAgICAgICAg
YXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0
KCksIGRvY3VtZW50SXNIVE1MKTsKICAgICAgICAgICAgIG91dC5hcHBlbmQoJ1wiJyk7CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgUmVuZGVyU3R5
bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3RhCiAKICAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoc3BhblRhZywgZmFsc2UpOwog
Ci0gICAgU3RyaW5nIHN0eWxlVGV4dCA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCkg
KyAiIGRpc3BsYXk6IGlubGluZSI7CisgICAgU3RyaW5nIHN0eWxlVGV4dCA9IHR5cGluZ1N0eWxl
LT5zdHlsZSgpLT5hc1RleHQoKSArICIgZGlzcGxheTogaW5saW5lIjsKICAgICBzdHlsZUVsZW1l
bnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxlVGV4dC5pbXBsKCkpOwogCiAgICAgc3R5
bGVFbGVtZW50LT5hcHBlbmRDaGlsZChmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1Rl
eHROb2RlKCIiKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCB2
b2lkIEltYWdlRG9jdW1lbnQ6OnJlc2l6ZUltYWdlVG9GaXQoKQogICAgIG1faW1hZ2VFbGVtZW50
LT5zZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihpbWFnZVNpemUuaGVpZ2h0KCkgKiBzY2FsZSkp
OwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxl
KCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLWluIiwgZmFs
c2UsIGVjKTsKKyAgICBtX2ltYWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLWluIiwgZmFsc2UsIGVj
KTsKIH0KIAogdm9pZCBJbWFnZURvY3VtZW50OjppbWFnZUNsaWNrZWQoaW50IHgsIGludCB5KQpA
QCAtMzA5LDkgKzMwOSw5IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6cmVzdG9yZUltYWdlU2l6ZSgp
CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBpZiAoaW1hZ2VGaXRzSW5XaW5kb3co
KSkKLSAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxlKCktPnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5Q3Vyc29yLCBlYyk7CisgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVT
dHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIGVjKTsKICAgICBl
bHNlCi0gICAgICAgIG1faW1hZ2VFbGVtZW50LT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBmYWxzZSwgZWMpOworICAgICAgICBtX2lt
YWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlLCBlYyk7CiAgICAgICAgIAogICAg
IG1fZGlkU2hyaW5rSW1hZ2UgPSBmYWxzZTsKIH0KQEAgLTM0NCw5ICszNDQsOSBAQCB2b2lkIElt
YWdlRG9jdW1lbnQ6OndpbmRvd1NpemVDaGFuZ2VkKCkKICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YzsKICAgICAgICAgCiAgICAgICAgIGlmIChmaXRzSW5XaW5kb3cpCi0gICAgICAgICAgICBtX2lt
YWdlRWxlbWVudC0+c3R5bGUoKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIGVj
KTsKKyAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+
cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIGVjKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxlKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBtX2lt
YWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlLCBlYyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5ODcsNyArMTk4Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRGb250KGMKICAgICBTdHJpbmcgZGVjbGFyYXRpb25UZXh0KCJmb250OiAi
KTsKICAgICBkZWNsYXJhdGlvblRleHQgKz0gbmV3Rm9udDsKICAgICBwYXJzZXIucGFyc2VEZWNs
YXJhdGlvbih0ZW1wRGVjbC5nZXQoKSwgZGVjbGFyYXRpb25UZXh0KTsKLSAgICBpZiAoIXRlbXBE
ZWNsLT5sZW5ndGgoKSkKKyAgICBpZiAodGVtcERlY2wtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gVGhlIHBhcnNlIHN1Y2NlZWRlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjksNyArNjksNyBAQCBSR0JBMzIgY3VycmVudENvbG9yKEhUTUxDYW52YXNFbGVtZW50KiBjCiAg
ICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm4g
Q29sb3I6OmJsYWNrOwogICAgIFJHQkEzMiByZ2JhID0gQ29sb3I6OmJsYWNrOwotICAgIENTU1Bh
cnNlcjo6cGFyc2VDb2xvcihyZ2JhLCBjYW52YXMtPnN0eWxlKCktPmdldFByb3BlcnR5VmFsdWUo
Q1NTUHJvcGVydHlDb2xvcikpOworICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihyZ2JhLCBjYW52
YXMtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5
Q29sb3IpKTsKICAgICByZXR1cm4gcmdiYTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTA2MTk4KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDg1LDcgKzEwODUsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnJldmFsaWRhdGVTdHlsCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fZmxhdFJ1
bGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBDU1NTdHlsZVJ1bGUqIHBhcnNl
ZFJ1bGUgPSBtX2ZsYXRSdWxlcy5hdChpKTsKICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxl
KCkgPT0gcGFnZVN0eWxlKSB7Ci0gICAgICAgICAgICBpZiAocGFyc2VkUnVsZS0+c3R5bGUoKS0+
Y3NzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKSB7CisgICAgICAgICAgICBpZiAocGFy
c2VkUnVsZS0+c3R5bGUoKS0+YXNUZXh0KCkgIT0gcGFnZVN0eWxlLT5jc3NUZXh0KCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZGlzYWJsZWQgcHJvcGVydGllcyBmb3IgdGhlIGlu
dmFsaWQgc3R5bGUgaGVyZS4KICAgICAgICAgICAgICAgICBtX2luc3BlY3RvclN0eWxlcy5yZW1v
dmUocGFnZVN0eWxlKTsKICAgICAgICAgICAgICAgICBzZXRTdHlsZVRleHQocGFnZVN0eWxlLCBw
YWdlU3R5bGUtPmNzc1RleHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNywxMiArMzE3LDkgQEAgdm9pZCBQYWdl
U2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNGbwogICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWlt
YWdlIGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3Bl
cnRpZXMKICAgICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtl
IHN1cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKICAgICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJl
IG1pZ2h0IGJlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9u
LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgcmlkaWN1
bG91cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0Ci0gICAgICAgIC8vIHRo
ZSB2YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBv
dXQgb2YgdGhlCi0gICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlv
biBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0eQotICAgICAgICAvLyBuYW1lcywgbm90IElE
cy4KLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24t
PmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAgdW5z
aWduZWQgcHJvcGVydHlDb3VudCA9IHN0eWxlRGVjbGFyYXRpb24tPnByb3BlcnR5Q291bnQoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7CisgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0
eUF0KGkpLnZhbHVlKCk7CiAgICAgICAgIGlmICghY3NzVmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0
LDcgKzE4NCw3IEBAIHN0YXRpYyBib29sIGlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVMKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5s
aW5lU3R5bGVEZWNsID0gZWxlbS0+aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgcmV0dXJuICghaW5s
aW5lU3R5bGVEZWNsIHx8IGlubGluZVN0eWxlRGVjbC0+bGVuZ3RoKCkgPT0gMCk7CisgICAgcmV0
dXJuICghaW5saW5lU3R5bGVEZWNsIHx8IGlubGluZVN0eWxlRGVjbC0+aXNFbXB0eSgpKTsKIH0K
IAogU3RyaW5nIHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhjb25zdCBTdHJpbmcmIHMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDYx
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzNyw3ICs0MzcsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBTVkdTdHlsZWRF
bGVtZW50OjpnCiAgICAgICAgIGludCBwcm9wSWQgPSBTVkdTdHlsZWRFbGVtZW50Ojpjc3NQcm9w
ZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZShjc3NTVkdBdHRyLT5uYW1lKCkpOwogICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShjc3NTVkdBdHRyLCBwcm9wSWQsIGNzc1NWR0F0dHItPnZhbHVlKCkpOwog
ICAgIH0KLSAgICByZXR1cm4gY3NzU1ZHQXR0ci0+ZGVjbCgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KG5hbWUpOworICAgIHJldHVybiBjc3NTVkdBdHRyLT5kZWNsKCktPmdldFByb3BlcnR5Q1NTVmFs
dWUoY3NzUHJvcGVydHlJRChuYW1lKSk7CiB9CiAKIGJvb2wgU1ZHU3R5bGVkRWxlbWVudDo6aW5z
dGFuY2VVcGRhdGVzQmxvY2tlZCgpIGNvbnN0Cg==
</data>
<flag name="commit-queue"
          id="125722"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124503</attachid>
            <date>2012-01-30 00:21:19 -0800</date>
            <delta_ts>2012-01-30 00:34:20 -0800</delta_ts>
            <desc>try to fix qt build</desc>
            <filename>cssstyledeclaration-cleanup-8.patch</filename>
            <type>text/plain</type>
            <size>63349</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0wMS0yOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIG5vbi1DU1NPTSBB
UEkgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzcyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uIHNob3VsZCBleHBvc2UgdGhlIENT
U09NIEFQSSBvbmx5LiBTdWJjbGFzc2VzIHNob3VsZCBleHBvc2UgdGhlIGludGVybmFsIEFQSSBv
bmx5LiAKKyAgICAgICAgVGhpcyB3aWxsIG1vdmUgdXMgY2xvc2VyIHRvIGJlaW5nIGFibGUgdG8g
c3BsaXQgdGhlIENTU09NIEFQSSBmcm9tIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIC0gTWFrZSBDU1NTdHlsZURlY2xhcmF0aW9uIENTU09NIGZ1bmN0aW9u
cyB2aXJ0dWFsLCBpbnRlcm5hbCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuCisgICAgICAgIC0gTW92
ZSBpbXBsZW1lbnRhdGlvbnMgdG8gc3ViY2xhc3NlcyAoQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbikuCisgICAgICAgIC0gTWFrZSBDU1NPTSBm
dW5jdGlvbnMgaW4gdGhlIHN1YmNsYXNzZXMgcHJpdmF0ZSAobWFraW5nIGl0IGhhcmRlciB0byBp
bnZva2UgdGhlbSBpbnRlcm5hbGx5KS4KKyAgICAgICAgLSBTd2l0Y2ggYSBidW5jaCBvZiBwbGFj
ZXMgdG8gdXNlIGludGVybmFsIEFQSSBpbnN0ZWFkIG9mIENTU09NLgorCisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOENTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkUHJvcGVydHlHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lZFByb3BlcnR5U2V0
dGVyKToKKyAgICAgICAgCisgICAgICAgICAgICBTd2l0Y2ggdG8gKkludGVybmFsIHZlcnNpb25z
IG9mIHRoZSBDU1NPTSBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9w
ZXJ0aWVzSW5TZXQpOgorICAgICAgICAKKyAgICAgICAgICAgIE1vdmUgY29weVByb3BlcnRpZXNJ
blNldCB0byBzdWJjbGFzc2VzLCBkZXZpcnR1YWxpemUuCisgICAgICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFBy
b3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVBy
b3BlcnR5KToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6Cisg
ICAgICAgIChDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAqIGNzcy9DU1NG
b250RmFjZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxlOjpjc3NU
ZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppc1Byb3Bl
cnR5SW1wbGljaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIAorICAgICAgICAg
ICAgTW92ZSBjb3B5UHJvcGVydGllc0luU2V0IHRvIHN1YmNsYXNzZXMsIGRldmlydHVhbGl6ZS4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3NzUHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyk6CisgICAgICAgIAorICAgICAg
ICAgICAgTW92ZSBkaWZmKCkgdG8gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24sIHJlbmFtZSB0
byByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcywgc3dpdGNoIHRvIG11dGF0ZQorICAgICAgICAg
ICAgdGhpcyBvYmplY3QgaW5zdGVhZCBvZiB0aGUgYXJndW1lbnQgb2JqZWN0LgorICAgIAorICAg
ICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OnByb3BlcnR5Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnByb3BlcnR5QXQpOgorICAgICAgICAKKyAgICAgICAgICAgIEV4
cG9zZSBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSBjb3VudCBpbnRlcm5hbGx5IChpdGVyYXRvciBz
aG91bGQgYmUgcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGVzZSkuCisgICAgICAgIAorICAgICAgICAq
IGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIChDU1NTdHlsZURlY2xhcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbCk6CisgICAgICAgIAorICAgICAgICAgICAg
QWRkICpJbnRlcm5hbCB2ZXJzaW9ucyBvZiBzb21lIENTU09NIEFQSXMgdG8gc3VwcG9ydCBzb21l
IGVkaXRpbmcgYW5kIGJpbmRpbmdzIHVzZXMuCisgICAgICAgICAgICBUaGVzZSB0YWtlIHByb3Bl
cnR5SURzIGluc3RlYWQgb2Ygc3RyaW5ncyBuYW1lcy4KKworICAgICAgICAqIGNzcy9DU1NTdHls
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpjc3NUZXh0KToKKyAg
ICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0
VG9SaWdodERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lUnVs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQp
OgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2spOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZVRvUHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJs
b2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGlu
ZVN0eWxlSWZOZWVkZWQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAg
ICAgICAgKCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5RWRpdGluZ1Byb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUNTU1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFJHQkFGb250Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dGluZ1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnJlbW92ZVN0eWxlQWRkZWRCeU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW5nV2l0aFN0eWxlT2ZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRpbmdTdHlsZTo6c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5bGVPZk5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlbW92ZVByb3BlcnRpZXNJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERlZmF1bHRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udFdlaWdodElzQm9sZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQ
cm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SWRlbnRpZmllclZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6Omhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAKKyAgICAgICAgICAgIEFkYXB0
IHRvIGNoYW5nZXMuCisgICAgCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5s
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxl
U3BhbnMpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dHlsZU5vZGVPcGVuVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzaXplSW1hZ2VUb0ZpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OndpbmRvd1NpemVDaGFuZ2VkKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50Q29sb3IpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZSk6CisgICAgICAgICog
cGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXpl
cjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eU9yVW5z
dHlsZWRBcHBsZVN0eWxlU3Bhbik6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6Z2V0UHJlc2VudGF0aW9uQXR0
cmlidXRlKToKKwogMjAxMi0wMS0yOCAgQWxleGFuZGVyIEbDpnLDuHkgIDxhaGZAMHg5MC5kaz4K
IAogICAgICAgICBbUXRdIFJlbW92ZSByZWZlcmVuY2VzIHRvIENTU0JvcmRlckltYWdlVmFsdWUu
aCBpbiBUYXJnZXQucHJpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsy
MDIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAgICAg
IHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJh
dGlvbiogaW1wID0gVjhDU1NTdHlsZURlY2xhcmF0aW9uOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gaW1wLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKHByb3BJbmZvLT5wcm9wSUQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBp
bXAtPmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlE
Pihwcm9wSW5mby0+cHJvcElEKSk7CiAgICAgaWYgKGNzc1ZhbHVlKSB7CiAgICAgICAgIGlmIChw
cm9wSW5mby0+aGFkUGl4ZWxPclBvc1ByZWZpeCAmJgogICAgICAgICAgICAgY3NzVmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkgewpAQCAtMjEyLDcgKzIxMiw3IEBAIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOENTU1N0eWxlRGVjbGFyYXQKICAgICAgICAgcmV0dXJuIHY4U3RyaW5nT3JOdWxsKGNz
c1ZhbHVlLT5jc3NUZXh0KCkpOwogICAgIH0KIAotICAgIFN0cmluZyByZXN1bHQgPSBpbXAtPmdl
dFByb3BlcnR5VmFsdWUocHJvcEluZm8tPnByb3BJRCk7CisgICAgU3RyaW5nIHJlc3VsdCA9IGlt
cC0+Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHBy
b3BJbmZvLT5wcm9wSUQpKTsKICAgICBpZiAocmVzdWx0LmlzTnVsbCgpKQogICAgICAgICByZXN1
bHQgPSAiIjsgIC8vIGNvbnZlcnQgbnVsbCB0byBlbXB0eSBzdHJpbmcuCiAKQEAgLTIzMiw3ICsy
MzIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAgICAg
IHByb3BlcnR5VmFsdWUuYXBwZW5kKCJweCIpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgaW1wLT5zZXRQcm9wZXJ0eShwcm9wSW5mby0+cHJvcElELCBwcm9wZXJ0eVZhbHVlLCBm
YWxzZSwgZWMpOworICAgIGltcC0+c2V0UHJvcGVydHlJbnRlcm5hbChzdGF0aWNfY2FzdDxDU1NQ
cm9wZXJ0eUlEPihwcm9wSW5mby0+cHJvcElEKSwgcHJvcGVydHlWYWx1ZSwgZmFsc2UsIGVjKTsK
IAogICAgIGlmIChlYykKICAgICAgICAgdGhyb3dFcnJvcihlYyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNp
b24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NC
b3JkZXJJbWFnZS5oIgogI2luY2x1ZGUgIkNTU0xpbmVCb3hDb250YWluVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZl
VmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCkBAIC0yNDc1LDI0ICsy
NDc2LDggQEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UAogICAgIHJl
dHVybiAiIjsKIH0KIAotYm9vbCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5UHJpb3JpdHkoaW50IC8qcHJvcGVydHlJRCovKSBjb25zdAotewotICAgIC8vIEFsbCBjb21w
dXRlZCBzdHlsZXMgaGF2ZSBhIHByaW9yaXR5IG9mIGZhbHNlIChub3QgImltcG9ydGFudCIpLgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bjo6cmVtb3ZlUHJvcGVydHkoaW50IC8qcHJvcGVydHlJRCovLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19CiAKLXZvaWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0
eShpbnQgLypwcm9wZXJ0eUlEKi8sIGNvbnN0IFN0cmluZyYgLyp2YWx1ZSovLCBib29sIC8qaW1w
b3J0YW50Ki8sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSOwotfQotCi11bnNpZ25lZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OnZpcnR1YWxMZW5ndGgoKSBjb25zdAordW5zaWduZWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpsZW5ndGgoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSBtX25vZGUuZ2V0KCk7CiAg
ICAgaWYgKCFub2RlKQpAQCAtMjUyNSw4ICsyNTEwLDggQEAgYm9vbCBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmNzc1BybwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQotCi0gICAgcmV0dXJuIENTU1N0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5
TWF0Y2hlcyhwcm9wZXJ0eSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3Bl
cnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOworICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+
Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7CiB9CiAKIFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bjo6Y29weSgpIGNvbnN0CkBAIC0yNTc3LDQgKzI1NjIsNzQgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZUxpc3Q+IENTU0NvbXB1dGVkU3R5bAogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KIAor
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpIGNvbnN0Cit7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5PiBsaXN0OworICAgIGxpc3Qu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0
UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAg
ICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2Up
KTsKKyAgICB9CisgICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUo
bGlzdCk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sK
KyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBp
ZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworfQorCitTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQorewor
ICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlm
ICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBnZXRQ
cm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOworfQorCitTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8g
QWxsIGNvbXB1dGVkIHN0eWxlcyBoYXZlIGEgcHJpb3JpdHkgb2Ygbm90ICJpbXBvcnRhbnQiLgor
ICAgIHJldHVybiAiIjsKK30KKworU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gIiI7Cit9
CisKK2Jvb2wgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQo
Y29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUjsKK30KKworU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorICAgIAorUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlEKQoreworICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwor
fQorCitTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVl
SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAgIHJldHVybiBnZXRQcm9w
ZXJ0eVZhbHVlKHByb3BlcnR5SUQpOworfQorCit2b2lkIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBi
b29sLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTA2
MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIFBh
c3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlKFBhc3NS
ZWZQdHI8Tm9kZT4sIGJvb2wgYWxsb3dWaXNpdGVkU3R5bGUsIGNvbnN0IFN0cmluZyYgcHNldWRv
RWxlbWVudE5hbWUpOwogICAgIHZpcnR1YWwgfkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbigp
OwogCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB1
bnNpZ25lZCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwg
U3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgLypwcm9wZXJ0eUlEKi8pIGNvbnN0
IHsgcmV0dXJuIC0xOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQg
Lypwcm9wZXJ0eUlEKi8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CisgICAg
U3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OworICAgIGJvb2wg
Z2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRh
YmxlKCk7CkBAIC03MSwxNiArNjQsMjggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IGdldFNWR1Byb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQsIEVVcGRhdGVMYXlvdXQp
IGNvbnN0OwogI2VuZGlmCiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgY3NzUHJvcGVy
dHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNl
dCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24oUGFzc1JlZlB0cjxOb2RlPiwgYm9vbCBhbGxvd1Zpc2l0ZWRTdHlsZSwg
Y29uc3QgU3RyaW5nJik7CiAKKyAgICAvLyBDU1NPTSBmdW5jdGlvbnMuIERvbid0IG1ha2UgdGhl
c2UgcHVibGljLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgdmly
dHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVByaW9yaXR5
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9w
ZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBi
b29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAg
dmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3Bl
cnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJv
cGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGlt
cG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0
Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0OwogCiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gdmFsdWVGb3JTaGFkb3coY29uc3QgU2hhZG93RGF0YSosIGludCwgUmVuZGVyU3R5bGUqKSBj
b25zdDsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZh
bGlkQ29sb3IoUmVuZGVyU3R5bGUqLCBjb25zdCBDb2xvciYpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3
ICs0Miw3IEBAIFN0cmluZyBDU1NGb250RmFjZVJ1bGU6OmNzc1RleHQoKSBjb25zdAogewogICAg
IFN0cmluZyByZXN1bHQoIkBmb250LWZhY2UiKTsKICAgICByZXN1bHQgKz0gIiB7ICI7Ci0gICAg
cmVzdWx0ICs9IG1fc3R5bGUtPmNzc1RleHQoKTsKKyAgICByZXN1bHQgKz0gbV9zdHlsZS0+YXNU
ZXh0KCk7CiAgICAgcmVzdWx0ICs9ICJ9IjsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3Bw
CShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjYsOSArODI2LDkgQEAgdm9pZCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YWRkUGFycwogI2VuZGlmCiB9CiAKLXVuc2lnbmVk
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjp2aXJ0dWFsTGVuZ3RoKCkgY29uc3QKK3Vuc2ln
bmVkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAogewotICAgIHJl
dHVybiBsZW5ndGgoKTsKKyAgICByZXR1cm4gcHJvcGVydHlDb3VudCgpOwogfQogCiBTdHJpbmcg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKQEAgLTgz
OCw3ICs4MzgsNyBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0ZW0oCiAg
ICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihtX3By
b3BlcnRpZXNbaV0uaWQoKSkpOwogfQogCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmNzc1RleHQoKSBjb25zdAorU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjph
c1RleHQoKSBjb25zdAogewogICAgIFN0cmluZyByZXN1bHQgPSAiIjsKIApAQCAtMTA1Miw0ICsx
MDUyLDExOSBAQCBDU1NQcm9wZXJ0eSogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246CiAgICAg
cmV0dXJuIDA7CiB9CiAKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzVGV4dCgpOworfQorCitQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3Bl
cnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworfQorCitT
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUoY29uc3Qg
U3RyaW5nICZwcm9wZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7Cit9CisK
K1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1By
b3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eUlE
KSA/ICJpbXBvcnRhbnQiIDogIiI7Cit9CisKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7
CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAg
aWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaW50IHNob3J0
aGFuZElEID0gZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcGVydHlJRCk7CisgICAgaWYgKCFzaG9y
dGhhbmRJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBnZXRQcm9wZXJ0
eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oc2hvcnRoYW5kSUQpKTsKK30KKworYm9v
bCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydHlJRCk7Cit9CisKK3Zv
aWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5
SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybjsK
KyAgICBib29sIGltcG9ydGFudCA9IHByaW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNl
KSAhPSBub3RGb3VuZDsKKyAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0
YW50LCBlYyk7Cit9CisKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3Zl
UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAg
IGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBy
ZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreyAKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsgCit9CisKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3sg
CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7IAorfQorCit2b2lkIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreyAKKyAgICByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFs
dWUsIGltcG9ydGFudCwgZWMpOyAKK30KKworUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0aWVzSW5TZXQo
Y29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q1NT
UHJvcGVydHk+IGxpc3Q7CisgICAgbGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7CisgICAg
ICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtp
XSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOworICAgIH0KKyAgICByZXR1cm4gQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShsaXN0KTsKK30KKworYm9vbCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9w
ZXJ0eSkgY29uc3QKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlD
U1NWYWx1ZShwcm9wZXJ0eS0+aWQoKSk7CisgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLT5jc3NU
ZXh0KCkgPT0gcHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKTsKK30KKwordm9pZCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgVmVjdG9yPGludD4gcHJvcGVydGllc1Rv
UmVtb3ZlOworICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAg
ICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW2ldOworICAgICAg
ICAgICAgaWYgKHN0eWxlLT5jc3NQcm9wZXJ0eU1hdGNoZXMoJnByb3BlcnR5KSkKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5kKHByb3BlcnR5LmlkKCkpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1v
dmFsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6
ZSgpOyBpKyspCisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAxMDYxOTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgeyAKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihlbGVtZW50LCBmYWxzZSkpOwog
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcm
KTsKIAogICAgIC8vIFVzZWQgYnkgU3R5bGVkRWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3Bl
cnRpZXMoKS4KICAgICB2b2lkIGNvcHlQcm9wZXJ0aWVzRnJvbShjb25zdCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiYpOwpAQCAtOTIsMjcgKzk0LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdF9p
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMsIG1fcHJvcGVydGll
cy5iZWdpbigpKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGNvbnN0X2l0
ZXJhdG9yKHRoaXMsIG1fcHJvcGVydGllcy5lbmQoKSk7IH0KIAotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJp
bmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydGllcy5zaXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnRpZXMuaXNFbXB0eSgpOyB9CisgICAgY29uc3QgQ1NTUHJvcGVy
dHkmIHByb3BlcnR5QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGll
c1tpbmRleF07IH0KKworICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OworICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHBy
b3BlcnR5SUQpIGNvbnN0OworICAgIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVy
dHlJRCkgY29uc3Q7CisgICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQp
IGNvbnN0OwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3Q7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLnNpemUoKTsg
fQotCi0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHBy
b3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50
IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5
KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0
aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJ
bXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJv
cGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFByb3BlcnR5KGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0
aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBjb3B5KCkgY29uc3Q7CiAKLSAgICB1c2luZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eUNTU1ZhbHVlOwotCiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9wZXJ0
eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsgfQogICAgIGJvb2wgc2V0UHJv
cGVydHkoaW50IHByb3BlcnR5SWQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9wZXJ0
eShwcm9wZXJ0eUlkLCB2YWx1ZSwgdW5pdCwgaW1wb3J0YW50LCB0cnVlKTsgfQogICAgIGJvb2wg
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBp
bXBvcnRhbnQsIHRydWUpOyB9CkBAIC0xMzgsNiArMTM0LDEyIEBAIHB1YmxpYzoKICAgICBib29s
IHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KIAog
ICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKTsKKyAg
ICAKKyAgICB2b2lkIHJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IENTU1N0eWxlRGVj
bGFyYXRpb24qKTsKKworICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29u
c3Q7CisKKyAgICBTdHJpbmcgYXNUZXh0KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwpAQCAtMTUzLDYgKzE1NSwyMiBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtl
TXV0YWJsZSgpOwogCisgICAgLy8gQ1NTT00gZnVuY3Rpb25zLiBEb24ndCBtYWtlIHRoZXNlIHB1
YmxpYy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwg
U3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlT
aG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgYm9vbCBp
c1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJ
bnRlcm5hbChDU1NQcm9wZXJ0eUlEKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZh
bHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCk7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5
SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQsIEV4Y2VwdGlvbkNvZGUmKTsKKwogICAgIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwog
CiAgICAgU3RyaW5nIGdldFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgc2l6
ZV90KSBjb25zdDsKQEAgLTE3Myw2ICsxOTEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVtb3Zl
U2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7CiAg
ICAgYm9vbCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKIAorICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0
eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsKKwogICAgIFZlY3RvcjxDU1NQcm9w
ZXJ0eT46OmNvbnN0X2l0ZXJhdG9yIGZpbmRQcm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJZCkg
Y29uc3Q7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5Pjo6aXRlcmF0b3IgZmluZFByb3BlcnR5V2l0
aElkKGludCBwcm9wZXJ0eUlkKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
RGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMDkgKzc3LDEx
IEBAIENTU1N0eWxlU2hlZXQqIENTU1N0eWxlRGVjbGFyYXRpb246OnBhcmUKICAgICByZXR1cm4g
bV9wYXJlbnQucnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOwogfQogCi1QYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3Bl
cnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BJRCk7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewot
ICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFw
cm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlW
YWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElE
ID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5UHJpb3JpdHkocHJvcElE
KSA/ICJpbXBvcnRhbnQiIDogIiI7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBp
bnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElE
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaW50IHNob3J0aGFuZElEID0gZ2V0UHJv
cGVydHlTaG9ydGhhbmQocHJvcElEKTsKLSAgICBpZiAoIXNob3J0aGFuZElEKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxD
U1NQcm9wZXJ0eUlEPihzaG9ydGhhbmRJRCkpOwotfQotCi1ib29sIENTU1N0eWxlRGVjbGFyYXRp
b246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJv
cElEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzUHJvcGVydHlJbXBsaWNp
dChwcm9wSUQpOwotfQotCi12b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJp
bmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnQgcHJvcElEID0gY3Nz
UHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1
cm47Ci0gICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBm
YWxzZSkgIT0gbm90Rm91bmQ7Ci0gICAgc2V0UHJvcGVydHkocHJvcElELCB2YWx1ZSwgaW1wb3J0
YW50LCBlYyk7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0
eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJ
RCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShw
cm9wSUQsIGVjKTsKLX0KLQogYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5TmFt
ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKICAgICByZXR1cm4gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIENTU1N0eWxlRGVjbGFyYXRpb246OmNzc1Byb3Bl
cnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkp
OwotICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1
ZSgpLT5jc3NUZXh0KCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZihDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdHlsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOwot
ICAgIHsKLSAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHN0eWxlLT5lbmQoKTsKLSAgICAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7Ci0gICAg
ICAgICAgICBpZiAoY3NzUHJvcGVydHlNYXRjaGVzKCZwcm9wZXJ0eSkpCi0gICAgICAgICAgICAg
ICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgbWFzcyByZW1vdmFsLgotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgpOyBpKysp
Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzVG9SZW1vdmVbaV0pOwot
fQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NTdHlsZURlY2xh
cmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPENTU1Byb3BlcnR5PiBsaXN0OwotICAgIGxpc3QucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJv
cGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBs
aXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobGlz
dCk7Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiB2b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OnNob3dT
dHlsZSgpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJ
KHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgQ1NTU3R5bGVE
ZWNsYXJhdGlvbl9oCiAjZGVmaW5lIENTU1N0eWxlRGVjbGFyYXRpb25faAogCisjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogCkBAIC01MSwzNSArNTIsMjYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChj
b25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gdmlydHVhbExlbmd0aCgpOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25l
ZCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuICFsZW5ndGgoKTsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsK
LQotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5k
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBib29sIGlzUHJvcGVydHlJbXBsaWNp
dChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5
SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQg
cHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGlj
aXQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLQotICAgIHZvaWQgc2V0UHJvcGVydHkoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHko
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHJl
bW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFs
dWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBn
ZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSA9IDA7CisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJp
bmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHJl
bW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJikg
PSAwOworCisgICAgLy8gQ1NTUHJvcGVydHlJRCB2ZXJzaW9ucyBvZiB0aGUgQ1NTT00gZnVuY3Rp
b25zIHRvIHN1cHBvcnQgYmluZGluZ3MgYW5kIGVkaXRpbmcuCisgICAgLy8gVXNlIHRoZSBub24t
dmlydHVhbCBtZXRob2RzIGluIHRoZSBjb25jcmV0ZSBzdWJjbGFzc2VzIHdoZW4gcG9zc2libGUu
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50
ZXJuYWwoQ1NTUHJvcGVydHlJRCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5
VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFBy
b3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0g
MDsKIAotICAgIHZvaWQgZGlmZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0Owot
Ci0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRp
ZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29uc3QgPSAw
OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgc2hvd1N0eWxlKCk7CkBAIC05Miw4ICs4NCw2
IEBAIHByb3RlY3RlZDoKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1
bGUgPSAwKTsKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlZEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQsIGJvb2wgaXNJbmxpbmUpOwogCi0gICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0
Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0OwotCiAgICAgLy8gVGhlIGJpdHMgaW4gdGhp
cyBzZWN0aW9uIGFyZSBvbmx5IHVzZWQgYnkgc3BlY2lmaWMgc3ViY2xhc3NlcyBidXQga2VwdCBo
ZXJlCiAgICAgLy8gdG8gbWF4aW1pemUgc3RydWN0IHBhY2tpbmcuCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBA
IFN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1RleHQoKSBjb25zdAogICAgIFN0cmluZyByZXN1bHQg
PSBzZWxlY3RvclRleHQoKTsKIAogICAgIHJlc3VsdCArPSAiIHsgIjsKLSAgICByZXN1bHQgKz0g
bV9zdHlsZS0+Y3NzVGV4dCgpOworICAgIHJlc3VsdCArPSBtX3N0eWxlLT5hc1RleHQoKTsKICAg
ICByZXN1bHQgKz0gIn0iOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcg
KzI5OSw3IEBAIHN0YXRpYyBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBwcmludEUKIHN0YXRp
YyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCiB7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+LCBsZWZ0VG9SaWdodERlY2wsIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KCkpKTsKLSAgICBpZiAoIWxlZnRUb1JpZ2h0RGVjbC0+bGVuZ3RoKCkpCisgICAgaWYgKGxlZnRU
b1JpZ2h0RGVjbC0+aXNFbXB0eSgpKQogICAgICAgICBsZWZ0VG9SaWdodERlY2wtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZUx0cik7CiAgICAgcmV0dXJuIGxlZnRU
b1JpZ2h0RGVjbC5nZXQoKTsKIH0KQEAgLTMwNyw3ICszMDcsNyBAQCBzdGF0aWMgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIGxlZnRUCiBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwgcmlnaHRUb0xlZnREZWNsLCAoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpKSk7Ci0gICAgaWYgKCFyaWdodFRvTGVm
dERlY2wtPmxlbmd0aCgpKQorICAgIGlmIChyaWdodFRvTGVmdERlY2wtPmlzRW1wdHkoKSkKICAg
ICAgICAgcmlnaHRUb0xlZnREZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwg
Q1NTVmFsdWVSdGwpOwogICAgIHJldHVybiByaWdodFRvTGVmdERlY2wuZ2V0KCk7CiB9CkBAIC03
ODAsNyArNzgwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRp
ZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAg
ICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRp
b24oKTsKLSAgICAgICAgICAgIGlmICghZGVjbCB8fCAoIWRlY2wtPmxlbmd0aCgpICYmICFpbmNs
dWRlRW1wdHlSdWxlcykpIHsKKyAgICAgICAgICAgIGlmICghZGVjbCB8fCAoZGVjbC0+aXNFbXB0
eSgpICYmICFpbmNsdWRlRW1wdHlSdWxlcykpIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTI1MjYsNyArMjUyNiw3IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXNGb3IKIAogICAgICAgICAvLyBJZiB0aGUg
cnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCiAgICAgICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsK
LSAgICAgICAgaWYgKCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgoKSkKKyAgICAgICAgaWYgKCFkZWNs
IHx8IGRlY2wtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8v
IEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0Y2hlZCBydWxlcy4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCShyZXZpc2lvbiAxMDYx
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBTdHJpbmcgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
Ojpjc3NUZXh0KCkgCiAgICAgU3RyaW5nIHJlc3VsdCA9IG1fa2V5OwogCiAgICAgcmVzdWx0ICs9
ICIgeyAiOwotICAgIHJlc3VsdCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7CisgICAgcmVzdWx0ICs9
IG1fc3R5bGUtPmFzVGV4dCgpOwogICAgIHJlc3VsdCArPSAifSI7CiAKICAgICByZXR1cm4gcmVz
dWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTA2
MTk4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRhdGVTdHlsZUF0
dHJpYnV0ZQogICAgIHNldElzU3R5bGVBdHRyaWJ1dGVWYWxpZCgpOwogICAgIHNldElzU3luY2hy
b25pemluZ1N0eWxlQXR0cmlidXRlKCk7CiAgICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBpbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlRGVjbCgpKQotICAgICAgICBjb25zdF9jYXN0
PFN0eWxlZEVsZW1lbnQqPih0aGlzKS0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgaW5saW5lU3R5
bGUtPmNzc1RleHQoKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHRoaXMp
LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogICAgIGNs
ZWFySXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNjE5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlS
ZWxhdGl2ZUZvbgogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50Rm9udFNpemUgIT0gZGVz
aXJlZEZvbnRTaXplKSB7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZURlY2wtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udFNpemUsIFN0cmluZzo6bnVtYmVyKGRlc2lyZWRGb250U2l6ZSkgKyAi
cHgiLCBmYWxzZSk7Ci0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQuZ2V0KCks
IHN0eWxlQXR0ciwgaW5saW5lU3R5bGVEZWNsLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgc2V0
Tm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIsIGlubGluZVN0eWxlRGVjbC0+
YXNUZXh0KCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbmxpbmVTdHlsZURlY2wtPmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBz
dHlsZUF0dHIpOwpAQCAtNTE1LDcgKzUxNSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUVtYmVkZGluZ1UKICAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+Y29w
eSgpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5p
Y29kZUJpZGksIENTU1ZhbHVlTm9ybWFsKTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5yZW1v
dmVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbik7Ci0gICAgICAgICAgICBzZXROb2RlQXR0
cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmNzc1RleHQoKSk7CisgICAg
ICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUt
PmFzVGV4dCgpKTsKICAgICAgICAgICAgIGlmIChpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5z
dHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbihlbGVtZW50KTsKICAgICAgICAgfQpAQCAtNzI4LDcgKzcyOCw3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKICAgICAgICAgICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1
cmVJbmxpbmVTdHlsZURlY2woKS0+Y29weSgpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPm1l
cmdlKHN0eWxlLT5zdHlsZSgpKTsKLSAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVu
dCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHNldE5v
ZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwog
ICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC05NDMsNyArOTQzLDcgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgIC8vIFNpbmNlIGFkZElubGluZVN0eWxl
SWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0byBibG9jay1mbG93IHJlbmRlciBvYmplY3RzLCBh
ZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IGFwcGx5SW5saW5lU3R5
bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhlcmUgaW5zdGVhZC4KICAgICBpZiAoKG5vZGUtPnJl
bmRlcmVyKCktPmlzQmxvY2tGbG93KCkgfHwgbm9kZS0+Y2hpbGROb2RlQ291bnQoKSkgJiYgbm9k
ZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIHNldE5vZGVBdHRyaWJ1dGUodG9IVE1MRWxl
bWVudChub2RlKSwgc3R5bGVBdHRyLCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgp
KTsKKyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSh0b0hUTUxFbGVtZW50KG5vZGUpLCBzdHlsZUF0
dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTEzMTIsNyArMTMxMiw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFk
ZEJsb2NrU3R5bGUoY28KICAgICAgICAgCiAgICAgU3RyaW5nIGNzc1RleHQgPSBzdHlsZUNoYW5n
ZS5jc3NTdHlsZSgpOwogICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCA9
IGJsb2NrLT5pbmxpbmVTdHlsZURlY2woKSkKLSAgICAgICAgY3NzVGV4dCArPSBkZWNsLT5jc3NU
ZXh0KCk7CisgICAgICAgIGNzc1RleHQgKz0gZGVjbC0+YXNUZXh0KCk7CiAgICAgc2V0Tm9kZUF0
dHJpYnV0ZShibG9jaywgc3R5bGVBdHRyLCBjc3NUZXh0KTsKIH0KIApAQCAtMTM3Nyw3ICsxMzc3
LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZgogICAgIGlmIChz
dHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CiAgICAgICAgIGlmIChzdHlsZUNvbnRh
aW5lcikgewogICAgICAgICAgICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBleGlz
dGluZ1N0eWxlID0gc3R5bGVDb250YWluZXItPmlubGluZVN0eWxlRGVjbCgpKQotICAgICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgZXhpc3Rp
bmdTdHlsZS0+Y3NzVGV4dCgpICsgc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSk7CisgICAgICAgICAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBleGlzdGlu
Z1N0eWxlLT5hc1RleHQoKSArIHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0
eWxlQXR0ciwgc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSk7CiAgICAgICAgIH0gZWxzZSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAxMDYxOTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDcgKzgyLDggQEAgc3RhdGljIGNvbnN0IGludCBlZGl0aW5nUHJvcGVydGllc1td
ID0gewogCiBlbnVtIEVkaXRpbmdQcm9wZXJ0aWVzVHlwZSB7IE9ubHlJbmhlcml0YWJsZUVkaXRp
bmdQcm9wZXJ0aWVzLCBBbGxFZGl0aW5nUHJvcGVydGllcyB9OwogCi1zdGF0aWMgUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBFZGl0aW5nUHJvcGVydGllc1R5cGUgdHlwZSA9IE9ubHlJ
bmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKQordGVtcGxhdGUgPGNsYXNzIFN0eWxlRGVjbGFy
YXRpb25UeXBlPgorc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGNvcHlFZGl0aW5nUHJvcGVydGllcyhTdHlsZURlY2xhcmF0aW9uVHlwZSogc3R5bGUsIEVkaXRp
bmdQcm9wZXJ0aWVzVHlwZSB0eXBlID0gT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMp
CiB7CiAgICAgaWYgKHR5cGUgPT0gQWxsRWRpdGluZ1Byb3BlcnRpZXMpCiAgICAgICAgIHJldHVy
biBzdHlsZS0+Y29weVByb3BlcnRpZXNJblNldChlZGl0aW5nUHJvcGVydGllcywgV1RGX0FSUkFZ
X0xFTkdUSChlZGl0aW5nUHJvcGVydGllcykpOwpAQCAtMTA0LDYgKzEwNSwxMSBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhCiAgICAgICAgIHJldHVybiBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgcmV0dXJuIGNvcHlFZGl0aW5nUHJv
cGVydGllcyhzdHlsZS5nZXQoKSwgdHlwZSk7CiB9CisgICAgCitzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHByb3BlcnR5Q1NTVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGVEZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAgIHJldHVybiBz
dHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwocHJvcGVydHlJRCk7
Cit9CiAKIHN0YXRpYyBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdldFByb3Bl
cnRpZXNOb3RJbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0
aWVzLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBiYXNlU3R5bGUpOwogZW51bSBMZWdhY3lGb250U2l6
ZU1vZGUgeyBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSwgVXNlTGVnYWN5Rm9udFNpemVPbmx5SWZQ
aXhlbFZhbHVlc01hdGNoIH07CkBAIC0zNDcsNyArMzUzLDcgQEAgc3RhdGljIFJHQkEzMiBjc3NW
YWx1ZVRvUkdCQShDU1NWYWx1ZSogYwogCiBzdGF0aWMgaW5saW5lIFJHQkEzMiBnZXRSR0JBRm9u
dENvbG9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewotICAgIHJldHVybiBjc3NWYWx1
ZVRvUkdCQShzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKS5nZXQo
KSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKHByb3BlcnR5Q1NTVmFsdWUoc3R5bGUsIENT
U1Byb3BlcnR5Q29sb3IpLmdldCgpKTsKIH0KIAogc3RhdGljIGlubGluZSBSR0JBMzIgcmdiYUJh
Y2tncm91bmRDb2xvckluRWZmZWN0KE5vZGUqIG5vZGUpCkBAIC00ODIsNyArNDg4LDcgQEAgdm9p
ZCBFZGl0aW5nU3R5bGU6OnNldFN0eWxlKFBhc3NSZWZQdHI8QwogCiB2b2lkIEVkaXRpbmdTdHls
ZTo6b3ZlcnJpZGVXaXRoU3R5bGUoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKQogewotICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fbXV0
YWJsZVN0eWxlKQogICAgICAgICBtX211dGFibGVTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjcmVhdGUoKTsKQEAgLTU0Nyw4ICs1NTMsOCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6
cmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHBhcmVudFN0eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1
dGVkU3R5bGUoY29tcHV0ZWRTdHlsZShub2RlLT5wYXJlbnROb2RlKCkpLCBBbGxFZGl0aW5nUHJv
cGVydGllcyk7CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBub2RlU3R5
bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUpLCBB
bGxFZGl0aW5nUHJvcGVydGllcyk7Ci0gICAgcGFyZW50U3R5bGUtPmRpZmYobm9kZVN0eWxlLmdl
dCgpKTsKLSAgICBub2RlU3R5bGUtPmRpZmYobV9tdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIG5v
ZGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMocGFyZW50U3R5bGUuZ2V0KCkpOwor
ICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhub2RlU3R5bGUu
Z2V0KCkpOwogfQogCiB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dp
dGhTdHlsZU9mTm9kZShOb2RlKiBub2RlKQpAQCAtNTU4LDcgKzU2NCw3IEBAIHZvaWQgRWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW4KIAogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0ZWRTdHls
ZShjb21wdXRlZFN0eWxlKG5vZGUtPnBhcmVudE5vZGUoKSksIEFsbEVkaXRpbmdQcm9wZXJ0aWVz
KTsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5vZGVTdHlsZSA9IGVk
aXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZSksIEFsbEVkaXRp
bmdQcm9wZXJ0aWVzKTsKLSAgICBwYXJlbnRTdHlsZS0+ZGlmZihub2RlU3R5bGUuZ2V0KCkpOwor
ICAgIG5vZGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMocGFyZW50U3R5bGUuZ2V0
KCkpOwogCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG5vZGVTdHlsZS0+ZW5kKCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub2RlU3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKQEAgLTYxMCw5ICs2MTYsOSBAQCBUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZT
dHlsZShDCiAgICAgaWYgKHNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcyA9PSBJZ25vcmVU
ZXh0T25seVByb3BlcnRpZXMpCiAgICAgICAgIGRpZmZlcmVuY2UtPnJlbW92ZVByb3BlcnRpZXNJ
blNldCh0ZXh0T25seVByb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgodGV4dE9ubHlQcm9wZXJ0
aWVzKSk7CiAKLSAgICBpZiAoIWRpZmZlcmVuY2UtPmxlbmd0aCgpKQorICAgIGlmIChkaWZmZXJl
bmNlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Ci0gICAgaWYgKGRp
ZmZlcmVuY2UtPmxlbmd0aCgpID09IG1fbXV0YWJsZVN0eWxlLT5sZW5ndGgoKSkKKyAgICBpZiAo
ZGlmZmVyZW5jZS0+cHJvcGVydHlDb3VudCgpID09IG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUNv
dW50KCkpCiAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwogCiAgICAgcmV0dXJuIE1peGVk
VHJpU3RhdGU7CkBAIC04MDAsNyArODA2LDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmV4dHJhY3RD
b25mbGljdGluZ0ltcAogCiBib29sIEVkaXRpbmdTdHlsZTo6c3R5bGVJc1ByZXNlbnRJbkNvbXB1
dGVkU3R5bGVPZk5vZGUoTm9kZSogbm9kZSkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fbXV0YWJs
ZVN0eWxlIHx8ICFnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIGNvbXB1
dGVkU3R5bGUobm9kZSkuZ2V0KCkpLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gIW1fbXV0YWJsZVN0
eWxlIHx8IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRT
dHlsZShub2RlKS5nZXQoKSktPmlzRW1wdHkoKTsKIH0KIAogYm9vbCBFZGl0aW5nU3R5bGU6OmVs
ZW1lbnRJc1N0eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KGNvbnN0IEhUTUxFbGVtZW50KiBlbGVt
ZW50KQpAQCAtODY5LDcgKzg3NSw4IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBs
eUF0KGNvbnMKICAgICAgICAgZGlyZWN0aW9uID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwogICAgIH0KIAotICAgIHN0eWxlLT5tX211
dGFibGVTdHlsZS0+ZGlmZihtX211dGFibGVTdHlsZS5nZXQoKSk7CisgICAgbV9tdXRhYmxlU3R5
bGUtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKHN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQo
KSk7CisKICAgICBpZiAoZ2V0UkdCQUZvbnRDb2xvcihtX211dGFibGVTdHlsZS5nZXQoKSkgPT0g
Z2V0UkdCQUZvbnRDb2xvcihzdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkpKQogICAgICAgICBt
X211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CiAKQEAgLTEw
NjgsNyArMTA3NSw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzRm8K
IAogc3RhdGljIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlVG9SZW1vdmVQcm9wZXJ0aWVzRnJvbSwgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQogewotICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZShz
dHlsZS0+bGVuZ3RoKCkpOworICAgIFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZShzdHls
ZS0+cHJvcGVydHlDb3VudCgpKTsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKICAgICBm
b3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxl
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsraSkKQEAgLTEwODUsNyArMTA5Miw3IEBAIHZv
aWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0EKIAogICAgIC8vIDEuIFJlbW92
ZSBzdHlsZSBmcm9tIG1hdGNoZWQgcnVsZXMgYmVjYXVzZSBzdHlsZSByZW1haW4gd2l0aG91dCBy
ZXBlYXRpbmcgaXQgaW4gaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9uCiAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21N
YXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbEJ1dEVt
cHR5Q1NTUnVsZXMpOwotICAgIGlmIChzdHlsZUZyb21NYXRjaGVkUnVsZXMgJiYgc3R5bGVGcm9t
TWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkKKyAgICBpZiAoc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzICYm
ICFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmlzRW1wdHkoKSkKICAgICAgICAgbV9tdXRhYmxlU3R5
bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIHN0eWxlRnJvbU1h
dGNoZWRSdWxlcy5nZXQoKSk7CiAKICAgICAvLyAyLiBSZW1vdmUgc3R5bGUgcHJlc2VudCBpbiBj
b250ZXh0IGFuZCBub3Qgb3ZlcnJpZGVuIGJ5IG1hdGNoZWQgcnVsZXMuCkBAIC0xMTEwLDcgKzEx
MTcsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBCiAKIHZvaWQg
RWRpdGluZ1N0eWxlOjpyZW1vdmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKEVsZW1l
bnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFtX211dGFibGVTdHlsZSB8fCAhbV9tdXRhYmxlU3R5
bGUtPmxlbmd0aCgpKQorICAgIGlmICghbV9tdXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUt
PmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBkZWZhdWx0U3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVt
ZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OlVBQW5kVXNlckNTU1J1bGVzKTsKQEAgLTEy
MTcsNyArMTIyNCw3IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHMK
ICAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwg
c3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pKTsK
IAogICAgIC8vIFNhdmUgdGhlIHJlc3VsdCBmb3IgbGF0ZXIKLSAgICBtX2Nzc1N0eWxlID0gbXV0
YWJsZVN0eWxlLT5jc3NUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgbV9jc3NTdHlsZSA9
IG11dGFibGVTdHlsZS0+YXNUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiB9CiAKIHN0YXRpYyB2
b2lkIHNldFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlLCBjb25zdCBDU1NWYWx1ZUxpc3QqIG5ld1RleHREZWNvcmF0aW9uLCBpbnQgcHJvcGVy
dHlJRCkKQEAgLTEzMTIsNyArMTMxOSw3IEBAIHN0YXRpYyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlv
bnMoQ1NTTXV0YWIKIHN0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+
IGZvbnRXZWlnaHQgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gZm9udFdlaWdodCA9IHByb3BlcnR5Q1NTVmFs
dWUoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CiAKICAgICBpZiAoIWZvbnRXZWlnaHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEzNjYsMzAgKzEzNzMsMzAgQEAgUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQcgogICAgIEFTU0VSVChiYXNlU3R5bGUpOwog
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcmVzdWx0ID0gc3R5bGVXaXRo
UmVkdW5kYW50UHJvcGVydGllcy0+Y29weSgpOwogCi0gICAgYmFzZVN0eWxlLT5kaWZmKHJlc3Vs
dC5nZXQoKSk7CisgICAgcmVzdWx0LT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhiYXNlU3R5
bGUpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3Qg
PSBiYXNlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBiYXNlVGV4dERlY29yYXRp
b25zSW5FZmZlY3QgPSBwcm9wZXJ0eUNTU1ZhbHVlKGJhc2VTdHlsZSwgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CiAgICAgZGlmZlRleHREZWNvcmF0aW9ucyhyZXN1
bHQuZ2V0KCksIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIGJhc2VUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdC5nZXQoKSk7CiAgICAgZGlmZlRleHREZWNvcmF0aW9ucyhyZXN1bHQuZ2V0KCksIENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsIGJhc2VUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdC5nZXQoKSk7CiAKLSAgICBpZiAoYmFzZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udFNpemUpICYmIGZvbnRXZWlnaHRJc0JvbGQocmVzdWx0LmdldCgp
KSA9PSBmb250V2VpZ2h0SXNCb2xkKGJhc2VTdHlsZSkpCisgICAgaWYgKHByb3BlcnR5Q1NTVmFs
dWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRTaXplKSAmJiBmb250V2VpZ2h0SXNCb2xkKHJl
c3VsdC5nZXQoKSkgPT0gZm9udFdlaWdodElzQm9sZChiYXNlU3R5bGUpKQogICAgICAgICByZXN1
bHQtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CiAKLSAgICBpZiAoYmFz
ZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpICYmIGdldFJHQkFG
b250Q29sb3IocmVzdWx0LmdldCgpKSA9PSBnZXRSR0JBRm9udENvbG9yKGJhc2VTdHlsZSkpCisg
ICAgaWYgKHByb3BlcnR5Q1NTVmFsdWUoYmFzZVN0eWxlLCBDU1NQcm9wZXJ0eUNvbG9yKSAmJiBn
ZXRSR0JBRm9udENvbG9yKHJlc3VsdC5nZXQoKSkgPT0gZ2V0UkdCQUZvbnRDb2xvcihiYXNlU3R5
bGUpKQogICAgICAgICByZXN1bHQtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwog
Ci0gICAgaWYgKGJhc2VTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHRB
bGlnbikgJiYgZ2V0VGV4dEFsaWdubWVudChyZXN1bHQuZ2V0KCkpID09IGdldFRleHRBbGlnbm1l
bnQoYmFzZVN0eWxlKSkKKyAgICBpZiAocHJvcGVydHlDU1NWYWx1ZShiYXNlU3R5bGUsIENTU1By
b3BlcnR5VGV4dEFsaWduKSAmJiBnZXRUZXh0QWxpZ25tZW50KHJlc3VsdC5nZXQoKSkgPT0gZ2V0
VGV4dEFsaWdubWVudChiYXNlU3R5bGUpKQogICAgICAgICByZXN1bHQtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5VGV4dEFsaWduKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWludCBn
ZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGludCBwcm9wZXJ0
eUlEKQoraW50IGdldElkZW50aWZpZXJWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBwcm9w
ZXJ0eUNTU1ZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlEKTsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTQyMiw3ICsx
NDI5LDcgQEAgaW50IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKERvY3VtZW50KgogCiBib29s
IGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KQogewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgUmVmUHRyPENTU1ZhbHVl
PiBjc3NWYWx1ZSA9IHByb3BlcnR5Q1NTVmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKTsKICAgICBpZiAoIWNzc1ZhbHVlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMTA2MTk4
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHByaXZhdGU6CiB9OwogCiAvLyBGSVhNRTogUmVtb3ZlIHRo
ZXNlIGZ1bmN0aW9ucyBvciBtYWtlIHRoZW0gbm9uLWdsb2JhbCB0byBkaXNjb3VyYWdlIHVzaW5n
IENTU1N0eWxlRGVjbGFyYXRpb24gZGlyZWN0bHkuCi1pbnQgZ2V0SWRlbnRpZmllclZhbHVlKENT
U1N0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcGVydHlJRCk7CitpbnQgZ2V0SWRlbnRpZmllclZh
bHVlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBDU1NQcm9wZXJ0eUlEKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwMiw4ICs1MDIsOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0cik7Ci0gICAgICAg
IH0gZWxzZSBpZiAobmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmxlbmd0aCgpICE9IGlubGluZVN0
eWxlLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5
bGVBdHRyLCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+cHJvcGVydHlDb3VudCgpICE9IGlubGlu
ZVN0eWxlLT5wcm9wZXJ0eUNvdW50KCkpCisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVs
ZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKIAog
ICAgICAgICAvLyBGSVhNRTogVG9sZXJhdGUgZGlmZmVyZW5jZXMgaW4gaWQsIGNsYXNzLCBhbmQg
c3R5bGUgYXR0cmlidXRlcy4KICAgICAgICAgaWYgKGlzTm9uVGFibGVDZWxsSFRNTEJsb2NrRWxl
bWVudChlbGVtZW50KSAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LCBlbGVtZW50LT5w
YXJlbnROb2RlKCkpCkBAIC02NjAsNyArNjYwLDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVT
cGFuc0JlZm9yZUluc2VydAogCiAgICAgTm9kZSogd3JhcHBpbmdTdHlsZVNwYW4gPSB0b3BOb2Rl
OwogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlQXRJbnNlcnRpb25Qb3MgPSBFZGl0aW5n
U3R5bGU6OmNyZWF0ZShpbnNlcnRpb25Qb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwot
ICAgIFN0cmluZyBzdHlsZVRleHQgPSBzdHlsZUF0SW5zZXJ0aW9uUG9zLT5zdHlsZSgpLT5jc3NU
ZXh0KCk7CisgICAgU3RyaW5nIHN0eWxlVGV4dCA9IHN0eWxlQXRJbnNlcnRpb25Qb3MtPnN0eWxl
KCktPmFzVGV4dCgpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc3RyaW5nIGNvbXBhcmlzb24gaXMg
YSBuYWl2ZSB3YXkgb2YgY29tcGFyaW5nIHR3byBzdHlsZXMuCiAgICAgLy8gV2Ugc2hvdWxkIGJl
IHRha2luZyB0aGUgZGlmZiBhbmQgY2hlY2sgdGhhdCB0aGUgZGlmZiBpcyBlbXB0eS4KQEAgLTcy
MCw3ICs3MjAsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsCiAg
ICAgICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4od3Jh
cHBpbmdTdHlsZVNwYW4pOwogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHdy
YXBwaW5nU3R5bGVTcGFuKTsKICAgICB9IGVsc2UKLSAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSh3
cmFwcGluZ1N0eWxlU3Bhbiwgc3R5bGVBdHRyLCBzdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpKTsK
KyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSh3cmFwcGluZ1N0eWxlU3Bhbiwgc3R5bGVBdHRyLCBz
dHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOwogfQogCiB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjptZXJnZUVuZElmTmVlZGVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJ
KHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFN0eWwKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
ZGl2U3R5bGUsICgiPGRpdiBzdHlsZT1cIiIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IFN0cmluZywgc3R5bGVTcGFuT3BlbiwgKCI8c3BhbiBzdHlsZT1cIiIpKTsKICAgICBvdXQu
YXBwZW5kKGlzQmxvY2sgPyBkaXZTdHlsZSA6IHN0eWxlU3Bhbk9wZW4pOwotICAgIGFwcGVuZEF0
dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmNzc1RleHQoKSwgZG9jdW1lbnQtPmlzSFRNTERvY3Vt
ZW50KCkpOworICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmFzVGV4dCgpLCBk
b2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CiAgICAgb3V0LmFwcGVuZCgnXCInKTsKICAgICBv
dXQuYXBwZW5kKCc+Jyk7CiB9CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRWxlbQogICAgICAgICBpZiAoIW5ld0lubGluZVN0eWxlLT5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBz
dHlsZVByZWZpeCwgKCIgc3R5bGU9XCIiKSk7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKHN0eWxl
UHJlZml4KTsKLSAgICAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgbmV3SW5saW5l
U3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSwgZG9jdW1lbnRJc0hUTUwpOworICAgICAgICAgICAg
YXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0
KCksIGRvY3VtZW50SXNIVE1MKTsKICAgICAgICAgICAgIG91dC5hcHBlbmQoJ1wiJyk7CiAgICAg
ICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CShyZXZpc2lvbiAxMDYxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgUmVuZGVyU3R5
bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3RhCiAKICAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoc3BhblRhZywgZmFsc2UpOwog
Ci0gICAgU3RyaW5nIHN0eWxlVGV4dCA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCkg
KyAiIGRpc3BsYXk6IGlubGluZSI7CisgICAgU3RyaW5nIHN0eWxlVGV4dCA9IHR5cGluZ1N0eWxl
LT5zdHlsZSgpLT5hc1RleHQoKSArICIgZGlzcGxheTogaW5saW5lIjsKICAgICBzdHlsZUVsZW1l
bnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxlVGV4dC5pbXBsKCkpOwogCiAgICAgc3R5
bGVFbGVtZW50LT5hcHBlbmRDaGlsZChmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1Rl
eHROb2RlKCIiKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSW1hZ2VEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCB2
b2lkIEltYWdlRG9jdW1lbnQ6OnJlc2l6ZUltYWdlVG9GaXQoKQogICAgIG1faW1hZ2VFbGVtZW50
LT5zZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihpbWFnZVNpemUuaGVpZ2h0KCkgKiBzY2FsZSkp
OwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxl
KCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLWluIiwgZmFs
c2UsIGVjKTsKKyAgICBtX2ltYWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLWluIiwgZmFsc2UsIGVj
KTsKIH0KIAogdm9pZCBJbWFnZURvY3VtZW50OjppbWFnZUNsaWNrZWQoaW50IHgsIGludCB5KQpA
QCAtMzA5LDkgKzMwOSw5IEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6cmVzdG9yZUltYWdlU2l6ZSgp
CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBpZiAoaW1hZ2VGaXRzSW5XaW5kb3co
KSkKLSAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxlKCktPnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5Q3Vyc29yLCBlYyk7CisgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVT
dHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIGVjKTsKICAgICBl
bHNlCi0gICAgICAgIG1faW1hZ2VFbGVtZW50LT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBmYWxzZSwgZWMpOworICAgICAgICBtX2lt
YWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlLCBlYyk7CiAgICAgICAgIAogICAg
IG1fZGlkU2hyaW5rSW1hZ2UgPSBmYWxzZTsKIH0KQEAgLTM0NCw5ICszNDQsOSBAQCB2b2lkIElt
YWdlRG9jdW1lbnQ6OndpbmRvd1NpemVDaGFuZ2VkKCkKICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YzsKICAgICAgICAgCiAgICAgICAgIGlmIChmaXRzSW5XaW5kb3cpCi0gICAgICAgICAgICBtX2lt
YWdlRWxlbWVudC0+c3R5bGUoKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIGVj
KTsKKyAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+
cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsIGVjKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxlKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBtX2lt
YWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlLCBlYyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5ODcsNyArMTk4Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRGb250KGMKICAgICBTdHJpbmcgZGVjbGFyYXRpb25UZXh0KCJmb250OiAi
KTsKICAgICBkZWNsYXJhdGlvblRleHQgKz0gbmV3Rm9udDsKICAgICBwYXJzZXIucGFyc2VEZWNs
YXJhdGlvbih0ZW1wRGVjbC5nZXQoKSwgZGVjbGFyYXRpb25UZXh0KTsKLSAgICBpZiAoIXRlbXBE
ZWNsLT5sZW5ndGgoKSkKKyAgICBpZiAodGVtcERlY2wtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gVGhlIHBhcnNlIHN1Y2NlZWRlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjksNyArNjksNyBAQCBSR0JBMzIgY3VycmVudENvbG9yKEhUTUxDYW52YXNFbGVtZW50KiBjCiAg
ICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm4g
Q29sb3I6OmJsYWNrOwogICAgIFJHQkEzMiByZ2JhID0gQ29sb3I6OmJsYWNrOwotICAgIENTU1Bh
cnNlcjo6cGFyc2VDb2xvcihyZ2JhLCBjYW52YXMtPnN0eWxlKCktPmdldFByb3BlcnR5VmFsdWUo
Q1NTUHJvcGVydHlDb2xvcikpOworICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihyZ2JhLCBjYW52
YXMtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5
Q29sb3IpKTsKICAgICByZXR1cm4gcmdiYTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTA2MTk4KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDg1LDcgKzEwODUsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnJldmFsaWRhdGVTdHlsCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fZmxhdFJ1
bGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBDU1NTdHlsZVJ1bGUqIHBhcnNl
ZFJ1bGUgPSBtX2ZsYXRSdWxlcy5hdChpKTsKICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxl
KCkgPT0gcGFnZVN0eWxlKSB7Ci0gICAgICAgICAgICBpZiAocGFyc2VkUnVsZS0+c3R5bGUoKS0+
Y3NzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKSB7CisgICAgICAgICAgICBpZiAocGFy
c2VkUnVsZS0+c3R5bGUoKS0+YXNUZXh0KCkgIT0gcGFnZVN0eWxlLT5jc3NUZXh0KCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZGlzYWJsZWQgcHJvcGVydGllcyBmb3IgdGhlIGlu
dmFsaWQgc3R5bGUgaGVyZS4KICAgICAgICAgICAgICAgICBtX2luc3BlY3RvclN0eWxlcy5yZW1v
dmUocGFnZVN0eWxlKTsKICAgICAgICAgICAgICAgICBzZXRTdHlsZVRleHQocGFnZVN0eWxlLCBw
YWdlU3R5bGUtPmNzc1RleHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcAkocmV2aXNpb24gMTA2MTk4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNywxMiArMzE3LDkgQEAgdm9pZCBQYWdl
U2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNGbwogICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWlt
YWdlIGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3Bl
cnRpZXMKICAgICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtl
IHN1cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKICAgICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJl
IG1pZ2h0IGJlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9u
LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgcmlkaWN1
bG91cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0Ci0gICAgICAgIC8vIHRo
ZSB2YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBv
dXQgb2YgdGhlCi0gICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlv
biBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0eQotICAgICAgICAvLyBuYW1lcywgbm90IElE
cy4KLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24t
PmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAgdW5z
aWduZWQgcHJvcGVydHlDb3VudCA9IHN0eWxlRGVjbGFyYXRpb24tPnByb3BlcnR5Q291bnQoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7CisgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0
eUF0KGkpLnZhbHVlKCk7CiAgICAgICAgIGlmICghY3NzVmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0
LDcgKzE4NCw3IEBAIHN0YXRpYyBib29sIGlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVMKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5s
aW5lU3R5bGVEZWNsID0gZWxlbS0+aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgcmV0dXJuICghaW5s
aW5lU3R5bGVEZWNsIHx8IGlubGluZVN0eWxlRGVjbC0+bGVuZ3RoKCkgPT0gMCk7CisgICAgcmV0
dXJuICghaW5saW5lU3R5bGVEZWNsIHx8IGlubGluZVN0eWxlRGVjbC0+aXNFbXB0eSgpKTsKIH0K
IAogU3RyaW5nIHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhjb25zdCBTdHJpbmcmIHMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDYx
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzNyw3ICs0MzcsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBTVkdTdHlsZWRF
bGVtZW50OjpnCiAgICAgICAgIGludCBwcm9wSWQgPSBTVkdTdHlsZWRFbGVtZW50Ojpjc3NQcm9w
ZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZShjc3NTVkdBdHRyLT5uYW1lKCkpOwogICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShjc3NTVkdBdHRyLCBwcm9wSWQsIGNzc1NWR0F0dHItPnZhbHVlKCkpOwog
ICAgIH0KLSAgICByZXR1cm4gY3NzU1ZHQXR0ci0+ZGVjbCgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KG5hbWUpOworICAgIHJldHVybiBjc3NTVkdBdHRyLT5kZWNsKCktPmdldFByb3BlcnR5Q1NTVmFs
dWUoY3NzUHJvcGVydHlJRChuYW1lKSk7CiB9CiAKIGJvb2wgU1ZHU3R5bGVkRWxlbWVudDo6aW5z
dGFuY2VVcGRhdGVzQmxvY2tlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24g
MTA2MjE3KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNiBAQAorMjAxMi0wMS0zMCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVkdWNlIG5vbi1DU1NPTSBBUEkgb2YgQ1NTU3R5bGVEZWNsYXJhdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyOTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFwaS9x
d2ViZWxlbWVudC5jcHA6CisgICAgICAgIChRV2ViRWxlbWVudDo6c3R5bGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChRV2ViRWxlbWVudDo6c2V0U3R5bGVQcm9wZXJ0eSk6CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisKIDIw
MTItMDEtMjUgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0
XSBwdWJsaWMucHJpIGlzIG1pc3NpbmcgZGVwZW5kZW5jeSB0byBxdWljayBtb2R1bGUuCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDYxOTgpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0
NCw3ICs4NDQsNyBAQCBRU3RyaW5nIFFXZWJFbGVtZW50OjpzdHlsZVByb3BlcnR5KGNvbnN0CiAg
ICAgaWYgKCFwcm9wSUQpCiAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CiAKLSAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1l
bnQpLT5zdHlsZSgpOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHlsZURl
Y2woKTsKIAogICAgIGlmIChzdHJhdGVneSA9PSBJbmxpbmVTdHlsZSkKICAgICAgICAgcmV0dXJu
IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BJRCk7CkBAIC05MDksNyArOTA5LDcgQEAgdm9p
ZCBRV2ViRWxlbWVudDo6c2V0U3R5bGVQcm9wZXJ0eShjb25zdAogICAgICAgICByZXR1cm47CiAK
ICAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChuYW1lKTsKLSAgICBDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5z
dHlsZSgpOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsK
ICAgICBpZiAoIXByb3BJRCB8fCAhc3R5bGUpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdC5jcHAJKHJldmlzaW9uIDEwNjE5OCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MzUsMTAgKzYzNSwxMSBAQCBRVmFyaWFudE1hcCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6Y29tCiAgICAgaWYgKCF3ZWJFbGVtZW50KQogICAgICAgICByZXR1cm4gcmVzOwogCi0gICAg
UmVmUHRyPFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBjb21w
dXRlZFN0eWxlKHdlYkVsZW1lbnQsIHRydWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiA9IGNvbXB1dGVk
U3R5bGUod2ViRWxlbWVudCwgdHJ1ZSk7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKj4oY29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmdldCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUt
Pmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgUVN0cmluZyBuYW1lID0gc3R5bGUtPml0ZW0oaSk7
Ci0gICAgICAgIFFTdHJpbmcgdmFsdWUgPSAoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbio+KHN0eWxlLmdldCgpKSktPmdldFByb3BlcnR5VmFsdWUobmFtZSk7CisgICAg
ICAgIFFTdHJpbmcgdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKICAgICAg
ICAgcmVzW2NvbnZlcnRUb1Byb3BlcnR5TmFtZShuYW1lKV0gPSBRVmFyaWFudCh2YWx1ZSk7CiAg
ICAgfQogICAgIHJldHVybiByZXM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124504</attachid>
            <date>2012-01-30 00:34:20 -0800</date>
            <delta_ts>2012-01-30 03:48:05 -0800</delta_ts>
            <desc>updated to tot</desc>
            <filename>cssstyledeclaration-cleanup-9.patch</filename>
            <type>text/plain</type>
            <size>62861</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0wMS0yOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIG5vbi1DU1NPTSBB
UEkgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzcyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uIHNob3VsZCBleHBvc2UgdGhlIENT
U09NIEFQSSBvbmx5LiBTdWJjbGFzc2VzIHNob3VsZCBleHBvc2UgdGhlIGludGVybmFsIEFQSSBv
bmx5LiAKKyAgICAgICAgVGhpcyB3aWxsIG1vdmUgdXMgY2xvc2VyIHRvIGJlaW5nIGFibGUgdG8g
c3BsaXQgdGhlIENTU09NIEFQSSBmcm9tIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIC0gTWFrZSBDU1NTdHlsZURlY2xhcmF0aW9uIENTU09NIGZ1bmN0aW9u
cyB2aXJ0dWFsLCBpbnRlcm5hbCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuCisgICAgICAgIC0gTW92
ZSBpbXBsZW1lbnRhdGlvbnMgdG8gc3ViY2xhc3NlcyAoQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbikuCisgICAgICAgIC0gTWFrZSBDU1NPTSBm
dW5jdGlvbnMgaW4gdGhlIHN1YmNsYXNzZXMgcHJpdmF0ZSAobWFraW5nIGl0IGhhcmRlciB0byBp
bnZva2UgdGhlbSBpbnRlcm5hbGx5KS4KKyAgICAgICAgLSBTd2l0Y2ggYSBidW5jaCBvZiBwbGFj
ZXMgdG8gdXNlIGludGVybmFsIEFQSSBpbnN0ZWFkIG9mIENTU09NLgorCisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOENTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkUHJvcGVydHlHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lZFByb3BlcnR5U2V0
dGVyKToKKyAgICAgICAgCisgICAgICAgICAgICBTd2l0Y2ggdG8gKkludGVybmFsIHZlcnNpb25z
IG9mIHRoZSBDU1NPTSBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9w
ZXJ0aWVzSW5TZXQpOgorICAgICAgICAKKyAgICAgICAgICAgIE1vdmUgY29weVByb3BlcnRpZXNJ
blNldCB0byBzdWJjbGFzc2VzLCBkZXZpcnR1YWxpemUuCisgICAgICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFBy
b3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVBy
b3BlcnR5KToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6Cisg
ICAgICAgIChDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAqIGNzcy9DU1NG
b250RmFjZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxlOjpjc3NU
ZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppc1Byb3Bl
cnR5SW1wbGljaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIAorICAgICAgICAg
ICAgTW92ZSBjb3B5UHJvcGVydGllc0luU2V0IHRvIHN1YmNsYXNzZXMsIGRldmlydHVhbGl6ZS4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3NzUHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyk6CisgICAgICAgIAorICAgICAg
ICAgICAgTW92ZSBkaWZmKCkgdG8gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24sIHJlbmFtZSB0
byByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcywgc3dpdGNoIHRvIG11dGF0ZQorICAgICAgICAg
ICAgdGhpcyBvYmplY3QgaW5zdGVhZCBvZiB0aGUgYXJndW1lbnQgb2JqZWN0LgorICAgIAorICAg
ICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OnByb3BlcnR5Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnByb3BlcnR5QXQpOgorICAgICAgICAKKyAgICAgICAgICAgIEV4
cG9zZSBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSBjb3VudCBpbnRlcm5hbGx5IChpdGVyYXRvciBz
aG91bGQgYmUgcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGVzZSkuCisgICAgICAgIAorICAgICAgICAq
IGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIChDU1NTdHlsZURlY2xhcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbCk6CisgICAgICAgIAorICAgICAgICAgICAg
QWRkICpJbnRlcm5hbCB2ZXJzaW9ucyBvZiBzb21lIENTU09NIEFQSXMgdG8gc3VwcG9ydCBzb21l
IGVkaXRpbmcgYW5kIGJpbmRpbmdzIHVzZXMuCisgICAgICAgICAgICBUaGVzZSB0YWtlIHByb3Bl
cnR5SURzIGluc3RlYWQgb2Ygc3RyaW5ncyBuYW1lcy4KKworICAgICAgICAqIGNzcy9DU1NTdHls
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpjc3NUZXh0KToKKyAg
ICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0
VG9SaWdodERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lUnVs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQp
OgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2spOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZVRvUHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJs
b2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGlu
ZVN0eWxlSWZOZWVkZWQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAg
ICAgICAgKCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5RWRpdGluZ1Byb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUNTU1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFJHQkFGb250Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dGluZ1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnJlbW92ZVN0eWxlQWRkZWRCeU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW5nV2l0aFN0eWxlT2ZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRpbmdTdHlsZTo6c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5bGVPZk5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlbW92ZVByb3BlcnRpZXNJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERlZmF1bHRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udFdlaWdodElzQm9sZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQ
cm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SWRlbnRpZmllclZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6Omhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAKKyAgICAgICAgICAgIEFkYXB0
IHRvIGNoYW5nZXMuCisgICAgCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5s
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxl
U3BhbnMpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dHlsZU5vZGVPcGVuVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzaXplSW1hZ2VUb0ZpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OndpbmRvd1NpemVDaGFuZ2VkKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50Q29sb3IpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZSk6CisgICAgICAgICog
cGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXpl
cjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eU9yVW5z
dHlsZWRBcHBsZVN0eWxlU3Bhbik6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6Z2V0UHJlc2VudGF0aW9uQXR0
cmlidXRlKToKKwogMjAxMi0wMS0yOSAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIEN1c3RvbSB3cml0dGVuIENTUyBsZXhlcgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5
bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
Q1NTU3R5bGVEZWNsYXJhdAogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKIAogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGltcCA9IFY4Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1
ZSA9IGltcC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wSW5mby0+cHJvcElEKTsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gaW1wLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcEluZm8tPnByb3BJRCkpOwogICAgIGlmIChj
c3NWYWx1ZSkgewogICAgICAgICBpZiAocHJvcEluZm8tPmhhZFBpeGVsT3JQb3NQcmVmaXggJiYK
ICAgICAgICAgICAgIGNzc1ZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKQEAgLTIxMiw3ICsy
MTIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAgICAg
IHJldHVybiB2OFN0cmluZ09yTnVsbChjc3NWYWx1ZS0+Y3NzVGV4dCgpKTsKICAgICB9CiAKLSAg
ICBTdHJpbmcgcmVzdWx0ID0gaW1wLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BJbmZvLT5wcm9wSUQp
OworICAgIFN0cmluZyByZXN1bHQgPSBpbXAtPmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChzdGF0
aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcm9wSW5mby0+cHJvcElEKSk7CiAgICAgaWYgKHJlc3Vs
dC5pc051bGwoKSkKICAgICAgICAgcmVzdWx0ID0gIiI7ICAvLyBjb252ZXJ0IG51bGwgdG8gZW1w
dHkgc3RyaW5nLgogCkBAIC0yMzIsNyArMjMyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
Q1NTU3R5bGVEZWNsYXJhdAogICAgICAgICBwcm9wZXJ0eVZhbHVlLmFwcGVuZCgicHgiKTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcC0+c2V0UHJvcGVydHkocHJvcEluZm8t
PnByb3BJRCwgcHJvcGVydHlWYWx1ZSwgZmFsc2UsIGVjKTsKKyAgICBpbXAtPnNldFByb3BlcnR5
SW50ZXJuYWwoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcEluZm8tPnByb3BJRCksIHBy
b3BlcnR5VmFsdWUsIGZhbHNlLCBlYyk7CiAKICAgICBpZiAoZWMpCiAgICAgICAgIHRocm93RXJy
b3IoZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTQm9yZGVySW1hZ2UuaCIKICNpbmNsdWRlICJDU1NMaW5l
Qm94Q29udGFpblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eS5oIgpAQCAtMjQ3NSwyNCArMjQ3Niw4IEBAIFN0cmluZyBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmdldFAKICAgICByZXR1cm4gIiI7CiB9CiAKLWJvb2wgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGludCAvKnByb3BlcnR5SUQqLykg
Y29uc3QKLXsKLSAgICAvLyBBbGwgY29tcHV0ZWQgc3R5bGVzIGhhdmUgYSBwcmlvcml0eSBvZiBm
YWxzZSAobm90ICJpbXBvcnRhbnQiKS4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGludCAvKnByb3BlcnR5
SUQqLywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQogCi12b2lkIENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IC8qcHJvcGVydHlJRCovLCBjb25zdCBTdHJp
bmcmIC8qdmFsdWUqLywgYm9vbCAvKmltcG9ydGFudCovLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLX0KLQotdW5zaWduZWQgQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp2aXJ0dWFsTGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVk
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBOb2Rl
KiBub2RlID0gbV9ub2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKQEAgLTI1MjUsOCArMjUxMCw4
IEBAIGJvb2wgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjc3NQcm8KICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBDU1NTdHls
ZURlY2xhcmF0aW9uOjpjc3NQcm9wZXJ0eU1hdGNoZXMocHJvcGVydHkpOworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LT5pZCgpKTsKKyAg
ICByZXR1cm4gdmFsdWUgJiYgdmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+
Y3NzVGV4dCgpOwogfQogCiBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHkoKSBjb25zdApAQCAtMjU3Nyw0ICsyNTYy
LDc0IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NDb21wdXRlZFN0eWwKICAgICByZXR1
cm4gbGlzdC5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChj
b25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAoreworICAgIFZlY3RvcjxDU1NQ
cm9wZXJ0eT4gbGlzdDsKKyAgICBsaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKKyAgICAg
ICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkoc2V0W2ld
LCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7CisgICAgfQorICAgIHJldHVybiBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGxpc3QpOworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKworU3Ry
aW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBT
dHJpbmcgJnByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5
SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKwor
U3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShj
b25zdCBTdHJpbmcmKQoreworICAgIC8vIEFsbCBjb21wdXRlZCBzdHlsZXMgaGF2ZSBhIHByaW9y
aXR5IG9mIG5vdCAiaW1wb3J0YW50Ii4KKyAgICByZXR1cm4gIiI7Cit9CisKK1N0cmluZyBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgcmV0dXJuICIiOworfQorCitib29sIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHko
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Cit9CisKK1N0
cmluZyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKK1Bhc3NSZWZQdHI8Q1NT
VmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZUlu
dGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3sKKyAgICByZXR1cm4gZ2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKworU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkKK3sKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKwordm9p
ZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
ZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmgJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTYgKzUwLDkg
QEAgcHVibGljOgogICAgIGZyaWVuZCBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbj4gY29tcHV0ZWRTdHlsZShQYXNzUmVmUHRyPE5vZGU+LCBib29sIGFsbG93VmlzaXRlZFN0
eWxlLCBjb25zdCBTdHJpbmcmIHBzZXVkb0VsZW1lbnROYW1lKTsKICAgICB2aXJ0dWFsIH5DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24oKTsKIAotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgdmlydHVhbExlbmd0aCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0
eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9w
ZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQg
cHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQo
aW50IC8qcHJvcGVydHlJRCovKSBjb25zdCB7IHJldHVybiAtMTsgfQotICAgIHZpcnR1YWwgYm9v
bCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IC8qcHJvcGVydHlJRCovKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50
IHByb3BlcnR5SUQpIGNvbnN0OworICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9w
ZXJ0eUlEKSBjb25zdDsKKyAgICBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5
SUQpIGNvbnN0OwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBjb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpOwpAQCAtNzEsMTYgKzY0LDI4IEBAIHB1Ymxp
YzoKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRTVkdQcm9wZXJ0eUNTU1ZhbHVlKGludCBw
cm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBjb25zdDsKICNlbmRpZgogCi1wcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9w
ZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Tm9kZT4s
IGJvb2wgYWxsb3dWaXNpdGVkU3R5bGUsIGNvbnN0IFN0cmluZyYpOwogCisgICAgLy8gQ1NTT00g
ZnVuY3Rpb25zLiBEb24ndCBtYWtlIHRoZXNlIHB1YmxpYy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBw
cmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmly
dHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCk7
CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAg
IHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZp
cnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsK
IAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yU2hhZG93KGNvbnN0IFNoYWRvd0Rh
dGEqLCBpbnQsIFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiwgY29uc3QgQ29s
b3ImKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCShy
ZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBTdHJpbmcgQ1NTRm9udEZhY2VSdWxl
Ojpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVzdWx0KCJAZm9udC1mYWNlIik7CiAg
ICAgcmVzdWx0ICs9ICIgeyAiOwotICAgIHJlc3VsdCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7Cisg
ICAgcmVzdWx0ICs9IG1fc3R5bGUtPmFzVGV4dCgpOwogICAgIHJlc3VsdCArPSAifSI7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODI2LDkgKzgyNiw5IEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFkZFBh
cnMKICNlbmRpZgogfQogCi11bnNpZ25lZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6dmly
dHVhbExlbmd0aCgpIGNvbnN0Cit1bnNpZ25lZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
bGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbGVuZ3RoKCk7CisgICAgcmV0dXJuIHByb3Bl
cnR5Q291bnQoKTsKIH0KIAogU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppdGVt
KHVuc2lnbmVkIGkpIGNvbnN0CkBAIC04MzgsNyArODM4LDcgQEAgU3RyaW5nIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjppdGVtKAogICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3RhdGlj
X2Nhc3Q8Q1NTUHJvcGVydHlJRD4obV9wcm9wZXJ0aWVzW2ldLmlkKCkpKTsKIH0KIAotU3RyaW5n
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKK1N0cmluZyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YXNUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVz
dWx0ID0gIiI7CiAKQEAgLTEwNTIsNCArMTA1MiwxMTkgQEAgQ1NTUHJvcGVydHkqIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOgogICAgIHJldHVybiAwOwogfQogCitTdHJpbmcgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNzc1RleHQoKSBjb25zdAoreworICAgIHJldHVybiBhc1RleHQo
KTsKK30KKworUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAg
aW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFw
cm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsKK30KKworU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQoreworICAgIGlu
dCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJv
cGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBnZXRQcm9wZXJ0
eVZhbHVlKHByb3BlcnR5SUQpOworfQorCitTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYg
KCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGdldFBy
b3BlcnR5UHJpb3JpdHkocHJvcGVydHlJRCkgPyAiaW1wb3J0YW50IiA6ICIiOworfQorCitTdHJp
bmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVy
dHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGludCBzaG9ydGhhbmRJRCA9IGdldFByb3BlcnR5U2hvcnRoYW5kKHBy
b3BlcnR5SUQpOworICAgIGlmICghc2hvcnRoYW5kSUQpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+
KHNob3J0aGFuZElEKSk7Cit9CisKK2Jvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omlz
UHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQg
cHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3Bl
cnR5SUQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXNQcm9wZXJ0eUltcGxp
Y2l0KHByb3BlcnR5SUQpOworfQorCit2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpz
ZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaW50
IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9w
ZXJ0eUlEKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5m
aW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CisgICAgc2V0UHJvcGVydHko
cHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgZWMpOworfQorCitTdHJpbmcgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3Bl
cnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgZWMpOwor
fQorCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0
UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3sgCisg
ICAgcmV0dXJuIGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7IAorfQorCitTdHJpbmcg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQpCit7IAorICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKHBy
b3BlcnR5SUQpOyAKK30KKwordm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJv
cGVydHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sgCisgICAgcmV0dXJuIHNl
dFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGVjKTsgCit9CisKK1Bhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgp
IGNvbnN0Cit7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5PiBsaXN0OworICAgIGxpc3QucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVy
dHlDU1NWYWx1ZShzZXRbaV0pOworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBsaXN0
LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKKyAg
ICB9CisgICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobGlzdCk7
Cit9CisKK2Jvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hl
cyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNvbnN0Cit7CisgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOworICAgIHJl
dHVybiB2YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgpLT5jc3NU
ZXh0KCk7Cit9CisKK3ZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUVxdWl2
YWxlbnRQcm9wZXJ0aWVzKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAg
IFZlY3RvcjxpbnQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKKyAgICB7CisgICAgICAgIHNpemVfdCBz
aXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9
IG1fcHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+Y3NzUHJvcGVydHlNYXRj
aGVzKCZwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVu
ZChwcm9wZXJ0eS5pZCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgdXNlIG1hc3MgcmVtb3ZhbC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcHJvcGVydGllc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQorICAgICAgICByZW1vdmVQcm9wZXJ0
eShwcm9wZXJ0aWVzVG9SZW1vdmVbaV0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgog
ICAgIHsgCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24oZWxlbWVudCwgZmFsc2UpKTsKICAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNQ
cm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBVc2VkIGJ5IFN0eWxlZEVsZW1l
bnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKCkuCiAgICAgdm9pZCBjb3B5UHJvcGVydGll
c0Zyb20oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mKTsKQEAgLTkyLDI3ICs5NCwy
MSBAQCBwdWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBjb25zdF9p
dGVyYXRvcih0aGlzLCBtX3Byb3BlcnRpZXMuYmVnaW4oKSk7IH0KICAgICBjb25zdF9pdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBtX3Byb3BlcnRpZXMuZW5kKCkp
OyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHVuc2ln
bmVkIHByb3BlcnR5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuc2l6ZSgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmlzRW1wdHko
KTsgfQorICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eUF0KHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXNbaW5kZXhdOyB9CisKKyAgICBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBT
dHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CisgICAgYm9vbCBn
ZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBpbnQgZ2V0UHJv
cGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0OworICAgIGJvb2wgaXNQcm9wZXJ0
eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQg
dmlydHVhbExlbmd0aCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGVydGllcy5zaXplKCk7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwg
U3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Ym9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgcmVtb3ZlUHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwogCi0gICAgdXNp
bmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZTsKLQogICAgIGJvb2wg
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBm
YWxzZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwg
dHJ1ZSk7IH0KICAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBkb3VibGUgdmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQgPSBm
YWxzZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIHVuaXQsIGltcG9y
dGFudCwgdHJ1ZSk7IH0KICAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsgfQpAQCAtMTM4LDYgKzEz
NCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VTdHJpY3RQYXJzaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJpY3RQYXJzaW5nOyB9CiAKICAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+Jik7CisgICAgCisgICAgdm9pZCByZW1vdmVFcXVpdmFsZW50UHJv
cGVydGllcyhjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uKik7CisKKyAgICBQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCog
c2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworCisgICAgU3RyaW5nIGFzVGV4dCgpIGNvbnN0
OwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKTsKQEAgLTE1
Myw2ICsxNTUsMjIgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKIAorICAgIC8vIENTU09NIGZ1bmN0
aW9ucy4gRG9uJ3QgbWFrZSB0aGVzZSBwdWJsaWMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUo
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3Bl
cnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgU3RyaW5n
IGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZp
cnR1YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3Jp
dHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCk7CisgICAgdmly
dHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJik7CisKICAgICB2b2lk
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIAogICAgIFN0cmluZyBnZXRTaG9ydGhhbmRWYWx1ZShj
b25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVfdCkgY29uc3Q7CkBAIC0xNzMsNiArMTkxLDggQEAg
cHJpdmF0ZToKICAgICBib29sIHJlbW92ZVNob3J0aGFuZFByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBib29sIG5vdGlmeUNoYW5nZWQpOwogICAgIGJvb2wgcmVtb3ZlUHJvcGVydGllc0luU2V0KGNv
bnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7CiAKKyAg
ICB2aXJ0dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29u
c3Q7CisKICAgICBWZWN0b3I8Q1NTUHJvcGVydHk+Ojpjb25zdF9pdGVyYXRvciBmaW5kUHJvcGVy
dHlXaXRoSWQoaW50IHByb3BlcnR5SWQpIGNvbnN0OwogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT46
Oml0ZXJhdG9yIGZpbmRQcm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJZCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDEwNjIx
NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsMTA5ICs3NywxMSBAQCBDU1NTdHlsZVNoZWV0KiBDU1NTdHlsZURlY2xh
cmF0aW9uOjpwYXJlCiAgICAgcmV0dXJuIG1fcGFyZW50LnJ1bGUtPnBhcmVudFN0eWxlU2hlZXQo
KTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJv
cGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJv
cElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wSUQpOwot
fQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBT
dHJpbmcgJnByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChw
cm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUocHJvcElEKTsKLX0KLQotU3RyaW5nIENTU1N0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsK
LSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBn
ZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BJRCkgPyAiaW1wb3J0YW50IiA6ICIiOwotfQotCi1TdHJp
bmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVy
dHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IGludCBzaG9ydGhhbmRJRCA9IGdldFByb3BlcnR5U2hvcnRoYW5kKHByb3BJRCk7Ci0gICAgaWYg
KCFzaG9ydGhhbmRJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBnZXRQ
cm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oc2hvcnRoYW5kSUQpKTsKLX0K
LQotYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJv
cGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBpc1Byb3BlcnR5SW1wbGljaXQocHJvcElEKTsKLX0KLQotdm9pZCBDU1NTdHlsZURl
Y2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBp
ZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgaW1wb3J0YW50ID0gcHJpb3Jp
dHkuZmluZCgiaW1wb3J0YW50IiwgMCwgZmFsc2UpICE9IG5vdEZvdW5kOwotICAgIHNldFByb3Bl
cnR5KHByb3BJRCwgdmFsdWUsIGltcG9ydGFudCwgZWMpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3Bl
cnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcElELCBlYyk7Ci19Ci0KIGJvb2wgQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7
CiAgICAgcmV0dXJuIGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKIH0KIAotYm9vbCBDU1NT
dHlsZURlY2xhcmF0aW9uOjpjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqIHBy
b3BlcnR5KSBjb25zdAotewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnR5LT5pZCgpKTsKLSAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUtPmNz
c1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpOwotfQotCi12b2lkIENTU1N0
eWxlRGVjbGFyYXRpb246OmRpZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBj
b25zdAotewotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3Rvcjxp
bnQ+IHByb3BlcnRpZXNUb1JlbW92ZTsKLSAgICB7Ci0gICAgICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7Ci0gICAgICAgIGZv
ciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVy
dHkmIHByb3BlcnR5ID0gKml0OwotICAgICAgICAgICAgaWYgKGNzc1Byb3BlcnR5TWF0Y2hlcygm
cHJvcGVydHkpKQotICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb1JlbW92ZS5hcHBlbmQocHJv
cGVydHkuaWQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIG1hc3MgcmVtb3ZhbC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVy
dGllc1RvUmVtb3ZlLnNpemUoKTsgaSsrKQotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHko
cHJvcGVydGllc1RvUmVtb3ZlW2ldKTsKLX0KLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChjb25z
dCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAotewotICAgIFZlY3RvcjxDU1NQcm9w
ZXJ0eT4gbGlzdDsKLSAgICBsaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKLSAgICAgICAg
aWYgKHZhbHVlKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkoc2V0W2ldLCB2
YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAgfQotICAgIHJldHVybiBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGxpc3QpOwotfQotCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBD
U1NTdHlsZURlY2xhcmF0aW9uOjpzaG93U3R5bGUoKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsy
MSw3IEBACiAjaWZuZGVmIENTU1N0eWxlRGVjbGFyYXRpb25faAogI2RlZmluZSBDU1NTdHlsZURl
Y2xhcmF0aW9uX2gKIAorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJD
U1NSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtNTEsMzUgKzUyLDI2IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxMZW5ndGgo
KTsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgdmlydHVhbExlbmd0aCgpIGNvbnN0ID0gMDsKLSAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdCA9IDA7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcg
Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5n
IGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0
cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0g
ICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwot
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlW
YWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9w
ZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQg
Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0K
LSAgICB2b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlk
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFBy
b3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpID0gMDsKKyAgICB2aXJ0
dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSA9
IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRo
YW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlz
UHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKKyAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKworICAgIC8vIENTU1Byb3BlcnR5SUQgdmVy
c2lvbnMgb2YgdGhlIENTU09NIGZ1bmN0aW9ucyB0byBzdXBwb3J0IGJpbmRpbmdzIGFuZCBlZGl0
aW5nLgorICAgIC8vIFVzZSB0aGUgbm9uLXZpcnR1YWwgbWV0aG9kcyBpbiB0aGUgY29uY3JldGUg
c3ViY2xhc3NlcyB3aGVuIHBvc3NpYmxlLgorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpID0gMDsKKyAgICB2
aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKENTU1Byb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJikgPSAwOwog
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gbWFrZU11dGFibGUoKSA9IDA7CiAKLSAgICB2b2lkIGRpZmYoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVk
IGxlbmd0aCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0Y2hlcyhjb25z
dCBDU1NQcm9wZXJ0eSopIGNvbnN0ID0gMDsKIAogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIHNo
b3dTdHlsZSgpOwpAQCAtOTIsOCArODQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlID0gMCk7CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlv
bihTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBib29sIGlzSW5saW5lKTsKIAotICAgIHZp
cnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsK
LQogICAgIC8vIFRoZSBiaXRzIGluIHRoaXMgc2VjdGlvbiBhcmUgb25seSB1c2VkIGJ5IHNwZWNp
ZmljIHN1YmNsYXNzZXMgYnV0IGtlcHQgaGVyZQogICAgIC8vIHRvIG1heGltaXplIHN0cnVjdCBw
YWNraW5nLgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkocmV2aXNpb24g
MTA2MjE3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBTdHJpbmcgQ1NTU3R5bGVSdWxlOjpjc3NUZXh0KCkg
Y29uc3QKICAgICBTdHJpbmcgcmVzdWx0ID0gc2VsZWN0b3JUZXh0KCk7CiAKICAgICByZXN1bHQg
Kz0gIiB7ICI7Ci0gICAgcmVzdWx0ICs9IG1fc3R5bGUtPmNzc1RleHQoKTsKKyAgICByZXN1bHQg
Kz0gbV9zdHlsZS0+YXNUZXh0KCk7CiAgICAgcmVzdWx0ICs9ICJ9IjsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZp
c2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksNyBAQCBzdGF0aWMgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYgcHJpbnRFCiBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGxl
ZnRUb1JpZ2h0RGVjbGFyYXRpb24oKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiwgbGVmdFRvUmlnaHREZWNsLCAoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpKSk7Ci0gICAgaWYgKCFsZWZ0VG9SaWdodERlY2wt
Pmxlbmd0aCgpKQorICAgIGlmIChsZWZ0VG9SaWdodERlY2wtPmlzRW1wdHkoKSkKICAgICAgICAg
bGVmdFRvUmlnaHREZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFs
dWVMdHIpOwogICAgIHJldHVybiBsZWZ0VG9SaWdodERlY2wuZ2V0KCk7CiB9CkBAIC0zMDcsNyAr
MzA3LDcgQEAgc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBsZWZ0VAogc3RhdGlj
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKIHsK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4sIHJpZ2h0VG9MZWZ0RGVjbCwgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUo
KSkpOwotICAgIGlmICghcmlnaHRUb0xlZnREZWNsLT5sZW5ndGgoKSkKKyAgICBpZiAocmlnaHRU
b0xlZnREZWNsLT5pc0VtcHR5KCkpCiAgICAgICAgIHJpZ2h0VG9MZWZ0RGVjbC0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlUnRsKTsKICAgICByZXR1cm4gcmlnaHRU
b0xlZnREZWNsLmdldCgpOwogfQpAQCAtNzgwLDcgKzc4MCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIElm
IHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0
aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIWRlY2wgfHwg
KCFkZWNsLT5sZW5ndGgoKSAmJiAhaW5jbHVkZUVtcHR5UnVsZXMpKSB7CisgICAgICAgICAgICBp
ZiAoIWRlY2wgfHwgKGRlY2wtPmlzRW1wdHkoKSAmJiAhaW5jbHVkZUVtcHR5UnVsZXMpKSB7CiAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29v
a2llLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBA
IC0yNTI2LDcgKzI1MjYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVz
Rm9yCiAKICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHks
IHRoZW4gaWdub3JlIGl0LgogICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVj
bCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7Ci0gICAgICAgIGlmICghZGVjbCB8fCAhZGVjbC0+bGVu
Z3RoKCkpCisgICAgICAgIGlmICghZGVjbCB8fCBkZWNsLT5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1h
dGNoZWQgcnVsZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlLmNwcAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktp
dENTU0tleWZyYW1lUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgU3Ry
aW5nIFdlYktpdENTU0tleWZyYW1lUnVsZTo6Y3NzVGV4dCgpIAogICAgIFN0cmluZyByZXN1bHQg
PSBtX2tleTsKIAogICAgIHJlc3VsdCArPSAiIHsgIjsKLSAgICByZXN1bHQgKz0gbV9zdHlsZS0+
Y3NzVGV4dCgpOworICAgIHJlc3VsdCArPSBtX3N0eWxlLT5hc1RleHQoKTsKICAgICByZXN1bHQg
Kz0gIn0iOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9T
dHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVk
RWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHls
ZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDggKzExMiw4IEBAIHZvaWQgU3R5
bGVkRWxlbWVudDo6dXBkYXRlU3R5bGVBdHRyaWJ1dGUKICAgICBBU1NFUlQoIWlzU3R5bGVBdHRy
aWJ1dGVWYWxpZCgpKTsKICAgICBzZXRJc1N0eWxlQXR0cmlidXRlVmFsaWQoKTsKICAgICBzZXRJ
c1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpOwotICAgIGlmIChtX2lubGluZVN0eWxlRGVj
bCkKLSAgICAgICAgY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Kj4odGhpcyktPnNldEF0dHJpYnV0
ZShzdHlsZUF0dHIsIG1faW5saW5lU3R5bGVEZWNsLT5jc3NUZXh0KCkpOworICAgIGlmIChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZURlY2woKSkK
KyAgICAgICAgY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Kj4odGhpcyktPnNldEF0dHJpYnV0ZShz
dHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgY2xlYXJJc1N5bmNocm9uaXpp
bmdTdHlsZUF0dHJpYnV0ZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NSw3
ICszOTUsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9uCiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRGb250U2l6ZSAhPSBkZXNpcmVkRm9udFNpemUpIHsK
ICAgICAgICAgICAgIGlubGluZVN0eWxlRGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250
U2l6ZSwgU3RyaW5nOjpudW1iZXIoZGVzaXJlZEZvbnRTaXplKSArICJweCIsIGZhbHNlKTsKLSAg
ICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyLCBpbmxp
bmVTdHlsZURlY2wtPmNzc1RleHQoKSk7CisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVs
ZW1lbnQuZ2V0KCksIHN0eWxlQXR0ciwgaW5saW5lU3R5bGVEZWNsLT5hc1RleHQoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGlubGluZVN0eWxlRGVjbC0+aXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQuZ2V0KCksIHN0eWxlQXR0cik7CkBAIC01
MTUsNyArNTE1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVQog
ICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBpbmxpbmVTdHls
ZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7CiAgICAgICAgICAg
ICBpbmxpbmVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQ1NTVmFs
dWVOb3JtYWwpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5RGlyZWN0aW9uKTsKLSAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwg
c3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHNldE5vZGVB
dHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogICAg
ICAgICAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3Bhbihl
bGVtZW50KSkKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVs
ZW1lbnQpOwogICAgICAgICB9CkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0hUTUxFbGVtZW50KG5vZGUpOwogICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVj
bCgpLT5jb3B5KCk7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+bWVyZ2Uoc3R5bGUtPnN0eWxl
KCkpOwotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlu
bGluZVN0eWxlLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVt
ZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgICAgICAgICBuZXh0
ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KQEAgLTk0Myw3ICs5NDMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eUlubGluZVN0eWxlCiAgICAgLy8gU2luY2UgYWRkSW5saW5lU3R5bGVJZk5lZWRlZCBjYW4ndCBh
ZGQgc3R5bGVzIHRvIGJsb2NrLWZsb3cgcmVuZGVyIG9iamVjdHMsIGFkZCBzdHlsZSBhdHRyaWJ1
dGUgaW5zdGVhZC4KICAgICAvLyBGSVhNRTogYXBwbHlJbmxpbmVTdHlsZVRvUmFuZ2Ugc2hvdWxk
IGJlIHVzZWQgaGVyZSBpbnN0ZWFkLgogICAgIGlmICgobm9kZS0+cmVuZGVyZXIoKS0+aXNCbG9j
a0Zsb3coKSB8fCBub2RlLT5jaGlsZE5vZGVDb3VudCgpKSAmJiBub2RlLT5pc0hUTUxFbGVtZW50
KCkpIHsKLSAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSh0b0hUTUxFbGVtZW50KG5vZGUpLCBzdHls
ZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCkpOworICAgICAgICBzZXRO
b2RlQXR0cmlidXRlKHRvSFRNTEVsZW1lbnQobm9kZSksIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5
bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMx
Miw3ICsxMzEyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjbwog
ICAgICAgICAKICAgICBTdHJpbmcgY3NzVGV4dCA9IHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCk7CiAg
ICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gYmxvY2stPmlubGluZVN0
eWxlRGVjbCgpKQotICAgICAgICBjc3NUZXh0ICs9IGRlY2wtPmNzc1RleHQoKTsKKyAgICAgICAg
Y3NzVGV4dCArPSBkZWNsLT5hc1RleHQoKTsKICAgICBzZXROb2RlQXR0cmlidXRlKGJsb2NrLCBz
dHlsZUF0dHIsIGNzc1RleHQpOwogfQogCkBAIC0xMzc3LDcgKzEzNzcsNyBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0
eWxlKCkubGVuZ3RoKCkpIHsKICAgICAgICAgaWYgKHN0eWxlQ29udGFpbmVyKSB7CiAgICAgICAg
ICAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4aXN0aW5nU3R5bGUgPSBzdHls
ZUNvbnRhaW5lci0+aW5saW5lU3R5bGVEZWNsKCkpCi0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0
dHJpYnV0ZShzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBleGlzdGluZ1N0eWxlLT5jc3NUZXh0
KCkgKyBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzZXROb2RlQXR0
cmlidXRlKHN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIGV4aXN0aW5nU3R5bGUtPmFzVGV4dCgp
ICsgc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBzdHlsZUNo
YW5nZS5jc3NTdHlsZSgpKTsKICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIs
OCBAQCBzdGF0aWMgY29uc3QgaW50IGVkaXRpbmdQcm9wZXJ0aWVzW10gPSB7CiAKIGVudW0gRWRp
dGluZ1Byb3BlcnRpZXNUeXBlIHsgT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMsIEFs
bEVkaXRpbmdQcm9wZXJ0aWVzIH07CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUsIEVkaXRpbmdQcm9wZXJ0aWVzVHlwZSB0eXBlID0gT25seUluaGVyaXRhYmxlRWRpdGlu
Z1Byb3BlcnRpZXMpCit0ZW1wbGF0ZSA8Y2xhc3MgU3R5bGVEZWNsYXJhdGlvblR5cGU+CitzdGF0
aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weUVkaXRpbmdQcm9w
ZXJ0aWVzKFN0eWxlRGVjbGFyYXRpb25UeXBlKiBzdHlsZSwgRWRpdGluZ1Byb3BlcnRpZXNUeXBl
IHR5cGUgPSBPbmx5SW5oZXJpdGFibGVFZGl0aW5nUHJvcGVydGllcykKIHsKICAgICBpZiAodHlw
ZSA9PSBBbGxFZGl0aW5nUHJvcGVydGllcykKICAgICAgICAgcmV0dXJuIHN0eWxlLT5jb3B5UHJv
cGVydGllc0luU2V0KGVkaXRpbmdQcm9wZXJ0aWVzLCBXVEZfQVJSQVlfTEVOR1RIKGVkaXRpbmdQ
cm9wZXJ0aWVzKSk7CkBAIC0zNDcsNyArMzQ4LDcgQEAgc3RhdGljIFJHQkEzMiBjc3NWYWx1ZVRv
UkdCQShDU1NWYWx1ZSogYwogCiBzdGF0aWMgaW5saW5lIFJHQkEzMiBnZXRSR0JBRm9udENvbG9y
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewotICAgIHJldHVybiBjc3NWYWx1ZVRvUkdC
QShzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIGNzc1ZhbHVlVG9SR0JBKHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJu
YWwoQ1NTUHJvcGVydHlDb2xvcikuZ2V0KCkpOwogfQogCiBzdGF0aWMgaW5saW5lIFJHQkEzMiBy
Z2JhQmFja2dyb3VuZENvbG9ySW5FZmZlY3QoTm9kZSogbm9kZSkKQEAgLTQ4Miw3ICs0ODMsNyBA
QCB2b2lkIEVkaXRpbmdTdHlsZTo6c2V0U3R5bGUoUGFzc1JlZlB0cjxDCiAKIHZvaWQgRWRpdGlu
Z1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpCiB7Ci0gICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmxlbmd0aCgpKQorICAgIGlm
ICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICgh
bV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNyZWF0ZSgpOwpAQCAtNTQ3LDggKzU0OCw4IEBAIHZvaWQgRWRpdGluZ1N0
eWxlOjpyZW1vdmVTdHlsZUFkZGVkQnlOb2QKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9t
Q29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUtPnBhcmVudE5vZGUoKSksIEFsbEVkaXRp
bmdQcm9wZXJ0aWVzKTsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5v
ZGVTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9k
ZSksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsKLSAgICBwYXJlbnRTdHlsZS0+ZGlmZihub2RlU3R5
bGUuZ2V0KCkpOwotICAgIG5vZGVTdHlsZS0+ZGlmZihtX211dGFibGVTdHlsZS5nZXQoKSk7Cisg
ICAgbm9kZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhwYXJlbnRTdHlsZS5nZXQo
KSk7CisgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKG5vZGVT
dHlsZS5nZXQoKSk7CiB9CiAKIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0
aW5nV2l0aFN0eWxlT2ZOb2RlKE5vZGUqIG5vZGUpCkBAIC01NTgsNyArNTU5LDcgQEAgdm9pZCBF
ZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlQ29uZmxpY3RpbgogCiAgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBwYXJlbnRTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21wdXRl
ZFN0eWxlKGNvbXB1dGVkU3R5bGUobm9kZS0+cGFyZW50Tm9kZSgpKSwgQWxsRWRpdGluZ1Byb3Bl
cnRpZXMpOwogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxl
ID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZShub2RlKSwgQWxs
RWRpdGluZ1Byb3BlcnRpZXMpOwotICAgIHBhcmVudFN0eWxlLT5kaWZmKG5vZGVTdHlsZS5nZXQo
KSk7CisgICAgbm9kZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhwYXJlbnRTdHls
ZS5nZXQoKSk7CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbm9kZVN0eWxlLT5lbmQoKTsKICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vZGVTdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQpAQCAtNjEwLDkgKzYxMSw5IEBAIFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3Rh
dGVPZlN0eWxlKEMKICAgICBpZiAoc2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzID09IEln
bm9yZVRleHRPbmx5UHJvcGVydGllcykKICAgICAgICAgZGlmZmVyZW5jZS0+cmVtb3ZlUHJvcGVy
dGllc0luU2V0KHRleHRPbmx5UHJvcGVydGllcywgV1RGX0FSUkFZX0xFTkdUSCh0ZXh0T25seVBy
b3BlcnRpZXMpKTsKIAotICAgIGlmICghZGlmZmVyZW5jZS0+bGVuZ3RoKCkpCisgICAgaWYgKGRp
ZmZlcmVuY2UtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFRydWVUcmlTdGF0ZTsKLSAgICBp
ZiAoZGlmZmVyZW5jZS0+bGVuZ3RoKCkgPT0gbV9tdXRhYmxlU3R5bGUtPmxlbmd0aCgpKQorICAg
IGlmIChkaWZmZXJlbmNlLT5wcm9wZXJ0eUNvdW50KCkgPT0gbV9tdXRhYmxlU3R5bGUtPnByb3Bl
cnR5Q291bnQoKSkKICAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7CiAKICAgICByZXR1cm4g
TWl4ZWRUcmlTdGF0ZTsKQEAgLTgwMCw3ICs4MDEsNyBAQCBib29sIEVkaXRpbmdTdHlsZTo6ZXh0
cmFjdENvbmZsaWN0aW5nSW1wCiAKIGJvb2wgRWRpdGluZ1N0eWxlOjpzdHlsZUlzUHJlc2VudElu
Q29tcHV0ZWRTdHlsZU9mTm9kZShOb2RlKiBub2RlKSBjb25zdAogewotICAgIHJldHVybiAhbV9t
dXRhYmxlU3R5bGUgfHwgIWdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwg
Y29tcHV0ZWRTdHlsZShub2RlKS5nZXQoKSktPmxlbmd0aCgpOworICAgIHJldHVybiAhbV9tdXRh
YmxlU3R5bGUgfHwgZ2V0UHJvcGVydGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgpLCBjb21w
dXRlZFN0eWxlKG5vZGUpLmdldCgpKS0+aXNFbXB0eSgpOwogfQogCiBib29sIEVkaXRpbmdTdHls
ZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9ySFRNTEVxdWl2YWxlbnQoY29uc3QgSFRNTEVsZW1lbnQq
IGVsZW1lbnQpCkBAIC04NjksNyArODcwLDggQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVU
b0FwcGx5QXQoY29ucwogICAgICAgICBkaXJlY3Rpb24gPSBtX211dGFibGVTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbik7CiAgICAgfQogCi0gICAgc3R5bGUt
Pm1fbXV0YWJsZVN0eWxlLT5kaWZmKG1fbXV0YWJsZVN0eWxlLmdldCgpKTsKKyAgICBtX211dGFi
bGVTdHlsZS0+cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoc3R5bGUtPm1fbXV0YWJsZVN0eWxl
LmdldCgpKTsKKwogICAgIGlmIChnZXRSR0JBRm9udENvbG9yKG1fbXV0YWJsZVN0eWxlLmdldCgp
KSA9PSBnZXRSR0JBRm9udENvbG9yKHN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSkpCiAgICAg
ICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKIApA
QCAtMTA2OCw3ICsxMDcwLDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGVGcm9tUnVs
ZXNGbwogCiBzdGF0aWMgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5TdHlsZShDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGVUb1JlbW92ZVByb3BlcnRpZXNGcm9tLCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVt
b3ZlKHN0eWxlLT5sZW5ndGgoKSk7CisgICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3Zl
KHN0eWxlLT5wcm9wZXJ0eUNvdW50KCkpOwogICAgIHNpemVfdCBpID0gMDsKICAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwog
ICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
c3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwgKytpKQpAQCAtMTA4NSw3ICsxMDg3LDcg
QEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQQogCiAgICAgLy8gMS4g
UmVtb3ZlIHN0eWxlIGZyb20gbWF0Y2hlZCBydWxlcyBiZWNhdXNlIHN0eWxlIHJlbWFpbiB3aXRo
b3V0IHJlcGVhdGluZyBpdCBpbiBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24KICAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlRnJvbU1hdGNoZWRSdWxlcyA9IHN0eWxl
RnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgQ1NTU3R5bGVTZWxlY3Rvcjo6QWxs
QnV0RW1wdHlDU1NSdWxlcyk7Ci0gICAgaWYgKHN0eWxlRnJvbU1hdGNoZWRSdWxlcyAmJiBzdHls
ZUZyb21NYXRjaGVkUnVsZXMtPmxlbmd0aCgpKQorICAgIGlmIChzdHlsZUZyb21NYXRjaGVkUnVs
ZXMgJiYgIXN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+aXNFbXB0eSgpKQogICAgICAgICBtX211dGFi
bGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbihtX211dGFibGVTdHlsZS5nZXQoKSwgc3R5bGVG
cm9tTWF0Y2hlZFJ1bGVzLmdldCgpKTsKIAogICAgIC8vIDIuIFJlbW92ZSBzdHlsZSBwcmVzZW50
IGluIGNvbnRleHQgYW5kIG5vdCBvdmVycmlkZW4gYnkgbWF0Y2hlZCBydWxlcy4KQEAgLTExMTAs
NyArMTExMiw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0EKIAog
dm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUo
RWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIW1fbXV0YWJsZVN0eWxlIHx8ICFtX211dGFi
bGVTdHlsZS0+bGVuZ3RoKCkpCisgICAgaWYgKCFtX211dGFibGVTdHlsZSB8fCBtX211dGFibGVT
dHlsZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGRlZmF1bHRTdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0Zv
ckVsZW1lbnQoZWxlbWVudCwgQ1NTU3R5bGVTZWxlY3Rvcjo6VUFBbmRVc2VyQ1NTUnVsZXMpOwpA
QCAtMTIxNyw3ICsxMjE5LDcgQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRpbmdTdHls
ZSogcwogICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0
aW9uLCBzdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlv
bikpOwogCiAgICAgLy8gU2F2ZSB0aGUgcmVzdWx0IGZvciBsYXRlcgotICAgIG1fY3NzU3R5bGUg
PSBtdXRhYmxlU3R5bGUtPmNzc1RleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBtX2Nzc1N0
eWxlID0gbXV0YWJsZVN0eWxlLT5hc1RleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKIH0KIAogc3Rh
dGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUsIGNvbnN0IENTU1ZhbHVlTGlzdCogbmV3VGV4dERlY29yYXRpb24sIGludCBw
cm9wZXJ0eUlEKQpAQCAtMTMxMiw3ICsxMzE0LDcgQEAgc3RhdGljIHZvaWQgZGlmZlRleHREZWNv
cmF0aW9ucyhDU1NNdXRhYgogc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBBU1NFUlQoc3R5bGUpOwotICAgIFJlZlB0cjxDU1NW
YWx1ZT4gZm9udFdlaWdodCA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
Rm9udFdlaWdodCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250V2VpZ2h0ID0gc3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOwogCiAgICAg
aWYgKCFmb250V2VpZ2h0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzY2LDMwICsxMzY4
LDMwIEBAIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHIKICAgICBBU1NF
UlQoYmFzZVN0eWxlKTsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHJl
c3VsdCA9IHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMtPmNvcHkoKTsKIAotICAgIGJhc2VT
dHlsZS0+ZGlmZihyZXN1bHQuZ2V0KCkpOworICAgIHJlc3VsdC0+cmVtb3ZlRXF1aXZhbGVudFBy
b3BlcnRpZXMoYmFzZVN0eWxlKTsKIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gYmFzZVRleHREZWNv
cmF0aW9uc0luRWZmZWN0ID0gYmFzZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4g
YmFzZVRleHREZWNvcmF0aW9uc0luRWZmZWN0ID0gYmFzZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CiAg
ICAgZGlmZlRleHREZWNvcmF0aW9ucyhyZXN1bHQuZ2V0KCksIENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb24sIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7CiAgICAgZGlmZlRleHRE
ZWNvcmF0aW9ucyhyZXN1bHQuZ2V0KCksIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3QsIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7CiAKLSAgICBpZiAo
YmFzZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpICYmIGZv
bnRXZWlnaHRJc0JvbGQocmVzdWx0LmdldCgpKSA9PSBmb250V2VpZ2h0SXNCb2xkKGJhc2VTdHls
ZSkpCisgICAgaWYgKGJhc2VTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1By
b3BlcnR5Rm9udFNpemUpICYmIGZvbnRXZWlnaHRJc0JvbGQocmVzdWx0LmdldCgpKSA9PSBmb250
V2VpZ2h0SXNCb2xkKGJhc2VTdHlsZSkpCiAgICAgICAgIHJlc3VsdC0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlGb250V2VpZ2h0KTsKIAotICAgIGlmIChiYXNlU3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlDb2xvcikgJiYgZ2V0UkdCQUZvbnRDb2xvcihyZXN1bHQuZ2V0
KCkpID09IGdldFJHQkFGb250Q29sb3IoYmFzZVN0eWxlKSkKKyAgICBpZiAoYmFzZVN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlDb2xvcikgJiYgZ2V0UkdCQUZv
bnRDb2xvcihyZXN1bHQuZ2V0KCkpID09IGdldFJHQkFGb250Q29sb3IoYmFzZVN0eWxlKSkKICAg
ICAgICAgcmVzdWx0LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yKTsKIAotICAgIGlm
IChiYXNlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0QWxpZ24pICYm
IGdldFRleHRBbGlnbm1lbnQocmVzdWx0LmdldCgpKSA9PSBnZXRUZXh0QWxpZ25tZW50KGJhc2VT
dHlsZSkpCisgICAgaWYgKGJhc2VTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENT
U1Byb3BlcnR5VGV4dEFsaWduKSAmJiBnZXRUZXh0QWxpZ25tZW50KHJlc3VsdC5nZXQoKSkgPT0g
Z2V0VGV4dEFsaWdubWVudChiYXNlU3R5bGUpKQogICAgICAgICByZXN1bHQtPnJlbW92ZVByb3Bl
cnR5KENTU1Byb3BlcnR5VGV4dEFsaWduKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlu
dCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGludCBwcm9w
ZXJ0eUlEKQoraW50IGdldElkZW50aWZpZXJWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIGlmICghc3R5bGUpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHByb3BlcnR5SUQpOwogICAgIGlmICgh
dmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybiAwOwog
CkBAIC0xNDIyLDcgKzE0MjQsNyBAQCBpbnQgbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoRG9j
dW1lbnQqCiAKIGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3IoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKyAgICBS
ZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWVJbnRl
cm5hbChDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgaWYgKCFjc3NWYWx1ZSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmgJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBwcml2YXRlOgog
fTsKIAogLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBmdW5jdGlvbnMgb3IgbWFrZSB0aGVtIG5vbi1n
bG9iYWwgdG8gZGlzY291cmFnZSB1c2luZyBDU1NTdHlsZURlY2xhcmF0aW9uIGRpcmVjdGx5Lgot
aW50IGdldElkZW50aWZpZXJWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BlcnR5
SUQpOworaW50IGdldElkZW50aWZpZXJWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgQ1NTUHJv
cGVydHlJRCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDIsOCArNTAyLDggQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVt
ZW50LCBzdHlsZUF0dHIpOwotICAgICAgICB9IGVsc2UgaWYgKG5ld0lubGluZVN0eWxlLT5zdHls
ZSgpLT5sZW5ndGgoKSAhPSBpbmxpbmVTdHlsZS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRO
b2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCkt
PmNzc1RleHQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAobmV3SW5saW5lU3R5bGUtPnN0eWxlKCkt
PnByb3BlcnR5Q291bnQoKSAhPSBpbmxpbmVTdHlsZS0+cHJvcGVydHlDb3VudCgpKQorICAgICAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxl
LT5zdHlsZSgpLT5hc1RleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFRvbGVyYXRlIGRpZmZl
cmVuY2VzIGluIGlkLCBjbGFzcywgYW5kIHN0eWxlIGF0dHJpYnV0ZXMuCiAgICAgICAgIGlmIChp
c05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQoZWxlbWVudCkgJiYgYXJlSWRlbnRpY2FsRWxl
bWVudHMoZWxlbWVudCwgZWxlbWVudC0+cGFyZW50Tm9kZSgpKQpAQCAtNjYwLDcgKzY2MCw3IEBA
IHN0YXRpYyBib29sIGhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnQKIAogICAgIE5vZGUqIHdy
YXBwaW5nU3R5bGVTcGFuID0gdG9wTm9kZTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHls
ZUF0SW5zZXJ0aW9uUG9zID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoaW5zZXJ0aW9uUG9zLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBTdHJpbmcgc3R5bGVUZXh0ID0gc3R5bGVBdElu
c2VydGlvblBvcy0+c3R5bGUoKS0+Y3NzVGV4dCgpOworICAgIFN0cmluZyBzdHlsZVRleHQgPSBz
dHlsZUF0SW5zZXJ0aW9uUG9zLT5zdHlsZSgpLT5hc1RleHQoKTsKIAogICAgIC8vIEZJWE1FOiBU
aGlzIHN0cmluZyBjb21wYXJpc29uIGlzIGEgbmFpdmUgd2F5IG9mIGNvbXBhcmluZyB0d28gc3R5
bGVzLgogICAgIC8vIFdlIHNob3VsZCBiZSB0YWtpbmcgdGhlIGRpZmYgYW5kIGNoZWNrIHRoYXQg
dGhlIGRpZmYgaXMgZW1wdHkuCkBAIC03MjAsNyArNzIwLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6aGFuZGxlU3R5bAogICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuKHdyYXBwaW5nU3R5bGVTcGFuKTsKICAgICAgICAgcmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFwcGluZ1N0eWxlU3Bhbik7CiAgICAgfSBlbHNlCi0g
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUod3JhcHBpbmdTdHlsZVNwYW4sIHN0eWxlQXR0ciwgc3R5
bGUtPnN0eWxlKCktPmNzc1RleHQoKSk7CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUod3JhcHBp
bmdTdHlsZVNwYW4sIHN0eWxlQXR0ciwgc3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKIH0KIAog
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VFbmRJZk5lZWRlZCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBA
QCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsCiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7CiAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlU3Bhbk9wZW4sICgiPHNw
YW4gc3R5bGU9XCIiKSk7CiAgICAgb3V0LmFwcGVuZChpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHls
ZVNwYW5PcGVuKTsKLSAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIHN0eWxlLT5jc3NUZXh0
KCksIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKTsKKyAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1
ZShvdXQsIHN0eWxlLT5hc1RleHQoKSwgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOwogICAg
IG91dC5hcHBlbmQoJ1wiJyk7CiAgICAgb3V0LmFwcGVuZCgnPicpOwogfQpAQCAtMzI4LDcgKzMy
OCw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KICAgICAgICAg
aWYgKCFuZXdJbmxpbmVTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVQcmVmaXgsICgiIHN0eWxlPVwiIikpOwogICAg
ICAgICAgICAgb3V0LmFwcGVuZChzdHlsZVByZWZpeCk7Ci0gICAgICAgICAgICBhcHBlbmRBdHRy
aWJ1dGVWYWx1ZShvdXQsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCksIGRvY3Vt
ZW50SXNIVE1MKTsKKyAgICAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgbmV3SW5s
aW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpLCBkb2N1bWVudElzSFRNTCk7CiAgICAgICAgICAg
ICBvdXQuYXBwZW5kKCdcIicpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyAr
MTEyLDcgQEAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YQogCiAgICAg
UmVmUHRyPEVsZW1lbnQ+IHN0eWxlRWxlbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KHNwYW5UYWcsIGZhbHNlKTsKIAotICAgIFN0cmluZyBzdHlsZVRleHQgPSB0eXBpbmdT
dHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOworICAgIFN0cmlu
ZyBzdHlsZVRleHQgPSB0eXBpbmdTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkgKyAiIGRpc3BsYXk6
IGlubGluZSI7CiAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBzdHls
ZVRleHQuaW1wbCgpKTsKIAogICAgIHN0eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQoZnJhbWUtPmRv
Y3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiIiksIEFTU0VSVF9OT19FWENFUFRJT04p
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMDYy
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50OjpyZXNpemVJbWFnZVRv
Rml0KCkKICAgICBtX2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KHN0YXRpY19jYXN0PGludD4oaW1h
Z2VTaXplLmhlaWdodCgpICogc2NhbGUpKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjOwot
ICAgIG1faW1hZ2VFbGVtZW50LT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNv
ciwgIi13ZWJraXQtem9vbS1pbiIsIGZhbHNlLCBlYyk7CisgICAgbV9pbWFnZUVsZW1lbnQtPmVu
c3VyZUlubGluZVN0eWxlRGVjbCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13
ZWJraXQtem9vbS1pbiIsIGZhbHNlLCBlYyk7CiB9CiAKIHZvaWQgSW1hZ2VEb2N1bWVudDo6aW1h
Z2VDbGlja2VkKGludCB4LCBpbnQgeSkKQEAgLTMwOSw5ICszMDksOSBAQCB2b2lkIEltYWdlRG9j
dW1lbnQ6OnJlc3RvcmVJbWFnZVNpemUoKQogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAg
ICAgaWYgKGltYWdlRml0c0luV2luZG93KCkpCi0gICAgICAgIG1faW1hZ2VFbGVtZW50LT5zdHls
ZSgpLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgZWMpOworICAgICAgICBtX2lt
YWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5Q3Vyc29yLCBlYyk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlRWxlbWVudC0+c3R5
bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0LXpvb20tb3V0Iiwg
ZmFsc2UsIGVjKTsKKyAgICAgICAgbV9pbWFnZUVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVj
bCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBm
YWxzZSwgZWMpOwogICAgICAgICAKICAgICBtX2RpZFNocmlua0ltYWdlID0gZmFsc2U7CiB9CkBA
IC0zNDQsOSArMzQ0LDkgQEAgdm9pZCBJbWFnZURvY3VtZW50Ojp3aW5kb3dTaXplQ2hhbmdlZCgp
CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIAogICAgICAgICBpZiAoZml0c0lu
V2luZG93KQotICAgICAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxlKCktPnJlbW92ZVByb3Bl
cnR5KENTU1Byb3BlcnR5Q3Vyc29yLCBlYyk7CisgICAgICAgICAgICBtX2ltYWdlRWxlbWVudC0+
ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29y
LCBlYyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faW1hZ2VFbGVtZW50LT5zdHlsZSgp
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBmYWxz
ZSwgZWMpOworICAgICAgICAgICAgbV9pbWFnZUVsZW1lbnQtPmVuc3VyZUlubGluZVN0eWxlRGVj
bCgpLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1cnNvciwgIi13ZWJraXQtem9vbS1vdXQiLCBm
YWxzZSwgZWMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCShyZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTg3LDcgKzE5ODcs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgU3RyaW5n
IGRlY2xhcmF0aW9uVGV4dCgiZm9udDogIik7CiAgICAgZGVjbGFyYXRpb25UZXh0ICs9IG5ld0Zv
bnQ7CiAgICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGVtcERlY2wuZ2V0KCksIGRlY2xhcmF0
aW9uVGV4dCk7Ci0gICAgaWYgKCF0ZW1wRGVjbC0+bGVuZ3RoKCkpCisgICAgaWYgKHRlbXBEZWNs
LT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSBwYXJzZSBzdWNjZWVk
ZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShy
ZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgUkdCQTMyIGN1cnJlbnRDb2xv
cihIVE1MQ2FudmFzRWxlbWVudCogYwogICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmluRG9j
dW1lbnQoKSkKICAgICAgICAgcmV0dXJuIENvbG9yOjpibGFjazsKICAgICBSR0JBMzIgcmdiYSA9
IENvbG9yOjpibGFjazsKLSAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IocmdiYSwgY2FudmFzLT5z
dHlsZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Q29sb3IpKTsKKyAgICBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IocmdiYSwgY2FudmFzLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+Z2V0
UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSk7CiAgICAgcmV0dXJuIHJnYmE7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4NSw3ICsxMDg1LDcgQEAg
dm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXZhbGlkYXRlU3R5bAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIHNpemUgPSBtX2ZsYXRSdWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKICAg
ICAgICAgQ1NTU3R5bGVSdWxlKiBwYXJzZWRSdWxlID0gbV9mbGF0UnVsZXMuYXQoaSk7CiAgICAg
ICAgIGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpID09IHBhZ2VTdHlsZSkgewotICAgICAgICAgICAg
aWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCktPmNzc1RleHQoKSAhPSBwYWdlU3R5bGUtPmNzc1RleHQo
KSkgeworICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCktPmFzVGV4dCgpICE9IHBh
Z2VTdHlsZS0+Y3NzVGV4dCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGRpc2Fi
bGVkIHByb3BlcnRpZXMgZm9yIHRoZSBpbnZhbGlkIHN0eWxlIGhlcmUuCiAgICAgICAgICAgICAg
ICAgbV9pbnNwZWN0b3JTdHlsZXMucmVtb3ZlKHBhZ2VTdHlsZSk7CiAgICAgICAgICAgICAgICAg
c2V0U3R5bGVUZXh0KHBhZ2VTdHlsZSwgcGFnZVN0eWxlLT5jc3NUZXh0KCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTcsMTIgKzMxNyw5IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm8K
ICAgICAvLyBUaGUgYmFja2dyb3VuZC1pbWFnZSBhbmQgbGlzdC1zdHlsZS1pbWFnZSAoZm9yIHVs
IG9yIG9sKSBhcmUgdGhlIENTUyBwcm9wZXJ0aWVzCiAgICAgLy8gdGhhdCBtYWtlIHVzZSBvZiBp
bWFnZXMuIFdlIGl0ZXJhdGUgdG8gbWFrZSBzdXJlIHdlIGluY2x1ZGUgYW55IG90aGVyCiAgICAg
Ly8gaW1hZ2UgcHJvcGVydGllcyB0aGVyZSBtaWdodCBiZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3R5bGVEZWNsYXJhdGlvbi0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAvLyBG
SVhNRTogSXQncyBraW5kIG9mIHJpZGljdWxvdXMgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBuYW1lIGFu
ZCB0aGVuIGdldAotICAgICAgICAvLyB0aGUgdmFsdWUgb3V0IG9mIHRoZSBuYW1lLiBJZGVhbGx5
IHdlIHdvdWxkIGdldCB0aGUgdmFsdWUgb3V0IG9mIHRoZQotICAgICAgICAvLyBwcm9wZXJ0eSBJ
RCwgYnV0IENTU1N0eWxlRGVjbGFyYXRpb24gb25seSBnaXZlcyBhY2Nlc3MgdG8gcHJvcGVydHkK
LSAgICAgICAgLy8gbmFtZXMsIG5vdCBJRHMuCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3Nz
VmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlRGVjbGFy
YXRpb24tPml0ZW0oaSkpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZURlY2xh
cmF0aW9uLT5wcm9wZXJ0eUNvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBy
b3BlcnR5Q291bnQ7ICsraSkgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0g
c3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlBdChpKS52YWx1ZSgpOwogICAgICAgICBpZiAoIWNz
c1ZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lv
biAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsxODQsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5
T3JVbnN0eWxlZEFwcGxlU3R5bGVTCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlRGVjbCA9IGVsZW0tPmlubGluZVN0eWxl
RGVjbCgpOwotICAgIHJldHVybiAoIWlubGluZVN0eWxlRGVjbCB8fCBpbmxpbmVTdHlsZURlY2wt
Pmxlbmd0aCgpID09IDApOworICAgIHJldHVybiAoIWlubGluZVN0eWxlRGVjbCB8fCBpbmxpbmVT
dHlsZURlY2wtPmlzRW1wdHkoKSk7CiB9CiAKIFN0cmluZyBxdW90ZUFuZEVzY2FwZU5vblByaW50
YWJsZXMoY29uc3QgU3RyaW5nJiBzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxl
ZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0
eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsNyArNDM3LDcgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gU1ZHU3R5bGVkRWxlbWVudDo6ZwogICAgICAgICBpbnQgcHJvcElkID0g
U1ZHU3R5bGVkRWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoY3NzU1ZH
QXR0ci0+bmFtZSgpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoY3NzU1ZHQXR0ciwgcHJvcElk
LCBjc3NTVkdBdHRyLT52YWx1ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIGNzc1NWR0F0dHItPmRl
Y2woKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShuYW1lKTsKKyAgICByZXR1cm4gY3NzU1ZHQXR0ci0+
ZGVjbCgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKGNzc1Byb3BlcnR5SUQobmFtZSkpOwogfQogCiBi
b29sIFNWR1N0eWxlZEVsZW1lbnQ6Omluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDEtMzAgIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSBub24tQ1NTT00g
QVBJIG9mIENTU1N0eWxlRGVjbGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc3Mjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdlYmVsZW1lbnQuY3BwOgorICAgICAgICAoUVdlYkVs
ZW1lbnQ6OnN0eWxlUHJvcGVydHkpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OnNldFN0eWxlUHJv
cGVydHkpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb21wdXRlZFN0eWxlSW5j
bHVkaW5nVmlzaXRlZEluZm8pOgorCiAyMDEyLTAxLTI1ICBaZW5vIEFsYmlzc2VyICA8emVub0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gcHVibGljLnByaSBpcyBtaXNzaW5nIGRlcGVuZGVu
Y3kgdG8gcXVpY2sgbW9kdWxlLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNw
cAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNyArODQ0LDcgQEAgUVN0cmluZyBRV2ViRWxlbWVu
dDo6c3R5bGVQcm9wZXJ0eShjb25zdAogICAgIGlmICghcHJvcElEKQogICAgICAgICByZXR1cm4g
UVN0cmluZygpOwogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KS0+c3R5bGUoKTsKKyAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVt
ZW50KS0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7CiAKICAgICBpZiAoc3RyYXRlZ3kgPT0gSW5s
aW5lU3R5bGUpCiAgICAgICAgIHJldHVybiBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wSUQp
OwpAQCAtOTA5LDcgKzkwOSw3IEBAIHZvaWQgUVdlYkVsZW1lbnQ6OnNldFN0eWxlUHJvcGVydHko
Y29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQo
bmFtZSk7Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdGF0aWNfY2FzdDxTdHls
ZWRFbGVtZW50Kj4obV9lbGVtZW50KS0+c3R5bGUoKTsKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KS0+
ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCk7CiAgICAgaWYgKCFwcm9wSUQgfHwgIXN0eWxlKQogICAg
ICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiAxMDYy
MTcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM1LDEwICs2MzUsMTEgQEAgUVZhcmlhbnRN
YXAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmNvbQogICAgIGlmICghd2ViRWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIHJlczsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24+IHN0eWxlID0gY29tcHV0ZWRTdHlsZSh3ZWJFbGVtZW50LCB0cnVlKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24gPSBjb21wdXRlZFN0eWxlKHdlYkVsZW1lbnQsIHRydWUpOworICAgIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbio+KGNvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5nZXQoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIFFTdHJp
bmcgbmFtZSA9IHN0eWxlLT5pdGVtKGkpOwotICAgICAgICBRU3RyaW5nIHZhbHVlID0gKHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qPihzdHlsZS5nZXQoKSkpLT5nZXRQ
cm9wZXJ0eVZhbHVlKG5hbWUpOworICAgICAgICBRU3RyaW5nIHZhbHVlID0gc3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUobmFtZSk7CiAgICAgICAgIHJlc1tjb252ZXJ0VG9Qcm9wZXJ0eU5hbWUobmFt
ZSldID0gUVZhcmlhbnQodmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gcmVzOwo=
</data>
<flag name="commit-queue"
          id="125778"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124518</attachid>
            <date>2012-01-30 03:48:05 -0800</date>
            <delta_ts>2012-02-07 12:41:55 -0800</delta_ts>
            <desc>another one</desc>
            <filename>cssstyledeclaration-cleanup-10.patch</filename>
            <type>text/plain</type>
            <size>70867</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxMi0wMS0yOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIG5vbi1DU1NPTSBB
UEkgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzcyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDU1NTdHlsZURlY2xhcmF0aW9uIHNob3VsZCBleHBvc2UgdGhlIENT
U09NIEFQSSBvbmx5LiBTdWJjbGFzc2VzIHNob3VsZCBleHBvc2UgdGhlIGludGVybmFsIEFQSSBv
bmx5LiAKKyAgICAgICAgVGhpcyB3aWxsIG1vdmUgdXMgY2xvc2VyIHRvIGJlaW5nIGFibGUgdG8g
c3BsaXQgdGhlIENTU09NIEFQSSBmcm9tIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIC0gTWFrZSBDU1NTdHlsZURlY2xhcmF0aW9uIENTU09NIGZ1bmN0aW9u
cyB2aXJ0dWFsLCBpbnRlcm5hbCBmdW5jdGlvbnMgbm9uLXZpcnR1YWwuCisgICAgICAgIC0gTW92
ZSBpbXBsZW1lbnRhdGlvbnMgdG8gc3ViY2xhc3NlcyAoQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbikuCisgICAgICAgIC0gTWFrZSBDU1NPTSBm
dW5jdGlvbnMgaW4gdGhlIHN1YmNsYXNzZXMgcHJpdmF0ZSAobWFraW5nIGl0IGhhcmRlciB0byBp
bnZva2UgdGhlbSBpbnRlcm5hbGx5KS4KKyAgICAgICAgLSBTd2l0Y2ggYSBidW5jaCBvZiBwbGFj
ZXMgdG8gdXNlIGludGVybmFsIEFQSSBpbnN0ZWFkIG9mIENTU09NLgorCisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOENTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkUHJvcGVydHlHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lZFByb3BlcnR5U2V0
dGVyKToKKyAgICAgICAgCisgICAgICAgICAgICBTd2l0Y2ggdG8gKkludGVybmFsIHZlcnNpb25z
IG9mIHRoZSBDU1NPTSBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9w
ZXJ0aWVzSW5TZXQpOgorICAgICAgICAKKyAgICAgICAgICAgIE1vdmUgY29weVByb3BlcnRpZXNJ
blNldCB0byBzdWJjbGFzc2VzLCBkZXZpcnR1YWxpemUuCisgICAgICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFBy
b3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVBy
b3BlcnR5KToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6Cisg
ICAgICAgIChDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAqIGNzcy9DU1NG
b250RmFjZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxlOjpjc3NU
ZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppc1Byb3Bl
cnR5SW1wbGljaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldCk6CisgICAgICAgIAorICAgICAgICAg
ICAgTW92ZSBjb3B5UHJvcGVydGllc0luU2V0IHRvIHN1YmNsYXNzZXMsIGRldmlydHVhbGl6ZS4K
KyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3NzUHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyk6CisgICAgICAgIAorICAgICAg
ICAgICAgTW92ZSBkaWZmKCkgdG8gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24sIHJlbmFtZSB0
byByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcywgc3dpdGNoIHRvIG11dGF0ZQorICAgICAgICAg
ICAgdGhpcyBvYmplY3QgaW5zdGVhZCBvZiB0aGUgYXJndW1lbnQgb2JqZWN0LgorICAgIAorICAg
ICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OnByb3BlcnR5Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnByb3BlcnR5QXQpOgorICAgICAgICAKKyAgICAgICAgICAgIEV4
cG9zZSBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSBjb3VudCBpbnRlcm5hbGx5IChpdGVyYXRvciBz
aG91bGQgYmUgcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGVzZSkuCisgICAgICAgIAorICAgICAgICAq
IGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIChDU1NTdHlsZURlY2xhcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbCk6CisgICAgICAgIAorICAgICAgICAgICAg
QWRkICpJbnRlcm5hbCB2ZXJzaW9ucyBvZiBzb21lIENTU09NIEFQSXMgdG8gc3VwcG9ydCBzb21l
IGVkaXRpbmcgYW5kIGJpbmRpbmdzIHVzZXMuCisgICAgICAgICAgICBUaGVzZSB0YWtlIHByb3Bl
cnR5SURzIGluc3RlYWQgb2Ygc3RyaW5ncyBuYW1lcy4KKworICAgICAgICAqIGNzcy9DU1NTdHls
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpjc3NUZXh0KToKKyAg
ICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0
VG9SaWdodERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lUnVs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQp
OgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2spOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZVRvUHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJs
b2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGlu
ZVN0eWxlSWZOZWVkZWQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAg
ICAgICAgKCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5RWRpdGluZ1Byb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUNTU1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFJHQkFGb250Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dGluZ1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnJlbW92ZVN0eWxlQWRkZWRCeU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW5nV2l0aFN0eWxlT2ZOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRpbmdTdHlsZTo6c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5bGVPZk5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlbW92ZVByb3BlcnRpZXNJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERlZmF1bHRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udFdlaWdodElzQm9sZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQ
cm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SWRlbnRpZmllclZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6Omhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAKKyAgICAgICAgICAgIEFkYXB0
IHRvIGNoYW5nZXMuCisgICAgCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5s
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxl
U3BhbnMpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dHlsZU5vZGVPcGVuVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6cmVzaXplSW1hZ2VUb0ZpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50OjpyZXN0b3JlSW1hZ2VTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OndpbmRvd1NpemVDaGFuZ2VkKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50Q29sb3IpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZSk6CisgICAgICAgICog
cGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXpl
cjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eU9yVW5z
dHlsZWRBcHBsZVN0eWxlU3Bhbik6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6Z2V0UHJlc2VudGF0aW9uQXR0
cmlidXRlKToKKwogMjAxMi0wMS0yOSAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIEN1c3RvbSB3cml0dGVuIENTUyBsZXhlcgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5
bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
Q1NTU3R5bGVEZWNsYXJhdAogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKIAogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGltcCA9IFY4Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1
ZSA9IGltcC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wSW5mby0+cHJvcElEKTsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gaW1wLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwo
c3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcEluZm8tPnByb3BJRCkpOwogICAgIGlmIChj
c3NWYWx1ZSkgewogICAgICAgICBpZiAocHJvcEluZm8tPmhhZFBpeGVsT3JQb3NQcmVmaXggJiYK
ICAgICAgICAgICAgIGNzc1ZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKQEAgLTIxMiw3ICsy
MTIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAgICAg
IHJldHVybiB2OFN0cmluZ09yTnVsbChjc3NWYWx1ZS0+Y3NzVGV4dCgpKTsKICAgICB9CiAKLSAg
ICBTdHJpbmcgcmVzdWx0ID0gaW1wLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BJbmZvLT5wcm9wSUQp
OworICAgIFN0cmluZyByZXN1bHQgPSBpbXAtPmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChzdGF0
aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcm9wSW5mby0+cHJvcElEKSk7CiAgICAgaWYgKHJlc3Vs
dC5pc051bGwoKSkKICAgICAgICAgcmVzdWx0ID0gIiI7ICAvLyBjb252ZXJ0IG51bGwgdG8gZW1w
dHkgc3RyaW5nLgogCkBAIC0yMzIsNyArMjMyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
Q1NTU3R5bGVEZWNsYXJhdAogICAgICAgICBwcm9wZXJ0eVZhbHVlLmFwcGVuZCgicHgiKTsKIAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcC0+c2V0UHJvcGVydHkocHJvcEluZm8t
PnByb3BJRCwgcHJvcGVydHlWYWx1ZSwgZmFsc2UsIGVjKTsKKyAgICBpbXAtPnNldFByb3BlcnR5
SW50ZXJuYWwoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcEluZm8tPnByb3BJRCksIHBy
b3BlcnR5VmFsdWUsIGZhbHNlLCBlYyk7CiAKICAgICBpZiAoZWMpCiAgICAgICAgIHRocm93RXJy
b3IoZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTQm9yZGVySW1hZ2UuaCIKICNpbmNsdWRlICJDU1NMaW5l
Qm94Q29udGFpblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eS5oIgpAQCAtMjQ3NSwyNCArMjQ3Niw4IEBAIFN0cmluZyBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmdldFAKICAgICByZXR1cm4gIiI7CiB9CiAKLWJvb2wgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGludCAvKnByb3BlcnR5SUQqLykg
Y29uc3QKLXsKLSAgICAvLyBBbGwgY29tcHV0ZWQgc3R5bGVzIGhhdmUgYSBwcmlvcml0eSBvZiBm
YWxzZSAobm90ICJpbXBvcnRhbnQiKS4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGludCAvKnByb3BlcnR5
SUQqLywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQogCi12b2lkIENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IC8qcHJvcGVydHlJRCovLCBjb25zdCBTdHJp
bmcmIC8qdmFsdWUqLywgYm9vbCAvKmltcG9ydGFudCovLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLX0KLQotdW5zaWduZWQgQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp2aXJ0dWFsTGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVk
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBOb2Rl
KiBub2RlID0gbV9ub2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKQEAgLTI1MjUsOCArMjUxMCw4
IEBAIGJvb2wgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjc3NQcm8KICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBDU1NTdHls
ZURlY2xhcmF0aW9uOjpjc3NQcm9wZXJ0eU1hdGNoZXMocHJvcGVydHkpOworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LT5pZCgpKTsKKyAg
ICByZXR1cm4gdmFsdWUgJiYgdmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+
Y3NzVGV4dCgpOwogfQogCiBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHkoKSBjb25zdApAQCAtMjU3Nyw0ICsyNTYy
LDc0IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NDb21wdXRlZFN0eWwKICAgICByZXR1
cm4gbGlzdC5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChj
b25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAoreworICAgIFZlY3RvcjxDU1NQ
cm9wZXJ0eT4gbGlzdDsKKyAgICBsaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKKyAgICAg
ICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkoc2V0W2ld
LCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7CisgICAgfQorICAgIHJldHVybiBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGxpc3QpOworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKworU3Ry
aW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBT
dHJpbmcgJnByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5
SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKwor
U3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShj
b25zdCBTdHJpbmcmKQoreworICAgIC8vIEFsbCBjb21wdXRlZCBzdHlsZXMgaGF2ZSBhIHByaW9y
aXR5IG9mIG5vdCAiaW1wb3J0YW50Ii4KKyAgICByZXR1cm4gIiI7Cit9CisKK1N0cmluZyBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgcmV0dXJuICIiOworfQorCitib29sIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHko
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Cit9CisKK1N0
cmluZyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKK1Bhc3NSZWZQdHI8Q1NT
VmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZUlu
dGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3sKKyAgICByZXR1cm4gZ2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKworU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkKK3sKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKK30KKwordm9p
ZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9vbCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
ZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmgJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTYgKzUwLDkg
QEAgcHVibGljOgogICAgIGZyaWVuZCBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbj4gY29tcHV0ZWRTdHlsZShQYXNzUmVmUHRyPE5vZGU+LCBib29sIGFsbG93VmlzaXRlZFN0
eWxlLCBjb25zdCBTdHJpbmcmIHBzZXVkb0VsZW1lbnROYW1lKTsKICAgICB2aXJ0dWFsIH5DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24oKTsKIAotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgdmlydHVhbExlbmd0aCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0
eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9w
ZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQg
cHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQo
aW50IC8qcHJvcGVydHlJRCovKSBjb25zdCB7IHJldHVybiAtMTsgfQotICAgIHZpcnR1YWwgYm9v
bCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IC8qcHJvcGVydHlJRCovKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50
IHByb3BlcnR5SUQpIGNvbnN0OworICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9w
ZXJ0eUlEKSBjb25zdDsKKyAgICBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5
SUQpIGNvbnN0OwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBjb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpOwpAQCAtNzEsMTYgKzY0LDI4IEBAIHB1Ymxp
YzoKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRTVkdQcm9wZXJ0eUNTU1ZhbHVlKGludCBw
cm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBjb25zdDsKICNlbmRpZgogCi1wcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9w
ZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Tm9kZT4s
IGJvb2wgYWxsb3dWaXNpdGVkU3R5bGUsIGNvbnN0IFN0cmluZyYpOwogCisgICAgLy8gQ1NTT00g
ZnVuY3Rpb25zLiBEb24ndCBtYWtlIHRoZXNlIHB1YmxpYy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBw
cmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmly
dHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCk7
CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAg
IHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZp
cnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsK
IAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yU2hhZG93KGNvbnN0IFNoYWRvd0Rh
dGEqLCBpbnQsIFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiwgY29uc3QgQ29s
b3ImKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCShy
ZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBTdHJpbmcgQ1NTRm9udEZhY2VSdWxl
Ojpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVzdWx0KCJAZm9udC1mYWNlIik7CiAg
ICAgcmVzdWx0ICs9ICIgeyAiOwotICAgIHJlc3VsdCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7Cisg
ICAgcmVzdWx0ICs9IG1fc3R5bGUtPmFzVGV4dCgpOwogICAgIHJlc3VsdCArPSAifSI7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjgyLDE4ICs2ODIsNiBAQCBib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppc1By
b3BlCiAgICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHktPmlzSW1wbGljaXQoKSA6IGZhbHNl
OwogfQogCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQg
cHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2
YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgZWMgPSAwOwotICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCB0
cnVlLCB0cnVlKTsKLX0KLQogYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50
LCBib29sIG5vdGlmeUNoYW5nZWQpCiB7CiAgICAgQVNTRVJUKCFtX2l0ZXJhdG9yQ291bnQpOwpA
QCAtODI2LDkgKzgxNCw5IEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFkZFBh
cnMKICNlbmRpZgogfQogCi11bnNpZ25lZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6dmly
dHVhbExlbmd0aCgpIGNvbnN0Cit1bnNpZ25lZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
bGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbGVuZ3RoKCk7CisgICAgcmV0dXJuIHByb3Bl
cnR5Q291bnQoKTsKIH0KIAogU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppdGVt
KHVuc2lnbmVkIGkpIGNvbnN0CkBAIC04MzgsNyArODI2LDcgQEAgU3RyaW5nIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjppdGVtKAogICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3RhdGlj
X2Nhc3Q8Q1NTUHJvcGVydHlJRD4obV9wcm9wZXJ0aWVzW2ldLmlkKCkpKTsKIH0KIAotU3RyaW5n
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKK1N0cmluZyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YXNUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVz
dWx0ID0gIiI7CiAKQEAgLTEwNTIsNCArMTA0MCwxMjIgQEAgQ1NTUHJvcGVydHkqIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOgogICAgIHJldHVybiAwOwogfQogCitTdHJpbmcgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNzc1RleHQoKSBjb25zdAoreworICAgIHJldHVybiBhc1RleHQo
KTsKK30KKworUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAg
aW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFw
cm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKTsKK30KKworU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQoreworICAgIGlu
dCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJv
cGVydHlJRCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBnZXRQcm9wZXJ0
eVZhbHVlKHByb3BlcnR5SUQpOworfQorCitTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYg
KCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGdldFBy
b3BlcnR5UHJpb3JpdHkocHJvcGVydHlJRCkgPyAiaW1wb3J0YW50IiA6ICIiOworfQorCitTdHJp
bmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVy
dHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGludCBzaG9ydGhhbmRJRCA9IGdldFByb3BlcnR5U2hvcnRoYW5kKHBy
b3BlcnR5SUQpOworICAgIGlmICghc2hvcnRoYW5kSUQpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+
KHNob3J0aGFuZElEKSk7Cit9CisKK2Jvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omlz
UHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQg
cHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3Bl
cnR5SUQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXNQcm9wZXJ0eUltcGxp
Y2l0KHByb3BlcnR5SUQpOworfQorCit2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpz
ZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaW50
IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9w
ZXJ0eUlEKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5m
aW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CisgICAgZWMgPSAwOworICAg
IHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOworfQorCitT
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpbnQgcHJvcGVy
dHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBlYyA9IDA7CisgICAgcmV0dXJuIHJlbW92
ZVByb3BlcnR5KHByb3BlcnR5SUQsIHRydWUsIHRydWUpOworfQorCitQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVy
bmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3sgCisgICAgcmV0dXJuIGdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcGVydHlJRCk7IAorfQorCitTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
Cit7IAorICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOyAKK30KKwordm9p
ZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sgCisgICAgZWMgPSAwOworICAgIHNldFByb3BlcnR5KHByb3Bl
cnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOworfQorCitQYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3Bl
cnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAoreworICAg
IFZlY3RvcjxDU1NQcm9wZXJ0eT4gbGlzdDsKKyAgICBsaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0
W2ldKTsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJv
cGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7CisgICAgfQorICAgIHJldHVy
biBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGxpc3QpOworfQorCitib29sIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJv
cGVydHkqIHByb3BlcnR5KSBjb25zdAoreworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LT5pZCgpKTsKKyAgICByZXR1cm4gdmFsdWUgJiYg
dmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpOworfQorCit2
b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGll
cyhjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBWZWN0b3I8aW50PiBw
cm9wZXJ0aWVzVG9SZW1vdmU7CisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVy
dGllcy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3Byb3BlcnRpZXNb
aV07CisgICAgICAgICAgICBpZiAoc3R5bGUtPmNzc1Byb3BlcnR5TWF0Y2hlcygmcHJvcGVydHkp
KQorICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb1JlbW92ZS5hcHBlbmQocHJvcGVydHkuaWQo
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVz
ZSBtYXNzIHJlbW92YWwuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXNU
b1JlbW92ZS5zaXplKCk7IGkrKykKKyAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1Rv
UmVtb3ZlW2ldKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDEw
NjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB7IAogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKGVsZW1lbnQs
IGZhbHNlKSk7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzUHJvcGVydHlOYW1lKGNv
bnN0IFN0cmluZyYpOwogCiAgICAgLy8gVXNlZCBieSBTdHlsZWRFbGVtZW50Ojpjb3B5Tm9uQXR0
cmlidXRlUHJvcGVydGllcygpLgogICAgIHZvaWQgY29weVByb3BlcnRpZXNGcm9tKGNvbnN0IENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uJik7CkBAIC05MiwyNyArOTQsMTggQEAgcHVibGljOgog
ICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcywg
bV9wcm9wZXJ0aWVzLmJlZ2luKCkpOyB9CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgeyByZXR1
cm4gY29uc3RfaXRlcmF0b3IodGhpcywgbV9wcm9wZXJ0aWVzLmVuZCgpKTsgfQogCi0gICAgdmly
dHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQg
dmlydHVhbExlbmd0aCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGVydGllcy5zaXplKCk7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwg
U3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5z
aXplKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMu
aXNFbXB0eSgpOyB9CisgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5QXQodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllc1tpbmRleF07IH0KKworICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0
OworICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAg
ICBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0OworICAgIGlu
dCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3Q7CisgICAgYm9vbCBp
c1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwogCiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5KCkgY29uc3Q7CiAKLSAg
ICB1c2luZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlOwotCiAgICAg
Ym9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFu
dCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0
YW50LCB0cnVlKTsgfQogICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGRvdWJs
ZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0LCBib29sIGltcG9ydGFu
dCA9IGZhbHNlKSB7IHJldHVybiBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZSwgdW5pdCwg
aW1wb3J0YW50LCB0cnVlKTsgfQogICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNl
dFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOyB9CkBAIC0xMzgs
NiArMTMxLDEyIEBAIHB1YmxpYzoKICAgICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7
IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KIAogICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHls
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKTsKKyAgICAKKyAgICB2b2lkIHJlbW92ZUVxdWl2YWxl
bnRQcm9wZXJ0aWVzKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKworICAgIFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3Qg
aW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CisKKyAgICBTdHJpbmcgYXNUZXh0KCkg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwpA
QCAtMTUzLDYgKzE1MiwyMiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpOwogCisgICAgLy8gQ1NTT00g
ZnVuY3Rpb25zLiBEb24ndCBtYWtlIHRoZXNlIHB1YmxpYy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBw
cmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmly
dHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEKTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCk7
CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKKwogICAg
IHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogCiAgICAgU3RyaW5nIGdldFNob3J0aGFuZFZh
bHVlKGNvbnN0IGludCogcHJvcGVydGllcywgc2l6ZV90KSBjb25zdDsKQEAgLTE3Myw2ICsxODgs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7CiAgICAgYm9vbCByZW1vdmVQcm9wZXJ0aWVzSW5T
ZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsK
IAorICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkq
KSBjb25zdDsKKwogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT46OmNvbnN0X2l0ZXJhdG9yIGZpbmRQ
cm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJZCkgY29uc3Q7CiAgICAgVmVjdG9yPENTU1Byb3Bl
cnR5Pjo6aXRlcmF0b3IgZmluZFByb3BlcnR5V2l0aElkKGludCBwcm9wZXJ0eUlkKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24g
MTA2MjE3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NywxMDkgKzc3LDExIEBAIENTU1N0eWxlU2hlZXQqIENTU1N0eWxl
RGVjbGFyYXRpb246OnBhcmUKICAgICByZXR1cm4gbV9wYXJlbnQucnVsZS0+cGFyZW50U3R5bGVT
aGVldCgpOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGlu
dCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BJ
RCk7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNv
bnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcg
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5h
bWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0
dXJuIGdldFByb3BlcnR5UHJpb3JpdHkocHJvcElEKSA/ICJpbXBvcnRhbnQiIDogIiI7Ci19Ci0K
LVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChw
cm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgaW50IHNob3J0aGFuZElEID0gZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcElEKTsKLSAg
ICBpZiAoIXNob3J0aGFuZElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJu
IGdldFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihzaG9ydGhhbmRJRCkp
OwotfQotCi1ib29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJ
RChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIGlzUHJvcGVydHlJbXBsaWNpdChwcm9wSUQpOwotfQotCi12b2lkIENTU1N0
eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwot
ICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpbXBvcnRhbnQgPSBw
cmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7Ci0gICAgc2V0
UHJvcGVydHkocHJvcElELCB2YWx1ZSwgaW1wb3J0YW50LCBlYyk7Ci19Ci0KLVN0cmluZyBDU1NT
dHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaW50IHByb3BJRCA9IGNzc1Byb3BlcnR5SUQo
cHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wSUQsIGVjKTsKLX0KLQogYm9vbCBDU1NT
dHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSkKIHsKICAgICByZXR1cm4gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29s
IENTU1N0eWxlRGVjbGFyYXRpb246OmNzc1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0
eSogcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOwotICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1
ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7Ci19Ci0KLXZvaWQg
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVj
dG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOwotICAgIHsKLSAgICAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKLSAgICAg
ICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBz
dHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBDU1NQ
cm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7Ci0gICAgICAgICAgICBpZiAoY3NzUHJvcGVydHlNYXRj
aGVzKCZwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgcHJvcGVydGllc1RvUmVtb3ZlLmFwcGVu
ZChwcm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgbWFzcyByZW1vdmFsLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
cm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgpOyBpKyspCi0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9w
ZXJ0eShwcm9wZXJ0aWVzVG9SZW1vdmVbaV0pOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0
KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPENT
U1Byb3BlcnR5PiBsaXN0OwotICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAg
ICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRb
aV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKLSAgICB9Ci0gICAgcmV0dXJuIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobGlzdCk7Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiB2
b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OnNob3dTdHlsZSgpCiB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDYgKzIxLDcgQEAKICNpZm5kZWYgQ1NTU3R5bGVEZWNsYXJhdGlvbl9oCiAjZGVmaW5lIENTU1N0
eWxlRGVjbGFyYXRpb25faAogCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1
ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCkBAIC01MSwzNSArNTIs
MjYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
JikgPSAwOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbExl
bmd0aCgpOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3QgPSAw
OwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQorICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKLQotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0
cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBT
dHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0g
ICAgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KTsKLSAgICBib29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9w
ZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdl
dFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0g
MDsKLQotICAgIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoaW50IHByb3Bl
cnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2Rl
JikgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgPSAwOworICAg
IHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlT
aG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2Rl
JikgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgLy8gQ1NTUHJvcGVydHlJ
RCB2ZXJzaW9ucyBvZiB0aGUgQ1NTT00gZnVuY3Rpb25zIHRvIHN1cHBvcnQgYmluZGluZ3MgYW5k
IGVkaXRpbmcuCisgICAgLy8gVXNlIHRoZSBub24tdmlydHVhbCBtZXRob2RzIGluIHRoZSBjb25j
cmV0ZSBzdWJjbGFzc2VzIHdoZW4gcG9zc2libGUuCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgPSAwOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlE
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGNvcHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKIAotICAgIHZvaWQgZGlmZihDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5z
aWduZWQgbGVuZ3RoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVz
KGNvbnN0IENTU1Byb3BlcnR5KikgY29uc3QgPSAwOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZv
aWQgc2hvd1N0eWxlKCk7CkBAIC05Miw4ICs4NCw2IEBAIHByb3RlY3RlZDoKICAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUgPSAwKTsKICAgICBDU1NTdHlsZURlY2xh
cmF0aW9uKFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQsIGJvb2wgaXNJbmxpbmUpOwogCi0g
ICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNv
bnN0OwotCiAgICAgLy8gVGhlIGJpdHMgaW4gdGhpcyBzZWN0aW9uIGFyZSBvbmx5IHVzZWQgYnkg
c3BlY2lmaWMgc3ViY2xhc3NlcyBidXQga2VwdCBoZXJlCiAgICAgLy8gdG8gbWF4aW1pemUgc3Ry
dWN0IHBhY2tpbmcuCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCShyZXZp
c2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIFN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1Rl
eHQoKSBjb25zdAogICAgIFN0cmluZyByZXN1bHQgPSBzZWxlY3RvclRleHQoKTsKIAogICAgIHJl
c3VsdCArPSAiIHsgIjsKLSAgICByZXN1bHQgKz0gbV9zdHlsZS0+Y3NzVGV4dCgpOworICAgIHJl
c3VsdCArPSBtX3N0eWxlLT5hc1RleHQoKTsKICAgICByZXN1bHQgKz0gIn0iOwogCiAgICAgcmV0
dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIHN0YXRpYyBjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJiBwcmludEUKIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+LCBsZWZ0VG9SaWdodERlY2wsIChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkpKTsKLSAgICBpZiAoIWxlZnRUb1JpZ2h0
RGVjbC0+bGVuZ3RoKCkpCisgICAgaWYgKGxlZnRUb1JpZ2h0RGVjbC0+aXNFbXB0eSgpKQogICAg
ICAgICBsZWZ0VG9SaWdodERlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBD
U1NWYWx1ZUx0cik7CiAgICAgcmV0dXJuIGxlZnRUb1JpZ2h0RGVjbC5nZXQoKTsKIH0KQEAgLTMw
Nyw3ICszMDcsNyBAQCBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGxlZnRUCiBz
dGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24o
KQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiwgcmlnaHRUb0xlZnREZWNsLCAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNy
ZWF0ZSgpKSk7Ci0gICAgaWYgKCFyaWdodFRvTGVmdERlY2wtPmxlbmd0aCgpKQorICAgIGlmIChy
aWdodFRvTGVmdERlY2wtPmlzRW1wdHkoKSkKICAgICAgICAgcmlnaHRUb0xlZnREZWNsLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVSdGwpOwogICAgIHJldHVybiBy
aWdodFRvTGVmdERlY2wuZ2V0KCk7CiB9CkBAIC03ODAsNyArNzgwLDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ly8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0
IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIGlmICghZGVj
bCB8fCAoIWRlY2wtPmxlbmd0aCgpICYmICFpbmNsdWRlRW1wdHlSdWxlcykpIHsKKyAgICAgICAg
ICAgIGlmICghZGVjbCB8fCAoZGVjbC0+aXNFbXB0eSgpICYmICFpbmNsdWRlRW1wdHlSdWxlcykp
IHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVs
ZShjb29raWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KQEAgLTI1MjYsNyArMjUyNiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdl
UnVsZXNGb3IKIAogICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBh
cHBseSwgdGhlbiBpZ25vcmUgaXQuCiAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsKLSAgICAgICAgaWYgKCFkZWNsIHx8ICFkZWNs
LT5sZW5ndGgoKSkKKyAgICAgICAgaWYgKCFkZWNsIHx8IGRlY2wtPmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxpc3Qg
b2YgbWF0Y2hlZCBydWxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlm
cmFtZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuY3BwCShyZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBA
QCBTdHJpbmcgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjc3NUZXh0KCkgCiAgICAgU3RyaW5nIHJl
c3VsdCA9IG1fa2V5OwogCiAgICAgcmVzdWx0ICs9ICIgeyAiOwotICAgIHJlc3VsdCArPSBtX3N0
eWxlLT5jc3NUZXh0KCk7CisgICAgcmVzdWx0ICs9IG1fc3R5bGUtPmFzVGV4dCgpOwogICAgIHJl
c3VsdCArPSAifSI7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9T
dHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsOCArMTEyLDggQEAgdm9p
ZCBTdHlsZWRFbGVtZW50Ojp1cGRhdGVTdHlsZUF0dHJpYnV0ZQogICAgIEFTU0VSVCghaXNTdHls
ZUF0dHJpYnV0ZVZhbGlkKCkpOwogICAgIHNldElzU3R5bGVBdHRyaWJ1dGVWYWxpZCgpOwogICAg
IHNldElzU3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlKCk7Ci0gICAgaWYgKG1faW5saW5lU3R5
bGVEZWNsKQotICAgICAgICBjb25zdF9jYXN0PFN0eWxlZEVsZW1lbnQqPih0aGlzKS0+c2V0QXR0
cmlidXRlKHN0eWxlQXR0ciwgbV9pbmxpbmVTdHlsZURlY2wtPmNzc1RleHQoKSk7CisgICAgaWYg
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlRGVj
bCgpKQorICAgICAgICBjb25zdF9jYXN0PFN0eWxlZEVsZW1lbnQqPih0aGlzKS0+c2V0QXR0cmli
dXRlKHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKICAgICBjbGVhcklzU3luY2hy
b25pemluZ1N0eWxlQXR0cmlidXRlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzk1LDcgKzM5NSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb24K
ICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudEZvbnRTaXplICE9IGRlc2lyZWRGb250U2l6
ZSkgewogICAgICAgICAgICAgaW5saW5lU3R5bGVEZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRTaXplLCBTdHJpbmc6Om51bWJlcihkZXNpcmVkRm9udFNpemUpICsgInB4IiwgZmFsc2Up
OwotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIs
IGlubGluZVN0eWxlRGVjbC0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZURlY2wtPmFzVGV4dCgpKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoaW5saW5lU3R5bGVEZWNsLT5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyKTsK
QEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRp
bmdVCiAgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGlubGlu
ZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmNvcHkoKTsKICAgICAg
ICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBD
U1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlEaXJlY3Rpb24pOwotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVt
ZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgc2V0
Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7
CiAgICAgICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVT
cGFuKGVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oZWxlbWVudCk7CiAgICAgICAgIH0KQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGlubGluZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5
bGVEZWNsKCktPmNvcHkoKTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5tZXJnZShzdHlsZS0+
c3R5bGUoKSk7Ci0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0
ciwgaW5saW5lU3R5bGUtPmNzc1RleHQoKSk7CisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRl
KGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKICAgICAgICAgICAg
IG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGUKICAgICAvLyBTaW5jZSBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkIGNh
bid0IGFkZCBzdHlsZXMgdG8gYmxvY2stZmxvdyByZW5kZXIgb2JqZWN0cywgYWRkIHN0eWxlIGF0
dHJpYnV0ZSBpbnN0ZWFkLgogICAgIC8vIEZJWE1FOiBhcHBseUlubGluZVN0eWxlVG9SYW5nZSBz
aG91bGQgYmUgdXNlZCBoZXJlIGluc3RlYWQuCiAgICAgaWYgKChub2RlLT5yZW5kZXJlcigpLT5p
c0Jsb2NrRmxvdygpIHx8IG5vZGUtPmNoaWxkTm9kZUNvdW50KCkpICYmIG5vZGUtPmlzSFRNTEVs
ZW1lbnQoKSkgewotICAgICAgICBzZXROb2RlQXR0cmlidXRlKHRvSFRNTEVsZW1lbnQobm9kZSks
IHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSk7CisgICAgICAg
IHNldE5vZGVBdHRyaWJ1dGUodG9IVE1MRWxlbWVudChub2RlKSwgc3R5bGVBdHRyLCBuZXdJbmxp
bmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0xMzEyLDcgKzEzMTIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxl
KGNvCiAgICAgICAgIAogICAgIFN0cmluZyBjc3NUZXh0ID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUo
KTsKICAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wgPSBibG9jay0+aW5s
aW5lU3R5bGVEZWNsKCkpCi0gICAgICAgIGNzc1RleHQgKz0gZGVjbC0+Y3NzVGV4dCgpOworICAg
ICAgICBjc3NUZXh0ICs9IGRlY2wtPmFzVGV4dCgpOwogICAgIHNldE5vZGVBdHRyaWJ1dGUoYmxv
Y2ssIHN0eWxlQXR0ciwgY3NzVGV4dCk7CiB9CiAKQEAgLTEzNzcsNyArMTM3Nyw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWYKICAgICBpZiAoc3R5bGVDaGFuZ2Uu
Y3NzU3R5bGUoKS5sZW5ndGgoKSkgewogICAgICAgICBpZiAoc3R5bGVDb250YWluZXIpIHsKICAg
ICAgICAgICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZXhpc3RpbmdTdHlsZSA9
IHN0eWxlQ29udGFpbmVyLT5pbmxpbmVTdHlsZURlY2woKSkKLSAgICAgICAgICAgICAgICBzZXRO
b2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIGV4aXN0aW5nU3R5bGUtPmNz
c1RleHQoKSArIHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHNldE5v
ZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgZXhpc3RpbmdTdHlsZS0+YXNU
ZXh0KCkgKyBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIHN0
eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOwogICAgICAgICB9IGVsc2UgewpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3
ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBpbnQgZWRpdGluZ1Byb3BlcnRpZXNbXSA9IHsKIAogZW51
bSBFZGl0aW5nUHJvcGVydGllc1R5cGUgeyBPbmx5SW5oZXJpdGFibGVFZGl0aW5nUHJvcGVydGll
cywgQWxsRWRpdGluZ1Byb3BlcnRpZXMgfTsKIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlFZGl0aW5nUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwgRWRpdGluZ1Byb3BlcnRpZXNUeXBlIHR5cGUgPSBPbmx5SW5oZXJpdGFibGVF
ZGl0aW5nUHJvcGVydGllcykKK3RlbXBsYXRlIDxjbGFzcyBTdHlsZURlY2xhcmF0aW9uVHlwZT4K
K3N0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5RWRpdGlu
Z1Byb3BlcnRpZXMoU3R5bGVEZWNsYXJhdGlvblR5cGUqIHN0eWxlLCBFZGl0aW5nUHJvcGVydGll
c1R5cGUgdHlwZSA9IE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKQogewogICAgIGlm
ICh0eXBlID09IEFsbEVkaXRpbmdQcm9wZXJ0aWVzKQogICAgICAgICByZXR1cm4gc3R5bGUtPmNv
cHlQcm9wZXJ0aWVzSW5TZXQoZWRpdGluZ1Byb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgoZWRp
dGluZ1Byb3BlcnRpZXMpKTsKQEAgLTM0Nyw3ICszNDgsNyBAQCBzdGF0aWMgUkdCQTMyIGNzc1Zh
bHVlVG9SR0JBKENTU1ZhbHVlKiBjCiAKIHN0YXRpYyBpbmxpbmUgUkdCQTMyIGdldFJHQkFGb250
Q29sb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgcmV0dXJuIGNzc1ZhbHVl
VG9SR0JBKHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpLmdldCgp
KTsKKyAgICByZXR1cm4gY3NzVmFsdWVUb1JHQkEoc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWVJ
bnRlcm5hbChDU1NQcm9wZXJ0eUNvbG9yKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgUkdC
QTMyIHJnYmFCYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChOb2RlKiBub2RlKQpAQCAtMzg3LDEyICsz
ODgsMTAgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVRleHRGaWxsQW5kU3RybwogICAgIC8v
IElmIGEgbm9kZSdzIHRleHQgZmlsbCBjb2xvciBpcyBpbnZhbGlkLCB0aGVuIGl0cyBjaGlsZHJl
biB1c2UgCiAgICAgLy8gdGhlaXIgZm9udC1jb2xvciBhcyB0aGVpciB0ZXh0IGZpbGwgY29sb3Ig
KHRoZXkgZG9uJ3QKICAgICAvLyBpbmhlcml0IGl0KS4gIExpa2V3aXNlIGZvciBzdHJva2UgY29s
b3IuCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKCFyZW5kZXJTdHlsZS0+dGV4
dEZpbGxDb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwgZWMpOworICAgICAgICBtX211
dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9y
KTsKICAgICBpZiAoIXJlbmRlclN0eWxlLT50ZXh0U3Ryb2tlQ29sb3IoKS5pc1ZhbGlkKCkpCi0g
ICAgICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2VDb2xvciwgZWMpOwotICAgIEFTU0VSVCghZWMpOworICAgICAgICBtX211dGFibGVT
dHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpOwog
fQogCiB2b2lkIEVkaXRpbmdTdHlsZTo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQpAQCAtNDAwLDggKzM5OSw3IEBAIHZvaWQg
RWRpdGluZ1N0eWxlOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGUKICAgICBpZiAoIW1fbXV0YWJsZVN0
eWxlKQogICAgICAgICBtX211dGFibGVTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpjcmVhdGUoKTsKIAotICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgbV9tdXRhYmxlU3R5bGUt
PnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGVjKTsKKyAgICBtX211
dGFibGVTdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7CiB9
CiAKIHZvaWQgRWRpdGluZ1N0eWxlOjpyZXBsYWNlRm9udFNpemVCeUtleXdvcmRJZlBvc3NpYmxl
KFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSwgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKiBj
b21wdXRlZFN0eWxlKQpAQCAtNDgyLDcgKzQ4MCw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpzZXRT
dHlsZShQYXNzUmVmUHRyPEMKIAogdm9pZCBFZGl0aW5nU3R5bGU6Om92ZXJyaWRlV2l0aFN0eWxl
KGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKLSAgICBpZiAoIXN0
eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkpCisgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX211dGFibGVTdHlsZSkKICAgICAgICAg
bV9tdXRhYmxlU3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CkBA
IC01NDcsOCArNTQ1LDggQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlQWRkZWRCeU5v
ZAogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBwYXJlbnRTdHlsZSA9IGVkaXRpbmdTdHlsZUZyb21Db21wdXRlZFN0eWxlKGNvbXB1dGVkU3R5
bGUobm9kZS0+cGFyZW50Tm9kZSgpKSwgQWxsRWRpdGluZ1Byb3BlcnRpZXMpOwogICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxlID0gZWRpdGluZ1N0eWxlRnJv
bUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZShub2RlKSwgQWxsRWRpdGluZ1Byb3BlcnRpZXMp
OwotICAgIHBhcmVudFN0eWxlLT5kaWZmKG5vZGVTdHlsZS5nZXQoKSk7Ci0gICAgbm9kZVN0eWxl
LT5kaWZmKG1fbXV0YWJsZVN0eWxlLmdldCgpKTsKKyAgICBub2RlU3R5bGUtPnJlbW92ZUVxdWl2
YWxlbnRQcm9wZXJ0aWVzKHBhcmVudFN0eWxlLmdldCgpKTsKKyAgICBtX211dGFibGVTdHlsZS0+
cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMobm9kZVN0eWxlLmdldCgpKTsKIH0KIAogdm9pZCBF
ZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoTm9kZSog
bm9kZSkKQEAgLTU1OCw3ICs1NTYsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVD
b25mbGljdGluCiAKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHBhcmVu
dFN0eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZShub2Rl
LT5wYXJlbnROb2RlKCkpLCBBbGxFZGl0aW5nUHJvcGVydGllcyk7CiAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBub2RlU3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHV0
ZWRTdHlsZShjb21wdXRlZFN0eWxlKG5vZGUpLCBBbGxFZGl0aW5nUHJvcGVydGllcyk7Ci0gICAg
cGFyZW50U3R5bGUtPmRpZmYobm9kZVN0eWxlLmdldCgpKTsKKyAgICBub2RlU3R5bGUtPnJlbW92
ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKHBhcmVudFN0eWxlLmdldCgpKTsKIAogICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBub2RlU3R5bGUtPmVuZCgp
OwogICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbm9kZVN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCkBAIC02MTAsOSArNjA4LDkg
QEAgVHJpU3RhdGUgRWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoQwogICAgIGlmIChzaG91
bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMgPT0gSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKQog
ICAgICAgICBkaWZmZXJlbmNlLT5yZW1vdmVQcm9wZXJ0aWVzSW5TZXQodGV4dE9ubHlQcm9wZXJ0
aWVzLCBXVEZfQVJSQVlfTEVOR1RIKHRleHRPbmx5UHJvcGVydGllcykpOwogCi0gICAgaWYgKCFk
aWZmZXJlbmNlLT5sZW5ndGgoKSkKKyAgICBpZiAoZGlmZmVyZW5jZS0+aXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gVHJ1ZVRyaVN0YXRlOwotICAgIGlmIChkaWZmZXJlbmNlLT5sZW5ndGgoKSA9
PSBtX211dGFibGVTdHlsZS0+bGVuZ3RoKCkpCisgICAgaWYgKGRpZmZlcmVuY2UtPnByb3BlcnR5
Q291bnQoKSA9PSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlDb3VudCgpKQogICAgICAgICByZXR1
cm4gRmFsc2VUcmlTdGF0ZTsKIAogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwpAQCAtODAwLDcg
Kzc5OCw3IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpleHRyYWN0Q29uZmxpY3RpbmdJbXAKIAogYm9v
bCBFZGl0aW5nU3R5bGU6OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKE5vZGUq
IG5vZGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX211dGFibGVTdHlsZSB8fCAhZ2V0UHJvcGVy
dGllc05vdEluKG1fbXV0YWJsZVN0eWxlLmdldCgpLCBjb21wdXRlZFN0eWxlKG5vZGUpLmdldCgp
KS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuICFtX211dGFibGVTdHlsZSB8fCBnZXRQcm9wZXJ0aWVz
Tm90SW4obV9tdXRhYmxlU3R5bGUuZ2V0KCksIGNvbXB1dGVkU3R5bGUobm9kZSkuZ2V0KCkpLT5p
c0VtcHR5KCk7CiB9CiAKIGJvb2wgRWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JI
VE1MRXF1aXZhbGVudChjb25zdCBIVE1MRWxlbWVudCogZWxlbWVudCkKQEAgLTg2OSw3ICs4Njcs
OCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdChjb25zCiAgICAgICAgIGRp
cmVjdGlvbiA9IG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
RGlyZWN0aW9uKTsKICAgICB9CiAKLSAgICBzdHlsZS0+bV9tdXRhYmxlU3R5bGUtPmRpZmYobV9t
dXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50
UHJvcGVydGllcyhzdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkpOworCiAgICAgaWYgKGdldFJH
QkFGb250Q29sb3IobV9tdXRhYmxlU3R5bGUuZ2V0KCkpID09IGdldFJHQkFGb250Q29sb3Ioc3R5
bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpKSkKICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92
ZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IpOwogCkBAIC05OTYsNyArOTk1LDYgQEAgdm9pZCBF
ZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoQ1NTTXV0YWJsZQogICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CiAgICAgZm9yIChD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUg
PSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShpdC0+aWQoKSk7Ci0gICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CiAKICAgICAgICAgLy8gdGV4dCBkZWNvcmF0aW9ucyBuZXZlciBv
dmVycmlkZSB2YWx1ZXMKICAgICAgICAgaWYgKChpdC0+aWQoKSA9PSBDU1NQcm9wZXJ0eVRleHRE
ZWNvcmF0aW9uIHx8IGl0LT5pZCgpID09IENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3QpICYmIGl0LT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpICYmIHZhbHVlKSB7CkBAIC0x
MDA4LDcgKzEwMDYsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZShDU1NNdXRhYmxl
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobW9kZSA9PSBPdmVycmlkZVZhbHVlcyB8fCAobW9k
ZSA9PSBEb05vdE92ZXJyaWRlVmFsdWVzICYmICF2YWx1ZSkpCi0gICAgICAgICAgICBtX211dGFi
bGVTdHlsZS0+c2V0UHJvcGVydHkoaXQtPmlkKCksIGl0LT52YWx1ZSgpLT5jc3NUZXh0KCksIGl0
LT5pc0ltcG9ydGFudCgpLCBlYyk7CisgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJv
cGVydHkoaXQtPmlkKCksIGl0LT52YWx1ZSgpLT5jc3NUZXh0KCksIGl0LT5pc0ltcG9ydGFudCgp
KTsKICAgICB9CiB9CiAKQEAgLTEwNjgsNyArMTA2Niw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpt
ZXJnZVN0eWxlRnJvbVJ1bGVzRm8KIAogc3RhdGljIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luU3R5
bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlVG9SZW1vdmVQcm9wZXJ0aWVzRnJv
bSwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewotICAgIFZlY3RvcjxpbnQ+
IHByb3BlcnRpZXNUb1JlbW92ZShzdHlsZS0+bGVuZ3RoKCkpOworICAgIFZlY3RvcjxpbnQ+IHBy
b3BlcnRpZXNUb1JlbW92ZShzdHlsZS0+cHJvcGVydHlDb3VudCgpKTsKICAgICBzaXplX3QgaSA9
IDA7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHN0eWxlLT5lbmQoKTsKICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25z
dF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsraSkKQEAg
LTEwODUsNyArMTA4Myw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxl
c0EKIAogICAgIC8vIDEuIFJlbW92ZSBzdHlsZSBmcm9tIG1hdGNoZWQgcnVsZXMgYmVjYXVzZSBz
dHlsZSByZW1haW4gd2l0aG91dCByZXBlYXRpbmcgaXQgaW4gaW5saW5lIHN0eWxlIGRlY2xhcmF0
aW9uCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUZyb21NYXRj
aGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0
eWxlU2VsZWN0b3I6OkFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwotICAgIGlmIChzdHlsZUZyb21NYXRj
aGVkUnVsZXMgJiYgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkKKyAgICBpZiAoc3R5
bGVGcm9tTWF0Y2hlZFJ1bGVzICYmICFzdHlsZUZyb21NYXRjaGVkUnVsZXMtPmlzRW1wdHkoKSkK
ICAgICAgICAgbV9tdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4obV9tdXRhYmxlU3R5
bGUuZ2V0KCksIHN0eWxlRnJvbU1hdGNoZWRSdWxlcy5nZXQoKSk7CiAKICAgICAvLyAyLiBSZW1v
dmUgc3R5bGUgcHJlc2VudCBpbiBjb250ZXh0IGFuZCBub3Qgb3ZlcnJpZGVuIGJ5IG1hdGNoZWQg
cnVsZXMuCkBAIC0xMTEwLDcgKzExMDgsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5
bGVGcm9tUnVsZXNBCiAKIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVQcm9wZXJ0aWVzSW5FbGVt
ZW50RGVmYXVsdFN0eWxlKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFtX211dGFibGVT
dHlsZSB8fCAhbV9tdXRhYmxlU3R5bGUtPmxlbmd0aCgpKQorICAgIGlmICghbV9tdXRhYmxlU3R5
bGUgfHwgbV9tdXRhYmxlU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0U3R5bGUgPSBzdHlsZUZy
b21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OlVBQW5k
VXNlckNTU1J1bGVzKTsKQEAgLTEyMTcsNyArMTIxNSw3IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNo
YW5nZShFZGl0aW5nU3R5bGUqIHMKICAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eURpcmVjdGlvbiwgc3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlEaXJlY3Rpb24pKTsKIAogICAgIC8vIFNhdmUgdGhlIHJlc3VsdCBmb3IgbGF0ZXIK
LSAgICBtX2Nzc1N0eWxlID0gbXV0YWJsZVN0eWxlLT5jc3NUZXh0KCkuc3RyaXBXaGl0ZVNwYWNl
KCk7CisgICAgbV9jc3NTdHlsZSA9IG11dGFibGVTdHlsZS0+YXNUZXh0KCkuc3RyaXBXaGl0ZVNw
YWNlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBDU1NWYWx1ZUxpc3QqIG5ld1RleHRE
ZWNvcmF0aW9uLCBpbnQgcHJvcGVydHlJRCkKQEAgLTEzMTIsNyArMTMxMCw3IEBAIHN0YXRpYyB2
b2lkIGRpZmZUZXh0RGVjb3JhdGlvbnMoQ1NTTXV0YWIKIHN0YXRpYyBib29sIGZvbnRXZWlnaHRJ
c0JvbGQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsK
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRXZWlnaHQgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gZm9udFdl
aWdodCA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlGb250
V2VpZ2h0KTsKIAogICAgIGlmICghZm9udFdlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTM2NiwzMCArMTM2NCwzMCBAQCBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGdldFByCiAgICAgQVNTRVJUKGJhc2VTdHlsZSk7CiAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiByZXN1bHQgPSBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLT5jb3B5
KCk7CiAKLSAgICBiYXNlU3R5bGUtPmRpZmYocmVzdWx0LmdldCgpKTsKKyAgICByZXN1bHQtPnJl
bW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKGJhc2VTdHlsZSk7CiAKLSAgICBSZWZQdHI8Q1NTVmFs
dWU+IGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IGJhc2VTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAgICBS
ZWZQdHI8Q1NTVmFsdWU+IGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IGJhc2VTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25zSW5FZmZlY3QpOwogICAgIGRpZmZUZXh0RGVjb3JhdGlvbnMocmVzdWx0LmdldCgpLCBDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uLCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0KCkp
OwogICAgIGRpZmZUZXh0RGVjb3JhdGlvbnMocmVzdWx0LmdldCgpLCBDU1NQcm9wZXJ0eVdlYmtp
dFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QuZ2V0
KCkpOwogCi0gICAgaWYgKGJhc2VTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTaXplKSAmJiBmb250V2VpZ2h0SXNCb2xkKHJlc3VsdC5nZXQoKSkgPT0gZm9udFdlaWdo
dElzQm9sZChiYXNlU3R5bGUpKQorICAgIGlmIChiYXNlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWVJbnRlcm5hbChDU1NQcm9wZXJ0eUZvbnRTaXplKSAmJiBmb250V2VpZ2h0SXNCb2xkKHJlc3Vs
dC5nZXQoKSkgPT0gZm9udFdlaWdodElzQm9sZChiYXNlU3R5bGUpKQogICAgICAgICByZXN1bHQt
PnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCk7CiAKLSAgICBpZiAoYmFzZVN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpICYmIGdldFJHQkFGb250
Q29sb3IocmVzdWx0LmdldCgpKSA9PSBnZXRSR0JBRm9udENvbG9yKGJhc2VTdHlsZSkpCisgICAg
aWYgKGJhc2VTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5Q29s
b3IpICYmIGdldFJHQkFGb250Q29sb3IocmVzdWx0LmdldCgpKSA9PSBnZXRSR0JBRm9udENvbG9y
KGJhc2VTdHlsZSkpCiAgICAgICAgIHJlc3VsdC0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlD
b2xvcik7CiAKLSAgICBpZiAoYmFzZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5VGV4dEFsaWduKSAmJiBnZXRUZXh0QWxpZ25tZW50KHJlc3VsdC5nZXQoKSkgPT0gZ2V0VGV4
dEFsaWdubWVudChiYXNlU3R5bGUpKQorICAgIGlmIChiYXNlU3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eVRleHRBbGlnbikgJiYgZ2V0VGV4dEFsaWdubWVudChy
ZXN1bHQuZ2V0KCkpID09IGdldFRleHRBbGlnbm1lbnQoYmFzZVN0eWxlKSkKICAgICAgICAgcmVz
dWx0LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbik7CiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1pbnQgZ2V0SWRlbnRpZmllclZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlLCBpbnQgcHJvcGVydHlJRCkKK2ludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKIHsKICAgICBpZiAo
IXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUg
PSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKKyAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChwcm9wZXJ0
eUlEKTsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAg
ICAgICByZXR1cm4gMDsKIApAQCAtMTQyMiw3ICsxNDIwLDcgQEAgaW50IGxlZ2FjeUZvbnRTaXpl
RnJvbUNTU1ZhbHVlKERvY3VtZW50KgogCiBib29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENv
bG9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Y3NzVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcik7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlm
ICghY3NzVmFsdWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2
LDcgQEAgcHJpdmF0ZToKIH07CiAKIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgZnVuY3Rpb25zIG9y
IG1ha2UgdGhlbSBub24tZ2xvYmFsIHRvIGRpc2NvdXJhZ2UgdXNpbmcgQ1NTU3R5bGVEZWNsYXJh
dGlvbiBkaXJlY3RseS4KLWludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlv
biosIGludCBwcm9wZXJ0eUlEKTsKK2ludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiosIENTU1Byb3BlcnR5SUQpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc1MSwxMyAr
Mjc1MSw5IEBAIHZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCgKICAgICBp
ZiAoIWVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVu
dCo+KGVsZW1lbnQpLT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKTsKLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJy
ZWFrLXdvcmQiLCBmYWxzZSwgZWMpOwotICAgIEFTU0VSVCghZWMpOwotICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlLCAic3BhY2UiLCBmYWxzZSwgZWMpOwot
ICAgIEFTU0VSVCghZWMpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dExpbmVCcmVhaywgImFmdGVyLXdoaXRlLXNwYWNlIiwgZmFsc2UsIGVjKTsKLSAgICBBU1NFUlQo
IWVjKTsKKyAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFr
LXdvcmQiLCBmYWxzZSk7CisgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0
TmJzcE1vZGUsICJzcGFjZSIsIGZhbHNlKTsKKyAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlXZWJraXRMaW5lQnJlYWssICJhZnRlci13aGl0ZS1zcGFjZSIsIGZhbHNlKTsKIH0KIAog
Ly8gU2VhcmNoZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBpZiBub3RoaW5n
IGlzIHNlbGVjdGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDIsOCArNTAyLDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVk
dQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOwotICAgICAg
ICB9IGVsc2UgaWYgKG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5sZW5ndGgoKSAhPSBpbmxpbmVT
dHlsZS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0
eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAobmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPnByb3BlcnR5Q291bnQoKSAhPSBpbmxp
bmVTdHlsZS0+cHJvcGVydHlDb3VudCgpKQorICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShl
bGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAK
ICAgICAgICAgLy8gRklYTUU6IFRvbGVyYXRlIGRpZmZlcmVuY2VzIGluIGlkLCBjbGFzcywgYW5k
IHN0eWxlIGF0dHJpYnV0ZXMuCiAgICAgICAgIGlmIChpc05vblRhYmxlQ2VsbEhUTUxCbG9ja0Vs
ZW1lbnQoZWxlbWVudCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudCwgZWxlbWVudC0+
cGFyZW50Tm9kZSgpKQpAQCAtNjYwLDcgKzY2MCw3IEBAIHN0YXRpYyBib29sIGhhbmRsZVN0eWxl
U3BhbnNCZWZvcmVJbnNlcnQKIAogICAgIE5vZGUqIHdyYXBwaW5nU3R5bGVTcGFuID0gdG9wTm9k
ZTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZUF0SW5zZXJ0aW9uUG9zID0gRWRpdGlu
Z1N0eWxlOjpjcmVhdGUoaW5zZXJ0aW9uUG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsK
LSAgICBTdHJpbmcgc3R5bGVUZXh0ID0gc3R5bGVBdEluc2VydGlvblBvcy0+c3R5bGUoKS0+Y3Nz
VGV4dCgpOworICAgIFN0cmluZyBzdHlsZVRleHQgPSBzdHlsZUF0SW5zZXJ0aW9uUG9zLT5zdHls
ZSgpLT5hc1RleHQoKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHN0cmluZyBjb21wYXJpc29uIGlz
IGEgbmFpdmUgd2F5IG9mIGNvbXBhcmluZyB0d28gc3R5bGVzLgogICAgIC8vIFdlIHNob3VsZCBi
ZSB0YWtpbmcgdGhlIGRpZmYgYW5kIGNoZWNrIHRoYXQgdGhlIGRpZmYgaXMgZW1wdHkuCkBAIC03
MjAsNyArNzIwLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bAog
ICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHdy
YXBwaW5nU3R5bGVTcGFuKTsKICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3
cmFwcGluZ1N0eWxlU3Bhbik7CiAgICAgfSBlbHNlCi0gICAgICAgIHNldE5vZGVBdHRyaWJ1dGUo
d3JhcHBpbmdTdHlsZVNwYW4sIHN0eWxlQXR0ciwgc3R5bGUtPnN0eWxlKCktPmNzc1RleHQoKSk7
CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUod3JhcHBpbmdTdHlsZVNwYW4sIHN0eWxlQXR0ciwg
c3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKIH0KIAogdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6bWVyZ2VFbmRJZk5lZWRlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CShyZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRTdHlsCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIHN0eWxlU3Bhbk9wZW4sICgiPHNwYW4gc3R5bGU9XCIiKSk7CiAgICAgb3V0
LmFwcGVuZChpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHlsZVNwYW5PcGVuKTsKLSAgICBhcHBlbmRB
dHRyaWJ1dGVWYWx1ZShvdXQsIHN0eWxlLT5jc3NUZXh0KCksIGRvY3VtZW50LT5pc0hUTUxEb2N1
bWVudCgpKTsKKyAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIHN0eWxlLT5hc1RleHQoKSwg
ZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOwogICAgIG91dC5hcHBlbmQoJ1wiJyk7CiAgICAg
b3V0LmFwcGVuZCgnPicpOwogfQpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KICAgICAgICAgaWYgKCFuZXdJbmxpbmVTdHlsZS0+aXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
c3R5bGVQcmVmaXgsICgiIHN0eWxlPVwiIikpOwogICAgICAgICAgICAgb3V0LmFwcGVuZChzdHls
ZVByZWZpeCk7Ci0gICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIG5ld0lubGlu
ZVN0eWxlLT5zdHlsZSgpLT5jc3NUZXh0KCksIGRvY3VtZW50SXNIVE1MKTsKKyAgICAgICAgICAg
IGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4
dCgpLCBkb2N1bWVudElzSFRNTCk7CiAgICAgICAgICAgICBvdXQuYXBwZW5kKCdcIicpOwogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bQkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIFJlbmRlclN0
eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YQogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxlRWxl
bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHNwYW5UYWcsIGZhbHNlKTsK
IAotICAgIFN0cmluZyBzdHlsZVRleHQgPSB0eXBpbmdTdHlsZS0+c3R5bGUoKS0+Y3NzVGV4dCgp
ICsgIiBkaXNwbGF5OiBpbmxpbmUiOworICAgIFN0cmluZyBzdHlsZVRleHQgPSB0eXBpbmdTdHls
ZS0+c3R5bGUoKS0+YXNUZXh0KCkgKyAiIGRpc3BsYXk6IGlubGluZSI7CiAgICAgc3R5bGVFbGVt
ZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBzdHlsZVRleHQuaW1wbCgpKTsKIAogICAgIHN0
eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQoZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdU
ZXh0Tm9kZSgiIiksIEFTU0VSVF9OT19FWENFUFRJT04pOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsOCArMjUzLDcgQEAg
dm9pZCBJbWFnZURvY3VtZW50OjpyZXNpemVJbWFnZVRvRml0KCkKICAgICBtX2ltYWdlRWxlbWVu
dC0+c2V0V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihpbWFnZVNpemUud2lkdGgoKSAqIHNjYWxlKSk7
CiAgICAgbV9pbWFnZUVsZW1lbnQtPnNldEhlaWdodChzdGF0aWNfY2FzdDxpbnQ+KGltYWdlU2l6
ZS5oZWlnaHQoKSAqIHNjYWxlKSk7CiAgICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBt
X2ltYWdlRWxlbWVudC0+c3R5bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICIt
d2Via2l0LXpvb20taW4iLCBmYWxzZSwgZWMpOworICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJ
bmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IsICItd2Via2l0
LXpvb20taW4iLCBmYWxzZSk7CiB9CiAKIHZvaWQgSW1hZ2VEb2N1bWVudDo6aW1hZ2VDbGlja2Vk
KGludCB4LCBpbnQgeSkKQEAgLTMwNywxMSArMzA2LDEwIEBAIHZvaWQgSW1hZ2VEb2N1bWVudDo6
cmVzdG9yZUltYWdlU2l6ZSgpCiAgICAgbV9pbWFnZUVsZW1lbnQtPnNldFdpZHRoKGltYWdlU2l6
ZS53aWR0aCgpKTsKICAgICBtX2ltYWdlRWxlbWVudC0+c2V0SGVpZ2h0KGltYWdlU2l6ZS5oZWln
aHQoKSk7CiAgICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBpZiAoaW1hZ2VGaXRzSW5X
aW5kb3coKSkKLSAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxlKCktPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5Q3Vyc29yLCBlYyk7CisgICAgICAgIG1faW1hZ2VFbGVtZW50LT5lbnN1cmVJ
bmxpbmVTdHlsZURlY2woKS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDdXJzb3IpOwogICAg
IGVsc2UKLSAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxlKCktPnNldFByb3BlcnR5KENTU1By
b3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlLCBlYyk7CisgICAgICAgIG1f
aW1hZ2VFbGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZURlY2woKS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlDdXJzb3IsICItd2Via2l0LXpvb20tb3V0IiwgZmFsc2UpOwogICAgICAgICAKICAgICBt
X2RpZFNocmlua0ltYWdlID0gZmFsc2U7CiB9CkBAIC0zNDEsMTIgKzMzOSwxMCBAQCB2b2lkIElt
YWdlRG9jdW1lbnQ6OndpbmRvd1NpemVDaGFuZ2VkKCkKICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFz
IGJlZW4gZXhwbGljaXRseSB6b29tZWQgaW4sIHJlc3RvcmUgdGhlIGN1cnNvciBpZiB0aGUgaW1h
Z2UgZml0cwogICAgIC8vIGFuZCBzZXQgaXQgdG8gYSB6b29tIG91dCBjdXJzb3IgaWYgdGhlIGlt
YWdlIGRvZXNuJ3QgZml0CiAgICAgaWYgKCFtX3Nob3VsZFNocmlua0ltYWdlKSB7Ci0gICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIAogICAgICAgICBpZiAoZml0c0luV2luZG93KQot
ICAgICAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxlKCktPnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5Q3Vyc29yLCBlYyk7CisgICAgICAgICAgICBtX2ltYWdlRWxlbWVudC0+ZW5zdXJlSW5s
aW5lU3R5bGVEZWNsKCktPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Q3Vyc29yKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9pbWFnZUVsZW1lbnQtPnN0eWxlKCktPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlLCBlYyk7CisgICAg
ICAgICAgICBtX2ltYWdlRWxlbWVudC0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5Q3Vyc29yLCAiLXdlYmtpdC16b29tLW91dCIsIGZhbHNlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMTA2
MjE3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4Nyw3ICsxOTg3LDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoYwogICAgIFN0cmluZyBkZWNsYXJhdGlvblRleHQo
ImZvbnQ6ICIpOwogICAgIGRlY2xhcmF0aW9uVGV4dCArPSBuZXdGb250OwogICAgIHBhcnNlci5w
YXJzZURlY2xhcmF0aW9uKHRlbXBEZWNsLmdldCgpLCBkZWNsYXJhdGlvblRleHQpOwotICAgIGlm
ICghdGVtcERlY2wtPmxlbmd0aCgpKQorICAgIGlmICh0ZW1wRGVjbC0+aXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgcGFyc2Ugc3VjY2VlZGVkLgpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMTA2MjE3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw3ICs2OSw3IEBAIFJHQkEzMiBjdXJyZW50Q29sb3IoSFRNTENhbnZhc0VsZW1l
bnQqIGMKICAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5pbkRvY3VtZW50KCkpCiAgICAgICAg
IHJldHVybiBDb2xvcjo6YmxhY2s7CiAgICAgUkdCQTMyIHJnYmEgPSBDb2xvcjo6YmxhY2s7Ci0g
ICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIGNhbnZhcy0+c3R5bGUoKS0+Z2V0UHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yKSk7CisgICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJn
YmEsIGNhbnZhcy0+ZW5zdXJlSW5saW5lU3R5bGVEZWNsKCktPmdldFByb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlDb2xvcikpOwogICAgIHJldHVybiByZ2JhOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAx
MDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODUsNyArMTA4NSw3IEBAIHZvaWQgSW5zcGVjdG9yU3R5
bGVTaGVldDo6cmV2YWxpZGF0ZVN0eWwKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0g
bV9mbGF0UnVsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIENTU1N0eWxlUnVs
ZSogcGFyc2VkUnVsZSA9IG1fZmxhdFJ1bGVzLmF0KGkpOwogICAgICAgICBpZiAocGFyc2VkUnVs
ZS0+c3R5bGUoKSA9PSBwYWdlU3R5bGUpIHsKLSAgICAgICAgICAgIGlmIChwYXJzZWRSdWxlLT5z
dHlsZSgpLT5jc3NUZXh0KCkgIT0gcGFnZVN0eWxlLT5jc3NUZXh0KCkpIHsKKyAgICAgICAgICAg
IGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpLT5hc1RleHQoKSAhPSBwYWdlU3R5bGUtPmNzc1RleHQo
KSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBkaXNhYmxlZCBwcm9wZXJ0aWVzIGZv
ciB0aGUgaW52YWxpZCBzdHlsZSBoZXJlLgogICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yU3R5
bGVzLnJlbW92ZShwYWdlU3R5bGUpOwogICAgICAgICAgICAgICAgIHNldFN0eWxlVGV4dChwYWdl
U3R5bGUsIHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMDYyMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDggKzQ0Niw3IEBAIGJv
b2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBpbm5lclJhbmdlID0gaW5uZXJGcmFtZS0+
c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3JlYXRlKCk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvci5zZXJpYWxpemVkKCksIGZhbHNlLCBlYyk7
CisgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvci5zZXJp
YWxpemVkKCksIGZhbHNlKTsKICAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS0+c2hv
dWxkQXBwbHlTdHlsZShzdHlsZS5nZXQoKSwgaW5uZXJSYW5nZS5nZXQoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybURyYWdEZXN0aW5h
dGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNpb24gMTA2MjE3KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxNywxMiArMzE3LDkgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNG
bwogICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWltYWdlIGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3Ig
dWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3BlcnRpZXMKICAgICAvLyB0aGF0IG1ha2UgdXNlIG9m
IGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtlIHN1cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKICAg
ICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJlIG1pZ2h0IGJlLgotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9uLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBJdCdzIGtpbmQgb2YgcmlkaWN1bG91cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUg
YW5kIHRoZW4gZ2V0Ci0gICAgICAgIC8vIHRoZSB2YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFs
bHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBvdXQgb2YgdGhlCi0gICAgICAgIC8vIHByb3BlcnR5
IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlvbiBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0
eQotICAgICAgICAvLyBuYW1lcywgbm90IElEcy4KLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBj
c3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNs
YXJhdGlvbi0+aXRlbShpKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHN0eWxlRGVj
bGFyYXRpb24tPnByb3BlcnR5Q291bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cHJvcGVydHlDb3VudDsgKytpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUg
PSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUF0KGkpLnZhbHVlKCk7CiAgICAgICAgIGlmICgh
Y3NzVmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTA2MjE3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTcxMCwyOCArMTcxMCwyNiBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29u
c3QgUGxhdGZvcm1NCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFy
YXRpb24gPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmVuc3VyZUlubGlu
ZVN0eWxlRGVjbCgpOwogICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSByZW5kZXJlci0+c3R5
bGUoKS0+Ym94U2l6aW5nKCkgPT0gQk9SREVSX0JPWDsKIAotICAgIEV4Y2VwdGlvbkNvZGUgZWM7
Ci0KICAgICBpZiAocmVzaXplICE9IFJFU0laRV9WRVJUSUNBTCAmJiBkaWZmZXJlbmNlLndpZHRo
KCkpIHsKICAgICAgICAgaWYgKGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKICAg
ICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNp
dCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0g
ICAgICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdp
bkxlZnQsIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9y
KSArICJweCIsIGZhbHNlLCBlYyk7Ci0gICAgICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+
bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UsIGVjKTsKKyAgICAgICAg
ICAgIHN0eWxlRGVjbGFyYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwg
U3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IpICsgInB4
IiwgZmFsc2UpOworICAgICAgICAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlNYXJnaW5SaWdodCwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1hcmdpblJpZ2h0
KCkgLyB6b29tRmFjdG9yKSArICJweCIsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBMYXlv
dXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVy
ID8gMCA6IHJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CiAgICAgICAgIGJhc2VX
aWR0aCA9IGJhc2VXaWR0aCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0eWxlRGVjbGFyYXRpb24t
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIFN0cmluZzo6bnVtYmVyKGJhc2VXaWR0aCAr
IGRpZmZlcmVuY2Uud2lkdGgoKSkgKyAicHgiLCBmYWxzZSwgZWMpOworICAgICAgICBzdHlsZURl
Y2xhcmF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBTdHJpbmc6Om51bWJlcihi
YXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpICsgInB4IiwgZmFsc2UpOwogICAgIH0KIAog
ICAgIGlmIChyZXNpemUgIT0gUkVTSVpFX0hPUklaT05UQUwgJiYgZGlmZmVyZW5jZS5oZWlnaHQo
KSkgewogICAgICAgICBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0
IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAg
ICAgICAgICAgIHN0eWxlRGVjbGFyYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2lu
VG9wLCBTdHJpbmc6Om51bWJlcihyZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yKSAr
ICJweCIsIGZhbHNlLCBlYyk7Ci0gICAgICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgU3RyaW5nOjpudW1iZXIocmVuZGVyZXItPm1h
cmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvcikgKyAicHgiLCBmYWxzZSwgZWMpOworICAgICAgICAg
ICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIFN0
cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IpICsgInB4Iiwg
ZmFsc2UpOworICAgICAgICAgICAgc3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5Cb3R0b20sIFN0cmluZzo6bnVtYmVyKHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20o
KSAvIHpvb21GYWN0b3IpICsgInB4IiwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIExheW91
dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRl
ciA/IDAgOiByZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpKTsKICAgICAgICAgYmFz
ZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZURlY2xhcmF0
aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgU3RyaW5nOjpudW1iZXIoYmFzZUhl
aWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpICsgInB4IiwgZmFsc2UsIGVjKTsKKyAgICAgICAg
c3R5bGVEZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIFN0cmluZzo6
bnVtYmVyKGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSArICJweCIsIGZhbHNlKTsK
ICAgICB9CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxMDYyMTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4NCw3ICsxODQsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5T3JVbnN0eWxl
ZEFwcGxlU3R5bGVTCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIGlubGluZVN0eWxlRGVjbCA9IGVsZW0tPmlubGluZVN0eWxlRGVjbCgpOwot
ICAgIHJldHVybiAoIWlubGluZVN0eWxlRGVjbCB8fCBpbmxpbmVTdHlsZURlY2wtPmxlbmd0aCgp
ID09IDApOworICAgIHJldHVybiAoIWlubGluZVN0eWxlRGVjbCB8fCBpbmxpbmVTdHlsZURlY2wt
PmlzRW1wdHkoKSk7CiB9CiAKIFN0cmluZyBxdW90ZUFuZEVzY2FwZU5vblByaW50YWJsZXMoY29u
c3QgU3RyaW5nJiBzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNw
cAkocmV2aXNpb24gMTA2MjE3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsNyArNDM3LDcgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gU1ZHU3R5bGVkRWxlbWVudDo6ZwogICAgICAgICBpbnQgcHJvcElkID0gU1ZHU3R5bGVk
RWxlbWVudDo6Y3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoY3NzU1ZHQXR0ci0+bmFt
ZSgpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoY3NzU1ZHQXR0ciwgcHJvcElkLCBjc3NTVkdB
dHRyLT52YWx1ZSgpKTsKICAgICB9Ci0gICAgcmV0dXJuIGNzc1NWR0F0dHItPmRlY2woKS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShuYW1lKTsKKyAgICByZXR1cm4gY3NzU1ZHQXR0ci0+ZGVjbCgpLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGNzc1Byb3BlcnR5SUQobmFtZSkpOwogfQogCiBib29sIFNWR1N0
eWxlZEVsZW1lbnQ6Omluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoKSBjb25zdApJbmRleDogU291cmNl
L1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDEtMzAgIEFudHRpIEtvaXZpc3Rv
ICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSBub24tQ1NTT00gQVBJIG9mIENT
U1N0eWxlRGVjbGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc3Mjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBBcGkvcXdlYmVsZW1lbnQuY3BwOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OnN0
eWxlUHJvcGVydHkpOgorICAgICAgICAoUVdlYkVsZW1lbnQ6OnNldFN0eWxlUHJvcGVydHkpOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlz
aXRlZEluZm8pOgorCiAyMDEyLTAxLTI1ICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIFtRdF0gcHVibGljLnByaSBpcyBtaXNzaW5nIGRlcGVuZGVuY3kgdG8gcXVp
Y2sgbW9kdWxlLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcAkocmV2aXNp
b24gMTA2MjE3KQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NDQsNyArODQ0LDcgQEAgUVN0cmluZyBRV2ViRWxlbWVudDo6c3R5bGVQ
cm9wZXJ0eShjb25zdAogICAgIGlmICghcHJvcElEKQogICAgICAgICByZXR1cm4gUVN0cmluZygp
OwogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50Kj4obV9lbGVtZW50KS0+c3R5bGUoKTsKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obV9lbGVtZW50KS0+ZW5z
dXJlSW5saW5lU3R5bGVEZWNsKCk7CiAKICAgICBpZiAoc3RyYXRlZ3kgPT0gSW5saW5lU3R5bGUp
CiAgICAgICAgIHJldHVybiBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wSUQpOwpAQCAtOTA5
LDEyICs5MDksMTEgQEAgdm9pZCBRV2ViRWxlbWVudDo6c2V0U3R5bGVQcm9wZXJ0eShjb25zdAog
ICAgICAgICByZXR1cm47CiAKICAgICBpbnQgcHJvcElEID0gY3NzUHJvcGVydHlJRChuYW1lKTsK
LSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1l
bnQqPihtX2VsZW1lbnQpLT5zdHlsZSgpOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihtX2VsZW1lbnQpLT5lbnN1cmVJ
bmxpbmVTdHlsZURlY2woKTsKICAgICBpZiAoIXByb3BJRCB8fCAhc3R5bGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKLSAgICBzdHlsZS0+c2V0
UHJvcGVydHkobmFtZSwgdmFsdWUsZW1wdHlTdHJpbmcoKSwgZXhjZXB0aW9uKTsKKyAgICBzdHls
ZS0+c2V0UHJvcGVydHkocHJvcElELCB2YWx1ZSk7CiB9CiAKIC8qIQpJbmRleDogU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5jcHAJKHJldmlzaW9uIDEwNjIxNykKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MzUsMTAgKzYzNSwxMSBAQCBRVmFyaWFudE1hcCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6Y29t
CiAgICAgaWYgKCF3ZWJFbGVtZW50KQogICAgICAgICByZXR1cm4gcmVzOwogCi0gICAgUmVmUHRy
PFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBjb21wdXRlZFN0
eWxlKHdlYkVsZW1lbnQsIHRydWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiA9IGNvbXB1dGVkU3R5bGUo
d2ViRWxlbWVudCwgdHJ1ZSk7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKj4oY29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmdldCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0
aCgpOyBpKyspIHsKICAgICAgICAgUVN0cmluZyBuYW1lID0gc3R5bGUtPml0ZW0oaSk7Ci0gICAg
ICAgIFFTdHJpbmcgdmFsdWUgPSAoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJh
dGlvbio+KHN0eWxlLmdldCgpKSktPmdldFByb3BlcnR5VmFsdWUobmFtZSk7CisgICAgICAgIFFT
dHJpbmcgdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKICAgICAgICAgcmVz
W2NvbnZlcnRUb1Byb3BlcnR5TmFtZShuYW1lKV0gPSBRVmFyaWFudCh2YWx1ZSk7CiAgICAgfQog
ICAgIHJldHVybiByZXM7Cg==
</data>
<flag name="review"
          id="125787"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>