<?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>88497</bug_id>
          
          <creation_ts>2012-06-06 21:39:37 -0700</creation_ts>
          <short_desc>Move form-related functions of Document to FormController</short_desc>
          <delta_ts>2012-06-08 02:54:27 -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>Forms</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>haraken</cc>
    
    <cc>morrita</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>643191</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-06 21:39:37 -0700</bug_when>
    <thetext>Move form-related functions of Document to FormController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643202</commentid>
    <comment_count>1</comment_count>
      <attachid>146195</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-06 21:53:18 -0700</bug_when>
    <thetext>Created attachment 146195
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643279</commentid>
    <comment_count>2</comment_count>
      <attachid>146195</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-07 00:16:00 -0700</bug_when>
    <thetext>Comment on attachment 146195
Patch

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

Lightening Document looks really good!

&gt; Source/WebCore/dom/Document.cpp:1647
&gt; +Vector&lt;String&gt; Document::formElementsState()
&gt; +{
&gt; +    if (!m_formController)
&gt; +        return Vector&lt;String&gt;();
&gt; +    return formController()-&gt;formElementsState();
&gt; +}
&gt; +
&gt; +void Document::setStateForNewFormElements(const Vector&lt;String&gt;&amp; stateVector)
&gt; +{
&gt; +    if (!stateVector.size() &amp;&amp; !m_formController)
&gt; +        return;
&gt; +    formController()-&gt;setStateForNewFormElements(stateVector);
&gt; +}

It seems these methods are used by loader/HistoryController.cpp only. How about removing these methods from Document, and just call document()-&gt;formController()-&gt;formElementsState() in loader/HistoryController.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643284</commentid>
    <comment_count>3</comment_count>
      <attachid>146195</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-07 00:19:51 -0700</bug_when>
    <thetext>Comment on attachment 146195
Patch

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

&gt;&gt; Source/WebCore/dom/Document.cpp:1647
&gt;&gt; +}
&gt; 
&gt; It seems these methods are used by loader/HistoryController.cpp only. How about removing these methods from Document, and just call document()-&gt;formController()-&gt;formElementsState() in loader/HistoryController.cpp?

Maybe the reason why you put the methods on Document is that you do not want to create FormController if formElementsState() is called before setStateForNewFormElements()? How often would it happen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643290</commentid>
    <comment_count>4</comment_count>
      <attachid>146195</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-07 00:31:26 -0700</bug_when>
    <thetext>Comment on attachment 146195
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Document.cpp:1647
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; It seems these methods are used by loader/HistoryController.cpp only. How about removing these methods from Document, and just call document()-&gt;formController()-&gt;formElementsState() in loader/HistoryController.cpp?
&gt; 
&gt; Maybe the reason why you put the methods on Document is that you do not want to create FormController if formElementsState() is called before setStateForNewFormElements()? How often would it happen?

Yes, the reason is that I don&apos;t want to create FormController as possible. FormController is not needed if a document contains no form controls.

formElementState() is called whenever a document is unloaded in order to save form state into HistoryItem.  So, if we call document-&gt;formController()-&gt;formElementsState() directly in HistoryController, A FormController would be created every time.  It would be wasteful if the document had no form elements and formController() was not created.

setStateForNewFormElements() is called whenever a document is loaded to restore form state from HistoryItem regardless of existence of form elements in the document.  The document might have no form elements and a FormController might be never used.  So I&apos;d like to avoid instantiation of FormController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643294</commentid>
    <comment_count>5</comment_count>
      <attachid>146195</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-07 00:35:01 -0700</bug_when>
    <thetext>Comment on attachment 146195
Patch

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

The change looks good to me.

morrita-san: please r+ it if you think OK.

&gt;&gt;&gt;&gt; Source/WebCore/dom/Document.cpp:1647
&gt;&gt;&gt;&gt; +}
&gt;&gt;&gt; 
&gt;&gt;&gt; It seems these methods are used by loader/HistoryController.cpp only. How about removing these methods from Document, and just call document()-&gt;formController()-&gt;formElementsState() in loader/HistoryController.cpp?
&gt;&gt; 
&gt;&gt; Maybe the reason why you put the methods on Document is that you do not want to create FormController if formElementsState() is called before setStateForNewFormElements()? How often would it happen?
&gt; 
&gt; Yes, the reason is that I don&apos;t want to create FormController as possible. FormController is not needed if a document contains no form controls.
&gt; 
&gt; formElementState() is called whenever a document is unloaded in order to save form state into HistoryItem.  So, if we call document-&gt;formController()-&gt;formElementsState() directly in HistoryController, A FormController would be created every time.  It would be wasteful if the document had no form elements and formController() was not created.
&gt; 
&gt; setStateForNewFormElements() is called whenever a document is loaded to restore form state from HistoryItem regardless of existence of form elements in the document.  The document might have no form elements and a FormController might be never used.  So I&apos;d like to avoid instantiation of FormController.

Makes sense. Thanks for the clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644108</commentid>
    <comment_count>6</comment_count>
      <attachid>146195</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-06-07 17:24:18 -0700</bug_when>
    <thetext>Comment on attachment 146195
Patch

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

FormController could be under html/ considering that all its clients are under html.
Then it could be a member of HTMLDocument instead of Document.

&gt; Source/WebCore/dom/Document.h:495
&gt; +    Vector&lt;String&gt; formElementsState();

Why not const?

&gt; Source/WebCore/dom/FormController.cpp:3
&gt; + * Copyright (C) 2010, 2011 Google Inc. All rights reserved.

It&apos;s 2012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644118</commentid>
    <comment_count>7</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-07 17:30:32 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 146195 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146195&amp;action=review
&gt; 
&gt; FormController could be under html/ considering that all its clients are under html.
&gt; Then it could be a member of HTMLDocument instead of Document.

I can move FormController.{cpp,h} to html/.  But Document needs to have it because SVGDocument can have form controls in &lt;foreignContent&gt;.

&gt; &gt; Source/WebCore/dom/Document.h:495
&gt; &gt; +    Vector&lt;String&gt; formElementsState();
&gt; 
&gt; Why not const?

It updates Document::m_formController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644122</commentid>
    <comment_count>8</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-07 17:33:55 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; +    Vector&lt;String&gt; formElementsState();
&gt; &gt; 
&gt; &gt; Why not const?
&gt; 
&gt; It updates Document::m_formController.

Ah, I can avoid to use formController().  So it can be const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644403</commentid>
    <comment_count>9</comment_count>
      <attachid>146495</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-08 00:03:58 -0700</bug_when>
    <thetext>Created attachment 146495
Patch 2

- Move FormController.* to html/
- Update copyright headers
- make formElementsState const</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644528</commentid>
    <comment_count>10</comment_count>
      <attachid>146495</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 02:54:13 -0700</bug_when>
    <thetext>Comment on attachment 146495
Patch 2

Clearing flags on attachment: 146495

Committed r119816: &lt;http://trac.webkit.org/changeset/119816&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644529</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 02:54:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146195</attachid>
            <date>2012-06-06 21:53:18 -0700</date>
            <delta_ts>2012-06-08 00:01:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88497-20120607135317.patch</filename>
            <type>text/plain</type>
            <size>41141</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg0MWZkMjFhYWFiZTBj
