<?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>137056</bug_id>
          
          <creation_ts>2014-09-23 21:21:44 -0700</creation_ts>
          <short_desc>Add initial is&lt;&gt;() / downcast&lt;&gt;() support for any type of Nodes</short_desc>
          <delta_ts>2014-10-14 20:01:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>136839</dependson>
          <blocked>137106</blocked>
    
    <blocked>137128</blocked>
    
    <blocked>137137</blocked>
    
    <blocked>137169</blocked>
    
    <blocked>137172</blocked>
    
    <blocked>137183</blocked>
    
    <blocked>137184</blocked>
    
    <blocked>137188</blocked>
    
    <blocked>137199</blocked>
    
    <blocked>137221</blocked>
    
    <blocked>137222</blocked>
    
    <blocked>137241</blocked>
    
    <blocked>137243</blocked>
    
    <blocked>137270</blocked>
    
    <blocked>137284</blocked>
    
    <blocked>137286</blocked>
    
    <blocked>137318</blocked>
    
    <blocked>137331</blocked>
    
    <blocked>137364</blocked>
    
    <blocked>137381</blocked>
    
    <blocked>137398</blocked>
    
    <blocked>137424</blocked>
    
    <blocked>137429</blocked>
    
    <blocked>137430</blocked>
    
    <blocked>137431</blocked>
    
    <blocked>137432</blocked>
    
    <blocked>137436</blocked>
    
    <blocked>137437</blocked>
    
    <blocked>137438</blocked>
    
    <blocked>137439</blocked>
    
    <blocked>137440</blocked>
    
    <blocked>137449</blocked>
    
    <blocked>137451</blocked>
    
    <blocked>137477</blocked>
    
    <blocked>137497</blocked>
    
    <blocked>137549</blocked>
    
    <blocked>137591</blocked>
    
    <blocked>137595</blocked>
    
    <blocked>137625</blocked>
    
    <blocked>137644</blocked>
    
    <blocked>137661</blocked>
    
    <blocked>137722</blocked>
    
    <blocked>137731</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1036905</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-23 21:21:44 -0700</bug_when>
    <thetext>Add initial is&lt;&gt;() / downcast&lt;&gt;() support for any type of Nodes, not just Elements by:
- Moving the is&lt;&gt;() / downcast&lt;&gt;() declaration from Element.h to Node.h
- Introducing a DEFINE_TYPE_HELPERS_*() macro that generates the needed template specializations for is&lt;&gt;() / downcast&lt;&gt;() to work. This macro will replace NODE_TYPE_CASTS() entirely once the code base is fully ported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036907</commentid>
    <comment_count>1</comment_count>
      <attachid>238584</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-23 21:29:26 -0700</bug_when>
    <thetext>Created attachment 238584
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036908</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-23 21:31:42 -0700</bug_when>
    <thetext>Attachment 238584 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLFormControlElement.h:195:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 24 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>1036909</commentid>
    <comment_count>3</comment_count>
      <attachid>238585</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-23 21:37:33 -0700</bug_when>
    <thetext>Created attachment 238585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036910</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-23 21:38:47 -0700</bug_when>
    <thetext>Attachment 238585 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLFormControlElement.h:195:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 26 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>1036917</commentid>
    <comment_count>5</comment_count>
      <attachid>238585</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-23 22:57:06 -0700</bug_when>
    <thetext>Comment on attachment 238585
Patch

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

&gt; Source/WebCore/dom/DocumentFragment.h:55
&gt; +DEFINE_TYPE_HELPERS_BEGIN(DocumentFragment)

The reason the macro has a BEGIN / END is so that isDocumentFragment() can be private. We don&apos;t want to have both isDocumentFragment() and is&lt;DocumentFragment&gt;().

&gt; Source/WebCore/dom/Node.h:742
&gt; +template &lt;typename ExpectedType, typename ArgType&gt;

This is all moved from Element.h

