<?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>240416</bug_id>
          
          <creation_ts>2022-05-14 02:18:28 -0700</creation_ts>
          <short_desc>Template TextBoxPainter on line layout path</short_desc>
          <delta_ts>2022-05-18 14:26:52 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>basuke</cc>
    
    <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1868972</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-05-14 02:18:28 -0700</bug_when>
    <thetext>Painting currently goes via line layout path agnostic iterator. This is inefficient since we always know what sort of layout we are painting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868973</commentid>
    <comment_count>1</comment_count>
      <attachid>459348</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-05-14 02:22:45 -0700</bug_when>
    <thetext>Created attachment 459348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1868986</commentid>
    <comment_count>2</comment_count>
      <attachid>459353</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-05-14 06:19:47 -0700</bug_when>
    <thetext>Created attachment 459353
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869017</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-14 10:52:23 -0700</bug_when>
    <thetext>Committed r294204 (250565@main): &lt;https://commits.webkit.org/250565@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 459353.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869018</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-05-14 10:53:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/93293276&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869422</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-05-16 14:38:01 -0700</bug_when>
    <thetext>Re-opening for pull request https://github.com/WebKit/WebKit/pull/650</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869426</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-16 14:42:20 -0700</bug_when>
    <thetext>Committed r294262 (250610@main): &lt;https://commits.webkit.org/250610@main&gt;

Reviewed commits have been landed. Closing PR #650 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869491</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2022-05-16 16:37:52 -0700</bug_when>
    <thetext>Caused text rendering bugs: bug 240491.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869679</commentid>
    <comment_count>8</comment_count>
      <attachid>459498</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-05-17 07:54:47 -0700</bug_when>
    <thetext>Created attachment 459498
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869682</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-17 07:58:28 -0700</bug_when>
    <thetext>Unable to find any modified ChangeLog in Attachment 459498</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869685</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-05-17 08:14:43 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/675</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869927</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-17 23:28:05 -0700</bug_when>
    <thetext>Committed r294383 (250680@main): &lt;https://commits.webkit.org/250680@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 459498.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870086</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-05-18 11:43:23 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #10)
&gt; Pull request: https://github.com/WebKit/WebKit/pull/675

You landed the same build failure again.

Out of curiosity, is there any plan to make this non-experimental? I wonder if having a build flag is really worth it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870091</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-05-18 11:58:58 -0700</bug_when>
    <thetext>(Remember that ENABLE(EXPERIMENTAL_FEATURES) is enabled on EWS, and ENABLE(LAYOUT_FORMATTING_CONTEXT) is tied to that. So all the EWS will pass, but the releases will still be broken. Got to be careful....)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870092</commentid>
    <comment_count>14</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2022-05-18 12:02:05 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #12)