MmE5YzUwNTgzZDdiN2I0MjljNDhlN2EzMC4uNmVhYjFkMjlhODc2NzU0MDJjNjdmOGE2M2M2NzA4
MGQ5NGJiOTBjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA2LTA2ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBNb3ZlIGZvcm0tcmVsYXRl
ZCBmdW5jdGlvbnMgb2YgRG9jdW1lbnQgdG8gRm9ybUNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDk3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBsb3Qgb2YgZmlsZXMgZGVwZW5kIG9u
IERvY3VtZW50LmguIFdlIGhhZCB0byBidWlsZCBtYW55IGZpbGVzIHdoZW4gd2UKKyAgICAgICAg
dG91Y2hlZCBmb3JtLXJlbGF0ZWQgZmVhdHVyZXMgaW4gRG9jdW1lbnQuaCBvcgorICAgICAgICBD
aGVja2VkUmFkaW9CdXR0b25zLmguIFRoaXMgcGF0Y2ggcmVkdWNlcyBzdWNoIHBhaW4uCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiBKdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDogQWRkIEZvcm1Db250cm9sbGVyLmNwcCBhbmQvb3IgRm9ybUNvbnRyb2xsZXIu
aC4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBkaXR0by4KKyAgICAgICAgKiBUYXJn
ZXQucHJpOiBkaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IGRpdHRvLgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBkaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IGRpdHRvLgorCisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDogUmVtb3ZlZCBmb3JtLXJlbGVhdGVkIGZlYXR1cmVzIGV4Y2VwdCB0aGUgZm9sbG93
aW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpmb3JtQ29udHJvbGxlcik6IEFjY2Vz
c29yIGZvciBhIEZvcm1Db250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZv
cm1FbGVtZW50c1N0YXRlKToKKyAgICAgICAgSnVzdCByZXR1cm5zIEZvcm1Db250cm9sbGVyOjpm
b3JtRWxlbWVudHNTdGF0ZSgpLgorICAgICAgICBXZSBkb24ndCBjcmVhdGUgbmV3IEZvcm1Db250
cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFN0YXRlRm9yTmV3Rm9ybUVs
ZW1lbnRzKToKKyAgICAgICAgSnVzdCByZXR1cm5zIEZvcm1Db250cm9sbGVyOjpzZXRTdGF0ZUZv
ck5ld0Zvcm1FbGVtZW50cygpLgorICAgICAgICBXZSBkb24ndCBjcmVhdGUgbmV3IEZvcm1Db250
cm9sbGVyIGlmIHRoZSBzcGVjaWZpZWQgdmVjdG9yIGlzIGVtcHR5LgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5oOgorICAgICAgICBNb3ZlZCBmb3JtLXJlbGF0ZWQgZnVuY3Rpb25zIHRvIEZvcm1D
b250cm9sbGVyLgorICAgICAgICAqIGRvbS9Gb3JtQ29udHJvbGxlci5jcHA6IEFkZGVkLiBNb3Zl
ZCBmcm9tIERvY3VtZW50LmNwcC4KKyAgICAgICAgKiBkb20vRm9ybUNvbnRyb2xsZXIuaDogQWRk
ZWQuIE1vdmVkIGZyb20gRG9jdW1lbnQuaAorCisgICAgICAgICogaHRtbC9Gb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuY3BwOiBVc2UgRG9jdW1lbnQ6OmZvcm1Db250cm9sbGVyKCkuCisgICAgICAgIChX
ZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcDog
VXNlIERvY3VtZW50Ojpmb3JtQ29udHJvbGxlcigpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp+
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpmaW5pc2hQYXJz
aW5nQ2hpbGRyZW4pOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDogVXNlIERv
Y3VtZW50Ojpmb3JtQ29udHJvbGxlcigpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50OjpkaWROb3RpZnlEZXNjZW5kYW50SW5zZXJ0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwOiBVc2UgRG9jdW1lbnQ6OmZvcm1Db250cm9sbGVyKCkuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpjaGVja2VkUmFkaW9CdXR0b25zKToKKyAgICAgICAg
KiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgRGVjbGFyZSBDaGVja2VkUmFkaW9C
dXR0b25zLiBJdCB3YXMgcHJvdmlkZWQgYnkgRG9jdW1lbnQuaC4KKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oOgorICAgICAgICBEZWNsYXJlIEhUTUxGb3JtRWxl
bWVudC4gSXQgd2FzIHByb3ZpZGVkIGJ5IERvY3VtZW50LmgKKwogMjAxMi0wNi0wNiAgU2hlemFu
IEJhaWcgIDxzaGV6YmFpZy53a0BnbWFpbC5jb20+CiAKICAgICAgICAgQ2FyZXQgaXMgbm90IHJl
bmRlcmVkIGluIGVtcHR5IGlubGluZSBjb250ZW50ZWRpdGFibGUgZWxlbWVudHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKaW5kZXggZGMzZDcwM2M3N2I4MTRmYzIyYTdlMWU4YjYyYzc1YjYwN2YzZDQzYS4u
MGY3ZGUwZmZmNmNjYWIwNGE5YjU2MDQ0OGI1YWE1NjQ3MTI1YWQ4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTU5OCw2ICs1OTgsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V2
ZW50VGFyZ2V0LmNwcAogICAgIGRvbS9FeGNlcHRpb25CYXNlLmNwcAogICAgIGRvbS9FeGNlcHRp
b25Db2RlUGxhY2Vob2xkZXIuY3BwCisgICAgZG9tL0Zvcm1Db250cm9sbGVyLmNwcAogICAgIGRv
bS9HZW5lcmljRXZlbnRRdWV1ZS5jcHAKICAgICBkb20vSWNvblVSTC5jcHAKICAgICBkb20vS2V5
Ym9hcmRFdmVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDUyNmY1ZDk5
ZDI5ZGJlYTM3MTM4NDA5YTFiNjNiOTJjM2M4YmUyMGQuLjYzZTNiMmFjMTQwMzlkZjFhZmE2MGVh
NDJjOWU0YjM0OTFlYTNjOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTg5
NSw2ICsxODk1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20v
RXhjZXB0aW9uQ29kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXhjZXB0aW9uQ29kZVBsYWNl
aG9sZGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGVQbGFjZWhvbGRl
ci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9kb20vRm9ybUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9kb20vRm9ybUNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0ZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vSWdub3JlRGVz
dHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0V4
Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDkxMWJhZTEzMGRiM2Y0
ODYwOWUyYjNhMTdjOWRkMjQ5YzljM2MyYTkuLjcyODYzOWUxMGU5YzE2OGM4NjQ3NWVmNDBlYzc0
ODhhYjU2ZmZkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNTY3LDYgKzU2Nyw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIGRvbS9FdmVudFRhcmdldC5jcHAgXAogICAgIGRvbS9FeGNlcHRpb25CYXNlLmNwcCBc
CiAgICAgZG9tL0V4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAgXAorICAgIGRvbS9Gb3JtQ29u
dHJvbGxlci5jcHAgXAogICAgIGRvbS9HZW5lcmljRXZlbnRRdWV1ZS5jcHAgXAogICAgIGRvbS9J
Y29uVVJMLmNwcCBcCiAgICAgZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKQEAgLTE3MzksNiArMTc0
MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9FdmVudFRhcmdldC5oIFwKICAgICBkb20vRXhj
ZXB0aW9uQmFzZS5oIFwKICAgICBkb20vRXhjZXB0aW9uQ29kZS5oIFwKKyAgICBkb20vRm9ybUNv
bnRyb2xsZXIuaCBcCiAgICAgZG9tL0ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oIFwKICAg
ICBkb20vS2V5Ym9hcmRFdmVudC5oIFwKICAgICBkb20vTWVzc2FnZUNoYW5uZWwuaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggNGE5Yzg1NzhmNDAwZDI4NzEwMWJhYWYxNjZiZTFkYTA0MDIxZmRjNi4u
ZGVkMGFkMTNiMDRmZWQwMTM3MDU2MTMxNGMwYWMzYjNlNjQyNmM4MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtNTMwNCw2ICs1MzA0LDggQEAKICAgICAgICAgICAgICdkb20vRXhjZXB0aW9uQmFzZS5j
cHAnLAogICAgICAgICAgICAgJ2RvbS9FeGNlcHRpb25CYXNlLmgnLAogICAgICAgICAgICAgJ2Rv
bS9FeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuY3BwJywKKyAgICAgICAgICAgICdkb20vRm9ybUNv
bnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICdkb20vRm9ybUNvbnRyb2xsZXIuaCcsCiAgICAg
ICAgICAgICAnZG9tL0dlbmVyaWNFdmVudFF1ZXVlLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0dl
bmVyaWNFdmVudFF1ZXVlLmgnLAogICAgICAgICAgICAgJ2RvbS9IYXNoQ2hhbmdlRXZlbnQuaCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDRm
ZGE3YWQxOGNmODI2ODcxN2E2MmVhZTVlNjMxYjc2ZGU4OTYxMzMuLjA1ZjY0NGE5ZWZmNzU2OWRk
OTdkMzUwMjBjOTczYjAwNWJkMjdiMTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCkBAIC01MDk1MSw2ICs1MDk1MSwxNCBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cRm9ybUNvbnRyb2xsZXIu
Y3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxk
b21cRm9ybUNvbnRyb2xsZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5cZG9tXEdlbmVyaWNFdmVudFF1ZXVlLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggYTk1ZmM0NDc5ZWZiMDlkNzI4Yzc2ZGMzY2ZhMmM3MDFjYjAxOGY1Yy4uZTg1ZDUx
YzkwMTRhZDIzMTYzYWUzYjY0YWI5YmY1N2Y4NTBhZGFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjExOSw2ICs2MTE5LDgg
QEAKIAkJRjNGNjhEQTYxNDNDQUM1QTAwQzJGODg3IC8qIEluc3BlY3RvclN0YXRlQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGM0Y2OERBNTE0
M0NBQzVBMDBDMkY4ODcgLyogSW5zcGVjdG9yU3RhdGVDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEVBRjRBRTEwQzc0MkIxMDA5MTAw
RDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjRFQUY0QUMxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2Fu
aXRpemVyLmNwcCAqLzsgfTsKIAkJRjRFQUY0QUYxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBl
U2FuaXRpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNEVBRjRBRDEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuaCAqLzsgfTsK
KwkJRjUwNjY0RjcxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MDY2NEY1MTU3RjUyREMw
MEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgKi87IH07CisJCUY1MDY2NEY4MTU3RjUyREMw
MEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjUwNjY0RjYxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9s
bGVyLmggKi87IH07CiAJCUY1MTQyQzY5MTIzRjEyQjAwMEY1QkQ0QyAvKiBMb2NhbGl6ZWROdW1i
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MTQy
QzY4MTIzRjEyQjAwMEY1QkQ0QyAvKiBMb2NhbGl6ZWROdW1iZXIuaCAqLzsgfTsKIAkJRjUyQUQ1
RTQxNTM0MjQ1RjAwNTlGQkU2IC8qIEVtcHR5Q2xpZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTJBRDVFMzE1MzQyNDVGMDA1OUZCRTYgLyog
RW1wdHlDbGllbnRzLmNwcCAqLzsgfTsKIAkJRjU1QjNEQUQxMjUxRjEyRDAwM0VGMjY5IC8qIEJh
c2VUZXh0SW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1NUIzRDc5MTI1MUYxMkQwMDNFRjI2OSAvKiBCYXNlVGV4dElucHV0VHlwZS5j
cHAgKi87IH07CkBAIC0xMzM1MSw2ICsxMzM1Myw4IEBACiAJCUYzRjY4REE1MTQzQ0FDNUEwMEMy
Rjg4NyAvKiBJbnNwZWN0b3JTdGF0ZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNwZWN0b3JTdGF0ZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3BlblR5cGVTYW5pdGl6ZXIuY3Bw
OyBwYXRoID0gb3BlbnR5cGUvT3BlblR5cGVTYW5pdGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGNEVBRjRBRDEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT3BlblR5cGVTYW5pdGl6ZXIu
aDsgcGF0aCA9IG9wZW50eXBlL09wZW5UeXBlU2FuaXRpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtQ29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY1MDY2NEY2MTU3RjUyREMwMEFDMjI2
RiAvKiBGb3JtQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
b3JtQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNTE0MkM2ODEy
M0YxMkIwMDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExvY2FsaXplZE51bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNTIzRDIzQjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxEb2N1
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQlGNTIzRDIzQzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxEb2N1
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKQEAgLTIxMjc2LDYgKzIxMjgwLDggQEAKIAkJCQk5MzVGQkNGMTA5QkExNDNCMDBFMjMw
QjEgLyogRXhjZXB0aW9uQ29kZS5oICovLAogCQkJCUE3Q0FDREIwMTNDRTg3NUIwMEJCQkUzRiAv
KiBFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuY3BwICovLAogCQkJCUE3NEJCNzZBMTNCREE4NjMw
MEZGN0JGMCAvKiBFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCAqLywKKwkJCQlGNTA2NjRGNTE1
N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuY3BwICovLAorCQkJCUY1MDY2NEY2MTU3
RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5oICovLAogCQkJCUE4NTMxMjNDMTFEMDQ3
MUIwMEQ0RDA3NyAvKiBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCAqLywKIAkJCQkwNzIw
QjA5RTE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuY3BwICovLAogCQkJCTA3
MjBCMDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oICovLApAQCAtMjI5
NTUsNiArMjI5NjEsNyBAQAogCQkJCUJDRTQ0MTM2MTJGNzQ5MEIwMDlCODRCOCAvKiBGb250V2lk
dGhWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTBEQTJGRjEyOUIyNDE5MDBBQjYxRTEg
LyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEMDVDRUQyQTBB
NDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGNTA2NjRGODE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDg1QjkyQkIwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxMzZEMzgwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRh
TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjEyNCw2ICsyNjEzMSw3IEBACiAJCQkJQTgwRTZD
RjEwQTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
QTBEQTJGRTEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0Nv
bW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjUwNjY0RjcxNTdGNTJEQzAwQUMyMjZGIC8q
IEZvcm1Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjZGMENFOTIzQTEw
MDdFRjNDRCAvKiBGb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODVCOTJCQTBFRkRF
NzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
MTM2RDM5MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBkNjI2ZWYwOWUyNDdiYjFlODdmYjZjOWQxMDQ5
M2ExN2EzYzRhNDg1Li4xNjlkOTgwNjFhZjRjYjBjNTE1YjA4N2M4ZTJhNTNjMTZhOTgyNWM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTcxLDcgKzcxLDcgQEAKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmxvd1RocmVhZENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtOTIs
NyArOTIsNiBAQAogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxIZWFkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVDb2xsZWN0aW9u
LmgiCkBAIC0xNjI2LDYgKzE2MjUsMjcgQEAgTm9kZTo6Tm9kZVR5cGUgRG9jdW1lbnQ6Om5vZGVU
eXBlKCkgY29uc3QKICAgICByZXR1cm4gRE9DVU1FTlRfTk9ERTsKIH0KIAorRm9ybUNvbnRyb2xs
ZXIqIERvY3VtZW50Ojpmb3JtQ29udHJvbGxlcigpCit7CisgICAgaWYgKCFtX2Zvcm1Db250cm9s
bGVyKQorICAgICAgICBtX2Zvcm1Db250cm9sbGVyID0gRm9ybUNvbnRyb2xsZXI6OmNyZWF0ZSgp
OworICAgIHJldHVybiBtX2Zvcm1Db250cm9sbGVyLmdldCgpOworfQorCitWZWN0b3I8U3RyaW5n
PiBEb2N1bWVudDo6Zm9ybUVsZW1lbnRzU3RhdGUoKQoreworICAgIGlmICghbV9mb3JtQ29udHJv
bGxlcikKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisgICAgcmV0dXJuIGZvcm1D
b250cm9sbGVyKCktPmZvcm1FbGVtZW50c1N0YXRlKCk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnNl
dFN0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3Rv
cikKK3sKKyAgICBpZiAoIXN0YXRlVmVjdG9yLnNpemUoKSAmJiAhbV9mb3JtQ29udHJvbGxlcikK
KyAgICAgICAgcmV0dXJuOworICAgIGZvcm1Db250cm9sbGVyKCktPnNldFN0YXRlRm9yTmV3Rm9y
bUVsZW1lbnRzKHN0YXRlVmVjdG9yKTsKK30KKwogRnJhbWVWaWV3KiBEb2N1bWVudDo6dmlldygp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT52aWV3KCkgOiAwOwpAQCAt
NDc0NywyNiArNDc2Nyw2IEBAIHZvaWQgRG9jdW1lbnQ6OmZpbmlzaGVkUGFyc2luZygpCiAgICAg
fQogfQogCi1WZWN0b3I8U3RyaW5nPiBEb2N1bWVudDo6Zm9ybUVsZW1lbnRzU3RhdGUoKSBjb25z
dAotewotICAgIFZlY3RvcjxTdHJpbmc+IHN0YXRlVmVjdG9yOwotICAgIHN0YXRlVmVjdG9yLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuc2l6ZSgpICogMyk7
Ci0gICAgdHlwZWRlZiBGb3JtRWxlbWVudExpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVy
YXRvcjsKLSAgICBJdGVyYXRvciBlbmQgPSBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5lbmQoKTsK
LSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUqIGVsZW1lbnRXaXRoU3RhdGUgPSAqaXQ7Ci0gICAgICAgIGlmICghZWxlbWVudFdpdGhTdGF0
ZS0+c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICBpZiAoIWVsZW1lbnRXaXRo
U3RhdGUtPnNhdmVGb3JtQ29udHJvbFN0YXRlKHZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoZWxlbWVudFdpdGhTdGF0ZS0+Zm9ybUNvbnRy
b2xOYW1lKCkuc3RyaW5nKCkpOwotICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoZWxlbWVudFdp
dGhTdGF0ZS0+Zm9ybUNvbnRyb2xUeXBlKCkuc3RyaW5nKCkpOwotICAgICAgICBzdGF0ZVZlY3Rv
ci5hcHBlbmQodmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gc3RhdGVWZWN0b3I7Ci19Ci0KIFBh
c3NSZWZQdHI8WFBhdGhFeHByZXNzaW9uPiBEb2N1bWVudDo6Y3JlYXRlRXhwcmVzc2lvbihjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTQ3OTUsOTYgKzQ3OTUsNiBAQCBQYXNzUmVmUHRyPFhQYXRoUmVzdWx0PiBE
b2N1bWVudDo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAogICAgIHJldHVybiBt
X3hwYXRoRXZhbHVhdG9yLT5ldmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZSwgcmVzb2x2
ZXIsIHR5cGUsIHJlc3VsdCwgZWMpOwogfQogCi12b2lkIERvY3VtZW50OjpzZXRTdGF0ZUZvck5l
d0Zvcm1FbGVtZW50cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RhdGVWZWN0b3IpCi17Ci0gICAg
Ly8gV2FsayB0aGUgc3RhdGUgdmVjdG9yIGJhY2t3YXJkcyBzbyB0aGF0IHRoZSB2YWx1ZSB0byB1
c2UgZm9yIGVhY2gKLSAgICAvLyBuYW1lL3R5cGUgcGFpciBmaXJzdCBpcyB0aGUgb25lIGF0IHRo
ZSBlbmQgb2YgZWFjaCBpbmRpdmlkdWFsIHZlY3RvcgotICAgIC8vIGluIHRoZSBGb3JtRWxlbWVu
dFN0YXRlTWFwLiBXZSdyZSB1c2luZyB0aGVtIGxpa2Ugc3RhY2tzLgotICAgIHR5cGVkZWYgRm9y
bUVsZW1lbnRTdGF0ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgbV9mb3JtRWxlbWVudHNX
aXRoU3RhdGUuY2xlYXIoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gc3RhdGVWZWN0b3Iuc2l6ZSgp
IC8gMyAqIDM7IGk7IGkgLT0gMykgewotICAgICAgICBBdG9taWNTdHJpbmcgYSA9IHN0YXRlVmVj
dG9yW2kgLSAzXTsKLSAgICAgICAgQXRvbWljU3RyaW5nIGIgPSBzdGF0ZVZlY3RvcltpIC0gMl07
Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgYyA9IHN0YXRlVmVjdG9yW2kgLSAxXTsKLSAgICAgICAg
Rm9ybUVsZW1lbnRLZXkga2V5KGEuaW1wbCgpLCBiLmltcGwoKSk7Ci0gICAgICAgIEl0ZXJhdG9y
IGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5maW5kKGtleSk7Ci0gICAgICAgIGlmIChp
dCAhPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgpKQotICAgICAgICAgICAgaXQtPnNl
Y29uZC5hcHBlbmQoYyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gdigxKTsKLSAgICAgICAgICAgIHZbMF0gPSBjOwotICAgICAgICAgICAgbV9zdGF0ZUZvck5l
d0Zvcm1FbGVtZW50cy5zZXQoa2V5LCB2KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBE
b2N1bWVudDo6aGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoKSBjb25zdAotewotICAgIHJldHVy
biAhbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgRG9jdW1l
bnQ6OnRha2VTdGF0ZUZvckZvcm1FbGVtZW50KEF0b21pY1N0cmluZ0ltcGwqIG5hbWUsIEF0b21p
Y1N0cmluZ0ltcGwqIHR5cGUsIFN0cmluZyYgc3RhdGUpCi17Ci0gICAgdHlwZWRlZiBGb3JtRWxl
bWVudFN0YXRlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKLSAgICBJdGVyYXRvciBpdCA9IG1fc3Rh
dGVGb3JOZXdGb3JtRWxlbWVudHMuZmluZChGb3JtRWxlbWVudEtleShuYW1lLCB0eXBlKSk7Ci0g
ICAgaWYgKGl0ID09IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBBU1NFUlQoaXQtPnNlY29uZC5zaXplKCkpOwotICAgIHN0YXRlID0g
aXQtPnNlY29uZC5sYXN0KCk7Ci0gICAgaWYgKGl0LT5zZWNvbmQuc2l6ZSgpID4gMSkKLSAgICAg
ICAgaXQtPnNlY29uZC5yZW1vdmVMYXN0KCk7Ci0gICAgZWxzZQotICAgICAgICBtX3N0YXRlRm9y
TmV3Rm9ybUVsZW1lbnRzLnJlbW92ZShpdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZvcm1F
bGVtZW50S2V5OjpGb3JtRWxlbWVudEtleShBdG9taWNTdHJpbmdJbXBsKiBuYW1lLCBBdG9taWNT
dHJpbmdJbXBsKiB0eXBlKQotICAgIDogbV9uYW1lKG5hbWUpLCBtX3R5cGUodHlwZSkKLXsKLSAg
ICByZWYoKTsKLX0KLQotRm9ybUVsZW1lbnRLZXk6On5Gb3JtRWxlbWVudEtleSgpCi17Ci0gICAg
ZGVyZWYoKTsKLX0KLQotRm9ybUVsZW1lbnRLZXk6OkZvcm1FbGVtZW50S2V5KGNvbnN0IEZvcm1F
bGVtZW50S2V5JiBvdGhlcikKLSAgICA6IG1fbmFtZShvdGhlci5uYW1lKCkpLCBtX3R5cGUob3Ro
ZXIudHlwZSgpKQotewotICAgIHJlZigpOwotfQotCi1Gb3JtRWxlbWVudEtleSYgRm9ybUVsZW1l
bnRLZXk6Om9wZXJhdG9yPShjb25zdCBGb3JtRWxlbWVudEtleSYgb3RoZXIpCi17Ci0gICAgb3Ro
ZXIucmVmKCk7Ci0gICAgZGVyZWYoKTsKLSAgICBtX25hbWUgPSBvdGhlci5uYW1lKCk7Ci0gICAg
bV90eXBlID0gb3RoZXIudHlwZSgpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotdm9pZCBGb3Jt
RWxlbWVudEtleTo6cmVmKCkgY29uc3QKLXsKLSAgICBpZiAobmFtZSgpKQotICAgICAgICBuYW1l
KCktPnJlZigpOwotICAgIGlmICh0eXBlKCkpCi0gICAgICAgIHR5cGUoKS0+cmVmKCk7Ci19Ci0K
LXZvaWQgRm9ybUVsZW1lbnRLZXk6OmRlcmVmKCkgY29uc3QKLXsKLSAgICBpZiAobmFtZSgpKQot
ICAgICAgICBuYW1lKCktPmRlcmVmKCk7Ci0gICAgaWYgKHR5cGUoKSkKLSAgICAgICAgdHlwZSgp
LT5kZXJlZigpOwotfQotCi11bnNpZ25lZCBGb3JtRWxlbWVudEtleUhhc2g6Omhhc2goY29uc3Qg
Rm9ybUVsZW1lbnRLZXkmIGtleSkKLXsKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVt
b3J5PHNpemVvZihGb3JtRWxlbWVudEtleSk+KCZrZXkpOwotfQotCiBjb25zdCBWZWN0b3I8SWNv
blVSTD4mIERvY3VtZW50OjppY29uVVJMcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faWNvblVS
THM7CkBAIC00OTA2LDI1ICs0ODE2LDYgQEAgdm9pZCBEb2N1bWVudDo6YWRkSWNvblVSTChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW4KICAgICB9
CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0
ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKHRvSFRNTEVs
ZW1lbnQoZWxlbWVudCktPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICBtX2Zvcm1F
bGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmFkZChlbGVtZW50KTsKLX0KLQotdm9pZCBEb2N1bWVu
dDo6dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRF
bGVtZW50KiBlbGVtZW50KQotewotICAgIG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUu
cmVtb3ZlKGVsZW1lbnQpOwotfQotCi12b2lkIERvY3VtZW50OjpyZXNldEZvcm1FbGVtZW50c093
bmVyKCkKLXsKLSAgICB0eXBlZGVmIEZvcm1Bc3NvY2lhdGVkRWxlbWVudExpc3RIYXNoU2V0Ojpp
dGVyYXRvciBJdGVyYXRvcjsKLSAgICBJdGVyYXRvciBlbmQgPSBtX2Zvcm1FbGVtZW50c1dpdGhG
b3JtQXR0cmlidXRlLmVuZCgpOwotICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2Zvcm1FbGVtZW50
c1dpdGhGb3JtQXR0cmlidXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCpp
dCktPnJlc2V0Rm9ybU93bmVyKCk7Ci19Ci0KIHZvaWQgRG9jdW1lbnQ6OnNldFVzZVNlY3VyZUtl
eWJvYXJkRW50cnlXaGVuQWN0aXZlKGJvb2wgdXNlc1NlY3VyZUtleWJvYXJkKQogewogICAgIGlm
IChtX3VzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlID09IHVzZXNTZWN1cmVLZXlib2Fy
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggM2UzZTU2ZTM0MGQ0NTBhOTE1Njc2NTZjM2NlNjk1
ZDM0NTdiYzQwZC4uMjQ0OTczMTRjZDFjY2YyMDAwMTZmNjRlZTEzN2JlMTlhZjNjY2Q2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpZm5kZWYgRG9jdW1lbnRfaAog
I2RlZmluZSBEb2N1bWVudF9oCiAKLSNpbmNsdWRlICJDaGVja2VkUmFkaW9CdXR0b25zLmgiCiAj
aW5jbHVkZSAiQ29sbGVjdGlvblR5cGUuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUg
IkNvbnRhaW5lck5vZGUuaCIKQEAgLTg0LDcgKzgzLDcgQEAgY2xhc3MgRW50aXR5UmVmZXJlbmNl
OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgRm9udERhdGE7Ci1j
bGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ7CitjbGFzcyBGb3JtQ29udHJvbGxlcjsKIGNsYXNz
IEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CkBAIC05
MiwxMSArOTEsOCBAQCBjbGFzcyBIVE1MQ29sbGVjdGlvbjsKIGNsYXNzIEhUTUxBbGxDb2xsZWN0
aW9uOwogY2xhc3MgSFRNTERvY3VtZW50OwogY2xhc3MgSFRNTEVsZW1lbnQ7Ci1jbGFzcyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOwotY2xhc3MgSFRNTEZvcm1FbGVtZW50OwogY2xh
c3MgSFRNTEZyYW1lT3duZXJFbGVtZW50OwogY2xhc3MgSFRNTEhlYWRFbGVtZW50OwotY2xhc3Mg
SFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEhUTUxJRnJhbWVFbGVtZW50OwogY2xhc3MgSFRNTE1h
cEVsZW1lbnQ7CiBjbGFzcyBIVE1MTmFtZUNvbGxlY3Rpb247CkBAIC0xNzQsNDYgKzE3MCw2IEBA
IGNsYXNzIFByZXJlbmRlcmVyOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFz
cyBGb3JtRWxlbWVudEtleSB7Ci1wdWJsaWM6Ci0gICAgRm9ybUVsZW1lbnRLZXkoQXRvbWljU3Ry
aW5nSW1wbCogPSAwLCBBdG9taWNTdHJpbmdJbXBsKiA9IDApOwotICAgIH5Gb3JtRWxlbWVudEtl
eSgpOwotICAgIEZvcm1FbGVtZW50S2V5KGNvbnN0IEZvcm1FbGVtZW50S2V5Jik7Ci0gICAgRm9y
bUVsZW1lbnRLZXkmIG9wZXJhdG9yPShjb25zdCBGb3JtRWxlbWVudEtleSYpOwotCi0gICAgQXRv
bWljU3RyaW5nSW1wbCogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIEF0b21p
Y1N0cmluZ0ltcGwqIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIC8vIEhh
c2ggdGFibGUgZGVsZXRlZCB2YWx1ZXMsIHdoaWNoIGFyZSBvbmx5IGNvbnN0cnVjdGVkIGFuZCBu
ZXZlciBjb3BpZWQgb3IgZGVzdHJveWVkLgotICAgIEZvcm1FbGVtZW50S2V5KFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX25hbWUoaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpIHsg
fQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWUgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIHJl
ZigpIGNvbnN0OwotICAgIHZvaWQgZGVyZWYoKSBjb25zdDsKLQotICAgIHN0YXRpYyBBdG9taWNT
dHJpbmdJbXBsKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PEF0b21pY1N0cmluZ0ltcGwqPigtMSk7IH0KLQotICAgIEF0b21pY1N0cmluZ0ltcGwqIG1f
bmFtZTsKLSAgICBBdG9taWNTdHJpbmdJbXBsKiBtX3R5cGU7Ci19OwotCi1pbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZvcm1FbGVtZW50S2V5JiBhLCBjb25zdCBGb3JtRWxlbWVudEtleSYg
YikKLXsKLSAgICByZXR1cm4gYS5uYW1lKCkgPT0gYi5uYW1lKCkgJiYgYS50eXBlKCkgPT0gYi50
eXBlKCk7Ci19Ci0KLXN0cnVjdCBGb3JtRWxlbWVudEtleUhhc2ggewotICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IEZvcm1FbGVtZW50S2V5Jik7Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgRm9ybUVsZW1lbnRLZXkmIGEsIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBiKSB7IHJldHVy
biBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7Ci19OwotCi1zdHJ1Y3QgRm9ybUVsZW1lbnRLZXlIYXNoVHJhaXRzIDog
V1RGOjpHZW5lcmljSGFzaFRyYWl0czxGb3JtRWxlbWVudEtleT4gewotICAgIHN0YXRpYyB2b2lk
IGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb3JtRWxlbWVudEtleSYgc2xvdCkgeyBuZXcgKE5vdE51
bGwsICZzbG90KSBGb3JtRWxlbWVudEtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7IH0K
LSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb3JtRWxlbWVudEtleSYgdmFs
dWUpIHsgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KLX07Ci0KIGVu
dW0gUGFnZXNob3dFdmVudFBlcnNpc3RlbmNlIHsKICAgICBQYWdlc2hvd0V2ZW50Tm90UGVyc2lz
dGVkID0gMCwKICAgICBQYWdlc2hvd0V2ZW50UGVyc2lzdGVkID0gMQpAQCAtNTM0LDE3ICs0OTAs
MTAgQEAgcHVibGljOgogICAgIGJvb2wgdXNlc0xpbmtSdWxlcygpIGNvbnN0IHsgcmV0dXJuIGxp
bmtDb2xvcigpICE9IHZpc2l0ZWRMaW5rQ29sb3IoKSB8fCBtX3VzZXNMaW5rUnVsZXM7IH0KICAg
ICB2b2lkIHNldFVzZXNMaW5rUnVsZXMoYm9vbCBiKSB7IG1fdXNlc0xpbmtSdWxlcyA9IGI7IH0K
IAotICAgIC8vIE1hY2hpbmVyeSBmb3Igc2F2aW5nIGFuZCByZXN0b3Jpbmcgc3RhdGUgd2hlbiB5
b3UgbGVhdmUgYW5kIHRoZW4gZ28gYmFjayB0byBhIHBhZ2UuCi0gICAgdm9pZCByZWdpc3RlckZv
cm1FbGVtZW50V2l0aFN0YXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqIGNvbnRy
b2wpIHsgbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuYWRkKGNvbnRyb2wpOyB9Ci0gICAgdm9pZCB1
bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUoSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZSogY29udHJvbCkgeyBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5yZW1vdmUoY29udHJvbCk7
IH0KLSAgICBWZWN0b3I8U3RyaW5nPiBmb3JtRWxlbWVudHNTdGF0ZSgpIGNvbnN0OworICAgIC8v
IE5ldmVyIHJldHVybnMgMC4KKyAgICBGb3JtQ29udHJvbGxlciogZm9ybUNvbnRyb2xsZXIoKTsK
KyAgICBWZWN0b3I8U3RyaW5nPiBmb3JtRWxlbWVudHNTdGF0ZSgpOwogICAgIHZvaWQgc2V0U3Rh
dGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKLSAgICBib29sIGhh
c1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkgY29uc3Q7Ci0gICAgYm9vbCB0YWtlU3RhdGVGb3JG
b3JtRWxlbWVudChBdG9taWNTdHJpbmdJbXBsKiBuYW1lLCBBdG9taWNTdHJpbmdJbXBsKiB0eXBl
LCBTdHJpbmcmIHN0YXRlKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3Jt
QXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7Ci0gICAg
dm9pZCByZXNldEZvcm1FbGVtZW50c093bmVyKCk7CiAKICAgICBGcmFtZVZpZXcqIHZpZXcoKSBj
b25zdDsgLy8gY2FuIGJlIE5VTEwKICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lOyB9IC8vIGNhbiBiZSBOVUxMCkBAIC0xMDM5LDggKzk4OCw2IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogCi0gICAgQ2hlY2tl
ZFJhZGlvQnV0dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucygpIHsgcmV0dXJuIG1fY2hlY2tlZFJh
ZGlvQnV0dG9uczsgfQotICAgIAogI2lmIEVOQUJMRShTVkcpCiAgICAgY29uc3QgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zKiBzdmdFeHRlbnNpb25zKCk7CiAgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
KiBhY2Nlc3NTVkdFeHRlbnNpb25zKCk7CkBAIC0xMzI5LDE0ICsxMjc2LDggQEAgcHJpdmF0ZToK
ICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PE5vZGUqLCAzMj4gU3R5bGVTaGVldENhbmRpZGF0ZUxp
c3RIYXNoU2V0OwogICAgIFN0eWxlU2hlZXRDYW5kaWRhdGVMaXN0SGFzaFNldCBtX3N0eWxlU2hl
ZXRDYW5kaWRhdGVOb2RlczsgLy8gQWxsIG9mIHRoZSBub2RlcyB0aGF0IGNvdWxkIHBvdGVudGlh
bGx5IHByb3ZpZGUgc3R5bGVzaGVldHMgdG8gdGhlIGRvY3VtZW50ICg8bGluaz4sIDxzdHlsZT4s
IDw/eG1sLXN0eWxlc2hlZXQ+KQogCi0gICAgdHlwZWRlZiBMaXN0SGFzaFNldDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlKiwgNjQ+IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQ7Ci0gICAg
Rm9ybUVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZTsKLSAgICB0eXBl
ZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+LCAzMj4gRm9ybUFz
c29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ7Ci0gICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlz
dEhhc2hTZXQgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZTsKKyAgICBPd25QdHI8Rm9y
bUNvbnRyb2xsZXI+IG1fZm9ybUNvbnRyb2xsZXI7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8Rm9y
bUVsZW1lbnRLZXksIFZlY3RvcjxTdHJpbmc+LCBGb3JtRWxlbWVudEtleUhhc2gsIEZvcm1FbGVt
ZW50S2V5SGFzaFRyYWl0cz4gRm9ybUVsZW1lbnRTdGF0ZU1hcDsKLSAgICBGb3JtRWxlbWVudFN0
YXRlTWFwIG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHM7Ci0gICAgCiAgICAgQ29sb3IgbV9saW5r
Q29sb3I7CiAgICAgQ29sb3IgbV92aXNpdGVkTGlua0NvbG9yOwogICAgIENvbG9yIG1fYWN0aXZl
TGlua0NvbG9yOwpAQCAtMTQxOSw4ICsxMzYwLDYgQEAgcHJpdmF0ZToKIAogICAgIEluaGVyaXRl
ZEJvb2wgbV9kZXNpZ25Nb2RlOwogICAgIAotICAgIENoZWNrZWRSYWRpb0J1dHRvbnMgbV9jaGVj
a2VkUmFkaW9CdXR0b25zOwotCiAgICAgT3duUHRyPEhUTUxDb2xsZWN0aW9uPiBtX2NvbGxlY3Rp
b25zW051bVVubmFtZWREb2N1bWVudENhY2hlZFR5cGVzXTsKICAgICBPd25QdHI8SFRNTEFsbENv
bGxlY3Rpb24+IG1fYWxsQ29sbGVjdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb3JtQ29udHJvbGxl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjliNGU5NDFjZmNmZjQwYWNmMzYyMTZjYzhhMTNhZjQxZTNhNzhi
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb3JtQ29udHJvbGxlci5j
cHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiSFRNTEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0Zvcm1Db250cm9sbGVyOjpGb3JtQ29udHJvbGxl
cigpCit7Cit9CisKK0Zvcm1Db250cm9sbGVyOjp+Rm9ybUNvbnRyb2xsZXIoKQoreworfQorCitW
ZWN0b3I8U3RyaW5nPiBGb3JtQ29udHJvbGxlcjo6Zm9ybUVsZW1lbnRzU3RhdGUoKSBjb25zdAor
eworICAgIFZlY3RvcjxTdHJpbmc+IHN0YXRlVmVjdG9yOworICAgIHN0YXRlVmVjdG9yLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuc2l6ZSgpICogMyk7Cisg
ICAgdHlwZWRlZiBGb3JtRWxlbWVudExpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRv
cjsKKyAgICBJdGVyYXRvciBlbmQgPSBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5lbmQoKTsKKyAg
ICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUq
IGVsZW1lbnRXaXRoU3RhdGUgPSAqaXQ7CisgICAgICAgIGlmICghZWxlbWVudFdpdGhTdGF0ZS0+
c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoIWVsZW1lbnRXaXRoU3Rh
dGUtPnNhdmVGb3JtQ29udHJvbFN0YXRlKHZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoZWxlbWVudFdpdGhTdGF0ZS0+Zm9ybUNvbnRyb2xO
YW1lKCkuc3RyaW5nKCkpOworICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoZWxlbWVudFdpdGhT
dGF0ZS0+Zm9ybUNvbnRyb2xUeXBlKCkuc3RyaW5nKCkpOworICAgICAgICBzdGF0ZVZlY3Rvci5h
cHBlbmQodmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gc3RhdGVWZWN0b3I7Cit9CisKK3ZvaWQg
Rm9ybUNvbnRyb2xsZXI6OnNldFN0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBzdGF0ZVZlY3RvcikKK3sKKyAgICAvLyBXYWxrIHRoZSBzdGF0ZSB2ZWN0b3IgYmFj
a3dhcmRzIHNvIHRoYXQgdGhlIHZhbHVlIHRvIHVzZSBmb3IgZWFjaAorICAgIC8vIG5hbWUvdHlw
ZSBwYWlyIGZpcnN0IGlzIHRoZSBvbmUgYXQgdGhlIGVuZCBvZiBlYWNoIGluZGl2aWR1YWwgdmVj
dG9yCisgICAgLy8gaW4gdGhlIEZvcm1FbGVtZW50U3RhdGVNYXAuIFdlJ3JlIHVzaW5nIHRoZW0g
bGlrZSBzdGFja3MuCisgICAgdHlwZWRlZiBGb3JtRWxlbWVudFN0YXRlTWFwOjppdGVyYXRvciBJ
dGVyYXRvcjsKKyAgICBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5jbGVhcigpOworICAgIGZvciAo
c2l6ZV90IGkgPSBzdGF0ZVZlY3Rvci5zaXplKCkgLyAzICogMzsgaTsgaSAtPSAzKSB7CisgICAg
ICAgIEF0b21pY1N0cmluZyBhID0gc3RhdGVWZWN0b3JbaSAtIDNdOworICAgICAgICBBdG9taWNT
dHJpbmcgYiA9IHN0YXRlVmVjdG9yW2kgLSAyXTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBjID0g
c3RhdGVWZWN0b3JbaSAtIDFdOworICAgICAgICBGb3JtRWxlbWVudEtleSBrZXkoYS5pbXBsKCks
IGIuaW1wbCgpKTsKKyAgICAgICAgSXRlcmF0b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1l
bnRzLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHMuZW5kKCkpCisgICAgICAgICAgICBpdC0+c2Vjb25kLmFwcGVuZChjKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiB2KDEpOworICAgICAgICAgICAgdlswXSA9
IGM7CisgICAgICAgICAgICBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLnNldChrZXksIHYpOwor
ICAgICAgICB9CisgICAgfQorfQorCitib29sIEZvcm1Db250cm9sbGVyOjpoYXNTdGF0ZUZvck5l
d0Zvcm1FbGVtZW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3N0YXRlRm9yTmV3Rm9ybUVs
ZW1lbnRzLmlzRW1wdHkoKTsKK30KKworYm9vbCBGb3JtQ29udHJvbGxlcjo6dGFrZVN0YXRlRm9y
Rm9ybUVsZW1lbnQoQXRvbWljU3RyaW5nSW1wbCogbmFtZSwgQXRvbWljU3RyaW5nSW1wbCogdHlw
ZSwgU3RyaW5nJiBzdGF0ZSkKK3sKKyAgICB0eXBlZGVmIEZvcm1FbGVtZW50U3RhdGVNYXA6Oml0
ZXJhdG9yIEl0ZXJhdG9yOworICAgIEl0ZXJhdG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVt
ZW50cy5maW5kKEZvcm1FbGVtZW50S2V5KG5hbWUsIHR5cGUpKTsKKyAgICBpZiAoaXQgPT0gbV9z
dGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IEFTU0VSVChpdC0+c2Vjb25kLnNpemUoKSk7CisgICAgc3RhdGUgPSBpdC0+c2Vjb25kLmxhc3Qo
KTsKKyAgICBpZiAoaXQtPnNlY29uZC5zaXplKCkgPiAxKQorICAgICAgICBpdC0+c2Vjb25kLnJl
bW92ZUxhc3QoKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMu
cmVtb3ZlKGl0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGb3JtQ29udHJvbGxlcjo6
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICBBU1NFUlQodG9IVE1MRWxlbWVudChlbGVtZW50KS0+ZmFzdEhh
c0F0dHJpYnV0ZShmb3JtQXR0cikpOworICAgIG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1
dGUuYWRkKGVsZW1lbnQpOworfQorCit2b2lkIEZvcm1Db250cm9sbGVyOjp1bnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQp
Cit7CisgICAgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZS5yZW1vdmUoZWxlbWVudCk7
Cit9CisKK3ZvaWQgRm9ybUNvbnRyb2xsZXI6OnJlc2V0Rm9ybUVsZW1lbnRzT3duZXIoKQorewor
ICAgIHR5cGVkZWYgRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIEl0
ZXJhdG9yOworICAgIEl0ZXJhdG9yIGVuZCA9IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1
dGUuZW5kKCk7CisgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1B
dHRyaWJ1dGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+cmVzZXRG
b3JtT3duZXIoKTsKK30KKworRm9ybUVsZW1lbnRLZXk6OkZvcm1FbGVtZW50S2V5KEF0b21pY1N0
cmluZ0ltcGwqIG5hbWUsIEF0b21pY1N0cmluZ0ltcGwqIHR5cGUpCisgICAgOiBtX25hbWUobmFt
ZSksIG1fdHlwZSh0eXBlKQoreworICAgIHJlZigpOworfQorCitGb3JtRWxlbWVudEtleTo6fkZv
cm1FbGVtZW50S2V5KCkKK3sKKyAgICBkZXJlZigpOworfQorCitGb3JtRWxlbWVudEtleTo6Rm9y
bUVsZW1lbnRLZXkoY29uc3QgRm9ybUVsZW1lbnRLZXkmIG90aGVyKQorICAgIDogbV9uYW1lKG90
aGVyLm5hbWUoKSksIG1fdHlwZShvdGhlci50eXBlKCkpCit7CisgICAgcmVmKCk7Cit9CisKK0Zv
cm1FbGVtZW50S2V5JiBGb3JtRWxlbWVudEtleTo6b3BlcmF0b3I9KGNvbnN0IEZvcm1FbGVtZW50
S2V5JiBvdGhlcikKK3sKKyAgICBvdGhlci5yZWYoKTsKKyAgICBkZXJlZigpOworICAgIG1fbmFt
ZSA9IG90aGVyLm5hbWUoKTsKKyAgICBtX3R5cGUgPSBvdGhlci50eXBlKCk7CisgICAgcmV0dXJu
ICp0aGlzOworfQorCit2b2lkIEZvcm1FbGVtZW50S2V5OjpyZWYoKSBjb25zdAoreworICAgIGlm
IChuYW1lKCkpCisgICAgICAgIG5hbWUoKS0+cmVmKCk7CisgICAgaWYgKHR5cGUoKSkKKyAgICAg
ICAgdHlwZSgpLT5yZWYoKTsKK30KKwordm9pZCBGb3JtRWxlbWVudEtleTo6ZGVyZWYoKSBjb25z
dAoreworICAgIGlmIChuYW1lKCkpCisgICAgICAgIG5hbWUoKS0+ZGVyZWYoKTsKKyAgICBpZiAo
dHlwZSgpKQorICAgICAgICB0eXBlKCktPmRlcmVmKCk7Cit9CisKK3Vuc2lnbmVkIEZvcm1FbGVt
ZW50S2V5SGFzaDo6aGFzaChjb25zdCBGb3JtRWxlbWVudEtleSYga2V5KQoreworICAgIHJldHVy
biBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKEZvcm1FbGVtZW50S2V5KT4oJmtleSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0Zvcm1Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRm9ybUNvbnRyb2xs
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42MzBhZGM4YTZmNDUyYTBkOGUzYzU4ZmI3ZGJhZTI3YmJhMzViNjAw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Zvcm1Db250cm9sbGVyLmgK
QEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIEZvcm1Db250cm9sbGVyX2gKKyNkZWZpbmUgRm9ybUNvbnRyb2xsZXJfaAorCisj
aW5jbHVkZSAiQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKK2Ns
YXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU7CisKK2NsYXNzIEZvcm1FbGVtZW50
S2V5IHsKK3B1YmxpYzoKKyAgICBGb3JtRWxlbWVudEtleShBdG9taWNTdHJpbmdJbXBsKiA9IDAs
IEF0b21pY1N0cmluZ0ltcGwqID0gMCk7CisgICAgfkZvcm1FbGVtZW50S2V5KCk7CisgICAgRm9y
bUVsZW1lbnRLZXkoY29uc3QgRm9ybUVsZW1lbnRLZXkmKTsKKyAgICBGb3JtRWxlbWVudEtleSYg
b3BlcmF0b3I9KGNvbnN0IEZvcm1FbGVtZW50S2V5Jik7CisKKyAgICBBdG9taWNTdHJpbmdJbXBs
KiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgQXRvbWljU3RyaW5nSW1wbCog
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgLy8gSGFzaCB0YWJsZSBkZWxl
dGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBv
ciBkZXN0cm95ZWQuCisgICAgRm9ybUVsZW1lbnRLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKSA6IG1fbmFtZShoYXNoVGFibGVEZWxldGVkVmFsdWUoKSkgeyB9CisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZSA9PSBoYXNoVGFi
bGVEZWxldGVkVmFsdWUoKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgcmVmKCkgY29uc3Q7Cisg
ICAgdm9pZCBkZXJlZigpIGNvbnN0OworCisgICAgc3RhdGljIEF0b21pY1N0cmluZ0ltcGwqIGhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXRvbWljU3Ry
aW5nSW1wbCo+KC0xKTsgfQorCisgICAgQXRvbWljU3RyaW5nSW1wbCogbV9uYW1lOworICAgIEF0
b21pY1N0cmluZ0ltcGwqIG1fdHlwZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgRm9ybUVsZW1lbnRLZXkmIGEsIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBiKQoreworICAgIHJl
dHVybiBhLm5hbWUoKSA9PSBiLm5hbWUoKSAmJiBhLnR5cGUoKSA9PSBiLnR5cGUoKTsKK30KKwor
c3RydWN0IEZvcm1FbGVtZW50S2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgRm9ybUVsZW1lbnRLZXkmKTsKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb3JtRWxl
bWVudEtleSYgYSwgY29uc3QgRm9ybUVsZW1lbnRLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKK307CisKK3N0cnVjdCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNI
YXNoVHJhaXRzPEZvcm1FbGVtZW50S2V5PiB7CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVs
ZXRlZFZhbHVlKEZvcm1FbGVtZW50S2V5JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3QpIEZv
cm1FbGVtZW50S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQorICAgIHN0YXRpYyBi
b29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvcm1FbGVtZW50S2V5JiB2YWx1ZSkgeyByZXR1cm4g
dmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQorfTsKKworY2xhc3MgRm9ybUNvbnRy
b2xsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEZvcm1Db250cm9sbGVyPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGb3JtQ29udHJvbGxl
cik7CisgICAgfQorICAgIH5Gb3JtQ29udHJvbGxlcigpOworCisgICAgQ2hlY2tlZFJhZGlvQnV0
dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucygpIHsgcmV0dXJuIG1fY2hlY2tlZFJhZGlvQnV0dG9u
czsgfQorICAgIAorICAgIHZvaWQgcmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZShIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKiBjb250cm9sKSB7IG1fZm9ybUVsZW1lbnRzV2l0aFN0
YXRlLmFkZChjb250cm9sKTsgfQorICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0
YXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqIGNvbnRyb2wpIHsgbV9mb3JtRWxl
bWVudHNXaXRoU3RhdGUucmVtb3ZlKGNvbnRyb2wpOyB9CisgICAgLy8gVGhpcyBzaG91bGQgYmUg
Y2FsbGxlZCBvbmx5IGJ5IERvY3VtZW50Ojpmb3JtRWxlbWVudHNTdGF0ZSgpLgorICAgIFZlY3Rv
cjxTdHJpbmc+IGZvcm1FbGVtZW50c1N0YXRlKCkgY29uc3Q7CisgICAgLy8gVGhpcyBzaG91bGQg
YmUgY2FsbGxlZCBvbmx5IGJ5IERvY3VtZW50OjpzZXRTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygp
LgorICAgIHZvaWQgc2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKTsKKyAgICBib29sIGhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkgY29uc3Q7CisgICAg
Ym9vbCB0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChBdG9taWNTdHJpbmdJbXBsKiBuYW1lLCBBdG9t
aWNTdHJpbmdJbXBsKiB0eXBlLCBTdHJpbmcmIHN0YXRlKTsKKworICAgIHZvaWQgcmVnaXN0ZXJG
b3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOworICAg
IHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0
ZWRFbGVtZW50Kik7CisgICAgdm9pZCByZXNldEZvcm1FbGVtZW50c093bmVyKCk7CisKK3ByaXZh
dGU6CisgICAgRm9ybUNvbnRyb2xsZXIoKTsKKworICAgIENoZWNrZWRSYWRpb0J1dHRvbnMgbV9j
aGVja2VkUmFkaW9CdXR0b25zOworCisgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlKiwgNjQ+IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQ7CisgICAg
Rm9ybUVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZTsKKyAgICB0eXBl
ZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+LCAzMj4gRm9ybUFz
c29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlz
dEhhc2hTZXQgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZTsKKworICAgIHR5cGVkZWYg
SGFzaE1hcDxGb3JtRWxlbWVudEtleSwgVmVjdG9yPFN0cmluZz4sIEZvcm1FbGVtZW50S2V5SGFz
aCwgRm9ybUVsZW1lbnRLZXlIYXNoVHJhaXRzPiBGb3JtRWxlbWVudFN0YXRlTWFwOworICAgIEZv
cm1FbGVtZW50U3RhdGVNYXAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50czsKKyAgICAKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9G
b3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IDM5MGMxNDliYTQ0YjQ1YTI4YzNhYjJkOGFj
NDMwNzQ3YmIzNDVjZTMuLjM5ZmU3MWQ4OGQ3ZmM3MzhjNjE4MDAzOTgxYzkwNGUxYzkzY2JmYWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKQEAg
LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb3JtQXNzb2Np
YXRlZEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNTcsNyArNTgsNyBAQCB2b2lkIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KQog
ewogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKICAgICBp
ZiAob2xkRG9jdW1lbnQgJiYgZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0g
ICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0
ZSh0aGlzKTsKKyAgICAgICAgb2xkRG9jdW1lbnQtPmZvcm1Db250cm9sbGVyKCktPnVucmVnaXN0
ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwogfQogCiB2b2lkIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50
KQpAQCAtNjgsMTQgKzY5LDE0IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRl
ZEludG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCiAKICAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpcyk7CiAgICAgaWYgKGVsZW1lbnQtPmZhc3RIYXNB
dHRyaWJ1dGUoZm9ybUF0dHIpKQotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT5yZWdpc3Rl
ckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisgICAgICAgIGVsZW1lbnQtPmRv
Y3VtZW50KCktPmZvcm1Db250cm9sbGVyKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0
dHJpYnV0ZSh0aGlzKTsKIH0KIAogdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRG
cm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQogewogICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmlu
RG9jdW1lbnQoKSAmJiBlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKLSAgICAg
ICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRy
aWJ1dGUodGhpcyk7CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPmZvcm1Db250cm9sbGVy
KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwogICAgIC8v
IElmIHRoZSBmb3JtIGFuZCBlbGVtZW50IGFyZSBib3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNl
cnZlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBmb3JtLgogICAgIC8vIE90aGVyd2lzZSwgbnVsbCBv
dXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2Yg
ZWxlbWVudHMuCiAgICAgaWYgKG1fZm9ybSAmJiBlbGVtZW50LT5oaWdoZXN0QW5jZXN0b3IoKSAh
PSBtX2Zvcm0tPmhpZ2hlc3RBbmNlc3RvcigpKQpAQCAtMTUyLDcgKzE1Myw3IEBAIHZvaWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hhbmdlZCgpCiAgICAgaWYgKCFlbGVt
ZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgewogICAgICAgICAvLyBUaGUgZm9ybSBh
dHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3JtIG93bmVyIGhlcmUuCiAgICAg
ICAgIHNldEZvcm0oZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpKTsKLSAgICAgICAgZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhp
cyk7CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPmZvcm1Db250cm9sbGVyKCktPnVucmVn
aXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwogICAgIH0gZWxzZQogICAg
ICAgICByZXNldEZvcm1Pd25lcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5jcHAKaW5kZXggYmY5NGM1NGQ5MmMy
M2IwN2MxNDU3N2E5ZmExNjIzMWRmN2Q4NTZkYS4uOTRhZWFkNDM2NGFiNmZlODBiY2Y0N2Y3YzRm
NzRhMWI5OGE0N2YwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5o
IgogCisjaW5jbHVkZSAiRm9ybUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1l
bnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIsMTkgKzMzLDE5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVu
dCh0YWdOYW1lLCBkb2MsIGYpCiB7Ci0gICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVu
dFdpdGhTdGF0ZSh0aGlzKTsKKyAgICBkb2N1bWVudCgpLT5mb3JtQ29udHJvbGxlcigpLT5yZWdp
c3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOwogfQogCiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjp+SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpCiB7Ci0gICAg
ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOworICAgIGRv
Y3VtZW50KCktPmZvcm1Db250cm9sbGVyKCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0
ZSh0aGlzKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRN
b3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpCiB7CiAgICAgaWYgKG9sZERv
Y3VtZW50KQotICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0
YXRlKHRoaXMpOwotICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUo
dGhpcyk7CisgICAgICAgIG9sZERvY3VtZW50LT5mb3JtQ29udHJvbGxlcigpLT51bnJlZ2lzdGVy
Rm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7CisgICAgZG9jdW1lbnQoKS0+Zm9ybUNvbnRyb2xs
ZXIoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKICAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChvbGREb2N1bWVudCk7CiB9CiAKQEAg
LTcyLDkgKzczLDkgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpmaW5p
c2hQYXJzaW5nQ2hpbGRyZW4oKQogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudCogZG9j
ID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jLT5oYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygp
KSB7CisgICAgaWYgKGRvYy0+Zm9ybUNvbnRyb2xsZXIoKS0+aGFzU3RhdGVGb3JOZXdGb3JtRWxl
bWVudHMoKSkgewogICAgICAgICBTdHJpbmcgc3RhdGU7Ci0gICAgICAgIGlmIChkb2MtPnRha2VT
dGF0ZUZvckZvcm1FbGVtZW50KG5hbWUoKS5pbXBsKCksIHR5cGUoKS5pbXBsKCksIHN0YXRlKSkK
KyAgICAgICAgaWYgKGRvYy0+Zm9ybUNvbnRyb2xsZXIoKS0+dGFrZVN0YXRlRm9yRm9ybUVsZW1l
bnQobmFtZSgpLmltcGwoKSwgdHlwZSgpLmltcGwoKSwgc3RhdGUpKQogICAgICAgICAgICAgcmVz
dG9yZUZvcm1Db250cm9sU3RhdGUoc3RhdGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBlYTU0YjkzYmE4MmEyNDE1ZjVjODllNzFjN2IyZWEz
OWMxYTEwN2EzLi43MTliNDZlYWMxMWM5NzQyYTM3MzczNDU4MzI5NGNjYzljZmIyMzZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9y
bURhdGEuaCIKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUu
aCIKQEAgLTE0NCw3ICsxNDUsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZGlkTm90aWZ5RGVz
Y2VuZGFudEluc2VydGlvbnMoQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbgogICAgIEFTU0VS
VChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpKTsKICAgICBIVE1MRWxlbWVudDo6ZGlkTm90
aWZ5RGVzY2VuZGFudEluc2VydGlvbnMoaW5zZXJ0aW9uUG9pbnQpOwogICAgIGlmIChoYXNJRCgp
KQotICAgICAgICBkb2N1bWVudCgpLT5yZXNldEZvcm1FbGVtZW50c093bmVyKCk7CisgICAgICAg
IGRvY3VtZW50KCktPmZvcm1Db250cm9sbGVyKCktPnJlc2V0Rm9ybUVsZW1lbnRzT3duZXIoKTsK
IH0KIAogc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2RlKiBuKQpAQCAtMTYzLDcgKzE2
NCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiBp
bnNlcnRpb25Qb2ludCkKICAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5mb3JtUmVtb3Zl
ZEZyb21UcmVlKHJvb3QpOwogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Q
b2ludCk7CiAgICAgaWYgKGluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkgJiYgaGFzSUQoKSkK
LSAgICAgICAgZG9jdW1lbnQoKS0+cmVzZXRGb3JtRWxlbWVudHNPd25lcigpOworICAgICAgICBk
b2N1bWVudCgpLT5mb3JtQ29udHJvbGxlcigpLT5yZXNldEZvcm1FbGVtZW50c093bmVyKCk7CiB9
CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCogZXZlbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCAyMzExNDJlNWI2
NmU2YmQzOWUwOGFmYjMwNjM4ZGI5NTlmZjQ3ZWFiLi5jNmNmMWY0OTcxZTZhZDYyZGRiYzVmMzc5
ZGRiNzhiOTNjMzRjZThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5jbHVkZSAiRm9ybUNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiSFRNTERhdGFMaXN0RWxlbWVudC5oIgpAQCAtMTI3LDcgKzEyOCw3IEBA
IEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKICAgICAvLyBzZXRGb3JtKDAp
IG1heSByZWdpc3RlciB0aGlzIHRvIGEgZG9jdW1lbnQtbGV2ZWwgcmFkaW8gYnV0dG9uIGdyb3Vw
LgogICAgIC8vIFdlIHNob3VsZCB1bnJlZ2lzdGVyIGl0IHRvIGF2b2lkIGFjY2Vzc2luZyBhIGRl
bGV0ZWQgb2JqZWN0LgogICAgIGlmIChpc1JhZGlvQnV0dG9uKCkpCi0gICAgICAgIGRvY3VtZW50
KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgICAgIGRv
Y3VtZW50KCktPmZvcm1Db250cm9sbGVyKCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVC
dXR0b24odGhpcyk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6
Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QKQEAgLTEzNzQsNyArMTM3NSw3IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KQog
ICAgICAgICBpZiAobmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2spCiAgICAgICAgICAgICBvbGREb2N1
bWVudC0+dW5yZWdpc3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CiAg
ICAgICAgIGlmIChpc1JhZGlvQnV0dG9uKCkpCi0gICAgICAgICAgICBvbGREb2N1bWVudC0+Y2hl
Y2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICAgICAgICAgIG9sZERv
Y3VtZW50LT5mb3JtQ29udHJvbGxlcigpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0
dG9uKHRoaXMpOwogICAgIH0KIAogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaykKQEAg
LTE2NzIsNyArMTY3Myw3IEBAIENoZWNrZWRSYWRpb0J1dHRvbnMqIEhUTUxJbnB1dEVsZW1lbnQ6
OmNoZWNrZWRSYWRpb0J1dHRvbnMoKSBjb25zdAogICAgIGlmIChIVE1MRm9ybUVsZW1lbnQqIGZv
cm1FbGVtZW50ID0gZm9ybSgpKQogICAgICAgICByZXR1cm4gJmZvcm1FbGVtZW50LT5jaGVja2Vk
UmFkaW9CdXR0b25zKCk7CiAgICAgaWYgKGluRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuICZk
b2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCk7CisgICAgICAgIHJldHVybiAmZG9jdW1l
bnQoKS0+Zm9ybUNvbnRyb2xsZXIoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpOwogICAgIHJldHVy
biAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDEwNWRl
YjcxYTM0M2ZlZDhhNjRkYzBlZDRkYzViOTgwODVkYmIxOTEuLmE1YzE5OTgzNWJmZmUyM2ZhY2Qw
YWI5ZmM0MjY3OGRkNDdkM2E1ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2hl
Y2tlZFJhZGlvQnV0dG9uczsKIGNsYXNzIEZpbGVMaXN0OwogY2xhc3MgSFRNTERhdGFMaXN0RWxl
bWVudDsKIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgKaW5kZXggMjc5MDY2NDNiNGIxZTc4YTcy
N2FmMjU1NGZiYjc1YmVjOTJiY2Y3Zi4uMzY3YzBmZTI2ODU2YmY3NmQxZDRlNjg0MmE2ZmNlMWQ5
NWZiM2NhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5oCkBAIC03NSw2ICs3NSw3IEBAIGVudW0gV2hpdGVzcGFjZU1vZGUgewogY2xh
c3MgQXRvbWljSFRNTFRva2VuOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OworY2xh
c3MgSFRNTEZvcm1FbGVtZW50OwogCiBjbGFzcyBIVE1MQ29uc3RydWN0aW9uU2l0ZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSFRNTENvbnN0cnVjdGlvblNpdGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146495</attachid>
            <date>2012-06-08 00:03:58 -0700</date>
            <delta_ts>2012-06-08 02:54:13 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-88497-20120608160357.patch</filename>
            <type>text/plain</type>
            <size>41129</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTU0YzJjYTg3NTQwMmE3