&gt; Source/WebCore/html/HTMLMediaElement.h:918
&gt; +struct NodeTypeCastTraits&lt;const HTMLMediaElement, ArgType&gt; {

These explicit specializations will go away once I use DEFINE_TYPE_HELPERS_*() everywhere. I only ported 2 classes in this patch to minimize the size of the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037046</commentid>
    <comment_count>6</comment_count>
      <attachid>238585</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-24 15:31:39 -0700</bug_when>
    <thetext>Comment on attachment 238585
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:-742
&gt;      if (isHTMLTextAreaElement(node))
&gt; -        return toHTMLFormControlElement(node)-&gt;isReadOnly();

Uh, that&apos;s interesting...

&gt;&gt; Source/WebCore/dom/DocumentFragment.h:55
&gt;&gt; +DEFINE_TYPE_HELPERS_BEGIN(DocumentFragment)
&gt; 
&gt; The reason the macro has a BEGIN / END is so that isDocumentFragment() can be private. We don&apos;t want to have both isDocumentFragment() and is&lt;DocumentFragment&gt;().

Interesting take to simplify the definition.

I am not sure with the name. &quot;Helpers&quot; is never really helpful for a name.

Why not simply SPECIALIZE_TYPE_TRAITS or something like that?

&gt; Source/WebCore/dom/Node.h:784
&gt; +// Add support for type checking / casting using is&lt;&gt;() / downcast&lt;&gt;() helpers
&gt; +// for a specific class.

One line.

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:511
&gt;          if (node-&gt;isElementNode() &amp;&amp; toElement(node)-&gt;isFormControlElement())

Why not is&lt;HTMLFormControlElement&gt;(node) ?

&gt; Source/WebCore/html/HTMLFormControlElement.h:195
&gt; +    static bool isHTMLFormControlElement(const Node&amp; node) { return node.isElementNode() &amp;&amp; toElement(node).isFormControlElement(); }

return node.isElementNode() &amp;&amp; isHTMLFormControlElement(toElement(node));

&gt; Source/WebCore/html/HTMLFormElement.cpp:212
&gt;      return 0;

nullptr

&gt; Source/WebCore/html/HTMLFormElement.cpp:706
&gt;      return 0;

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037125</commentid>
    <comment_count>7</comment_count>
      <attachid>238636</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-24 19:40:02 -0700</bug_when>
    <thetext>Created attachment 238636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037127</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-24 19:42:12 -0700</bug_when>
    <thetext>Attachment 238636 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLFormControlElement.h:195:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 38 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>1037136</commentid>
    <comment_count>9</comment_count>
      <attachid>238636</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-24 20:50:46 -0700</bug_when>
    <thetext>Comment on attachment 238636
Patch

Clearing flags on attachment: 238636

Committed r173944: &lt;http://trac.webkit.org/changeset/173944&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037137</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-24 20:50:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037231</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-09-25 08:29:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 238636 [details])
&gt; Clearing flags on attachment: 238636
&gt; 
&gt; Committed r173944: &lt;http://trac.webkit.org/changeset/173944&gt;

This broke the iOS build. See &lt;rdar://problem/18454708&gt; for more details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037247</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-25 10:26:47 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 238636 [details] [details])
&gt; &gt; Clearing flags on attachment: 238636
&gt; &gt; 
&gt; &gt; Committed r173944: &lt;http://trac.webkit.org/changeset/173944&gt;
&gt; 
&gt; This broke the iOS build. See &lt;rdar://problem/18454708&gt; for more details.

This should be fixed in http://trac.webkit.org/changeset/173971. Thanks for notifying me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238584</attachid>
            <date>2014-09-23 21:29:26 -0700</date>
            <delta_ts>2014-09-23 21:37:30 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>DEFINE_TYPE_HELPERS.patch</filename>
            <type>text/plain</type>
            <size>29723</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAKaW5kZXggNjcwODhmMS4uN2IxYzBhNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
QEAgLTczOSw3ICs3MzksNyBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRP
bmx5KCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXNIVE1MVGV4dEFy
ZWFFbGVtZW50KG5vZGUpKQotICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
KG5vZGUpLT5pc1JlYWRPbmx5KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4dEFy
ZWFFbGVtZW50Pihub2RlKS0+aXNSZWFkT25seSgpOwogCiAgICAgaWYgKGlzSFRNTElucHV0RWxl
bWVudChub2RlKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKTsKQEAgLTc2MCw4ICs3NjAsOCBAQCBib29sIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgTm9kZSogbiA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAobiAmJiAobi0+aXNF
bGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChuKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCi0g
ICAgICAgIHJldHVybiB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQobiktPmlzUmVxdWlyZWQoKTsK
KyAgICBpZiAobiAmJiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihuKSkKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG4pLT5pc1JlcXVpcmVkKCk7CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhM2NmNTI5
Li5kNzg5NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTk3Myw3ICs5NzMsNyBAQCBQ
YXNzUmVmUHRyPE5vZGU+IERvY3VtZW50OjppbXBvcnROb2RlKE5vZGUqIGltcG9ydGVkTm9kZSwg
Ym9vbCBkZWVwLCBFeGNlcHRpb25DbwogICAgICAgICAgICAgLy8gRWl0aGVyIHRoZXkgYXJlIGlt
cG9ydGVkIGFsb25nIHdpdGggdGhlaXIgaG9zdCBub2RlLCBvciBjcmVhdGVkIGltcGxpY2l0bHku
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBEb2N1bWVudEZyYWdtZW50
JiBvbGRGcmFnbWVudCA9IHRvRG9jdW1lbnRGcmFnbWVudCgqaW1wb3J0ZWROb2RlKTsKKyAgICAg
ICAgRG9jdW1lbnRGcmFnbWVudCYgb2xkRnJhZ21lbnQgPSBkb3duY2FzdDxEb2N1bWVudEZyYWdt
ZW50PigqaW1wb3J0ZWROb2RlKTsKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG5l
d0ZyYWdtZW50ID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgICAgICBpZiAoZGVlcCkg
ewogICAgICAgICAgICAgZm9yIChOb2RlKiBvbGRDaGlsZCA9IG9sZEZyYWdtZW50LmZpcnN0Q2hp
bGQoKTsgb2xkQ2hpbGQ7IG9sZENoaWxkID0gb2xkQ2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKQEAg
LTM0MTEsNyArMzQxMSw3IEBAIGJvb2wgRG9jdW1lbnQ6OnNldEZvY3VzZWRFbGVtZW50KFBhc3NS
ZWZQdHI8RWxlbWVudD4gcHJwTmV3Rm9jdXNlZEVsZW1lbnQsIEZvY3VzCiAKICAgICAgICAgLy8g
RGlzcGF0Y2ggYSBjaGFuZ2UgZXZlbnQgZm9yIGZvcm0gY29udHJvbCBlbGVtZW50cyB0aGF0IGhh
dmUgYmVlbiBlZGl0ZWQuCiAgICAgICAgIGlmIChvbGRGb2N1c2VkRWxlbWVudC0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9y
bUNvbnRyb2xFbGVtZW50ID0gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG9sZEZvY3VzZWRFbGVt
ZW50LmdldCgpKTsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1Db250
cm9sRWxlbWVudCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG9sZEZvY3VzZWRF
bGVtZW50LmdldCgpKTsKICAgICAgICAgICAgIGlmIChmb3JtQ29udHJvbEVsZW1lbnQtPndhc0No
YW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KCkpCiAgICAgICAgICAgICAgICAg
Zm9ybUNvbnRyb2xFbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgKaW5kZXggOGViOTM4Ny4u
YzFkZmFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRGcmFnbWVudC5oCkBAIC01MiwxMCAr
NTIsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVU
eXBlKSBjb25zdCBvdmVycmlkZTsKIH07CiAKLWlubGluZSBib29sIGlzRG9jdW1lbnRGcmFnbWVu
dChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRG9jdW1lbnRGcmFnbWVudCgpOyB9
Ci12b2lkIGlzRG9jdW1lbnRGcmFnbWVudChjb25zdCBEb2N1bWVudEZyYWdtZW50Jik7IC8vIENh
dGNoIHVubmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sgb2YgdHlwZSBrbm93biBhdCBjb21waWxlIHRp
bWUuCi0KLU5PREVfVFlQRV9DQVNUUyhEb2N1bWVudEZyYWdtZW50KQorREVGSU5FX1RZUEVfSEVM
UEVSU19CRUdJTihEb2N1bWVudEZyYWdtZW50KQorICAgIHN0YXRpYyBib29sIGlzRG9jdW1lbnRG
cmFnbWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRG9jdW1lbnRGcmFnbWVu
dCgpOyB9CitERUZJTkVfVFlQRV9IRUxQRVJTX0VORCgpCiAKIH0gLy9uYW1lc3BhY2UKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmgKaW5kZXggMTZlZDYzMi4uMjg5MmJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBA
IC02NzAsNTIgKzY3MCwxMSBAQCBpbmxpbmUgYm9vbCBpc0VsZW1lbnQoY29uc3QgTm9kZSYgbm9k
ZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCk7IH0KIAogTk9ERV9UWVBFX0NBU1RTKEVs
ZW1lbnQpCiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBFeHBlY3RlZFR5cGUsIHR5cGVuYW1lIEFyZ1R5
cGU+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJhaXRzIHsKLSAgICBzdGF0aWMgYm9vbCBpcyhB
cmdUeXBlJik7Ci19OwotCi0vLyBUeXBlIGNoZWNraW5nIGZ1bmN0aW9uIGZvciBFbGVtZW50cywg
dG8gdXNlIGJlZm9yZSBjYXN0aW5nIHdpdGggZG93bmNhc3Q8PigpLgotdGVtcGxhdGUgPHR5cGVu
YW1lIEV4cGVjdGVkVHlwZSwgdHlwZW5hbWUgQXJnVHlwZT4KLWlubGluZSBib29sIGlzKEFyZ1R5
cGUmIG5vZGUpCi17Ci0gICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEV4cGVjdGVk
VHlwZSwgQXJnVHlwZT46OnZhbHVlLCAiVW5uZWNlc3NhcnkgdHlwZSBjaGVjayIpOwotICAgIHJl
dHVybiBFbGVtZW50VHlwZUNhc3RUcmFpdHM8Y29uc3QgRXhwZWN0ZWRUeXBlLCBjb25zdCBBcmdU
eXBlPjo6aXMobm9kZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFeHBlY3RlZFR5cGUsIHR5
cGVuYW1lIEFyZ1R5cGU+Ci1pbmxpbmUgYm9vbCBpcyhBcmdUeXBlKiBub2RlKQotewotICAgIEFT
U0VSVChub2RlKTsKLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8RXhwZWN0ZWRU
eXBlLCBBcmdUeXBlPjo6dmFsdWUsICJVbm5lY2Vzc2FyeSB0eXBlIGNoZWNrIik7Ci0gICAgcmV0
dXJuIEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBFeHBlY3RlZFR5cGUsIGNvbnN0IEFyZ1R5
cGU+Ojppcygqbm9kZSk7Ci19Ci0KIHRlbXBsYXRlIDw+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0
VHJhaXRzPGNvbnN0IEVsZW1lbnQsIGNvbnN0IE5vZGU+IHsKK3N0cnVjdCBOb2RlVHlwZUNhc3RU
cmFpdHM8Y29uc3QgRWxlbWVudCwgY29uc3QgTm9kZT4gewogICAgIHN0YXRpYyBib29sIGlzKGNv
bnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50Tm9kZSgpOyB9CiB9OwogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgRXhwZWN0ZWRUeXBlPgotc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRy
YWl0czxFeHBlY3RlZFR5cGUsIEV4cGVjdGVkVHlwZT4gewotICAgIHN0YXRpYyBib29sIGlzKEV4
cGVjdGVkVHlwZSYpIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLS8vIERvd25jYXN0aW5nIGZ1bmN0
aW9ucyBmb3IgRWxlbWVudCB0eXBlcy4KLXRlbXBsYXRlPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5h
bWUgU291cmNlPgotaW5saW5lIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19jb25z
dDxTb3VyY2U+Ojp2YWx1ZSwgY29uc3QgVGFyZ2V0JiwgVGFyZ2V0Jj46OnR5cGUgZG93bmNhc3Qo
U291cmNlJiBzb3VyY2UpCi17Ci0gICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPFRh
cmdldCwgU291cmNlPjo6dmFsdWUsICJVbm5lY2Vzc2FyeSBjYXN0Iik7Ci0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8VGFyZ2V0Pihzb3VyY2UpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxzdGQ6OmlzX2NvbnN0PFNvdXJj
ZT46OnZhbHVlLCBjb25zdCBUYXJnZXQmLCBUYXJnZXQmPjo6dHlwZT4oc291cmNlKTsKLX0KLXRl
bXBsYXRlPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBpbmxpbmUgdHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDxzdGQ6OmlzX2NvbnN0PFNvdXJjZT46OnZhbHVlLCBjb25zdCBUYXJn
ZXQqLCBUYXJnZXQqPjo6dHlwZSBkb3duY2FzdChTb3VyY2UqIHNvdXJjZSkKLXsKLSAgICBzdGF0
aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8VGFyZ2V0LCBTb3VyY2U+Ojp2YWx1ZSwgIlVubmVj
ZXNzYXJ5IGNhc3QiKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighc291
cmNlIHx8IGlzPFRhcmdldD4oKnNvdXJjZSkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBl
bmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfY29uc3Q8U291cmNlPjo6dmFsdWUsIGNvbnN0
IFRhcmdldCosIFRhcmdldCo+Ojp0eXBlPihzb3VyY2UpOwotfQotCiBpbmxpbmUgYm9vbCBOb2Rl
OjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gaXNFbGVtZW50Tm9kZSgpICYm
IHRvRWxlbWVudCh0aGlzKS0+aGFzQXR0cmlidXRlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggZjQ2OWZl
NS4uMTdlN2ZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC03MzksNiArNzM5LDYwIEBAIGlubGluZSBDb250
YWluZXJOb2RlKiBOb2RlOjpwYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCkgY29uc3QKICAg
ICByZXR1cm4gcGFyZW50Tm9kZSgpOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRXhwZWN0ZWRU
eXBlLCB0eXBlbmFtZSBBcmdUeXBlPgorc3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0cyB7CisgICAg
c3RhdGljIGJvb2wgaXMoQXJnVHlwZSYpOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEV4cGVj
dGVkVHlwZT4KK3N0cnVjdCBOb2RlVHlwZUNhc3RUcmFpdHM8RXhwZWN0ZWRUeXBlLCBFeHBlY3Rl
ZFR5cGU+IHsKKyAgICBzdGF0aWMgYm9vbCBpcyhFeHBlY3RlZFR5cGUmKSB7IHJldHVybiB0cnVl
OyB9Cit9OworCisvLyBUeXBlIGNoZWNraW5nIGZ1bmN0aW9uIGZvciBOb2RlcywgdG8gdXNlIGJl
Zm9yZSBjYXN0aW5nIHdpdGggZG93bmNhc3Q8PigpLgordGVtcGxhdGUgPHR5cGVuYW1lIEV4cGVj
dGVkVHlwZSwgdHlwZW5hbWUgQXJnVHlwZT4KK2lubGluZSBib29sIGlzKEFyZ1R5cGUmIG5vZGUp
Cit7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEV4cGVjdGVkVHlwZSwgQXJn
VHlwZT46OnZhbHVlLCAiVW5uZWNlc3NhcnkgdHlwZSBjaGVjayIpOworICAgIHJldHVybiBOb2Rl
VHlwZUNhc3RUcmFpdHM8Y29uc3QgRXhwZWN0ZWRUeXBlLCBjb25zdCBBcmdUeXBlPjo6aXMobm9k
ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBFeHBlY3RlZFR5cGUsIHR5cGVuYW1lIEFyZ1R5
cGU+CitpbmxpbmUgYm9vbCBpcyhBcmdUeXBlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8RXhwZWN0ZWRUeXBlLCBBcmdUeXBl
Pjo6dmFsdWUsICJVbm5lY2Vzc2FyeSB0eXBlIGNoZWNrIik7CisgICAgcmV0dXJuIE5vZGVUeXBl
Q2FzdFRyYWl0czxjb25zdCBFeHBlY3RlZFR5cGUsIGNvbnN0IEFyZ1R5cGU+Ojppcygqbm9kZSk7
Cit9CisKKy8vIERvd25jYXN0aW5nIGZ1bmN0aW9ucyBmb3IgTm9kZSB0eXBlcy4KK3RlbXBsYXRl
PHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPgoraW5saW5lIHR5cGVuYW1lIHN0ZDo6
Y29uZGl0aW9uYWw8c3RkOjppc19jb25zdDxTb3VyY2U+Ojp2YWx1ZSwgY29uc3QgVGFyZ2V0Jiwg
VGFyZ2V0Jj46OnR5cGUgZG93bmNhc3QoU291cmNlJiBzb3VyY2UpCit7CisgICAgc3RhdGljX2Fz
c2VydCghc3RkOjppc19iYXNlX29mPFRhcmdldCwgU291cmNlPjo6dmFsdWUsICJVbm5lY2Vzc2Fy
eSBjYXN0Iik7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8VGFyZ2V0
Pihzb3VyY2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjpjb25kaXRp
b25hbDxzdGQ6OmlzX2NvbnN0PFNvdXJjZT46OnZhbHVlLCBjb25zdCBUYXJnZXQmLCBUYXJnZXQm
Pjo6dHlwZT4oc291cmNlKTsKK30KK3RlbXBsYXRlPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUg
U291cmNlPiBpbmxpbmUgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxzdGQ6OmlzX2NvbnN0PFNv
dXJjZT46OnZhbHVlLCBjb25zdCBUYXJnZXQqLCBUYXJnZXQqPjo6dHlwZSBkb3duY2FzdChTb3Vy
Y2UqIHNvdXJjZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8VGFyZ2V0
LCBTb3VyY2U+Ojp2YWx1ZSwgIlVubmVjZXNzYXJ5IGNhc3QiKTsKKyAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighc291cmNlIHx8IGlzPFRhcmdldD4oKnNvdXJjZSkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfY29u
c3Q8U291cmNlPjo6dmFsdWUsIGNvbnN0IFRhcmdldCosIFRhcmdldCo+Ojp0eXBlPihzb3VyY2Up
OworfQorCisvLyBBZGQgc3VwcG9ydCBmb3IgdHlwZSBjaGVja2luZyAvIGNhc3RpbmcgdXNpbmcg
aXM8PigpIC8gZG93bmNhc3Q8PigpIGhlbHBlcnMKKy8vIGZvciBhIHNwZWNpZmljIGNsYXNzLgor
I2RlZmluZSBERUZJTkVfVFlQRV9IRUxQRVJTX0JFR0lOKENsYXNzTmFtZSkgXAorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBBcmdUeXBlPiBcCisgICAgY2xhc3MgTm9kZVR5cGVDYXN0VHJhaXRzPGNv
bnN0IENsYXNzTmFtZSwgQXJnVHlwZT4geyBcCisgICAgcHVibGljOiBcCisgICAgICAgIHN0YXRp
YyBib29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0dXJuIGlzIyNDbGFzc05hbWUobm9kZSk7IH0g
XAorICAgIHByaXZhdGU6CisKKyNkZWZpbmUgREVGSU5FX1RZUEVfSEVMUEVSU19FTkQoKSBcCisg
ICAgfTsKKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgYW5kIGFsbCB1c2VzIHNo
b3VsZCBiZSByZXBsYWNlZCB3aXRoIERFRklORV9UWVBFX0hFTFBFUlNfKigpLgogI2RlZmluZSBO
T0RFX1RZUEVfQ0FTVFMoVG9DbGFzc05hbWUpIFwKICAgICBUWVBFX0NBU1RTX0JBU0UoVG9DbGFz
c05hbWUsIE5vZGUsIG5vZGUsIFdlYkNvcmU6OmlzIyNUb0NsYXNzTmFtZSgqbm9kZSksIFdlYkNv
cmU6OmlzIyNUb0NsYXNzTmFtZShub2RlKSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL21ha2VfbmFtZXMucGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAppbmRl
eCBkOGY5MGNkLi5jMmU4MGY1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9u
YW1lcy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbApAQCAtNjM2LDcg
KzYzNiw3IEBAIHN1YiBwcmludFR5cGVIZWxwZXJzCiAgICAgICAgIHByaW50IEYgPDxFTkQKIGNs
YXNzICRjbGFzczsKIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmdUeXBlPgotY2xhc3MgRWxlbWVudFR5
cGVDYXN0VHJhaXRzPGNvbnN0ICRjbGFzcywgQXJnVHlwZT4geworY2xhc3MgTm9kZVR5cGVDYXN0
VHJhaXRzPGNvbnN0ICRjbGFzcywgQXJnVHlwZT4gewogcHVibGljOgogICAgIHN0YXRpYyBib29s
IGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0dXJuIGNoZWNrVGFnTmFtZShub2RlKTsgfQogcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggMjAxMTJj
YS4uMmJhMWFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAK
QEAgLTIwMjUsOCArMjAyNSw4IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3Jt
KEVsZW1lbnQqIHN0YXJ0KQogICAgICAgICBIVE1MRWxlbWVudCYgZWxlbWVudCA9ICppdDsKICAg
ICAgICAgaWYgKGlzSFRNTEZvcm1FbGVtZW50KCZlbGVtZW50KSkKICAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KCZlbGVtZW50KTsKLSAgICAgICAgaWYgKGlzSFRN
TEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybiB0b0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQoZWxlbWVudCkuZm9ybSgpOworICAgICAgICBpZiAoaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkuZm9ybSgpOwogICAgICAgICBpZiAoaXNI
VE1MRnJhbWVFbGVtZW50QmFzZShlbGVtZW50KSkgewogICAgICAgICAgICAgRG9jdW1lbnQqIGNv
bnRlbnREb2N1bWVudCA9IHRvSFRNTEZyYW1lRWxlbWVudEJhc2UoZWxlbWVudCkuY29udGVudERv
Y3VtZW50KCk7CiAgICAgICAgICAgICBpZiAoIWNvbnRlbnREb2N1bWVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCmluZGV4IGVjOTQyNDAuLmE4NTEyYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaApAQCAtMTE4
LDkgKzExOCw2IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fY3VzdG9tVmFsaWRhdGlvbk1lc3Nh
Z2U7CiB9OwogCi0jZGVmaW5lIEZPUk1fQVNTT0NJQVRFRF9FTEVNRU5UX1RZUEVfQ0FTVFMoVG9D
bGFzc05hbWUsIHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFTRShUb0NsYXNzTmFtZSwg
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LCBlbGVtZW50LCBlbGVtZW50LT5wcmVkaWNhdGUsIGVsZW1l
bnQucHJlZGljYXRlKQotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYgLy8gRm9ybUFzc29jaWF0
ZWRFbGVtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAppbmRleCA2NzM0YmUxLi42Zjgy
M2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9p
ZCBpc0hUTUxFbGVtZW50KGNvbnN0IEhUTUxFbGVtZW50Jik7IC8vIENhdGNoIHVubmVjZXNzYXJ5
IHJ1bnRpbWUgY2hlY2sgb2YgdHkKIGlubGluZSBib29sIGlzSFRNTEVsZW1lbnQoY29uc3QgTm9k
ZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0hUTUxFbGVtZW50KCk7IH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIEFyZ1R5cGU+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0IEhUTUxF
bGVtZW50LCBBcmdUeXBlPiB7CitzdHJ1Y3QgTm9kZVR5cGVDYXN0VHJhaXRzPGNvbnN0IEhUTUxF
bGVtZW50LCBBcmdUeXBlPiB7CiAgICAgc3RhdGljIGJvb2wgaXMoQXJnVHlwZSYgbm9kZSkgeyBy
ZXR1cm4gaXNIVE1MRWxlbWVudChub2RlKTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKaW5kZXggMDQ2MTliNS4uMmFkZWViNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCkBAIC01OCw4ICs1OCw4IEBA
IFBhc3NSZWZQdHI8SFRNTEZpZWxkU2V0RWxlbWVudD4gSFRNTEZpZWxkU2V0RWxlbWVudDo6Y3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmCiBzdGF0aWMgdm9pZCB1cGRhdGVGcm9tQ29udHJvbEVs
ZW1lbnRzQW5jZXN0b3JEaXNhYmxlZFN0YXRlVW5kZXIoSFRNTEVsZW1lbnQmIHN0YXJ0Tm9kZSwg
Ym9vbCBpc0Rpc2FibGVkKQogewogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2w7
Ci0gICAgaWYgKGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChzdGFydE5vZGUpKQotICAgICAgICBj
b250cm9sID0gJnRvSFRNTEZvcm1Db250cm9sRWxlbWVudChzdGFydE5vZGUpOworICAgIGlmIChp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihzdGFydE5vZGUpKQorICAgICAgICBjb250cm9sID0g
JmRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KHN0YXJ0Tm9kZSk7CiAgICAgZWxzZQog
ICAgICAgICBjb250cm9sID0gVHJhdmVyc2FsPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+OjpmaXJz
dFdpdGhpbigmc3RhcnROb2RlKTsKICAgICB3aGlsZSAoY29udHJvbCkgewpAQCAtMTY4LDcgKzE2
OCw3IEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6cmVmcmVzaEVsZW1lbnRzSWZOZWVkZWQo
KSBjb25zdAogICAgICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykpCiAgICAg
ICAgICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5hcHBlbmQoJmRvd25jYXN0PEhUTUxPYmplY3RF
bGVtZW50PihlbGVtZW50KSk7CiAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNGb3JtQ29udHJv
bEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmFwcGVuZCgmdG9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50KGVsZW1lbnQpKTsKKyAgICAgICAgICAgIG1fYXNzb2NpYXRl
ZEVsZW1lbnRzLmFwcGVuZCgmZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVu
dCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5jcHAKaW5kZXggMTJhY2ZiMy4uMDUwMWQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC01MDksOSArNTA5LDkgQEAgSFRN
TEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZW5jbG9zaW5nRm9y
bUNvbnRyb2xFbGVtZW50KE5vZGUKIHsKICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKSkgewogICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxl
bWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiB0
b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQobm9kZSk7CisgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSk7CiAgICAgfQotICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJjb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IGQ1NmNmYWEuLjcy
NTY1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
CkBAIC0xOTAsMTggKzE5MCwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNBdXRvZm9jdXNl
ZCA6IDE7CiB9OwogCi12b2lkIGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Jik7IC8vIENhdGNoIHVubmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sgb2Yg
dHlwZSBrbm93biBhdCBjb21waWxlIHRpbWUuCi1pbmxpbmUgYm9vbCBpc0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudC5pc0Zvcm1D
b250cm9sRWxlbWVudCgpOyB9Ci1pbmxpbmUgYm9vbCBpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQo
Y29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVt
ZW50KG5vZGUpLmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7IH0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IEFyZ1R5cGU+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0IEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQsIEFyZ1R5cGU+IHsKLSAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2Rl
KSB7IHJldHVybiBpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQobm9kZSk7IH0KLX07Ci0KLU5PREVf
VFlQRV9DQVNUUyhIVE1MRm9ybUNvbnRyb2xFbGVtZW50KQotCi1GT1JNX0FTU09DSUFURURfRUxF
TUVOVF9UWVBFX0NBU1RTKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQsIGlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkpCitERUZJTkVfVFlQRV9IRUxQRVJTX0JFR0lOKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQp
CisgICAgc3RhdGljIGJvb2wgaXNIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQuaXNGb3JtQ29udHJvbEVsZW1lbnQoKTsgfQorICAg
IHN0YXRpYyBib29sIGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBOb2RlJiBub2RlKSB7
IHJldHVybiBub2RlLmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSkuaXNGb3JtQ29u
dHJvbEVsZW1lbnQoKTsgfQorICAgIHN0YXRpYyBib29sIGlzSFRNTEZvcm1Db250cm9sRWxlbWVu
dChjb25zdCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQu
aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsgfQorREVGSU5FX1RZUEVfSEVMUEVSU19FTkQoKQogCiB9
IC8vIG5hbWVzcGFjZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5k
ZXggNDU4OWI0Ny4uMjIwZWMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcApAQCAtMTgyLDE1ICsxODIsMTUgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdElt
cGxpY2l0bHkoRXZlbnQqIGV2ZW50LCBib29sIGZyb21JbXBsaWNpdFN1Ym1pc3Npb24KICAgICB1
bnNpZ25lZCBzdWJtaXNzaW9uVHJpZ2dlckNvdW50ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRm9y
bUFzc29jaWF0ZWRFbGVtZW50KiBmb3JtQXNzb2NpYXRlZEVsZW1lbnQgPSBtX2Fzc29jaWF0ZWRF
bGVtZW50c1tpXTsKLSAgICAgICAgaWYgKCFmb3JtQXNzb2NpYXRlZEVsZW1lbnQtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCisgICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
Zm9ybUFzc29jaWF0ZWRFbGVtZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9IHRvSFRNTEZvcm1Db250cm9sRWxl
bWVudChmb3JtQXNzb2NpYXRlZEVsZW1lbnQpOwotICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmlz
U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKSB7Ci0gICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQt
PnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JtRWxlbWVudC0+ZGlzcGF0Y2hTaW11
bGF0ZWRDbGljayhldmVudCk7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIGZvcm1F
bGVtZW50ID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmZvcm1Bc3NvY2lhdGVk
RWxlbWVudCk7CisgICAgICAgIGlmIChmb3JtRWxlbWVudC5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0
b24oKSkgeworICAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50LnJlbmRlcmVyKCkpIHsKKyAgICAg
ICAgICAgICAgICBmb3JtRWxlbWVudC5kaXNwYXRjaFNpbXVsYXRlZENsaWNrKGV2ZW50KTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
Zm9ybUVsZW1lbnQtPmNhblRyaWdnZXJJbXBsaWNpdFN1Ym1pc3Npb24oKSkKKyAgICAgICAgfSBl
bHNlIGlmIChmb3JtRWxlbWVudC5jYW5UcmlnZ2VySW1wbGljaXRTdWJtaXNzaW9uKCkpCiAgICAg
ICAgICAgICArK3N1Ym1pc3Npb25UcmlnZ2VyQ291bnQ7CiAgICAgfQogCkBAIC0yMDcsNyArMjA3
LDcgQEAgc3RhdGljIGlubGluZSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBzdWJtaXRFbGVtZW50
RnJvbUV2ZW50KGNvbnN0IEV2ZW50KiBldmVudCkKIHsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBl
dmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
KSB7CiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUp
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEZvcm1D
b250cm9sRWxlbWVudChub2RlKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Pihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yMjMs
OCArMjIzLDggQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdmVseShF
dmVudCogZXZlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAg
ICAgICAgIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkt
PmhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKKyAgICAgICAgICAgIGRv
d25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSku
aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwogICAgIH0KIAogICAgIFZlY3RvcjxSZWZQ
dHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Pj4gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzOwpAQCAt
MjQ2LDcgKzI0Niw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZl
bHkoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVl
ZGVkKGZhbHNlKTsKICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKICAgICAgICAgICAgIGlm
IChlbGVtZW50LmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgdG9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KGVsZW1lbnQpLnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2Fn
ZSgpOworICAgICAgICAgICAgICAgIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVs
ZW1lbnQpLnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDUsMTQgKzM0NSwxNCBAQCB2b2lkIEhUTUxGb3Jt
RWxlbWVudDo6c3VibWl0KEV2ZW50KiBldmVudCwgYm9vbCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbiwg
Ym9vbCBwcm9jZQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNz
b2NpYXRlZEVsZW1lbnQgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKCFh
c3NvY2lhdGVkRWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgaWYgKCFp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihhc3NvY2lhdGVkRWxlbWVudCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uKSB7Ci0gICAgICAg
ICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gdG9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50KGFzc29jaWF0ZWRFbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChjb250cm9sLT5pc0Fj
dGl2YXRlZFN1Ym1pdCgpKQorICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgY29u
dHJvbCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCphc3NvY2lhdGVkRWxlbWVu
dCk7CisgICAgICAgICAgICBpZiAoY29udHJvbC5pc0FjdGl2YXRlZFN1Ym1pdCgpKQogICAgICAg
ICAgICAgICAgIG5lZWRCdXR0b25BY3RpdmF0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBlbHNl
IGlmIChmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24gPT0gMCAmJiBjb250cm9sLT5pc1N1Y2Nl
c3NmdWxTdWJtaXRCdXR0b24oKSkKLSAgICAgICAgICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJt
aXRCdXR0b24gPSBjb250cm9sOworICAgICAgICAgICAgZWxzZSBpZiAoIWZpcnN0U3VjY2Vzc2Z1
bFN1Ym1pdEJ1dHRvbiAmJiBjb250cm9sLmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKQorICAg
ICAgICAgICAgICAgIGZpcnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbiA9ICZjb250cm9sOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0zODQsOCArMzg0LDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlc2V0KCkKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lh
dGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1l
bnRzW2ldLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgdG9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKS0+cmVzZXQoKTsKKyAgICAgICAg
aWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkK
KyAgICAgICAgICAgIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0
ZWRFbGVtZW50c1tpXSkucmVzZXQoKTsKICAgICB9CiAKICAgICBtX2lzSW5SZXNldEZ1bmN0aW9u
ID0gZmFsc2U7CkBAIC01OTIsNyArNTkyLDcgQEAgdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpm
b3JtRWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW0KICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50cykgewogICAgICAgICBpZiAoJmVsZW1l
bnQgPT0gJmFzc29jaWF0ZWRIVE1MRWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBpOwotICAg
ICAgICBpZiAoIWlzSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50KSAmJiAhaXNIVE1MT2Jq
ZWN0RWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PihlbGVtZW50KSAmJiAhaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoZWxlbWVudC5mb3JtKCkgIT0gdGhpcykKICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtNjk2LDExICs2OTYsMTEgQEAgYm9vbCBIVE1MRm9ybUVsZW1l
bnQ6Ondhc1VzZXJTdWJtaXR0ZWQoKSBjb25zdAogSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRN
TEZvcm1FbGVtZW50OjpkZWZhdWx0QnV0dG9uKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKCFtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAg
ICAgICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihtX2Fzc29jaWF0ZWRFbGVtZW50
c1tpXSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudCogY29udHJvbCA9IHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChtX2Fzc29jaWF0ZWRFbGVt
ZW50c1tpXSk7Ci0gICAgICAgIGlmIChjb250cm9sLT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24o
KSkKLSAgICAgICAgICAgIHJldHVybiBjb250cm9sOworICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50JiBjb250cm9sID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNz
b2NpYXRlZEVsZW1lbnRzW2ldKTsKKyAgICAgICAgaWYgKGNvbnRyb2wuaXNTdWNjZXNzZnVsU3Vi
bWl0QnV0dG9uKCkpCisgICAgICAgICAgICByZXR1cm4gJmNvbnRyb2w7CiAgICAgfQogCiAgICAg
cmV0dXJuIDA7CkBAIC03MjQsNyArNzI0LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmNoZWNr
SW52YWxpZENvbnRyb2xzQW5kQ29sbGVjdFVuaGFuZGxlZChWZWN0b3I8UmVmUHRyPEZvcm0KICAg
ICBib29sIGhhc0ludmFsaWRDb250cm9scyA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoZWxlbWVudHNbaV0t
PmZvcm0oKSA9PSB0aGlzICYmIGVsZW1lbnRzW2ldLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gdG9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50KGVsZW1lbnRzW2ldLmdldCgpKTsKKyAgICAgICAgICAgIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PihlbGVtZW50c1tpXS5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoIWNvbnRyb2wtPmNoZWNrVmFs
aWRpdHkoJnVuaGFuZGxlZEludmFsaWRDb250cm9scykgJiYgY29udHJvbC0+Zm9ybSgpID09IHRo
aXMpCiAgICAgICAgICAgICAgICAgaGFzSW52YWxpZENvbnRyb2xzID0gdHJ1ZTsKICAgICAgICAg
fQpAQCAtODEwLDggKzgxMCw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojpkb2N1bWVudERpZFJl
c3VtZUZyb21QYWdlQ2FjaGUoKQogICAgIEFTU0VSVCghc2hvdWxkQXV0b2NvbXBsZXRlKCkpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChtX2Fz
c29jaWF0ZWRFbGVtZW50c1tpXSktPnJlc2V0KCk7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PihtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkpCisgICAgICAgICAgICBkb3du
Y2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLnJl
c2V0KCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmlu
ZGV4IGQ4NjdmNzUuLjI5YjcwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oCkBAIC05MTUsNyArOTE1LDcgQEAgaW5saW5lIGJvb2wgaXNIVE1MTWVkaWFFbGVtZW50KGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQuaXNNZWRpYUUKIGlubGluZSBi
b29sIGlzSFRNTE1lZGlhRWxlbWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlz
RWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSkuaXNNZWRpYUVsZW1lbnQoKTsgfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4KLXN0cnVjdCBFbGVtZW50VHlwZUNhc3RUcmFpdHM8
Y29uc3QgSFRNTE1lZGlhRWxlbWVudCwgQXJnVHlwZT4geworc3RydWN0IE5vZGVUeXBlQ2FzdFRy
YWl0czxjb25zdCBIVE1MTWVkaWFFbGVtZW50LCBBcmdUeXBlPiB7CiAgICAgc3RhdGljIGJvb2wg
aXMoQXJnVHlwZSYgbm9kZSkgeyByZXR1cm4gaXNIVE1MTWVkaWFFbGVtZW50KG5vZGUpOyB9CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oCmluZGV4
IDczMzYxYTAuLmQzMDA0ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5oCkBAIC0xNjIsNyArMTYyLDcgQEAgaW5saW5lIGJvb2wgaXNIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KGNvbnN0IEhUTUxQbHVnSW5FbGVtZW50JiBlbGVtZW50KSB7IHJldHVybgog
aW5saW5lIGJvb2wgaXNIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsg
cmV0dXJuIG5vZGUuaXNQbHVnaW5FbGVtZW50KCkgJiYgdG9IVE1MUGx1Z0luRWxlbWVudChub2Rl
KS5pc1BsdWdJbkltYWdlRWxlbWVudCgpOyB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmdUeXBl
Pgotc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LCBBcmdUeXBlPiB7CitzdHJ1Y3QgTm9kZVR5cGVDYXN0VHJhaXRzPGNvbnN0IEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQsIEFyZ1R5cGU+IHsKICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBu
b2RlKSB7IHJldHVybiBpc0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQobm9kZSk7IH0KIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmgKaW5kZXggYmJhZDY5ZC4uNDg5NTY3MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmgKQEAgLTU1LDcgKzU1LDcgQEAg
aW5saW5lIGJvb2wgaXNMYWJlbGFibGVFbGVtZW50KGNvbnN0IEhUTUxFbGVtZW50JiBlbGVtZW50
KSB7IHJldHVybiBlbGVtZW50LmlzTGEKIGlubGluZSBib29sIGlzTGFiZWxhYmxlRWxlbWVudChj
b25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxF
bGVtZW50KG5vZGUpLmlzTGFiZWxhYmxlKCk7IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEFyZ1R5
cGU+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0IExhYmVsYWJsZUVsZW1lbnQs
IEFyZ1R5cGU+IHsKK3N0cnVjdCBOb2RlVHlwZUNhc3RUcmFpdHM8Y29uc3QgTGFiZWxhYmxlRWxl
bWVudCwgQXJnVHlwZT4gewogICAgIHN0YXRpYyBib29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0
dXJuIGlzTGFiZWxhYmxlRWxlbWVudChub2RlKTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFk
aW9Ob2RlTGlzdC5jcHAKaW5kZXggNzAyZjIxYi4uOTRjZTQ2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L1JhZGlvTm9kZUxpc3QuY3BwCkBAIC05MSw3ICs5MSw3IEBAIGJvb2wgUmFkaW9Ob2RlTGlzdDo6
Y2hlY2tFbGVtZW50TWF0Y2hlc1JhZGlvTm9kZUxpc3RGaWx0ZXIoY29uc3QgRWxlbWVudCYgdGVz
dEVsCiAgICAgICAgIGlmICh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykpCiAgICAg
ICAgICAgICBmb3JtRWxlbWVudCA9IGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50Pih0ZXN0RWxl
bWVudCkuZm9ybSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JtRWxlbWVudCA9IHRv
SFRNTEZvcm1Db250cm9sRWxlbWVudCh0ZXN0RWxlbWVudCkuZm9ybSgpOworICAgICAgICAgICAg
Zm9ybUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pih0ZXN0RWxlbWVu
dCkuZm9ybSgpOwogICAgICAgICBpZiAoIWZvcm1FbGVtZW50IHx8IGZvcm1FbGVtZW50ICE9ICZv
d25lck5vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXgg
OTM5MDU1Ny4uODFhMjBkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtNzI3LDcgKzcyNyw3IEBAIHZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6OmZpbmRGb3N0ZXJTaXRlKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYg
dGFzaykKICAgICAgICAgLy8gYW5kIGluc3RlYWQgdXNlIHRoZSBEb2N1bWVudEZyYWdtZW50IGFz
IGEgcm9vdCBub2RlLiBTbyB3ZSBtdXN0IHRyZWF0IHRoZSByb290IG5vZGUgKERvY3VtZW50RnJh
Z21lbnQpIGFzIGlmIGl0IGlzIGEgaHRtbCBlbGVtZW50IGhlcmUuCiAgICAgICAgIGJvb2wgcGFy
ZW50Q2FuQmVGb3N0ZXJQYXJlbnQgPSBwYXJlbnQgJiYgKHBhcmVudC0+aXNFbGVtZW50Tm9kZSgp
IHx8IChtX2lzUGFyc2luZ0ZyYWdtZW50ICYmIHBhcmVudCA9PSBtX29wZW5FbGVtZW50cy5yb290
Tm9kZSgpKSk7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIHBhcmVudENh
bkJlRm9zdGVyUGFyZW50ID0gcGFyZW50Q2FuQmVGb3N0ZXJQYXJlbnQgfHwgKHBhcmVudCAmJiBw
YXJlbnQtPmlzRG9jdW1lbnRGcmFnbWVudCgpICYmIHRvRG9jdW1lbnRGcmFnbWVudChwYXJlbnQp
LT5pc1RlbXBsYXRlQ29udGVudCgpKTsKKyAgICAgICAgcGFyZW50Q2FuQmVGb3N0ZXJQYXJlbnQg
PSBwYXJlbnRDYW5CZUZvc3RlclBhcmVudCB8fCAocGFyZW50ICYmIGlzPERvY3VtZW50RnJhZ21l
bnQ+KHBhcmVudCkgJiYgZG93bmNhc3Q8RG9jdW1lbnRGcmFnbWVudD4ocGFyZW50KS0+aXNUZW1w
bGF0ZUNvbnRlbnQoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKHBhcmVudENhbkJlRm9zdGVyUGFy
ZW50KSB7CiAgICAgICAgICAgICB0YXNrLnBhcmVudCA9IHBhcmVudDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCmluZGV4IGUwNmI1NmQuLjMyOTgyNGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIFBh
c3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+IEZvcm1TdWJtaXNzaW9uOjpjcmVhdGUoSFRNTEZvcm1F
bGVtZW50KiBmb3JtLCBjb25zdCBBCiAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LT50YXJnZXQoKSkg
ewogICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOyBu
b2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+
aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbiA9IHRvSFRNTEZvcm1Db250cm9sRWxl
bWVudChub2RlKTsKKyAgICAgICAgICAgICAgICBzdWJtaXRCdXR0b24gPSBkb3duY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01h
dGhNTEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmgKaW5k
ZXggZTNjMTQ4NC4uNmQwNWRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbWF0aG1sL01h
dGhNTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5o
CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgaXNNYXRoTUxFbGVtZW50KGNvbnN0IE1hdGhNTEVsZW1l
bnQmKTsgLy8gQ2F0Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBjaGVjayBvCiBpbmxpbmUgYm9vbCBp
c01hdGhNTEVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc01hdGhNTEVs
ZW1lbnQoKTsgfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4KLXN0cnVjdCBFbGVtZW50
VHlwZUNhc3RUcmFpdHM8Y29uc3QgTWF0aE1MRWxlbWVudCwgQXJnVHlwZT4geworc3RydWN0IE5v
ZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBNYXRoTUxFbGVtZW50LCBBcmdUeXBlPiB7CiAgICAgc3Rh
dGljIGJvb2wgaXMoQXJnVHlwZSYgbm9kZSkgeyByZXR1cm4gaXNNYXRoTUxFbGVtZW50KG5vZGUp
OyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0
dG9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCmluZGV4
IDEzOWNiOTcuLjZjODFhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCdXR0b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0
b24uY3BwCkBAIC01MSw3ICs1MSw3IEBAIFJlbmRlckJ1dHRvbjo6flJlbmRlckJ1dHRvbigpCiAK
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIFJlbmRlckJ1dHRvbjo6Zm9ybUNvbnRyb2xFbGVtZW50
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG5vZGVGb3JO
b25Bbm9ueW1vdXMoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7CiB9CiAKIGJvb2wgUmVuZGVyQnV0dG9uOjpjYW5C
ZVNlbGVjdGlvbkxlYWYoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKaW5kZXggNmJkZTdi
Yy4uY2RkYTk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCkBAIC0yMjUsNyArMjI1LDcgQEAg
dm9pZCBpc1NWR0VsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2Fy
eSBydW50aW1lIGNoZWNrIG9mIHR5cGUKIGlubGluZSBib29sIGlzU1ZHRWxlbWVudChjb25zdCBO
b2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzU1ZHRWxlbWVudCgpOyB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBBcmdUeXBlPgotc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBTVkdF
bGVtZW50LCBBcmdUeXBlPiB7CitzdHJ1Y3QgTm9kZVR5cGVDYXN0VHJhaXRzPGNvbnN0IFNWR0Vs
ZW1lbnQsIEFyZ1R5cGU+IHsKICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2RlKSB7IHJl
dHVybiBpc1NWR0VsZW1lbnQobm9kZSk7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCA3
NGZiNTZlNy4uNGY3Nzg5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApAQCAtODcsNyArODcsNyBAQCBp
bmxpbmUgYm9vbCBpc1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhjb25zdCBT
VkdFbGVtZW50JiBlbGVtZW50KSB7CiBpbmxpbmUgYm9vbCBpc1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcyhjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzU1ZHRWxl
bWVudCgpICYmIGRvd25jYXN0PFNWR0VsZW1lbnQ+KG5vZGUpLmlzRmlsdGVyRWZmZWN0KCk7IH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIEFyZ1R5cGU+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJh
aXRzPGNvbnN0IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywgQXJnVHlwZT4g
eworc3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMsIEFyZ1R5cGU+IHsKICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBu
b2RlKSB7IHJldHVybiBpc1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhub2Rl
KTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5oCmluZGV4IGY5ODQwYjYuLjYzN2EwNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKQEAgLTI0Miw3ICsyNDIsNyBAQCBpbmxpbmUgYm9vbCBp
c1NWR1NNSUxFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1l
bnQuaXNTTUlMRQogaW5saW5lIGJvb2wgaXNTVkdTTUlMRWxlbWVudChjb25zdCBOb2RlJiBub2Rl
KSB7IHJldHVybiBub2RlLmlzU1ZHRWxlbWVudCgpICYmIGRvd25jYXN0PFNWR0VsZW1lbnQ+KG5v
ZGUpLmlzU01JTEVsZW1lbnQoKTsgfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4KLXN0
cnVjdCBFbGVtZW50VHlwZUNhc3RUcmFpdHM8Y29uc3QgU1ZHU01JTEVsZW1lbnQsIEFyZ1R5cGU+
IHsKK3N0cnVjdCBOb2RlVHlwZUNhc3RUcmFpdHM8Y29uc3QgU1ZHU01JTEVsZW1lbnQsIEFyZ1R5
cGU+IHsKICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2RlKSB7IHJldHVybiBpc1NWR1NN
SUxFbGVtZW50KG5vZGUpOyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKaW5kZXggOGM2YzQ1
Yy4uODczNjYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcApAQCAtMTEwMSwxMiArMTEwMSwxMiBA
QCBIUkVTVUxUIFdlYkZyYW1lOjplbGVtZW50V2l0aE5hbWUoQlNUUiBuYW1lLCBJRE9NRWxlbWVu
dCogZm9ybSwgSURPTUVsZW1lbnQqKiBlbAogICAgICAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29j
aWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRFbGVtZW50
cygpOwogICAgICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSgoVUNoYXIqKW5hbWUsIFN5c1N0
cmluZ0xlbihuYW1lKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZWxl
bWVudHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghZWxlbWVudHNbaV0tPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBpZiAoIXM8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4oZWxlbWVudHNbaV0pKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWx0ID0gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
KGVsZW1lbnRzW2ldKTsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIGVsdCA9
IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50c1tpXSk7CiAgICAgICAg
ICAgICAvLyBTa2lwIG9wdGlvbiBlbGVtZW50cywgb3RoZXIgZHVkcwotICAgICAgICAgICAgaWYg
KGVsdC0+bmFtZSgpID09IHRhcmdldE5hbWUpIHsKLSAgICAgICAgICAgICAgICAqZWxlbWVudCA9
IERPTUVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGVsdCk7CisgICAgICAgICAgICBpZiAoZWx0Lm5h
bWUoKSA9PSB0YXJnZXROYW1lKSB7CisgICAgICAgICAgICAgICAgKmVsZW1lbnQgPSBET01FbGVt
ZW50OjpjcmVhdGVJbnN0YW5jZSgmZWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gU19PSzsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238585</attachid>
            <date>2014-09-23 21:37:33 -0700</date>
            <delta_ts>2014-09-24 19:39:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137056-20140923213732.patch</filename>
            <type>text/plain</type>
            <size>36066</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczOTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFkM2Y2ODA2NTg4NzU2
NjIxMWFhZjRmNDU5NWZmMTEwNzQ5YTk3Ny4uNGEzZjMwMDZhOGY1MjMwNWQxZmJiYzVjZDhkYTU3
MjhjODA3ODJhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE0LTA5LTIzICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgaW5pdGlhbCBp
czw+KCkgLyBkb3duY2FzdDw+KCkgc3VwcG9ydCBmb3IgYW55IHR5cGUgb2YgTm9kZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzA1NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBpbml0aWFsIGlz
PD4oKSAvIGRvd25jYXN0PD4oKSBzdXBwb3J0IGZvciBhbnkgdHlwZSBvZiBOb2Rlcywgbm90Cisg
ICAgICAgIGp1c3QgRWxlbWVudHMgYnk6CisgICAgICAgIC0gTW92aW5nIHRoZSBpczw+KCkgLyBk
b3duY2FzdDw+KCkgZGVjbGFyYXRpb25zIGZyb20gRWxlbWVudC5oIHRvCisgICAgICAgICAgTm9k
ZS5oCisgICAgICAgIC0gSW50cm9kdWNpbmcgYSBERUZJTkVfVFlQRV9IRUxQRVJTXyooKSBtYWNy
byB0aGF0IGdlbmVyYXRlcyB0aGUgbmVlZGVkCisgICAgICAgICAgdGVtcGxhdGUgc3BlY2lhbGl6
YXRpb25zIGZvciBpczw+KCkgLyBkb3duY2FzdDw+KCkgdG8gd29yay4gVGhpcworICAgICAgICAg
IG1hY3JvIHdpbGwgcmVwbGFjZSBOT0RFX1RZUEVfQ0FTVFMoKSBlbnRpcmVseSBvbmNlIHRoZSBj
b2RlIGJhc2UgaXMKKyAgICAgICAgICBmdWxseSBwb3J0ZWQuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBtYWtlcyB1c2Ugb2YgREVGSU5FX1RZUEVfSEVMUEVSU18qKCkgbWFjcm8gZm9yCisgICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQsIHRoYXQgaXMgYW4gSFRNTEVsZW1lbnQgZm9yIHdoaWNo
IHRoZSB0ZW1wbGF0ZQorICAgICAgICBzcGVjaWFsaXphdGlvbnMgY2Fubm90IGJlIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGJlY2F1c2UgaXQgcmVxdWlyZXMKKyAgICAgICAgc3BlY2lhbCBoYW5k
bGluZy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgdXNlIG9mIERFRklORV9UWVBF
X0hFTFBFUlNfKigpIG1hY3JvIGZvcgorICAgICAgICBEb2N1bWVudEZyYWdtZW50IHRvIHNob3cg
dGhhdCBpdCBjYW4gYmUgdXNlZCBmb3Igbm9uLUVsZW1lbnQgTm9kZXMuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcG9ydE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnNldEZvY3VzZWRFbGVtZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnRGcmFnbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6aXNEb2N1bWVudEZyYWdtZW50KToKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6aXMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZG93bmNhc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Ob2Rl
Lmg6CisgICAgICAgIChXZWJDb3JlOjppcyk6CisgICAgICAgIChXZWJDb3JlOjpkb3duY2FzdCk6
CisgICAgICAgICogZG9tL21ha2VfbmFtZXMucGw6CisgICAgICAgIChwcmludFR5cGVIZWxwZXJz
KToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNjYW5Gb3JGb3JtKToKKyAgICAgICAgKiBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlRnJvbUNvbnRyb2xFbGVt
ZW50c0FuY2VzdG9yRGlzYWJsZWRTdGF0ZVVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
aWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKToKKyAgICAgICAgKiBodG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZW5jbG9zaW5nRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSFRNTEZv
cm1Db250cm9sRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OnN1Ym1pdEVsZW1lbnRGcm9tRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmZv
cm1FbGVtZW50SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpkZWZh
dWx0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y2hlY2tJbnZh
bGlkQ29udHJvbHNBbmRDb2xsZWN0VW5oYW5kbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
b3JtRWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0xhYmVsYWJsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL1JhZGlvTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6
Y2hlY2tFbGVtZW50TWF0Y2hlc1JhZGlvTm9kZUxpc3RGaWx0ZXIpOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0ZSk6CisgICAgICAgICogbG9hZGVyL0Zvcm1T
dWJtaXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUp
OgorICAgICAgICAqIG1hdGhtbC9NYXRoTUxFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCdXR0b246OmZvcm1D
b250cm9sRWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgICogc3Zn
L2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oOgorCiAyMDE0LTA5LTIzICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGlzPEhUTUwqRWxl
bWVudD4oKSBmb3IgdHlwZSBjaGVja2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDA4NjEwNDk3MzU5
MGIwOTNmNjRkMmVjYWVlZGM0MDZkZjJlMWU1OWEuLjgwZWMwNzM4NDQ4MzhmNDE1ZTQ3Njk3ZTc0
YjE4Y2RmYjZhMjIyMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOCBAQAogMjAxNC0w
OS0yMyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgQWRk
IGluaXRpYWwgaXM8PigpIC8gZG93bmNhc3Q8PigpIHN1cHBvcnQgZm9yIGFueSB0eXBlIG9mIE5v
ZGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcw
NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2Ug
aXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKSAvIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+KCkKKyAgICAgICAgaW5zdGVhZCBvZiBpc0Zvcm1Db250cm9sRWxlbWVudCgpIC8gdG9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50KCkuCisKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAg
ICAgIChXZWJGcmFtZTo6ZWxlbWVudFdpdGhOYW1lKToKKworMjAxNC0wOS0yMyAgQ2hyaXN0b3Bo
ZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBm
aXggYWZ0ZXIgcjE3Mzg5My4KIAogICAgICAgICBQYXJ0aWFsIHJldmVydCBvZiByMTczODkzIHRv
IGZpeCBkZWJ1ZyBidWlsZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCmluZGV4IDY3MDg4ZjE0ZTgzMzNlY2Vi
Mjc4NmEwMzBkMTQ4ZjIxMjJiZDZiODAuLjdiMWMwYTcyMzY0YTQ4NGI3MzJmNDlhMmZhYjkzNjQw
MWU1ZDBmMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCkBAIC03MzksNyArNzM5LDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNSZWFkT25seSgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgaWYgKGlzSFRNTFRleHRBcmVhRWxlbWVudChub2RlKSkKLSAgICAgICAgcmV0
dXJuIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChub2RlKS0+aXNSZWFkT25seSgpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4obm9kZSktPmlzUmVhZE9ubHko
KTsKIAogICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkpIHsKICAgICAgICAgSFRNTElu
cHV0RWxlbWVudCYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CkBA
IC03NjAsOCArNzYwLDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNSZXF1aXJl
ZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGUqIG4gPSB0aGlzLT5u
b2RlKCk7Ci0gICAgaWYgKG4gJiYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobikt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50KG4pLT5pc1JlcXVpcmVkKCk7CisgICAgaWYgKG4gJiYgaXM8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4obikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50PihuKS0+aXNSZXF1aXJlZCgpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKaW5kZXggYTNjZjUyOWU5YzQzZDZkYjQ4MzZhN2JhYmYzYjM5NTZlMDYx
MTAxZC4uZDc4OTU0NGM1ODY0ODBiZGFlYjUzZWFkYzI3ZTk3NTQxZjQzZTJmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCkBAIC05NzMsNyArOTczLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBEb2N1
bWVudDo6aW1wb3J0Tm9kZShOb2RlKiBpbXBvcnRlZE5vZGUsIGJvb2wgZGVlcCwgRXhjZXB0aW9u
Q28KICAgICAgICAgICAgIC8vIEVpdGhlciB0aGV5IGFyZSBpbXBvcnRlZCBhbG9uZyB3aXRoIHRo
ZWlyIGhvc3Qgbm9kZSwgb3IgY3JlYXRlZCBpbXBsaWNpdGx5LgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgRG9jdW1lbnRGcmFnbWVudCYgb2xkRnJhZ21lbnQgPSB0b0Rv
Y3VtZW50RnJhZ21lbnQoKmltcG9ydGVkTm9kZSk7CisgICAgICAgIERvY3VtZW50RnJhZ21lbnQm
IG9sZEZyYWdtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnRGcmFnbWVudD4oKmltcG9ydGVkTm9kZSk7
CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBuZXdGcmFnbWVudCA9IGNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKTsKICAgICAgICAgaWYgKGRlZXApIHsKICAgICAgICAgICAgIGZvciAo
Tm9kZSogb2xkQ2hpbGQgPSBvbGRGcmFnbWVudC5maXJzdENoaWxkKCk7IG9sZENoaWxkOyBvbGRD
aGlsZCA9IG9sZENoaWxkLT5uZXh0U2libGluZygpKSB7CkBAIC0zNDExLDcgKzM0MTEsNyBAQCBi
b29sIERvY3VtZW50OjpzZXRGb2N1c2VkRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IHBycE5l
d0ZvY3VzZWRFbGVtZW50LCBGb2N1cwogCiAgICAgICAgIC8vIERpc3BhdGNoIGEgY2hhbmdlIGV2
ZW50IGZvciBmb3JtIGNvbnRyb2wgZWxlbWVudHMgdGhhdCBoYXZlIGJlZW4gZWRpdGVkLgogICAg
ICAgICBpZiAob2xkRm9jdXNlZEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1Db250cm9sRWxlbWVudCA9IHRv
SFRNTEZvcm1Db250cm9sRWxlbWVudChvbGRGb2N1c2VkRWxlbWVudC5nZXQoKSk7CisgICAgICAg
ICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtQ29udHJvbEVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihvbGRGb2N1c2VkRWxlbWVudC5nZXQoKSk7CiAgICAg
ICAgICAgICBpZiAoZm9ybUNvbnRyb2xFbGVtZW50LT53YXNDaGFuZ2VkU2luY2VMYXN0Rm9ybUNv
bnRyb2xDaGFuZ2VFdmVudCgpKQogICAgICAgICAgICAgICAgIGZvcm1Db250cm9sRWxlbWVudC0+
ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRGcmFnbWVudC5oCmluZGV4IDhlYjkzODdhZDRlYmNjOGNkMGVhYTJjYmU4NzJh
YzYxZWQ5YTE4OTMuLmMxZGZhZTNhMWU2NjRiZjFkODU4ZjBkN2ZiY2QyYTMwYWVkYmY4NDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuaApAQCAtNTIsMTAgKzUyLDkgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CiB9OwogCi1pbmxpbmUgYm9vbCBpc0RvY3VtZW50RnJhZ21lbnQoY29uc3QgTm9k
ZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50RnJhZ21lbnQoKTsgfQotdm9pZCBpc0Rv
Y3VtZW50RnJhZ21lbnQoY29uc3QgRG9jdW1lbnRGcmFnbWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vz
c2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1lLgotCi1OT0RF
X1RZUEVfQ0FTVFMoRG9jdW1lbnRGcmFnbWVudCkKK0RFRklORV9UWVBFX0hFTFBFUlNfQkVHSU4o
RG9jdW1lbnRGcmFnbWVudCkKKyAgICBzdGF0aWMgYm9vbCBpc0RvY3VtZW50RnJhZ21lbnQoY29u
c3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50RnJhZ21lbnQoKTsgfQorREVG
SU5FX1RZUEVfSEVMUEVSU19FTkQoKQogCiB9IC8vbmFtZXNwYWNlCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5o
CmluZGV4IDE2ZWQ2MzIyYzc1YzA4ZWM2YTdjMTBiMzNiNThmNTRlNDY3ZDg4OTguLjI4OTJiZGZh
OGFhNTBlMGQ3Yzk2ODM2YjE3NjIzYjcyYmY3ODA0NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAt
NjcwLDUyICs2NzAsMTEgQEAgaW5saW5lIGJvb2wgaXNFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUp
IHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50Tm9kZSgpOyB9CiAKIE5PREVfVFlQRV9DQVNUUyhFbGVt
ZW50KQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBlbmFtZSBBcmdUeXBl
Pgotc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0cyB7Ci0gICAgc3RhdGljIGJvb2wgaXMoQXJn
VHlwZSYpOwotfTsKLQotLy8gVHlwZSBjaGVja2luZyBmdW5jdGlvbiBmb3IgRWxlbWVudHMsIHRv
IHVzZSBiZWZvcmUgY2FzdGluZyB3aXRoIGRvd25jYXN0PD4oKS4KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBFeHBlY3RlZFR5cGUsIHR5cGVuYW1lIEFyZ1R5cGU+Ci1pbmxpbmUgYm9vbCBpcyhBcmdUeXBl
JiBub2RlKQotewotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxFeHBlY3RlZFR5
cGUsIEFyZ1R5cGU+Ojp2YWx1ZSwgIlVubmVjZXNzYXJ5IHR5cGUgY2hlY2siKTsKLSAgICByZXR1
cm4gRWxlbWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0IEV4cGVjdGVkVHlwZSwgY29uc3QgQXJnVHlw
ZT46OmlzKG5vZGUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBl
bmFtZSBBcmdUeXBlPgotaW5saW5lIGJvb2wgaXMoQXJnVHlwZSogbm9kZSkKLXsKLSAgICBBU1NF
UlQobm9kZSk7Ci0gICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEV4cGVjdGVkVHlw
ZSwgQXJnVHlwZT46OnZhbHVlLCAiVW5uZWNlc3NhcnkgdHlwZSBjaGVjayIpOwotICAgIHJldHVy
biBFbGVtZW50VHlwZUNhc3RUcmFpdHM8Y29uc3QgRXhwZWN0ZWRUeXBlLCBjb25zdCBBcmdUeXBl
Pjo6aXMoKm5vZGUpOwotfQotCiB0ZW1wbGF0ZSA8Pgotc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRy
YWl0czxjb25zdCBFbGVtZW50LCBjb25zdCBOb2RlPiB7CitzdHJ1Y3QgTm9kZVR5cGVDYXN0VHJh
aXRzPGNvbnN0IEVsZW1lbnQsIGNvbnN0IE5vZGU+IHsKICAgICBzdGF0aWMgYm9vbCBpcyhjb25z
dCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRWxlbWVudE5vZGUoKTsgfQogfTsKIAotdGVt
cGxhdGUgPHR5cGVuYW1lIEV4cGVjdGVkVHlwZT4KLXN0cnVjdCBFbGVtZW50VHlwZUNhc3RUcmFp
dHM8RXhwZWN0ZWRUeXBlLCBFeHBlY3RlZFR5cGU+IHsKLSAgICBzdGF0aWMgYm9vbCBpcyhFeHBl
Y3RlZFR5cGUmKSB7IHJldHVybiB0cnVlOyB9Ci19OwotCi0vLyBEb3duY2FzdGluZyBmdW5jdGlv
bnMgZm9yIEVsZW1lbnQgdHlwZXMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1l
IFNvdXJjZT4KLWlubGluZSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfY29uc3Q8
U291cmNlPjo6dmFsdWUsIGNvbnN0IFRhcmdldCYsIFRhcmdldCY+Ojp0eXBlIGRvd25jYXN0KFNv
dXJjZSYgc291cmNlKQotewotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxUYXJn
ZXQsIFNvdXJjZT46OnZhbHVlLCAiVW5uZWNlc3NhcnkgY2FzdCIpOwotICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzPFRhcmdldD4oc291cmNlKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19jb25zdDxTb3VyY2U+
Ojp2YWx1ZSwgY29uc3QgVGFyZ2V0JiwgVGFyZ2V0Jj46OnR5cGU+KHNvdXJjZSk7Ci19Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gaW5saW5lIHR5cGVuYW1lIHN0
ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19jb25zdDxTb3VyY2U+Ojp2YWx1ZSwgY29uc3QgVGFyZ2V0
KiwgVGFyZ2V0Kj46OnR5cGUgZG93bmNhc3QoU291cmNlKiBzb3VyY2UpCi17Ci0gICAgc3RhdGlj
X2Fzc2VydCghc3RkOjppc19iYXNlX29mPFRhcmdldCwgU291cmNlPjo6dmFsdWUsICJVbm5lY2Vz
c2FyeSBjYXN0Iik7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXNvdXJj
ZSB8fCBpczxUYXJnZXQ+KCpzb3VyY2UpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDxzdGQ6OmlzX2NvbnN0PFNvdXJjZT46OnZhbHVlLCBjb25zdCBU
YXJnZXQqLCBUYXJnZXQqPjo6dHlwZT4oc291cmNlKTsKLX0KLQogaW5saW5lIGJvb2wgTm9kZTo6
aGFzQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlzRWxlbWVudE5vZGUoKSAmJiB0
b0VsZW1lbnQodGhpcyktPmhhc0F0dHJpYnV0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGY0NjlmZTVl
MGQ4ODJiNWYxNzk1ZTk0Y2QyYWMyMTkyMzY2YWQzN2EuLjE3ZTdmZDBkNWU5MTM0YWIwNGQ1MGI2
ZTI1MzdkNGI4NDI0YTU4NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNzM5LDYgKzczOSw2MCBAQCBpbmxp
bmUgQ29udGFpbmVyTm9kZSogTm9kZTo6cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpIGNv
bnN0CiAgICAgcmV0dXJuIHBhcmVudE5vZGUoKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEV4
cGVjdGVkVHlwZSwgdHlwZW5hbWUgQXJnVHlwZT4KK3N0cnVjdCBOb2RlVHlwZUNhc3RUcmFpdHMg
eworICAgIHN0YXRpYyBib29sIGlzKEFyZ1R5cGUmKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBFeHBlY3RlZFR5cGU+CitzdHJ1Y3QgTm9kZVR5cGVDYXN0VHJhaXRzPEV4cGVjdGVkVHlwZSwg
RXhwZWN0ZWRUeXBlPiB7CisgICAgc3RhdGljIGJvb2wgaXMoRXhwZWN0ZWRUeXBlJikgeyByZXR1
cm4gdHJ1ZTsgfQorfTsKKworLy8gVHlwZSBjaGVja2luZyBmdW5jdGlvbiBmb3IgTm9kZXMsIHRv
IHVzZSBiZWZvcmUgY2FzdGluZyB3aXRoIGRvd25jYXN0PD4oKS4KK3RlbXBsYXRlIDx0eXBlbmFt
ZSBFeHBlY3RlZFR5cGUsIHR5cGVuYW1lIEFyZ1R5cGU+CitpbmxpbmUgYm9vbCBpcyhBcmdUeXBl
JiBub2RlKQoreworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxFeHBlY3RlZFR5
cGUsIEFyZ1R5cGU+Ojp2YWx1ZSwgIlVubmVjZXNzYXJ5IHR5cGUgY2hlY2siKTsKKyAgICByZXR1
cm4gTm9kZVR5cGVDYXN0VHJhaXRzPGNvbnN0IEV4cGVjdGVkVHlwZSwgY29uc3QgQXJnVHlwZT46
OmlzKG5vZGUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBlbmFt
ZSBBcmdUeXBlPgoraW5saW5lIGJvb2wgaXMoQXJnVHlwZSogbm9kZSkKK3sKKyAgICBBU1NFUlQo
bm9kZSk7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEV4cGVjdGVkVHlwZSwg
QXJnVHlwZT46OnZhbHVlLCAiVW5uZWNlc3NhcnkgdHlwZSBjaGVjayIpOworICAgIHJldHVybiBO
b2RlVHlwZUNhc3RUcmFpdHM8Y29uc3QgRXhwZWN0ZWRUeXBlLCBjb25zdCBBcmdUeXBlPjo6aXMo
Km5vZGUpOworfQorCisvLyBEb3duY2FzdGluZyBmdW5jdGlvbnMgZm9yIE5vZGUgdHlwZXMuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4KK2lubGluZSB0eXBlbmFt
ZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfY29uc3Q8U291cmNlPjo6dmFsdWUsIGNvbnN0IFRh
cmdldCYsIFRhcmdldCY+Ojp0eXBlIGRvd25jYXN0KFNvdXJjZSYgc291cmNlKQoreworICAgIHN0
YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxUYXJnZXQsIFNvdXJjZT46OnZhbHVlLCAiVW5u
ZWNlc3NhcnkgY2FzdCIpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlz
PFRhcmdldD4oc291cmNlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6
Y29uZGl0aW9uYWw8c3RkOjppc19jb25zdDxTb3VyY2U+Ojp2YWx1ZSwgY29uc3QgVGFyZ2V0Jiwg
VGFyZ2V0Jj46OnR5cGU+KHNvdXJjZSk7Cit9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXQsIHR5
cGVuYW1lIFNvdXJjZT4gaW5saW5lIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19j
b25zdDxTb3VyY2U+Ojp2YWx1ZSwgY29uc3QgVGFyZ2V0KiwgVGFyZ2V0Kj46OnR5cGUgZG93bmNh
c3QoU291cmNlKiBzb3VyY2UpCit7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29m
PFRhcmdldCwgU291cmNlPjo6dmFsdWUsICJVbm5lY2Vzc2FyeSBjYXN0Iik7CisgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXNvdXJjZSB8fCBpczxUYXJnZXQ+KCpzb3VyY2Up
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxzdGQ6
OmlzX2NvbnN0PFNvdXJjZT46OnZhbHVlLCBjb25zdCBUYXJnZXQqLCBUYXJnZXQqPjo6dHlwZT4o
c291cmNlKTsKK30KKworLy8gQWRkIHN1cHBvcnQgZm9yIHR5cGUgY2hlY2tpbmcgLyBjYXN0aW5n
IHVzaW5nIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBoZWxwZXJzCisvLyBmb3IgYSBzcGVjaWZpYyBj
bGFzcy4KKyNkZWZpbmUgREVGSU5FX1RZUEVfSEVMUEVSU19CRUdJTihDbGFzc05hbWUpIFwKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4gXAorICAgIGNsYXNzIE5vZGVUeXBlQ2FzdFRy
YWl0czxjb25zdCBDbGFzc05hbWUsIEFyZ1R5cGU+IHsgXAorICAgIHB1YmxpYzogXAorICAgICAg
ICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2RlKSB7IHJldHVybiBpcyMjQ2xhc3NOYW1lKG5v
ZGUpOyB9IFwKKyAgICBwcml2YXRlOgorCisjZGVmaW5lIERFRklORV9UWVBFX0hFTFBFUlNfRU5E
KCkgXAorICAgIH07CisKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZW1vdmVkIGFuZCBhbGwg
dXNlcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBERUZJTkVfVFlQRV9IRUxQRVJTXyooKS4KICNk
ZWZpbmUgTk9ERV9UWVBFX0NBU1RTKFRvQ2xhc3NOYW1lKSBcCiAgICAgVFlQRV9DQVNUU19CQVNF
KFRvQ2xhc3NOYW1lLCBOb2RlLCBub2RlLCBXZWJDb3JlOjppcyMjVG9DbGFzc05hbWUoKm5vZGUp
LCBXZWJDb3JlOjppcyMjVG9DbGFzc05hbWUobm9kZSkpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMu
cGwKaW5kZXggZDhmOTBjZDNhZjM2YjQ1ZTc1MjRmNjgzYTg4YTRmMDZmMzZmOGU1Yy4uYzJlODBm
NWQyZDQ5ZmQ4Zjk2ODMxNmYzNTdiMmRjOWE4OWEyN2ZhZiAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFt
ZXMucGwKQEAgLTYzNiw3ICs2MzYsNyBAQCBzdWIgcHJpbnRUeXBlSGVscGVycwogICAgICAgICBw
cmludCBGIDw8RU5ECiBjbGFzcyAkY2xhc3M7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4K
LWNsYXNzIEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCAkY2xhc3MsIEFyZ1R5cGU+IHsKK2Ns
YXNzIE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCAkY2xhc3MsIEFyZ1R5cGU+IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2RlKSB7IHJldHVybiBjaGVja1RhZ05hbWUo
bm9kZSk7IH0KIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCmluZGV4IDIwMTEyY2EyOTZhNTUxMDNkYTM1YWU0MzhlYWQ5NmNmZWZiZDc3MjMuLjJiYTFh
YTc5YmU3MDQwOThkOTFlZDAxNmM3ZDdmZGUwN2RmMDY0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yMDI1LDggKzIwMjUsOCBAQCBzdGF0aWMgSFRN
TEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50KiBzdGFydCkKICAgICAgICAgSFRNTEVs
ZW1lbnQmIGVsZW1lbnQgPSAqaXQ7CiAgICAgICAgIGlmIChpc0hUTUxGb3JtRWxlbWVudCgmZWxl
bWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PigmZWxl
bWVudCk7Ci0gICAgICAgIGlmIChpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoZWxlbWVudCkpCi0g
ICAgICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KGVsZW1lbnQpLmZvcm0o
KTsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKQorICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQp
LmZvcm0oKTsKICAgICAgICAgaWYgKGlzSFRNTEZyYW1lRWxlbWVudEJhc2UoZWxlbWVudCkpIHsK
ICAgICAgICAgICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSB0b0hUTUxGcmFtZUVsZW1l
bnRCYXNlKGVsZW1lbnQpLmNvbnRlbnREb2N1bWVudCgpOwogICAgICAgICAgICAgaWYgKCFjb250
ZW50RG9jdW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQu
aAppbmRleCBlYzk0MjQwNjRkNjliODVkZWE1ZmFjMTU1YjM0ZWM0NmUyMTBjODEzLi5hODUxMmEw
MjBkNmI1MDE2OTdkMzJmYjg3NjQ3ZDk3MzQ4ZDFjNDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgKQEAgLTExOCw5ICsxMTgsNiBAQCBwcml2YXRlOgog
ICAgIFN0cmluZyBtX2N1c3RvbVZhbGlkYXRpb25NZXNzYWdlOwogfTsKIAotI2RlZmluZSBGT1JN
X0FTU09DSUFURURfRUxFTUVOVF9UWVBFX0NBU1RTKFRvQ2xhc3NOYW1lLCBwcmVkaWNhdGUpIFwK
LSAgICBUWVBFX0NBU1RTX0JBU0UoVG9DbGFzc05hbWUsIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCwg
ZWxlbWVudCwgZWxlbWVudC0+cHJlZGljYXRlLCBlbGVtZW50LnByZWRpY2F0ZSkKLQogfSAvLyBu
YW1lc3BhY2UKIAogI2VuZGlmIC8vIEZvcm1Bc3NvY2lhdGVkRWxlbWVudF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmgKaW5kZXggNjczNGJlMWExNzYyM2JiNTU2ZTY4MTc3Zjg1NDU5MzFiMmY5
M2FmOS4uNmY4MjNhMGU2ZDJiYWU4MGZkMDgzMjAxMWM2MzIzMzY1MzczOTg5OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuaApAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgaXNIVE1MRWxlbWVu
dChjb25zdCBIVE1MRWxlbWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNr
IG9mIHR5CiBpbmxpbmUgYm9vbCBpc0hUTUxFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0
dXJuIG5vZGUuaXNIVE1MRWxlbWVudCgpOyB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmdUeXBl
Pgotc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBIVE1MRWxlbWVudCwgQXJnVHlw
ZT4geworc3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBIVE1MRWxlbWVudCwgQXJnVHlw
ZT4gewogICAgIHN0YXRpYyBib29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0dXJuIGlzSFRNTEVs
ZW1lbnQobm9kZSk7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVs
ZW1lbnQuY3BwCmluZGV4IDA0NjE5YjU4NzhjMzVjMDFhOGRiNDhiYmExN2YyNWE3ZjJkYjNiOWYu
LjJhZGVlYjc1NzFkZmQxZmRiNGJkOWI2MjQ0MmE4YWM3Y2ZiYTZlNjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcApAQCAtNTgsOCArNTgsOCBAQCBQYXNz
UmVmUHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+IEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJgogc3RhdGljIHZvaWQgdXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50
c0FuY2VzdG9yRGlzYWJsZWRTdGF0ZVVuZGVyKEhUTUxFbGVtZW50JiBzdGFydE5vZGUsIGJvb2wg
aXNEaXNhYmxlZCkKIHsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sOwotICAg
IGlmIChpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoc3RhcnROb2RlKSkKLSAgICAgICAgY29udHJv
bCA9ICZ0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoc3RhcnROb2RlKTsKKyAgICBpZiAoaXM8SFRN
TEZvcm1Db250cm9sRWxlbWVudD4oc3RhcnROb2RlKSkKKyAgICAgICAgY29udHJvbCA9ICZkb3du
Y2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihzdGFydE5vZGUpOwogICAgIGVsc2UKICAgICAg
ICAgY29udHJvbCA9IFRyYXZlcnNhbDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pjo6Zmlyc3RXaXRo
aW4oJnN0YXJ0Tm9kZSk7CiAgICAgd2hpbGUgKGNvbnRyb2wpIHsKQEAgLTE2OCw3ICsxNjgsNyBA
QCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVlZGVkKCkgY29u
c3QKICAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKQogICAgICAgICAg
ICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVu
dD4oZWxlbWVudCkpOwogICAgICAgICBlbHNlIGlmIChlbGVtZW50LmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkpCi0gICAgICAgICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5hcHBlbmQoJnRvSFRNTEZv
cm1Db250cm9sRWxlbWVudChlbGVtZW50KSk7CisgICAgICAgICAgICBtX2Fzc29jaWF0ZWRFbGVt
ZW50cy5hcHBlbmQoJmRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCmluZGV4IDEyYWNmYjNhYzU4MmZlYmI1NDA2OWRhNGYyYjY3MzU0YmVjMDNkMWEuLjA1
MDFkNjViMzM5ZTNiYTViN2YwOTM1NDE2NmI0NzEwM2Q1ODhlNDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtNTA5LDkgKzUwOSw5IEBA
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmVuY2xvc2lu
Z0Zvcm1Db250cm9sRWxlbWVudChOb2RlCiB7CiAgICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0
b0VsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1
cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5vZGUpOwogICAgIH0KLSAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViY29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCBkNTZjZmFh
NDFiZmEyZWYzOTUyMGU4NWE3ODgwMDg0ZGExZjIwYzdmLi43MjU2NTY5ZWU5NGY1NTBiOWE2NDVk
Mjc4ZGNkNjBjNThhZmI4ZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaApAQCAtMTkwLDE4ICsxOTAsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aGFzQXV0b2ZvY3VzZWQgOiAxOwogfTsKIAotdm9pZCBpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQo
Y29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50
aW1lIGNoZWNrIG9mIHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1lLgotaW5saW5lIGJvb2wgaXNI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJuIGVs
ZW1lbnQuaXNGb3JtQ29udHJvbEVsZW1lbnQoKTsgfQotaW5saW5lIGJvb2wgaXNIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50Tm9k
ZSgpICYmIHRvRWxlbWVudChub2RlKS5pc0Zvcm1Db250cm9sRWxlbWVudCgpOyB9Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBBcmdUeXBlPgotc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25z
dCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LCBBcmdUeXBlPiB7Ci0gICAgc3RhdGljIGJvb2wgaXMo
QXJnVHlwZSYgbm9kZSkgeyByZXR1cm4gaXNIVE1MRm9ybUNvbnRyb2xFbGVtZW50KG5vZGUpOyB9
Ci19OwotCi1OT0RFX1RZUEVfQ0FTVFMoSFRNTEZvcm1Db250cm9sRWxlbWVudCkKLQotRk9STV9B
U1NPQ0lBVEVEX0VMRU1FTlRfVFlQRV9DQVNUUyhIVE1MRm9ybUNvbnRyb2xFbGVtZW50LCBpc0Zv
cm1Db250cm9sRWxlbWVudCgpKQorREVGSU5FX1RZUEVfSEVMUEVSU19CRUdJTihIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KQorICAgIHN0YXRpYyBib29sIGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChj
b25zdCBFbGVtZW50JiBlbGVtZW50KSB7IHJldHVybiBlbGVtZW50LmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3Qg
Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5v
ZGUpLmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQoY29uc3QgRm9ybUFzc29jaWF0ZWRFbGVtZW50JiBlbGVtZW50KSB7IHJl
dHVybiBlbGVtZW50LmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7IH0KK0RFRklORV9UWVBFX0hFTFBF
UlNfRU5EKCkKIAogfSAvLyBuYW1lc3BhY2UKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwCmluZGV4IDQ1ODliNDc3NzU3ZjZkYjJhM2IwM2M4MmI1ZjYzNWE1OWM0OWQ4YTku
LjIyMGVjMDE3Y2YxMTkyMzBkNzg2ZjEwZTA4Y2I0ZDEwZGQ1ZGI1NjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTE4MiwxNSArMTgyLDE1IEBAIHZvaWQgSFRN
TEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCwgYm9vbCBmcm9tSW1w
bGljaXRTdWJtaXNzaW9uCiAgICAgdW5zaWduZWQgc3VibWlzc2lvblRyaWdnZXJDb3VudCA9IDA7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZm9ybUFzc29jaWF0ZWRF
bGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07Ci0gICAgICAgIGlmICghZm9ybUFzc29j
aWF0ZWRFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBpZiAoIWlzPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KGZvcm1Bc3NvY2lhdGVkRWxlbWVudCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQg
PSB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoZm9ybUFzc29jaWF0ZWRFbGVtZW50KTsKLSAgICAg
ICAgaWYgKGZvcm1FbGVtZW50LT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSkgewotICAgICAg
ICAgICAgaWYgKGZvcm1FbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgZm9y
bUVsZW1lbnQtPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZlbnQpOworICAgICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50JiBmb3JtRWxlbWVudCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+KCpmb3JtQXNzb2NpYXRlZEVsZW1lbnQpOworICAgICAgICBpZiAoZm9ybUVsZW1lbnQu
aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGlmIChmb3JtRWxlbWVu
dC5yZW5kZXJlcigpKSB7CisgICAgICAgICAgICAgICAgZm9ybUVsZW1lbnQuZGlzcGF0Y2hTaW11
bGF0ZWRDbGljayhldmVudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKGZvcm1FbGVtZW50LT5jYW5UcmlnZ2VySW1wbGljaXRTdWJt
aXNzaW9uKCkpCisgICAgICAgIH0gZWxzZSBpZiAoZm9ybUVsZW1lbnQuY2FuVHJpZ2dlckltcGxp
Y2l0U3VibWlzc2lvbigpKQogICAgICAgICAgICAgKytzdWJtaXNzaW9uVHJpZ2dlckNvdW50Owog
ICAgIH0KIApAQCAtMjA3LDcgKzIwNyw3IEBAIHN0YXRpYyBpbmxpbmUgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogc3VibWl0RWxlbWVudEZyb21FdmVudChjb25zdCBFdmVudCogZXZlbnQpCiB7CiAg
ICAgZm9yIChOb2RlKiBub2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9k
ZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQobm9kZSk7CisgICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSk7CiAgICAgfQogICAg
IHJldHVybiAwOwogfQpAQCAtMjIzLDggKzIyMyw4IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp2
YWxpZGF0ZUludGVyYWN0aXZlbHkoRXZlbnQqIGV2ZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQobV9h
c3NvY2lhdGVkRWxlbWVudHNbaV0pLT5oaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Cisg
ICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihtX2Fzc29jaWF0ZWRFbGVtZW50
c1tpXSkpCisgICAgICAgICAgICBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqbV9h
c3NvY2lhdGVkRWxlbWVudHNbaV0pLmhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKICAg
ICB9CiAKICAgICBWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4+IHVuaGFuZGxl
ZEludmFsaWRDb250cm9sczsKQEAgLTI0Niw3ICsyNDYsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVu
dDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIGVsZW1l
bnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7CiAgICAgICAgICAgICBlbGVtZW50LmZv
Y3VzKCk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQot
ICAgICAgICAgICAgICAgIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50KS51cGRhdGVW
aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KS51cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3Nh
Z2UoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzQ1LDE0ICsz
NDUsMTQgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wg
YWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgcHJvY2UKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVu
dHNbaV07Ci0gICAgICAgIGlmICghYXNzb2NpYXRlZEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkpCisgICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oYXNzb2NpYXRl
ZEVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChuZWVkQnV0dG9u
QWN0aXZhdGlvbikgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJv
bCA9IHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChhc3NvY2lhdGVkRWxlbWVudCk7Ci0gICAgICAg
ICAgICBpZiAoY29udHJvbC0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKKyAgICAgICAgICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQmIGNvbnRyb2wgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PigqYXNzb2NpYXRlZEVsZW1lbnQpOworICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNBY3Rp
dmF0ZWRTdWJtaXQoKSkKICAgICAgICAgICAgICAgICBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGZh
bHNlOwotICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID09
IDAgJiYgY29udHJvbC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCi0gICAgICAgICAgICAg
ICAgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID0gY29udHJvbDsKKyAgICAgICAgICAgIGVs
c2UgaWYgKCFmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24gJiYgY29udHJvbC5pc1N1Y2Nlc3Nm
dWxTdWJtaXRCdXR0b24oKSkKKyAgICAgICAgICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRC
dXR0b24gPSAmY29udHJvbDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzg0LDggKzM4NCw4IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAg
ICAgICAgICAgIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChtX2Fzc29jaWF0ZWRFbGVtZW50c1tp
XSktPnJlc2V0KCk7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihtX2Fz
c29jaWF0ZWRFbGVtZW50c1tpXSkpCisgICAgICAgICAgICBkb3duY2FzdDxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLnJlc2V0KCk7CiAgICAgfQogCiAg
ICAgbV9pc0luUmVzZXRGdW5jdGlvbiA9IGZhbHNlOwpAQCAtNTkyLDcgKzU5Miw3IEBAIHVuc2ln
bmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqIGFzc29jaWF0ZWRFbGVtCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHMp
IHsKICAgICAgICAgaWYgKCZlbGVtZW50ID09ICZhc3NvY2lhdGVkSFRNTEVsZW1lbnQpCiAgICAg
ICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgaWYgKCFpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQo
ZWxlbWVudCkgJiYgIWlzSFRNTE9iamVjdEVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIGlmICgh
aXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkgJiYgIWlzSFRNTE9iamVjdEVsZW1l
bnQoZWxlbWVudCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGVsZW1lbnQu
Zm9ybSgpICE9IHRoaXMpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY5NiwxMSArNjk2LDEx
IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp3YXNVc2VyU3VibWl0dGVkKCkgY29uc3QKIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSB0b0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pOwotICAgICAgICBpZiAoY29udHJvbC0+aXNT
dWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCi0gICAgICAgICAgICByZXR1cm4gY29udHJvbDsKKyAg
ICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgY29udHJvbCA9IGRvd25jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSk7CisgICAgICAgIGlmIChj
b250cm9sLmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKQorICAgICAgICAgICAgcmV0dXJuICZj
b250cm9sOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNzI0LDcgKzcyNCw3IEBAIGJvb2wg
SFRNTEZvcm1FbGVtZW50OjpjaGVja0ludmFsaWRDb250cm9sc0FuZENvbGxlY3RVbmhhbmRsZWQo
VmVjdG9yPFJlZlB0cjxGb3JtCiAgICAgYm9vbCBoYXNJbnZhbGlkQ29udHJvbHMgPSBmYWxzZTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgaWYgKGVsZW1lbnRzW2ldLT5mb3JtKCkgPT0gdGhpcyAmJiBlbGVtZW50c1tpXS0+aXNG
b3JtQ29udHJvbEVsZW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCogY29udHJvbCA9IHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50c1tpXS5nZXQoKSk7
CisgICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gZG93bmNhc3Q8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudHNbaV0uZ2V0KCkpOwogICAgICAgICAgICAg
aWYgKCFjb250cm9sLT5jaGVja1ZhbGlkaXR5KCZ1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpICYm
IGNvbnRyb2wtPmZvcm0oKSA9PSB0aGlzKQogICAgICAgICAgICAgICAgIGhhc0ludmFsaWRDb250
cm9scyA9IHRydWU7CiAgICAgICAgIH0KQEAgLTgxMCw4ICs4MTAsOCBAQCB2b2lkIEhUTUxGb3Jt
RWxlbWVudDo6ZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKCkKICAgICBBU1NFUlQoIXNo
b3VsZEF1dG9jb21wbGV0ZSgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fz
c29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9hc3NvY2lhdGVk
RWxlbWVudHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICB0b0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLT5yZXNldCgpOworICAg
ICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obV9hc3NvY2lhdGVkRWxlbWVudHNb
aV0pKQorICAgICAgICAgICAgZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNz
b2NpYXRlZEVsZW1lbnRzW2ldKS5yZXNldCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBkODY3Zjc1NDQwNDVhY2MwZTJlMjU1NjhiMDg0NTZj
NjFhZTk0YjQzLi4yOWI3MDAzYWZmMzUxZmNiNThmN2VhZDA2ZDcwNTQ2OWNmOWRkOGFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtOTE1LDcgKzkxNSw3IEBAIGlu
bGluZSBib29sIGlzSFRNTE1lZGlhRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7IHJl
dHVybiBlbGVtZW50LmlzTWVkaWFFCiBpbmxpbmUgYm9vbCBpc0hUTUxNZWRpYUVsZW1lbnQoY29u
c3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50
KG5vZGUpLmlzTWVkaWFFbGVtZW50KCk7IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEFyZ1R5cGU+
Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQsIEFy
Z1R5cGU+IHsKK3N0cnVjdCBOb2RlVHlwZUNhc3RUcmFpdHM8Y29uc3QgSFRNTE1lZGlhRWxlbWVu
dCwgQXJnVHlwZT4gewogICAgIHN0YXRpYyBib29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0dXJu
IGlzSFRNTE1lZGlhRWxlbWVudChub2RlKTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAppbmRleCA3MzM2MWEwNDk1YzIwZDFiMWVhZDI4MmNj
ODY2MjEzZTNhZWI3ZTRiLi5kMzAwNGZlNDNlZjU1NTljODdjM2FiY2NiNTY0MDk2NDFhZjhmZDdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaApAQCAt
MTYyLDcgKzE2Miw3IEBAIGlubGluZSBib29sIGlzSFRNTFBsdWdJbkltYWdlRWxlbWVudChjb25z
dCBIVE1MUGx1Z0luRWxlbWVudCYgZWxlbWVudCkgeyByZXR1cm4KIGlubGluZSBib29sIGlzSFRN
TFBsdWdJbkltYWdlRWxlbWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzUGx1
Z2luRWxlbWVudCgpICYmIHRvSFRNTFBsdWdJbkVsZW1lbnQobm9kZSkuaXNQbHVnSW5JbWFnZUVs
ZW1lbnQoKTsgfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4KLXN0cnVjdCBFbGVtZW50
VHlwZUNhc3RUcmFpdHM8Y29uc3QgSFRNTFBsdWdJbkltYWdlRWxlbWVudCwgQXJnVHlwZT4gewor
c3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LCBB
cmdUeXBlPiB7CiAgICAgc3RhdGljIGJvb2wgaXMoQXJnVHlwZSYgbm9kZSkgeyByZXR1cm4gaXNI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50KG5vZGUpOyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFi
ZWxhYmxlRWxlbWVudC5oCmluZGV4IGJiYWQ2OWQxNDdlNzU2YzFhMDFkZjNlMWQ1MTg4ZmE0NWI5
YTU0YWEuLjQ4OTU2NzI1MzU0ZmNkNzc3MDZkMjk5YzMwMzUxYzcyNDY4NTE0M2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvTGFiZWxhYmxlRWxlbWVudC5oCkBAIC01NSw3ICs1NSw3IEBAIGlubGluZSBi
b29sIGlzTGFiZWxhYmxlRWxlbWVudChjb25zdCBIVE1MRWxlbWVudCYgZWxlbWVudCkgeyByZXR1
cm4gZWxlbWVudC5pc0xhCiBpbmxpbmUgYm9vbCBpc0xhYmVsYWJsZUVsZW1lbnQoY29uc3QgTm9k
ZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChu
b2RlKS5pc0xhYmVsYWJsZSgpOyB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmdUeXBlPgotc3Ry
dWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBMYWJlbGFibGVFbGVtZW50LCBBcmdUeXBl
PiB7CitzdHJ1Y3QgTm9kZVR5cGVDYXN0VHJhaXRzPGNvbnN0IExhYmVsYWJsZUVsZW1lbnQsIEFy
Z1R5cGU+IHsKICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2RlKSB7IHJldHVybiBpc0xh
YmVsYWJsZUVsZW1lbnQobm9kZSk7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxp
c3QuY3BwCmluZGV4IDcwMmYyMWI1YzEyMTE3YmVkODU3ZGYxNDk5ZTdjNDRhYjk2MDIyNzMuLjk0
Y2U0NjM2ZjNjNmU2Y2M5YWUyZGQyNDI0ZDdiNGYwODllZjIwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9SYWRpb05vZGVMaXN0LmNwcApAQCAtOTEsNyArOTEsNyBAQCBib29sIFJhZGlvTm9kZUxpc3Q6
OmNoZWNrRWxlbWVudE1hdGNoZXNSYWRpb05vZGVMaXN0RmlsdGVyKGNvbnN0IEVsZW1lbnQmIHRl
c3RFbAogICAgICAgICBpZiAodGVzdEVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RUYWcpKQogICAg
ICAgICAgICAgZm9ybUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4odGVzdEVs
ZW1lbnQpLmZvcm0oKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9ybUVsZW1lbnQgPSB0
b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQodGVzdEVsZW1lbnQpLmZvcm0oKTsKKyAgICAgICAgICAg
IGZvcm1FbGVtZW50ID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4odGVzdEVsZW1l
bnQpLmZvcm0oKTsKICAgICAgICAgaWYgKCFmb3JtRWxlbWVudCB8fCBmb3JtRWxlbWVudCAhPSAm
b3duZXJOb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmluZGV4
IDkzOTA1NTcwODYyNWJkNmNkNzlhYTdmNDAzNmJmMDIzZTBlMTZkNTkuLjgxYTIwZDlhNTNhMjUy
Njg3MDhjODFiYmJiYWJlOGQ0NjMwMmZiOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTcyNyw3ICs3MjcsNyBAQCB2
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0ZShIVE1MQ29uc3RydWN0aW9u
U2l0ZVRhc2smIHRhc2spCiAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHVzZSB0aGUgRG9jdW1lbnRG
cmFnbWVudCBhcyBhIHJvb3Qgbm9kZS4gU28gd2UgbXVzdCB0cmVhdCB0aGUgcm9vdCBub2RlIChE
b2N1bWVudEZyYWdtZW50KSBhcyBpZiBpdCBpcyBhIGh0bWwgZWxlbWVudCBoZXJlLgogICAgICAg
ICBib29sIHBhcmVudENhbkJlRm9zdGVyUGFyZW50ID0gcGFyZW50ICYmIChwYXJlbnQtPmlzRWxl
bWVudE5vZGUoKSB8fCAobV9pc1BhcnNpbmdGcmFnbWVudCAmJiBwYXJlbnQgPT0gbV9vcGVuRWxl
bWVudHMucm9vdE5vZGUoKSkpOwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAg
ICBwYXJlbnRDYW5CZUZvc3RlclBhcmVudCA9IHBhcmVudENhbkJlRm9zdGVyUGFyZW50IHx8IChw
YXJlbnQgJiYgcGFyZW50LT5pc0RvY3VtZW50RnJhZ21lbnQoKSAmJiB0b0RvY3VtZW50RnJhZ21l
bnQocGFyZW50KS0+aXNUZW1wbGF0ZUNvbnRlbnQoKSk7CisgICAgICAgIHBhcmVudENhbkJlRm9z
dGVyUGFyZW50ID0gcGFyZW50Q2FuQmVGb3N0ZXJQYXJlbnQgfHwgKHBhcmVudCAmJiBpczxEb2N1
bWVudEZyYWdtZW50PihwYXJlbnQpICYmIGRvd25jYXN0PERvY3VtZW50RnJhZ21lbnQ+KHBhcmVu
dCktPmlzVGVtcGxhdGVDb250ZW50KCkpOwogI2VuZGlmCiAgICAgICAgIGlmIChwYXJlbnRDYW5C
ZUZvc3RlclBhcmVudCkgewogICAgICAgICAgICAgdGFzay5wYXJlbnQgPSBwYXJlbnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCBlMDZiNTZkNzA3MTE2NzE2
NzRmNGZhYTNmOGJkODAyM2QwOWVlNGY5Li4zMjk4MjRhNjA2ZGJmZTM5YjIyMGQ2YzY0NTQ3Y2Y0
NTFiYzVhZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Np
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKQEAg
LTE0NSw3ICsxNDUsNyBAQCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lv
bjo6Y3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9ybSwgY29uc3QgQQogICAgIGlmIChldmVudCAm
JiBldmVudC0+dGFyZ2V0KCkpIHsKICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gZXZlbnQtPnRh
cmdldCgpLT50b05vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAg
ICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBzdWJtaXRCdXR0b24gPSB0
b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQobm9kZSk7CisgICAgICAgICAgICAgICAgc3VibWl0QnV0
dG9uID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obm9kZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwv
TWF0aE1MRWxlbWVudC5oCmluZGV4IGUzYzE0ODRlNGMxMWExNTI5YmEyYjg1MDA1MGUxOThhNGNm
YjU0YjUuLjZkMDVkYmY2NjI3MGNmZjA4YTdiYTNlNTU5ODBlMjM4YTE3NTlmMmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuaApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIGlzTWF0
aE1MRWxlbWVudChjb25zdCBNYXRoTUxFbGVtZW50Jik7IC8vIENhdGNoIHVubmVjZXNzYXJ5IHJ1
bnRpbWUgY2hlY2sgbwogaW5saW5lIGJvb2wgaXNNYXRoTUxFbGVtZW50KGNvbnN0IE5vZGUmIG5v
ZGUpIHsgcmV0dXJuIG5vZGUuaXNNYXRoTUxFbGVtZW50KCk7IH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIEFyZ1R5cGU+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0IE1hdGhNTEVs
ZW1lbnQsIEFyZ1R5cGU+IHsKK3N0cnVjdCBOb2RlVHlwZUNhc3RUcmFpdHM8Y29uc3QgTWF0aE1M
RWxlbWVudCwgQXJnVHlwZT4gewogICAgIHN0YXRpYyBib29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsg
cmV0dXJuIGlzTWF0aE1MRWxlbWVudChub2RlKTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAppbmRleCAxMzljYjk3MmY1N2EwMDAwOGYxMTEwYjkyOTRh
NDBmZjgyOTFkMGY5Li42YzgxYWVhNDZlZDc4NDRlZGVmOWE0MjM4NTljMzE4MTMzNjZmMjQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcApAQCAtNTEsNyArNTEs
NyBAQCBSZW5kZXJCdXR0b246On5SZW5kZXJCdXR0b24oKQogCiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50JiBSZW5kZXJCdXR0b246OmZvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChub2RlRm9yTm9uQW5vbnltb3VzKCkpOworICAg
IHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2RlRm9yTm9uQW5vbnlt
b3VzKCkpOwogfQogCiBib29sIFJlbmRlckJ1dHRvbjo6Y2FuQmVTZWxlY3Rpb25MZWFmKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCmluZGV4IDZiZGU3YmM0MWI1M2Y3M2FiZWY5YjM5MTcy
MjJlZmM2MTRkZWRlYTkuLmNkZGE5OTg1ZjM5ZjBhMTA0M2I2NjVlZTdjMDc1MjI3ZGMzMDY0NjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaApAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgaXNTVkdF
bGVtZW50KGNvbnN0IFNWR0VsZW1lbnQmKTsgLy8gQ2F0Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBj
aGVjayBvZiB0eXBlCiBpbmxpbmUgYm9vbCBpc1NWR0VsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkg
eyByZXR1cm4gbm9kZS5pc1NWR0VsZW1lbnQoKTsgfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJn
VHlwZT4KLXN0cnVjdCBFbGVtZW50VHlwZUNhc3RUcmFpdHM8Y29uc3QgU1ZHRWxlbWVudCwgQXJn
VHlwZT4geworc3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBTVkdFbGVtZW50LCBBcmdU
eXBlPiB7CiAgICAgc3RhdGljIGJvb2wgaXMoQXJnVHlwZSYgbm9kZSkgeyByZXR1cm4gaXNTVkdF
bGVtZW50KG5vZGUpOyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKaW5kZXggNzRmYjU2ZTdkNDg4
MDM5OTlmYzFhYTYyYTc3OTMzNzRiYWNkZjNlYS4uNGY3Nzg5NTdjZmNjMDFhOTk3OTMwODllZDZh
OGMxOGUxZmM0NmI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApAQCAtODcsNyArODcsNyBAQCBpbmxp
bmUgYm9vbCBpc1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhjb25zdCBTVkdF
bGVtZW50JiBlbGVtZW50KSB7CiBpbmxpbmUgYm9vbCBpc1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcyhjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzU1ZHRWxlbWVu
dCgpICYmIGRvd25jYXN0PFNWR0VsZW1lbnQ+KG5vZGUpLmlzRmlsdGVyRWZmZWN0KCk7IH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIEFyZ1R5cGU+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJhaXRz
PGNvbnN0IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywgQXJnVHlwZT4gewor
c3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMsIEFyZ1R5cGU+IHsKICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2Rl
KSB7IHJldHVybiBpc1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyhub2RlKTsg
fQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
CmluZGV4IGY5ODQwYjZmNTllNGJjOTc5YjMwODE5ZmNmNDY1NDVkMzk3MDgyNDguLjYzN2EwNTY4
ZDU3YjQ4MzY3YTM1NjUwYjVhNzY2NTFkNDM4ZWE1MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKQEAgLTI0Miw3ICsyNDIsNyBAQCBpbmxpbmUg
Ym9vbCBpc1NWR1NNSUxFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJu
IGVsZW1lbnQuaXNTTUlMRQogaW5saW5lIGJvb2wgaXNTVkdTTUlMRWxlbWVudChjb25zdCBOb2Rl
JiBub2RlKSB7IHJldHVybiBub2RlLmlzU1ZHRWxlbWVudCgpICYmIGRvd25jYXN0PFNWR0VsZW1l
bnQ+KG5vZGUpLmlzU01JTEVsZW1lbnQoKTsgfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlw
ZT4KLXN0cnVjdCBFbGVtZW50VHlwZUNhc3RUcmFpdHM8Y29uc3QgU1ZHU01JTEVsZW1lbnQsIEFy
Z1R5cGU+IHsKK3N0cnVjdCBOb2RlVHlwZUNhc3RUcmFpdHM8Y29uc3QgU1ZHU01JTEVsZW1lbnQs
IEFyZ1R5cGU+IHsKICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2RlKSB7IHJldHVybiBp
c1NWR1NNSUxFbGVtZW50KG5vZGUpOyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKaW5kZXgg
OGM2YzQ1YzMyOWM5ODJlM2EzNTNkMTUwZWU2MThkNWEwY2Q4YzliMi4uMjJmYzU3MzgwZDcxNGUz
ODU4OGMzZTg3MGU1NDFhYTM2YzNiNGM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
V2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcApAQCAtMTEw
MSwxMiArMTEwMSwxMiBAQCBIUkVTVUxUIFdlYkZyYW1lOjplbGVtZW50V2l0aE5hbWUoQlNUUiBu
YW1lLCBJRE9NRWxlbWVudCogZm9ybSwgSURPTUVsZW1lbnQqKiBlbAogICAgICAgICBjb25zdCBW
ZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFz
c29jaWF0ZWRFbGVtZW50cygpOwogICAgICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSgoVUNo
YXIqKW5hbWUsIFN5c1N0cmluZ0xlbihuYW1lKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghZWxl
bWVudHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBpZiAoIWlzPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnRzW2ldKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsdCA9IHRvSFRNTEZv
cm1Db250cm9sRWxlbWVudChlbGVtZW50c1tpXSk7CisgICAgICAgICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50JiBlbHQgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVu
dHNbaV0pOwogICAgICAgICAgICAgLy8gU2tpcCBvcHRpb24gZWxlbWVudHMsIG90aGVyIGR1ZHMK
LSAgICAgICAgICAgIGlmIChlbHQtPm5hbWUoKSA9PSB0YXJnZXROYW1lKSB7Ci0gICAgICAgICAg
ICAgICAgKmVsZW1lbnQgPSBET01FbGVtZW50OjpjcmVhdGVJbnN0YW5jZShlbHQpOworICAgICAg
ICAgICAgaWYgKGVsdC5uYW1lKCkgPT0gdGFyZ2V0TmFtZSkgeworICAgICAgICAgICAgICAgICpl
bGVtZW50ID0gRE9NRWxlbWVudDo6Y3JlYXRlSW5zdGFuY2UoJmVsdCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFNfT0s7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238636</attachid>
            <date>2014-09-24 19:40:02 -0700</date>
            <delta_ts>2014-09-24 20:50:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137056-20140924194001.patch</filename>
            <type>text/plain</type>
            <size>52914</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczOTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc2YjYxMzBlNjQyY2E5
MzY2Zjc4MDg2MTJkNWEzZGIxNDM2OWZlNS4uOGRmYzI0ODJmMGIwMDZlNDNjOTcxYzBiMDJmZTVl
ZDMxMjExNjI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNyBAQAorMjAxNC0wOS0yNCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGluaXRpYWwg
aXM8PigpIC8gZG93bmNhc3Q8PigpIHN1cHBvcnQgZm9yIGFueSB0eXBlIG9mIE5vZGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwNTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIEFkZCBpbml0aWFs
IGlzPD4oKSAvIGRvd25jYXN0PD4oKSBzdXBwb3J0IGZvciBhbnkgdHlwZSBvZiBOb2Rlcywgbm90
CisgICAgICAgIGp1c3QgRWxlbWVudHMgYnk6CisgICAgICAgIC0gTW92aW5nIHRoZSBpczw+KCkg
LyBkb3duY2FzdDw+KCkgZGVjbGFyYXRpb25zIGZyb20gRWxlbWVudC5oIHRvCisgICAgICAgICAg
Tm9kZS5oCisgICAgICAgIC0gSW50cm9kdWNpbmcgYSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTXyoo
KSBtYWNybyB0aGF0IGdlbmVyYXRlcyB0aGUKKyAgICAgICAgICBuZWVkZWQgdGVtcGxhdGUgc3Bl
Y2lhbGl6YXRpb25zIGZvciBpczw+KCkgLyBkb3duY2FzdDw+KCkgdG8gd29yay4KKyAgICAgICAg
ICBUaGlzIG1hY3JvIHdpbGwgcmVwbGFjZSBOT0RFX1RZUEVfQ0FTVFMoKSBlbnRpcmVseSBvbmNl
IHRoZSBjb2RlIGJhc2UKKyAgICAgICAgICBpcyBmdWxseSBwb3J0ZWQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBtYWtlcyB1c2Ugb2YgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU18qKCkgbWFjcm8gZm9y
CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQsIHRoYXQgaXMgYW4gSFRNTEVsZW1lbnQg
Zm9yIHdoaWNoIHRoZSB0ZW1wbGF0ZQorICAgICAgICBzcGVjaWFsaXphdGlvbnMgY2Fubm90IGJl
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJlY2F1c2UgaXQgcmVxdWlyZXMKKyAgICAgICAgc3Bl
Y2lhbCBoYW5kbGluZy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgdXNlIG9mIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfKigpIG1hY3JvIGZvcgorICAgICAgICBEb2N1bWVudEZyYWdt
ZW50IHRvIHNob3cgdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3Igbm9uLUVsZW1lbnQgTm9kZXMuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1JlcXVpcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0NvbnRyb2wpOgorICAgICAgICAqIGNzcy9T
ZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjppc0F1dG9m
aWxsZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0VuYWJsZWQpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBvcnRO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRGb2N1c2VkRWxlbWVudCk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50RnJhZ21lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRG9j
dW1lbnRGcmFnbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6Zm9jdXMpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjppcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkb3duY2FzdCk6IERl
bGV0ZWQuCisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmRvd25jYXN0KToKKyAgICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoK
KyAgICAgICAgKHByaW50VHlwZUhlbHBlcnMpOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvckZvcm0pOgorICAgICAgICAqIGVk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzUmVuZGVyZXJSZXBs
YWNlZEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6Cisg
ICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVGcm9tQ29udHJvbEVsZW1lbnRz
QW5jZXN0b3JEaXNhYmxlZFN0YXRlVW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxk
U2V0RWxlbWVudDo6cmVmcmVzaEVsZW1lbnRzSWZOZWVkZWQpOgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjplbmNsb3NpbmdGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6aXNIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkpOgorICAgICAg
ICAoV2ViQ29yZTo6c3VibWl0RWxlbWVudEZyb21FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybUVs
ZW1lbnRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmRlZmF1bHRC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjaGVja0ludmFsaWRD
b250cm9sc0FuZENvbGxlY3RVbmhhbmRsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50Ojpkb2N1bWVudERpZFJlc3VtZUZyb21QYWdlQ2FjaGUpOgorICAgICAgICAqIGh0bWwv
SFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTFN1bW1hcnlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmlzQ2xpY2thYmxlQ29udHJvbCk6CisgICAgICAgICogaHRtbC9MYWJlbGFibGVFbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9SYWRpb05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJhZGlvTm9kZUxpc3Q6OmNoZWNrRWxlbWVudE1hdGNoZXNSYWRpb05vZGVMaXN0RmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OmVsZW1lbnRNYXRjaGVzKToKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZmluZEZvc3RlclNpdGUpOgorICAgICAgICAq
IGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXNh
bGxvd1RlbGVwaG9uZU51bWJlclBhcnNpbmcpOgorICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlz
c2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKiBtYXRobWwvTWF0aE1MRWxlbWVudC5oOgorICAgICAgICAqIHBhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWU6OnNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCdXR0b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpm
b3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVzaXplKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6Omlz
UmVhZE9ubHlDb250cm9sKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBz
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisKIDIwMTQtMDktMjQgIEJyaWFuIEouIEJ1
cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHN1
YnRyYWN0IGVsYXBzZWQgdGltZSB3aGlsZSBkZWJ1Z2dlciBpcyBwYXVzZWQgZnJvbSBwcm9maWxl
IG5vZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggNjJlYmU4MGE3Y2I3MjRhZTFiNTg3ZDFiMTc5ODY4
MWIwOTk3ZjFiMy4uM2MwOWI3MjU2ZDVhYmRmMTExNWM4ZGE3ZDU5MGU5ZjNhMWJlYTBmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE4IEBACiAyMDE0LTA5LTI0ICBDaHJpc3RvcGhlIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgaW5pdGlhbCBpczw+KCkgLyBk
b3duY2FzdDw+KCkgc3VwcG9ydCBmb3IgYW55IHR5cGUgb2YgTm9kZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzA1NgorCisgICAgICAgIFJldmll
d2VkIGJ5IEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgVXNlIGlzPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+KCkgLyBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigpCisgICAgICAg
IGluc3RlYWQgb2YgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSAvIHRvSFRNTEZvcm1Db250cm9sRWxl
bWVudCgpLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06Cisg
ICAgICAgIChzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KToKKworMjAxNC0wOS0yNCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAgICAgVXNlIGlzPEhUTUwq
RWxlbWVudD4oKSBpbnN0ZWFkIG9mIGlzSFRNTCpFbGVtZW50KCkgLSBQYXJ0IDEKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzA2OAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cKaW5kZXggM2U4NTA5Y2FiMDUwYWNkNTEzNDY4MGE3Nzk5YjkyODE2OGVhOGE2OS4uOGU0
MTk2NTM0YjU5ZjEwMGE5OWY1YzgzOTRiYTgxZDM5MDFhYWVhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDE0LTA5LTIzICBDaHJpc3RvcGhlIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KKworICAgICAgICBBZGQgaW5pdGlhbCBpczw+KCkgLyBkb3duY2FzdDw+KCkgc3Vw
cG9ydCBmb3IgYW55IHR5cGUgb2YgTm9kZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNzA1NgorCisgICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWlu
IFBvdWxhaW4uCisKKyAgICAgICAgVXNlIGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCkgLyBk
b3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigpCisgICAgICAgIGluc3RlYWQgb2YgaXNG
b3JtQ29udHJvbEVsZW1lbnQoKSAvIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudCgpLgorCisgICAg
ICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OmVsZW1lbnRXaXRoTmFtZSk6
CisKIDIwMTQtMDktMjQgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIxNzM5MzIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
CmluZGV4IDM0YjUzMmY3N2FjOTgxY2U2Y2I5NzIxZWE2ZGEyOTQ1YjYxZjJmNjguLjI2MmZiOTc1
ZDJiNjk3YTdjMDZmMTYyZGFhYTAyNmZkMzhhODQ2Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCkBAIC03
MzksNyArNzM5LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNSZWFkT25seSgp
IGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKGlzPEhUTUxUZXh0QXJlYUVs
ZW1lbnQ+KG5vZGUpKQotICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG5v
ZGUpLT5pc1JlYWRPbmx5KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MVGV4dEFyZWFF
bGVtZW50Pihub2RlKS0+aXNSZWFkT25seSgpOwogCiAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KG5vZGUpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOwpAQCAtNzYwLDggKzc2MCw4IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmlzUmVxdWlyZWQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBOb2RlKiBuID0gdGhpcy0+bm9kZSgpOwotICAgIGlmIChuICYmIChuLT5pc0Vs
ZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG4pLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKLSAg
ICAgICAgcmV0dXJuIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChuKS0+aXNSZXF1aXJlZCgpOwor
ICAgIGlmIChuICYmIGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG4pKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obiktPmlzUmVxdWlyZWQoKTsKIAog
ICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTg5OCw4ICs4OTgsNyBAQCBib29sIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojppc0NvbnRyb2woKSBjb25zdAogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuICgobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRv
RWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgfHwgQWNjZXNz
aWJpbGl0eU9iamVjdDo6aXNBUklBQ29udHJvbChhcmlhUm9sZUF0dHJpYnV0ZSgpKSk7CisgICAg
cmV0dXJuIGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5vZGUpIHx8IEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmlzQVJJQUNvbnRyb2woYXJpYVJvbGVBdHRyaWJ1dGUoKSk7CiB9CiAKIGJvb2wgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzRmllbGRzZXQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgKaW5kZXggNTQ2ZWNhZWQ3
Zjk4N2FmMjllMWZkYWI4MmVmY2VlMmUyODMzNjVmOS4uMGNlMjExNTFjMGM3MDcwZjA2MWZmYmVh
OTMyZjBmMGUwNzkxYTgyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlclRlc3RGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyVGVzdEZ1bmN0aW9ucy5oCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogQUxXQVlTX0lOTElORSBib29sIGlzQXV0b2ZpbGxlZChjb25zdCBFbGVtZW50KiBlbGVt
ZW50KQogewotICAgIGlmIChlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7CisgICAg
aWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChj
b25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxl
bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCk7
CiAgICAgfQpAQCAtNTgsNyArNTgsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNEZWZhdWx0QnV0
dG9uRm9yRm9ybShjb25zdCBFbGVtZW50KiBlbGVtZW50KQogCiBBTFdBWVNfSU5MSU5FIGJvb2wg
aXNEaXNhYmxlZChjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmIChlbGVtZW50LT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpIHx8IGlzPEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSB8
fCBpczxIVE1MT3B0R3JvdXBFbGVtZW50PihlbGVtZW50KSkKKyAgICBpZiAoaXM8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQp
IHx8IGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZWxl
bWVudC0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAt
NjYsNyArNjYsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNEaXNhYmxlZChjb25zdCBFbGVtZW50
KiBlbGVtZW50KQogQUxXQVlTX0lOTElORSBib29sIGlzRW5hYmxlZChjb25zdCBFbGVtZW50KiBl
bGVtZW50KQogewogICAgIGJvb2wgaXNFbmFibGVkID0gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkgfHwgaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KGVsZW1lbnQp
IHx8IGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KGVsZW1lbnQpKQorICAgIGlmIChpczxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSB8fCBpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVu
dCkgfHwgaXM8SFRNTE9wdEdyb3VwRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIGlzRW5hYmxl
ZCA9ICFlbGVtZW50LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKTsKICAgICBlbHNlIGlmIChlbGVt
ZW50LT5pc0xpbmsoKSkKICAgICAgICAgaXNFbmFibGVkID0gaXM8SFRNTEFuY2hvckVsZW1lbnQ+
KGVsZW1lbnQpIHx8IGlzPEhUTUxBcmVhRWxlbWVudD4oZWxlbWVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMDY4NzMyYzcyOTNlYjQ3MmM2MGIwZmQ3YmMzOTRlYWVk
OTE3NDkzMy4uOTA3NjZiYjdjMWVkNWU0NGRhNTU0NzExNmQyNTlmNDFjMzg3ODdjNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNjI2LDkgKzYyNiw5IEBAIGJvb2wgU3R5
bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJl
cygpLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5p
bXBsKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGlzQ29udHJvbCA9IGVs
ZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisgICAgYm9vbCBpc0NvbnRyb2wgPSBpczxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KTsKIAotICAgIGlmIChpc0NvbnRyb2wgIT0g
c3RhdGUuZWxlbWVudCgpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgIGlmIChpc0NvbnRy
b2wgIT0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oc3RhdGUuZWxlbWVudCgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdp
dGhDb250cm9sKGVsZW1lbnQpKQpAQCAtMTMzNSw3ICsxMzM1LDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlJiBwYXIKIAogICAgIC8vIEltcG9ydGFudDogSW50cmluc2ljIG1hcmdpbnMgZ2V0IGFkZGVk
IHRvIGNvbnRyb2xzIGJlZm9yZSB0aGUgdGhlbWUgaGFzIGFkanVzdGVkIHRoZSBzdHlsZSwgc2lu
Y2UgdGhlIHRoZW1lIHdpbGwKICAgICAvLyBhbHRlciBmb250cyBhbmQgaGVpZ2h0cy93aWR0aHMu
Ci0gICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSAmJiBzdHlsZS5mb250U2l6
ZSgpID49IDExKSB7CisgICAgaWYgKGUgJiYgaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZSkg
JiYgc3R5bGUuZm9udFNpemUoKSA+PSAxMSkgewogICAgICAgICAvLyBEb24ndCBhcHBseSBpbnRy
aW5zaWMgbWFyZ2lucyB0byBpbWFnZSBidXR0b25zLiBUaGUgZGVzaWduZXIga25vd3MgaG93IGJp
ZyB0aGUgaW1hZ2VzIGFyZSwKICAgICAgICAgLy8gc28gd2UgaGF2ZSB0byB0cmVhdCBhbGwgaW1h
Z2UgYnV0dG9ucyBhcyB0aG91Z2ggdGhleSB3ZXJlIGV4cGxpY2l0bHkgc2l6ZWQuCiAgICAgICAg
IGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oZSkgfHwgIWRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCplKS5pc0ltYWdlQnV0dG9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBhM2Nm
NTI5ZTljNDNkNmRiNDgzNmE3YmFiZjNiMzk1NmUwNjExMDFkLi4wNzBkMGU3YjZmNTc2ODEzNjVk
NDNkYzRiZmRlNDFlYjM0NTI2ZDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTk3Myw3
ICs5NzMsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IERvY3VtZW50OjppbXBvcnROb2RlKE5vZGUqIGlt
cG9ydGVkTm9kZSwgYm9vbCBkZWVwLCBFeGNlcHRpb25DbwogICAgICAgICAgICAgLy8gRWl0aGVy
IHRoZXkgYXJlIGltcG9ydGVkIGFsb25nIHdpdGggdGhlaXIgaG9zdCBub2RlLCBvciBjcmVhdGVk
IGltcGxpY2l0bHkuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBEb2N1
bWVudEZyYWdtZW50JiBvbGRGcmFnbWVudCA9IHRvRG9jdW1lbnRGcmFnbWVudCgqaW1wb3J0ZWRO
b2RlKTsKKyAgICAgICAgRG9jdW1lbnRGcmFnbWVudCYgb2xkRnJhZ21lbnQgPSBkb3duY2FzdDxE
b2N1bWVudEZyYWdtZW50PigqaW1wb3J0ZWROb2RlKTsKICAgICAgICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IG5ld0ZyYWdtZW50ID0gY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgICAg
ICBpZiAoZGVlcCkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBvbGRDaGlsZCA9IG9sZEZyYWdt
ZW50LmZpcnN0Q2hpbGQoKTsgb2xkQ2hpbGQ7IG9sZENoaWxkID0gb2xkQ2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKQEAgLTM0MTAsMTAgKzM0MTAsMTAgQEAgYm9vbCBEb2N1bWVudDo6c2V0Rm9jdXNl
ZEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBwcnBOZXdGb2N1c2VkRWxlbWVudCwgRm9jdXMK
ICAgICAgICAgb2xkRm9jdXNlZEVsZW1lbnQtPnNldEZvY3VzKGZhbHNlKTsKIAogICAgICAgICAv
LyBEaXNwYXRjaCBhIGNoYW5nZSBldmVudCBmb3IgZm9ybSBjb250cm9sIGVsZW1lbnRzIHRoYXQg
aGF2ZSBiZWVuIGVkaXRlZC4KLSAgICAgICAgaWYgKG9sZEZvY3VzZWRFbGVtZW50LT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBm
b3JtQ29udHJvbEVsZW1lbnQgPSB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQob2xkRm9jdXNlZEVs
ZW1lbnQuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sRWxlbWVudC0+d2FzQ2hh
bmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKSkKLSAgICAgICAgICAgICAgICBm
b3JtQ29udHJvbEVsZW1lbnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOworICAg
ICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm9sZEZvY3VzZWRFbGVtZW50KSkg
eworICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgZm9ybUNvbnRyb2xFbGVtZW50
ID0gZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm9sZEZvY3VzZWRFbGVtZW50KTsK
KyAgICAgICAgICAgIGlmIChmb3JtQ29udHJvbEVsZW1lbnQud2FzQ2hhbmdlZFNpbmNlTGFzdEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQoKSkKKyAgICAgICAgICAgICAgICBmb3JtQ29udHJvbEVsZW1l
bnQuZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBEaXNwYXRjaCB0aGUgYmx1ciBldmVudCBhbmQgbGV0IHRoZSBub2RlIGRvIGFueSBvdGhl
ciBibHVyIHJlbGF0ZWQgYWN0aXZpdGllcyAoaW1wb3J0YW50IGZvciB0ZXh0IGZpZWxkcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRGcmFnbWVudC5oCmluZGV4IDhlYjkzODdhZDRlYmNjOGNkMGVh
YTJjYmU4NzJhYzYxZWQ5YTE4OTMuLmFjN2Q2ZjY1YmY0NWJiZTQ5ZTEwYzI4ODljZTQyMTQxZDhk
ZWExOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuaApAQCAtNTIsMTAgKzUy
LDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCi1pbmxpbmUgYm9vbCBpc0RvY3VtZW50RnJhZ21lbnQo
Y29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50RnJhZ21lbnQoKTsgfQot
dm9pZCBpc0RvY3VtZW50RnJhZ21lbnQoY29uc3QgRG9jdW1lbnRGcmFnbWVudCYpOyAvLyBDYXRj
aCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1l
LgotCi1OT0RFX1RZUEVfQ0FTVFMoRG9jdW1lbnRGcmFnbWVudCkKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oRG9jdW1lbnRGcmFnbWVudCkKKyAgICBzdGF0aWMgYm9vbCBpc0RvY3VtZW50
RnJhZ21lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0RvY3VtZW50RnJhZ21l
bnQoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiB9IC8vbmFtZXNwYWNlCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA3MjQyZTViM2M0ZTRhMmVmMTYxZDFiZTc4ODdlMTVk
Y2I5YzNlYmZiLi42YTlmODcwOThlNmQ0NzA1ZTY1YmQxNDg0NGMyZDRhYjM1ZTNiMDFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xOTI4LDcgKzE5MjgsNyBAQCB2b2lkIEVsZW1lbnQ6OmZv
Y3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24pCiAgICAgLy8gQ2FsbGluZyB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoKSB3b3VsZCBnZW5lcmF0
ZSBhbiB1bm5lY2Vzc2FyeSBjYWxsIHRvIFNjcm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKCks
CiAgICAgLy8gd2hpY2ggd291bGQganVtcCB1cyBhcm91bmQgZHVyaW5nIHRoaXMgYW5pbWF0aW9u
LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzY2OTk3NDE+LgogICAgIEZyYW1lVmlldyogdmlldyA9IGRv
Y3VtZW50KCkudmlldygpOwotICAgIGJvb2wgaXNGb3JtQ29udHJvbCA9IHZpZXcgJiYgaXNGb3Jt
Q29udHJvbEVsZW1lbnQoKTsKKyAgICBib29sIGlzRm9ybUNvbnRyb2wgPSB2aWV3ICYmIGlzPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KCp0aGlzKTsKICAgICBpZiAoaXNGb3JtQ29udHJvbCkKICAg
ICAgICAgdmlldy0+c2V0UHJvaGliaXRzU2Nyb2xsaW5nKHRydWUpOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAppbmRleCAxNmVkNjMyMmM3NWMwOGVjNmE3YzEwYjMzYjU4ZjU0ZTQ2N2Q4ODk4Li4y
ODkyYmRmYThhYTUwZTBkN2M5NjgzNmIxNzYyM2I3MmJmNzgwNDVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKQEAgLTY3MCw1MiArNjcwLDExIEBAIGlubGluZSBib29sIGlzRWxlbWVudChjb25zdCBOb2Rl
JiBub2RlKSB7IHJldHVybiBub2RlLmlzRWxlbWVudE5vZGUoKTsgfQogCiBOT0RFX1RZUEVfQ0FT
VFMoRWxlbWVudCkKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEV4cGVjdGVkVHlwZSwgdHlwZW5hbWUg
QXJnVHlwZT4KLXN0cnVjdCBFbGVtZW50VHlwZUNhc3RUcmFpdHMgewotICAgIHN0YXRpYyBib29s
IGlzKEFyZ1R5cGUmKTsKLX07Ci0KLS8vIFR5cGUgY2hlY2tpbmcgZnVuY3Rpb24gZm9yIEVsZW1l
bnRzLCB0byB1c2UgYmVmb3JlIGNhc3Rpbmcgd2l0aCBkb3duY2FzdDw+KCkuCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBlbmFtZSBBcmdUeXBlPgotaW5saW5lIGJvb2wgaXMo
QXJnVHlwZSYgbm9kZSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8RXhw
ZWN0ZWRUeXBlLCBBcmdUeXBlPjo6dmFsdWUsICJVbm5lY2Vzc2FyeSB0eXBlIGNoZWNrIik7Ci0g
ICAgcmV0dXJuIEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBFeHBlY3RlZFR5cGUsIGNvbnN0
IEFyZ1R5cGU+Ojppcyhub2RlKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEV4cGVjdGVkVHlw
ZSwgdHlwZW5hbWUgQXJnVHlwZT4KLWlubGluZSBib29sIGlzKEFyZ1R5cGUqIG5vZGUpCi17Ci0g
ICAgQVNTRVJUKG5vZGUpOwotICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxFeHBl
Y3RlZFR5cGUsIEFyZ1R5cGU+Ojp2YWx1ZSwgIlVubmVjZXNzYXJ5IHR5cGUgY2hlY2siKTsKLSAg
ICByZXR1cm4gRWxlbWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0IEV4cGVjdGVkVHlwZSwgY29uc3Qg
QXJnVHlwZT46OmlzKCpub2RlKTsKLX0KLQogdGVtcGxhdGUgPD4KLXN0cnVjdCBFbGVtZW50VHlw
ZUNhc3RUcmFpdHM8Y29uc3QgRWxlbWVudCwgY29uc3QgTm9kZT4geworc3RydWN0IE5vZGVUeXBl
Q2FzdFRyYWl0czxjb25zdCBFbGVtZW50LCBjb25zdCBOb2RlPiB7CiAgICAgc3RhdGljIGJvb2wg
aXMoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc0VsZW1lbnROb2RlKCk7IH0KIH07
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBFeHBlY3RlZFR5cGU+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVD
YXN0VHJhaXRzPEV4cGVjdGVkVHlwZSwgRXhwZWN0ZWRUeXBlPiB7Ci0gICAgc3RhdGljIGJvb2wg
aXMoRXhwZWN0ZWRUeXBlJikgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotLy8gRG93bmNhc3Rpbmcg
ZnVuY3Rpb25zIGZvciBFbGVtZW50IHR5cGVzLgotdGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0LCB0
eXBlbmFtZSBTb3VyY2U+Ci1pbmxpbmUgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxzdGQ6Omlz
X2NvbnN0PFNvdXJjZT46OnZhbHVlLCBjb25zdCBUYXJnZXQmLCBUYXJnZXQmPjo6dHlwZSBkb3du
Y2FzdChTb3VyY2UmIHNvdXJjZSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vf
b2Y8VGFyZ2V0LCBTb3VyY2U+Ojp2YWx1ZSwgIlVubmVjZXNzYXJ5IGNhc3QiKTsKLSAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxUYXJnZXQ+KHNvdXJjZSkpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfY29uc3Q8
U291cmNlPjo6dmFsdWUsIGNvbnN0IFRhcmdldCYsIFRhcmdldCY+Ojp0eXBlPihzb3VyY2UpOwot
fQotdGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IGlubGluZSB0eXBl
bmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfY29uc3Q8U291cmNlPjo6dmFsdWUsIGNvbnN0
IFRhcmdldCosIFRhcmdldCo+Ojp0eXBlIGRvd25jYXN0KFNvdXJjZSogc291cmNlKQotewotICAg
IHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxUYXJnZXQsIFNvdXJjZT46OnZhbHVlLCAi
VW5uZWNlc3NhcnkgY2FzdCIpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCFzb3VyY2UgfHwgaXM8VGFyZ2V0Pigqc291cmNlKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19jb25zdDxTb3VyY2U+Ojp2YWx1ZSwg
Y29uc3QgVGFyZ2V0KiwgVGFyZ2V0Kj46OnR5cGU+KHNvdXJjZSk7Ci19Ci0KIGlubGluZSBib29s
IE5vZGU6Omhhc0F0dHJpYnV0ZXMoKSBjb25zdAogewogICAgIHJldHVybiBpc0VsZW1lbnROb2Rl
KCkgJiYgdG9FbGVtZW50KHRoaXMpLT5oYXNBdHRyaWJ1dGVzKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBm
NDY5ZmU1ZTBkODgyYjVmMTc5NWU5NGNkMmFjMjE5MjM2NmFkMzdhLi5jODgxNzI1MjY1OTI5ZmFh
YzUwZGU0ZThjMzc1N2EwM2MxZjJiYzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTczOSw2ICs3MzksNTkg
QEAgaW5saW5lIENvbnRhaW5lck5vZGUqIE5vZGU6OnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZy
ZWUoKSBjb25zdAogICAgIHJldHVybiBwYXJlbnROb2RlKCk7CiB9CiAKK3RlbXBsYXRlIDx0eXBl
bmFtZSBFeHBlY3RlZFR5cGUsIHR5cGVuYW1lIEFyZ1R5cGU+CitzdHJ1Y3QgTm9kZVR5cGVDYXN0
VHJhaXRzIHsKKyAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJik7Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgRXhwZWN0ZWRUeXBlPgorc3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxFeHBlY3Rl
ZFR5cGUsIEV4cGVjdGVkVHlwZT4geworICAgIHN0YXRpYyBib29sIGlzKEV4cGVjdGVkVHlwZSYp
IHsgcmV0dXJuIHRydWU7IH0KK307CisKKy8vIFR5cGUgY2hlY2tpbmcgZnVuY3Rpb24gZm9yIE5v
ZGVzLCB0byB1c2UgYmVmb3JlIGNhc3Rpbmcgd2l0aCBkb3duY2FzdDw+KCkuCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBlbmFtZSBBcmdUeXBlPgoraW5saW5lIGJvb2wgaXMo
QXJnVHlwZSYgbm9kZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8RXhw
ZWN0ZWRUeXBlLCBBcmdUeXBlPjo6dmFsdWUsICJVbm5lY2Vzc2FyeSB0eXBlIGNoZWNrIik7Cisg
ICAgcmV0dXJuIE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBFeHBlY3RlZFR5cGUsIGNvbnN0IEFy
Z1R5cGU+Ojppcyhub2RlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEV4cGVjdGVkVHlwZSwg
dHlwZW5hbWUgQXJnVHlwZT4KK2lubGluZSBib29sIGlzKEFyZ1R5cGUqIG5vZGUpCit7CisgICAg
QVNTRVJUKG5vZGUpOworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxFeHBlY3Rl
ZFR5cGUsIEFyZ1R5cGU+Ojp2YWx1ZSwgIlVubmVjZXNzYXJ5IHR5cGUgY2hlY2siKTsKKyAgICBy
ZXR1cm4gTm9kZVR5cGVDYXN0VHJhaXRzPGNvbnN0IEV4cGVjdGVkVHlwZSwgY29uc3QgQXJnVHlw
ZT46OmlzKCpub2RlKTsKK30KKworLy8gRG93bmNhc3RpbmcgZnVuY3Rpb25zIGZvciBOb2RlIHR5
cGVzLgordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+CitpbmxpbmUg
dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxzdGQ6OmlzX2NvbnN0PFNvdXJjZT46OnZhbHVlLCBj
b25zdCBUYXJnZXQmLCBUYXJnZXQmPjo6dHlwZSBkb3duY2FzdChTb3VyY2UmIHNvdXJjZSkKK3sK
KyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8VGFyZ2V0LCBTb3VyY2U+Ojp2YWx1
ZSwgIlVubmVjZXNzYXJ5IGNhc3QiKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihpczxUYXJnZXQ+KHNvdXJjZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFt
ZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfY29uc3Q8U291cmNlPjo6dmFsdWUsIGNvbnN0IFRh
cmdldCYsIFRhcmdldCY+Ojp0eXBlPihzb3VyY2UpOworfQordGVtcGxhdGU8dHlwZW5hbWUgVGFy
Z2V0LCB0eXBlbmFtZSBTb3VyY2U+IGlubGluZSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHN0
ZDo6aXNfY29uc3Q8U291cmNlPjo6dmFsdWUsIGNvbnN0IFRhcmdldCosIFRhcmdldCo+Ojp0eXBl
IGRvd25jYXN0KFNvdXJjZSogc291cmNlKQoreworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNf
YmFzZV9vZjxUYXJnZXQsIFNvdXJjZT46OnZhbHVlLCAiVW5uZWNlc3NhcnkgY2FzdCIpOworICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFzb3VyY2UgfHwgaXM8VGFyZ2V0Pigq
c291cmNlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u
YWw8c3RkOjppc19jb25zdDxTb3VyY2U+Ojp2YWx1ZSwgY29uc3QgVGFyZ2V0KiwgVGFyZ2V0Kj46
OnR5cGU+KHNvdXJjZSk7Cit9CisKKy8vIEFkZCBzdXBwb3J0IGZvciB0eXBlIGNoZWNraW5nIC8g
Y2FzdGluZyB1c2luZyBpczw+KCkgLyBkb3duY2FzdDw+KCkgaGVscGVycyBmb3IgYSBzcGVjaWZp
YyBjbGFzcy4KKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihDbGFzc05hbWUp
IFwKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4gXAorICAgIGNsYXNzIE5vZGVUeXBl
Q2FzdFRyYWl0czxjb25zdCBDbGFzc05hbWUsIEFyZ1R5cGU+IHsgXAorICAgIHB1YmxpYzogXAor
ICAgICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2RlKSB7IHJldHVybiBpcyMjQ2xhc3NO
YW1lKG5vZGUpOyB9IFwKKyAgICBwcml2YXRlOgorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRU5EKCkgXAorICAgIH07CisKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZW1vdmVk
IGFuZCBhbGwgdXNlcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTXyooKS4KICNkZWZpbmUgTk9ERV9UWVBFX0NBU1RTKFRvQ2xhc3NOYW1lKSBcCiAgICAgVFlQ
RV9DQVNUU19CQVNFKFRvQ2xhc3NOYW1lLCBOb2RlLCBub2RlLCBXZWJDb3JlOjppcyMjVG9DbGFz
c05hbWUoKm5vZGUpLCBXZWJDb3JlOjppcyMjVG9DbGFzc05hbWUobm9kZSkpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsIGIvU291cmNlL1dlYkNvcmUvZG9t
L21ha2VfbmFtZXMucGwKaW5kZXggMThhNzFmODE2MTA2NzQ2YjMyMjg3NzQ0MTJhY2VjNDcwMzVk
Y2ZiMC4uYWU5ZGMzYmIxZTcxNjgyMWI3MWM4ZDJjNjNmNzgwMmJhYjMwNWEzMCAxMDA3NTUKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL21ha2VfbmFtZXMucGwKQEAgLTYzNiw3ICs2MzYsNyBAQCBzdWIgcHJpbnRUeXBlSGVscGVy
cwogICAgICAgICBwcmludCBGIDw8RU5ECiBjbGFzcyAkY2xhc3M7CiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQXJnVHlwZT4KLWNsYXNzIEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCAkY2xhc3MsIEFy
Z1R5cGU+IHsKK2NsYXNzIE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCAkY2xhc3MsIEFyZ1R5cGU+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2RlKSB7IHJldHVybiBj
aGVja1RhZ05hbWUobm9kZSk7IH0KIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCmluZGV4IGI3NjI5Y2YxNzRlYWU1ZjEzY2RiMjIxOWM3ZTc4OWI4OGE5
YmQyMzcuLjVlZjQ4NTZlMWRlODZmZWRjMjkwMDNkMWNiNjQxOTkwYjdiZjQ1Y2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yMDI1LDggKzIwMjUsOCBA
QCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShFbGVtZW50KiBzdGFydCkKICAg
ICAgICAgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSAqaXQ7CiAgICAgICAgIGlmIChpc0hUTUxGb3Jt
RWxlbWVudCgmZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1F
bGVtZW50PigmZWxlbWVudCk7Ci0gICAgICAgIGlmIChpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQo
ZWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KGVs
ZW1lbnQpLmZvcm0oKTsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVs
ZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KGVsZW1lbnQpLmZvcm0oKTsKICAgICAgICAgaWYgKGlzSFRNTEZyYW1lRWxlbWVudEJhc2Uo
ZWxlbWVudCkpIHsKICAgICAgICAgICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSB0b0hU
TUxGcmFtZUVsZW1lbnRCYXNlKGVsZW1lbnQpLmNvbnRlbnREb2N1bWVudCgpOwogICAgICAgICAg
ICAgaWYgKCFjb250ZW50RG9jdW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKaW5kZXggZDhjMjUxM2FhYjVjNmY4NjEzMWIwODM2NWIzOGJjZDI2MjMwMzk0ZC4uMTEx
NzdhZWFkNTAyMjc3MTk2MGU4YTNmYjRlOWYzYzcyNjk2NjY4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjU2LDcgKzI1Niw3IEBAIGJvb2wgaXNSZW5kZXJl
clJlcGxhY2VkRWxlbWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiAgICAgaWYgKHJlbmRl
cmVyLT5ub2RlKCkgJiYgcmVuZGVyZXItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAg
ICAgIEVsZW1lbnQmIGVsZW1lbnQgPSB0b0VsZW1lbnQoKnJlbmRlcmVyLT5ub2RlKCkpOwotICAg
ICAgICBpZiAoZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpIHx8IGVsZW1lbnQuaGFzVGFn
TmFtZShsZWdlbmRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShtZXRlclRhZykgfHwgZWxlbWVu
dC5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+KGVsZW1lbnQpIHx8IGlzPEhUTUxMZWdlbmRFbGVtZW50PihlbGVtZW50KSB8fCBp
czxIVE1MTWV0ZXJFbGVtZW50PihlbGVtZW50KSB8fCBpczxIVE1MUHJvZ3Jlc3NFbGVtZW50Pihl
bGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKSwgImltZyIpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuaAppbmRleCBlYzk0MjQwNjRkNjliODVkZWE1ZmFjMTU1YjM0ZWM0NmUyMTBjODEz
Li5hODUxMmEwMjBkNmI1MDE2OTdkMzJmYjg3NjQ3ZDk3MzQ4ZDFjNDk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgKQEAgLTExOCw5ICsxMTgsNiBAQCBw
cml2YXRlOgogICAgIFN0cmluZyBtX2N1c3RvbVZhbGlkYXRpb25NZXNzYWdlOwogfTsKIAotI2Rl
ZmluZSBGT1JNX0FTU09DSUFURURfRUxFTUVOVF9UWVBFX0NBU1RTKFRvQ2xhc3NOYW1lLCBwcmVk
aWNhdGUpIFwKLSAgICBUWVBFX0NBU1RTX0JBU0UoVG9DbGFzc05hbWUsIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCwgZWxlbWVudCwgZWxlbWVudC0+cHJlZGljYXRlLCBlbGVtZW50LnByZWRpY2F0ZSkK
LQogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmIC8vIEZvcm1Bc3NvY2lhdGVkRWxlbWVudF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmgKaW5kZXggNjczNGJlMWExNzYyM2JiNTU2ZTY4MTc3Zjg1
NDU5MzFiMmY5M2FmOS4uNmY4MjNhMGU2ZDJiYWU4MGZkMDgzMjAxMWM2MzIzMzY1MzczOTg5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaApAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgaXNI
VE1MRWxlbWVudChjb25zdCBIVE1MRWxlbWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50
aW1lIGNoZWNrIG9mIHR5CiBpbmxpbmUgYm9vbCBpc0hUTUxFbGVtZW50KGNvbnN0IE5vZGUmIG5v
ZGUpIHsgcmV0dXJuIG5vZGUuaXNIVE1MRWxlbWVudCgpOyB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBBcmdUeXBlPgotc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBIVE1MRWxlbWVu
dCwgQXJnVHlwZT4geworc3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBIVE1MRWxlbWVu
dCwgQXJnVHlwZT4gewogICAgIHN0YXRpYyBib29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0dXJu
IGlzSFRNTEVsZW1lbnQobm9kZSk7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
aWVsZFNldEVsZW1lbnQuY3BwCmluZGV4IDA0NjE5YjU4NzhjMzVjMDFhOGRiNDhiYmExN2YyNWE3
ZjJkYjNiOWYuLjVmZDJkNGNmNzAzMmRjZDkwOThiODlkOTc2ODk0OGNhMmQ5ZjUwN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcApAQCAtNTgsOCArNTgs
OCBAQCBQYXNzUmVmUHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+IEhUTUxGaWVsZFNldEVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJgogc3RhdGljIHZvaWQgdXBkYXRlRnJvbUNvbnRy
b2xFbGVtZW50c0FuY2VzdG9yRGlzYWJsZWRTdGF0ZVVuZGVyKEhUTUxFbGVtZW50JiBzdGFydE5v
ZGUsIGJvb2wgaXNEaXNhYmxlZCkKIHsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250
cm9sOwotICAgIGlmIChpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoc3RhcnROb2RlKSkKLSAgICAg
ICAgY29udHJvbCA9ICZ0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQoc3RhcnROb2RlKTsKKyAgICBp
ZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oc3RhcnROb2RlKSkKKyAgICAgICAgY29udHJv
bCA9ICZkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihzdGFydE5vZGUpOwogICAgIGVs
c2UKICAgICAgICAgY29udHJvbCA9IFRyYXZlcnNhbDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pjo6
Zmlyc3RXaXRoaW4oJnN0YXJ0Tm9kZSk7CiAgICAgd2hpbGUgKGNvbnRyb2wpIHsKQEAgLTE2Nyw4
ICsxNjcsOCBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50c0lmTmVl
ZGVkKCkgY29uc3QKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxF
bGVtZW50Pihjb25zdF9jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQmPigqdGhpcykpKSB7CiAgICAg
ICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKICAgICAgICAgICAgIG1fYXNz
b2NpYXRlZEVsZW1lbnRzLmFwcGVuZCgmZG93bmNhc3Q8SFRNTE9iamVjdEVsZW1lbnQ+KGVsZW1l
bnQpKTsKLSAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQot
ICAgICAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKCZ0b0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQoZWxlbWVudCkpOworICAgICAgICBlbHNlIGlmIChpczxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmFwcGVu
ZCgmZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5k
ZXggYmNhZDI3NjZlZGU1MGMwYTZkOGQwYTAyMmViZTg5Y2ExODdmMDM2OS4uOGM3YWYxNjNhMGQy
ZjdhYmY5MWNiMTQ5YTg3NjZlYmVmNGY2YWUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC01MDgsMTAgKzUwOCwxMCBAQCB2b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEF1dG9jYXBpdGFsaXplKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjplbmNsb3NpbmdGb3JtQ29udHJvbEVsZW1lbnQoTm9kZSogbm9kZSkKIHsKICAgICBmb3IgKDsg
bm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+aXNF
bGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiB0b0hUTUxGb3JtQ29udHJvbEVsZW1lbnQobm9kZSk7CisgICAg
ICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKTsKICAgICB9Ci0gICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYmNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKaW5kZXgg
ZDU2Y2ZhYTQxYmZhMmVmMzk1MjBlODVhNzg4MDA4NGRhMWYyMGM3Zi4uZDkyMDgzYTA2NzZhNWE4
ZWU5NWQ3NmYwMTdkNDUyZDUwOGQ0ZTQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmgKQEAgLTE5MCwxOCArMTkwLDExIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2hhc0F1dG9mb2N1c2VkIDogMTsKIH07CiAKLXZvaWQgaXNIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KGNvbnN0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmKTsgLy8gQ2F0Y2ggdW5uZWNlc3Nh
cnkgcnVudGltZSBjaGVjayBvZiB0eXBlIGtub3duIGF0IGNvbXBpbGUgdGltZS4KLWlubGluZSBi
b29sIGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7IHJl
dHVybiBlbGVtZW50LmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7IH0KLWlubGluZSBib29sIGlzSFRN
TEZvcm1Db250cm9sRWxlbWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2RlLmlzRWxl
bWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSkuaXNGb3JtQ29udHJvbEVsZW1lbnQoKTsgfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4KLXN0cnVjdCBFbGVtZW50VHlwZUNhc3RUcmFp
dHM8Y29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudCwgQXJnVHlwZT4gewotICAgIHN0YXRpYyBi
b29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0dXJuIGlzSFRNTEZvcm1Db250cm9sRWxlbWVudChu
b2RlKTsgfQotfTsKLQotTk9ERV9UWVBFX0NBU1RTKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQpCi0K
LUZPUk1fQVNTT0NJQVRFRF9FTEVNRU5UX1RZUEVfQ0FTVFMoSFRNTEZvcm1Db250cm9sRWxlbWVu
dCwgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
SFRNTEZvcm1Db250cm9sRWxlbWVudCkKKyAgICBzdGF0aWMgYm9vbCBpc0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudC5pc0Zvcm1D
b250cm9sRWxlbWVudCgpOyB9CisgICAgc3RhdGljIGJvb2wgaXNIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50Tm9kZSgpICYmIHRv
RWxlbWVudChub2RlKS5pc0Zvcm1Db250cm9sRWxlbWVudCgpOyB9CisgICAgc3RhdGljIGJvb2wg
aXNIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IEZvcm1Bc3NvY2lhdGVkRWxlbWVudCYgZWxl
bWVudCkgeyByZXR1cm4gZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpOyB9CitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKIH0gLy8gbmFtZXNwYWNlCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBlMzljODRmMDg4NmM0Mzg1MzM3NTViZTM0NmJj
ZmFjN2RiZTY5Y2QyLi5kY2QyYTg4NmE5NWI5MDQzMDMzYTUzODU4ZTk2NWM0NDVkNDk0NDllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0xODIsMTUgKzE4Miwx
NSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0SW1wbGljaXRseShFdmVudCogZXZlbnQs
IGJvb2wgZnJvbUltcGxpY2l0U3VibWlzc2lvbgogICAgIHVuc2lnbmVkIHN1Ym1pc3Npb25Ucmln
Z2VyQ291bnQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRF
bGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGZv
cm1Bc3NvY2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwotICAgICAgICBp
ZiAoIWZvcm1Bc3NvY2lhdGVkRWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAg
ICAgaWYgKCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihmb3JtQXNzb2NpYXRlZEVsZW1lbnQp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
IGZvcm1FbGVtZW50ID0gdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KGZvcm1Bc3NvY2lhdGVkRWxl
bWVudCk7Ci0gICAgICAgIGlmIChmb3JtRWxlbWVudC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9u
KCkpIHsKLSAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudC0+cmVuZGVyZXIoKSkgewotICAgICAg
ICAgICAgICAgIGZvcm1FbGVtZW50LT5kaXNwYXRjaFNpbXVsYXRlZENsaWNrKGV2ZW50KTsKKyAg
ICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCYgZm9ybUVsZW1lbnQgPSBkb3duY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PigqZm9ybUFzc29jaWF0ZWRFbGVtZW50KTsKKyAgICAgICAgaWYg
KGZvcm1FbGVtZW50LmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKSB7CisgICAgICAgICAgICBp
ZiAoZm9ybUVsZW1lbnQucmVuZGVyZXIoKSkgeworICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50
LmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZlbnQpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChmb3JtRWxlbWVudC0+Y2FuVHJpZ2dl
ckltcGxpY2l0U3VibWlzc2lvbigpKQorICAgICAgICB9IGVsc2UgaWYgKGZvcm1FbGVtZW50LmNh
blRyaWdnZXJJbXBsaWNpdFN1Ym1pc3Npb24oKSkKICAgICAgICAgICAgICsrc3VibWlzc2lvblRy
aWdnZXJDb3VudDsKICAgICB9CiAKQEAgLTIwNiwxMCArMjA2LDEwIEBAIHZvaWQgSFRNTEZvcm1F
bGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCwgYm9vbCBmcm9tSW1wbGljaXRT
dWJtaXNzaW9uCiBzdGF0aWMgaW5saW5lIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIHN1Ym1pdEVs
ZW1lbnRGcm9tRXZlbnQoY29uc3QgRXZlbnQqIGV2ZW50KQogewogICAgIGZvciAoTm9kZSogbm9k
ZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQo
bm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KG5vZGUpOworICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4obm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4obm9kZSk7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxs
cHRyOwogfQogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KEV2
ZW50KiBldmVudCkKQEAgLTIyMyw4ICsyMjMsOCBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFs
aWRhdGVJbnRlcmFjdGl2ZWx5KEV2ZW50KiBldmVudCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG1fYXNz
b2NpYXRlZEVsZW1lbnRzW2ldKS0+aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAg
ICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4obV9hc3NvY2lhdGVkRWxlbWVudHNb
aV0pKQorICAgICAgICAgICAgZG93bmNhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKm1fYXNz
b2NpYXRlZEVsZW1lbnRzW2ldKS5oaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAg
fQogCiAgICAgVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+PiB1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHM7CkBAIC0yNDUsOCArMjQ1LDggQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6
OnZhbGlkYXRlSW50ZXJhY3RpdmVseShFdmVudCogZXZlbnQpCiAgICAgICAgIGlmIChlbGVtZW50
LmluRG9jdW1lbnQoKSAmJiBlbGVtZW50LmlzRm9jdXNhYmxlKCkpIHsKICAgICAgICAgICAgIGVs
ZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7CiAgICAgICAgICAgICBlbGVtZW50
LmZvY3VzKCk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgp
KQotICAgICAgICAgICAgICAgIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50KS51cGRh
dGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICAgICAgICAgIGlmIChpczxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KS51cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3Nh
Z2UoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMzQ1LDE0ICsz
NDUsMTQgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wg
YWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgcHJvY2UKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVu
dHNbaV07Ci0gICAgICAgIGlmICghYXNzb2NpYXRlZEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkpCisgICAgICAgIGlmICghaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oYXNzb2NpYXRl
ZEVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChuZWVkQnV0dG9u
QWN0aXZhdGlvbikgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJv
bCA9IHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChhc3NvY2lhdGVkRWxlbWVudCk7Ci0gICAgICAg
ICAgICBpZiAoY29udHJvbC0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKKyAgICAgICAgICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQmIGNvbnRyb2wgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PigqYXNzb2NpYXRlZEVsZW1lbnQpOworICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNBY3Rp
dmF0ZWRTdWJtaXQoKSkKICAgICAgICAgICAgICAgICBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGZh
bHNlOwotICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID09
IDAgJiYgY29udHJvbC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCi0gICAgICAgICAgICAg
ICAgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID0gY29udHJvbDsKKyAgICAgICAgICAgIGVs
c2UgaWYgKCFmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24gJiYgY29udHJvbC5pc1N1Y2Nlc3Nm
dWxTdWJtaXRCdXR0b24oKSkKKyAgICAgICAgICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRC
dXR0b24gPSAmY29udHJvbDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzg0LDggKzM4NCw4IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAg
ICAgICAgICAgIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChtX2Fzc29jaWF0ZWRFbGVtZW50c1tp
XSktPnJlc2V0KCk7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihtX2Fz
c29jaWF0ZWRFbGVtZW50c1tpXSkpCisgICAgICAgICAgICBkb3duY2FzdDxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLnJlc2V0KCk7CiAgICAgfQogCiAg
ICAgbV9pc0luUmVzZXRGdW5jdGlvbiA9IGZhbHNlOwpAQCAtNTkyLDcgKzU5Miw3IEBAIHVuc2ln
bmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqIGFzc29jaWF0ZWRFbGVtCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZGVzY2VuZGFudHMp
IHsKICAgICAgICAgaWYgKCZlbGVtZW50ID09ICZhc3NvY2lhdGVkSFRNTEVsZW1lbnQpCiAgICAg
ICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgaWYgKCFpc0hUTUxGb3JtQ29udHJvbEVsZW1lbnQo
ZWxlbWVudCkgJiYgIWlzPEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgaWYg
KCFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KSAmJiAhaXM8SFRNTE9iamVjdEVs
ZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChlbGVt
ZW50LmZvcm0oKSAhPSB0aGlzKQogICAgICAgICAgICAgY29udGludWU7CkBAIC02OTYsMTQgKzY5
NiwxNCBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6d2FzVXNlclN1Ym1pdHRlZCgpIGNvbnN0CiBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6OmRlZmF1bHRCdXR0b24oKSBj
b25zdAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIW1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gdG9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKTsKLSAgICAgICAgaWYgKGNvbnRyb2wt
PmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7
CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQmIGNvbnRyb2wgPSBkb3duY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PigqbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pOworICAgICAgICBp
ZiAoY29udHJvbC5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSkKKyAgICAgICAgICAgIHJldHVy
biAmY29udHJvbDsKICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKQpAQCAtNzIzLDkgKzcy
Myw5IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpjaGVja0ludmFsaWRDb250cm9sc0FuZENvbGxl
Y3RVbmhhbmRsZWQoVmVjdG9yPFJlZlB0cjxGb3JtCiAgICAgICAgIGVsZW1lbnRzLmFwcGVuZCht
X2Fzc29jaWF0ZWRFbGVtZW50c1tpXSk7CiAgICAgYm9vbCBoYXNJbnZhbGlkQ29udHJvbHMgPSBm
YWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKGVsZW1lbnRzW2ldLT5mb3JtKCkgPT0gdGhpcyAmJiBlbGVtZW50c1tp
XS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogY29udHJvbCA9IHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50c1tpXS5n
ZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIWNvbnRyb2wtPmNoZWNrVmFsaWRpdHkoJnVuaGFuZGxl
ZEludmFsaWRDb250cm9scykgJiYgY29udHJvbC0+Zm9ybSgpID09IHRoaXMpCisgICAgICAgIGlm
IChlbGVtZW50c1tpXS0+Zm9ybSgpID09IHRoaXMgJiYgaXM8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4oKmVsZW1lbnRzW2ldKSkgeworICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCYg
Y29udHJvbCA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50c1tpXSk7
CisgICAgICAgICAgICBpZiAoIWNvbnRyb2wuY2hlY2tWYWxpZGl0eSgmdW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzKSAmJiBjb250cm9sLmZvcm0oKSA9PSB0aGlzKQogICAgICAgICAgICAgICAgIGhh
c0ludmFsaWRDb250cm9scyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC04MTAsOCArODEw
LDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNo
ZSgpCiAgICAgQVNTRVJUKCFzaG91bGRBdXRvY29tcGxldGUoKSk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQot
ICAgICAgICAgICAgdG9IVE1MRm9ybUNvbnRyb2xFbGVtZW50KG1fYXNzb2NpYXRlZEVsZW1lbnRz
W2ldKS0+cmVzZXQoKTsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG1f
YXNzb2NpYXRlZEVsZW1lbnRzW2ldKSkKKyAgICAgICAgICAgIGRvd25jYXN0PEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KCptX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSkucmVzZXQoKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggZDg2N2Y3NTQ0MDQ1
YWNjMGUyZTI1NTY4YjA4NDU2YzYxYWU5NGI0My4uMjliNzAwM2FmZjM1MWZjYjU4ZjdlYWQwNmQ3
MDU0NjljZjlkZDhhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAg
LTkxNSw3ICs5MTUsNyBAQCBpbmxpbmUgYm9vbCBpc0hUTUxNZWRpYUVsZW1lbnQoY29uc3QgRWxl
bWVudCYgZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudC5pc01lZGlhRQogaW5saW5lIGJvb2wgaXNI
VE1MTWVkaWFFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNFbGVtZW50
Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS5pc01lZGlhRWxlbWVudCgpOyB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBBcmdUeXBlPgotc3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBI
VE1MTWVkaWFFbGVtZW50LCBBcmdUeXBlPiB7CitzdHJ1Y3QgTm9kZVR5cGVDYXN0VHJhaXRzPGNv
bnN0IEhUTUxNZWRpYUVsZW1lbnQsIEFyZ1R5cGU+IHsKICAgICBzdGF0aWMgYm9vbCBpcyhBcmdU
eXBlJiBub2RlKSB7IHJldHVybiBpc0hUTUxNZWRpYUVsZW1lbnQobm9kZSk7IH0KIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKaW5kZXggNzMzNjFh
MDQ5NWMyMGQxYjFlYWQyODJjYzg2NjIxM2UzYWViN2U0Yi4uZDMwMDRmZTQzZWY1NTU5Yzg3YzNh
YmNjYjU2NDA5NjQxYWY4ZmQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmgKQEAgLTE2Miw3ICsxNjIsNyBAQCBpbmxpbmUgYm9vbCBpc0hUTUxQbHVn
SW5JbWFnZUVsZW1lbnQoY29uc3QgSFRNTFBsdWdJbkVsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJu
CiBpbmxpbmUgYm9vbCBpc0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQoY29uc3QgTm9kZSYgbm9kZSkg
eyByZXR1cm4gbm9kZS5pc1BsdWdpbkVsZW1lbnQoKSAmJiB0b0hUTUxQbHVnSW5FbGVtZW50KG5v
ZGUpLmlzUGx1Z0luSW1hZ2VFbGVtZW50KCk7IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEFyZ1R5
cGU+Ci1zdHJ1Y3QgRWxlbWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0IEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQsIEFyZ1R5cGU+IHsKK3N0cnVjdCBOb2RlVHlwZUNhc3RUcmFpdHM8Y29uc3QgSFRNTFBs
dWdJbkltYWdlRWxlbWVudCwgQXJnVHlwZT4gewogICAgIHN0YXRpYyBib29sIGlzKEFyZ1R5cGUm
IG5vZGUpIHsgcmV0dXJuIGlzSFRNTFBsdWdJbkltYWdlRWxlbWVudChub2RlKTsgfQogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3VtbWFyeUVsZW1lbnQuY3BwCmluZGV4IGIxZTRlZWVi
MmM2MDU3ZmYyZjJjZjM0M2M3MWMzNzc5MmM2YTFlODYuLjQ0YjRkZmQ0OTk3YmIyNmRmN2JlMjU0
OTQ3YTdiMTU2NWY2OTc5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN1
bW1hcnlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdW1tYXJ5RWxl
bWVudC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpZiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQog
I2luY2x1ZGUgIkRldGFpbHNNYXJrZXJDb250cm9sLmgiCiAjaW5jbHVkZSAiSFRNTERldGFpbHNF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUg
Ikluc2VydGlvblBvaW50LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKQEAgLTEwNCwxMCArMTA1LDEwIEBAIHN0YXRpYyBib29sIGlzQ2xpY2th
YmxlQ29udHJvbChOb2RlKiBub2RlKQogICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChu
b2RlKTsKLSAgICBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICBpZiAo
aXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIEVsZW1lbnQqIGhvc3QgPSBlbGVtZW50LT5zaGFkb3dIb3N0KCk7Ci0gICAgcmV0dXJu
IGhvc3QgJiYgaG9zdC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICByZXR1cm4gaG9zdCAm
JiBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihob3N0KTsKIH0KIAogYm9vbCBIVE1MU3VtbWFy
eUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJs
ZUVsZW1lbnQuaAppbmRleCBiYmFkNjlkMTQ3ZTc1NmMxYTAxZGYzZTFkNTE4OGZhNDViOWE1NGFh
Li40ODk1NjcyNTM1NGZjZDc3NzA2ZDI5OWMzMDM1MWM3MjQ2ODUxNDNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuaApAQCAtNTUsNyArNTUsNyBAQCBpbmxpbmUgYm9vbCBp
c0xhYmVsYWJsZUVsZW1lbnQoY29uc3QgSFRNTEVsZW1lbnQmIGVsZW1lbnQpIHsgcmV0dXJuIGVs
ZW1lbnQuaXNMYQogaW5saW5lIGJvb2wgaXNMYWJlbGFibGVFbGVtZW50KGNvbnN0IE5vZGUmIG5v
ZGUpIHsgcmV0dXJuIG5vZGUuaXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSku
aXNMYWJlbGFibGUoKTsgfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnVHlwZT4KLXN0cnVjdCBF
bGVtZW50VHlwZUNhc3RUcmFpdHM8Y29uc3QgTGFiZWxhYmxlRWxlbWVudCwgQXJnVHlwZT4gewor
c3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBMYWJlbGFibGVFbGVtZW50LCBBcmdUeXBl
PiB7CiAgICAgc3RhdGljIGJvb2wgaXMoQXJnVHlwZSYgbm9kZSkgeyByZXR1cm4gaXNMYWJlbGFi
bGVFbGVtZW50KG5vZGUpOyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L1JhZGlvTm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNw
cAppbmRleCA3MDJmMjFiNWMxMjExN2JlZDg1N2RmMTQ5OWU3YzQ0YWI5NjAyMjczLi44ZDQ2OTIx
MWQ2ZTExYzk4MWJiYmMzZjg0NTE3ZjBmMjg0OWYwZDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFk
aW9Ob2RlTGlzdC5jcHAKQEAgLTg1LDEzICs4NSwxMyBAQCB2b2lkIFJhZGlvTm9kZUxpc3Q6OnNl
dFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGJvb2wgUmFkaW9Ob2RlTGlzdDo6Y2hlY2tF
bGVtZW50TWF0Y2hlc1JhZGlvTm9kZUxpc3RGaWx0ZXIoY29uc3QgRWxlbWVudCYgdGVzdEVsZW1l
bnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHRlc3RFbGVtZW50Lmhhc1RhZ05hbWUob2JqZWN0VGFn
KSB8fCB0ZXN0RWxlbWVudC5pc0Zvcm1Db250cm9sRWxlbWVudCgpKTsKKyAgICBBU1NFUlQoaXM8
SFRNTE9iamVjdEVsZW1lbnQ+KHRlc3RFbGVtZW50KSB8fCBpczxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Pih0ZXN0RWxlbWVudCkpOwogICAgIGlmIChpc0hUTUxGb3JtRWxlbWVudChvd25lck5vZGUo
KSkpIHsKICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IG51bGxwdHI7CiAg
ICAgICAgIGlmICh0ZXN0RWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykpCiAgICAgICAgICAg
ICBmb3JtRWxlbWVudCA9IGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50Pih0ZXN0RWxlbWVudCku
Zm9ybSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JtRWxlbWVudCA9IHRvSFRNTEZv
cm1Db250cm9sRWxlbWVudCh0ZXN0RWxlbWVudCkuZm9ybSgpOworICAgICAgICAgICAgZm9ybUVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pih0ZXN0RWxlbWVudCkuZm9y
bSgpOwogICAgICAgICBpZiAoIWZvcm1FbGVtZW50IHx8IGZvcm1FbGVtZW50ICE9ICZvd25lck5v
ZGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDEsNyArMTAxLDcg
QEAgYm9vbCBSYWRpb05vZGVMaXN0OjpjaGVja0VsZW1lbnRNYXRjaGVzUmFkaW9Ob2RlTGlzdEZp
bHRlcihjb25zdCBFbGVtZW50JiB0ZXN0RWwKIAogYm9vbCBSYWRpb05vZGVMaXN0OjplbGVtZW50
TWF0Y2hlcyhFbGVtZW50JiB0ZXN0RWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIXRlc3RFbGVt
ZW50Lmhhc1RhZ05hbWUob2JqZWN0VGFnKSAmJiAhdGVzdEVsZW1lbnQuaXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKKyAgICBpZiAoIWlzPEhUTUxPYmplY3RFbGVtZW50Pih0ZXN0RWxlbWVudCkgJiYg
IWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KHRlc3RFbGVtZW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRlc3RF
bGVtZW50LnRvSW5wdXRFbGVtZW50KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCBhN2JlMjFmYWY3NzM3ZWQ5YmJj
Y2RjNWYxOTk2N2ZlZDc5Mzg1ZDMyLi5iNzhkZTYwYjQyN2JiZGUyZWI2YzJmNTEzZDllNGJkNThm
NjBmNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwCkBAIC03MjcsNyArNzI3LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6ZmluZEZvc3RlclNpdGUoSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrJiB0YXNrKQogICAg
ICAgICAvLyBhbmQgaW5zdGVhZCB1c2UgdGhlIERvY3VtZW50RnJhZ21lbnQgYXMgYSByb290IG5v
ZGUuIFNvIHdlIG11c3QgdHJlYXQgdGhlIHJvb3Qgbm9kZSAoRG9jdW1lbnRGcmFnbWVudCkgYXMg
aWYgaXQgaXMgYSBodG1sIGVsZW1lbnQgaGVyZS4KICAgICAgICAgYm9vbCBwYXJlbnRDYW5CZUZv
c3RlclBhcmVudCA9IHBhcmVudCAmJiAocGFyZW50LT5pc0VsZW1lbnROb2RlKCkgfHwgKG1faXNQ
YXJzaW5nRnJhZ21lbnQgJiYgcGFyZW50ID09IG1fb3BlbkVsZW1lbnRzLnJvb3ROb2RlKCkpKTsK
ICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgcGFyZW50Q2FuQmVGb3N0ZXJQ
YXJlbnQgPSBwYXJlbnRDYW5CZUZvc3RlclBhcmVudCB8fCAocGFyZW50ICYmIHBhcmVudC0+aXNE
b2N1bWVudEZyYWdtZW50KCkgJiYgdG9Eb2N1bWVudEZyYWdtZW50KHBhcmVudCktPmlzVGVtcGxh
dGVDb250ZW50KCkpOworICAgICAgICBwYXJlbnRDYW5CZUZvc3RlclBhcmVudCA9IHBhcmVudENh
bkJlRm9zdGVyUGFyZW50IHx8IChwYXJlbnQgJiYgaXM8RG9jdW1lbnRGcmFnbWVudD4ocGFyZW50
KSAmJiBkb3duY2FzdDxEb2N1bWVudEZyYWdtZW50PihwYXJlbnQpLT5pc1RlbXBsYXRlQ29udGVu
dCgpKTsKICNlbmRpZgogICAgICAgICBpZiAocGFyZW50Q2FuQmVGb3N0ZXJQYXJlbnQpIHsKICAg
ICAgICAgICAgIHRhc2sucGFyZW50ID0gcGFyZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggNTgwNWNmMGM5OTBiY2ZhYjMyZDE5N2Zk
Y2EzMDM0YmQ0NmU2NTE1Ni4uNTY5NGVmZDljYWUyNTdlZDI1MzRkNTM3NTY1NzYwNWEyNjE5YTI3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CkBAIC0yMzgxLDcgKzIzODEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGlzYWxsb3dUZWxlcGhv
bmVOdW1iZXJQYXJzaW5nKGNvbnN0IE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIG5vZGUuaXNMaW5r
KCkKICAgICAgICAgfHwgbm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERQogICAg
ICAgICB8fCBub2RlLmhhc1RhZ05hbWUoc2NyaXB0VGFnKQotICAgICAgICB8fCAobm9kZS5pc0hU
TUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS5pc0Zvcm1Db250cm9sRWxlbWVudCgp
KQorICAgICAgICB8fCBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKQogICAgICAgICB8
fCBub2RlLmhhc1RhZ05hbWUoc3R5bGVUYWcpCiAgICAgICAgIHx8IG5vZGUuaGFzVGFnTmFtZSh0
dFRhZykKICAgICAgICAgfHwgbm9kZS5oYXNUYWdOYW1lKHByZVRhZykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCmluZGV4IDUwYWI4MTQ5NmIwNTkyNTZiNDRlNjFiMmVk
MmExYWNjY2U5YTUzNzguLmE5N2ZkODRhNTRlZTgwNWI2YWRlMWYwNjJmNGM0OTllZTJlMDc2MzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcApAQCAtMTQ0LDggKzE0
NCw4IEBAIFBhc3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+IEZvcm1TdWJtaXNzaW9uOjpjcmVhdGUo
SFRNTEZvcm1FbGVtZW50KiBmb3JtLCBjb25zdCBBCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCogc3VibWl0QnV0dG9uID0gMDsKICAgICBpZiAoZXZlbnQgJiYgZXZlbnQtPnRhcmdldCgpKSB7
CiAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7IG5v
ZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5p
c0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgc3VibWl0QnV0dG9uID0gdG9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50KG5vZGUpOworICAgICAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgc3VibWl0QnV0dG9uID0gZG93bmNhc3Q8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4obm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5oCmluZGV4IGUz
YzE0ODRlNGMxMWExNTI5YmEyYjg1MDA1MGUxOThhNGNmYjU0YjUuLjZkMDVkYmY2NjI3MGNmZjA4
YTdiYTNlNTU5ODBlMjM4YTE3NTlmMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL21hdGht
bC9NYXRoTUxFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1l
bnQuaApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIGlzTWF0aE1MRWxlbWVudChjb25zdCBNYXRoTUxF
bGVtZW50Jik7IC8vIENhdGNoIHVubmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sgbwogaW5saW5lIGJv
b2wgaXNNYXRoTUxFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNNYXRo
TUxFbGVtZW50KCk7IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEFyZ1R5cGU+Ci1zdHJ1Y3QgRWxl
bWVudFR5cGVDYXN0VHJhaXRzPGNvbnN0IE1hdGhNTEVsZW1lbnQsIEFyZ1R5cGU+IHsKK3N0cnVj
dCBOb2RlVHlwZUNhc3RUcmFpdHM8Y29uc3QgTWF0aE1MRWxlbWVudCwgQXJnVHlwZT4gewogICAg
IHN0YXRpYyBib29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0dXJuIGlzTWF0aE1MRWxlbWVudChu
b2RlKTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGU5YmMxYjZjYzA4YmJjNTUyN2JkN2NjYTEwYzBiOWQzNGI1NmFlNDguLmI1
MTlmZDIxYzY2NzQxYjg5NDM1OTgwYjg1N2ZhMzI4NzQ2MDJmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTgzNiw3ICs4MzYsNyBAQCB2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKQogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuOwogI2lmIFBMQVRGT1JNKEdUSykKLSAgICBpZiAoIW1fY29udGV4dC5oaXRU
ZXN0UmVzdWx0KCkuaXNDb250ZW50RWRpdGFibGUoKSAmJiAobm9kZS0+aXNFbGVtZW50Tm9kZSgp
ICYmIHRvRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgaWYgKCFt
X2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIEZy
YW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
aW5kZXggZTZhM2QyNTVhMWIzOWIzYjU3MzIwYzAyNjg5NjQyNTEwNjUyMTdhNC4uODkyZTRmNWMx
Y2I0Y2Y5MGIyNGY0NDEwNWQ0OGVkMTM0MzlhZThmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAg
LTM4OSw3ICszODksNyBAQCBTdHJpbmcgRnJhbWU6OnNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1l
bnQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGxhYmVscywgRWxlbWVudAogICAgIE5vZGUqIG47CiAg
ICAgZm9yIChuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoZWxlbWVudCk7IG4gJiYgbGVuZ3Ro
U2VhcmNoZWQgPCBjaGFyc1NlYXJjaGVkVGhyZXNob2xkOyBuID0gTm9kZVRyYXZlcnNhbDo6cHJl
dmlvdXMobikpIHsKICAgICAgICAgLy8gV2UgaGl0IGFub3RoZXIgZm9ybSBlbGVtZW50IG9yIHRo
ZSBzdGFydCBvZiB0aGUgZm9ybSAtIGJhaWwgb3V0Ci0gICAgICAgIGlmIChpc0hUTUxGb3JtRWxl
bWVudChuKSB8fCAobi0+aXNIVE1MRWxlbWVudCgpICYmIHRvRWxlbWVudChuKS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkpCisgICAgICAgIGlmIChpczxIVE1MRm9ybUVsZW1lbnQ+KG4pIHx8IGlz
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KG4pKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgaWYgKG4tPmhhc1RhZ05hbWUodGRUYWcpICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAppbmRleCBjMGMyNTgwM2E1ZmZi
ODE1NDA2NGY4ZGU0ZTAyMGI2NGJkZGUxZmJiLi41M2UwYzc1MWIwNGI4MzNhM2ZiNTNiYThmMzg3
YWVjMDFkZmJjZTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNw
cApAQCAtNTEsNyArNTEsNyBAQCBSZW5kZXJCdXR0b246On5SZW5kZXJCdXR0b24oKQogCiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50JiBSZW5kZXJCdXR0b246OmZvcm1Db250cm9sRWxlbWVudCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChub2RlRm9yTm9uQW5v
bnltb3VzKCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihu
b2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCiBib29sIFJlbmRlckJ1dHRvbjo6Y2FuQmVTZWxl
Y3Rpb25MZWFmKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CmluZGV4IGIzNzNiOTk2NGE2OWU2MTcwNTFmYjI2ZTNkMzUyYTdiYzQ1MDMwOGQuLjVmM2E0OTdi
Mzg5MzgwMzI3NWM2NzdlN2M2NmJjMTIwNGU1ZDhjYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcApAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFt
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKQEAgLTI1NzMsNyArMjU3NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJl
c2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xk
T2ZmCiAKICAgICBFUmVzaXplIHJlc2l6ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnJlc2l6ZSgpOwog
ICAgIGlmIChyZXNpemUgIT0gUkVTSVpFX1ZFUlRJQ0FMICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkg
ewotICAgICAgICBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgeworICAgICAg
ICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCkpIHsKICAgICAgICAgICAg
IC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCiAgICAgICAgICAg
ICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2lu
TGVmdCwgcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpOwogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAv
IHpvb21GYWN0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwpAQCAtMjU4NCw3ICsyNTg1
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
ZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmYKICAgICB9CiAKICAgICBpZiAocmVzaXplICE9
IFJFU0laRV9IT1JJWk9OVEFMICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYg
KGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAvLyBNYWtlIGltcGxp
Y2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgogICAgICAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXIt
Pm1hcmdpblRvcCgpIC8gem9vbUZhY3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAg
ICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCmluZGV4IDk2MDQ1MzZhNmNmNDdlM2JkNWViNzE3ODE1ZGQ3MGQ1NWUyYjcwNjIu
LmJhNjc1ZjA0ZWU0NTRmOGVjZDkwNGJjNGJhZmMyNjk3NGFmMjI0YTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtODQzLDkgKzg0Myw5IEBAIGJvb2wgUmVu
ZGVyVGhlbWU6OmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBv
KSBjb25zdAogYm9vbCBSZW5kZXJUaGVtZTo6aXNSZWFkT25seUNvbnRyb2woY29uc3QgUmVuZGVy
T2JqZWN0JiBvKSBjb25zdAogewogICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKLSAgICBpZiAo
IW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCAhdG9FbGVtZW50KG5vZGUpLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQorICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gIXRvRWxl
bWVudChub2RlKS0+bWF0Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKCk7CisgICAgcmV0dXJuICF0
b0VsZW1lbnQoKm5vZGUpLm1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpOwogfQogCiBib29s
IFJlbmRlclRoZW1lOjppc0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmgKaW5kZXggNmJkZTdiYzQxYjUzZjczYWJlZjliMzkxNzIyMmVmYzYx
NGRlZGVhOS4uY2RkYTk5ODVmMzlmMGExMDQzYjY2NWVlN2MwNzUyMjdkYzMwNjQ2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5oCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBpc1NWR0VsZW1lbnQo
Y29uc3QgU1ZHRWxlbWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9m
IHR5cGUKIGlubGluZSBib29sIGlzU1ZHRWxlbWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJldHVy
biBub2RlLmlzU1ZHRWxlbWVudCgpOyB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmdUeXBlPgot
c3RydWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBTVkdFbGVtZW50LCBBcmdUeXBlPiB7
CitzdHJ1Y3QgTm9kZVR5cGVDYXN0VHJhaXRzPGNvbnN0IFNWR0VsZW1lbnQsIEFyZ1R5cGU+IHsK
ICAgICBzdGF0aWMgYm9vbCBpcyhBcmdUeXBlJiBub2RlKSB7IHJldHVybiBpc1NWR0VsZW1lbnQo
bm9kZSk7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCA3NGZiNTZlN2Q0ODgwMzk5OWZj
MWFhNjJhNzc5MzM3NGJhY2RmM2VhLi40Zjc3ODk1N2NmY2MwMWE5OTc5MzA4OWVkNmE4YzE4ZTFm
YzQ2YjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC04Nyw3ICs4Nyw3IEBAIGlubGluZSBib29s
IGlzU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFNWR0VsZW1lbnQm
IGVsZW1lbnQpIHsKIGlubGluZSBib29sIGlzU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzKGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNTVkdFbGVtZW50KCkgJiYg
ZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9kZSkuaXNGaWx0ZXJFZmZlY3QoKTsgfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQXJnVHlwZT4KLXN0cnVjdCBFbGVtZW50VHlwZUNhc3RUcmFpdHM8Y29uc3Qg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLCBBcmdUeXBlPiB7CitzdHJ1Y3Qg
Tm9kZVR5cGVDYXN0VHJhaXRzPGNvbnN0IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcywgQXJnVHlwZT4gewogICAgIHN0YXRpYyBib29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0
dXJuIGlzU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKG5vZGUpOyB9CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKaW5kZXgg
Zjk4NDBiNmY1OWU0YmM5NzliMzA4MTlmY2Y0NjU0NWQzOTcwODI0OC4uNjM3YTA1NjhkNTdiNDgz
NjdhMzU2NTBiNWE3NjY1MWQ0MzhlYTUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU1ZHU01JTEVsZW1lbnQuaApAQCAtMjQyLDcgKzI0Miw3IEBAIGlubGluZSBib29sIGlz
U1ZHU01JTEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCYgZWxlbWVudCkgeyByZXR1cm4gZWxlbWVu
dC5pc1NNSUxFCiBpbmxpbmUgYm9vbCBpc1NWR1NNSUxFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUp
IHsgcmV0dXJuIG5vZGUuaXNTVkdFbGVtZW50KCkgJiYgZG93bmNhc3Q8U1ZHRWxlbWVudD4obm9k
ZSkuaXNTTUlMRWxlbWVudCgpOyB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmdUeXBlPgotc3Ry
dWN0IEVsZW1lbnRUeXBlQ2FzdFRyYWl0czxjb25zdCBTVkdTTUlMRWxlbWVudCwgQXJnVHlwZT4g
eworc3RydWN0IE5vZGVUeXBlQ2FzdFRyYWl0czxjb25zdCBTVkdTTUlMRWxlbWVudCwgQXJnVHlw
ZT4gewogICAgIHN0YXRpYyBib29sIGlzKEFyZ1R5cGUmIG5vZGUpIHsgcmV0dXJuIGlzU1ZHU01J
TEVsZW1lbnQobm9kZSk7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KaW5kZXggOWI5ZGU3YTVlN2Y0N2RhNTcwMzJmY2Ri
MmRmMTIzNmM5N2FlZmI1ZS4uODRkMzUzMTczYmU5ZWRmMGM3MzgyYmQyZDRjYjZhZjliZGFmOTk0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50
YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50
YXRpb24ubW0KQEAgLTQ0NSwxNSArNDQ1LDEzIEBAIHN0YXRpYyBOU1N0cmluZyogc2VhcmNoRm9y
TGFiZWxzQmVmb3JlRWxlbWVudChGcmFtZSogZnJhbWUsIE5TQXJyYXkqIGxhYmVscywgRWxlCiAg
ICAgdW5zaWduZWQgbGVuZ3RoU2VhcmNoZWQgPSAwOwogICAgIE5vZGUqIG47CiAgICAgZm9yIChu
ID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoZWxlbWVudCk7Ci0gICAgICAgICBuICYmIGxlbmd0
aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9sZDsKLSAgICAgICAgIG4gPSBOb2RlVHJh
dmVyc2FsOjpwcmV2aW91cyhuKSkKLSAgICB7Ci0gICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZv
cm1UYWcpCi0gICAgICAgICAgICB8fCAobi0+aXNIVE1MRWxlbWVudCgpICYmIHRvRWxlbWVudChu
KS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCi0gICAgICAgIHsKKyAgICAgICAgbiAmJiBsZW5n
dGhTZWFyY2hlZCA8IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7CisgICAgICAgIG4gPSBOb2RlVHJh
dmVyc2FsOjpwcmV2aW91cyhuKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZvcm1FbGVtZW50Pihu
KSB8fCBpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PihuKSkgewogICAgICAgICAgICAgLy8gV2Ug
aGl0IGFub3RoZXIgZm9ybSBlbGVtZW50IG9yIHRoZSBzdGFydCBvZiB0aGUgZm9ybSAtIGJhaWwg
b3V0CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1l
KHRkVGFnKSAmJiAhc3RhcnRpbmdUYWJsZUNlbGwpIHsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bi0+aGFzVGFnTmFtZSh0ZFRhZykgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAg
ICBzdGFydGluZ1RhYmxlQ2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50Kj4o
bik7CiAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZSh0clRhZykgJiYgc3RhcnRpbmdU
YWJsZUNlbGwpIHsKICAgICAgICAgICAgIE5TU3RyaW5nKiByZXN1bHQgPSBmcmFtZS0+c2VhcmNo
Rm9yTGFiZWxzQWJvdmVDZWxsKCpyZWdFeHAsIHN0YXJ0aW5nVGFibGVDZWxsLCByZXN1bHREaXN0
YW5jZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKaW5kZXggZDUwYmFmZDNkYTk3MDk3Mjc0ZjZjYTY1
MTg4Mjc3NjkzOTIyNGQxYi4uZTMzMDQ4YWQ4MDczMTZhODU5OWY4ZDBjNzM3ZmMwNzBhMzA3Y2E4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcApAQCAtMTEwMSwxMiArMTEwMSwxMiBAQCBIUkVTVUxU
IFdlYkZyYW1lOjplbGVtZW50V2l0aE5hbWUoQlNUUiBuYW1lLCBJRE9NRWxlbWVudCogZm9ybSwg
SURPTUVsZW1lbnQqKiBlbAogICAgICAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRFbGVtZW50cygpOwogICAg
ICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSgoVUNoYXIqKW5hbWUsIFN5c1N0cmluZ0xlbihu
YW1lKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghZWxlbWVudHNbaV0tPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCisgICAgICAgICAgICBpZiAoIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVs
ZW1lbnRzW2ldKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqIGVsdCA9IHRvSFRNTEZvcm1Db250cm9sRWxlbWVudChlbGVtZW50
c1tpXSk7CisgICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50JiBlbHQgPSBkb3duY2Fz
dDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudHNbaV0pOwogICAgICAgICAgICAgLy8g
U2tpcCBvcHRpb24gZWxlbWVudHMsIG90aGVyIGR1ZHMKLSAgICAgICAgICAgIGlmIChlbHQtPm5h
bWUoKSA9PSB0YXJnZXROYW1lKSB7Ci0gICAgICAgICAgICAgICAgKmVsZW1lbnQgPSBET01FbGVt
ZW50OjpjcmVhdGVJbnN0YW5jZShlbHQpOworICAgICAgICAgICAgaWYgKGVsdC5uYW1lKCkgPT0g
dGFyZ2V0TmFtZSkgeworICAgICAgICAgICAgICAgICplbGVtZW50ID0gRE9NRWxlbWVudDo6Y3Jl
YXRlSW5zdGFuY2UoJmVsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNfT0s7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>