&gt; (In reply to Antti Koivisto from comment #10)
&gt; &gt; Pull request: https://github.com/WebKit/WebKit/pull/675
&gt; 
&gt; You landed the same build failure again.
&gt; 
&gt; Out of curiosity, is there any plan to make this non-experimental? I wonder
&gt; if having a build flag is really worth it?
Yeah, the build flag makes very little sense at this point. We should get rid of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870094</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-05-18 12:18:40 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #13)
&gt; (Remember that ENABLE(EXPERIMENTAL_FEATURES) is enabled on EWS, and
&gt; ENABLE(LAYOUT_FORMATTING_CONTEXT) is tied to that. So all the EWS will pass,
&gt; but the releases will still be broken. Got to be careful....)

All platforms should have LAYOUT_FORMATTING_CONTEXT enabled unconditionally. It is on Cocoa platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870095</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-05-18 12:19:06 -0700</bug_when>
    <thetext>(and the flag should be removed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870106</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-05-18 12:43:41 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #15)
&gt; All platforms should have LAYOUT_FORMATTING_CONTEXT enabled unconditionally.
&gt; It is on Cocoa platforms.

I see it&apos;s off at runtime on all platforms (WTF/Scripts/Preferences/WebPreferencesInternal.yaml). Removing the build flag makes sense to me regardless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870107</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-05-18 12:45:26 -0700</bug_when>
    <thetext>Re-opening for pull request https://github.com/WebKit/WebKit/pull/741</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870108</commentid>
    <comment_count>19</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-18 12:49:13 -0700</bug_when>
    <thetext>Committed r294426 (250708@main): &lt;https://commits.webkit.org/250708@main&gt;

Reviewed commits have been landed. Closing PR #741 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870109</commentid>
    <comment_count>20</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-05-18 12:55:01 -0700</bug_when>
    <thetext>&gt; I see it&apos;s off at runtime on all platforms
&gt; (WTF/Scripts/Preferences/WebPreferencesInternal.yaml).

InlineFormattingContextIntegrationEnabled is behind this conditional and is enabled by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1870152</commentid>
    <comment_count>21</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2022-05-18 14:26:52 -0700</bug_when>
    <thetext>*** Bug 240590 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459348</attachid>
            <date>2022-05-14 02:22:45 -0700</date>
            <delta_ts>2022-05-14 06:19:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240416-20220514122243.patch</filename>
            <type>text/plain</type>
            <size>49593</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">RnJvbSAwOTY0YjM2ZjAwZWZjYjE4NjYyYTZiMDcxZmViMWQxNjA3N2QzYjQ0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnR0aSBLb2l2aXN0byA8YW50dGlAYXBwbGUuY29tPgpEYXRl
OiBTYXQsIDE0IE1heSAyMDIyIDExOjIwOjEzICswMzAwClN1YmplY3Q6IFtQQVRDSCAxLzNdIGhh
eAoKLS0tCiAuLi4vaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94LmNwcCAgfCAg
IDcgKwogLi4uL2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5oICAgIHwgIDM0
ICsrLS0KIC4uLi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmggICAgICB8ICAg
OCArCiAuLi4vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oICAgICAgfCAgIDkg
Ky0KIC4uLi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCAgICB8ICAgMiAr
LQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwIHwgICA0ICst
CiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAgfCAgIDIgKy0K
IC4uLi9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcCB8ICAgMiArLQog
Li4uL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaCAgIHwgICAxIC0KIC4u
Li9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwICAgICAgICB8ICAgNyArLQogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcCAgIHwgMTc2ICsrKysrKysr
KysrLS0tLS0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmggICAg
IHwgIDM1ICsrLS0KIDEyIGZpbGVzIGNoYW5nZWQsIDE3NyBpbnNlcnRpb25zKCspLCAxMTAgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94LmNwcAppbmRleCAzMDBhOTM3ZDU3YmQu
LmUxZGE5MGMzYjA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5jcHAKQEAgLTk0LDYgKzk0
LDEzIEBAIExpbmVCb3hJdGVyYXRvciBCb3g6OmxpbmVCb3goKSBjb25zdAogICAgICk7CiB9CiAK
K0Zsb2F0UmVjdCBCb3g6OnZpc3VhbFJlY3QoKSBjb25zdAoreworICAgIGF1dG8gcmVjdCA9IHZp
c3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCk7CisgICAgY29udGFpbmluZ0Jsb2NrKCku
ZmxpcEZvcldyaXRpbmdNb2RlKHJlY3QpOworICAgIHJldHVybiByZWN0OworfQorCiBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlIEJveDo6c2VsZWN0aW9uU3RhdGUoKSBjb25zdAogewogICAg
IGlmIChpc1RleHQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5oCmluZGV4IDllNmQzMDg4ZmQx
Zi4uZjNlYTFlZDU4NTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5oCkBAIC02MCw3ICs2MCw3
IEBAIHB1YmxpYzoKICAgICBib29sIGlzSW5saW5lQm94KCkgY29uc3Q7CiAgICAgYm9vbCBpc1Jv
b3RJbmxpbmVCb3goKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCB2aXN1YWxSZWN0KGZsb2F0IGZv
cm1hdHRpbmdSb290U2l6ZUluQmxvY2tEaXJlY3Rpb24pIGNvbnN0OworICAgIEZsb2F0UmVjdCB2
aXN1YWxSZWN0KCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2Nr
RGlyZWN0aW9uKCkgY29uc3Q7CiAKICAgICBmbG9hdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1
cm4gaXNIb3Jpem9udGFsKCkgPyB2aXN1YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpLnko
KSA6IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkueCgpOyB9CkBAIC04NSw2ICs4
NSw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlv
blN0YXRlKCkgY29uc3Q7CiAKICAgICBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKCkgY29u
c3Q7CisgICAgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBjb250YWluaW5nQmxvY2soKSBjb25zdDsK
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBS
ZW1vdmUuIEZvciBpbnRlcm1lZGlhdGUgcG9ydGluZyBzdGVwcyBvbmx5LgpAQCAtMTAwLDE4ICsx
MDEsMTcgQEAgcHVibGljOgogCiAgICAgTGluZUJveEl0ZXJhdG9yIGxpbmVCb3goKSBjb25zdDsK
IAorI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorICAgIGNvbnN0IEJveE1v
ZGVyblBhdGgmIG1vZGVyblBhdGgoKSBjb25zdDsKKyNlbmRpZgorICAgIGNvbnN0IEJveExlZ2Fj
eVBhdGgmIGxlZ2FjeVBhdGgoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFz
cyBCb3hJdGVyYXRvcjsKICAgICBmcmllbmQgY2xhc3MgSW5saW5lQm94SXRlcmF0b3I7CiAgICAg
ZnJpZW5kIGNsYXNzIExlYWZCb3hJdGVyYXRvcjsKICAgICBmcmllbmQgY2xhc3MgVGV4dEJveEl0
ZXJhdG9yOwogCi0gICAgLy8gVG8gaGVscCB3aXRoIGRlYnVnZ2luZy4KLSNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICBjb25zdCBCb3hNb2Rlcm5QYXRoJiBtb2Rlcm5Q
YXRoKCkgY29uc3Q7Ci0jZW5kaWYKLSAgICBjb25zdCBCb3hMZWdhY3lQYXRoJiBsZWdhY3lQYXRo
KCkgY29uc3Q7Ci0KICAgICBQYXRoVmFyaWFudCBtX3BhdGhWYXJpYW50OwogfTsKIApAQCAtMTg0
LDE5ICsxODQsNiBAQCBpbmxpbmUgYm9vbCBCb3g6OmlzUm9vdElubGluZUJveCgpIGNvbnN0CiAg
ICAgfSk7CiB9CiAKLWlubGluZSBGbG9hdFJlY3QgQm94Ojp2aXN1YWxSZWN0KGZsb2F0IGZvcm1h
dHRpbmdSb290U2l6ZUluQmxvY2tEaXJlY3Rpb24pIGNvbnN0Ci17Ci0gICAgYXV0byB2aXN1YWxS
ZWN0ID0gdmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKTsKLSAgICBpZiAoIXN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHZpc3VhbFJl
Y3Q7Ci0KLSAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAg
ICB2aXN1YWxSZWN0LnNldFkoZm9ybWF0dGluZ1Jvb3RTaXplSW5CbG9ja0RpcmVjdGlvbiAtIHZp
c3VhbFJlY3QubWF4WSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHZpc3VhbFJlY3Quc2V0WChmb3Jt
YXR0aW5nUm9vdFNpemVJbkJsb2NrRGlyZWN0aW9uIC0gdmlzdWFsUmVjdC5tYXhYKCkpOwotICAg
IHJldHVybiB2aXN1YWxSZWN0OwotfQotCiBpbmxpbmUgRmxvYXRSZWN0IEJveDo6dmlzdWFsUmVj
dElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKQEAgLTI0Niw2ICsyMzMsMTMgQEAg
aW5saW5lIGNvbnN0IFJlbmRlck9iamVjdCYgQm94OjpyZW5kZXJlcigpIGNvbnN0CiAgICAgfSk7
CiB9CiAKK2lubGluZSBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIEJveDo6Y29udGFpbmluZ0Jsb2Nr
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShh
dXRvJiBwYXRoKSAtPiBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIHsKKyAgICAgICAgcmV0dXJuIHBh
dGguY29udGFpbmluZ0Jsb2NrKCk7CisgICAgfSk7Cit9CisKIGlubGluZSBjb25zdCBSZW5kZXJT
dHlsZSYgQm94OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9w
YXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4gY29uc3QgUmVuZGVyU3R5bGUmIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRl
cmF0b3JCb3hMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
aW5saW5lL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oCmluZGV4IDNjZGQ1ZWU0MDY2NS4u
YmU5ODI0ZjEzZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRo
LmgKQEAgLTc2LDYgKzc2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW5saW5lQm94
LT5yZW5kZXJlcigpOwogICAgIH0KIAorICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgY29udGFp
bmluZ0Jsb2NrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lubGluZUJveC0+cm9v
dCgpLmJsb2NrRmxvdygpOworICAgIH0KKwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9pbmxpbmVCb3gtPmxpbmVTdHlsZSgpOwpA
QCAtMTEzLDYgKzExOCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHsgaW5saW5lRmxvd0Jv
eCgpLT5sYXN0TGVhZkRlc2NlbmRhbnQoKSB9OwogICAgIH0KIAorICAgIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkgJSAyID8gVGV4dERpcmVjdGlv
bjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9CisgICAgYm9vbCBpc0ZpcnN0TGluZSgpIGNv
bnN0IHsgcmV0dXJuICFyb290SW5saW5lQm94KCkucHJldlJvb3RCb3goKTsgfQorCiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEJveExlZ2FjeVBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBt
X2lubGluZUJveCA9PSBvdGhlci5tX2lubGluZUJveDsgfQogCiAgICAgYm9vbCBhdEVuZCgpIGNv
bnN0IHsgcmV0dXJuICFtX2lubGluZUJveDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JC
b3hNb2Rlcm5QYXRoLmgKaW5kZXggMDdmODBiZGNiNDk4Li42MzIzN2RiMjdmZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0
b3JCb3hNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L2lubGluZS9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaApAQCAtMTAzLDYgKzEwMywxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lubGluZUNvbnRlbnQtPnJlbmRlcmVyRm9yTGF5
b3V0Qm94KGJveCgpLmxheW91dEJveCgpKTsKICAgICB9CiAKKyAgICBjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9p
bmxpbmVDb250ZW50LT5jb250YWluaW5nQmxvY2soKTsKKyAgICB9CisKICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGJveCgpLnN0eWxl
KCk7CkBAIC0yMDcsNiArMjEyLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbGFzdDsKICAg
ICB9CiAKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJpZGlM
ZXZlbCgpICUgMiA/IFRleHREaXJlY3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsgfQor
ICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiAhYm94KCkubGluZUluZGV4KCk7
IH0KKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3hNb2Rlcm5QYXRoJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50ID09IG90aGVyLm1faW5saW5lQ29udGVudCAmJiBt
X2JveEluZGV4ID09IG90aGVyLm1fYm94SW5kZXg7IH0KIAogICAgIGJvb2wgYXRFbmQoKSBjb25z
dCB7IHJldHVybiAhbV9pbmxpbmVDb250ZW50IHx8IG1fYm94SW5kZXggPT0gYm94ZXMoKS5zaXpl
KCk7IH0KQEAgLTI3Miw3ICsyODAsNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IExheW91dEludGVn
cmF0aW9uOjpMaW5lJiBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5saW5l
Rm9yQm94KGJveCgpKTsgfQogCiAgICAgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyVGV4dCgpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKCkpOyB9Ci0gICAgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBU
ZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KIAogICAgIFdlYWtQdHI8
Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQ+IG1faW5saW5lQ29udGVudDsK
ICAgICBzaXplX3QgbV9ib3hJbmRleCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdy
YXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCBlZTI0YjgyNDkxNGQuLjFkZjZiMDI2ZTMwYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApAQCAtODAwLDcg
KzgwMCw3IEBAIHZvaWQgTGluZUxheW91dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgICAgIGlmICghYm94LnRleHQo
KS0+bGVuZ3RoKCkgfHwgIWhhc0RhbWFnZShib3gpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgICAgICBUZXh0Qm94UGFpbnRlciBwYWludGVyKCptX2lubGluZUNvbnRlbnQs
IGJveCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgICAgICBNb2Rlcm5UZXh0Qm94
UGFpbnRlciBwYWludGVyKCptX2lubGluZUNvbnRlbnQsIGJveCwgcGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7CiAgICAgICAgICAgICBwYWludGVyLnBhaW50KCk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50
ZXIuY3BwCmluZGV4IDFmMzc0MzdkNjBmNS4uYjBhNDUzNmM2YTdiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAg
dm9pZCBJbmxpbmVCb3hQYWludGVyOjpwYWludE1hc2soKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMuCi0gICAgYXV0byBsb2NhbFJlY3QgPSBM
YXlvdXRSZWN0IHsgbV9pbmxpbmVCb3gudmlzdWFsUmVjdChtX2lubGluZUJveC5saW5lQm94KCkt
PmNvbnRhaW5pbmdCbG9jaygpLmxvZ2ljYWxIZWlnaHQoKSkgfTsKKyAgICBhdXRvIGxvY2FsUmVj
dCA9IExheW91dFJlY3QgeyBtX2lubGluZUJveC52aXN1YWxSZWN0KCkgfTsKICAgICBMYXlvdXRQ
b2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9wYWludE9mZnNldCArIGxvY2FsUmVjdC5sb2Nh
dGlvbigpOwogCiAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tOaW5lUGllY2VJbWFnZSA9
IHJlbmRlcmVyKCkuc3R5bGUoKS5tYXNrQm94SW1hZ2UoKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2
b2lkIElubGluZUJveFBhaW50ZXI6OnBhaW50RGVjb3JhdGlvbnMoKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMuCi0gICAgYXV0byBsb2NhbFJl
Y3QgPSBMYXlvdXRSZWN0IHsgbV9pbmxpbmVCb3gudmlzdWFsUmVjdChtX2lubGluZUJveC5saW5l
Qm94KCktPmNvbnRhaW5pbmdCbG9jaygpLmxvZ2ljYWxIZWlnaHQoKSkgfTsKKyAgICBhdXRvIGxv
Y2FsUmVjdCA9IExheW91dFJlY3QgeyBtX2lubGluZUJveC52aXN1YWxSZWN0KCkgfTsKICAgICBM
YXlvdXRQb2ludCBhZGp1c3RlZFBhaW50b2Zmc2V0ID0gbV9wYWludE9mZnNldCArIGxvY2FsUmVj
dC5sb2NhdGlvbigpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZv
LmNvbnRleHQoKTsKICAgICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IExheW91dFJlY3QoYWRqdXN0
ZWRQYWludG9mZnNldCwgbG9jYWxSZWN0LnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAKaW5kZXggN2MwZDBkODQwZDE5Li4zMTdm
ZmNhN2I0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxp
bmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5l
Rmxvd0JveC5jcHAKQEAgLTkyNiw3ICs5MjYsNyBAQCBpbmxpbmUgdm9pZCBMZWdhY3lJbmxpbmVG
bG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3coTGVnYWN5SW5saW5lVGV4dEJveCYgdAog
ICAgIAogICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyA9IExheW91dFJlY3QobG9naWNhbExlZnRW
aXN1YWxPdmVyZmxvdywgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsUmlnaHRWaXN1
YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1
YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyk7CiAKLSAgICBhdXRvIGRvY3Vt
ZW50TWFya2VyQm91bmRzID0gVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1
bWVudE1hcmtlckJvdW5kcyh0ZXh0Qm94KTsKKyAgICBhdXRvIGRvY3VtZW50TWFya2VyQm91bmRz
ID0gTGVnYWN5VGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtl
ckJvdW5kcyh0ZXh0Qm94KTsKICAgICBkb2N1bWVudE1hcmtlckJvdW5kcy5tb3ZlKHRleHRCb3gu
bG9naWNhbExlZnQoKSwgdGV4dEJveC5sb2dpY2FsVG9wKCkpOwogICAgIGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdyA9IHVuaW9uUmVjdChsb2dpY2FsVmlzdWFsT3ZlcmZsb3csIExheW91dFJlY3QoZG9j
dW1lbnRNYXJrZXJCb3VuZHMpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUlubGluZVRleHRCb3guY3BwCmluZGV4IDIwNjgyYTY4YjY5MS4uYzg0ODFlOTZkMWJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3Bw
CkBAIC0zOTcsNyArMzk3LDcgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICBpZiAobG9n
aWNhbFN0YXJ0ID49IHBhaW50RW5kIHx8IGxvZ2ljYWxTdGFydCArIGxvZ2ljYWxFeHRlbnQgPD0g
cGFpbnRTdGFydCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGV4dEJveFBhaW50ZXIgdGV4dEJv
eFBhaW50ZXIoKnRoaXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworICAgIExlZ2FjeVRleHRC
b3hQYWludGVyIHRleHRCb3hQYWludGVyKCp0aGlzLCBwYWludEluZm8sIHBhaW50T2Zmc2V0KTsK
ICAgICB0ZXh0Qm94UGFpbnRlci5wYWludCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAppbmRleCBjZDNhMTY1ZmRjMDYuLmFkZWM2NGNh
NWQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRl
eHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJv
eC5oCkBAIC0xNTAsNyArMTUwLDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aDsKLSAgICBmcmllbmQgY2xhc3MgVGV4
dEJveFBhaW50ZXI7CiAKICAgICBjb25zdCBSZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0
KCkgY29uc3Q7CiAgICAgY29uc3QgRm9udENhc2NhZGUmIGxpbmVGb250KCkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRl
eCA2NmJhODg1ZGI3N2MuLjg3ZjA0OGM2NTczOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC03MjcsNyArNzI3LDEyIEBAIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TWFza0ZvclRleHRGaWxsQm94KEltYWdlQnVm
ZmVyKiBtYXNrSW1hZ2UsIGNvbnN0CiAgICAgICAgIGZvciAoYXV0byBib3ggPSBpbmxpbmVCb3gt
PmZpcnN0TGVhZkJveCgpLCBlbmQgPSBpbmxpbmVCb3gtPmVuZExlYWZCb3goKTsgYm94ICE9IGVu
ZDsgYm94LnRyYXZlcnNlTmV4dE9uTGluZSgpKSB7CiAgICAgICAgICAgICBpZiAoIWJveC0+aXNU
ZXh0KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBUZXh0Qm94UGFp
bnRlciB0ZXh0Qm94UGFpbnRlcihkb3duY2FzdDxJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJh
dG9yPihib3gpLCBtYXNrSW5mbywgcGFpbnRPZmZzZXQpOworICAgICAgICAgICAgaWYgKGF1dG8q
IGxlZ2FjeVRleHRCb3ggPSBkb3duY2FzdDxMZWdhY3lJbmxpbmVUZXh0Qm94Pihib3gtPmxlZ2Fj
eUlubGluZUJveCgpKSkgeworICAgICAgICAgICAgICAgIExlZ2FjeVRleHRCb3hQYWludGVyIHRl
eHRCb3hQYWludGVyKCpsZWdhY3lUZXh0Qm94LCBtYXNrSW5mbywgcGFpbnRPZmZzZXQpOworICAg
ICAgICAgICAgICAgIHRleHRCb3hQYWludGVyLnBhaW50KCk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBNb2Rlcm5UZXh0Qm94UGFpbnRlciB0
ZXh0Qm94UGFpbnRlcihib3gtPm1vZGVyblBhdGgoKS5pbmxpbmVDb250ZW50KCksIGJveC0+bW9k
ZXJuUGF0aCgpLmJveCgpLCBtYXNrSW5mbywgcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgdGV4
dEJveFBhaW50ZXIucGFpbnQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAppbmRleCA5NWI1MjY3YzllYmUu
LjkxYmY1MWY5MmNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRC
b3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50
ZXIuY3BwCkBAIC00NSwyOSArNDUsMzQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0
Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4
dEJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCkKLSAgICA6IFRleHRCb3hQYWludGVyKElubGluZUl0ZXJhdG9yOjp0ZXh0Qm94Rm9yKCZ0ZXh0
Qm94KSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCkKK3N0YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRl
RG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRv
ciYsIGNvbnN0IE1hcmtlZFRleHQmKTsKKworTGVnYWN5VGV4dEJveFBhaW50ZXI6OkxlZ2FjeVRl
eHRCb3hQYWludGVyKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmIHRleHRCb3gsIFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCisgICAgOiBUZXh0
Qm94UGFpbnRlcihJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aCB7ICZ0ZXh0Qm94IH0sIHBh
aW50SW5mbywgcGFpbnRPZmZzZXQpCiB7CiAgICAgbV9lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fi
b3ZlID0gdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKG1fc3R5bGUpOwogfQog
CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi1UZXh0Qm94UGFpbnRlcjo6
VGV4dEJveFBhaW50ZXIoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmIGlu
bGluZUNvbnRlbnQsIGNvbnN0IElubGluZURpc3BsYXk6OkJveCYgYm94LCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotICAgIDogVGV4dEJveFBh
aW50ZXIoSW5saW5lSXRlcmF0b3I6OnRleHRCb3hGb3IoaW5saW5lQ29udGVudCwgYm94KSwgcGFp
bnRJbmZvLCBwYWludE9mZnNldCkKK01vZGVyblRleHRCb3hQYWludGVyOjpNb2Rlcm5UZXh0Qm94
UGFpbnRlcihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYgaW5saW5lQ29u
dGVudCwgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94JiBib3gsIFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCisgICAgOiBUZXh0Qm94UGFpbnRlcihJ
bmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aCB7IGlubGluZUNvbnRlbnQsIGlubGluZUNvbnRl
bnQuaW5kZXhGb3JCb3goYm94KSB9LCBwYWludEluZm8sIHBhaW50T2Zmc2V0KQogewogfQogI2Vu
ZGlmCiAKLVRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBJbmxpbmVJdGVyYXRv
cjo6VGV4dEJveEl0ZXJhdG9yJiB0ZXh0Qm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotICAgIDogbV90ZXh0Qm94KHRleHRCb3gpCi0gICAg
LCBtX3JlbmRlcmVyKG1fdGV4dEJveC0+cmVuZGVyZXIoKSkKK3RlbXBsYXRlPHR5cGVuYW1lIFRl
eHRCb3hQYXRoPgorVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpUZXh0Qm94UGFpbnRlcihU
ZXh0Qm94UGF0aCYmIHRleHRCb3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQpCisgICAgOiBtX3RleHRCb3goV1RGTW92ZSh0ZXh0Qm94KSkKKyAg
ICAsIG1fcmVuZGVyZXIoZG93bmNhc3Q8UmVuZGVyVGV4dD4obV90ZXh0Qm94LnJlbmRlcmVyKCkp
KQogICAgICwgbV9kb2N1bWVudChtX3JlbmRlcmVyLmRvY3VtZW50KCkpCi0gICAgLCBtX3N0eWxl
KG1fdGV4dEJveC0+c3R5bGUoKSkKLSAgICAsIG1fcGFpbnRUZXh0UnVuKG1fdGV4dEJveC0+Y3Jl
YXRlVGV4dFJ1bigpKQorICAgICwgbV9zdHlsZShtX3RleHRCb3guc3R5bGUoKSkKKyAgICAsIG1f
bG9naWNhbFJlY3QobV90ZXh0Qm94LmlzSG9yaXpvbnRhbCgpID8gbV90ZXh0Qm94LnZpc3VhbFJl
Y3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkgOiBtX3RleHRCb3gudmlzdWFsUmVjdElnbm9yaW5n
QmxvY2tEaXJlY3Rpb24oKS50cmFuc3Bvc2VkUmVjdCgpKQorICAgICwgbV9wYWludFRleHRSdW4o
bV90ZXh0Qm94LmNyZWF0ZVRleHRSdW4oSW5saW5lSXRlcmF0b3I6OkNyZWF0ZVRleHRSdW5Nb2Rl
OjpQYWludGluZykpCiAgICAgLCBtX3BhaW50SW5mbyhwYWludEluZm8pCi0gICAgLCBtX3NlbGVj
dGFibGVSYW5nZShtX3RleHRCb3gtPnNlbGVjdGFibGVSYW5nZSgpKQorICAgICwgbV9zZWxlY3Rh
YmxlUmFuZ2UobV90ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpKQogICAgICwgbV9wYWludFJlY3Qo
Y29tcHV0ZVBhaW50UmVjdChwYWludE9mZnNldCkpCi0gICAgLCBtX2lzRmlyc3RMaW5lKG1fdGV4
dEJveC0+bGluZUJveCgpLT5pc0ZpcnN0KCkpCisgICAgLCBtX2lzRmlyc3RMaW5lKG1fdGV4dEJv
eC5pc0ZpcnN0TGluZSgpKQorICAgICwgbV9pc0NvbWJpbmVkVGV4dChpczxSZW5kZXJDb21iaW5l
VGV4dD4obV9yZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KG1fcmVuZGVy
ZXIpLmlzQ29tYmluZWQoKSkKICAgICAsIG1faXNQcmludGluZyhtX2RvY3VtZW50LnByaW50aW5n
KCkpCiAgICAgLCBtX2hhdmVTZWxlY3Rpb24oY29tcHV0ZUhhdmVTZWxlY3Rpb24oKSkKICAgICAs
IG1fY29udGFpbnNDb21wb3NpdGlvbihtX3JlbmRlcmVyLnRleHROb2RlKCkgJiYgbV9yZW5kZXJl
ci5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uTm9kZSgpID09IG1fcmVuZGVyZXIudGV4dE5v
ZGUoKSkKQEAgLTc2LDExICs4MSwyMCBAQCBUZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIo
Y29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciYgdGV4dEJveCwgUAogICAgIEFT
U0VSVChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCB8fCBwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uIHx8IHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlOjpUZXh0Q2xpcCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6RXZl
bnRSZWdpb24pOwogfQogCi1UZXh0Qm94UGFpbnRlcjo6flRleHRCb3hQYWludGVyKCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+Ojp+
VGV4dEJveFBhaW50ZXIoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4K
K0lubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBh
dGg+OjptYWtlSXRlcmF0b3IoKSBjb25zdAogeworICAgIGF1dG8gcGF0aENvcHkgPSBtX3RleHRC
b3g7CisgICAgcmV0dXJuIElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IgeyBXVEZNb3Zl
KHBhdGhDb3B5KSB9OwogfQogCi12b2lkIFRleHRCb3hQYWludGVyOjpwYWludCgpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK3ZvaWQgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+
OjpwYWludCgpCiB7CiAgICAgaWYgKG1fcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlNl
bGVjdGlvbiAmJiAhbV9oYXZlU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CkBAIC05MSw3ICsx
MDUsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludCgpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBib29sIHNob3VsZFJvdGF0ZSA9ICF0ZXh0Qm94KCkuaXNIb3Jpem9udGFsKCkg
JiYgIXRleHRCb3goKS5pc0NvbWJpbmVkVGV4dCgpOworICAgIGJvb2wgc2hvdWxkUm90YXRlID0g
IXRleHRCb3goKS5pc0hvcml6b250YWwoKSAmJiAhbV9pc0NvbWJpbmVkVGV4dDsKICAgICBpZiAo
c2hvdWxkUm90YXRlKQogICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJv
dGF0aW9uKG1fcGFpbnRSZWN0LCBDbG9ja3dpc2UpKTsKIApAQCAtMTE1LDcgKzEyOSw4IEBAIHZv
aWQgVGV4dEJveFBhaW50ZXI6OnBhaW50KCkKICAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgp
LmNvbmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwogfQog
Ci1NYXJrZWRUZXh0IFRleHRCb3hQYWludGVyOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlv
bkluQm94KCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorTWFya2VkVGV4dCBUZXh0
Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5C
b3goKQogewogICAgIGF1dG8gW3NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmRdID0gbV9yZW5k
ZXJlci52aWV3KCkuc2VsZWN0aW9uKCkucmFuZ2VGb3JUZXh0Qm94KG1fcmVuZGVyZXIsIG1fc2Vs
ZWN0YWJsZVJhbmdlKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPCBzZWxlY3Rpb25FbmQpCkBA
IC0xMjMsNyArMTM4LDggQEAgTWFya2VkVGV4dCBUZXh0Qm94UGFpbnRlcjo6Y3JlYXRlTWFya2Vk
VGV4dEZyb21TZWxlY3Rpb25JbkJveCgpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBUZXh0
Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQ
YXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50QmFja2dyb3VuZCgp
CiB7CiAgICAgYXV0byBzaG91bGRQYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCA9IG1fY29udGFp
bnNDb21wb3NpdGlvbiAmJiAhbV91c2VDdXN0b21VbmRlcmxpbmVzOwogI2lmIEVOQUJMRShURVhU
X1NFTEVDVElPTikKQEAgLTE2OSw3ICsxODUsOCBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWlu
dEJhY2tncm91bmQoKQogICAgICAgICBwYWludEJhY2tncm91bmQobWFya2VkVGV4dCk7CiB9CiAK
LXZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94
UGF0aD46OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCkKIHsKICAgICBhdXRvIHNob3Vs
ZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCA9IG1faGF2ZVNlbGVjdGlvbiAmJiAhbV91c2VDdXN0
b21VbmRlcmxpbmVzOwogICAgIGF1dG8gaGFzVGV4dERlY29yYXRpb24gPSAhbV9zdHlsZS50ZXh0
RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlzRW1wdHkoKTsKQEAgLTIzMSw4ICsyNDgsNyBAQCB2b2lk
IFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucygpCiAgICAgfQog
CiAgICAgaWYgKGhhc0RlY29yYXRpb24gJiYgbV9wYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IHRleHRCb3goKS5jcmVh
dGVUZXh0UnVuKCk7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fc2VsZWN0YWJsZVJhbmdl
LnRydW5jYXRpb24udmFsdWVfb3IodGV4dFJ1bi5sZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG1fc2VsZWN0YWJsZVJhbmdlLnRydW5jYXRpb24udmFsdWVfb3IobV9wYWludFRl
eHRSdW4ubGVuZ3RoKCkpOwogICAgICAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IDA7CiAg
ICAgICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCA9IDA7CiAgICAgICAgIGlmIChtX2hhdmVTZWxl
Y3Rpb24pCkBAIC0yODcsNyArMzAzLDggQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3Jl
Z3JvdW5kQW5kRGVjb3JhdGlvbnMoKQogICAgIH0KIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6
cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBh
dGg+Cit2b2lkIFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRDb21wb3NpdGlvbkJh
Y2tncm91bmQoKQogewogICAgIGF1dG8mIGVkaXRvciA9IG1fcmVuZGVyZXIuZnJhbWUoKS5lZGl0
b3IoKTsKIApAQCAtMzE0LDEyICszMzEsMTQgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRD
b21wb3NpdGlvbkJhY2tncm91bmQoKQogICAgIH0KIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6
cGFpbnRCYWNrZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK3ZvaWQgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBh
dGg+OjpwYWludEJhY2tncm91bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCkK
IHsKLSAgICBwYWludEJhY2tncm91bmQobWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4
dC5lbmRPZmZzZXQsIG1hcmtlZFRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9yKTsKKyAgICBwYWlu
dEJhY2tncm91bmQobWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQs
IG1hcmtlZFRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9yLCBCYWNrZ3JvdW5kU3R5bGU6Ok5vcm1h
bCk7CiB9CiAKLXZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCh1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IsIEJhY2tn
cm91bmRTdHlsZSBiYWNrZ3JvdW5kU3R5bGUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0
aD4KK3ZvaWQgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludEJhY2tncm91bmQodW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCYWNrZ3JvdW5kU3R5bGUgYmFja2dyb3VuZFN0eWxlKQogewogICAgIGlmIChzdGFydE9mZnNl
dCA+PSBlbmRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTMzMCwxNCArMzQ5LDE0IEBAIHZv
aWQgVGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCh1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0LCBjCiAKICAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRleHQgaXMg
dHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRp
b24KICAgICAvLyBkcmF3IGl0cyBvd24gaGlnaGxpZ2h0LgotICAgIGF1dG8gbGluZUJveCA9IHRl
eHRCb3goKS5saW5lQm94KCk7CisgICAgYXV0byBsaW5lQm94ID0gbWFrZUl0ZXJhdG9yKCktPmxp
bmVCb3goKTsKICAgICBhdXRvIHNlbGVjdGlvbkJvdHRvbSA9IExpbmVTZWxlY3Rpb246OmxvZ2lj
YWxCb3R0b20oKmxpbmVCb3gpOwogICAgIGF1dG8gc2VsZWN0aW9uVG9wID0gTGluZVNlbGVjdGlv
bjo6bG9naWNhbFRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKmxpbmVCb3gpOwogICAgIC8v
IFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBzbyB0
aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBzdWJyYW5nZSBhcmUgb24KICAgICAvLyB0
aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgotICAgIGF1dG8g
ZGVsdGFZID0gTGF5b3V0VW5pdCB7IG1fc3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgp
ID8gc2VsZWN0aW9uQm90dG9tIC0gdGV4dEJveCgpLmxvZ2ljYWxCb3R0b20oKSA6IHRleHRCb3go
KS5sb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AgfTsKKyAgICBhdXRvIGRlbHRhWSA9IExheW91
dFVuaXQgeyBtX3N0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJv
dHRvbSAtIG1fbG9naWNhbFJlY3QubWF4WSgpIDogbV9sb2dpY2FsUmVjdC55KCkgLSBzZWxlY3Rp
b25Ub3AgfTsKICAgICBhdXRvIHNlbGVjdGlvbkhlaWdodCA9IExheW91dFVuaXQgeyBzdGQ6Om1h
eCgwLmYsIHNlbGVjdGlvbkJvdHRvbSAtIHNlbGVjdGlvblRvcCkgfTsKLSAgICBhdXRvIHNlbGVj
dGlvblJlY3QgPSBMYXlvdXRSZWN0IHsgTGF5b3V0VW5pdChtX3BhaW50UmVjdC54KCkpLCBMYXlv
dXRVbml0KG1fcGFpbnRSZWN0LnkoKSAtIGRlbHRhWSksIExheW91dFVuaXQodGV4dEJveCgpLmxv
Z2ljYWxXaWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07CisgICAgYXV0byBzZWxlY3Rpb25SZWN0
ID0gTGF5b3V0UmVjdCB7IExheW91dFVuaXQobV9wYWludFJlY3QueCgpKSwgTGF5b3V0VW5pdCht
X3BhaW50UmVjdC55KCkgLSBkZWx0YVkpLCBMYXlvdXRVbml0KG1fbG9naWNhbFJlY3Qud2lkdGgo
KSksIHNlbGVjdGlvbkhlaWdodCB9OwogICAgIGZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9u
UmVjdEZvclRleHQobV9wYWludFRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQpOwogCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgcGFpbnRpbmcgY29tYmluZWQgdGV4
dC4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwOTkzPi4K
QEAgLTM1Miw3ICszNzEsOCBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQo
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYwogICAgIGNvbnRleHQu
ZmlsbFJlY3QoYmFja2dyb3VuZFJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRl
cjo6cGFpbnRGb3JlZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK3ZvaWQgVGV4dEJveFBhaW50ZXI8VGV4dEJv
eFBhdGg+OjpwYWludEZvcmVncm91bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4
dCkKIHsKICAgICBpZiAobWFya2VkVGV4dC5zdGFydE9mZnNldCA+PSBtYXJrZWRUZXh0LmVuZE9m
ZnNldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzczLDcgKzM5Myw3IEBAIHZvaWQgVGV4dEJveFBh
aW50ZXI6OnBhaW50Rm9yZWdyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0
KQogICAgICAgICBpZiAobV9zdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVyKCkpCiAgICAgICAgICAg
ICB0ZXh0UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRlcigmbV9zdHlsZS5hcHBsZUNvbG9yRmls
dGVyKCkpOwogICAgIH0KLSAgICB0ZXh0UGFpbnRlci5zZXRFbXBoYXNpc01hcmsoZW1waGFzaXNN
YXJrLCBlbXBoYXNpc01hcmtPZmZzZXQsIHRleHRCb3goKS5pc0NvbWJpbmVkVGV4dCgpID8gJmRv
d25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihtX3JlbmRlcmVyKSA6IG51bGxwdHIpOworICAgIHRl
eHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNpc01hcmssIGVtcGhhc2lzTWFya09mZnNl
dCwgbV9pc0NvbWJpbmVkVGV4dCA/ICZkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4obV9yZW5k
ZXJlcikgOiBudWxscHRyKTsKICAgICBpZiAoYXV0byogZGVidWdTaGFkb3cgPSBkZWJ1Z1RleHRT
aGFkb3coKSkKICAgICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93KGRlYnVnU2hhZG93KTsKIApA
QCAtMzgyLDE4ICs0MDIsMTkgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5k
KGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCiAgICAgICAgIGNvbnRleHQuc2V0
QWxwaGEobWFya2VkVGV4dC5zdHlsZS5hbHBoYSk7CiAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0
KGNvbnRleHQsIG1hcmtlZFRleHQuc3R5bGUudGV4dFN0eWxlcyk7CiAKLSAgICBpZiAoYXV0byog
bGVnYWN5SW5saW5lQm94ID0gdGV4dEJveCgpLmxlZ2FjeUlubGluZUJveCgpKQotICAgICAgICB0
ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZOZWVkZWQoKmxlZ2FjeUlubGluZUJveCwg
bV9wYWludEluZm8sIG1fcGFpbnRUZXh0UnVuKTsKKyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PFRleHRCb3hQYXRoLCBJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aD4pCisgICAg
ICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZCgqdGV4dEJveCgpLmxl
Z2FjeUlubGluZUJveCgpLCBtX3BhaW50SW5mbywgbV9wYWludFRleHRSdW4pOwogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIGVsc2UKLSAgICAgICAgdGV4dFBhaW50
ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKCp0ZXh0Qm94KCkuaW5saW5lQm94KCksIG1f
cGFpbnRJbmZvLCBtX3BhaW50VGV4dFJ1bik7CisgICAgICAgIHRleHRQYWludGVyLnNldEdseXBo
RGlzcGxheUxpc3RJZk5lZWRlZCh0ZXh0Qm94KCkuYm94KCksIG1fcGFpbnRJbmZvLCBtX3BhaW50
VGV4dFJ1bik7CiAjZW5kaWYKIAogICAgIC8vIFRleHRQYWludGVyIHdhbnRzIHRoZSBib3ggcmVj
dGFuZ2xlIGFuZCB0ZXh0IG9yaWdpbiBvZiB0aGUgZW50aXJlIGxpbmUgYm94LgogICAgIHRleHRQ
YWludGVyLnBhaW50UmFuZ2UobV9wYWludFRleHRSdW4sIG1fcGFpbnRSZWN0LCB0ZXh0T3JpZ2lu
RnJvbVBhaW50UmVjdChtX3BhaW50UmVjdCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtl
ZFRleHQuZW5kT2Zmc2V0KTsKIH0KIAotVGV4dERlY29yYXRpb25QYWludGVyIFRleHRCb3hQYWlu
dGVyOjpjcmVhdGVEZWNvcmF0aW9uUGFpbnRlcihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJr
ZWRUZXh0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBPdXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNu
YXBwZWRTZWxlY3Rpb25SZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+CitUZXh0
RGVjb3JhdGlvblBhaW50ZXIgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpjcmVhdGVEZWNv
cmF0aW9uUGFpbnRlcihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGNsaXBPdXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNuYXBwZWRTZWxlY3Rpb25S
ZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRl
eHQoKTsKIApAQCAtNDE2LDcgKzQzNyw3IEBAIFRleHREZWNvcmF0aW9uUGFpbnRlciBUZXh0Qm94
UGFpbnRlcjo6Y3JlYXRlRGVjb3JhdGlvblBhaW50ZXIoY29uc3QgU3R5bGVkTWFya2VkCiAgICAg
YXV0byB0ZXh0RGVjb3JhdGlvbnMgPSBtX3N0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7
CiAgICAgdGV4dERlY29yYXRpb25zLmFkZChUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnRleHREZWNv
cmF0aW9uc0luRWZmZWN0Rm9yU3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0
eWxlcykpOwogICAgIFRleHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9uUGFpbnRlciB7IGNv
bnRleHQsIHRleHREZWNvcmF0aW9ucywgbV9yZW5kZXJlciwgbV9pc0ZpcnN0TGluZSwgZm9udCwg
bWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcyB9OwotICAgIGRlY29yYXRpb25Q
YWludGVyLnNldFRleHRCb3gobV90ZXh0Qm94KTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRU
ZXh0Qm94KG1ha2VJdGVyYXRvcigpKTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0aChz
bmFwcGVkU2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJ
c0hvcml6b250YWwodGV4dEJveCgpLmlzSG9yaXpvbnRhbCgpKTsKICAgICBpZiAobWFya2VkVGV4
dC5zdHlsZS50ZXh0U2hhZG93KSB7CkBAIC00MjgsMzEgKzQ0OSwzMiBAQCBUZXh0RGVjb3JhdGlv
blBhaW50ZXIgVGV4dEJveFBhaW50ZXI6OmNyZWF0ZURlY29yYXRpb25QYWludGVyKGNvbnN0IFN0
eWxlZE1hcmtlZAogICAgIHJldHVybiBkZWNvcmF0aW9uUGFpbnRlcjsKIH0KIAotdm9pZCBUZXh0
Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMoVGV4dERlY29yYXRpb25QYWlu
dGVyJiBkZWNvcmF0aW9uUGFpbnRlciwgY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBzbmFwcGVkU2VsZWN0aW9uUmVjdCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50
QmFja2dyb3VuZERlY29yYXRpb25zKFRleHREZWNvcmF0aW9uUGFpbnRlciYgZGVjb3JhdGlvblBh
aW50ZXIsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgc25hcHBlZFNlbGVjdGlvblJlY3QpCiB7Ci0gICAgYm9vbCBpc0NvbWJpbmVkVGV4dCA9IHRl
eHRCb3goKS5pc0NvbWJpbmVkVGV4dCgpOwotICAgIGlmIChpc0NvbWJpbmVkVGV4dCkKKyAgICBp
ZiAobV9pc0NvbWJpbmVkVGV4dCkKICAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgpLmNvbmNh
dENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ2xvY2t3aXNlKSk7CiAKICAgICBkZWNvcmF0aW9u
UGFpbnRlci5wYWludEJhY2tncm91bmREZWNvcmF0aW9ucyhtX3BhaW50VGV4dFJ1bi5zdWJSdW4o
bWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQgLSBtYXJrZWRUZXh0
LnN0YXJ0T2Zmc2V0KSwgdGV4dE9yaWdpbkZyb21QYWludFJlY3Qoc25hcHBlZFNlbGVjdGlvblJl
Y3QpLCBzbmFwcGVkU2VsZWN0aW9uUmVjdC5sb2NhdGlvbigpKTsKIAotICAgIGlmIChpc0NvbWJp
bmVkVGV4dCkKKyAgICBpZiAobV9pc0NvbWJpbmVkVGV4dCkKICAgICAgICAgbV9wYWludEluZm8u
Y29udGV4dCgpLmNvbmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ291bnRlcmNsb2Nrd2lz
ZSkpOwogfQogCi12b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmREZWNvcmF0aW9u
cyhUZXh0RGVjb3JhdGlvblBhaW50ZXImIGRlY29yYXRpb25QYWludGVyLCBjb25zdCBGbG9hdFJl
Y3QmIHNuYXBwZWRTZWxlY3Rpb25SZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+
Cit2b2lkIFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRGb3JlZ3JvdW5kRGVjb3Jh
dGlvbnMoVGV4dERlY29yYXRpb25QYWludGVyJiBkZWNvcmF0aW9uUGFpbnRlciwgY29uc3QgRmxv
YXRSZWN0JiBzbmFwcGVkU2VsZWN0aW9uUmVjdCkKIHsKLSAgICBib29sIGlzQ29tYmluZWRUZXh0
ID0gdGV4dEJveCgpLmlzQ29tYmluZWRUZXh0KCk7Ci0gICAgaWYgKGlzQ29tYmluZWRUZXh0KQor
ICAgIGlmIChtX2lzQ29tYmluZWRUZXh0KQogICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCku
Y29uY2F0Q1RNKHJvdGF0aW9uKG1fcGFpbnRSZWN0LCBDbG9ja3dpc2UpKTsKIAogICAgIGRlY29y
YXRpb25QYWludGVyLnBhaW50Rm9yZWdyb3VuZERlY29yYXRpb25zKHNuYXBwZWRTZWxlY3Rpb25S
ZWN0LmxvY2F0aW9uKCkpOwogCi0gICAgaWYgKGlzQ29tYmluZWRUZXh0KQorICAgIGlmIChtX2lz
Q29tYmluZWRUZXh0KQogICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJv
dGF0aW9uKG1fcGFpbnRSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CiB9CiAKLXZvaWQgVGV4dEJv
eFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKCkKK3RlbXBsYXRlPHR5cGVuYW1l
IFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Q29t
cG9zaXRpb25VbmRlcmxpbmVzKCkKIHsKICAgICBmb3IgKGF1dG8mIHVuZGVybGluZSA6IG1fcmVu
ZGVyZXIuZnJhbWUoKS5lZGl0b3IoKS5jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMoKSkgewog
ICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA8PSB0ZXh0Qm94KCkuc3RhcnQoKSkgewpA
QCAtNDg5LDE3ICs1MTEsMTggQEAgc3RhdGljIGZsb2F0IHRleHRQb3NpdGlvbihjb25zdCBJbmxp
bmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiB0ZXh0Qm94KQogICAgIHJldHVybiB0ZXh0Qm94
LT5sb2dpY2FsTGVmdCgpIC0gdGV4dEJveC0+bGluZUJveCgpLT5jb250ZW50TG9naWNhbExlZnQo
KTsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShj
b25zdCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQordGVtcGxhdGU8dHlwZW5hbWUg
VGV4dEJveFBhdGg+Cit2b2lkIFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRDb21w
b3NpdGlvblVuZGVybGluZShjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQog
ewogICAgIGZsb2F0IHN0YXJ0ID0gMDsgLy8gc3RhcnQgb2YgbGluZSB0byBkcmF3LCByZWxhdGl2
ZSB0byB0eAotICAgIGZsb2F0IHdpZHRoID0gdGV4dEJveCgpLmxvZ2ljYWxXaWR0aCgpOyAvLyBo
b3cgbXVjaCBsaW5lIHRvIGRyYXcKKyAgICBmbG9hdCB3aWR0aCA9IG1fbG9naWNhbFJlY3Qud2lk
dGgoKTsgLy8gaG93IG11Y2ggbGluZSB0byBkcmF3CiAgICAgYm9vbCB1c2VXaG9sZVdpZHRoID0g
dHJ1ZTsKICAgICB1bnNpZ25lZCBwYWludFN0YXJ0ID0gdGV4dEJveCgpLnN0YXJ0KCk7CiAgICAg
dW5zaWduZWQgcGFpbnRFbmQgPSB0ZXh0Qm94KCkuZW5kKCk7CiAgICAgaWYgKHBhaW50U3RhcnQg
PD0gdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgIHBhaW50U3RhcnQgPSB1bmRlcmxp
bmUuc3RhcnRPZmZzZXQ7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKLSAgICAgICAg
c3RhcnQgPSBtX3JlbmRlcmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgpLCBwYWludFN0YXJ0IC0g
dGV4dEJveCgpLnN0YXJ0KCksIHRleHRQb3NpdGlvbihtX3RleHRCb3gpLCBtX2lzRmlyc3RMaW5l
KTsKKyAgICAgICAgc3RhcnQgPSBtX3JlbmRlcmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgpLCBw
YWludFN0YXJ0IC0gdGV4dEJveCgpLnN0YXJ0KCksIHRleHRQb3NpdGlvbihtYWtlSXRlcmF0b3Io
KSksIG1faXNGaXJzdExpbmUpOwogICAgIH0KICAgICBpZiAocGFpbnRFbmQgIT0gdW5kZXJsaW5l
LmVuZE9mZnNldCkgewogICAgICAgICBwYWludEVuZCA9IHN0ZDo6bWluKHBhaW50RW5kLCAodW5z
aWduZWQpdW5kZXJsaW5lLmVuZE9mZnNldCk7CkBAIC01MTAsOCArNTMzLDggQEAgdm9pZCBUZXh0
Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBDb21wb3NpdGlvblVu
ZGVybGluZSYgdW5kZXIKICAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZhbHNlOwogICAgIH0KICAg
ICBpZiAoIXVzZVdob2xlV2lkdGgpIHsKLSAgICAgICAgd2lkdGggPSBtX3JlbmRlcmVyLndpZHRo
KHBhaW50U3RhcnQsIHBhaW50RW5kIC0gcGFpbnRTdGFydCwgdGV4dFBvc2l0aW9uKG1fdGV4dEJv
eCkgKyBzdGFydCwgbV9pc0ZpcnN0TGluZSk7Ci0gICAgICAgIG1pcnJvclJUTFNlZ21lbnQodGV4
dEJveCgpLmxvZ2ljYWxXaWR0aCgpLCB0ZXh0Qm94KCkuZGlyZWN0aW9uKCksIHN0YXJ0LCB3aWR0
aCk7CisgICAgICAgIHdpZHRoID0gbV9yZW5kZXJlci53aWR0aChwYWludFN0YXJ0LCBwYWludEVu
ZCAtIHBhaW50U3RhcnQsIHRleHRQb3NpdGlvbihtYWtlSXRlcmF0b3IoKSkgKyBzdGFydCwgbV9p
c0ZpcnN0TGluZSk7CisgICAgICAgIG1pcnJvclJUTFNlZ21lbnQobV9sb2dpY2FsUmVjdC53aWR0
aCgpLCB0ZXh0Qm94KCkuZGlyZWN0aW9uKCksIHN0YXJ0LCB3aWR0aCk7CiAgICAgfQogCiAgICAg
Ly8gVGhpY2sgbWFya2VkIHRleHQgdW5kZXJsaW5lcyBhcmUgMnB4IHRoaWNrIGFzIGxvbmcgYXMg
dGhlcmUgaXMgcm9vbSBmb3IgdGhlIDJweCBsaW5lIHVuZGVyIHRoZSBiYXNlbGluZS4KQEAgLTUx
OSw3ICs1NDIsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJs
aW5lKGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB1bmRlcgogICAgIC8vIElmIHRoZXJlJ3Mg
bm90IGVub3VnaCBzcGFjZSB0aGUgdW5kZXJsaW5lIHdpbGwgdG91Y2ggb3Igb3ZlcmxhcCBjaGFy
YWN0ZXJzLgogICAgIGludCBsaW5lVGhpY2tuZXNzID0gMTsKICAgICBpbnQgYmFzZWxpbmUgPSBt
X3N0eWxlLm1ldHJpY3NPZlByaW1hcnlGb250KCkuYXNjZW50KCk7Ci0gICAgaWYgKHVuZGVybGlu
ZS50aGljayAmJiB0ZXh0Qm94KCkubG9naWNhbEhlaWdodCgpIC0gYmFzZWxpbmUgPj0gMikKKyAg
ICBpZiAodW5kZXJsaW5lLnRoaWNrICYmIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCkgLSBiYXNlbGlu
ZSA+PSAyKQogICAgICAgICBsaW5lVGhpY2tuZXNzID0gMjsKIAogICAgIC8vIFdlIG5lZWQgdG8g
aGF2ZSBzb21lIHNwYWNlIGJldHdlZW4gdW5kZXJsaW5lcyBvZiBzdWJzZXF1ZW50IGNsYXVzZXMs
IGJlY2F1c2Ugc29tZSBpbnB1dCBtZXRob2RzIGRvIG5vdCB1c2UgZGlmZmVyZW50IHVuZGVybGlu
ZSBzdHlsZXMgZm9yIHRob3NlLgpAQCAtNTMzLDE3ICs1NTYsMTggQEAgdm9pZCBUZXh0Qm94UGFp
bnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBDb21wb3NpdGlvblVuZGVybGlu
ZSYgdW5kZXIKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250
ZXh0KCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih1bmRlcmxpbmVDb2xvcik7CiAgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobGluZVRoaWNrbmVzcyk7Ci0gICAgY29udGV4dC5k
cmF3TGluZUZvclRleHQoRmxvYXRSZWN0KG1fcGFpbnRSZWN0LngoKSArIHN0YXJ0LCBtX3BhaW50
UmVjdC55KCkgKyB0ZXh0Qm94KCkubG9naWNhbEhlaWdodCgpIC0gbGluZVRoaWNrbmVzcywgd2lk
dGgsIGxpbmVUaGlja25lc3MpLCBtX2RvY3VtZW50LnByaW50aW5nKCkpOworICAgIGNvbnRleHQu
ZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdChtX3BhaW50UmVjdC54KCkgKyBzdGFydCwgbV9wYWlu
dFJlY3QueSgpICsgbV9sb2dpY2FsUmVjdC5oZWlnaHQoKSAtIGxpbmVUaGlja25lc3MsIHdpZHRo
LCBsaW5lVGhpY2tuZXNzKSwgbV9pc1ByaW50aW5nKTsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRl
cjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VycygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0
Qm94UGF0aD4KK3ZvaWQgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludFBsYXRmb3Jt
RG9jdW1lbnRNYXJrZXJzKCkKIHsKICAgICBhdXRvIG1hcmtlZFRleHRzID0gTWFya2VkVGV4dDo6
Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSwg
TWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlvbik7CiAgICAgZm9yIChhdXRvJiBtYXJr
ZWRUZXh0IDogTWFya2VkVGV4dDo6c3ViZGl2aWRlKG1hcmtlZFRleHRzLCBNYXJrZWRUZXh0OjpP
dmVybGFwU3RyYXRlZ3k6OkZyb250bW9zdCkpCiAgICAgICAgIHBhaW50UGxhdGZvcm1Eb2N1bWVu
dE1hcmtlcihtYXJrZWRUZXh0KTsKIH0KIAotRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjYWxj
dWxhdGVVbmlvbk9mQWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTGVnYWN5SW5saW5lVGV4
dEJveCYgdGV4dEJveCkKK0Zsb2F0UmVjdCBMZWdhY3lUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRl
VW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gm
IHRleHRCb3gpCiB7CiAgICAgLy8gVGhpcyBtdXN0IG1hdGNoIHBhaW50UGxhdGZvcm1Eb2N1bWVu
dE1hcmtlcnMoKS4KICAgICBGbG9hdFJlY3QgcmVzdWx0OwpAQCAtNTUzLDEzICs1NzcsMTQgQEAg
RmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVVbmlvbk9mQWxsRG9jdW1lbnRNYXJr
ZXJCb3VuZHMoY29uc3QgTGVnYWN5SW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFRl
eHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29uc3QgTWFya2VkVGV4
dCYgbWFya2VkVGV4dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0
Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihjb25z
dCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogewogICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5n
L2dyYW1tYXIgbWFya2VycyAoNTMyNzg4NykKICAgICBpZiAobV9kb2N1bWVudC5wcmludGluZygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGJvdW5kcyA9IGNhbGN1bGF0ZURvY3VtZW50
TWFya2VyQm91bmRzKG1fdGV4dEJveCwgbWFya2VkVGV4dCk7CisgICAgYXV0byBib3VuZHMgPSBj
YWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhtYWtlSXRlcmF0b3IoKSwgbWFya2VkVGV4dCk7
CiAKICAgICBhdXRvIGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBlID0gWyZdKCkgLT4gRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUgewogICAgICAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNl
ID0gbV9yZW5kZXJlci51c2VEYXJrQXBwZWFyYW5jZSgpOwpAQCAtNTg3LDEyICs2MTIsMTMgQEAg
dm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKGNvbnN0IE1h
cmtlZFRleHQmIG1hcmtlZFRleHQpCiAgICAgbV9wYWludEluZm8uY29udGV4dCgpLmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoYm91bmRzLCBsaW5lU3R5bGVGb3JNYXJrZWRUZXh0VHlwZSgpKTsK
IH0KIAotRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0KGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgor
RmxvYXRSZWN0IFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6Y29tcHV0ZVBhaW50UmVjdChj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgRmxvYXRQb2ludCBsb2NhbFBh
aW50T2Zmc2V0KHBhaW50T2Zmc2V0KTsKIAogICAgIGlmIChtX3NlbGVjdGFibGVSYW5nZS50cnVu
Y2F0aW9uKSB7Ci0gICAgICAgIGlmIChtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHls
ZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAhPSB0ZXh0Qm94KCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKSB7CisgICAgICAgIGlmIChtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5z
dHlsZSgpLmRpcmVjdGlvbigpICE9IHRleHRCb3goKS5kaXJlY3Rpb24oKSkgewogICAgICAgICAg
ICAgLy8gTWFrZSB0aGUgdmlzaWJsZSBmcmFnbWVudCBvZiB0ZXh0IGh1ZyB0aGUgZWRnZSBjbG9z
ZXN0IHRvIHRoZSByZXN0IG9mIHRoZSBydW4gYnkgbW92aW5nIHRoZSBvcmlnaW4KICAgICAgICAg
ICAgIC8vIGF0IHdoaWNoIHdlIHN0YXJ0IGRyYXdpbmcgdGV4dC4KICAgICAgICAgICAgIC8vIGUu
Zy4gSW4gdGhlIGNhc2Ugb2YgTFRSIHRleHQgdHJ1bmNhdGVkIGluIGFuIFJUTCBDb250ZXh0LCB0
aGUgY29ycmVjdCBiZWhhdmlvciBpczoKQEAgLTYwMSwyMSArNjI3LDI0IEBAIEZsb2F0UmVjdCBU
ZXh0Qm94UGFpbnRlcjo6Y29tcHV0ZVBhaW50UmVjdChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCiAgICAgICAgICAgICAvLyBmYXJ0aGVyIHRvIHRoZSByaWdodC4KICAgICAgICAgICAg
IC8vIE5PVEU6IFdlYktpdCdzIGJlaGF2aW9yIGRpZmZlcnMgZnJvbSB0aGF0IG9mIElFIHdoaWNo
IGFwcGVhcnMgdG8ganVzdCBvdmVybGF5IHRoZSBlbGxpcHNpcyBvbiB0b3Agb2YgdGhlCiAgICAg
ICAgICAgICAvLyB0cnVuY2F0ZWQgc3RyaW5nIGkuZS4gIHxIZWxsb3xDQkF8IC0+IHwuLi5sb3xD
QkF8Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHdpZHRoT2ZWaXNpYmxlVGV4dCB7IG1fcmVuZGVy
ZXIud2lkdGgodGV4dEJveCgpLnN0YXJ0KCksICptX3NlbGVjdGFibGVSYW5nZS50cnVuY2F0aW9u
LCB0ZXh0UG9zaXRpb24obV90ZXh0Qm94KSwgbV9pc0ZpcnN0TGluZSkgfTsKLSAgICAgICAgICAg
IExheW91dFVuaXQgd2lkdGhPZkhpZGRlblRleHQgeyB0ZXh0Qm94KCkubG9naWNhbFdpZHRoKCkg
LSB3aWR0aE9mVmlzaWJsZVRleHQgfTsKLSAgICAgICAgICAgIExheW91dFNpemUgdHJ1bmNhdGlv
bk9mZnNldCh0ZXh0Qm94KCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gd2lkdGhPZkhpZGRl
blRleHQgOiAtd2lkdGhPZkhpZGRlblRleHQsIDBfbHUpOworICAgICAgICAgICAgTGF5b3V0VW5p
dCB3aWR0aE9mVmlzaWJsZVRleHQgeyBtX3JlbmRlcmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgp
LCAqbV9zZWxlY3RhYmxlUmFuZ2UudHJ1bmNhdGlvbiwgdGV4dFBvc2l0aW9uKG1ha2VJdGVyYXRv
cigpKSwgbV9pc0ZpcnN0TGluZSkgfTsKKyAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZkhp
ZGRlblRleHQgeyBtX2xvZ2ljYWxSZWN0LndpZHRoKCkgLSB3aWR0aE9mVmlzaWJsZVRleHQgfTsK
KyAgICAgICAgICAgIExheW91dFNpemUgdHJ1bmNhdGlvbk9mZnNldCh0ZXh0Qm94KCkuZGlyZWN0
aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gd2lkdGhPZkhpZGRlblRleHQgOiAtd2lkdGhP
ZkhpZGRlblRleHQsIDBfbHUpOwogICAgICAgICAgICAgbG9jYWxQYWludE9mZnNldC5tb3ZlKHRl
eHRCb3goKS5pc0hvcml6b250YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zm
c2V0LnRyYW5zcG9zZWRTaXplKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbG9jYWxQYWlu
dE9mZnNldC5tb3ZlKDAsIG1fc3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IDAgOiAt
dGV4dEJveCgpLmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgbG9jYWxQYWludE9mZnNldC5tb3ZlKDAs
IG1fc3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IDAgOiAtbV9sb2dpY2FsUmVjdC5o
ZWlnaHQoKSk7CisKKyAgICBhdXRvIHZpc3VhbFJlY3QgPSB0ZXh0Qm94KCkudmlzdWFsUmVjdEln
bm9yaW5nQmxvY2tEaXJlY3Rpb24oKTsKKyAgICB0ZXh0Qm94KCkuY29udGFpbmluZ0Jsb2NrKCku
ZmxpcEZvcldyaXRpbmdNb2RlKHZpc3VhbFJlY3QpOwogCi0gICAgYXV0byBib3hPcmlnaW4gPSB0
ZXh0Qm94KCkudmlzdWFsUmVjdCh0ZXh0Qm94KCkubGluZUJveCgpLT5jb250YWluaW5nQmxvY2so
KS5sb2dpY2FsSGVpZ2h0KCkpLmxvY2F0aW9uKCk7CisgICAgYXV0byBib3hPcmlnaW4gPSB2aXN1
YWxSZWN0LmxvY2F0aW9uKCk7CiAgICAgYm94T3JpZ2luLm1vdmVCeShsb2NhbFBhaW50T2Zmc2V0
KTsKLSAgICByZXR1cm4geyBib3hPcmlnaW4sIEZsb2F0U2l6ZSh0ZXh0Qm94KCkubG9naWNhbFdp
ZHRoKCksIHRleHRCb3goKS5sb2dpY2FsSGVpZ2h0KCkpIH07CisgICAgcmV0dXJuIHsgYm94T3Jp
Z2luLCBGbG9hdFNpemUobV9sb2dpY2FsUmVjdC53aWR0aCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdo
dCgpKSB9OwogfQogCi1GbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURvY3VtZW50
TWFya2VyQm91bmRzKGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3ImIHRleHRC
b3gsIGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCitGbG9hdFJlY3QgY2FsY3VsYXRlRG9j
dW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciYg
dGV4dEJveCwgY29uc3QgTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKIHsKICAgICBhdXRvJiBmb250
ID0gdGV4dEJveC0+Zm9udENhc2NhZGUoKTsKICAgICBhdXRvIGFzY2VudCA9IGZvbnQubWV0cmlj
c09mUHJpbWFyeUZvbnQoKS5hc2NlbnQoKTsKQEAgLTYzNCw3ICs2NjMsOCBAQCBGbG9hdFJlY3Qg
VGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IElubGlu
ZUl0ZXJhdG9yOjpUZQogICAgIHJldHVybiBGbG9hdFJlY3QoMCwgeSwgdGV4dEJveC0+bG9naWNh
bFdpZHRoKCksIGhlaWdodCk7CiB9CiAKLWJvb2wgVGV4dEJveFBhaW50ZXI6OmNvbXB1dGVIYXZl
U2VsZWN0aW9uKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorYm9vbCBU
ZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmNvbXB1dGVIYXZlU2VsZWN0aW9uKCkgY29uc3QK
IHsKICAgICBpZiAobV9pc1ByaW50aW5nIHx8IG1fcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2U6OlRleHRDbGlwKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NDIsMTUgKzY3MiwyMCBA
QCBib29sIFRleHRCb3hQYWludGVyOjpjb21wdXRlSGF2ZVNlbGVjdGlvbigpIGNvbnN0CiAgICAg
cmV0dXJuIG1fcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLmhpZ2hsaWdodFN0YXRlRm9yVGV4
dEJveChtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSkgIT0gUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZTo6Tm9uZTsKIH0KIAotY29uc3QgRm9udENhc2NhZGUmIFRleHRCb3hQYWludGVy
Ojpmb250Q2FzY2FkZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK2Nv
bnN0IEZvbnRDYXNjYWRlJiBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmZvbnRDYXNjYWRl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90ZXh0Qm94LT5mb250Q2FzY2FkZSgpOworICAgIGlm
IChtX2lzQ29tYmluZWRUZXh0KQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQ29tYmlu
ZVRleHQ+KG1fcmVuZGVyZXIpLnRleHRDb21iaW5lRm9udCgpOworCisgICAgcmV0dXJuIG1fdGV4
dEJveC5zdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiB9CiAKLUZsb2F0UG9pbnQgVGV4dEJveFBhaW50
ZXI6OnRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGFpbnRSZWN0KSBj
b25zdAordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+CitGbG9hdFBvaW50IFRleHRCb3hQ
YWludGVyPFRleHRCb3hQYXRoPjo6dGV4dE9yaWdpbkZyb21QYWludFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiBwYWludFJlY3QpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luIHsgcGFp
bnRSZWN0LngoKSwgcGFpbnRSZWN0LnkoKSArIGZvbnRDYXNjYWRlKCkubWV0cmljc09mUHJpbWFy
eUZvbnQoKS5hc2NlbnQoKSB9OwotICAgIGlmICh0ZXh0Qm94KCkuaXNDb21iaW5lZFRleHQoKSkg
eworICAgIGlmIChtX2lzQ29tYmluZWRUZXh0KSB7CiAgICAgICAgIGlmIChhdXRvIG5ld09yaWdp
biA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihtX3JlbmRlcmVyKS5jb21wdXRlVGV4dE9y
aWdpbihwYWludFJlY3QpKQogICAgICAgICAgICAgdGV4dE9yaWdpbiA9IG5ld09yaWdpbi52YWx1
ZSgpOwogICAgIH0KQEAgLTY2MSwxNiArNjk2LDE5IEBAIEZsb2F0UG9pbnQgVGV4dEJveFBhaW50
ZXI6OnRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGFpbnRSZWN0KSBj
CiAgICAgcmV0dXJuIHRleHRPcmlnaW47CiB9CiAKLWNvbnN0IFNoYWRvd0RhdGEqIFRleHRCb3hQ
YWludGVyOjpkZWJ1Z1RleHRTaGFkb3coKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJv
eFBhdGg+Citjb25zdCBTaGFkb3dEYXRhKiBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmRl
YnVnVGV4dFNoYWRvdygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyLnNldHRpbmdzKCku
bGVnYWN5TGluZUxheW91dFZpc3VhbENvdmVyYWdlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBpZiAoIXRleHRCb3goKS5sZWdhY3lJbmxpbmVCb3goKSkKKyAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFRleHRCb3hQYXRoLCBJbmxpbmVJdGVyYXRvcjo6Qm94
TW9kZXJuUGF0aD4pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhMZW5ndGhQb2ludChMZW5ndGgo
TGVuZ3RoVHlwZTo6Rml4ZWQpLCBMZW5ndGgoTGVuZ3RoVHlwZTo6Rml4ZWQpKSwgTGVuZ3RoKDEw
LCBMZW5ndGhUeXBlOjpGaXhlZCksIExlbmd0aCgyMCwgTGVuZ3RoVHlwZTo6Rml4ZWQpLCBTaGFk
b3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBTUkdCQTx1aW50OF90PiB7IDE1MCwgMCwgMCwgMTkwIH0p
OwogICAgIHJldHVybiAmZGVidWdUZXh0U2hhZG93LmdldCgpOwogfQogCit0ZW1wbGF0ZSBjbGFz
cyBUZXh0Qm94UGFpbnRlcjxJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aD47Cit0ZW1wbGF0
ZSBjbGFzcyBUZXh0Qm94UGFpbnRlcjxJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aD47CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKaW5kZXggZmU3MDU1
Zjc3NTRlLi45ZDdkMGQ1ODEyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0Qm94UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94
UGFpbnRlci5oCkBAIC00NSwyMiArNDUsMTcgQEAgc3RydWN0IE1hcmtlZFRleHQ7CiBzdHJ1Y3Qg
UGFpbnRJbmZvOwogc3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFRleHRCb3hQYXRoPgogY2xhc3MgVGV4dEJveFBhaW50ZXIgewogcHVibGljOgotICAgIFRleHRC
b3hQYWludGVyKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQotICAgIFRleHRCb3hQYWludGVyKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxp
bmVDb250ZW50JiwgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94JiwgUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKLSNlbmRpZgotICAgIFRleHRCb3hQYWludGVyKGNv
bnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3ImLCBQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwotCisgICAgVGV4dEJveFBhaW50ZXIoVGV4dEJveFBh
dGgmJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICB+
VGV4dEJveFBhaW50ZXIoKTsKIAogICAgIHZvaWQgcGFpbnQoKTsKIAotICAgIHN0YXRpYyBGbG9h
dFJlY3QgY2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2Fj
eUlubGluZVRleHRCb3gmKTsKLQotcHJpdmF0ZToKLSAgICBhdXRvJiB0ZXh0Qm94KCkgY29uc3Qg
eyByZXR1cm4gKm1fdGV4dEJveDsgfQorcHJvdGVjdGVkOgorICAgIGF1dG8mIHRleHRCb3goKSBj
b25zdCB7IHJldHVybiBtX3RleHRCb3g7IH0KKyAgICBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0
ZXJhdG9yIG1ha2VJdGVyYXRvcigpIGNvbnN0OwogCiAgICAgdm9pZCBwYWludEJhY2tncm91bmQo
KTsKICAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCk7CkBAIC03OCw4ICs3
Myw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNvbnN0
IENvbXBvc2l0aW9uVW5kZXJsaW5lJik7CiAgICAgdm9pZCBwYWludFBsYXRmb3JtRG9jdW1lbnRN
YXJrZXIoY29uc3QgTWFya2VkVGV4dCYpOwogCi0gICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxh
dGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJh
dG9yJiwgY29uc3QgTWFya2VkVGV4dCYpOwotCiAgICAgRmxvYXRSZWN0IGNvbXB1dGVQYWludFJl
Y3QoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICBib29sIGNvbXB1dGVIYXZl
U2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgTWFya2VkVGV4dCBjcmVhdGVNYXJrZWRUZXh0RnJvbVNl
bGVjdGlvbkluQm94KCk7CkBAIC04OCwxNSArODEsMTcgQEAgcHJpdmF0ZToKIAogICAgIGNvbnN0
IFNoYWRvd0RhdGEqIGRlYnVnVGV4dFNoYWRvdygpIGNvbnN0OwogCi0gICAgY29uc3QgSW5saW5l
SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciBtX3RleHRCb3g7CisgICAgY29uc3QgVGV4dEJveFBh
dGggbV90ZXh0Qm94OwogICAgIGNvbnN0IFJlbmRlclRleHQmIG1fcmVuZGVyZXI7CiAgICAgY29u
c3QgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fc3R5bGU7
CisgICAgY29uc3QgRmxvYXRSZWN0IG1fbG9naWNhbFJlY3Q7CiAgICAgY29uc3QgVGV4dFJ1biBt
X3BhaW50VGV4dFJ1bjsKICAgICBQYWludEluZm8mIG1fcGFpbnRJbmZvOwogICAgIGNvbnN0IFRl
eHRCb3hTZWxlY3RhYmxlUmFuZ2UgbV9zZWxlY3RhYmxlUmFuZ2U7CiAgICAgY29uc3QgRmxvYXRS
ZWN0IG1fcGFpbnRSZWN0OwogICAgIGNvbnN0IGJvb2wgbV9pc0ZpcnN0TGluZTsKKyAgICBjb25z
dCBib29sIG1faXNDb21iaW5lZFRleHQ7CiAgICAgY29uc3QgYm9vbCBtX2lzUHJpbnRpbmc7CiAg
ICAgY29uc3QgYm9vbCBtX2hhdmVTZWxlY3Rpb247CiAgICAgY29uc3QgYm9vbCBtX2NvbnRhaW5z
Q29tcG9zaXRpb247CkBAIC0xMDQsNCArOTksMTggQEAgcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlv
bmFsPGJvb2w+IG1fZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZSB7IH07CiB9OwogCitjbGFz
cyBMZWdhY3lUZXh0Qm94UGFpbnRlciA6IHB1YmxpYyBUZXh0Qm94UGFpbnRlcjxJbmxpbmVJdGVy
YXRvcjo6Qm94TGVnYWN5UGF0aD4geworcHVibGljOgorICAgIExlZ2FjeVRleHRCb3hQYWludGVy
KGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQpOworCisgICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9m
QWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYpOworfTsK
KworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorY2xhc3MgTW9kZXJuVGV4
dEJveFBhaW50ZXIgOiBwdWJsaWMgVGV4dEJveFBhaW50ZXI8SW5saW5lSXRlcmF0b3I6OkJveE1v
ZGVyblBhdGg+IHsKK3B1YmxpYzoKKyAgICBNb2Rlcm5UZXh0Qm94UGFpbnRlcihjb25zdCBMYXlv
dXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYsIGNvbnN0IElubGluZURpc3BsYXk6OkJveCYs
IFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCk7Cit9OworI2VuZGlm
CisKIH0KLS0gCjIuMzIuMCAoQXBwbGUgR2l0LTEzMikKCgpGcm9tIDFlMWM4Mjc1M2FiNDg3OTc0
NDcyYjJhZjIzNjUzNDZhNmU3ZGVjMmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEFu
dHRpIEtvaXZpc3RvIDxhbnR0aUBhcHBsZS5jb20+CkRhdGU6IFNhdCwgMTQgTWF5IDIwMjIgMTE6
Mjg6MTggKzAzMDAKU3ViamVjdDogW1BBVENIIDIvM10gaGF4CgotLS0KIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAgfCAxMyArKysrKysrLS0tLS0tCiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaCAgIHwgIDEgKwogMiBmaWxlcyBjaGFu
Z2VkLCA4IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKaW5kZXggOTFiZjUxZjkyY2UwLi41ZTk2ZWUzMGI5
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcApAQCAt
NTAyLDEzICs1MDIsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxv
YXQgbG9naWNhbFdpZHRoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwKICAgICBzdGFydCA9IGxv
Z2ljYWxXaWR0aCAtIHdpZHRoIC0gc3RhcnQ7CiB9CiAKLXN0YXRpYyBmbG9hdCB0ZXh0UG9zaXRp
b24oY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciYgdGV4dEJveCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorZmxvYXQgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBh
dGg+Ojp0ZXh0UG9zaXRpb24oKQogewogICAgIC8vIFdoZW4gY29tcHV0aW5nIHRoZSB3aWR0aCBv
ZiBhIHRleHQgcnVuLCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9u
c0ZvckxpbmUoKSBkb2Vzbid0IGluY2x1ZGUgdGhlIGFjdHVhbCBvZmZzZXQKICAgICAvLyBmcm9t
IHRoZSBjb250YWluaW5nIGJsb2NrIGVkZ2UgaW4gaXRzIG1lYXN1cmVtZW50LiB0ZXh0UG9zaXRp
b24oKSBzaG91bGQgYmUgY29uc2lzdGVudCBzbyB0aGUgdGV4dCBhcmUgcmVuZGVyZWQgaW4gdGhl
IHNhbWUgd2lkdGguCi0gICAgaWYgKCF0ZXh0Qm94LT5sb2dpY2FsTGVmdCgpKQorICAgIGlmICgh
bV9sb2dpY2FsUmVjdC54KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0ZXh0Qm94
LT5sb2dpY2FsTGVmdCgpIC0gdGV4dEJveC0+bGluZUJveCgpLT5jb250ZW50TG9naWNhbExlZnQo
KTsKKyAgICByZXR1cm4gbV9sb2dpY2FsUmVjdC54KCkgLSBtYWtlSXRlcmF0b3IoKS0+bGluZUJv
eCgpLT5jb250ZW50TG9naWNhbExlZnQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJv
eFBhdGg+CkBAIC01MjIsNyArNTIzLDcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0
aD46OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoY29uc3QgQ29tcG9zaXRpb25VbmQKICAgICBp
ZiAocGFpbnRTdGFydCA8PSB1bmRlcmxpbmUuc3RhcnRPZmZzZXQpIHsKICAgICAgICAgcGFpbnRT
dGFydCA9IHVuZGVybGluZS5zdGFydE9mZnNldDsKICAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZh
bHNlOwotICAgICAgICBzdGFydCA9IG1fcmVuZGVyZXIud2lkdGgodGV4dEJveCgpLnN0YXJ0KCks
IHBhaW50U3RhcnQgLSB0ZXh0Qm94KCkuc3RhcnQoKSwgdGV4dFBvc2l0aW9uKG1ha2VJdGVyYXRv
cigpKSwgbV9pc0ZpcnN0TGluZSk7CisgICAgICAgIHN0YXJ0ID0gbV9yZW5kZXJlci53aWR0aCh0
ZXh0Qm94KCkuc3RhcnQoKSwgcGFpbnRTdGFydCAtIHRleHRCb3goKS5zdGFydCgpLCB0ZXh0UG9z
aXRpb24oKSwgbV9pc0ZpcnN0TGluZSk7CiAgICAgfQogICAgIGlmIChwYWludEVuZCAhPSB1bmRl
cmxpbmUuZW5kT2Zmc2V0KSB7CiAgICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQs
ICh1bnNpZ25lZCl1bmRlcmxpbmUuZW5kT2Zmc2V0KTsKQEAgLTUzMyw3ICs1MzQsNyBAQCB2b2lk
IFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShj
b25zdCBDb21wb3NpdGlvblVuZAogICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7CiAgICAg
fQogICAgIGlmICghdXNlV2hvbGVXaWR0aCkgewotICAgICAgICB3aWR0aCA9IG1fcmVuZGVyZXIu
d2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCB0ZXh0UG9zaXRpb24obWFr
ZUl0ZXJhdG9yKCkpICsgc3RhcnQsIG1faXNGaXJzdExpbmUpOworICAgICAgICB3aWR0aCA9IG1f
cmVuZGVyZXIud2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCB0ZXh0UG9z
aXRpb24oKSArIHN0YXJ0LCBtX2lzRmlyc3RMaW5lKTsKICAgICAgICAgbWlycm9yUlRMU2VnbWVu
dChtX2xvZ2ljYWxSZWN0LndpZHRoKCksIHRleHRCb3goKS5kaXJlY3Rpb24oKSwgc3RhcnQsIHdp
ZHRoKTsKICAgICB9CiAKQEAgLTYyNyw3ICs2MjgsNyBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50
ZXI8VGV4dEJveFBhdGg+Ojpjb21wdXRlUGFpbnRSZWN0KGNvbnN0IExheW91dFBvaW50JiBwYWlu
dAogICAgICAgICAgICAgLy8gZmFydGhlciB0byB0aGUgcmlnaHQuCiAgICAgICAgICAgICAvLyBO
T1RFOiBXZWJLaXQncyBiZWhhdmlvciBkaWZmZXJzIGZyb20gdGhhdCBvZiBJRSB3aGljaCBhcHBl
YXJzIHRvIGp1c3Qgb3ZlcmxheSB0aGUgZWxsaXBzaXMgb24gdG9wIG9mIHRoZQogICAgICAgICAg
ICAgLy8gdHJ1bmNhdGVkIHN0cmluZyBpLmUuICB8SGVsbG98Q0JBfCAtPiB8Li4ubG98Q0JBfAot
ICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aE9mVmlzaWJsZVRleHQgeyBtX3JlbmRlcmVyLndp
ZHRoKHRleHRCb3goKS5zdGFydCgpLCAqbV9zZWxlY3RhYmxlUmFuZ2UudHJ1bmNhdGlvbiwgdGV4
dFBvc2l0aW9uKG1ha2VJdGVyYXRvcigpKSwgbV9pc0ZpcnN0TGluZSkgfTsKKyAgICAgICAgICAg
IExheW91dFVuaXQgd2lkdGhPZlZpc2libGVUZXh0IHsgbV9yZW5kZXJlci53aWR0aCh0ZXh0Qm94
KCkuc3RhcnQoKSwgKm1fc2VsZWN0YWJsZVJhbmdlLnRydW5jYXRpb24sIHRleHRQb3NpdGlvbigp
LCBtX2lzRmlyc3RMaW5lKSB9OwogICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aE9mSGlkZGVu
VGV4dCB7IG1fbG9naWNhbFJlY3Qud2lkdGgoKSAtIHdpZHRoT2ZWaXNpYmxlVGV4dCB9OwogICAg
ICAgICAgICAgTGF5b3V0U2l6ZSB0cnVuY2F0aW9uT2Zmc2V0KHRleHRCb3goKS5kaXJlY3Rpb24o
KSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13aWR0aE9mSGlk
ZGVuVGV4dCwgMF9sdSk7CiAgICAgICAgICAgICBsb2NhbFBhaW50T2Zmc2V0Lm1vdmUodGV4dEJv
eCgpLmlzSG9yaXpvbnRhbCgpID8gdHJ1bmNhdGlvbk9mZnNldCA6IHRydW5jYXRpb25PZmZzZXQu
dHJhbnNwb3NlZFNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEJveFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRl
ci5oCmluZGV4IDlkN2QwZDU4MTJkNy4uMzY2NmZkNDQ1NjIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuaApAQCAtNzMsNiArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNvbnN0IENvbXBvc2l0aW9uVW5kZXJs
aW5lJik7CiAgICAgdm9pZCBwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29uc3QgTWFya2Vk
VGV4dCYpOwogCisgICAgZmxvYXQgdGV4dFBvc2l0aW9uKCk7CiAgICAgRmxvYXRSZWN0IGNvbXB1
dGVQYWludFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICBib29sIGNv
bXB1dGVIYXZlU2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgTWFya2VkVGV4dCBjcmVhdGVNYXJrZWRU
ZXh0RnJvbVNlbGVjdGlvbkluQm94KCk7Ci0tIAoyLjMyLjAgKEFwcGxlIEdpdC0xMzIpCgoKRnJv
bSA5ODcyNDY4YmQyMTM0YzhiODIyYzY1ZDMxZTcyMTEzZjQ3YzUyY2IzIE1vbiBTZXAgMTcgMDA6
MDA6MDAgMjAwMQpGcm9tOiBBbnR0aSBLb2l2aXN0byA8YW50dGlAYXBwbGUuY29tPgpEYXRlOiBT
YXQsIDE0IE1heSAyMDIyIDEyOjE5OjQ2ICswMzAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIGhheAoK
LS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgfCA4OSArKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgODkgaW5zZXJ0aW9ucygrKQoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA2YzU0NTgzNjI0NTYuLmZmM2M4MTYzMmRkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDkyIEBACisyMDIyLTA1LTE0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
KworICAgICAgICBUZW1wbGF0ZSBUZXh0Qm94UGFpbnRlciBvbiBsaW5lIGxheW91dCBwYXRoCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDA0MTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYWludGluZyBj
dXJyZW50bHkgZ29lcyB2aWEgYSBsaW5lIGxheW91dCBwYXRoIGFnbm9zdGljIGl0ZXJhdG9yLgor
ICAgICAgICBUaGlzIGlzIGluZWZmaWNpZW50IHNpbmNlIHdlIGFsd2F5cyBrbm93IHdoYXQgc29y
dCBvZiBsYXlvdXQgd2UgYXJlIHBhaW50aW5nLgorCisgICAgICAgICogbGF5b3V0L2ludGVncmF0
aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVJdGVyYXRvcjo6Qm94Ojp2aXN1YWxSZWN0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50
ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6Qm94Ojpjb250YWluaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6dmlzdWFsUmVjdCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveExlZ2Fj
eVBhdGguaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hMZWdhY3lQYXRo
Ojpjb250YWluaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0
b3I6OkJveExlZ2FjeVBhdGg6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aDo6aXNGaXJzdExpbmUgY29uc3QpOgorICAgICAg
ICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRo
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6Y29u
dGFpbmluZ0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3hNb2Rlcm5QYXRoOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkJveE1vZGVyblBhdGg6OmlzRmlyc3RMaW5lIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpyZW5kZXJUZXh0IGNvbnN0KToK
KyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxh
eW91dDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveFBhaW50ZXI6OnBhaW50TWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVyOjpwYWludERlY29yYXRpb25zKToKKyAgICAgICAg
KiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
ZWdhY3lJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3cpOgorICAgICAgICAq
IHJlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5s
aW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNrRm9y
VGV4dEZpbGxCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lUZXh0Qm94UGFpbnRlcjo6TGVnYWN5VGV4dEJveFBhaW50
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9kZXJuVGV4dEJveFBhaW50ZXI6Ok1vZGVyblRleHRC
b3hQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRo
Pjo6VGV4dEJveFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4
dEJveFBhdGg+Ojp+VGV4dEJveFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBh
aW50ZXI8VGV4dEJveFBhdGg+OjptYWtlSXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0
aW9uSW5Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+
OjpwYWludEJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4
dEJveFBhdGg+OjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Q29tcG9zaXRpb25CYWNrZ3Jv
dW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFp
bnRGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQ
YXRoPjo6Y3JlYXRlRGVjb3JhdGlvblBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJv
eFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Rm9yZWdyb3Vu
ZERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQ
YXRoPjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+Ojp0ZXh0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRQ
bGF0Zm9ybURvY3VtZW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lUZXh0Qm94
UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRQbGF0Zm9ybURv
Y3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQ
YXRoPjo6Y29tcHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEb2N1
bWVudE1hcmtlckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0
Qm94UGF0aD46OmNvbXB1dGVIYXZlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6Zm9udENhc2NhZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+Ojp0ZXh0T3JpZ2luRnJvbVBh
aW50UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94
UGF0aD46OmRlYnVnVGV4dFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEJveFBhaW50ZXI6On5UZXh0Qm94UGFpbnRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Qm94UGFpbnRlcjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEJveFBhaW50ZXI6OmNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3gpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5k
QW5kRGVjb3JhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50
ZXI6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNyZWF0ZURlY29yYXRpb25QYWludGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmREZWNv
cmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFp
bnRGb3JlZ3JvdW5kRGVjb3JhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnRleHRQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2Vy
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRl
VW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNvbXB1dGVQYWludFJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURvY3Vt
ZW50TWFya2VyQm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWlu
dGVyOjpjb21wdXRlSGF2ZVNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Qm94UGFpbnRlcjo6Zm9udENhc2NhZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpkZWJ1Z1RleHRT
aGFkb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94UGFpbnRl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnRleHRCb3ggY29uc3QpOgor
CiAyMDIyLTA1LTEzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAg
ICAgICAgIEFwcGxlUGF5TG9nb1N5c3RlbUltYWdlIG5lZWRsZXNzbHkgbG9hZHMgUGFzc0tpdCBp
biBXZWJLaXQgY2hpbGQgcHJvY2Vzc2VzIG9uIGlPUwotLSAKMi4zMi4wIChBcHBsZSBHaXQtMTMy
KQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459353</attachid>
            <date>2022-05-14 06:19:47 -0700</date>
            <delta_ts>2022-05-17 07:54:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>textboxpainter-template.patch</filename>
            <type>text/plain</type>
            <size>44845</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YzU0NTgzNjI0NTYuLmZmM2M4MTYzMmRkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDkyIEBACisyMDIyLTA1LTE0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBUZW1wbGF0ZSBUZXh0Qm94UGFpbnRlciBvbiBsaW5lIGxheW91dCBwYXRo
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDA0MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYWludGlu
ZyBjdXJyZW50bHkgZ29lcyB2aWEgYSBsaW5lIGxheW91dCBwYXRoIGFnbm9zdGljIGl0ZXJhdG9y
LgorICAgICAgICBUaGlzIGlzIGluZWZmaWNpZW50IHNpbmNlIHdlIGFsd2F5cyBrbm93IHdoYXQg
c29ydCBvZiBsYXlvdXQgd2UgYXJlIHBhaW50aW5nLgorCisgICAgICAgICogbGF5b3V0L2ludGVn
cmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6Qm94Ojp2aXN1YWxSZWN0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQv
aW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6Qm94Ojpjb250YWluaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6dmlzdWFsUmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveExl
Z2FjeVBhdGguaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hMZWdhY3lQ
YXRoOjpjb250YWluaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRl
cmF0b3I6OkJveExlZ2FjeVBhdGg6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aDo6aXNGaXJzdExpbmUgY29uc3QpOgorICAg
ICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5Q
YXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6
Y29udGFpbmluZ0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpCb3hNb2Rlcm5QYXRoOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkJveE1vZGVyblBhdGg6OmlzRmlyc3RMaW5lIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpyZW5kZXJUZXh0IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9u
TGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGlu
ZUxheW91dDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveFBhaW50ZXI6OnBhaW50TWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVyOjpwYWludERlY29yYXRpb25zKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3cpOgorICAgICAg
ICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5
SW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRNYXNr
Rm9yVGV4dEZpbGxCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lUZXh0Qm94UGFpbnRlcjo6TGVnYWN5VGV4dEJveFBh
aW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TW9kZXJuVGV4dEJveFBhaW50ZXI6Ok1vZGVyblRl
eHRCb3hQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQ
YXRoPjo6VGV4dEJveFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8
VGV4dEJveFBhdGg+Ojp+VGV4dEJveFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJv
eFBhaW50ZXI8VGV4dEJveFBhdGg+OjptYWtlSXRlcmF0b3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmNyZWF0ZU1hcmtlZFRleHRGcm9tU2Vs
ZWN0aW9uSW5Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBh
dGg+OjpwYWludEJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8
VGV4dEJveFBhdGg+OjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Q29tcG9zaXRpb25CYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6
cGFpbnRGb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRC
b3hQYXRoPjo6Y3JlYXRlRGVjb3JhdGlvblBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Rm9yZWdy
b3VuZERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRC
b3hQYXRoPjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+Ojp0ZXh0UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludENvbXBvc2l0aW9uVW5kZXJs
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFp
bnRQbGF0Zm9ybURvY3VtZW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lUZXh0
Qm94UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRQbGF0Zm9y
bURvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRC
b3hQYXRoPjo6Y29tcHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVE
b2N1bWVudE1hcmtlckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxU
ZXh0Qm94UGF0aD46OmNvbXB1dGVIYXZlU2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6Zm9udENhc2NhZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+Ojp0ZXh0T3JpZ2luRnJv
bVBhaW50UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0
Qm94UGF0aD46OmRlYnVnVGV4dFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveFBhaW50ZXI6On5UZXh0Qm94UGFpbnRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveFBhaW50ZXI6OmNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3gpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3Jv
dW5kQW5kRGVjb3JhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBh
aW50ZXI6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNyZWF0ZURlY29yYXRpb25QYWludGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmRE
ZWNvcmF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6
cGFpbnRGb3JlZ3JvdW5kRGVjb3JhdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnRleHRQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFy
a2Vycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Y2FsY3Vs
YXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNvbXB1dGVQYWludFJlY3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURv
Y3VtZW50TWFya2VyQm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQ
YWludGVyOjpjb21wdXRlSGF2ZVNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Zm9udENhc2NhZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpkZWJ1Z1Rl
eHRTaGFkb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Qm94UGFp
bnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnRleHRCb3ggY29uc3Qp
OgorCiAyMDIyLTA1LTEzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgog
CiAgICAgICAgIEFwcGxlUGF5TG9nb1N5c3RlbUltYWdlIG5lZWRsZXNzbHkgbG9hZHMgUGFzc0tp
dCBpbiBXZWJLaXQgY2hpbGQgcHJvY2Vzc2VzIG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94
LmNwcAppbmRleCAzMDBhOTM3ZDU3YmQuLmUxZGE5MGMzYjA4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVy
YXRvckJveC5jcHAKQEAgLTk0LDYgKzk0LDEzIEBAIExpbmVCb3hJdGVyYXRvciBCb3g6OmxpbmVC
b3goKSBjb25zdAogICAgICk7CiB9CiAKK0Zsb2F0UmVjdCBCb3g6OnZpc3VhbFJlY3QoKSBjb25z
dAoreworICAgIGF1dG8gcmVjdCA9IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCk7
CisgICAgY29udGFpbmluZ0Jsb2NrKCkuZmxpcEZvcldyaXRpbmdNb2RlKHJlY3QpOworICAgIHJl
dHVybiByZWN0OworfQorCiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIEJveDo6c2VsZWN0
aW9uU3RhdGUoKSBjb25zdAogewogICAgIGlmIChpc1RleHQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRv
ckJveC5oCmluZGV4IDllNmQzMDg4ZmQxZi4uZjNlYTFlZDU4NTdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVy
YXRvckJveC5oCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzSW5saW5lQm94
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1Jvb3RJbmxpbmVCb3goKSBjb25zdDsKIAotICAgIEZsb2F0
UmVjdCB2aXN1YWxSZWN0KGZsb2F0IGZvcm1hdHRpbmdSb290U2l6ZUluQmxvY2tEaXJlY3Rpb24p
IGNvbnN0OworICAgIEZsb2F0UmVjdCB2aXN1YWxSZWN0KCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0
IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkgY29uc3Q7CiAKICAgICBmbG9hdCBs
b2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyB2aXN1YWxSZWN0SWdu
b3JpbmdCbG9ja0RpcmVjdGlvbigpLnkoKSA6IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0
aW9uKCkueCgpOyB9CkBAIC04NSw2ICs4NSw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Q7CiAKICAgICBjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBj
b250YWluaW5nQmxvY2soKSBjb25zdDsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBj
b25zdDsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUuIEZvciBpbnRlcm1lZGlhdGUgcG9ydGluZyBz
dGVwcyBvbmx5LgpAQCAtMTAwLDE4ICsxMDEsMTcgQEAgcHVibGljOgogCiAgICAgTGluZUJveEl0
ZXJhdG9yIGxpbmVCb3goKSBjb25zdDsKIAorI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorICAgIGNvbnN0IEJveE1vZGVyblBhdGgmIG1vZGVyblBhdGgoKSBjb25zdDsKKyNl
bmRpZgorICAgIGNvbnN0IEJveExlZ2FjeVBhdGgmIGxlZ2FjeVBhdGgoKSBjb25zdDsKKwogcHJv
dGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBCb3hJdGVyYXRvcjsKICAgICBmcmllbmQgY2xhc3Mg
SW5saW5lQm94SXRlcmF0b3I7CiAgICAgZnJpZW5kIGNsYXNzIExlYWZCb3hJdGVyYXRvcjsKICAg
ICBmcmllbmQgY2xhc3MgVGV4dEJveEl0ZXJhdG9yOwogCi0gICAgLy8gVG8gaGVscCB3aXRoIGRl
YnVnZ2luZy4KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICBjb25z
dCBCb3hNb2Rlcm5QYXRoJiBtb2Rlcm5QYXRoKCkgY29uc3Q7Ci0jZW5kaWYKLSAgICBjb25zdCBC
b3hMZWdhY3lQYXRoJiBsZWdhY3lQYXRoKCkgY29uc3Q7Ci0KICAgICBQYXRoVmFyaWFudCBtX3Bh
dGhWYXJpYW50OwogfTsKIApAQCAtMTg0LDE5ICsxODQsNiBAQCBpbmxpbmUgYm9vbCBCb3g6Omlz
Um9vdElubGluZUJveCgpIGNvbnN0CiAgICAgfSk7CiB9CiAKLWlubGluZSBGbG9hdFJlY3QgQm94
Ojp2aXN1YWxSZWN0KGZsb2F0IGZvcm1hdHRpbmdSb290U2l6ZUluQmxvY2tEaXJlY3Rpb24pIGNv
bnN0Ci17Ci0gICAgYXV0byB2aXN1YWxSZWN0ID0gdmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJl
Y3Rpb24oKTsKLSAgICBpZiAoIXN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgcmV0dXJuIHZpc3VhbFJlY3Q7Ci0KLSAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQotICAgICAgICB2aXN1YWxSZWN0LnNldFkoZm9ybWF0dGluZ1Jvb3RT
aXplSW5CbG9ja0RpcmVjdGlvbiAtIHZpc3VhbFJlY3QubWF4WSgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHZpc3VhbFJlY3Quc2V0WChmb3JtYXR0aW5nUm9vdFNpemVJbkJsb2NrRGlyZWN0aW9uIC0g
dmlzdWFsUmVjdC5tYXhYKCkpOwotICAgIHJldHVybiB2aXN1YWxSZWN0OwotfQotCiBpbmxpbmUg
RmxvYXRSZWN0IEJveDo6dmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKSBjb25zdAog
ewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKQEAgLTI0Niw2ICsyMzMsMTMgQEAgaW5saW5lIGNvbnN0IFJlbmRlck9iamVjdCYgQm94Ojpy
ZW5kZXJlcigpIGNvbnN0CiAgICAgfSk7CiB9CiAKK2lubGluZSBjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIEJveDo6Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSAtPiBjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIHsKKyAgICAgICAgcmV0dXJuIHBhdGguY29udGFpbmluZ0Jsb2NrKCk7CisgICAgfSk7Cit9
CisKIGlubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgQm94OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4gY29u
c3QgUmVuZGVyU3R5bGUmIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0
aC5oCmluZGV4IDNjZGQ1ZWU0MDY2NS4uYmU5ODI0ZjEzZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5
UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5s
aW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmgKQEAgLTc2LDYgKzc2LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1faW5saW5lQm94LT5yZW5kZXJlcigpOwogICAgIH0KIAorICAgIGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgY29udGFpbmluZ0Jsb2NrKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2lubGluZUJveC0+cm9vdCgpLmJsb2NrRmxvdygpOworICAgIH0KKwogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9p
bmxpbmVCb3gtPmxpbmVTdHlsZSgpOwpAQCAtMTEzLDYgKzExOCw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHsgaW5saW5lRmxvd0JveCgpLT5sYXN0TGVhZkRlc2NlbmRhbnQoKSB9OwogICAg
IH0KIAorICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxl
dmVsKCkgJSAyID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9Cisg
ICAgYm9vbCBpc0ZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuICFyb290SW5saW5lQm94KCkucHJl
dlJvb3RCb3goKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJveExlZ2FjeVBhdGgm
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveCA9PSBvdGhlci5tX2lubGluZUJveDsg
fQogCiAgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX2lubGluZUJveDsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJ
dGVyYXRvckJveE1vZGVyblBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgKaW5kZXggMDdmODBiZGNiNDk4
Li42MzIzN2RiMjdmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBh
dGguaApAQCAtMTAzLDYgKzEwMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lubGlu
ZUNvbnRlbnQtPnJlbmRlcmVyRm9yTGF5b3V0Qm94KGJveCgpLmxheW91dEJveCgpKTsKICAgICB9
CiAKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5jb250YWluaW5nQmxvY2soKTsK
KyAgICB9CisKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIGJveCgpLnN0eWxlKCk7CkBAIC0yMDcsNiArMjEyLDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbGFzdDsKICAgICB9CiAKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGJpZGlMZXZlbCgpICUgMiA/IFRleHREaXJlY3Rpb246OlJUTCA6
IFRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJl
dHVybiAhYm94KCkubGluZUluZGV4KCk7IH0KKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBC
b3hNb2Rlcm5QYXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50ID09IG90
aGVyLm1faW5saW5lQ29udGVudCAmJiBtX2JveEluZGV4ID09IG90aGVyLm1fYm94SW5kZXg7IH0K
IAogICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9pbmxpbmVDb250ZW50IHx8IG1f
Ym94SW5kZXggPT0gYm94ZXMoKS5zaXplKCk7IH0KQEAgLTI3Miw3ICsyODAsNiBAQCBwcml2YXRl
OgogICAgIGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lJiBsaW5lKCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVDb250ZW50LT5saW5lRm9yQm94KGJveCgpKTsgfQogCiAgICAgY29uc3QgUmVu
ZGVyVGV4dCYgcmVuZGVyVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+
KHJlbmRlcmVyKCkpOyB9Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9u
OjpMVFI7IH0KIAogICAgIFdlYWtQdHI8Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNv
bnRlbnQ+IG1faW5saW5lQ29udGVudDsKICAgICBzaXplX3QgbV9ib3hJbmRleCB7IDAgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0
SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCBlZTI0Yjgy
NDkxNGQuLjFkZjZiMDI2ZTMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25M
aW5lTGF5b3V0LmNwcApAQCAtODAwLDcgKzgwMCw3IEBAIHZvaWQgTGluZUxheW91dDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAg
ICAgICAgICAgIGlmICghYm94LnRleHQoKS0+bGVuZ3RoKCkgfHwgIWhhc0RhbWFnZShib3gpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBUZXh0Qm94UGFpbnRlciBw
YWludGVyKCptX2lubGluZUNvbnRlbnQsIGJveCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7Cisg
ICAgICAgICAgICBNb2Rlcm5UZXh0Qm94UGFpbnRlciBwYWludGVyKCptX2lubGluZUNvbnRlbnQs
IGJveCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgICAgICBwYWludGVyLnBhaW50
KCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIuY3BwCmluZGV4IDFmMzc0MzdkNjBmNS4uYjBhNDUz
NmM2YTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFp
bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveFBhaW50ZXIu
Y3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBJbmxpbmVCb3hQYWludGVyOjpwYWludE1hc2so
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMu
Ci0gICAgYXV0byBsb2NhbFJlY3QgPSBMYXlvdXRSZWN0IHsgbV9pbmxpbmVCb3gudmlzdWFsUmVj
dChtX2lubGluZUJveC5saW5lQm94KCktPmNvbnRhaW5pbmdCbG9jaygpLmxvZ2ljYWxIZWlnaHQo
KSkgfTsKKyAgICBhdXRvIGxvY2FsUmVjdCA9IExheW91dFJlY3QgeyBtX2lubGluZUJveC52aXN1
YWxSZWN0KCkgfTsKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9wYWlu
dE9mZnNldCArIGxvY2FsUmVjdC5sb2NhdGlvbigpOwogCiAgICAgY29uc3QgTmluZVBpZWNlSW1h
Z2UmIG1hc2tOaW5lUGllY2VJbWFnZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS5tYXNrQm94SW1hZ2Uo
KTsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIElubGluZUJveFBhaW50ZXI6OnBhaW50RGVjb3Jh
dGlvbnMoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRp
bmF0ZXMuCi0gICAgYXV0byBsb2NhbFJlY3QgPSBMYXlvdXRSZWN0IHsgbV9pbmxpbmVCb3gudmlz
dWFsUmVjdChtX2lubGluZUJveC5saW5lQm94KCktPmNvbnRhaW5pbmdCbG9jaygpLmxvZ2ljYWxI
ZWlnaHQoKSkgfTsKKyAgICBhdXRvIGxvY2FsUmVjdCA9IExheW91dFJlY3QgeyBtX2lubGluZUJv
eC52aXN1YWxSZWN0KCkgfTsKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50b2Zmc2V0ID0g
bV9wYWludE9mZnNldCArIGxvY2FsUmVjdC5sb2NhdGlvbigpOwogICAgIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKICAgICBMYXlvdXRSZWN0IHBhaW50
UmVjdCA9IExheW91dFJlY3QoYWRqdXN0ZWRQYWludG9mZnNldCwgbG9jYWxSZWN0LnNpemUoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0Jv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAK
aW5kZXggN2MwZDBkODQwZDE5Li4zMTdmZmNhN2I0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAKQEAgLTkyNiw3ICs5MjYsNyBAQCBp
bmxpbmUgdm9pZCBMZWdhY3lJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3co
TGVnYWN5SW5saW5lVGV4dEJveCYgdAogICAgIAogICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyA9
IExheW91dFJlY3QobG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbFRvcFZpc3VhbE92
ZXJmbG93LCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0VmlzdWFsT3Zl
cmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BWaXN1YWxPdmVy
Zmxvdyk7CiAKLSAgICBhdXRvIGRvY3VtZW50TWFya2VyQm91bmRzID0gVGV4dEJveFBhaW50ZXI6
OmNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyh0ZXh0Qm94KTsKKyAgICBh
dXRvIGRvY3VtZW50TWFya2VyQm91bmRzID0gTGVnYWN5VGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0
ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyh0ZXh0Qm94KTsKICAgICBkb2N1bWVudE1h
cmtlckJvdW5kcy5tb3ZlKHRleHRCb3gubG9naWNhbExlZnQoKSwgdGV4dEJveC5sb2dpY2FsVG9w
KCkpOwogICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyA9IHVuaW9uUmVjdChsb2dpY2FsVmlzdWFs
T3ZlcmZsb3csIExheW91dFJlY3QoZG9jdW1lbnRNYXJrZXJCb3VuZHMpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCmluZGV4IDIwNjgy
YTY4YjY5MS4uYzg0ODFlOTZkMWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xlZ2FjeUlubGluZVRleHRCb3guY3BwCkBAIC0zOTcsNyArMzk3LDcgQEAgdm9pZCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2YKICAgICBpZiAobG9naWNhbFN0YXJ0ID49IHBhaW50RW5kIHx8IGxvZ2ljYWxT
dGFydCArIGxvZ2ljYWxFeHRlbnQgPD0gcGFpbnRTdGFydCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVGV4dEJveFBhaW50ZXIgdGV4dEJveFBhaW50ZXIoKnRoaXMsIHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOworICAgIExlZ2FjeVRleHRCb3hQYWludGVyIHRleHRCb3hQYWludGVyKCp0aGlzLCBw
YWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICB0ZXh0Qm94UGFpbnRlci5wYWludCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJv
eC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAppbmRl
eCBjZDNhMTY1ZmRjMDYuLmFkZWM2NGNhNWQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCkBAIC0xNTAsNyArMTUwLDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0
aDsKLSAgICBmcmllbmQgY2xhc3MgVGV4dEJveFBhaW50ZXI7CiAKICAgICBjb25zdCBSZW5kZXJD
b21iaW5lVGV4dCogY29tYmluZWRUZXh0KCkgY29uc3Q7CiAgICAgY29uc3QgRm9udENhc2NhZGUm
IGxpbmVGb250KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA2NmJhODg1ZGI3N2MuLjg3ZjA0OGM2NTczOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CkBAIC03MjcsNyArNzI3LDEyIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TWFz
a0ZvclRleHRGaWxsQm94KEltYWdlQnVmZmVyKiBtYXNrSW1hZ2UsIGNvbnN0CiAgICAgICAgIGZv
ciAoYXV0byBib3ggPSBpbmxpbmVCb3gtPmZpcnN0TGVhZkJveCgpLCBlbmQgPSBpbmxpbmVCb3gt
PmVuZExlYWZCb3goKTsgYm94ICE9IGVuZDsgYm94LnRyYXZlcnNlTmV4dE9uTGluZSgpKSB7CiAg
ICAgICAgICAgICBpZiAoIWJveC0+aXNUZXh0KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBUZXh0Qm94UGFpbnRlciB0ZXh0Qm94UGFpbnRlcihkb3duY2FzdDxJbmxp
bmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yPihib3gpLCBtYXNrSW5mbywgcGFpbnRPZmZzZXQp
OworICAgICAgICAgICAgaWYgKGF1dG8qIGxlZ2FjeVRleHRCb3ggPSBkb3duY2FzdDxMZWdhY3lJ
bmxpbmVUZXh0Qm94Pihib3gtPmxlZ2FjeUlubGluZUJveCgpKSkgeworICAgICAgICAgICAgICAg
IExlZ2FjeVRleHRCb3hQYWludGVyIHRleHRCb3hQYWludGVyKCpsZWdhY3lUZXh0Qm94LCBtYXNr
SW5mbywgcGFpbnRPZmZzZXQpOworICAgICAgICAgICAgICAgIHRleHRCb3hQYWludGVyLnBhaW50
KCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBNb2Rlcm5UZXh0Qm94UGFpbnRlciB0ZXh0Qm94UGFpbnRlcihib3gtPm1vZGVyblBhdGgoKS5p
bmxpbmVDb250ZW50KCksIGJveC0+bW9kZXJuUGF0aCgpLmJveCgpLCBtYXNrSW5mbywgcGFpbnRP
ZmZzZXQpOwogICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIucGFpbnQoKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dEJveFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVy
LmNwcAppbmRleCA5NWI1MjY3YzllYmUuLjVlOTZlZTMwYjk3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCkBAIC00NSwyOSArNDUsMzQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIoY29uc3Qg
TGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLSAgICA6IFRleHRCb3hQYWludGVyKElubGluZUl0
ZXJhdG9yOjp0ZXh0Qm94Rm9yKCZ0ZXh0Qm94KSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCkKK3N0
YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgSW5saW5l
SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciYsIGNvbnN0IE1hcmtlZFRleHQmKTsKKworTGVnYWN5
VGV4dEJveFBhaW50ZXI6OkxlZ2FjeVRleHRCb3hQYWludGVyKGNvbnN0IExlZ2FjeUlubGluZVRl
eHRCb3gmIHRleHRCb3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCisgICAgOiBUZXh0Qm94UGFpbnRlcihJbmxpbmVJdGVyYXRvcjo6Qm94TGVn
YWN5UGF0aCB7ICZ0ZXh0Qm94IH0sIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpCiB7CiAgICAgbV9l
bXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlID0gdGV4dEJveC5lbXBoYXNpc01hcmtFeGlzdHNB
bmRJc0Fib3ZlKG1fc3R5bGUpOwogfQogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCi1UZXh0Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIoY29uc3QgTGF5b3V0SW50ZWdy
YXRpb246OklubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIGNvbnN0IElubGluZURpc3BsYXk6
OkJveCYgYm94LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0KQotICAgIDogVGV4dEJveFBhaW50ZXIoSW5saW5lSXRlcmF0b3I6OnRleHRCb3hGb3Io
aW5saW5lQ29udGVudCwgYm94KSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCkKK01vZGVyblRleHRC
b3hQYWludGVyOjpNb2Rlcm5UZXh0Qm94UGFpbnRlcihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6
SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94JiBi
b3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
CisgICAgOiBUZXh0Qm94UGFpbnRlcihJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aCB7IGlu
bGluZUNvbnRlbnQsIGlubGluZUNvbnRlbnQuaW5kZXhGb3JCb3goYm94KSB9LCBwYWludEluZm8s
IHBhaW50T2Zmc2V0KQogewogfQogI2VuZGlmCiAKLVRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFp
bnRlcihjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiB0ZXh0Qm94LCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotICAgIDog
bV90ZXh0Qm94KHRleHRCb3gpCi0gICAgLCBtX3JlbmRlcmVyKG1fdGV4dEJveC0+cmVuZGVyZXIo
KSkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorVGV4dEJveFBhaW50ZXI8VGV4dEJv
eFBhdGg+OjpUZXh0Qm94UGFpbnRlcihUZXh0Qm94UGF0aCYmIHRleHRCb3gsIFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCisgICAgOiBtX3RleHRC
b3goV1RGTW92ZSh0ZXh0Qm94KSkKKyAgICAsIG1fcmVuZGVyZXIoZG93bmNhc3Q8UmVuZGVyVGV4
dD4obV90ZXh0Qm94LnJlbmRlcmVyKCkpKQogICAgICwgbV9kb2N1bWVudChtX3JlbmRlcmVyLmRv
Y3VtZW50KCkpCi0gICAgLCBtX3N0eWxlKG1fdGV4dEJveC0+c3R5bGUoKSkKLSAgICAsIG1fcGFp
bnRUZXh0UnVuKG1fdGV4dEJveC0+Y3JlYXRlVGV4dFJ1bigpKQorICAgICwgbV9zdHlsZShtX3Rl
eHRCb3guc3R5bGUoKSkKKyAgICAsIG1fbG9naWNhbFJlY3QobV90ZXh0Qm94LmlzSG9yaXpvbnRh
bCgpID8gbV90ZXh0Qm94LnZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkgOiBtX3Rl
eHRCb3gudmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKS50cmFuc3Bvc2VkUmVjdCgp
KQorICAgICwgbV9wYWludFRleHRSdW4obV90ZXh0Qm94LmNyZWF0ZVRleHRSdW4oSW5saW5lSXRl
cmF0b3I6OkNyZWF0ZVRleHRSdW5Nb2RlOjpQYWludGluZykpCiAgICAgLCBtX3BhaW50SW5mbyhw
YWludEluZm8pCi0gICAgLCBtX3NlbGVjdGFibGVSYW5nZShtX3RleHRCb3gtPnNlbGVjdGFibGVS
YW5nZSgpKQorICAgICwgbV9zZWxlY3RhYmxlUmFuZ2UobV90ZXh0Qm94LnNlbGVjdGFibGVSYW5n
ZSgpKQogICAgICwgbV9wYWludFJlY3QoY29tcHV0ZVBhaW50UmVjdChwYWludE9mZnNldCkpCi0g
ICAgLCBtX2lzRmlyc3RMaW5lKG1fdGV4dEJveC0+bGluZUJveCgpLT5pc0ZpcnN0KCkpCisgICAg
LCBtX2lzRmlyc3RMaW5lKG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpKQorICAgICwgbV9pc0NvbWJp
bmVkVGV4dChpczxSZW5kZXJDb21iaW5lVGV4dD4obV9yZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVu
ZGVyQ29tYmluZVRleHQ+KG1fcmVuZGVyZXIpLmlzQ29tYmluZWQoKSkKICAgICAsIG1faXNQcmlu
dGluZyhtX2RvY3VtZW50LnByaW50aW5nKCkpCiAgICAgLCBtX2hhdmVTZWxlY3Rpb24oY29tcHV0
ZUhhdmVTZWxlY3Rpb24oKSkKICAgICAsIG1fY29udGFpbnNDb21wb3NpdGlvbihtX3JlbmRlcmVy
LnRleHROb2RlKCkgJiYgbV9yZW5kZXJlci5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uTm9k
ZSgpID09IG1fcmVuZGVyZXIudGV4dE5vZGUoKSkKQEAgLTc2LDExICs4MSwyMCBAQCBUZXh0Qm94
UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIoY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVy
YXRvciYgdGV4dEJveCwgUAogICAgIEFTU0VSVChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6Rm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9u
IHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpUZXh0Q2xpcCB8fCBwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZTo6RXZlbnRSZWdpb24pOwogfQogCi1UZXh0Qm94UGFpbnRlcjo6
flRleHRCb3hQYWludGVyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorVGV4dEJv
eFBhaW50ZXI8VGV4dEJveFBhdGg+Ojp+VGV4dEJveFBhaW50ZXIoKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK0lubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3Ig
VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjptYWtlSXRlcmF0b3IoKSBjb25zdAogeworICAg
IGF1dG8gcGF0aENvcHkgPSBtX3RleHRCb3g7CisgICAgcmV0dXJuIElubGluZUl0ZXJhdG9yOjpU
ZXh0Qm94SXRlcmF0b3IgeyBXVEZNb3ZlKHBhdGhDb3B5KSB9OwogfQogCi12b2lkIFRleHRCb3hQ
YWludGVyOjpwYWludCgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK3ZvaWQgVGV4
dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludCgpCiB7CiAgICAgaWYgKG1fcGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2U6OlNlbGVjdGlvbiAmJiAhbV9oYXZlU2VsZWN0aW9uKQogICAg
ICAgICByZXR1cm47CkBAIC05MSw3ICsxMDUsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWlu
dCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFJvdGF0ZSA9ICF0
ZXh0Qm94KCkuaXNIb3Jpem9udGFsKCkgJiYgIXRleHRCb3goKS5pc0NvbWJpbmVkVGV4dCgpOwor
ICAgIGJvb2wgc2hvdWxkUm90YXRlID0gIXRleHRCb3goKS5pc0hvcml6b250YWwoKSAmJiAhbV9p
c0NvbWJpbmVkVGV4dDsKICAgICBpZiAoc2hvdWxkUm90YXRlKQogICAgICAgICBtX3BhaW50SW5m
by5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fcGFpbnRSZWN0LCBDbG9ja3dpc2UpKTsK
IApAQCAtMTE1LDcgKzEyOSw4IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50KCkKICAgICAg
ICAgbV9wYWludEluZm8uY29udGV4dCgpLmNvbmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwg
Q291bnRlcmNsb2Nrd2lzZSkpOwogfQogCi1NYXJrZWRUZXh0IFRleHRCb3hQYWludGVyOjpjcmVh
dGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRC
b3hQYXRoPgorTWFya2VkVGV4dCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmNyZWF0ZU1h
cmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3goKQogewogICAgIGF1dG8gW3NlbGVjdGlvblN0YXJ0
LCBzZWxlY3Rpb25FbmRdID0gbV9yZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkucmFuZ2VGb3JU
ZXh0Qm94KG1fcmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdlKTsKICAgICBpZiAoc2VsZWN0aW9u
U3RhcnQgPCBzZWxlY3Rpb25FbmQpCkBAIC0xMjMsNyArMTM4LDggQEAgTWFya2VkVGV4dCBUZXh0
Qm94UGFpbnRlcjo6Y3JlYXRlTWFya2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveCgpCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kKCkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94
UGF0aD46OnBhaW50QmFja2dyb3VuZCgpCiB7CiAgICAgYXV0byBzaG91bGRQYWludENvbXBvc2l0
aW9uQmFja2dyb3VuZCA9IG1fY29udGFpbnNDb21wb3NpdGlvbiAmJiAhbV91c2VDdXN0b21VbmRl
cmxpbmVzOwogI2lmIEVOQUJMRShURVhUX1NFTEVDVElPTikKQEAgLTE2OSw3ICsxODUsOCBAQCB2
b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQoKQogICAgICAgICBwYWludEJhY2tn
cm91bmQobWFya2VkVGV4dCk7CiB9CiAKLXZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdy
b3VuZEFuZERlY29yYXRpb25zKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgordm9p
ZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRp
b25zKCkKIHsKICAgICBhdXRvIHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCA9IG1faGF2
ZVNlbGVjdGlvbiAmJiAhbV91c2VDdXN0b21VbmRlcmxpbmVzOwogICAgIGF1dG8gaGFzVGV4dERl
Y29yYXRpb24gPSAhbV9zdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlzRW1wdHkoKTsK
QEAgLTIzMSw4ICsyNDgsNyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRB
bmREZWNvcmF0aW9ucygpCiAgICAgfQogCiAgICAgaWYgKGhhc0RlY29yYXRpb24gJiYgbV9wYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgIFRleHRSdW4g
dGV4dFJ1biA9IHRleHRCb3goKS5jcmVhdGVUZXh0UnVuKCk7Ci0gICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IG1fc2VsZWN0YWJsZVJhbmdlLnRydW5jYXRpb24udmFsdWVfb3IodGV4dFJ1bi5sZW5n
dGgoKSk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fc2VsZWN0YWJsZVJhbmdlLnRydW5j
YXRpb24udmFsdWVfb3IobV9wYWludFRleHRSdW4ubGVuZ3RoKCkpOwogICAgICAgICB1bnNpZ25l
ZCBzZWxlY3Rpb25TdGFydCA9IDA7CiAgICAgICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCA9IDA7
CiAgICAgICAgIGlmIChtX2hhdmVTZWxlY3Rpb24pCkBAIC0yODcsNyArMzAzLDggQEAgdm9pZCBU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3JhdGlvbnMoKQogICAgIH0KIH0K
IAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKQordGVt
cGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+Cit2b2lkIFRleHRCb3hQYWludGVyPFRleHRCb3hQ
YXRoPjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKQogewogICAgIGF1dG8mIGVkaXRvciA9
IG1fcmVuZGVyZXIuZnJhbWUoKS5lZGl0b3IoKTsKIApAQCAtMzE0LDEyICszMzEsMTQgQEAgdm9p
ZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoKQogICAgIH0KIH0K
IAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtl
ZFRleHQmIG1hcmtlZFRleHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK3ZvaWQg
VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludEJhY2tncm91bmQoY29uc3QgU3R5bGVk
TWFya2VkVGV4dCYgbWFya2VkVGV4dCkKIHsKLSAgICBwYWludEJhY2tncm91bmQobWFya2VkVGV4
dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQsIG1hcmtlZFRleHQuc3R5bGUuYmFj
a2dyb3VuZENvbG9yKTsKKyAgICBwYWludEJhY2tncm91bmQobWFya2VkVGV4dC5zdGFydE9mZnNl
dCwgbWFya2VkVGV4dC5lbmRPZmZzZXQsIG1hcmtlZFRleHQuc3R5bGUuYmFja2dyb3VuZENvbG9y
LCBCYWNrZ3JvdW5kU3R5bGU6Ok5vcm1hbCk7CiB9CiAKLXZvaWQgVGV4dEJveFBhaW50ZXI6OnBh
aW50QmFja2dyb3VuZCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IsIEJhY2tncm91bmRTdHlsZSBiYWNrZ3JvdW5kU3R5bGUpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK3ZvaWQgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBh
dGg+OjpwYWludEJhY2tncm91bmQodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCYWNrZ3JvdW5kU3R5bGUgYmFja2dyb3VuZFN0eWxl
KQogewogICAgIGlmIChzdGFydE9mZnNldCA+PSBlbmRPZmZzZXQpCiAgICAgICAgIHJldHVybjsK
QEAgLTMzMCwxNCArMzQ5LDE0IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3Vu
ZCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjCiAKICAgICAvLyBO
b3RlIHRoYXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5n
IHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3IGl0cyBvd24gaGlnaGxpZ2h0
LgotICAgIGF1dG8gbGluZUJveCA9IHRleHRCb3goKS5saW5lQm94KCk7CisgICAgYXV0byBsaW5l
Qm94ID0gbWFrZUl0ZXJhdG9yKCktPmxpbmVCb3goKTsKICAgICBhdXRvIHNlbGVjdGlvbkJvdHRv
bSA9IExpbmVTZWxlY3Rpb246OmxvZ2ljYWxCb3R0b20oKmxpbmVCb3gpOwogICAgIGF1dG8gc2Vs
ZWN0aW9uVG9wID0gTGluZVNlbGVjdGlvbjo6bG9naWNhbFRvcEFkanVzdGVkRm9yUHJlY2VkaW5n
QmxvY2soKmxpbmVCb3gpOwogICAgIC8vIFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdo
dCBhcyBmb3Igc2VsZWN0aW9uLCBzbyB0aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBz
dWJyYW5nZSBhcmUgb24KICAgICAvLyB0aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMg
c3RpY2tpbmcgb3V0LgotICAgIGF1dG8gZGVsdGFZID0gTGF5b3V0VW5pdCB7IG1fc3R5bGUuaXNG
bGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tIC0gdGV4dEJveCgpLmxv
Z2ljYWxCb3R0b20oKSA6IHRleHRCb3goKS5sb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AgfTsK
KyAgICBhdXRvIGRlbHRhWSA9IExheW91dFVuaXQgeyBtX3N0eWxlLmlzRmxpcHBlZExpbmVzV3Jp
dGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSAtIG1fbG9naWNhbFJlY3QubWF4WSgpIDogbV9s
b2dpY2FsUmVjdC55KCkgLSBzZWxlY3Rpb25Ub3AgfTsKICAgICBhdXRvIHNlbGVjdGlvbkhlaWdo
dCA9IExheW91dFVuaXQgeyBzdGQ6Om1heCgwLmYsIHNlbGVjdGlvbkJvdHRvbSAtIHNlbGVjdGlv
blRvcCkgfTsKLSAgICBhdXRvIHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0IHsgTGF5b3V0VW5p
dChtX3BhaW50UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fcGFpbnRSZWN0LnkoKSAtIGRlbHRhWSks
IExheW91dFVuaXQodGV4dEJveCgpLmxvZ2ljYWxXaWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07
CisgICAgYXV0byBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCB7IExheW91dFVuaXQobV9wYWlu
dFJlY3QueCgpKSwgTGF5b3V0VW5pdChtX3BhaW50UmVjdC55KCkgLSBkZWx0YVkpLCBMYXlvdXRV
bml0KG1fbG9naWNhbFJlY3Qud2lkdGgoKSksIHNlbGVjdGlvbkhlaWdodCB9OwogICAgIGZvbnRD
YXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQobV9wYWludFRleHRSdW4sIHNlbGVj
dGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogCiAgICAgLy8gRklYTUU6IFN1cHBv
cnQgcGFpbnRpbmcgY29tYmluZWQgdGV4dC4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgwOTkzPi4KQEAgLTM1Miw3ICszNzEsOCBAQCB2b2lkIFRleHRCb3hQ
YWludGVyOjpwYWludEJhY2tncm91bmQodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCwgYwogICAgIGNvbnRleHQuZmlsbFJlY3QoYmFja2dyb3VuZFJlY3QsIGNvbG9yKTsK
IH0KIAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKGNvbnN0IFN0eWxlZE1h
cmtlZFRleHQmIG1hcmtlZFRleHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK3Zv
aWQgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludEZvcmVncm91bmQoY29uc3QgU3R5
bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKIHsKICAgICBpZiAobWFya2VkVGV4dC5zdGFydE9m
ZnNldCA+PSBtYXJrZWRUZXh0LmVuZE9mZnNldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzczLDcg
KzM5Myw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdyb3VuZChjb25zdCBTdHls
ZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogICAgICAgICBpZiAobV9zdHlsZS5oYXNBcHBsZUNv
bG9yRmlsdGVyKCkpCiAgICAgICAgICAgICB0ZXh0UGFpbnRlci5zZXRTaGFkb3dDb2xvckZpbHRl
cigmbV9zdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkpOwogICAgIH0KLSAgICB0ZXh0UGFpbnRlci5z
ZXRFbXBoYXNpc01hcmsoZW1waGFzaXNNYXJrLCBlbXBoYXNpc01hcmtPZmZzZXQsIHRleHRCb3go
KS5pc0NvbWJpbmVkVGV4dCgpID8gJmRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihtX3JlbmRl
cmVyKSA6IG51bGxwdHIpOworICAgIHRleHRQYWludGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNp
c01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgbV9pc0NvbWJpbmVkVGV4dCA/ICZkb3duY2FzdDxS
ZW5kZXJDb21iaW5lVGV4dD4obV9yZW5kZXJlcikgOiBudWxscHRyKTsKICAgICBpZiAoYXV0byog
ZGVidWdTaGFkb3cgPSBkZWJ1Z1RleHRTaGFkb3coKSkKICAgICAgICAgdGV4dFBhaW50ZXIuc2V0
U2hhZG93KGRlYnVnU2hhZG93KTsKIApAQCAtMzgyLDE4ICs0MDIsMTkgQEAgdm9pZCBUZXh0Qm94
UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRl
eHQpCiAgICAgICAgIGNvbnRleHQuc2V0QWxwaGEobWFya2VkVGV4dC5zdHlsZS5hbHBoYSk7CiAg
ICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIG1hcmtlZFRleHQuc3R5bGUudGV4dFN0
eWxlcyk7CiAKLSAgICBpZiAoYXV0byogbGVnYWN5SW5saW5lQm94ID0gdGV4dEJveCgpLmxlZ2Fj
eUlubGluZUJveCgpKQotICAgICAgICB0ZXh0UGFpbnRlci5zZXRHbHlwaERpc3BsYXlMaXN0SWZO
ZWVkZWQoKmxlZ2FjeUlubGluZUJveCwgbV9wYWludEluZm8sIG1fcGFpbnRUZXh0UnVuKTsKKyAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFRleHRCb3hQYXRoLCBJbmxpbmVJdGVyYXRv
cjo6Qm94TGVnYWN5UGF0aD4pCisgICAgICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxp
c3RJZk5lZWRlZCgqdGV4dEJveCgpLmxlZ2FjeUlubGluZUJveCgpLCBtX3BhaW50SW5mbywgbV9w
YWludFRleHRSdW4pOwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAg
IGVsc2UKLSAgICAgICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKCp0
ZXh0Qm94KCkuaW5saW5lQm94KCksIG1fcGFpbnRJbmZvLCBtX3BhaW50VGV4dFJ1bik7CisgICAg
ICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxpc3RJZk5lZWRlZCh0ZXh0Qm94KCkuYm94
KCksIG1fcGFpbnRJbmZvLCBtX3BhaW50VGV4dFJ1bik7CiAjZW5kaWYKIAogICAgIC8vIFRleHRQ
YWludGVyIHdhbnRzIHRoZSBib3ggcmVjdGFuZ2xlIGFuZCB0ZXh0IG9yaWdpbiBvZiB0aGUgZW50
aXJlIGxpbmUgYm94LgogICAgIHRleHRQYWludGVyLnBhaW50UmFuZ2UobV9wYWludFRleHRSdW4s
IG1fcGFpbnRSZWN0LCB0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdChtX3BhaW50UmVjdCksIG1hcmtl
ZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKIH0KIAotVGV4dERlY29y
YXRpb25QYWludGVyIFRleHRCb3hQYWludGVyOjpjcmVhdGVEZWNvcmF0aW9uUGFpbnRlcihjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBPdXRS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNuYXBwZWRTZWxlY3Rpb25SZWN0KQordGVtcGxhdGU8dHlw
ZW5hbWUgVGV4dEJveFBhdGg+CitUZXh0RGVjb3JhdGlvblBhaW50ZXIgVGV4dEJveFBhaW50ZXI8
VGV4dEJveFBhdGg+OjpjcmVhdGVEZWNvcmF0aW9uUGFpbnRlcihjb25zdCBTdHlsZWRNYXJrZWRU
ZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBPdXRSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNuYXBwZWRTZWxlY3Rpb25SZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKIApAQCAtNDE2LDcgKzQzNyw3IEBAIFRleHRE
ZWNvcmF0aW9uUGFpbnRlciBUZXh0Qm94UGFpbnRlcjo6Y3JlYXRlRGVjb3JhdGlvblBhaW50ZXIo
Y29uc3QgU3R5bGVkTWFya2VkCiAgICAgYXV0byB0ZXh0RGVjb3JhdGlvbnMgPSBtX3N0eWxlLnRl
eHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgdGV4dERlY29yYXRpb25zLmFkZChUZXh0RGVj
b3JhdGlvblBhaW50ZXI6OnRleHREZWNvcmF0aW9uc0luRWZmZWN0Rm9yU3R5bGUobWFya2VkVGV4
dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcykpOwogICAgIFRleHREZWNvcmF0aW9uUGFpbnRl
ciBkZWNvcmF0aW9uUGFpbnRlciB7IGNvbnRleHQsIHRleHREZWNvcmF0aW9ucywgbV9yZW5kZXJl
ciwgbV9pc0ZpcnN0TGluZSwgZm9udCwgbWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0
eWxlcyB9OwotICAgIGRlY29yYXRpb25QYWludGVyLnNldFRleHRCb3gobV90ZXh0Qm94KTsKKyAg
ICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0Qm94KG1ha2VJdGVyYXRvcigpKTsKICAgICBkZWNv
cmF0aW9uUGFpbnRlci5zZXRXaWR0aChzbmFwcGVkU2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKICAg
ICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hvcml6b250YWwodGV4dEJveCgpLmlzSG9yaXpvbnRh
bCgpKTsKICAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7CkBAIC00MjgsMzEg
KzQ0OSwzMiBAQCBUZXh0RGVjb3JhdGlvblBhaW50ZXIgVGV4dEJveFBhaW50ZXI6OmNyZWF0ZURl
Y29yYXRpb25QYWludGVyKGNvbnN0IFN0eWxlZE1hcmtlZAogICAgIHJldHVybiBkZWNvcmF0aW9u
UGFpbnRlcjsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3Jh
dGlvbnMoVGV4dERlY29yYXRpb25QYWludGVyJiBkZWNvcmF0aW9uUGFpbnRlciwgY29uc3QgU3R5
bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzbmFwcGVkU2VsZWN0
aW9uUmVjdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFp
bnRlcjxUZXh0Qm94UGF0aD46OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKFRleHREZWNvcmF0
aW9uUGFpbnRlciYgZGVjb3JhdGlvblBhaW50ZXIsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1h
cmtlZFRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc25hcHBlZFNlbGVjdGlvblJlY3QpCiB7Ci0gICAg
Ym9vbCBpc0NvbWJpbmVkVGV4dCA9IHRleHRCb3goKS5pc0NvbWJpbmVkVGV4dCgpOwotICAgIGlm
IChpc0NvbWJpbmVkVGV4dCkKKyAgICBpZiAobV9pc0NvbWJpbmVkVGV4dCkKICAgICAgICAgbV9w
YWludEluZm8uY29udGV4dCgpLmNvbmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ2xvY2t3
aXNlKSk7CiAKICAgICBkZWNvcmF0aW9uUGFpbnRlci5wYWludEJhY2tncm91bmREZWNvcmF0aW9u
cyhtX3BhaW50VGV4dFJ1bi5zdWJSdW4obWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4
dC5lbmRPZmZzZXQgLSBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0KSwgdGV4dE9yaWdpbkZyb21QYWlu
dFJlY3Qoc25hcHBlZFNlbGVjdGlvblJlY3QpLCBzbmFwcGVkU2VsZWN0aW9uUmVjdC5sb2NhdGlv
bigpKTsKIAotICAgIGlmIChpc0NvbWJpbmVkVGV4dCkKKyAgICBpZiAobV9pc0NvbWJpbmVkVGV4
dCkKICAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgpLmNvbmNhdENUTShyb3RhdGlvbihtX3Bh
aW50UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwogfQogCi12b2lkIFRleHRCb3hQYWludGVyOjpw
YWludEZvcmVncm91bmREZWNvcmF0aW9ucyhUZXh0RGVjb3JhdGlvblBhaW50ZXImIGRlY29yYXRp
b25QYWludGVyLCBjb25zdCBGbG9hdFJlY3QmIHNuYXBwZWRTZWxlY3Rpb25SZWN0KQordGVtcGxh
dGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+Cit2b2lkIFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRo
Pjo6cGFpbnRGb3JlZ3JvdW5kRGVjb3JhdGlvbnMoVGV4dERlY29yYXRpb25QYWludGVyJiBkZWNv
cmF0aW9uUGFpbnRlciwgY29uc3QgRmxvYXRSZWN0JiBzbmFwcGVkU2VsZWN0aW9uUmVjdCkKIHsK
LSAgICBib29sIGlzQ29tYmluZWRUZXh0ID0gdGV4dEJveCgpLmlzQ29tYmluZWRUZXh0KCk7Ci0g
ICAgaWYgKGlzQ29tYmluZWRUZXh0KQorICAgIGlmIChtX2lzQ29tYmluZWRUZXh0KQogICAgICAg
ICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fcGFpbnRSZWN0LCBD
bG9ja3dpc2UpKTsKIAogICAgIGRlY29yYXRpb25QYWludGVyLnBhaW50Rm9yZWdyb3VuZERlY29y
YXRpb25zKHNuYXBwZWRTZWxlY3Rpb25SZWN0LmxvY2F0aW9uKCkpOwogCi0gICAgaWYgKGlzQ29t
YmluZWRUZXh0KQorICAgIGlmIChtX2lzQ29tYmluZWRUZXh0KQogICAgICAgICBtX3BhaW50SW5m
by5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fcGFpbnRSZWN0LCBDb3VudGVyY2xvY2t3
aXNlKSk7CiB9CiAKLXZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxp
bmVzKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRl
cjxUZXh0Qm94UGF0aD46OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKCkKIHsKICAgICBmb3Ig
KGF1dG8mIHVuZGVybGluZSA6IG1fcmVuZGVyZXIuZnJhbWUoKS5lZGl0b3IoKS5jdXN0b21Db21w
b3NpdGlvblVuZGVybGluZXMoKSkgewogICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA8
PSB0ZXh0Qm94KCkuc3RhcnQoKSkgewpAQCAtNDgwLDI2ICs1MDIsMjggQEAgc3RhdGljIGlubGlu
ZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxvYXQgbG9naWNhbFdpZHRoLCBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiwKICAgICBzdGFydCA9IGxvZ2ljYWxXaWR0aCAtIHdpZHRoIC0gc3RhcnQ7CiB9
CiAKLXN0YXRpYyBmbG9hdCB0ZXh0UG9zaXRpb24oY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRC
b3hJdGVyYXRvciYgdGV4dEJveCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorZmxv
YXQgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+Ojp0ZXh0UG9zaXRpb24oKQogewogICAgIC8v
IFdoZW4gY29tcHV0aW5nIHRoZSB3aWR0aCBvZiBhIHRleHQgcnVuLCBSZW5kZXJCbG9jazo6Y29t
cHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUoKSBkb2Vzbid0IGluY2x1ZGUgdGhl
IGFjdHVhbCBvZmZzZXQKICAgICAvLyBmcm9tIHRoZSBjb250YWluaW5nIGJsb2NrIGVkZ2UgaW4g
aXRzIG1lYXN1cmVtZW50LiB0ZXh0UG9zaXRpb24oKSBzaG91bGQgYmUgY29uc2lzdGVudCBzbyB0
aGUgdGV4dCBhcmUgcmVuZGVyZWQgaW4gdGhlIHNhbWUgd2lkdGguCi0gICAgaWYgKCF0ZXh0Qm94
LT5sb2dpY2FsTGVmdCgpKQorICAgIGlmICghbV9sb2dpY2FsUmVjdC54KCkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiB0ZXh0Qm94LT5sb2dpY2FsTGVmdCgpIC0gdGV4dEJveC0+bGlu
ZUJveCgpLT5jb250ZW50TG9naWNhbExlZnQoKTsKKyAgICByZXR1cm4gbV9sb2dpY2FsUmVjdC54
KCkgLSBtYWtlSXRlcmF0b3IoKS0+bGluZUJveCgpLT5jb250ZW50TG9naWNhbExlZnQoKTsKIH0K
IAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBD
b21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJv
eFBhdGg+Cit2b2lkIFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRDb21wb3NpdGlv
blVuZGVybGluZShjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQogewogICAg
IGZsb2F0IHN0YXJ0ID0gMDsgLy8gc3RhcnQgb2YgbGluZSB0byBkcmF3LCByZWxhdGl2ZSB0byB0
eAotICAgIGZsb2F0IHdpZHRoID0gdGV4dEJveCgpLmxvZ2ljYWxXaWR0aCgpOyAvLyBob3cgbXVj
aCBsaW5lIHRvIGRyYXcKKyAgICBmbG9hdCB3aWR0aCA9IG1fbG9naWNhbFJlY3Qud2lkdGgoKTsg
Ly8gaG93IG11Y2ggbGluZSB0byBkcmF3CiAgICAgYm9vbCB1c2VXaG9sZVdpZHRoID0gdHJ1ZTsK
ICAgICB1bnNpZ25lZCBwYWludFN0YXJ0ID0gdGV4dEJveCgpLnN0YXJ0KCk7CiAgICAgdW5zaWdu
ZWQgcGFpbnRFbmQgPSB0ZXh0Qm94KCkuZW5kKCk7CiAgICAgaWYgKHBhaW50U3RhcnQgPD0gdW5k
ZXJsaW5lLnN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgIHBhaW50U3RhcnQgPSB1bmRlcmxpbmUuc3Rh
cnRPZmZzZXQ7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKLSAgICAgICAgc3RhcnQg
PSBtX3JlbmRlcmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgpLCBwYWludFN0YXJ0IC0gdGV4dEJv
eCgpLnN0YXJ0KCksIHRleHRQb3NpdGlvbihtX3RleHRCb3gpLCBtX2lzRmlyc3RMaW5lKTsKKyAg
ICAgICAgc3RhcnQgPSBtX3JlbmRlcmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgpLCBwYWludFN0
YXJ0IC0gdGV4dEJveCgpLnN0YXJ0KCksIHRleHRQb3NpdGlvbigpLCBtX2lzRmlyc3RMaW5lKTsK
ICAgICB9CiAgICAgaWYgKHBhaW50RW5kICE9IHVuZGVybGluZS5lbmRPZmZzZXQpIHsKICAgICAg
ICAgcGFpbnRFbmQgPSBzdGQ6Om1pbihwYWludEVuZCwgKHVuc2lnbmVkKXVuZGVybGluZS5lbmRP
ZmZzZXQpOwpAQCAtNTEwLDggKzUzNCw4IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29t
cG9zaXRpb25VbmRlcmxpbmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVyCiAgICAg
ICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKICAgICB9CiAgICAgaWYgKCF1c2VXaG9sZVdpZHRo
KSB7Ci0gICAgICAgIHdpZHRoID0gbV9yZW5kZXJlci53aWR0aChwYWludFN0YXJ0LCBwYWludEVu
ZCAtIHBhaW50U3RhcnQsIHRleHRQb3NpdGlvbihtX3RleHRCb3gpICsgc3RhcnQsIG1faXNGaXJz
dExpbmUpOwotICAgICAgICBtaXJyb3JSVExTZWdtZW50KHRleHRCb3goKS5sb2dpY2FsV2lkdGgo
KSwgdGV4dEJveCgpLmRpcmVjdGlvbigpLCBzdGFydCwgd2lkdGgpOworICAgICAgICB3aWR0aCA9
IG1fcmVuZGVyZXIud2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCB0ZXh0
UG9zaXRpb24oKSArIHN0YXJ0LCBtX2lzRmlyc3RMaW5lKTsKKyAgICAgICAgbWlycm9yUlRMU2Vn
bWVudChtX2xvZ2ljYWxSZWN0LndpZHRoKCksIHRleHRCb3goKS5kaXJlY3Rpb24oKSwgc3RhcnQs
IHdpZHRoKTsKICAgICB9CiAKICAgICAvLyBUaGljayBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzIGFy
ZSAycHggdGhpY2sgYXMgbG9uZyBhcyB0aGVyZSBpcyByb29tIGZvciB0aGUgMnB4IGxpbmUgdW5k
ZXIgdGhlIGJhc2VsaW5lLgpAQCAtNTE5LDcgKzU0Myw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6
OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVu
ZGVyCiAgICAgLy8gSWYgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIHRoZSB1bmRlcmxpbmUgd2ls
bCB0b3VjaCBvciBvdmVybGFwIGNoYXJhY3RlcnMuCiAgICAgaW50IGxpbmVUaGlja25lc3MgPSAx
OwogICAgIGludCBiYXNlbGluZSA9IG1fc3R5bGUubWV0cmljc09mUHJpbWFyeUZvbnQoKS5hc2Nl
bnQoKTsKLSAgICBpZiAodW5kZXJsaW5lLnRoaWNrICYmIHRleHRCb3goKS5sb2dpY2FsSGVpZ2h0
KCkgLSBiYXNlbGluZSA+PSAyKQorICAgIGlmICh1bmRlcmxpbmUudGhpY2sgJiYgbV9sb2dpY2Fs
UmVjdC5oZWlnaHQoKSAtIGJhc2VsaW5lID49IDIpCiAgICAgICAgIGxpbmVUaGlja25lc3MgPSAy
OwogCiAgICAgLy8gV2UgbmVlZCB0byBoYXZlIHNvbWUgc3BhY2UgYmV0d2VlbiB1bmRlcmxpbmVz
IG9mIHN1YnNlcXVlbnQgY2xhdXNlcywgYmVjYXVzZSBzb21lIGlucHV0IG1ldGhvZHMgZG8gbm90
IHVzZSBkaWZmZXJlbnQgdW5kZXJsaW5lIHN0eWxlcyBmb3IgdGhvc2UuCkBAIC01MzMsMTcgKzU1
NywxOCBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNv
bnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB1bmRlcgogICAgIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9y
KHVuZGVybGluZUNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhsaW5lVGhp
Y2tuZXNzKTsKLSAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFJlY3QobV9wYWludFJl
Y3QueCgpICsgc3RhcnQsIG1fcGFpbnRSZWN0LnkoKSArIHRleHRCb3goKS5sb2dpY2FsSGVpZ2h0
KCkgLSBsaW5lVGhpY2tuZXNzLCB3aWR0aCwgbGluZVRoaWNrbmVzcyksIG1fZG9jdW1lbnQucHJp
bnRpbmcoKSk7CisgICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRSZWN0KG1fcGFpbnRS
ZWN0LngoKSArIHN0YXJ0LCBtX3BhaW50UmVjdC55KCkgKyBtX2xvZ2ljYWxSZWN0LmhlaWdodCgp
IC0gbGluZVRoaWNrbmVzcywgd2lkdGgsIGxpbmVUaGlja25lc3MpLCBtX2lzUHJpbnRpbmcpOwog
fQogCi12b2lkIFRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXJzKCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0
Qm94UGF0aD46OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcnMoKQogewogICAgIGF1dG8gbWFy
a2VkVGV4dHMgPSBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVy
ZXIsIG1fc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9u
KTsKICAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBNYXJrZWRUZXh0OjpzdWJkaXZpZGUobWFy
a2VkVGV4dHMsIE1hcmtlZFRleHQ6Ok92ZXJsYXBTdHJhdGVneTo6RnJvbnRtb3N0KSkKICAgICAg
ICAgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKG1hcmtlZFRleHQpOwogfQogCi1GbG9hdFJl
Y3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5k
cyhjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94KQorRmxvYXRSZWN0IExlZ2FjeVRl
eHRCb3hQYWludGVyOjpjYWxjdWxhdGVVbmlvbk9mQWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29u
c3QgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCkKIHsKICAgICAvLyBUaGlzIG11c3QgbWF0
Y2ggcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VycygpLgogICAgIEZsb2F0UmVjdCByZXN1bHQ7
CkBAIC01NTMsMTMgKzU3OCwxNCBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0
ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50UGxhdGZvcm1Eb2N1bWVu
dE1hcmtlcihjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQordGVtcGxhdGU8dHlwZW5hbWUg
VGV4dEJveFBhdGg+Cit2b2lkIFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRQbGF0
Zm9ybURvY3VtZW50TWFya2VyKGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCiB7CiAgICAg
Ly8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQogICAgIGlm
IChtX2RvY3VtZW50LnByaW50aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYm91
bmRzID0gY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMobV90ZXh0Qm94LCBtYXJrZWRUZXh0
KTsKKyAgICBhdXRvIGJvdW5kcyA9IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKG1ha2VJ
dGVyYXRvcigpLCBtYXJrZWRUZXh0KTsKIAogICAgIGF1dG8gbGluZVN0eWxlRm9yTWFya2VkVGV4
dFR5cGUgPSBbJl0oKSAtPiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7CiAgICAgICAgIGJvb2wg
c2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgPSBtX3JlbmRlcmVyLnVzZURhcmtBcHBlYXJhbmNlKCk7
CkBAIC01ODcsMTIgKzYxMywxMyBAQCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3Jt
RG9jdW1lbnRNYXJrZXIoY29uc3QgTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKICAgICBtX3BhaW50
SW5mby5jb250ZXh0KCkuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihib3VuZHMsIGxpbmVTdHls
ZUZvck1hcmtlZFRleHRUeXBlKCkpOwogfQogCi1GbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNv
bXB1dGVQYWludFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQordGVtcGxhdGU8
dHlwZW5hbWUgVGV4dEJveFBhdGg+CitGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBh
dGg+Ojpjb21wdXRlUGFpbnRSZWN0KGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsK
ICAgICBGbG9hdFBvaW50IGxvY2FsUGFpbnRPZmZzZXQocGFpbnRPZmZzZXQpOwogCiAgICAgaWYg
KG1fc2VsZWN0YWJsZVJhbmdlLnRydW5jYXRpb24pIHsKLSAgICAgICAgaWYgKG1fcmVuZGVyZXIu
Y29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IHRl
eHRCb3goKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKG1fcmVuZGVy
ZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuZGlyZWN0aW9uKCkgIT0gdGV4dEJveCgpLmRp
cmVjdGlvbigpKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHRoZSB2aXNpYmxlIGZyYWdtZW50IG9m
IHRleHQgaHVnIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIHJlc3Qgb2YgdGhlIHJ1biBieSBtb3Zp
bmcgdGhlIG9yaWdpbgogICAgICAgICAgICAgLy8gYXQgd2hpY2ggd2Ugc3RhcnQgZHJhd2luZyB0
ZXh0LgogICAgICAgICAgICAgLy8gZS5nLiBJbiB0aGUgY2FzZSBvZiBMVFIgdGV4dCB0cnVuY2F0
ZWQgaW4gYW4gUlRMIENvbnRleHQsIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGlzOgpAQCAtNjAxLDIx
ICs2MjgsMjQgQEAgRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0KGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgICAgIC8vIGZhcnRoZXIgdG8g
dGhlIHJpZ2h0LgogICAgICAgICAgICAgLy8gTk9URTogV2ViS2l0J3MgYmVoYXZpb3IgZGlmZmVy
cyBmcm9tIHRoYXQgb2YgSUUgd2hpY2ggYXBwZWFycyB0byBqdXN0IG92ZXJsYXkgdGhlIGVsbGlw
c2lzIG9uIHRvcCBvZiB0aGUKICAgICAgICAgICAgIC8vIHRydW5jYXRlZCBzdHJpbmcgaS5lLiAg
fEhlbGxvfENCQXwgLT4gfC4uLmxvfENCQXwKLSAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhP
ZlZpc2libGVUZXh0IHsgbV9yZW5kZXJlci53aWR0aCh0ZXh0Qm94KCkuc3RhcnQoKSwgKm1fc2Vs
ZWN0YWJsZVJhbmdlLnRydW5jYXRpb24sIHRleHRQb3NpdGlvbihtX3RleHRCb3gpLCBtX2lzRmly
c3RMaW5lKSB9OwotICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aE9mSGlkZGVuVGV4dCB7IHRl
eHRCb3goKS5sb2dpY2FsV2lkdGgoKSAtIHdpZHRoT2ZWaXNpYmxlVGV4dCB9OwotICAgICAgICAg
ICAgTGF5b3V0U2l6ZSB0cnVuY2F0aW9uT2Zmc2V0KHRleHRCb3goKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13aWR0aE9mSGlkZGVuVGV4dCwgMF9sdSk7
CisgICAgICAgICAgICBMYXlvdXRVbml0IHdpZHRoT2ZWaXNpYmxlVGV4dCB7IG1fcmVuZGVyZXIu
d2lkdGgodGV4dEJveCgpLnN0YXJ0KCksICptX3NlbGVjdGFibGVSYW5nZS50cnVuY2F0aW9uLCB0
ZXh0UG9zaXRpb24oKSwgbV9pc0ZpcnN0TGluZSkgfTsKKyAgICAgICAgICAgIExheW91dFVuaXQg
d2lkdGhPZkhpZGRlblRleHQgeyBtX2xvZ2ljYWxSZWN0LndpZHRoKCkgLSB3aWR0aE9mVmlzaWJs
ZVRleHQgfTsKKyAgICAgICAgICAgIExheW91dFNpemUgdHJ1bmNhdGlvbk9mZnNldCh0ZXh0Qm94
KCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gd2lkdGhPZkhpZGRlblRleHQg
OiAtd2lkdGhPZkhpZGRlblRleHQsIDBfbHUpOwogICAgICAgICAgICAgbG9jYWxQYWludE9mZnNl
dC5tb3ZlKHRleHRCb3goKS5pc0hvcml6b250YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVu
Y2F0aW9uT2Zmc2V0LnRyYW5zcG9zZWRTaXplKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
bG9jYWxQYWludE9mZnNldC5tb3ZlKDAsIG1fc3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IDAgOiAtdGV4dEJveCgpLmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgbG9jYWxQYWludE9mZnNl
dC5tb3ZlKDAsIG1fc3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IDAgOiAtbV9sb2dp
Y2FsUmVjdC5oZWlnaHQoKSk7CisKKyAgICBhdXRvIHZpc3VhbFJlY3QgPSB0ZXh0Qm94KCkudmlz
dWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKTsKKyAgICB0ZXh0Qm94KCkuY29udGFpbmlu
Z0Jsb2NrKCkuZmxpcEZvcldyaXRpbmdNb2RlKHZpc3VhbFJlY3QpOwogCi0gICAgYXV0byBib3hP
cmlnaW4gPSB0ZXh0Qm94KCkudmlzdWFsUmVjdCh0ZXh0Qm94KCkubGluZUJveCgpLT5jb250YWlu
aW5nQmxvY2soKS5sb2dpY2FsSGVpZ2h0KCkpLmxvY2F0aW9uKCk7CisgICAgYXV0byBib3hPcmln
aW4gPSB2aXN1YWxSZWN0LmxvY2F0aW9uKCk7CiAgICAgYm94T3JpZ2luLm1vdmVCeShsb2NhbFBh
aW50T2Zmc2V0KTsKLSAgICByZXR1cm4geyBib3hPcmlnaW4sIEZsb2F0U2l6ZSh0ZXh0Qm94KCku
bG9naWNhbFdpZHRoKCksIHRleHRCb3goKS5sb2dpY2FsSGVpZ2h0KCkpIH07CisgICAgcmV0dXJu
IHsgYm94T3JpZ2luLCBGbG9hdFNpemUobV9sb2dpY2FsUmVjdC53aWR0aCgpLCBtX2xvZ2ljYWxS
ZWN0LmhlaWdodCgpKSB9OwogfQogCi1GbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0
ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0
b3ImIHRleHRCb3gsIGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCitGbG9hdFJlY3QgY2Fs
Y3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJ
dGVyYXRvciYgdGV4dEJveCwgY29uc3QgTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKIHsKICAgICBh
dXRvJiBmb250ID0gdGV4dEJveC0+Zm9udENhc2NhZGUoKTsKICAgICBhdXRvIGFzY2VudCA9IGZv
bnQubWV0cmljc09mUHJpbWFyeUZvbnQoKS5hc2NlbnQoKTsKQEAgLTYzNCw3ICs2NjQsOCBAQCBG
bG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNv
bnN0IElubGluZUl0ZXJhdG9yOjpUZQogICAgIHJldHVybiBGbG9hdFJlY3QoMCwgeSwgdGV4dEJv
eC0+bG9naWNhbFdpZHRoKCksIGhlaWdodCk7CiB9CiAKLWJvb2wgVGV4dEJveFBhaW50ZXI6OmNv
bXB1dGVIYXZlU2VsZWN0aW9uKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRo
PgorYm9vbCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmNvbXB1dGVIYXZlU2VsZWN0aW9u
KCkgY29uc3QKIHsKICAgICBpZiAobV9pc1ByaW50aW5nIHx8IG1fcGFpbnRJbmZvLnBoYXNlID09
IFBhaW50UGhhc2U6OlRleHRDbGlwKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NDIsMTUg
KzY3MywyMCBAQCBib29sIFRleHRCb3hQYWludGVyOjpjb21wdXRlSGF2ZVNlbGVjdGlvbigpIGNv
bnN0CiAgICAgcmV0dXJuIG1fcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLmhpZ2hsaWdodFN0
YXRlRm9yVGV4dEJveChtX3JlbmRlcmVyLCBtX3NlbGVjdGFibGVSYW5nZSkgIT0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKIH0KIAotY29uc3QgRm9udENhc2NhZGUmIFRleHRC
b3hQYWludGVyOjpmb250Q2FzY2FkZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94
UGF0aD4KK2NvbnN0IEZvbnRDYXNjYWRlJiBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmZv
bnRDYXNjYWRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90ZXh0Qm94LT5mb250Q2FzY2FkZSgp
OworICAgIGlmIChtX2lzQ29tYmluZWRUZXh0KQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyQ29tYmluZVRleHQ+KG1fcmVuZGVyZXIpLnRleHRDb21iaW5lRm9udCgpOworCisgICAgcmV0
dXJuIG1fdGV4dEJveC5zdHlsZSgpLmZvbnRDYXNjYWRlKCk7CiB9CiAKLUZsb2F0UG9pbnQgVGV4
dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGFp
bnRSZWN0KSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+CitGbG9hdFBvaW50
IFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6dGV4dE9yaWdpbkZyb21QYWludFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBwYWludFJlY3QpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludCB0ZXh0T3Jp
Z2luIHsgcGFpbnRSZWN0LngoKSwgcGFpbnRSZWN0LnkoKSArIGZvbnRDYXNjYWRlKCkubWV0cmlj
c09mUHJpbWFyeUZvbnQoKS5hc2NlbnQoKSB9OwotICAgIGlmICh0ZXh0Qm94KCkuaXNDb21iaW5l
ZFRleHQoKSkgeworICAgIGlmIChtX2lzQ29tYmluZWRUZXh0KSB7CiAgICAgICAgIGlmIChhdXRv
IG5ld09yaWdpbiA9IGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihtX3JlbmRlcmVyKS5jb21w
dXRlVGV4dE9yaWdpbihwYWludFJlY3QpKQogICAgICAgICAgICAgdGV4dE9yaWdpbiA9IG5ld09y
aWdpbi52YWx1ZSgpOwogICAgIH0KQEAgLTY2MSwxNiArNjk3LDE5IEBAIEZsb2F0UG9pbnQgVGV4
dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGFp
bnRSZWN0KSBjCiAgICAgcmV0dXJuIHRleHRPcmlnaW47CiB9CiAKLWNvbnN0IFNoYWRvd0RhdGEq
IFRleHRCb3hQYWludGVyOjpkZWJ1Z1RleHRTaGFkb3coKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgVGV4dEJveFBhdGg+Citjb25zdCBTaGFkb3dEYXRhKiBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94
UGF0aD46OmRlYnVnVGV4dFNoYWRvdygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyLnNl
dHRpbmdzKCkubGVnYWN5TGluZUxheW91dFZpc3VhbENvdmVyYWdlRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXRleHRCb3goKS5sZWdhY3lJbmxpbmVCb3goKSkK
KyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFRleHRCb3hQYXRoLCBJbmxpbmVJdGVy
YXRvcjo6Qm94TW9kZXJuUGF0aD4pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhMZW5ndGhQb2lu
dChMZW5ndGgoTGVuZ3RoVHlwZTo6Rml4ZWQpLCBMZW5ndGgoTGVuZ3RoVHlwZTo6Rml4ZWQpKSwg
TGVuZ3RoKDEwLCBMZW5ndGhUeXBlOjpGaXhlZCksIExlbmd0aCgyMCwgTGVuZ3RoVHlwZTo6Rml4
ZWQpLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBTUkdCQTx1aW50OF90PiB7IDE1MCwgMCwg
MCwgMTkwIH0pOwogICAgIHJldHVybiAmZGVidWdUZXh0U2hhZG93LmdldCgpOwogfQogCit0ZW1w
bGF0ZSBjbGFzcyBUZXh0Qm94UGFpbnRlcjxJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aD47
Cit0ZW1wbGF0ZSBjbGFzcyBUZXh0Qm94UGFpbnRlcjxJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5
UGF0aD47CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94
UGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKaW5k
ZXggZmU3MDU1Zjc3NTRlLi4zNjY2ZmQ0NDU2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0Qm94UGFpbnRlci5oCkBAIC00NSwyMiArNDUsMTcgQEAgc3RydWN0IE1hcmtlZFRleHQ7
CiBzdHJ1Y3QgUGFpbnRJbmZvOwogc3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIFRleHRCb3hQYXRoPgogY2xhc3MgVGV4dEJveFBhaW50ZXIgewogcHVibGljOgot
ICAgIFRleHRCb3hQYWludGVyKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwotI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQotICAgIFRleHRCb3hQYWludGVyKGNvbnN0IExheW91dEludGVncmF0
aW9uOjpJbmxpbmVDb250ZW50JiwgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94JiwgUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKLSNlbmRpZgotICAgIFRleHRCb3hQ
YWludGVyKGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3ImLCBQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwotCisgICAgVGV4dEJveFBhaW50ZXIo
VGV4dEJveFBhdGgmJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KTsKICAgICB+VGV4dEJveFBhaW50ZXIoKTsKIAogICAgIHZvaWQgcGFpbnQoKTsKIAotICAgIHN0
YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNv
bnN0IExlZ2FjeUlubGluZVRleHRCb3gmKTsKLQotcHJpdmF0ZToKLSAgICBhdXRvJiB0ZXh0Qm94
KCkgY29uc3QgeyByZXR1cm4gKm1fdGV4dEJveDsgfQorcHJvdGVjdGVkOgorICAgIGF1dG8mIHRl
eHRCb3goKSBjb25zdCB7IHJldHVybiBtX3RleHRCb3g7IH0KKyAgICBJbmxpbmVJdGVyYXRvcjo6
VGV4dEJveEl0ZXJhdG9yIG1ha2VJdGVyYXRvcigpIGNvbnN0OwogCiAgICAgdm9pZCBwYWludEJh
Y2tncm91bmQoKTsKICAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCk7CkBA
IC03OCw4ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJs
aW5lKGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJik7CiAgICAgdm9pZCBwYWludFBsYXRmb3Jt
RG9jdW1lbnRNYXJrZXIoY29uc3QgTWFya2VkVGV4dCYpOwogCi0gICAgc3RhdGljIEZsb2F0UmVj
dCBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4
dEJveEl0ZXJhdG9yJiwgY29uc3QgTWFya2VkVGV4dCYpOwotCisgICAgZmxvYXQgdGV4dFBvc2l0
aW9uKCk7CiAgICAgRmxvYXRSZWN0IGNvbXB1dGVQYWludFJlY3QoY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KTsKICAgICBib29sIGNvbXB1dGVIYXZlU2VsZWN0aW9uKCkgY29uc3Q7CiAg
ICAgTWFya2VkVGV4dCBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCk7CkBAIC04
OCwxNSArODIsMTcgQEAgcHJpdmF0ZToKIAogICAgIGNvbnN0IFNoYWRvd0RhdGEqIGRlYnVnVGV4
dFNoYWRvdygpIGNvbnN0OwogCi0gICAgY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVy
YXRvciBtX3RleHRCb3g7CisgICAgY29uc3QgVGV4dEJveFBhdGggbV90ZXh0Qm94OwogICAgIGNv
bnN0IFJlbmRlclRleHQmIG1fcmVuZGVyZXI7CiAgICAgY29uc3QgRG9jdW1lbnQmIG1fZG9jdW1l
bnQ7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CisgICAgY29uc3QgRmxvYXRSZWN0
IG1fbG9naWNhbFJlY3Q7CiAgICAgY29uc3QgVGV4dFJ1biBtX3BhaW50VGV4dFJ1bjsKICAgICBQ
YWludEluZm8mIG1fcGFpbnRJbmZvOwogICAgIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2Ug
bV9zZWxlY3RhYmxlUmFuZ2U7CiAgICAgY29uc3QgRmxvYXRSZWN0IG1fcGFpbnRSZWN0OwogICAg
IGNvbnN0IGJvb2wgbV9pc0ZpcnN0TGluZTsKKyAgICBjb25zdCBib29sIG1faXNDb21iaW5lZFRl
eHQ7CiAgICAgY29uc3QgYm9vbCBtX2lzUHJpbnRpbmc7CiAgICAgY29uc3QgYm9vbCBtX2hhdmVT
ZWxlY3Rpb247CiAgICAgY29uc3QgYm9vbCBtX2NvbnRhaW5zQ29tcG9zaXRpb247CkBAIC0xMDQs
NCArMTAwLDE4IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxib29sPiBtX2VtcGhhc2lz
TWFya0V4aXN0c0FuZElzQWJvdmUgeyB9OwogfTsKIAorY2xhc3MgTGVnYWN5VGV4dEJveFBhaW50
ZXIgOiBwdWJsaWMgVGV4dEJveFBhaW50ZXI8SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg+
IHsKK3B1YmxpYzoKKyAgICBMZWdhY3lUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVU
ZXh0Qm94JiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKKwor
ICAgIHN0YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91
bmRzKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmKTsKK307CisKKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKK2NsYXNzIE1vZGVyblRleHRCb3hQYWludGVyIDogcHVibGlj
IFRleHRCb3hQYWludGVyPElubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoPiB7CitwdWJsaWM6
CisgICAgTW9kZXJuVGV4dEJveFBhaW50ZXIoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGlu
ZUNvbnRlbnQmLCBjb25zdCBJbmxpbmVEaXNwbGF5OjpCb3gmLCBQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOworfTsKKyNlbmRpZgorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459498</attachid>
            <date>2022-05-17 07:54:47 -0700</date>
            <delta_ts>2022-05-17 23:28:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-240416-20220517175445.patch</filename>
            <type>text/plain</type>
            <size>45764</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">RnJvbSBjZTZmNWZmOTNhMDZkNDUyM2U3YTk2MDJhOTU3YTdhOGZkOTk3NGYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnR0aSBLb2l2aXN0byA8YW50dGlAYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDE3IE1heSAyMDIyIDE3OjUyOjA2ICswMzAwClN1YmplY3Q6IFtQQVRDSF0gVGVtcGxh
dGUgVGV4dEJveFBhaW50ZXIgb24gbGluZSBsYXlvdXQgcGF0aAogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MDQxNgoKUmV2aWV3ZWQgYnkgQWxhbiBCdWp0YXMuCgpQ
YWludGluZyBjdXJyZW50bHkgZ29lcyB2aWEgYSBsaW5lIGxheW91dCBwYXRoIGFnbm9zdGljIGl0
ZXJhdG9yLgpUaGlzIGlzIGluZWZmaWNpZW50IHNpbmNlIHdlIGFsd2F5cyBrbm93IHdoYXQgc29y
dCBvZiBsYXlvdXQgd2UgYXJlIHBhaW50aW5nLgoKKiBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94LmNwcDoKKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpCb3g6OnZpc3VhbFJlY3QgY29uc3QpOgoqIFNvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3guaDoKKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpCb3g6OmNvbnRhaW5pbmdCbG9jayBjb25zdCk6CihXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6Qm94Ojp2aXN1YWxSZWN0IGNvbnN0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oOgoo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6OmNvbnRhaW5pbmdCbG9jayBj
b25zdCk6CihXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aDo6ZGlyZWN0aW9u
IGNvbnN0KToKKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hMZWdhY3lQYXRoOjppc0ZpcnN0
TGluZSBjb25zdCk6CiogU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9J
bmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaDoKKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3hNb2Rlcm5QYXRoOjpjb250YWluaW5nQmxvY2sgY29uc3QpOgooV2ViQ29yZTo6SW5saW5lSXRl
cmF0b3I6OkJveE1vZGVyblBhdGg6OmRpcmVjdGlvbiBjb25zdCk6CihXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6aXNGaXJzdExpbmUgY29uc3QpOgooV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkJveE1vZGVyblBhdGg6OnJlbmRlclRleHQgY29uc3QpOgoqIFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5
b3V0LmNwcDoKKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpwYWludCk6
CiogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dseXBoRGlzcGxheUxpc3RDYWNoZS5oOgooV2Vi
Q29yZTo6R2x5cGhEaXNwbGF5TGlzdENhY2hlOjpzaW5nbGV0b24pOgoqIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3hQYWludGVyLmNwcDoKKFdlYkNvcmU6OklubGluZUJveFBhaW50
ZXI6OnBhaW50TWFzayk6CihXZWJDb3JlOjpJbmxpbmVCb3hQYWludGVyOjpwYWludERlY29yYXRp
b25zKToKKiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6
CihXZWJDb3JlOjpMZWdhY3lJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3cp
OgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKFdl
YkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KToKKiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CihXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3gpOgoqIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Qm94UGFpbnRlci5jcHA6CihXZWJDb3JlOjpMZWdhY3lUZXh0Qm94UGFpbnRlcjo6TGVnYWN5VGV4
dEJveFBhaW50ZXIpOgooV2ViQ29yZTo6TW9kZXJuVGV4dEJveFBhaW50ZXI6Ok1vZGVyblRleHRC
b3hQYWludGVyKToKKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6VGV4dEJv
eFBhaW50ZXIpOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+Ojp+VGV4dEJv
eFBhaW50ZXIpOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjptYWtlSXRl
cmF0b3IgY29uc3QpOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWlu
dCk6CihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmNyZWF0ZU1hcmtlZFRl
eHRGcm9tU2VsZWN0aW9uSW5Cb3gpOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBh
dGg+OjpwYWludEJhY2tncm91bmQpOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBh
dGg+OjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucyk6CihXZWJDb3JlOjpUZXh0Qm94UGFp
bnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKToKKFdlYkNvcmU6
OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRGb3JlZ3JvdW5kKToKKFdlYkNvcmU6
OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6Y3JlYXRlRGVjb3JhdGlvblBhaW50ZXIpOgoo
V2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpwYWludEJhY2tncm91bmREZWNv
cmF0aW9ucyk6CihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Rm9y
ZWdyb3VuZERlY29yYXRpb25zKToKKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRo
Pjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMpOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8
VGV4dEJveFBhdGg+Ojp0ZXh0UG9zaXRpb24pOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4
dEJveFBhdGg+OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKToKKFdlYkNvcmU6OlRleHRCb3hQ
YWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2Vycyk6CihXZWJD
b3JlOjpMZWdhY3lUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFy
a2VyQm91bmRzKToKKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRQ
bGF0Zm9ybURvY3VtZW50TWFya2VyKToKKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQ
YXRoPjo6Y29tcHV0ZVBhaW50UmVjdCk6CihXZWJDb3JlOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtl
ckJvdW5kcyk6CihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmNvbXB1dGVI
YXZlU2VsZWN0aW9uIGNvbnN0KToKKFdlYkNvcmU6OlRleHRCb3hQYWludGVyPFRleHRCb3hQYXRo
Pjo6Zm9udENhc2NhZGUgY29uc3QpOgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI8VGV4dEJveFBh
dGg+Ojp0ZXh0T3JpZ2luRnJvbVBhaW50UmVjdCBjb25zdCk6CihXZWJDb3JlOjpUZXh0Qm94UGFp
bnRlcjxUZXh0Qm94UGF0aD46OmRlYnVnVGV4dFNoYWRvdyBjb25zdCk6CihXZWJDb3JlOjpUZXh0
Qm94UGFpbnRlcjo6VGV4dEJveFBhaW50ZXIpOiBEZWxldGVkLgooV2ViQ29yZTo6VGV4dEJveFBh
aW50ZXI6On5UZXh0Qm94UGFpbnRlcik6IERlbGV0ZWQuCihXZWJDb3JlOjpUZXh0Qm94UGFpbnRl
cjo6cGFpbnQpOiBEZWxldGVkLgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNyZWF0ZU1hcmtl
ZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3gpOiBEZWxldGVkLgooV2ViQ29yZTo6VGV4dEJveFBhaW50
ZXI6OnBhaW50QmFja2dyb3VuZCk6IERlbGV0ZWQuCihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6
cGFpbnRGb3JlZ3JvdW5kQW5kRGVjb3JhdGlvbnMpOiBEZWxldGVkLgooV2ViQ29yZTo6VGV4dEJv
eFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKTogRGVsZXRlZC4KKFdlYkNvcmU6
OlRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQpOiBEZWxldGVkLgooV2ViQ29yZTo6VGV4
dEJveFBhaW50ZXI6OmNyZWF0ZURlY29yYXRpb25QYWludGVyKTogRGVsZXRlZC4KKFdlYkNvcmU6
OlRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6IERlbGV0ZWQuCihX
ZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kRGVjb3JhdGlvbnMpOiBEZWxl
dGVkLgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVz
KTogRGVsZXRlZC4KKFdlYkNvcmU6OnRleHRQb3NpdGlvbik6IERlbGV0ZWQuCihXZWJDb3JlOjpU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6IERlbGV0ZWQuCihXZWJD
b3JlOjpUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2Vycyk6IERlbGV0
ZWQuCihXZWJDb3JlOjpUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50
TWFya2VyQm91bmRzKTogRGVsZXRlZC4KKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludFBs
YXRmb3JtRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVkLgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6
OmNvbXB1dGVQYWludFJlY3QpOiBEZWxldGVkLgooV2ViQ29yZTo6VGV4dEJveFBhaW50ZXI6OmNh
bGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKTogRGVsZXRlZC4KKFdlYkNvcmU6OlRleHRCb3hQ
YWludGVyOjpjb21wdXRlSGF2ZVNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCihXZWJDb3JlOjpU
ZXh0Qm94UGFpbnRlcjo6Zm9udENhc2NhZGUgY29uc3QpOiBEZWxldGVkLgooV2ViQ29yZTo6VGV4
dEJveFBhaW50ZXI6OnRleHRPcmlnaW5Gcm9tUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKFdl
YkNvcmU6OlRleHRCb3hQYWludGVyOjpkZWJ1Z1RleHRTaGFkb3cgY29uc3QpOiBEZWxldGVkLgoq
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oOgooV2ViQ29yZTo6VGV4
dEJveFBhaW50ZXI6OnRleHRCb3ggY29uc3QpOgotLS0KIC4uLi9pbnRlZ3JhdGlvbi9pbmxpbmUv
SW5saW5lSXRlcmF0b3JCb3guY3BwICB8ICAgNyArCiAuLi4vaW50ZWdyYXRpb24vaW5saW5lL0lu
bGluZUl0ZXJhdG9yQm94LmggICAgfCAgMzQgKystLQogLi4uL2lubGluZS9JbmxpbmVJdGVyYXRv
ckJveExlZ2FjeVBhdGguaCAgICAgIHwgICA4ICsKIC4uLi9pbmxpbmUvSW5saW5lSXRlcmF0b3JC
b3hNb2Rlcm5QYXRoLmggICAgICB8ICAgOSArLQogLi4uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuY3BwICAgIHwgICAyICstCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvR2x5cGhE
aXNwbGF5TGlzdENhY2hlLmggfCAgIDcgKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveFBhaW50ZXIuY3BwIHwgICA0ICstCiAuLi4vV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5s
aW5lRmxvd0JveC5jcHAgfCAgIDIgKy0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxp
bmVUZXh0Qm94LmNwcCB8ICAgMiArLQogLi4uL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGlu
ZVRleHRCb3guaCAgIHwgICAxIC0KIC4uLi9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwICAgICAgICB8ICAgNyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmNwcCAgIHwgMTg0ICsrKysrKysrKysrLS0tLS0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRCb3hQYWludGVyLmggICAgIHwgIDM2ICsrLS0KIDEzIGZpbGVzIGNoYW5nZWQsIDE5
MCBpbnNlcnRpb25zKCspLCAxMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94
LmNwcAppbmRleCAzMDBhOTM3ZDU3YmQuLmUxZGE5MGMzYjA4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVy
YXRvckJveC5jcHAKQEAgLTk0LDYgKzk0LDEzIEBAIExpbmVCb3hJdGVyYXRvciBCb3g6OmxpbmVC
b3goKSBjb25zdAogICAgICk7CiB9CiAKK0Zsb2F0UmVjdCBCb3g6OnZpc3VhbFJlY3QoKSBjb25z
dAoreworICAgIGF1dG8gcmVjdCA9IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCk7
CisgICAgY29udGFpbmluZ0Jsb2NrKCkuZmxpcEZvcldyaXRpbmdNb2RlKHJlY3QpOworICAgIHJl
dHVybiByZWN0OworfQorCiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIEJveDo6c2VsZWN0
aW9uU3RhdGUoKSBjb25zdAogewogICAgIGlmIChpc1RleHQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRv
ckJveC5oCmluZGV4IDllNmQzMDg4ZmQxZi4uZjNlYTFlZDU4NTdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVy
YXRvckJveC5oCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzSW5saW5lQm94
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1Jvb3RJbmxpbmVCb3goKSBjb25zdDsKIAotICAgIEZsb2F0
UmVjdCB2aXN1YWxSZWN0KGZsb2F0IGZvcm1hdHRpbmdSb290U2l6ZUluQmxvY2tEaXJlY3Rpb24p
IGNvbnN0OworICAgIEZsb2F0UmVjdCB2aXN1YWxSZWN0KCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0
IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkgY29uc3Q7CiAKICAgICBmbG9hdCBs
b2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyB2aXN1YWxSZWN0SWdu
b3JpbmdCbG9ja0RpcmVjdGlvbigpLnkoKSA6IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0
aW9uKCkueCgpOyB9CkBAIC04NSw2ICs4NSw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Q7CiAKICAgICBjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBj
b250YWluaW5nQmxvY2soKSBjb25zdDsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBj
b25zdDsKIAogICAgIC8vIEZJWE1FOiBSZW1vdmUuIEZvciBpbnRlcm1lZGlhdGUgcG9ydGluZyBz
dGVwcyBvbmx5LgpAQCAtMTAwLDE4ICsxMDEsMTcgQEAgcHVibGljOgogCiAgICAgTGluZUJveEl0
ZXJhdG9yIGxpbmVCb3goKSBjb25zdDsKIAorI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorICAgIGNvbnN0IEJveE1vZGVyblBhdGgmIG1vZGVyblBhdGgoKSBjb25zdDsKKyNl
bmRpZgorICAgIGNvbnN0IEJveExlZ2FjeVBhdGgmIGxlZ2FjeVBhdGgoKSBjb25zdDsKKwogcHJv
dGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBCb3hJdGVyYXRvcjsKICAgICBmcmllbmQgY2xhc3Mg
SW5saW5lQm94SXRlcmF0b3I7CiAgICAgZnJpZW5kIGNsYXNzIExlYWZCb3hJdGVyYXRvcjsKICAg
ICBmcmllbmQgY2xhc3MgVGV4dEJveEl0ZXJhdG9yOwogCi0gICAgLy8gVG8gaGVscCB3aXRoIGRl
YnVnZ2luZy4KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICBjb25z
dCBCb3hNb2Rlcm5QYXRoJiBtb2Rlcm5QYXRoKCkgY29uc3Q7Ci0jZW5kaWYKLSAgICBjb25zdCBC
b3hMZWdhY3lQYXRoJiBsZWdhY3lQYXRoKCkgY29uc3Q7Ci0KICAgICBQYXRoVmFyaWFudCBtX3Bh
dGhWYXJpYW50OwogfTsKIApAQCAtMTg0LDE5ICsxODQsNiBAQCBpbmxpbmUgYm9vbCBCb3g6Omlz
Um9vdElubGluZUJveCgpIGNvbnN0CiAgICAgfSk7CiB9CiAKLWlubGluZSBGbG9hdFJlY3QgQm94
Ojp2aXN1YWxSZWN0KGZsb2F0IGZvcm1hdHRpbmdSb290U2l6ZUluQmxvY2tEaXJlY3Rpb24pIGNv
bnN0Ci17Ci0gICAgYXV0byB2aXN1YWxSZWN0ID0gdmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJl
Y3Rpb24oKTsKLSAgICBpZiAoIXN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgcmV0dXJuIHZpc3VhbFJlY3Q7Ci0KLSAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQotICAgICAgICB2aXN1YWxSZWN0LnNldFkoZm9ybWF0dGluZ1Jvb3RT
aXplSW5CbG9ja0RpcmVjdGlvbiAtIHZpc3VhbFJlY3QubWF4WSgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHZpc3VhbFJlY3Quc2V0WChmb3JtYXR0aW5nUm9vdFNpemVJbkJsb2NrRGlyZWN0aW9uIC0g
dmlzdWFsUmVjdC5tYXhYKCkpOwotICAgIHJldHVybiB2aXN1YWxSZWN0OwotfQotCiBpbmxpbmUg
RmxvYXRSZWN0IEJveDo6dmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKSBjb25zdAog
ewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKQEAgLTI0Niw2ICsyMzMsMTMgQEAgaW5saW5lIGNvbnN0IFJlbmRlck9iamVjdCYgQm94Ojpy
ZW5kZXJlcigpIGNvbnN0CiAgICAgfSk7CiB9CiAKK2lubGluZSBjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIEJveDo6Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSAtPiBjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIHsKKyAgICAgICAgcmV0dXJuIHBhdGguY29udGFpbmluZ0Jsb2NrKCk7CisgICAgfSk7Cit9
CisKIGlubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgQm94OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4gY29u
c3QgUmVuZGVyU3R5bGUmIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0
aC5oCmluZGV4IDNjZGQ1ZWU0MDY2NS4uYmU5ODI0ZjEzZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TGVnYWN5
UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5s
aW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmgKQEAgLTc2LDYgKzc2LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1faW5saW5lQm94LT5yZW5kZXJlcigpOwogICAgIH0KIAorICAgIGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgY29udGFpbmluZ0Jsb2NrKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2lubGluZUJveC0+cm9vdCgpLmJsb2NrRmxvdygpOworICAgIH0KKwogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9p
bmxpbmVCb3gtPmxpbmVTdHlsZSgpOwpAQCAtMTEzLDYgKzExOCw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHsgaW5saW5lRmxvd0JveCgpLT5sYXN0TGVhZkRlc2NlbmRhbnQoKSB9OwogICAg
IH0KIAorICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxl
dmVsKCkgJSAyID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9Cisg
ICAgYm9vbCBpc0ZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuICFyb290SW5saW5lQm94KCkucHJl
dlJvb3RCb3goKTsgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJveExlZ2FjeVBhdGgm
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveCA9PSBvdGhlci5tX2lubGluZUJveDsg
fQogCiAgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX2lubGluZUJveDsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJ
dGVyYXRvckJveE1vZGVyblBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgKaW5kZXggMDdmODBiZGNiNDk4
Li42MzIzN2RiMjdmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveE1vZGVyblBh
dGguaApAQCAtMTAzLDYgKzEwMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lubGlu
ZUNvbnRlbnQtPnJlbmRlcmVyRm9yTGF5b3V0Qm94KGJveCgpLmxheW91dEJveCgpKTsKICAgICB9
CiAKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5jb250YWluaW5nQmxvY2soKTsK
KyAgICB9CisKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIGJveCgpLnN0eWxlKCk7CkBAIC0yMDcsNiArMjEyLDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbGFzdDsKICAgICB9CiAKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGJpZGlMZXZlbCgpICUgMiA/IFRleHREaXJlY3Rpb246OlJUTCA6
IFRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJl
dHVybiAhYm94KCkubGluZUluZGV4KCk7IH0KKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBC
b3hNb2Rlcm5QYXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50ID09IG90
aGVyLm1faW5saW5lQ29udGVudCAmJiBtX2JveEluZGV4ID09IG90aGVyLm1fYm94SW5kZXg7IH0K
IAogICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9pbmxpbmVDb250ZW50IHx8IG1f
Ym94SW5kZXggPT0gYm94ZXMoKS5zaXplKCk7IH0KQEAgLTI3Miw3ICsyODAsNiBAQCBwcml2YXRl
OgogICAgIGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5lJiBsaW5lKCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVDb250ZW50LT5saW5lRm9yQm94KGJveCgpKTsgfQogCiAgICAgY29uc3QgUmVu
ZGVyVGV4dCYgcmVuZGVyVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+
KHJlbmRlcmVyKCkpOyB9Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBUZXh0RGlyZWN0aW9u
OjpMVFI7IH0KIAogICAgIFdlYWtQdHI8Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNv
bnRlbnQ+IG1faW5saW5lQ29udGVudDsKICAgICBzaXplX3QgbV9ib3hJbmRleCB7IDAgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0
SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCBhMzEzOTVm
ZjdiMzguLmM4YjczMmNhOGIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25M
aW5lTGF5b3V0LmNwcApAQCAtODAwLDcgKzgwMCw3IEBAIHZvaWQgTGluZUxheW91dDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAg
ICAgICAgICAgIGlmICghYm94LnRleHQoKS0+bGVuZ3RoKCkgfHwgIWhhc0RhbWFnZShib3gpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBUZXh0Qm94UGFpbnRlciBw
YWludGVyKCptX2lubGluZUNvbnRlbnQsIGJveCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7Cisg
ICAgICAgICAgICBNb2Rlcm5UZXh0Qm94UGFpbnRlciBwYWludGVyKCptX2lubGluZUNvbnRlbnQs
IGJveCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgICAgICBwYWludGVyLnBhaW50
KCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0dseXBoRGlzcGxheUxpc3RDYWNoZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0dseXBoRGlzcGxheUxpc3RDYWNoZS5oCmluZGV4IGQ1YjM3OGViNTg0NS4u
NmYyMjY0NmVjNjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR2x5cGhE
aXNwbGF5TGlzdENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dseXBoRGlz
cGxheUxpc3RDYWNoZS5oCkBAIC0zNSw2ICszNSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIExlZ2FjeUlubGluZVRleHRCb3g7CisKK25hbWVzcGFjZSBJbmxpbmVEaXNwbGF5
IHsKK3N0cnVjdCBCb3g7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIExheW91dFJ1bj4KIGNsYXNz
IEdseXBoRGlzcGxheUxpc3RDYWNoZSB7CiBwdWJsaWM6CkBAIC00Miw2ICs0OCw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBHbHlwaERpc3BsYXlMaXN0Q2FjaGUmIHNpbmdsZXRvbigpCiAgICAg
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PExheW91dFJ1biwgTGVnYWN5
SW5saW5lVGV4dEJveD4gfHwgc3RkOjppc19zYW1lX3Y8TGF5b3V0UnVuLCBJbmxpbmVEaXNwbGF5
OjpCb3g+KTsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdseXBoRGlzcGxheUxpc3RD
YWNoZT4gY2FjaGU7CiAgICAgICAgIHJldHVybiBjYWNoZTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFpbnRlci5jcHAKaW5kZXggMWYzNzQzN2Q2MGY1Li5i
MGE0NTM2YzZhN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVC
b3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94UGFp
bnRlci5jcHAKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIElubGluZUJveFBhaW50ZXI6OnBhaW50
TWFzaygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1vdmUgeC95IHRvIG91ciBjb29yZGlu
YXRlcy4KLSAgICBhdXRvIGxvY2FsUmVjdCA9IExheW91dFJlY3QgeyBtX2lubGluZUJveC52aXN1
YWxSZWN0KG1faW5saW5lQm94LmxpbmVCb3goKS0+Y29udGFpbmluZ0Jsb2NrKCkubG9naWNhbEhl
aWdodCgpKSB9OworICAgIGF1dG8gbG9jYWxSZWN0ID0gTGF5b3V0UmVjdCB7IG1faW5saW5lQm94
LnZpc3VhbFJlY3QoKSB9OwogICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBt
X3BhaW50T2Zmc2V0ICsgbG9jYWxSZWN0LmxvY2F0aW9uKCk7CiAKICAgICBjb25zdCBOaW5lUGll
Y2VJbWFnZSYgbWFza05pbmVQaWVjZUltYWdlID0gcmVuZGVyZXIoKS5zdHlsZSgpLm1hc2tCb3hJ
bWFnZSgpOwpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSW5saW5lQm94UGFpbnRlcjo6cGFpbnRE
ZWNvcmF0aW9ucygpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1vdmUgeC95IHRvIG91ciBj
b29yZGluYXRlcy4KLSAgICBhdXRvIGxvY2FsUmVjdCA9IExheW91dFJlY3QgeyBtX2lubGluZUJv
eC52aXN1YWxSZWN0KG1faW5saW5lQm94LmxpbmVCb3goKS0+Y29udGFpbmluZ0Jsb2NrKCkubG9n
aWNhbEhlaWdodCgpKSB9OworICAgIGF1dG8gbG9jYWxSZWN0ID0gTGF5b3V0UmVjdCB7IG1faW5s
aW5lQm94LnZpc3VhbFJlY3QoKSB9OwogICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRvZmZz
ZXQgPSBtX3BhaW50T2Zmc2V0ICsgbG9jYWxSZWN0LmxvY2F0aW9uKCk7CiAgICAgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0ID0gbV9wYWludEluZm8uY29udGV4dCgpOwogICAgIExheW91dFJlY3Qg
cGFpbnRSZWN0ID0gTGF5b3V0UmVjdChhZGp1c3RlZFBhaW50b2Zmc2V0LCBsb2NhbFJlY3Quc2l6
ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVG
bG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94
LmNwcAppbmRleCA3YzBkMGQ4NDBkMTkuLjMxN2ZmY2E3YjQ3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcApAQCAtOTI2LDcgKzkyNiw3
IEBAIGlubGluZSB2b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1YWxPdmVy
ZmxvdyhMZWdhY3lJbmxpbmVUZXh0Qm94JiB0CiAgICAgCiAgICAgbG9naWNhbFZpc3VhbE92ZXJm
bG93ID0gTGF5b3V0UmVjdChsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsVG9wVmlz
dWFsT3ZlcmZsb3csIGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93IC0gbG9naWNhbExlZnRWaXN1
YWxPdmVyZmxvdywgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93IC0gbG9naWNhbFRvcFZpc3Vh
bE92ZXJmbG93KTsKIAotICAgIGF1dG8gZG9jdW1lbnRNYXJrZXJCb3VuZHMgPSBUZXh0Qm94UGFp
bnRlcjo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKHRleHRCb3gpOwor
ICAgIGF1dG8gZG9jdW1lbnRNYXJrZXJCb3VuZHMgPSBMZWdhY3lUZXh0Qm94UGFpbnRlcjo6Y2Fs
Y3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKHRleHRCb3gpOwogICAgIGRvY3Vt
ZW50TWFya2VyQm91bmRzLm1vdmUodGV4dEJveC5sb2dpY2FsTGVmdCgpLCB0ZXh0Qm94LmxvZ2lj
YWxUb3AoKSk7CiAgICAgbG9naWNhbFZpc3VhbE92ZXJmbG93ID0gdW5pb25SZWN0KGxvZ2ljYWxW
aXN1YWxPdmVyZmxvdywgTGF5b3V0UmVjdChkb2N1bWVudE1hcmtlckJvdW5kcykpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKaW5kZXgg
MjA2ODJhNjhiNjkxLi5jODQ4MWU5NmQxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIExl
Z2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZgogICAgIGlmIChsb2dpY2FsU3RhcnQgPj0gcGFpbnRFbmQgfHwgbG9n
aWNhbFN0YXJ0ICsgbG9naWNhbEV4dGVudCA8PSBwYWludFN0YXJ0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBUZXh0Qm94UGFpbnRlciB0ZXh0Qm94UGFpbnRlcigqdGhpcywgcGFpbnRJbmZvLCBw
YWludE9mZnNldCk7CisgICAgTGVnYWN5VGV4dEJveFBhaW50ZXIgdGV4dEJveFBhaW50ZXIoKnRo
aXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogICAgIHRleHRCb3hQYWludGVyLnBhaW50KCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVU
ZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5o
CmluZGV4IGNkM2ExNjVmZGMwNi4uYWRlYzY0Y2E1ZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKQEAgLTE1MCw3ICsxNTAsNiBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIElubGluZUl0ZXJhdG9yOjpCb3hMZWdh
Y3lQYXRoOwotICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94UGFpbnRlcjsKIAogICAgIGNvbnN0IFJl
bmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQoKSBjb25zdDsKICAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgbGluZUZvbnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDY2YmE4ODVkYjc3Yy4uODdmMDQ4YzY1NzM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKQEAgLTcyNyw3ICs3MjcsMTIgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRNYXNrRm9yVGV4dEZpbGxCb3goSW1hZ2VCdWZmZXIqIG1hc2tJbWFnZSwgY29uc3QKICAgICAg
ICAgZm9yIChhdXRvIGJveCA9IGlubGluZUJveC0+Zmlyc3RMZWFmQm94KCksIGVuZCA9IGlubGlu
ZUJveC0+ZW5kTGVhZkJveCgpOyBib3ggIT0gZW5kOyBib3gudHJhdmVyc2VOZXh0T25MaW5lKCkp
IHsKICAgICAgICAgICAgIGlmICghYm94LT5pc1RleHQoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIFRleHRCb3hQYWludGVyIHRleHRCb3hQYWludGVyKGRvd25jYXN0
PElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3I+KGJveCksIG1hc2tJbmZvLCBwYWludE9m
ZnNldCk7CisgICAgICAgICAgICBpZiAoYXV0byogbGVnYWN5VGV4dEJveCA9IGRvd25jYXN0PExl
Z2FjeUlubGluZVRleHRCb3g+KGJveC0+bGVnYWN5SW5saW5lQm94KCkpKSB7CisgICAgICAgICAg
ICAgICAgTGVnYWN5VGV4dEJveFBhaW50ZXIgdGV4dEJveFBhaW50ZXIoKmxlZ2FjeVRleHRCb3gs
IG1hc2tJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgICAgICAgICAgdGV4dEJveFBhaW50ZXIu
cGFpbnQoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIE1vZGVyblRleHRCb3hQYWludGVyIHRleHRCb3hQYWludGVyKGJveC0+bW9kZXJuUGF0
aCgpLmlubGluZUNvbnRlbnQoKSwgYm94LT5tb2Rlcm5QYXRoKCkuYm94KCksIG1hc2tJbmZvLCBw
YWludE9mZnNldCk7CiAgICAgICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWludCgpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0Qm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBh
aW50ZXIuY3BwCmluZGV4IDNmYTNhMDEyNDc2YS4uOWY5MzM2MDU3NjM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKQEAgLTQ1LDI5ICs0NSwzNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihj
b25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotICAgIDogVGV4dEJveFBhaW50ZXIoSW5s
aW5lSXRlcmF0b3I6OnRleHRCb3hGb3IoJnRleHRCb3gpLCBwYWludEluZm8sIHBhaW50T2Zmc2V0
KQorc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBJ
bmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiwgY29uc3QgTWFya2VkVGV4dCYpOworCitM
ZWdhY3lUZXh0Qm94UGFpbnRlcjo6TGVnYWN5VGV4dEJveFBhaW50ZXIoY29uc3QgTGVnYWN5SW5s
aW5lVGV4dEJveCYgdGV4dEJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCkKKyAgICA6IFRleHRCb3hQYWludGVyKElubGluZUl0ZXJhdG9yOjpC
b3hMZWdhY3lQYXRoIHsgJnRleHRCb3ggfSwgcGFpbnRJbmZvLCBwYWludE9mZnNldCkKIHsKICAg
ICBtX2VtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUgPSB0ZXh0Qm94LmVtcGhhc2lzTWFya0V4
aXN0c0FuZElzQWJvdmUobV9zdHlsZSk7CiB9CiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKLVRleHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBMYXlvdXRJ
bnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgSW5saW5lRGlz
cGxheTo6Qm94JiBib3gsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCi0gICAgOiBUZXh0Qm94UGFpbnRlcihJbmxpbmVJdGVyYXRvcjo6dGV4dEJv
eEZvcihpbmxpbmVDb250ZW50LCBib3gpLCBwYWludEluZm8sIHBhaW50T2Zmc2V0KQorTW9kZXJu
VGV4dEJveFBhaW50ZXI6Ok1vZGVyblRleHRCb3hQYWludGVyKGNvbnN0IExheW91dEludGVncmF0
aW9uOjpJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBjb25zdCBJbmxpbmVEaXNwbGF5OjpC
b3gmIGJveCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCkKKyAgICA6IFRleHRCb3hQYWludGVyKElubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRo
IHsgaW5saW5lQ29udGVudCwgaW5saW5lQ29udGVudC5pbmRleEZvckJveChib3gpIH0sIHBhaW50
SW5mbywgcGFpbnRPZmZzZXQpCiB7CiB9CiAjZW5kaWYKIAotVGV4dEJveFBhaW50ZXI6OlRleHRC
b3hQYWludGVyKGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3ImIHRleHRCb3gs
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi0g
ICAgOiBtX3RleHRCb3godGV4dEJveCkKLSAgICAsIG1fcmVuZGVyZXIobV90ZXh0Qm94LT5yZW5k
ZXJlcigpKQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+CitUZXh0Qm94UGFpbnRlcjxU
ZXh0Qm94UGF0aD46OlRleHRCb3hQYWludGVyKFRleHRCb3hQYXRoJiYgdGV4dEJveCwgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKKyAgICA6IG1f
dGV4dEJveChXVEZNb3ZlKHRleHRCb3gpKQorICAgICwgbV9yZW5kZXJlcihkb3duY2FzdDxSZW5k
ZXJUZXh0PihtX3RleHRCb3gucmVuZGVyZXIoKSkpCiAgICAgLCBtX2RvY3VtZW50KG1fcmVuZGVy
ZXIuZG9jdW1lbnQoKSkKLSAgICAsIG1fc3R5bGUobV90ZXh0Qm94LT5zdHlsZSgpKQotICAgICwg
bV9wYWludFRleHRSdW4obV90ZXh0Qm94LT5jcmVhdGVUZXh0UnVuKCkpCisgICAgLCBtX3N0eWxl
KG1fdGV4dEJveC5zdHlsZSgpKQorICAgICwgbV9sb2dpY2FsUmVjdChtX3RleHRCb3guaXNIb3Jp
em9udGFsKCkgPyBtX3RleHRCb3gudmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKSA6
IG1fdGV4dEJveC52aXN1YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpLnRyYW5zcG9zZWRS
ZWN0KCkpCisgICAgLCBtX3BhaW50VGV4dFJ1bihtX3RleHRCb3guY3JlYXRlVGV4dFJ1bihJbmxp
bmVJdGVyYXRvcjo6Q3JlYXRlVGV4dFJ1bk1vZGU6OlBhaW50aW5nKSkKICAgICAsIG1fcGFpbnRJ
bmZvKHBhaW50SW5mbykKLSAgICAsIG1fc2VsZWN0YWJsZVJhbmdlKG1fdGV4dEJveC0+c2VsZWN0
YWJsZVJhbmdlKCkpCisgICAgLCBtX3NlbGVjdGFibGVSYW5nZShtX3RleHRCb3guc2VsZWN0YWJs
ZVJhbmdlKCkpCiAgICAgLCBtX3BhaW50UmVjdChjb21wdXRlUGFpbnRSZWN0KHBhaW50T2Zmc2V0
KSkKLSAgICAsIG1faXNGaXJzdExpbmUobV90ZXh0Qm94LT5saW5lQm94KCktPmlzRmlyc3QoKSkK
KyAgICAsIG1faXNGaXJzdExpbmUobV90ZXh0Qm94LmlzRmlyc3RMaW5lKCkpCisgICAgLCBtX2lz
Q29tYmluZWRUZXh0KGlzPFJlbmRlckNvbWJpbmVUZXh0PihtX3JlbmRlcmVyKSAmJiBkb3duY2Fz
dDxSZW5kZXJDb21iaW5lVGV4dD4obV9yZW5kZXJlcikuaXNDb21iaW5lZCgpKQogICAgICwgbV9p
c1ByaW50aW5nKG1fZG9jdW1lbnQucHJpbnRpbmcoKSkKICAgICAsIG1faGF2ZVNlbGVjdGlvbihj
b21wdXRlSGF2ZVNlbGVjdGlvbigpKQogICAgICwgbV9jb250YWluc0NvbXBvc2l0aW9uKG1fcmVu
ZGVyZXIudGV4dE5vZGUoKSAmJiBtX3JlbmRlcmVyLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRp
b25Ob2RlKCkgPT0gbV9yZW5kZXJlci50ZXh0Tm9kZSgpKQpAQCAtNzYsMTEgKzgxLDIwIEBAIFRl
eHRCb3hQYWludGVyOjpUZXh0Qm94UGFpbnRlcihjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJv
eEl0ZXJhdG9yJiB0ZXh0Qm94LCBQCiAgICAgQVNTRVJUKHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlOjpGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpTZWxl
Y3Rpb24gfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlRleHRDbGlwIHx8IHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpFdmVudFJlZ2lvbik7CiB9CiAKLVRleHRCb3hQYWlu
dGVyOjp+VGV4dEJveFBhaW50ZXIoKQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+CitU
ZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46On5UZXh0Qm94UGFpbnRlcigpCit7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVy
YXRvciBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46Om1ha2VJdGVyYXRvcigpIGNvbnN0CiB7
CisgICAgYXV0byBwYXRoQ29weSA9IG1fdGV4dEJveDsKKyAgICByZXR1cm4gSW5saW5lSXRlcmF0
b3I6OlRleHRCb3hJdGVyYXRvciB7IFdURk1vdmUocGF0aENvcHkpIH07CiB9CiAKLXZvaWQgVGV4
dEJveFBhaW50ZXI6OnBhaW50KCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgordm9p
ZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50KCkKIHsKICAgICBpZiAobV9wYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uICYmICFtX2hhdmVTZWxlY3Rpb24p
CiAgICAgICAgIHJldHVybjsKQEAgLTkxLDcgKzEwNSw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6
OnBhaW50KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJvb2wgc2hvdWxkUm90YXRl
ID0gIXRleHRCb3goKS5pc0hvcml6b250YWwoKSAmJiAhdGV4dEJveCgpLmlzQ29tYmluZWRUZXh0
KCk7CisgICAgYm9vbCBzaG91bGRSb3RhdGUgPSAhdGV4dEJveCgpLmlzSG9yaXpvbnRhbCgpICYm
ICFtX2lzQ29tYmluZWRUZXh0OwogICAgIGlmIChzaG91bGRSb3RhdGUpCiAgICAgICAgIG1fcGFp
bnRJbmZvLmNvbnRleHQoKS5jb25jYXRDVE0ocm90YXRpb24obV9wYWludFJlY3QsIENsb2Nrd2lz
ZSkpOwogCkBAIC0xMTUsNyArMTI5LDggQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnQoKQog
ICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fcGFpbnRS
ZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CiB9CiAKLU1hcmtlZFRleHQgVGV4dEJveFBhaW50ZXI6
OmNyZWF0ZU1hcmtlZFRleHRGcm9tU2VsZWN0aW9uSW5Cb3goKQordGVtcGxhdGU8dHlwZW5hbWUg
VGV4dEJveFBhdGg+CitNYXJrZWRUZXh0IFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6Y3Jl
YXRlTWFya2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveCgpCiB7CiAgICAgYXV0byBbc2VsZWN0aW9u
U3RhcnQsIHNlbGVjdGlvbkVuZF0gPSBtX3JlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5yYW5n
ZUZvclRleHRCb3gobV9yZW5kZXJlciwgbV9zZWxlY3RhYmxlUmFuZ2UpOwogICAgIGlmIChzZWxl
Y3Rpb25TdGFydCA8IHNlbGVjdGlvbkVuZCkKQEAgLTEyMyw3ICsxMzgsOCBAQCBNYXJrZWRUZXh0
IFRleHRCb3hQYWludGVyOjpjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCkKICAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQo
KQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+Cit2b2lkIFRleHRCb3hQYWludGVyPFRl
eHRCb3hQYXRoPjo6cGFpbnRCYWNrZ3JvdW5kKCkKIHsKICAgICBhdXRvIHNob3VsZFBhaW50Q29t
cG9zaXRpb25CYWNrZ3JvdW5kID0gbV9jb250YWluc0NvbXBvc2l0aW9uICYmICFtX3VzZUN1c3Rv
bVVuZGVybGluZXM7CiAjaWYgRU5BQkxFKFRFWFRfU0VMRUNUSU9OKQpAQCAtMTY5LDcgKzE4NSw4
IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCgpCiAgICAgICAgIHBhaW50
QmFja2dyb3VuZChtYXJrZWRUZXh0KTsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRG
b3JlZ3JvdW5kQW5kRGVjb3JhdGlvbnMoKQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+
Cit2b2lkIFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRGb3JlZ3JvdW5kQW5kRGVj
b3JhdGlvbnMoKQogewogICAgIGF1dG8gc2hvdWxkUGFpbnRTZWxlY3Rpb25Gb3JlZ3JvdW5kID0g
bV9oYXZlU2VsZWN0aW9uICYmICFtX3VzZUN1c3RvbVVuZGVybGluZXM7CiAgICAgYXV0byBoYXNU
ZXh0RGVjb3JhdGlvbiA9ICFtX3N0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkuaXNFbXB0
eSgpOwpAQCAtMjMxLDggKzI0OCw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Rm9yZWdy
b3VuZEFuZERlY29yYXRpb25zKCkKICAgICB9CiAKICAgICBpZiAoaGFzRGVjb3JhdGlvbiAmJiBt
X3BhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxlY3Rpb24pIHsKLSAgICAgICAgVGV4
dFJ1biB0ZXh0UnVuID0gdGV4dEJveCgpLmNyZWF0ZVRleHRSdW4oKTsKLSAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbV9zZWxlY3RhYmxlUmFuZ2UudHJ1bmNhdGlvbi52YWx1ZV9vcih0ZXh0UnVu
Lmxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9zZWxlY3RhYmxlUmFuZ2Uu
dHJ1bmNhdGlvbi52YWx1ZV9vcihtX3BhaW50VGV4dFJ1bi5sZW5ndGgoKSk7CiAgICAgICAgIHVu
c2lnbmVkIHNlbGVjdGlvblN0YXJ0ID0gMDsKICAgICAgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5k
ID0gMDsKICAgICAgICAgaWYgKG1faGF2ZVNlbGVjdGlvbikKQEAgLTI4Nyw3ICszMDMsOCBAQCB2
b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmRBbmREZWNvcmF0aW9ucygpCiAgICAg
fQogfQogCi12b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK3ZvaWQgVGV4dEJveFBhaW50ZXI8VGV4
dEJveFBhdGg+OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpCiB7CiAgICAgYXV0byYgZWRp
dG9yID0gbV9yZW5kZXJlci5mcmFtZSgpLmVkaXRvcigpOwogCkBAIC0zMTQsMTIgKzMzMSwxNCBA
QCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCgpCiAgICAg
fQogfQogCi12b2lkIFRleHRCb3hQYWludGVyOjpwYWludEJhY2tncm91bmQoY29uc3QgU3R5bGVk
TWFya2VkVGV4dCYgbWFya2VkVGV4dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgor
dm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50QmFja2dyb3VuZChjb25zdCBT
dHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogewotICAgIHBhaW50QmFja2dyb3VuZChtYXJr
ZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCwgbWFya2VkVGV4dC5zdHls
ZS5iYWNrZ3JvdW5kQ29sb3IpOworICAgIHBhaW50QmFja2dyb3VuZChtYXJrZWRUZXh0LnN0YXJ0
T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCwgbWFya2VkVGV4dC5zdHlsZS5iYWNrZ3JvdW5k
Q29sb3IsIEJhY2tncm91bmRTdHlsZTo6Tm9ybWFsKTsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRl
cjo6cGFpbnRCYWNrZ3JvdW5kKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvciwgQmFja2dyb3VuZFN0eWxlIGJhY2tncm91bmRTdHlsZSkK
K3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0
Qm94UGF0aD46OnBhaW50QmFja2dyb3VuZCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IsIEJhY2tncm91bmRTdHlsZSBiYWNrZ3JvdW5k
U3R5bGUpCiB7CiAgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IGVuZE9mZnNldCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzMwLDE0ICszNDksMTQgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNr
Z3JvdW5kKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGMKIAogICAg
IC8vIE5vdGUgdGhhdCBpZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcg
YmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRyYXcgaXRzIG93biBoaWdo
bGlnaHQuCi0gICAgYXV0byBsaW5lQm94ID0gdGV4dEJveCgpLmxpbmVCb3goKTsKKyAgICBhdXRv
IGxpbmVCb3ggPSBtYWtlSXRlcmF0b3IoKS0+bGluZUJveCgpOwogICAgIGF1dG8gc2VsZWN0aW9u
Qm90dG9tID0gTGluZVNlbGVjdGlvbjo6bG9naWNhbEJvdHRvbSgqbGluZUJveCk7CiAgICAgYXV0
byBzZWxlY3Rpb25Ub3AgPSBMaW5lU2VsZWN0aW9uOjpsb2dpY2FsVG9wQWRqdXN0ZWRGb3JQcmVj
ZWRpbmdCbG9jaygqbGluZUJveCk7CiAgICAgLy8gVXNlIHNhbWUgeSBwb3NpdGlvbmluZyBhbmQg
aGVpZ2h0IGFzIGZvciBzZWxlY3Rpb24sIHNvIHRoYXQgd2hlbiB0aGUgc2VsZWN0aW9uIGFuZCB0
aGlzIHN1YnJhbmdlIGFyZSBvbgogICAgIC8vIHRoZSBzYW1lIHdvcmQgdGhlcmUgYXJlIG5vIHBp
ZWNlcyBzdGlja2luZyBvdXQuCi0gICAgYXV0byBkZWx0YVkgPSBMYXlvdXRVbml0IHsgbV9zdHls
ZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20gLSB0ZXh0Qm94
KCkubG9naWNhbEJvdHRvbSgpIDogdGV4dEJveCgpLmxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRv
cCB9OworICAgIGF1dG8gZGVsdGFZID0gTGF5b3V0VW5pdCB7IG1fc3R5bGUuaXNGbGlwcGVkTGlu
ZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tIC0gbV9sb2dpY2FsUmVjdC5tYXhZKCkg
OiBtX2xvZ2ljYWxSZWN0LnkoKSAtIHNlbGVjdGlvblRvcCB9OwogICAgIGF1dG8gc2VsZWN0aW9u
SGVpZ2h0ID0gTGF5b3V0VW5pdCB7IHN0ZDo6bWF4KDAuZiwgc2VsZWN0aW9uQm90dG9tIC0gc2Vs
ZWN0aW9uVG9wKSB9OwotICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QgeyBMYXlv
dXRVbml0KG1fcGFpbnRSZWN0LngoKSksIExheW91dFVuaXQobV9wYWludFJlY3QueSgpIC0gZGVs
dGFZKSwgTGF5b3V0VW5pdCh0ZXh0Qm94KCkubG9naWNhbFdpZHRoKCkpLCBzZWxlY3Rpb25IZWln
aHQgfTsKKyAgICBhdXRvIHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0IHsgTGF5b3V0VW5pdCht
X3BhaW50UmVjdC54KCkpLCBMYXlvdXRVbml0KG1fcGFpbnRSZWN0LnkoKSAtIGRlbHRhWSksIExh
eW91dFVuaXQobV9sb2dpY2FsUmVjdC53aWR0aCgpKSwgc2VsZWN0aW9uSGVpZ2h0IH07CiAgICAg
Zm9udENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChtX3BhaW50VGV4dFJ1biwg
c2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAKICAgICAvLyBGSVhNRTog
U3VwcG9ydCBwYWludGluZyBjb21iaW5lZCB0ZXh0LiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODA5OTM+LgpAQCAtMzUyLDcgKzM3MSw4IEBAIHZvaWQgVGV4
dEJveFBhaW50ZXI6OnBhaW50QmFja2dyb3VuZCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCBjCiAgICAgY29udGV4dC5maWxsUmVjdChiYWNrZ3JvdW5kUmVjdCwgY29s
b3IpOwogfQogCi12b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQoY29uc3QgU3R5
bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRo
Pgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50Rm9yZWdyb3VuZChjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQogewogICAgIGlmIChtYXJrZWRUZXh0LnN0
YXJ0T2Zmc2V0ID49IG1hcmtlZFRleHQuZW5kT2Zmc2V0KQogICAgICAgICByZXR1cm47CkBAIC0z
NzMsNyArMzkzLDcgQEAgdm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRGb3JlZ3JvdW5kKGNvbnN0
IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCiAgICAgICAgIGlmIChtX3N0eWxlLmhhc0Fw
cGxlQ29sb3JGaWx0ZXIoKSkKICAgICAgICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvd0NvbG9y
RmlsdGVyKCZtX3N0eWxlLmFwcGxlQ29sb3JGaWx0ZXIoKSk7CiAgICAgfQotICAgIHRleHRQYWlu
dGVyLnNldEVtcGhhc2lzTWFyayhlbXBoYXNpc01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgdGV4
dEJveCgpLmlzQ29tYmluZWRUZXh0KCkgPyAmZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KG1f
cmVuZGVyZXIpIDogbnVsbHB0cik7CisgICAgdGV4dFBhaW50ZXIuc2V0RW1waGFzaXNNYXJrKGVt
cGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCBtX2lzQ29tYmluZWRUZXh0ID8gJmRvd25j
YXN0PFJlbmRlckNvbWJpbmVUZXh0PihtX3JlbmRlcmVyKSA6IG51bGxwdHIpOwogICAgIGlmIChh
dXRvKiBkZWJ1Z1NoYWRvdyA9IGRlYnVnVGV4dFNoYWRvdygpKQogICAgICAgICB0ZXh0UGFpbnRl
ci5zZXRTaGFkb3coZGVidWdTaGFkb3cpOwogCkBAIC0zODIsMTggKzQwMiwxOSBAQCB2b2lkIFRl
eHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFy
a2VkVGV4dCkKICAgICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFscGhh
KTsKICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgbWFya2VkVGV4dC5zdHlsZS50
ZXh0U3R5bGVzKTsKIAotICAgIGlmIChhdXRvKiBsZWdhY3lJbmxpbmVCb3ggPSB0ZXh0Qm94KCku
bGVnYWN5SW5saW5lQm94KCkpCi0gICAgICAgIHRleHRQYWludGVyLnNldEdseXBoRGlzcGxheUxp
c3RJZk5lZWRlZCgqbGVnYWN5SW5saW5lQm94LCBtX3BhaW50SW5mbywgbV9wYWludFRleHRSdW4p
OworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VGV4dEJveFBhdGgsIElubGluZUl0
ZXJhdG9yOjpCb3hMZWdhY3lQYXRoPikKKyAgICAgICAgdGV4dFBhaW50ZXIuc2V0R2x5cGhEaXNw
bGF5TGlzdElmTmVlZGVkKGRvd25jYXN0PExlZ2FjeUlubGluZVRleHRCb3g+KCp0ZXh0Qm94KCku
bGVnYWN5SW5saW5lQm94KCkpLCBtX3BhaW50SW5mbywgbV9wYWludFRleHRSdW4pOwogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIGVsc2UKLSAgICAgICAgdGV4dFBh
aW50ZXIuc2V0R2x5cGhEaXNwbGF5TGlzdElmTmVlZGVkKCp0ZXh0Qm94KCkuaW5saW5lQm94KCks
IG1fcGFpbnRJbmZvLCBtX3BhaW50VGV4dFJ1bik7CisgICAgICAgIHRleHRQYWludGVyLnNldEds
eXBoRGlzcGxheUxpc3RJZk5lZWRlZCh0ZXh0Qm94KCkuYm94KCksIG1fcGFpbnRJbmZvLCBtX3Bh
aW50VGV4dFJ1bik7CiAjZW5kaWYKIAogICAgIC8vIFRleHRQYWludGVyIHdhbnRzIHRoZSBib3gg
cmVjdGFuZ2xlIGFuZCB0ZXh0IG9yaWdpbiBvZiB0aGUgZW50aXJlIGxpbmUgYm94LgogICAgIHRl
eHRQYWludGVyLnBhaW50UmFuZ2UobV9wYWludFRleHRSdW4sIG1fcGFpbnRSZWN0LCB0ZXh0T3Jp
Z2luRnJvbVBhaW50UmVjdChtX3BhaW50UmVjdCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1h
cmtlZFRleHQuZW5kT2Zmc2V0KTsKIH0KIAotVGV4dERlY29yYXRpb25QYWludGVyIFRleHRCb3hQ
YWludGVyOjpjcmVhdGVEZWNvcmF0aW9uUGFpbnRlcihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBt
YXJrZWRUZXh0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBPdXRSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNuYXBwZWRTZWxlY3Rpb25SZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+CitU
ZXh0RGVjb3JhdGlvblBhaW50ZXIgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+OjpjcmVhdGVE
ZWNvcmF0aW9uUGFpbnRlcihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGNsaXBPdXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNuYXBwZWRTZWxlY3Rp
b25SZWN0KQogewogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNv
bnRleHQoKTsKIApAQCAtNDE2LDcgKzQzNyw3IEBAIFRleHREZWNvcmF0aW9uUGFpbnRlciBUZXh0
Qm94UGFpbnRlcjo6Y3JlYXRlRGVjb3JhdGlvblBhaW50ZXIoY29uc3QgU3R5bGVkTWFya2VkCiAg
ICAgYXV0byB0ZXh0RGVjb3JhdGlvbnMgPSBtX3N0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0
KCk7CiAgICAgdGV4dERlY29yYXRpb25zLmFkZChUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0Rm9yU3R5bGUobWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlv
blN0eWxlcykpOwogICAgIFRleHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9uUGFpbnRlciB7
IGNvbnRleHQsIHRleHREZWNvcmF0aW9ucywgbV9yZW5kZXJlciwgbV9pc0ZpcnN0TGluZSwgZm9u
dCwgbWFya2VkVGV4dC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcyB9OwotICAgIGRlY29yYXRp
b25QYWludGVyLnNldFRleHRCb3gobV90ZXh0Qm94KTsKKyAgICBkZWNvcmF0aW9uUGFpbnRlci5z
ZXRUZXh0Qm94KG1ha2VJdGVyYXRvcigpKTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0
aChzbmFwcGVkU2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5z
ZXRJc0hvcml6b250YWwodGV4dEJveCgpLmlzSG9yaXpvbnRhbCgpKTsKICAgICBpZiAobWFya2Vk
VGV4dC5zdHlsZS50ZXh0U2hhZG93KSB7CkBAIC00MjgsMzEgKzQ0OSwzMiBAQCBUZXh0RGVjb3Jh
dGlvblBhaW50ZXIgVGV4dEJveFBhaW50ZXI6OmNyZWF0ZURlY29yYXRpb25QYWludGVyKGNvbnN0
IFN0eWxlZE1hcmtlZAogICAgIHJldHVybiBkZWNvcmF0aW9uUGFpbnRlcjsKIH0KIAotdm9pZCBU
ZXh0Qm94UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMoVGV4dERlY29yYXRpb25Q
YWludGVyJiBkZWNvcmF0aW9uUGFpbnRlciwgY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2Vk
VGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzbmFwcGVkU2VsZWN0aW9uUmVjdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBh
aW50QmFja2dyb3VuZERlY29yYXRpb25zKFRleHREZWNvcmF0aW9uUGFpbnRlciYgZGVjb3JhdGlv
blBhaW50ZXIsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgc25hcHBlZFNlbGVjdGlvblJlY3QpCiB7Ci0gICAgYm9vbCBpc0NvbWJpbmVkVGV4dCA9
IHRleHRCb3goKS5pc0NvbWJpbmVkVGV4dCgpOwotICAgIGlmIChpc0NvbWJpbmVkVGV4dCkKKyAg
ICBpZiAobV9pc0NvbWJpbmVkVGV4dCkKICAgICAgICAgbV9wYWludEluZm8uY29udGV4dCgpLmNv
bmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ2xvY2t3aXNlKSk7CiAKICAgICBkZWNvcmF0
aW9uUGFpbnRlci5wYWludEJhY2tncm91bmREZWNvcmF0aW9ucyhtX3BhaW50VGV4dFJ1bi5zdWJS
dW4obWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQgLSBtYXJrZWRU
ZXh0LnN0YXJ0T2Zmc2V0KSwgdGV4dE9yaWdpbkZyb21QYWludFJlY3Qoc25hcHBlZFNlbGVjdGlv
blJlY3QpLCBzbmFwcGVkU2VsZWN0aW9uUmVjdC5sb2NhdGlvbigpKTsKIAotICAgIGlmIChpc0Nv
bWJpbmVkVGV4dCkKKyAgICBpZiAobV9pc0NvbWJpbmVkVGV4dCkKICAgICAgICAgbV9wYWludElu
Zm8uY29udGV4dCgpLmNvbmNhdENUTShyb3RhdGlvbihtX3BhaW50UmVjdCwgQ291bnRlcmNsb2Nr
d2lzZSkpOwogfQogCi12b2lkIFRleHRCb3hQYWludGVyOjpwYWludEZvcmVncm91bmREZWNvcmF0
aW9ucyhUZXh0RGVjb3JhdGlvblBhaW50ZXImIGRlY29yYXRpb25QYWludGVyLCBjb25zdCBGbG9h
dFJlY3QmIHNuYXBwZWRTZWxlY3Rpb25SZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBh
dGg+Cit2b2lkIFRleHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRGb3JlZ3JvdW5kRGVj
b3JhdGlvbnMoVGV4dERlY29yYXRpb25QYWludGVyJiBkZWNvcmF0aW9uUGFpbnRlciwgY29uc3Qg
RmxvYXRSZWN0JiBzbmFwcGVkU2VsZWN0aW9uUmVjdCkKIHsKLSAgICBib29sIGlzQ29tYmluZWRU
ZXh0ID0gdGV4dEJveCgpLmlzQ29tYmluZWRUZXh0KCk7Ci0gICAgaWYgKGlzQ29tYmluZWRUZXh0
KQorICAgIGlmIChtX2lzQ29tYmluZWRUZXh0KQogICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0
KCkuY29uY2F0Q1RNKHJvdGF0aW9uKG1fcGFpbnRSZWN0LCBDbG9ja3dpc2UpKTsKIAogICAgIGRl
Y29yYXRpb25QYWludGVyLnBhaW50Rm9yZWdyb3VuZERlY29yYXRpb25zKHNuYXBwZWRTZWxlY3Rp
b25SZWN0LmxvY2F0aW9uKCkpOwogCi0gICAgaWYgKGlzQ29tYmluZWRUZXh0KQorICAgIGlmICht
X2lzQ29tYmluZWRUZXh0KQogICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuY29uY2F0Q1RN
KHJvdGF0aW9uKG1fcGFpbnRSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CiB9CiAKLXZvaWQgVGV4
dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFRleHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50
Q29tcG9zaXRpb25VbmRlcmxpbmVzKCkKIHsKICAgICBmb3IgKGF1dG8mIHVuZGVybGluZSA6IG1f
cmVuZGVyZXIuZnJhbWUoKS5lZGl0b3IoKS5jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXMoKSkg
ewogICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA8PSB0ZXh0Qm94KCkuc3RhcnQoKSkg
ewpAQCAtNDgwLDI2ICs1MDIsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21l
bnQoZmxvYXQgbG9naWNhbFdpZHRoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwKICAgICBzdGFy
dCA9IGxvZ2ljYWxXaWR0aCAtIHdpZHRoIC0gc3RhcnQ7CiB9CiAKLXN0YXRpYyBmbG9hdCB0ZXh0
UG9zaXRpb24oY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciYgdGV4dEJveCkK
K3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorZmxvYXQgVGV4dEJveFBhaW50ZXI8VGV4
dEJveFBhdGg+Ojp0ZXh0UG9zaXRpb24oKQogewogICAgIC8vIFdoZW4gY29tcHV0aW5nIHRoZSB3
aWR0aCBvZiBhIHRleHQgcnVuLCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBv
c2l0aW9uc0ZvckxpbmUoKSBkb2Vzbid0IGluY2x1ZGUgdGhlIGFjdHVhbCBvZmZzZXQKICAgICAv
LyBmcm9tIHRoZSBjb250YWluaW5nIGJsb2NrIGVkZ2UgaW4gaXRzIG1lYXN1cmVtZW50LiB0ZXh0
UG9zaXRpb24oKSBzaG91bGQgYmUgY29uc2lzdGVudCBzbyB0aGUgdGV4dCBhcmUgcmVuZGVyZWQg
aW4gdGhlIHNhbWUgd2lkdGguCi0gICAgaWYgKCF0ZXh0Qm94LT5sb2dpY2FsTGVmdCgpKQorICAg
IGlmICghbV9sb2dpY2FsUmVjdC54KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0
ZXh0Qm94LT5sb2dpY2FsTGVmdCgpIC0gdGV4dEJveC0+bGluZUJveCgpLT5jb250ZW50TG9naWNh
bExlZnQoKTsKKyAgICByZXR1cm4gbV9sb2dpY2FsUmVjdC54KCkgLSBtYWtlSXRlcmF0b3IoKS0+
bGluZUJveCgpLT5jb250ZW50TG9naWNhbExlZnQoKTsKIH0KIAotdm9pZCBUZXh0Qm94UGFpbnRl
cjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYg
dW5kZXJsaW5lKQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+Cit2b2lkIFRleHRCb3hQ
YWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBDb21w
b3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQogewogICAgIGZsb2F0IHN0YXJ0ID0gMDsgLy8g
c3RhcnQgb2YgbGluZSB0byBkcmF3LCByZWxhdGl2ZSB0byB0eAotICAgIGZsb2F0IHdpZHRoID0g
dGV4dEJveCgpLmxvZ2ljYWxXaWR0aCgpOyAvLyBob3cgbXVjaCBsaW5lIHRvIGRyYXcKKyAgICBm
bG9hdCB3aWR0aCA9IG1fbG9naWNhbFJlY3Qud2lkdGgoKTsgLy8gaG93IG11Y2ggbGluZSB0byBk
cmF3CiAgICAgYm9vbCB1c2VXaG9sZVdpZHRoID0gdHJ1ZTsKICAgICB1bnNpZ25lZCBwYWludFN0
YXJ0ID0gdGV4dEJveCgpLnN0YXJ0KCk7CiAgICAgdW5zaWduZWQgcGFpbnRFbmQgPSB0ZXh0Qm94
KCkuZW5kKCk7CiAgICAgaWYgKHBhaW50U3RhcnQgPD0gdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0KSB7
CiAgICAgICAgIHBhaW50U3RhcnQgPSB1bmRlcmxpbmUuc3RhcnRPZmZzZXQ7CiAgICAgICAgIHVz
ZVdob2xlV2lkdGggPSBmYWxzZTsKLSAgICAgICAgc3RhcnQgPSBtX3JlbmRlcmVyLndpZHRoKHRl
eHRCb3goKS5zdGFydCgpLCBwYWludFN0YXJ0IC0gdGV4dEJveCgpLnN0YXJ0KCksIHRleHRQb3Np
dGlvbihtX3RleHRCb3gpLCBtX2lzRmlyc3RMaW5lKTsKKyAgICAgICAgc3RhcnQgPSBtX3JlbmRl
cmVyLndpZHRoKHRleHRCb3goKS5zdGFydCgpLCBwYWludFN0YXJ0IC0gdGV4dEJveCgpLnN0YXJ0
KCksIHRleHRQb3NpdGlvbigpLCBtX2lzRmlyc3RMaW5lKTsKICAgICB9CiAgICAgaWYgKHBhaW50
RW5kICE9IHVuZGVybGluZS5lbmRPZmZzZXQpIHsKICAgICAgICAgcGFpbnRFbmQgPSBzdGQ6Om1p
bihwYWludEVuZCwgKHVuc2lnbmVkKXVuZGVybGluZS5lbmRPZmZzZXQpOwpAQCAtNTEwLDggKzUz
NCw4IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoY29u
c3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVyCiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBm
YWxzZTsKICAgICB9CiAgICAgaWYgKCF1c2VXaG9sZVdpZHRoKSB7Ci0gICAgICAgIHdpZHRoID0g
bV9yZW5kZXJlci53aWR0aChwYWludFN0YXJ0LCBwYWludEVuZCAtIHBhaW50U3RhcnQsIHRleHRQ
b3NpdGlvbihtX3RleHRCb3gpICsgc3RhcnQsIG1faXNGaXJzdExpbmUpOwotICAgICAgICBtaXJy
b3JSVExTZWdtZW50KHRleHRCb3goKS5sb2dpY2FsV2lkdGgoKSwgdGV4dEJveCgpLmRpcmVjdGlv
bigpLCBzdGFydCwgd2lkdGgpOworICAgICAgICB3aWR0aCA9IG1fcmVuZGVyZXIud2lkdGgocGFp
bnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCB0ZXh0UG9zaXRpb24oKSArIHN0YXJ0LCBt
X2lzRmlyc3RMaW5lKTsKKyAgICAgICAgbWlycm9yUlRMU2VnbWVudChtX2xvZ2ljYWxSZWN0Lndp
ZHRoKCksIHRleHRCb3goKS5kaXJlY3Rpb24oKSwgc3RhcnQsIHdpZHRoKTsKICAgICB9CiAKICAg
ICAvLyBUaGljayBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzIGFyZSAycHggdGhpY2sgYXMgbG9uZyBh
cyB0aGVyZSBpcyByb29tIGZvciB0aGUgMnB4IGxpbmUgdW5kZXIgdGhlIGJhc2VsaW5lLgpAQCAt
NTE5LDcgKzU0Myw3IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRl
cmxpbmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVyCiAgICAgLy8gSWYgdGhlcmUn
cyBub3QgZW5vdWdoIHNwYWNlIHRoZSB1bmRlcmxpbmUgd2lsbCB0b3VjaCBvciBvdmVybGFwIGNo
YXJhY3RlcnMuCiAgICAgaW50IGxpbmVUaGlja25lc3MgPSAxOwogICAgIGludCBiYXNlbGluZSA9
IG1fc3R5bGUubWV0cmljc09mUHJpbWFyeUZvbnQoKS5hc2NlbnQoKTsKLSAgICBpZiAodW5kZXJs
aW5lLnRoaWNrICYmIHRleHRCb3goKS5sb2dpY2FsSGVpZ2h0KCkgLSBiYXNlbGluZSA+PSAyKQor
ICAgIGlmICh1bmRlcmxpbmUudGhpY2sgJiYgbV9sb2dpY2FsUmVjdC5oZWlnaHQoKSAtIGJhc2Vs
aW5lID49IDIpCiAgICAgICAgIGxpbmVUaGlja25lc3MgPSAyOwogCiAgICAgLy8gV2UgbmVlZCB0
byBoYXZlIHNvbWUgc3BhY2UgYmV0d2VlbiB1bmRlcmxpbmVzIG9mIHN1YnNlcXVlbnQgY2xhdXNl
cywgYmVjYXVzZSBzb21lIGlucHV0IG1ldGhvZHMgZG8gbm90IHVzZSBkaWZmZXJlbnQgdW5kZXJs
aW5lIHN0eWxlcyBmb3IgdGhvc2UuCkBAIC01MzMsMTcgKzU1NywxOCBAQCB2b2lkIFRleHRCb3hQ
YWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNvbnN0IENvbXBvc2l0aW9uVW5kZXJs
aW5lJiB1bmRlcgogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNv
bnRleHQoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHVuZGVybGluZUNvbG9yKTsKICAg
ICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhsaW5lVGhpY2tuZXNzKTsKLSAgICBjb250ZXh0
LmRyYXdMaW5lRm9yVGV4dChGbG9hdFJlY3QobV9wYWludFJlY3QueCgpICsgc3RhcnQsIG1fcGFp
bnRSZWN0LnkoKSArIHRleHRCb3goKS5sb2dpY2FsSGVpZ2h0KCkgLSBsaW5lVGhpY2tuZXNzLCB3
aWR0aCwgbGluZVRoaWNrbmVzcyksIG1fZG9jdW1lbnQucHJpbnRpbmcoKSk7CisgICAgY29udGV4
dC5kcmF3TGluZUZvclRleHQoRmxvYXRSZWN0KG1fcGFpbnRSZWN0LngoKSArIHN0YXJ0LCBtX3Bh
aW50UmVjdC55KCkgKyBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpIC0gbGluZVRoaWNrbmVzcywgd2lk
dGgsIGxpbmVUaGlja25lc3MpLCBtX2lzUHJpbnRpbmcpOwogfQogCi12b2lkIFRleHRCb3hQYWlu
dGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXJzKCkKK3RlbXBsYXRlPHR5cGVuYW1lIFRl
eHRCb3hQYXRoPgordm9pZCBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OnBhaW50UGxhdGZv
cm1Eb2N1bWVudE1hcmtlcnMoKQogewogICAgIGF1dG8gbWFya2VkVGV4dHMgPSBNYXJrZWRUZXh0
Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKG1fcmVuZGVyZXIsIG1fc2VsZWN0YWJsZVJhbmdl
LCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKICAgICBmb3IgKGF1dG8mIG1h
cmtlZFRleHQgOiBNYXJrZWRUZXh0OjpzdWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtlZFRleHQ6
Ok92ZXJsYXBTdHJhdGVneTo6RnJvbnRtb3N0KSkKICAgICAgICAgcGFpbnRQbGF0Zm9ybURvY3Vt
ZW50TWFya2VyKG1hcmtlZFRleHQpOwogfQogCi1GbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNh
bGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbmxpbmVU
ZXh0Qm94JiB0ZXh0Qm94KQorRmxvYXRSZWN0IExlZ2FjeVRleHRCb3hQYWludGVyOjpjYWxjdWxh
dGVVbmlvbk9mQWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJv
eCYgdGV4dEJveCkKIHsKICAgICAvLyBUaGlzIG11c3QgbWF0Y2ggcGFpbnRQbGF0Zm9ybURvY3Vt
ZW50TWFya2VycygpLgogICAgIEZsb2F0UmVjdCByZXN1bHQ7CkBAIC01NTMsMTMgKzU3OCwxNCBA
QCBGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1h
cmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
VGV4dEJveFBhaW50ZXI6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcihjb25zdCBNYXJrZWRU
ZXh0JiBtYXJrZWRUZXh0KQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+Cit2b2lkIFRl
eHRCb3hQYWludGVyPFRleHRCb3hQYXRoPjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKGNv
bnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxp
bmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQogICAgIGlmIChtX2RvY3VtZW50LnByaW50aW5n
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYm91bmRzID0gY2FsY3VsYXRlRG9jdW1l
bnRNYXJrZXJCb3VuZHMobV90ZXh0Qm94LCBtYXJrZWRUZXh0KTsKKyAgICBhdXRvIGJvdW5kcyA9
IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKG1ha2VJdGVyYXRvcigpLCBtYXJrZWRUZXh0
KTsKIAogICAgIGF1dG8gbGluZVN0eWxlRm9yTWFya2VkVGV4dFR5cGUgPSBbJl0oKSAtPiBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSB7CiAgICAgICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFu
Y2UgPSBtX3JlbmRlcmVyLnVzZURhcmtBcHBlYXJhbmNlKCk7CkBAIC01ODcsMTIgKzYxMywxMyBA
QCB2b2lkIFRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29uc3Qg
TWFya2VkVGV4dCYgbWFya2VkVGV4dCkKICAgICBtX3BhaW50SW5mby5jb250ZXh0KCkuZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihib3VuZHMsIGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBlKCkp
OwogfQogCi1GbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNvbXB1dGVQYWludFJlY3QoY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+
CitGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI8VGV4dEJveFBhdGg+Ojpjb21wdXRlUGFpbnRSZWN0
KGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBGbG9hdFBvaW50IGxvY2Fs
UGFpbnRPZmZzZXQocGFpbnRPZmZzZXQpOwogCiAgICAgaWYgKG1fc2VsZWN0YWJsZVJhbmdlLnRy
dW5jYXRpb24pIHsKLSAgICAgICAgaWYgKG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0
eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IHRleHRCb3goKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpIHsKKyAgICAgICAgaWYgKG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCkt
PnN0eWxlKCkuZGlyZWN0aW9uKCkgIT0gdGV4dEJveCgpLmRpcmVjdGlvbigpKSB7CiAgICAgICAg
ICAgICAvLyBNYWtlIHRoZSB2aXNpYmxlIGZyYWdtZW50IG9mIHRleHQgaHVnIHRoZSBlZGdlIGNs
b3Nlc3QgdG8gdGhlIHJlc3Qgb2YgdGhlIHJ1biBieSBtb3ZpbmcgdGhlIG9yaWdpbgogICAgICAg
ICAgICAgLy8gYXQgd2hpY2ggd2Ugc3RhcnQgZHJhd2luZyB0ZXh0LgogICAgICAgICAgICAgLy8g
ZS5nLiBJbiB0aGUgY2FzZSBvZiBMVFIgdGV4dCB0cnVuY2F0ZWQgaW4gYW4gUlRMIENvbnRleHQs
IHRoZSBjb3JyZWN0IGJlaGF2aW9yIGlzOgpAQCAtNjAxLDIxICs2MjgsMjQgQEAgRmxvYXRSZWN0
IFRleHRCb3hQYWludGVyOjpjb21wdXRlUGFpbnRSZWN0KGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCkKICAgICAgICAgICAgIC8vIGZhcnRoZXIgdG8gdGhlIHJpZ2h0LgogICAgICAgICAg
ICAgLy8gTk9URTogV2ViS2l0J3MgYmVoYXZpb3IgZGlmZmVycyBmcm9tIHRoYXQgb2YgSUUgd2hp
Y2ggYXBwZWFycyB0byBqdXN0IG92ZXJsYXkgdGhlIGVsbGlwc2lzIG9uIHRvcCBvZiB0aGUKICAg
ICAgICAgICAgIC8vIHRydW5jYXRlZCBzdHJpbmcgaS5lLiAgfEhlbGxvfENCQXwgLT4gfC4uLmxv
fENCQXwKLSAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZlZpc2libGVUZXh0IHsgbV9yZW5k
ZXJlci53aWR0aCh0ZXh0Qm94KCkuc3RhcnQoKSwgKm1fc2VsZWN0YWJsZVJhbmdlLnRydW5jYXRp
b24sIHRleHRQb3NpdGlvbihtX3RleHRCb3gpLCBtX2lzRmlyc3RMaW5lKSB9OwotICAgICAgICAg
ICAgTGF5b3V0VW5pdCB3aWR0aE9mSGlkZGVuVGV4dCB7IHRleHRCb3goKS5sb2dpY2FsV2lkdGgo
KSAtIHdpZHRoT2ZWaXNpYmxlVGV4dCB9OwotICAgICAgICAgICAgTGF5b3V0U2l6ZSB0cnVuY2F0
aW9uT2Zmc2V0KHRleHRCb3goKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB3aWR0aE9mSGlk
ZGVuVGV4dCA6IC13aWR0aE9mSGlkZGVuVGV4dCwgMF9sdSk7CisgICAgICAgICAgICBMYXlvdXRV
bml0IHdpZHRoT2ZWaXNpYmxlVGV4dCB7IG1fcmVuZGVyZXIud2lkdGgodGV4dEJveCgpLnN0YXJ0
KCksICptX3NlbGVjdGFibGVSYW5nZS50cnVuY2F0aW9uLCB0ZXh0UG9zaXRpb24oKSwgbV9pc0Zp
cnN0TGluZSkgfTsKKyAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZkhpZGRlblRleHQgeyBt
X2xvZ2ljYWxSZWN0LndpZHRoKCkgLSB3aWR0aE9mVmlzaWJsZVRleHQgfTsKKyAgICAgICAgICAg
IExheW91dFNpemUgdHJ1bmNhdGlvbk9mZnNldCh0ZXh0Qm94KCkuZGlyZWN0aW9uKCkgPT0gVGV4
dERpcmVjdGlvbjo6TFRSID8gd2lkdGhPZkhpZGRlblRleHQgOiAtd2lkdGhPZkhpZGRlblRleHQs
IDBfbHUpOwogICAgICAgICAgICAgbG9jYWxQYWludE9mZnNldC5tb3ZlKHRleHRCb3goKS5pc0hv
cml6b250YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zmc2V0LnRyYW5zcG9z
ZWRTaXplKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbG9jYWxQYWludE9mZnNldC5tb3Zl
KDAsIG1fc3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IDAgOiAtdGV4dEJveCgpLmxv
Z2ljYWxIZWlnaHQoKSk7CisgICAgbG9jYWxQYWludE9mZnNldC5tb3ZlKDAsIG1fc3R5bGUuaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IDAgOiAtbV9sb2dpY2FsUmVjdC5oZWlnaHQoKSk7CiAK
LSAgICBhdXRvIGJveE9yaWdpbiA9IHRleHRCb3goKS52aXN1YWxSZWN0KHRleHRCb3goKS5saW5l
Qm94KCktPmNvbnRhaW5pbmdCbG9jaygpLmxvZ2ljYWxIZWlnaHQoKSkubG9jYXRpb24oKTsKKyAg
ICBhdXRvIHZpc3VhbFJlY3QgPSB0ZXh0Qm94KCkudmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJl
Y3Rpb24oKTsKKyAgICB0ZXh0Qm94KCkuY29udGFpbmluZ0Jsb2NrKCkuZmxpcEZvcldyaXRpbmdN
b2RlKHZpc3VhbFJlY3QpOworCisgICAgYXV0byBib3hPcmlnaW4gPSB2aXN1YWxSZWN0LmxvY2F0
aW9uKCk7CiAgICAgYm94T3JpZ2luLm1vdmVCeShsb2NhbFBhaW50T2Zmc2V0KTsKLSAgICByZXR1
cm4geyBib3hPcmlnaW4sIEZsb2F0U2l6ZSh0ZXh0Qm94KCkubG9naWNhbFdpZHRoKCksIHRleHRC
b3goKS5sb2dpY2FsSGVpZ2h0KCkpIH07CisgICAgcmV0dXJuIHsgYm94T3JpZ2luLCBGbG9hdFNp
emUobV9sb2dpY2FsUmVjdC53aWR0aCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpKSB9OwogfQog
Ci1GbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRz
KGNvbnN0IElubGluZUl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3ImIHRleHRCb3gsIGNvbnN0IE1h
cmtlZFRleHQmIG1hcmtlZFRleHQpCitGbG9hdFJlY3QgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJC
b3VuZHMoY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciYgdGV4dEJveCwgY29u
c3QgTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKIHsKICAgICBhdXRvJiBmb250ID0gdGV4dEJveC0+
Zm9udENhc2NhZGUoKTsKICAgICBhdXRvIGFzY2VudCA9IGZvbnQubWV0cmljc09mUHJpbWFyeUZv
bnQoKS5hc2NlbnQoKTsKQEAgLTYzNCw3ICs2NjQsOCBAQCBGbG9hdFJlY3QgVGV4dEJveFBhaW50
ZXI6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IElubGluZUl0ZXJhdG9yOjpU
ZQogICAgIHJldHVybiBGbG9hdFJlY3QoMCwgeSwgdGV4dEJveC0+bG9naWNhbFdpZHRoKCksIGhl
aWdodCk7CiB9CiAKLWJvb2wgVGV4dEJveFBhaW50ZXI6OmNvbXB1dGVIYXZlU2VsZWN0aW9uKCkg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRoPgorYm9vbCBUZXh0Qm94UGFpbnRl
cjxUZXh0Qm94UGF0aD46OmNvbXB1dGVIYXZlU2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAo
bV9pc1ByaW50aW5nIHx8IG1fcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlRleHRDbGlw
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NDIsMTUgKzY3MywyMCBAQCBib29sIFRleHRC
b3hQYWludGVyOjpjb21wdXRlSGF2ZVNlbGVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVu
ZGVyZXIudmlldygpLnNlbGVjdGlvbigpLmhpZ2hsaWdodFN0YXRlRm9yVGV4dEJveChtX3JlbmRl
cmVyLCBtX3NlbGVjdGFibGVSYW5nZSkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Tm9uZTsKIH0KIAotY29uc3QgRm9udENhc2NhZGUmIFRleHRCb3hQYWludGVyOjpmb250Q2FzY2Fk
ZSgpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUZXh0Qm94UGF0aD4KK2NvbnN0IEZvbnRDYXNj
YWRlJiBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmZvbnRDYXNjYWRlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV90ZXh0Qm94LT5mb250Q2FzY2FkZSgpOworICAgIGlmIChtX2lzQ29tYmlu
ZWRUZXh0KQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KG1fcmVu
ZGVyZXIpLnRleHRDb21iaW5lRm9udCgpOworCisgICAgcmV0dXJuIG1fdGV4dEJveC5zdHlsZSgp
LmZvbnRDYXNjYWRlKCk7CiB9CiAKLUZsb2F0UG9pbnQgVGV4dEJveFBhaW50ZXI6OnRleHRPcmln
aW5Gcm9tUGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGFpbnRSZWN0KSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+CitGbG9hdFBvaW50IFRleHRCb3hQYWludGVyPFRleHRC
b3hQYXRoPjo6dGV4dE9yaWdpbkZyb21QYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBwYWludFJl
Y3QpIGNvbnN0CiB7CiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luIHsgcGFpbnRSZWN0LngoKSwg
cGFpbnRSZWN0LnkoKSArIGZvbnRDYXNjYWRlKCkubWV0cmljc09mUHJpbWFyeUZvbnQoKS5hc2Nl
bnQoKSB9OwotICAgIGlmICh0ZXh0Qm94KCkuaXNDb21iaW5lZFRleHQoKSkgeworICAgIGlmICht
X2lzQ29tYmluZWRUZXh0KSB7CiAgICAgICAgIGlmIChhdXRvIG5ld09yaWdpbiA9IGRvd25jYXN0
PFJlbmRlckNvbWJpbmVUZXh0PihtX3JlbmRlcmVyKS5jb21wdXRlVGV4dE9yaWdpbihwYWludFJl
Y3QpKQogICAgICAgICAgICAgdGV4dE9yaWdpbiA9IG5ld09yaWdpbi52YWx1ZSgpOwogICAgIH0K
QEAgLTY2MSwxNSArNjk3LDE5IEBAIEZsb2F0UG9pbnQgVGV4dEJveFBhaW50ZXI6OnRleHRPcmln
aW5Gcm9tUGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGFpbnRSZWN0KSBjCiAgICAgcmV0dXJu
IHRleHRPcmlnaW47CiB9CiAKLWNvbnN0IFNoYWRvd0RhdGEqIFRleHRCb3hQYWludGVyOjpkZWJ1
Z1RleHRTaGFkb3coKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVGV4dEJveFBhdGg+Citjb25z
dCBTaGFkb3dEYXRhKiBUZXh0Qm94UGFpbnRlcjxUZXh0Qm94UGF0aD46OmRlYnVnVGV4dFNoYWRv
dygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyLnNldHRpbmdzKCkubGVnYWN5TGluZUxh
eW91dFZpc3VhbENvdmVyYWdlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBpZiAoIXRleHRCb3goKS5sZWdhY3lJbmxpbmVCb3goKSkKKyAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PFRleHRCb3hQYXRoLCBJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aD4p
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNo
YWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhMZW5ndGhQb2ludChMZW5ndGgoTGVuZ3RoVHlwZTo6
Rml4ZWQpLCBMZW5ndGgoTGVuZ3RoVHlwZTo6Rml4ZWQpKSwgTGVuZ3RoKDEwLCBMZW5ndGhUeXBl
OjpGaXhlZCksIExlbmd0aCgyMCwgTGVuZ3RoVHlwZTo6Rml4ZWQpLCBTaGFkb3dTdHlsZTo6Tm9y
bWFsLCB0cnVlLCBTUkdCQTx1aW50OF90PiB7IDE1MCwgMCwgMCwgMTkwIH0pOwogICAgIHJldHVy
biAmZGVidWdUZXh0U2hhZG93LmdldCgpOwogfQogCit0ZW1wbGF0ZSBjbGFzcyBUZXh0Qm94UGFp
bnRlcjxJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aD47Cit0ZW1wbGF0ZSBjbGFzcyBUZXh0
Qm94UGFpbnRlcjxJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aD47CisKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKaW5kZXggZmU3MDU1Zjc3NTRlLi4zNjY2
ZmQ0NDU2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFp
bnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCkBA
IC00NSwyMiArNDUsMTcgQEAgc3RydWN0IE1hcmtlZFRleHQ7CiBzdHJ1Y3QgUGFpbnRJbmZvOwog
c3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFRleHRCb3hQYXRo
PgogY2xhc3MgVGV4dEJveFBhaW50ZXIgewogcHVibGljOgotICAgIFRleHRCb3hQYWludGVyKGNv
bnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpOwotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotICAg
IFRleHRCb3hQYWludGVyKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50Jiwg
Y29uc3QgSW5saW5lRGlzcGxheTo6Qm94JiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KTsKLSNlbmRpZgotICAgIFRleHRCb3hQYWludGVyKGNvbnN0IElubGluZUl0
ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3ImLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpOwotCisgICAgVGV4dEJveFBhaW50ZXIoVGV4dEJveFBhdGgmJiwgUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICB+VGV4dEJveFBhaW50
ZXIoKTsKIAogICAgIHZvaWQgcGFpbnQoKTsKIAotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2FsY3Vs
YXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUlubGluZVRleHRC
b3gmKTsKLQotcHJpdmF0ZToKLSAgICBhdXRvJiB0ZXh0Qm94KCkgY29uc3QgeyByZXR1cm4gKm1f
dGV4dEJveDsgfQorcHJvdGVjdGVkOgorICAgIGF1dG8mIHRleHRCb3goKSBjb25zdCB7IHJldHVy
biBtX3RleHRCb3g7IH0KKyAgICBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yIG1ha2VJ
dGVyYXRvcigpIGNvbnN0OwogCiAgICAgdm9pZCBwYWludEJhY2tncm91bmQoKTsKICAgICB2b2lk
IHBhaW50Rm9yZWdyb3VuZEFuZERlY29yYXRpb25zKCk7CkBAIC03OCw4ICs3Myw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKGNvbnN0IENvbXBvc2l0aW9u
VW5kZXJsaW5lJik7CiAgICAgdm9pZCBwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29uc3Qg
TWFya2VkVGV4dCYpOwogCi0gICAgc3RhdGljIEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1h
cmtlckJvdW5kcyhjb25zdCBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yJiwgY29uc3Qg
TWFya2VkVGV4dCYpOwotCisgICAgZmxvYXQgdGV4dFBvc2l0aW9uKCk7CiAgICAgRmxvYXRSZWN0
IGNvbXB1dGVQYWludFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKICAgICBi
b29sIGNvbXB1dGVIYXZlU2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgTWFya2VkVGV4dCBjcmVhdGVN
YXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KCk7CkBAIC04OCwxNSArODIsMTcgQEAgcHJpdmF0
ZToKIAogICAgIGNvbnN0IFNoYWRvd0RhdGEqIGRlYnVnVGV4dFNoYWRvdygpIGNvbnN0OwogCi0g
ICAgY29uc3QgSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciBtX3RleHRCb3g7CisgICAg
Y29uc3QgVGV4dEJveFBhdGggbV90ZXh0Qm94OwogICAgIGNvbnN0IFJlbmRlclRleHQmIG1fcmVu
ZGVyZXI7CiAgICAgY29uc3QgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIG1fc3R5bGU7CisgICAgY29uc3QgRmxvYXRSZWN0IG1fbG9naWNhbFJlY3Q7CiAgICAg
Y29uc3QgVGV4dFJ1biBtX3BhaW50VGV4dFJ1bjsKICAgICBQYWludEluZm8mIG1fcGFpbnRJbmZv
OwogICAgIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UgbV9zZWxlY3RhYmxlUmFuZ2U7CiAg
ICAgY29uc3QgRmxvYXRSZWN0IG1fcGFpbnRSZWN0OwogICAgIGNvbnN0IGJvb2wgbV9pc0ZpcnN0
TGluZTsKKyAgICBjb25zdCBib29sIG1faXNDb21iaW5lZFRleHQ7CiAgICAgY29uc3QgYm9vbCBt
X2lzUHJpbnRpbmc7CiAgICAgY29uc3QgYm9vbCBtX2hhdmVTZWxlY3Rpb247CiAgICAgY29uc3Qg
Ym9vbCBtX2NvbnRhaW5zQ29tcG9zaXRpb247CkBAIC0xMDQsNCArMTAwLDE4IEBAIHByaXZhdGU6
CiAgICAgc3RkOjpvcHRpb25hbDxib29sPiBtX2VtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUg
eyB9OwogfTsKIAorY2xhc3MgTGVnYWN5VGV4dEJveFBhaW50ZXIgOiBwdWJsaWMgVGV4dEJveFBh
aW50ZXI8SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg+IHsKK3B1YmxpYzoKKyAgICBMZWdh
Y3lUZXh0Qm94UGFpbnRlcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiwgUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKKworICAgIHN0YXRpYyBGbG9hdFJlY3Qg
Y2FsY3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUlubGlu
ZVRleHRCb3gmKTsKK307CisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
K2NsYXNzIE1vZGVyblRleHRCb3hQYWludGVyIDogcHVibGljIFRleHRCb3hQYWludGVyPElubGlu
ZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoPiB7CitwdWJsaWM6CisgICAgTW9kZXJuVGV4dEJveFBh
aW50ZXIoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmLCBjb25zdCBJbmxp
bmVEaXNwbGF5OjpCb3gmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpOworfTsKKyNlbmRpZgorCiB9Ci0tIAoyLjMyLjAgKEFwcGxlIEdpdC0xMzIpCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>