OTMxNDM3ZGI4YmFhMmQ2NWY1MmZkZjk1My4uNTY2MDYyYmZlZTQ3ZjZhZGNiOGNmMjEyMTg3MDY1
NzQ5YTMyNjRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA2LTA3ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBNb3ZlIGZvcm0tcmVsYXRl
ZCBmdW5jdGlvbnMgb2YgRG9jdW1lbnQgdG8gRm9ybUNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDk3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBsb3Qgb2YgZmlsZXMgZGVwZW5kIG9u
IERvY3VtZW50LmguIFdlIGhhZCB0byBidWlsZCBtYW55IGZpbGVzIHdoZW4gd2UKKyAgICAgICAg
dG91Y2hlZCBmb3JtLXJlbGF0ZWQgZmVhdHVyZXMgaW4gRG9jdW1lbnQuaCBvcgorICAgICAgICBD
aGVja2VkUmFkaW9CdXR0b25zLmguIFRoaXMgcGF0Y2ggcmVkdWNlcyBzdWNoIHBhaW4uCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiBKdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDogQWRkIEZvcm1Db250cm9sbGVyLmNwcCBhbmQvb3IgRm9ybUNvbnRyb2xsZXIu
aC4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBkaXR0by4KKyAgICAgICAgKiBUYXJn
ZXQucHJpOiBkaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IGRpdHRvLgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBkaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IGRpdHRvLgorCisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDogUmVtb3ZlZCBmb3JtLXJlbGVhdGVkIGZlYXR1cmVzIGV4Y2VwdCB0aGUgZm9sbG93
aW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpmb3JtQ29udHJvbGxlcik6IEFjY2Vz
c29yIGZvciBhIEZvcm1Db250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZv
cm1FbGVtZW50c1N0YXRlKToKKyAgICAgICAgSnVzdCByZXR1cm5zIEZvcm1Db250cm9sbGVyOjpm
b3JtRWxlbWVudHNTdGF0ZSgpLgorICAgICAgICBXZSBkb24ndCBjcmVhdGUgbmV3IEZvcm1Db250
cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFN0YXRlRm9yTmV3Rm9ybUVs
ZW1lbnRzKToKKyAgICAgICAgSnVzdCByZXR1cm5zIEZvcm1Db250cm9sbGVyOjpzZXRTdGF0ZUZv
ck5ld0Zvcm1FbGVtZW50cygpLgorICAgICAgICBXZSBkb24ndCBjcmVhdGUgbmV3IEZvcm1Db250
cm9sbGVyIGlmIHRoZSBzcGVjaWZpZWQgdmVjdG9yIGlzIGVtcHR5LgorICAgICAgICAqIGRvbS9E
b2N1bWVudC5oOgorICAgICAgICBNb3ZlZCBmb3JtLXJlbGF0ZWQgZnVuY3Rpb25zIHRvIEZvcm1D
b250cm9sbGVyLgorCisgICAgICAgICogaHRtbC9Gb3JtQ29udHJvbGxlci5jcHA6IEFkZGVkLiBN
b3ZlZCBmcm9tIERvY3VtZW50LmNwcC4KKyAgICAgICAgKiBodG1sL0Zvcm1Db250cm9sbGVyLmg6
IEFkZGVkLiBNb3ZlZCBmcm9tIERvY3VtZW50LmgKKworICAgICAgICAqIGh0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmNwcDogVXNlIERvY3VtZW50Ojpmb3JtQ29udHJvbGxlcigpLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50byk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5j
cHA6IFVzZSBEb2N1bWVudDo6Zm9ybUNvbnRyb2xsZXIoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZmluaXNo
UGFyc2luZ0NoaWxkcmVuKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6IFVz
ZSBEb2N1bWVudDo6Zm9ybUNvbnRyb2xsZXIoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudDo6ZGlkTm90aWZ5RGVzY2VuZGFudEluc2VydGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcDogVXNlIERvY3VtZW50Ojpmb3JtQ29udHJvbGxlcigpLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y2hlY2tlZFJhZGlvQnV0dG9ucyk6CisgICAg
ICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIERlY2xhcmUgQ2hlY2tlZFJh
ZGlvQnV0dG9ucy4gSXQgd2FzIHByb3ZpZGVkIGJ5IERvY3VtZW50LmguCisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaDoKKyAgICAgICAgRGVjbGFyZSBIVE1MRm9y
bUVsZW1lbnQuIEl0IHdhcyBwcm92aWRlZCBieSBEb2N1bWVudC5oCisKIDIwMTItMDYtMDcgIEFs
ZXhlaSBGaWxpcHBvdiAgPGFsZXhlaWZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IHJldXNlIGVkZ2VfY291bnQgZmllbGQgb2YgaGVhcCBzbmFwc2hvdCB0byBzdG9yZSBy
ZXRhaW5lZCBzaXplCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDdiOTc3ODM0NjM5MWU2MDQ0OTI5
ZGM0MGQyNjM1OTlhYjcwYjkzYTcuLjQzNmUxYzBkOGVjZjVjNzRiN2JkMzcxNWFiMWQ0NjU4YzZh
ZGY1NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC03NjQsNiArNzY0LDcgQEAgU0VUKFdlYkNv
cmVfU09VUkNFUwogICAgIGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCiAgICAgaHRtbC9G
aWxlSW5wdXRUeXBlLmNwcAogICAgIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAorICAg
IGh0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCiAgICAgaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCiAgICAg
aHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAKICAgICBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYTljNzVlMjYwMzcyZDBjM2JhZjBj
YjFmMjkyZmU1MDgwM2EwNTA2Zi4uM2RhNTg5MTA1OTExZjk2MTczMDBkYWZjNGZkMDM5Y2NlZTNh
NjFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMjYyLDYgKzIyNjIsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlw
ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggXAorCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9odG1sL0Zv
cm1Db250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaCBcCiAJU291cmNlL1dlYkNvcmUv
aHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMTUzZjEzOWMz
M2ViN2JjZDA4M2YyYjQyZDE4ZjMyOTExYWZkODJkZS4uYzI4ZGUzZmMyZTQzOWRmNTdjZTgyODcy
OWFjYzMzODUzNzg3OTcwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC03MzUsNiArNzM1LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgXAogICAgIGh0bWwvRmls
ZUlucHV0VHlwZS5jcHAgXAogICAgIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBcCisg
ICAgaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAgXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmNwcCBc
CiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXAogICAgIGh0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuY3BwIFwKQEAgLTE4OTAsNiArMTg5MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGh0bWwv
RE9NVG9rZW5MaXN0LmggXAogICAgIGh0bWwvRE9NVVJMLmggXAogICAgIGh0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmggXAorICAgIGh0bWwvRm9ybUNvbnRyb2xsZXIuaCBcCiAgICAgaHRtbC9G
b3JtRGF0YUxpc3QuaCBcCiAgICAgaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5oIFwKICAgICBo
dG1sL0hUTUxBbGxDb2xsZWN0aW9uLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDk5MjcwMjcyMWU2
YjEwZWU1MTE1YmRjYzVhNDM1ZGM1OThhNTFiOGYuLjk3N2MxOWIwYmVlZTU0ZmIyYjBhNTk3OGQ1
NWRmYzE1NTZkYTc1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU0NzQsNiArNTQ3NCw4IEBACiAg
ICAgICAgICAgICAnaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9G
aWxlSW5wdXRUeXBlLmgnLAogICAgICAgICAgICAgJ2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50
LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAnLAorICAgICAgICAg
ICAgJ2h0bWwvRm9ybUNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9Gb3JtRGF0YUxp
c3QuY3BwJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRhTGlzdC5oJywKICAgICAgICAgICAg
ICdodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGIxNmE5NjJlMGViMjBkZTA3NjczMDEzZjgwODA3
OGI2Y2Y3NmMwN2MuLjEyMzI5ZjEzNjFhMDg5ZTU2ZmI5YWQxMTFkOGE4ZjY3MDlkMjkzYzMgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01ODIw
Myw2ICs1ODIwMywxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxodG1sXEZvcm1Db250cm9sbGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGb3JtQ29udHJvbGxlci5oIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1E
YXRhTGlzdC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIxZDBjZmJmZDE4ZGQ2Yzc3NzEz
ODEyZjI2ZTAxN2Y1M2M5YjRiNWQuLmU3YTFlN2JkYmQ1YWIwYzZlMzA4OWY4ZjNiOGMzYzI3YzM1
NWRhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTYxMTUsNiArNjExNSw4IEBACiAJCUYzRjY4REE2MTQzQ0FDNUEwMEMyRjg4
NyAvKiBJbnNwZWN0b3JTdGF0ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjNGNjhEQTUxNDNDQUM1QTAwQzJGODg3IC8qIEluc3BlY3RvclN0
YXRlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjRFQUY0QUUxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RUFGNEFDMTBD
NzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAgKi87IH07CiAJCUY0RUFGNEFG
MTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRFQUY0QUQxMEM3NDJCMTAwOTEwMEQzIC8q
IE9wZW5UeXBlU2FuaXRpemVyLmggKi87IH07CisJCUY1MDY2NEY3MTU3RjUyREMwMEFDMjI2RiAv
KiBGb3JtQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTA2NjRGNTE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuY3Bw
ICovOyB9OworCQlGNTA2NjRGODE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MDY2NEY2MTU3
RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5oICovOyB9OwogCQlGNTE0MkM2OTEyM0Yx
MkIwMDBGNUJENEMgLyogTG9jYWxpemVkTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTE0MkM2ODEyM0YxMkIwMDBGNUJENEMgLyogTG9jYWxp
emVkTnVtYmVyLmggKi87IH07CiAJCUY1MkFENUU0MTUzNDI0NUYwMDU5RkJFNiAvKiBFbXB0eUNs
aWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjUyQUQ1RTMxNTM0MjQ1RjAwNTlGQkU2IC8qIEVtcHR5Q2xpZW50cy5jcHAgKi87IH07CiAJCUY1
NUIzREFEMTI1MUYxMkQwMDNFRjI2OSAvKiBCYXNlVGV4dElucHV0VHlwZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTVCM0Q3OTEyNTFGMTJEMDAz
RUYyNjkgLyogQmFzZVRleHRJbnB1dFR5cGUuY3BwICovOyB9OwpAQCAtMTMzNDIsNiArMTMzNDQs
OCBAQAogCQlGM0Y2OERBNTE0M0NBQzVBMDBDMkY4ODcgLyogSW5zcGVjdG9yU3RhdGVDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yU3RhdGVDbGllbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRFQUY0QUMxMEM3NDJCMTAwOTEwMEQz
IC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IE9wZW5UeXBlU2FuaXRpemVyLmNwcDsgcGF0aCA9IG9wZW50eXBlL09wZW5UeXBlU2Fu
aXRpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRFQUY0QUQxMEM3NDJC
MTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IE9wZW5UeXBlU2FuaXRpemVyLmg7IHBhdGggPSBvcGVudHlwZS9PcGVuVHlwZVNh
bml0aXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNTA2NjRGNTE1N0Y1MkRD
MDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9ybUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGNTA2NjRGNjE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjUxNDJDNjgxMjNGMTJCMDAwRjVCRDRDIC8qIExvY2FsaXplZE51
bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NhbGl6ZWROdW1iZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUyM0QyM0IwMkRFNDM5NjAxODYzNUNB
IC8qIEhUTUxEb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyM0MwMkRFNDM5NjAx
ODYzNUNBIC8qIEhUTUxEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xNzAwNyw2ICsxNzAxMSw4IEBA
CiAJCQkJRjU1QjNEOEExMjUxRjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1dFR5cGUuaCAqLywKIAkJ
CQk0QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCAq
LywKIAkJCQk0QTBEQTJGRDEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50
LmggKi8sCisJCQkJRjUwNjY0RjUxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNw
cCAqLywKKwkJCQlGNTA2NjRGNjE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuaCAq
LywKIAkJCQlBODEzNkQzNzA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmNwcCAqLywK
IAkJCQlBODEzNkQzNjA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmggKi8sCiAJCQkJ
OTcyMDVBQUQxMjM5MjhDQTAwQjE3MzgwIC8qIEZUUERpcmVjdG9yeURvY3VtZW50LmNwcCAqLywK
QEAgLTIyOTQxLDYgKzIyOTQ3LDcgQEAKIAkJCQlCQ0U0NDEzNjEyRjc0OTBCMDA5Qjg0QjggLyog
Rm9udFdpZHRoVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEEwREEyRkYxMjlCMjQxOTAw
QUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDA1
Q0VEMkEwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRjUwNjY0RjgxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTRDNzY3MDBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4NUI5MkJCMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTM2RDM4MDk3M0E4RTcwMEQ3NDQ2MyAvKiBG
b3JtRGF0YUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjYxMDgsNiArMjYxMTUsNyBAQAogCQkJ
CUE4MEU2Q0YxMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNEEwREEyRkUxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlEMDVDRUQyOTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0
QmxvY2tDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUY1MDY2NEY3MTU3RjUyREMwMEFD
MjI2RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY2RjBD
RTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg1Qjky
QkEwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBODEzNkQzOTA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggM2E5YmFmZjFlMTBiNjYyOGYxN2E1
MWNmZDZjZDcxN2NkM2JlYTAwNy4uZGRjYmVjM2Q1NjEwNzVlNTE2M2M0MTdjZTAxODRlZTdkNWRk
NmYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC03MSw3ICs3MSw3IEBACiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb3dUaHJlYWRDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmgiCisjaW5jbHVkZSAiRm9ybUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
QEAgLTkyLDcgKzkyLDYgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGlua0VsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lQ29s
bGVjdGlvbi5oIgpAQCAtMTYyNiw2ICsxNjI1LDI3IEBAIE5vZGU6Ok5vZGVUeXBlIERvY3VtZW50
Ojpub2RlVHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIERPQ1VNRU5UX05PREU7CiB9CiAKK0Zvcm1D
b250cm9sbGVyKiBEb2N1bWVudDo6Zm9ybUNvbnRyb2xsZXIoKQoreworICAgIGlmICghbV9mb3Jt
Q29udHJvbGxlcikKKyAgICAgICAgbV9mb3JtQ29udHJvbGxlciA9IEZvcm1Db250cm9sbGVyOjpj
cmVhdGUoKTsKKyAgICByZXR1cm4gbV9mb3JtQ29udHJvbGxlci5nZXQoKTsKK30KKworVmVjdG9y
PFN0cmluZz4gRG9jdW1lbnQ6OmZvcm1FbGVtZW50c1N0YXRlKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZm9ybUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAg
IHJldHVybiBtX2Zvcm1Db250cm9sbGVyLT5mb3JtRWxlbWVudHNTdGF0ZSgpOworfQorCit2b2lk
IERvY3VtZW50OjpzZXRTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgc3RhdGVWZWN0b3IpCit7CisgICAgaWYgKCFzdGF0ZVZlY3Rvci5zaXplKCkgJiYgIW1fZm9y
bUNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBmb3JtQ29udHJvbGxlcigpLT5zZXRT
dGF0ZUZvck5ld0Zvcm1FbGVtZW50cyhzdGF0ZVZlY3Rvcik7Cit9CisKIEZyYW1lVmlldyogRG9j
dW1lbnQ6OnZpZXcoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZyYW1lID8gbV9mcmFtZS0+dmll
dygpIDogMDsKQEAgLTQ3NDcsMjYgKzQ3NjcsNiBAQCB2b2lkIERvY3VtZW50OjpmaW5pc2hlZFBh
cnNpbmcoKQogICAgIH0KIH0KIAotVmVjdG9yPFN0cmluZz4gRG9jdW1lbnQ6OmZvcm1FbGVtZW50
c1N0YXRlKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBzdGF0ZVZlY3RvcjsKLSAgICBz
dGF0ZVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRl
LnNpemUoKSAqIDMpOwotICAgIHR5cGVkZWYgRm9ybUVsZW1lbnRMaXN0SGFzaFNldDo6Y29uc3Rf
aXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgSXRlcmF0b3IgZW5kID0gbV9mb3JtRWxlbWVudHNXaXRo
U3RhdGUuZW5kKCk7Ci0gICAgZm9yIChJdGVyYXRvciBpdCA9IG1fZm9ybUVsZW1lbnRzV2l0aFN0
YXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlKiBlbGVtZW50V2l0aFN0YXRlID0gKml0OwotICAgICAgICBpZiAoIWVs
ZW1lbnRXaXRoU3RhdGUtPnNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgaWYg
KCFlbGVtZW50V2l0aFN0YXRlLT5zYXZlRm9ybUNvbnRyb2xTdGF0ZSh2YWx1ZSkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5kKGVsZW1lbnRXaXRoU3Rh
dGUtPmZvcm1Db250cm9sTmFtZSgpLnN0cmluZygpKTsKLSAgICAgICAgc3RhdGVWZWN0b3IuYXBw
ZW5kKGVsZW1lbnRXaXRoU3RhdGUtPmZvcm1Db250cm9sVHlwZSgpLnN0cmluZygpKTsKLSAgICAg
ICAgc3RhdGVWZWN0b3IuYXBwZW5kKHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRlVmVj
dG9yOwotfQotCiBQYXNzUmVmUHRyPFhQYXRoRXhwcmVzc2lvbj4gRG9jdW1lbnQ6OmNyZWF0ZUV4
cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC00Nzk1LDk2ICs0Nzk1LDYgQEAgUGFzc1JlZlB0cjxY
UGF0aFJlc3VsdD4gRG9jdW1lbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwK
ICAgICByZXR1cm4gbV94cGF0aEV2YWx1YXRvci0+ZXZhbHVhdGUoZXhwcmVzc2lvbiwgY29udGV4
dE5vZGUsIHJlc29sdmVyLCB0eXBlLCByZXN1bHQsIGVjKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
c2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVj
dG9yKQotewotICAgIC8vIFdhbGsgdGhlIHN0YXRlIHZlY3RvciBiYWNrd2FyZHMgc28gdGhhdCB0
aGUgdmFsdWUgdG8gdXNlIGZvciBlYWNoCi0gICAgLy8gbmFtZS90eXBlIHBhaXIgZmlyc3QgaXMg
dGhlIG9uZSBhdCB0aGUgZW5kIG9mIGVhY2ggaW5kaXZpZHVhbCB2ZWN0b3IKLSAgICAvLyBpbiB0
aGUgRm9ybUVsZW1lbnRTdGF0ZU1hcC4gV2UncmUgdXNpbmcgdGhlbSBsaWtlIHN0YWNrcy4KLSAg
ICB0eXBlZGVmIEZvcm1FbGVtZW50U3RhdGVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwotICAgIG1f
Zm9ybUVsZW1lbnRzV2l0aFN0YXRlLmNsZWFyKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IHN0YXRl
VmVjdG9yLnNpemUoKSAvIDMgKiAzOyBpOyBpIC09IDMpIHsKLSAgICAgICAgQXRvbWljU3RyaW5n
IGEgPSBzdGF0ZVZlY3RvcltpIC0gM107Ci0gICAgICAgIEF0b21pY1N0cmluZyBiID0gc3RhdGVW
ZWN0b3JbaSAtIDJdOwotICAgICAgICBjb25zdCBTdHJpbmcmIGMgPSBzdGF0ZVZlY3RvcltpIC0g
MV07Ci0gICAgICAgIEZvcm1FbGVtZW50S2V5IGtleShhLmltcGwoKSwgYi5pbXBsKCkpOwotICAg
ICAgICBJdGVyYXRvciBpdCA9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZmluZChrZXkpOwot
ICAgICAgICBpZiAoaXQgIT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQoKSkKLSAgICAg
ICAgICAgIGl0LT5zZWNvbmQuYXBwZW5kKGMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHYoMSk7Ci0gICAgICAgICAgICB2WzBdID0gYzsKLSAgICAgICAgICAg
IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuc2V0KGtleSwgdik7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLWJvb2wgRG9jdW1lbnQ6Omhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIW1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuaXNFbXB0eSgpOwotfQot
Ci1ib29sIERvY3VtZW50Ojp0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChBdG9taWNTdHJpbmdJbXBs
KiBuYW1lLCBBdG9taWNTdHJpbmdJbXBsKiB0eXBlLCBTdHJpbmcmIHN0YXRlKQotewotICAgIHR5
cGVkZWYgRm9ybUVsZW1lbnRTdGF0ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgSXRlcmF0
b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmZpbmQoRm9ybUVsZW1lbnRLZXkobmFt
ZSwgdHlwZSkpOwotICAgIGlmIChpdCA9PSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmVuZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKGl0LT5zZWNvbmQuc2l6ZSgpKTsK
LSAgICBzdGF0ZSA9IGl0LT5zZWNvbmQubGFzdCgpOwotICAgIGlmIChpdC0+c2Vjb25kLnNpemUo
KSA+IDEpCi0gICAgICAgIGl0LT5zZWNvbmQucmVtb3ZlTGFzdCgpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5yZW1vdmUoaXQpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1Gb3JtRWxlbWVudEtleTo6Rm9ybUVsZW1lbnRLZXkoQXRvbWljU3RyaW5nSW1wbCog
bmFtZSwgQXRvbWljU3RyaW5nSW1wbCogdHlwZSkKLSAgICA6IG1fbmFtZShuYW1lKSwgbV90eXBl
KHR5cGUpCi17Ci0gICAgcmVmKCk7Ci19Ci0KLUZvcm1FbGVtZW50S2V5Ojp+Rm9ybUVsZW1lbnRL
ZXkoKQotewotICAgIGRlcmVmKCk7Ci19Ci0KLUZvcm1FbGVtZW50S2V5OjpGb3JtRWxlbWVudEtl
eShjb25zdCBGb3JtRWxlbWVudEtleSYgb3RoZXIpCi0gICAgOiBtX25hbWUob3RoZXIubmFtZSgp
KSwgbV90eXBlKG90aGVyLnR5cGUoKSkKLXsKLSAgICByZWYoKTsKLX0KLQotRm9ybUVsZW1lbnRL
ZXkmIEZvcm1FbGVtZW50S2V5OjpvcGVyYXRvcj0oY29uc3QgRm9ybUVsZW1lbnRLZXkmIG90aGVy
KQotewotICAgIG90aGVyLnJlZigpOwotICAgIGRlcmVmKCk7Ci0gICAgbV9uYW1lID0gb3RoZXIu
bmFtZSgpOwotICAgIG1fdHlwZSA9IG90aGVyLnR5cGUoKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLXZvaWQgRm9ybUVsZW1lbnRLZXk6OnJlZigpIGNvbnN0Ci17Ci0gICAgaWYgKG5hbWUoKSkK
LSAgICAgICAgbmFtZSgpLT5yZWYoKTsKLSAgICBpZiAodHlwZSgpKQotICAgICAgICB0eXBlKCkt
PnJlZigpOwotfQotCi12b2lkIEZvcm1FbGVtZW50S2V5OjpkZXJlZigpIGNvbnN0Ci17Ci0gICAg
aWYgKG5hbWUoKSkKLSAgICAgICAgbmFtZSgpLT5kZXJlZigpOwotICAgIGlmICh0eXBlKCkpCi0g
ICAgICAgIHR5cGUoKS0+ZGVyZWYoKTsKLX0KLQotdW5zaWduZWQgRm9ybUVsZW1lbnRLZXlIYXNo
OjpoYXNoKGNvbnN0IEZvcm1FbGVtZW50S2V5JiBrZXkpCi17Ci0gICAgcmV0dXJuIFN0cmluZ0hh
c2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoRm9ybUVsZW1lbnRLZXkpPigma2V5KTsKLX0KLQogY29u
c3QgVmVjdG9yPEljb25VUkw+JiBEb2N1bWVudDo6aWNvblVSTHMoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2ljb25VUkxzOwpAQCAtNDkwNiwyNSArNDgxNiw2IEBAIHZvaWQgRG9jdW1lbnQ6OmFk
ZEljb25VUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFN0cmluCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50V2l0
aEZvcm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlbGVtZW50KQotewotICAgIEFT
U0VSVCh0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSk7
Ci0gICAgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZS5hZGQoZWxlbWVudCk7Ci19Ci0K
LXZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBtX2Zvcm1FbGVtZW50c1dpdGhG
b3JtQXR0cmlidXRlLnJlbW92ZShlbGVtZW50KTsKLX0KLQotdm9pZCBEb2N1bWVudDo6cmVzZXRG
b3JtRWxlbWVudHNPd25lcigpCi17Ci0gICAgdHlwZWRlZiBGb3JtQXNzb2NpYXRlZEVsZW1lbnRM
aXN0SGFzaFNldDo6aXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgSXRlcmF0b3IgZW5kID0gbV9mb3Jt
RWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZS5lbmQoKTsKLSAgICBmb3IgKEl0ZXJhdG9yIGl0ID0g
bV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICgqaXQpLT5yZXNldEZvcm1Pd25lcigpOwotfQotCiB2b2lkIERvY3VtZW50Ojpz
ZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZShib29sIHVzZXNTZWN1cmVLZXlib2Fy
ZCkKIHsKICAgICBpZiAobV91c2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZSA9PSB1c2Vz
U2VjdXJlS2V5Ym9hcmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IGJjNjkyYTY1YTgxYWNjNWQx
NzE4NGYzYTRmMDZkZWIwNWI5MWVjYjEuLjJiN2QzMjNiOTAwZmNjZDNjNTZlY2U2OTExNjExMGNl
YjQ0ZWVkZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaWZuZGVm
IERvY3VtZW50X2gKICNkZWZpbmUgRG9jdW1lbnRfaAogCi0jaW5jbHVkZSAiQ2hlY2tlZFJhZGlv
QnV0dG9ucy5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25UeXBlLmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCkBAIC04Niw3ICs4NSw3IEBAIGNsYXNzIEV2
ZW50TGlzdGVuZXI7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGbG9hdFF1YWQ7CiBjbGFzcyBG
b250RGF0YTsKLWNsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKK2NsYXNzIEZvcm1Db250cm9s
bGVyOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBIVE1MQ2FudmFzRWxl
bWVudDsKQEAgLTk0LDExICs5Myw4IEBAIGNsYXNzIEhUTUxDb2xsZWN0aW9uOwogY2xhc3MgSFRN
TEFsbENvbGxlY3Rpb247CiBjbGFzcyBIVE1MRG9jdW1lbnQ7CiBjbGFzcyBIVE1MRWxlbWVudDsK
LWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU7Ci1jbGFzcyBIVE1MRm9ybUVs
ZW1lbnQ7CiBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7CiBjbGFzcyBIVE1MSGVhZEVsZW1l
bnQ7Ci1jbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgSFRNTElGcmFtZUVsZW1lbnQ7CiBj
bGFzcyBIVE1MTWFwRWxlbWVudDsKIGNsYXNzIEhUTUxOYW1lQ29sbGVjdGlvbjsKQEAgLTE3Niw0
NiArMTcyLDYgQEAgY2xhc3MgUHJlcmVuZGVyZXI7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CiAKLWNsYXNzIEZvcm1FbGVtZW50S2V5IHsKLXB1YmxpYzoKLSAgICBGb3JtRWxlbWVudEtl
eShBdG9taWNTdHJpbmdJbXBsKiA9IDAsIEF0b21pY1N0cmluZ0ltcGwqID0gMCk7Ci0gICAgfkZv
cm1FbGVtZW50S2V5KCk7Ci0gICAgRm9ybUVsZW1lbnRLZXkoY29uc3QgRm9ybUVsZW1lbnRLZXkm
KTsKLSAgICBGb3JtRWxlbWVudEtleSYgb3BlcmF0b3I9KGNvbnN0IEZvcm1FbGVtZW50S2V5Jik7
Ci0KLSAgICBBdG9taWNTdHJpbmdJbXBsKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
Ci0gICAgQXRvbWljU3RyaW5nSW1wbCogdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQot
Ci0gICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3Ry
dWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCi0gICAgRm9ybUVsZW1lbnRLZXko
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fbmFtZShoYXNoVGFibGVEZWxldGVk
VmFsdWUoKSkgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZSA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotCi1wcml2YXRlOgot
ICAgIHZvaWQgcmVmKCkgY29uc3Q7Ci0gICAgdm9pZCBkZXJlZigpIGNvbnN0OwotCi0gICAgc3Rh
dGljIEF0b21pY1N0cmluZ0ltcGwqIGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KC0xKTsgfQotCi0gICAgQXRvbWljU3Ry
aW5nSW1wbCogbV9uYW1lOwotICAgIEF0b21pY1N0cmluZ0ltcGwqIG1fdHlwZTsKLX07Ci0KLWlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybUVsZW1lbnRLZXkmIGEsIGNvbnN0IEZvcm1F
bGVtZW50S2V5JiBiKQotewotICAgIHJldHVybiBhLm5hbWUoKSA9PSBiLm5hbWUoKSAmJiBhLnR5
cGUoKSA9PSBiLnR5cGUoKTsKLX0KLQotc3RydWN0IEZvcm1FbGVtZW50S2V5SGFzaCB7Ci0gICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9ybUVsZW1lbnRLZXkmKTsKLSAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBGb3JtRWxlbWVudEtleSYgYSwgY29uc3QgRm9ybUVsZW1lbnRLZXkm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBGb3JtRWxlbWVudEtleUhh
c2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvcm1FbGVtZW50S2V5PiB7Ci0gICAg
c3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEZvcm1FbGVtZW50S2V5JiBzbG90KSB7
IG5ldyAoTm90TnVsbCwgJnNsb3QpIEZvcm1FbGVtZW50S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKTsgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvcm1FbGVt
ZW50S2V5JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsg
fQotfTsKLQogZW51bSBQYWdlc2hvd0V2ZW50UGVyc2lzdGVuY2UgewogICAgIFBhZ2VzaG93RXZl
bnROb3RQZXJzaXN0ZWQgPSAwLAogICAgIFBhZ2VzaG93RXZlbnRQZXJzaXN0ZWQgPSAxCkBAIC01
MzYsMTcgKzQ5MiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCB1c2VzTGlua1J1bGVzKCkgY29uc3Qg
eyByZXR1cm4gbGlua0NvbG9yKCkgIT0gdmlzaXRlZExpbmtDb2xvcigpIHx8IG1fdXNlc0xpbmtS
dWxlczsgfQogICAgIHZvaWQgc2V0VXNlc0xpbmtSdWxlcyhib29sIGIpIHsgbV91c2VzTGlua1J1
bGVzID0gYjsgfQogCi0gICAgLy8gTWFjaGluZXJ5IGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyBz
dGF0ZSB3aGVuIHlvdSBsZWF2ZSBhbmQgdGhlbiBnbyBiYWNrIHRvIGEgcGFnZS4KLSAgICB2b2lk
IHJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUoSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZSogY29udHJvbCkgeyBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5hZGQoY29udHJvbCk7IH0K
LSAgICB2b2lkIHVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZShIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlKiBjb250cm9sKSB7IG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnJlbW92
ZShjb250cm9sKTsgfQorICAgIC8vIE5ldmVyIHJldHVybnMgMC4KKyAgICBGb3JtQ29udHJvbGxl
ciogZm9ybUNvbnRyb2xsZXIoKTsKICAgICBWZWN0b3I8U3RyaW5nPiBmb3JtRWxlbWVudHNTdGF0
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVj
dG9yPFN0cmluZz4mKTsKLSAgICBib29sIGhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkgY29u
c3Q7Ci0gICAgYm9vbCB0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChBdG9taWNTdHJpbmdJbXBsKiBu
YW1lLCBBdG9taWNTdHJpbmdJbXBsKiB0eXBlLCBTdHJpbmcmIHN0YXRlKTsKLQotICAgIHZvaWQg
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9y
bUFzc29jaWF0ZWRFbGVtZW50Kik7Ci0gICAgdm9pZCByZXNldEZvcm1FbGVtZW50c093bmVyKCk7
CiAKICAgICBGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsgLy8gY2FuIGJlIE5VTEwKICAgICBGcmFt
ZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9IC8vIGNhbiBiZSBOVUxMCkBAIC0x
MDQxLDggKzk5MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxFdmVu
dExpc3RlbmVycygpOwogCi0gICAgQ2hlY2tlZFJhZGlvQnV0dG9ucyYgY2hlY2tlZFJhZGlvQnV0
dG9ucygpIHsgcmV0dXJuIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsgfQotICAgIAogI2lmIEVOQUJM
RShTVkcpCiAgICAgY29uc3QgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBzdmdFeHRlbnNpb25zKCk7
CiAgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBhY2Nlc3NTVkdFeHRlbnNpb25zKCk7CkBAIC0x
MzM0LDE0ICsxMjgxLDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PE5vZGUq
LCAzMj4gU3R5bGVTaGVldENhbmRpZGF0ZUxpc3RIYXNoU2V0OwogICAgIFN0eWxlU2hlZXRDYW5k
aWRhdGVMaXN0SGFzaFNldCBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2RlczsgLy8gQWxsIG9mIHRo
ZSBub2RlcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IHByb3ZpZGUgc3R5bGVzaGVldHMgdG8gdGhl
IGRvY3VtZW50ICg8bGluaz4sIDxzdHlsZT4sIDw/eG1sLXN0eWxlc2hlZXQ+KQogCi0gICAgdHlw
ZWRlZiBMaXN0SGFzaFNldDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKiwgNjQ+IEZv
cm1FbGVtZW50TGlzdEhhc2hTZXQ7Ci0gICAgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1F
bGVtZW50c1dpdGhTdGF0ZTsKLSAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ+LCAzMj4gRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ7Ci0g
ICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQgbV9mb3JtRWxlbWVudHNXaXRoRm9y
bUF0dHJpYnV0ZTsKKyAgICBPd25QdHI8Rm9ybUNvbnRyb2xsZXI+IG1fZm9ybUNvbnRyb2xsZXI7
CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8Rm9ybUVsZW1lbnRLZXksIFZlY3RvcjxTdHJpbmc+LCBG
b3JtRWxlbWVudEtleUhhc2gsIEZvcm1FbGVtZW50S2V5SGFzaFRyYWl0cz4gRm9ybUVsZW1lbnRT
dGF0ZU1hcDsKLSAgICBGb3JtRWxlbWVudFN0YXRlTWFwIG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHM7Ci0gICAgCiAgICAgQ29sb3IgbV9saW5rQ29sb3I7CiAgICAgQ29sb3IgbV92aXNpdGVkTGlu
a0NvbG9yOwogICAgIENvbG9yIG1fYWN0aXZlTGlua0NvbG9yOwpAQCAtMTQyNCw4ICsxMzY1LDYg
QEAgcHJpdmF0ZToKIAogICAgIEluaGVyaXRlZEJvb2wgbV9kZXNpZ25Nb2RlOwogICAgIAotICAg
IENoZWNrZWRSYWRpb0J1dHRvbnMgbV9jaGVja2VkUmFkaW9CdXR0b25zOwotCiAgICAgT3duUHRy
PEhUTUxDb2xsZWN0aW9uPiBtX2NvbGxlY3Rpb25zW051bVVubmFtZWREb2N1bWVudENhY2hlZFR5
cGVzXTsKICAgICBPd25QdHI8SFRNTEFsbENvbGxlY3Rpb24+IG1fYWxsQ29sbGVjdGlvbjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IDM5
MGMxNDliYTQ0YjQ1YTI4YzNhYjJkOGFjNDMwNzQ3YmIzNDVjZTMuLjM5ZmU3MWQ4OGQ3ZmM3Mzhj
NjE4MDAzOTgxYzkwNGUxYzkzY2JmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1B
c3NvY2lhdGVkRWxlbWVudC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkZvcm1D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNTcsNyAr
NTgsNyBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQo
RG9jdW1lbnQqIG9sZERvY3VtZW50KQogewogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9I
VE1MRWxlbWVudCh0aGlzKTsKICAgICBpZiAob2xkRG9jdW1lbnQgJiYgZWxlbWVudC0+ZmFzdEhh
c0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKyAgICAgICAgb2xkRG9jdW1lbnQtPmZv
cm1Db250cm9sbGVyKCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRo
aXMpOwogfQogCiB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRh
aW5lck5vZGUqIGluc2VydGlvblBvaW50KQpAQCAtNjgsMTQgKzY5LDE0IEBAIHZvaWQgRm9ybUFz
c29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9p
bnQpCiAKICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpcyk7CiAg
ICAgaWYgKGVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKQotICAgICAgICBlbGVt
ZW50LT5kb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhp
cyk7CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPmZvcm1Db250cm9sbGVyKCktPnJlZ2lz
dGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKIH0KIAogdm9pZCBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50
KQogewogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKICAg
ICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSAmJiBlbGVtZW50LT5mYXN0SGFzQXR0
cmlidXRlKGZvcm1BdHRyKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dW5yZWdpc3Rl
ckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisgICAgICAgIGVsZW1lbnQtPmRv
Y3VtZW50KCktPmZvcm1Db250cm9sbGVyKCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3Jt
QXR0cmlidXRlKHRoaXMpOwogICAgIC8vIElmIHRoZSBmb3JtIGFuZCBlbGVtZW50IGFyZSBib3Ro
IGluIHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBmb3JtLgog
ICAgIC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBvdXJzZWx2ZXMg
ZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMuCiAgICAgaWYgKG1fZm9ybSAmJiBlbGVt
ZW50LT5oaWdoZXN0QW5jZXN0b3IoKSAhPSBtX2Zvcm0tPmhpZ2hlc3RBbmNlc3RvcigpKQpAQCAt
MTUyLDcgKzE1Myw3IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRl
Q2hhbmdlZCgpCiAgICAgaWYgKCFlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkg
ewogICAgICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNl
dCBmb3JtIG93bmVyIGhlcmUuCiAgICAgICAgIHNldEZvcm0oZWxlbWVudC0+ZmluZEZvcm1BbmNl
c3RvcigpKTsKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkt
PmZvcm1Db250cm9sbGVyKCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRl
KHRoaXMpOwogICAgIH0gZWxzZQogICAgICAgICByZXNldEZvcm1Pd25lcigpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OWI5MzFmNzQzYzA2YmQw
MDMyMzUzZjhmNjU5NzdiNDU1NDllM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9Gb3JtQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb3JtQ29u
dHJvbGxlci5oIgorCisjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisK
K0Zvcm1Db250cm9sbGVyOjpGb3JtQ29udHJvbGxlcigpCit7Cit9CisKK0Zvcm1Db250cm9sbGVy
Ojp+Rm9ybUNvbnRyb2xsZXIoKQoreworfQorCitWZWN0b3I8U3RyaW5nPiBGb3JtQ29udHJvbGxl
cjo6Zm9ybUVsZW1lbnRzU3RhdGUoKSBjb25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+IHN0YXRl
VmVjdG9yOworICAgIHN0YXRlVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9mb3JtRWxl
bWVudHNXaXRoU3RhdGUuc2l6ZSgpICogMyk7CisgICAgdHlwZWRlZiBGb3JtRWxlbWVudExpc3RI
YXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKKyAgICBJdGVyYXRvciBlbmQgPSBtX2Zv
cm1FbGVtZW50c1dpdGhTdGF0ZS5lbmQoKTsKKyAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9mb3Jt
RWxlbWVudHNXaXRoU3RhdGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqIGVsZW1lbnRXaXRoU3RhdGUgPSAqaXQ7Cisg
ICAgICAgIGlmICghZWxlbWVudFdpdGhTdGF0ZS0+c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29u
dHJvbFN0YXRlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU3RyaW5nIHZhbHVl
OworICAgICAgICBpZiAoIWVsZW1lbnRXaXRoU3RhdGUtPnNhdmVGb3JtQ29udHJvbFN0YXRlKHZh
bHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQo
ZWxlbWVudFdpdGhTdGF0ZS0+Zm9ybUNvbnRyb2xOYW1lKCkuc3RyaW5nKCkpOworICAgICAgICBz
dGF0ZVZlY3Rvci5hcHBlbmQoZWxlbWVudFdpdGhTdGF0ZS0+Zm9ybUNvbnRyb2xUeXBlKCkuc3Ry
aW5nKCkpOworICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQodmFsdWUpOworICAgIH0KKyAgICBy
ZXR1cm4gc3RhdGVWZWN0b3I7Cit9CisKK3ZvaWQgRm9ybUNvbnRyb2xsZXI6OnNldFN0YXRlRm9y
TmV3Rm9ybUVsZW1lbnRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3RvcikKK3sKKyAg
ICAvLyBXYWxrIHRoZSBzdGF0ZSB2ZWN0b3IgYmFja3dhcmRzIHNvIHRoYXQgdGhlIHZhbHVlIHRv
IHVzZSBmb3IgZWFjaAorICAgIC8vIG5hbWUvdHlwZSBwYWlyIGZpcnN0IGlzIHRoZSBvbmUgYXQg
dGhlIGVuZCBvZiBlYWNoIGluZGl2aWR1YWwgdmVjdG9yCisgICAgLy8gaW4gdGhlIEZvcm1FbGVt
ZW50U3RhdGVNYXAuIFdlJ3JlIHVzaW5nIHRoZW0gbGlrZSBzdGFja3MuCisgICAgdHlwZWRlZiBG
b3JtRWxlbWVudFN0YXRlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKKyAgICBtX2Zvcm1FbGVtZW50
c1dpdGhTdGF0ZS5jbGVhcigpOworICAgIGZvciAoc2l6ZV90IGkgPSBzdGF0ZVZlY3Rvci5zaXpl
KCkgLyAzICogMzsgaTsgaSAtPSAzKSB7CisgICAgICAgIEF0b21pY1N0cmluZyBhID0gc3RhdGVW
ZWN0b3JbaSAtIDNdOworICAgICAgICBBdG9taWNTdHJpbmcgYiA9IHN0YXRlVmVjdG9yW2kgLSAy
XTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBjID0gc3RhdGVWZWN0b3JbaSAtIDFdOworICAgICAg
ICBGb3JtRWxlbWVudEtleSBrZXkoYS5pbXBsKCksIGIuaW1wbCgpKTsKKyAgICAgICAgSXRlcmF0
b3IgaXQgPSBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmZpbmQoa2V5KTsKKyAgICAgICAgaWYg
KGl0ICE9IG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMuZW5kKCkpCisgICAgICAgICAgICBpdC0+
c2Vjb25kLmFwcGVuZChjKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWZWN0b3I8U3Ry
aW5nPiB2KDEpOworICAgICAgICAgICAgdlswXSA9IGM7CisgICAgICAgICAgICBtX3N0YXRlRm9y
TmV3Rm9ybUVsZW1lbnRzLnNldChrZXksIHYpOworICAgICAgICB9CisgICAgfQorfQorCitib29s
IEZvcm1Db250cm9sbGVyOjpoYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzLmlzRW1wdHkoKTsKK30KKworYm9v
bCBGb3JtQ29udHJvbGxlcjo6dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQoQXRvbWljU3RyaW5nSW1w
bCogbmFtZSwgQXRvbWljU3RyaW5nSW1wbCogdHlwZSwgU3RyaW5nJiBzdGF0ZSkKK3sKKyAgICB0
eXBlZGVmIEZvcm1FbGVtZW50U3RhdGVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOworICAgIEl0ZXJh
dG9yIGl0ID0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5maW5kKEZvcm1FbGVtZW50S2V5KG5h
bWUsIHR5cGUpKTsKKyAgICBpZiAoaXQgPT0gbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50cy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChpdC0+c2Vjb25kLnNpemUoKSk7
CisgICAgc3RhdGUgPSBpdC0+c2Vjb25kLmxhc3QoKTsKKyAgICBpZiAoaXQtPnNlY29uZC5zaXpl
KCkgPiAxKQorICAgICAgICBpdC0+c2Vjb25kLnJlbW92ZUxhc3QoKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHMucmVtb3ZlKGl0KTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBGb3JtQ29udHJvbGxlcjo6cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3Jt
QXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBBU1NFUlQo
dG9IVE1MRWxlbWVudChlbGVtZW50KS0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpOworICAg
IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUuYWRkKGVsZW1lbnQpOworfQorCit2b2lk
IEZvcm1Db250cm9sbGVyOjp1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZShG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgbV9mb3JtRWxlbWVudHNXaXRo
Rm9ybUF0dHJpYnV0ZS5yZW1vdmUoZWxlbWVudCk7Cit9CisKK3ZvaWQgRm9ybUNvbnRyb2xsZXI6
OnJlc2V0Rm9ybUVsZW1lbnRzT3duZXIoKQoreworICAgIHR5cGVkZWYgRm9ybUFzc29jaWF0ZWRF
bGVtZW50TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOworICAgIEl0ZXJhdG9yIGVuZCA9
IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUuZW5kKCk7CisgICAgZm9yIChJdGVyYXRv
ciBpdCA9IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICAoKml0KS0+cmVzZXRGb3JtT3duZXIoKTsKK30KKworRm9ybUVsZW1l
bnRLZXk6OkZvcm1FbGVtZW50S2V5KEF0b21pY1N0cmluZ0ltcGwqIG5hbWUsIEF0b21pY1N0cmlu
Z0ltcGwqIHR5cGUpCisgICAgOiBtX25hbWUobmFtZSksIG1fdHlwZSh0eXBlKQoreworICAgIHJl
ZigpOworfQorCitGb3JtRWxlbWVudEtleTo6fkZvcm1FbGVtZW50S2V5KCkKK3sKKyAgICBkZXJl
ZigpOworfQorCitGb3JtRWxlbWVudEtleTo6Rm9ybUVsZW1lbnRLZXkoY29uc3QgRm9ybUVsZW1l
bnRLZXkmIG90aGVyKQorICAgIDogbV9uYW1lKG90aGVyLm5hbWUoKSksIG1fdHlwZShvdGhlci50
eXBlKCkpCit7CisgICAgcmVmKCk7Cit9CisKK0Zvcm1FbGVtZW50S2V5JiBGb3JtRWxlbWVudEtl
eTo6b3BlcmF0b3I9KGNvbnN0IEZvcm1FbGVtZW50S2V5JiBvdGhlcikKK3sKKyAgICBvdGhlci5y
ZWYoKTsKKyAgICBkZXJlZigpOworICAgIG1fbmFtZSA9IG90aGVyLm5hbWUoKTsKKyAgICBtX3R5
cGUgPSBvdGhlci50eXBlKCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIEZvcm1FbGVt
ZW50S2V5OjpyZWYoKSBjb25zdAoreworICAgIGlmIChuYW1lKCkpCisgICAgICAgIG5hbWUoKS0+
cmVmKCk7CisgICAgaWYgKHR5cGUoKSkKKyAgICAgICAgdHlwZSgpLT5yZWYoKTsKK30KKwordm9p
ZCBGb3JtRWxlbWVudEtleTo6ZGVyZWYoKSBjb25zdAoreworICAgIGlmIChuYW1lKCkpCisgICAg
ICAgIG5hbWUoKS0+ZGVyZWYoKTsKKyAgICBpZiAodHlwZSgpKQorICAgICAgICB0eXBlKCktPmRl
cmVmKCk7Cit9CisKK3Vuc2lnbmVkIEZvcm1FbGVtZW50S2V5SGFzaDo6aGFzaChjb25zdCBGb3Jt
RWxlbWVudEtleSYga2V5KQoreworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8
c2l6ZW9mKEZvcm1FbGVtZW50S2V5KT4oJmtleSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5MWQzNWQ4
ZDU1OTZhYzZlOGZlMTlkZWU2MmRjODEzZmMwYzVhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0Zvcm1Db250cm9sbGVyLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvcm1Db250
cm9sbGVyX2gKKyNkZWZpbmUgRm9ybUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiQ2hlY2tlZFJh
ZGlvQnV0dG9ucy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0xp
c3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKK2NsYXNzIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGU7CisKK2NsYXNzIEZvcm1FbGVtZW50S2V5IHsKK3B1YmxpYzoKKyAg
ICBGb3JtRWxlbWVudEtleShBdG9taWNTdHJpbmdJbXBsKiA9IDAsIEF0b21pY1N0cmluZ0ltcGwq
ID0gMCk7CisgICAgfkZvcm1FbGVtZW50S2V5KCk7CisgICAgRm9ybUVsZW1lbnRLZXkoY29uc3Qg
Rm9ybUVsZW1lbnRLZXkmKTsKKyAgICBGb3JtRWxlbWVudEtleSYgb3BlcmF0b3I9KGNvbnN0IEZv
cm1FbGVtZW50S2V5Jik7CisKKyAgICBBdG9taWNTdHJpbmdJbXBsKiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CisgICAgQXRvbWljU3RyaW5nSW1wbCogdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQorCisgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2gg
YXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCisgICAg
Rm9ybUVsZW1lbnRLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fbmFtZSho
YXNoVGFibGVEZWxldGVkVmFsdWUoKSkgeyB9CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZSA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsg
fQorCitwcml2YXRlOgorICAgIHZvaWQgcmVmKCkgY29uc3Q7CisgICAgdm9pZCBkZXJlZigpIGNv
bnN0OworCisgICAgc3RhdGljIEF0b21pY1N0cmluZ0ltcGwqIGhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KC0xKTsgfQor
CisgICAgQXRvbWljU3RyaW5nSW1wbCogbV9uYW1lOworICAgIEF0b21pY1N0cmluZ0ltcGwqIG1f
dHlwZTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybUVsZW1lbnRLZXkm
IGEsIGNvbnN0IEZvcm1FbGVtZW50S2V5JiBiKQoreworICAgIHJldHVybiBhLm5hbWUoKSA9PSBi
Lm5hbWUoKSAmJiBhLnR5cGUoKSA9PSBiLnR5cGUoKTsKK30KKworc3RydWN0IEZvcm1FbGVtZW50
S2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9ybUVsZW1lbnRLZXkm
KTsKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb3JtRWxlbWVudEtleSYgYSwgY29uc3Qg
Rm9ybUVsZW1lbnRLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK3N0cnVjdCBG
b3JtRWxlbWVudEtleUhhc2hUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvcm1FbGVt
ZW50S2V5PiB7CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEZvcm1FbGVt
ZW50S2V5JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3QpIEZvcm1FbGVtZW50S2V5KFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KGNvbnN0IEZvcm1FbGVtZW50S2V5JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKTsgfQorfTsKKworY2xhc3MgRm9ybUNvbnRyb2xsZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEZvcm1Db250cm9sbGVyPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBGb3JtQ29udHJvbGxlcik7CisgICAgfQorICAgIH5G
b3JtQ29udHJvbGxlcigpOworCisgICAgQ2hlY2tlZFJhZGlvQnV0dG9ucyYgY2hlY2tlZFJhZGlv
QnV0dG9ucygpIHsgcmV0dXJuIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsgfQorICAgIAorICAgIHZv
aWQgcmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlKiBjb250cm9sKSB7IG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLmFkZChjb250cm9sKTsg
fQorICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGUqIGNvbnRyb2wpIHsgbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUucmVt
b3ZlKGNvbnRyb2wpOyB9CisgICAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGxlZCBvbmx5IGJ5IERv
Y3VtZW50Ojpmb3JtRWxlbWVudHNTdGF0ZSgpLgorICAgIFZlY3RvcjxTdHJpbmc+IGZvcm1FbGVt
ZW50c1N0YXRlKCkgY29uc3Q7CisgICAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGxlZCBvbmx5IGJ5
IERvY3VtZW50OjpzZXRTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpLgorICAgIHZvaWQgc2V0U3Rh
dGVGb3JOZXdGb3JtRWxlbWVudHMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKKyAgICBib29sIGhh
c1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkgY29uc3Q7CisgICAgYm9vbCB0YWtlU3RhdGVGb3JG
b3JtRWxlbWVudChBdG9taWNTdHJpbmdJbXBsKiBuYW1lLCBBdG9taWNTdHJpbmdJbXBsKiB0eXBl
LCBTdHJpbmcmIHN0YXRlKTsKKworICAgIHZvaWQgcmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3Jt
QXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOworICAgIHZvaWQgdW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CisgICAg
dm9pZCByZXNldEZvcm1FbGVtZW50c093bmVyKCk7CisKK3ByaXZhdGU6CisgICAgRm9ybUNvbnRy
b2xsZXIoKTsKKworICAgIENoZWNrZWRSYWRpb0J1dHRvbnMgbV9jaGVja2VkUmFkaW9CdXR0b25z
OworCisgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlKiwgNjQ+IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQ7CisgICAgRm9ybUVsZW1lbnRMaXN0SGFz
aFNldCBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZTsKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJl
ZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+LCAzMj4gRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlz
dEhhc2hTZXQ7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQgbV9mb3JtRWxl
bWVudHNXaXRoRm9ybUF0dHJpYnV0ZTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxGb3JtRWxlbWVu
dEtleSwgVmVjdG9yPFN0cmluZz4sIEZvcm1FbGVtZW50S2V5SGFzaCwgRm9ybUVsZW1lbnRLZXlI
YXNoVHJhaXRzPiBGb3JtRWxlbWVudFN0YXRlTWFwOworICAgIEZvcm1FbGVtZW50U3RhdGVNYXAg
bV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50czsKKyAgICAKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZS5jcHAKaW5kZXggYmY5NGM1NGQ5MmMyM2IwN2MxNDU3N2E5
ZmExNjIzMWRmN2Q4NTZkYS4uOTRhZWFkNDM2NGFiNmZlODBiY2Y0N2Y3YzRmNzRhMWI5OGE0N2Yw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
V2l0aFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oIgogCisjaW5jbHVk
ZSAiRm9ybUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIsMTkgKzMzLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRN
TEZvcm1FbGVtZW50KiBmKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBk
b2MsIGYpCiB7Ci0gICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0
aGlzKTsKKyAgICBkb2N1bWVudCgpLT5mb3JtQ29udHJvbGxlcigpLT5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aFN0YXRlKHRoaXMpOwogfQogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpCiB7Ci0gICAgZG9jdW1lbnQoKS0+
dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOworICAgIGRvY3VtZW50KCktPmZv
cm1Db250cm9sbGVyKCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKIH0K
IAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRNb3ZlVG9OZXdEb2N1
bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpCiB7CiAgICAgaWYgKG9sZERvY3VtZW50KQotICAg
ICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOwot
ICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7CisgICAg
ICAgIG9sZERvY3VtZW50LT5mb3JtQ29udHJvbGxlcigpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRX
aXRoU3RhdGUodGhpcyk7CisgICAgZG9jdW1lbnQoKS0+Zm9ybUNvbnRyb2xsZXIoKS0+cmVnaXN0
ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChvbGREb2N1bWVudCk7CiB9CiAKQEAgLTcyLDkgKzczLDkg
QEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4oKQogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQo
KTsKLSAgICBpZiAoZG9jLT5oYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpKSB7CisgICAgaWYg
KGRvYy0+Zm9ybUNvbnRyb2xsZXIoKS0+aGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoKSkgewog
ICAgICAgICBTdHJpbmcgc3RhdGU7Ci0gICAgICAgIGlmIChkb2MtPnRha2VTdGF0ZUZvckZvcm1F
bGVtZW50KG5hbWUoKS5pbXBsKCksIHR5cGUoKS5pbXBsKCksIHN0YXRlKSkKKyAgICAgICAgaWYg
KGRvYy0+Zm9ybUNvbnRyb2xsZXIoKS0+dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQobmFtZSgpLmlt
cGwoKSwgdHlwZSgpLmltcGwoKSwgc3RhdGUpKQogICAgICAgICAgICAgcmVzdG9yZUZvcm1Db250
cm9sU3RhdGUoc3RhdGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcAppbmRleCBlYTU0YjkzYmE4MmEyNDE1ZjVjODllNzFjN2IyZWEzOWMxYTEwN2EzLi43
MTliNDZlYWMxMWM5NzQyYTM3MzczNDU4MzI5NGNjYzljZmIyMzZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgorI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNp
bmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKQEAgLTE0NCw3
ICsxNDUsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZGlkTm90aWZ5RGVzY2VuZGFudEluc2Vy
dGlvbnMoQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbgogICAgIEFTU0VSVChpbnNlcnRpb25Q
b2ludC0+aW5Eb2N1bWVudCgpKTsKICAgICBIVE1MRWxlbWVudDo6ZGlkTm90aWZ5RGVzY2VuZGFu
dEluc2VydGlvbnMoaW5zZXJ0aW9uUG9pbnQpOwogICAgIGlmIChoYXNJRCgpKQotICAgICAgICBk
b2N1bWVudCgpLT5yZXNldEZvcm1FbGVtZW50c093bmVyKCk7CisgICAgICAgIGRvY3VtZW50KCkt
PmZvcm1Db250cm9sbGVyKCktPnJlc2V0Rm9ybUVsZW1lbnRzT3duZXIoKTsKIH0KIAogc3RhdGlj
IGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2RlKiBuKQpAQCAtMTYzLDcgKzE2NCw3IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiBpbnNlcnRpb25Qb2lu
dCkKICAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5mb3JtUmVtb3ZlZEZyb21UcmVlKHJv
b3QpOwogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CiAgICAg
aWYgKGluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkgJiYgaGFzSUQoKSkKLSAgICAgICAgZG9j
dW1lbnQoKS0+cmVzZXRGb3JtRWxlbWVudHNPd25lcigpOworICAgICAgICBkb2N1bWVudCgpLT5m
b3JtQ29udHJvbGxlcigpLT5yZXNldEZvcm1FbGVtZW50c093bmVyKCk7CiB9CiAKIHZvaWQgSFRN
TEZvcm1FbGVtZW50OjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCogZXZlbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCAyMzExNDJlNWI2NmU2YmQzOWUwOGFm
YjMwNjM4ZGI5NTlmZjQ3ZWFiLi5jNmNmMWY0OTcxZTZhZDYyZGRiYzVmMzc5ZGRiNzhiOTNjMzRj
ZThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5jbHVkZSAiRm9ybUNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSFRNTERhdGFMaXN0RWxlbWVudC5oIgpAQCAtMTI3LDcgKzEyOCw3IEBAIEhUTUxJbnB1dEVs
ZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKICAgICAvLyBzZXRGb3JtKDApIG1heSByZWdpc3Rl
ciB0aGlzIHRvIGEgZG9jdW1lbnQtbGV2ZWwgcmFkaW8gYnV0dG9uIGdyb3VwLgogICAgIC8vIFdl
IHNob3VsZCB1bnJlZ2lzdGVyIGl0IHRvIGF2b2lkIGFjY2Vzc2luZyBhIGRlbGV0ZWQgb2JqZWN0
LgogICAgIGlmIChpc1JhZGlvQnV0dG9uKCkpCi0gICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRS
YWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPmZv
cm1Db250cm9sbGVyKCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhpcyk7
CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xO
YW1lKCkgY29uc3QKQEAgLTEzNzQsNyArMTM3NSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KQogICAgICAgICBpZiAo
bmVlZHNTdXNwZW5zaW9uQ2FsbGJhY2spCiAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdp
c3RlckZvclBhZ2VDYWNoZVN1c3BlbnNpb25DYWxsYmFja3ModGhpcyk7CiAgICAgICAgIGlmIChp
c1JhZGlvQnV0dG9uKCkpCi0gICAgICAgICAgICBvbGREb2N1bWVudC0+Y2hlY2tlZFJhZGlvQnV0
dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKKyAgICAgICAgICAgIG9sZERvY3VtZW50LT5mb3Jt
Q29udHJvbGxlcigpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOwog
ICAgIH0KIAogICAgIGlmIChuZWVkc1N1c3BlbnNpb25DYWxsYmFjaykKQEAgLTE2NzIsNyArMTY3
Myw3IEBAIENoZWNrZWRSYWRpb0J1dHRvbnMqIEhUTUxJbnB1dEVsZW1lbnQ6OmNoZWNrZWRSYWRp
b0J1dHRvbnMoKSBjb25zdAogICAgIGlmIChIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50ID0g
Zm9ybSgpKQogICAgICAgICByZXR1cm4gJmZvcm1FbGVtZW50LT5jaGVja2VkUmFkaW9CdXR0b25z
KCk7CiAgICAgaWYgKGluRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuICZkb2N1bWVudCgpLT5j
aGVja2VkUmFkaW9CdXR0b25zKCk7CisgICAgICAgIHJldHVybiAmZG9jdW1lbnQoKS0+Zm9ybUNv
bnRyb2xsZXIoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpOwogICAgIHJldHVybiAwOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDEwNWRlYjcxYTM0M2ZlZDhh
NjRkYzBlZDRkYzViOTgwODVkYmIxOTEuLmE1YzE5OTgzNWJmZmUyM2ZhY2QwYWI5ZmM0MjY3OGRk
NDdkM2E1ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0zMCw2
ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2hlY2tlZFJhZGlvQnV0
dG9uczsKIGNsYXNzIEZpbGVMaXN0OwogY2xhc3MgSFRNTERhdGFMaXN0RWxlbWVudDsKIGNsYXNz
IEhUTUxPcHRpb25FbGVtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmgKaW5kZXggMjc5MDY2NDNiNGIxZTc4YTcyN2FmMjU1NGZiYjc1
YmVjOTJiY2Y3Zi4uMzY3YzBmZTI2ODU2YmY3NmQxZDRlNjg0MmE2ZmNlMWQ5NWZiM2NhMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5o
CkBAIC03NSw2ICs3NSw3IEBAIGVudW0gV2hpdGVzcGFjZU1vZGUgewogY2xhc3MgQXRvbWljSFRN
TFRva2VuOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OworY2xhc3MgSFRNTEZvcm1F
bGVtZW50OwogCiBjbGFzcyBIVE1MQ29uc3RydWN0aW9uU2l0ZSB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSFRNTENvbnN0cnVjdGlvblNpdGUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>