<?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>209723</bug_id>
          
          <creation_ts>2020-03-29 21:43:05 -0700</creation_ts>
          <short_desc>Remove all uses of live ranges from TextIterator</short_desc>
          <delta_ts>2020-04-03 09:06:29 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=209966</see_also>
          <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>
          <dependson>209966</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>dpino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1635401</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-29 21:43:05 -0700</bug_when>
    <thetext>Remove all uses of live ranges from TextIterator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1635402</commentid>
    <comment_count>1</comment_count>
      <attachid>394885</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-29 21:43:59 -0700</bug_when>
    <thetext>Created attachment 394885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1635403</commentid>
    <comment_count>2</comment_count>
      <attachid>394886</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-29 22:02:19 -0700</bug_when>
    <thetext>Created attachment 394886
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636728</commentid>
    <comment_count>3</comment_count>
      <attachid>395221</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-01 16:20:52 -0700</bug_when>
    <thetext>Created attachment 395221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636752</commentid>
    <comment_count>4</comment_count>
      <attachid>395229</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-01 17:40:19 -0700</bug_when>
    <thetext>Created attachment 395229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636799</commentid>
    <comment_count>5</comment_count>
      <attachid>395241</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-01 21:22:17 -0700</bug_when>
    <thetext>Created attachment 395241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636800</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-01 21:23:45 -0700</bug_when>
    <thetext>After this patch, TextIterator is done with live ranges and we can move on to removing other uses of them. Might want to fix VisibleSelection next, or simply search for calls to Range::create and createLiveRange and fix them one at a time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636906</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-02 09:04:36 -0700</bug_when>
    <thetext>Antti, would you be willing to review this one? All the tests are passing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636933</commentid>
    <comment_count>8</comment_count>
      <attachid>395241</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-02 10:24:27 -0700</bug_when>
    <thetext>Comment on attachment 395241
Patch

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

Looks good.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1462
&gt; +    String lineString = plainText(*makeRange(startOfLine(nextVisiblePos), endOfLine(nextVisiblePos)));

The old code null checked the range. This just dereferenced without checks. Why is that correct? 

This could use auto.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1486
&gt; +    String lineString = plainText(*makeRange(startOfLine(previousVisiblePos), endOfLine(previousVisiblePos)));

Similarly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636945</commentid>
    <comment_count>9</comment_count>
      <attachid>395241</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-02 10:40:27 -0700</bug_when>
    <thetext>Comment on attachment 395241
Patch

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

Thanks for the review.

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1462
&gt;&gt; +    String lineString = plainText(*makeRange(startOfLine(nextVisiblePos), endOfLine(nextVisiblePos)));
&gt; 
&gt; The old code null checked the range. This just dereferenced without checks. Why is that correct? 
&gt; 
&gt; This could use auto.

I thought the answer was that makeRange can only return null if it’s passed null and this function never passes null. But there is maybe a tiny window of uncertainty because maybe somehow a VisiblePosition that is not null could still cause startOfLine to return null (seems unlikely) or the &quot;deepEquivalent().parentAnchoredEquivalent()&quot; transformation done inside makeRange could return null for a VisiblePosition that is not null (also unlikely).

So I am pretty sure, but not 100% sure, that the null check I removed was unnecessary. But I also have no reason to take such a risk, so I guess I can add one back in.

I’ll use auto. I think our tastes coincide here — I never quite know when to stop when changing the code in a refactoring project like this.

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1486
&gt;&gt; +    String lineString = plainText(*makeRange(startOfLine(previousVisiblePos), endOfLine(previousVisiblePos)));
&gt; 
&gt; Similarly.

All right. Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636987</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-02 11:57:21 -0700</bug_when>
    <thetext>Committed r259401: &lt;https://trac.webkit.org/changeset/259401&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636989</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-02 11:58:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/61219432&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394885</attachid>
            <date>2020-03-29 21:43:59 -0700</date>
            <delta_ts>2020-03-29 22:02:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209723-20200329214357.patch</filename>
            <type>text/plain</type>
            <size>78638</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGUwNjM4NWU4OTJmYmY0
MWYxNTQ4M2ZiYjI1NGMwNjBlYmUwZDdkOS4uZjAwNDVhNGY3YWQ2ODUzNDY2ODZmZTZiMWIyYTU5
NDQzOTMyMTNlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDMtMjkgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbGwgdXNlcyBvZiBs
aXZlIHJhbmdlcyBmcm9tIFRleHRJdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NzIzCisKIDIwMjAtMDMtMjkgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aCBvZmYgb2YgbGl2ZSByYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDQ1YzBiMDcw
ZmRkODBlODA4ZDEzMGUxYzE3YzdiMjdiZmQyMGQ3NjcuLjEyNTdlMmVkM2IyMTVjYjhjYjVhZThm
MWIwOWYyYmQ5ZmY1OTc1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMTQ1OSw3ICsxNDU5LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGkKICAgICAvLyBzZWUgdGhpcyBlbXB0eSBsaW5lLiAgSW5zdGVhZCwg
cmV0dXJuIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIGVtcHR5IGxpbmUuCiAgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZFBvc2l0aW9uOwogICAgIAotICAgIFN0cmluZyBsaW5lU3RyaW5nID0gcGxhaW5U
ZXh0KG1ha2VSYW5nZShzdGFydE9mTGluZShuZXh0VmlzaWJsZVBvcyksIGVuZE9mTGluZShuZXh0
VmlzaWJsZVBvcykpLmdldCgpKTsKKyAgICBTdHJpbmcgbGluZVN0cmluZyA9IHBsYWluVGV4dCgq
bWFrZVJhbmdlKHN0YXJ0T2ZMaW5lKG5leHRWaXNpYmxlUG9zKSwgZW5kT2ZMaW5lKG5leHRWaXNp
YmxlUG9zKSkpOwogICAgIGlmIChsaW5lU3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgZW5kUG9z
aXRpb24gPSBuZXh0VmlzaWJsZVBvczsKICAgICBlbHNlCkBAIC0xNDgzLDcgKzE0ODMsNyBAQCBW
aXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0
UG9zaXRpb24oY29uc3QgVmlzaWJsZQogICAgIC8vIHRyZWF0IGVtcHR5IGxpbmUgYXMgYSBzZXBh
cmF0ZSBzZW50ZW5jZS4KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbjsKICAgICAK
LSAgICBTdHJpbmcgbGluZVN0cmluZyA9IHBsYWluVGV4dChtYWtlUmFuZ2Uoc3RhcnRPZkxpbmUo
cHJldmlvdXNWaXNpYmxlUG9zKSwgZW5kT2ZMaW5lKHByZXZpb3VzVmlzaWJsZVBvcykpLmdldCgp
KTsKKyAgICBTdHJpbmcgbGluZVN0cmluZyA9IHBsYWluVGV4dCgqbWFrZVJhbmdlKHN0YXJ0T2ZM
aW5lKHByZXZpb3VzVmlzaWJsZVBvcyksIGVuZE9mTGluZShwcmV2aW91c1Zpc2libGVQb3MpKSk7
CiAgICAgaWYgKGxpbmVTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICBzdGFydFBvc2l0aW9uID0g
cHJldmlvdXNWaXNpYmxlUG9zOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGU2
MTZlYTlkNjU0ZWQyM2IzNjViYTc1NmRkMDg2NTc2ZTdkMTVlOGEuLjBhZGY1YzQ3ODA2NjFmYjlj
Y2Y1NTk1ZWFkYmYzMjFkYTM0N2M0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNjY0LDcg
KzY2NCw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0ZXh0VW5kZXJFbGVt
ZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50CiAgICAgICAgICAgICAgICAgLy8gc3R5
bGUgdXBkYXRlL2xheW91dCBoZXJlLiBTZWUgYWxzbyBBWE9iamVjdENhY2hlOjpkZWZlclRleHRD
aGFuZ2VkSWZOZWVkZWQoKS4KICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighbm9kZURvY3VtZW50LT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSk7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGVEb2N1bWVu
dC0+dmlldygpLT5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBsYWluVGV4dCh0ZXh0UmFuZ2UuZ2V0KCksIHRleHRJdGVyYXRv
ckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwbGFpblRl
eHQoKnRleHRSYW5nZSwgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAKQEAgLTIwODEsMTYgKzIwODEsMTUgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpub2RlSXNUZXh0Q29udHJvbChjb25zdCBOb2RlKiBu
b2RlKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW50UmVjdCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JSZWN0cyhMYXlvdXRSZWN0IGNvbnN0JiByZWN0MSwgTGF5
b3V0UmVjdCBjb25zdCYgcmVjdDIsIFJlZlB0cjxSYW5nZT4gY29uc3QmIGRhdGFSYW5nZSkKK3N0
YXRpYyBJbnRSZWN0IGJvdW5kc0ZvclJlY3RzKGNvbnN0IExheW91dFJlY3QmIHJlY3QxLCBjb25z
dCBMYXlvdXRSZWN0JiByZWN0MiwgY29uc3QgU2ltcGxlUmFuZ2UmIGRhdGFSYW5nZSkKIHsKICAg
ICBMYXlvdXRSZWN0IG91clJlY3QgPSByZWN0MTsKICAgICBvdXJSZWN0LnVuaXRlKHJlY3QyKTsK
LSAgICAKLSAgICAvLyBpZiB0aGUgcmVjdGFuZ2xlIHNwYW5zIGxpbmVzIGFuZCBjb250YWlucyBt
dWx0aXBsZSB0ZXh0IGNoYXJzLCB1c2UgdGhlIHJhbmdlJ3MgYm91bmRpbmcgYm94IGludGVhZAor
CisgICAgLy8gaWYgdGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlw
bGUgdGV4dCBjaGFyYWN0ZXJzLCB1c2UgdGhlIHJhbmdlJ3MgYm91bmRpbmcgYm94IGludGVhZC4K
ICAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3QyLm1heFkoKSkgewotICAgICAgICBMYXlvdXRS
ZWN0IGJvdW5kaW5nQm94ID0gZGF0YVJhbmdlLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCk7Ci0gICAg
ICAgIFN0cmluZyByYW5nZVN0cmluZyA9IHBsYWluVGV4dChkYXRhUmFuZ2UuZ2V0KCkpOwotICAg
ICAgICBpZiAocmFuZ2VTdHJpbmcubGVuZ3RoKCkgPiAxICYmICFib3VuZGluZ0JveC5pc0VtcHR5
KCkpCisgICAgICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBjcmVhdGVMaXZlUmFuZ2UoZGF0
YVJhbmdlKS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpOworICAgICAgICBpZiAoY2hhcmFjdGVyQ291
bnQoZGF0YVJhbmdlKSA+IDEgJiYgIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgICAg
IG91clJlY3QgPSBib3VuZGluZ0JveDsKICAgICB9CiAKQEAgLTIxMjAsOCArMjExOSw3IEBAIElu
dFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9u
UmFuZ2UoY29uc3QgVmlzaWJsZVBvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUmVmUHRy
PFJhbmdlPiBkYXRhUmFuZ2UgPSBtYWtlUmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Ci0g
ICAgcmV0dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCByZWN0MiwgZGF0YVJhbmdlKTsKKyAgICBy
ZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCAqbWFrZVJhbmdlKHJhbmdlLnN0YXJ0
LCByYW5nZS5lbmQpKTsKIH0KIAogSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpi
b3VuZHNGb3JSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbmdlKSBjb25zdApAQCAtMjE1Miw3
ICsyMTUwLDcgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JS
YW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbmdlKSBjb24KICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCByYW5nZSk7CisgICAg
cmV0dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCByZWN0MiwgKnJhbmdlKTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1Zpc2libGVQb3NpdGlvblJhbmdlSW5EaWZmZXJl
bnREb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgcmFuZ2UpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5oCmluZGV4IDc3NmI0OGY0Y2I5Yjc0NzEwM2JhY2NlOTk3ODA2OTcyZjdjNjA2MGMu
LjdlY2YwNGFhMDRlZmJiMDUyNGQ3Y2Q0OTk4ZTQxZDQ3MzFlMzQ0ZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5oCkBAIC0yOTMsOCArMjkzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIGNhbkhhdmVQbGFpblRl
eHQoKSBjb25zdDsKICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIGNsaWNrIHBvaW50IGZvciBs
aW5rcy4KICAgICBJbnRQb2ludCBsaW5rQ2xpY2tQb2ludCgpOwotICAgIC8vIFJlY3RzIHV0aWxp
dGllcy4KLSAgICBzdGF0aWMgSW50UmVjdCBib3VuZHNGb3JSZWN0cyhMYXlvdXRSZWN0IGNvbnN0
JiwgTGF5b3V0UmVjdCBjb25zdCYsIFJlZlB0cjxSYW5nZT4gY29uc3QmKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0K
aW5kZXggYTNmNTNjOGUxZWEzNjM0YzRhOGU1YjA5MmFhOGYzNzIwMGJmYmY5Mi4uNjJhYTk5NDNm
NzM0ZTI1YzY1NWQ3ZjkzZTQyY2E2MGY5MzljMDNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0KQEAgLTM2NDUsMjEgKzM2NDUsMTggQEAgLSAoTlNSYW5nZSlfY29u
dmVydFRvTlNSYW5nZTooUmFuZ2UqKXJhbmdlCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICAKLSAgICBOU1JhbmdlIHJlc3VsdCA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDAp
OwogICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVy
biBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKICAgICAKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvIGRvY3VtZW50
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBzaXplX3QgbG9jYXRpb247Ci0gICAg
c2l6ZV90IGxlbmd0aDsKLSAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UsIGxvY2F0aW9uLCBsZW5n
dGgpOwotICAgIHJlc3VsdC5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgIHJlc3VsdC5sZW5ndGgg
PSBsZW5ndGg7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApOworCisgICAgYXV0byBkb2N1bWVudEVsZW1lbnQgPSBkb2N1
bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCisgICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAgIHJldHVybiBjaGFy
YWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZG9jdW1lbnRF
bGVtZW50KSwgKnJhbmdlKTsKIH0KIAogLSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6
KGlkKW1hcmtlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKaW5kZXggYTVkOGUzZTAxMmVl
ZGFhOWNkZjcyOTMxMDhiNDM5MjdiZTEyNGYyMi4uNjA3Yzk0N2QwZjM2MWE2YjNhMjBkM2ExNmUx
YTY1OGY4MzAxNmY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9p
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCkBAIC00Niw2ICs0
NiwxMCBAQCBzdHJ1Y3QgQm91bmRhcnlQb2ludCB7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBC
b3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogCitCb3VuZGFyeVBvaW50IG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKE5vZGUmKTsKKworLy8gSW5pbG5lIGZ1
bmN0aW9uIGRlZmluaXRpb25zLgorCiBpbmxpbmUgQm91bmRhcnlQb2ludDo6Qm91bmRhcnlQb2lu
dChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKICAgICA6IGNvbnRhaW5l
cihXVEZNb3ZlKGNvbnRhaW5lcikpCiAgICAgLCBvZmZzZXQob2Zmc2V0KQpAQCAtNzUsNCArNzks
OSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0
IEJvdW5kYXJ5UG9pbnQmIGIpCiAgICAgcmV0dXJuIGEuY29udGFpbmVyLnB0cigpID09IGIuY29u
dGFpbmVyLnB0cigpICYmIGEub2Zmc2V0ID09IGIub2Zmc2V0OwogfQogCitpbmxpbmUgQm91bmRh
cnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhOb2RlJiBub2RlKQor
eworICAgIHJldHVybiB7IG5vZGUsIDAgfTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmlu
ZGV4IDYwYmZjNzE0OGYzMGY2NDNkNGE1ZGY0ZmQzMTdmYjA3ZDcxOTM3NmMuLjVhODdiYWY3NmVl
MGMwMmEzZDBhOWY1OWQ4MzlmNWVlN2U4MjlkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAg
LTMxOTcsNyArMzE5Nyw3IEBAIFN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKQogICAgIGlmICgh
cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHRleHRDb250ZW50KHRydWUpOwogCi0gICAgcmV0
dXJuIHBsYWluVGV4dChyYW5nZU9mQ29udGVudHMoKnRoaXMpLnB0cigpKTsKKyAgICByZXR1cm4g
cGxhaW5UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqdGhpcykpOwogfQogCiBT
dHJpbmcgRWxlbWVudDo6b3V0ZXJUZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDQ1YzFiY2Zk
MDJjMTk4Y2Q4Yjk5MGVjYTAxZTNmMGU2YTM5M2I1ZmIuLmJlNGViNjk5NTEwNDAxODNkYmM0MjA2
ZWQwMGQ0OGJkODg0MmYwM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtOTUxLDcgKzk1MSw3IEBA
IFN0cmluZyBSYW5nZTo6dGV4dCgpIGNvbnN0CiAgICAgLy8gRklYTUU6IEFzIHdpdGggaW5uZXJU
ZXh0LCB3ZSdkIGxpa2UgdGhpcyB0byB3b3JrIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJlbmRlciBv
YmplY3RzLgogICAgIHN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsK
IAotICAgIHJldHVybiBwbGFpblRleHQodGhpcyk7CisgICAgcmV0dXJuIHBsYWluVGV4dCgqdGhp
cyk7CiB9CiAKIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jd2lkbC1SYW5n
ZS1jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQtRG9jdW1lbnRGcmFnbWVudC1ET01TdHJpbmctZnJh
Z21lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IGE0MzM4YWIyMGZjNTJmMmZm
MjdkY2I1YjcwMjA4YTdmN2IzMDYyN2IuLmRjZGQ0MWNkYzkwYTc0Mjk2YTZiZjM5ZDcwMmE5Njdl
MmYyOWUyYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtNjcsOSArNjcsMTQg
QEAgc3RhdGljIHVuc2lnbmVkIGxlbmd0aChjb25zdCBOb2RlJiBub2RlKQogICAgIHJldHVybiBu
b2RlLmNvdW50Q2hpbGROb2RlcygpOwogfQogCitzdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsg
bm9kZSwgbGVuZ3RoKG5vZGUpIH07Cit9CisKIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewotICAgIHJldHVybiB7IHsgbm9kZSwgMCB9LCB7
IG5vZGUsIGxlbmd0aChub2RlKSB9IH07CisgICAgcmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRC
ZWZvcmVOb2RlQ29udGVudHMobm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVu
dHMobm9kZSkgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggZjcwZGE1OGUxNGZiOTRhNjA1Yjk4ZGUx
NmM3MGNlNzU2MDVlMzJiZS4uMGY5Y2RiMTY4YzM4Njg2MDRiNWNiNjk0OTY5MGY1NTliZDY5YTNk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCkBAIC0xMzAsOSArMTMwLDExIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRlclR5
cGluZy52aXNpYmxlU3RhcnQoKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0g
VmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29yZElm
T25Cb3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9uQm91
bmRhcnkpKTsKICAgICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZTZWxl
Y3Rpb24pIHsKLSAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRXb3Jk
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBpZiAod29yZFRleHQubGVuZ3Ro
KCkgPiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQu
bGVuZ3RoKCkgLSAxXSkpCi0gICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwor
ICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSBjdXJyZW50V29yZC5maXJzdFJhbmdlKCkpIHsK
KyAgICAgICAgICAgIFN0cmluZyB3b3JkVGV4dCA9IHBsYWluVGV4dCgqd29yZFJhbmdlKTsKKyAg
ICAgICAgICAgIGlmICghd29yZFRleHQuaXNFbXB0eSgpICYmIGlzQW1iaWd1b3VzQm91bmRhcnlD
aGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkpCisgICAgICAgICAgICAg
ICAgZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KICAgICBpZiAo
ZG9BcHBseUNvcnJlY3Rpb24pCiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0
KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkp
OyAKQEAgLTE1NSw3ICsxNTcsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNo
b3coUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhYwogICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKCZyYW5nZVRvUmVwbGFjZSk7
CiAgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
b3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KCZyYW5nZVRvUmVwbGFjZSk7CisgICAgbV9vcmlnaW5h
bFRleHQgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UpOwogICAgIG1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUgPSAmcmFuZ2VUb1JlcGxhY2U7CiAgICAgbV9kZXRhaWxzID0gcmVwbGFjZW1lbnQ7CiAg
ICAgbV9pc0FjdGl2ZSA9IHRydWU7CkBAIC0yNDksNyArMjUxLDcgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgaWYgKHJlcGxhY2VtZW50U3Ry
aW5nLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX2lzQWN0aXZlID0g
dHJ1ZTsKLSAgICAgICAgbV9vcmlnaW5hbFRleHQgPSBwbGFpblRleHQobV9yYW5nZVdpdGhBbHRl
cm5hdGl2ZS5nZXQoKSk7CisgICAgICAgIG1fb3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KCptX3Jh
bmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9v
dFZpZXdSZWN0Rm9yUmFuZ2UobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSk7CiAgICAgICAg
IGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoQWx0ZXJuYXRp
dmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKQEAgLTI1OCw5
ICsyNjAsOSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQog
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxp
bmdTdWdnZXN0aW9uczogewotICAgICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwg
cGxhaW5UZXh0KG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpICE9IG1fb3JpZ2luYWxUZXh0
KQorICAgICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgcGxhaW5UZXh0KCptX3Jh
bmdlV2l0aEFsdGVybmF0aXZlKSAhPSBtX29yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dCgmVGV4dENoZWNraW5n
UGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5nZSgpKTsKKyAg
ICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdy
YXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5nZSgpKTsKICAgICAgICAg
VmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7CiAgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1
ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9u
cy5pc0VtcHR5KCkpIHsKQEAgLTMwMyw3ICszMDUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVz
dQogICAgIGlmICghcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgbV9mcmFtZS5kb2N1bWVudCgpICE9
ICZyYW5nZVdpdGhBbHRlcm5hdGl2ZS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQocmFuZ2VXaXRoQWx0ZXJuYXRp
dmUpOworICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCgqcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUpOwogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8g
Y29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBjYWxsYmFj
ayBiZWluZyB0cmlnZ2VyZWQuCiAgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fb3JpZ2luYWxUZXh0
KQogICAgICAgICByZXR1cm47CkBAIC00MTYsNyArNDE4LDcgQEAgVGV4dENoZWNrZXJDbGllbnQq
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UgcmVzcG9uc2UsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIFJhbmdlKiByZXBsYWNlbWVudFJhbmdlKQordm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFNpbXBsZVJhbmdlJiByZXBsYWNlbWVudFJhbmdlKQogewogICAgIGlmIChhdXRvIGNs
aWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICBjbGllbnQtPnJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UocmVzcG9uc2UsIHJlcGxhY2VkU3RyaW5nLCBwbGFpblRleHQo
cmVwbGFjZW1lbnRSYW5nZSkpOwpAQCAtNDc1LDcgKzQ3Nyw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJl
Y3Rpb25BCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3Rl
clBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7Ci0gICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4
dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5wdHIoKSk7CisgICAgU3RyaW5nIHN0cmluZyA9IHBs
YWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CiAgICAgaWYgKHN0cmluZy5p
c0VtcHR5KCkgfHwgIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHN0cmluZ1tzdHJpbmcu
bGVuZ3RoKCkgLSAxXSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTI0LDcgKzUyNiw3IEBAIGJv
b2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQo
Y29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBu
b2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwogICAgIGF1dG8gd29yZFJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3Rh
cnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKLSAgICBTdHJpbmcgY3VycmVu
dFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLnB0cigpKTsKKyAgICBTdHJpbmcgY3VycmVudFdv
cmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9vcmlnaW5hbFRleHQgPSBjdXJy
ZW50V29yZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmgKaW5kZXggMjcwMjFlYzc1YTExMjI3ZjcxNTA1ZThhZjkyYmUyYzQzNzRlMGYy
NS4uOTgxZDI3MDkyMDdiNmYzOTRkYjIxY2IxZmRhNTY2OWVhODBhOTc0OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTQ1
LDYgKzQ1LDcgQEAgY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0
aW9uOwogCiBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmU7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7
CiBzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BB
TkVMKQpAQCAtODgsNyArODksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkK
ICAgICBib29sIHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpOwogCi0gICAgdm9pZCBy
ZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFJhbmdlKiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1Nf
RU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBs
YWNlbWVudFJhbmdlKTsgfSkKKyAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
QXV0b2NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU2ltcGxlUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VE
X1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9
KQogICAgIHZvaWQgbWFya1JldmVyc2VkKFJhbmdlJiBjaGFuZ2VkUmFuZ2UpIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCiAgICAgdm9pZCBtYXJrQ29ycmVj
dGlvbihSYW5nZSYgcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9QQVJB
TShyZXBsYWNlZFN0cmluZyk7IH0pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAw
OTNiMTJiOTY2MTNmMzdlNmU5OTlkZGZhZjhhMDJlMTYyMmRiZDFkLi43N2NjMTMxN2E2ZjQ4M2E0
YmExY2VhNjZkYTVkN2I2NWJmNjBiMzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBA
IC0yNTkyLDggKzI1OTIsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgLy8gR2V0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCi0gICAgY29uc3QgU3Ry
aW5nIG1pc3NwZWxsZWRXb3JkID0gcGxhaW5UZXh0KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCkpOwot
ICAgIFN0cmluZyBhdXRvY29ycmVjdGVkU3RyaW5nID0gdGV4dENoZWNrZXIoKS0+Z2V0QXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworICAgIFN0
cmluZyBhdXRvY29ycmVjdGVkU3RyaW5nID0gdGV4dENoZWNrZXIoKS0+Z2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQocGxhaW5UZXh0KCptaXNzcGVsbGluZ1JhbmdlKSk7
CiAKICAgICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5LCByZXBsYWNlIHRo
ZSBtaXNzcGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgogICAgIGlmICghYXV0b2NvcnJlY3RlZFN0
cmluZy5pc0VtcHR5KCkpIHsKQEAgLTI3NzMsMjEgKzI3NzIsMTkgQEAgdm9pZCBFZGl0b3I6OnJl
cGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBT
dHJpbmcmIHIKICAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb1Jl
cGxhY2UsIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKIH0KIAotc3RhdGljIHZvaWQgY29ycmVjdFNw
ZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVja2luZ1Bh
cmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnQsIENoYXJhY3RlclJhbmdlIHJlc3VsdFJhbmdlKQorc3RhdGljIHZvaWQgY29y
cmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVj
a2luZ1BhcmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnQsIENoYXJhY3RlclJhbmdlIHJlc3VsdENoYXJhY3RlclJhbmdlKQog
ewotICAgIGF1dG8mIHNjb3BlID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocGFyYWdyYXBoLnBh
cmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKTsKLQotICAgIHNpemVf
dCBwYXJhZ3JhcGhMb2NhdGlvbjsKLSAgICBzaXplX3QgcGFyYWdyYXBoTGVuZ3RoOwotICAgIFRl
eHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoJnNjb3BlLCAmcGFyYWdy
YXBoLnBhcmFncmFwaFJhbmdlKCksIHBhcmFncmFwaExvY2F0aW9uLCBwYXJhZ3JhcGhMZW5ndGgp
OworICAgIGF1dG8gc2NvcGVOb2RlID0gbWFrZVJlZihkb3duY2FzdDxDb250YWluZXJOb2RlPihw
YXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLnJvb3ROb2RlKCkpKTsK
KyAgICBhdXRvIHBhcmFncmFwaENoYXJhY3RlclJhbmdlID0gY2hhcmFjdGVyUmFuZ2UobWFrZUJv
dW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGVOb2RlKSwgcGFyYWdyYXBoLnBhcmFn
cmFwaFJhbmdlKCkpOwogCiAgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJh
bmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCktPmFwcGx5KCk7CiAKICAgICAvLyBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGggbWF5IGJlIG9ycGhhbmVkIGFmdGVyIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQgbXV0YXRlZCBET00uCiAgICAgLy8gU2VlIDxyZGFyOi8vMTAzMDUzMTU+LCBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzg5NTI2LgogCi0gICAgYXV0byBuZXdQYXJhZ3JhcGhSYW5nZSA9IHJlc29sdmVD
aGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoc2NvcGUpLCB7IHBh
cmFncmFwaExvY2F0aW9uLCBwYXJhZ3JhcGhMZW5ndGggKyByZXBsYWNlbWVudC5sZW5ndGgoKSAt
IHJlc3VsdFJhbmdlLmxlbmd0aCB9KTsKLSAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5nZSA9IHJl
c29sdmVDaGFyYWN0ZXJSYW5nZShuZXdQYXJhZ3JhcGhSYW5nZSwgeyByZXN1bHRSYW5nZS5sb2Nh
dGlvbiwgcmVwbGFjZW1lbnQubGVuZ3RoKCkgfSk7CisgICAgcGFyYWdyYXBoQ2hhcmFjdGVyUmFu
Z2UubGVuZ3RoICs9IHJlcGxhY2VtZW50Lmxlbmd0aCgpIC0gcmVzdWx0Q2hhcmFjdGVyUmFuZ2Uu
bGVuZ3RoOworICAgIGF1dG8gbmV3UGFyYWdyYXBoUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFu
Z2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHNjb3BlTm9kZSksIHBhcmFncmFwaENo
YXJhY3RlclJhbmdlKTsKKyAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5nZSA9IHJlc29sdmVDaGFy
YWN0ZXJSYW5nZShuZXdQYXJhZ3JhcGhSYW5nZSwgeyByZXN1bHRDaGFyYWN0ZXJSYW5nZS5sb2Nh
dGlvbiwgcmVwbGFjZW1lbnQubGVuZ3RoKCkgfSk7CiAgICAgcGFyYWdyYXBoID0gVGV4dENoZWNr
aW5nUGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVM
aXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1BhcmFncmFw
aFJhbmdlKSk7CiB9CiAKQEAgLTI4ODUsNyArMjg4Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5k
UmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9y
PFRlCiAgICAgICAgICAgICBpZiAoIShzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hvdWxk
Q2hlY2tGb3JDb3JyZWN0aW9uIHx8IHNob3VsZE1hcmtMaW5rKSB8fCAhZG9SZXBsYWNlbWVudCkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2Vk
U3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLnB0cigpKTsKKyAgICAgICAgICAgIFN0
cmluZyByZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CiAg
ICAgICAgICAgICBjb25zdCBib29sIGV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxhY2VtZW50ID0g
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5wcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KHJlc3VsdHNbaV0sIHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlZFN0cmluZyk7
CiAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxhY2VtZW50KQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjkzMSw3ICsyOTI4LDcgQEAgdm9pZCBFZGl0b3I6
Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBWZWN0b3I8VGUKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRUeXBlID09IFRleHRDaGVj
a2luZ1R5cGU6OkNvcnJlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byByZXBsYWNl
bWVudFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHsgcmVzdWx0TG9jYXRpb24sIHJlcGxhY2Vt
ZW50Lmxlbmd0aCgpIH0pOwotICAgICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNw
b25zZTo6QWNjZXB0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFJhbmdlLnB0cigpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OkFjY2VwdGVkLCBy
ZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1
bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KICAgICAgICAgICAgICAgICAgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrQ29ycmVjdGlvbihyZXBsYWNlbWVudFJhbmdl
LCByZXBsYWNlZFN0cmluZyk7CkBAIC0yOTY2LDEwICsyOTYzLDEwIEBAIHZvaWQgRWRpdG9yOjpj
aGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQog
ICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGVk
UmFuZ2UoKTsKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNlbGVj
dGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmICghc2VsZWN0
aW9uIHx8ICFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0KCks
IEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25z
ZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHNlbGVj
dGlvbi5nZXQoKSk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCByZXBs
YWNlZFN0cmluZywgKnNlbGVjdGlvbik7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFn
cmFwaCgqc2VsZWN0aW9uKTsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRT
dHJpbmcsIFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlv
bjo6SW5zZXJ0KTsKICAgICBhdXRvIGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShD
aGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5s
ZW5ndGgoKSkpOwpAQCAtMzIwMSw3ICszMTk4LDcgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgp
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKTsK
IAogICAgIC8vIFRyYW5zcG9zZSB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAgU3RyaW5nIHRleHQg
PSBwbGFpblRleHQocmFuZ2UuZ2V0KCkpOworICAgIFN0cmluZyB0ZXh0ID0gcGxhaW5UZXh0KCpy
YW5nZSk7CiAgICAgaWYgKHRleHQubGVuZ3RoKCkgIT0gMikKICAgICAgICAgcmV0dXJuOwogICAg
IFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSArIHRleHQubGVmdCgxKTsKQEAgLTMy
MjEsNyArMzIxOCw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogCiB2b2lkIEVkaXRvcjo6
YWRkUmFuZ2VUb0tpbGxSaW5nKGNvbnN0IFJhbmdlJiByYW5nZSwgS2lsbFJpbmdJbnNlcnRpb25N
b2RlIG1vZGUpCiB7Ci0gICAgYWRkVGV4dFRvS2lsbFJpbmcocGxhaW5UZXh0KCZyYW5nZSksIG1v
ZGUpOworICAgIGFkZFRleHRUb0tpbGxSaW5nKHBsYWluVGV4dChyYW5nZSksIG1vZGUpOwogfQog
CiB2b2lkIEVkaXRvcjo6YWRkVGV4dFRvS2lsbFJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBLaWxs
UmluZ0luc2VydGlvbk1vZGUgbW9kZSkKQEAgLTM5NzUsNyArMzk3Miw3IEBAIFN0cmluZyBFZGl0
b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRl
UmFuZ2VGb3JTZWxlY3Rpb24obV9mcmFtZSk7CiAgICAgaWYgKHJhbmdlRm9yQ3VycmVudGx5VHlw
ZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQotICAgICAg
ICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcuZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nKTsK
IAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCBhZDc4MjMyYThhMjA4
NjdjZDU5OTFiM2QyZjgwYjNmNGQ0YjZmNjBlLi41NDYwYjc1Y2FiZDIzZGQ1NWFkOTM5ZDAxNGI1
ODI5MmVkOWQ0ZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VS
YW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCkBAIC02Myw4ICs2Myw3IEBAIHZvaWQgUmVwbGFj
ZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIWZyYW1lKCkuc2VsZWN0
aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFN0cmluZyBwcmV2aW91c1RleHQgPSBwbGFpblRleHQobV9yYW5nZVRvQmVSZXBsYWNl
ZC5nZXQoKSk7Ci0gICAgaWYgKCFwcmV2aW91c1RleHQubGVuZ3RoKCkpCisgICAgaWYgKCFjaGFy
YWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVSZXBsYWNlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNldFNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShzZWxl
Y3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CmluZGV4IGQ4NjZlODU1MjhiMmIxYzBhMzVhNzJmYzM1MGFmYzg3OGRjNzgwYTcuLjUyNzhkYjk1
YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xOTEsNyArMTkxLDcg
QEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudEZyYWdt
ZW50KiBmcmFnbWVudCwgY29uc3QgVmlzaWIKICAgICB9CiAgICAgCiAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZSho
b2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgU3RyaW5nIHRleHQgPSBwbGFp
blRleHQocmFuZ2UuZ2V0KCksIHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihUZXh0
SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCB8IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2li
aWxpdHkpKTsKKyAgICBTdHJpbmcgdGV4dCA9IHJhbmdlID8gcGxhaW5UZXh0KCpyYW5nZSwgc3Rh
dGljX2Nhc3Q8VGV4dEl0ZXJhdG9yQmVoYXZpb3I+KFRleHRJdGVyYXRvckVtaXRzT3JpZ2luYWxU
ZXh0IHwgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkpIDogZW1wdHlTdHJpbmco
KTsKIAogICAgIHJlbW92ZUludGVyY2hhbmdlTm9kZXMoaG9sZGVyLmdldCgpKTsKICAgICByZW1v
dmVVbnJlbmRlcmVkTm9kZXMoaG9sZGVyLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDUxMzMxNDUzOTNk
MTczYTU3OWQwYTUwYzBiZmYxYzhlMzVhZDgzNDcuLjVhODE2ZjNhZjFiZWU1MmVhMDg2NjI0NTY3
ZWQ3YzIxMjcxN2NhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcApAQCAtOTksNyArOTksNyBAQCBib29sIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogCiB2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIG1fY29ycmVjdGVkID0gcGxhaW5UZXh0
KG1fcmFuZ2VUb0JlQ29ycmVjdGVkLnB0cigpKTsKKyAgICBtX2NvcnJlY3RlZCA9IHBsYWluVGV4
dChtX3JhbmdlVG9CZUNvcnJlY3RlZC5nZXQoKSk7CiAgICAgaWYgKCFtX2NvcnJlY3RlZC5sZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAKaW5kZXggOTliOGUzMWRmMGRjYzYyYWYxZmFlMDlkMzE2YWJmMDk5
MGI4YzkyNS4uZGJjZTlkYTEzMjIxODQ4ZWUwYjFmNmQ4OGYyZWZlMDZiYjdjOWZmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMTg3LDcg
KzE4Nyw3IEBAIFJhbmdlJiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNldEFzUmFuZ2UoKSBj
b25zdAogU3RyaW5nVmlldyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnRleHQoKSBjb25zdAogewog
ICAgIGlmIChtX3RleHQuaXNOdWxsKCkpCi0gICAgICAgIG1fdGV4dCA9IHBsYWluVGV4dCgmcGFy
YWdyYXBoUmFuZ2UoKSk7CisgICAgICAgIG1fdGV4dCA9IHBsYWluVGV4dChwYXJhZ3JhcGhSYW5n
ZSgpKTsKICAgICByZXR1cm4gbV90ZXh0OyAKIH0KIApAQCAtMzM3LDcgKzMzNyw3IEBAIFN0cmlu
ZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJv
b2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgICAgICBsYXN0SXRlcmF0aW9uID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0IDwgY3VycmVudEVuZE9mZnNl
dCkgewotICAgICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZyA9IHBsYWluVGV4dChwYXJh
Z3JhcGhSYW5nZS5wdHIoKSk7CisgICAgICAgICAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nID0g
cGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLmdldCgpKTsKICAgICAgICAgICAgIGlmIChwYXJhZ3Jh
cGhTdHJpbmcubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBmb3VuZEdyYW1t
YXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB1aW50NjRfdCBzcGVsbGluZ0xvY2F0aW9uID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCAyMTg2NGM4ZjRm
YzA1Y2IzOWExOTcwNGQyNTQ0MDNlN2VhNjgxN2RiLi5iNDNlMmNiNjE4ZDBjNTBjZDM0MTUyY2Vi
OGVlMTc0ZGM1ZWMwNDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
aCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5o
IgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRl
ICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMTQz
NSwyMiArMTQzNCwyMCBAQCB2b2lkIENoYXJhY3Rlckl0ZXJhdG9yOjphZHZhbmNlKGludCBjb3Vu
dCkKICAgICBtX3J1bk9mZnNldCA9IDA7CiB9CiAKLXN0YXRpYyBSZWY8UmFuZ2U+IGNoYXJhY3Rl
clN1YnJhbmdlKERvY3VtZW50JiBkb2N1bWVudCwgQ2hhcmFjdGVySXRlcmF0b3ImIGl0LCBpbnQg
b2Zmc2V0LCBpbnQgbGVuZ3RoKQorc3RhdGljIFNpbXBsZVJhbmdlIGNoYXJhY3RlclN1YnJhbmdl
KERvY3VtZW50JiBkb2N1bWVudCwgQ2hhcmFjdGVySXRlcmF0b3ImIGl0LCBpbnQgb2Zmc2V0LCBp
bnQgbGVuZ3RoKQogewogICAgIGl0LmFkdmFuY2Uob2Zmc2V0KTsKICAgICBpZiAoaXQuYXRFbmQo
KSkKLSAgICAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQpOworICAgICAgICByZXR1
cm4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KTsKIAogICAgIGF1dG8g
c3RhcnQgPSBpdC5yYW5nZSgpLnN0YXJ0OwogCiAgICAgaWYgKGxlbmd0aCA+IDEpCiAgICAgICAg
IGl0LmFkdmFuY2UobGVuZ3RoIC0gMSk7CiAgICAgaWYgKGl0LmF0RW5kKCkpCi0gICAgICAgIHJl
dHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICAgICAgcmV0dXJuIG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCk7CiAKLSAgICBhdXRvIGVuZCA9IGl0LnJhbmdl
KCkuZW5kOwotCi0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShTaW1wbGVSYW5nZSB7IHN0YXJ0
LCBlbmQgfSk7CisgICAgcmV0dXJuIHsgc3RhcnQsIGl0LnJhbmdlKCkuZW5kIH07CiB9CiAKIEJh
Y2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yOjpCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvcihjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCkBAIC0yNDE1LDMxICsyNDEyLDYgQEAgU2ltcGxlUmFuZ2Ug
cmVzb2x2ZUNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgQ2hhcmFjdGVy
UmFuZ2UgcmFuZ2UKICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CiB9CiAKLUJvdW5kYXJ5UG9pbnQg
cmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgdWludDY0
X3QgbG9jYXRpb24sIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVy
biByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIHsgbG9jYXRpb24sIDAgfSwgYmVoYXZpb3Ip
LnN0YXJ0OwotfQotCi1ib29sIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9t
UmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgc2l6ZV90JiBsb2NhdGlvbiwg
c2l6ZV90JiBsZW5ndGgpCi17Ci0gICAgbG9jYXRpb24gPSBub3RGb3VuZDsKLSAgICBsZW5ndGgg
PSAwOwotCi0gICAgLy8gVGhlIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIG9ubHkg
Z2V0cyBjYWxsZWQgd2l0aCByYW5nZXMgdGhhdAotICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2
ZW4gYXJlYSBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gcm9vdC4gVGhpcyBpcyBkb25lCi0gICAg
Ly8gYmVjYXVzZSBvZiB0ZXh0IGZpZWxkcyBhbmQgdGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9z
ZSBpcyBub3QgZGlyZWN0bHkKLSAgICAvLyBpbiB0aGUgZG9jdW1lbnQgRE9NLCBzbyBlbnN1cmUg
dGhhdCB0aGUgcmFuZ2UgZG9lcyBub3QgY3Jvc3MgYSBib3VuZGFyeQotICAgIC8vIG9mIG9uZSBv
ZiB0aG9zZS4KLSAgICBpZiAoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFy
YW5nZS0+c3RhcnRDb250YWluZXIoKS5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoJnJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAh
cmFuZ2UtPmVuZENvbnRhaW5lcigpLmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3BlLCAw
IH0sIHsgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpIH0gfSk7
Ci0gICAgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJhbmdlLT5l
bmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpIH0gfSkgLSBsb2NhdGlvbjsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogLy8gLS0tLS0tLS0KIAogYm9vbCBoYXNBbnlQbGFpblRleHQoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKQEAg
LTI0ODEsMjEgKzI0NTMsNiBAQCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgZGVmYXVsdEJlaGF2aW9yLAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLVN0cmluZyBwbGFpblRleHQoY29uc3QgUmFuZ2UqIHJhbmdlLCBUZXh0SXRl
cmF0b3JCZWhhdmlvciBkZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nKQotewot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVy
biBwbGFpblRleHQoKnJhbmdlLCBkZWZhdWx0QmVoYXZpb3IsIGlzRGlzcGxheVN0cmluZyk7Ci19
Ci0KLVN0cmluZyBwbGFpblRleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvckZvclRlc3Rpbmco
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9y
IChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRz
SXRlcmF0b3IuYWR2YW5jZSgpKQotICAgICAgICByZXN1bHQuaW5zZXJ0KGJhY2t3YXJkc0l0ZXJh
dG9yLnRleHQoKS50b1N0cmluZygpLCAwKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBTdHJp
bmcgcGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgZGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0
cmluZykKIHsKICAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlLCBkZWZhdWx0QmVoYXZpb3IsIGlz
RGlzcGxheVN0cmluZykucmVwbGFjZShub0JyZWFrU3BhY2UsICcgJyk7CkBAIC0yNTI4LDcgKzI0
ODUsNyBAQCBzdGF0aWMgdm9pZCBmaW5kUGxhaW5UZXh0TWF0Y2hlcyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LAogICAgICAgICB9CiAgICAgfQogCi0gICAg
Q2hhcmFjdGVySXRlcmF0b3IgZmluZEl0ZXJhdG9yKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGZp
bmRJdGVyYXRvck9wdGlvbnMob3B0aW9ucykpOworICAgIENoYXJhY3Rlckl0ZXJhdG9yIGZpbmRJ
dGVyYXRvcihyYW5nZSwgZmluZEl0ZXJhdG9yT3B0aW9ucyhvcHRpb25zKSk7CiAgICAgd2hpbGUg
KCFmaW5kSXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICBmaW5kSXRlcmF0b3IuYWR2YW5jZShi
dWZmZXIuYXBwZW5kKGZpbmRJdGVyYXRvci50ZXh0KCkpKTsKICAgICAgICAgd2hpbGUgKDEpIHsK
QEAgLTI1NTMsNyArMjUxMCw3IEBAIHN0YXRpYyBTaW1wbGVSYW5nZSByYW5nZUZvck1hdGNoKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucywKIHsKICAgICBpZiAo
IW1hdGNoTGVuZ3RoKQogICAgICAgICByZXR1cm4gY29sbGFwc2VkVG9Cb3VuZGFyeShyYW5nZSwg
c2VhcmNoRm9yd2FyZCk7Ci0gICAgQ2hhcmFjdGVySXRlcmF0b3IgcmFuZ2VDb21wdXRlSXRlcmF0
b3IoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgZmluZEl0ZXJhdG9yT3B0aW9ucyhvcHRpb25zKSk7
CisgICAgQ2hhcmFjdGVySXRlcmF0b3IgcmFuZ2VDb21wdXRlSXRlcmF0b3IocmFuZ2UsIGZpbmRJ
dGVyYXRvck9wdGlvbnMob3B0aW9ucykpOwogICAgIHJldHVybiBjaGFyYWN0ZXJTdWJyYW5nZShy
YW5nZS5zdGFydC5kb2N1bWVudCgpLCByYW5nZUNvbXB1dGVJdGVyYXRvciwgbWF0Y2hTdGFydCwg
bWF0Y2hMZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRl
eCBlMTYwMjg3NWIyZjc1ZWQzMWU3NTAxY2FhMzAwYjRjOGY2MzliZjJlLi4zOWFlMTA2MDA5MmVl
MDg2OWFlNjYwMzM5YjBhOWE4ZTMxMmY1MGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmgKQEAgLTM0LDIzICszNCwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyVGV4dEZyYWdtZW50OwogCi0vLyBGSVhNRTogRGVsZXRl
IHRoaXMgb3ZlcmxvYWQgYWZ0ZXIgbW92aW5nIGFsbCB0aGUgY2FsbGVycyB0byB0aGUgU2ltcGxl
UmFuZ2UgdmVyc2lvbi4KLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHQoY29uc3QgUmFu
Z2UqLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwg
Ym9vbCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7CisvLyBDaGFyYWN0ZXIgcmFuZ2VzIGJhc2Vk
IG9uIGNoYXJhY3RlcnMgZnJvbSB0aGUgdGV4dCBpdGVyYXRvci4KK1dFQkNPUkVfRVhQT1JUIHVp
bnQ2NF90IGNoYXJhY3RlckNvdW50KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOworQ2hhcmFjdGVyUmFuZ2UgY2hh
cmFjdGVyUmFuZ2UoY29uc3QgQm91bmRhcnlQb2ludCYgc3RhcnQsIGNvbnN0IFNpbXBsZVJhbmdl
JiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwor
Q2hhcmFjdGVyUmFuZ2UgY2hhcmFjdGVyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCBj
b25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVm
YXVsdEJlaGF2aW9yKTsKK0JvdW5kYXJ5UG9pbnQgcmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKGNv
bnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgdWludDY0X3QsIFRleHRJdGVyYXRvckJlaGF2aW9yID0g
VGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKK1dFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdl
IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIENoYXJhY3Rl
clJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlv
cik7CiAKKy8vIFRleHQgZnJvbSB0aGUgdGV4dCBpdGVyYXRvci4KIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBwbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxz
ZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGhhc0FueVBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5n
ZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsK
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoY29u
c3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1
bHRCZWhhdmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7Ci1XRUJDT1JFX0VYUE9S
VCBTdHJpbmcgcGxhaW5UZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3JGb3JUZXN0aW5nKGNv
bnN0IFNpbXBsZVJhbmdlJik7CiAKKy8vIEZpbmQgd2l0aGluIHRoZSBkb2N1bWVudCwgYmFzZWQg
b24gdGhlIHRleHQgZnJvbSB0aGUgdGV4dCBpdGVyYXRvci4KIFNpbXBsZVJhbmdlIGZpbmRQbGFp
blRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiBX
RUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChjb25zdCBTaW1w
bGVSYW5nZSYsIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCk7Ci1XRUJDT1JF
X0VYUE9SVCBib29sIGhhc0FueVBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVy
YXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIGJvb2wgY29udGFp
bnNQbGFpblRleHQoY29uc3QgU3RyaW5nJiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiwgRmluZE9w
dGlvbnMpOyAvLyBMZXRzIHVzIHVzZSB0aGUgc2VhcmNoIGFsZ29yaXRobSBvbiBhIHN0cmluZy4K
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmb2xkUXVvdGVNYXJrcyhjb25zdCBTdHJpbmcmKTsKIAot
Ly8gRklYTUU6IE1vdmUgdGhpcyBzb21ld2hlcmUgZWxzZSBpbiB0aGUgZWRpdGluZyBkaXJlY3Rv
cnkuIEl0IGRvZXNuJ3QgYmVsb25nIGhlcmUuCisvLyBGSVhNRTogTW92ZSB0aGlzIHNvbWV3aGVy
ZSBlbHNlIGluIHRoZSBlZGl0aW5nIGRpcmVjdG9yeS4gSXQgZG9lc24ndCBiZWxvbmcgaW4gdGhl
IGhlYWRlciB3aXRoIFRleHRJdGVyYXRvci4KIGJvb2wgaXNSZW5kZXJlclJlcGxhY2VkRWxlbWVu
dChSZW5kZXJPYmplY3QqKTsKIAogLy8gRklYTUU6IE1vdmUgZWFjaCBpdGVyYXRvciBjbGFzcyBp
bnRvIGEgc2VwYXJhdGUgaGVhZGVyIGZpbGUuCkBAIC0xMDMsOSArMTA3LDYgQEAgcHVibGljOgog
ICAgIGNvbnN0IFRleHRJdGVyYXRvckNvcHlhYmxlVGV4dCYgY29weWFibGVUZXh0KCkgY29uc3Qg
eyBBU1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV9jb3B5YWJsZVRleHQ7IH0KICAgICB2b2lkIGFw
cGVuZFRleHRUb1N0cmluZ0J1aWxkZXIoU3RyaW5nQnVpbGRlciYgYnVpbGRlcikgY29uc3QgeyBj
b3B5YWJsZVRleHQoKS5hcHBlbmRUb1N0cmluZ0J1aWxkZXIoYnVpbGRlcik7IH0KIAotICAgIC8v
IEZJWE1FOiBNb3ZlIHRoaXMgdG8gU2ltcGxlUmFuZ2UgYW5kIENoYXJhY3RlclJhbmdlIGFuZCBt
b3ZlIG91dCBvZiB0aGlzIGNsYXNzIHRvIHRoZSB0b3AgbGV2ZWwuCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGJvb2wgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUs
IGNvbnN0IFJhbmdlKiwgc2l6ZV90JiBsb2NhdGlvbiwgc2l6ZV90JiBsZW5ndGgpOwotCiBwcml2
YXRlOgogICAgIHZvaWQgaW5pdCgpOwogICAgIHZvaWQgZXhpdE5vZGUoTm9kZSopOwpAQCAtMTcz
LDEwICsxNzQsMTAgQEAgcHJpdmF0ZToKIC8vIGNodW5rcyBzbyBhcyB0byBvcHRpbWl6ZSBmb3Ig
cGVyZm9ybWFuY2Ugb2YgdGhlIGl0ZXJhdGlvbi4KIGNsYXNzIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBs
aWNpdCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJik7
CiAKICAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fcG9zaXRpb25Ob2RlOyB9Ci0g
ICAgdm9pZCBhZHZhbmNlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZHZhbmNlKCk7CiAK
ICAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdCB7IEFTU0VSVCghYXRFbmQoKSk7IHJldHVybiBt
X3RleHQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSByYW5nZSgpIGNvbnN0OwpA
QCAtMjg4LDkgKzI4OSwxOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRMb29rQWhlYWQgeyB0
cnVlIH07CiB9OwogCitpbmxpbmUgQ2hhcmFjdGVyUmFuZ2UgY2hhcmFjdGVyUmFuZ2UoY29uc3Qg
Qm91bmRhcnlQb2ludCYgc3RhcnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJh
dG9yQmVoYXZpb3IgYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIHsgY2hhcmFjdGVyQ291bnQoeyBz
dGFydCwgcmFuZ2Uuc3RhcnQgfSwgYmVoYXZpb3IpLCBjaGFyYWN0ZXJDb3VudChyYW5nZSwgYmVo
YXZpb3IpIH07Cit9CiAKLVdFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IGNoYXJhY3RlckNvdW50KGNv
bnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZh
dWx0QmVoYXZpb3IpOwotV0VCQ09SRV9FWFBPUlQgQm91bmRhcnlQb2ludCByZXNvbHZlQ2hhcmFj
dGVyTG9jYXRpb24oY29uc3QgU2ltcGxlUmFuZ2UmLCB1aW50NjRfdCwgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwotV0VCQ09SRV9FWFBPUlQgU2lt
cGxlUmFuZ2UgcmVzb2x2ZUNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgQ2hhcmFj
dGVyUmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2
aW9yKTsKK2lubGluZSBDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVS
YW5nZSYgc2NvcGUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZp
b3IgYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKHNjb3BlLnN0YXJ0LCBy
YW5nZSwgYmVoYXZpb3IpOworfQorCitpbmxpbmUgQm91bmRhcnlQb2ludCByZXNvbHZlQ2hhcmFj
dGVyTG9jYXRpb24oY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCB1aW50NjRfdCBsb2NhdGlvbiwg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIHJlc29sdmVDaGFy
YWN0ZXJSYW5nZShzY29wZSwgeyBsb2NhdGlvbiwgMCB9LCBiZWhhdmlvcikuc3RhcnQ7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCmluZGV4IGM0ZDgwZmI1NTA4ZjFlMjZjNjg5MTg1MzgyYWVmYzBjZmRiOWEyMjYuLjVh
NmM1M2MwMzgzNzBjZmIwYTM4YWIwZGE0ZjU2MThmYmFiYjI1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNDY1LDcgKzQ2NSw3IEBAIHZvaWQgVHlwaW5n
Q29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1h
bmRUeXBlKQogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShwMSwg
cDIpOwogICAgICAgICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3JkOwogICAgICAgICAg
ICAgaWYgKHJhbmdlICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0
IHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVCcmVhayB8fCBjb21t
YW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IgfHwgY29t
bWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90
ZWRDb250ZW50KSkKLSAgICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWlu
VGV4dChyYW5nZS5nZXQoKSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICAgICAgc3Ry
aXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQoKnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsK
ICAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1Rv
V29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5
KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Oklu
c2VydFRleHQpCiAgICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZlVGV4
dFVJVGltZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVu
aXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCBk
NmY3MTc4OWU0ZTFmOTlmOGM3NDU1MzBmMjE1NzdmNDg5ODY4NTkyLi4zMjUzYjZmYjBiYWIwZWEw
NDc0ZGNiM2VjNzFjOTQyMGI1YTk3MDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuY3BwCkBAIC0xOTM0LDcgKzE5MzQsNyBAQCB2b2lkIGNoYXJhY3RlcnNBcm91bmRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hhcjMyJiBvbmVBZnRlcgog
ICAgIH0KIAogICAgIGlmIChzdGFydFBvc2l0aW9uICE9IGVuZFBvc2l0aW9uKSB7Ci0gICAgICAg
IFN0cmluZyBjaGFyYWN0ZXJTdHJpbmcgPSBwbGFpblRleHQoUmFuZ2U6OmNyZWF0ZShwb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlv
biwgZW5kUG9zaXRpb24pLnB0cigpKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKKyAgICAg
ICAgU3RyaW5nIGNoYXJhY3RlclN0cmluZyA9IHBsYWluVGV4dCh7ICptYWtlQm91bmRhcnlQb2lu
dChzdGFydFBvc2l0aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9KS5yZXBs
YWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKICAgICAgICAgZm9yIChpbnQgaSA9IGNoYXJhY3RlclN0
cmluZy5sZW5ndGgoKSAtIDEsIGluZGV4ID0gMDsgaSA+PSAwICYmIGluZGV4IDwgbWF4Q2hhcmFj
dGVyczsgLS1pKSB7CiAgICAgICAgICAgICBpZiAoIWluZGV4ICYmIG5leHRQb3NpdGlvbi5pc051
bGwoKSkKICAgICAgICAgICAgICAgICBpbmRleCsrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDk5ZTYxNTljY2E2NzY5NTlhOTgwYTQxMjk1
NmI4YzVkM2YzMzY2MjYuLjU1N2JmZWNhZWEwMjMyODVhZWEwOTBkNGYwNTcxZDdkYThkMzNhYmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAg
LTcwLDEwICs3MCwxMCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgUmV0
YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRS
ZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRh
UmFuZ2UpCiB7Ci0gICAgU3RyaW5nIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29u
dGV4dFJhbmdlLmdldCgpKTsKICAgICBhdXRvIHN0YXJ0ID0gY29udGV4dFJhbmdlLT5zdGFydFBv
c2l0aW9uKCk7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gbmlsOworICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0gcGxh
aW5UZXh0KCpjb250ZXh0UmFuZ2UpOwogICAgIENGSW5kZXggaGl0TG9jYXRpb24gPSBjaGFyYWN0
ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChw
b3NpdGlvbikgfSk7CiAKICAgICBhdXRvIHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0
ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCA0N2FkNDdhNzNkZGMz
ZTcyNTFmYjFmMzA1NWJiMTIwY2M5ZTFmMDk0Li5hMjNkYzQwN2E5ZWMwNjU1ZmI2N2Y3YWM0ZTA1
Nzk3YTgxN2Y5ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rp
Y3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0
aW9uYXJ5TG9va3VwLm1tCkBAIC0yODYsNyArMjg2LDcgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFu
Z2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24o
Y28KICAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rp
b25TdGFydCwgc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQpOwogCiAgICAgUmVmUHRyPFJhbmdlPiBm
dWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVu
ZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdl
LmdldCgpKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3Rl
clJhbmdlKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gYWRvcHROUyhbYWxsb2NSVkl0
ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VU
b1Bhc3NdKS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKIAogICAgIHJldHVybiB7IGNyZWF0ZUxpdmVS
YW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0
UmFuZ2UpKSwgbmlsIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5oCmluZGV4IGFhYjQ5YzQ3NmE1OTY0NDE1ZTk5YjMxZTI0ZWZiN2I3NDNmNzZkNWYuLjU4
MDUzMDkyNWQ0YmM0MmYwOGI4NmVmYzkwMWVkOWM5YzZhY2FmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCkBAIC0zNSwxMiArMzUsMTAgQEAgY2xh
c3MgVmlzaWJsZVNlbGVjdGlvbjsKIAogZW51bSBjbGFzcyBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1
dGVkU3RyaW5nIHsgWWVzLCBObyB9OwogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dHJpbmdGcm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBOU0RpY3Rpb25hcnkq
KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKK05TQXR0cmlidXRlZFN0cmluZyAqYXR0
cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworV0VC
Q09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0
YXJ0QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKK1dFQkNPUkVfRVhQ
T1JUIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYp
OwogCi0vLyBGb3IgdGVzdGluZyBwdXJwb3NlIG9ubHkKLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZChjb25zdCBQb3Np
dGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVz
ID0gbnVsbHB0cik7Ci0KLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmli
dXRlcyA9IG51bGxwdHIpOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogV0VCQ09SRV9FWFBP
UlQgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShS
YW5nZSYsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgPSBJbmNsdWRlSW1hZ2VzSW5B
dHRyaWJ1dGVkU3RyaW5nOjpZZXMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KaW5kZXggYTU0M2FjMmQxYWUyYWMzOGY4Y2QyN2ZiMjU3
ZmUyZDE2MjQwZGNlZi4uNDkyMTMzYWVlZTQyNjExNjRkY2VlZDhjOTg2MzYxOTViZDEyMDgwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAt
MjgwLDcgKzI4MCw3IEBAIHB1YmxpYzoKICAgICBIVE1MQ29udmVydGVyKGNvbnN0IFBvc2l0aW9u
JiwgY29uc3QgUG9zaXRpb24mKTsKICAgICB+SFRNTENvbnZlcnRlcigpOwogCi0gICAgTlNBdHRy
aWJ1dGVkU3RyaW5nKiBjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9
IG51bGxwdHIpOworICAgIE5TQXR0cmlidXRlZFN0cmluZyogY29udmVydCgpOwogCiBwcml2YXRl
OgogICAgIFBvc2l0aW9uIG1fc3RhcnQ7CkBAIC0zOTksNyArMzk5LDcgQEAgSFRNTENvbnZlcnRl
cjo6fkhUTUxDb252ZXJ0ZXIoKQogICAgIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJlbGVhc2Vd
OwogfQogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQoTlNEaWN0
aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQorTlNBdHRyaWJ1dGVkU3RyaW5nICpIVE1MQ29u
dmVydGVyOjpjb252ZXJ0KCkKIHsKICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhtX3N0YXJ0LCBt
X2VuZCkgPiAwKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtNDIwLDkgKzQyMCw2IEBAIE5TQXR0
cmlidXRlZFN0cmluZyAqSFRNTENvbnZlcnRlcjo6Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1
bWVudEF0dHJpYnV0ZXMpCiAgICAgaWYgKF9kb21SYW5nZVN0YXJ0SW5kZXggPiAwICYmIF9kb21S
YW5nZVN0YXJ0SW5kZXggPD0gW19hdHRyU3RyIGxlbmd0aF0pCiAgICAgICAgIFtfYXR0clN0ciBk
ZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBfZG9tUmFuZ2VTdGFydEluZGV4
KV07CiAKLSAgICBpZiAoZG9jdW1lbnRBdHRyaWJ1dGVzKQotICAgICAgICAqZG9jdW1lbnRBdHRy
aWJ1dGVzID0gW1tfZG9jdW1lbnRBdHRycyByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQogICAgIHJl
dHVybiBbW19hdHRyU3RyIHJldGFpbl0gYXV0b3JlbGVhc2VdOwogfQogCkBAIC0yMzcwLDE5ICsy
MzY3LDE5IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNGaWxlV3JhcHBlcj4gZmlsZVdyYXBwZXJGb3JF
bGVtZW50KEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IC8vIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgbW9yZSBIVE1MIGZlYXR1cmVzIHRoYW4gdGhlIGVk
aXRpbmcgdmFyaWFudCBiZWxvdywgc3VjaCBhcyB0YWJsZXMuCi1OU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkqKiBk
b2N1bWVudEF0dHJpYnV0ZXMpCitOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdG
cm9tUmFuZ2UoUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFu
Z2Uuc3RhcnRQb3NpdGlvbigpLCByYW5nZS5lbmRQb3NpdGlvbigpIH0uY29udmVydChkb2N1bWVu
dEF0dHJpYnV0ZXMpOworICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFuZ2Uuc3RhcnRQb3Np
dGlvbigpLCByYW5nZS5lbmRQb3NpdGlvbigpIH0uY29udmVydCgpOwogfQogCi1OU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQorTlNB
dHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmdC
ZXR3ZWVuU3RhcnRBbmRFbmQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5lbmQoKSwgZG9j
dW1lbnRBdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFy
dEFuZEVuZChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmVuZCgpKTsKIH0KIAotTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgTlNEaWN0aW9uYXJ5KiogZG9jdW1l
bnRBdHRyaWJ1dGVzKQorTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2Vl
blN0YXJ0QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkK
IHsKLSAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7IHN0YXJ0LCBlbmQgfS5jb252ZXJ0KGRvY3Vt
ZW50QXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEhUTUxDb252ZXJ0ZXIgeyBzdGFydCwgZW5kIH0u
Y29udmVydCgpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5jcHAKaW5kZXggNDJmOWJjYTZlOTU4Y2VkYmE1NjQ2NmQ5YTM0NzdkZGU3NzY5ZGY0
YS4uZDExM2RhYTYxYWZiZmI4MjkyMGUzNmJlMDI4MDdjNzc2ZDE1NDY5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcApAQCAtNDM1LDcgKzQzNSwxMiBAQCBTdHJpbmcgU3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OnJlbmRlcmVkVGV4dFJlc3BlY3RpbmdSYW5nZShjb25zdCBUZXh0JiB0ZXh0
KQogICAgICAgICAgICAgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JCZWhhdmVzQXNJZk5vZGVzRm9s
bG93aW5nOwogICAgIH0KIAotICAgIHJldHVybiBwbGFpblRleHQoUmFuZ2U6OmNyZWF0ZSh0ZXh0
LmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpLnB0cigpLCBiZWhhdmlvcik7CisgICAgYXV0byBzdGFy
dEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpOworICAgIGF1dG8gZW5kQm91bmRh
cnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7CisgICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8
ICFlbmRCb3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICByZXR1
cm4gcGxhaW5UZXh0KHsgV1RGTW92ZSgqc3RhcnRCb3VuZGFyeSksIFdURk1vdmUoKmVuZEJvdW5k
YXJ5KSB9LCBiZWhhdmlvcik7CiB9CiAKIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
dGV4dENvbnRlbnRSZXNwZWN0aW5nUmFuZ2UoY29uc3QgVGV4dCYgdGV4dCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IDY4MWNhNzgwMDE5MTk3OTdi
YzQ5ZDBlODQ2OTdlOTk5OWZkZWJkOTkuLjVjMjk3Y2E2ZjZhMGQ3MDVlZDgyNzgwYjQyZGE3NGVk
MzZhZmUzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNw
cApAQCAtMzE4LDcgKzMxOCw4IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6aGFuZGxlQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQmCiAgICAgLy8gSWYg
dGhlIHRleHQgZmllbGQgaGFzIG5vIGZvY3VzLCB3ZSBkb24ndCBuZWVkIHRvIHRha2UgYWNjb3Vu
dCBvZiB0aGUKICAgICAvLyBzZWxlY3Rpb24gbGVuZ3RoLiBUaGUgc2VsZWN0aW9uIGlzIHRoZSBz
b3VyY2Ugb2YgdGV4dCBkcmFnLWFuZC1kcm9wIGluCiAgICAgLy8gdGhhdCBjYXNlLCBhbmQgbm90
aGluZyBpbiB0aGUgdGV4dCBmaWVsZCB3aWxsIGJlIHJlbW92ZWQuCi0gICAgdW5zaWduZWQgc2Vs
ZWN0aW9uTGVuZ3RoID0gZm9jdXNlZCgpID8gY29tcHV0ZUxlbmd0aEZvclN1Ym1pc3Npb24ocGxh
aW5UZXh0KGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSkpIDogMDsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gZm9j
dXNlZCgpID8gZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpIDogbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25MZW5ndGgg
PSBzZWxlY3Rpb25SYW5nZSA/IGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNzaW9uKHBsYWluVGV4dCgq
c2VsZWN0aW9uUmFuZ2UpKSA6IDA7CiAgICAgQVNTRVJUKGN1cnJlbnRMZW5ndGggPj0gc2VsZWN0
aW9uTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gY3VycmVudExlbmd0aCAtIHNl
bGVjdGlvbkxlbmd0aDsKICAgICB1bnNpZ25lZCBhcHBlbmRhYmxlTGVuZ3RoID0gdW5zaWduZWRN
YXhMZW5ndGggPiBiYXNlTGVuZ3RoID8gdW5zaWduZWRNYXhMZW5ndGggLSBiYXNlTGVuZ3RoIDog
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRl
eCA3MmIxMzA2N2QxYmMzNmIzZGJjODkxNGFkZjAxODhjNDEzNzFjNzYxLi4yYzMyYjJmNWI2ZDRh
ZWRhMmU4ZWNlNTQzNDQ2NTAwYWRiMTI4ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC00MzEsNyArNDMxLDcgQEAgdm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51QWN0aW9u
IGFjdGlvbiwgY28KICAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2VsZWN0Tm9k
ZSgqZWxlbWVudCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9jbGllbnQuc3BlYWsocGxhaW5UZXh0
KHNlbGVjdGVkUmFuZ2UuZ2V0KCkpKTsKKyAgICAgICAgbV9jbGllbnQuc3BlYWsocGxhaW5UZXh0
KCpzZWxlY3RlZFJhbmdlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1N0b3BTcGVha2luZzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNw
cAppbmRleCA0NzVlNjRiYWRmNTAwNDk1MmEyZjYzZmQ2NjcxZDUxMzJhMzQ0MWRiLi4xYTBjZGY3
ZGFlYTg2NTNmN2ZhZjA2OWNjNGZmOGM0ODE1MTBlNmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01T
ZWxlY3Rpb24uY3BwCkBAIC00NDgsNyArNDQ4LDEwIEBAIFN0cmluZyBET01TZWxlY3Rpb246OnRv
U3RyaW5nKCkKICAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwbGFpblRleHQoZnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAg
IGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
KyAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZSk7CiB9CiAKIE5vZGUqIERPTVNlbGVjdGlvbjo6
c2hhZG93QWRqdXN0ZWROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCmluZGV4IDlmMGE0MDZkZTQxNDkxODNmODUxMTYxMjRiM2VkNWMxOWIxZWYyZWIu
LmEwM2IwMDJkYjlkY2QzYjQzOWZjZmYyYTA1ODY3ZmRlNjhjMTVmNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcApAQCAtODgyLDIyICs4ODIsMTAgQEAgdWludDMyX3QgUGFnZTo6cmVwbGFjZVJhbmdlc1dp
dGhUZXh0KGNvbnN0IFZlY3RvcjxSZWY8UmFuZ2U+PiYgcmFuZ2VzVG9SZXBsYWNlLAogCiAgICAg
Zm9yIChhdXRvJiByYW5nZSA6IHJhbmdlc1RvUmVwbGFjZSkgewogICAgICAgICBhdXRvIGhpZ2hl
c3RSb290ID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVSb290KHJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpKTsKLSAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8fCBoaWdoZXN0Um9vdCAhPSBoaWdo
ZXN0RWRpdGFibGVSb290KHJhbmdlLT5lbmRQb3NpdGlvbigpKSkKKyAgICAgICAgaWYgKCFoaWdo
ZXN0Um9vdCB8fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KHJhbmdlLT5lbmRQ
b3NpdGlvbigpKSB8fCAhaGlnaGVzdFJvb3QtPmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKGhpZ2hlc3RS
b290LT5kb2N1bWVudCgpLmZyYW1lKCkpOwotICAgICAgICBpZiAoIWZyYW1lKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgc2l6ZV90IHJlcGxhY2VtZW50TG9jYXRpb24gPSBub3RG
b3VuZDsKLSAgICAgICAgc2l6ZV90IHJlcGxhY2VtZW50TGVuZ3RoID0gMDsKLSAgICAgICAgaWYg
KCFUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGhpZ2hlc3RSb290
LmdldCgpLCByYW5nZS5wdHIoKSwgcmVwbGFjZW1lbnRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5n
dGgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHJlcGxhY2VtZW50TG9j
YXRpb24gPT0gbm90Rm91bmQgfHwgIXJlcGxhY2VtZW50TGVuZ3RoKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMuYXBwZW5kKHsgV1RGTW92ZShoaWdo
ZXN0Um9vdCksIHsgcmVwbGFjZW1lbnRMb2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGggfSB9KTsK
KyAgICAgICAgYXV0byByZXBsYWNlbWVudENoYXJhY3RlclJhbmdlID0gY2hhcmFjdGVyUmFuZ2Uo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpoaWdoZXN0Um9vdCksIHJhbmdlKTsKKyAg
ICAgICAgcmVwbGFjZW1lbnRSYW5nZXMuYXBwZW5kKHsgV1RGTW92ZShoaWdoZXN0Um9vdCksIHJl
cGxhY2VtZW50Q2hhcmFjdGVyUmFuZ2UgfSk7CiAgICAgfQogCiAgICAgcmVwbGFjZVJhbmdlcygq
dGhpcywgcmVwbGFjZW1lbnRSYW5nZXMsIHJlcGxhY2VtZW50VGV4dCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tCmluZGV4IDZlZTRmYjQ0NTVkYzY5MGQ0ZWI5OWM0M2EyYjkzODEyZjE0
MTcyZGIuLjA2Mjg1YTUxODRlNWE0YzAwYTMxYmE2MzM0MjNkYjVkYmM5ODgwOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC03MzAsNyArNzMwLDcgQEAgTlNBcnJheSAqRnJh
bWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKIAogICAgIC8vIFRoZXJl
IGFyZSBubyBwaHJhc2VzIHdpdGggYWx0ZXJuYXRpdmVzLCBzbyB0aGVyZSBpcyBqdXN0IG9uZSBp
bnRlcnByZXRhdGlvbi4KICAgICBpZiAobWFya2Vyc0luUm9vdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6cGxhaW5UZXh0KHJhbmdlT2ZSb290Q29u
dGVudHMucHRyKCkpXTsKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpw
bGFpblRleHQocmFuZ2VPZlJvb3RDb250ZW50cyldOwogCiAgICAgLy8gVGhlIG51bWJlciBvZiBp
bnRlcnByZXRhdGlvbnMgd2lsbCBiZSBpMSAqIGkyICogLi4uICogaU4sIHdoZXJlIGlYIGlzIHRo
ZSBudW1iZXIgb2YgaW50ZXJwcmV0YXRpb25zIGZvciB0aGUgWHRoIHBocmFzZSB3aXRoIGFsdGVy
bmF0aXZlcy4KICAgICBzaXplX3QgaW50ZXJwcmV0YXRpb25zQ291bnQgPSAxOwpAQCAtNzUyLDcg
Kzc1Miw3IEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCgp
IGNvbnN0CiAgICAgICAgICAgICAvLyBGaXJzdCwgYWRkIHRleHQgdGhhdCBwcmVjZWRlIHRoZSBt
YXJrZXIuCiAgICAgICAgICAgICBpZiAocHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24gIT0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSkpIHsK
ICAgICAgICAgICAgICAgICBhdXRvIHByZWNlZGluZ1RleHRSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
KmRvY3VtZW50KCksIHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uLCBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpKSk7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIHByZWNlZGluZ1RleHQgPSBwbGFpblRleHQocHJlY2VkaW5nVGV4dFJhbmdlLnB0
cigpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcHJlY2VkaW5nVGV4dCA9IHBsYWluVGV4dChw
cmVjZWRpbmdUZXh0UmFuZ2UpOwogICAgICAgICAgICAgICAgIGlmICghcHJlY2VkaW5nVGV4dC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlv
biA6IGludGVycHJldGF0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChpbnRl
cnByZXRhdGlvbiwgcHJlY2VkaW5nVGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKaW5kZXggMTM0ZWEzMWZjZThmOTg4OTExMmNjMTRjMDdmZDE3NGRiZTViY2U1YS4uOWM0NjQw
OGY4NGJlZmM2NTI0MWU1NmE1MTA4YmE0ZTI3MzU1OTM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcApAQCAtMjA1MSwxOCArMjA1MSwxMiBAQCBSZWZQdHI8UmFuZ2U+IEludGVy
bmFsczo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCYgc2NvcGUsIHVuc2lnbmVk
IHJhbgogCiB1bnNpZ25lZCBJbnRlcm5hbHM6OmxvY2F0aW9uRnJvbVJhbmdlKEVsZW1lbnQmIHNj
b3BlLCBjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgc2l6ZV90IGxvY2F0aW9uID0gMDsKLSAg
ICBzaXplX3QgdW51c2VkTGVuZ3RoID0gMDsKLSAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9u
QW5kTGVuZ3RoRnJvbVJhbmdlKCZzY29wZSwgJnJhbmdlLCBsb2NhdGlvbiwgdW51c2VkTGVuZ3Ro
KTsKLSAgICByZXR1cm4gbG9jYXRpb247CisgICAgcmV0dXJuIGNsYW1wVG88dW5zaWduZWQ+KGNo
YXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKHNjb3BlKSwg
cmFuZ2UpLmxvY2F0aW9uKTsKIH0KIAogdW5zaWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFu
Z2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJhbmdlJiByYW5nZSkKIHsKLSAgICBzaXplX3QgdW51
c2VkTG9jYXRpb24gPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSAwOwotICAgIFRleHRJdGVyYXRv
cjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoJnNjb3BlLCAmcmFuZ2UsIHVudXNlZExv
Y2F0aW9uLCBsZW5ndGgpOwotICAgIHJldHVybiBsZW5ndGg7CisgICAgcmV0dXJuIGNsYW1wVG88
dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRl
bnRzKHNjb3BlKSwgcmFuZ2UpLmxlbmd0aCk7CiB9CiAKIFN0cmluZyBJbnRlcm5hbHM6OnJhbmdl
QXNUZXh0KGNvbnN0IFJhbmdlJiByYW5nZSkKQEAgLTIwNzIsNyArMjA2NiwxMCBAQCBTdHJpbmcg
SW50ZXJuYWxzOjpyYW5nZUFzVGV4dChjb25zdCBSYW5nZSYgcmFuZ2UpCiAKIFN0cmluZyBJbnRl
cm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2Um
IHJhbmdlKQogewotICAgIHJldHVybiBwbGFpblRleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRv
ckZvclRlc3RpbmcocmFuZ2UpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgZm9yIChTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKHJhbmdlKTsgIWJhY2t3
YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKKyAgICAg
ICAgcmVzdWx0Lmluc2VydChiYWNrd2FyZHNJdGVyYXRvci50ZXh0KCkudG9TdHJpbmcoKSwgMCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUmVmPFJhbmdlPiBJbnRlcm5hbHM6OnN1YnJhbmdl
KFJhbmdlJiByYW5nZSwgdW5zaWduZWQgcmFuZ2VMb2NhdGlvbiwgdW5zaWduZWQgcmFuZ2VMZW5n
dGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcAppbmRleCA3NmVmNDcyMmQ3NTFj
ZjZlNTlhYWI5ZWRmYWI2NjU2ZTcwNGYxNmVhLi44NmFjNTUzZTZmY2MwODIyYWQ0MThjNmEwZDNm
OGNmOWM0YTk5Yjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFu
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKQEAgLTY1
LDE2ICs2NSwxNSBAQCBFZGl0aW5nUmFuZ2UgRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoV2ViQ29y
ZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpSYW5nZQogewogICAgIEFTU0VSVChlZGl0
aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPT0gRWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJs
ZVJvb3QpOwogCi0gICAgc2l6ZV90IGxvY2F0aW9uID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0g
MDsKLSAgICBpZiAoIXJhbmdlIHx8ICFXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9u
QW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRP
ckRvY3VtZW50RWxlbWVudCgpLCByYW5nZSwgbG9jYXRpb24sIGxlbmd0aCkpCisgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIEVkaXRpbmdSYW5nZSBlZGl0aW5nUmFu
Z2UobG9jYXRpb24sIGxlbmd0aCk7Ci0gICAgaWYgKCFlZGl0aW5nUmFuZ2UuaXNWYWxpZCgpKQor
ICAgIGF1dG8qIGVsZW1lbnQgPSBmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
T3JEb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICByZXR1cm4gZWRpdGluZ1JhbmdlOworICAgIGF1dG8gcmVsYXRpdmVSYW5nZSA9
IGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVt
ZW50KSwgKnJhbmdlKTsKKyAgICByZXR1cm4gRWRpdGluZ1JhbmdlKHJlbGF0aXZlUmFuZ2UubG9j
YXRpb24sIHJlbGF0aXZlUmFuZ2UubGVuZ3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXR0cmlidXRlZFN0cmluZy5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcuaAppbmRleCA4NTMw
ZjgxOGJhYzFmNTliOWZlY2I2YTI2NzUzMDEyMjJhMmEzZjQxLi4wMmQ2YjAxMDI2MWFkMzA4YThh
ZTY3YTIzZGEyOGVmZjYzYWI3MzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvQXR0cmlidXRlZFN0cmluZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdHRy
aWJ1dGVkU3RyaW5nLmgKQEAgLTMzLDkgKzMzLDEwIEBAIE9CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVk
U3RyaW5nOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBBdHRyaWJ1dGVkU3RyaW5nIHsK
LSAgICBBdHRyaWJ1dGVkU3RyaW5nKCkKLSAgICB7Ci0gICAgfQorICAgIFJldGFpblB0cjxOU0F0
dHJpYnV0ZWRTdHJpbmc+IHN0cmluZzsKKyAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBkb2N1
bWVudEF0dHJpYnV0ZXM7CisKKyAgICBBdHRyaWJ1dGVkU3RyaW5nKCkgPSBkZWZhdWx0OwogCiAj
aWYgZGVmaW5lZChfX09CSkNfXykKICAgICBBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZFN0cmluZywgTlNEaWN0aW9uYXJ5ICpkb2N1bWVudEF0dHJpYnV0ZXMg
PSBuaWwpCkBAIC00NCwyMiArNDUsMjYgQEAgc3RydWN0IEF0dHJpYnV0ZWRTdHJpbmcgewogICAg
IHsKICAgICB9CiAKKyAgICBBdHRyaWJ1dGVkU3RyaW5nKFJldGFpblB0cjxOU0F0dHJpYnV0ZWRT
dHJpbmc+JiYgYXR0cmlidXRlZFN0cmluZywgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4mJiBkb2N1
bWVudEF0dHJpYnV0ZXMgPSB7IH0pCisgICAgICAgIDogc3RyaW5nKFdURk1vdmUoYXR0cmlidXRl
ZFN0cmluZykpCisgICAgICAgICwgZG9jdW1lbnRBdHRyaWJ1dGVzKFdURk1vdmUoZG9jdW1lbnRB
dHRyaWJ1dGVzKSkKKyAgICB7CisgICAgfQorCiAgICAgb3BlcmF0b3IgTlNBdHRyaWJ1dGVkU3Ry
aW5nICooKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0cmluZy5nZXQoKTsKICAgICB9
CiAjZW5kaWYKLQotICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZzsKLSAg
ICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBkb2N1bWVudEF0dHJpYnV0ZXM7CiB9OwogCiB9CiAK
IG5hbWVzcGFjZSBJUEMgeworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYktp
dDo6QXR0cmlidXRlZFN0cmluZz4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwg
Y29uc3QgV2ViS2l0OjpBdHRyaWJ1dGVkU3RyaW5nJik7CiAgICAgc3RhdGljIE9wdGlvbmFsPFdl
YktpdDo6QXR0cmlidXRlZFN0cmluZz4gZGVjb2RlKERlY29kZXImKTsKIH07Ci19CiAKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLm1tIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0KaW5kZXggM2M0NzAw
NTY4MzhkMTJiYWJhN2VhNWVhZjgxNDdhNWY3Yzg4NzVlNy4uMGYyZTkyZGI2NTRlNDA4YzdhMDJm
MzZiZTQ1Njc4YjIzOWE3MDM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L0F0dHJpYnV0ZWRTdHJpbmcubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F0dHJp
YnV0ZWRTdHJpbmcubW0KQEAgLTQ1LDcgKzQ1LDcgQEAgT3B0aW9uYWw8V2ViS2l0OjpBdHRyaWJ1
dGVkU3RyaW5nPiBBcmd1bWVudENvZGVyPFdlYktpdDo6QXR0cmlidXRlZFN0cmluZz46OmRlY28K
ICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBkb2N1bWVudEF0dHJpYnV0ZXM7CiAgICAgaWYg
KCFJUEM6OmRlY29kZShkZWNvZGVyLCBkb2N1bWVudEF0dHJpYnV0ZXMpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmcgeyBh
dHRyaWJ1dGVkU3RyaW5nLmdldCgpLCBkb2N1bWVudEF0dHJpYnV0ZXMuZ2V0KCkgfTsKKyAgICBy
ZXR1cm4geyB7IFdURk1vdmUoYXR0cmlidXRlZFN0cmluZyksIFdURk1vdmUoZG9jdW1lbnRBdHRy
aWJ1dGVzKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9UZXh0Q2hlY2tlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0
Q2hlY2tlck1hYy5tbQppbmRleCAwZDE5ZTRiZTUxOGY5YmQ4YTJkOTRhOTUzMjMwMDk3YTVjNmVj
ZjM4Li5kNzg2ZjExZDM5M2M3ZTRiNzg4YmNlYzM2N2VhZTA5NmY3Zjc1MmUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCkBAIC00MzYsMTggKzQz
NiwxMyBAQCB2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cgogdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmlu
ZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkK
IHsKICAgICBhdXRvIGNvcnJlY3Rpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XSk7Ci0gICAgZm9yIChhdXRvJiBndWVzcyA6IGdyYW1tYXJEZXRhaWwuZ3Vlc3Nlcykg
ewotICAgICAgICBOU1N0cmluZyAqZ3Vlc3NOU1N0cmluZyA9IGd1ZXNzOwotICAgICAgICBbY29y
cmVjdGlvbnMgYWRkT2JqZWN0Omd1ZXNzTlNTdHJpbmddOwotICAgIH0KLQotICAgIE5TU3RyaW5n
ICpkZXNjcmlwdGlvbk5TU3RyaW5nID0gZ3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb247Cisg
ICAgZm9yIChhdXRvJiBndWVzcyA6IGdyYW1tYXJEZXRhaWwuZ3Vlc3NlcykKKyAgICAgICAgW2Nv
cnJlY3Rpb25zIGFkZE9iamVjdDpndWVzc107CiAgICAgTlNEaWN0aW9uYXJ5ICpkZXRhaWwgPSBA
ewogICAgICAgICBOU0dyYW1tYXJSYW5nZSA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOmdyYW1t
YXJEZXRhaWwucmFuZ2VdLAotICAgICAgICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24gOiBkZXNj
cmlwdGlvbk5TU3RyaW5nLAorICAgICAgICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24gOiBncmFt
bWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiwKICAgICAgICAgTlNHcmFtbWFyQ29ycmVjdGlvbnMg
OiBjb3JyZWN0aW9ucy5nZXQoKSwKICAgICB9OwotCiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFy
ZWRTcGVsbENoZWNrZXJdIHVwZGF0ZVNwZWxsaW5nUGFuZWxXaXRoR3JhbW1hclN0cmluZzpiYWRH
cmFtbWFyUGhyYXNlIGRldGFpbDpkZXRhaWxdOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0Nv
bnRyb2xsZXJQcm94eS5oCmluZGV4IDA3NDEzY2ZjOTM5ODVmZTVkOTllOTQwNjhmMTYxNWY0YjI0
NGM2MTQuLmY0OGYwYjY3MWFkOGZiZjE0OTI1OGI2OGFjNzc3OWIwZDU3NTQ3MTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0Nv
bnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
Y29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oCkBAIC01Miw3ICs1Miw3IEBAIHB1Ymxp
YzoKICAgICBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkoV2ViUGFnZSYpOwogICAgIH5UZXh0
Q2hlY2tpbmdDb250cm9sbGVyUHJveHkoKTsKIAotICAgIEF0dHJpYnV0ZWRTdHJpbmcgYW5ub3Rh
dGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucyhjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRp
b24mLCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mKTsKKyAgICBzdGF0aWMgQXR0cmli
dXRlZFN0cmluZyBhbm5vdGF0ZWRTdWJzdHJpbmdCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpOwog
CiBwcml2YXRlOgogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCkBAIC02NSw4ICs2NSw4IEBA
IHByaXZhdGU6CiAgICAgT3B0aW9uYWw8UmFuZ2VBbmRPZmZzZXQ+IHJhbmdlQW5kT2Zmc2V0UmVs
YXRpdmVUb1NlbGVjdGlvbihpbnQ2NF90IG9mZnNldCwgdWludDY0X3QgbGVuZ3RoKTsKIAogICAg
IC8vIE1lc3NhZ2UgaGFuZGxlcnMuCi0gICAgdm9pZCByZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlv
bihBdHRyaWJ1dGVkU3RyaW5nLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVu
Z3RoLCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHVpbnQ2NF90IHJlbGF0
aXZlUmVwbGFjZW1lbnRMZW5ndGgpOwotICAgIHZvaWQgcmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZl
VG9TZWxlY3Rpb24oU3RyaW5nIGFubm90YXRpb25OYW1lLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNl
dCwgdWludDY0X3QgbGVuZ3RoKTsKKyAgICB2b2lkIHJlcGxhY2VSZWxhdGl2ZVRvU2VsZWN0aW9u
KGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0
X3QgbGVuZ3RoLCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHVpbnQ2NF90
IHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5ndGgpOworICAgIHZvaWQgcmVtb3ZlQW5ub3RhdGlvblJl
bGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBhbm5vdGF0aW9uTmFtZSwgaW50NjRfdCBz
ZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCk7CiAKICAgICBXZWJQYWdlJiBtX3BhZ2U7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCmluZGV4IDY1OWQ1
YWZmMzFkMzkxM2VmNDgxNGIyYTYyMTBhMWViNzg2YzVkMmIuLjllYzQ2MjRiNmY3MDgyZTEzOWMy
MGU2M2MxMDIxODkzY2Q5NmQ4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVy
UHJveHkubW0KQEAgLTcyLDI4ICs3MiwyNSBAQCBzdGF0aWMgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiByZWxldmFudE1hcmtlclR5cGVzKCkKIAogT3B0aW9uYWw8VGV4dENo
ZWNraW5nQ29udHJvbGxlclByb3h5OjpSYW5nZUFuZE9mZnNldD4gVGV4dENoZWNraW5nQ29udHJv
bGxlclByb3h5OjpyYW5nZUFuZE9mZnNldFJlbGF0aXZlVG9TZWxlY3Rpb24oaW50NjRfdCBvZmZz
ZXQsIHVpbnQ2NF90IGxlbmd0aCkKIHsKLSAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UuY29yZVBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgYXV0byYg
ZnJhbWVTZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBmcmFtZVNlbGVj
dGlvbiA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKS5zZWxlY3Rpb24oKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZVNlbGVjdGlv
bi5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byByb290ID0gZnJhbWVTZWxlY3Rpb24ucm9vdEVk
aXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFyb290KQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIHJhbmdlLT5jb2xsYXBzZSh0cnVlKTsKLQotICAgIHNpemVf
dCBzZWxlY3Rpb25Mb2NhdGlvbjsKLSAgICBzaXplX3Qgc2VsZWN0aW9uTGVuZ3RoOwotICAgIFRl
eHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uocm9vdCwgcmFuZ2UuZ2V0
KCksIHNlbGVjdGlvbkxvY2F0aW9uLCBzZWxlY3Rpb25MZW5ndGgpOwotICAgIHNlbGVjdGlvbkxv
Y2F0aW9uICs9IG9mZnNldDsKKyAgICBhdXRvIHNlbGVjdGlvbkxpdmVSYW5nZSA9IHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uTGl2ZVJhbmdlKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHsgeyBjcmVhdGVMaXZlUmFu
Z2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygq
cm9vdCksIHsgc2VsZWN0aW9uTG9jYXRpb24sIGxlbmd0aCB9KSksIHNlbGVjdGlvbkxvY2F0aW9u
IH0gfTsKKyAgICBhdXRvIHNjb3BlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpy
b290KTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqc2VsZWN0aW9u
TGl2ZVJhbmdlIH07CisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgdW5kZXJmbG93IGlmIG9mZnNl
dCBpcyBhIG5lZ2F0aXZlIG51bWJlciBoaWdoZXIgdGhhbiB0aGUgY2hhcmFjdGVyIGNvdW50Pwor
ICAgIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0TG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7IHNj
b3BlLnN0YXJ0LCBzZWxlY3Rpb25SYW5nZS5zdGFydCB9KSArIG9mZnNldDsKKyAgICByZXR1cm4g
eyB7IGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIHsgc2VsZWN0
aW9uU3RhcnRMb2NhdGlvbiwgbGVuZ3RoIH0pKSwgc2VsZWN0aW9uU3RhcnRMb2NhdGlvbiB9IH07
CiB9CiAKLXZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVU
b1NlbGVjdGlvbihBdHRyaWJ1dGVkU3RyaW5nIGFubm90YXRlZFN0cmluZywgaW50NjRfdCBzZWxl
Y3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNlbWVu
dExvY2F0aW9uLCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TGVuZ3RoKQordm9pZCBUZXh0
Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlcGxhY2VSZWxhdGl2ZVRvU2VsZWN0aW9uKGNvbnN0
IEF0dHJpYnV0ZWRTdHJpbmcmIGFubm90YXRlZFN0cmluZywgaW50NjRfdCBzZWxlY3Rpb25PZmZz
ZXQsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9u
LCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TGVuZ3RoKQogewogICAgIEZyYW1lJiBmcmFt
ZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rp
b24oKTsKQEAgLTE1NCw3ICsxNTEsNyBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94
eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24oQXR0cmlidXRlZFN0cmluZyBhbgogICAgIH1d
OwogfQogCi12b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlv
blJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubm90YXRpb24sIGludDY0X3Qgc2VsZWN0aW9u
T2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgpCit2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94
eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBhbm5v
dGF0aW9uLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVuZ3RoKQogewogICAg
IEZyYW1lJiBmcmFtZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHJhbmdlQW5kT2Zmc2V0ID0gcmFuZ2VBbmRPZmZz
ZXRSZWxhdGl2ZVRvU2VsZWN0aW9uKHNlbGVjdGlvbk9mZnNldCwgbGVuZ3RoKTsKQEAgLTE2NCw3
ICsxNjEsNyBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3Rh
dGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubgogICAgIGlmICghcmFuZ2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGJvb2wgcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA9IChhbm5v
dGF0aW9uID09IFN0cmluZyhAIk5TU3BlbGxpbmdTdGF0ZSIpKTsKKyAgICBib29sIHJlbW92ZUNv
cmVTcGVsbGluZ01hcmtlcnMgPSBhbm5vdGF0aW9uID09ICJOU1NwZWxsaW5nU3RhdGUiOwogICAg
IGZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJzKCpyYW5nZSwgWyZdIChE
b2N1bWVudE1hcmtlciogbWFya2VyKSB7CiAgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXItPmRh
dGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzUsNTEgKzE3MiwzMCBAQCB2
b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZl
VG9TZWxlY3Rpb24oU3RyaW5nIGFubgogCiBBdHRyaWJ1dGVkU3RyaW5nIFRleHRDaGVja2luZ0Nv
bnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucyhjb25zdCBX
ZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9z
aXRpb24mIGVuZCkKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4g
c3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRd
KTsKLSAgICBOU1VJbnRlZ2VyIHN0cmluZ0xlbmd0aCA9IDA7Ci0KLSAgICBSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kb2N1bWVudCgpOwotICAgIGlm
ICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBhdXRvIGVudGlyZVJhbmdl
ID0gbWFrZVJhbmdlKHN0YXJ0LCBlbmQpOwotICAgIGlmICghZW50aXJlUmFuZ2UpCisgICAgYXV0
byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpOworICAgIGF1dG8gZW5k
Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQpOworICAgIGlmICghc3RhcnRCb3VuZGFy
eSB8fCAhZW5kQm91bmRhcnkpCiAgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byBlbnRpcmVS
YW5nZSA9IFNpbXBsZVJhbmdlIHsgKnN0YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9OwogCi0g
ICAgUmVmUHRyPE5vZGU+IGNvbW1vbkFuY2VzdG9yID0gZW50aXJlUmFuZ2UtPmNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKCk7Ci0gICAgc2l6ZV90IGVudGlyZVJhbmdlTG9jYXRpb247Ci0gICAgc2l6
ZV90IGVudGlyZVJhbmdlTGVuZ3RoOwotICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRM
ZW5ndGhGcm9tUmFuZ2UoY29tbW9uQW5jZXN0b3IuZ2V0KCksIGVudGlyZVJhbmdlLmdldCgpLCBl
bnRpcmVSYW5nZUxvY2F0aW9uLCBlbnRpcmVSYW5nZUxlbmd0aCk7CisgICAgYXV0byBzdHJpbmcg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwogCi0g
ICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQuZGVlcEVx
dWl2YWxlbnQoKSksICptYWtlQm91bmRhcnlQb2ludChlbmQuZGVlcEVxdWl2YWxlbnQoKSkgfSk7
ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKLSAgICAgICAgaW50IGN1cnJlbnRUZXh0TGVu
Z3RoID0gaXQudGV4dCgpLmxlbmd0aCgpOwotICAgICAgICBpZiAoIWN1cnJlbnRUZXh0TGVuZ3Ro
KQorICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KGVudGlyZVJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0
LmFkdmFuY2UoKSkgeworICAgICAgICBpZiAoIWl0LnRleHQoKS5sZW5ndGgoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFtzdHJpbmcgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpb
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOml0LnRleHQoKS5jcmVh
dGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCldIGF1dG9yZWxlYXNlXV07Ci0KLSAgICAg
ICAgU2ltcGxlUmFuZ2UgY3VycmVudFRleHRSYW5nZSA9IGl0LnJhbmdlKCk7Ci0gICAgICAgIGF1
dG8gbWFya2VycyA9IGRvY3VtZW50LT5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoY3JlYXRlTGl2
ZVJhbmdlKGN1cnJlbnRUZXh0UmFuZ2UpLCBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hl
Y2tpbmcpOworICAgICAgICBbc3RyaW5nIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6YWRvcHROUyhb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6aXQudGV4dCgpLmNyZWF0
ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKV0pLmdldCgpXTsKKyAgICAgICAgYXV0byBy
YW5nZSA9IGl0LnJhbmdlKCk7CisgICAgICAgIGF1dG8gbWFya2VycyA9IHJhbmdlLnN0YXJ0LmRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSks
IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZyk7CiAgICAgICAgIGZvciAoY29u
c3QgYXV0byogbWFya2VyIDogbWFya2VycykgewogICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1h
cmtlci0+ZGF0YSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
YXV0byYgdGV4dENoZWNraW5nRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpQbGF0Zm9y
bVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGF1dG8gc3Vi
cmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY3VycmVudFRleHRSYW5nZSwgeyBtYXJrZXIt
PnN0YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtYXJrZXItPnN0YXJ0T2Zmc2V0
KCkgfSk7Ci0KLSAgICAgICAgICAgIHNpemVfdCBzdWJyYW5nZUxvY2F0aW9uOwotICAgICAgICAg
ICAgc2l6ZV90IHN1YnJhbmdlTGVuZ3RoOwotICAgICAgICAgICAgVGV4dEl0ZXJhdG9yOjpnZXRM
b2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShjb21tb25BbmNlc3Rvci5nZXQoKSwgY3JlYXRlTGl2
ZVJhbmdlKHN1YnJhbmdlKS5wdHIoKSwgc3VicmFuZ2VMb2NhdGlvbiwgc3VicmFuZ2VMZW5ndGgp
OwotCi0gICAgICAgICAgICBBU1NFUlQoc3VicmFuZ2VMb2NhdGlvbiA+IGVudGlyZVJhbmdlTG9j
YXRpb24pOwotICAgICAgICAgICAgQVNTRVJUKHN1YnJhbmdlTG9jYXRpb24gKyBzdWJyYW5nZUxl
bmd0aCA8IGVudGlyZVJhbmdlTGVuZ3RoKTsKLSAgICAgICAgICAgIFtzdHJpbmcgYWRkQXR0cmli
dXRlOnRleHRDaGVja2luZ0RhdGEua2V5IHZhbHVlOnRleHRDaGVja2luZ0RhdGEudmFsdWUgcmFu
Z2U6TlNNYWtlUmFuZ2Uoc3VicmFuZ2VMb2NhdGlvbiAtIGVudGlyZVJhbmdlTG9jYXRpb24sIHN1
YnJhbmdlTGVuZ3RoKV07CisgICAgICAgICAgICBhdXRvJiBkYXRhID0gV1RGOjpnZXQ8RG9jdW1l
bnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpOworICAg
ICAgICAgICAgYXV0byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwgeyBt
YXJrZXItPnN0YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtYXJrZXItPnN0YXJ0
T2Zmc2V0KCkgfSk7CisgICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZTpkYXRhLmtleSB2
YWx1ZTpkYXRhLnZhbHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKGVudGlyZVJhbmdlLCBzdWJyYW5n
ZSldOwogICAgICAgICB9Ci0KLSAgICAgICAgc3RyaW5nTGVuZ3RoICs9IGN1cnJlbnRUZXh0TGVu
Z3RoOwogICAgIH0KIAotICAgIHJldHVybiBzdHJpbmcuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1
cm4gUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4geyBXVEZNb3ZlKHN0cmluZykgfTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggMGMxNzIwZmM5YzI5ZTRm
NzE4MTA2MjYyZjQyOWFlZGNlODdhY2I3Mi4uOWQ0ZGNiYjFkMTg2NDYzNjQ0ZWE0MGU2MjNkMWE0
MGZhYjE2OGVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMjM4LDEzICsyMzgsNyBAQCB2b2lkIFdlYlBh
Z2U6OmdldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgQXR0cmlidQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTlNEaWN0aW9uYXJ5
KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBuaWw7Ci0KLSAgICBBdHRyaWJ1dGVkU3RyaW5nIHJlc3Vs
dDsKLSAgICByZXN1bHQuc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZU9m
Q29udGVudHMoKmRvY3VtZW50RWxlbWVudCksICZkb2N1bWVudEF0dHJpYnV0ZXMpOwotICAgIHJl
c3VsdC5kb2N1bWVudEF0dHJpYnV0ZXMgPSBkb2N1bWVudEF0dHJpYnV0ZXM7Ci0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcih7IHJlc3VsdCB9KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IGF0dHJp
YnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpKSB9
KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRSZW1vdGVPYmplY3RSZWdpc3RyeShXZWJSZW1vdGVP
YmplY3RSZWdpc3RyeSogcmVnaXN0cnkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggNGE1MTNiNjAxNzgxNDJmYjNkMzc0MmM2MmRmOGNhNTBm
N2MwMTg1ZS4uNDY4YzM1OWMxZjU1NmNjYTMxZTI1YmE1ODM1NzBiYzIzYjU4YWM2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtMzYyLDIw
ICszNjIsMTUgQEAgU3RyaW5nIFdlYkZyYW1lOjpjb250ZW50c0FzU3RyaW5nKCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAKLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2NvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvIGRvY3VtZW50ID0g
bV9jb3JlRnJhbWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGRvY3VtZW50RWxlbWVudCA9IGRv
Y3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvIGRvY3VtZW50RWxlbWVudCA9IGRv
Y3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGRvY3Vt
ZW50LT5jcmVhdGVSYW5nZSgpOwotCi0gICAgaWYgKHJhbmdlLT5zZWxlY3ROb2RlKCpkb2N1bWVu
dEVsZW1lbnQpLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAg
ICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZG9jdW1lbnRFbGVtZW50KSk7CiB9CiAKIFN0
cmluZyBXZWJGcmFtZTo6c2VsZWN0aW9uQXNTdHJpbmcoKSBjb25zdCAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggOTYxZTJj
MTExZmY3MjczODZiYzc5OWY4NWRmNTQyMjdjNWI5ZjIwYi4uNzBlNTI4NTY0NmZmOGRmNTZhOWQy
NTIxNzQ4YmZkNWFmOGNjNGM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MDQxLDM4ICs0MDQxLDI4IEBAIHZvaWQg
V2ViUGFnZTo6cmVtb3ZlVGV4dFBsYWNlaG9sZGVyKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnRDb250
ZXh0JiBwbGFjZWhvbGRlciwKIAogdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRGVs
dGEoaW50NjRfdCBsb2NhdGlvbkRlbHRhLCBpbnQ2NF90IGxlbmd0aERlbHRhLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmPEZyYW1lPiBm
cmFtZSA9IGNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpIHsKLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcm9vdCA9
IGZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQo
KTsKLSAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAg
aWYgKCFyb290IHx8ICFyYW5nZSkgeworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmKGNvcmVQYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpKTsKKyAgICBhdXRvIHJv
b3QgPSBtYWtlUmVmUHRyKGZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JE
b2N1bWVudEVsZW1lbnQoKSk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcm9vdCB8
fCAhc2VsZWN0aW9uUmFuZ2UpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNpemVfdCBzZWxlY3Rpb25Mb2NhdGlvbjsKLSAgICBz
aXplX3Qgc2VsZWN0aW9uTGVuZ3RoOwotICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRM
ZW5ndGhGcm9tUmFuZ2Uocm9vdCwgcmFuZ2UuZ2V0KCksIHNlbGVjdGlvbkxvY2F0aW9uLCBzZWxl
Y3Rpb25MZW5ndGgpOwotCi0gICAgQ2hlY2tlZEludDY0IG5ld1NlbGVjdGlvbkxvY2F0aW9uIHsg
c2VsZWN0aW9uTG9jYXRpb24gfTsKLSAgICBDaGVja2VkSW50NjQgbmV3U2VsZWN0aW9uTGVuZ3Ro
IHsgc2VsZWN0aW9uTGVuZ3RoIH07CisgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cygqcm9vdCk7CisgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSA9
IGNoYXJhY3RlclJhbmdlKHNjb3BlLCAqc2VsZWN0aW9uUmFuZ2UpOworICAgIENoZWNrZWRJbnQ2
NCBuZXdTZWxlY3Rpb25Mb2NhdGlvbiB7IHNlbGVjdGlvbkNoYXJhY3RlclJhbmdlLmxvY2F0aW9u
IH07CisgICAgQ2hlY2tlZEludDY0IG5ld1NlbGVjdGlvbkxlbmd0aCB7IHNlbGVjdGlvbkNoYXJh
Y3RlclJhbmdlLmxlbmd0aCB9OwogICAgIG5ld1NlbGVjdGlvbkxvY2F0aW9uICs9IGxvY2F0aW9u
RGVsdGE7CiAgICAgbmV3U2VsZWN0aW9uTGVuZ3RoICs9IGxlbmd0aERlbHRhOwotCiAgICAgaWYg
KG5ld1NlbGVjdGlvbkxvY2F0aW9uLmhhc092ZXJmbG93ZWQoKSB8fCBuZXdTZWxlY3Rpb25MZW5n
dGguaGFzT3ZlcmZsb3dlZCgpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIG5ld1NlbGVjdGlvblJhbmdlID0gQ2hhcmFj
dGVyUmFuZ2UobmV3U2VsZWN0aW9uTG9jYXRpb24udW5zYWZlR2V0KCksIG5ld1NlbGVjdGlvbkxl
bmd0aC51bnNhZmVHZXQoKSk7Ci0gICAgYXV0byByZXNvbHZlZFJhbmdlID0gcmVzb2x2ZUNoYXJh
Y3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIG5ld1NlbGVj
dGlvblJhbmdlKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UocmVzb2x2ZWRSYW5nZSkucHRyKCksIERPV05TVFJFQU0sIFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKLQor
ICAgIGF1dG8gdXBkYXRlZFNlbGVjdGlvblJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIG5ld1NlbGVjdGlvblJhbmdlKTsK
KyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uo
dXBkYXRlZFNlbGVjdGlvblJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKQEAgLTQxNzUsMjUgKzQxNjUsMjUgQEAgdm9pZCBXZWJQ
YWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0
UmVxdWVzdCByZXF1ZXMKICAgICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9u
ID0gcmFuZ2VPZkludGVyZXN0U3RhcnQgPiBzZWxlY3Rpb25TdGFydCA/IHJhbmdlT2ZJbnRlcmVz
dFN0YXJ0IDogc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5T
ZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJlc3RFbmQgPCBzZWxlY3Rpb25FbmQgPyByYW5nZU9mSW50
ZXJlc3RFbmQgOiBzZWxlY3Rpb25FbmQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZV90IHJh
bmdlT2ZJbnRlcmVzdExvY2F0aW9uOwotICAgICAgICBzaXplX3QgcmFuZ2VPZkludGVyZXN0TGVu
Z3RoOwotICAgICAgICBSZWZQdHI8Tm9kZT4gcm9vdE5vZGUgPSByYW5nZU9mSW50ZXJlc3QtPmNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7CisgICAgICAgIGF1dG8gcm9vdE5vZGUgPSBtYWtlUmVm
UHRyKHJhbmdlT2ZJbnRlcmVzdC0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSk7CiAgICAgICAg
IGlmICghcm9vdE5vZGUpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgYXV0byByb290Q29udGFpbmVy
Tm9kZSA9IHJvb3ROb2RlLT5pc0NvbnRhaW5lck5vZGUoKSA/IGRvd25jYXN0PENvbnRhaW5lck5v
ZGU+KHJvb3ROb2RlLmdldCgpKSA6IHJvb3ROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlm
ICghcm9vdENvbnRhaW5lck5vZGUpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsg
fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byBzY29wZSA9
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdENvbnRhaW5lck5vZGUpOwogCi0g
ICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiByb290Q29udGFpbmVyTm9kZSA9IHJvb3ROb2Rl
LT5pc0NvbnRhaW5lck5vZGUoKSA/IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHJvb3ROb2RlLmdl
dCgpKSA6IHJvb3ROb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIFRleHRJdGVyYXRvcjo6Z2V0
TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uocm9vdENvbnRhaW5lck5vZGUuZ2V0KCksIHJhbmdl
T2ZJbnRlcmVzdC5nZXQoKSwgcmFuZ2VPZkludGVyZXN0TG9jYXRpb24sIHJhbmdlT2ZJbnRlcmVz
dExlbmd0aCk7Ci0KLSAgICAgICAgQ2hlY2tlZDx1aW50NjRfdCwgUmVjb3JkT3ZlcmZsb3c+IG1p
ZHBvaW50TG9jYXRpb24geyByYW5nZU9mSW50ZXJlc3RMb2NhdGlvbiB9OwotICAgICAgICBtaWRw
b2ludExvY2F0aW9uICs9IHJhbmdlT2ZJbnRlcmVzdExlbmd0aCAvIDI7CisgICAgICAgIGF1dG8g
Y2hhcmFjdGVyUmFuZ2VPZkludGVyZXN0ID0gY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsICpyYW5nZU9m
SW50ZXJlc3QpOworICAgICAgICBhdXRvIG1pZHBvaW50TG9jYXRpb24gPSBjaGVja2VkU3VtPHVp
bnQ2NF90PihjaGFyYWN0ZXJSYW5nZU9mSW50ZXJlc3QubG9jYXRpb24sIGNoYXJhY3RlclJhbmdl
T2ZJbnRlcmVzdC5sZW5ndGggLyAyKTsKICAgICAgICAgaWYgKG1pZHBvaW50TG9jYXRpb24uaGFz
T3ZlcmZsb3dlZCgpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBtaWRwb2ludCA9IGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290Q29udGFpbmVyTm9kZSksIG1pZHBvaW50TG9j
YXRpb24udW5zYWZlR2V0KCkpKTsKKyAgICAgICAgYXV0byBtaWRwb2ludCA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24oc2NvcGUsIG1pZHBvaW50
TG9jYXRpb24udW5zYWZlR2V0KCkpKTsKIAogICAgICAgICBzdGFydE9mUmFuZ2VPZkludGVyZXN0
SW5TZWxlY3Rpb24gPSBzdGFydE9mV29yZChtaWRwb2ludCk7CiAgICAgICAgIGlmIChzdGFydE9m
UmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPCByYW5nZU9mSW50ZXJlc3RTdGFydCkgewpAQCAt
NDIwMSw3ICs0MTkxLDYgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29u
dGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgICAgIGlm
IChzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPiByYW5nZU9mSW50ZXJlc3RFbmQp
CiAgICAgICAgICAgICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gbWlk
cG9pbnQ7CiAgICAgICAgIH0KLQogICAgICAgICBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0
aW9uID0gc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRl
eCA5NjI4MWFiODRmMWFhOGM3NWUzNmY0ZWJkMTc3NzM0NzQxNjVjMjlmLi5kYTExMzJjMmM5YmQ5
MTQ4YzgzM2M4NzUzN2YzZTgyNjYzOGZjZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTU0LDkgKzE1NCwxMSBAQCB2
b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JT
dGF0ZSYgcmVzdWx0KSBjb25zdAogICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAh
c2VsZWN0aW9uRW5kIHx8ICFwYXJhZ3JhcGhTdGFydCkKICAgICAgICAgcmV0dXJuOwogCisgICAg
YXV0byBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUuZWRpdG9yKCkuY29u
dGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOworCiAgICAgcG9zdExheW91dERhdGEuY2Fu
ZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhT
dGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CiAgICAgcG9zdExheW91dERhdGEuc2Vs
ZWN0ZWRUZXh0TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqc2VsZWN0aW9uU3RhcnRCb3VuZGFy
eSwgKnNlbGVjdGlvbkVuZCB9KTsKLSAgICBwb3N0TGF5b3V0RGF0YS5wYXJhZ3JhcGhDb250ZXh0
Rm9yQ2FuZGlkYXRlUmVxdWVzdCA9IHBsYWluVGV4dChmcmFtZS5lZGl0b3IoKS5jb250ZXh0UmFu
Z2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkuZ2V0KCkpOworICAgIHBvc3RMYXlvdXREYXRhLnBhcmFn
cmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRl
UmVxdWVzdCA/IHBsYWluVGV4dCgqY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCkgOiBT
dHJpbmcoKTsKICAgICBwb3N0TGF5b3V0RGF0YS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0ID0g
ZnJhbWUuZWRpdG9yKCkuc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOwogCiAgICAgSW50UmVj
dCByZWN0Rm9yU2VsZWN0aW9uQ2FuZGlkYXRlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA2OTJl
ZTA3ODA2MjQxNjEyYjhkZjhiNWJhNzIxZTU0YzQ5YmJiODFiLi4zYzMwZDU3ZTY4Y2NhNGI2MmU2
YjhmMGRhZGI0MjgyNjA3MTA0YWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMDM5LDE0ICsx
MDM5LDExIEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1h
clBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKICAgICBOU011
dGFibGVBcnJheSAqY29ycmVjdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZv
ciAoYXV0byYgZ3Vlc3MgOiBncmFtbWFyRGV0YWlsLmd1ZXNzZXMpIHsKLSAgICAgICAgTlNTdHJp
bmcgKmd1ZXNzTlNTdHJpbmcgPSBndWVzczsKLSAgICAgICAgW2NvcnJlY3Rpb25zIGFkZE9iamVj
dDpndWVzc05TU3RyaW5nXTsKLSAgICB9Ci0gICAgTlNTdHJpbmcgKmRlc2NyaXB0aW9uTlNTdHJp
bmcgPSBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbjsKKyAgICBmb3IgKGF1dG8mIGd1ZXNz
IDogZ3JhbW1hckRldGFpbC5ndWVzc2VzKQorICAgICAgICBbY29ycmVjdGlvbnMgYWRkT2JqZWN0
Omd1ZXNzXTsKICAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBAewogICAgICAgICBOU0dy
YW1tYXJSYW5nZSA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOmdyYW1tYXJEZXRhaWwucmFuZ2Vd
LAotICAgICAgICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24gOiBkZXNjcmlwdGlvbk5TU3RyaW5n
LAorICAgICAgICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24gOiBncmFtbWFyRGV0YWlsLnVzZXJE
ZXNjcmlwdGlvbiwKICAgICAgICAgTlNHcmFtbWFyQ29ycmVjdGlvbnMgOiBjb3JyZWN0aW9ucywK
ICAgICB9OwogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVT
cGVsbGluZ1BhbmVsV2l0aEdyYW1tYXJTdHJpbmc6YmFkR3JhbW1hclBocmFzZSBkZXRhaWw6ZGlj
dGlvbmFyeV07CkBAIC0xMTIyLDkgKzExMTksMTEgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJl
cXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGUK
ICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAg
IGF1dG8gc2VsZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IGNoYXJhY3RlckNvdW50KHsg
Km1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKSwgKm1h
a2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKICAgICBhdXRvIHNlbGVjdGlvbkxl
bmd0aCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0
KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIH0pOworICAgIGF1
dG8gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCA9IGZyYW1lLT5lZGl0b3IoKS5jb250
ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CisgICAgU3RyaW5nIGNvbnRleHRGb3JDYW5k
aWRhdGVSZXFldWVzdCA9IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgPyBwbGFpblRl
eHQoKmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QpIDogU3RyaW5nKCk7CiAKICAgICBt
X3JhbmdlRm9yQ2FuZGlkYXRlcyA9IE5TTWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGgsIHNlbGVjdGlvbkxlbmd0aCk7Ci0gICAgbV9wYXJhZ3JhcGhDb250ZXh0Rm9yQ2Fu
ZGlkYXRlUmVxdWVzdCA9IHBsYWluVGV4dChmcmFtZS0+ZWRpdG9yKCkuY29udGV4dFJhbmdlRm9y
Q2FuZGlkYXRlUmVxdWVzdCgpLmdldCgpKTsKKyAgICBtX3BhcmFncmFwaENvbnRleHRGb3JDYW5k
aWRhdGVSZXF1ZXN0ID0gY29udGV4dEZvckNhbmRpZGF0ZVJlcWV1ZXN0OwogCiAgICAgTlNUZXh0
Q2hlY2tpbmdUeXBlcyBjaGVja2luZ1R5cGVzID0gTlNUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcg
fCBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCB8IE5TVGV4dENoZWNraW5nVHlwZUNvcnJl
Y3Rpb247CiAgICAgYXV0byB3ZWFrRWRpdG9yID0gbWFrZVdlYWtQdHIoKnRoaXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZmU2NmQxYjU0Zjc1
ZDdmZGM5ZjU2OGQyMmNkNDllZmZkNGRjOTk1MS4uZTU1YzMwOTEwNTc1NGJiY2M4MDQ3Yjc1ODBk
OTc0MGUyMWQzM2FjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCkBAIC01ODcsNyArNTg3LDkgQEAgLSAoTlNTdHJpbmcgKilfc2VsZWN0ZWRTdHJpbmcK
IAogLSAoTlNTdHJpbmcgKilfc3RyaW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAg
ICByZXR1cm4gcGxhaW5UZXh0KGNvcmUocmFuZ2UpLCBXZWJDb3JlOjpUZXh0SXRlcmF0b3JEZWZh
dWx0QmVoYXZpb3IsIHRydWUpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBAIiI7
CisgICAgcmV0dXJuIHBsYWluVGV4dCgqY29yZShyYW5nZSksIFdlYkNvcmU6OlRleHRJdGVyYXRv
ckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CiB9CiAKIC0gKE9wdGlvblNldDxXZWJDb3JlOjpQYWlu
dEJlaGF2aW9yPilfcGFpbnRCZWhhdmlvckZvckRlc3RpbmF0aW9uQ29udGV4dDooQ0dDb250ZXh0
UmVmKWNvbnRleHQKQEAgLTgwNiwxMiArODA4LDE1IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05T
UmFuZ2U6KFdlYkNvcmU6OlJhbmdlICopcmFuZ2UKICAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBzaXplX3QgbG9jYXRpb24g
PSAwOwotICAgIHNpemVfdCBsZW5ndGggPSAwOwotICAgIGlmICghV2ViQ29yZTo6VGV4dEl0ZXJh
dG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2Us
IGxvY2F0aW9uLCBsZW5ndGgpKQorICAgIGF1dG8gZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
OworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5k
LCAwKTsKKworICAgIGF1dG8qIGVsZW1lbnQgPSBmcmFtZS0+c2VsZWN0aW9uKCkucm9vdEVkaXRh
YmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQogICAgICAg
ICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICByZXR1cm4gTlNNYWtl
UmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7CisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKG1ha2VC
b3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgKnJhbmdlKTsKIH0KIAog
LSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNy
YW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCA0ZjIzMjQ3Nzc1ODkyNjc1
MGRmNWUwMjE0MGYyMGVhOTcxOWMyMjkzLi5iZjJiYWE1ZDU5NmY5ODhkMmUwOWY4NjY0NDViNzk0
MDViNGIzNDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtNzc5OSwxNCAr
Nzc5OSwxNiBAQCBIUkVTVUxUIFdlYlZpZXc6OnNlbGVjdGVkUmFuZ2VGb3JUZXN0aW5nKF9PdXRf
IFVJTlQqIGxvY2F0aW9uLCBfT3V0XyBVSU5UKiBsZW5ndAogICAgIEZyYW1lJiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpOworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBzaXplX3QgbG9jYXRpb25T
aXplOwotICAgIHNpemVfdCBsZW5ndGhTaXplOwotICAgIGlmIChyYW5nZSAmJiBUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpLCByYW5nZS5nZXQoKSwgbG9jYXRpb25T
aXplLCBsZW5ndGhTaXplKSkgewotICAgICAgICAqbG9jYXRpb24gPSBzdGF0aWNfY2FzdDxVSU5U
Pihsb2NhdGlvblNpemUpOwotICAgICAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8VUlOVD4obGVu
Z3RoU2l6ZSk7Ci0gICAgfQorICAgIGF1dG8qIGVsZW1lbnQgPSBmcmFtZS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQp
CisgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKKyAgICBhdXRvIHJlbGF0aXZlUmFuZ2UgPSBjaGFy
YWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZWxlbWVudCks
ICpyYW5nZSk7CisgICAgKmxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8VUlOVD4ocmVsYXRpdmVSYW5n
ZS5sb2NhdGlvbik7CisgICAgKmxlbmd0aCA9IHN0YXRpY19jYXN0PFVJTlQ+KHJlbGF0aXZlUmFu
Z2UubGVuZ3RoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394886</attachid>
            <date>2020-03-29 22:02:19 -0700</date>
            <delta_ts>2020-04-01 16:20:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209723-20200329220217.patch</filename>
            <type>text/plain</type>
            <size>82717</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGUwNjM4NWU4OTJmYmY0
MWYxNTQ4M2ZiYjI1NGMwNjBlYmUwZDdkOS4uZjAwNDVhNGY3YWQ2ODUzNDY2ODZmZTZiMWIyYTU5
NDQzOTMyMTNlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDMtMjkgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbGwgdXNlcyBvZiBs
aXZlIHJhbmdlcyBmcm9tIFRleHRJdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NzIzCisKIDIwMjAtMDMtMjkgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aCBvZmYgb2YgbGl2ZSByYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDQ1YzBiMDcw
ZmRkODBlODA4ZDEzMGUxYzE3YzdiMjdiZmQyMGQ3NjcuLjEyNTdlMmVkM2IyMTVjYjhjYjVhZThm
MWIwOWYyYmQ5ZmY1OTc1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMTQ1OSw3ICsxNDU5LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGkKICAgICAvLyBzZWUgdGhpcyBlbXB0eSBsaW5lLiAgSW5zdGVhZCwg
cmV0dXJuIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIGVtcHR5IGxpbmUuCiAgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZFBvc2l0aW9uOwogICAgIAotICAgIFN0cmluZyBsaW5lU3RyaW5nID0gcGxhaW5U
ZXh0KG1ha2VSYW5nZShzdGFydE9mTGluZShuZXh0VmlzaWJsZVBvcyksIGVuZE9mTGluZShuZXh0
VmlzaWJsZVBvcykpLmdldCgpKTsKKyAgICBTdHJpbmcgbGluZVN0cmluZyA9IHBsYWluVGV4dCgq
bWFrZVJhbmdlKHN0YXJ0T2ZMaW5lKG5leHRWaXNpYmxlUG9zKSwgZW5kT2ZMaW5lKG5leHRWaXNp
YmxlUG9zKSkpOwogICAgIGlmIChsaW5lU3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgZW5kUG9z
aXRpb24gPSBuZXh0VmlzaWJsZVBvczsKICAgICBlbHNlCkBAIC0xNDgzLDcgKzE0ODMsNyBAQCBW
aXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0
UG9zaXRpb24oY29uc3QgVmlzaWJsZQogICAgIC8vIHRyZWF0IGVtcHR5IGxpbmUgYXMgYSBzZXBh
cmF0ZSBzZW50ZW5jZS4KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbjsKICAgICAK
LSAgICBTdHJpbmcgbGluZVN0cmluZyA9IHBsYWluVGV4dChtYWtlUmFuZ2Uoc3RhcnRPZkxpbmUo
cHJldmlvdXNWaXNpYmxlUG9zKSwgZW5kT2ZMaW5lKHByZXZpb3VzVmlzaWJsZVBvcykpLmdldCgp
KTsKKyAgICBTdHJpbmcgbGluZVN0cmluZyA9IHBsYWluVGV4dCgqbWFrZVJhbmdlKHN0YXJ0T2ZM
aW5lKHByZXZpb3VzVmlzaWJsZVBvcyksIGVuZE9mTGluZShwcmV2aW91c1Zpc2libGVQb3MpKSk7
CiAgICAgaWYgKGxpbmVTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICBzdGFydFBvc2l0aW9uID0g
cHJldmlvdXNWaXNpYmxlUG9zOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGU2
MTZlYTlkNjU0ZWQyM2IzNjViYTc1NmRkMDg2NTc2ZTdkMTVlOGEuLjBhZGY1YzQ3ODA2NjFmYjlj
Y2Y1NTk1ZWFkYmYzMjFkYTM0N2M0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNjY0LDcg
KzY2NCw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0ZXh0VW5kZXJFbGVt
ZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50CiAgICAgICAgICAgICAgICAgLy8gc3R5
bGUgdXBkYXRlL2xheW91dCBoZXJlLiBTZWUgYWxzbyBBWE9iamVjdENhY2hlOjpkZWZlclRleHRD
aGFuZ2VkSWZOZWVkZWQoKS4KICAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighbm9kZURvY3VtZW50LT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSk7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGVEb2N1bWVu
dC0+dmlldygpLT5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBsYWluVGV4dCh0ZXh0UmFuZ2UuZ2V0KCksIHRleHRJdGVyYXRv
ckJlaGF2aW9yRm9yVGV4dFJhbmdlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwbGFpblRl
eHQoKnRleHRSYW5nZSwgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAKQEAgLTIwODEsMTYgKzIwODEsMTUgQEAgYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpub2RlSXNUZXh0Q29udHJvbChjb25zdCBOb2RlKiBu
b2RlKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW50UmVjdCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JSZWN0cyhMYXlvdXRSZWN0IGNvbnN0JiByZWN0MSwgTGF5
b3V0UmVjdCBjb25zdCYgcmVjdDIsIFJlZlB0cjxSYW5nZT4gY29uc3QmIGRhdGFSYW5nZSkKK3N0
YXRpYyBJbnRSZWN0IGJvdW5kc0ZvclJlY3RzKGNvbnN0IExheW91dFJlY3QmIHJlY3QxLCBjb25z
dCBMYXlvdXRSZWN0JiByZWN0MiwgY29uc3QgU2ltcGxlUmFuZ2UmIGRhdGFSYW5nZSkKIHsKICAg
ICBMYXlvdXRSZWN0IG91clJlY3QgPSByZWN0MTsKICAgICBvdXJSZWN0LnVuaXRlKHJlY3QyKTsK
LSAgICAKLSAgICAvLyBpZiB0aGUgcmVjdGFuZ2xlIHNwYW5zIGxpbmVzIGFuZCBjb250YWlucyBt
dWx0aXBsZSB0ZXh0IGNoYXJzLCB1c2UgdGhlIHJhbmdlJ3MgYm91bmRpbmcgYm94IGludGVhZAor
CisgICAgLy8gaWYgdGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlw
bGUgdGV4dCBjaGFyYWN0ZXJzLCB1c2UgdGhlIHJhbmdlJ3MgYm91bmRpbmcgYm94IGludGVhZC4K
ICAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3QyLm1heFkoKSkgewotICAgICAgICBMYXlvdXRS
ZWN0IGJvdW5kaW5nQm94ID0gZGF0YVJhbmdlLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCk7Ci0gICAg
ICAgIFN0cmluZyByYW5nZVN0cmluZyA9IHBsYWluVGV4dChkYXRhUmFuZ2UuZ2V0KCkpOwotICAg
ICAgICBpZiAocmFuZ2VTdHJpbmcubGVuZ3RoKCkgPiAxICYmICFib3VuZGluZ0JveC5pc0VtcHR5
KCkpCisgICAgICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBjcmVhdGVMaXZlUmFuZ2UoZGF0
YVJhbmdlKS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpOworICAgICAgICBpZiAoY2hhcmFjdGVyQ291
bnQoZGF0YVJhbmdlKSA+IDEgJiYgIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgICAg
IG91clJlY3QgPSBib3VuZGluZ0JveDsKICAgICB9CiAKQEAgLTIxMjAsOCArMjExOSw3IEBAIElu
dFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9u
UmFuZ2UoY29uc3QgVmlzaWJsZVBvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUmVmUHRy
PFJhbmdlPiBkYXRhUmFuZ2UgPSBtYWtlUmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Ci0g
ICAgcmV0dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCByZWN0MiwgZGF0YVJhbmdlKTsKKyAgICBy
ZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCAqbWFrZVJhbmdlKHJhbmdlLnN0YXJ0
LCByYW5nZS5lbmQpKTsKIH0KIAogSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpi
b3VuZHNGb3JSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbmdlKSBjb25zdApAQCAtMjE1Miw3
ICsyMTUwLDcgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JS
YW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbmdlKSBjb24KICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICByZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCByYW5nZSk7CisgICAg
cmV0dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCByZWN0MiwgKnJhbmdlKTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1Zpc2libGVQb3NpdGlvblJhbmdlSW5EaWZmZXJl
bnREb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgcmFuZ2UpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5oCmluZGV4IDc3NmI0OGY0Y2I5Yjc0NzEwM2JhY2NlOTk3ODA2OTcyZjdjNjA2MGMu
LjdlY2YwNGFhMDRlZmJiMDUyNGQ3Y2Q0OTk4ZTQxZDQ3MzFlMzQ0ZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5oCkBAIC0yOTMsOCArMjkzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIGNhbkhhdmVQbGFpblRl
eHQoKSBjb25zdDsKICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIGNsaWNrIHBvaW50IGZvciBs
aW5rcy4KICAgICBJbnRQb2ludCBsaW5rQ2xpY2tQb2ludCgpOwotICAgIC8vIFJlY3RzIHV0aWxp
dGllcy4KLSAgICBzdGF0aWMgSW50UmVjdCBib3VuZHNGb3JSZWN0cyhMYXlvdXRSZWN0IGNvbnN0
JiwgTGF5b3V0UmVjdCBjb25zdCYsIFJlZlB0cjxSYW5nZT4gY29uc3QmKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0K
aW5kZXggYTNmNTNjOGUxZWEzNjM0YzRhOGU1YjA5MmFhOGYzNzIwMGJmYmY5Mi4uNjJhYTk5NDNm
NzM0ZTI1YzY1NWQ3ZjkzZTQyY2E2MGY5MzljMDNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0KQEAgLTM2NDUsMjEgKzM2NDUsMTggQEAgLSAoTlNSYW5nZSlfY29u
dmVydFRvTlNSYW5nZTooUmFuZ2UqKXJhbmdlCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICAKLSAgICBOU1JhbmdlIHJlc3VsdCA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDAp
OwogICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVy
biBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKICAgICAKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvIGRvY3VtZW50
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICBzaXplX3QgbG9jYXRpb247Ci0gICAg
c2l6ZV90IGxlbmd0aDsKLSAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UsIGxvY2F0aW9uLCBsZW5n
dGgpOwotICAgIHJlc3VsdC5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgIHJlc3VsdC5sZW5ndGgg
PSBsZW5ndGg7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApOworCisgICAgYXV0byBkb2N1bWVudEVsZW1lbnQgPSBkb2N1
bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCisgICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAgIHJldHVybiBjaGFy
YWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZG9jdW1lbnRF
bGVtZW50KSwgKnJhbmdlKTsKIH0KIAogLSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6
KGlkKW1hcmtlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKaW5kZXggYTVkOGUzZTAxMmVl
ZGFhOWNkZjcyOTMxMDhiNDM5MjdiZTEyNGYyMi4uNjA3Yzk0N2QwZjM2MWE2YjNhMjBkM2ExNmUx
YTY1OGY4MzAxNmY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9p
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCkBAIC00Niw2ICs0
NiwxMCBAQCBzdHJ1Y3QgQm91bmRhcnlQb2ludCB7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBC
b3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogCitCb3VuZGFyeVBvaW50IG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKE5vZGUmKTsKKworLy8gSW5pbG5lIGZ1
bmN0aW9uIGRlZmluaXRpb25zLgorCiBpbmxpbmUgQm91bmRhcnlQb2ludDo6Qm91bmRhcnlQb2lu
dChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKICAgICA6IGNvbnRhaW5l
cihXVEZNb3ZlKGNvbnRhaW5lcikpCiAgICAgLCBvZmZzZXQob2Zmc2V0KQpAQCAtNzUsNCArNzks
OSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJvdW5kYXJ5UG9pbnQmIGEsIGNvbnN0
IEJvdW5kYXJ5UG9pbnQmIGIpCiAgICAgcmV0dXJuIGEuY29udGFpbmVyLnB0cigpID09IGIuY29u
dGFpbmVyLnB0cigpICYmIGEub2Zmc2V0ID09IGIub2Zmc2V0OwogfQogCitpbmxpbmUgQm91bmRh
cnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhOb2RlJiBub2RlKQor
eworICAgIHJldHVybiB7IG5vZGUsIDAgfTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmlu
ZGV4IDYwYmZjNzE0OGYzMGY2NDNkNGE1ZGY0ZmQzMTdmYjA3ZDcxOTM3NmMuLjVhODdiYWY3NmVl
MGMwMmEzZDBhOWY1OWQ4MzlmNWVlN2U4MjlkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAg
LTMxOTcsNyArMzE5Nyw3IEBAIFN0cmluZyBFbGVtZW50Ojppbm5lclRleHQoKQogICAgIGlmICgh
cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHRleHRDb250ZW50KHRydWUpOwogCi0gICAgcmV0
dXJuIHBsYWluVGV4dChyYW5nZU9mQ29udGVudHMoKnRoaXMpLnB0cigpKTsKKyAgICByZXR1cm4g
cGxhaW5UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqdGhpcykpOwogfQogCiBT
dHJpbmcgRWxlbWVudDo6b3V0ZXJUZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDQ1YzFiY2Zk
MDJjMTk4Y2Q4Yjk5MGVjYTAxZTNmMGU2YTM5M2I1ZmIuLmJlNGViNjk5NTEwNDAxODNkYmM0MjA2
ZWQwMGQ0OGJkODg0MmYwM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtOTUxLDcgKzk1MSw3IEBA
IFN0cmluZyBSYW5nZTo6dGV4dCgpIGNvbnN0CiAgICAgLy8gRklYTUU6IEFzIHdpdGggaW5uZXJU
ZXh0LCB3ZSdkIGxpa2UgdGhpcyB0byB3b3JrIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJlbmRlciBv
YmplY3RzLgogICAgIHN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsK
IAotICAgIHJldHVybiBwbGFpblRleHQodGhpcyk7CisgICAgcmV0dXJuIHBsYWluVGV4dCgqdGhp
cyk7CiB9CiAKIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jd2lkbC1SYW5n
ZS1jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQtRG9jdW1lbnRGcmFnbWVudC1ET01TdHJpbmctZnJh
Z21lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IGE0MzM4YWIyMGZjNTJmMmZm
MjdkY2I1YjcwMjA4YTdmN2IzMDYyN2IuLmRjZGQ0MWNkYzkwYTc0Mjk2YTZiZjM5ZDcwMmE5Njdl
MmYyOWUyYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtNjcsOSArNjcsMTQg
QEAgc3RhdGljIHVuc2lnbmVkIGxlbmd0aChjb25zdCBOb2RlJiBub2RlKQogICAgIHJldHVybiBu
b2RlLmNvdW50Q2hpbGROb2RlcygpOwogfQogCitzdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsg
bm9kZSwgbGVuZ3RoKG5vZGUpIH07Cit9CisKIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewotICAgIHJldHVybiB7IHsgbm9kZSwgMCB9LCB7
IG5vZGUsIGxlbmd0aChub2RlKSB9IH07CisgICAgcmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRC
ZWZvcmVOb2RlQ29udGVudHMobm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVu
dHMobm9kZSkgfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggZjcwZGE1OGUxNGZiOTRhNjA1Yjk4ZGUx
NmM3MGNlNzU2MDVlMzJiZS4uMGY5Y2RiMTY4YzM4Njg2MDRiNWNiNjk0OTY5MGY1NTliZDY5YTNk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCkBAIC0xMzAsOSArMTMwLDExIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb25BZnRlclR5
cGluZy52aXNpYmxlU3RhcnQoKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRXb3JkID0g
VmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBMZWZ0V29yZElm
T25Cb3VuZGFyeSksIGVuZE9mV29yZChzdGFydE9mU2VsZWN0aW9uLCBSaWdodFdvcmRJZk9uQm91
bmRhcnkpKTsKICAgICBpZiAoY3VycmVudFdvcmQudmlzaWJsZUVuZCgpID09IHN0YXJ0T2ZTZWxl
Y3Rpb24pIHsKLSAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KGN1cnJlbnRXb3Jk
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBpZiAod29yZFRleHQubGVuZ3Ro
KCkgPiAwICYmIGlzQW1iaWd1b3VzQm91bmRhcnlDaGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQu
bGVuZ3RoKCkgLSAxXSkpCi0gICAgICAgICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOwor
ICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSBjdXJyZW50V29yZC5maXJzdFJhbmdlKCkpIHsK
KyAgICAgICAgICAgIFN0cmluZyB3b3JkVGV4dCA9IHBsYWluVGV4dCgqd29yZFJhbmdlKTsKKyAg
ICAgICAgICAgIGlmICghd29yZFRleHQuaXNFbXB0eSgpICYmIGlzQW1iaWd1b3VzQm91bmRhcnlD
aGFyYWN0ZXIod29yZFRleHRbd29yZFRleHQubGVuZ3RoKCkgLSAxXSkpCisgICAgICAgICAgICAg
ICAgZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KICAgICBpZiAo
ZG9BcHBseUNvcnJlY3Rpb24pCiAgICAgICAgIGhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0
KGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3NpbmdBbHRlcm5hdGl2ZVRleHRBY2NlcHRlZCkp
OyAKQEAgLTE1NSw3ICsxNTcsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNo
b3coUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhYwogICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKCZyYW5nZVRvUmVwbGFjZSk7
CiAgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
b3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KCZyYW5nZVRvUmVwbGFjZSk7CisgICAgbV9vcmlnaW5h
bFRleHQgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UpOwogICAgIG1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUgPSAmcmFuZ2VUb1JlcGxhY2U7CiAgICAgbV9kZXRhaWxzID0gcmVwbGFjZW1lbnQ7CiAg
ICAgbV9pc0FjdGl2ZSA9IHRydWU7CkBAIC0yNDksNyArMjUxLDcgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgaWYgKHJlcGxhY2VtZW50U3Ry
aW5nLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX2lzQWN0aXZlID0g
dHJ1ZTsKLSAgICAgICAgbV9vcmlnaW5hbFRleHQgPSBwbGFpblRleHQobV9yYW5nZVdpdGhBbHRl
cm5hdGl2ZS5nZXQoKSk7CisgICAgICAgIG1fb3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KCptX3Jh
bmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9v
dFZpZXdSZWN0Rm9yUmFuZ2UobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSk7CiAgICAgICAg
IGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoQWx0ZXJuYXRp
dmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKQEAgLTI1OCw5
ICsyNjAsOSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQog
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxp
bmdTdWdnZXN0aW9uczogewotICAgICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwg
cGxhaW5UZXh0KG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpICE9IG1fb3JpZ2luYWxUZXh0
KQorICAgICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgcGxhaW5UZXh0KCptX3Jh
bmdlV2l0aEFsdGVybmF0aXZlKSAhPSBtX29yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dCgmVGV4dENoZWNraW5n
UGFyYWdyYXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5nZSgpKTsKKyAg
ICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdy
YXBoKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5nZSgpKTsKICAgICAgICAg
VmVjdG9yPFN0cmluZz4gc3VnZ2VzdGlvbnM7CiAgICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1
ZXNzZXNGb3JXb3JkKG1fb3JpZ2luYWxUZXh0LCBwYXJhZ3JhcGhUZXh0LCBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLCBzdWdnZXN0aW9ucyk7CiAgICAgICAgIGlmIChzdWdnZXN0aW9u
cy5pc0VtcHR5KCkpIHsKQEAgLTMwMyw3ICszMDUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVz
dQogICAgIGlmICghcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgbV9mcmFtZS5kb2N1bWVudCgpICE9
ICZyYW5nZVdpdGhBbHRlcm5hdGl2ZS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQocmFuZ2VXaXRoQWx0ZXJuYXRp
dmUpOworICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCgqcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUpOwogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgd29yZCB3ZSBhcmUgYWJvdXQgdG8g
Y29ycmVjdCBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4gdGltZXIgZmlyaW5nIGFuZCBjYWxsYmFj
ayBiZWluZyB0cmlnZ2VyZWQuCiAgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1fb3JpZ2luYWxUZXh0
KQogICAgICAgICByZXR1cm47CkBAIC00MTYsNyArNDE4LDcgQEAgVGV4dENoZWNrZXJDbGllbnQq
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRleHRDaGVja2VyKCkKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UgcmVzcG9uc2UsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIFJhbmdlKiByZXBsYWNlbWVudFJhbmdlKQordm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFNpbXBsZVJhbmdlJiByZXBsYWNlbWVudFJhbmdlKQogewogICAgIGlmIChhdXRvIGNs
aWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICBjbGllbnQtPnJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UocmVzcG9uc2UsIHJlcGxhY2VkU3RyaW5nLCBwbGFpblRleHQo
cmVwbGFjZW1lbnRSYW5nZSkpOwpAQCAtNDc1LDcgKzQ3Nyw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJl
Y3Rpb25BCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3Rl
clBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7Ci0gICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4
dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5wdHIoKSk7CisgICAgU3RyaW5nIHN0cmluZyA9IHBs
YWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CiAgICAgaWYgKHN0cmluZy5p
c0VtcHR5KCkgfHwgIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHN0cmluZ1tzdHJpbmcu
bGVuZ3RoKCkgLSAxXSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTI0LDcgKzUyNiw3IEBAIGJv
b2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQo
Y29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBu
b2RlID0gZW5kT2ZXb3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwogICAgIGF1dG8gd29yZFJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBub2RlLCBtYXJrZXIuc3Rh
cnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKLSAgICBTdHJpbmcgY3VycmVu
dFdvcmQgPSBwbGFpblRleHQod29yZFJhbmdlLnB0cigpKTsKKyAgICBTdHJpbmcgY3VycmVudFdv
cmQgPSBwbGFpblRleHQod29yZFJhbmdlLmdldCgpKTsKICAgICBpZiAoIWN1cnJlbnRXb3JkLmxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9vcmlnaW5hbFRleHQgPSBjdXJy
ZW50V29yZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmgKaW5kZXggMjcwMjFlYzc1YTExMjI3ZjcxNTA1ZThhZjkyYmUyYzQzNzRlMGYy
NS4uOTgxZDI3MDkyMDdiNmYzOTRkYjIxY2IxZmRhNTY2OWVhODBhOTc0OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTQ1
LDYgKzQ1LDcgQEAgY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0
aW9uOwogCiBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmU7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7
CiBzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BB
TkVMKQpAQCAtODgsNyArODksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQoKSBVTkxFU1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkK
ICAgICBib29sIHNob3VsZFJlbW92ZU1hcmtlcnNVcG9uRWRpdGluZygpOwogCi0gICAgdm9pZCBy
ZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIFJhbmdlKiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1Nf
RU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBs
YWNlbWVudFJhbmdlKTsgfSkKKyAgICB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
QXV0b2NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU2ltcGxlUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VE
X1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2UpOyB9
KQogICAgIHZvaWQgbWFya1JldmVyc2VkKFJhbmdlJiBjaGFuZ2VkUmFuZ2UpIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCiAgICAgdm9pZCBtYXJrQ29ycmVj
dGlvbihSYW5nZSYgcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykg
VU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9QQVJB
TShyZXBsYWNlZFN0cmluZyk7IH0pCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAw
OTNiMTJiOTY2MTNmMzdlNmU5OTlkZGZhZjhhMDJlMTYyMmRiZDFkLi43N2NjMTMxN2E2ZjQ4M2E0
YmExY2VhNjZkYTVkN2I2NWJmNjBiMzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBA
IC0yNTkyLDggKzI1OTIsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgLy8gR2V0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCi0gICAgY29uc3QgU3Ry
aW5nIG1pc3NwZWxsZWRXb3JkID0gcGxhaW5UZXh0KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCkpOwot
ICAgIFN0cmluZyBhdXRvY29ycmVjdGVkU3RyaW5nID0gdGV4dENoZWNrZXIoKS0+Z2V0QXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworICAgIFN0
cmluZyBhdXRvY29ycmVjdGVkU3RyaW5nID0gdGV4dENoZWNrZXIoKS0+Z2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQocGxhaW5UZXh0KCptaXNzcGVsbGluZ1JhbmdlKSk7
CiAKICAgICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5LCByZXBsYWNlIHRo
ZSBtaXNzcGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgogICAgIGlmICghYXV0b2NvcnJlY3RlZFN0
cmluZy5pc0VtcHR5KCkpIHsKQEAgLTI3NzMsMjEgKzI3NzIsMTkgQEAgdm9pZCBFZGl0b3I6OnJl
cGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBT
dHJpbmcmIHIKICAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb1Jl
cGxhY2UsIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKIH0KIAotc3RhdGljIHZvaWQgY29ycmVjdFNw
ZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVja2luZ1Bh
cmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnQsIENoYXJhY3RlclJhbmdlIHJlc3VsdFJhbmdlKQorc3RhdGljIHZvaWQgY29y
cmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVj
a2luZ1BhcmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnQsIENoYXJhY3RlclJhbmdlIHJlc3VsdENoYXJhY3RlclJhbmdlKQog
ewotICAgIGF1dG8mIHNjb3BlID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocGFyYWdyYXBoLnBh
cmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKTsKLQotICAgIHNpemVf
dCBwYXJhZ3JhcGhMb2NhdGlvbjsKLSAgICBzaXplX3QgcGFyYWdyYXBoTGVuZ3RoOwotICAgIFRl
eHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoJnNjb3BlLCAmcGFyYWdy
YXBoLnBhcmFncmFwaFJhbmdlKCksIHBhcmFncmFwaExvY2F0aW9uLCBwYXJhZ3JhcGhMZW5ndGgp
OworICAgIGF1dG8gc2NvcGVOb2RlID0gbWFrZVJlZihkb3duY2FzdDxDb250YWluZXJOb2RlPihw
YXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLnJvb3ROb2RlKCkpKTsK
KyAgICBhdXRvIHBhcmFncmFwaENoYXJhY3RlclJhbmdlID0gY2hhcmFjdGVyUmFuZ2UobWFrZUJv
dW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGVOb2RlKSwgcGFyYWdyYXBoLnBhcmFn
cmFwaFJhbmdlKCkpOwogCiAgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJh
bmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCktPmFwcGx5KCk7CiAKICAgICAvLyBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGggbWF5IGJlIG9ycGhhbmVkIGFmdGVyIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQgbXV0YXRlZCBET00uCiAgICAgLy8gU2VlIDxyZGFyOi8vMTAzMDUzMTU+LCBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzg5NTI2LgogCi0gICAgYXV0byBuZXdQYXJhZ3JhcGhSYW5nZSA9IHJlc29sdmVD
aGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoc2NvcGUpLCB7IHBh
cmFncmFwaExvY2F0aW9uLCBwYXJhZ3JhcGhMZW5ndGggKyByZXBsYWNlbWVudC5sZW5ndGgoKSAt
IHJlc3VsdFJhbmdlLmxlbmd0aCB9KTsKLSAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5nZSA9IHJl
c29sdmVDaGFyYWN0ZXJSYW5nZShuZXdQYXJhZ3JhcGhSYW5nZSwgeyByZXN1bHRSYW5nZS5sb2Nh
dGlvbiwgcmVwbGFjZW1lbnQubGVuZ3RoKCkgfSk7CisgICAgcGFyYWdyYXBoQ2hhcmFjdGVyUmFu
Z2UubGVuZ3RoICs9IHJlcGxhY2VtZW50Lmxlbmd0aCgpIC0gcmVzdWx0Q2hhcmFjdGVyUmFuZ2Uu
bGVuZ3RoOworICAgIGF1dG8gbmV3UGFyYWdyYXBoUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFu
Z2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHNjb3BlTm9kZSksIHBhcmFncmFwaENo
YXJhY3RlclJhbmdlKTsKKyAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5nZSA9IHJlc29sdmVDaGFy
YWN0ZXJSYW5nZShuZXdQYXJhZ3JhcGhSYW5nZSwgeyByZXN1bHRDaGFyYWN0ZXJSYW5nZS5sb2Nh
dGlvbiwgcmVwbGFjZW1lbnQubGVuZ3RoKCkgfSk7CiAgICAgcGFyYWdyYXBoID0gVGV4dENoZWNr
aW5nUGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVM
aXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1BhcmFncmFw
aFJhbmdlKSk7CiB9CiAKQEAgLTI4ODUsNyArMjg4Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5k
UmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9y
PFRlCiAgICAgICAgICAgICBpZiAoIShzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hvdWxk
Q2hlY2tGb3JDb3JyZWN0aW9uIHx8IHNob3VsZE1hcmtMaW5rKSB8fCAhZG9SZXBsYWNlbWVudCkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2Vk
U3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLnB0cigpKTsKKyAgICAgICAgICAgIFN0
cmluZyByZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5nZXQoKSk7CiAg
ICAgICAgICAgICBjb25zdCBib29sIGV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxhY2VtZW50ID0g
bV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5wcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBs
YWNlZEJ5UmVzdWx0KHJlc3VsdHNbaV0sIHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlZFN0cmluZyk7
CiAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nTWFya2Vyc1Blcm1pdFJlcGxhY2VtZW50KQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjkzMSw3ICsyOTI4LDcgQEAgdm9pZCBFZGl0b3I6
Om1hcmtBbmRSZXBsYWNlRm9yKGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBWZWN0b3I8VGUKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRUeXBlID09IFRleHRDaGVj
a2luZ1R5cGU6OkNvcnJlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byByZXBsYWNl
bWVudFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHsgcmVzdWx0TG9jYXRpb24sIHJlcGxhY2Vt
ZW50Lmxlbmd0aCgpIH0pOwotICAgICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNw
b25zZTo6QWNjZXB0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFJhbmdlLnB0cigpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OkFjY2VwdGVkLCBy
ZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRSYW5nZS5nZXQoKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2lseSBiZSB1
bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KICAgICAgICAgICAgICAgICAgICAgbV9h
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrQ29ycmVjdGlvbihyZXBsYWNlbWVudFJhbmdl
LCByZXBsYWNlZFN0cmluZyk7CkBAIC0yOTY2LDEwICsyOTYzLDEwIEBAIHZvaWQgRWRpdG9yOjpj
aGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQog
ICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGVk
UmFuZ2UoKTsKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNlbGVj
dGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQorICAgIGlmICghc2VsZWN0
aW9uIHx8ICFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0KCks
IEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25z
ZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsIHNlbGVj
dGlvbi5nZXQoKSk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCByZXBs
YWNlZFN0cmluZywgKnNlbGVjdGlvbik7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFn
cmFwaCgqc2VsZWN0aW9uKTsKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRT
dHJpbmcsIFNlbGVjdFJlcGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlv
bjo6SW5zZXJ0KTsKICAgICBhdXRvIGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShD
aGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5s
ZW5ndGgoKSkpOwpAQCAtMzIwMSw3ICszMTk4LDcgQEAgdm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgp
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKTsK
IAogICAgIC8vIFRyYW5zcG9zZSB0aGUgdHdvIGNoYXJhY3RlcnMuCi0gICAgU3RyaW5nIHRleHQg
PSBwbGFpblRleHQocmFuZ2UuZ2V0KCkpOworICAgIFN0cmluZyB0ZXh0ID0gcGxhaW5UZXh0KCpy
YW5nZSk7CiAgICAgaWYgKHRleHQubGVuZ3RoKCkgIT0gMikKICAgICAgICAgcmV0dXJuOwogICAg
IFN0cmluZyB0cmFuc3Bvc2VkID0gdGV4dC5yaWdodCgxKSArIHRleHQubGVmdCgxKTsKQEAgLTMy
MjEsNyArMzIxOCw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogCiB2b2lkIEVkaXRvcjo6
YWRkUmFuZ2VUb0tpbGxSaW5nKGNvbnN0IFJhbmdlJiByYW5nZSwgS2lsbFJpbmdJbnNlcnRpb25N
b2RlIG1vZGUpCiB7Ci0gICAgYWRkVGV4dFRvS2lsbFJpbmcocGxhaW5UZXh0KCZyYW5nZSksIG1v
ZGUpOworICAgIGFkZFRleHRUb0tpbGxSaW5nKHBsYWluVGV4dChyYW5nZSksIG1vZGUpOwogfQog
CiB2b2lkIEVkaXRvcjo6YWRkVGV4dFRvS2lsbFJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBLaWxs
UmluZ0luc2VydGlvbk1vZGUgbW9kZSkKQEAgLTM5NzUsNyArMzk3Miw3IEBAIFN0cmluZyBFZGl0
b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRl
UmFuZ2VGb3JTZWxlY3Rpb24obV9mcmFtZSk7CiAgICAgaWYgKHJhbmdlRm9yQ3VycmVudGx5VHlw
ZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQotICAgICAg
ICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcuZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nKTsK
IAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcAppbmRleCBhZDc4MjMyYThhMjA4
NjdjZDU5OTFiM2QyZjgwYjNmNGQ0YjZmNjBlLi41NDYwYjc1Y2FiZDIzZGQ1NWFkOTM5ZDAxNGI1
ODI5MmVkOWQ0ZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VS
YW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCkBAIC02Myw4ICs2Myw3IEBAIHZvaWQgUmVwbGFj
ZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIWZyYW1lKCkuc2VsZWN0
aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFN0cmluZyBwcmV2aW91c1RleHQgPSBwbGFpblRleHQobV9yYW5nZVRvQmVSZXBsYWNl
ZC5nZXQoKSk7Ci0gICAgaWYgKCFwcmV2aW91c1RleHQubGVuZ3RoKCkpCisgICAgaWYgKCFjaGFy
YWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVSZXBsYWNlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNldFNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShzZWxl
Y3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CmluZGV4IGQ4NjZlODU1MjhiMmIxYzBhMzVhNzJmYzM1MGFmYzg3OGRjNzgwYTcuLjUyNzhkYjk1
YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xOTEsNyArMTkxLDcg
QEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudEZyYWdt
ZW50KiBmcmFnbWVudCwgY29uc3QgVmlzaWIKICAgICB9CiAgICAgCiAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZSho
b2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgU3RyaW5nIHRleHQgPSBwbGFp
blRleHQocmFuZ2UuZ2V0KCksIHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihUZXh0
SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCB8IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2li
aWxpdHkpKTsKKyAgICBTdHJpbmcgdGV4dCA9IHJhbmdlID8gcGxhaW5UZXh0KCpyYW5nZSwgc3Rh
dGljX2Nhc3Q8VGV4dEl0ZXJhdG9yQmVoYXZpb3I+KFRleHRJdGVyYXRvckVtaXRzT3JpZ2luYWxU
ZXh0IHwgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkpIDogZW1wdHlTdHJpbmco
KTsKIAogICAgIHJlbW92ZUludGVyY2hhbmdlTm9kZXMoaG9sZGVyLmdldCgpKTsKICAgICByZW1v
dmVVbnJlbmRlcmVkTm9kZXMoaG9sZGVyLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDUxMzMxNDUzOTNk
MTczYTU3OWQwYTUwYzBiZmYxYzhlMzVhZDgzNDcuLjVhODE2ZjNhZjFiZWU1MmVhMDg2NjI0NTY3
ZWQ3YzIxMjcxN2NhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcApAQCAtOTksNyArOTksNyBAQCBib29sIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogCiB2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIG1fY29ycmVjdGVkID0gcGxhaW5UZXh0
KG1fcmFuZ2VUb0JlQ29ycmVjdGVkLnB0cigpKTsKKyAgICBtX2NvcnJlY3RlZCA9IHBsYWluVGV4
dChtX3JhbmdlVG9CZUNvcnJlY3RlZC5nZXQoKSk7CiAgICAgaWYgKCFtX2NvcnJlY3RlZC5sZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAKaW5kZXggOTliOGUzMWRmMGRjYzYyYWYxZmFlMDlkMzE2YWJmMDk5
MGI4YzkyNS4uZGJjZTlkYTEzMjIxODQ4ZWUwYjFmNmQ4OGYyZWZlMDZiYjdjOWZmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMTg3LDcg
KzE4Nyw3IEBAIFJhbmdlJiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNldEFzUmFuZ2UoKSBj
b25zdAogU3RyaW5nVmlldyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnRleHQoKSBjb25zdAogewog
ICAgIGlmIChtX3RleHQuaXNOdWxsKCkpCi0gICAgICAgIG1fdGV4dCA9IHBsYWluVGV4dCgmcGFy
YWdyYXBoUmFuZ2UoKSk7CisgICAgICAgIG1fdGV4dCA9IHBsYWluVGV4dChwYXJhZ3JhcGhSYW5n
ZSgpKTsKICAgICByZXR1cm4gbV90ZXh0OyAKIH0KIApAQCAtMzM3LDcgKzMzNyw3IEBAIFN0cmlu
ZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJv
b2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgICAgICBsYXN0SXRlcmF0aW9uID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0IDwgY3VycmVudEVuZE9mZnNl
dCkgewotICAgICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZyA9IHBsYWluVGV4dChwYXJh
Z3JhcGhSYW5nZS5wdHIoKSk7CisgICAgICAgICAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nID0g
cGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLmdldCgpKTsKICAgICAgICAgICAgIGlmIChwYXJhZ3Jh
cGhTdHJpbmcubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBmb3VuZEdyYW1t
YXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB1aW50NjRfdCBzcGVsbGluZ0xvY2F0aW9uID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCAyMTg2NGM4ZjRm
YzA1Y2IzOWExOTcwNGQyNTQ0MDNlN2VhNjgxN2RiLi5iNDNlMmNiNjE4ZDBjNTBjZDM0MTUyY2Vi
OGVlMTc0ZGM1ZWMwNDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
aCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5o
IgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRl
ICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMTQz
NSwyMiArMTQzNCwyMCBAQCB2b2lkIENoYXJhY3Rlckl0ZXJhdG9yOjphZHZhbmNlKGludCBjb3Vu
dCkKICAgICBtX3J1bk9mZnNldCA9IDA7CiB9CiAKLXN0YXRpYyBSZWY8UmFuZ2U+IGNoYXJhY3Rl
clN1YnJhbmdlKERvY3VtZW50JiBkb2N1bWVudCwgQ2hhcmFjdGVySXRlcmF0b3ImIGl0LCBpbnQg
b2Zmc2V0LCBpbnQgbGVuZ3RoKQorc3RhdGljIFNpbXBsZVJhbmdlIGNoYXJhY3RlclN1YnJhbmdl
KERvY3VtZW50JiBkb2N1bWVudCwgQ2hhcmFjdGVySXRlcmF0b3ImIGl0LCBpbnQgb2Zmc2V0LCBp
bnQgbGVuZ3RoKQogewogICAgIGl0LmFkdmFuY2Uob2Zmc2V0KTsKICAgICBpZiAoaXQuYXRFbmQo
KSkKLSAgICAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQpOworICAgICAgICByZXR1
cm4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KTsKIAogICAgIGF1dG8g
c3RhcnQgPSBpdC5yYW5nZSgpLnN0YXJ0OwogCiAgICAgaWYgKGxlbmd0aCA+IDEpCiAgICAgICAg
IGl0LmFkdmFuY2UobGVuZ3RoIC0gMSk7CiAgICAgaWYgKGl0LmF0RW5kKCkpCi0gICAgICAgIHJl
dHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KTsKKyAgICAgICAgcmV0dXJuIG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCk7CiAKLSAgICBhdXRvIGVuZCA9IGl0LnJhbmdl
KCkuZW5kOwotCi0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShTaW1wbGVSYW5nZSB7IHN0YXJ0
LCBlbmQgfSk7CisgICAgcmV0dXJuIHsgc3RhcnQsIGl0LnJhbmdlKCkuZW5kIH07CiB9CiAKIEJh
Y2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yOjpCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvcihjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCkBAIC0yNDE1LDMxICsyNDEyLDYgQEAgU2ltcGxlUmFuZ2Ug
cmVzb2x2ZUNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgQ2hhcmFjdGVy
UmFuZ2UgcmFuZ2UKICAgICByZXR1cm4gcmVzdWx0UmFuZ2U7CiB9CiAKLUJvdW5kYXJ5UG9pbnQg
cmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgdWludDY0
X3QgbG9jYXRpb24sIFRleHRJdGVyYXRvckJlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVy
biByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIHsgbG9jYXRpb24sIDAgfSwgYmVoYXZpb3Ip
LnN0YXJ0OwotfQotCi1ib29sIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9t
UmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZSwgc2l6ZV90JiBsb2NhdGlvbiwg
c2l6ZV90JiBsZW5ndGgpCi17Ci0gICAgbG9jYXRpb24gPSBub3RGb3VuZDsKLSAgICBsZW5ndGgg
PSAwOwotCi0gICAgLy8gVGhlIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIG9ubHkg
Z2V0cyBjYWxsZWQgd2l0aCByYW5nZXMgdGhhdAotICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2
ZW4gYXJlYSBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gcm9vdC4gVGhpcyBpcyBkb25lCi0gICAg
Ly8gYmVjYXVzZSBvZiB0ZXh0IGZpZWxkcyBhbmQgdGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9z
ZSBpcyBub3QgZGlyZWN0bHkKLSAgICAvLyBpbiB0aGUgZG9jdW1lbnQgRE9NLCBzbyBlbnN1cmUg
dGhhdCB0aGUgcmFuZ2UgZG9lcyBub3QgY3Jvc3MgYSBib3VuZGFyeQotICAgIC8vIG9mIG9uZSBv
ZiB0aG9zZS4KLSAgICBpZiAoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFy
YW5nZS0+c3RhcnRDb250YWluZXIoKS5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoJnJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAh
cmFuZ2UtPmVuZENvbnRhaW5lcigpLmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3BlLCAw
IH0sIHsgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpIH0gfSk7
Ci0gICAgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJhbmdlLT5l
bmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpIH0gfSkgLSBsb2NhdGlvbjsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogLy8gLS0tLS0tLS0KIAogYm9vbCBoYXNBbnlQbGFpblRleHQoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKQEAg
LTI0ODEsMjEgKzI0NTMsNiBAQCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgZGVmYXVsdEJlaGF2aW9yLAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLVN0cmluZyBwbGFpblRleHQoY29uc3QgUmFuZ2UqIHJhbmdlLCBUZXh0SXRl
cmF0b3JCZWhhdmlvciBkZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nKQotewot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVy
biBwbGFpblRleHQoKnJhbmdlLCBkZWZhdWx0QmVoYXZpb3IsIGlzRGlzcGxheVN0cmluZyk7Ci19
Ci0KLVN0cmluZyBwbGFpblRleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvckZvclRlc3Rpbmco
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9y
IChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRz
SXRlcmF0b3IuYWR2YW5jZSgpKQotICAgICAgICByZXN1bHQuaW5zZXJ0KGJhY2t3YXJkc0l0ZXJh
dG9yLnRleHQoKS50b1N0cmluZygpLCAwKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBTdHJp
bmcgcGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgZGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0
cmluZykKIHsKICAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlLCBkZWZhdWx0QmVoYXZpb3IsIGlz
RGlzcGxheVN0cmluZykucmVwbGFjZShub0JyZWFrU3BhY2UsICcgJyk7CkBAIC0yNTI4LDcgKzI0
ODUsNyBAQCBzdGF0aWMgdm9pZCBmaW5kUGxhaW5UZXh0TWF0Y2hlcyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LAogICAgICAgICB9CiAgICAgfQogCi0gICAg
Q2hhcmFjdGVySXRlcmF0b3IgZmluZEl0ZXJhdG9yKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGZp
bmRJdGVyYXRvck9wdGlvbnMob3B0aW9ucykpOworICAgIENoYXJhY3Rlckl0ZXJhdG9yIGZpbmRJ
dGVyYXRvcihyYW5nZSwgZmluZEl0ZXJhdG9yT3B0aW9ucyhvcHRpb25zKSk7CiAgICAgd2hpbGUg
KCFmaW5kSXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICBmaW5kSXRlcmF0b3IuYWR2YW5jZShi
dWZmZXIuYXBwZW5kKGZpbmRJdGVyYXRvci50ZXh0KCkpKTsKICAgICAgICAgd2hpbGUgKDEpIHsK
QEAgLTI1NTMsNyArMjUxMCw3IEBAIHN0YXRpYyBTaW1wbGVSYW5nZSByYW5nZUZvck1hdGNoKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucywKIHsKICAgICBpZiAo
IW1hdGNoTGVuZ3RoKQogICAgICAgICByZXR1cm4gY29sbGFwc2VkVG9Cb3VuZGFyeShyYW5nZSwg
c2VhcmNoRm9yd2FyZCk7Ci0gICAgQ2hhcmFjdGVySXRlcmF0b3IgcmFuZ2VDb21wdXRlSXRlcmF0
b3IoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgZmluZEl0ZXJhdG9yT3B0aW9ucyhvcHRpb25zKSk7
CisgICAgQ2hhcmFjdGVySXRlcmF0b3IgcmFuZ2VDb21wdXRlSXRlcmF0b3IocmFuZ2UsIGZpbmRJ
dGVyYXRvck9wdGlvbnMob3B0aW9ucykpOwogICAgIHJldHVybiBjaGFyYWN0ZXJTdWJyYW5nZShy
YW5nZS5zdGFydC5kb2N1bWVudCgpLCByYW5nZUNvbXB1dGVJdGVyYXRvciwgbWF0Y2hTdGFydCwg
bWF0Y2hMZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRl
eCBlMTYwMjg3NWIyZjc1ZWQzMWU3NTAxY2FhMzAwYjRjOGY2MzliZjJlLi4zOWFlMTA2MDA5MmVl
MDg2OWFlNjYwMzM5YjBhOWE4ZTMxMmY1MGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmgKQEAgLTM0LDIzICszNCwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyVGV4dEZyYWdtZW50OwogCi0vLyBGSVhNRTogRGVsZXRl
IHRoaXMgb3ZlcmxvYWQgYWZ0ZXIgbW92aW5nIGFsbCB0aGUgY2FsbGVycyB0byB0aGUgU2ltcGxl
UmFuZ2UgdmVyc2lvbi4KLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHQoY29uc3QgUmFu
Z2UqLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwg
Ym9vbCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7CisvLyBDaGFyYWN0ZXIgcmFuZ2VzIGJhc2Vk
IG9uIGNoYXJhY3RlcnMgZnJvbSB0aGUgdGV4dCBpdGVyYXRvci4KK1dFQkNPUkVfRVhQT1JUIHVp
bnQ2NF90IGNoYXJhY3RlckNvdW50KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOworQ2hhcmFjdGVyUmFuZ2UgY2hh
cmFjdGVyUmFuZ2UoY29uc3QgQm91bmRhcnlQb2ludCYgc3RhcnQsIGNvbnN0IFNpbXBsZVJhbmdl
JiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwor
Q2hhcmFjdGVyUmFuZ2UgY2hhcmFjdGVyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCBj
b25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVm
YXVsdEJlaGF2aW9yKTsKK0JvdW5kYXJ5UG9pbnQgcmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKGNv
bnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgdWludDY0X3QsIFRleHRJdGVyYXRvckJlaGF2aW9yID0g
VGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKK1dFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdl
IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIENoYXJhY3Rl
clJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlv
cik7CiAKKy8vIFRleHQgZnJvbSB0aGUgdGV4dCBpdGVyYXRvci4KIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBwbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxz
ZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGhhc0FueVBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5n
ZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsK
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoY29u
c3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1
bHRCZWhhdmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7Ci1XRUJDT1JFX0VYUE9S
VCBTdHJpbmcgcGxhaW5UZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3JGb3JUZXN0aW5nKGNv
bnN0IFNpbXBsZVJhbmdlJik7CiAKKy8vIEZpbmQgd2l0aGluIHRoZSBkb2N1bWVudCwgYmFzZWQg
b24gdGhlIHRleHQgZnJvbSB0aGUgdGV4dCBpdGVyYXRvci4KIFNpbXBsZVJhbmdlIGZpbmRQbGFp
blRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7CiBX
RUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChjb25zdCBTaW1w
bGVSYW5nZSYsIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCk7Ci1XRUJDT1JF
X0VYUE9SVCBib29sIGhhc0FueVBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVy
YXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIGJvb2wgY29udGFp
bnNQbGFpblRleHQoY29uc3QgU3RyaW5nJiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiwgRmluZE9w
dGlvbnMpOyAvLyBMZXRzIHVzIHVzZSB0aGUgc2VhcmNoIGFsZ29yaXRobSBvbiBhIHN0cmluZy4K
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmb2xkUXVvdGVNYXJrcyhjb25zdCBTdHJpbmcmKTsKIAot
Ly8gRklYTUU6IE1vdmUgdGhpcyBzb21ld2hlcmUgZWxzZSBpbiB0aGUgZWRpdGluZyBkaXJlY3Rv
cnkuIEl0IGRvZXNuJ3QgYmVsb25nIGhlcmUuCisvLyBGSVhNRTogTW92ZSB0aGlzIHNvbWV3aGVy
ZSBlbHNlIGluIHRoZSBlZGl0aW5nIGRpcmVjdG9yeS4gSXQgZG9lc24ndCBiZWxvbmcgaW4gdGhl
IGhlYWRlciB3aXRoIFRleHRJdGVyYXRvci4KIGJvb2wgaXNSZW5kZXJlclJlcGxhY2VkRWxlbWVu
dChSZW5kZXJPYmplY3QqKTsKIAogLy8gRklYTUU6IE1vdmUgZWFjaCBpdGVyYXRvciBjbGFzcyBp
bnRvIGEgc2VwYXJhdGUgaGVhZGVyIGZpbGUuCkBAIC0xMDMsOSArMTA3LDYgQEAgcHVibGljOgog
ICAgIGNvbnN0IFRleHRJdGVyYXRvckNvcHlhYmxlVGV4dCYgY29weWFibGVUZXh0KCkgY29uc3Qg
eyBBU1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV9jb3B5YWJsZVRleHQ7IH0KICAgICB2b2lkIGFw
cGVuZFRleHRUb1N0cmluZ0J1aWxkZXIoU3RyaW5nQnVpbGRlciYgYnVpbGRlcikgY29uc3QgeyBj
b3B5YWJsZVRleHQoKS5hcHBlbmRUb1N0cmluZ0J1aWxkZXIoYnVpbGRlcik7IH0KIAotICAgIC8v
IEZJWE1FOiBNb3ZlIHRoaXMgdG8gU2ltcGxlUmFuZ2UgYW5kIENoYXJhY3RlclJhbmdlIGFuZCBt
b3ZlIG91dCBvZiB0aGlzIGNsYXNzIHRvIHRoZSB0b3AgbGV2ZWwuCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGJvb2wgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUs
IGNvbnN0IFJhbmdlKiwgc2l6ZV90JiBsb2NhdGlvbiwgc2l6ZV90JiBsZW5ndGgpOwotCiBwcml2
YXRlOgogICAgIHZvaWQgaW5pdCgpOwogICAgIHZvaWQgZXhpdE5vZGUoTm9kZSopOwpAQCAtMTcz
LDEwICsxNzQsMTAgQEAgcHJpdmF0ZToKIC8vIGNodW5rcyBzbyBhcyB0byBvcHRpbWl6ZSBmb3Ig
cGVyZm9ybWFuY2Ugb2YgdGhlIGl0ZXJhdGlvbi4KIGNsYXNzIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBs
aWNpdCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJik7
CiAKICAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fcG9zaXRpb25Ob2RlOyB9Ci0g
ICAgdm9pZCBhZHZhbmNlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZHZhbmNlKCk7CiAK
ICAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdCB7IEFTU0VSVCghYXRFbmQoKSk7IHJldHVybiBt
X3RleHQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSByYW5nZSgpIGNvbnN0OwpA
QCAtMjg4LDkgKzI4OSwxOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRMb29rQWhlYWQgeyB0
cnVlIH07CiB9OwogCitpbmxpbmUgQ2hhcmFjdGVyUmFuZ2UgY2hhcmFjdGVyUmFuZ2UoY29uc3Qg
Qm91bmRhcnlQb2ludCYgc3RhcnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJh
dG9yQmVoYXZpb3IgYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIHsgY2hhcmFjdGVyQ291bnQoeyBz
dGFydCwgcmFuZ2Uuc3RhcnQgfSwgYmVoYXZpb3IpLCBjaGFyYWN0ZXJDb3VudChyYW5nZSwgYmVo
YXZpb3IpIH07Cit9CiAKLVdFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IGNoYXJhY3RlckNvdW50KGNv
bnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZh
dWx0QmVoYXZpb3IpOwotV0VCQ09SRV9FWFBPUlQgQm91bmRhcnlQb2ludCByZXNvbHZlQ2hhcmFj
dGVyTG9jYXRpb24oY29uc3QgU2ltcGxlUmFuZ2UmLCB1aW50NjRfdCwgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwotV0VCQ09SRV9FWFBPUlQgU2lt
cGxlUmFuZ2UgcmVzb2x2ZUNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgQ2hhcmFj
dGVyUmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2
aW9yKTsKK2lubGluZSBDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVS
YW5nZSYgc2NvcGUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZp
b3IgYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKHNjb3BlLnN0YXJ0LCBy
YW5nZSwgYmVoYXZpb3IpOworfQorCitpbmxpbmUgQm91bmRhcnlQb2ludCByZXNvbHZlQ2hhcmFj
dGVyTG9jYXRpb24oY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCB1aW50NjRfdCBsb2NhdGlvbiwg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIHJlc29sdmVDaGFy
YWN0ZXJSYW5nZShzY29wZSwgeyBsb2NhdGlvbiwgMCB9LCBiZWhhdmlvcikuc3RhcnQ7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCmluZGV4IGM0ZDgwZmI1NTA4ZjFlMjZjNjg5MTg1MzgyYWVmYzBjZmRiOWEyMjYuLjVh
NmM1M2MwMzgzNzBjZmIwYTM4YWIwZGE0ZjU2MThmYmFiYjI1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNDY1LDcgKzQ2NSw3IEBAIHZvaWQgVHlwaW5n
Q29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1h
bmRUeXBlKQogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShwMSwg
cDIpOwogICAgICAgICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3JkOwogICAgICAgICAg
ICAgaWYgKHJhbmdlICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0
IHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVCcmVhayB8fCBjb21t
YW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IgfHwgY29t
bWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90
ZWRDb250ZW50KSkKLSAgICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWlu
VGV4dChyYW5nZS5nZXQoKSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICAgICAgc3Ry
aXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQoKnJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKTsK
ICAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1Rv
V29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3VzV29yZC5pc0VtcHR5
KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Oklu
c2VydFRleHQpCiAgICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5zdGFydEFsdGVybmF0aXZlVGV4
dFVJVGltZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVu
aXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCBk
NmY3MTc4OWU0ZTFmOTlmOGM3NDU1MzBmMjE1NzdmNDg5ODY4NTkyLi4zMjUzYjZmYjBiYWIwZWEw
NDc0ZGNiM2VjNzFjOTQyMGI1YTk3MDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuY3BwCkBAIC0xOTM0LDcgKzE5MzQsNyBAQCB2b2lkIGNoYXJhY3RlcnNBcm91bmRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hhcjMyJiBvbmVBZnRlcgog
ICAgIH0KIAogICAgIGlmIChzdGFydFBvc2l0aW9uICE9IGVuZFBvc2l0aW9uKSB7Ci0gICAgICAg
IFN0cmluZyBjaGFyYWN0ZXJTdHJpbmcgPSBwbGFpblRleHQoUmFuZ2U6OmNyZWF0ZShwb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlv
biwgZW5kUG9zaXRpb24pLnB0cigpKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKKyAgICAg
ICAgU3RyaW5nIGNoYXJhY3RlclN0cmluZyA9IHBsYWluVGV4dCh7ICptYWtlQm91bmRhcnlQb2lu
dChzdGFydFBvc2l0aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9KS5yZXBs
YWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKICAgICAgICAgZm9yIChpbnQgaSA9IGNoYXJhY3RlclN0
cmluZy5sZW5ndGgoKSAtIDEsIGluZGV4ID0gMDsgaSA+PSAwICYmIGluZGV4IDwgbWF4Q2hhcmFj
dGVyczsgLS1pKSB7CiAgICAgICAgICAgICBpZiAoIWluZGV4ICYmIG5leHRQb3NpdGlvbi5pc051
bGwoKSkKICAgICAgICAgICAgICAgICBpbmRleCsrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDk5ZTYxNTljY2E2NzY5NTlhOTgwYTQxMjk1
NmI4YzVkM2YzMzY2MjYuLjU1N2JmZWNhZWEwMjMyODVhZWEwOTBkNGYwNTcxZDdkYThkMzNhYmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAg
LTcwLDEwICs3MCwxMCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgUmV0
YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRS
ZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRh
UmFuZ2UpCiB7Ci0gICAgU3RyaW5nIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29u
dGV4dFJhbmdlLmdldCgpKTsKICAgICBhdXRvIHN0YXJ0ID0gY29udGV4dFJhbmdlLT5zdGFydFBv
c2l0aW9uKCk7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gbmlsOworICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0gcGxh
aW5UZXh0KCpjb250ZXh0UmFuZ2UpOwogICAgIENGSW5kZXggaGl0TG9jYXRpb24gPSBjaGFyYWN0
ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChw
b3NpdGlvbikgfSk7CiAKICAgICBhdXRvIHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0
ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCA0N2FkNDdhNzNkZGMz
ZTcyNTFmYjFmMzA1NWJiMTIwY2M5ZTFmMDk0Li5hMjNkYzQwN2E5ZWMwNjU1ZmI2N2Y3YWM0ZTA1
Nzk3YTgxN2Y5ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rp
Y3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0
aW9uYXJ5TG9va3VwLm1tCkBAIC0yODYsNyArMjg2LDcgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFu
Z2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24o
Y28KICAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rp
b25TdGFydCwgc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQpOwogCiAgICAgUmVmUHRyPFJhbmdlPiBm
dWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVu
ZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdl
LmdldCgpKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3Rl
clJhbmdlKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gYWRvcHROUyhbYWxsb2NSVkl0
ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VU
b1Bhc3NdKS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKIAogICAgIHJldHVybiB7IGNyZWF0ZUxpdmVS
YW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0
UmFuZ2UpKSwgbmlsIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5oCmluZGV4IGFhYjQ5YzQ3NmE1OTY0NDE1ZTk5YjMxZTI0ZWZiN2I3NDNmNzZkNWYuLjU4
MDUzMDkyNWQ0YmM0MmYwOGI4NmVmYzkwMWVkOWM5YzZhY2FmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCkBAIC0zNSwxMiArMzUsMTAgQEAgY2xh
c3MgVmlzaWJsZVNlbGVjdGlvbjsKIAogZW51bSBjbGFzcyBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1
dGVkU3RyaW5nIHsgWWVzLCBObyB9OwogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dHJpbmdGcm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBOU0RpY3Rpb25hcnkq
KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKK05TQXR0cmlidXRlZFN0cmluZyAqYXR0
cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworV0VC
Q09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0
YXJ0QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKK1dFQkNPUkVfRVhQ
T1JUIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYp
OwogCi0vLyBGb3IgdGVzdGluZyBwdXJwb3NlIG9ubHkKLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZChjb25zdCBQb3Np
dGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVz
ID0gbnVsbHB0cik7Ci0KLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmli
dXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmli
dXRlcyA9IG51bGxwdHIpOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogV0VCQ09SRV9FWFBP
UlQgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShS
YW5nZSYsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgPSBJbmNsdWRlSW1hZ2VzSW5B
dHRyaWJ1dGVkU3RyaW5nOjpZZXMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KaW5kZXggYTU0M2FjMmQxYWUyYWMzOGY4Y2QyN2ZiMjU3
ZmUyZDE2MjQwZGNlZi4uNDkyMTMzYWVlZTQyNjExNjRkY2VlZDhjOTg2MzYxOTViZDEyMDgwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAt
MjgwLDcgKzI4MCw3IEBAIHB1YmxpYzoKICAgICBIVE1MQ29udmVydGVyKGNvbnN0IFBvc2l0aW9u
JiwgY29uc3QgUG9zaXRpb24mKTsKICAgICB+SFRNTENvbnZlcnRlcigpOwogCi0gICAgTlNBdHRy
aWJ1dGVkU3RyaW5nKiBjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9
IG51bGxwdHIpOworICAgIE5TQXR0cmlidXRlZFN0cmluZyogY29udmVydCgpOwogCiBwcml2YXRl
OgogICAgIFBvc2l0aW9uIG1fc3RhcnQ7CkBAIC0zOTksNyArMzk5LDcgQEAgSFRNTENvbnZlcnRl
cjo6fkhUTUxDb252ZXJ0ZXIoKQogICAgIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJlbGVhc2Vd
OwogfQogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQoTlNEaWN0
aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQorTlNBdHRyaWJ1dGVkU3RyaW5nICpIVE1MQ29u
dmVydGVyOjpjb252ZXJ0KCkKIHsKICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhtX3N0YXJ0LCBt
X2VuZCkgPiAwKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtNDIwLDkgKzQyMCw2IEBAIE5TQXR0
cmlidXRlZFN0cmluZyAqSFRNTENvbnZlcnRlcjo6Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1
bWVudEF0dHJpYnV0ZXMpCiAgICAgaWYgKF9kb21SYW5nZVN0YXJ0SW5kZXggPiAwICYmIF9kb21S
YW5nZVN0YXJ0SW5kZXggPD0gW19hdHRyU3RyIGxlbmd0aF0pCiAgICAgICAgIFtfYXR0clN0ciBk
ZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBfZG9tUmFuZ2VTdGFydEluZGV4
KV07CiAKLSAgICBpZiAoZG9jdW1lbnRBdHRyaWJ1dGVzKQotICAgICAgICAqZG9jdW1lbnRBdHRy
aWJ1dGVzID0gW1tfZG9jdW1lbnRBdHRycyByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQogICAgIHJl
dHVybiBbW19hdHRyU3RyIHJldGFpbl0gYXV0b3JlbGVhc2VdOwogfQogCkBAIC0yMzcwLDE5ICsy
MzY3LDE5IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNGaWxlV3JhcHBlcj4gZmlsZVdyYXBwZXJGb3JF
bGVtZW50KEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IC8vIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgbW9yZSBIVE1MIGZlYXR1cmVzIHRoYW4gdGhlIGVk
aXRpbmcgdmFyaWFudCBiZWxvdywgc3VjaCBhcyB0YWJsZXMuCi1OU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkqKiBk
b2N1bWVudEF0dHJpYnV0ZXMpCitOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdG
cm9tUmFuZ2UoUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFu
Z2Uuc3RhcnRQb3NpdGlvbigpLCByYW5nZS5lbmRQb3NpdGlvbigpIH0uY29udmVydChkb2N1bWVu
dEF0dHJpYnV0ZXMpOworICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFuZ2Uuc3RhcnRQb3Np
dGlvbigpLCByYW5nZS5lbmRQb3NpdGlvbigpIH0uY29udmVydCgpOwogfQogCi1OU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQorTlNB
dHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmdC
ZXR3ZWVuU3RhcnRBbmRFbmQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5lbmQoKSwgZG9j
dW1lbnRBdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFy
dEFuZEVuZChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmVuZCgpKTsKIH0KIAotTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgTlNEaWN0aW9uYXJ5KiogZG9jdW1l
bnRBdHRyaWJ1dGVzKQorTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2Vl
blN0YXJ0QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkK
IHsKLSAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7IHN0YXJ0LCBlbmQgfS5jb252ZXJ0KGRvY3Vt
ZW50QXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEhUTUxDb252ZXJ0ZXIgeyBzdGFydCwgZW5kIH0u
Y29udmVydCgpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCBj
MGUzZjU1ZTZlMzY0NGFlMTllZTVhMzk2ZjY0YmFkZTY2ZWM1MWM3Li5jNDE0ZTA3ZmQ1YmNkY2Rk
ZDUxN2MwYzMxZGMzMmViMzFiMDQzYjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KQEAgLTg3LDE3ICs4NywxNiBAQCBz
dGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3Vw
OjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9u
LnZpc2libGVFbmQoKTsKIAogICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2Ug
dGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgYXV0byBwYXJhZ3Jh
cGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwotICAgIGlmIChwYXJhZ3JhcGhT
dGFydC5pc051bGwoKSB8fCBwYXJhZ3JhcGhFbmQuaXNOdWxsKCkpCisgICAgYXV0byBwYXJhZ3Jh
cGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3Rh
cnQpKTsKKyAgICBhdXRvIHBhcmFncmFwaEVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFy
YWdyYXBoKHNlbGVjdGlvbkVuZCkpOworICAgIGlmICghcGFyYWdyYXBoU3RhcnQgfHwgIXBhcmFn
cmFwaEVuZCkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiAKLSAgICBhdXRvIGxl
bmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2lu
dChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSk7
Ci0gICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50KHsgKm1h
a2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVj
dGlvbkVuZCkgfSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0
aFRvU2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50KTsKKyAgICBhdXRvIHNl
bGVjdGlvblJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9u
U3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9OworICAgIGF1dG8gcGFy
YWdyYXBoUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpwYXJhZ3JhcGhTdGFydCwgKnBhcmFncmFwaEVu
ZCB9OwogCiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwotICAgIHRva2VuUmFuZ2Uo
cGxhaW5UZXh0KG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKS5nZXQoKSks
IHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CisgICAgdG9rZW5SYW5nZShwbGFpblRleHQocGFyYWdy
YXBoUmFuZ2UpLCBjaGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGhSYW5nZSwgc2VsZWN0aW9uUmFuZ2Up
LCAmb3B0aW9ucyk7CiAKICAgICByZXR1cm4geyBzZWxlY3RlZFJhbmdlLCBvcHRpb25zIH07CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggNDJmOWJjYTZlOTU4Y2VkYmE1NjQ2NmQ5
YTM0NzdkZGU3NzY5ZGY0YS4uZDExM2RhYTYxYWZiZmI4MjkyMGUzNmJlMDI4MDdjNzc2ZDE1NDY5
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNDM1LDcgKzQzNSwxMiBAQCBTdHJp
bmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVkVGV4dFJlc3BlY3RpbmdSYW5nZShj
b25zdCBUZXh0JiB0ZXh0KQogICAgICAgICAgICAgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JCZWhh
dmVzQXNJZk5vZGVzRm9sbG93aW5nOwogICAgIH0KIAotICAgIHJldHVybiBwbGFpblRleHQoUmFu
Z2U6OmNyZWF0ZSh0ZXh0LmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpLnB0cigpLCBiZWhhdmlvcik7
CisgICAgYXV0byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpOworICAg
IGF1dG8gZW5kQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7CisgICAgaWYgKCFz
dGFydEJvdW5kYXJ5IHx8ICFlbmRCb3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CisKKyAgICByZXR1cm4gcGxhaW5UZXh0KHsgV1RGTW92ZSgqc3RhcnRCb3VuZGFyeSksIFdU
Rk1vdmUoKmVuZEJvdW5kYXJ5KSB9LCBiZWhhdmlvcik7CiB9CiAKIFN0cmluZyBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6dGV4dENvbnRlbnRSZXNwZWN0aW5nUmFuZ2UoY29uc3QgVGV4dCYgdGV4
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IDY4
MWNhNzgwMDE5MTk3OTdiYzQ5ZDBlODQ2OTdlOTk5OWZkZWJkOTkuLjVjMjk3Y2E2ZjZhMGQ3MDVl
ZDgyNzgwYjQyZGE3NGVkMzZhZmUzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcApAQCAtMzE4LDcgKzMxOCw4IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxl
bWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQmCiAgICAgLy8gSWYgdGhlIHRleHQgZmllbGQgaGFzIG5vIGZvY3VzLCB3ZSBkb24ndCBuZWVk
IHRvIHRha2UgYWNjb3VudCBvZiB0aGUKICAgICAvLyBzZWxlY3Rpb24gbGVuZ3RoLiBUaGUgc2Vs
ZWN0aW9uIGlzIHRoZSBzb3VyY2Ugb2YgdGV4dCBkcmFnLWFuZC1kcm9wIGluCiAgICAgLy8gdGhh
dCBjYXNlLCBhbmQgbm90aGluZyBpbiB0aGUgdGV4dCBmaWVsZCB3aWxsIGJlIHJlbW92ZWQuCi0g
ICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gZm9jdXNlZCgpID8gY29tcHV0ZUxlbmd0aEZv
clN1Ym1pc3Npb24ocGxhaW5UZXh0KGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpIDogMDsKKyAgICBhdXRvIHNlbGVj
dGlvblJhbmdlID0gZm9jdXNlZCgpID8gZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpIDogbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBz
ZWxlY3Rpb25MZW5ndGggPSBzZWxlY3Rpb25SYW5nZSA/IGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNz
aW9uKHBsYWluVGV4dCgqc2VsZWN0aW9uUmFuZ2UpKSA6IDA7CiAgICAgQVNTRVJUKGN1cnJlbnRM
ZW5ndGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gY3Vy
cmVudExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKICAgICB1bnNpZ25lZCBhcHBlbmRhYmxlTGVu
Z3RoID0gdW5zaWduZWRNYXhMZW5ndGggPiBiYXNlTGVuZ3RoID8gdW5zaWduZWRNYXhMZW5ndGgg
LSBiYXNlTGVuZ3RoIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4
dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250
cm9sbGVyLmNwcAppbmRleCA3MmIxMzA2N2QxYmMzNmIzZGJjODkxNGFkZjAxODhjNDEzNzFjNzYx
Li4yYzMyYjJmNWI2ZDRhZWRhMmU4ZWNlNTQzNDQ2NTAwYWRiMTI4ZjdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC00MzEsNyArNDMxLDcg
QEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENv
bnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0ZWRS
YW5nZS0+c2VsZWN0Tm9kZSgqZWxlbWVudCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9jbGllbnQu
c3BlYWsocGxhaW5UZXh0KHNlbGVjdGVkUmFuZ2UuZ2V0KCkpKTsKKyAgICAgICAgbV9jbGllbnQu
c3BlYWsocGxhaW5UZXh0KCpzZWxlY3RlZFJhbmdlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2luZzoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmNwcAppbmRleCA0NzVlNjRiYWRmNTAwNDk1MmEyZjYzZmQ2NjcxZDUxMzJh
MzQ0MWRiLi4xYTBjZGY3ZGFlYTg2NTNmN2ZhZjA2OWNjNGZmOGM0ODE1MTBlNmY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC00NDgsNyArNDQ4LDEwIEBAIFN0cmluZyBE
T01TZWxlY3Rpb246OnRvU3RyaW5nKCkKICAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBw
bGFpblRleHQoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZSk7CiB9CiAKIE5vZGUq
IERPTVNlbGVjdGlvbjo6c2hhZG93QWRqdXN0ZWROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
bikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDlmMGE0MDZkZTQxNDkxODNmODUxMTYxMjRi
M2VkNWMxOWIxZWYyZWIuLmEwM2IwMDJkYjlkY2QzYjQzOWZjZmYyYTA1ODY3ZmRlNjhjMTVmNDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtODgyLDIyICs4ODIsMTAgQEAgdWludDMyX3QgUGFnZTo6
cmVwbGFjZVJhbmdlc1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxSZWY8UmFuZ2U+PiYgcmFuZ2VzVG9S
ZXBsYWNlLAogCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJhbmdlc1RvUmVwbGFjZSkgewogICAg
ICAgICBhdXRvIGhpZ2hlc3RSb290ID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVSb290KHJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8fCBoaWdo
ZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KHJhbmdlLT5lbmRQb3NpdGlvbigpKSkKKyAg
ICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVS
b290KHJhbmdlLT5lbmRQb3NpdGlvbigpKSB8fCAhaGlnaGVzdFJvb3QtPmRvY3VtZW50KCkuZnJh
bWUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gZnJhbWUgPSBtYWtl
UmVmUHRyKGhpZ2hlc3RSb290LT5kb2N1bWVudCgpLmZyYW1lKCkpOwotICAgICAgICBpZiAoIWZy
YW1lKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc2l6ZV90IHJlcGxhY2VtZW50
TG9jYXRpb24gPSBub3RGb3VuZDsKLSAgICAgICAgc2l6ZV90IHJlcGxhY2VtZW50TGVuZ3RoID0g
MDsKLSAgICAgICAgaWYgKCFUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJh
bmdlKGhpZ2hlc3RSb290LmdldCgpLCByYW5nZS5wdHIoKSwgcmVwbGFjZW1lbnRMb2NhdGlvbiwg
cmVwbGFjZW1lbnRMZW5ndGgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYg
KHJlcGxhY2VtZW50TG9jYXRpb24gPT0gbm90Rm91bmQgfHwgIXJlcGxhY2VtZW50TGVuZ3RoKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMuYXBwZW5k
KHsgV1RGTW92ZShoaWdoZXN0Um9vdCksIHsgcmVwbGFjZW1lbnRMb2NhdGlvbiwgcmVwbGFjZW1l
bnRMZW5ndGggfSB9KTsKKyAgICAgICAgYXV0byByZXBsYWNlbWVudENoYXJhY3RlclJhbmdlID0g
Y2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpoaWdoZXN0Um9v
dCksIHJhbmdlKTsKKyAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMuYXBwZW5kKHsgV1RGTW92ZSho
aWdoZXN0Um9vdCksIHJlcGxhY2VtZW50Q2hhcmFjdGVyUmFuZ2UgfSk7CiAgICAgfQogCiAgICAg
cmVwbGFjZVJhbmdlcygqdGhpcywgcmVwbGFjZW1lbnRSYW5nZXMsIHJlcGxhY2VtZW50VGV4dCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDZlZTRmYjQ0NTVkYzY5MGQ0ZWI5
OWM0M2EyYjkzODEyZjE0MTcyZGIuLjA2Mjg1YTUxODRlNWE0YzAwYTMxYmE2MzM0MjNkYjVkYmM5
ODgwOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC03MzAsNyArNzMwLDcg
QEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QK
IAogICAgIC8vIFRoZXJlIGFyZSBubyBwaHJhc2VzIHdpdGggYWx0ZXJuYXRpdmVzLCBzbyB0aGVy
ZSBpcyBqdXN0IG9uZSBpbnRlcnByZXRhdGlvbi4KICAgICBpZiAobWFya2Vyc0luUm9vdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6cGxhaW5UZXh0
KHJhbmdlT2ZSb290Q29udGVudHMucHRyKCkpXTsKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFy
cmF5V2l0aE9iamVjdDpwbGFpblRleHQocmFuZ2VPZlJvb3RDb250ZW50cyldOwogCiAgICAgLy8g
VGhlIG51bWJlciBvZiBpbnRlcnByZXRhdGlvbnMgd2lsbCBiZSBpMSAqIGkyICogLi4uICogaU4s
IHdoZXJlIGlYIGlzIHRoZSBudW1iZXIgb2YgaW50ZXJwcmV0YXRpb25zIGZvciB0aGUgWHRoIHBo
cmFzZSB3aXRoIGFsdGVybmF0aXZlcy4KICAgICBzaXplX3QgaW50ZXJwcmV0YXRpb25zQ291bnQg
PSAxOwpAQCAtNzUyLDcgKzc1Miw3IEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNG
b3JDdXJyZW50Um9vdCgpIGNvbnN0CiAgICAgICAgICAgICAvLyBGaXJzdCwgYWRkIHRleHQgdGhh
dCBwcmVjZWRlIHRoZSBtYXJrZXIuCiAgICAgICAgICAgICBpZiAocHJlY2VkaW5nVGV4dFN0YXJ0
UG9zaXRpb24gIT0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+c3Rh
cnRPZmZzZXQoKSkpIHsKICAgICAgICAgICAgICAgICBhdXRvIHByZWNlZGluZ1RleHRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50KCksIHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uLCBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpKSk7
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByZWNlZGluZ1RleHQgPSBwbGFpblRleHQocHJlY2Vk
aW5nVGV4dFJhbmdlLnB0cigpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcHJlY2VkaW5nVGV4
dCA9IHBsYWluVGV4dChwcmVjZWRpbmdUZXh0UmFuZ2UpOwogICAgICAgICAgICAgICAgIGlmICgh
cHJlY2VkaW5nVGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRv
JiBpbnRlcnByZXRhdGlvbiA6IGludGVycHJldGF0aW9ucykKICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbiwgcHJlY2VkaW5nVGV4dCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKaW5kZXggMTM0ZWEzMWZjZThmOTg4OTExMmNjMTRjMDdmZDE3NGRi
ZTViY2U1YS4uOWM0NjQwOGY4NGJlZmM2NTI0MWU1NmE1MTA4YmE0ZTI3MzU1OTM4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjA1MSwxOCArMjA1MSwxMiBAQCBSZWZQ
dHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCYg
c2NvcGUsIHVuc2lnbmVkIHJhbgogCiB1bnNpZ25lZCBJbnRlcm5hbHM6OmxvY2F0aW9uRnJvbVJh
bmdlKEVsZW1lbnQmIHNjb3BlLCBjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgc2l6ZV90IGxv
Y2F0aW9uID0gMDsKLSAgICBzaXplX3QgdW51c2VkTGVuZ3RoID0gMDsKLSAgICBUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKCZzY29wZSwgJnJhbmdlLCBsb2NhdGlv
biwgdW51c2VkTGVuZ3RoKTsKLSAgICByZXR1cm4gbG9jYXRpb247CisgICAgcmV0dXJuIGNsYW1w
VG88dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNv
bnRlbnRzKHNjb3BlKSwgcmFuZ2UpLmxvY2F0aW9uKTsKIH0KIAogdW5zaWduZWQgSW50ZXJuYWxz
OjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJhbmdlJiByYW5nZSkKIHsK
LSAgICBzaXplX3QgdW51c2VkTG9jYXRpb24gPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSAwOwot
ICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoJnNjb3BlLCAm
cmFuZ2UsIHVudXNlZExvY2F0aW9uLCBsZW5ndGgpOwotICAgIHJldHVybiBsZW5ndGg7CisgICAg
cmV0dXJuIGNsYW1wVG88dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50
QmVmb3JlTm9kZUNvbnRlbnRzKHNjb3BlKSwgcmFuZ2UpLmxlbmd0aCk7CiB9CiAKIFN0cmluZyBJ
bnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlJiByYW5nZSkKQEAgLTIwNzIsNyArMjA2
NiwxMCBAQCBTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChjb25zdCBSYW5nZSYgcmFuZ2Up
CiAKIFN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0
b3IoY29uc3QgUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBwbGFpblRleHRVc2luZ0JhY2t3
YXJkc1RleHRJdGVyYXRvckZvclRlc3RpbmcocmFuZ2UpOworICAgIFN0cmluZyByZXN1bHQ7Cisg
ICAgZm9yIChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9y
KHJhbmdlKTsgIWJhY2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFk
dmFuY2UoKSkKKyAgICAgICAgcmVzdWx0Lmluc2VydChiYWNrd2FyZHNJdGVyYXRvci50ZXh0KCku
dG9TdHJpbmcoKSwgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUmVmPFJhbmdlPiBJbnRl
cm5hbHM6OnN1YnJhbmdlKFJhbmdlJiByYW5nZSwgdW5zaWduZWQgcmFuZ2VMb2NhdGlvbiwgdW5z
aWduZWQgcmFuZ2VMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0
aW5nUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcAppbmRl
eCA3NmVmNDcyMmQ3NTFjZjZlNTlhYWI5ZWRmYWI2NjU2ZTcwNGYxNmVhLi44NmFjNTUzZTZmY2Mw
ODIyYWQ0MThjNmEwZDNmOGNmOWM0YTk5Yjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9FZGl0aW5nUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdS
YW5nZS5jcHAKQEAgLTY1LDE2ICs2NSwxNSBAQCBFZGl0aW5nUmFuZ2UgRWRpdGluZ1JhbmdlOjpm
cm9tUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpSYW5nZQogewog
ICAgIEFTU0VSVChlZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPT0gRWRpdGluZ1JhbmdlSXNSZWxh
dGl2ZVRvOjpFZGl0YWJsZVJvb3QpOwogCi0gICAgc2l6ZV90IGxvY2F0aW9uID0gMDsKLSAgICBz
aXplX3QgbGVuZ3RoID0gMDsKLSAgICBpZiAoIXJhbmdlIHx8ICFXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpLCByYW5nZSwgbG9jYXRpb24sIGxlbmd0
aCkpCisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIEVkaXRpbmdS
YW5nZSBlZGl0aW5nUmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7Ci0gICAgaWYgKCFlZGl0aW5nUmFu
Z2UuaXNWYWxpZCgpKQorICAgIGF1dG8qIGVsZW1lbnQgPSBmcmFtZS5zZWxlY3Rpb24oKS5yb290
RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gZWRpdGluZ1JhbmdlOworICAgIGF1dG8g
cmVsYXRpdmVSYW5nZSA9IGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9k
ZUNvbnRlbnRzKCplbGVtZW50KSwgKnJhbmdlKTsKKyAgICByZXR1cm4gRWRpdGluZ1JhbmdlKHJl
bGF0aXZlUmFuZ2UubG9jYXRpb24sIHJlbGF0aXZlUmFuZ2UubGVuZ3RoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXR0
cmlidXRlZFN0cmluZy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJp
bmcuaAppbmRleCA4NTMwZjgxOGJhYzFmNTliOWZlY2I2YTI2NzUzMDEyMjJhMmEzZjQxLi4wMmQ2
YjAxMDI2MWFkMzA4YThhZTY3YTIzZGEyOGVmZjYzYWI3MzY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvQXR0cmlidXRlZFN0cmluZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLmgKQEAgLTMzLDkgKzMzLDEwIEBAIE9CSkNfQ0xB
U1MgTlNBdHRyaWJ1dGVkU3RyaW5nOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBBdHRy
aWJ1dGVkU3RyaW5nIHsKLSAgICBBdHRyaWJ1dGVkU3RyaW5nKCkKLSAgICB7Ci0gICAgfQorICAg
IFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZzsKKyAgICBSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5PiBkb2N1bWVudEF0dHJpYnV0ZXM7CisKKyAgICBBdHRyaWJ1dGVkU3RyaW5nKCkg
PSBkZWZhdWx0OwogCiAjaWYgZGVmaW5lZChfX09CSkNfXykKICAgICBBdHRyaWJ1dGVkU3RyaW5n
KE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZywgTlNEaWN0aW9uYXJ5ICpkb2N1
bWVudEF0dHJpYnV0ZXMgPSBuaWwpCkBAIC00NCwyMiArNDUsMjYgQEAgc3RydWN0IEF0dHJpYnV0
ZWRTdHJpbmcgewogICAgIHsKICAgICB9CiAKKyAgICBBdHRyaWJ1dGVkU3RyaW5nKFJldGFpblB0
cjxOU0F0dHJpYnV0ZWRTdHJpbmc+JiYgYXR0cmlidXRlZFN0cmluZywgUmV0YWluUHRyPE5TRGlj
dGlvbmFyeT4mJiBkb2N1bWVudEF0dHJpYnV0ZXMgPSB7IH0pCisgICAgICAgIDogc3RyaW5nKFdU
Rk1vdmUoYXR0cmlidXRlZFN0cmluZykpCisgICAgICAgICwgZG9jdW1lbnRBdHRyaWJ1dGVzKFdU
Rk1vdmUoZG9jdW1lbnRBdHRyaWJ1dGVzKSkKKyAgICB7CisgICAgfQorCiAgICAgb3BlcmF0b3Ig
TlNBdHRyaWJ1dGVkU3RyaW5nICooKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0cmlu
Zy5nZXQoKTsKICAgICB9CiAjZW5kaWYKLQotICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJp
bmc+IHN0cmluZzsKLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBkb2N1bWVudEF0dHJpYnV0
ZXM7CiB9OwogCiB9CiAKIG5hbWVzcGFjZSBJUEMgeworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFdlYktpdDo6QXR0cmlidXRlZFN0cmluZz4gewogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgY29uc3QgV2ViS2l0OjpBdHRyaWJ1dGVkU3RyaW5nJik7CiAgICAgc3Rh
dGljIE9wdGlvbmFsPFdlYktpdDo6QXR0cmlidXRlZFN0cmluZz4gZGVjb2RlKERlY29kZXImKTsK
IH07Ci19CiAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdHRyaWJ1
dGVkU3RyaW5nLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcu
bW0KaW5kZXggM2M0NzAwNTY4MzhkMTJiYWJhN2VhNWVhZjgxNDdhNWY3Yzg4NzVlNy4uMGYyZTky
ZGI2NTRlNDA4YzdhMDJmMzZiZTQ1Njc4YjIzOWE3MDM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0KKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0KQEAgLTQ1LDcgKzQ1LDcgQEAgT3B0aW9uYWw8
V2ViS2l0OjpBdHRyaWJ1dGVkU3RyaW5nPiBBcmd1bWVudENvZGVyPFdlYktpdDo6QXR0cmlidXRl
ZFN0cmluZz46OmRlY28KICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBkb2N1bWVudEF0dHJp
YnV0ZXM7CiAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBkb2N1bWVudEF0dHJpYnV0ZXMp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVybiBXZWJLaXQ6OkF0dHJp
YnV0ZWRTdHJpbmcgeyBhdHRyaWJ1dGVkU3RyaW5nLmdldCgpLCBkb2N1bWVudEF0dHJpYnV0ZXMu
Z2V0KCkgfTsKKyAgICByZXR1cm4geyB7IFdURk1vdmUoYXR0cmlidXRlZFN0cmluZyksIFdURk1v
dmUoZG9jdW1lbnRBdHRyaWJ1dGVzKSB9IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQppbmRleCAwZDE5ZTRiZTUxOGY5YmQ4YTJkOTRh
OTUzMjMwMDk3YTVjNmVjZjM4Li5kNzg2ZjExZDM5M2M3ZTRiNzg4YmNlYzM2N2VhZTA5NmY3Zjc1
MmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1t
CkBAIC00MzYsMTggKzQzNiwxMyBAQCB2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cgogdm9pZCBUZXh0
Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFNwZWxsRG9jdW1lbnRU
YWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYg
Z3JhbW1hckRldGFpbCkKIHsKICAgICBhdXRvIGNvcnJlY3Rpb25zID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgZm9yIChhdXRvJiBndWVzcyA6IGdyYW1tYXJE
ZXRhaWwuZ3Vlc3NlcykgewotICAgICAgICBOU1N0cmluZyAqZ3Vlc3NOU1N0cmluZyA9IGd1ZXNz
OwotICAgICAgICBbY29ycmVjdGlvbnMgYWRkT2JqZWN0Omd1ZXNzTlNTdHJpbmddOwotICAgIH0K
LQotICAgIE5TU3RyaW5nICpkZXNjcmlwdGlvbk5TU3RyaW5nID0gZ3JhbW1hckRldGFpbC51c2Vy
RGVzY3JpcHRpb247CisgICAgZm9yIChhdXRvJiBndWVzcyA6IGdyYW1tYXJEZXRhaWwuZ3Vlc3Nl
cykKKyAgICAgICAgW2NvcnJlY3Rpb25zIGFkZE9iamVjdDpndWVzc107CiAgICAgTlNEaWN0aW9u
YXJ5ICpkZXRhaWwgPSBAewogICAgICAgICBOU0dyYW1tYXJSYW5nZSA6IFtOU1ZhbHVlIHZhbHVl
V2l0aFJhbmdlOmdyYW1tYXJEZXRhaWwucmFuZ2VdLAotICAgICAgICBOU0dyYW1tYXJVc2VyRGVz
Y3JpcHRpb24gOiBkZXNjcmlwdGlvbk5TU3RyaW5nLAorICAgICAgICBOU0dyYW1tYXJVc2VyRGVz
Y3JpcHRpb24gOiBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiwKICAgICAgICAgTlNHcmFt
bWFyQ29ycmVjdGlvbnMgOiBjb3JyZWN0aW9ucy5nZXQoKSwKICAgICB9OwotCiAgICAgW1tOU1Nw
ZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHVwZGF0ZVNwZWxsaW5nUGFuZWxXaXRoR3Jh
bW1hclN0cmluZzpiYWRHcmFtbWFyUGhyYXNlIGRldGFpbDpkZXRhaWxdOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdD
b250cm9sbGVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29h
L1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oCmluZGV4IDA3NDEzY2ZjOTM5ODVmZTVkOTll
OTQwNjhmMTYxNWY0YjI0NGM2MTQuLmY0OGYwYjY3MWFkOGZiZjE0OTI1OGI2OGFjNzc3OWIwZDU3
NTQ3MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29h
L1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oCkBAIC01Miw3
ICs1Miw3IEBAIHB1YmxpYzoKICAgICBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkoV2ViUGFn
ZSYpOwogICAgIH5UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkoKTsKIAotICAgIEF0dHJpYnV0
ZWRTdHJpbmcgYW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucyhjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mKTsKKyAg
ICBzdGF0aWMgQXR0cmlidXRlZFN0cmluZyBhbm5vdGF0ZWRTdWJzdHJpbmdCZXR3ZWVuUG9zaXRp
b25zKGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFdlYkNvcmU6OlZpc2li
bGVQb3NpdGlvbiYpOwogCiBwcml2YXRlOgogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCkBA
IC02NSw4ICs2NSw4IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8UmFuZ2VBbmRPZmZzZXQ+IHJh
bmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qg
bGVuZ3RoKTsKIAogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCi0gICAgdm9pZCByZXBsYWNlUmVs
YXRpdmVUb1NlbGVjdGlvbihBdHRyaWJ1dGVkU3RyaW5nLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNl
dCwgdWludDY0X3QgbGVuZ3RoLCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24s
IHVpbnQ2NF90IHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5ndGgpOwotICAgIHZvaWQgcmVtb3ZlQW5u
b3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubm90YXRpb25OYW1lLCBpbnQ2NF90
IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVuZ3RoKTsKKyAgICB2b2lkIHJlcGxhY2VSZWxh
dGl2ZVRvU2VsZWN0aW9uKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmLCBpbnQ2NF90IHNlbGVjdGlv
bk9mZnNldCwgdWludDY0X3QgbGVuZ3RoLCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TG9j
YXRpb24sIHVpbnQ2NF90IHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5ndGgpOworICAgIHZvaWQgcmVt
b3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBhbm5vdGF0aW9u
TmFtZSwgaW50NjRfdCBzZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCk7CiAKICAgICBX
ZWJQYWdlJiBtX3BhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5
Lm1tCmluZGV4IDY1OWQ1YWZmMzFkMzkxM2VmNDgxNGIyYTYyMTBhMWViNzg2YzVkMmIuLjllYzQ2
MjRiNmY3MDgyZTEzOWMyMGU2M2MxMDIxODkzY2Q5NmQ4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94
eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hl
Y2tpbmdDb250cm9sbGVyUHJveHkubW0KQEAgLTcyLDI4ICs3MiwyNSBAQCBzdGF0aWMgT3B0aW9u
U2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiByZWxldmFudE1hcmtlclR5cGVzKCkKIAog
T3B0aW9uYWw8VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpSYW5nZUFuZE9mZnNldD4gVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyYW5nZUFuZE9mZnNldFJlbGF0aXZlVG9TZWxlY3Rp
b24oaW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCkKIHsKLSAgICBGcmFtZSYgZnJhbWUg
PSBtX3BhZ2UuY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7Ci0gICAgYXV0byYgZnJhbWVTZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBh
dXRvJiBmcmFtZVNlbGVjdGlvbiA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKTsKICAgICBhdXRvJiBzZWxlY3Rpb24g
PSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgp
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byByb290ID0gZnJhbWVT
ZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYg
KCFyb290KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byByYW5nZSA9
IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIHJhbmdlLT5jb2xsYXBzZSh0cnVl
KTsKLQotICAgIHNpemVfdCBzZWxlY3Rpb25Mb2NhdGlvbjsKLSAgICBzaXplX3Qgc2VsZWN0aW9u
TGVuZ3RoOwotICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uo
cm9vdCwgcmFuZ2UuZ2V0KCksIHNlbGVjdGlvbkxvY2F0aW9uLCBzZWxlY3Rpb25MZW5ndGgpOwot
ICAgIHNlbGVjdGlvbkxvY2F0aW9uICs9IG9mZnNldDsKKyAgICBhdXRvIHNlbGVjdGlvbkxpdmVS
YW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9u
TGl2ZVJhbmdlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHsg
eyBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cygqcm9vdCksIHsgc2VsZWN0aW9uTG9jYXRpb24sIGxlbmd0aCB9KSksIHNl
bGVjdGlvbkxvY2F0aW9uIH0gfTsKKyAgICBhdXRvIHNjb3BlID0gbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKCpyb290KTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gU2ltcGxlUmFu
Z2UgeyAqc2VsZWN0aW9uTGl2ZVJhbmdlIH07CisgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgdW5k
ZXJmbG93IGlmIG9mZnNldCBpcyBhIG5lZ2F0aXZlIG51bWJlciBoaWdoZXIgdGhhbiB0aGUgY2hh
cmFjdGVyIGNvdW50PworICAgIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0TG9jYXRpb24gPSBjaGFy
YWN0ZXJDb3VudCh7IHNjb3BlLnN0YXJ0LCBzZWxlY3Rpb25SYW5nZS5zdGFydCB9KSArIG9mZnNl
dDsKKyAgICByZXR1cm4geyB7IGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uo
c2NvcGUsIHsgc2VsZWN0aW9uU3RhcnRMb2NhdGlvbiwgbGVuZ3RoIH0pKSwgc2VsZWN0aW9uU3Rh
cnRMb2NhdGlvbiB9IH07CiB9CiAKLXZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojpy
ZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihBdHRyaWJ1dGVkU3RyaW5nIGFubm90YXRlZFN0cmlu
ZywgaW50NjRfdCBzZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgcmVs
YXRpdmVSZXBsYWNlbWVudExvY2F0aW9uLCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TGVu
Z3RoKQordm9pZCBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlcGxhY2VSZWxhdGl2ZVRv
U2VsZWN0aW9uKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmIGFubm90YXRlZFN0cmluZywgaW50NjRf
dCBzZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgcmVsYXRpdmVSZXBs
YWNlbWVudExvY2F0aW9uLCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TGVuZ3RoKQogewog
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24g
PSBmcmFtZS5zZWxlY3Rpb24oKTsKQEAgLTE1NCw3ICsxNTEsNyBAQCB2b2lkIFRleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24oQXR0cmlidXRlZFN0
cmluZyBhbgogICAgIH1dOwogfQogCi12b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6
cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubm90YXRpb24sIGlu
dDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgpCit2b2lkIFRleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29u
c3QgU3RyaW5nJiBhbm5vdGF0aW9uLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3Qg
bGVuZ3RoKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHJhbmdlQW5kT2Zmc2V0
ID0gcmFuZ2VBbmRPZmZzZXRSZWxhdGl2ZVRvU2VsZWN0aW9uKHNlbGVjdGlvbk9mZnNldCwgbGVu
Z3RoKTsKQEAgLTE2NCw3ICsxNjEsNyBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94
eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubgogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgcmVtb3ZlQ29yZVNwZWxsaW5n
TWFya2VycyA9IChhbm5vdGF0aW9uID09IFN0cmluZyhAIk5TU3BlbGxpbmdTdGF0ZSIpKTsKKyAg
ICBib29sIHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMgPSBhbm5vdGF0aW9uID09ICJOU1NwZWxs
aW5nU3RhdGUiOwogICAgIGZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJz
KCpyYW5nZSwgWyZdIChEb2N1bWVudE1hcmtlciogbWFya2VyKSB7CiAgICAgICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdE
YXRhPihtYXJrZXItPmRhdGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzUs
NTEgKzE3MiwzMCBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5u
b3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubgogCiBBdHRyaWJ1dGVkU3RyaW5n
IFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBv
c2l0aW9ucyhjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlUG9zaXRpb24mIGVuZCkKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRdKTsKLSAgICBOU1VJbnRlZ2VyIHN0cmluZ0xlbmd0aCA9IDA7Ci0KLSAg
ICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kb2N1
bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBh
dXRvIGVudGlyZVJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0LCBlbmQpOwotICAgIGlmICghZW50aXJl
UmFuZ2UpCisgICAgYXV0byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQp
OworICAgIGF1dG8gZW5kQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQpOworICAgIGlm
ICghc3RhcnRCb3VuZGFyeSB8fCAhZW5kQm91bmRhcnkpCiAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgYXV0byBlbnRpcmVSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnN0YXJ0Qm91bmRhcnksICplbmRC
b3VuZGFyeSB9OwogCi0gICAgUmVmUHRyPE5vZGU+IGNvbW1vbkFuY2VzdG9yID0gZW50aXJlUmFu
Z2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgc2l6ZV90IGVudGlyZVJhbmdlTG9j
YXRpb247Ci0gICAgc2l6ZV90IGVudGlyZVJhbmdlTGVuZ3RoOwotICAgIFRleHRJdGVyYXRvcjo6
Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoY29tbW9uQW5jZXN0b3IuZ2V0KCksIGVudGly
ZVJhbmdlLmdldCgpLCBlbnRpcmVSYW5nZUxvY2F0aW9uLCBlbnRpcmVSYW5nZUxlbmd0aCk7Cisg
ICAgYXV0byBzdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdF0pOwogCi0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoeyAqbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSksICptYWtlQm91bmRhcnlQb2ludChlbmQuZGVlcEVx
dWl2YWxlbnQoKSkgfSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKLSAgICAgICAgaW50
IGN1cnJlbnRUZXh0TGVuZ3RoID0gaXQudGV4dCgpLmxlbmd0aCgpOwotICAgICAgICBpZiAoIWN1
cnJlbnRUZXh0TGVuZ3RoKQorICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KGVudGlyZVJhbmdlKTsg
IWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgICAgICBpZiAoIWl0LnRleHQoKS5sZW5n
dGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFtzdHJpbmcgYXBwZW5kQXR0
cmlidXRlZFN0cmluZzpbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
Oml0LnRleHQoKS5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCldIGF1dG9yZWxl
YXNlXV07Ci0KLSAgICAgICAgU2ltcGxlUmFuZ2UgY3VycmVudFRleHRSYW5nZSA9IGl0LnJhbmdl
KCk7Ci0gICAgICAgIGF1dG8gbWFya2VycyA9IGRvY3VtZW50LT5tYXJrZXJzKCkubWFya2Vyc0lu
UmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGN1cnJlbnRUZXh0UmFuZ2UpLCBEb2N1bWVudE1hcmtlcjo6
UGxhdGZvcm1UZXh0Q2hlY2tpbmcpOworICAgICAgICBbc3RyaW5nIGFwcGVuZEF0dHJpYnV0ZWRT
dHJpbmc6YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
aXQudGV4dCgpLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKV0pLmdldCgpXTsK
KyAgICAgICAgYXV0byByYW5nZSA9IGl0LnJhbmdlKCk7CisgICAgICAgIGF1dG8gbWFya2VycyA9
IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKGNyZWF0ZUxp
dmVSYW5nZShyYW5nZSksIERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZyk7CiAg
ICAgICAgIGZvciAoY29uc3QgYXV0byogbWFya2VyIDogbWFya2VycykgewogICAgICAgICAgICAg
aWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRD
aGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgYXV0byYgdGV4dENoZWNraW5nRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50
TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKTsKLSAgICAg
ICAgICAgIGF1dG8gc3VicmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY3VycmVudFRleHRS
YW5nZSwgeyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtYXJr
ZXItPnN0YXJ0T2Zmc2V0KCkgfSk7Ci0KLSAgICAgICAgICAgIHNpemVfdCBzdWJyYW5nZUxvY2F0
aW9uOwotICAgICAgICAgICAgc2l6ZV90IHN1YnJhbmdlTGVuZ3RoOwotICAgICAgICAgICAgVGV4
dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShjb21tb25BbmNlc3Rvci5n
ZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKHN1YnJhbmdlKS5wdHIoKSwgc3VicmFuZ2VMb2NhdGlvbiwg
c3VicmFuZ2VMZW5ndGgpOwotCi0gICAgICAgICAgICBBU1NFUlQoc3VicmFuZ2VMb2NhdGlvbiA+
IGVudGlyZVJhbmdlTG9jYXRpb24pOwotICAgICAgICAgICAgQVNTRVJUKHN1YnJhbmdlTG9jYXRp
b24gKyBzdWJyYW5nZUxlbmd0aCA8IGVudGlyZVJhbmdlTGVuZ3RoKTsKLSAgICAgICAgICAgIFtz
dHJpbmcgYWRkQXR0cmlidXRlOnRleHRDaGVja2luZ0RhdGEua2V5IHZhbHVlOnRleHRDaGVja2lu
Z0RhdGEudmFsdWUgcmFuZ2U6TlNNYWtlUmFuZ2Uoc3VicmFuZ2VMb2NhdGlvbiAtIGVudGlyZVJh
bmdlTG9jYXRpb24sIHN1YnJhbmdlTGVuZ3RoKV07CisgICAgICAgICAgICBhdXRvJiBkYXRhID0g
V1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2Vy
LT5kYXRhKCkpOworICAgICAgICAgICAgYXV0byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShyYW5nZSwgeyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkg
LSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgfSk7CisgICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJp
YnV0ZTpkYXRhLmtleSB2YWx1ZTpkYXRhLnZhbHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKGVudGly
ZVJhbmdlLCBzdWJyYW5nZSldOwogICAgICAgICB9Ci0KLSAgICAgICAgc3RyaW5nTGVuZ3RoICs9
IGN1cnJlbnRUZXh0TGVuZ3RoOwogICAgIH0KIAotICAgIHJldHVybiBzdHJpbmcuYXV0b3JlbGVh
c2UoKTsKKyAgICByZXR1cm4gUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4geyBXVEZNb3Zl
KHN0cmluZykgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXgg
MGMxNzIwZmM5YzI5ZTRmNzE4MTA2MjYyZjQyOWFlZGNlODdhY2I3Mi4uOWQ0ZGNiYjFkMTg2NDYz
NjQ0ZWE0MGU2MjNkMWE0MGZhYjE2OGVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMjM4LDEzICsyMzgs
NyBAQCB2b2lkIFdlYlBhZ2U6OmdldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoY29uc3QgQXR0cmlidQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgTlNEaWN0aW9uYXJ5KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBuaWw7Ci0KLSAgICBBdHRyaWJ1
dGVkU3RyaW5nIHJlc3VsdDsKLSAgICByZXN1bHQuc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zy
b21SYW5nZShyYW5nZU9mQ29udGVudHMoKmRvY3VtZW50RWxlbWVudCksICZkb2N1bWVudEF0dHJp
YnV0ZXMpOwotICAgIHJlc3VsdC5kb2N1bWVudEF0dHJpYnV0ZXMgPSBkb2N1bWVudEF0dHJpYnV0
ZXM7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcih7IHJlc3VsdCB9KTsKKyAgICBjb21wbGV0aW9u
SGFuZGxlcih7IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1
bWVudEVsZW1lbnQpKSB9KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRSZW1vdGVPYmplY3RSZWdp
c3RyeShXZWJSZW1vdGVPYmplY3RSZWdpc3RyeSogcmVnaXN0cnkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggNGE1MTNiNjAxNzgxNDJmYjNk
Mzc0MmM2MmRmOGNhNTBmN2MwMTg1ZS4uNDY4YzM1OWMxZjU1NmNjYTMxZTI1YmE1ODM1NzBiYzIz
YjU4YWM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1l
LmNwcApAQCAtMzYyLDIwICszNjIsMTUgQEAgU3RyaW5nIFdlYkZyYW1lOjpjb250ZW50c0FzU3Ry
aW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAK
LSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2NvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBh
dXRvIGRvY3VtZW50ID0gbV9jb3JlRnJhbWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVu
dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGRvY3Vt
ZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvIGRvY3Vt
ZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAoIWRvY3Vt
ZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGRvY3VtZW50LT5jcmVhdGVSYW5nZSgpOwotCi0gICAgaWYgKHJhbmdlLT5zZWxl
Y3ROb2RlKCpkb2N1bWVudEVsZW1lbnQpLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1
cm4gcGxhaW5UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZG9jdW1lbnRFbGVt
ZW50KSk7CiB9CiAKIFN0cmluZyBXZWJGcmFtZTo6c2VsZWN0aW9uQXNTdHJpbmcoKSBjb25zdCAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFn
ZUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdl
R0xpYi5jcHAKaW5kZXggNGU4NmYwNTVhOGJlMzMzMzMwZTNlMjEzZTE4NzQ4ZDhhYjNjMjFiYS4u
MTZiNTM4Y2Y5OWI0NTFjMjU1YTg0MTBlNmZjOWJkNmI4MzY2NGMzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKQEAg
LTExMywxMSArMTEzLDExIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShG
cmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgICAgICBhdXRv
IGNsb25lZFJhbmdlID0gc3Vycm91bmRpbmdSYW5nZS0+Y2xvbmVSYW5nZSgpOwogICAgICAgICAg
ICAgc3Vycm91bmRpbmdSYW5nZS0+c2V0RW5kKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSk7CiAgICAgICAgICAgICBjbG9uZWRSYW5nZS0+c2V0U3RhcnQoY29tcG9zaXRpb25SYW5n
ZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGlu
Z0NvbnRleHQgPSBwbGFpblRleHQoc3Vycm91bmRpbmdSYW5nZS5nZXQoKSkgKyBwbGFpblRleHQo
Y2xvbmVkUmFuZ2UucHRyKCkpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRp
bmdDb250ZXh0ID0gcGxhaW5UZXh0KCpzdXJyb3VuZGluZ1JhbmdlKSArIHBsYWluVGV4dChjbG9u
ZWRSYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRD
dXJzb3JQb3NpdGlvbiA9IGNoYXJhY3RlckNvdW50KCpzdXJyb3VuZGluZ1JhbmdlKTsKICAgICAg
ICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBvc2l0aW9u
ID0gcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb247CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRl
eHQgPSBwbGFpblRleHQoc3Vycm91bmRpbmdSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBwb3N0
TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHQgPSBwbGFpblRleHQoKnN1cnJvdW5kaW5nUmFu
Z2UpOwogICAgICAgICAgICAgaWYgKHN1cnJvdW5kaW5nU3RhcnQuaXNOdWxsKCkgfHwgc2VsZWN0
aW9uU3RhcnQuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91
bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSAwOwogICAgICAgICAgICAgZWxzZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRl
eCA5NjFlMmMxMTFmZjcyNzM4NmJjNzk5Zjg1ZGY1NDIyN2M1YjlmMjBiLi43MGU1Mjg1NjQ2ZmY4
ZGY1NmE5ZDI1MjE3NDhiZmQ1YWY4Y2M0YzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwNDEsMzggKzQwNDEsMjgg
QEAgdm9pZCBXZWJQYWdlOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoY29uc3QgV2ViQ29yZTo6RWxl
bWVudENvbnRleHQmIHBsYWNlaG9sZGVyLAogCiB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlv
bldpdGhEZWx0YShpbnQ2NF90IGxvY2F0aW9uRGVsdGEsIGludDY0X3QgbGVuZ3RoRGVsdGEsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWY8
RnJhbWU+IGZyYW1lID0gY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkgewotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0
byByb290ID0gZnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50
RWxlbWVudCgpOwotICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICBpZiAoIXJvb3QgfHwgIXJhbmdlKSB7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWYo
Y29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkpOworICAg
IGF1dG8gcm9vdCA9IG1ha2VSZWZQdHIoZnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVs
ZW1lbnRPckRvY3VtZW50RWxlbWVudCgpKTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYg
KCFyb290IHx8ICFzZWxlY3Rpb25SYW5nZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2l6ZV90IHNlbGVjdGlvbkxvY2F0aW9u
OwotICAgIHNpemVfdCBzZWxlY3Rpb25MZW5ndGg7Ci0gICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2Nh
dGlvbkFuZExlbmd0aEZyb21SYW5nZShyb290LCByYW5nZS5nZXQoKSwgc2VsZWN0aW9uTG9jYXRp
b24sIHNlbGVjdGlvbkxlbmd0aCk7Ci0KLSAgICBDaGVja2VkSW50NjQgbmV3U2VsZWN0aW9uTG9j
YXRpb24geyBzZWxlY3Rpb25Mb2NhdGlvbiB9OwotICAgIENoZWNrZWRJbnQ2NCBuZXdTZWxlY3Rp
b25MZW5ndGggeyBzZWxlY3Rpb25MZW5ndGggfTsKKyAgICBhdXRvIHNjb3BlID0gbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KTsKKyAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3Rl
clJhbmdlID0gY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsICpzZWxlY3Rpb25SYW5nZSk7CisgICAgQ2hl
Y2tlZEludDY0IG5ld1NlbGVjdGlvbkxvY2F0aW9uIHsgc2VsZWN0aW9uQ2hhcmFjdGVyUmFuZ2Uu
bG9jYXRpb24gfTsKKyAgICBDaGVja2VkSW50NjQgbmV3U2VsZWN0aW9uTGVuZ3RoIHsgc2VsZWN0
aW9uQ2hhcmFjdGVyUmFuZ2UubGVuZ3RoIH07CiAgICAgbmV3U2VsZWN0aW9uTG9jYXRpb24gKz0g
bG9jYXRpb25EZWx0YTsKICAgICBuZXdTZWxlY3Rpb25MZW5ndGggKz0gbGVuZ3RoRGVsdGE7Ci0K
ICAgICBpZiAobmV3U2VsZWN0aW9uTG9jYXRpb24uaGFzT3ZlcmZsb3dlZCgpIHx8IG5ld1NlbGVj
dGlvbkxlbmd0aC5oYXNPdmVyZmxvd2VkKCkpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gbmV3U2VsZWN0aW9uUmFuZ2Ug
PSBDaGFyYWN0ZXJSYW5nZShuZXdTZWxlY3Rpb25Mb2NhdGlvbi51bnNhZmVHZXQoKSwgbmV3U2Vs
ZWN0aW9uTGVuZ3RoLnVuc2FmZUdldCgpKTsKLSAgICBhdXRvIHJlc29sdmVkUmFuZ2UgPSByZXNv
bHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSwg
bmV3U2VsZWN0aW9uUmFuZ2UpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlZFJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwgV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2Vy
ZWQpOwotCisgICAgYXV0byB1cGRhdGVkU2VsZWN0aW9uUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSwgbmV3U2VsZWN0aW9u
UmFuZ2UpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxp
dmVSYW5nZSh1cGRhdGVkU2VsZWN0aW9uUmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApAQCAtNDE3NSwyNSArNDE2NSwyNSBAQCB2
b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGlu
Z0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5T
ZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJlc3RTdGFydCA+IHNlbGVjdGlvblN0YXJ0ID8gcmFuZ2VP
ZkludGVyZXN0U3RhcnQgOiBzZWxlY3Rpb25TdGFydDsKICAgICAgICAgZW5kT2ZSYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbiA9IHJhbmdlT2ZJbnRlcmVzdEVuZCA8IHNlbGVjdGlvbkVuZCA/IHJh
bmdlT2ZJbnRlcmVzdEVuZCA6IHNlbGVjdGlvbkVuZDsKICAgICB9IGVsc2UgewotICAgICAgICBz
aXplX3QgcmFuZ2VPZkludGVyZXN0TG9jYXRpb247Ci0gICAgICAgIHNpemVfdCByYW5nZU9mSW50
ZXJlc3RMZW5ndGg7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiByb290Tm9kZSA9IHJhbmdlT2ZJbnRl
cmVzdC0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKKyAgICAgICAgYXV0byByb290Tm9kZSA9
IG1ha2VSZWZQdHIocmFuZ2VPZkludGVyZXN0LT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKTsK
ICAgICAgICAgaWYgKCFyb290Tm9kZSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBhdXRvIHJvb3RD
b250YWluZXJOb2RlID0gcm9vdE5vZGUtPmlzQ29udGFpbmVyTm9kZSgpID8gZG93bmNhc3Q8Q29u
dGFpbmVyTm9kZT4ocm9vdE5vZGUuZ2V0KCkpIDogcm9vdE5vZGUtPnBhcmVudE5vZGUoKTsKKyAg
ICAgICAgaWYgKCFyb290Q29udGFpbmVyTm9kZSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoeyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRv
IHNjb3BlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290Q29udGFpbmVyTm9k
ZSk7CiAKLSAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3RDb250YWluZXJOb2RlID0g
cm9vdE5vZGUtPmlzQ29udGFpbmVyTm9kZSgpID8gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocm9v
dE5vZGUuZ2V0KCkpIDogcm9vdE5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgVGV4dEl0ZXJh
dG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyb290Q29udGFpbmVyTm9kZS5nZXQo
KSwgcmFuZ2VPZkludGVyZXN0LmdldCgpLCByYW5nZU9mSW50ZXJlc3RMb2NhdGlvbiwgcmFuZ2VP
ZkludGVyZXN0TGVuZ3RoKTsKLQotICAgICAgICBDaGVja2VkPHVpbnQ2NF90LCBSZWNvcmRPdmVy
Zmxvdz4gbWlkcG9pbnRMb2NhdGlvbiB7IHJhbmdlT2ZJbnRlcmVzdExvY2F0aW9uIH07Ci0gICAg
ICAgIG1pZHBvaW50TG9jYXRpb24gKz0gcmFuZ2VPZkludGVyZXN0TGVuZ3RoIC8gMjsKKyAgICAg
ICAgYXV0byBjaGFyYWN0ZXJSYW5nZU9mSW50ZXJlc3QgPSBjaGFyYWN0ZXJSYW5nZShzY29wZSwg
KnJhbmdlT2ZJbnRlcmVzdCk7CisgICAgICAgIGF1dG8gbWlkcG9pbnRMb2NhdGlvbiA9IGNoZWNr
ZWRTdW08dWludDY0X3Q+KGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVzdC5sb2NhdGlvbiwgY2hhcmFj
dGVyUmFuZ2VPZkludGVyZXN0Lmxlbmd0aCAvIDIpOwogICAgICAgICBpZiAobWlkcG9pbnRMb2Nh
dGlvbi5oYXNPdmVyZmxvd2VkKCkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsg
fSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICBhdXRvIG1pZHBv
aW50ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlv
bihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3RDb250YWluZXJOb2RlKSwgbWlk
cG9pbnRMb2NhdGlvbi51bnNhZmVHZXQoKSkpOworICAgICAgICBhdXRvIG1pZHBvaW50ID0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihzY29wZSwg
bWlkcG9pbnRMb2NhdGlvbi51bnNhZmVHZXQoKSkpOwogCiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9m
SW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0YXJ0T2ZXb3JkKG1pZHBvaW50KTsKICAgICAgICAgaWYg
KHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA8IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0
KSB7CkBAIC00MjAxLDcgKzQxOTEsNiBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVk
aXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAg
ICAgICAgaWYgKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA+IHJhbmdlT2ZJbnRl
cmVzdEVuZCkKICAgICAgICAgICAgICAgICBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rp
b24gPSBtaWRwb2ludDsKICAgICAgICAgfQotCiAgICAgICAgIGVuZE9mUmFuZ2VPZkludGVyZXN0
SW5TZWxlY3Rpb24gPSBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb247CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCmluZGV4IDk2MjgxYWI4NGYxYWE4Yzc1ZTM2ZjRlYmQxNzc3MzQ3NDE2NWMyOWYuLmRhMTEz
MmMyYzliZDkxNDhjODMzYzg3NTM3ZjNlODI2NjM4ZmNlMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xNTQsOSArMTU0
LDExIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUs
IEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5k
YXJ5IHx8ICFzZWxlY3Rpb25FbmQgfHwgIXBhcmFncmFwaFN0YXJ0KQogICAgICAgICByZXR1cm47
CiAKKyAgICBhdXRvIGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgPSBmcmFtZS5lZGl0
b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CisKICAgICBwb3N0TGF5b3V0
RGF0YS5jYW5kaWRhdGVSZXF1ZXN0U3RhcnRQb3NpdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgKnBh
cmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB9KTsKICAgICBwb3N0TGF5b3V0
RGF0YS5zZWxlY3RlZFRleHRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudCh7ICpzZWxlY3Rpb25TdGFy
dEJvdW5kYXJ5LCAqc2VsZWN0aW9uRW5kIH0pOwotICAgIHBvc3RMYXlvdXREYXRhLnBhcmFncmFw
aENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gcGxhaW5UZXh0KGZyYW1lLmVkaXRvcigpLmNv
bnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKS5nZXQoKSk7CisgICAgcG9zdExheW91dERh
dGEucGFyYWdyYXBoQ29udGV4dEZvckNhbmRpZGF0ZVJlcXVlc3QgPSBjb250ZXh0UmFuZ2VGb3JD
YW5kaWRhdGVSZXF1ZXN0ID8gcGxhaW5UZXh0KCpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KSA6IFN0cmluZygpOwogICAgIHBvc3RMYXlvdXREYXRhLnN0cmluZ0ZvckNhbmRpZGF0ZVJl
cXVlc3QgPSBmcmFtZS5lZGl0b3IoKS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAKICAg
ICBJbnRSZWN0IHJlY3RGb3JTZWxlY3Rpb25DYW5kaWRhdGVzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmlu
ZGV4IDY5MmVlMDc4MDYyNDE2MTJiOGRmOGI1YmE3MjFlNTRjNDliYmI4MWIuLjNjMzBkNTdlNjhj
Y2E0YjYyZTZiOGYwZGFkYjQyODI2MDcxMDRhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAgLTEw
MzksMTQgKzEwMzksMTEgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xp
ZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmkKIHZvaWQgV2ViRWRpdG9y
Q2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBi
YWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQogewog
ICAgIE5TTXV0YWJsZUFycmF5ICpjb3JyZWN0aW9ucyA9IFtOU011dGFibGVBcnJheSBhcnJheV07
Ci0gICAgZm9yIChhdXRvJiBndWVzcyA6IGdyYW1tYXJEZXRhaWwuZ3Vlc3NlcykgewotICAgICAg
ICBOU1N0cmluZyAqZ3Vlc3NOU1N0cmluZyA9IGd1ZXNzOwotICAgICAgICBbY29ycmVjdGlvbnMg
YWRkT2JqZWN0Omd1ZXNzTlNTdHJpbmddOwotICAgIH0KLSAgICBOU1N0cmluZyAqZGVzY3JpcHRp
b25OU1N0cmluZyA9IGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uOworICAgIGZvciAoYXV0
byYgZ3Vlc3MgOiBncmFtbWFyRGV0YWlsLmd1ZXNzZXMpCisgICAgICAgIFtjb3JyZWN0aW9ucyBh
ZGRPYmplY3Q6Z3Vlc3NdOwogICAgIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IEB7CiAgICAg
ICAgIE5TR3JhbW1hclJhbmdlIDogW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6Z3JhbW1hckRldGFp
bC5yYW5nZV0sCi0gICAgICAgIE5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiA6IGRlc2NyaXB0aW9u
TlNTdHJpbmcsCisgICAgICAgIE5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiA6IGdyYW1tYXJEZXRh
aWwudXNlckRlc2NyaXB0aW9uLAogICAgICAgICBOU0dyYW1tYXJDb3JyZWN0aW9ucyA6IGNvcnJl
Y3Rpb25zLAogICAgIH07CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJd
IHVwZGF0ZVNwZWxsaW5nUGFuZWxXaXRoR3JhbW1hclN0cmluZzpiYWRHcmFtbWFyUGhyYXNlIGRl
dGFpbDpkaWN0aW9uYXJ5XTsKQEAgLTExMjIsOSArMTExOSwxMSBAQCB2b2lkIFdlYkVkaXRvckNs
aWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZQogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCk7CiAgICAgYXV0byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFjdGVy
Q291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFy
dCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOwogICAgIGF1dG8gc2Vs
ZWN0aW9uTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0
aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgfSk7
CisgICAgYXV0byBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUtPmVkaXRv
cigpLmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKKyAgICBTdHJpbmcgY29udGV4
dEZvckNhbmRpZGF0ZVJlcWV1ZXN0ID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCA/
IHBsYWluVGV4dCgqY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCkgOiBTdHJpbmcoKTsK
IAogICAgIG1fcmFuZ2VGb3JDYW5kaWRhdGVzID0gTlNNYWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaCwgc2VsZWN0aW9uTGVuZ3RoKTsKLSAgICBtX3BhcmFncmFwaENvbnRl
eHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gcGxhaW5UZXh0KGZyYW1lLT5lZGl0b3IoKS5jb250ZXh0
UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkuZ2V0KCkpOworICAgIG1fcGFyYWdyYXBoQ29udGV4
dEZvckNhbmRpZGF0ZVJlcXVlc3QgPSBjb250ZXh0Rm9yQ2FuZGlkYXRlUmVxZXVlc3Q7CiAKICAg
ICBOU1RleHRDaGVja2luZ1R5cGVzIGNoZWNraW5nVHlwZXMgPSBOU1RleHRDaGVja2luZ1R5cGVT
cGVsbGluZyB8IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50IHwgTlNUZXh0Q2hlY2tpbmdU
eXBlQ29ycmVjdGlvbjsKICAgICBhdXRvIHdlYWtFZGl0b3IgPSBtYWtlV2Vha1B0cigqdGhpcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBmZTY2
ZDFiNTRmNzVkN2ZkYzlmNTY4ZDIyY2Q0OWVmZmQ0ZGM5OTUxLi5lNTVjMzA5MTA1NzU0YmJjYzgw
NDdiNzU4MGQ5NzQwZTIxZDMzYWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KQEAgLTU4Nyw3ICs1ODcsOSBAQCAtIChOU1N0cmluZyAqKV9zZWxlY3Rl
ZFN0cmluZwogCiAtIChOU1N0cmluZyAqKV9zdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5n
ZQogewotICAgIHJldHVybiBwbGFpblRleHQoY29yZShyYW5nZSksIFdlYkNvcmU6OlRleHRJdGVy
YXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0
dXJuIEAiIjsKKyAgICByZXR1cm4gcGxhaW5UZXh0KCpjb3JlKHJhbmdlKSwgV2ViQ29yZTo6VGV4
dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0cnVlKTsKIH0KIAogLSAoT3B0aW9uU2V0PFdlYkNv
cmU6OlBhaW50QmVoYXZpb3I+KV9wYWludEJlaGF2aW9yRm9yRGVzdGluYXRpb25Db250ZXh0OihD
R0NvbnRleHRSZWYpY29udGV4dApAQCAtODA2LDEyICs4MDgsMTUgQEAgLSAoTlNSYW5nZSlfY29u
dmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UgKilyYW5nZQogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIHNpemVfdCBs
b2NhdGlvbiA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0gICAgaWYgKCFXZWJDb3JlOjpU
ZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKF9wcml2YXRlLT5jb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgp
LCByYW5nZSwgbG9jYXRpb24sIGxlbmd0aCkpCisgICAgYXV0byBmcmFtZSA9IF9wcml2YXRlLT5j
b3JlRnJhbWU7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOworCisgICAgYXV0byogZWxlbWVudCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQp
CiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIHJldHVy
biBOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCAqcmFuZ2Up
OwogfQogCiAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNS
YW5nZSluc3JhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFt
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKaW5kZXggMzY4ZDdj
ZTliYTFhMDlhYzU3ZmFmZmU3MTg5YmFkMjdhZGMyM2VlZS4uZDQyZTQ1MTE5NWEyMTMyYWU5ZDg4
NGE1MWE4YjY0YzA2MTFmMzZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcApA
QCAtMTkyMywxMyArMTkyMywxNSBAQCBIUkVTVUxUIFdlYkZyYW1lOjpzdHJpbmcoX0RlcmVmX29w
dF9vdXRfIEJTVFIqIHJlc3VsdCkKIAogICAgICpyZXN1bHQgPSBudWxscHRyOwogCi0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUodGhpcyk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCisgICAgYXV0
byogZnJhbWUgPSBjb3JlKHRoaXMpOworICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBF
X1VORVhQRUNURUQ7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGFsbFJhbmdlKHJhbmdlT2ZDb250ZW50
cygqY29yZUZyYW1lLT5kb2N1bWVudCgpKSk7Ci0gICAgU3RyaW5nIGFsbFN0cmluZyA9IHBsYWlu
VGV4dChhbGxSYW5nZS5nZXQoKSk7Ci0gICAgKnJlc3VsdCA9IEJTdHJpbmcoYWxsU3RyaW5nKS5y
ZWxlYXNlKCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBp
ZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgKnJlc3VsdCA9IEJT
dHJpbmcocGxhaW5UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZG9jdW1lbnQp
KSkucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09LOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dl
YlZpZXcuY3BwCmluZGV4IDRmMjMyNDc3NzU4OTI2NzUwZGY1ZTAyMTQwZjIwZWE5NzE5YzIyOTMu
LmJmMmJhYTVkNTk2Zjk4OGQyZTA5Zjg2NjQ0NWI3OTQwNWI0YjM0OTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlZpZXcuY3BwCkBAIC03Nzk5LDE0ICs3Nzk5LDE2IEBAIEhSRVNVTFQgV2ViVmll
dzo6c2VsZWN0ZWRSYW5nZUZvclRlc3RpbmcoX091dF8gVUlOVCogbG9jYXRpb24sIF9PdXRfIFVJ
TlQqIGxlbmd0CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS5l
ZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJu
IEVfRkFJTDsKIAotICAgIHNpemVfdCBsb2NhdGlvblNpemU7Ci0gICAgc2l6ZV90IGxlbmd0aFNp
emU7Ci0gICAgaWYgKHJhbmdlICYmIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhG
cm9tUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRF
bGVtZW50KCksIHJhbmdlLmdldCgpLCBsb2NhdGlvblNpemUsIGxlbmd0aFNpemUpKSB7Ci0gICAg
ICAgICpsb2NhdGlvbiA9IHN0YXRpY19jYXN0PFVJTlQ+KGxvY2F0aW9uU2l6ZSk7Ci0gICAgICAg
ICpsZW5ndGggPSBzdGF0aWNfY2FzdDxVSU5UPihsZW5ndGhTaXplKTsKLSAgICB9CisgICAgYXV0
byogZWxlbWVudCA9IGZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3Vt
ZW50RWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsK
IAorICAgIGF1dG8gcmVsYXRpdmVSYW5nZSA9IGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgKnJhbmdlKTsKKyAgICAqbG9jYXRpb24g
PSBzdGF0aWNfY2FzdDxVSU5UPihyZWxhdGl2ZVJhbmdlLmxvY2F0aW9uKTsKKyAgICAqbGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8VUlOVD4ocmVsYXRpdmVSYW5nZS5sZW5ndGgpOwogICAgIHJldHVybiBT
X09LOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395221</attachid>
            <date>2020-04-01 16:20:52 -0700</date>
            <delta_ts>2020-04-01 17:40:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209723-20200401162051.patch</filename>
            <type>text/plain</type>
            <size>92722</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM0ZDg2YzRiMGIyOTIx
ZjM0NWFmY2QzZGM3OTI2MDJlNDJkOGJkOS4uNDQ1ODdmNjBiMDE4OGMyNjUxZTUyMzMwNWRjMDIz
NjNkYThkZGE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDMtMjkgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbGwgdXNlcyBvZiBs
aXZlIHJhbmdlcyBmcm9tIFRleHRJdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NzIzCisKIDIwMjAtMDQtMDEgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQ1JBU0ggaW4gTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjphZGRBdWRpb1JlbmRlcmVyKCksIHVuY2F1Z2h0IE9iakMgZXhj
ZXB0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAppbmRleCA1MWNhNGNmMTQ1NjZmNmE0YzIyZWE2NmJkYzc4NTY5MGMyMjhi
NGE0Li43NjczMmI3ZWQ3MWRkYTI0ZmRlNTZkYWViZWIwZDIyNmI4NjIzYThhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
QEAgLTE0NTksNyArMTQ1OSw3IEBAIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpuZXh0U2VudGVuY2VFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpCiAgICAgLy8gc2Vl
IHRoaXMgZW1wdHkgbGluZS4gIEluc3RlYWQsIHJldHVybiB0aGUgZW5kIHBvc2l0aW9uIG9mIHRo
ZSBlbXB0eSBsaW5lLgogICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbjsKICAgICAKLSAg
ICBTdHJpbmcgbGluZVN0cmluZyA9IHBsYWluVGV4dChtYWtlUmFuZ2Uoc3RhcnRPZkxpbmUobmV4
dFZpc2libGVQb3MpLCBlbmRPZkxpbmUobmV4dFZpc2libGVQb3MpKS5nZXQoKSk7CisgICAgU3Ry
aW5nIGxpbmVTdHJpbmcgPSBwbGFpblRleHQoKm1ha2VSYW5nZShzdGFydE9mTGluZShuZXh0Vmlz
aWJsZVBvcyksIGVuZE9mTGluZShuZXh0VmlzaWJsZVBvcykpKTsKICAgICBpZiAobGluZVN0cmlu
Zy5pc0VtcHR5KCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbmV4dFZpc2libGVQb3M7CiAgICAg
ZWxzZQpAQCAtMTQ4Myw3ICsxNDgzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGUKICAgICAv
LyB0cmVhdCBlbXB0eSBsaW5lIGFzIGEgc2VwYXJhdGUgc2VudGVuY2UuCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0UG9zaXRpb247CiAgICAgCi0gICAgU3RyaW5nIGxpbmVTdHJpbmcgPSBwbGFp
blRleHQobWFrZVJhbmdlKHN0YXJ0T2ZMaW5lKHByZXZpb3VzVmlzaWJsZVBvcyksIGVuZE9mTGlu
ZShwcmV2aW91c1Zpc2libGVQb3MpKS5nZXQoKSk7CisgICAgU3RyaW5nIGxpbmVTdHJpbmcgPSBw
bGFpblRleHQoKm1ha2VSYW5nZShzdGFydE9mTGluZShwcmV2aW91c1Zpc2libGVQb3MpLCBlbmRP
ZkxpbmUocHJldmlvdXNWaXNpYmxlUG9zKSkpOwogICAgIGlmIChsaW5lU3RyaW5nLmlzRW1wdHko
KSkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXZpb3VzVmlzaWJsZVBvczsKICAgICBlbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBlNjE2ZWE5ZDY1NGVkMjNiMzY1YmE3NTZkZDA4NjU3
NmU3ZDE1ZThhLi4wYWRmNWM0NzgwNjYxZmI5Y2NmNTU5NWVhZGJmMzIxZGEzNDdjNGZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKQEAgLTY2NCw3ICs2NjQsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxl
bWVudAogICAgICAgICAgICAgICAgIC8vIHN0eWxlIHVwZGF0ZS9sYXlvdXQgaGVyZS4gU2VlIGFs
c28gQVhPYmplY3RDYWNoZTo6ZGVmZXJUZXh0Q2hhbmdlZElmTmVlZGVkKCkuCiAgICAgICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGVEb2N1bWVudC0+Y2hp
bGROZWVkc1N0eWxlUmVjYWxjKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCFub2RlRG9jdW1lbnQtPnZpZXcoKS0+bGF5b3V0Q29udGV4dCgpLmlz
SW5SZW5kZXJUcmVlTGF5b3V0KCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBwbGFpblRleHQo
dGV4dFJhbmdlLmdldCgpLCB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGxhaW5UZXh0KCp0ZXh0UmFuZ2UsIHRleHRJdGVyYXRvckJl
aGF2aW9yRm9yVGV4dFJhbmdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgCkBA
IC0yMDgxLDE2ICsyMDgxLDE1IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bm9k
ZUlzVGV4dENvbnRyb2woY29uc3QgTm9kZSogbm9kZSkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLUludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmVjdHMo
TGF5b3V0UmVjdCBjb25zdCYgcmVjdDEsIExheW91dFJlY3QgY29uc3QmIHJlY3QyLCBSZWZQdHI8
UmFuZ2U+IGNvbnN0JiBkYXRhUmFuZ2UpCitzdGF0aWMgSW50UmVjdCBib3VuZHNGb3JSZWN0cyhj
b25zdCBMYXlvdXRSZWN0JiByZWN0MSwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdDIsIGNvbnN0IFNp
bXBsZVJhbmdlJiBkYXRhUmFuZ2UpCiB7CiAgICAgTGF5b3V0UmVjdCBvdXJSZWN0ID0gcmVjdDE7
CiAgICAgb3VyUmVjdC51bml0ZShyZWN0Mik7Ci0gICAgCi0gICAgLy8gaWYgdGhlIHJlY3Rhbmds
ZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFycywgdXNlIHRoZSBy
YW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKKworICAgIC8vIGlmIHRoZSByZWN0YW5nbGUgc3Bh
bnMgbGluZXMgYW5kIGNvbnRhaW5zIG11bHRpcGxlIHRleHQgY2hhcmFjdGVycywgdXNlIHRoZSBy
YW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQuCiAgICAgaWYgKHJlY3QxLm1heFkoKSAhPSByZWN0
Mi5tYXhZKCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGRhdGFSYW5nZS0+
YWJzb2x1dGVCb3VuZGluZ0JveCgpOwotICAgICAgICBTdHJpbmcgcmFuZ2VTdHJpbmcgPSBwbGFp
blRleHQoZGF0YVJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKHJhbmdlU3RyaW5nLmxlbmd0aCgp
ID4gMSAmJiAhYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICBMYXlvdXRSZWN0IGJvdW5k
aW5nQm94ID0gY3JlYXRlTGl2ZVJhbmdlKGRhdGFSYW5nZSktPmFic29sdXRlQm91bmRpbmdCb3go
KTsKKyAgICAgICAgaWYgKGNoYXJhY3RlckNvdW50KGRhdGFSYW5nZSkgPiAxICYmICFib3VuZGlu
Z0JveC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBvdXJSZWN0ID0gYm91bmRpbmdCb3g7CiAgICAg
fQogCkBAIC0yMTIwLDggKzIxMTksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQbwogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gZGF0YVJhbmdlID0gbWFrZVJhbmdl
KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotICAgIHJldHVybiBib3VuZHNGb3JSZWN0cyhyZWN0
MSwgcmVjdDIsIGRhdGFSYW5nZSk7CisgICAgcmV0dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCBy
ZWN0MiwgKm1ha2VSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKSk7CiB9CiAKIEludFJlY3Qg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJh
bmdlPiByYW5nZSkgY29uc3QKQEAgLTIxNTIsNyArMjE1MCw3IEBAIEludFJlY3QgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiByYW5n
ZSkgY29uCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGJvdW5kc0ZvclJlY3Rz
KHJlY3QxLCByZWN0MiwgcmFuZ2UpOworICAgIHJldHVybiBib3VuZHNGb3JSZWN0cyhyZWN0MSwg
cmVjdDIsICpyYW5nZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNW
aXNpYmxlUG9zaXRpb25SYW5nZUluRGlmZmVyZW50RG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UmIHJhbmdlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCA3NzZiNDhmNGNiOWI3
NDcxMDNiYWNjZTk5NzgwNjk3MmY3YzYwNjBjLi43ZWNmMDRhYTA0ZWZiYjA1MjRkN2NkNDk5OGU0
MWQ0NzMxZTM0NGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApAQCAtMjkzLDggKzI5Myw2IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBjYW5IYXZlUGxhaW5UZXh0KCkgY29uc3Q7CiAgICAgLy8gU3BlY2lhbCBo
YW5kbGluZyBvZiBjbGljayBwb2ludCBmb3IgbGlua3MuCiAgICAgSW50UG9pbnQgbGlua0NsaWNr
UG9pbnQoKTsKLSAgICAvLyBSZWN0cyB1dGlsaXRpZXMuCi0gICAgc3RhdGljIEludFJlY3QgYm91
bmRzRm9yUmVjdHMoTGF5b3V0UmVjdCBjb25zdCYsIExheW91dFJlY3QgY29uc3QmLCBSZWZQdHI8
UmFuZ2U+IGNvbnN0Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGY2YTcyMzE2YTY3NzM3Y2I2NWI5ZGIy
OGQ1MTMyNDE1NDdiNmIzNmIuLjg4Zjg5NDhhMDVmNzkxYzliNmUzYWIxN2I2ZDhkZDM1ODY2MTRl
YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC0zNjM2LDIx
ICszNjM2LDE4IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlKilyYW5nZQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgCi0gICAgTlNSYW5nZSByZXN1bHQg
PSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKICAgICBpZiAoIXJhbmdlKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7
CiAgICAgCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRv
Y3VtZW50KCk7CisgICAgYXV0byBkb2N1bWVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1
bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
Ci0gICAgc2l6ZV90IGxvY2F0aW9uOwotICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgVGV4dEl0ZXJh
dG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShkb2N1bWVudC0+ZG9jdW1lbnRFbGVt
ZW50KCksIHJhbmdlLCBsb2NhdGlvbiwgbGVuZ3RoKTsKLSAgICByZXN1bHQubG9jYXRpb24gPSBs
b2NhdGlvbjsKLSAgICByZXN1bHQubGVuZ3RoID0gbGVuZ3RoOwotICAgIAotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAg
IGF1dG8gZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAg
IGlmICghZG9jdW1lbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RG
b3VuZCwgMCk7CisKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRC
ZWZvcmVOb2RlQ29udGVudHMoKmRvY3VtZW50RWxlbWVudCksICpyYW5nZSk7CiB9CiAKIC0gKE5T
SW50ZWdlcilfaW5kZXhGb3JUZXh0TWFya2VyOihpZCltYXJrZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRh
cnlQb2ludC5oCmluZGV4IGE1ZDhlM2UwMTJlZWRhYTljZGY3MjkzMTA4YjQzOTI3YmUxMjRmMjIu
LjVjYmJmZGMwMGY1NTA3NDc1YTE4NWIyZTg1MjNhZmFiNzIzOGIyMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0JvdW5kYXJ5UG9pbnQuaApAQCAtNDYsNiArNDYsOCBAQCBzdHJ1Y3QgQm91bmRhcnlQb2ludCB7
CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQ
b2ludCYpOwogCitCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRl
bnRzKE5vZGUmKTsKKwogaW5saW5lIEJvdW5kYXJ5UG9pbnQ6OkJvdW5kYXJ5UG9pbnQoUmVmPE5v
ZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgOiBjb250YWluZXIoV1RGTW92
ZShjb250YWluZXIpKQogICAgICwgb2Zmc2V0KG9mZnNldCkKQEAgLTc1LDQgKzc3LDkgQEAgaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3VuZGFyeVBvaW50JiBhLCBjb25zdCBCb3VuZGFy
eVBvaW50JiBiKQogICAgIHJldHVybiBhLmNvbnRhaW5lci5wdHIoKSA9PSBiLmNvbnRhaW5lci5w
dHIoKSAmJiBhLm9mZnNldCA9PSBiLm9mZnNldDsKIH0KIAoraW5saW5lIEJvdW5kYXJ5UG9pbnQg
bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKK3sKKyAgICBy
ZXR1cm4geyBub2RlLCAwIH07Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA2MDAy
YzNkNDJhMjI5OWQzMzQwNWQwZGI3NzUxNTkwZDg5NDU4YTU4Li5jOWRiZDVlNTNhM2U2MjIxNGFk
OGU0N2U4ODRjYjYwNzM1MzU4M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0zMTk3LDcg
KzMxOTcsNyBAQCBTdHJpbmcgRWxlbWVudDo6aW5uZXJUZXh0KCkKICAgICBpZiAoIXJlbmRlcmVy
KCkpCiAgICAgICAgIHJldHVybiB0ZXh0Q29udGVudCh0cnVlKTsKIAotICAgIHJldHVybiBwbGFp
blRleHQocmFuZ2VPZkNvbnRlbnRzKCp0aGlzKS5wdHIoKSk7CisgICAgcmV0dXJuIHBsYWluVGV4
dChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnRoaXMpKTsKIH0KIAogU3RyaW5nIEVs
ZW1lbnQ6Om91dGVyVGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA0NWMxYmNmZDAyYzE5OGNk
OGI5OTBlY2EwMWUzZjBlNmEzOTNiNWZiLi5iZTRlYjY5OTUxMDQwMTgzZGJjNDIwNmVkMDBkNDhi
ZDg4NDJmMDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTk1MSw3ICs5NTEsNyBAQCBTdHJpbmcg
UmFuZ2U6OnRleHQoKSBjb25zdAogICAgIC8vIEZJWE1FOiBBcyB3aXRoIGlubmVyVGV4dCwgd2Un
ZCBsaWtlIHRoaXMgdG8gd29yayBldmVuIGlmIHRoZXJlIGFyZSBubyByZW5kZXIgb2JqZWN0cy4K
ICAgICBzdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKLSAgICBy
ZXR1cm4gcGxhaW5UZXh0KHRoaXMpOworICAgIHJldHVybiBwbGFpblRleHQoKnRoaXMpOwogfQog
CiAvLyBodHRwczovL3czYy5naXRodWIuaW8vRE9NLVBhcnNpbmcvI3dpZGwtUmFuZ2UtY3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50LURvY3VtZW50RnJhZ21lbnQtRE9NU3RyaW5nLWZyYWdtZW50CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCBhN2Q5MWNkMmVmMTQ1NzdiNDFiZTZmNjRi
NjlhOTlkYTA0MjNmZWJjLi44ZWVhZDA2MWI2MzBkZWRhNTIzNTA5Y2UxM2VlNDY4N2FhMDQ4OWVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTY4LDkgKzY4LDE0IEBAIHN0YXRp
YyB1bnNpZ25lZCBsZW5ndGgoY29uc3QgTm9kZSYgbm9kZSkKICAgICByZXR1cm4gbm9kZS5jb3Vu
dENoaWxkTm9kZXMoKTsKIH0KIAorc3RhdGljIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9p
bnRBZnRlck5vZGVDb250ZW50cyhOb2RlJiBub2RlKQoreworICAgIHJldHVybiB7IG5vZGUsIGxl
bmd0aChub2RlKSB9OworfQorCiBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4geyB7IG5vZGUsIDAgfSwgeyBub2RlLCBs
ZW5ndGgobm9kZSkgfSB9OworICAgIHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9k
ZUNvbnRlbnRzKG5vZGUpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUp
IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGY3MGRhNThlMTRmYjk0YTYwNWI5OGRlMTZjNzBjZTc1
NjA1ZTMyYmUuLjBmOWNkYjE2OGMzODY4NjA0YjVjYjY5NDk2OTBmNTU5YmQ2OWEzZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcApAQCAtMTMwLDkgKzEzMCwxMSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcwogICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gc2VsZWN0aW9uQWZ0ZXJUeXBpbmcudmlz
aWJsZVN0YXJ0KCk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50V29yZCA9IFZpc2libGVT
ZWxlY3Rpb24oc3RhcnRPZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpLCBlbmRPZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7
CiAgICAgaWYgKGN1cnJlbnRXb3JkLnZpc2libGVFbmQoKSA9PSBzdGFydE9mU2VsZWN0aW9uKSB7
Ci0gICAgICAgIFN0cmluZyB3b3JkVGV4dCA9IHBsYWluVGV4dChjdXJyZW50V29yZC50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgaWYgKHdvcmRUZXh0Lmxlbmd0aCgpID4gMCAm
JiBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgp
IC0gMV0pKQotICAgICAgICAgICAgZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAg
aWYgKGF1dG8gd29yZFJhbmdlID0gY3VycmVudFdvcmQuZmlyc3RSYW5nZSgpKSB7CisgICAgICAg
ICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoKndvcmRSYW5nZSk7CisgICAgICAgICAg
ICBpZiAoIXdvcmRUZXh0LmlzRW1wdHkoKSAmJiBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVy
KHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgpIC0gMV0pKQorICAgICAgICAgICAgICAgIGRvQXBw
bHlDb3JyZWN0aW9uID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGRvQXBwbHlD
b3JyZWN0aW9uKQogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChkaXNtaXNz
U29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQpKTsgCkBAIC0x
NTUsNyArMTU3LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdl
JiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWMKICAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZSgmcmFuZ2VUb1JlcGxhY2UpOwogICAgIGlm
IChib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX29yaWdpbmFs
VGV4dCA9IHBsYWluVGV4dCgmcmFuZ2VUb1JlcGxhY2UpOworICAgIG1fb3JpZ2luYWxUZXh0ID0g
cGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlKTsKICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0g
JnJhbmdlVG9SZXBsYWNlOwogICAgIG1fZGV0YWlscyA9IHJlcGxhY2VtZW50OwogICAgIG1faXNB
Y3RpdmUgPSB0cnVlOwpAQCAtMjQ5LDcgKzI1MSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIGlmIChyZXBsYWNlbWVudFN0cmluZy5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9pc0FjdGl2ZSA9IHRydWU7Ci0g
ICAgICAgIG1fb3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUu
Z2V0KCkpOworICAgICAgICBtX29yaWdpbmFsVGV4dCA9IHBsYWluVGV4dCgqbV9yYW5nZVdpdGhB
bHRlcm5hdGl2ZSk7CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVj
dEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOwogICAgICAgICBpZiAoIWJv
dW5kaW5nQm94LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKEFsdGVybmF0aXZlVGV4dENs
aWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCkBAIC0yNTgsOSArMjYwLDkg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2Vz
dGlvbnM6IHsKLSAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZlIHx8IHBsYWluVGV4
dChtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKSAhPSBtX29yaWdpbmFsVGV4dCkKKyAgICAg
ICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZlIHx8IHBsYWluVGV4dCgqbV9yYW5nZVdpdGhB
bHRlcm5hdGl2ZSkgIT0gbV9vcmlnaW5hbFRleHQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoJlRleHRDaGVja2luZ1BhcmFncmFw
aCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgICAgIFN0
cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaCgqbV9y
YW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgICAgIFZlY3RvcjxT
dHJpbmc+IHN1Z2dlc3Rpb25zOwogICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9y
V29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0
eSgpKSB7CkBAIC0zMDMsNyArMzA1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3UKICAgICBp
ZiAoIXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VX
aXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
U3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHJhbmdlV2l0aEFsdGVybmF0aXZlKTsKKyAg
ICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQoKnJhbmdlV2l0aEFsdGVybmF0aXZlKTsK
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3Qg
aGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcg
dHJpZ2dlcmVkLgogICAgIGlmIChjdXJyZW50V29yZCAhPSBtX29yaWdpbmFsVGV4dCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDE2LDcgKzQxOCw3IEBAIFRleHRDaGVja2VyQ2xpZW50KiBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLXZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBSYW5nZSogcmVwbGFjZW1lbnRSYW5nZSkKK3ZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlv
blJlc3BvbnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
aW1wbGVSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSkKIHsKICAgICBpZiAoYXV0byBjbGllbnQgPSBh
bHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKHJlc3BvbnNlLCByZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2Vt
ZW50UmFuZ2UpKTsKQEAgLTQ3NSw3ICs0NzcsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQog
ICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlv
biwgZW5kT2ZTZWxlY3Rpb24pOwotICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UucHRyKCkpOworICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQo
cHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgp
IHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgp
IC0gMV0pKQogICAgICAgICByZXR1cm47CiAKQEAgLTUyNCw3ICs1MjYsNyBAQCBib29sIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERv
Y3VtZW50TWFya2VyJgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVu
ZE9mV29yZFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKICAgICBhdXRvIHdvcmRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0
KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7Ci0gICAgU3RyaW5nIGN1cnJlbnRXb3JkID0g
cGxhaW5UZXh0KHdvcmRSYW5nZS5wdHIoKSk7CisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxh
aW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fb3JpZ2luYWxUZXh0ID0gY3VycmVudFdvcmQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oCmluZGV4IDI3MDIxZWM3NWExMTIyN2Y3MTUwNWU4YWY5MmJlMmM0Mzc0ZTBmMjUuLjk4MWQy
NzA5MjA3YjZmMzk0ZGIyMWNiMWZkYTU2NjllYTgwYTk3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC00NSw2ICs0NSw3
IEBAIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAog
c3RydWN0IERpY3RhdGlvbkFsdGVybmF0aXZlOworc3RydWN0IFNpbXBsZVJhbmdlOwogc3RydWN0
IFRleHRDaGVja2luZ1Jlc3VsdDsKIAogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKQEAg
LTg4LDcgKzg5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCiAgICAgYm9v
bCBzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKTsKIAotICAgIHZvaWQgcmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBSYW5nZSogcmVwbGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQo
eyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRS
YW5nZSk7IH0pCisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFNpbXBs
ZVJhbmdlJiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShy
ZXBsYWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJhbmdlKTsgfSkKICAgICB2
b2lkIG1hcmtSZXZlcnNlZChSYW5nZSYgY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVO
VVNFRF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQogICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oUmFu
Z2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2UpOyBVTlVTRURfUEFSQU0ocmVwbGFj
ZWRTdHJpbmcpOyB9KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMDkzYjEyYjk2
NjEzZjM3ZTZlOTk5ZGRmYWY4YTAyZTE2MjJkYmQxZC4uNzdjYzEzMTdhNmY0ODNhNGJhMWNlYTY2
ZGE1ZDdiNjViZjYwYjM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjU5Miw4
ICsyNTkyLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29y
ZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIC8vIEdldCB0aGUgbWlzc3BlbGxlZCB3b3JkLgotICAgIGNvbnN0IFN0cmluZyBtaXNz
cGVsbGVkV29yZCA9IHBsYWluVGV4dChtaXNzcGVsbGluZ1JhbmdlLmdldCgpKTsKLSAgICBTdHJp
bmcgYXV0b2NvcnJlY3RlZFN0cmluZyA9IHRleHRDaGVja2VyKCktPmdldEF1dG9Db3JyZWN0U3Vn
Z2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKKyAgICBTdHJpbmcgYXV0
b2NvcnJlY3RlZFN0cmluZyA9IHRleHRDaGVja2VyKCktPmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlv
bkZvck1pc3NwZWxsZWRXb3JkKHBsYWluVGV4dCgqbWlzc3BlbGxpbmdSYW5nZSkpOwogCiAgICAg
Ly8gSWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0aGUgbWlzc3Bl
bGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KICAgICBpZiAoIWF1dG9jb3JyZWN0ZWRTdHJpbmcuaXNF
bXB0eSgpKSB7CkBAIC0yNzczLDIxICsyNzcyLDE5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlUmFu
Z2VGb3JTcGVsbENoZWNraW5nKFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiBy
CiAgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCBy
ZXBsYWNlbWVudCktPmFwcGx5KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNr
aW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgm
IHBhcmFncmFwaCwgUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50LCBDaGFyYWN0ZXJSYW5nZSByZXN1bHRSYW5nZSkKK3N0YXRpYyB2b2lkIGNvcnJlY3RTcGVs
bGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGgmIHBhcmFncmFwaCwgUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50LCBDaGFyYWN0ZXJSYW5nZSByZXN1bHRDaGFyYWN0ZXJSYW5nZSkKIHsKLSAgICBh
dXRvJiBzY29wZSA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHBhcmFncmFwaC5wYXJhZ3JhcGhS
YW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSk7Ci0KLSAgICBzaXplX3QgcGFyYWdy
YXBoTG9jYXRpb247Ci0gICAgc2l6ZV90IHBhcmFncmFwaExlbmd0aDsKLSAgICBUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKCZzY29wZSwgJnBhcmFncmFwaC5wYXJh
Z3JhcGhSYW5nZSgpLCBwYXJhZ3JhcGhMb2NhdGlvbiwgcGFyYWdyYXBoTGVuZ3RoKTsKKyAgICBh
dXRvIHNjb3BlTm9kZSA9IG1ha2VSZWYoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocGFyYWdyYXBo
LnBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKSk7CisgICAgYXV0
byBwYXJhZ3JhcGhDaGFyYWN0ZXJSYW5nZSA9IGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50QmVmb3JlTm9kZUNvbnRlbnRzKHNjb3BlTm9kZSksIHBhcmFncmFwaC5wYXJhZ3JhcGhSYW5n
ZSgpKTsKIAogICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVw
bGFjZSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwogCiAgICAgLy8gVGV4dENoZWNraW5nUGFyYWdy
YXBoIG1heSBiZSBvcnBoYW5lZCBhZnRlciBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG11dGF0
ZWQgRE9NLgogICAgIC8vIFNlZSA8cmRhcjovLzEwMzA1MzE1PiwgaHR0cDovL3dlYmtpdC5vcmcv
Yi84OTUyNi4KIAotICAgIGF1dG8gbmV3UGFyYWdyYXBoUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHNjb3BlKSwgeyBwYXJhZ3JhcGhM
b2NhdGlvbiwgcGFyYWdyYXBoTGVuZ3RoICsgcmVwbGFjZW1lbnQubGVuZ3RoKCkgLSByZXN1bHRS
YW5nZS5sZW5ndGggfSk7Ci0gICAgYXV0byBzcGVsbENoZWNraW5nUmFuZ2UgPSByZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UobmV3UGFyYWdyYXBoUmFuZ2UsIHsgcmVzdWx0UmFuZ2UubG9jYXRpb24sIHJl
cGxhY2VtZW50Lmxlbmd0aCgpIH0pOworICAgIHBhcmFncmFwaENoYXJhY3RlclJhbmdlLmxlbmd0
aCArPSByZXBsYWNlbWVudC5sZW5ndGgoKSAtIHJlc3VsdENoYXJhY3RlclJhbmdlLmxlbmd0aDsK
KyAgICBhdXRvIG5ld1BhcmFncmFwaFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhzY29wZU5vZGUpLCBwYXJhZ3JhcGhDaGFyYWN0ZXJS
YW5nZSk7CisgICAgYXV0byBzcGVsbENoZWNraW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFu
Z2UobmV3UGFyYWdyYXBoUmFuZ2UsIHsgcmVzdWx0Q2hhcmFjdGVyUmFuZ2UubG9jYXRpb24sIHJl
cGxhY2VtZW50Lmxlbmd0aCgpIH0pOwogICAgIHBhcmFncmFwaCA9IFRleHRDaGVja2luZ1BhcmFn
cmFwaChjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdl
KHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShuZXdQYXJhZ3JhcGhSYW5nZSkp
OwogfQogCkBAIC0yODg1LDcgKzI4ODIsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VG
b3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAg
ICAgICAgICAgaWYgKCEoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZENoZWNrRm9y
Q29ycmVjdGlvbiB8fCBzaG91bGRNYXJrTGluaykgfHwgIWRvUmVwbGFjZW1lbnQpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFN0cmluZyByZXBsYWNlZFN0cmluZyA9
IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5wdHIoKSk7CisgICAgICAgICAgICBTdHJpbmcgcmVw
bGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwogICAgICAgICAg
ICAgY29uc3QgYm9vbCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCA9IG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChyZXN1bHRzW2ldLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAg
ICAgICAgaWYgKCFleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTI5MzEsNyArMjkyOCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5k
UmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9y
PFRlCiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
OjpDb3JyZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5n
ZSA9IHBhcmFncmFwaC5zdWJyYW5nZSh7IHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudC5sZW5n
dGgoKSB9KTsKLSAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OkFj
Y2VwdGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRSYW5nZS5wdHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpBY2NlcHRlZCwgcmVwbGFjZWRT
dHJpbmcsIHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOwogCiAgICAgICAgICAgICAgICAgICAgIC8v
IEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUgdW5kb25lIGFu
ZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCiAgICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci0+bWFya0NvcnJlY3Rpb24ocmVwbGFjZW1lbnRSYW5nZSwgcmVwbGFj
ZWRTdHJpbmcpOwpAQCAtMjk2NiwxMCArMjk2MywxMCBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFj
a1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7
Ci0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoIXNlbGVjdGlvbiB8fCAh
c2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0
KCkpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJp
bmcsICpzZWxlY3Rpb24pOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoKnNl
bGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBT
ZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2Vy
dCk7CiAgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UoQ2hhcmFjdGVy
UmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkp
KTsKQEAgLTMyMDEsNyArMzE5OCw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIFZp
c2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSk7CiAKICAgICAv
LyBUcmFuc3Bvc2UgdGhlIHR3byBjaGFyYWN0ZXJzLgotICAgIFN0cmluZyB0ZXh0ID0gcGxhaW5U
ZXh0KHJhbmdlLmdldCgpKTsKKyAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dCgqcmFuZ2UpOwog
ICAgIGlmICh0ZXh0Lmxlbmd0aCgpICE9IDIpCiAgICAgICAgIHJldHVybjsKICAgICBTdHJpbmcg
dHJhbnNwb3NlZCA9IHRleHQucmlnaHQoMSkgKyB0ZXh0LmxlZnQoMSk7CkBAIC0zMjIxLDcgKzMy
MTgsNyBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKIAogdm9pZCBFZGl0b3I6OmFkZFJhbmdl
VG9LaWxsUmluZyhjb25zdCBSYW5nZSYgcmFuZ2UsIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZSBtb2Rl
KQogewotICAgIGFkZFRleHRUb0tpbGxSaW5nKHBsYWluVGV4dCgmcmFuZ2UpLCBtb2RlKTsKKyAg
ICBhZGRUZXh0VG9LaWxsUmluZyhwbGFpblRleHQocmFuZ2UpLCBtb2RlKTsKIH0KIAogdm9pZCBF
ZGl0b3I6OmFkZFRleHRUb0tpbGxSaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgS2lsbFJpbmdJbnNl
cnRpb25Nb2RlIG1vZGUpCkBAIC0zOTc1LDcgKzM5NzIsNyBAQCBTdHJpbmcgRWRpdG9yOjpzdHJp
bmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJhbmdlRm9y
U2VsZWN0aW9uKG1fZnJhbWUpOwogICAgIGlmIChyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5n
ICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKLSAgICAgICAgcmV0dXJu
IHBsYWluVGV4dChyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7CiAKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKaW5kZXggYWQ3ODIzMmE4YTIwODY3Y2Q1OTkx
YjNkMmY4MGIzZjRkNGI2ZjYwZS4uNTQ2MGI3NWNhYmQyM2RkNTVhZDkzOWQwMTRiNTgyOTJlZDlk
NGVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRo
VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kLmNwcApAQCAtNjMsOCArNjMsNyBAQCB2b2lkIFJlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgcHJldmlvdXNUZXh0ID0gcGxhaW5UZXh0KG1fcmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkp
OwotICAgIGlmICghcHJldmlvdXNUZXh0Lmxlbmd0aCgpKQorICAgIGlmICghY2hhcmFjdGVyQ291
bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNv
bW1hbmRUb0NvbXBvc2l0ZShTZXRTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoc2VsZWN0aW9uLCBG
cmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBk
ODY2ZTg1NTI4YjJiMWMwYTM1YTcyZmMzNTBhZmM4NzhkYzc4MGE3Li41Mjc4ZGI5NWJkZjUzOGFk
ZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIFJlcGxh
Y2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQsIGNvbnN0IFZpc2liCiAgICAgfQogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoaG9sZGVyLmdl
dCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIFN0cmluZyB0ZXh0ID0gcGxhaW5UZXh0KHJh
bmdlLmdldCgpLCBzdGF0aWNfY2FzdDxUZXh0SXRlcmF0b3JCZWhhdmlvcj4oVGV4dEl0ZXJhdG9y
RW1pdHNPcmlnaW5hbFRleHQgfCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KSk7
CisgICAgU3RyaW5nIHRleHQgPSByYW5nZSA/IHBsYWluVGV4dCgqcmFuZ2UsIHN0YXRpY19jYXN0
PFRleHRJdGVyYXRvckJlaGF2aW9yPihUZXh0SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCB8IFRl
eHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkpKSA6IGVtcHR5U3RyaW5nKCk7CiAKICAg
ICByZW1vdmVJbnRlcmNoYW5nZU5vZGVzKGhvbGRlci5nZXQoKSk7CiAgICAgcmVtb3ZlVW5yZW5k
ZXJlZE5vZGVzKGhvbGRlci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1MTMzMTQ1MzkzZDE3M2E1Nzlk
MGE1MGMwYmZmMWM4ZTM1YWQ4MzQ3Li45OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0
NmJjMzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCkKIAogdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBtX2NvcnJlY3RlZCA9IHBsYWluVGV4dChtX3Jhbmdl
VG9CZUNvcnJlY3RlZC5wdHIoKSk7CisgICAgbV9jb3JyZWN0ZWQgPSBwbGFpblRleHQobV9yYW5n
ZVRvQmVDb3JyZWN0ZWQpOwogICAgIGlmICghbV9jb3JyZWN0ZWQubGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tp
bmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
Y3BwCmluZGV4IDk5YjhlMzFkZjBkY2M2MmFmMWZhZTA5ZDMxNmFiZjA5OTBiOGM5MjUuLmQ3MmUw
N2ZjMmQxZjg2MWI2MmU2MDA1OTFmOGEwNTkxYjFlMDNlODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTE4Nyw3ICsxODcsNyBAQCBSYW5n
ZSYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRBc1JhbmdlKCkgY29uc3QKIFN0cmluZ1Zp
ZXcgVGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0KCkgY29uc3QKIHsKICAgICBpZiAobV90ZXh0
LmlzTnVsbCgpKQotICAgICAgICBtX3RleHQgPSBwbGFpblRleHQoJnBhcmFncmFwaFJhbmdlKCkp
OworICAgICAgICBtX3RleHQgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgcmV0
dXJuIG1fdGV4dDsgCiB9CiAKQEAgLTMzNyw3ICszMzcsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5n
SGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1h
ciwgYgogICAgICAgICAgICAgbGFzdEl0ZXJhdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGN1cnJlbnRTdGFydE9mZnNldCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKLSAgICAgICAg
ICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UucHRy
KCkpOworICAgICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZyA9IHBsYWluVGV4dChwYXJh
Z3JhcGhSYW5nZSk7CiAgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpID4g
MCkgewogICAgICAgICAgICAgICAgIGJvb2wgZm91bmRHcmFtbWFyID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgdWludDY0X3Qgc3BlbGxpbmdMb2NhdGlvbiA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggMjE4NjRjOGY0ZmMwNWNiMzlhMTk3MDRkMjU0NDAz
ZTdlYTY4MTdkYi4uMTcyZTI2NDRjMjIxNDQ5YzVjNzc0ZjE5ZTYwNWJlMjU5ODVhMTY1ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtNDYsNyArNDYsNiBAQAog
I2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5l
VGV4dEJveC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJSYW5nZS5o
IgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTE0MSw4ICsxNDAsOCBAQCBwcml2YXRl
OgogCiAvLyAtLS0tLS0tLQogCi1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdHNJbldvcmQg
PSBzaXplb2YodW5zaWduZWQpICogODsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0SW5X
b3JkTWFzayA9IGJpdHNJbldvcmQgLSAxOworY29uc3RleHByIHVuc2lnbmVkIGJpdHNJbldvcmQg
PSBzaXplb2YodW5zaWduZWQpICogODsKK2NvbnN0ZXhwciB1bnNpZ25lZCBiaXRJbldvcmRNYXNr
ID0gYml0c0luV29yZCAtIDE7CiAKIHZvaWQgQml0U3RhY2s6OnB1c2goYm9vbCBiaXQpCiB7CkBA
IC0xNDM1LDI0ICsxNDM0LDYgQEAgdm9pZCBDaGFyYWN0ZXJJdGVyYXRvcjo6YWR2YW5jZShpbnQg
Y291bnQpCiAgICAgbV9ydW5PZmZzZXQgPSAwOwogfQogCi1zdGF0aWMgUmVmPFJhbmdlPiBjaGFy
YWN0ZXJTdWJyYW5nZShEb2N1bWVudCYgZG9jdW1lbnQsIENoYXJhY3Rlckl0ZXJhdG9yJiBpdCwg
aW50IG9mZnNldCwgaW50IGxlbmd0aCkKLXsKLSAgICBpdC5hZHZhbmNlKG9mZnNldCk7Ci0gICAg
aWYgKGl0LmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KTsK
LQotICAgIGF1dG8gc3RhcnQgPSBpdC5yYW5nZSgpLnN0YXJ0OwotCi0gICAgaWYgKGxlbmd0aCA+
IDEpCi0gICAgICAgIGl0LmFkdmFuY2UobGVuZ3RoIC0gMSk7Ci0gICAgaWYgKGl0LmF0RW5kKCkp
Ci0gICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KTsKLQotICAgIGF1dG8gZW5k
ID0gaXQucmFuZ2UoKS5lbmQ7Ci0KLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKFNpbXBsZVJh
bmdlIHsgc3RhcnQsIGVuZCB9KTsKLX0KLQogQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3I6OkJh
Y2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICA6
IG1fdW5kZXJseWluZ0l0ZXJhdG9yKHJhbmdlKQogewpAQCAtMTYyMyw3ICsxNjA0LDcgQEAgU3Ry
aW5nIGZvbGRRdW90ZU1hcmtzKGNvbnN0IFN0cmluZyYgc3RyaW5nVG9Gb2xkKQogCiAjaWYgIVVD
T05GSUdfTk9fQ09MTEFUSU9OCiAKLWNvbnN0IHNpemVfdCBtaW5pbXVtU2VhcmNoQnVmZmVyU2l6
ZSA9IDgxOTI7Citjb25zdGV4cHIgc2l6ZV90IG1pbmltdW1TZWFyY2hCdWZmZXJTaXplID0gODE5
MjsKIAogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBib29sIHNlYXJjaGVySW5Vc2U7CkBAIC0xODc2
LDcgKzE4NTcsNyBAQCBzdGF0aWMgYm9vbCBpc05vbkxhdGluMVNlcGFyYXRvcihVQ2hhcjMyIGNo
YXJhY3RlcikKIAogc3RhdGljIGlubGluZSBib29sIGlzU2VwYXJhdG9yKFVDaGFyMzIgY2hhcmFj
dGVyKQogewotICAgIHN0YXRpYyBjb25zdCBib29sIGxhdGluMVNlcGFyYXRvclRhYmxlWzI1Nl0g
PSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGxhdGluMVNlcGFyYXRvclRhYmxlWzI1Nl0g
PSB7CiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsCiAgICAgICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIC8vIHNwYWNlICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvCkBAIC0yMjc2LDcgKzIy
NTcsNyBAQCBpbmxpbmUgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogICAgICAgICBhcHBlbmQoY2hhcmFjdGVyc1swXSwg
dHJ1ZSk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBjb25zdCBpbnQgbWF4Rm9sZGVk
Q2hhcmFjdGVycyA9IDE2OyAvLyBzZW5zaWJsZSBtYXhpbXVtIGlzIDMsIHRoaXMgc2hvdWxkIGJl
IG1vcmUgdGhhbiBlbm91Z2gKKyAgICBjb25zdGV4cHIgaW50IG1heEZvbGRlZENoYXJhY3RlcnMg
PSAxNjsgLy8gc2Vuc2libGUgbWF4aW11bSBpcyAzLCB0aGlzIHNob3VsZCBiZSBtb3JlIHRoYW4g
ZW5vdWdoCiAgICAgVUNoYXIgZm9sZGVkQ2hhcmFjdGVyc1ttYXhGb2xkZWRDaGFyYWN0ZXJzXTsK
ICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBpbnQgbnVtRm9sZGVk
Q2hhcmFjdGVycyA9IHVfc3RyRm9sZENhc2UoZm9sZGVkQ2hhcmFjdGVycywgbWF4Rm9sZGVkQ2hh
cmFjdGVycywgY2hhcmFjdGVycywgMSwgVV9GT0xEX0NBU0VfREVGQVVMVCwgJnN0YXR1cyk7CkBA
IC0yNDE1LDMxICsyMzk2LDYgQEAgU2ltcGxlUmFuZ2UgcmVzb2x2ZUNoYXJhY3RlclJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UKICAgICByZXR1cm4g
cmVzdWx0UmFuZ2U7CiB9CiAKLUJvdW5kYXJ5UG9pbnQgcmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9u
KGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgdWludDY0X3QgbG9jYXRpb24sIFRleHRJdGVyYXRv
ckJlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uo
c2NvcGUsIHsgbG9jYXRpb24sIDAgfSwgYmVoYXZpb3IpLnN0YXJ0OwotfQotCi1ib29sIFRleHRJ
dGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0
IFJhbmdlKiByYW5nZSwgc2l6ZV90JiBsb2NhdGlvbiwgc2l6ZV90JiBsZW5ndGgpCi17Ci0gICAg
bG9jYXRpb24gPSBub3RGb3VuZDsKLSAgICBsZW5ndGggPSAwOwotCi0gICAgLy8gVGhlIGNyaXRp
Y2FsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0aCByYW5nZXMg
dGhhdAotICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2ZW4gYXJlYSBjb250YWluaW5nIHRoZSBz
ZWxlY3Rpb24gcm9vdC4gVGhpcyBpcyBkb25lCi0gICAgLy8gYmVjYXVzZSBvZiB0ZXh0IGZpZWxk
cyBhbmQgdGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9zZSBpcyBub3QgZGlyZWN0bHkKLSAgICAv
LyBpbiB0aGUgZG9jdW1lbnQgRE9NLCBzbyBlbnN1cmUgdGhhdCB0aGUgcmFuZ2UgZG9lcyBub3Qg
Y3Jvc3MgYSBib3VuZGFyeQotICAgIC8vIG9mIG9uZSBvZiB0aG9zZS4KLSAgICBpZiAoJnJhbmdl
LT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS5p
c0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoJnJh
bmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLmlz
RGVzY2VuZGFudE9mKHNjb3BlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbG9jYXRp
b24gPSBjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3BlLCAwIH0sIHsgcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpIH0gfSk7Ci0gICAgbGVuZ3RoID0gY2hhcmFjdGVy
Q291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVu
ZE9mZnNldCgpIH0gfSkgLSBsb2NhdGlvbjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogLy8gLS0t
LS0tLS0KIAogYm9vbCBoYXNBbnlQbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBU
ZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKQEAgLTI0NTQsNyArMjQxMCw3IEBAIGJvb2wg
aGFzQW55UGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgYmVoYXZpb3IpCiBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgZGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0
cmluZykKIHsKICAgICAvLyBUaGUgaW5pdGlhbCBidWZmZXIgc2l6ZSBjYW4gYmUgY3JpdGljYWwg
Zm9yIHBlcmZvcm1hbmNlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODExOTIKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5ID0gMSA8PCAx
NTsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5ID0gMSA8PCAxNTsKIAog
ICAgIGF1dG8gZG9jdW1lbnQgPSBtYWtlUmVmKHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpOwogCkBA
IC0yNDgxLDMyICsyNDM3LDExIEBAIFN0cmluZyBwbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBkZWZhdWx0QmVoYXZpb3IsCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotU3RyaW5nIHBsYWluVGV4dChjb25zdCBSYW5nZSogcmFuZ2UsIFRleHRJ
dGVyYXRvckJlaGF2aW9yIGRlZmF1bHRCZWhhdmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcpCi17
Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0
dXJuIHBsYWluVGV4dCgqcmFuZ2UsIGRlZmF1bHRCZWhhdmlvciwgaXNEaXNwbGF5U3RyaW5nKTsK
LX0KLQotU3RyaW5nIHBsYWluVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yRm9yVGVzdGlu
Zyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBm
b3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IoY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKSk7ICFiYWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpOyBiYWNrd2Fy
ZHNJdGVyYXRvci5hZHZhbmNlKCkpCi0gICAgICAgIHJlc3VsdC5pbnNlcnQoYmFja3dhcmRzSXRl
cmF0b3IudGV4dCgpLnRvU3RyaW5nKCksIDApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIFN0
cmluZyBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBkZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5
U3RyaW5nKQogewogICAgIHJldHVybiBwbGFpblRleHQocmFuZ2UsIGRlZmF1bHRCZWhhdmlvciwg
aXNEaXNwbGF5U3RyaW5nKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKIH0KIAotc3RhdGlj
IFNpbXBsZVJhbmdlIGNvbGxhcHNlZFRvQm91bmRhcnkoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBib29sIGZvcndhcmQpCi17Ci0gICAgYXV0byYgYm91bmRhcnkgPSBmb3J3YXJkID8gcmFuZ2Uu
ZW5kIDogcmFuZ2Uuc3RhcnQ7Ci0gICAgcmV0dXJuIHsgYm91bmRhcnksIGJvdW5kYXJ5IH07Ci19
Ci0KIHN0YXRpYyBUZXh0SXRlcmF0b3JCZWhhdmlvciBmaW5kSXRlcmF0b3JPcHRpb25zKEZpbmRP
cHRpb25zIG9wdGlvbnMpCiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgaXRlcmF0b3JPcHRp
b25zID0gVGV4dEl0ZXJhdG9yRW50ZXJzVGV4dENvbnRyb2xzIHwgVGV4dEl0ZXJhdG9yQ2xpcHNU
b0ZyYW1lQW5jZXN0b3JzOwpAQCAtMjUxNSwyMCArMjQ1MCwxOSBAQCBzdGF0aWMgVGV4dEl0ZXJh
dG9yQmVoYXZpb3IgZmluZEl0ZXJhdG9yT3B0aW9ucyhGaW5kT3B0aW9ucyBvcHRpb25zKQogICAg
IHJldHVybiBpdGVyYXRvck9wdGlvbnM7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbmRQbGFpblRleHRN
YXRjaGVzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIGNvbnN0IFdURjo6RnVuY3Rpb248Ym9vbChzaXplX3QsIHNpemVf
dCk+JiBtYXRjaCkKK3N0YXRpYyB2b2lkIGZvckVhY2hNYXRjaChjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBjb25zdCBG
dW5jdGlvbjxib29sKENoYXJhY3RlclJhbmdlKT4mIG1hdGNoKQogewogICAgIFNlYXJjaEJ1ZmZl
ciBidWZmZXIodGFyZ2V0LCBvcHRpb25zKTsKICAgICBpZiAoYnVmZmVyLm5lZWRzTW9yZUNvbnRl
eHQoKSkgewotICAgICAgICBSZWY8UmFuZ2U+IGJlZm9yZVN0YXJ0UmFuZ2UgPSByYW5nZS5zdGFy
dC5kb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIGJlZm9yZVN0YXJ0UmFuZ2UtPnNl
dEVuZChyYW5nZS5zdGFydC5jb250YWluZXIuY29weVJlZigpLCByYW5nZS5zdGFydC5vZmZzZXQp
OwotICAgICAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRz
SXRlcmF0b3IoYmVmb3JlU3RhcnRSYW5nZS5nZXQoKSk7ICFiYWNrd2FyZHNJdGVyYXRvci5hdEVu
ZCgpOyBiYWNrd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpIHsKKyAgICAgICAgYXV0byBiZWZvcmVT
dGFydFJhbmdlID0gU2ltcGxlUmFuZ2UgeyBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250
ZW50cyhyYW5nZS5zdGFydC5kb2N1bWVudCgpKSwgcmFuZ2Uuc3RhcnQgfTsKKyAgICAgICAgZm9y
IChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJlZm9y
ZVN0YXJ0UmFuZ2UpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0
b3IuYWR2YW5jZSgpKSB7CiAgICAgICAgICAgICBidWZmZXIucHJlcGVuZENvbnRleHQoYmFja3dh
cmRzSXRlcmF0b3IudGV4dCgpKTsKICAgICAgICAgICAgIGlmICghYnVmZmVyLm5lZWRzTW9yZUNv
bnRleHQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAg
IENoYXJhY3Rlckl0ZXJhdG9yIGZpbmRJdGVyYXRvcihjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBm
aW5kSXRlcmF0b3JPcHRpb25zKG9wdGlvbnMpKTsKKyAgICBDaGFyYWN0ZXJJdGVyYXRvciBmaW5k
SXRlcmF0b3IocmFuZ2UsIGZpbmRJdGVyYXRvck9wdGlvbnMob3B0aW9ucykpOwogICAgIHdoaWxl
ICghZmluZEl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgZmluZEl0ZXJhdG9yLmFkdmFuY2Uo
YnVmZmVyLmFwcGVuZChmaW5kSXRlcmF0b3IudGV4dCgpKSk7CiAgICAgICAgIHdoaWxlICgxKSB7
CkBAIC0yNTQzLDUzICsyNDc3LDY5IEBAIHN0YXRpYyB2b2lkIGZpbmRQbGFpblRleHRNYXRjaGVz
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzaXplX3QgbGFzdENoYXJhY3RlckluQnVmZmVyT2Zmc2V0ID0g
ZmluZEl0ZXJhdG9yLmNoYXJhY3Rlck9mZnNldCgpOwogICAgICAgICAgICAgQVNTRVJUKGxhc3RD
aGFyYWN0ZXJJbkJ1ZmZlck9mZnNldCA+PSBtYXRjaFN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAg
IGlmIChtYXRjaChsYXN0Q2hhcmFjdGVySW5CdWZmZXJPZmZzZXQgLSBtYXRjaFN0YXJ0T2Zmc2V0
LCBuZXdNYXRjaExlbmd0aCkpCisgICAgICAgICAgICBpZiAobWF0Y2goQ2hhcmFjdGVyUmFuZ2Uo
bGFzdENoYXJhY3RlckluQnVmZmVyT2Zmc2V0IC0gbWF0Y2hTdGFydE9mZnNldCwgbmV3TWF0Y2hM
ZW5ndGgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAK
LXN0YXRpYyBTaW1wbGVSYW5nZSByYW5nZUZvck1hdGNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgRmluZE9wdGlvbnMgb3B0aW9ucywgc2l6ZV90IG1hdGNoU3RhcnQsIHNpemVfdCBtYXRjaExl
bmd0aCwgYm9vbCBzZWFyY2hGb3J3YXJkKQorc3RhdGljIFNpbXBsZVJhbmdlIHJhbmdlRm9yTWF0
Y2goY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zLCBDaGFyYWN0
ZXJSYW5nZSBtYXRjaCkKIHsKLSAgICBpZiAoIW1hdGNoTGVuZ3RoKQotICAgICAgICByZXR1cm4g
Y29sbGFwc2VkVG9Cb3VuZGFyeShyYW5nZSwgc2VhcmNoRm9yd2FyZCk7Ci0gICAgQ2hhcmFjdGVy
SXRlcmF0b3IgcmFuZ2VDb21wdXRlSXRlcmF0b3IoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgZmlu
ZEl0ZXJhdG9yT3B0aW9ucyhvcHRpb25zKSk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlclN1YnJhbmdl
KHJhbmdlLnN0YXJ0LmRvY3VtZW50KCksIHJhbmdlQ29tcHV0ZUl0ZXJhdG9yLCBtYXRjaFN0YXJ0
LCBtYXRjaExlbmd0aCk7CisgICAgYXV0byBub01hdGNoUmVzdWx0ID0gWyZdICgpIHsKKyAgICAg
ICAgYXV0byYgYm91bmRhcnkgPSBvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykgPyByYW5nZS5z
dGFydCA6IHJhbmdlLmVuZDsKKyAgICAgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgYm91bmRhcnks
IGJvdW5kYXJ5IH07CisgICAgfTsKKworICAgIGlmICghbWF0Y2gubGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gbm9NYXRjaFJlc3VsdCgpOworCisgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXQocmFuZ2Us
IGZpbmRJdGVyYXRvck9wdGlvbnMob3B0aW9ucykpOworCisgICAgaXQuYWR2YW5jZShtYXRjaC5s
b2NhdGlvbik7CisgICAgaWYgKGl0LmF0RW5kKCkpCisgICAgICAgIHJldHVybiBub01hdGNoUmVz
dWx0KCk7CisgICAgYXV0byBzdGFydCA9IGl0LnJhbmdlKCkuc3RhcnQ7CisKKyAgICBpdC5hZHZh
bmNlKG1hdGNoLmxlbmd0aCAtIDEpOworICAgIGlmIChpdC5hdEVuZCgpKQorICAgICAgICByZXR1
cm4gbm9NYXRjaFJlc3VsdCgpOworCisgICAgcmV0dXJuIHsgV1RGTW92ZShzdGFydCksIGl0LnJh
bmdlKCkuZW5kIH07CiB9CiAKLVNpbXBsZVJhbmdlIGZpbmRDbG9zZXN0UGxhaW5UZXh0KGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9w
dGlvbnMsIHVuc2lnbmVkIHRhcmdldE9mZnNldCkKK1NpbXBsZVJhbmdlIGZpbmRDbG9zZXN0UGxh
aW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIHVpbnQ2NF90IHRhcmdldE9mZnNldCkKIHsKLSAgICBzaXplX3Qg
bWF0Y2hTdGFydCA9IDA7Ci0gICAgc2l6ZV90IG1hdGNoTGVuZ3RoID0gMDsKLSAgICBzaXplX3Qg
ZGlzdGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOwotICAgIGF1dG8g
bWF0Y2ggPSBbdGFyZ2V0T2Zmc2V0LCAmZGlzdGFuY2UsICZtYXRjaFN0YXJ0LCAmbWF0Y2hMZW5n
dGhdIChzaXplX3Qgc3RhcnQsIHNpemVfdCBsZW5ndGgpIHsKLSAgICAgICAgc2l6ZV90IG5ld0Rp
c3RhbmNlID0gc3RkOjptaW4oYWJzKHN0YXRpY19jYXN0PHNpZ25lZD4oc3RhcnQgLSB0YXJnZXRP
ZmZzZXQpKSwgYWJzKHN0YXRpY19jYXN0PHNpZ25lZD4oc3RhcnQgKyBsZW5ndGggLSB0YXJnZXRP
ZmZzZXQpKSk7Ci0gICAgICAgIGlmIChuZXdEaXN0YW5jZSA8IGRpc3RhbmNlKSB7Ci0gICAgICAg
ICAgICBtYXRjaFN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICAgICBtYXRjaExlbmd0aCA9IGxlbmd0
aDsKLSAgICAgICAgICAgIGRpc3RhbmNlID0gbmV3RGlzdGFuY2U7Ci0gICAgICAgIH0KKyAgICBD
aGFyYWN0ZXJSYW5nZSBjbG9zZXN0TWF0Y2g7CisgICAgdWludDY0X3QgY2xvc2VzdE1hdGNoRGlz
dGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CisgICAgZm9yRWFj
aE1hdGNoKHJhbmdlLCB0YXJnZXQsIG9wdGlvbnMsIFsmXSAoQ2hhcmFjdGVyUmFuZ2UgbWF0Y2gp
IHsKKyAgICAgICAgYXV0byBkaXN0YW5jZSA9IFtdICh1aW50NjRfdCBhLCB1aW50NjRfdCBiKSAt
PiB1aW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjphYnMoc3RhdGljX2Nhc3Q8aW50
NjRfdD4oYSAtIGIpKTsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byBtYXRjaERpc3RhbmNlID0g
c3RkOjptaW4oZGlzdGFuY2UobWF0Y2gubG9jYXRpb24sIHRhcmdldE9mZnNldCksIGRpc3RhbmNl
KG1hdGNoLmxvY2F0aW9uICsgbWF0Y2gubGVuZ3RoLCB0YXJnZXRPZmZzZXQpKTsKKyAgICAgICAg
aWYgKG1hdGNoRGlzdGFuY2UgPiBjbG9zZXN0TWF0Y2hEaXN0YW5jZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1hdGNoRGlzdGFuY2UgPT0gY2xvc2VzdE1hdGNoRGlz
dGFuY2UgJiYgIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2xvc2VzdE1hdGNoID0gbWF0Y2g7CisgICAgICAgIGlmICghbWF0
Y2hEaXN0YW5jZSAmJiAhb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNsb3Nlc3RNYXRjaERpc3RhbmNlID0gbWF0Y2hEaXN0YW5j
ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICBmaW5kUGxhaW5UZXh0TWF0
Y2hlcyhyYW5nZSwgdGFyZ2V0LCBvcHRpb25zLCBXVEZNb3ZlKG1hdGNoKSk7Ci0gICAgcmV0dXJu
IHJhbmdlRm9yTWF0Y2gocmFuZ2UsIG9wdGlvbnMsIG1hdGNoU3RhcnQsIG1hdGNoTGVuZ3RoLCAh
b3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmFuZ2VG
b3JNYXRjaChyYW5nZSwgb3B0aW9ucywgY2xvc2VzdE1hdGNoKTsKIH0KIAogU2ltcGxlUmFuZ2Ug
ZmluZFBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewotICAgIGJvb2wgc2VhcmNoRm9yd2FyZCA9ICFv
cHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcyk7Ci0gICAgc2l6ZV90IG1hdGNoU3RhcnQgPSAwOwot
ICAgIHNpemVfdCBtYXRjaExlbmd0aCA9IDA7Ci0gICAgYXV0byBtYXRjaCA9IFtzZWFyY2hGb3J3
YXJkLCAmbWF0Y2hTdGFydCwgJm1hdGNoTGVuZ3RoXSAoc2l6ZV90IHN0YXJ0LCBzaXplX3QgbGVu
Z3RoKSB7Ci0gICAgICAgIG1hdGNoU3RhcnQgPSBzdGFydDsKLSAgICAgICAgbWF0Y2hMZW5ndGgg
PSBsZW5ndGg7Ci0gICAgICAgIC8vIExvb2sgZm9yIHRoZSBsYXN0IG1hdGNoIHdoZW4gc2VhcmNo
aW5nIGJhY2t3YXJkcyBpbnN0ZWFkLgotICAgICAgICByZXR1cm4gc2VhcmNoRm9yd2FyZDsKLSAg
ICB9OwotCi0gICAgZmluZFBsYWluVGV4dE1hdGNoZXMocmFuZ2UsIHRhcmdldCwgb3B0aW9ucywg
V1RGTW92ZShtYXRjaCkpOwotICAgIHJldHVybiByYW5nZUZvck1hdGNoKHJhbmdlLCBvcHRpb25z
LCBtYXRjaFN0YXJ0LCBtYXRjaExlbmd0aCwgc2VhcmNoRm9yd2FyZCk7CisgICAgLy8gV2hlbiBz
ZWFyY2hpbmcgZm9yd2FyZCBzdG9wIHNpbmNlIHdlIHdhbnQgdGhlIGZpcnN0IG1hdGNoLgorICAg
IC8vIFdoZW4gc2VhcmNoaW5nIGJhY2t3YXJkIGtlZXAgZ29pbmcgc2luY2Ugd2Ugd2FudCB0aGUg
bGFzdCBtYXRjaC4KKyAgICBib29sIHN0b3BBZnRlckZpbmRpbmdNYXRjaCA9ICFvcHRpb25zLmNv
bnRhaW5zKEJhY2t3YXJkcyk7CisgICAgQ2hhcmFjdGVyUmFuZ2UgbGFzdE1hdGNoRm91bmQ7Cisg
ICAgZm9yRWFjaE1hdGNoKHJhbmdlLCB0YXJnZXQsIG9wdGlvbnMsIFsmXSAoQ2hhcmFjdGVyUmFu
Z2UgbWF0Y2gpIHsKKyAgICAgICAgbGFzdE1hdGNoRm91bmQgPSBtYXRjaDsKKyAgICAgICAgcmV0
dXJuIHN0b3BBZnRlckZpbmRpbmdNYXRjaDsKKyAgICB9KTsKKyAgICByZXR1cm4gcmFuZ2VGb3JN
YXRjaChyYW5nZSwgb3B0aW9ucywgbGFzdE1hdGNoRm91bmQpOwogfQogCiBib29sIGNvbnRhaW5z
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBG
aW5kT3B0aW9ucyBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5k
ZXggZTE2MDI4NzViMmY3NWVkMzFlNzUwMWNhYTMwMGI0YzhmNjM5YmYyZS4uOWRlYTczM2I2YjFm
M2M2MTE5ZWI2ODkzMTQ2NzgwMjYxNWU3MWY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5oCkBAIC0zNCwyMyArMzQsMjcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlclRleHRGcmFnbWVudDsKIAotLy8gRklYTUU6IERlbGV0
ZSB0aGlzIG92ZXJsb2FkIGFmdGVyIG1vdmluZyBhbGwgdGhlIGNhbGxlcnMgdG8gdGhlIFNpbXBs
ZVJhbmdlIHZlcnNpb24uCi1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFJh
bmdlKiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3Is
IGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOworLy8gQ2hhcmFjdGVyIHJhbmdlcyBiYXNl
ZCBvbiBjaGFyYWN0ZXJzIGZyb20gdGhlIHRleHQgaXRlcmF0b3IuCitXRUJDT1JFX0VYUE9SVCB1
aW50NjRfdCBjaGFyYWN0ZXJDb3VudChjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJl
aGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKK0NoYXJhY3RlclJhbmdlIGNo
YXJhY3RlclJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHN0YXJ0LCBjb25zdCBTaW1wbGVSYW5n
ZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsK
K0NoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwg
Y29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRl
ZmF1bHRCZWhhdmlvcik7CitCb3VuZGFyeVBvaW50IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihj
b25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIHVpbnQ2NF90LCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CitXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5n
ZSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCBDaGFyYWN0
ZXJSYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3IpOwogCisvLyBUZXh0IGZyb20gdGhlIHRleHQgaXRlcmF0b3IuCiBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3Ig
PSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFs
c2UpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNBbnlQbGFpblRleHQoY29uc3QgU2ltcGxlUmFu
Z2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7
CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKGNv
bnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZh
dWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOwotV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHBsYWluVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yRm9yVGVzdGluZyhj
b25zdCBTaW1wbGVSYW5nZSYpOwogCisvLyBGaW5kIHdpdGhpbiB0aGUgZG9jdW1lbnQsIGJhc2Vk
IG9uIHRoZSB0ZXh0IGZyb20gdGhlIHRleHQgaXRlcmF0b3IuCiBTaW1wbGVSYW5nZSBmaW5kUGxh
aW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOwot
V0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgZmluZENsb3Nlc3RQbGFpblRleHQoY29uc3QgU2lt
cGxlUmFuZ2UmLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwotV0VCQ09S
RV9FWFBPUlQgYm9vbCBoYXNBbnlQbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRl
cmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CitXRUJDT1JFX0VY
UE9SVCBTaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYs
IGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1aW50NjRfdCB0YXJnZXRDaGFyYWN0ZXJPZmZz
ZXQpOwogYm9vbCBjb250YWluc1BsYWluVGV4dChjb25zdCBTdHJpbmcmIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7IC8vIExldHMgdXMgdXNlIHRoZSBzZWFyY2ggYWxnb3Jp
dGhtIG9uIGEgc3RyaW5nLgogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGZvbGRRdW90ZU1hcmtzKGNv
bnN0IFN0cmluZyYpOwogCi0vLyBGSVhNRTogTW92ZSB0aGlzIHNvbWV3aGVyZSBlbHNlIGluIHRo
ZSBlZGl0aW5nIGRpcmVjdG9yeS4gSXQgZG9lc24ndCBiZWxvbmcgaGVyZS4KKy8vIEZJWE1FOiBN
b3ZlIHRoaXMgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGVkaXRpbmcgZGlyZWN0b3J5LiBJdCBkb2Vz
bid0IGJlbG9uZyBpbiB0aGUgaGVhZGVyIHdpdGggVGV4dEl0ZXJhdG9yLgogYm9vbCBpc1JlbmRl
cmVyUmVwbGFjZWRFbGVtZW50KFJlbmRlck9iamVjdCopOwogCiAvLyBGSVhNRTogTW92ZSBlYWNo
IGl0ZXJhdG9yIGNsYXNzIGludG8gYSBzZXBhcmF0ZSBoZWFkZXIgZmlsZS4KQEAgLTEwMyw5ICsx
MDcsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgVGV4dEl0ZXJhdG9yQ29weWFibGVUZXh0JiBjb3B5
YWJsZVRleHQoKSBjb25zdCB7IEFTU0VSVCghYXRFbmQoKSk7IHJldHVybiBtX2NvcHlhYmxlVGV4
dDsgfQogICAgIHZvaWQgYXBwZW5kVGV4dFRvU3RyaW5nQnVpbGRlcihTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyKSBjb25zdCB7IGNvcHlhYmxlVGV4dCgpLmFwcGVuZFRvU3RyaW5nQnVpbGRlcihidWls
ZGVyKTsgfQogCi0gICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBTaW1wbGVSYW5nZSBhbmQgQ2hh
cmFjdGVyUmFuZ2UgYW5kIG1vdmUgb3V0IG9mIHRoaXMgY2xhc3MgdG8gdGhlIHRvcCBsZXZlbC4K
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21S
YW5nZShOb2RlKiBzY29wZSwgY29uc3QgUmFuZ2UqLCBzaXplX3QmIGxvY2F0aW9uLCBzaXplX3Qm
IGxlbmd0aCk7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KCk7CiAgICAgdm9pZCBleGl0Tm9k
ZShOb2RlKik7CkBAIC0xNzMsMTAgKzE3NCwxMCBAQCBwcml2YXRlOgogLy8gY2h1bmtzIHNvIGFz
IHRvIG9wdGltaXplIGZvciBwZXJmb3JtYW5jZSBvZiB0aGUgaXRlcmF0aW9uLgogY2xhc3MgU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBTaW1wbGVSYW5nZSYpOworICAgIFdF
QkNPUkVfRVhQT1JUIGV4cGxpY2l0IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29u
c3QgU2ltcGxlUmFuZ2UmKTsKIAogICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9w
b3NpdGlvbk5vZGU7IH0KLSAgICB2b2lkIGFkdmFuY2UoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFkdmFuY2UoKTsKIAogICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgQVNTRVJUKCFh
dEVuZCgpKTsgcmV0dXJuIG1fdGV4dDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdl
IHJhbmdlKCkgY29uc3Q7CkBAIC0yODgsOSArMjg5LDE5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2RpZExvb2tBaGVhZCB7IHRydWUgfTsKIH07CiAKK2lubGluZSBDaGFyYWN0ZXJSYW5nZSBjaGFy
YWN0ZXJSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiBzdGFydCwgY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICByZXR1cm4geyBj
aGFyYWN0ZXJDb3VudCh7IHN0YXJ0LCByYW5nZS5zdGFydCB9LCBiZWhhdmlvciksIGNoYXJhY3Rl
ckNvdW50KHJhbmdlLCBiZWhhdmlvcikgfTsKK30KIAotV0VCQ09SRV9FWFBPUlQgdWludDY0X3Qg
Y2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7Ci1XRUJDT1JFX0VYUE9SVCBCb3VuZGFyeVBv
aW50IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihjb25zdCBTaW1wbGVSYW5nZSYsIHVpbnQ2NF90
LCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7Ci1X
RUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmLCBDaGFyYWN0ZXJSYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRl
cmF0b3JEZWZhdWx0QmVoYXZpb3IpOworaW5saW5lIENoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBU
ZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFu
Z2Uoc2NvcGUuc3RhcnQsIHJhbmdlLCBiZWhhdmlvcik7Cit9CisKK2lubGluZSBCb3VuZGFyeVBv
aW50IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIHVp
bnQ2NF90IGxvY2F0aW9uLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICBy
ZXR1cm4gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNjb3BlLCB7IGxvY2F0aW9uLCAwIH0sIGJlaGF2
aW9yKS5zdGFydDsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggYzRkODBmYjU1MDhmMWUyNmM2ODkxODUzODJh
ZWZjMGNmZGI5YTIyNi4uNWE2YzUzYzAzODM3MGNmYjBhMzhhYjBkYTRmNTYxOGZiYWJiMjVhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC00NjUsNyArNDY1
LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5
cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gbWFrZVJhbmdlKHAxLCBwMik7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaXBwZWRQcmV2aW91
c1dvcmQ7CiAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0Nv
bW1hbmQ6Okluc2VydFRleHQgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0
TGluZUJyZWFrIHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFw
aFNlcGFyYXRvciB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpKQotICAgICAgICAgICAgICAgIHN0cmlwcGVkUHJl
dmlvdXNXb3JkID0gcGxhaW5UZXh0KHJhbmdlLmdldCgpKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWluVGV4dCgqcmFuZ2UpLnN0
cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkubWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJl
dmlvdXNXb3JkLmlzRW1wdHkoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0g
VHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCkKICAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLnN0
YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuY3BwCmluZGV4IGQ2ZjcxNzg5ZTRlMWY5OWY4Yzc0NTUzMGYyMTU3N2Y0ODk4Njg1OTIu
LjMyNTNiNmZiMGJhYjBlYTA0NzRkY2IzZWM3MWM5NDIwYjVhOTcwNDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTE5MzQsNyArMTkzNCw3IEBAIHZvaWQgY2hh
cmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFVD
aGFyMzImIG9uZUFmdGVyCiAgICAgfQogCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gZW5kUG9z
aXRpb24pIHsKLSAgICAgICAgU3RyaW5nIGNoYXJhY3RlclN0cmluZyA9IHBsYWluVGV4dChSYW5n
ZTo6Y3JlYXRlKHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5kb2N1bWVu
dCgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikucHRyKCkpLnJlcGxhY2Uobm9CcmVha1Nw
YWNlLCAnICcpOworICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3RyaW5nID0gcGxhaW5UZXh0KHsg
Km1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
UG9zaXRpb24pIH0pLnJlcGxhY2Uobm9CcmVha1NwYWNlLCAnICcpOwogICAgICAgICBmb3IgKGlu
dCBpID0gY2hhcmFjdGVyU3RyaW5nLmxlbmd0aCgpIC0gMSwgaW5kZXggPSAwOyBpID49IDAgJiYg
aW5kZXggPCBtYXhDaGFyYWN0ZXJzOyAtLWkpIHsKICAgICAgICAgICAgIGlmICghaW5kZXggJiYg
bmV4dFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGluZGV4Kys7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggOTllNjE1OWNj
YTY3Njk1OWE5ODBhNDEyOTU2YjhjNWQzZjMzNjYyNi4uNTU3YmZlY2FlYTAyMzI4NWFlYTA5MGQ0
ZjA1NzFkN2RhOGQzM2FiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0
YURldGVjdGlvbi5tbQpAQCAtNzAsMTAgKzcwLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29u
dGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFu
Z2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKIHsKLSAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmlu
ZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwogICAgIGF1dG8gc3RhcnQgPSBjb250
ZXh0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgcG9z
aXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBuaWw7CisgICAgU3RyaW5nIGZ1bGxQbGFp
blRleHRTdHJpbmcgPSBwbGFpblRleHQoKmNvbnRleHRSYW5nZSk7CiAgICAgQ0ZJbmRleCBoaXRM
b2NhdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKIAogICAgIGF1dG8gc2Nhbm5lciA9IGFkb3B0
Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3Vw
Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmlu
ZGV4IDQ3YWQ0N2E3M2RkYzNlNzI1MWZiMWYzMDU1YmIxMjBjYzllMWYwOTQuLmEyM2RjNDA3YTll
YzA2NTVmYjY3ZjdhYzRlMDU3OTdhODE3ZjlmMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTI4Niw3ICsyODYsNyBAQCBzdGQ6
OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpy
YW5nZUZvclNlbGVjdGlvbihjbwogICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5n
ZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7CiAKICAg
ICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhT
dGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChm
dWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5U
ZXh0KCpmdWxsQ2hhcmFjdGVyUmFuZ2UpOwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBh
ZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2Vs
ZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pLmdldCgpLmhpZ2hsaWdodFJhbmdlOwogCiAgICAgcmV0
dXJuIHsgY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZnVsbENoYXJhY3Rl
clJhbmdlLCBoaWdobGlnaHRSYW5nZSkpLCBuaWwgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9IVE1MQ29udmVydGVyLmgKaW5kZXggYWFiNDljNDc2YTU5NjQ0MTVlOTliMzFlMjRl
ZmI3Yjc0M2Y3NmQ1Zi4uNTgwNTMwOTI1ZDRiYzQyZjA4Yjg2ZWZjOTAxZWQ5YzljNmFjYWY2NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmgKQEAgLTM1
LDEyICszNSwxMCBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCiBlbnVtIGNsYXNzIEluY2x1
ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgeyBZZXMsIE5vIH07CiAKLU5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOworTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRFbmQoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlv
biYpOworV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5n
RnJvbVJhbmdlKFJhbmdlJik7CiAKLS8vIEZvciB0ZXN0aW5nIHB1cnBvc2Ugb25seQotV0VCQ09S
RV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0
QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBOU0RpY3Rpb25hcnkqKiBk
b2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLQotV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiwgTlNEaWN0aW9uYXJ5
KiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCiBXRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKFJhbmdlJiwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZyA9
IEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Olllcyk7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQppbmRleCBhNTQzYWMyZDFh
ZTJhYzM4ZjhjZDI3ZmIyNTdmZTJkMTYyNDBkY2VmLi40OTIxMzNhZWVlNDI2MTE2NGRjZWVkOGM5
ODYzNjE5NWJkMTIwODA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1M
Q29udmVydGVyLm1tCkBAIC0yODAsNyArMjgwLDcgQEAgcHVibGljOgogICAgIEhUTUxDb252ZXJ0
ZXIoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwogICAgIH5IVE1MQ29udmVydGVy
KCk7CiAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGNvbnZlcnQoTlNEaWN0aW9uYXJ5KiogZG9j
dW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nKiBjb252
ZXJ0KCk7CiAKIHByaXZhdGU6CiAgICAgUG9zaXRpb24gbV9zdGFydDsKQEAgLTM5OSw3ICszOTks
NyBAQCBIVE1MQ29udmVydGVyOjp+SFRNTENvbnZlcnRlcigpCiAgICAgW193cml0aW5nRGlyZWN0
aW9uQXJyYXkgcmVsZWFzZV07CiB9CiAKLU5TQXR0cmlidXRlZFN0cmluZyAqSFRNTENvbnZlcnRl
cjo6Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCitOU0F0dHJpYnV0
ZWRTdHJpbmcgKkhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQoKQogewogICAgIGlmIChjb21wYXJlUG9z
aXRpb25zKG1fc3RhcnQsIG1fZW5kKSA+IDApCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC00MjAs
OSArNDIwLDYgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpIVE1MQ29udmVydGVyOjpjb252ZXJ0KE5T
RGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKICAgICBpZiAoX2RvbVJhbmdlU3RhcnRJ
bmRleCA+IDAgJiYgX2RvbVJhbmdlU3RhcnRJbmRleCA8PSBbX2F0dHJTdHIgbGVuZ3RoXSkKICAg
ICAgICAgW19hdHRyU3RyIGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIF9k
b21SYW5nZVN0YXJ0SW5kZXgpXTsKIAotICAgIGlmIChkb2N1bWVudEF0dHJpYnV0ZXMpCi0gICAg
ICAgICpkb2N1bWVudEF0dHJpYnV0ZXMgPSBbW19kb2N1bWVudEF0dHJzIHJldGFpbl0gYXV0b3Jl
bGVhc2VdOwotCiAgICAgcmV0dXJuIFtbX2F0dHJTdHIgcmV0YWluXSBhdXRvcmVsZWFzZV07CiB9
CiAKQEAgLTIzNzAsMTkgKzIzNjcsMTkgQEAgc3RhdGljIFJldGFpblB0cjxOU0ZpbGVXcmFwcGVy
PiBmaWxlV3JhcHBlckZvckVsZW1lbnQoSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBtb3JlIEhUTUwgZmVh
dHVyZXMgdGhhbiB0aGUgZWRpdGluZyB2YXJpYW50IGJlbG93LCBzdWNoIGFzIHRhYmxlcy4KLU5T
QXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2Us
IE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKK05TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIEhU
TUxDb252ZXJ0ZXIgeyByYW5nZS5zdGFydFBvc2l0aW9uKCksIHJhbmdlLmVuZFBvc2l0aW9uKCkg
fS5jb252ZXJ0KGRvY3VtZW50QXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEhUTUxDb252ZXJ0ZXIg
eyByYW5nZS5zdGFydFBvc2l0aW9uKCksIHJhbmdlLmVuZFBvc2l0aW9uKCkgfS5jb252ZXJ0KCk7
CiB9CiAKLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVu
dEF0dHJpYnV0ZXMpCitOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKLSAgICByZXR1cm4g
YXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZChzZWxlY3Rpb24uc3RhcnQoKSwgc2Vs
ZWN0aW9uLmVuZCgpLCBkb2N1bWVudEF0dHJpYnV0ZXMpOworICAgIHJldHVybiBhdHRyaWJ1dGVk
U3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uZW5k
KCkpOwogfQogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3Rh
cnRBbmRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBOU0Rp
Y3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCitOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJp
YnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBQb3NpdGlvbiYgZW5kKQogewotICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgc3RhcnQsIGVu
ZCB9LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gSFRNTENvbnZlcnRl
ciB7IHN0YXJ0LCBlbmQgfS5jb252ZXJ0KCk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXBMZWdhY3kubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
TGVnYWN5Lm1tCmluZGV4IGMwZTNmNTVlNmUzNjQ0YWUxOWVlNWEzOTZmNjRiYWRlNjZlYzUxYzcu
LmFlY2JjZDEzMzZmYzE3YTAwZWU2NjI4N2UxM2JlMTIxNDBkMjk5ZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQpAQCAt
ODcsMTcgKzg3LDE2IEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+
IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAgICAgYXV0byBzZWxlY3Rp
b25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwogCiAgICAgLy8gQXMgY29udGV4dCwgd2Ug
YXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsK
LSAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Ci0g
ICAgaWYgKHBhcmFncmFwaFN0YXJ0LmlzTnVsbCgpIHx8IHBhcmFncmFwaEVuZC5pc051bGwoKSkK
KyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCkpOworICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKSk7CisgICAgaWYgKCFwYXJhZ3Jh
cGhTdGFydCB8fCAhcGFyYWdyYXBoRW5kKQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKIAotICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IGNoYXJhY3RlckNvdW50KHsg
Km1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNl
bGVjdGlvblN0YXJ0KSB9KTsKLSAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50ID0gY2hh
cmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJv
dW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KTsKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0g
TlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uQ2hhcmFjdGVyQ291
bnQpOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRh
cnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQp
IH07CisgICAgYXV0byBwYXJhZ3JhcGhSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnBhcmFncmFwaFN0
YXJ0LCAqcGFyYWdyYXBoRW5kIH07CiAKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7
Ci0gICAgdG9rZW5SYW5nZShwbGFpblRleHQobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJh
Z3JhcGhFbmQpLmdldCgpKSwgcmFuZ2VUb1Bhc3MsICZvcHRpb25zKTsKKyAgICB0b2tlblJhbmdl
KHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZSksIGNoYXJhY3RlclJhbmdlKHBhcmFncmFwaFJhbmdl
LCBzZWxlY3Rpb25SYW5nZSksICZvcHRpb25zKTsKIAogICAgIHJldHVybiB7IHNlbGVjdGVkUmFu
Z2UsIG9wdGlvbnMgfTsKIH0KQEAgLTE0Miw3ICsxNDEsNyBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxS
YW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJl
c3VsdAogCiAgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNv
dW50KHsgKmZ1bGxDaGFyYWN0ZXJTdGFydCwgKnBvc2l0aW9uQm91bmRhcnkgfSksIDApOwogICAg
IE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKLSAgICBhdXRvIGV4dHJhY3RlZFJhbmdlID0g
dG9rZW5SYW5nZShwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKSwgcmFuZ2VUb1Bh
c3MsICZvcHRpb25zKTsKKyAgICBhdXRvIGV4dHJhY3RlZFJhbmdlID0gdG9rZW5SYW5nZShwbGFp
blRleHQoKmZ1bGxDaGFyYWN0ZXJSYW5nZSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CiAKICAg
ICAvLyB0b2tlblJhbmdlIHNvbWV0aW1lcyByZXR1cm5zIHtOU05vdEZvdW5kLCAwfSBpZiBpdCB3
YXMgdW5hYmxlIHRvIGRldGVybWluZSBhIGdvb2Qgc3RyaW5nLgogICAgIC8vIEZJWE1FICgxNTkw
NjMpOiBXZSBzaG91bGRuJ3QgbmVlZCB0byBjaGVjayBmb3IgemVybyBsZW5ndGggaGVyZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCA0MmY5YmNhNmU5NThjZWRiYTU2NDY2ZDlhMzQ3
N2RkZTc3NjlkZjRhLi5jYmY2Mjg4ZTliYWVjNWUyOTM1MTVmNTA2YWNkNTkyYTNiMjhlY2RhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC00MzUsNyArNDM1LDEyIEBAIFN0cmluZyBT
dHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6cmVuZGVyZWRUZXh0UmVzcGVjdGluZ1JhbmdlKGNvbnN0
IFRleHQmIHRleHQpCiAgICAgICAgICAgICBiZWhhdmlvciA9IFRleHRJdGVyYXRvckJlaGF2ZXNB
c0lmTm9kZXNGb2xsb3dpbmc7CiAgICAgfQogCi0gICAgcmV0dXJuIHBsYWluVGV4dChSYW5nZTo6
Y3JlYXRlKHRleHQuZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCkucHRyKCksIGJlaGF2aW9yKTsKKyAg
ICBhdXRvIHN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7CisgICAgYXV0
byBlbmRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZCk7CisgICAgaWYgKCFzdGFydEJv
dW5kYXJ5IHx8ICFlbmRCb3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisK
KyAgICByZXR1cm4gcGxhaW5UZXh0KHsgV1RGTW92ZSgqc3RhcnRCb3VuZGFyeSksIFdURk1vdmUo
KmVuZEJvdW5kYXJ5KSB9LCBiZWhhdmlvcik7CiB9CiAKIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6dGV4dENvbnRlbnRSZXNwZWN0aW5nUmFuZ2UoY29uc3QgVGV4dCYgdGV4dCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IDY4MWNhNzgw
MDE5MTk3OTdiYzQ5ZDBlODQ2OTdlOTk5OWZkZWJkOTkuLjVjMjk3Y2E2ZjZhMGQ3MDVlZDgyNzgw
YjQyZGE3NGVkMzZhZmUzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmNwcApAQCAtMzE4LDcgKzMxOCw4IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6
aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQmCiAg
ICAgLy8gSWYgdGhlIHRleHQgZmllbGQgaGFzIG5vIGZvY3VzLCB3ZSBkb24ndCBuZWVkIHRvIHRh
a2UgYWNjb3VudCBvZiB0aGUKICAgICAvLyBzZWxlY3Rpb24gbGVuZ3RoLiBUaGUgc2VsZWN0aW9u
IGlzIHRoZSBzb3VyY2Ugb2YgdGV4dCBkcmFnLWFuZC1kcm9wIGluCiAgICAgLy8gdGhhdCBjYXNl
LCBhbmQgbm90aGluZyBpbiB0aGUgdGV4dCBmaWVsZCB3aWxsIGJlIHJlbW92ZWQuCi0gICAgdW5z
aWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gZm9jdXNlZCgpID8gY29tcHV0ZUxlbmd0aEZvclN1Ym1p
c3Npb24ocGxhaW5UZXh0KGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpIDogMDsKKyAgICBhdXRvIHNlbGVjdGlvblJh
bmdlID0gZm9jdXNlZCgpID8gZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpIDogbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBzZWxlY3Rp
b25MZW5ndGggPSBzZWxlY3Rpb25SYW5nZSA/IGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNzaW9uKHBs
YWluVGV4dCgqc2VsZWN0aW9uUmFuZ2UpKSA6IDA7CiAgICAgQVNTRVJUKGN1cnJlbnRMZW5ndGgg
Pj0gc2VsZWN0aW9uTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gY3VycmVudExl
bmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKICAgICB1bnNpZ25lZCBhcHBlbmRhYmxlTGVuZ3RoID0g
dW5zaWduZWRNYXhMZW5ndGggPiBiYXNlTGVuZ3RoID8gdW5zaWduZWRNYXhMZW5ndGggLSBiYXNl
TGVuZ3RoIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVy
LmNwcAppbmRleCA3MmIxMzA2N2QxYmMzNmIzZGJjODkxNGFkZjAxODhjNDEzNzFjNzYxLi4yYzMy
YjJmNWI2ZDRhZWRhMmU4ZWNlNTQzNDQ2NTAwYWRiMTI4ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC00MzEsNyArNDMxLDcgQEAgdm9p
ZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRN
ZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+
c2VsZWN0Tm9kZSgqZWxlbWVudCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9jbGllbnQuc3BlYWso
cGxhaW5UZXh0KHNlbGVjdGVkUmFuZ2UuZ2V0KCkpKTsKKyAgICAgICAgbV9jbGllbnQuc3BlYWso
cGxhaW5UZXh0KCpzZWxlY3RlZFJhbmdlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2luZzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2Vs
ZWN0aW9uLmNwcAppbmRleCA0NzVlNjRiYWRmNTAwNDk1MmEyZjYzZmQ2NjcxZDUxMzJhMzQ0MWRi
Li5kZDdmOGU4ZWFlNzYyZTZiNzkwZTQxMWMyODMyNTYzNGFhMWZlYzRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC00NDgsNyArNDQ4LDggQEAgU3RyaW5nIERPTVNlbGVj
dGlvbjo6dG9TdHJpbmcoKQogICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHBsYWluVGV4
dChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSk7CisgICAgYXV0byByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dCgqcmFuZ2UpIDog
ZW1wdHlTdHJpbmcoKTsKIH0KIAogTm9kZSogRE9NU2VsZWN0aW9uOjpzaGFkb3dBZGp1c3RlZE5v
ZGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXgg
OWYwYTQwNmRlNDE0OTE4M2Y4NTExNjEyNGIzZWQ1YzE5YjFlZjJlYi4uMjYxY2RjYmQ3YWYzYjEz
MGQ5NTk1MTk2ZTQxNzRmZTkzZDA2MzdjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC04ODIsMjIg
Kzg4MiwxMCBAQCB1aW50MzJfdCBQYWdlOjpyZXBsYWNlUmFuZ2VzV2l0aFRleHQoY29uc3QgVmVj
dG9yPFJlZjxSYW5nZT4+JiByYW5nZXNUb1JlcGxhY2UsCiAKICAgICBmb3IgKGF1dG8mIHJhbmdl
IDogcmFuZ2VzVG9SZXBsYWNlKSB7CiAgICAgICAgIGF1dG8gaGlnaGVzdFJvb3QgPSBtYWtlUmVm
UHRyKGhpZ2hlc3RFZGl0YWJsZVJvb3QocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgICAg
ICBpZiAoIWhpZ2hlc3RSb290IHx8IGhpZ2hlc3RSb290ICE9IGhpZ2hlc3RFZGl0YWJsZVJvb3Qo
cmFuZ2UtPmVuZFBvc2l0aW9uKCkpKQorICAgICAgICBpZiAoIWhpZ2hlc3RSb290IHx8IGhpZ2hl
c3RSb290ICE9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocmFuZ2UtPmVuZFBvc2l0aW9uKCkpIHx8ICFo
aWdoZXN0Um9vdC0+ZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIoaGlnaGVzdFJvb3QtPmRvY3VtZW50KCku
ZnJhbWUoKSk7Ci0gICAgICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBzaXplX3QgcmVwbGFjZW1lbnRMb2NhdGlvbiA9IG5vdEZvdW5kOwotICAgICAgICBz
aXplX3QgcmVwbGFjZW1lbnRMZW5ndGggPSAwOwotICAgICAgICBpZiAoIVRleHRJdGVyYXRvcjo6
Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoaGlnaGVzdFJvb3QuZ2V0KCksIHJhbmdlLnB0
cigpLCByZXBsYWNlbWVudExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpZiAocmVwbGFjZW1lbnRMb2NhdGlvbiA9PSBub3RGb3Vu
ZCB8fCAhcmVwbGFjZW1lbnRMZW5ndGgpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICByZXBsYWNlbWVudFJhbmdlcy5hcHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgeyByZXBs
YWNlbWVudExvY2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCB9IH0pOworICAgICAgICBhdXRvIHNj
b3BlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpoaWdoZXN0Um9vdCk7CisgICAg
ICAgIHJlcGxhY2VtZW50UmFuZ2VzLmFwcGVuZCh7IFdURk1vdmUoaGlnaGVzdFJvb3QpLCBjaGFy
YWN0ZXJSYW5nZShzY29wZSwgcmFuZ2UpIH0pOwogICAgIH0KIAogICAgIHJlcGxhY2VSYW5nZXMo
KnRoaXMsIHJlcGxhY2VtZW50UmFuZ2VzLCByZXBsYWNlbWVudFRleHQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2lvcy9GcmFtZUlPUy5tbQppbmRleCA2ZWU0ZmI0NDU1ZGM2OTBkNGViOTljNDNhMmI5MzgxMmYx
NDE3MmRiLi4wNjI4NWE1MTg0ZTVhNGMwMGEzMWJhNjMzNDIzZGI1ZGJjOTg4MDk4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtNzMwLDcgKzczMCw3IEBAIE5TQXJyYXkgKkZy
YW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0CiAKICAgICAvLyBUaGVy
ZSBhcmUgbm8gcGhyYXNlcyB3aXRoIGFsdGVybmF0aXZlcywgc28gdGhlcmUgaXMganVzdCBvbmUg
aW50ZXJwcmV0YXRpb24uCiAgICAgaWYgKG1hcmtlcnNJblJvb3QuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnBsYWluVGV4dChyYW5nZU9mUm9vdENv
bnRlbnRzLnB0cigpKV07CisgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6
cGxhaW5UZXh0KHJhbmdlT2ZSb290Q29udGVudHMpXTsKIAogICAgIC8vIFRoZSBudW1iZXIgb2Yg
aW50ZXJwcmV0YXRpb25zIHdpbGwgYmUgaTEgKiBpMiAqIC4uLiAqIGlOLCB3aGVyZSBpWCBpcyB0
aGUgbnVtYmVyIG9mIGludGVycHJldGF0aW9ucyBmb3IgdGhlIFh0aCBwaHJhc2Ugd2l0aCBhbHRl
cm5hdGl2ZXMuCiAgICAgc2l6ZV90IGludGVycHJldGF0aW9uc0NvdW50ID0gMTsKQEAgLTc1Miw3
ICs3NTIsNyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3Qo
KSBjb25zdAogICAgICAgICAgICAgLy8gRmlyc3QsIGFkZCB0ZXh0IHRoYXQgcHJlY2VkZSB0aGUg
bWFya2VyLgogICAgICAgICAgICAgaWYgKHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uICE9IGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgYXV0byBwcmVjZWRpbmdUZXh0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KCpkb2N1bWVudCgpLCBwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSkpOwotICAgICAgICAgICAg
ICAgIFN0cmluZyBwcmVjZWRpbmdUZXh0ID0gcGxhaW5UZXh0KHByZWNlZGluZ1RleHRSYW5nZS5w
dHIoKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHByZWNlZGluZ1RleHQgPSBwbGFpblRleHQo
cHJlY2VkaW5nVGV4dFJhbmdlKTsKICAgICAgICAgICAgICAgICBpZiAoIXByZWNlZGluZ1RleHQu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaW50ZXJwcmV0YXRp
b24gOiBpbnRlcnByZXRhdGlvbnMpCiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaW50
ZXJwcmV0YXRpb24sIHByZWNlZGluZ1RleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCmluZGV4IDk0NWRkZmQ1NzZkMjZmZTNiODI3OGNkMjY5MGVjMGZhNGU4ZjVlZjYuLjkzZDNl
NjMwZDUyNTM2MWNjYzFkMDhmYmQ4NzQxMGVkOWJhZmNkOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKQEAgLTIwNTEsMTggKzIwNTEsMTIgQEAgUmVmUHRyPFJhbmdlPiBJbnRl
cm5hbHM6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKEVsZW1lbnQmIHNjb3BlLCB1bnNpZ25l
ZCByYW4KIAogdW5zaWduZWQgSW50ZXJuYWxzOjpsb2NhdGlvbkZyb21SYW5nZShFbGVtZW50JiBz
Y29wZSwgY29uc3QgUmFuZ2UmIHJhbmdlKQogewotICAgIHNpemVfdCBsb2NhdGlvbiA9IDA7Ci0g
ICAgc2l6ZV90IHVudXNlZExlbmd0aCA9IDA7Ci0gICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlv
bkFuZExlbmd0aEZyb21SYW5nZSgmc2NvcGUsICZyYW5nZSwgbG9jYXRpb24sIHVudXNlZExlbmd0
aCk7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOworICAgIHJldHVybiBjbGFtcFRvPHVuc2lnbmVkPihj
aGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhzY29wZSks
IHJhbmdlKS5sb2NhdGlvbik7CiB9CiAKIHVuc2lnbmVkIEludGVybmFsczo6bGVuZ3RoRnJvbVJh
bmdlKEVsZW1lbnQmIHNjb3BlLCBjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgc2l6ZV90IHVu
dXNlZExvY2F0aW9uID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLSAgICBUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKCZzY29wZSwgJnJhbmdlLCB1bnVzZWRM
b2NhdGlvbiwgbGVuZ3RoKTsKLSAgICByZXR1cm4gbGVuZ3RoOworICAgIHJldHVybiBjbGFtcFRv
PHVuc2lnbmVkPihjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250
ZW50cyhzY29wZSksIHJhbmdlKS5sZW5ndGgpOwogfQogCiBTdHJpbmcgSW50ZXJuYWxzOjpyYW5n
ZUFzVGV4dChjb25zdCBSYW5nZSYgcmFuZ2UpCkBAIC0yMDcyLDcgKzIwNjYsMTAgQEAgU3RyaW5n
IEludGVybmFsczo6cmFuZ2VBc1RleHQoY29uc3QgUmFuZ2UmIHJhbmdlKQogCiBTdHJpbmcgSW50
ZXJuYWxzOjpyYW5nZUFzVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdl
JiByYW5nZSkKIHsKLSAgICByZXR1cm4gcGxhaW5UZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0
b3JGb3JUZXN0aW5nKHJhbmdlKTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGZvciAoU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihyYW5nZSk7ICFiYWNr
d2FyZHNJdGVyYXRvci5hdEVuZCgpOyBiYWNrd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpCisgICAg
ICAgIHJlc3VsdC5pbnNlcnQoYmFja3dhcmRzSXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCksIDAp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZjxSYW5nZT4gSW50ZXJuYWxzOjpzdWJyYW5n
ZShSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIHJhbmdlTG9jYXRpb24sIHVuc2lnbmVkIHJhbmdlTGVu
Z3RoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKaW5kZXggNzZlZjQ3MjJkNzUx
Y2Y2ZTU5YWFiOWVkZmFiNjY1NmU3MDRmMTZlYS4uODZhYzU1M2U2ZmNjMDgyMmFkNDE4YzZhMGQz
ZjhjZjljNGE5OWI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1Jh
bmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCkBAIC02
NSwxNiArNjUsMTUgQEAgRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKFdlYkNv
cmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UmFuZ2UKIHsKICAgICBBU1NFUlQoZWRp
dGluZ1JhbmdlSXNSZWxhdGl2ZVRvID09IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFi
bGVSb290KTsKIAotICAgIHNpemVfdCBsb2NhdGlvbiA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9
IDA7Ci0gICAgaWYgKCFyYW5nZSB8fCAhV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlv
bkFuZExlbmd0aEZyb21SYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
T3JEb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UsIGxvY2F0aW9uLCBsZW5ndGgpKQorICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBFZGl0aW5nUmFuZ2UgZWRpdGluZ1Jh
bmdlKGxvY2F0aW9uLCBsZW5ndGgpOwotICAgIGlmICghZWRpdGluZ1JhbmdlLmlzVmFsaWQoKSkK
KyAgICBhdXRvKiBlbGVtZW50ID0gZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVu
dE9yRG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgcmV0dXJuIGVkaXRpbmdSYW5nZTsKKyAgICBhdXRvIHJlbGF0aXZlUmFuZ2Ug
PSBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZWxl
bWVudCksICpyYW5nZSk7CisgICAgcmV0dXJuIEVkaXRpbmdSYW5nZShyZWxhdGl2ZVJhbmdlLmxv
Y2F0aW9uLCByZWxhdGl2ZVJhbmdlLmxlbmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcu
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLmgKaW5kZXggODUz
MGY4MThiYWMxZjU5YjlmZWNiNmEyNjc1MzAxMjIyYTJhM2Y0MS4uMDJkNmIwMTAyNjFhZDMwOGE4
YWU2N2EyM2RhMjhlZmY2M2FiNzM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL0F0dHJpYnV0ZWRTdHJpbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXR0
cmlidXRlZFN0cmluZy5oCkBAIC0zMyw5ICszMywxMCBAQCBPQkpDX0NMQVNTIE5TQXR0cmlidXRl
ZFN0cmluZzsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgQXR0cmlidXRlZFN0cmluZyB7
Ci0gICAgQXR0cmlidXRlZFN0cmluZygpCi0gICAgewotICAgIH0KKyAgICBSZXRhaW5QdHI8TlNB
dHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmc7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZG9j
dW1lbnRBdHRyaWJ1dGVzOworCisgICAgQXR0cmlidXRlZFN0cmluZygpID0gZGVmYXVsdDsKIAog
I2lmIGRlZmluZWQoX19PQkpDX18pCiAgICAgQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRT
dHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcsIE5TRGljdGlvbmFyeSAqZG9jdW1lbnRBdHRyaWJ1dGVz
ID0gbmlsKQpAQCAtNDQsMjIgKzQ1LDI2IEBAIHN0cnVjdCBBdHRyaWJ1dGVkU3RyaW5nIHsKICAg
ICB7CiAgICAgfQogCisgICAgQXR0cmlidXRlZFN0cmluZyhSZXRhaW5QdHI8TlNBdHRyaWJ1dGVk
U3RyaW5nPiYmIGF0dHJpYnV0ZWRTdHJpbmcsIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+JiYgZG9j
dW1lbnRBdHRyaWJ1dGVzID0geyB9KQorICAgICAgICA6IHN0cmluZyhXVEZNb3ZlKGF0dHJpYnV0
ZWRTdHJpbmcpKQorICAgICAgICAsIGRvY3VtZW50QXR0cmlidXRlcyhXVEZNb3ZlKGRvY3VtZW50
QXR0cmlidXRlcykpCisgICAgeworICAgIH0KKwogICAgIG9wZXJhdG9yIE5TQXR0cmlidXRlZFN0
cmluZyAqKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzdHJpbmcuZ2V0KCk7CiAgICAg
fQogI2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmc7Ci0g
ICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZG9jdW1lbnRBdHRyaWJ1dGVzOwogfTsKIAogfQog
CiBuYW1lc3BhY2UgSVBDIHsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJL
aXQ6OkF0dHJpYnV0ZWRTdHJpbmc+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYs
IGNvbnN0IFdlYktpdDo6QXR0cmlidXRlZFN0cmluZyYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxX
ZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmc+IGRlY29kZShEZWNvZGVyJik7CiB9OwotfQogCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXR0cmlidXRlZFN0cmluZy5tbSBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLm1tCmluZGV4IDNjNDcw
MDU2ODM4ZDEyYmFiYTdlYTVlYWY4MTQ3YTVmN2M4ODc1ZTcuLjBmMmU5MmRiNjU0ZTQwOGM3YTAy
ZjM2YmU0NTY3OGIyMzlhNzAzNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9BdHRyaWJ1dGVkU3RyaW5nLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdHRy
aWJ1dGVkU3RyaW5nLm1tCkBAIC00NSw3ICs0NSw3IEBAIE9wdGlvbmFsPFdlYktpdDo6QXR0cmli
dXRlZFN0cmluZz4gQXJndW1lbnRDb2RlcjxXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmc+OjpkZWNv
CiAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZG9jdW1lbnRBdHRyaWJ1dGVzOwogICAgIGlm
ICghSVBDOjpkZWNvZGUoZGVjb2RlciwgZG9jdW1lbnRBdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gV2ViS2l0OjpBdHRyaWJ1dGVkU3RyaW5nIHsg
YXR0cmlidXRlZFN0cmluZy5nZXQoKSwgZG9jdW1lbnRBdHRyaWJ1dGVzLmdldCgpIH07CisgICAg
cmV0dXJuIHsgeyBXVEZNb3ZlKGF0dHJpYnV0ZWRTdHJpbmcpLCBXVEZNb3ZlKGRvY3VtZW50QXR0
cmlidXRlcykgfSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvVGV4dENoZWNrZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4
dENoZWNrZXJNYWMubW0KaW5kZXggMGQxOWU0YmU1MThmOWJkOGEyZDk0YTk1MzIzMDA5N2E1YzZl
Y2YzOC4uZDc4NmYxMWQzOTNjN2U0Yjc4OGJjZWMzNjdlYWUwOTZmN2Y3NTJlMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQpAQCAtNDM2LDE4ICs0
MzYsMTMgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHIKIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhTcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwp
CiB7CiAgICAgYXV0byBjb3JyZWN0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF0pOwotICAgIGZvciAoYXV0byYgZ3Vlc3MgOiBncmFtbWFyRGV0YWlsLmd1ZXNzZXMp
IHsKLSAgICAgICAgTlNTdHJpbmcgKmd1ZXNzTlNTdHJpbmcgPSBndWVzczsKLSAgICAgICAgW2Nv
cnJlY3Rpb25zIGFkZE9iamVjdDpndWVzc05TU3RyaW5nXTsKLSAgICB9Ci0KLSAgICBOU1N0cmlu
ZyAqZGVzY3JpcHRpb25OU1N0cmluZyA9IGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uOwor
ICAgIGZvciAoYXV0byYgZ3Vlc3MgOiBncmFtbWFyRGV0YWlsLmd1ZXNzZXMpCisgICAgICAgIFtj
b3JyZWN0aW9ucyBhZGRPYmplY3Q6Z3Vlc3NdOwogICAgIE5TRGljdGlvbmFyeSAqZGV0YWlsID0g
QHsKICAgICAgICAgTlNHcmFtbWFyUmFuZ2UgOiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpncmFt
bWFyRGV0YWlsLnJhbmdlXSwKLSAgICAgICAgTlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uIDogZGVz
Y3JpcHRpb25OU1N0cmluZywKKyAgICAgICAgTlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uIDogZ3Jh
bW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24sCiAgICAgICAgIE5TR3JhbW1hckNvcnJlY3Rpb25z
IDogY29ycmVjdGlvbnMuZ2V0KCksCiAgICAgfTsKLQogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hh
cmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVsbGluZ1BhbmVsV2l0aEdyYW1tYXJTdHJpbmc6YmFk
R3JhbW1hclBocmFzZSBkZXRhaWw6ZGV0YWlsXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdD
b250cm9sbGVyUHJveHkuaAppbmRleCAwNzQxM2NmYzkzOTg1ZmU1ZDk5ZTk0MDY4ZjE2MTVmNGIy
NDRjNjE0Li5mNDhmMGI2NzFhZDhmYmYxNDkyNThiNjhhYzc3NzliMGQ1NzU0NzEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdD
b250cm9sbGVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkuaApAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAgICAgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5KFdlYlBhZ2UmKTsKICAgICB+VGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5KCk7CiAKLSAgICBBdHRyaWJ1dGVkU3RyaW5nIGFubm90
YXRlZFN1YnN0cmluZ0JldHdlZW5Qb3NpdGlvbnMoY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0
aW9uJiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJik7CisgICAgc3RhdGljIEF0dHJp
YnV0ZWRTdHJpbmcgYW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucyhjb25zdCBXZWJD
b3JlOjpWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mKTsK
IAogcHJpdmF0ZToKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgpAQCAtNjUsOCArNjUsOCBA
QCBwcml2YXRlOgogICAgIE9wdGlvbmFsPFJhbmdlQW5kT2Zmc2V0PiByYW5nZUFuZE9mZnNldFJl
bGF0aXZlVG9TZWxlY3Rpb24oaW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCk7CiAKICAg
ICAvLyBNZXNzYWdlIGhhbmRsZXJzLgotICAgIHZvaWQgcmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rp
b24oQXR0cmlidXRlZFN0cmluZywgaW50NjRfdCBzZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxl
bmd0aCwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9uLCB1aW50NjRfdCByZWxh
dGl2ZVJlcGxhY2VtZW50TGVuZ3RoKTsKLSAgICB2b2lkIHJlbW92ZUFubm90YXRpb25SZWxhdGl2
ZVRvU2VsZWN0aW9uKFN0cmluZyBhbm5vdGF0aW9uTmFtZSwgaW50NjRfdCBzZWxlY3Rpb25PZmZz
ZXQsIHVpbnQ2NF90IGxlbmd0aCk7CisgICAgdm9pZCByZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlv
bihjb25zdCBBdHRyaWJ1dGVkU3RyaW5nJiwgaW50NjRfdCBzZWxlY3Rpb25PZmZzZXQsIHVpbnQ2
NF90IGxlbmd0aCwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9uLCB1aW50NjRf
dCByZWxhdGl2ZVJlcGxhY2VtZW50TGVuZ3RoKTsKKyAgICB2b2lkIHJlbW92ZUFubm90YXRpb25S
ZWxhdGl2ZVRvU2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgYW5ub3RhdGlvbk5hbWUsIGludDY0X3Qg
c2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgpOwogCiAgICAgV2ViUGFnZSYgbV9wYWdl
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29h
L1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQppbmRleCA2NTlk
NWFmZjMxZDM5MTNlZjQ4MTRiMmE2MjEwYTFlYjc4NmM1ZDJiLi5lZDQ3ZjM3MGZiY2UyOTYwNTE5
NGZmZWViMDJlNGU1ZDI1ZDkyNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxl
clByb3h5Lm1tCkBAIC03MiwyOCArNzIsMjggQEAgc3RhdGljIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gcmVsZXZhbnRNYXJrZXJUeXBlcygpCiAKIE9wdGlvbmFsPFRleHRD
aGVja2luZ0NvbnRyb2xsZXJQcm94eTo6UmFuZ2VBbmRPZmZzZXQ+IFRleHRDaGVja2luZ0NvbnRy
b2xsZXJQcm94eTo6cmFuZ2VBbmRPZmZzZXRSZWxhdGl2ZVRvU2VsZWN0aW9uKGludDY0X3Qgb2Zm
c2V0LCB1aW50NjRfdCBsZW5ndGgpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLmNvcmVQ
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGF1dG8m
IGZyYW1lU2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgZnJhbWVTZWxl
Y3Rpb24gPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCkuc2VsZWN0aW9uKCk7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWVTZWxlY3Rp
b24uc2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gcm9vdCA9IGZyYW1lU2VsZWN0aW9uLnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmICghcm9vdCkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKLSAgICByYW5nZS0+Y29sbGFwc2UodHJ1ZSk7CisgICAgYXV0byBz
ZWxlY3Rpb25MaXZlUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBp
ZiAoIXNlbGVjdGlvbkxpdmVSYW5nZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBhdXRvIHNlbGVjdGlvblJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqc2VsZWN0aW9uTGl2ZVJhbmdl
IH07CiAKLSAgICBzaXplX3Qgc2VsZWN0aW9uTG9jYXRpb247Ci0gICAgc2l6ZV90IHNlbGVjdGlv
bkxlbmd0aDsKLSAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdl
KHJvb3QsIHJhbmdlLmdldCgpLCBzZWxlY3Rpb25Mb2NhdGlvbiwgc2VsZWN0aW9uTGVuZ3RoKTsK
LSAgICBzZWxlY3Rpb25Mb2NhdGlvbiArPSBvZmZzZXQ7CisgICAgYXV0byBzY29wZSA9IG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCk7CisgICAgaW50NjRfdCBhZGp1c3RlZFN0
YXJ0TG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7IHNjb3BlLnN0YXJ0LCBzZWxlY3Rpb25SYW5n
ZS5zdGFydCB9KSArIG9mZnNldDsKKyAgICBpZiAoYWRqdXN0ZWRTdGFydExvY2F0aW9uIDwgMCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIGFkanVzdGVkU2VsZWN0aW9u
Q2hhcmFjdGVyUmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZSB7IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihh
ZGp1c3RlZFN0YXJ0TG9jYXRpb24pLCBsZW5ndGggfTsKIAotICAgIHJldHVybiB7IHsgY3JlYXRl
TGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoKnJvb3QpLCB7IHNlbGVjdGlvbkxvY2F0aW9uLCBsZW5ndGggfSkpLCBzZWxlY3Rpb25M
b2NhdGlvbiB9IH07CisgICAgcmV0dXJuIHsgeyBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJh
Y3RlclJhbmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJhbmdlKSksIGFkanVz
dGVkU2VsZWN0aW9uQ2hhcmFjdGVyUmFuZ2UubG9jYXRpb24gfSB9OwogfQogCi12b2lkIFRleHRD
aGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24oQXR0cmli
dXRlZFN0cmluZyBhbm5vdGF0ZWRTdHJpbmcsIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50
NjRfdCBsZW5ndGgsIHVpbnQ2NF90IHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgdWludDY0
X3QgcmVsYXRpdmVSZXBsYWNlbWVudExlbmd0aCkKK3ZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxl
clByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBBdHRyaWJ1dGVkU3RyaW5n
JiBhbm5vdGF0ZWRTdHJpbmcsIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5n
dGgsIHVpbnQ2NF90IHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgdWludDY0X3QgcmVsYXRp
dmVSZXBsYWNlbWVudExlbmd0aCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UuY29yZVBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgRnJhbWVT
ZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CkBAIC0xNTQsNyAr
MTU0LDcgQEAgdm9pZCBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlcGxhY2VSZWxhdGl2
ZVRvU2VsZWN0aW9uKEF0dHJpYnV0ZWRTdHJpbmcgYW4KICAgICB9XTsKIH0KIAotdm9pZCBUZXh0
Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlbW92ZUFubm90YXRpb25SZWxhdGl2ZVRvU2VsZWN0
aW9uKFN0cmluZyBhbm5vdGF0aW9uLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3Qg
bGVuZ3RoKQordm9pZCBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlbW92ZUFubm90YXRp
b25SZWxhdGl2ZVRvU2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgYW5ub3RhdGlvbiwgaW50NjRfdCBz
ZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBt
X3BhZ2UuY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7
CiAgICAgYXV0byByYW5nZUFuZE9mZnNldCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVj
dGlvbihzZWxlY3Rpb25PZmZzZXQsIGxlbmd0aCk7CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBU
ZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlbW92ZUFubm90YXRpb25SZWxhdGl2ZVRvU2Vs
ZWN0aW9uKFN0cmluZyBhbm4KICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBib29sIHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMgPSAoYW5ub3RhdGlvbiA9PSBTdHJpbmco
QCJOU1NwZWxsaW5nU3RhdGUiKSk7CisgICAgYm9vbCByZW1vdmVDb3JlU3BlbGxpbmdNYXJrZXJz
ID0gYW5ub3RhdGlvbiA9PSAiTlNTcGVsbGluZ1N0YXRlIjsKICAgICBmcmFtZS5kb2N1bWVudCgp
LT5tYXJrZXJzKCkuZmlsdGVyTWFya2VycygqcmFuZ2UsIFsmXSAoRG9jdW1lbnRNYXJrZXIqIG1h
cmtlcikgewogICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJr
ZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTc1LDUxICsxNzUsMzAgQEAgdm9pZCBUZXh0Q2hlY2tpbmdD
b250cm9sbGVyUHJveHk6OnJlbW92ZUFubm90YXRpb25SZWxhdGl2ZVRvU2VsZWN0aW9uKFN0cmlu
ZyBhbm4KIAogQXR0cmlidXRlZFN0cmluZyBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OmFu
bm90YXRlZFN1YnN0cmluZ0JldHdlZW5Qb3NpdGlvbnMoY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBv
c2l0aW9uJiBzdGFydCwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJiBlbmQpCiB7Ci0g
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZyA9IGFkb3B0TlMo
W1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7Ci0gICAgTlNVSW50ZWdl
ciBzdHJpbmdMZW5ndGggPSAwOwotCi0gICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IHN0
YXJ0LmRlZXBFcXVpdmFsZW50KCkuZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBlbnRpcmVSYW5nZSA9IG1ha2VSYW5nZShzdGFy
dCwgZW5kKTsKLSAgICBpZiAoIWVudGlyZVJhbmdlKQorICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9
IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKKyAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJv
dW5kYXJ5UG9pbnQoZW5kKTsKKyAgICBpZiAoIXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5
KQogICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gZW50aXJlUmFuZ2UgPSBTaW1wbGVSYW5n
ZSB7ICpzdGFydEJvdW5kYXJ5LCAqZW5kQm91bmRhcnkgfTsKIAotICAgIFJlZlB0cjxOb2RlPiBj
b21tb25BbmNlc3RvciA9IGVudGlyZVJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpOwot
ICAgIHNpemVfdCBlbnRpcmVSYW5nZUxvY2F0aW9uOwotICAgIHNpemVfdCBlbnRpcmVSYW5nZUxl
bmd0aDsKLSAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGNv
bW1vbkFuY2VzdG9yLmdldCgpLCBlbnRpcmVSYW5nZS5nZXQoKSwgZW50aXJlUmFuZ2VMb2NhdGlv
biwgZW50aXJlUmFuZ2VMZW5ndGgpOworICAgIGF1dG8gc3RyaW5nID0gYWRvcHROUyhbW05TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdKTsKIAotICAgIGZvciAoVGV4dEl0ZXJh
dG9yIGl0KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoZW5kLmRlZXBFcXVpdmFsZW50KCkpIH0pOyAhaXQuYXRFbmQoKTsgaXQu
YWR2YW5jZSgpKSB7Ci0gICAgICAgIGludCBjdXJyZW50VGV4dExlbmd0aCA9IGl0LnRleHQoKS5s
ZW5ndGgoKTsKLSAgICAgICAgaWYgKCFjdXJyZW50VGV4dExlbmd0aCkKKyAgICBmb3IgKFRleHRJ
dGVyYXRvciBpdChlbnRpcmVSYW5nZSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKKyAg
ICAgICAgaWYgKCFpdC50ZXh0KCkubGVuZ3RoKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBbc3RyaW5nIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzppdC50ZXh0KCkuY3JlYXRlTlNTdHJpbmdXaXRob3V0
Q29weWluZygpLmdldCgpXSBhdXRvcmVsZWFzZV1dOwotCi0gICAgICAgIFNpbXBsZVJhbmdlIGN1
cnJlbnRUZXh0UmFuZ2UgPSBpdC5yYW5nZSgpOwotICAgICAgICBhdXRvIG1hcmtlcnMgPSBkb2N1
bWVudC0+bWFya2VycygpLm1hcmtlcnNJblJhbmdlKGNyZWF0ZUxpdmVSYW5nZShjdXJyZW50VGV4
dFJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nKTsKKyAgICAgICAg
W3N0cmluZyBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOmFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOml0LnRleHQoKS5jcmVhdGVOU1N0cmluZ1dpdGhvdXRD
b3B5aW5nKCkuZ2V0KCldKS5nZXQoKV07CisgICAgICAgIGF1dG8gcmFuZ2UgPSBpdC5yYW5nZSgp
OworICAgICAgICBhdXRvIG1hcmtlcnMgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMo
KS5tYXJrZXJzSW5SYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBEb2N1bWVudE1hcmtlcjo6
UGxhdGZvcm1UZXh0Q2hlY2tpbmcpOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6
IG1hcmtlcnMpIHsKICAgICAgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxEb2N1
bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXItPmRhdGEoKSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGF1dG8mIHRleHRDaGVja2lu
Z0RhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRh
PihtYXJrZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBhdXRvIHN1YnJhbmdlID0gcmVzb2x2ZUNo
YXJhY3RlclJhbmdlKGN1cnJlbnRUZXh0UmFuZ2UsIHsgbWFya2VyLT5zdGFydE9mZnNldCgpLCBt
YXJrZXItPmVuZE9mZnNldCgpIC0gbWFya2VyLT5zdGFydE9mZnNldCgpIH0pOwotCi0gICAgICAg
ICAgICBzaXplX3Qgc3VicmFuZ2VMb2NhdGlvbjsKLSAgICAgICAgICAgIHNpemVfdCBzdWJyYW5n
ZUxlbmd0aDsKLSAgICAgICAgICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhG
cm9tUmFuZ2UoY29tbW9uQW5jZXN0b3IuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZShzdWJyYW5nZSku
cHRyKCksIHN1YnJhbmdlTG9jYXRpb24sIHN1YnJhbmdlTGVuZ3RoKTsKLQotICAgICAgICAgICAg
QVNTRVJUKHN1YnJhbmdlTG9jYXRpb24gPiBlbnRpcmVSYW5nZUxvY2F0aW9uKTsKLSAgICAgICAg
ICAgIEFTU0VSVChzdWJyYW5nZUxvY2F0aW9uICsgc3VicmFuZ2VMZW5ndGggPCBlbnRpcmVSYW5n
ZUxlbmd0aCk7Ci0gICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZTp0ZXh0Q2hlY2tpbmdE
YXRhLmtleSB2YWx1ZTp0ZXh0Q2hlY2tpbmdEYXRhLnZhbHVlIHJhbmdlOk5TTWFrZVJhbmdlKHN1
YnJhbmdlTG9jYXRpb24gLSBlbnRpcmVSYW5nZUxvY2F0aW9uLCBzdWJyYW5nZUxlbmd0aCldOwor
ICAgICAgICAgICAgYXV0byYgZGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpQbGF0Zm9y
bVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKTsKKyAgICAgICAgICAgIGF1dG8gc3Vi
cmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocmFuZ2UsIHsgbWFya2VyLT5zdGFydE9mZnNl
dCgpLCBtYXJrZXItPmVuZE9mZnNldCgpIC0gbWFya2VyLT5zdGFydE9mZnNldCgpIH0pOworICAg
ICAgICAgICAgW3N0cmluZyBhZGRBdHRyaWJ1dGU6ZGF0YS5rZXkgdmFsdWU6ZGF0YS52YWx1ZSBy
YW5nZTpjaGFyYWN0ZXJSYW5nZShlbnRpcmVSYW5nZSwgc3VicmFuZ2UpXTsKICAgICAgICAgfQot
Ci0gICAgICAgIHN0cmluZ0xlbmd0aCArPSBjdXJyZW50VGV4dExlbmd0aDsKICAgICB9CiAKLSAg
ICByZXR1cm4gc3RyaW5nLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIFJldGFpblB0cjxOU0F0
dHJpYnV0ZWRTdHJpbmc+IHsgV1RGTW92ZShzdHJpbmcpIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29j
b2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29j
b2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDBjMTcyMGZjOWMyOWU0ZjcxODEwNjI2MmY0MjlhZWRj
ZTg3YWNiNzIuLjlkNGRjYmIxZDE4NjQ2MzY0NGVhNDBlNjIzZDFhNDBmYWIxNjhlZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdl
Q29jb2EubW0KQEAgLTIzOCwxMyArMjM4LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRDb250ZW50c0Fz
QXR0cmlidXRlZFN0cmluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEF0dHJpYnUKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5TRGljdGlvbmFyeSogZG9jdW1lbnRBdHRyaWJ1
dGVzID0gbmlsOwotCi0gICAgQXR0cmlidXRlZFN0cmluZyByZXN1bHQ7Ci0gICAgcmVzdWx0LnN0
cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVu
dEVsZW1lbnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVzKTsKLSAgICByZXN1bHQuZG9jdW1lbnRBdHRy
aWJ1dGVzID0gZG9jdW1lbnRBdHRyaWJ1dGVzOwotCi0gICAgY29tcGxldGlvbkhhbmRsZXIoeyBy
ZXN1bHQgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoeyBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlKHJhbmdlT2ZDb250ZW50cygqZG9jdW1lbnRFbGVtZW50KSkgfSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZTo6c2V0UmVtb3RlT2JqZWN0UmVnaXN0cnkoV2ViUmVtb3RlT2JqZWN0UmVnaXN0cnkqIHJl
Z2lzdHJ5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
CmluZGV4IDRhNTEzYjYwMTc4MTQyZmIzZDM3NDJjNjJkZjhjYTUwZjdjMDE4NWUuLjQ2OGMzNTlj
MWY1NTZjY2EzMWUyNWJhNTgzNTcwYmMyM2I1OGFjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTM2MiwyMCArMzYyLDE1IEBAIFN0cmlu
ZyBXZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZygpIGNvbnN0CiAgICAgICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9jb3Jl
RnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byBkb2N1bWVudCA9IG1fY29yZUZyYW1lLT5kb2N1
bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAot
ICAgIFJlZlB0cjxFbGVtZW50PiBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7CisgICAgYXV0byBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBkb2N1bWVudC0+Y3JlYXRlUmFuZ2Uo
KTsKLQotICAgIGlmIChyYW5nZS0+c2VsZWN0Tm9kZSgqZG9jdW1lbnRFbGVtZW50KS5oYXNFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIHBsYWluVGV4
dChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIHBsYWluVGV4dChtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoKmRvY3VtZW50RWxlbWVudCkpOwogfQogCiBTdHJpbmcgV2ViRnJhbWU6OnNl
bGVjdGlvbkFzU3RyaW5nKCkgY29uc3QgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCmluZGV4IDRlODZmMDU1YThiZTMzMzMz
MGUzZTIxM2UxODc0OGQ4YWIzYzIxYmEuLjE2YjUzOGNmOTliNDUxYzI1NWE4NDEwZTZmYzliZDZi
ODM2NjRjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2ds
aWIvV2ViUGFnZUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2dsaWIvV2ViUGFnZUdMaWIuY3BwCkBAIC0xMTMsMTEgKzExMywxMSBAQCB2b2lkIFdlYlBhZ2U6
OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0
KSBjb25zdAogICAgICAgICAgICAgYXV0byBjbG9uZWRSYW5nZSA9IHN1cnJvdW5kaW5nUmFuZ2Ut
PmNsb25lUmFuZ2UoKTsKICAgICAgICAgICAgIHN1cnJvdW5kaW5nUmFuZ2UtPnNldEVuZChjb21w
b3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgY2xvbmVkUmFuZ2Ut
PnNldFN0YXJ0KGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAg
cG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0ID0gcGxhaW5UZXh0KHN1cnJvdW5kaW5n
UmFuZ2UuZ2V0KCkpICsgcGxhaW5UZXh0KGNsb25lZFJhbmdlLnB0cigpKTsKKyAgICAgICAgICAg
IHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dCA9IHBsYWluVGV4dCgqc3Vycm91bmRp
bmdSYW5nZSkgKyBwbGFpblRleHQoY2xvbmVkUmFuZ2UpOwogICAgICAgICAgICAgcG9zdExheW91
dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCgq
c3Vycm91bmRpbmdSYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGlu
Z0NvbnRleHRTZWxlY3Rpb25Qb3NpdGlvbiA9IHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29u
dGV4dEN1cnNvclBvc2l0aW9uOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcG9zdExh
eW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0ID0gcGxhaW5UZXh0KHN1cnJvdW5kaW5nUmFuZ2Uu
Z2V0KCkpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0ID0g
cGxhaW5UZXh0KCpzdXJyb3VuZGluZ1JhbmdlKTsKICAgICAgICAgICAgIGlmIChzdXJyb3VuZGlu
Z1N0YXJ0LmlzTnVsbCgpIHx8IHNlbGVjdGlvblN0YXJ0LmlzTnVsbCgpKQogICAgICAgICAgICAg
ICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uID0gMDsK
ICAgICAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggOTYxZTJjMTExZmY3MjczODZiYzc5OWY4NWRmNTQy
MjdjNWI5ZjIwYi4uNzBlNTI4NTY0NmZmOGRmNTZhOWQyNTIxNzQ4YmZkNWFmOGNjNGM1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MDQxLDM4ICs0MDQxLDI4IEBAIHZvaWQgV2ViUGFnZTo6cmVtb3ZlVGV4dFBsYWNl
aG9sZGVyKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0JiBwbGFjZWhvbGRlciwKIAogdm9p
ZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRGVsdGEoaW50NjRfdCBsb2NhdGlvbkRlbHRh
LCBpbnQ2NF90IGxlbmd0aERlbHRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmPEZyYW1lPiBmcmFtZSA9IGNvcmVQYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxl
Y3Rpb24uaXNOb25lKCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5yb290
RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKLSAgICBhdXRvIHJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFyb290IHx8ICFyYW5nZSkgewor
ICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmKGNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpKTsKKyAgICBhdXRvIHJvb3QgPSBtYWtlUmVmUHRyKGZyYW1lLT5z
ZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSk7CisgICAg
YXV0byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcm9vdCB8fCAhc2VsZWN0aW9uUmFuZ2UpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHNpemVfdCBzZWxlY3Rpb25Mb2NhdGlvbjsKLSAgICBzaXplX3Qgc2VsZWN0aW9uTGVuZ3RoOwot
ICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uocm9vdCwgcmFu
Z2UuZ2V0KCksIHNlbGVjdGlvbkxvY2F0aW9uLCBzZWxlY3Rpb25MZW5ndGgpOwotCi0gICAgQ2hl
Y2tlZEludDY0IG5ld1NlbGVjdGlvbkxvY2F0aW9uIHsgc2VsZWN0aW9uTG9jYXRpb24gfTsKLSAg
ICBDaGVja2VkSW50NjQgbmV3U2VsZWN0aW9uTGVuZ3RoIHsgc2VsZWN0aW9uTGVuZ3RoIH07Cisg
ICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCk7Cisg
ICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSA9IGNoYXJhY3RlclJhbmdlKHNjb3BlLCAq
c2VsZWN0aW9uUmFuZ2UpOworICAgIENoZWNrZWRJbnQ2NCBuZXdTZWxlY3Rpb25Mb2NhdGlvbiB7
IHNlbGVjdGlvbkNoYXJhY3RlclJhbmdlLmxvY2F0aW9uIH07CisgICAgQ2hlY2tlZEludDY0IG5l
d1NlbGVjdGlvbkxlbmd0aCB7IHNlbGVjdGlvbkNoYXJhY3RlclJhbmdlLmxlbmd0aCB9OwogICAg
IG5ld1NlbGVjdGlvbkxvY2F0aW9uICs9IGxvY2F0aW9uRGVsdGE7CiAgICAgbmV3U2VsZWN0aW9u
TGVuZ3RoICs9IGxlbmd0aERlbHRhOwotCiAgICAgaWYgKG5ld1NlbGVjdGlvbkxvY2F0aW9uLmhh
c092ZXJmbG93ZWQoKSB8fCBuZXdTZWxlY3Rpb25MZW5ndGguaGFzT3ZlcmZsb3dlZCgpKSB7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBhdXRvIG5ld1NlbGVjdGlvblJhbmdlID0gQ2hhcmFjdGVyUmFuZ2UobmV3U2VsZWN0aW9uTG9j
YXRpb24udW5zYWZlR2V0KCksIG5ld1NlbGVjdGlvbkxlbmd0aC51bnNhZmVHZXQoKSk7Ci0gICAg
YXV0byByZXNvbHZlZFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cygqcm9vdCksIG5ld1NlbGVjdGlvblJhbmdlKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZWRSYW5n
ZSkucHRyKCksIERPV05TVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKLQorICAgIGF1dG8gdXBkYXRlZFNlbGVjdGlv
blJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cygqcm9vdCksIG5ld1NlbGVjdGlvblJhbmdlKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodXBkYXRlZFNlbGVjdGlvblJhbmdlKS5w
dHIoKSwgRE9XTlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAK
QEAgLTQxNzUsMjUgKzQxNjUsMjUgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0
aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAg
c3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gcmFuZ2VPZkludGVyZXN0U3RhcnQg
PiBzZWxlY3Rpb25TdGFydCA/IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0IDogc2VsZWN0aW9uU3RhcnQ7
CiAgICAgICAgIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJl
c3RFbmQgPCBzZWxlY3Rpb25FbmQgPyByYW5nZU9mSW50ZXJlc3RFbmQgOiBzZWxlY3Rpb25FbmQ7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZV90IHJhbmdlT2ZJbnRlcmVzdExvY2F0aW9uOwot
ICAgICAgICBzaXplX3QgcmFuZ2VPZkludGVyZXN0TGVuZ3RoOwotICAgICAgICBSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUgPSByYW5nZU9mSW50ZXJlc3QtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7
CisgICAgICAgIGF1dG8gcm9vdE5vZGUgPSBtYWtlUmVmUHRyKHJhbmdlT2ZJbnRlcmVzdC0+Y29t
bW9uQW5jZXN0b3JDb250YWluZXIoKSk7CiAgICAgICAgIGlmICghcm9vdE5vZGUpIHsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KKyAgICAgICAgYXV0byByb290Q29udGFpbmVyTm9kZSA9IHJvb3ROb2RlLT5pc0NvbnRh
aW5lck5vZGUoKSA/IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHJvb3ROb2RlLmdldCgpKSA6IHJv
b3ROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghcm9vdENvbnRhaW5lck5vZGUpIHsK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cygqcm9vdENvbnRhaW5lck5vZGUpOwogCi0gICAgICAgIFJlZlB0cjxDb250YWluZXJO
b2RlPiByb290Q29udGFpbmVyTm9kZSA9IHJvb3ROb2RlLT5pc0NvbnRhaW5lck5vZGUoKSA/IGRv
d25jYXN0PENvbnRhaW5lck5vZGU+KHJvb3ROb2RlLmdldCgpKSA6IHJvb3ROb2RlLT5wYXJlbnRO
b2RlKCk7Ci0gICAgICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFu
Z2Uocm9vdENvbnRhaW5lck5vZGUuZ2V0KCksIHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgcmFuZ2VP
ZkludGVyZXN0TG9jYXRpb24sIHJhbmdlT2ZJbnRlcmVzdExlbmd0aCk7Ci0KLSAgICAgICAgQ2hl
Y2tlZDx1aW50NjRfdCwgUmVjb3JkT3ZlcmZsb3c+IG1pZHBvaW50TG9jYXRpb24geyByYW5nZU9m
SW50ZXJlc3RMb2NhdGlvbiB9OwotICAgICAgICBtaWRwb2ludExvY2F0aW9uICs9IHJhbmdlT2ZJ
bnRlcmVzdExlbmd0aCAvIDI7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyUmFuZ2VPZkludGVyZXN0
ID0gY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsICpyYW5nZU9mSW50ZXJlc3QpOworICAgICAgICBhdXRv
IG1pZHBvaW50TG9jYXRpb24gPSBjaGVja2VkU3VtPHVpbnQ2NF90PihjaGFyYWN0ZXJSYW5nZU9m
SW50ZXJlc3QubG9jYXRpb24sIGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVzdC5sZW5ndGggLyAyKTsK
ICAgICAgICAgaWYgKG1pZHBvaW50TG9jYXRpb24uaGFzT3ZlcmZsb3dlZCgpKSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0KLSAgICAgICAgYXV0byBtaWRwb2ludCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihyZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KCpyb290Q29udGFpbmVyTm9kZSksIG1pZHBvaW50TG9jYXRpb24udW5zYWZlR2V0KCkpKTsKKyAg
ICAgICAgYXV0byBtaWRwb2ludCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZXNvbHZl
Q2hhcmFjdGVyTG9jYXRpb24oc2NvcGUsIG1pZHBvaW50TG9jYXRpb24udW5zYWZlR2V0KCkpKTsK
IAogICAgICAgICBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBzdGFydE9mV29y
ZChtaWRwb2ludCk7CiAgICAgICAgIGlmIChzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rp
b24gPCByYW5nZU9mSW50ZXJlc3RTdGFydCkgewpAQCAtNDIwMSw3ICs0MTkxLDYgQEAgdm9pZCBX
ZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250
ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgICAgIGlmIChzdGFydE9mUmFuZ2VPZkludGVyZXN0
SW5TZWxlY3Rpb24gPiByYW5nZU9mSW50ZXJlc3RFbmQpCiAgICAgICAgICAgICAgICAgc3RhcnRP
ZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gbWlkcG9pbnQ7CiAgICAgICAgIH0KLQogICAg
ICAgICBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gc3RhcnRPZlJhbmdlT2ZJbnRl
cmVzdEluU2VsZWN0aW9uOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA5NjI4MWFiODRmMWFhOGM3NWUzNmY0
ZWJkMTc3NzM0NzQxNjVjMjlmLi5kYTExMzJjMmM5YmQ5MTQ4YzgzM2M4NzUzN2YzZTgyNjYzOGZj
ZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQpAQCAtMTU0LDkgKzE1NCwxMSBAQCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3Jt
RWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAogICAg
IGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhc2VsZWN0aW9uRW5kIHx8ICFwYXJhZ3Jh
cGhTdGFydCkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byBjb250ZXh0UmFuZ2VGb3JDYW5k
aWRhdGVSZXF1ZXN0ID0gZnJhbWUuZWRpdG9yKCkuY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVx
dWVzdCgpOworCiAgICAgcG9zdExheW91dERhdGEuY2FuZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRp
b24gPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91
bmRhcnkgfSk7CiAgICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoID0gY2hhcmFj
dGVyQ291bnQoeyAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSwgKnNlbGVjdGlvbkVuZCB9KTsKLSAg
ICBwb3N0TGF5b3V0RGF0YS5wYXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlkYXRlUmVxdWVzdCA9IHBs
YWluVGV4dChmcmFtZS5lZGl0b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCku
Z2V0KCkpOworICAgIHBvc3RMYXlvdXREYXRhLnBhcmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVS
ZXF1ZXN0ID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCA/IHBsYWluVGV4dCgqY29u
dGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCkgOiBTdHJpbmcoKTsKICAgICBwb3N0TGF5b3V0
RGF0YS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUuZWRpdG9yKCkuc3RyaW5nRm9y
Q2FuZGlkYXRlUmVxdWVzdCgpOwogCiAgICAgSW50UmVjdCByZWN0Rm9yU2VsZWN0aW9uQ2FuZGlk
YXRlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA2OTJlZTA3ODA2MjQxNjEyYjhkZjhiNWJhNzIx
ZTU0YzQ5YmJiODFiLi4zYzMwZDU3ZTY4Y2NhNGI2MmU2YjhmMGRhZGI0MjgyNjA3MTA0YWVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMDM5LDE0ICsxMDM5LDExIEBAIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5n
VmlldyBzdHJpCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRl
dGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKICAgICBOU011dGFibGVBcnJheSAqY29ycmVjdGlvbnMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAoYXV0byYgZ3Vlc3MgOiBncmFtbWFy
RGV0YWlsLmd1ZXNzZXMpIHsKLSAgICAgICAgTlNTdHJpbmcgKmd1ZXNzTlNTdHJpbmcgPSBndWVz
czsKLSAgICAgICAgW2NvcnJlY3Rpb25zIGFkZE9iamVjdDpndWVzc05TU3RyaW5nXTsKLSAgICB9
Ci0gICAgTlNTdHJpbmcgKmRlc2NyaXB0aW9uTlNTdHJpbmcgPSBncmFtbWFyRGV0YWlsLnVzZXJE
ZXNjcmlwdGlvbjsKKyAgICBmb3IgKGF1dG8mIGd1ZXNzIDogZ3JhbW1hckRldGFpbC5ndWVzc2Vz
KQorICAgICAgICBbY29ycmVjdGlvbnMgYWRkT2JqZWN0Omd1ZXNzXTsKICAgICBOU0RpY3Rpb25h
cnkgKmRpY3Rpb25hcnkgPSBAewogICAgICAgICBOU0dyYW1tYXJSYW5nZSA6IFtOU1ZhbHVlIHZh
bHVlV2l0aFJhbmdlOmdyYW1tYXJEZXRhaWwucmFuZ2VdLAotICAgICAgICBOU0dyYW1tYXJVc2Vy
RGVzY3JpcHRpb24gOiBkZXNjcmlwdGlvbk5TU3RyaW5nLAorICAgICAgICBOU0dyYW1tYXJVc2Vy
RGVzY3JpcHRpb24gOiBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiwKICAgICAgICAgTlNH
cmFtbWFyQ29ycmVjdGlvbnMgOiBjb3JyZWN0aW9ucywKICAgICB9OwogICAgIFtbTlNTcGVsbENo
ZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVsbGluZ1BhbmVsV2l0aEdyYW1tYXJT
dHJpbmc6YmFkR3JhbW1hclBocmFzZSBkZXRhaWw6ZGljdGlvbmFyeV07CkBAIC0xMTIyLDkgKzEx
MTksMTEgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGUKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0
ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlv
blN0YXJ0KSB9KTsKICAgICBhdXRvIHNlbGVjdGlvbkxlbmd0aCA9IGNoYXJhY3RlckNvdW50KHsg
Km1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNl
bGVjdGlvbi52aXNpYmxlRW5kKCkpIH0pOworICAgIGF1dG8gY29udGV4dFJhbmdlRm9yQ2FuZGlk
YXRlUmVxdWVzdCA9IGZyYW1lLT5lZGl0b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KCk7CisgICAgU3RyaW5nIGNvbnRleHRGb3JDYW5kaWRhdGVSZXFldWVzdCA9IGNvbnRleHRS
YW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgPyBwbGFpblRleHQoKmNvbnRleHRSYW5nZUZvckNhbmRp
ZGF0ZVJlcXVlc3QpIDogU3RyaW5nKCk7CiAKICAgICBtX3JhbmdlRm9yQ2FuZGlkYXRlcyA9IE5T
TWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsIHNlbGVjdGlvbkxlbmd0
aCk7Ci0gICAgbV9wYXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlkYXRlUmVxdWVzdCA9IHBsYWluVGV4
dChmcmFtZS0+ZWRpdG9yKCkuY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpLmdldCgp
KTsKKyAgICBtX3BhcmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gY29udGV4dEZv
ckNhbmRpZGF0ZVJlcWV1ZXN0OwogCiAgICAgTlNUZXh0Q2hlY2tpbmdUeXBlcyBjaGVja2luZ1R5
cGVzID0gTlNUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBOU1RleHRDaGVja2luZ1R5cGVSZXBs
YWNlbWVudCB8IE5TVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CiAgICAgYXV0byB3ZWFrRWRp
dG9yID0gbWFrZVdlYWtQdHIoKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KaW5kZXggZmU2NmQxYjU0Zjc1ZDdmZGM5ZjU2OGQyMmNkNDllZmZkNGRj
OTk1MS4uZTU1YzMwOTEwNTc1NGJiY2M4MDQ3Yjc1ODBkOTc0MGUyMWQzM2FjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC01ODcsNyArNTg3LDkg
QEAgLSAoTlNTdHJpbmcgKilfc2VsZWN0ZWRTdHJpbmcKIAogLSAoTlNTdHJpbmcgKilfc3RyaW5n
Rm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICByZXR1cm4gcGxhaW5UZXh0KGNvcmUo
cmFuZ2UpLCBXZWJDb3JlOjpUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOworICAg
IGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBAIiI7CisgICAgcmV0dXJuIHBsYWluVGV4dCgq
Y29yZShyYW5nZSksIFdlYkNvcmU6OlRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7
CiB9CiAKIC0gKE9wdGlvblNldDxXZWJDb3JlOjpQYWludEJlaGF2aW9yPilfcGFpbnRCZWhhdmlv
ckZvckRlc3RpbmF0aW9uQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKQEAgLTgwNiwxMiAr
ODA4LDE1IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlICop
cmFuZ2UKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RG
b3VuZCwgMCk7CiAKLSAgICBzaXplX3QgbG9jYXRpb24gPSAwOwotICAgIHNpemVfdCBsZW5ndGgg
PSAwOwotICAgIGlmICghV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UsIGxvY2F0aW9uLCBsZW5ndGgpKQorICAg
IGF1dG8gZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAgIGF1dG8qIGVsZW1l
bnQgPSBmcmFtZS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVt
ZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7CiAKLSAgICByZXR1cm4gTlNNYWtlUmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7
CisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNv
bnRlbnRzKCplbGVtZW50KSwgKnJhbmdlKTsKIH0KIAogLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViRnJhbWUuY3BwCmluZGV4IDM2OGQ3Y2U5YmExYTA5YWM1N2ZhZmZlNzE4OWJhZDI3YWRjMjNl
ZWUuLmQ0MmU0NTExOTVhMjEzMmFlOWQ4ODRhNTFhOGI2NGMwNjExZjM2ZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTE5MjMsMTMgKzE5MjMsMTUgQEAgSFJFU1VMVCBX
ZWJGcmFtZTo6c3RyaW5nKF9EZXJlZl9vcHRfb3V0XyBCU1RSKiByZXN1bHQpCiAKICAgICAqcmVz
dWx0ID0gbnVsbHB0cjsKIAotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRoaXMpOwotICAg
IGlmICghY29yZUZyYW1lKQorICAgIGF1dG8qIGZyYW1lID0gY29yZSh0aGlzKTsKKyAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gRV9VTkVYUEVDVEVEOwogCi0gICAgUmVmUHRyPFJhbmdl
PiBhbGxSYW5nZShyYW5nZU9mQ29udGVudHMoKmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkpOwotICAg
IFN0cmluZyBhbGxTdHJpbmcgPSBwbGFpblRleHQoYWxsUmFuZ2UuZ2V0KCkpOwotICAgICpyZXN1
bHQgPSBCU3RyaW5nKGFsbFN0cmluZykucmVsZWFzZSgpOworICAgIGF1dG8qIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEVf
RkFJTDsKKworICAgICpyZXN1bHQgPSBCU3RyaW5nKHBsYWluVGV4dChtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoKmRvY3VtZW50KSkpLnJlbGVhc2UoKTsKICAgICByZXR1cm4gU19PSzsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCA0ZGEwYWZmZjM3ZGM1NmE4
YzNmZTBlNTc2MmM5MTE3OGEzZmUzMDQ0Li5hZDEzOGUxZGMxZGIyMDIzNTU1NDRlNGQ0NWNjYmIw
ZmY2ZDcxYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtNzgwMSwxNCAr
NzgwMSwxNiBAQCBIUkVTVUxUIFdlYlZpZXc6OnNlbGVjdGVkUmFuZ2VGb3JUZXN0aW5nKF9PdXRf
IFVJTlQqIGxvY2F0aW9uLCBfT3V0XyBVSU5UKiBsZW5ndAogICAgIEZyYW1lJiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpOworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBzaXplX3QgbG9jYXRpb25T
aXplOwotICAgIHNpemVfdCBsZW5ndGhTaXplOwotICAgIGlmIChyYW5nZSAmJiBUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpLCByYW5nZS5nZXQoKSwgbG9jYXRpb25T
aXplLCBsZW5ndGhTaXplKSkgewotICAgICAgICAqbG9jYXRpb24gPSBzdGF0aWNfY2FzdDxVSU5U
Pihsb2NhdGlvblNpemUpOwotICAgICAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8VUlOVD4obGVu
Z3RoU2l6ZSk7Ci0gICAgfQorICAgIGF1dG8qIGVsZW1lbnQgPSBmcmFtZS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQp
CisgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKKyAgICBhdXRvIHJlbGF0aXZlUmFuZ2UgPSBjaGFy
YWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZWxlbWVudCks
ICpyYW5nZSk7CisgICAgKmxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8VUlOVD4ocmVsYXRpdmVSYW5n
ZS5sb2NhdGlvbik7CisgICAgKmxlbmd0aCA9IHN0YXRpY19jYXN0PFVJTlQ+KHJlbGF0aXZlUmFu
Z2UubGVuZ3RoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZsYXQtdHJlZS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZC1zdHJpbmctb24t
ZmxhdC10cmVlLWV4cGVjdGVkLnR4dAppbmRleCA1OThkMGQ0NGFjM2I2NDNhN2UyMGU1ZmFmZWM0
MjI3MTA4YjE0N2NkLi42YTM2ODIxNzNjODY5OTAxYTIwN2VhY2NlNmU0MWY5MDM5MTM3NzJiIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZC1zdHJpbmct
b24tZmxhdC10cmVlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3RleHQt
aXRlcmF0b3IvZmluZC1zdHJpbmctb24tZmxhdC10cmVlLWV4cGVjdGVkLnR4dApAQCAtNzYsNyAr
NzYsNyBAQCBQQVNTIGludGVybmFscy5jb3VudEZpbmRNYXRjaGVzKCdpbi1zaGFkb3cnLCBbXSkg
aXMgMgogUEFTUyBpbnRlcm5hbHMuY291bnRGaW5kTWF0Y2hlcygnaW4tJywgWydEb05vdFRyYXZl
cnNlRmxhdFRyZWUnXSkgaXMgMgogUEFTUyBpbnRlcm5hbHMuY291bnRGaW5kTWF0Y2hlcygnaW4t
JywgW10pIGlzIDQKIFBBU1MgaW50ZXJuYWxzLmNvdW50RmluZE1hdGNoZXMoJ2luLXNoYWRvdyBp
bi1kb2N1bWVudCcsIFsnRG9Ob3RUcmF2ZXJzZUZsYXRUcmVlJ10pIGlzIDAKLVBBU1MgaW50ZXJu
YWxzLmNvdW50RmluZE1hdGNoZXMoJ2luLXNoYWRvdyBpbi1kb2N1bWVudCcsIFtdKSBpcyAwCitQ
QVNTIGludGVybmFscy5jb3VudEZpbmRNYXRjaGVzKCdpbi1zaGFkb3cgaW4tZG9jdW1lbnQnLCBb
XSkgaXMgMQogUEFTUyByYW5nZVRleHQoaW50ZXJuYWxzLnJhbmdlT2ZTdHJpbmcoJ2luc2lkZS1k
aXNwbGF5LW5vbmUnLCBudWxsLCBbXSkpIGlzIG51bGwKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9y
L2ZpbmQtc3RyaW5nLW9uLWZsYXQtdHJlZS5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0
LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZsYXQtdHJlZS5odG1sCmluZGV4IDE5MDUyNTNmYjE2
NDhlOWFkZGNhMzMxNTgyMDlmYjk3MjQwMGQyZGIuLjM2NTlmZjJlZDEwNDc2MThiNDcwNWRiNTkx
MjY3NjVjMDcwMGYzOTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvdGV4dC1pdGVy
YXRvci9maW5kLXN0cmluZy1vbi1mbGF0LXRyZWUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3RleHQtaXRlcmF0b3IvZmluZC1zdHJpbmctb24tZmxhdC10cmVlLmh0bWwKQEAgLTE2MCw3
ICsxNjAsNyBAQCBlbHNlIHsKICAgICBzaG91bGRCZSgiaW50ZXJuYWxzLmNvdW50RmluZE1hdGNo
ZXMoJ2luLScsIFtdKSIsICI0Iik7CiAKICAgICBzaG91bGRCZSgiaW50ZXJuYWxzLmNvdW50Rmlu
ZE1hdGNoZXMoJ2luLXNoYWRvdyBpbi1kb2N1bWVudCcsIFsnRG9Ob3RUcmF2ZXJzZUZsYXRUcmVl
J10pIiwgIjAiKTsKLSAgICBzaG91bGRCZSgiaW50ZXJuYWxzLmNvdW50RmluZE1hdGNoZXMoJ2lu
LXNoYWRvdyBpbi1kb2N1bWVudCcsIFtdKSIsICIwIik7CisgICAgc2hvdWxkQmUoImludGVybmFs
cy5jb3VudEZpbmRNYXRjaGVzKCdpbi1zaGFkb3cgaW4tZG9jdW1lbnQnLCBbXSkiLCAiMSIpOwog
CiAgICAgc2hvdWxkQmUoInJhbmdlVGV4dChpbnRlcm5hbHMucmFuZ2VPZlN0cmluZygnaW5zaWRl
LWRpc3BsYXktbm9uZScsIG51bGwsIFtdKSkiLCAibnVsbCIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395229</attachid>
            <date>2020-04-01 17:40:19 -0700</date>
            <delta_ts>2020-04-01 21:22:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209723-20200401174018.patch</filename>
            <type>text/plain</type>
            <size>89944</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM0ZDg2YzRiMGIyOTIx
ZjM0NWFmY2QzZGM3OTI2MDJlNDJkOGJkOS4uNDQ1ODdmNjBiMDE4OGMyNjUxZTUyMzMwNWRjMDIz
NjNkYThkZGE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDggQEAKKzIwMjAtMDMtMjkgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbGwgdXNlcyBvZiBs
aXZlIHJhbmdlcyBmcm9tIFRleHRJdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NzIzCisKIDIwMjAtMDQtMDEgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQ1JBU0ggaW4gTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjphZGRBdWRpb1JlbmRlcmVyKCksIHVuY2F1Z2h0IE9iakMgZXhj
ZXB0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAppbmRleCA1MWNhNGNmMTQ1NjZmNmE0YzIyZWE2NmJkYzc4NTY5MGMyMjhi
NGE0Li43NjczMmI3ZWQ3MWRkYTI0ZmRlNTZkYWViZWIwZDIyNmI4NjIzYThhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
QEAgLTE0NTksNyArMTQ1OSw3IEBAIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpuZXh0U2VudGVuY2VFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpCiAgICAgLy8gc2Vl
IHRoaXMgZW1wdHkgbGluZS4gIEluc3RlYWQsIHJldHVybiB0aGUgZW5kIHBvc2l0aW9uIG9mIHRo
ZSBlbXB0eSBsaW5lLgogICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbjsKICAgICAKLSAg
ICBTdHJpbmcgbGluZVN0cmluZyA9IHBsYWluVGV4dChtYWtlUmFuZ2Uoc3RhcnRPZkxpbmUobmV4
dFZpc2libGVQb3MpLCBlbmRPZkxpbmUobmV4dFZpc2libGVQb3MpKS5nZXQoKSk7CisgICAgU3Ry
aW5nIGxpbmVTdHJpbmcgPSBwbGFpblRleHQoKm1ha2VSYW5nZShzdGFydE9mTGluZShuZXh0Vmlz
aWJsZVBvcyksIGVuZE9mTGluZShuZXh0VmlzaWJsZVBvcykpKTsKICAgICBpZiAobGluZVN0cmlu
Zy5pc0VtcHR5KCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbmV4dFZpc2libGVQb3M7CiAgICAg
ZWxzZQpAQCAtMTQ4Myw3ICsxNDgzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGUKICAgICAv
LyB0cmVhdCBlbXB0eSBsaW5lIGFzIGEgc2VwYXJhdGUgc2VudGVuY2UuCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0UG9zaXRpb247CiAgICAgCi0gICAgU3RyaW5nIGxpbmVTdHJpbmcgPSBwbGFp
blRleHQobWFrZVJhbmdlKHN0YXJ0T2ZMaW5lKHByZXZpb3VzVmlzaWJsZVBvcyksIGVuZE9mTGlu
ZShwcmV2aW91c1Zpc2libGVQb3MpKS5nZXQoKSk7CisgICAgU3RyaW5nIGxpbmVTdHJpbmcgPSBw
bGFpblRleHQoKm1ha2VSYW5nZShzdGFydE9mTGluZShwcmV2aW91c1Zpc2libGVQb3MpLCBlbmRP
ZkxpbmUocHJldmlvdXNWaXNpYmxlUG9zKSkpOwogICAgIGlmIChsaW5lU3RyaW5nLmlzRW1wdHko
KSkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXZpb3VzVmlzaWJsZVBvczsKICAgICBlbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBlNjE2ZWE5ZDY1NGVkMjNiMzY1YmE3NTZkZDA4NjU3
NmU3ZDE1ZThhLi4wYWRmNWM0NzgwNjYxZmI5Y2NmNTU5NWVhZGJmMzIxZGEzNDdjNGZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKQEAgLTY2NCw3ICs2NjQsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxl
bWVudAogICAgICAgICAgICAgICAgIC8vIHN0eWxlIHVwZGF0ZS9sYXlvdXQgaGVyZS4gU2VlIGFs
c28gQVhPYmplY3RDYWNoZTo6ZGVmZXJUZXh0Q2hhbmdlZElmTmVlZGVkKCkuCiAgICAgICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGVEb2N1bWVudC0+Y2hp
bGROZWVkc1N0eWxlUmVjYWxjKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCFub2RlRG9jdW1lbnQtPnZpZXcoKS0+bGF5b3V0Q29udGV4dCgpLmlz
SW5SZW5kZXJUcmVlTGF5b3V0KCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBwbGFpblRleHQo
dGV4dFJhbmdlLmdldCgpLCB0ZXh0SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcGxhaW5UZXh0KCp0ZXh0UmFuZ2UsIHRleHRJdGVyYXRvckJl
aGF2aW9yRm9yVGV4dFJhbmdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgCkBA
IC0yMDgxLDE2ICsyMDgxLDE1IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bm9k
ZUlzVGV4dENvbnRyb2woY29uc3QgTm9kZSogbm9kZSkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLUludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmVjdHMo
TGF5b3V0UmVjdCBjb25zdCYgcmVjdDEsIExheW91dFJlY3QgY29uc3QmIHJlY3QyLCBSZWZQdHI8
UmFuZ2U+IGNvbnN0JiBkYXRhUmFuZ2UpCitzdGF0aWMgSW50UmVjdCBib3VuZHNGb3JSZWN0cyhj
b25zdCBMYXlvdXRSZWN0JiByZWN0MSwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdDIsIGNvbnN0IFNp
bXBsZVJhbmdlJiBkYXRhUmFuZ2UpCiB7CiAgICAgTGF5b3V0UmVjdCBvdXJSZWN0ID0gcmVjdDE7
CiAgICAgb3VyUmVjdC51bml0ZShyZWN0Mik7Ci0gICAgCi0gICAgLy8gaWYgdGhlIHJlY3Rhbmds
ZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFycywgdXNlIHRoZSBy
YW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKKworICAgIC8vIGlmIHRoZSByZWN0YW5nbGUgc3Bh
bnMgbGluZXMgYW5kIGNvbnRhaW5zIG11bHRpcGxlIHRleHQgY2hhcmFjdGVycywgdXNlIHRoZSBy
YW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQuCiAgICAgaWYgKHJlY3QxLm1heFkoKSAhPSByZWN0
Mi5tYXhZKCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGRhdGFSYW5nZS0+
YWJzb2x1dGVCb3VuZGluZ0JveCgpOwotICAgICAgICBTdHJpbmcgcmFuZ2VTdHJpbmcgPSBwbGFp
blRleHQoZGF0YVJhbmdlLmdldCgpKTsKLSAgICAgICAgaWYgKHJhbmdlU3RyaW5nLmxlbmd0aCgp
ID4gMSAmJiAhYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICBMYXlvdXRSZWN0IGJvdW5k
aW5nQm94ID0gY3JlYXRlTGl2ZVJhbmdlKGRhdGFSYW5nZSktPmFic29sdXRlQm91bmRpbmdCb3go
KTsKKyAgICAgICAgaWYgKGNoYXJhY3RlckNvdW50KGRhdGFSYW5nZSkgPiAxICYmICFib3VuZGlu
Z0JveC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBvdXJSZWN0ID0gYm91bmRpbmdCb3g7CiAgICAg
fQogCkBAIC0yMTIwLDggKzIxMTksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQbwogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gZGF0YVJhbmdlID0gbWFrZVJhbmdl
KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotICAgIHJldHVybiBib3VuZHNGb3JSZWN0cyhyZWN0
MSwgcmVjdDIsIGRhdGFSYW5nZSk7CisgICAgcmV0dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCBy
ZWN0MiwgKm1ha2VSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKSk7CiB9CiAKIEludFJlY3Qg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJh
bmdlPiByYW5nZSkgY29uc3QKQEAgLTIxNTIsNyArMjE1MCw3IEBAIEludFJlY3QgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiByYW5n
ZSkgY29uCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGJvdW5kc0ZvclJlY3Rz
KHJlY3QxLCByZWN0MiwgcmFuZ2UpOworICAgIHJldHVybiBib3VuZHNGb3JSZWN0cyhyZWN0MSwg
cmVjdDIsICpyYW5nZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNW
aXNpYmxlUG9zaXRpb25SYW5nZUluRGlmZmVyZW50RG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UmIHJhbmdlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCA3NzZiNDhmNGNiOWI3
NDcxMDNiYWNjZTk5NzgwNjk3MmY3YzYwNjBjLi43ZWNmMDRhYTA0ZWZiYjA1MjRkN2NkNDk5OGU0
MWQ0NzMxZTM0NGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApAQCAtMjkzLDggKzI5Myw2IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBjYW5IYXZlUGxhaW5UZXh0KCkgY29uc3Q7CiAgICAgLy8gU3BlY2lhbCBo
YW5kbGluZyBvZiBjbGljayBwb2ludCBmb3IgbGlua3MuCiAgICAgSW50UG9pbnQgbGlua0NsaWNr
UG9pbnQoKTsKLSAgICAvLyBSZWN0cyB1dGlsaXRpZXMuCi0gICAgc3RhdGljIEludFJlY3QgYm91
bmRzRm9yUmVjdHMoTGF5b3V0UmVjdCBjb25zdCYsIExheW91dFJlY3QgY29uc3QmLCBSZWZQdHI8
UmFuZ2U+IGNvbnN0Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGY2YTcyMzE2YTY3NzM3Y2I2NWI5ZGIy
OGQ1MTMyNDE1NDdiNmIzNmIuLjg4Zjg5NDhhMDVmNzkxYzliNmUzYWIxN2I2ZDhkZDM1ODY2MTRl
YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC0zNjM2LDIx
ICszNjM2LDE4IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlKilyYW5nZQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgCi0gICAgTlNSYW5nZSByZXN1bHQg
PSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKICAgICBpZiAoIXJhbmdlKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7
CiAgICAgCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRv
Y3VtZW50KCk7CisgICAgYXV0byBkb2N1bWVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1
bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
Ci0gICAgc2l6ZV90IGxvY2F0aW9uOwotICAgIHNpemVfdCBsZW5ndGg7Ci0gICAgVGV4dEl0ZXJh
dG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShkb2N1bWVudC0+ZG9jdW1lbnRFbGVt
ZW50KCksIHJhbmdlLCBsb2NhdGlvbiwgbGVuZ3RoKTsKLSAgICByZXN1bHQubG9jYXRpb24gPSBs
b2NhdGlvbjsKLSAgICByZXN1bHQubGVuZ3RoID0gbGVuZ3RoOwotICAgIAotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAg
IGF1dG8gZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAg
IGlmICghZG9jdW1lbnRFbGVtZW50KQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RG
b3VuZCwgMCk7CisKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRC
ZWZvcmVOb2RlQ29udGVudHMoKmRvY3VtZW50RWxlbWVudCksICpyYW5nZSk7CiB9CiAKIC0gKE5T
SW50ZWdlcilfaW5kZXhGb3JUZXh0TWFya2VyOihpZCltYXJrZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRh
cnlQb2ludC5oCmluZGV4IGE1ZDhlM2UwMTJlZWRhYTljZGY3MjkzMTA4YjQzOTI3YmUxMjRmMjIu
LjVjYmJmZGMwMGY1NTA3NDc1YTE4NWIyZTg1MjNhZmFiNzIzOGIyMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0JvdW5kYXJ5UG9pbnQuaApAQCAtNDYsNiArNDYsOCBAQCBzdHJ1Y3QgQm91bmRhcnlQb2ludCB7
CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQ
b2ludCYpOwogCitCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRl
bnRzKE5vZGUmKTsKKwogaW5saW5lIEJvdW5kYXJ5UG9pbnQ6OkJvdW5kYXJ5UG9pbnQoUmVmPE5v
ZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgOiBjb250YWluZXIoV1RGTW92
ZShjb250YWluZXIpKQogICAgICwgb2Zmc2V0KG9mZnNldCkKQEAgLTc1LDQgKzc3LDkgQEAgaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3VuZGFyeVBvaW50JiBhLCBjb25zdCBCb3VuZGFy
eVBvaW50JiBiKQogICAgIHJldHVybiBhLmNvbnRhaW5lci5wdHIoKSA9PSBiLmNvbnRhaW5lci5w
dHIoKSAmJiBhLm9mZnNldCA9PSBiLm9mZnNldDsKIH0KIAoraW5saW5lIEJvdW5kYXJ5UG9pbnQg
bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKK3sKKyAgICBy
ZXR1cm4geyBub2RlLCAwIH07Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA2MDAy
YzNkNDJhMjI5OWQzMzQwNWQwZGI3NzUxNTkwZDg5NDU4YTU4Li5jOWRiZDVlNTNhM2U2MjIxNGFk
OGU0N2U4ODRjYjYwNzM1MzU4M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0zMTk3LDcg
KzMxOTcsNyBAQCBTdHJpbmcgRWxlbWVudDo6aW5uZXJUZXh0KCkKICAgICBpZiAoIXJlbmRlcmVy
KCkpCiAgICAgICAgIHJldHVybiB0ZXh0Q29udGVudCh0cnVlKTsKIAotICAgIHJldHVybiBwbGFp
blRleHQocmFuZ2VPZkNvbnRlbnRzKCp0aGlzKS5wdHIoKSk7CisgICAgcmV0dXJuIHBsYWluVGV4
dChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnRoaXMpKTsKIH0KIAogU3RyaW5nIEVs
ZW1lbnQ6Om91dGVyVGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA0NWMxYmNmZDAyYzE5OGNk
OGI5OTBlY2EwMWUzZjBlNmEzOTNiNWZiLi5iZTRlYjY5OTUxMDQwMTgzZGJjNDIwNmVkMDBkNDhi
ZDg4NDJmMDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTk1MSw3ICs5NTEsNyBAQCBTdHJpbmcg
UmFuZ2U6OnRleHQoKSBjb25zdAogICAgIC8vIEZJWE1FOiBBcyB3aXRoIGlubmVyVGV4dCwgd2Un
ZCBsaWtlIHRoaXMgdG8gd29yayBldmVuIGlmIHRoZXJlIGFyZSBubyByZW5kZXIgb2JqZWN0cy4K
ICAgICBzdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKLSAgICBy
ZXR1cm4gcGxhaW5UZXh0KHRoaXMpOworICAgIHJldHVybiBwbGFpblRleHQoKnRoaXMpOwogfQog
CiAvLyBodHRwczovL3czYy5naXRodWIuaW8vRE9NLVBhcnNpbmcvI3dpZGwtUmFuZ2UtY3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50LURvY3VtZW50RnJhZ21lbnQtRE9NU3RyaW5nLWZyYWdtZW50CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCBhN2Q5MWNkMmVmMTQ1NzdiNDFiZTZmNjRi
NjlhOTlkYTA0MjNmZWJjLi44ZWVhZDA2MWI2MzBkZWRhNTIzNTA5Y2UxM2VlNDY4N2FhMDQ4OWVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTY4LDkgKzY4LDE0IEBAIHN0YXRp
YyB1bnNpZ25lZCBsZW5ndGgoY29uc3QgTm9kZSYgbm9kZSkKICAgICByZXR1cm4gbm9kZS5jb3Vu
dENoaWxkTm9kZXMoKTsKIH0KIAorc3RhdGljIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9p
bnRBZnRlck5vZGVDb250ZW50cyhOb2RlJiBub2RlKQoreworICAgIHJldHVybiB7IG5vZGUsIGxl
bmd0aChub2RlKSB9OworfQorCiBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4geyB7IG5vZGUsIDAgfSwgeyBub2RlLCBs
ZW5ndGgobm9kZSkgfSB9OworICAgIHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9k
ZUNvbnRlbnRzKG5vZGUpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUp
IH07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGY3MGRhNThlMTRmYjk0YTYwNWI5OGRlMTZjNzBjZTc1
NjA1ZTMyYmUuLjBmOWNkYjE2OGMzODY4NjA0YjVjYjY5NDk2OTBmNTU5YmQ2OWEzZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcApAQCAtMTMwLDkgKzEzMCwxMSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcwogICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gc2VsZWN0aW9uQWZ0ZXJUeXBpbmcudmlz
aWJsZVN0YXJ0KCk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50V29yZCA9IFZpc2libGVT
ZWxlY3Rpb24oc3RhcnRPZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpLCBlbmRPZldvcmQoc3RhcnRPZlNlbGVjdGlvbiwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7
CiAgICAgaWYgKGN1cnJlbnRXb3JkLnZpc2libGVFbmQoKSA9PSBzdGFydE9mU2VsZWN0aW9uKSB7
Ci0gICAgICAgIFN0cmluZyB3b3JkVGV4dCA9IHBsYWluVGV4dChjdXJyZW50V29yZC50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgaWYgKHdvcmRUZXh0Lmxlbmd0aCgpID4gMCAm
JiBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVyKHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgp
IC0gMV0pKQotICAgICAgICAgICAgZG9BcHBseUNvcnJlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAg
aWYgKGF1dG8gd29yZFJhbmdlID0gY3VycmVudFdvcmQuZmlyc3RSYW5nZSgpKSB7CisgICAgICAg
ICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoKndvcmRSYW5nZSk7CisgICAgICAgICAg
ICBpZiAoIXdvcmRUZXh0LmlzRW1wdHkoKSAmJiBpc0FtYmlndW91c0JvdW5kYXJ5Q2hhcmFjdGVy
KHdvcmRUZXh0W3dvcmRUZXh0Lmxlbmd0aCgpIC0gMV0pKQorICAgICAgICAgICAgICAgIGRvQXBw
bHlDb3JyZWN0aW9uID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGRvQXBwbHlD
b3JyZWN0aW9uKQogICAgICAgICBoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChkaXNtaXNz
U29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0QWNjZXB0ZWQpKTsgCkBAIC0x
NTUsNyArMTU3LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KFJhbmdl
JiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWMKICAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZSgmcmFuZ2VUb1JlcGxhY2UpOwogICAgIGlm
IChib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX29yaWdpbmFs
VGV4dCA9IHBsYWluVGV4dCgmcmFuZ2VUb1JlcGxhY2UpOworICAgIG1fb3JpZ2luYWxUZXh0ID0g
cGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlKTsKICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0g
JnJhbmdlVG9SZXBsYWNlOwogICAgIG1fZGV0YWlscyA9IHJlcGxhY2VtZW50OwogICAgIG1faXNB
Y3RpdmUgPSB0cnVlOwpAQCAtMjQ5LDcgKzI1MSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIGlmIChyZXBsYWNlbWVudFN0cmluZy5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9pc0FjdGl2ZSA9IHRydWU7Ci0g
ICAgICAgIG1fb3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUu
Z2V0KCkpOworICAgICAgICBtX29yaWdpbmFsVGV4dCA9IHBsYWluVGV4dCgqbV9yYW5nZVdpdGhB
bHRlcm5hdGl2ZSk7CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVj
dEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOwogICAgICAgICBpZiAoIWJv
dW5kaW5nQm94LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKEFsdGVybmF0aXZlVGV4dENs
aWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCkBAIC0yNTgsOSArMjYwLDkg
QEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2Vz
dGlvbnM6IHsKLSAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZlIHx8IHBsYWluVGV4
dChtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKSAhPSBtX29yaWdpbmFsVGV4dCkKKyAgICAg
ICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZlIHx8IHBsYWluVGV4dCgqbV9yYW5nZVdpdGhB
bHRlcm5hdGl2ZSkgIT0gbV9vcmlnaW5hbFRleHQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoJlRleHRDaGVja2luZ1BhcmFncmFw
aCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgICAgIFN0
cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaCgqbV9y
YW5nZVdpdGhBbHRlcm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgICAgIFZlY3RvcjxT
dHJpbmc+IHN1Z2dlc3Rpb25zOwogICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9y
V29yZChtX29yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0
eSgpKSB7CkBAIC0zMDMsNyArMzA1LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3UKICAgICBp
ZiAoIXJhbmdlV2l0aEFsdGVybmF0aXZlIHx8IG1fZnJhbWUuZG9jdW1lbnQoKSAhPSAmcmFuZ2VX
aXRoQWx0ZXJuYXRpdmUtPm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
U3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHJhbmdlV2l0aEFsdGVybmF0aXZlKTsKKyAg
ICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHQoKnJhbmdlV2l0aEFsdGVybmF0aXZlKTsK
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHdvcmQgd2UgYXJlIGFib3V0IHRvIGNvcnJlY3Qg
aGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRpbWVyIGZpcmluZyBhbmQgY2FsbGJhY2sgYmVpbmcg
dHJpZ2dlcmVkLgogICAgIGlmIChjdXJyZW50V29yZCAhPSBtX29yaWdpbmFsVGV4dCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDE2LDcgKzQxOCw3IEBAIFRleHRDaGVja2VyQ2xpZW50KiBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjp0ZXh0Q2hlY2tlcigpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLXZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBSYW5nZSogcmVwbGFjZW1lbnRSYW5nZSkKK3ZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlv
blJlc3BvbnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
aW1wbGVSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSkKIHsKICAgICBpZiAoYXV0byBjbGllbnQgPSBh
bHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKHJlc3BvbnNlLCByZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2Vt
ZW50UmFuZ2UpKTsKQEAgLTQ3NSw3ICs0NzcsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQog
ICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlv
biwgZW5kT2ZTZWxlY3Rpb24pOwotICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UucHRyKCkpOworICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQo
cHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgp
IHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgp
IC0gMV0pKQogICAgICAgICByZXR1cm47CiAKQEAgLTUyNCw3ICs1MjYsNyBAQCBib29sIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERv
Y3VtZW50TWFya2VyJgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVu
ZE9mV29yZFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKICAgICBhdXRvIHdvcmRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbm9kZSwgbWFya2VyLnN0YXJ0T2Zmc2V0
KCksIG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSk7Ci0gICAgU3RyaW5nIGN1cnJlbnRXb3JkID0g
cGxhaW5UZXh0KHdvcmRSYW5nZS5wdHIoKSk7CisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxh
aW5UZXh0KHdvcmRSYW5nZS5nZXQoKSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fb3JpZ2luYWxUZXh0ID0gY3VycmVudFdvcmQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oCmluZGV4IDI3MDIxZWM3NWExMTIyN2Y3MTUwNWU4YWY5MmJlMmM0Mzc0ZTBmMjUuLjk4MWQy
NzA5MjA3YjZmMzk0ZGIyMWNiMWZkYTU2NjllYTgwYTk3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC00NSw2ICs0NSw3
IEBAIGNsYXNzIFRleHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAog
c3RydWN0IERpY3RhdGlvbkFsdGVybmF0aXZlOworc3RydWN0IFNpbXBsZVJhbmdlOwogc3RydWN0
IFRleHRDaGVja2luZ1Jlc3VsdDsKIAogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKQEAg
LTg4LDcgKzg5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCkgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCiAgICAgYm9v
bCBzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRpbmcoKTsKIAotICAgIHZvaWQgcmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBSYW5nZSogcmVwbGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQo
eyBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRS
YW5nZSk7IH0pCisgICAgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFNpbXBs
ZVJhbmdlJiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShy
ZXBsYWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJhbmdlKTsgfSkKICAgICB2
b2lkIG1hcmtSZXZlcnNlZChSYW5nZSYgY2hhbmdlZFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVO
VVNFRF9QQVJBTShjaGFuZ2VkUmFuZ2UpOyB9KQogICAgIHZvaWQgbWFya0NvcnJlY3Rpb24oUmFu
Z2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkUmFuZ2UpOyBVTlVTRURfUEFSQU0ocmVwbGFj
ZWRTdHJpbmcpOyB9KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMDkzYjEyYjk2
NjEzZjM3ZTZlOTk5ZGRmYWY4YTAyZTE2MjJkYmQxZC4uNzdjYzEzMTdhNmY0ODNhNGJhMWNlYTY2
ZGE1ZDdiNjViZjYwYjM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjU5Miw4
ICsyNTkyLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29y
ZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIC8vIEdldCB0aGUgbWlzc3BlbGxlZCB3b3JkLgotICAgIGNvbnN0IFN0cmluZyBtaXNz
cGVsbGVkV29yZCA9IHBsYWluVGV4dChtaXNzcGVsbGluZ1JhbmdlLmdldCgpKTsKLSAgICBTdHJp
bmcgYXV0b2NvcnJlY3RlZFN0cmluZyA9IHRleHRDaGVja2VyKCktPmdldEF1dG9Db3JyZWN0U3Vn
Z2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKKyAgICBTdHJpbmcgYXV0
b2NvcnJlY3RlZFN0cmluZyA9IHRleHRDaGVja2VyKCktPmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlv
bkZvck1pc3NwZWxsZWRXb3JkKHBsYWluVGV4dCgqbWlzc3BlbGxpbmdSYW5nZSkpOwogCiAgICAg
Ly8gSWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0aGUgbWlzc3Bl
bGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KICAgICBpZiAoIWF1dG9jb3JyZWN0ZWRTdHJpbmcuaXNF
bXB0eSgpKSB7CkBAIC0yNzczLDIxICsyNzcyLDE5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlUmFu
Z2VGb3JTcGVsbENoZWNraW5nKFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiBy
CiAgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCBy
ZXBsYWNlbWVudCktPmFwcGx5KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNr
aW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgm
IHBhcmFncmFwaCwgUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50LCBDaGFyYWN0ZXJSYW5nZSByZXN1bHRSYW5nZSkKK3N0YXRpYyB2b2lkIGNvcnJlY3RTcGVs
bGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGgmIHBhcmFncmFwaCwgUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50LCBDaGFyYWN0ZXJSYW5nZSByZXN1bHRDaGFyYWN0ZXJSYW5nZSkKIHsKLSAgICBh
dXRvJiBzY29wZSA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHBhcmFncmFwaC5wYXJhZ3JhcGhS
YW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSk7Ci0KLSAgICBzaXplX3QgcGFyYWdy
YXBoTG9jYXRpb247Ci0gICAgc2l6ZV90IHBhcmFncmFwaExlbmd0aDsKLSAgICBUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKCZzY29wZSwgJnBhcmFncmFwaC5wYXJh
Z3JhcGhSYW5nZSgpLCBwYXJhZ3JhcGhMb2NhdGlvbiwgcGFyYWdyYXBoTGVuZ3RoKTsKKyAgICBh
dXRvIHNjb3BlTm9kZSA9IG1ha2VSZWYoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocGFyYWdyYXBo
LnBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKSk7CisgICAgYXV0
byBwYXJhZ3JhcGhDaGFyYWN0ZXJSYW5nZSA9IGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50QmVmb3JlTm9kZUNvbnRlbnRzKHNjb3BlTm9kZSksIHBhcmFncmFwaC5wYXJhZ3JhcGhSYW5n
ZSgpKTsKIAogICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVw
bGFjZSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwogCiAgICAgLy8gVGV4dENoZWNraW5nUGFyYWdy
YXBoIG1heSBiZSBvcnBoYW5lZCBhZnRlciBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG11dGF0
ZWQgRE9NLgogICAgIC8vIFNlZSA8cmRhcjovLzEwMzA1MzE1PiwgaHR0cDovL3dlYmtpdC5vcmcv
Yi84OTUyNi4KIAotICAgIGF1dG8gbmV3UGFyYWdyYXBoUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHNjb3BlKSwgeyBwYXJhZ3JhcGhM
b2NhdGlvbiwgcGFyYWdyYXBoTGVuZ3RoICsgcmVwbGFjZW1lbnQubGVuZ3RoKCkgLSByZXN1bHRS
YW5nZS5sZW5ndGggfSk7Ci0gICAgYXV0byBzcGVsbENoZWNraW5nUmFuZ2UgPSByZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UobmV3UGFyYWdyYXBoUmFuZ2UsIHsgcmVzdWx0UmFuZ2UubG9jYXRpb24sIHJl
cGxhY2VtZW50Lmxlbmd0aCgpIH0pOworICAgIHBhcmFncmFwaENoYXJhY3RlclJhbmdlLmxlbmd0
aCArPSByZXBsYWNlbWVudC5sZW5ndGgoKSAtIHJlc3VsdENoYXJhY3RlclJhbmdlLmxlbmd0aDsK
KyAgICBhdXRvIG5ld1BhcmFncmFwaFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhzY29wZU5vZGUpLCBwYXJhZ3JhcGhDaGFyYWN0ZXJS
YW5nZSk7CisgICAgYXV0byBzcGVsbENoZWNraW5nUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFu
Z2UobmV3UGFyYWdyYXBoUmFuZ2UsIHsgcmVzdWx0Q2hhcmFjdGVyUmFuZ2UubG9jYXRpb24sIHJl
cGxhY2VtZW50Lmxlbmd0aCgpIH0pOwogICAgIHBhcmFncmFwaCA9IFRleHRDaGVja2luZ1BhcmFn
cmFwaChjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdl
KHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShuZXdQYXJhZ3JhcGhSYW5nZSkp
OwogfQogCkBAIC0yODg1LDcgKzI4ODIsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VG
b3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogICAg
ICAgICAgICAgaWYgKCEoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZENoZWNrRm9y
Q29ycmVjdGlvbiB8fCBzaG91bGRNYXJrTGluaykgfHwgIWRvUmVwbGFjZW1lbnQpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFN0cmluZyByZXBsYWNlZFN0cmluZyA9
IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZS5wdHIoKSk7CisgICAgICAgICAgICBTdHJpbmcgcmVw
bGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwogICAgICAgICAg
ICAgY29uc3QgYm9vbCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCA9IG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJl
c3VsdChyZXN1bHRzW2ldLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZWRTdHJpbmcpOwogICAgICAg
ICAgICAgaWYgKCFleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTI5MzEsNyArMjkyOCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5k
UmVwbGFjZUZvcihjb25zdCBTcGVsbENoZWNrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVmVjdG9y
PFRlCiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBl
OjpDb3JyZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5n
ZSA9IHBhcmFncmFwaC5zdWJyYW5nZSh7IHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudC5sZW5n
dGgoKSB9KTsKLSAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OkFj
Y2VwdGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRSYW5nZS5wdHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpBY2NlcHRlZCwgcmVwbGFjZWRT
dHJpbmcsIHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOwogCiAgICAgICAgICAgICAgICAgICAgIC8v
IEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUgdW5kb25lIGFu
ZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCiAgICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci0+bWFya0NvcnJlY3Rpb24ocmVwbGFjZW1lbnRSYW5nZSwgcmVwbGFj
ZWRTdHJpbmcpOwpAQCAtMjk2NiwxMCArMjk2MywxMCBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFj
a1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7
Ci0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKKyAgICBpZiAoIXNlbGVjdGlvbiB8fCAh
c2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0
KCkpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJp
bmcsICpzZWxlY3Rpb24pOwogICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoKnNl
bGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBT
ZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2Vy
dCk7CiAgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UoQ2hhcmFjdGVy
UmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkp
KTsKQEAgLTMyMDEsNyArMzE5OCw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIFZp
c2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSk7CiAKICAgICAv
LyBUcmFuc3Bvc2UgdGhlIHR3byBjaGFyYWN0ZXJzLgotICAgIFN0cmluZyB0ZXh0ID0gcGxhaW5U
ZXh0KHJhbmdlLmdldCgpKTsKKyAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dCgqcmFuZ2UpOwog
ICAgIGlmICh0ZXh0Lmxlbmd0aCgpICE9IDIpCiAgICAgICAgIHJldHVybjsKICAgICBTdHJpbmcg
dHJhbnNwb3NlZCA9IHRleHQucmlnaHQoMSkgKyB0ZXh0LmxlZnQoMSk7CkBAIC0zMjIxLDcgKzMy
MTgsNyBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKIAogdm9pZCBFZGl0b3I6OmFkZFJhbmdl
VG9LaWxsUmluZyhjb25zdCBSYW5nZSYgcmFuZ2UsIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZSBtb2Rl
KQogewotICAgIGFkZFRleHRUb0tpbGxSaW5nKHBsYWluVGV4dCgmcmFuZ2UpLCBtb2RlKTsKKyAg
ICBhZGRUZXh0VG9LaWxsUmluZyhwbGFpblRleHQocmFuZ2UpLCBtb2RlKTsKIH0KIAogdm9pZCBF
ZGl0b3I6OmFkZFRleHRUb0tpbGxSaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgS2lsbFJpbmdJbnNl
cnRpb25Nb2RlIG1vZGUpCkBAIC0zOTc1LDcgKzM5NzIsNyBAQCBTdHJpbmcgRWRpdG9yOjpzdHJp
bmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJhbmdlRm9y
U2VsZWN0aW9uKG1fZnJhbWUpOwogICAgIGlmIChyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5n
ICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKLSAgICAgICAgcmV0dXJu
IHBsYWluVGV4dChyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7CiAKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKaW5kZXggYWQ3ODIzMmE4YTIwODY3Y2Q1OTkx
YjNkMmY4MGIzZjRkNGI2ZjYwZS4uNTQ2MGI3NWNhYmQyM2RkNTVhZDkzOWQwMTRiNTgyOTJlZDlk
NGVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRo
VGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kLmNwcApAQCAtNjMsOCArNjMsNyBAQCB2b2lkIFJlcGxhY2VSYW5nZVdp
dGhUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlvbigpLnNo
b3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgcHJldmlvdXNUZXh0ID0gcGxhaW5UZXh0KG1fcmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkp
OwotICAgIGlmICghcHJldmlvdXNUZXh0Lmxlbmd0aCgpKQorICAgIGlmICghY2hhcmFjdGVyQ291
bnQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNv
bW1hbmRUb0NvbXBvc2l0ZShTZXRTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoc2VsZWN0aW9uLCBG
cmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBk
ODY2ZTg1NTI4YjJiMWMwYTM1YTcyZmMzNTBhZmM4NzhkYzc4MGE3Li41Mjc4ZGI5NWJkZjUzOGFk
ZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIFJlcGxh
Y2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQsIGNvbnN0IFZpc2liCiAgICAgfQogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoaG9sZGVyLmdl
dCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIFN0cmluZyB0ZXh0ID0gcGxhaW5UZXh0KHJh
bmdlLmdldCgpLCBzdGF0aWNfY2FzdDxUZXh0SXRlcmF0b3JCZWhhdmlvcj4oVGV4dEl0ZXJhdG9y
RW1pdHNPcmlnaW5hbFRleHQgfCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KSk7
CisgICAgU3RyaW5nIHRleHQgPSByYW5nZSA/IHBsYWluVGV4dCgqcmFuZ2UsIHN0YXRpY19jYXN0
PFRleHRJdGVyYXRvckJlaGF2aW9yPihUZXh0SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCB8IFRl
eHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkpKSA6IGVtcHR5U3RyaW5nKCk7CiAKICAg
ICByZW1vdmVJbnRlcmNoYW5nZU5vZGVzKGhvbGRlci5nZXQoKSk7CiAgICAgcmVtb3ZlVW5yZW5k
ZXJlZE5vZGVzKGhvbGRlci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1MTMzMTQ1MzkzZDE3M2E1Nzlk
MGE1MGMwYmZmMWM4ZTM1YWQ4MzQ3Li45OWU4ZjE1ODg4ZWFlOTNmM2Q2OGUwNGQ4OWVmZjU3NTY0
NmJjMzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCkKIAogdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBtX2NvcnJlY3RlZCA9IHBsYWluVGV4dChtX3Jhbmdl
VG9CZUNvcnJlY3RlZC5wdHIoKSk7CisgICAgbV9jb3JyZWN0ZWQgPSBwbGFpblRleHQobV9yYW5n
ZVRvQmVDb3JyZWN0ZWQpOwogICAgIGlmICghbV9jb3JyZWN0ZWQubGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tp
bmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
Y3BwCmluZGV4IDk5YjhlMzFkZjBkY2M2MmFmMWZhZTA5ZDMxNmFiZjA5OTBiOGM5MjUuLmQ3MmUw
N2ZjMmQxZjg2MWI2MmU2MDA1OTFmOGEwNTkxYjFlMDNlODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTE4Nyw3ICsxODcsNyBAQCBSYW5n
ZSYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRBc1JhbmdlKCkgY29uc3QKIFN0cmluZ1Zp
ZXcgVGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0KCkgY29uc3QKIHsKICAgICBpZiAobV90ZXh0
LmlzTnVsbCgpKQotICAgICAgICBtX3RleHQgPSBwbGFpblRleHQoJnBhcmFncmFwaFJhbmdlKCkp
OworICAgICAgICBtX3RleHQgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgcmV0
dXJuIG1fdGV4dDsgCiB9CiAKQEAgLTMzNyw3ICszMzcsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5n
SGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1h
ciwgYgogICAgICAgICAgICAgbGFzdEl0ZXJhdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGN1cnJlbnRTdGFydE9mZnNldCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKLSAgICAgICAg
ICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UucHRy
KCkpOworICAgICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZyA9IHBsYWluVGV4dChwYXJh
Z3JhcGhSYW5nZSk7CiAgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpID4g
MCkgewogICAgICAgICAgICAgICAgIGJvb2wgZm91bmRHcmFtbWFyID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgdWludDY0X3Qgc3BlbGxpbmdMb2NhdGlvbiA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggMjE4NjRjOGY0ZmMwNWNiMzlhMTk3MDRkMjU0NDAz
ZTdlYTY4MTdkYi4uMTcyZTI2NDRjMjIxNDQ5YzVjNzc0ZjE5ZTYwNWJlMjU5ODVhMTY1ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtNDYsNyArNDYsNiBAQAog
I2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5l
VGV4dEJveC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJSYW5nZS5o
IgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTE0MSw4ICsxNDAsOCBAQCBwcml2YXRl
OgogCiAvLyAtLS0tLS0tLQogCi1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdHNJbldvcmQg
PSBzaXplb2YodW5zaWduZWQpICogODsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0SW5X
b3JkTWFzayA9IGJpdHNJbldvcmQgLSAxOworY29uc3RleHByIHVuc2lnbmVkIGJpdHNJbldvcmQg
PSBzaXplb2YodW5zaWduZWQpICogODsKK2NvbnN0ZXhwciB1bnNpZ25lZCBiaXRJbldvcmRNYXNr
ID0gYml0c0luV29yZCAtIDE7CiAKIHZvaWQgQml0U3RhY2s6OnB1c2goYm9vbCBiaXQpCiB7CkBA
IC0xNDM1LDI0ICsxNDM0LDYgQEAgdm9pZCBDaGFyYWN0ZXJJdGVyYXRvcjo6YWR2YW5jZShpbnQg
Y291bnQpCiAgICAgbV9ydW5PZmZzZXQgPSAwOwogfQogCi1zdGF0aWMgUmVmPFJhbmdlPiBjaGFy
YWN0ZXJTdWJyYW5nZShEb2N1bWVudCYgZG9jdW1lbnQsIENoYXJhY3Rlckl0ZXJhdG9yJiBpdCwg
aW50IG9mZnNldCwgaW50IGxlbmd0aCkKLXsKLSAgICBpdC5hZHZhbmNlKG9mZnNldCk7Ci0gICAg
aWYgKGl0LmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KTsK
LQotICAgIGF1dG8gc3RhcnQgPSBpdC5yYW5nZSgpLnN0YXJ0OwotCi0gICAgaWYgKGxlbmd0aCA+
IDEpCi0gICAgICAgIGl0LmFkdmFuY2UobGVuZ3RoIC0gMSk7Ci0gICAgaWYgKGl0LmF0RW5kKCkp
Ci0gICAgICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KTsKLQotICAgIGF1dG8gZW5k
ID0gaXQucmFuZ2UoKS5lbmQ7Ci0KLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKFNpbXBsZVJh
bmdlIHsgc3RhcnQsIGVuZCB9KTsKLX0KLQogQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3I6OkJh
Y2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICA6
IG1fdW5kZXJseWluZ0l0ZXJhdG9yKHJhbmdlKQogewpAQCAtMTYyMyw3ICsxNjA0LDcgQEAgU3Ry
aW5nIGZvbGRRdW90ZU1hcmtzKGNvbnN0IFN0cmluZyYgc3RyaW5nVG9Gb2xkKQogCiAjaWYgIVVD
T05GSUdfTk9fQ09MTEFUSU9OCiAKLWNvbnN0IHNpemVfdCBtaW5pbXVtU2VhcmNoQnVmZmVyU2l6
ZSA9IDgxOTI7Citjb25zdGV4cHIgc2l6ZV90IG1pbmltdW1TZWFyY2hCdWZmZXJTaXplID0gODE5
MjsKIAogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBib29sIHNlYXJjaGVySW5Vc2U7CkBAIC0xODc2
LDcgKzE4NTcsNyBAQCBzdGF0aWMgYm9vbCBpc05vbkxhdGluMVNlcGFyYXRvcihVQ2hhcjMyIGNo
YXJhY3RlcikKIAogc3RhdGljIGlubGluZSBib29sIGlzU2VwYXJhdG9yKFVDaGFyMzIgY2hhcmFj
dGVyKQogewotICAgIHN0YXRpYyBjb25zdCBib29sIGxhdGluMVNlcGFyYXRvclRhYmxlWzI1Nl0g
PSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGxhdGluMVNlcGFyYXRvclRhYmxlWzI1Nl0g
PSB7CiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsCiAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsCiAgICAgICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIC8vIHNwYWNlICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvCkBAIC0yMjc2LDcgKzIy
NTcsNyBAQCBpbmxpbmUgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogICAgICAgICBhcHBlbmQoY2hhcmFjdGVyc1swXSwg
dHJ1ZSk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBjb25zdCBpbnQgbWF4Rm9sZGVk
Q2hhcmFjdGVycyA9IDE2OyAvLyBzZW5zaWJsZSBtYXhpbXVtIGlzIDMsIHRoaXMgc2hvdWxkIGJl
IG1vcmUgdGhhbiBlbm91Z2gKKyAgICBjb25zdGV4cHIgaW50IG1heEZvbGRlZENoYXJhY3RlcnMg
PSAxNjsgLy8gc2Vuc2libGUgbWF4aW11bSBpcyAzLCB0aGlzIHNob3VsZCBiZSBtb3JlIHRoYW4g
ZW5vdWdoCiAgICAgVUNoYXIgZm9sZGVkQ2hhcmFjdGVyc1ttYXhGb2xkZWRDaGFyYWN0ZXJzXTsK
ICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBpbnQgbnVtRm9sZGVk
Q2hhcmFjdGVycyA9IHVfc3RyRm9sZENhc2UoZm9sZGVkQ2hhcmFjdGVycywgbWF4Rm9sZGVkQ2hh
cmFjdGVycywgY2hhcmFjdGVycywgMSwgVV9GT0xEX0NBU0VfREVGQVVMVCwgJnN0YXR1cyk7CkBA
IC0yNDE1LDMxICsyMzk2LDYgQEAgU2ltcGxlUmFuZ2UgcmVzb2x2ZUNoYXJhY3RlclJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UKICAgICByZXR1cm4g
cmVzdWx0UmFuZ2U7CiB9CiAKLUJvdW5kYXJ5UG9pbnQgcmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9u
KGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgdWludDY0X3QgbG9jYXRpb24sIFRleHRJdGVyYXRv
ckJlaGF2aW9yIGJlaGF2aW9yKQotewotICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uo
c2NvcGUsIHsgbG9jYXRpb24sIDAgfSwgYmVoYXZpb3IpLnN0YXJ0OwotfQotCi1ib29sIFRleHRJ
dGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0
IFJhbmdlKiByYW5nZSwgc2l6ZV90JiBsb2NhdGlvbiwgc2l6ZV90JiBsZW5ndGgpCi17Ci0gICAg
bG9jYXRpb24gPSBub3RGb3VuZDsKLSAgICBsZW5ndGggPSAwOwotCi0gICAgLy8gVGhlIGNyaXRp
Y2FsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0aCByYW5nZXMg
dGhhdAotICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2ZW4gYXJlYSBjb250YWluaW5nIHRoZSBz
ZWxlY3Rpb24gcm9vdC4gVGhpcyBpcyBkb25lCi0gICAgLy8gYmVjYXVzZSBvZiB0ZXh0IGZpZWxk
cyBhbmQgdGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9zZSBpcyBub3QgZGlyZWN0bHkKLSAgICAv
LyBpbiB0aGUgZG9jdW1lbnQgRE9NLCBzbyBlbnN1cmUgdGhhdCB0aGUgcmFuZ2UgZG9lcyBub3Qg
Y3Jvc3MgYSBib3VuZGFyeQotICAgIC8vIG9mIG9uZSBvZiB0aG9zZS4KLSAgICBpZiAoJnJhbmdl
LT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS5p
c0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoJnJh
bmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLmlz
RGVzY2VuZGFudE9mKHNjb3BlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbG9jYXRp
b24gPSBjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3BlLCAwIH0sIHsgcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpIH0gfSk7Ci0gICAgbGVuZ3RoID0gY2hhcmFjdGVy
Q291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVu
ZE9mZnNldCgpIH0gfSkgLSBsb2NhdGlvbjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogLy8gLS0t
LS0tLS0KIAogYm9vbCBoYXNBbnlQbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBU
ZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKQEAgLTI0NTQsNyArMjQxMCw3IEBAIGJvb2wg
aGFzQW55UGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgYmVoYXZpb3IpCiBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgZGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0
cmluZykKIHsKICAgICAvLyBUaGUgaW5pdGlhbCBidWZmZXIgc2l6ZSBjYW4gYmUgY3JpdGljYWwg
Zm9yIHBlcmZvcm1hbmNlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODExOTIKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5ID0gMSA8PCAx
NTsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5ID0gMSA8PCAxNTsKIAog
ICAgIGF1dG8gZG9jdW1lbnQgPSBtYWtlUmVmKHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpOwogCkBA
IC0yNDgxLDMyICsyNDM3LDExIEBAIFN0cmluZyBwbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBkZWZhdWx0QmVoYXZpb3IsCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotU3RyaW5nIHBsYWluVGV4dChjb25zdCBSYW5nZSogcmFuZ2UsIFRleHRJ
dGVyYXRvckJlaGF2aW9yIGRlZmF1bHRCZWhhdmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcpCi17
Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0
dXJuIHBsYWluVGV4dCgqcmFuZ2UsIGRlZmF1bHRCZWhhdmlvciwgaXNEaXNwbGF5U3RyaW5nKTsK
LX0KLQotU3RyaW5nIHBsYWluVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yRm9yVGVzdGlu
Zyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBm
b3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IoY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKSk7ICFiYWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpOyBiYWNrd2Fy
ZHNJdGVyYXRvci5hZHZhbmNlKCkpCi0gICAgICAgIHJlc3VsdC5pbnNlcnQoYmFja3dhcmRzSXRl
cmF0b3IudGV4dCgpLnRvU3RyaW5nKCksIDApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIFN0
cmluZyBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBkZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5
U3RyaW5nKQogewogICAgIHJldHVybiBwbGFpblRleHQocmFuZ2UsIGRlZmF1bHRCZWhhdmlvciwg
aXNEaXNwbGF5U3RyaW5nKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKIH0KIAotc3RhdGlj
IFNpbXBsZVJhbmdlIGNvbGxhcHNlZFRvQm91bmRhcnkoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBib29sIGZvcndhcmQpCi17Ci0gICAgYXV0byYgYm91bmRhcnkgPSBmb3J3YXJkID8gcmFuZ2Uu
ZW5kIDogcmFuZ2Uuc3RhcnQ7Ci0gICAgcmV0dXJuIHsgYm91bmRhcnksIGJvdW5kYXJ5IH07Ci19
Ci0KIHN0YXRpYyBUZXh0SXRlcmF0b3JCZWhhdmlvciBmaW5kSXRlcmF0b3JPcHRpb25zKEZpbmRP
cHRpb25zIG9wdGlvbnMpCiB7CiAgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgaXRlcmF0b3JPcHRp
b25zID0gVGV4dEl0ZXJhdG9yRW50ZXJzVGV4dENvbnRyb2xzIHwgVGV4dEl0ZXJhdG9yQ2xpcHNU
b0ZyYW1lQW5jZXN0b3JzOwpAQCAtMjUxNSwyMCArMjQ1MCwxOSBAQCBzdGF0aWMgVGV4dEl0ZXJh
dG9yQmVoYXZpb3IgZmluZEl0ZXJhdG9yT3B0aW9ucyhGaW5kT3B0aW9ucyBvcHRpb25zKQogICAg
IHJldHVybiBpdGVyYXRvck9wdGlvbnM7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbmRQbGFpblRleHRN
YXRjaGVzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIGNvbnN0IFdURjo6RnVuY3Rpb248Ym9vbChzaXplX3QsIHNpemVf
dCk+JiBtYXRjaCkKK3N0YXRpYyB2b2lkIGZvckVhY2hNYXRjaChjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBjb25zdCBG
dW5jdGlvbjxib29sKENoYXJhY3RlclJhbmdlKT4mIG1hdGNoKQogewogICAgIFNlYXJjaEJ1ZmZl
ciBidWZmZXIodGFyZ2V0LCBvcHRpb25zKTsKICAgICBpZiAoYnVmZmVyLm5lZWRzTW9yZUNvbnRl
eHQoKSkgewotICAgICAgICBSZWY8UmFuZ2U+IGJlZm9yZVN0YXJ0UmFuZ2UgPSByYW5nZS5zdGFy
dC5kb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIGJlZm9yZVN0YXJ0UmFuZ2UtPnNl
dEVuZChyYW5nZS5zdGFydC5jb250YWluZXIuY29weVJlZigpLCByYW5nZS5zdGFydC5vZmZzZXQp
OwotICAgICAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRz
SXRlcmF0b3IoYmVmb3JlU3RhcnRSYW5nZS5nZXQoKSk7ICFiYWNrd2FyZHNJdGVyYXRvci5hdEVu
ZCgpOyBiYWNrd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpIHsKKyAgICAgICAgYXV0byBiZWZvcmVT
dGFydFJhbmdlID0gU2ltcGxlUmFuZ2UgeyBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250
ZW50cyhyYW5nZS5zdGFydC5kb2N1bWVudCgpKSwgcmFuZ2Uuc3RhcnQgfTsKKyAgICAgICAgZm9y
IChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJlZm9y
ZVN0YXJ0UmFuZ2UpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0
b3IuYWR2YW5jZSgpKSB7CiAgICAgICAgICAgICBidWZmZXIucHJlcGVuZENvbnRleHQoYmFja3dh
cmRzSXRlcmF0b3IudGV4dCgpKTsKICAgICAgICAgICAgIGlmICghYnVmZmVyLm5lZWRzTW9yZUNv
bnRleHQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAg
IENoYXJhY3Rlckl0ZXJhdG9yIGZpbmRJdGVyYXRvcihjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBm
aW5kSXRlcmF0b3JPcHRpb25zKG9wdGlvbnMpKTsKKyAgICBDaGFyYWN0ZXJJdGVyYXRvciBmaW5k
SXRlcmF0b3IocmFuZ2UsIGZpbmRJdGVyYXRvck9wdGlvbnMob3B0aW9ucykpOwogICAgIHdoaWxl
ICghZmluZEl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgZmluZEl0ZXJhdG9yLmFkdmFuY2Uo
YnVmZmVyLmFwcGVuZChmaW5kSXRlcmF0b3IudGV4dCgpKSk7CiAgICAgICAgIHdoaWxlICgxKSB7
CkBAIC0yNTQzLDUzICsyNDc3LDY5IEBAIHN0YXRpYyB2b2lkIGZpbmRQbGFpblRleHRNYXRjaGVz
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzaXplX3QgbGFzdENoYXJhY3RlckluQnVmZmVyT2Zmc2V0ID0g
ZmluZEl0ZXJhdG9yLmNoYXJhY3Rlck9mZnNldCgpOwogICAgICAgICAgICAgQVNTRVJUKGxhc3RD
aGFyYWN0ZXJJbkJ1ZmZlck9mZnNldCA+PSBtYXRjaFN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAg
IGlmIChtYXRjaChsYXN0Q2hhcmFjdGVySW5CdWZmZXJPZmZzZXQgLSBtYXRjaFN0YXJ0T2Zmc2V0
LCBuZXdNYXRjaExlbmd0aCkpCisgICAgICAgICAgICBpZiAobWF0Y2goQ2hhcmFjdGVyUmFuZ2Uo
bGFzdENoYXJhY3RlckluQnVmZmVyT2Zmc2V0IC0gbWF0Y2hTdGFydE9mZnNldCwgbmV3TWF0Y2hM
ZW5ndGgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAK
LXN0YXRpYyBTaW1wbGVSYW5nZSByYW5nZUZvck1hdGNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgRmluZE9wdGlvbnMgb3B0aW9ucywgc2l6ZV90IG1hdGNoU3RhcnQsIHNpemVfdCBtYXRjaExl
bmd0aCwgYm9vbCBzZWFyY2hGb3J3YXJkKQorc3RhdGljIFNpbXBsZVJhbmdlIHJhbmdlRm9yTWF0
Y2goY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zLCBDaGFyYWN0
ZXJSYW5nZSBtYXRjaCkKIHsKLSAgICBpZiAoIW1hdGNoTGVuZ3RoKQotICAgICAgICByZXR1cm4g
Y29sbGFwc2VkVG9Cb3VuZGFyeShyYW5nZSwgc2VhcmNoRm9yd2FyZCk7Ci0gICAgQ2hhcmFjdGVy
SXRlcmF0b3IgcmFuZ2VDb21wdXRlSXRlcmF0b3IoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgZmlu
ZEl0ZXJhdG9yT3B0aW9ucyhvcHRpb25zKSk7Ci0gICAgcmV0dXJuIGNoYXJhY3RlclN1YnJhbmdl
KHJhbmdlLnN0YXJ0LmRvY3VtZW50KCksIHJhbmdlQ29tcHV0ZUl0ZXJhdG9yLCBtYXRjaFN0YXJ0
LCBtYXRjaExlbmd0aCk7CisgICAgYXV0byBub01hdGNoUmVzdWx0ID0gWyZdICgpIHsKKyAgICAg
ICAgYXV0byYgYm91bmRhcnkgPSBvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykgPyByYW5nZS5z
dGFydCA6IHJhbmdlLmVuZDsKKyAgICAgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgYm91bmRhcnks
IGJvdW5kYXJ5IH07CisgICAgfTsKKworICAgIGlmICghbWF0Y2gubGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gbm9NYXRjaFJlc3VsdCgpOworCisgICAgQ2hhcmFjdGVySXRlcmF0b3IgaXQocmFuZ2Us
IGZpbmRJdGVyYXRvck9wdGlvbnMob3B0aW9ucykpOworCisgICAgaXQuYWR2YW5jZShtYXRjaC5s
b2NhdGlvbik7CisgICAgaWYgKGl0LmF0RW5kKCkpCisgICAgICAgIHJldHVybiBub01hdGNoUmVz
dWx0KCk7CisgICAgYXV0byBzdGFydCA9IGl0LnJhbmdlKCkuc3RhcnQ7CisKKyAgICBpdC5hZHZh
bmNlKG1hdGNoLmxlbmd0aCAtIDEpOworICAgIGlmIChpdC5hdEVuZCgpKQorICAgICAgICByZXR1
cm4gbm9NYXRjaFJlc3VsdCgpOworCisgICAgcmV0dXJuIHsgV1RGTW92ZShzdGFydCksIGl0LnJh
bmdlKCkuZW5kIH07CiB9CiAKLVNpbXBsZVJhbmdlIGZpbmRDbG9zZXN0UGxhaW5UZXh0KGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9w
dGlvbnMsIHVuc2lnbmVkIHRhcmdldE9mZnNldCkKK1NpbXBsZVJhbmdlIGZpbmRDbG9zZXN0UGxh
aW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZp
bmRPcHRpb25zIG9wdGlvbnMsIHVpbnQ2NF90IHRhcmdldE9mZnNldCkKIHsKLSAgICBzaXplX3Qg
bWF0Y2hTdGFydCA9IDA7Ci0gICAgc2l6ZV90IG1hdGNoTGVuZ3RoID0gMDsKLSAgICBzaXplX3Qg
ZGlzdGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOwotICAgIGF1dG8g
bWF0Y2ggPSBbdGFyZ2V0T2Zmc2V0LCAmZGlzdGFuY2UsICZtYXRjaFN0YXJ0LCAmbWF0Y2hMZW5n
dGhdIChzaXplX3Qgc3RhcnQsIHNpemVfdCBsZW5ndGgpIHsKLSAgICAgICAgc2l6ZV90IG5ld0Rp
c3RhbmNlID0gc3RkOjptaW4oYWJzKHN0YXRpY19jYXN0PHNpZ25lZD4oc3RhcnQgLSB0YXJnZXRP
ZmZzZXQpKSwgYWJzKHN0YXRpY19jYXN0PHNpZ25lZD4oc3RhcnQgKyBsZW5ndGggLSB0YXJnZXRP
ZmZzZXQpKSk7Ci0gICAgICAgIGlmIChuZXdEaXN0YW5jZSA8IGRpc3RhbmNlKSB7Ci0gICAgICAg
ICAgICBtYXRjaFN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICAgICBtYXRjaExlbmd0aCA9IGxlbmd0
aDsKLSAgICAgICAgICAgIGRpc3RhbmNlID0gbmV3RGlzdGFuY2U7Ci0gICAgICAgIH0KKyAgICBD
aGFyYWN0ZXJSYW5nZSBjbG9zZXN0TWF0Y2g7CisgICAgdWludDY0X3QgY2xvc2VzdE1hdGNoRGlz
dGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CisgICAgZm9yRWFj
aE1hdGNoKHJhbmdlLCB0YXJnZXQsIG9wdGlvbnMsIFsmXSAoQ2hhcmFjdGVyUmFuZ2UgbWF0Y2gp
IHsKKyAgICAgICAgYXV0byBkaXN0YW5jZSA9IFtdICh1aW50NjRfdCBhLCB1aW50NjRfdCBiKSAt
PiB1aW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjphYnMoc3RhdGljX2Nhc3Q8aW50
NjRfdD4oYSAtIGIpKTsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byBtYXRjaERpc3RhbmNlID0g
c3RkOjptaW4oZGlzdGFuY2UobWF0Y2gubG9jYXRpb24sIHRhcmdldE9mZnNldCksIGRpc3RhbmNl
KG1hdGNoLmxvY2F0aW9uICsgbWF0Y2gubGVuZ3RoLCB0YXJnZXRPZmZzZXQpKTsKKyAgICAgICAg
aWYgKG1hdGNoRGlzdGFuY2UgPiBjbG9zZXN0TWF0Y2hEaXN0YW5jZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1hdGNoRGlzdGFuY2UgPT0gY2xvc2VzdE1hdGNoRGlz
dGFuY2UgJiYgIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2xvc2VzdE1hdGNoID0gbWF0Y2g7CisgICAgICAgIGlmICghbWF0
Y2hEaXN0YW5jZSAmJiAhb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNsb3Nlc3RNYXRjaERpc3RhbmNlID0gbWF0Y2hEaXN0YW5j
ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICBmaW5kUGxhaW5UZXh0TWF0
Y2hlcyhyYW5nZSwgdGFyZ2V0LCBvcHRpb25zLCBXVEZNb3ZlKG1hdGNoKSk7Ci0gICAgcmV0dXJu
IHJhbmdlRm9yTWF0Y2gocmFuZ2UsIG9wdGlvbnMsIG1hdGNoU3RhcnQsIG1hdGNoTGVuZ3RoLCAh
b3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmFuZ2VG
b3JNYXRjaChyYW5nZSwgb3B0aW9ucywgY2xvc2VzdE1hdGNoKTsKIH0KIAogU2ltcGxlUmFuZ2Ug
ZmluZFBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewotICAgIGJvb2wgc2VhcmNoRm9yd2FyZCA9ICFv
cHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcyk7Ci0gICAgc2l6ZV90IG1hdGNoU3RhcnQgPSAwOwot
ICAgIHNpemVfdCBtYXRjaExlbmd0aCA9IDA7Ci0gICAgYXV0byBtYXRjaCA9IFtzZWFyY2hGb3J3
YXJkLCAmbWF0Y2hTdGFydCwgJm1hdGNoTGVuZ3RoXSAoc2l6ZV90IHN0YXJ0LCBzaXplX3QgbGVu
Z3RoKSB7Ci0gICAgICAgIG1hdGNoU3RhcnQgPSBzdGFydDsKLSAgICAgICAgbWF0Y2hMZW5ndGgg
PSBsZW5ndGg7Ci0gICAgICAgIC8vIExvb2sgZm9yIHRoZSBsYXN0IG1hdGNoIHdoZW4gc2VhcmNo
aW5nIGJhY2t3YXJkcyBpbnN0ZWFkLgotICAgICAgICByZXR1cm4gc2VhcmNoRm9yd2FyZDsKLSAg
ICB9OwotCi0gICAgZmluZFBsYWluVGV4dE1hdGNoZXMocmFuZ2UsIHRhcmdldCwgb3B0aW9ucywg
V1RGTW92ZShtYXRjaCkpOwotICAgIHJldHVybiByYW5nZUZvck1hdGNoKHJhbmdlLCBvcHRpb25z
LCBtYXRjaFN0YXJ0LCBtYXRjaExlbmd0aCwgc2VhcmNoRm9yd2FyZCk7CisgICAgLy8gV2hlbiBz
ZWFyY2hpbmcgZm9yd2FyZCBzdG9wIHNpbmNlIHdlIHdhbnQgdGhlIGZpcnN0IG1hdGNoLgorICAg
IC8vIFdoZW4gc2VhcmNoaW5nIGJhY2t3YXJkIGtlZXAgZ29pbmcgc2luY2Ugd2Ugd2FudCB0aGUg
bGFzdCBtYXRjaC4KKyAgICBib29sIHN0b3BBZnRlckZpbmRpbmdNYXRjaCA9ICFvcHRpb25zLmNv
bnRhaW5zKEJhY2t3YXJkcyk7CisgICAgQ2hhcmFjdGVyUmFuZ2UgbGFzdE1hdGNoRm91bmQ7Cisg
ICAgZm9yRWFjaE1hdGNoKHJhbmdlLCB0YXJnZXQsIG9wdGlvbnMsIFsmXSAoQ2hhcmFjdGVyUmFu
Z2UgbWF0Y2gpIHsKKyAgICAgICAgbGFzdE1hdGNoRm91bmQgPSBtYXRjaDsKKyAgICAgICAgcmV0
dXJuIHN0b3BBZnRlckZpbmRpbmdNYXRjaDsKKyAgICB9KTsKKyAgICByZXR1cm4gcmFuZ2VGb3JN
YXRjaChyYW5nZSwgb3B0aW9ucywgbGFzdE1hdGNoRm91bmQpOwogfQogCiBib29sIGNvbnRhaW5z
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBG
aW5kT3B0aW9ucyBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5k
ZXggZTE2MDI4NzViMmY3NWVkMzFlNzUwMWNhYTMwMGI0YzhmNjM5YmYyZS4uOWRlYTczM2I2YjFm
M2M2MTE5ZWI2ODkzMTQ2NzgwMjYxNWU3MWY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5oCkBAIC0zNCwyMyArMzQsMjcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlclRleHRGcmFnbWVudDsKIAotLy8gRklYTUU6IERlbGV0
ZSB0aGlzIG92ZXJsb2FkIGFmdGVyIG1vdmluZyBhbGwgdGhlIGNhbGxlcnMgdG8gdGhlIFNpbXBs
ZVJhbmdlIHZlcnNpb24uCi1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFJh
bmdlKiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3Is
IGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOworLy8gQ2hhcmFjdGVyIHJhbmdlcyBiYXNl
ZCBvbiBjaGFyYWN0ZXJzIGZyb20gdGhlIHRleHQgaXRlcmF0b3IuCitXRUJDT1JFX0VYUE9SVCB1
aW50NjRfdCBjaGFyYWN0ZXJDb3VudChjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJl
aGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKK0NoYXJhY3RlclJhbmdlIGNo
YXJhY3RlclJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmIHN0YXJ0LCBjb25zdCBTaW1wbGVSYW5n
ZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsK
K0NoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwg
Y29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRl
ZmF1bHRCZWhhdmlvcik7CitCb3VuZGFyeVBvaW50IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihj
b25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIHVpbnQ2NF90LCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CitXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5n
ZSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCBDaGFyYWN0
ZXJSYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3IpOwogCisvLyBUZXh0IGZyb20gdGhlIHRleHQgaXRlcmF0b3IuCiBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3Ig
PSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFs
c2UpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNBbnlQbGFpblRleHQoY29uc3QgU2ltcGxlUmFu
Z2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7
CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKGNv
bnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZh
dWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOwotV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHBsYWluVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yRm9yVGVzdGluZyhj
b25zdCBTaW1wbGVSYW5nZSYpOwogCisvLyBGaW5kIHdpdGhpbiB0aGUgZG9jdW1lbnQsIGJhc2Vk
IG9uIHRoZSB0ZXh0IGZyb20gdGhlIHRleHQgaXRlcmF0b3IuCiBTaW1wbGVSYW5nZSBmaW5kUGxh
aW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOwot
V0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgZmluZENsb3Nlc3RQbGFpblRleHQoY29uc3QgU2lt
cGxlUmFuZ2UmLCBjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwotV0VCQ09S
RV9FWFBPUlQgYm9vbCBoYXNBbnlQbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRl
cmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CitXRUJDT1JFX0VY
UE9SVCBTaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYs
IGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1aW50NjRfdCB0YXJnZXRDaGFyYWN0ZXJPZmZz
ZXQpOwogYm9vbCBjb250YWluc1BsYWluVGV4dChjb25zdCBTdHJpbmcmIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmLCBGaW5kT3B0aW9ucyk7IC8vIExldHMgdXMgdXNlIHRoZSBzZWFyY2ggYWxnb3Jp
dGhtIG9uIGEgc3RyaW5nLgogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGZvbGRRdW90ZU1hcmtzKGNv
bnN0IFN0cmluZyYpOwogCi0vLyBGSVhNRTogTW92ZSB0aGlzIHNvbWV3aGVyZSBlbHNlIGluIHRo
ZSBlZGl0aW5nIGRpcmVjdG9yeS4gSXQgZG9lc24ndCBiZWxvbmcgaGVyZS4KKy8vIEZJWE1FOiBN
b3ZlIHRoaXMgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGVkaXRpbmcgZGlyZWN0b3J5LiBJdCBkb2Vz
bid0IGJlbG9uZyBpbiB0aGUgaGVhZGVyIHdpdGggVGV4dEl0ZXJhdG9yLgogYm9vbCBpc1JlbmRl
cmVyUmVwbGFjZWRFbGVtZW50KFJlbmRlck9iamVjdCopOwogCiAvLyBGSVhNRTogTW92ZSBlYWNo
IGl0ZXJhdG9yIGNsYXNzIGludG8gYSBzZXBhcmF0ZSBoZWFkZXIgZmlsZS4KQEAgLTEwMyw5ICsx
MDcsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgVGV4dEl0ZXJhdG9yQ29weWFibGVUZXh0JiBjb3B5
YWJsZVRleHQoKSBjb25zdCB7IEFTU0VSVCghYXRFbmQoKSk7IHJldHVybiBtX2NvcHlhYmxlVGV4
dDsgfQogICAgIHZvaWQgYXBwZW5kVGV4dFRvU3RyaW5nQnVpbGRlcihTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyKSBjb25zdCB7IGNvcHlhYmxlVGV4dCgpLmFwcGVuZFRvU3RyaW5nQnVpbGRlcihidWls
ZGVyKTsgfQogCi0gICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBTaW1wbGVSYW5nZSBhbmQgQ2hh
cmFjdGVyUmFuZ2UgYW5kIG1vdmUgb3V0IG9mIHRoaXMgY2xhc3MgdG8gdGhlIHRvcCBsZXZlbC4K
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21S
YW5nZShOb2RlKiBzY29wZSwgY29uc3QgUmFuZ2UqLCBzaXplX3QmIGxvY2F0aW9uLCBzaXplX3Qm
IGxlbmd0aCk7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KCk7CiAgICAgdm9pZCBleGl0Tm9k
ZShOb2RlKik7CkBAIC0xNzMsMTAgKzE3NCwxMCBAQCBwcml2YXRlOgogLy8gY2h1bmtzIHNvIGFz
IHRvIG9wdGltaXplIGZvciBwZXJmb3JtYW5jZSBvZiB0aGUgaXRlcmF0aW9uLgogY2xhc3MgU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBTaW1wbGVSYW5nZSYpOworICAgIFdF
QkNPUkVfRVhQT1JUIGV4cGxpY2l0IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IoY29u
c3QgU2ltcGxlUmFuZ2UmKTsKIAogICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9w
b3NpdGlvbk5vZGU7IH0KLSAgICB2b2lkIGFkdmFuY2UoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFkdmFuY2UoKTsKIAogICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgQVNTRVJUKCFh
dEVuZCgpKTsgcmV0dXJuIG1fdGV4dDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdl
IHJhbmdlKCkgY29uc3Q7CkBAIC0yODgsOSArMjg5LDE5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2RpZExvb2tBaGVhZCB7IHRydWUgfTsKIH07CiAKK2lubGluZSBDaGFyYWN0ZXJSYW5nZSBjaGFy
YWN0ZXJSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiBzdGFydCwgY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICByZXR1cm4geyBj
aGFyYWN0ZXJDb3VudCh7IHN0YXJ0LCByYW5nZS5zdGFydCB9LCBiZWhhdmlvciksIGNoYXJhY3Rl
ckNvdW50KHJhbmdlLCBiZWhhdmlvcikgfTsKK30KIAotV0VCQ09SRV9FWFBPUlQgdWludDY0X3Qg
Y2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7Ci1XRUJDT1JFX0VYUE9SVCBCb3VuZGFyeVBv
aW50IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihjb25zdCBTaW1wbGVSYW5nZSYsIHVpbnQ2NF90
LCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7Ci1X
RUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmLCBDaGFyYWN0ZXJSYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRl
cmF0b3JEZWZhdWx0QmVoYXZpb3IpOworaW5saW5lIENoYXJhY3RlclJhbmdlIGNoYXJhY3RlclJh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBU
ZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFu
Z2Uoc2NvcGUuc3RhcnQsIHJhbmdlLCBiZWhhdmlvcik7Cit9CisKK2lubGluZSBCb3VuZGFyeVBv
aW50IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIHVp
bnQ2NF90IGxvY2F0aW9uLCBUZXh0SXRlcmF0b3JCZWhhdmlvciBiZWhhdmlvcikKK3sKKyAgICBy
ZXR1cm4gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNjb3BlLCB7IGxvY2F0aW9uLCAwIH0sIGJlaGF2
aW9yKS5zdGFydDsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggYzRkODBmYjU1MDhmMWUyNmM2ODkxODUzODJh
ZWZjMGNmZGI5YTIyNi4uNWE2YzUzYzAzODM3MGNmYjBhMzhhYjBkYTRmNTYxOGZiYWJiMjVhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC00NjUsNyArNDY1
LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5
cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gbWFrZVJhbmdlKHAxLCBwMik7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaXBwZWRQcmV2aW91
c1dvcmQ7CiAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0Nv
bW1hbmQ6Okluc2VydFRleHQgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0
TGluZUJyZWFrIHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFw
aFNlcGFyYXRvciB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpKQotICAgICAgICAgICAgICAgIHN0cmlwcGVkUHJl
dmlvdXNXb3JkID0gcGxhaW5UZXh0KHJhbmdlLmdldCgpKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAg
ICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWluVGV4dCgqcmFuZ2UpLnN0
cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkubWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Xb3JkKHAxLCBlbmRpbmdTZWxlY3Rpb24oKSwgIXN0cmlwcGVkUHJl
dmlvdXNXb3JkLmlzRW1wdHkoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZFR5cGUgPT0g
VHlwaW5nQ29tbWFuZDo6SW5zZXJ0VGV4dCkKICAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLnN0
YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuY3BwCmluZGV4IGQ2ZjcxNzg5ZTRlMWY5OWY4Yzc0NTUzMGYyMTU3N2Y0ODk4Njg1OTIu
LjMyNTNiNmZiMGJhYjBlYTA0NzRkY2IzZWM3MWM5NDIwYjVhOTcwNDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTE5MzQsNyArMTkzNCw3IEBAIHZvaWQgY2hh
cmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFVD
aGFyMzImIG9uZUFmdGVyCiAgICAgfQogCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gZW5kUG9z
aXRpb24pIHsKLSAgICAgICAgU3RyaW5nIGNoYXJhY3RlclN0cmluZyA9IHBsYWluVGV4dChSYW5n
ZTo6Y3JlYXRlKHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5kb2N1bWVu
dCgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikucHRyKCkpLnJlcGxhY2Uobm9CcmVha1Nw
YWNlLCAnICcpOworICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3RyaW5nID0gcGxhaW5UZXh0KHsg
Km1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
UG9zaXRpb24pIH0pLnJlcGxhY2Uobm9CcmVha1NwYWNlLCAnICcpOwogICAgICAgICBmb3IgKGlu
dCBpID0gY2hhcmFjdGVyU3RyaW5nLmxlbmd0aCgpIC0gMSwgaW5kZXggPSAwOyBpID49IDAgJiYg
aW5kZXggPCBtYXhDaGFyYWN0ZXJzOyAtLWkpIHsKICAgICAgICAgICAgIGlmICghaW5kZXggJiYg
bmV4dFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGluZGV4Kys7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggOTllNjE1OWNj
YTY3Njk1OWE5ODBhNDEyOTU2YjhjNWQzZjMzNjYyNi4uNTU3YmZlY2FlYTAyMzI4NWFlYTA5MGQ0
ZjA1NzFkN2RhOGQzM2FiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0
YURldGVjdGlvbi5tbQpAQCAtNzAsMTAgKzcwLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29u
dGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFu
Z2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKIHsKLSAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmlu
ZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwogICAgIGF1dG8gc3RhcnQgPSBjb250
ZXh0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgcG9z
aXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBuaWw7CisgICAgU3RyaW5nIGZ1bGxQbGFp
blRleHRTdHJpbmcgPSBwbGFpblRleHQoKmNvbnRleHRSYW5nZSk7CiAgICAgQ0ZJbmRleCBoaXRM
b2NhdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKIAogICAgIGF1dG8gc2Nhbm5lciA9IGFkb3B0
Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3Vw
Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmlu
ZGV4IDQ3YWQ0N2E3M2RkYzNlNzI1MWZiMWYzMDU1YmIxMjBjYzllMWYwOTQuLmEyM2RjNDA3YTll
YzA2NTVmYjY3ZjdhYzRlMDU3OTdhODE3ZjlmMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTI4Niw3ICsyODYsNyBAQCBzdGQ6
OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpy
YW5nZUZvclNlbGVjdGlvbihjbwogICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5n
ZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7CiAKICAg
ICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhT
dGFydCwgcGFyYWdyYXBoRW5kKTsKLSAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChm
dWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOworICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5U
ZXh0KCpmdWxsQ2hhcmFjdGVyUmFuZ2UpOwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBh
ZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2Vs
ZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pLmdldCgpLmhpZ2hsaWdodFJhbmdlOwogCiAgICAgcmV0
dXJuIHsgY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqZnVsbENoYXJhY3Rl
clJhbmdlLCBoaWdobGlnaHRSYW5nZSkpLCBuaWwgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9IVE1MQ29udmVydGVyLmgKaW5kZXggYWFiNDljNDc2YTU5NjQ0MTVlOTliMzFlMjRl
ZmI3Yjc0M2Y3NmQ1Zi4uMDk3MDc4ZGQ1NWJlYWQwNWFhN2NhMzcxNjAwMTk5ZjYxMmVkNmFjNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmgKQEAgLTM2
LDEyICszNiwxMCBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogZW51bSBjbGFzcyBJbmNsdWRl
SW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nIHsgWWVzLCBObyB9OwogCiBOU0F0dHJpYnV0ZWRTdHJp
bmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
LCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLQotLy8gRm9y
IHRlc3RpbmcgcHVycG9zZSBvbmx5CiBXRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRFbmQoY29uc3QgUG9zaXRpb24mLCBjb25z
dCBQb3NpdGlvbiYsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIp
OwotCiBXRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdG
cm9tUmFuZ2UoUmFuZ2UmLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxs
cHRyKTsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2lmIFBMQVRGT1JNKE1BQykKIFdF
QkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdG
cm9tUmFuZ2UoUmFuZ2UmLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nID0gSW5jbHVk
ZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6WWVzKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCBj
MGUzZjU1ZTZlMzY0NGFlMTllZTVhMzk2ZjY0YmFkZTY2ZWM1MWM3Li5hZWNiY2QxMzM2ZmMxN2Ew
MGVlNjYyODdlMTNiZTEyMTQwZDI5OWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KQEAgLTg3LDE3ICs4NywxNiBAQCBz
dGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3Vw
OjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9u
LnZpc2libGVFbmQoKTsKIAogICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2Ug
dGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KLSAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgYXV0byBwYXJhZ3Jh
cGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwotICAgIGlmIChwYXJhZ3JhcGhT
dGFydC5pc051bGwoKSB8fCBwYXJhZ3JhcGhFbmQuaXNOdWxsKCkpCisgICAgYXV0byBwYXJhZ3Jh
cGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3Rh
cnQpKTsKKyAgICBhdXRvIHBhcmFncmFwaEVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mUGFy
YWdyYXBoKHNlbGVjdGlvbkVuZCkpOworICAgIGlmICghcGFyYWdyYXBoU3RhcnQgfHwgIXBhcmFn
cmFwaEVuZCkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiAKLSAgICBhdXRvIGxl
bmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2lu
dChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSk7
Ci0gICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50KHsgKm1h
a2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVj
dGlvbkVuZCkgfSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0
aFRvU2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50KTsKKyAgICBhdXRvIHNl
bGVjdGlvblJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9u
U3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9OworICAgIGF1dG8gcGFy
YWdyYXBoUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpwYXJhZ3JhcGhTdGFydCwgKnBhcmFncmFwaEVu
ZCB9OwogCiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwotICAgIHRva2VuUmFuZ2Uo
cGxhaW5UZXh0KG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKS5nZXQoKSks
IHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CisgICAgdG9rZW5SYW5nZShwbGFpblRleHQocGFyYWdy
YXBoUmFuZ2UpLCBjaGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGhSYW5nZSwgc2VsZWN0aW9uUmFuZ2Up
LCAmb3B0aW9ucyk7CiAKICAgICByZXR1cm4geyBzZWxlY3RlZFJhbmdlLCBvcHRpb25zIH07CiB9
CkBAIC0xNDIsNyArMTQxLDcgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25h
cnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQKIAogICAgIE5TUmFu
Z2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCh7ICpmdWxsQ2hhcmFj
dGVyU3RhcnQsICpwb3NpdGlvbkJvdW5kYXJ5IH0pLCAwKTsKICAgICBOU0RpY3Rpb25hcnkgKm9w
dGlvbnMgPSBuaWw7Ci0gICAgYXV0byBleHRyYWN0ZWRSYW5nZSA9IHRva2VuUmFuZ2UocGxhaW5U
ZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7Cisg
ICAgYXV0byBleHRyYWN0ZWRSYW5nZSA9IHRva2VuUmFuZ2UocGxhaW5UZXh0KCpmdWxsQ2hhcmFj
dGVyUmFuZ2UpLCByYW5nZVRvUGFzcywgJm9wdGlvbnMpOwogCiAgICAgLy8gdG9rZW5SYW5nZSBz
b21ldGltZXMgcmV0dXJucyB7TlNOb3RGb3VuZCwgMH0gaWYgaXQgd2FzIHVuYWJsZSB0byBkZXRl
cm1pbmUgYSBnb29kIHN0cmluZy4KICAgICAvLyBGSVhNRSAoMTU5MDYzKTogV2Ugc2hvdWxkbid0
IG5lZWQgdG8gY2hlY2sgZm9yIHplcm8gbGVuZ3RoIGhlcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAKaW5kZXggNDJmOWJjYTZlOTU4Y2VkYmE1NjQ2NmQ5YTM0NzdkZGU3NzY5ZGY0YS4uY2Jm
NjI4OGU5YmFlYzVlMjkzNTE1ZjUwNmFjZDU5MmEzYjI4ZWNkYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFya3VwLmNwcApAQCAtNDM1LDcgKzQzNSwxMiBAQCBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OnJlbmRlcmVkVGV4dFJlc3BlY3RpbmdSYW5nZShjb25zdCBUZXh0JiB0ZXh0KQogICAg
ICAgICAgICAgYmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JCZWhhdmVzQXNJZk5vZGVzRm9sbG93aW5n
OwogICAgIH0KIAotICAgIHJldHVybiBwbGFpblRleHQoUmFuZ2U6OmNyZWF0ZSh0ZXh0LmRvY3Vt
ZW50KCksIHN0YXJ0LCBlbmQpLnB0cigpLCBiZWhhdmlvcik7CisgICAgYXV0byBzdGFydEJvdW5k
YXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpOworICAgIGF1dG8gZW5kQm91bmRhcnkgPSBt
YWtlQm91bmRhcnlQb2ludChlbmQpOworICAgIGlmICghc3RhcnRCb3VuZGFyeSB8fCAhZW5kQm91
bmRhcnkpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgcmV0dXJuIHBsYWlu
VGV4dCh7IFdURk1vdmUoKnN0YXJ0Qm91bmRhcnkpLCBXVEZNb3ZlKCplbmRCb3VuZGFyeSkgfSwg
YmVoYXZpb3IpOwogfQogCiBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRleHRDb250
ZW50UmVzcGVjdGluZ1JhbmdlKGNvbnN0IFRleHQmIHRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCA2ODFjYTc4MDAxOTE5Nzk3YmM0OWQwZTg0
Njk3ZTk5OTlmZGViZDk5Li41YzI5N2NhNmY2YTBkNzA1ZWQ4Mjc4MGI0MmRhNzRlZDM2YWZlM2Nh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTMx
OCw3ICszMTgsOCBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50JgogICAgIC8vIElmIHRoZSB0ZXh0
IGZpZWxkIGhhcyBubyBmb2N1cywgd2UgZG9uJ3QgbmVlZCB0byB0YWtlIGFjY291bnQgb2YgdGhl
CiAgICAgLy8gc2VsZWN0aW9uIGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBpcyB0aGUgc291cmNlIG9m
IHRleHQgZHJhZy1hbmQtZHJvcCBpbgogICAgIC8vIHRoYXQgY2FzZSwgYW5kIG5vdGhpbmcgaW4g
dGhlIHRleHQgZmllbGQgd2lsbCBiZSByZW1vdmVkLgotICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxl
bmd0aCA9IGZvY3VzZWQoKSA/IGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNzaW9uKHBsYWluVGV4dChk
b2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCkpKSA6IDA7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGZvY3VzZWQoKSA/
IGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSA6IG51bGxwdHI7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gc2VsZWN0
aW9uUmFuZ2UgPyBjb21wdXRlTGVuZ3RoRm9yU3VibWlzc2lvbihwbGFpblRleHQoKnNlbGVjdGlv
blJhbmdlKSkgOiAwOwogICAgIEFTU0VSVChjdXJyZW50TGVuZ3RoID49IHNlbGVjdGlvbkxlbmd0
aCk7CiAgICAgdW5zaWduZWQgYmFzZUxlbmd0aCA9IGN1cnJlbnRMZW5ndGggLSBzZWxlY3Rpb25M
ZW5ndGg7CiAgICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9IHVuc2lnbmVkTWF4TGVuZ3Ro
ID4gYmFzZUxlbmd0aCA/IHVuc2lnbmVkTWF4TGVuZ3RoIC0gYmFzZUxlbmd0aCA6IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5kZXggNzJiMTMw
NjdkMWJjMzZiM2RiYzg5MTRhZGYwMTg4YzQxMzcxYzc2MS4uMmMzMmIyZjViNmQ0YWVkYTJlOGVj
ZTU0MzQ0NjUwMGFkYjEyOGY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1l
bnVDb250cm9sbGVyLmNwcApAQCAtNDMxLDcgKzQzMSw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250
cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24s
IGNvCiAgICAgICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudCgpKQogICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoKmVsZW1l
bnQpOwogICAgICAgICB9Ci0gICAgICAgIG1fY2xpZW50LnNwZWFrKHBsYWluVGV4dChzZWxlY3Rl
ZFJhbmdlLmdldCgpKSk7CisgICAgICAgIG1fY2xpZW50LnNwZWFrKHBsYWluVGV4dCgqc2VsZWN0
ZWRSYW5nZSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdTdG9wU3BlYWtpbmc6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNl
bGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXgg
NDc1ZTY0YmFkZjUwMDQ5NTJhMmY2M2ZkNjY3MWQ1MTMyYTM0NDFkYi4uZGQ3ZjhlOGVhZTc2MmU2
Yjc5MGU0MTFjMjgzMjU2MzRhYTFmZWM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9u
LmNwcApAQCAtNDQ4LDcgKzQ0OCw4IEBAIFN0cmluZyBET01TZWxlY3Rpb246OnRvU3RyaW5nKCkK
ICAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBwbGFpblRleHQoZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIGF1dG8gcmFu
Z2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHQoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CiB9
CiAKIE5vZGUqIERPTVNlbGVjdGlvbjo6c2hhZG93QWRqdXN0ZWROb2RlKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDlmMGE0MDZkZTQxNDkxODNm
ODUxMTYxMjRiM2VkNWMxOWIxZWYyZWIuLjI2MWNkY2JkN2FmM2IxMzBkOTU5NTE5NmU0MTc0ZmU5
M2QwNjM3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtODgyLDIyICs4ODIsMTAgQEAgdWludDMy
X3QgUGFnZTo6cmVwbGFjZVJhbmdlc1dpdGhUZXh0KGNvbnN0IFZlY3RvcjxSZWY8UmFuZ2U+PiYg
cmFuZ2VzVG9SZXBsYWNlLAogCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJhbmdlc1RvUmVwbGFj
ZSkgewogICAgICAgICBhdXRvIGhpZ2hlc3RSb290ID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFi
bGVSb290KHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAgICAgaWYgKCFoaWdoZXN0Um9v
dCB8fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0RWRpdGFibGVSb290KHJhbmdlLT5lbmRQb3NpdGlv
bigpKSkKKyAgICAgICAgaWYgKCFoaWdoZXN0Um9vdCB8fCBoaWdoZXN0Um9vdCAhPSBoaWdoZXN0
RWRpdGFibGVSb290KHJhbmdlLT5lbmRQb3NpdGlvbigpKSB8fCAhaGlnaGVzdFJvb3QtPmRvY3Vt
ZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gZnJh
bWUgPSBtYWtlUmVmUHRyKGhpZ2hlc3RSb290LT5kb2N1bWVudCgpLmZyYW1lKCkpOwotICAgICAg
ICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc2l6ZV90IHJl
cGxhY2VtZW50TG9jYXRpb24gPSBub3RGb3VuZDsKLSAgICAgICAgc2l6ZV90IHJlcGxhY2VtZW50
TGVuZ3RoID0gMDsKLSAgICAgICAgaWYgKCFUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVu
Z3RoRnJvbVJhbmdlKGhpZ2hlc3RSb290LmdldCgpLCByYW5nZS5wdHIoKSwgcmVwbGFjZW1lbnRM
b2NhdGlvbiwgcmVwbGFjZW1lbnRMZW5ndGgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaWYgKHJlcGxhY2VtZW50TG9jYXRpb24gPT0gbm90Rm91bmQgfHwgIXJlcGxhY2VtZW50
TGVuZ3RoKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcmVwbGFjZW1lbnRSYW5n
ZXMuYXBwZW5kKHsgV1RGTW92ZShoaWdoZXN0Um9vdCksIHsgcmVwbGFjZW1lbnRMb2NhdGlvbiwg
cmVwbGFjZW1lbnRMZW5ndGggfSB9KTsKKyAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cygqaGlnaGVzdFJvb3QpOworICAgICAgICByZXBsYWNlbWVudFJh
bmdlcy5hcHBlbmQoeyBXVEZNb3ZlKGhpZ2hlc3RSb290KSwgY2hhcmFjdGVyUmFuZ2Uoc2NvcGUs
IHJhbmdlKSB9KTsKICAgICB9CiAKICAgICByZXBsYWNlUmFuZ2VzKCp0aGlzLCByZXBsYWNlbWVu
dFJhbmdlcywgcmVwbGFjZW1lbnRUZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0K
aW5kZXggNmVlNGZiNDQ1NWRjNjkwZDRlYjk5YzQzYTJiOTM4MTJmMTQxNzJkYi4uMDYyODVhNTE4
NGU1YTRjMDBhMzFiYTYzMzQyM2RiNWRiYzk4ODA5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0KQEAgLTczMCw3ICs3MzAsNyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRp
b25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAogCiAgICAgLy8gVGhlcmUgYXJlIG5vIHBocmFzZXMg
d2l0aCBhbHRlcm5hdGl2ZXMsIHNvIHRoZXJlIGlzIGp1c3Qgb25lIGludGVycHJldGF0aW9uLgog
ICAgIGlmIChtYXJrZXJzSW5Sb290LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFtOU0FycmF5
IGFycmF5V2l0aE9iamVjdDpwbGFpblRleHQocmFuZ2VPZlJvb3RDb250ZW50cy5wdHIoKSldOwor
ICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnBsYWluVGV4dChyYW5nZU9m
Um9vdENvbnRlbnRzKV07CiAKICAgICAvLyBUaGUgbnVtYmVyIG9mIGludGVycHJldGF0aW9ucyB3
aWxsIGJlIGkxICogaTIgKiAuLi4gKiBpTiwgd2hlcmUgaVggaXMgdGhlIG51bWJlciBvZiBpbnRl
cnByZXRhdGlvbnMgZm9yIHRoZSBYdGggcGhyYXNlIHdpdGggYWx0ZXJuYXRpdmVzLgogICAgIHNp
emVfdCBpbnRlcnByZXRhdGlvbnNDb3VudCA9IDE7CkBAIC03NTIsNyArNzUyLDcgQEAgTlNBcnJh
eSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICAgICAg
ICAgIC8vIEZpcnN0LCBhZGQgdGV4dCB0aGF0IHByZWNlZGUgdGhlIG1hcmtlci4KICAgICAgICAg
ICAgIGlmIChwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiAhPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpKSkgewogICAgICAgICAgICAgICAg
IGF1dG8gcHJlY2VkaW5nVGV4dFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgcHJl
Y2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24sIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2Rl
LCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcHJlY2Vk
aW5nVGV4dCA9IHBsYWluVGV4dChwcmVjZWRpbmdUZXh0UmFuZ2UucHRyKCkpOworICAgICAgICAg
ICAgICAgIFN0cmluZyBwcmVjZWRpbmdUZXh0ID0gcGxhaW5UZXh0KHByZWNlZGluZ1RleHRSYW5n
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFwcmVjZWRpbmdUZXh0LmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGludGVycHJldGF0aW9uIDogaW50ZXJwcmV0YXRp
b25zKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKGludGVycHJldGF0aW9uLCBwcmVj
ZWRpbmdUZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA5NDVkZGZk
NTc2ZDI2ZmUzYjgyNzhjZDI2OTBlYzBmYTRlOGY1ZWY2Li45M2QzZTYzMGQ1MjUzNjFjY2MxZDA4
ZmJkODc0MTBlZDliYWZjZDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBA
IC0yMDUxLDE4ICsyMDUxLDEyIEBAIFJlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aChFbGVtZW50JiBzY29wZSwgdW5zaWduZWQgcmFuCiAKIHVuc2lnbmVk
IEludGVybmFsczo6bG9jYXRpb25Gcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJhbmdl
JiByYW5nZSkKIHsKLSAgICBzaXplX3QgbG9jYXRpb24gPSAwOwotICAgIHNpemVfdCB1bnVzZWRM
ZW5ndGggPSAwOwotICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFu
Z2UoJnNjb3BlLCAmcmFuZ2UsIGxvY2F0aW9uLCB1bnVzZWRMZW5ndGgpOwotICAgIHJldHVybiBs
b2NhdGlvbjsKKyAgICByZXR1cm4gY2xhbXBUbzx1bnNpZ25lZD4oY2hhcmFjdGVyUmFuZ2UobWFr
ZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGUpLCByYW5nZSkubG9jYXRpb24p
OwogfQogCiB1bnNpZ25lZCBJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZShFbGVtZW50JiBzY29w
ZSwgY29uc3QgUmFuZ2UmIHJhbmdlKQogewotICAgIHNpemVfdCB1bnVzZWRMb2NhdGlvbiA9IDA7
Ci0gICAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0gICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFu
ZExlbmd0aEZyb21SYW5nZSgmc2NvcGUsICZyYW5nZSwgdW51c2VkTG9jYXRpb24sIGxlbmd0aCk7
Ci0gICAgcmV0dXJuIGxlbmd0aDsKKyAgICByZXR1cm4gY2xhbXBUbzx1bnNpZ25lZD4oY2hhcmFj
dGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGUpLCByYW5n
ZSkubGVuZ3RoKTsKIH0KIAogU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1RleHQoY29uc3QgUmFu
Z2UmIHJhbmdlKQpAQCAtMjA3Miw3ICsyMDY2LDEwIEBAIFN0cmluZyBJbnRlcm5hbHM6OnJhbmdl
QXNUZXh0KGNvbnN0IFJhbmdlJiByYW5nZSkKIAogU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1Rl
eHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
cmV0dXJuIHBsYWluVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yRm9yVGVzdGluZyhyYW5n
ZSk7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IocmFuZ2UpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRF
bmQoKTsgYmFja3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQorICAgICAgICByZXN1bHQuaW5zZXJ0
KGJhY2t3YXJkc0l0ZXJhdG9yLnRleHQoKS50b1N0cmluZygpLCAwKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBSZWY8UmFuZ2U+IEludGVybmFsczo6c3VicmFuZ2UoUmFuZ2UmIHJhbmdlLCB1
bnNpZ25lZCByYW5nZUxvY2F0aW9uLCB1bnNpZ25lZCByYW5nZUxlbmd0aCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9FZGl0aW5nUmFuZ2UuY3BwCmluZGV4IDc2ZWY0NzIyZDc1MWNmNmU1OWFhYjllZGZhYjY2
NTZlNzA0ZjE2ZWEuLjg2YWM1NTNlNmZjYzA4MjJhZDQxOGM2YTBkM2Y4Y2Y5YzRhOTliOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcApAQCAtNjUsMTYgKzY1LDE1IEBAIEVk
aXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUs
IGNvbnN0IFdlYkNvcmU6OlJhbmdlCiB7CiAgICAgQVNTRVJUKGVkaXRpbmdSYW5nZUlzUmVsYXRp
dmVUbyA9PSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9vdCk7CiAKLSAgICBz
aXplX3QgbG9jYXRpb24gPSAwOwotICAgIHNpemVfdCBsZW5ndGggPSAwOwotICAgIGlmICghcmFu
Z2UgfHwgIVdlYkNvcmU6OlRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFu
Z2UoZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50
KCksIHJhbmdlLCBsb2NhdGlvbiwgbGVuZ3RoKSkKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgRWRpdGluZ1JhbmdlIGVkaXRpbmdSYW5nZShsb2NhdGlvbiwgbGVu
Z3RoKTsKLSAgICBpZiAoIWVkaXRpbmdSYW5nZS5pc1ZhbGlkKCkpCisgICAgYXV0byogZWxlbWVu
dCA9IGZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVu
dCgpOworICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVy
biBlZGl0aW5nUmFuZ2U7CisgICAgYXV0byByZWxhdGl2ZVJhbmdlID0gY2hhcmFjdGVyUmFuZ2Uo
bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCAqcmFuZ2UpOwor
ICAgIHJldHVybiBFZGl0aW5nUmFuZ2UocmVsYXRpdmVSYW5nZS5sb2NhdGlvbiwgcmVsYXRpdmVS
YW5nZS5sZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLmggYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvQXR0cmlidXRlZFN0cmluZy5oCmluZGV4IDg1MzBmODE4YmFjMWY1OWI5ZmVj
YjZhMjY3NTMwMTIyMmEyYTNmNDEuLjAyZDZiMDEwMjYxYWQzMDhhOGFlNjdhMjNkYTI4ZWZmNjNh
YjczNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdHRyaWJ1dGVkU3Ry
aW5nLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcuaApA
QCAtMzMsOSArMzMsMTAgQEAgT0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogc3RydWN0IEF0dHJpYnV0ZWRTdHJpbmcgewotICAgIEF0dHJpYnV0ZWRT
dHJpbmcoKQotICAgIHsKLSAgICB9CisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4g
c3RyaW5nOworICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGRvY3VtZW50QXR0cmlidXRlczsK
KworICAgIEF0dHJpYnV0ZWRTdHJpbmcoKSA9IGRlZmF1bHQ7CiAKICNpZiBkZWZpbmVkKF9fT0JK
Q19fKQogICAgIEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
U3RyaW5nLCBOU0RpY3Rpb25hcnkgKmRvY3VtZW50QXR0cmlidXRlcyA9IG5pbCkKQEAgLTQ0LDIy
ICs0NSwyNiBAQCBzdHJ1Y3QgQXR0cmlidXRlZFN0cmluZyB7CiAgICAgewogICAgIH0KIAorICAg
IEF0dHJpYnV0ZWRTdHJpbmcoUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4mJiBhdHRyaWJ1
dGVkU3RyaW5nLCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiYmIGRvY3VtZW50QXR0cmlidXRlcyA9
IHsgfSkKKyAgICAgICAgOiBzdHJpbmcoV1RGTW92ZShhdHRyaWJ1dGVkU3RyaW5nKSkKKyAgICAg
ICAgLCBkb2N1bWVudEF0dHJpYnV0ZXMoV1RGTW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpKQorICAg
IHsKKyAgICB9CisKICAgICBvcGVyYXRvciBOU0F0dHJpYnV0ZWRTdHJpbmcgKigpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gc3RyaW5nLmdldCgpOwogICAgIH0KICNlbmRpZgotCi0gICAg
UmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc3RyaW5nOwotICAgIFJldGFpblB0cjxOU0Rp
Y3Rpb25hcnk+IGRvY3VtZW50QXR0cmlidXRlczsKIH07CiAKIH0KIAogbmFtZXNwYWNlIElQQyB7
CisKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0OjpBdHRyaWJ1dGVkU3Ry
aW5nPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJLaXQ6OkF0
dHJpYnV0ZWRTdHJpbmcmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8V2ViS2l0OjpBdHRyaWJ1dGVk
U3RyaW5nPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKLX0KIAorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0gYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvQXR0cmlidXRlZFN0cmluZy5tbQppbmRleCAzYzQ3MDA1NjgzOGQxMmJhYmE3ZWE1
ZWFmODE0N2E1ZjdjODg3NWU3Li4wZjJlOTJkYjY1NGU0MDhjN2EwMmYzNmJlNDU2NzhiMjM5YTcw
MzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXR0cmlidXRlZFN0cmlu
Zy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXR0cmlidXRlZFN0cmluZy5tbQpA
QCAtNDUsNyArNDUsNyBAQCBPcHRpb25hbDxXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmc+IEFyZ3Vt
ZW50Q29kZXI8V2ViS2l0OjpBdHRyaWJ1dGVkU3RyaW5nPjo6ZGVjbwogICAgIFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+IGRvY3VtZW50QXR0cmlidXRlczsKICAgICBpZiAoIUlQQzo6ZGVjb2RlKGRl
Y29kZXIsIGRvY3VtZW50QXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgcmV0dXJuIFdlYktpdDo6QXR0cmlidXRlZFN0cmluZyB7IGF0dHJpYnV0ZWRTdHJpbmcu
Z2V0KCksIGRvY3VtZW50QXR0cmlidXRlcy5nZXQoKSB9OworICAgIHJldHVybiB7IHsgV1RGTW92
ZShhdHRyaWJ1dGVkU3RyaW5nKSwgV1RGTW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpIH0gfTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2Vy
TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCmlu
ZGV4IDBkMTllNGJlNTE4ZjliZDhhMmQ5NGE5NTMyMzAwOTdhNWM2ZWNmMzguLmQ3ODZmMTFkMzkz
YzdlNGI3ODhiY2VjMzY3ZWFlMDk2ZjdmNzUyZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KQEAgLTQzNiwxOCArNDM2LDEzIEBAIHZvaWQgVGV4
dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3BlbGxEb2N1bWVu
dFRhZywgY29uc3QgU3RyCiB2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcoU3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhy
YXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQogewogICAgIGF1dG8gY29y
cmVjdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICBm
b3IgKGF1dG8mIGd1ZXNzIDogZ3JhbW1hckRldGFpbC5ndWVzc2VzKSB7Ci0gICAgICAgIE5TU3Ry
aW5nICpndWVzc05TU3RyaW5nID0gZ3Vlc3M7Ci0gICAgICAgIFtjb3JyZWN0aW9ucyBhZGRPYmpl
Y3Q6Z3Vlc3NOU1N0cmluZ107Ci0gICAgfQotCi0gICAgTlNTdHJpbmcgKmRlc2NyaXB0aW9uTlNT
dHJpbmcgPSBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbjsKKyAgICBmb3IgKGF1dG8mIGd1
ZXNzIDogZ3JhbW1hckRldGFpbC5ndWVzc2VzKQorICAgICAgICBbY29ycmVjdGlvbnMgYWRkT2Jq
ZWN0Omd1ZXNzXTsKICAgICBOU0RpY3Rpb25hcnkgKmRldGFpbCA9IEB7CiAgICAgICAgIE5TR3Jh
bW1hclJhbmdlIDogW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6Z3JhbW1hckRldGFpbC5yYW5nZV0s
Ci0gICAgICAgIE5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiA6IGRlc2NyaXB0aW9uTlNTdHJpbmcs
CisgICAgICAgIE5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiA6IGdyYW1tYXJEZXRhaWwudXNlckRl
c2NyaXB0aW9uLAogICAgICAgICBOU0dyYW1tYXJDb3JyZWN0aW9ucyA6IGNvcnJlY3Rpb25zLmdl
dCgpLAogICAgIH07Ci0KICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0g
dXBkYXRlU3BlbGxpbmdQYW5lbFdpdGhHcmFtbWFyU3RyaW5nOmJhZEdyYW1tYXJQaHJhc2UgZGV0
YWlsOmRldGFpbF07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5LmgK
aW5kZXggMDc0MTNjZmM5Mzk4NWZlNWQ5OWU5NDA2OGYxNjE1ZjRiMjQ0YzYxNC4uZjQ4ZjBiNjcx
YWQ4ZmJmMTQ5MjU4YjY4YWM3Nzc5YjBkNTc1NDcxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5n
Q29udHJvbGxlclByb3h5LmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIFRleHRDaGVj
a2luZ0NvbnRyb2xsZXJQcm94eShXZWJQYWdlJik7CiAgICAgflRleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eSgpOwogCi0gICAgQXR0cmlidXRlZFN0cmluZyBhbm5vdGF0ZWRTdWJzdHJpbmdCZXR3
ZWVuUG9zaXRpb25zKGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbiYpOworICAgIHN0YXRpYyBBdHRyaWJ1dGVkU3RyaW5nIGFubm90
YXRlZFN1YnN0cmluZ0JldHdlZW5Qb3NpdGlvbnMoY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0
aW9uJiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJik7CiAKIHByaXZhdGU6CiAgICAg
Ly8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKQEAgLTY1LDggKzY1LDggQEAgcHJpdmF0ZToKICAgICBP
cHRpb25hbDxSYW5nZUFuZE9mZnNldD4gcmFuZ2VBbmRPZmZzZXRSZWxhdGl2ZVRvU2VsZWN0aW9u
KGludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgpOwogCiAgICAgLy8gTWVzc2FnZSBoYW5k
bGVycy4KLSAgICB2b2lkIHJlcGxhY2VSZWxhdGl2ZVRvU2VsZWN0aW9uKEF0dHJpYnV0ZWRTdHJp
bmcsIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IHJl
bGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNlbWVudExl
bmd0aCk7Ci0gICAgdm9pZCByZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlvbihTdHJp
bmcgYW5ub3RhdGlvbk5hbWUsIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5n
dGgpOworICAgIHZvaWQgcmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgQXR0cmlidXRl
ZFN0cmluZyYsIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2
NF90IHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNl
bWVudExlbmd0aCk7CisgICAgdm9pZCByZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlv
bihjb25zdCBTdHJpbmcmIGFubm90YXRpb25OYW1lLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwg
dWludDY0X3QgbGVuZ3RoKTsKIAogICAgIFdlYlBhZ2UmIG1fcGFnZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250
cm9sbGVyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9U
ZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KaW5kZXggNjU5ZDVhZmYzMWQzOTEzZWY0ODE0
YjJhNjIxMGExZWI3ODZjNWQyYi4uZWQ0N2YzNzBmYmNlMjk2MDUxOTRmZmVlYjAyZTRlNWQyNWQ5
MjQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQpAQCAtNzIs
MjggKzcyLDI4IEBAIHN0YXRpYyBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
IHJlbGV2YW50TWFya2VyVHlwZXMoKQogCiBPcHRpb25hbDxUZXh0Q2hlY2tpbmdDb250cm9sbGVy
UHJveHk6OlJhbmdlQW5kT2Zmc2V0PiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJhbmdl
QW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihpbnQ2NF90IG9mZnNldCwgdWludDY0X3QgbGVu
Z3RoKQogewotICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBhdXRvJiBmcmFtZVNlbGVjdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpOworICAgIGF1dG8mIGZyYW1lU2VsZWN0aW9uID0gbV9wYWdlLmNv
cmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlv
bigpOwogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpOwot
ICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBhdXRvIHJvb3QgPSBmcmFtZVNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50T3JE
b2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3QpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
Ci0gICAgcmFuZ2UtPmNvbGxhcHNlKHRydWUpOworICAgIGF1dG8gc2VsZWN0aW9uTGl2ZVJhbmdl
ID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3Rpb25MaXZl
UmFuZ2UpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBzZWxlY3Rpb25S
YW5nZSA9IFNpbXBsZVJhbmdlIHsgKnNlbGVjdGlvbkxpdmVSYW5nZSB9OwogCi0gICAgc2l6ZV90
IHNlbGVjdGlvbkxvY2F0aW9uOwotICAgIHNpemVfdCBzZWxlY3Rpb25MZW5ndGg7Ci0gICAgVGV4
dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyb290LCByYW5nZS5nZXQo
KSwgc2VsZWN0aW9uTG9jYXRpb24sIHNlbGVjdGlvbkxlbmd0aCk7Ci0gICAgc2VsZWN0aW9uTG9j
YXRpb24gKz0gb2Zmc2V0OworICAgIGF1dG8gc2NvcGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoKnJvb3QpOworICAgIGludDY0X3QgYWRqdXN0ZWRTdGFydExvY2F0aW9uID0gY2hh
cmFjdGVyQ291bnQoeyBzY29wZS5zdGFydCwgc2VsZWN0aW9uUmFuZ2Uuc3RhcnQgfSkgKyBvZmZz
ZXQ7CisgICAgaWYgKGFkanVzdGVkU3RhcnRMb2NhdGlvbiA8IDApCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgYXV0byBhZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJhbmdlID0g
Q2hhcmFjdGVyUmFuZ2UgeyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYWRqdXN0ZWRTdGFydExvY2F0
aW9uKSwgbGVuZ3RoIH07CiAKLSAgICByZXR1cm4geyB7IGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZl
Q2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSwgeyBz
ZWxlY3Rpb25Mb2NhdGlvbiwgbGVuZ3RoIH0pKSwgc2VsZWN0aW9uTG9jYXRpb24gfSB9OworICAg
IHJldHVybiB7IHsgY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShzY29wZSwg
YWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSkpLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJh
Y3RlclJhbmdlLmxvY2F0aW9uIH0gfTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tpbmdDb250cm9sbGVy
UHJveHk6OnJlcGxhY2VSZWxhdGl2ZVRvU2VsZWN0aW9uKEF0dHJpYnV0ZWRTdHJpbmcgYW5ub3Rh
dGVkU3RyaW5nLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVuZ3RoLCB1aW50
NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHVpbnQ2NF90IHJlbGF0aXZlUmVwbGFj
ZW1lbnRMZW5ndGgpCit2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVwbGFjZVJl
bGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgQXR0cmlidXRlZFN0cmluZyYgYW5ub3RhdGVkU3RyaW5n
LCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVuZ3RoLCB1aW50NjRfdCByZWxh
dGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHVpbnQ2NF90IHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5n
dGgpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNl
bGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihBdHRy
aWJ1dGVkU3RyaW5nIGFuCiAgICAgfV07CiB9CiAKLXZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxl
clByb3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlvbihTdHJpbmcgYW5ub3Rh
dGlvbiwgaW50NjRfdCBzZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCkKK3ZvaWQgVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVj
dGlvbihjb25zdCBTdHJpbmcmIGFubm90YXRpb24sIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1
aW50NjRfdCBsZW5ndGgpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLmNvcmVQYWdlKCkt
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGF1dG8gcmFuZ2VB
bmRPZmZzZXQgPSByYW5nZUFuZE9mZnNldFJlbGF0aXZlVG9TZWxlY3Rpb24oc2VsZWN0aW9uT2Zm
c2V0LCBsZW5ndGgpOwpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJv
bGxlclByb3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlvbihTdHJpbmcgYW5u
CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCByZW1vdmVDb3Jl
U3BlbGxpbmdNYXJrZXJzID0gKGFubm90YXRpb24gPT0gU3RyaW5nKEAiTlNTcGVsbGluZ1N0YXRl
IikpOworICAgIGJvb2wgcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA9IGFubm90YXRpb24gPT0g
Ik5TU3BlbGxpbmdTdGF0ZSI7CiAgICAgZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmZpbHRl
ck1hcmtlcnMoKnJhbmdlLCBbJl0gKERvY3VtZW50TWFya2VyKiBtYXJrZXIpIHsKICAgICAgICAg
aWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRD
aGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE3NSw1MSArMTc1LDMwIEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojpy
ZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlvbihTdHJpbmcgYW5uCiAKIEF0dHJpYnV0
ZWRTdHJpbmcgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdC
ZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYgZW5kKQogewotICAgIFJldGFpblB0cjxOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwotICAgIE5TVUludGVnZXIgc3RyaW5nTGVuZ3RoID0g
MDsKLQotICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBzdGFydC5kZWVwRXF1aXZhbGVu
dCgpLmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LQotICAgIGF1dG8gZW50aXJlUmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7Ci0gICAgaWYg
KCFlbnRpcmVSYW5nZSkKKyAgICBhdXRvIHN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2lu
dChzdGFydCk7CisgICAgYXV0byBlbmRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZCk7
CisgICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8ICFlbmRCb3VuZGFyeSkKICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBhdXRvIGVudGlyZVJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqc3RhcnRCb3VuZGFy
eSwgKmVuZEJvdW5kYXJ5IH07CiAKLSAgICBSZWZQdHI8Tm9kZT4gY29tbW9uQW5jZXN0b3IgPSBl
bnRpcmVSYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKLSAgICBzaXplX3QgZW50aXJl
UmFuZ2VMb2NhdGlvbjsKLSAgICBzaXplX3QgZW50aXJlUmFuZ2VMZW5ndGg7Ci0gICAgVGV4dEl0
ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShjb21tb25BbmNlc3Rvci5nZXQo
KSwgZW50aXJlUmFuZ2UuZ2V0KCksIGVudGlyZVJhbmdlTG9jYXRpb24sIGVudGlyZVJhbmdlTGVu
Z3RoKTsKKyAgICBhdXRvIHN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0XSk7CiAKLSAgICBmb3IgKFRleHRJdGVyYXRvciBpdCh7ICptYWtlQm91
bmRhcnlQb2ludChzdGFydC5kZWVwRXF1aXZhbGVudCgpKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVu
ZC5kZWVwRXF1aXZhbGVudCgpKSB9KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAg
ICAgICBpbnQgY3VycmVudFRleHRMZW5ndGggPSBpdC50ZXh0KCkubGVuZ3RoKCk7Ci0gICAgICAg
IGlmICghY3VycmVudFRleHRMZW5ndGgpCisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZW50aXJl
UmFuZ2UpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CisgICAgICAgIGlmICghaXQudGV4
dCgpLmxlbmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgW3N0cmluZyBh
cHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdp
dGhTdHJpbmc6aXQudGV4dCgpLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKV0g
YXV0b3JlbGVhc2VdXTsKLQotICAgICAgICBTaW1wbGVSYW5nZSBjdXJyZW50VGV4dFJhbmdlID0g
aXQucmFuZ2UoKTsKLSAgICAgICAgYXV0byBtYXJrZXJzID0gZG9jdW1lbnQtPm1hcmtlcnMoKS5t
YXJrZXJzSW5SYW5nZShjcmVhdGVMaXZlUmFuZ2UoY3VycmVudFRleHRSYW5nZSksIERvY3VtZW50
TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZyk7CisgICAgICAgIFtzdHJpbmcgYXBwZW5kQXR0
cmlidXRlZFN0cmluZzphZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0
aFN0cmluZzppdC50ZXh0KCkuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpXSku
Z2V0KCldOworICAgICAgICBhdXRvIHJhbmdlID0gaXQucmFuZ2UoKTsKKyAgICAgICAgYXV0byBt
YXJrZXJzID0gcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2Uo
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNr
aW5nKTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CiAgICAg
ICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OlBsYXRm
b3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICBhdXRvJiB0ZXh0Q2hlY2tpbmdEYXRhID0gV1RGOjpnZXQ8
RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkp
OwotICAgICAgICAgICAgYXV0byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjdXJy
ZW50VGV4dFJhbmdlLCB7IG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbWFya2VyLT5lbmRPZmZzZXQo
KSAtIG1hcmtlci0+c3RhcnRPZmZzZXQoKSB9KTsKLQotICAgICAgICAgICAgc2l6ZV90IHN1YnJh
bmdlTG9jYXRpb247Ci0gICAgICAgICAgICBzaXplX3Qgc3VicmFuZ2VMZW5ndGg7Ci0gICAgICAg
ICAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGNvbW1vbkFu
Y2VzdG9yLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2Uoc3VicmFuZ2UpLnB0cigpLCBzdWJyYW5nZUxv
Y2F0aW9uLCBzdWJyYW5nZUxlbmd0aCk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChzdWJyYW5nZUxv
Y2F0aW9uID4gZW50aXJlUmFuZ2VMb2NhdGlvbik7Ci0gICAgICAgICAgICBBU1NFUlQoc3VicmFu
Z2VMb2NhdGlvbiArIHN1YnJhbmdlTGVuZ3RoIDwgZW50aXJlUmFuZ2VMZW5ndGgpOwotICAgICAg
ICAgICAgW3N0cmluZyBhZGRBdHRyaWJ1dGU6dGV4dENoZWNraW5nRGF0YS5rZXkgdmFsdWU6dGV4
dENoZWNraW5nRGF0YS52YWx1ZSByYW5nZTpOU01ha2VSYW5nZShzdWJyYW5nZUxvY2F0aW9uIC0g
ZW50aXJlUmFuZ2VMb2NhdGlvbiwgc3VicmFuZ2VMZW5ndGgpXTsKKyAgICAgICAgICAgIGF1dG8m
IGRhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRh
PihtYXJrZXItPmRhdGEoKSk7CisgICAgICAgICAgICBhdXRvIHN1YnJhbmdlID0gcmVzb2x2ZUNo
YXJhY3RlclJhbmdlKHJhbmdlLCB7IG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbWFya2VyLT5lbmRP
ZmZzZXQoKSAtIG1hcmtlci0+c3RhcnRPZmZzZXQoKSB9KTsKKyAgICAgICAgICAgIFtzdHJpbmcg
YWRkQXR0cmlidXRlOmRhdGEua2V5IHZhbHVlOmRhdGEudmFsdWUgcmFuZ2U6Y2hhcmFjdGVyUmFu
Z2UoZW50aXJlUmFuZ2UsIHN1YnJhbmdlKV07CiAgICAgICAgIH0KLQotICAgICAgICBzdHJpbmdM
ZW5ndGggKz0gY3VycmVudFRleHRMZW5ndGg7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0cmluZy5h
dXRvcmVsZWFzZSgpOworICAgIHJldHVybiBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiB7
IFdURk1vdmUoc3RyaW5nKSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bQppbmRleCAwYzE3MjBmYzljMjllNGY3MTgxMDYyNjJmNDI5YWVkY2U4N2FjYjcyLi4zM2VjZDdi
ZTI0NWNkYjU5ODdhYmUwMTA5NTcwZmFlZTJhYjlkNjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC0yMzks
MTIgKzIzOSw5IEBAIHZvaWQgV2ViUGFnZTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBBdHRyaWJ1CiAgICAgfQogCiAgICAgTlNEaWN0
aW9uYXJ5KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBuaWw7CisgICAgYXV0byBhdHRyaWJ1dGVkU3Ry
aW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZU9mQ29udGVudHMoKmRvY3VtZW50
RWxlbWVudCksICZkb2N1bWVudEF0dHJpYnV0ZXMpOwogCi0gICAgQXR0cmlidXRlZFN0cmluZyBy
ZXN1bHQ7Ci0gICAgcmVzdWx0LnN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFu
Z2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVzKTsKLSAg
ICByZXN1bHQuZG9jdW1lbnRBdHRyaWJ1dGVzID0gZG9jdW1lbnRBdHRyaWJ1dGVzOwotCi0gICAg
Y29tcGxldGlvbkhhbmRsZXIoeyByZXN1bHQgfSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoeyBX
VEZNb3ZlKGF0dHJpYnV0ZWRTdHJpbmcpLCBXVEZNb3ZlKGRvY3VtZW50QXR0cmlidXRlcykgfSk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6c2V0UmVtb3RlT2JqZWN0UmVnaXN0cnkoV2ViUmVtb3RlT2Jq
ZWN0UmVnaXN0cnkqIHJlZ2lzdHJ5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwCmluZGV4IDRhNTEzYjYwMTc4MTQyZmIzZDM3NDJjNjJkZjhjYTUwZjdj
MDE4NWUuLjQ2OGMzNTljMWY1NTZjY2EzMWUyNWJhNTgzNTcwYmMyM2I1OGFjNmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTM2MiwyMCAr
MzYyLDE1IEBAIFN0cmluZyBXZWJGcmFtZTo6Y29udGVudHNBc1N0cmluZygpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbV9jb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgYXV0byBkb2N1bWVudCA9IG1f
Y29yZUZyYW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAotICAgIFJlZlB0cjxFbGVtZW50PiBkb2N1bWVudEVsZW1lbnQgPSBkb2N1
bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgYXV0byBkb2N1bWVudEVsZW1lbnQgPSBkb2N1
bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBkb2N1bWVu
dC0+Y3JlYXRlUmFuZ2UoKTsKLQotICAgIGlmIChyYW5nZS0+c2VsZWN0Tm9kZSgqZG9jdW1lbnRF
bGVtZW50KS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
cmV0dXJuIHBsYWluVGV4dChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIHBsYWluVGV4dChtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50RWxlbWVudCkpOwogfQogCiBTdHJp
bmcgV2ViRnJhbWU6OnNlbGVjdGlvbkFzU3RyaW5nKCkgY29uc3QgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCmluZGV4IDRl
ODZmMDU1YThiZTMzMzMzMGUzZTIxM2UxODc0OGQ4YWIzYzIxYmEuLjE2YjUzOGNmOTliNDUxYzI1
NWE4NDEwZTZmYzliZDZiODM2NjRjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCkBAIC0xMTMsMTEgKzExMywxMSBA
QCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0
b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAogICAgICAgICAgICAgYXV0byBjbG9uZWRSYW5nZSA9IHN1
cnJvdW5kaW5nUmFuZ2UtPmNsb25lUmFuZ2UoKTsKICAgICAgICAgICAgIHN1cnJvdW5kaW5nUmFu
Z2UtPnNldEVuZChjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwogICAgICAgICAg
ICAgY2xvbmVkUmFuZ2UtPnNldFN0YXJ0KGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkp
OwotICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0ID0gcGxhaW5U
ZXh0KHN1cnJvdW5kaW5nUmFuZ2UuZ2V0KCkpICsgcGxhaW5UZXh0KGNsb25lZFJhbmdlLnB0cigp
KTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dCA9IHBsYWlu
VGV4dCgqc3Vycm91bmRpbmdSYW5nZSkgKyBwbGFpblRleHQoY2xvbmVkUmFuZ2UpOwogICAgICAg
ICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSBj
aGFyYWN0ZXJDb3VudCgqc3Vycm91bmRpbmdSYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0
RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxlY3Rpb25Qb3NpdGlvbiA9IHBvc3RMYXlvdXREYXRh
LnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0ID0gcGxhaW5UZXh0KHN1
cnJvdW5kaW5nUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91
bmRpbmdDb250ZXh0ID0gcGxhaW5UZXh0KCpzdXJyb3VuZGluZ1JhbmdlKTsKICAgICAgICAgICAg
IGlmIChzdXJyb3VuZGluZ1N0YXJ0LmlzTnVsbCgpIHx8IHNlbGVjdGlvblN0YXJ0LmlzTnVsbCgp
KQogICAgICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNv
clBvc2l0aW9uID0gMDsKICAgICAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggOTYxZTJjMTExZmY3Mjcz
ODZiYzc5OWY4NWRmNTQyMjdjNWI5ZjIwYi4uNzBlNTI4NTY0NmZmOGRmNTZhOWQyNTIxNzQ4YmZk
NWFmOGNjNGM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MDQxLDM4ICs0MDQxLDI4IEBAIHZvaWQgV2ViUGFnZTo6
cmVtb3ZlVGV4dFBsYWNlaG9sZGVyKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0JiBwbGFj
ZWhvbGRlciwKIAogdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoRGVsdGEoaW50NjRf
dCBsb2NhdGlvbkRlbHRhLCBpbnQ2NF90IGxlbmd0aERlbHRhLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmPEZyYW1lPiBmcmFtZSA9IGNv
cmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwotICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcm9vdCA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKLSAgICBh
dXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFyb290
IHx8ICFyYW5nZSkgeworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmKGNvcmVQYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpKTsKKyAgICBhdXRvIHJvb3QgPSBtYWtl
UmVmUHRyKGZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVs
ZW1lbnQoKSk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcm9vdCB8fCAhc2VsZWN0
aW9uUmFuZ2UpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHNpemVfdCBzZWxlY3Rpb25Mb2NhdGlvbjsKLSAgICBzaXplX3Qgc2Vs
ZWN0aW9uTGVuZ3RoOwotICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9t
UmFuZ2Uocm9vdCwgcmFuZ2UuZ2V0KCksIHNlbGVjdGlvbkxvY2F0aW9uLCBzZWxlY3Rpb25MZW5n
dGgpOwotCi0gICAgQ2hlY2tlZEludDY0IG5ld1NlbGVjdGlvbkxvY2F0aW9uIHsgc2VsZWN0aW9u
TG9jYXRpb24gfTsKLSAgICBDaGVja2VkSW50NjQgbmV3U2VsZWN0aW9uTGVuZ3RoIHsgc2VsZWN0
aW9uTGVuZ3RoIH07CisgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cygqcm9vdCk7CisgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSA9IGNoYXJhY3Rl
clJhbmdlKHNjb3BlLCAqc2VsZWN0aW9uUmFuZ2UpOworICAgIENoZWNrZWRJbnQ2NCBuZXdTZWxl
Y3Rpb25Mb2NhdGlvbiB7IHNlbGVjdGlvbkNoYXJhY3RlclJhbmdlLmxvY2F0aW9uIH07CisgICAg
Q2hlY2tlZEludDY0IG5ld1NlbGVjdGlvbkxlbmd0aCB7IHNlbGVjdGlvbkNoYXJhY3RlclJhbmdl
Lmxlbmd0aCB9OwogICAgIG5ld1NlbGVjdGlvbkxvY2F0aW9uICs9IGxvY2F0aW9uRGVsdGE7CiAg
ICAgbmV3U2VsZWN0aW9uTGVuZ3RoICs9IGxlbmd0aERlbHRhOwotCiAgICAgaWYgKG5ld1NlbGVj
dGlvbkxvY2F0aW9uLmhhc092ZXJmbG93ZWQoKSB8fCBuZXdTZWxlY3Rpb25MZW5ndGguaGFzT3Zl
cmZsb3dlZCgpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBhdXRvIG5ld1NlbGVjdGlvblJhbmdlID0gQ2hhcmFjdGVyUmFuZ2Uo
bmV3U2VsZWN0aW9uTG9jYXRpb24udW5zYWZlR2V0KCksIG5ld1NlbGVjdGlvbkxlbmd0aC51bnNh
ZmVHZXQoKSk7Ci0gICAgYXV0byByZXNvbHZlZFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdl
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIG5ld1NlbGVjdGlvblJhbmdl
KTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFu
Z2UocmVzb2x2ZWRSYW5nZSkucHRyKCksIERPV05TVFJFQU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKLQorICAgIGF1dG8g
dXBkYXRlZFNlbGVjdGlvblJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIG5ld1NlbGVjdGlvblJhbmdlKTsKKyAgICBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodXBkYXRlZFNl
bGVjdGlvblJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiB9CiAKQEAgLTQxNzUsMjUgKzQxNjUsMjUgQEAgdm9pZCBXZWJQYWdlOjpyZXF1
ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCBy
ZXF1ZXMKICAgICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gcmFuZ2VP
ZkludGVyZXN0U3RhcnQgPiBzZWxlY3Rpb25TdGFydCA/IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0IDog
c2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24g
PSByYW5nZU9mSW50ZXJlc3RFbmQgPCBzZWxlY3Rpb25FbmQgPyByYW5nZU9mSW50ZXJlc3RFbmQg
OiBzZWxlY3Rpb25FbmQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2l6ZV90IHJhbmdlT2ZJbnRl
cmVzdExvY2F0aW9uOwotICAgICAgICBzaXplX3QgcmFuZ2VPZkludGVyZXN0TGVuZ3RoOwotICAg
ICAgICBSZWZQdHI8Tm9kZT4gcm9vdE5vZGUgPSByYW5nZU9mSW50ZXJlc3QtPmNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKCk7CisgICAgICAgIGF1dG8gcm9vdE5vZGUgPSBtYWtlUmVmUHRyKHJhbmdl
T2ZJbnRlcmVzdC0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSk7CiAgICAgICAgIGlmICghcm9v
dE5vZGUpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgYXV0byByb290Q29udGFpbmVyTm9kZSA9IHJv
b3ROb2RlLT5pc0NvbnRhaW5lck5vZGUoKSA/IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHJvb3RO
b2RlLmdldCgpKSA6IHJvb3ROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghcm9vdENv
bnRhaW5lck5vZGUpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdENvbnRhaW5lck5vZGUpOwogCi0gICAgICAgIFJl
ZlB0cjxDb250YWluZXJOb2RlPiByb290Q29udGFpbmVyTm9kZSA9IHJvb3ROb2RlLT5pc0NvbnRh
aW5lck5vZGUoKSA/IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHJvb3ROb2RlLmdldCgpKSA6IHJv
b3ROb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25B
bmRMZW5ndGhGcm9tUmFuZ2Uocm9vdENvbnRhaW5lck5vZGUuZ2V0KCksIHJhbmdlT2ZJbnRlcmVz
dC5nZXQoKSwgcmFuZ2VPZkludGVyZXN0TG9jYXRpb24sIHJhbmdlT2ZJbnRlcmVzdExlbmd0aCk7
Ci0KLSAgICAgICAgQ2hlY2tlZDx1aW50NjRfdCwgUmVjb3JkT3ZlcmZsb3c+IG1pZHBvaW50TG9j
YXRpb24geyByYW5nZU9mSW50ZXJlc3RMb2NhdGlvbiB9OwotICAgICAgICBtaWRwb2ludExvY2F0
aW9uICs9IHJhbmdlT2ZJbnRlcmVzdExlbmd0aCAvIDI7CisgICAgICAgIGF1dG8gY2hhcmFjdGVy
UmFuZ2VPZkludGVyZXN0ID0gY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsICpyYW5nZU9mSW50ZXJlc3Qp
OworICAgICAgICBhdXRvIG1pZHBvaW50TG9jYXRpb24gPSBjaGVja2VkU3VtPHVpbnQ2NF90Pihj
aGFyYWN0ZXJSYW5nZU9mSW50ZXJlc3QubG9jYXRpb24sIGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVz
dC5sZW5ndGggLyAyKTsKICAgICAgICAgaWYgKG1pZHBvaW50TG9jYXRpb24uaGFzT3ZlcmZsb3dl
ZCgpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBtaWRwb2ludCA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKCpyb290Q29udGFpbmVyTm9kZSksIG1pZHBvaW50TG9jYXRpb24udW5z
YWZlR2V0KCkpKTsKKyAgICAgICAgYXV0byBtaWRwb2ludCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24oc2NvcGUsIG1pZHBvaW50TG9jYXRpb24u
dW5zYWZlR2V0KCkpKTsKIAogICAgICAgICBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rp
b24gPSBzdGFydE9mV29yZChtaWRwb2ludCk7CiAgICAgICAgIGlmIChzdGFydE9mUmFuZ2VPZklu
dGVyZXN0SW5TZWxlY3Rpb24gPCByYW5nZU9mSW50ZXJlc3RTdGFydCkgewpAQCAtNDIwMSw3ICs0
MTkxLDYgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1
bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgICAgIGlmIChzdGFydE9m
UmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPiByYW5nZU9mSW50ZXJlc3RFbmQpCiAgICAgICAg
ICAgICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gbWlkcG9pbnQ7CiAg
ICAgICAgIH0KLQogICAgICAgICBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gc3Rh
cnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA5NjI4MWFi
ODRmMWFhOGM3NWUzNmY0ZWJkMTc3NzM0NzQxNjVjMjlmLi5kYTExMzJjMmM5YmQ5MTQ4YzgzM2M4
NzUzN2YzZTgyNjYzOGZjZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTU0LDkgKzE1NCwxMSBAQCB2b2lkIFdlYlBh
Z2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVz
dWx0KSBjb25zdAogICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhc2VsZWN0aW9u
RW5kIHx8ICFwYXJhZ3JhcGhTdGFydCkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byBjb250
ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUuZWRpdG9yKCkuY29udGV4dFJhbmdl
Rm9yQ2FuZGlkYXRlUmVxdWVzdCgpOworCiAgICAgcG9zdExheW91dERhdGEuY2FuZGlkYXRlUmVx
dWVzdFN0YXJ0UG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNl
bGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CiAgICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0
TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSwgKnNlbGVj
dGlvbkVuZCB9KTsKLSAgICBwb3N0TGF5b3V0RGF0YS5wYXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlk
YXRlUmVxdWVzdCA9IHBsYWluVGV4dChmcmFtZS5lZGl0b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5k
aWRhdGVSZXF1ZXN0KCkuZ2V0KCkpOworICAgIHBvc3RMYXlvdXREYXRhLnBhcmFncmFwaENvbnRl
eHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCA/
IHBsYWluVGV4dCgqY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCkgOiBTdHJpbmcoKTsK
ICAgICBwb3N0TGF5b3V0RGF0YS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUuZWRp
dG9yKCkuc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOwogCiAgICAgSW50UmVjdCByZWN0Rm9y
U2VsZWN0aW9uQ2FuZGlkYXRlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA2OTJlZTA3ODA2MjQx
NjEyYjhkZjhiNWJhNzIxZTU0YzQ5YmJiODFiLi4zYzMwZDU3ZTY4Y2NhNGI2MmU2YjhmMGRhZGI0
MjgyNjA3MTA0YWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMDM5LDE0ICsxMDM5LDExIEBA
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwg
Y29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKICAgICBOU011dGFibGVBcnJh
eSAqY29ycmVjdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAoYXV0byYg
Z3Vlc3MgOiBncmFtbWFyRGV0YWlsLmd1ZXNzZXMpIHsKLSAgICAgICAgTlNTdHJpbmcgKmd1ZXNz
TlNTdHJpbmcgPSBndWVzczsKLSAgICAgICAgW2NvcnJlY3Rpb25zIGFkZE9iamVjdDpndWVzc05T
U3RyaW5nXTsKLSAgICB9Ci0gICAgTlNTdHJpbmcgKmRlc2NyaXB0aW9uTlNTdHJpbmcgPSBncmFt
bWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbjsKKyAgICBmb3IgKGF1dG8mIGd1ZXNzIDogZ3JhbW1h
ckRldGFpbC5ndWVzc2VzKQorICAgICAgICBbY29ycmVjdGlvbnMgYWRkT2JqZWN0Omd1ZXNzXTsK
ICAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBAewogICAgICAgICBOU0dyYW1tYXJSYW5n
ZSA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOmdyYW1tYXJEZXRhaWwucmFuZ2VdLAotICAgICAg
ICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24gOiBkZXNjcmlwdGlvbk5TU3RyaW5nLAorICAgICAg
ICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24gOiBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlv
biwKICAgICAgICAgTlNHcmFtbWFyQ29ycmVjdGlvbnMgOiBjb3JyZWN0aW9ucywKICAgICB9Owog
ICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVsbGluZ1Bh
bmVsV2l0aEdyYW1tYXJTdHJpbmc6YmFkR3JhbW1hclBocmFzZSBkZXRhaWw6ZGljdGlvbmFyeV07
CkBAIC0xMTIyLDkgKzExMTksMTEgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RDYW5k
aWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGUKICAgICBhdXRv
IHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgIGF1dG8gc2Vs
ZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKSwgKm1ha2VCb3VuZGFy
eVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKICAgICBhdXRvIHNlbGVjdGlvbkxlbmd0aCA9IGNo
YXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VC
b3VuZGFyeVBvaW50KHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIH0pOworICAgIGF1dG8gY29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCA9IGZyYW1lLT5lZGl0b3IoKS5jb250ZXh0UmFuZ2VG
b3JDYW5kaWRhdGVSZXF1ZXN0KCk7CisgICAgU3RyaW5nIGNvbnRleHRGb3JDYW5kaWRhdGVSZXFl
dWVzdCA9IGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgPyBwbGFpblRleHQoKmNvbnRl
eHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QpIDogU3RyaW5nKCk7CiAKICAgICBtX3JhbmdlRm9y
Q2FuZGlkYXRlcyA9IE5TTWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgs
IHNlbGVjdGlvbkxlbmd0aCk7Ci0gICAgbV9wYXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlkYXRlUmVx
dWVzdCA9IHBsYWluVGV4dChmcmFtZS0+ZWRpdG9yKCkuY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRl
UmVxdWVzdCgpLmdldCgpKTsKKyAgICBtX3BhcmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1
ZXN0ID0gY29udGV4dEZvckNhbmRpZGF0ZVJlcWV1ZXN0OwogCiAgICAgTlNUZXh0Q2hlY2tpbmdU
eXBlcyBjaGVja2luZ1R5cGVzID0gTlNUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBOU1RleHRD
aGVja2luZ1R5cGVSZXBsYWNlbWVudCB8IE5TVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CiAg
ICAgYXV0byB3ZWFrRWRpdG9yID0gbWFrZVdlYWtQdHIoKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZmU2NmQxYjU0Zjc1ZDdmZGM5ZjU2
OGQyMmNkNDllZmZkNGRjOTk1MS4uZTU1YzMwOTEwNTc1NGJiY2M4MDQ3Yjc1ODBkOTc0MGUyMWQz
M2FjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBA
IC01ODcsNyArNTg3LDkgQEAgLSAoTlNTdHJpbmcgKilfc2VsZWN0ZWRTdHJpbmcKIAogLSAoTlNT
dHJpbmcgKilfc3RyaW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICByZXR1cm4g
cGxhaW5UZXh0KGNvcmUocmFuZ2UpLCBXZWJDb3JlOjpUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3IsIHRydWUpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBAIiI7CisgICAgcmV0
dXJuIHBsYWluVGV4dCgqY29yZShyYW5nZSksIFdlYkNvcmU6OlRleHRJdGVyYXRvckRlZmF1bHRC
ZWhhdmlvciwgdHJ1ZSk7CiB9CiAKIC0gKE9wdGlvblNldDxXZWJDb3JlOjpQYWludEJlaGF2aW9y
PilfcGFpbnRCZWhhdmlvckZvckRlc3RpbmF0aW9uQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRl
eHQKQEAgLTgwNiwxMiArODA4LDE1IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdl
YkNvcmU6OlJhbmdlICopcmFuZ2UKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gTlNN
YWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBzaXplX3QgbG9jYXRpb24gPSAwOwotICAg
IHNpemVfdCBsZW5ndGggPSAwOwotICAgIGlmICghV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpnZXRM
b2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSwgcmFuZ2UsIGxvY2F0aW9u
LCBsZW5ndGgpKQorICAgIGF1dG8gZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKwor
ICAgIGF1dG8qIGVsZW1lbnQgPSBmcmFtZS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVu
dE9yRG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICByZXR1cm4gTlNNYWtlUmFuZ2UobG9j
YXRpb24sIGxlbmd0aCk7CisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgKnJhbmdlKTsKIH0KIAogLSAoUmVmUHRy
PFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCmluZGV4IDM2OGQ3Y2U5YmExYTA5YWM1N2ZhZmZl
NzE4OWJhZDI3YWRjMjNlZWUuLmQ0MmU0NTExOTVhMjEzMmFlOWQ4ODRhNTFhOGI2NGMwNjExZjM2
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTE5MjMsMTMgKzE5MjMs
MTUgQEAgSFJFU1VMVCBXZWJGcmFtZTo6c3RyaW5nKF9EZXJlZl9vcHRfb3V0XyBCU1RSKiByZXN1
bHQpCiAKICAgICAqcmVzdWx0ID0gbnVsbHB0cjsKIAotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKHRoaXMpOwotICAgIGlmICghY29yZUZyYW1lKQorICAgIGF1dG8qIGZyYW1lID0gY29yZSh0
aGlzKTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gRV9VTkVYUEVDVEVEOwogCi0g
ICAgUmVmUHRyPFJhbmdlPiBhbGxSYW5nZShyYW5nZU9mQ29udGVudHMoKmNvcmVGcmFtZS0+ZG9j
dW1lbnQoKSkpOwotICAgIFN0cmluZyBhbGxTdHJpbmcgPSBwbGFpblRleHQoYWxsUmFuZ2UuZ2V0
KCkpOwotICAgICpyZXN1bHQgPSBCU3RyaW5nKGFsbFN0cmluZykucmVsZWFzZSgpOworICAgIGF1
dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAg
ICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgICpyZXN1bHQgPSBCU3RyaW5nKHBsYWluVGV4dCht
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50KSkpLnJlbGVhc2UoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCA0
ZGEwYWZmZjM3ZGM1NmE4YzNmZTBlNTc2MmM5MTE3OGEzZmUzMDQ0Li5hZDEzOGUxZGMxZGIyMDIz
NTU1NDRlNGQ0NWNjYmIwZmY2ZDcxYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNw
cApAQCAtNzgwMSwxNCArNzgwMSwxNiBAQCBIUkVTVUxUIFdlYlZpZXc6OnNlbGVjdGVkUmFuZ2VG
b3JUZXN0aW5nKF9PdXRfIFVJTlQqIGxvY2F0aW9uLCBfT3V0XyBVSU5UKiBsZW5ndAogICAgIEZy
YW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRS
YW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBz
aXplX3QgbG9jYXRpb25TaXplOwotICAgIHNpemVfdCBsZW5ndGhTaXplOwotICAgIGlmIChyYW5n
ZSAmJiBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1lLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpLCByYW5nZS5n
ZXQoKSwgbG9jYXRpb25TaXplLCBsZW5ndGhTaXplKSkgewotICAgICAgICAqbG9jYXRpb24gPSBz
dGF0aWNfY2FzdDxVSU5UPihsb2NhdGlvblNpemUpOwotICAgICAgICAqbGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8VUlOVD4obGVuZ3RoU2l6ZSk7Ci0gICAgfQorICAgIGF1dG8qIGVsZW1lbnQgPSBmcmFt
ZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKKyAg
ICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKKyAgICBhdXRvIHJlbGF0
aXZlUmFuZ2UgPSBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250
ZW50cygqZWxlbWVudCksICpyYW5nZSk7CisgICAgKmxvY2F0aW9uID0gc3RhdGljX2Nhc3Q8VUlO
VD4ocmVsYXRpdmVSYW5nZS5sb2NhdGlvbik7CisgICAgKmxlbmd0aCA9IHN0YXRpY19jYXN0PFVJ
TlQ+KHJlbGF0aXZlUmFuZ2UubGVuZ3RoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZs
YXQtdHJlZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3Iv
ZmluZC1zdHJpbmctb24tZmxhdC10cmVlLWV4cGVjdGVkLnR4dAppbmRleCA1OThkMGQ0NGFjM2I2
NDNhN2UyMGU1ZmFmZWM0MjI3MTA4YjE0N2NkLi42YTM2ODIxNzNjODY5OTAxYTIwN2VhY2NlNmU0
MWY5MDM5MTM3NzJiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0
b3IvZmluZC1zdHJpbmctb24tZmxhdC10cmVlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZC1zdHJpbmctb24tZmxhdC10cmVlLWV4cGVjdGVk
LnR4dApAQCAtNzYsNyArNzYsNyBAQCBQQVNTIGludGVybmFscy5jb3VudEZpbmRNYXRjaGVzKCdp
bi1zaGFkb3cnLCBbXSkgaXMgMgogUEFTUyBpbnRlcm5hbHMuY291bnRGaW5kTWF0Y2hlcygnaW4t
JywgWydEb05vdFRyYXZlcnNlRmxhdFRyZWUnXSkgaXMgMgogUEFTUyBpbnRlcm5hbHMuY291bnRG
aW5kTWF0Y2hlcygnaW4tJywgW10pIGlzIDQKIFBBU1MgaW50ZXJuYWxzLmNvdW50RmluZE1hdGNo
ZXMoJ2luLXNoYWRvdyBpbi1kb2N1bWVudCcsIFsnRG9Ob3RUcmF2ZXJzZUZsYXRUcmVlJ10pIGlz
IDAKLVBBU1MgaW50ZXJuYWxzLmNvdW50RmluZE1hdGNoZXMoJ2luLXNoYWRvdyBpbi1kb2N1bWVu
dCcsIFtdKSBpcyAwCitQQVNTIGludGVybmFscy5jb3VudEZpbmRNYXRjaGVzKCdpbi1zaGFkb3cg
aW4tZG9jdW1lbnQnLCBbXSkgaXMgMQogUEFTUyByYW5nZVRleHQoaW50ZXJuYWxzLnJhbmdlT2ZT
dHJpbmcoJ2luc2lkZS1kaXNwbGF5LW5vbmUnLCBudWxsLCBbXSkpIGlzIG51bGwKIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy90ZXh0LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZsYXQtdHJlZS5odG1sIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZsYXQtdHJlZS5odG1sCmlu
ZGV4IDE5MDUyNTNmYjE2NDhlOWFkZGNhMzMxNTgyMDlmYjk3MjQwMGQyZGIuLjM2NTlmZjJlZDEw
NDc2MThiNDcwNWRiNTkxMjY3NjVjMDcwMGYzOTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvdGV4dC1pdGVyYXRvci9maW5kLXN0cmluZy1vbi1mbGF0LXRyZWUuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZC1zdHJpbmctb24tZmxhdC10cmVl
Lmh0bWwKQEAgLTE2MCw3ICsxNjAsNyBAQCBlbHNlIHsKICAgICBzaG91bGRCZSgiaW50ZXJuYWxz
LmNvdW50RmluZE1hdGNoZXMoJ2luLScsIFtdKSIsICI0Iik7CiAKICAgICBzaG91bGRCZSgiaW50
ZXJuYWxzLmNvdW50RmluZE1hdGNoZXMoJ2luLXNoYWRvdyBpbi1kb2N1bWVudCcsIFsnRG9Ob3RU
cmF2ZXJzZUZsYXRUcmVlJ10pIiwgIjAiKTsKLSAgICBzaG91bGRCZSgiaW50ZXJuYWxzLmNvdW50
RmluZE1hdGNoZXMoJ2luLXNoYWRvdyBpbi1kb2N1bWVudCcsIFtdKSIsICIwIik7CisgICAgc2hv
dWxkQmUoImludGVybmFscy5jb3VudEZpbmRNYXRjaGVzKCdpbi1zaGFkb3cgaW4tZG9jdW1lbnQn
LCBbXSkiLCAiMSIpOwogCiAgICAgc2hvdWxkQmUoInJhbmdlVGV4dChpbnRlcm5hbHMucmFuZ2VP
ZlN0cmluZygnaW5zaWRlLWRpc3BsYXktbm9uZScsIG51bGwsIFtdKSkiLCAibnVsbCIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395241</attachid>
            <date>2020-04-01 21:22:17 -0700</date>
            <delta_ts>2020-04-02 10:24:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209723-20200401212215.patch</filename>
            <type>text/plain</type>
            <size>103805</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5Mzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGUyMDhlZTFjYWRlZTk5
MzcxMzFjMTMxYzM0NGY0YWQ3OTA4MDU5MS4uM2Q4OGUxNmY5ODRhNWI4ZTgyMWU3ODcyYzFlMzI2
OWQ1Nzk3M2UwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MyBAQAorMjAyMC0wNC0wMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9m
IGxpdmUgcmFuZ2VzIGZyb20gVGV4dEl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk3MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAtIFJlcGxhY2VkIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRp
b25BbmRMZW5ndGhGcm9tUmFuZ2Ugd2l0aCBhIGZ1bmN0aW9uIG5hbWVkCisgICAgICAgICAgY2hh
cmFjdGVyUmFuZ2UgdGhhdCBjb21wdXRlcyBhIENoYXJhY3RlclJhbmdlIGdpdmVuIGEgc2NvcGUg
YW5kIGEgcmFuZ2UuCisgICAgICAgIC0gUmVtb3ZlZCB0aGUgb3ZlcmxvYWQgb2YgcGxhaW5UZXh0
IHRoYXQgdGFrZXMgYSBwb2ludGVyIHRvIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgLSBVcGRhdGUg
dGhlIG1hbnkgY2FsbGVycyBvZiBwbGFpblRleHQgdGhhdCBwYXNzIGEgcG9pbnRlciB0byBhIGxp
dmUgcmFuZ2UKKyAgICAgICAgICB0byBwYXNzIGEgcmVmZXJlbmNlIGluc3RlYWQsIGFkZGluZyBu
dWxsIGNoZWNrcyBhcyBuZWVkZWQgdG8gcHJlc2VydmUgYmVoYXZpb3IuCisgICAgICAgIC0gUmV3
cm90ZSBzb21lIGNhbGwgc2l0ZXMgdG8gbm90IHVzZSBsaXZlIHJhbmdlcyBhdCBhbGwsIG9yIHVz
ZSB0aGVtIG1pbmltYWxseS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0
U2VudGVuY2VFbmRQb3NpdGlvbiBjb25zdCk6IFBhc3MgYSByZWZlcmVuY2UKKyAgICAgICAgdG8g
YSBsaXZlIHJhbmdlIHJhdGhlciB0aGFuIGEgcG9pbnRlciB0byB0aGUgcGxhaW5UZXh0IGZ1bmN0
aW9uLiBMYXRlciB3ZSBjYW4KKyAgICAgICAgcmV0dXJuIGFuZCBjb252ZXJ0IHRoaXMgdG8gbm90
IHVzZSBsaXZlIHJhbmdlcyBhdCBhbGwuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpwcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbiBjb25zdCk6IERpdHRvLgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpib3VuZHNGb3JSZWN0cyk6IENvbnZl
cnRlZCB0aGlzIHRvIGEgZmlsZS1sb2NhbCBmdW5jdGlvbiBhbmQgY2hhbmdlZAorICAgICAgICBp
dCB0byB0YWtlIGEgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9z
aXRpb25SYW5nZSBjb25zdCk6IFBhc3MKKyAgICAgICAgYSByZWZlcmVuY2UgdG8gYSBsaXZlIHJh
bmdlIGluc3RlYWQgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDogUmVtb3ZlZCBib3VuZHNG
b3JSZWN0cy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBfY29udmVydFRvTlNSYW5nZTpdKTogUmV3cm90ZSB0byB1c2UKKyAgICAgICAgY2hhcmFj
dGVyUmFuZ2UgaW5zdGVhZCBvZiBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlLgorCisgICAgICAgICogZG9tL0JvdW5kYXJ5UG9pbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKTogQWRkZWQuCisKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojppbm5lclRl
eHQpOiBQYXNzIGEgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UKKyAgICAgICAg
dG8gdGhlIHBsYWluVGV4dCBmdW5jdGlvbi4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dGV4dCBjb25zdCk6IFBhc3MgYSByZWZlcmVuY2UgdG8g
YSBsaXZlIHJhbmdlIGluc3RlYWQgb2YgYQorICAgICAgICBwb2ludGVyIHRvIHRoZSBwbGFpblRl
eHQgZnVuY3Rpb24uCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFuZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6bWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKTogVXNlIG1ha2VC
b3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzCisgICAgICAgIGFuZCBtYWtlQm91bmRhcnlQ
b2ludEFmdGVyTm9kZUNvbnRlbnRzCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbik6IFBhc3MgYSByZWZlcmVuY2UKKyAgICAgICAg
dG8gYSBsaXZlIHJhbmdlIHRvIHBsYWluVGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnNob3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVz
dWx0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKTogRGl0dG8uIEFsc28KKyAgICAgICAgdGFr
ZSBhIFNpbXBsZVJhbmdlIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJl
Y3Rpb25BZnRlckNvbW1hbmQpOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKTpEaXR0
by4KKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaDogVXBkYXRl
IGZvciB0aGUgYWJvdmUgY2hhbmdlcy4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9X
b3JkKTogUGFzcyBhIHJlZmVyZW5jZQorICAgICAgICB0byBhIGxpdmUgcmFuZ2UgdG8gcGxhaW5U
ZXh0LgorICAgICAgICAoV2ViQ29yZTo6Y29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4
dENoZWNraW5nUGFyYWdyYXBoKTogRGl0dG8uCisgICAgICAgIEFsc28gcmVmYWN0b3IgZm9yIHNp
bXBsaWNpdHkgYW5kIGNsYXJpdHkuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbmRS
ZXBsYWNlRm9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5nZUJhY2tU
b1JlcGxhY2VkU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyYW5z
cG9zZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZGRSYW5nZVRvS2lsbFJp
bmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRl
UmVxdWVzdCBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZDo6ZG9BcHBseSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6
UmVwbGFjZW1lbnRGcmFnbWVudCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjpkb0FwcGx5KTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tp
bmdIZWxwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjp0
ZXh0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6
OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKTogRGl0dG8uCisKKyAgICAgICAgKiBl
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6IFVzZSBtb3JlIGNvbnN0ZXhwci4KKyAgICAgICAgKFdl
YkNvcmU6OmNoYXJhY3RlclN1YnJhbmdlKTogRGVsZXRlZC4gTW92ZWQgdGhlIGxvZ2ljIGZyb20g
dGhpcyBmdW5jdGlvbgorICAgICAgICBpbnRvIHRoZSBvbmUgcGxhY2UgdXNpbmcgaXQsIHRoZSBy
YW5nZUZvck1hdGNoIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3Rl
ckxvY2F0aW9uKTogRGVsZXRlZC4gTW92ZWQgdG8gdGhlIGhlYWRlciBmaWxlLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwbGFpblRleHQpOiBEZWxldGVkIHRoZSBvdmVybG9h
ZCB0aGF0IHRha2VzIGEgbGl2ZSByYW5nZSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6cGxh
aW5UZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3JGb3JUZXN0aW5nKTogRGVsZXRlZC4gTW92
ZWQKKyAgICAgICAgdGhlIGltcGxlbWVudGF0aW9uIHRvIEludGVybmFscy4gVGhlcmUncyBub3Ro
aW5nIHNwZWNpYWwgYWJvdXQgdGhlIGFsZ29yaXRobSwKKyAgICAgICAgaXQgdXNlcyBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGluIGEgc2ltcGxlIHdheS4KKyAgICAgICAgKFdlYkNv
cmU6OmNvbGxhcHNlZFRvQm91bmRhcnkpOiBEZWxldGVkLiBNb3ZlZCB0aGUgY29kZSB0byB0aGUg
b25lIHBsYWNlCisgICAgICAgIGl0J3MgdXNlZCwgdGhlIHJhbmdlRm9yTWF0Y2ggZnVuY3Rpb24u
CisgICAgICAgIChXZWJDb3JlOjpmb3JFYWNoTWF0Y2gpOiBSZW5hbWVkIGZyb20gZmluZFBsYWlu
VGV4dE1hdGNoZXMgYW5kIGNoYW5nZWQgdG8KKyAgICAgICAgd29yayB3aXRob3V0IGFueSB1c2Ug
b2YgbGl2ZSByYW5nZXMgYW5kIHRvIHVzZSBDaGFyYWN0ZXJSYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OnJhbmdlRm9yTWF0Y2gpOiBSZXdyb3RlIHRvIGluY2x1ZGUgbW9yZSBvZiB0aGUgbG9naWMs
IHJlbW92aW5nCisgICAgICAgIHRoZSBjb2xsYXBzZWRUb0JvdW5kYXJ5IGFuZCBjaGFyYWN0ZXJT
dWJyYW5nZSBmdW5jdGlvbnMsIGFuZCB0byBub3QgdXNlCisgICAgICAgIGFueSBsaXZlIHJhbmdl
cy4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmRDbG9zZXN0UGxhaW5UZXh0KTogUmV3cm90ZSB0byB0
aWdodGVuIHVwIHRoZSBhbGdvcml0aG0gYQorICAgICAgICBiaXQsIGJyZWFrIHRpZXMgYmFzZWQg
b24gdGhlIHNlYXJjaCBkaXJlY3Rpb24sIGFuZCBoYXZlIGxlc3MgcmVwZXRpdGl2ZSBjb2RlLgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZFBsYWluVGV4dCk6IFJld3JvdGUgZm9yIGNsYXJpdHkuCisK
KyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5oOiBSZW1vdmVkIHRoZSBmb3J3YXJkIGRl
Y2xhcmF0aW9uIG9mIFJhbmdlLgorICAgICAgICBSZW1vdmVkIHRoZSBvdmVybG9hZCBvZiBwbGFp
blRleHQgdGhhdCB0YWtlcyBhIGxpdmUgcmFuZ2UgcG9pbnRlci4gTW92ZWQKKyAgICAgICAgdGhl
IGZ1bmN0aW9ucyB0aGF0IHdvcmsgd2l0aCBjaGFyYWN0ZXIgcmFuZ2VzIHVwIHRvIHRoZSB0b3Ag
b2YgdGhlIGZpbGUsCisgICAgICAgIGdyb3VwZWQgdGhlIG90aGVyIGZ1bmN0aW9ucyBtb3JlIGxv
Z2ljYWxseS4gRGVsZXRlZCB0aGUKKyAgICAgICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFu
ZExlbmd0aEZyb21SYW5nZSBmdW5jdGlvbi4gUHV0IHNvbWUgaW5saW5lCisgICAgICAgIGZ1bmN0
aW9uIGRlZmluaXRpb25zIGhlcmUuCisKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nKTogUGFzcyBhIHJlZmVyZW5jZQorICAgICAgICB0byBhIGxpdmUgcmFuZ2UgdG8g
cGxhaW5UZXh0LgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNoYXJhY3RlcnNBcm91bmRQb3NpdGlvbik6IFBhc3MgYSBTaW1wbGVSYW5nZSB0
byBwbGFpblRleHQKKyAgICAgICAgcmF0aGVyIHRoYW4gYSBsaXZlIHJhbmdlLgorICAgICAgICAq
IGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVj
dEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKTogUGFzcyBhIHJlZmVyZW5jZSB0byBhIGxpdmUKKyAg
ICAgICAgcmFuZ2UgdG8gcGxhaW5UZXh0LgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGljdGlv
bmFyeUxvb2t1cC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29rdXA6OnJhbmdl
Rm9yU2VsZWN0aW9uKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252
ZXJ0ZXIuaDogVHdlYWtlZCAjaWYgYSBiaXQuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeUxvb2t1
cDo6cmFuZ2VGb3JTZWxlY3Rpb24pOiBQYXNzIGEgcmVmZXJlbmNlIHRvIGEKKyAgICAgICAgbGl2
ZSByYW5nZSB0byBwbGFpblRleHQuIEFsc28gcmV3cm90ZSBsb2dpYyB0byB1c2UgbW9zdGx5IFNp
bXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6cmVuZGVyZWRUZXh0UmVzcGVj
dGluZ1JhbmdlKTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IERpdHRvLgorICAgICAgICAqIHBhZ2UvRE9NU2Vs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6dG9TdHJpbmcpOiBE
aXR0by4KKworICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
OjpyZXBsYWNlUmFuZ2VzV2l0aFRleHQpOiBSZXdyb3RlIHRvIHJlcGxhY2VzIHVzZSBvZgorICAg
ICAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlIHdpdGggY2hh
cmFjdGVyUmFuZ2UuCisKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCBjb25zdCk6IFBh
c3MgYQorICAgICAgICByZWZlcmVuY2UgdG8gYSBsaXZlIHJhbmdlIHRvIHBsYWluVGV4dC4KKwor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6bG9jYXRpb25Gcm9tUmFuZ2UpOiBVc2UgY2hhcmFjdGVyUmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpyYW5nZUFzVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yKToK
KyAgICAgICAgVVNlIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgZGlyZWN0bHkgc2lu
Y2Ugd2Ugbm8gbG9uZ2VyIGhhdmUKKyAgICAgICAgdGhlIGZ1bmN0aW9uIHBsYWluVGV4dFVzaW5n
QmFja3dhcmRzVGV4dEl0ZXJhdG9yRm9yVGVzdGluZy4KKwogMjAyMC0wNC0wMSAgSmFjayBMZWUg
IDxzaGloY2hpZWhfbGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIHVubmVjZXNz
YXJ5IG51bGwgY2hlY2sgZm9yIGRvY3VtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNkMjE0MzA1ZmVmZjlkYmEy
NTJhYzhlM2ZlNGQxZDZmMzUyZDg1YWQuLmVhNTFmZDYwMWEwZTQxYTcwNDQ2MjZjYzk4MzhlNGRh
NTc5ZDE4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMjAtMDQtMDEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbGwgdXNlcyBvZiBsaXZl
IHJhbmdlcyBmcm9tIFRleHRJdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NzIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvRWRpdGluZ1JhbmdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UpOiBVc2UgY2hhcmFjdGVyUmFuZ2UuCisKKyAg
ICAgICAgKiBTaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcuaDogQWRkZWQgYSBjb25zdHJ1Y3Rv
ciB0aGF0IHRha2VzIHJ2YWx1ZQorICAgICAgICByZWZlcmVuY2VzIHNvIHdlIGNhbiBpbml0aWFs
aXplIHRoaXMgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnRseS4KKworICAgICAgICAqIFNoYXJlZC9t
YWMvQXR0cmlidXRlZFN0cmluZy5tbToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJL
aXQ6OkF0dHJpYnV0ZWRTdHJpbmc+OjpkZWNvZGUpOiBQYXNzIHJ2YWx1ZQorICAgICAgICByZWZl
cmVuY2VzIHdoZW4gY3JlYXRpbmcgYW4gQXR0cmlidXRlZFN0cmluZy4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOiBTaW1wbGlmeSB0aGUKKyAg
ICAgICAgY29kZSB0byByZW1vdmUgc29tZSBsb2NhbCB2YXJpYWJsZXMgdGhhdCB3ZXJlbid0IGhl
bHBmdWwuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5n
Q29udHJvbGxlclByb3h5Lmg6IE1hZGUgdGhlCisgICAgICAgIGFubm90YXRlZFN1YnN0cmluZ0Jl
dHdlZW5Qb3NpdGlvbnMgYSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLiBBbHNvIHVzZWQKKyAgICAg
ICAgY29uc3QmIGFyZ3VtZW50IHR5cGVzIHRvIGN1dCBkb3duIG9uIHJlZmVyZW5jZSBjb3VudCBj
aHVybiBhIGJpdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hl
Y2tpbmdDb250cm9sbGVyUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2luZ0Nv
bnRyb2xsZXJQcm94eTo6cmFuZ2VBbmRPZmZzZXRSZWxhdGl2ZVRvU2VsZWN0aW9uKToKKyAgICAg
ICAgU3RyZWFtbGluZWQgYW5kIG1hZGUgdGhpcyB1c2UgY2hhcmFjdGVyQ291bnQgaW5zdGVhZCBv
ZgorICAgICAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlLgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlcGxhY2VSZWxh
dGl2ZVRvU2VsZWN0aW9uKTogVHdlYWtlZAorICAgICAgICB0aGUgYXJndW1lbnQgdHlwZS4KKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZW1vdmVBbm5vdGF0
aW9uUmVsYXRpdmVUb1NlbGVjdGlvbik6CisgICAgICAgIERpdHRvLiBBbHNvIHJlbW92ZWQgc29t
ZSB1bm5lY2Vzc2FyeSB1c2Ugb2YgTlNTdHJpbmcuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucyk6
CisgICAgICAgIFJld3JvdGUgdG8gbm8gbG9uZ2VyIHVzZSBsaXZlIHJhbmdlcy4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmdldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nKTogVXNlIGNvbnN0
cnVjdGlvbiBhbmQKKyAgICAgICAgcnZhbHVlIHJlZmVyZW5jZXMgdG8gdGlndGVuIHRoaW5ncyB1
cCBhIGJpdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjb250ZW50c0FzU3RyaW5nIGNvbnN0KTogVXNlIGEg
U2ltcGxlUmFuZ2UgaW5zdGVhZCBvZgorICAgICAgICBhIGxpdmUgcmFuZ2UgdG8gcGFzcyB0byBw
bGFpblRleHQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlIGNv
bnN0KTogUGFzcyByZWZlcmVuY2VzIHRvCisgICAgICAgIGxpdmUgcmFuZ2VzIHRvIHBsYWluVGV4
dC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhEZWx0YSk6IFJld3JvdGUg
dG8gbWluaW1pemUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2VzLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCk6IERpdHRvLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZSBjb25zdCk6IFBhc3MgcmVmZXJlbmNl
IHRvCisgICAgICAgIGEgbGl2ZSByYW5nZSB0byBwbGFpblRleHQuCisKIDIwMjAtMDQtMDEgIFBl
ciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gVVRJ
IGZyb20gTUlNRSB0eXBlIGNhY2hlIGNhbiBiZSByZW1vdmVkIGFmdGVyIHIyNTg5MTUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBiOTdiNTU0YTgwNDY1ODQ1Y2NmY2NiZjViYTY4MjIw
NGMxMjM1MmI3Li43MDg2MmRhMWExMTE0YWFiNWRiNjAzYjU5ZTlmNDJlMDRlNDBhMThkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDQtMDEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBhbGwgdXNlcyBv
ZiBsaXZlIHJhbmdlcyBmcm9tIFRleHRJdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NzIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW06CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyk6IFJlbW92ZSBzb21lIHVubmVjZXNzYXJ5CisgICAgICAgIHVzZSBvZiBsb2NhbCB2
YXJpYWJlbHMgZm9yIE5TU3RyaW5nLgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0
Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbik6IFBhc3MgYSByZWZlcmVuY2UgdG8gYSBsaXZlCisgICAg
ICAgIHJhbmdlIHRvIHBsYWluVGV4dC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgor
ICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nRm9yUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAo
LVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogVXNlIGNoYXJhY3RlclJhbmdlIGluc3Rl
YWQgb2YKKyAgICAgICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5n
ZS4KKwogMjAyMC0wMy0zMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBEYXRhbGlzdCBvcHRpb24ncyBsYWJlbCBub3QgdXNlZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vQ2hhbmdlTG9nCmluZGV4IGFhMmUzMGJjYjRmNjNmNzhlYmY5M2M3MGJhZTgwMjE1OWI2NmFh
MmQuLjAwNjc4NWFhNWYyZmUwZTc3YTY4NDQ3YzA1ODM3M2E3Yjc2OWNkODIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0wNC0wMSAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIGxpdmUg
cmFuZ2VzIGZyb20gVGV4dEl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDk3MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpzdHJp
bmcpOiBVc2UgYSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZQorICAgICAgICB0
byBjYWxsIHBsYWluVGV4dC4KKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZp
ZXc6OnNlbGVjdGVkUmFuZ2VGb3JUZXN0aW5nKTogVXNlIGEgU2ltcGxlUmFuZ2UgaW5zdGVhZAor
ICAgICAgICBvZiBhIGxpdmUgcmFuZ2UgdG8gY2FsbCBjaGFyYWN0ZXJSYW5nZSBpbnN0ZWFkIG9m
CisgICAgICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UuCisK
IDIwMjAtMDMtMzAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgc2Nyb2xsSW50b1ZpZXcoKSBlcnJvbmVvdXNseSBzY3JvbGxzIG5vbi1jb250YWluaW5n
IGJsb2NrIHNjcm9sbGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggNTFjYTRjZjE0NTY2ZjZhNGMyMmVhNjZiZGM3
ODU2OTBjMjI4YjRhNC4uNzY3MzJiN2VkNzFkZGEyNGZkZTU2ZGFlYmViMGQyMjZiODYyM2E4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCkBAIC0xNDU5LDcgKzE0NTksNyBAQCBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJp
bGl0eU9iamVjdDo6bmV4dFNlbnRlbmNlRW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aQog
ICAgIC8vIHNlZSB0aGlzIGVtcHR5IGxpbmUuICBJbnN0ZWFkLCByZXR1cm4gdGhlIGVuZCBwb3Np
dGlvbiBvZiB0aGUgZW1wdHkgbGluZS4KICAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb247
CiAgICAgCi0gICAgU3RyaW5nIGxpbmVTdHJpbmcgPSBwbGFpblRleHQobWFrZVJhbmdlKHN0YXJ0
T2ZMaW5lKG5leHRWaXNpYmxlUG9zKSwgZW5kT2ZMaW5lKG5leHRWaXNpYmxlUG9zKSkuZ2V0KCkp
OworICAgIFN0cmluZyBsaW5lU3RyaW5nID0gcGxhaW5UZXh0KCptYWtlUmFuZ2Uoc3RhcnRPZkxp
bmUobmV4dFZpc2libGVQb3MpLCBlbmRPZkxpbmUobmV4dFZpc2libGVQb3MpKSk7CiAgICAgaWYg
KGxpbmVTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICBlbmRQb3NpdGlvbiA9IG5leHRWaXNpYmxl
UG9zOwogICAgIGVsc2UKQEAgLTE0ODMsNyArMTQ4Myw3IEBAIFZpc2libGVQb3NpdGlvbiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpwcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbihjb25zdCBWaXNp
YmxlCiAgICAgLy8gdHJlYXQgZW1wdHkgbGluZSBhcyBhIHNlcGFyYXRlIHNlbnRlbmNlLgogICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uOwogICAgIAotICAgIFN0cmluZyBsaW5lU3Ry
aW5nID0gcGxhaW5UZXh0KG1ha2VSYW5nZShzdGFydE9mTGluZShwcmV2aW91c1Zpc2libGVQb3Mp
LCBlbmRPZkxpbmUocHJldmlvdXNWaXNpYmxlUG9zKSkuZ2V0KCkpOworICAgIFN0cmluZyBsaW5l
U3RyaW5nID0gcGxhaW5UZXh0KCptYWtlUmFuZ2Uoc3RhcnRPZkxpbmUocHJldmlvdXNWaXNpYmxl
UG9zKSwgZW5kT2ZMaW5lKHByZXZpb3VzVmlzaWJsZVBvcykpKTsKICAgICBpZiAobGluZVN0cmlu
Zy5pc0VtcHR5KCkpCiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBwcmV2aW91c1Zpc2libGVQb3M7
CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggZTYxNmVhOWQ2NTRlZDIzYjM2NWJh
NzU2ZGQwODY1NzZlN2QxNWU4YS4uMzVhNjZiZTU1NWE2M2I0MDhlNmQ4YjViZmIyYzlkNzI5YTI0
YTQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC02NjQsNyArNjY0LDcgQEAgU3RyaW5nIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRl
eHRVbmRlckVsZW1lbnQKICAgICAgICAgICAgICAgICAvLyBzdHlsZSB1cGRhdGUvbGF5b3V0IGhl
cmUuIFNlZSBhbHNvIEFYT2JqZWN0Q2FjaGU6OmRlZmVyVGV4dENoYW5nZWRJZk5lZWRlZCgpLgog
ICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlRG9j
dW1lbnQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZURvY3VtZW50LT52aWV3KCktPmxheW91dENv
bnRleHQoKS5pc0luUmVuZGVyVHJlZUxheW91dCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
cGxhaW5UZXh0KHRleHRSYW5nZS5nZXQoKSwgdGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFu
Z2UoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWluVGV4dCgqdGV4dFJhbmdlLCB0ZXh0
SXRlcmF0b3JCZWhhdmlvckZvclRleHRSYW5nZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIApAQCAtMjA4MSwxNiArMjA4MSwxNSBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6Om5vZGVJc1RleHRDb250cm9sKGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1JbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5k
c0ZvclJlY3RzKExheW91dFJlY3QgY29uc3QmIHJlY3QxLCBMYXlvdXRSZWN0IGNvbnN0JiByZWN0
MiwgUmVmUHRyPFJhbmdlPiBjb25zdCYgZGF0YVJhbmdlKQorc3RhdGljIEludFJlY3QgYm91bmRz
Rm9yUmVjdHMoY29uc3QgTGF5b3V0UmVjdCYgcmVjdDEsIGNvbnN0IExheW91dFJlY3QmIHJlY3Qy
LCBjb25zdCBTaW1wbGVSYW5nZSYgZGF0YVJhbmdlKQogewogICAgIExheW91dFJlY3Qgb3VyUmVj
dCA9IHJlY3QxOwogICAgIG91clJlY3QudW5pdGUocmVjdDIpOwotICAgIAotICAgIC8vIGlmIHRo
ZSByZWN0YW5nbGUgc3BhbnMgbGluZXMgYW5kIGNvbnRhaW5zIG11bHRpcGxlIHRleHQgY2hhcnMs
IHVzZSB0aGUgcmFuZ2UncyBib3VuZGluZyBib3ggaW50ZWFkCisKKyAgICAvLyBJZiB0aGUgcmVj
dGFuZ2xlIHNwYW5zIGxpbmVzIGFuZCBjb250YWlucyBtdWx0aXBsZSB0ZXh0IGNoYXJhY3RlcnMs
IHVzZSB0aGUgcmFuZ2UncyBib3VuZGluZyBib3ggaW50ZWFkLgogICAgIGlmIChyZWN0MS5tYXhZ
KCkgIT0gcmVjdDIubWF4WSgpKSB7Ci0gICAgICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBk
YXRhUmFuZ2UtPmFic29sdXRlQm91bmRpbmdCb3goKTsKLSAgICAgICAgU3RyaW5nIHJhbmdlU3Ry
aW5nID0gcGxhaW5UZXh0KGRhdGFSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGlmIChyYW5nZVN0cmlu
Zy5sZW5ndGgoKSA+IDEgJiYgIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgTGF5b3V0
UmVjdCBib3VuZGluZ0JveCA9IGNyZWF0ZUxpdmVSYW5nZShkYXRhUmFuZ2UpLT5hYnNvbHV0ZUJv
dW5kaW5nQm94KCk7CisgICAgICAgIGlmIChjaGFyYWN0ZXJDb3VudChkYXRhUmFuZ2UpID4gMSAm
JiAhYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICAgICAgb3VyUmVjdCA9IGJvdW5kaW5n
Qm94OwogICAgIH0KIApAQCAtMjEyMCw4ICsyMTE5LDcgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxl
UG8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IGRhdGFSYW5nZSA9
IG1ha2VSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKLSAgICByZXR1cm4gYm91bmRzRm9y
UmVjdHMocmVjdDEsIHJlY3QyLCBkYXRhUmFuZ2UpOworICAgIHJldHVybiBib3VuZHNGb3JSZWN0
cyhyZWN0MSwgcmVjdDIsICptYWtlUmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCkpOwogfQog
CiBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclJhbmdlKGNvbnN0
IFJlZlB0cjxSYW5nZT4gcmFuZ2UpIGNvbnN0CkBAIC0yMTUyLDcgKzIxNTAsNyBAQCBJbnRSZWN0
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxS
YW5nZT4gcmFuZ2UpIGNvbgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHJldHVybiBib3Vu
ZHNGb3JSZWN0cyhyZWN0MSwgcmVjdDIsIHJhbmdlKTsKKyAgICByZXR1cm4gYm91bmRzRm9yUmVj
dHMocmVjdDEsIHJlY3QyLCAqcmFuZ2UpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmlzVmlzaWJsZVBvc2l0aW9uUmFuZ2VJbkRpZmZlcmVudERvY3VtZW50KGNvbnN0IFZp
c2libGVQb3NpdGlvblJhbmdlJiByYW5nZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKaW5kZXggNzc2
YjQ4ZjRjYjliNzQ3MTAzYmFjY2U5OTc4MDY5NzJmN2M2MDYwYy4uN2VjZjA0YWEwNGVmYmIwNTI0
ZDdjZDQ5OThlNDFkNDczMWUzNDRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKQEAgLTI5Myw4ICsyOTMs
NiBAQCBwcml2YXRlOgogICAgIGJvb2wgY2FuSGF2ZVBsYWluVGV4dCgpIGNvbnN0OwogICAgIC8v
IFNwZWNpYWwgaGFuZGxpbmcgb2YgY2xpY2sgcG9pbnQgZm9yIGxpbmtzLgogICAgIEludFBvaW50
IGxpbmtDbGlja1BvaW50KCk7Ci0gICAgLy8gUmVjdHMgdXRpbGl0aWVzLgotICAgIHN0YXRpYyBJ
bnRSZWN0IGJvdW5kc0ZvclJlY3RzKExheW91dFJlY3QgY29uc3QmLCBMYXlvdXRSZWN0IGNvbnN0
JiwgUmVmUHRyPFJhbmdlPiBjb25zdCYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCBmNmE3MjMxNmE2Nzcz
N2NiNjViOWRiMjhkNTEzMjQxNTQ3YjZiMzZiLi44OGY4OTQ4YTA1Zjc5MWM5YjZlM2FiMTdiNmQ4
ZGQzNTg2NjE0ZWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpA
QCAtMzYzNiwyMSArMzYzNiwxOCBAQCAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5n
ZSopcmFuZ2UKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIAotICAgIE5TUmFu
Z2UgcmVzdWx0ID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAgICAgaWYgKCFyYW5nZSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90
Rm91bmQsIDApOwogICAgIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5kb2N1bWVudCgpOworICAgIGF1dG8gZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09i
amVjdC0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIAotICAgIHNpemVfdCBsb2NhdGlvbjsKLSAgICBzaXplX3QgbGVuZ3RoOwotICAg
IFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpLCByYW5nZSwgbG9jYXRpb24sIGxlbmd0aCk7Ci0gICAgcmVzdWx0Lmxv
Y2F0aW9uID0gbG9jYXRpb247Ci0gICAgcmVzdWx0Lmxlbmd0aCA9IGxlbmd0aDsKLSAgICAKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwg
MCk7CisKKyAgICBhdXRvIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1l
bnQoKTsKKyAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJh
bmdlKE5TTm90Rm91bmQsIDApOworCisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKG1ha2VCb3Vu
ZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAqcmFuZ2UpOwog
fQogCiAtIChOU0ludGVnZXIpX2luZGV4Rm9yVGV4dE1hcmtlcjooaWQpbWFya2VyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0JvdW5kYXJ5UG9pbnQuaAppbmRleCBhNWQ4ZTNlMDEyZWVkYWE5Y2RmNzI5MzEwOGI0Mzky
N2JlMTI0ZjIyLi41Y2JiZmRjMDBmNTUwNzQ3NWExODViMmU4NTIzYWZhYjcyMzhiMjIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKQEAgLTQ2LDYgKzQ2LDggQEAgc3RydWN0IEJvdW5k
YXJ5UG9pbnQgewogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0
IEJvdW5kYXJ5UG9pbnQmKTsKIAorQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEJlZm9y
ZU5vZGVDb250ZW50cyhOb2RlJik7CisKIGlubGluZSBCb3VuZGFyeVBvaW50OjpCb3VuZGFyeVBv
aW50KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KQogICAgIDogY29udGFp
bmVyKFdURk1vdmUoY29udGFpbmVyKSkKICAgICAsIG9mZnNldChvZmZzZXQpCkBAIC03NSw0ICs3
Nyw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQm91bmRhcnlQb2ludCYgYSwgY29u
c3QgQm91bmRhcnlQb2ludCYgYikKICAgICByZXR1cm4gYS5jb250YWluZXIucHRyKCkgPT0gYi5j
b250YWluZXIucHRyKCkgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7CiB9CiAKK2lubGluZSBCb3Vu
ZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUp
Cit7CisgICAgcmV0dXJuIHsgbm9kZSwgMCB9OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
aW5kZXggNjAwMmMzZDQyYTIyOTlkMzM0MDVkMGRiNzc1MTU5MGQ4OTQ1OGE1OC4uYzlkYmQ1ZTUz
YTNlNjIyMTRhZDhlNDdlODg0Y2I2MDczNTM1ODNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtMzE5Nyw3ICszMTk3LDcgQEAgU3RyaW5nIEVsZW1lbnQ6OmlubmVyVGV4dCgpCiAgICAgaWYg
KCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gdGV4dENvbnRlbnQodHJ1ZSk7CiAKLSAgICBy
ZXR1cm4gcGxhaW5UZXh0KHJhbmdlT2ZDb250ZW50cygqdGhpcykucHRyKCkpOworICAgIHJldHVy
biBwbGFpblRleHQobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCp0aGlzKSk7CiB9CiAK
IFN0cmluZyBFbGVtZW50OjpvdXRlclRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggNDVjMWJj
ZmQwMmMxOThjZDhiOTkwZWNhMDFlM2YwZTZhMzkzYjVmYi4uYmU0ZWI2OTk1MTA0MDE4M2RiYzQy
MDZlZDAwZDQ4YmQ4ODQyZjAzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC05NTEsNyArOTUxLDcg
QEAgU3RyaW5nIFJhbmdlOjp0ZXh0KCkgY29uc3QKICAgICAvLyBGSVhNRTogQXMgd2l0aCBpbm5l
clRleHQsIHdlJ2QgbGlrZSB0aGlzIHRvIHdvcmsgZXZlbiBpZiB0aGVyZSBhcmUgbm8gcmVuZGVy
IG9iamVjdHMuCiAgICAgc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgp
OwogCi0gICAgcmV0dXJuIHBsYWluVGV4dCh0aGlzKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KCp0
aGlzKTsKIH0KIAogLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyN3aWRsLVJh
bmdlLWNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudC1Eb2N1bWVudEZyYWdtZW50LURPTVN0cmluZy1m
cmFnbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggYTdkOTFjZDJlZjE0NTc3
YjQxYmU2ZjY0YjY5YTk5ZGEwNDIzZmViYy4uOGVlYWQwNjFiNjMwZGVkYTUyMzUwOWNlMTNlZTQ2
ODdhYTA0ODllYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC02OCw5ICs2OCwx
NCBAQCBzdGF0aWMgdW5zaWduZWQgbGVuZ3RoKGNvbnN0IE5vZGUmIG5vZGUpCiAgICAgcmV0dXJu
IG5vZGUuY291bnRDaGlsZE5vZGVzKCk7CiB9CiAKK3N0YXRpYyBCb3VuZGFyeVBvaW50IG1ha2VC
b3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4g
eyBub2RlLCBsZW5ndGgobm9kZSkgfTsKK30KKwogU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7Ci0gICAgcmV0dXJuIHsgeyBub2RlLCAwIH0s
IHsgbm9kZSwgbGVuZ3RoKG5vZGUpIH0gfTsKKyAgICByZXR1cm4geyBtYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250
ZW50cyhub2RlKSB9OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBmNzBkYTU4ZTE0ZmI5NGE2MDViOThk
ZTE2YzcwY2U3NTYwNWUzMmJlLi5mMTEyOGI5MjQ3ZTg4YmQ5YjEyMDUwMTYxYjM2ZWM1YTliZWZl
MjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAKQEAgLTEzMCw5ICsxMzAsMTEgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseVBlbmRpbmdDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHMKICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlvbkFmdGVy
VHlwaW5nLnZpc2libGVTdGFydCgpOwogICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFdvcmQg
PSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIExlZnRXb3Jk
SWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24sIFJpZ2h0V29yZElmT25C
b3VuZGFyeSkpOwogICAgIGlmIChjdXJyZW50V29yZC52aXNpYmxlRW5kKCkgPT0gc3RhcnRPZlNl
bGVjdGlvbikgewotICAgICAgICBTdHJpbmcgd29yZFRleHQgPSBwbGFpblRleHQoY3VycmVudFdv
cmQudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIGlmICh3b3JkVGV4dC5sZW5n
dGgoKSA+IDAgJiYgaXNBbWJpZ3VvdXNCb3VuZGFyeUNoYXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4
dC5sZW5ndGgoKSAtIDFdKSkKLSAgICAgICAgICAgIGRvQXBwbHlDb3JyZWN0aW9uID0gZmFsc2U7
CisgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IGN1cnJlbnRXb3JkLmZpcnN0UmFuZ2UoKSkg
eworICAgICAgICAgICAgU3RyaW5nIHdvcmRUZXh0ID0gcGxhaW5UZXh0KCp3b3JkUmFuZ2UpOwor
ICAgICAgICAgICAgaWYgKCF3b3JkVGV4dC5pc0VtcHR5KCkgJiYgaXNBbWJpZ3VvdXNCb3VuZGFy
eUNoYXJhY3Rlcih3b3JkVGV4dFt3b3JkVGV4dC5sZW5ndGgoKSAtIDFdKSkKKyAgICAgICAgICAg
ICAgICBkb0FwcGx5Q29ycmVjdGlvbiA9IGZhbHNlOworICAgICAgICB9CiAgICAgfQogICAgIGlm
IChkb0FwcGx5Q29ycmVjdGlvbikKICAgICAgICAgaGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1
bHQoZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEFjY2VwdGVk
KSk7IApAQCAtMTU1LDcgKzE1Nyw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjCiAgICAgRmxv
YXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoJnJhbmdlVG9SZXBsYWNl
KTsKICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
bV9vcmlnaW5hbFRleHQgPSBwbGFpblRleHQoJnJhbmdlVG9SZXBsYWNlKTsKKyAgICBtX29yaWdp
bmFsVGV4dCA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZSk7CiAgICAgbV9yYW5nZVdpdGhBbHRl
cm5hdGl2ZSA9ICZyYW5nZVRvUmVwbGFjZTsKICAgICBtX2RldGFpbHMgPSByZXBsYWNlbWVudDsK
ICAgICBtX2lzQWN0aXZlID0gdHJ1ZTsKQEAgLTI0OSw3ICsyNTEsNyBAQCB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICBpZiAocmVwbGFjZW1lbnRT
dHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1faXNBY3RpdmUg
PSB0cnVlOwotICAgICAgICBtX29yaWdpbmFsVGV4dCA9IHBsYWluVGV4dChtX3JhbmdlV2l0aEFs
dGVybmF0aXZlLmdldCgpKTsKKyAgICAgICAgbV9vcmlnaW5hbFRleHQgPSBwbGFpblRleHQoKm1f
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUpOwogICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBy
b290Vmlld1JlY3RGb3JSYW5nZShtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKICAgICAg
ICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChBbHRlcm5h
dGl2ZVRleHRDbGllbnQqIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQpAQCAtMjU4
LDkgKzI2MCw5IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgp
CiAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVTcGVs
bGluZ1N1Z2dlc3Rpb25zOiB7Ci0gICAgICAgIGlmICghbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSB8
fCBwbGFpblRleHQobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSkgIT0gbV9vcmlnaW5hbFRl
eHQpCisgICAgICAgIGlmICghbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBwbGFpblRleHQoKm1f
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUpICE9IG1fb3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0gcGxhaW5UZXh0KCZUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGgoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdlKCkpOwor
ICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGgoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdlKCkpOwogICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0aW9uczsKICAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0
R3Vlc3Nlc0ZvcldvcmQobV9vcmlnaW5hbFRleHQsIHBhcmFncmFwaFRleHQsIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCksIHN1Z2dlc3Rpb25zKTsKICAgICAgICAgaWYgKHN1Z2dlc3Rp
b25zLmlzRW1wdHkoKSkgewpAQCAtMzAzLDcgKzMwNSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6aGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQoY29uc3QgU3RyaW5nJiBy
ZXN1CiAgICAgaWYgKCFyYW5nZVdpdGhBbHRlcm5hdGl2ZSB8fCBtX2ZyYW1lLmRvY3VtZW50KCkg
IT0gJnJhbmdlV2l0aEFsdGVybmF0aXZlLT5vd25lckRvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dChyYW5nZVdpdGhBbHRlcm5h
dGl2ZSk7CisgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KCpyYW5nZVdpdGhBbHRl
cm5hdGl2ZSk7CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB3b3JkIHdlIGFyZSBhYm91dCB0
byBjb3JyZWN0IGhhcyBiZWVuIGNoYW5nZWQgYmV0d2VlbiB0aW1lciBmaXJpbmcgYW5kIGNhbGxi
YWNrIGJlaW5nIHRyaWdnZXJlZC4KICAgICBpZiAoY3VycmVudFdvcmQgIT0gbV9vcmlnaW5hbFRl
eHQpCiAgICAgICAgIHJldHVybjsKQEAgLTQxNiw3ICs0MTgsNyBAQCBUZXh0Q2hlY2tlckNsaWVu
dCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGV4dENoZWNrZXIoKQogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZSByZXNwb25zZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgUmFuZ2UqIHJlcGxhY2VtZW50UmFuZ2UpCit2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0
b2NvcnJlY3Rpb25SZXNwb25zZSByZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU2ltcGxlUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpCiB7CiAgICAgaWYgKGF1dG8g
Y2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZShyZXNwb25zZSwgcmVwbGFjZWRTdHJpbmcsIHBsYWluVGV4
dChyZXBsYWNlbWVudFJhbmdlKSk7CkBAIC00NzUsNyArNDc3LDcgQEAgdm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29y
cmVjdGlvbkEKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFj
dGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKLSAgICBTdHJpbmcgc3RyaW5nID0gcGxhaW5U
ZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLnB0cigpKTsKKyAgICBTdHJpbmcgc3RyaW5nID0g
cGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlKTsKICAgICBpZiAoc3RyaW5nLmlzRW1w
dHkoKSB8fCAhZGVwcmVjYXRlZElzRWRpdGluZ1doaXRlc3BhY2Uoc3RyaW5nW3N0cmluZy5sZW5n
dGgoKSAtIDFdKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01MjQsNyArNTI2LDcgQEAgYm9vbCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZChjb25z
dCBEb2N1bWVudE1hcmtlciYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIE5vZGUqIG5vZGUg
PSBlbmRPZldvcmRQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CiAgICAgYXV0byB3b3JkUmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG5vZGUsIG1hcmtlci5zdGFydE9m
ZnNldCgpLCBub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOwotICAgIFN0cmluZyBjdXJyZW50V29y
ZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UucHRyKCkpOworICAgIFN0cmluZyBjdXJyZW50V29yZCA9
IHBsYWluVGV4dCh3b3JkUmFuZ2UpOwogICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX29yaWdpbmFsVGV4dCA9IGN1cnJlbnRXb3JkOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aAppbmRleCAyNzAyMWVjNzVhMTEyMjdmNzE1MDVlOGFmOTJiZTJjNDM3NGUwZjI1Li45ODFkMjcw
OTIwN2I2ZjM5NGRiMjFjYjFmZGE1NjY5ZWE4MGE5NzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApAQCAtNDUsNiArNDUsNyBA
QCBjbGFzcyBUZXh0Q2hlY2tlckNsaWVudDsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKIHN0
cnVjdCBEaWN0YXRpb25BbHRlcm5hdGl2ZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIHN0cnVjdCBU
ZXh0Q2hlY2tpbmdSZXN1bHQ7CiAKICNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFORUwpCkBAIC04
OCw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpIFVOTEVTU19FTkFCTEVEKHsgcmV0dXJuIGZhbHNlOyB9KQogICAgIGJvb2wg
c2hvdWxkUmVtb3ZlTWFya2Vyc1Vwb25FZGl0aW5nKCk7CiAKLSAgICB2b2lkIHJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZywgUmFuZ2UqIHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsg
VU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFu
Z2UpOyB9KQorICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVj
dGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTaW1wbGVS
YW5nZSYgcmVwbGFjZW1lbnRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVw
bGFjZWRTdHJpbmcpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnRSYW5nZSk7IH0pCiAgICAgdm9p
ZCBtYXJrUmV2ZXJzZWQoUmFuZ2UmIGNoYW5nZWRSYW5nZSkgVU5MRVNTX0VOQUJMRUQoeyBVTlVT
RURfUEFSQU0oY2hhbmdlZFJhbmdlKTsgfSkKICAgICB2b2lkIG1hcmtDb3JyZWN0aW9uKFJhbmdl
JiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKSBVTkxFU1NfRU5B
QkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFJhbmdlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2Vk
U3RyaW5nKTsgfSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDA5M2IxMmI5NjYx
M2YzN2U2ZTk5OWRkZmFmOGEwMmUxNjIyZGJkMWQuLmE0ZTA2MDIzOTVlMjc5Nzk5YmYzODkyMzJi
M2VkNjgyYjdlZTRmYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTI1OTIsOCAr
MjU5Miw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICAvLyBHZXQgdGhlIG1pc3NwZWxsZWQgd29yZC4KLSAgICBjb25zdCBTdHJpbmcgbWlzc3Bl
bGxlZFdvcmQgPSBwbGFpblRleHQobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSk7Ci0gICAgU3RyaW5n
IGF1dG9jb3JyZWN0ZWRTdHJpbmcgPSB0ZXh0Q2hlY2tlcigpLT5nZXRBdXRvQ29ycmVjdFN1Z2dl
c3Rpb25Gb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CisgICAgU3RyaW5nIGF1dG9j
b3JyZWN0ZWRTdHJpbmcgPSB0ZXh0Q2hlY2tlcigpLT5nZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25G
b3JNaXNzcGVsbGVkV29yZChwbGFpblRleHQoKm1pc3NwZWxsaW5nUmFuZ2UpKTsKIAogICAgIC8v
IElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJlcGxhY2UgdGhlIG1pc3NwZWxs
ZWQgd29yZCBieSB0aGlzIHdvcmQuCiAgICAgaWYgKCFhdXRvY29ycmVjdGVkU3RyaW5nLmlzRW1w
dHkoKSkgewpAQCAtMjc3MywyMSArMjc3MiwxOSBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVJhbmdl
Rm9yU3BlbGxDaGVja2luZyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcgog
ICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVw
bGFjZW1lbnQpLT5hcHBseSgpOwogfQogCi1zdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2lu
Z1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYWdyYXBoJiBw
YXJhZ3JhcGgsIFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0UmFuZ2UpCitzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxj
aGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYWdy
YXBoJiBwYXJhZ3JhcGgsIFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0Q2hhcmFjdGVyUmFuZ2UpCiB7Ci0gICAgYXV0
byYgc2NvcGUgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPihwYXJhZ3JhcGgucGFyYWdyYXBoUmFu
Z2UoKS5zdGFydENvbnRhaW5lcigpLnJvb3ROb2RlKCkpOwotCi0gICAgc2l6ZV90IHBhcmFncmFw
aExvY2F0aW9uOwotICAgIHNpemVfdCBwYXJhZ3JhcGhMZW5ndGg7Ci0gICAgVGV4dEl0ZXJhdG9y
OjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZSgmc2NvcGUsICZwYXJhZ3JhcGgucGFyYWdy
YXBoUmFuZ2UoKSwgcGFyYWdyYXBoTG9jYXRpb24sIHBhcmFncmFwaExlbmd0aCk7CisgICAgYXV0
byBzY29wZU5vZGUgPSBtYWtlUmVmKGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHBhcmFncmFwaC5w
YXJhZ3JhcGhSYW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkpOworICAgIGF1dG8g
cGFyYWdyYXBoQ2hhcmFjdGVyUmFuZ2UgPSBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGVDb250ZW50cyhzY29wZU5vZGUpLCBwYXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2Uo
KSk7CiAKICAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb1JlcGxh
Y2UsIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKIAogICAgIC8vIFRleHRDaGVja2luZ1BhcmFncmFw
aCBtYXkgYmUgb3JwaGFuZWQgYWZ0ZXIgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtdXRhdGVk
IERPTS4KICAgICAvLyBTZWUgPHJkYXI6Ly8xMDMwNTMxNT4sIGh0dHA6Ly93ZWJraXQub3JnL2Iv
ODk1MjYuCiAKLSAgICBhdXRvIG5ld1BhcmFncmFwaFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJh
bmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhzY29wZSksIHsgcGFyYWdyYXBoTG9j
YXRpb24sIHBhcmFncmFwaExlbmd0aCArIHJlcGxhY2VtZW50Lmxlbmd0aCgpIC0gcmVzdWx0UmFu
Z2UubGVuZ3RoIH0pOwotICAgIGF1dG8gc3BlbGxDaGVja2luZ1JhbmdlID0gcmVzb2x2ZUNoYXJh
Y3RlclJhbmdlKG5ld1BhcmFncmFwaFJhbmdlLCB7IHJlc3VsdFJhbmdlLmxvY2F0aW9uLCByZXBs
YWNlbWVudC5sZW5ndGgoKSB9KTsKKyAgICBwYXJhZ3JhcGhDaGFyYWN0ZXJSYW5nZS5sZW5ndGgg
Kz0gcmVwbGFjZW1lbnQubGVuZ3RoKCkgLSByZXN1bHRDaGFyYWN0ZXJSYW5nZS5sZW5ndGg7Cisg
ICAgYXV0byBuZXdQYXJhZ3JhcGhSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoc2NvcGVOb2RlKSwgcGFyYWdyYXBoQ2hhcmFjdGVyUmFu
Z2UpOworICAgIGF1dG8gc3BlbGxDaGVja2luZ1JhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdl
KG5ld1BhcmFncmFwaFJhbmdlLCB7IHJlc3VsdENoYXJhY3RlclJhbmdlLmxvY2F0aW9uLCByZXBs
YWNlbWVudC5sZW5ndGgoKSB9KTsKICAgICBwYXJhZ3JhcGggPSBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGgoY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShz
cGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UobmV3UGFyYWdyYXBoUmFuZ2UpKTsK
IH0KIApAQCAtMjg4NSw3ICsyODgyLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9y
KGNvbnN0IFNwZWxsQ2hlY2tSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBWZWN0b3I8VGUKICAgICAg
ICAgICAgIGlmICghKHNob3VsZFBlcmZvcm1SZXBsYWNlbWVudCB8fCBzaG91bGRDaGVja0ZvckNv
cnJlY3Rpb24gfHwgc2hvdWxkTWFya0xpbmspIHx8ICFkb1JlcGxhY2VtZW50KQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcgPSBw
bGFpblRleHQocmFuZ2VUb1JlcGxhY2UucHRyKCkpOworICAgICAgICAgICAgU3RyaW5nIHJlcGxh
Y2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlKTsKICAgICAgICAgICAgIGNvbnN0
IGJvb2wgZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQgPSBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQocmVz
dWx0c1tpXSwgcmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAgIGlm
ICghZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkBAIC0yOTMxLDcgKzI5MjgsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VG
b3IoY29uc3QgU3BlbGxDaGVja1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFZlY3RvcjxUZQogCiAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbikgewogICAgICAgICAgICAgICAgICAgICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSBwYXJh
Z3JhcGguc3VicmFuZ2UoeyByZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnQubGVuZ3RoKCkgfSk7
Ci0gICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpBY2NlcHRlZCwg
cmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50UmFuZ2UucHRyKCkpOworICAgICAgICAgICAgICAg
ICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6QWNjZXB0ZWQsIHJlcGxhY2VkU3RyaW5nLCBy
ZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBt
YXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29uJ3Qg
YmUgcmUtY29ycmVjdGVkLgogICAgICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPm1hcmtDb3JyZWN0aW9uKHJlcGxhY2VtZW50UmFuZ2UsIHJlcGxhY2VkU3RyaW5n
KTsKQEAgLTI5NjYsMTAgKzI5NjMsMTAgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxh
Y2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwotICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNob3VsZElu
c2VydFRleHQocmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpQYXN0ZWQpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9hbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2U6OlJldmVydGVkLCByZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpKTsKKyAg
ICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5nLCAqc2Vs
ZWN0aW9uKTsKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKCpzZWxlY3Rpb24p
OwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywgU2VsZWN0UmVw
bGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogICAg
IGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKENoYXJhY3RlclJhbmdlKHBh
cmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKSk7CkBAIC0z
MjAxLDcgKzMxOTgsNyBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbigqcmFuZ2UsIERPV05TVFJFQU0pOwogCiAgICAgLy8gVHJhbnNw
b3NlIHRoZSB0d28gY2hhcmFjdGVycy4KLSAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dChyYW5n
ZS5nZXQoKSk7CisgICAgU3RyaW5nIHRleHQgPSBwbGFpblRleHQoKnJhbmdlKTsKICAgICBpZiAo
dGV4dC5sZW5ndGgoKSAhPSAyKQogICAgICAgICByZXR1cm47CiAgICAgU3RyaW5nIHRyYW5zcG9z
ZWQgPSB0ZXh0LnJpZ2h0KDEpICsgdGV4dC5sZWZ0KDEpOwpAQCAtMzIyMSw3ICszMjE4LDcgQEAg
dm9pZCBFZGl0b3I6OnRyYW5zcG9zZSgpCiAKIHZvaWQgRWRpdG9yOjphZGRSYW5nZVRvS2lsbFJp
bmcoY29uc3QgUmFuZ2UmIHJhbmdlLCBLaWxsUmluZ0luc2VydGlvbk1vZGUgbW9kZSkKIHsKLSAg
ICBhZGRUZXh0VG9LaWxsUmluZyhwbGFpblRleHQoJnJhbmdlKSwgbW9kZSk7CisgICAgYWRkVGV4
dFRvS2lsbFJpbmcocGxhaW5UZXh0KHJhbmdlKSwgbW9kZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjph
ZGRUZXh0VG9LaWxsUmluZyhjb25zdCBTdHJpbmcmIHRleHQsIEtpbGxSaW5nSW5zZXJ0aW9uTW9k
ZSBtb2RlKQpAQCAtMzk3NSw3ICszOTcyLDcgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2Fu
ZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgPSBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlv
bihtX2ZyYW1lKTsKICAgICBpZiAocmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyAmJiBjYW5k
aWRhdGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCi0gICAgICAgIHJldHVybiBwbGFpblRl
eHQocmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZy5nZXQoKSk7CisgICAgICAgIHJldHVybiBw
bGFpblRleHQoKnJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcpOwogCiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQuY3BwCmluZGV4IGFkNzgyMzJhOGEyMDg2N2NkNTk5MWIzZDJmODBi
M2Y0ZDRiNmY2MGUuLjU0NjBiNzVjYWJkMjNkZDU1YWQ5MzlkMDE0YjU4MjkyZWQ5ZDRlYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZC5jcHAKQEAgLTYzLDggKzYzLDcgQEAgdm9pZCBSZXBsYWNlUmFuZ2VXaXRoVGV4dENv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHBy
ZXZpb3VzVGV4dCA9IHBsYWluVGV4dChtX3JhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICBp
ZiAoIXByZXZpb3VzVGV4dC5sZW5ndGgoKSkKKyAgICBpZiAoIWNoYXJhY3RlckNvdW50KCptX3Jh
bmdlVG9CZVJlcGxhY2VkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHNlbGVjdGlvbiwgRnJhbWVTZWxl
Y3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggZDg2NmU4NTUy
OGIyYjFjMGEzNWE3MmZjMzUwYWZjODc4ZGM3ODBhNy4uNTI3OGRiOTViZGY1MzhhZGQ3YjhjNjRh
MjFjOTkxNzAyZjY1ZTc4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBSZXBsYWNlbWVudEZy
YWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBj
b25zdCBWaXNpYgogICAgIH0KICAgICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gVmlzaWJs
ZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRlci5nZXQoKSkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKLSAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dChyYW5nZS5nZXQo
KSwgc3RhdGljX2Nhc3Q8VGV4dEl0ZXJhdG9yQmVoYXZpb3I+KFRleHRJdGVyYXRvckVtaXRzT3Jp
Z2luYWxUZXh0IHwgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkpOworICAgIFN0
cmluZyB0ZXh0ID0gcmFuZ2UgPyBwbGFpblRleHQoKnJhbmdlLCBzdGF0aWNfY2FzdDxUZXh0SXRl
cmF0b3JCZWhhdmlvcj4oVGV4dEl0ZXJhdG9yRW1pdHNPcmlnaW5hbFRleHQgfCBUZXh0SXRlcmF0
b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KSkgOiBlbXB0eVN0cmluZygpOwogCiAgICAgcmVtb3Zl
SW50ZXJjaGFuZ2VOb2Rlcyhob2xkZXIuZ2V0KCkpOwogICAgIHJlbW92ZVVucmVuZGVyZWROb2Rl
cyhob2xkZXIuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNTEzMzE0NTM5M2QxNzNhNTc5ZDBhNTBjMGJm
ZjFjOGUzNWFkODM0Ny4uOTllOGYxNTg4OGVhZTkzZjNkNjhlMDRkODllZmY1NzU2NDZiYzM3OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNv
bW1hbmQuY3BwCkBAIC05OSw3ICs5OSw3IEBAIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZDo6d2lsbEFwcGx5Q29tbWFuZCgpCiAKIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiB7Ci0gICAgbV9jb3JyZWN0ZWQgPSBwbGFpblRleHQobV9yYW5nZVRvQmVDb3Jy
ZWN0ZWQucHRyKCkpOworICAgIG1fY29ycmVjdGVkID0gcGxhaW5UZXh0KG1fcmFuZ2VUb0JlQ29y
cmVjdGVkKTsKICAgICBpZiAoIW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRl
eCA5OWI4ZTMxZGYwZGNjNjJhZjFmYWUwOWQzMTZhYmYwOTkwYjhjOTI1Li5kNzJlMDdmYzJkMWY4
NjFiNjJlNjAwNTkxZjhhMDU5MWIxZTAzZTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0xODcsNyArMTg3LDcgQEAgUmFuZ2UmIFRleHRD
aGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0QXNSYW5nZSgpIGNvbnN0CiBTdHJpbmdWaWV3IFRleHRD
aGVja2luZ1BhcmFncmFwaDo6dGV4dCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fdGV4dC5pc051bGwo
KSkKLSAgICAgICAgbV90ZXh0ID0gcGxhaW5UZXh0KCZwYXJhZ3JhcGhSYW5nZSgpKTsKKyAgICAg
ICAgbV90ZXh0ID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlKCkpOwogICAgIHJldHVybiBtX3Rl
eHQ7IAogfQogCkBAIC0zMzcsNyArMzM3LDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAg
ICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChj
dXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5kT2Zmc2V0KSB7Ci0gICAgICAgICAgICBTdHJp
bmcgcGFyYWdyYXBoU3RyaW5nID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLnB0cigpKTsKKyAg
ICAgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFu
Z2UpOwogICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSA+IDApIHsKICAg
ICAgICAgICAgICAgICBib29sIGZvdW5kR3JhbW1hciA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IHVpbnQ2NF90IHNwZWxsaW5nTG9jYXRpb24gPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCmluZGV4IDIxODY0YzhmNGZjMDVjYjM5YTE5NzA0ZDI1NDQwM2U3ZWE2ODE3
ZGIuLjE3MmUyNjQ0YzIyMTQ0OWM1Yzc3NGYxOWU2MDViZTI1OTg1YTE2NWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRl
ICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3gu
aCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC0xNDEsOCArMTQwLDggQEAgcHJpdmF0ZToKIAogLy8g
LS0tLS0tLS0KIAotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRzSW5Xb3JkID0gc2l6ZW9m
KHVuc2lnbmVkKSAqIDg7Ci1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdEluV29yZE1hc2sg
PSBiaXRzSW5Xb3JkIC0gMTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBiaXRzSW5Xb3JkID0gc2l6ZW9m
KHVuc2lnbmVkKSAqIDg7Citjb25zdGV4cHIgdW5zaWduZWQgYml0SW5Xb3JkTWFzayA9IGJpdHNJ
bldvcmQgLSAxOwogCiB2b2lkIEJpdFN0YWNrOjpwdXNoKGJvb2wgYml0KQogewpAQCAtMTQzNSwy
NCArMTQzNCw2IEBAIHZvaWQgQ2hhcmFjdGVySXRlcmF0b3I6OmFkdmFuY2UoaW50IGNvdW50KQog
ICAgIG1fcnVuT2Zmc2V0ID0gMDsKIH0KIAotc3RhdGljIFJlZjxSYW5nZT4gY2hhcmFjdGVyU3Vi
cmFuZ2UoRG9jdW1lbnQmIGRvY3VtZW50LCBDaGFyYWN0ZXJJdGVyYXRvciYgaXQsIGludCBvZmZz
ZXQsIGludCBsZW5ndGgpCi17Ci0gICAgaXQuYWR2YW5jZShvZmZzZXQpOwotICAgIGlmIChpdC5h
dEVuZCgpKQotICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCk7Ci0KLSAgICBh
dXRvIHN0YXJ0ID0gaXQucmFuZ2UoKS5zdGFydDsKLQotICAgIGlmIChsZW5ndGggPiAxKQotICAg
ICAgICBpdC5hZHZhbmNlKGxlbmd0aCAtIDEpOwotICAgIGlmIChpdC5hdEVuZCgpKQotICAgICAg
ICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCk7Ci0KLSAgICBhdXRvIGVuZCA9IGl0LnJh
bmdlKCkuZW5kOwotCi0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShTaW1wbGVSYW5nZSB7IHN0
YXJ0LCBlbmQgfSk7Ci19Ci0KIEJhY2t3YXJkc0NoYXJhY3Rlckl0ZXJhdG9yOjpCYWNrd2FyZHND
aGFyYWN0ZXJJdGVyYXRvcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgOiBtX3VuZGVy
bHlpbmdJdGVyYXRvcihyYW5nZSkKIHsKQEAgLTE2MjMsNyArMTYwNCw3IEBAIFN0cmluZyBmb2xk
UXVvdGVNYXJrcyhjb25zdCBTdHJpbmcmIHN0cmluZ1RvRm9sZCkKIAogI2lmICFVQ09ORklHX05P
X0NPTExBVElPTgogCi1jb25zdCBzaXplX3QgbWluaW11bVNlYXJjaEJ1ZmZlclNpemUgPSA4MTky
OworY29uc3RleHByIHNpemVfdCBtaW5pbXVtU2VhcmNoQnVmZmVyU2l6ZSA9IDgxOTI7CiAKICNp
Zm5kZWYgTkRFQlVHCiBzdGF0aWMgYm9vbCBzZWFyY2hlckluVXNlOwpAQCAtMTg3Niw3ICsxODU3
LDcgQEAgc3RhdGljIGJvb2wgaXNOb25MYXRpbjFTZXBhcmF0b3IoVUNoYXIzMiBjaGFyYWN0ZXIp
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NlcGFyYXRvcihVQ2hhcjMyIGNoYXJhY3RlcikKIHsK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBsYXRpbjFTZXBhcmF0b3JUYWJsZVsyNTZdID0geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBsYXRpbjFTZXBhcmF0b3JUYWJsZVsyNTZdID0gewogICAg
ICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogICAg
ICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogICAg
ICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAvLyBz
cGFjZSAhICIgIyAkICUgJiAnICggKSAqICsgLCAtIC4gLwpAQCAtMjI3Niw3ICsyMjU3LDcgQEAg
aW5saW5lIHNpemVfdCBTZWFyY2hCdWZmZXI6OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCkKICAgICAgICAgYXBwZW5kKGNoYXJhY3RlcnNbMF0sIHRydWUpOwog
ICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgY29uc3QgaW50IG1heEZvbGRlZENoYXJhY3Rl
cnMgPSAxNjsgLy8gc2Vuc2libGUgbWF4aW11bSBpcyAzLCB0aGlzIHNob3VsZCBiZSBtb3JlIHRo
YW4gZW5vdWdoCisgICAgY29uc3RleHByIGludCBtYXhGb2xkZWRDaGFyYWN0ZXJzID0gMTY7IC8v
IHNlbnNpYmxlIG1heGltdW0gaXMgMywgdGhpcyBzaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaAog
ICAgIFVDaGFyIGZvbGRlZENoYXJhY3RlcnNbbWF4Rm9sZGVkQ2hhcmFjdGVyc107CiAgICAgVUVy
cm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICAgaW50IG51bUZvbGRlZENoYXJhY3Rl
cnMgPSB1X3N0ckZvbGRDYXNlKGZvbGRlZENoYXJhY3RlcnMsIG1heEZvbGRlZENoYXJhY3RlcnMs
IGNoYXJhY3RlcnMsIDEsIFVfRk9MRF9DQVNFX0RFRkFVTFQsICZzdGF0dXMpOwpAQCAtMjQxNSwz
MSArMjM5Niw2IEBAIFNpbXBsZVJhbmdlIHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1w
bGVSYW5nZSYgc2NvcGUsIENoYXJhY3RlclJhbmdlIHJhbmdlCiAgICAgcmV0dXJuIHJlc3VsdFJh
bmdlOwogfQogCi1Cb3VuZGFyeVBvaW50IHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihjb25zdCBT
aW1wbGVSYW5nZSYgc2NvcGUsIHVpbnQ2NF90IGxvY2F0aW9uLCBUZXh0SXRlcmF0b3JCZWhhdmlv
ciBiZWhhdmlvcikKLXsKLSAgICByZXR1cm4gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNjb3BlLCB7
IGxvY2F0aW9uLCAwIH0sIGJlaGF2aW9yKS5zdGFydDsKLX0KLQotYm9vbCBUZXh0SXRlcmF0b3I6
OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKE5vZGUqIHNjb3BlLCBjb25zdCBSYW5nZSog
cmFuZ2UsIHNpemVfdCYgbG9jYXRpb24sIHNpemVfdCYgbGVuZ3RoKQotewotICAgIGxvY2F0aW9u
ID0gbm90Rm91bmQ7Ci0gICAgbGVuZ3RoID0gMDsKLQotICAgIC8vIFRoZSBjcml0aWNhbCBhc3N1
bXB0aW9uIGlzIHRoYXQgdGhpcyBvbmx5IGdldHMgY2FsbGVkIHdpdGggcmFuZ2VzIHRoYXQKLSAg
ICAvLyBjb25jZW50cmF0ZSBvbiBhIGdpdmVuIGFyZWEgY29udGFpbmluZyB0aGUgc2VsZWN0aW9u
IHJvb3QuIFRoaXMgaXMgZG9uZQotICAgIC8vIGJlY2F1c2Ugb2YgdGV4dCBmaWVsZHMgYW5kIHRl
eHRhcmVhcy4gVGhlIERPTSBmb3IgdGhvc2UgaXMgbm90IGRpcmVjdGx5Ci0gICAgLy8gaW4gdGhl
IGRvY3VtZW50IERPTSwgc28gZW5zdXJlIHRoYXQgdGhlIHJhbmdlIGRvZXMgbm90IGNyb3NzIGEg
Ym91bmRhcnkKLSAgICAvLyBvZiBvbmUgb2YgdGhvc2UuCi0gICAgaWYgKCZyYW5nZS0+c3RhcnRD
b250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuaXNEZXNjZW5k
YW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCZyYW5nZS0+ZW5k
Q29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWluZXIoKS5pc0Rlc2NlbmRh
bnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGxvY2F0aW9uID0gY2hh
cmFjdGVyQ291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBy
YW5nZS0+c3RhcnRPZmZzZXQoKSB9IH0pOwotICAgIGxlbmd0aCA9IGNoYXJhY3RlckNvdW50KHsg
eyAqc2NvcGUsIDAgfSwgeyByYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQo
KSB9IH0pIC0gbG9jYXRpb247Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIC8vIC0tLS0tLS0tCiAK
IGJvb2wgaGFzQW55UGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJh
dG9yQmVoYXZpb3IgYmVoYXZpb3IpCkBAIC0yNDU0LDcgKzI0MTAsNyBAQCBib29sIGhhc0FueVBs
YWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9yIGJl
aGF2aW9yKQogU3RyaW5nIHBsYWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFRleHRJ
dGVyYXRvckJlaGF2aW9yIGRlZmF1bHRCZWhhdmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcpCiB7
CiAgICAgLy8gVGhlIGluaXRpYWwgYnVmZmVyIHNpemUgY2FuIGJlIGNyaXRpY2FsIGZvciBwZXJm
b3JtYW5jZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTkyCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IDEgPDwgMTU7CisgICAg
Y29uc3RleHByIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IDEgPDwgMTU7CiAKICAgICBhdXRv
IGRvY3VtZW50ID0gbWFrZVJlZihyYW5nZS5zdGFydC5kb2N1bWVudCgpKTsKIApAQCAtMjQ4MSwz
MiArMjQzNywxMSBAQCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgZGVmYXVsdEJlaGF2aW9yLAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVN0cmluZyBwbGFpblRleHQoY29uc3QgUmFuZ2UqIHJhbmdlLCBUZXh0SXRlcmF0b3JC
ZWhhdmlvciBkZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nKQotewotICAgIGlm
ICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBwbGFp
blRleHQoKnJhbmdlLCBkZWZhdWx0QmVoYXZpb3IsIGlzRGlzcGxheVN0cmluZyk7Ci19Ci0KLVN0
cmluZyBwbGFpblRleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvckZvclRlc3RpbmcoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9yIChTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0
b3IuYWR2YW5jZSgpKQotICAgICAgICByZXN1bHQuaW5zZXJ0KGJhY2t3YXJkc0l0ZXJhdG9yLnRl
eHQoKS50b1N0cmluZygpLCAwKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBTdHJpbmcgcGxh
aW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgZGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmluZykK
IHsKICAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlLCBkZWZhdWx0QmVoYXZpb3IsIGlzRGlzcGxh
eVN0cmluZykucmVwbGFjZShub0JyZWFrU3BhY2UsICcgJyk7CiB9CiAKLXN0YXRpYyBTaW1wbGVS
YW5nZSBjb2xsYXBzZWRUb0JvdW5kYXJ5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBm
b3J3YXJkKQotewotICAgIGF1dG8mIGJvdW5kYXJ5ID0gZm9yd2FyZCA/IHJhbmdlLmVuZCA6IHJh
bmdlLnN0YXJ0OwotICAgIHJldHVybiB7IGJvdW5kYXJ5LCBib3VuZGFyeSB9OwotfQotCiBzdGF0
aWMgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgZmluZEl0ZXJhdG9yT3B0aW9ucyhGaW5kT3B0aW9ucyBv
cHRpb25zKQogewogICAgIFRleHRJdGVyYXRvckJlaGF2aW9yIGl0ZXJhdG9yT3B0aW9ucyA9IFRl
eHRJdGVyYXRvckVudGVyc1RleHRDb250cm9scyB8IFRleHRJdGVyYXRvckNsaXBzVG9GcmFtZUFu
Y2VzdG9yczsKQEAgLTI1MTUsMjAgKzI0NTAsMTkgQEAgc3RhdGljIFRleHRJdGVyYXRvckJlaGF2
aW9yIGZpbmRJdGVyYXRvck9wdGlvbnMoRmluZE9wdGlvbnMgb3B0aW9ucykKICAgICByZXR1cm4g
aXRlcmF0b3JPcHRpb25zOwogfQogCi1zdGF0aWMgdm9pZCBmaW5kUGxhaW5UZXh0TWF0Y2hlcyhj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9u
cyBvcHRpb25zLCBjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2woc2l6ZV90LCBzaXplX3QpPiYgbWF0
Y2gpCitzdGF0aWMgdm9pZCBmb3JFYWNoTWF0Y2goY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBj
b25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgY29uc3QgRnVuY3Rpb248
Ym9vbChDaGFyYWN0ZXJSYW5nZSk+JiBtYXRjaCkKIHsKICAgICBTZWFyY2hCdWZmZXIgYnVmZmVy
KHRhcmdldCwgb3B0aW9ucyk7CiAgICAgaWYgKGJ1ZmZlci5uZWVkc01vcmVDb250ZXh0KCkpIHsK
LSAgICAgICAgUmVmPFJhbmdlPiBiZWZvcmVTdGFydFJhbmdlID0gcmFuZ2Uuc3RhcnQuZG9jdW1l
bnQoKS5jcmVhdGVSYW5nZSgpOwotICAgICAgICBiZWZvcmVTdGFydFJhbmdlLT5zZXRFbmQocmFu
Z2Uuc3RhcnQuY29udGFpbmVyLmNvcHlSZWYoKSwgcmFuZ2Uuc3RhcnQub2Zmc2V0KTsKLSAgICAg
ICAgZm9yIChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9y
KGJlZm9yZVN0YXJ0UmFuZ2UuZ2V0KCkpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFj
a3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKSB7CisgICAgICAgIGF1dG8gYmVmb3JlU3RhcnRSYW5n
ZSA9IFNpbXBsZVJhbmdlIHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMocmFu
Z2Uuc3RhcnQuZG9jdW1lbnQoKSksIHJhbmdlLnN0YXJ0IH07CisgICAgICAgIGZvciAoU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihiZWZvcmVTdGFydFJh
bmdlKTsgIWJhY2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFu
Y2UoKSkgewogICAgICAgICAgICAgYnVmZmVyLnByZXBlbmRDb250ZXh0KGJhY2t3YXJkc0l0ZXJh
dG9yLnRleHQoKSk7CiAgICAgICAgICAgICBpZiAoIWJ1ZmZlci5uZWVkc01vcmVDb250ZXh0KCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBDaGFyYWN0
ZXJJdGVyYXRvciBmaW5kSXRlcmF0b3IoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgZmluZEl0ZXJh
dG9yT3B0aW9ucyhvcHRpb25zKSk7CisgICAgQ2hhcmFjdGVySXRlcmF0b3IgZmluZEl0ZXJhdG9y
KHJhbmdlLCBmaW5kSXRlcmF0b3JPcHRpb25zKG9wdGlvbnMpKTsKICAgICB3aGlsZSAoIWZpbmRJ
dGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIGZpbmRJdGVyYXRvci5hZHZhbmNlKGJ1ZmZlci5h
cHBlbmQoZmluZEl0ZXJhdG9yLnRleHQoKSkpOwogICAgICAgICB3aGlsZSAoMSkgewpAQCAtMjU0
Myw1MyArMjQ3Nyw2OSBAQCBzdGF0aWMgdm9pZCBmaW5kUGxhaW5UZXh0TWF0Y2hlcyhjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LAogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgc2l6ZV90IGxhc3RDaGFyYWN0ZXJJbkJ1ZmZlck9mZnNldCA9IGZpbmRJdGVy
YXRvci5jaGFyYWN0ZXJPZmZzZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChsYXN0Q2hhcmFjdGVy
SW5CdWZmZXJPZmZzZXQgPj0gbWF0Y2hTdGFydE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAobWF0
Y2gobGFzdENoYXJhY3RlckluQnVmZmVyT2Zmc2V0IC0gbWF0Y2hTdGFydE9mZnNldCwgbmV3TWF0
Y2hMZW5ndGgpKQorICAgICAgICAgICAgaWYgKG1hdGNoKENoYXJhY3RlclJhbmdlKGxhc3RDaGFy
YWN0ZXJJbkJ1ZmZlck9mZnNldCAtIG1hdGNoU3RhcnRPZmZzZXQsIG5ld01hdGNoTGVuZ3RoKSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMg
U2ltcGxlUmFuZ2UgcmFuZ2VGb3JNYXRjaChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIEZpbmRP
cHRpb25zIG9wdGlvbnMsIHNpemVfdCBtYXRjaFN0YXJ0LCBzaXplX3QgbWF0Y2hMZW5ndGgsIGJv
b2wgc2VhcmNoRm9yd2FyZCkKK3N0YXRpYyBTaW1wbGVSYW5nZSByYW5nZUZvck1hdGNoKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucywgQ2hhcmFjdGVyUmFuZ2Ug
bWF0Y2gpCiB7Ci0gICAgaWYgKCFtYXRjaExlbmd0aCkKLSAgICAgICAgcmV0dXJuIGNvbGxhcHNl
ZFRvQm91bmRhcnkocmFuZ2UsIHNlYXJjaEZvcndhcmQpOwotICAgIENoYXJhY3Rlckl0ZXJhdG9y
IHJhbmdlQ29tcHV0ZUl0ZXJhdG9yKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGZpbmRJdGVyYXRv
ck9wdGlvbnMob3B0aW9ucykpOwotICAgIHJldHVybiBjaGFyYWN0ZXJTdWJyYW5nZShyYW5nZS5z
dGFydC5kb2N1bWVudCgpLCByYW5nZUNvbXB1dGVJdGVyYXRvciwgbWF0Y2hTdGFydCwgbWF0Y2hM
ZW5ndGgpOworICAgIGF1dG8gbm9NYXRjaFJlc3VsdCA9IFsmXSAoKSB7CisgICAgICAgIGF1dG8m
IGJvdW5kYXJ5ID0gb3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpID8gcmFuZ2Uuc3RhcnQgOiBy
YW5nZS5lbmQ7CisgICAgICAgIHJldHVybiBTaW1wbGVSYW5nZSB7IGJvdW5kYXJ5LCBib3VuZGFy
eSB9OworICAgIH07CisKKyAgICBpZiAoIW1hdGNoLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG5v
TWF0Y2hSZXN1bHQoKTsKKworICAgIENoYXJhY3Rlckl0ZXJhdG9yIGl0KHJhbmdlLCBmaW5kSXRl
cmF0b3JPcHRpb25zKG9wdGlvbnMpKTsKKworICAgIGl0LmFkdmFuY2UobWF0Y2gubG9jYXRpb24p
OworICAgIGlmIChpdC5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbm9NYXRjaFJlc3VsdCgpOwor
ICAgIGF1dG8gc3RhcnQgPSBpdC5yYW5nZSgpLnN0YXJ0OworCisgICAgaXQuYWR2YW5jZShtYXRj
aC5sZW5ndGggLSAxKTsKKyAgICBpZiAoaXQuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG5vTWF0
Y2hSZXN1bHQoKTsKKworICAgIHJldHVybiB7IFdURk1vdmUoc3RhcnQpLCBpdC5yYW5nZSgpLmVu
ZCB9OwogfQogCi1TaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1
bnNpZ25lZCB0YXJnZXRPZmZzZXQpCitTaW1wbGVSYW5nZSBmaW5kQ2xvc2VzdFBsYWluVGV4dChj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9u
cyBvcHRpb25zLCB1aW50NjRfdCB0YXJnZXRPZmZzZXQpCiB7Ci0gICAgc2l6ZV90IG1hdGNoU3Rh
cnQgPSAwOwotICAgIHNpemVfdCBtYXRjaExlbmd0aCA9IDA7Ci0gICAgc2l6ZV90IGRpc3RhbmNl
ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKLSAgICBhdXRvIG1hdGNoID0g
W3RhcmdldE9mZnNldCwgJmRpc3RhbmNlLCAmbWF0Y2hTdGFydCwgJm1hdGNoTGVuZ3RoXSAoc2l6
ZV90IHN0YXJ0LCBzaXplX3QgbGVuZ3RoKSB7Ci0gICAgICAgIHNpemVfdCBuZXdEaXN0YW5jZSA9
IHN0ZDo6bWluKGFicyhzdGF0aWNfY2FzdDxzaWduZWQ+KHN0YXJ0IC0gdGFyZ2V0T2Zmc2V0KSks
IGFicyhzdGF0aWNfY2FzdDxzaWduZWQ+KHN0YXJ0ICsgbGVuZ3RoIC0gdGFyZ2V0T2Zmc2V0KSkp
OwotICAgICAgICBpZiAobmV3RGlzdGFuY2UgPCBkaXN0YW5jZSkgewotICAgICAgICAgICAgbWF0
Y2hTdGFydCA9IHN0YXJ0OwotICAgICAgICAgICAgbWF0Y2hMZW5ndGggPSBsZW5ndGg7Ci0gICAg
ICAgICAgICBkaXN0YW5jZSA9IG5ld0Rpc3RhbmNlOwotICAgICAgICB9CisgICAgQ2hhcmFjdGVy
UmFuZ2UgY2xvc2VzdE1hdGNoOworICAgIHVpbnQ2NF90IGNsb3Nlc3RNYXRjaERpc3RhbmNlID0g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgIGZvckVhY2hNYXRjaChy
YW5nZSwgdGFyZ2V0LCBvcHRpb25zLCBbJl0gKENoYXJhY3RlclJhbmdlIG1hdGNoKSB7CisgICAg
ICAgIGF1dG8gZGlzdGFuY2UgPSBbXSAodWludDY0X3QgYSwgdWludDY0X3QgYikgLT4gdWludDY0
X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6YWJzKHN0YXRpY19jYXN0PGludDY0X3Q+KGEg
LSBiKSk7CisgICAgICAgIH07CisgICAgICAgIGF1dG8gbWF0Y2hEaXN0YW5jZSA9IHN0ZDo6bWlu
KGRpc3RhbmNlKG1hdGNoLmxvY2F0aW9uLCB0YXJnZXRPZmZzZXQpLCBkaXN0YW5jZShtYXRjaC5s
b2NhdGlvbiArIG1hdGNoLmxlbmd0aCwgdGFyZ2V0T2Zmc2V0KSk7CisgICAgICAgIGlmIChtYXRj
aERpc3RhbmNlID4gY2xvc2VzdE1hdGNoRGlzdGFuY2UpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChtYXRjaERpc3RhbmNlID09IGNsb3Nlc3RNYXRjaERpc3RhbmNlICYm
ICFvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGNsb3Nlc3RNYXRjaCA9IG1hdGNoOworICAgICAgICBpZiAoIW1hdGNoRGlzdGFu
Y2UgJiYgIW9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBjbG9zZXN0TWF0Y2hEaXN0YW5jZSA9IG1hdGNoRGlzdGFuY2U7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwotCi0gICAgZmluZFBsYWluVGV4dE1hdGNoZXMocmFu
Z2UsIHRhcmdldCwgb3B0aW9ucywgV1RGTW92ZShtYXRjaCkpOwotICAgIHJldHVybiByYW5nZUZv
ck1hdGNoKHJhbmdlLCBvcHRpb25zLCBtYXRjaFN0YXJ0LCBtYXRjaExlbmd0aCwgIW9wdGlvbnMu
Y29udGFpbnMoQmFja3dhcmRzKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJhbmdlRm9yTWF0Y2go
cmFuZ2UsIG9wdGlvbnMsIGNsb3Nlc3RNYXRjaCk7CiB9CiAKIFNpbXBsZVJhbmdlIGZpbmRQbGFp
blRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmlu
ZE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBib29sIHNlYXJjaEZvcndhcmQgPSAhb3B0aW9ucy5j
b250YWlucyhCYWNrd2FyZHMpOwotICAgIHNpemVfdCBtYXRjaFN0YXJ0ID0gMDsKLSAgICBzaXpl
X3QgbWF0Y2hMZW5ndGggPSAwOwotICAgIGF1dG8gbWF0Y2ggPSBbc2VhcmNoRm9yd2FyZCwgJm1h
dGNoU3RhcnQsICZtYXRjaExlbmd0aF0gKHNpemVfdCBzdGFydCwgc2l6ZV90IGxlbmd0aCkgewot
ICAgICAgICBtYXRjaFN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIG1hdGNoTGVuZ3RoID0gbGVuZ3Ro
OwotICAgICAgICAvLyBMb29rIGZvciB0aGUgbGFzdCBtYXRjaCB3aGVuIHNlYXJjaGluZyBiYWNr
d2FyZHMgaW5zdGVhZC4KLSAgICAgICAgcmV0dXJuIHNlYXJjaEZvcndhcmQ7Ci0gICAgfTsKLQot
ICAgIGZpbmRQbGFpblRleHRNYXRjaGVzKHJhbmdlLCB0YXJnZXQsIG9wdGlvbnMsIFdURk1vdmUo
bWF0Y2gpKTsKLSAgICByZXR1cm4gcmFuZ2VGb3JNYXRjaChyYW5nZSwgb3B0aW9ucywgbWF0Y2hT
dGFydCwgbWF0Y2hMZW5ndGgsIHNlYXJjaEZvcndhcmQpOworICAgIC8vIFdoZW4gc2VhcmNoaW5n
IGZvcndhcmQgc3RvcCBzaW5jZSB3ZSB3YW50IHRoZSBmaXJzdCBtYXRjaC4KKyAgICAvLyBXaGVu
IHNlYXJjaGluZyBiYWNrd2FyZCBrZWVwIGdvaW5nIHNpbmNlIHdlIHdhbnQgdGhlIGxhc3QgbWF0
Y2guCisgICAgYm9vbCBzdG9wQWZ0ZXJGaW5kaW5nTWF0Y2ggPSAhb3B0aW9ucy5jb250YWlucyhC
YWNrd2FyZHMpOworICAgIENoYXJhY3RlclJhbmdlIGxhc3RNYXRjaEZvdW5kOworICAgIGZvckVh
Y2hNYXRjaChyYW5nZSwgdGFyZ2V0LCBvcHRpb25zLCBbJl0gKENoYXJhY3RlclJhbmdlIG1hdGNo
KSB7CisgICAgICAgIGxhc3RNYXRjaEZvdW5kID0gbWF0Y2g7CisgICAgICAgIHJldHVybiBzdG9w
QWZ0ZXJGaW5kaW5nTWF0Y2g7CisgICAgfSk7CisgICAgcmV0dXJuIHJhbmdlRm9yTWF0Y2gocmFu
Z2UsIG9wdGlvbnMsIGxhc3RNYXRjaEZvdW5kKTsKIH0KIAogYm9vbCBjb250YWluc1BsYWluVGV4
dChjb25zdCBTdHJpbmcmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlv
bnMgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IGUxNjAy
ODc1YjJmNzVlZDMxZTc1MDFjYWEzMDBiNGM4ZjYzOWJmMmUuLjlkZWE3MzNiNmIxZjNjNjExOWVi
Njg5MzE0Njc4MDI2MTVlNzFmNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
aApAQCAtMzQsMjMgKzM0LDI3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmFu
Z2U7CiBjbGFzcyBSZW5kZXJUZXh0RnJhZ21lbnQ7CiAKLS8vIEZJWE1FOiBEZWxldGUgdGhpcyBv
dmVybG9hZCBhZnRlciBtb3ZpbmcgYWxsIHRoZSBjYWxsZXJzIHRvIHRoZSBTaW1wbGVSYW5nZSB2
ZXJzaW9uLgotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dChjb25zdCBSYW5nZSosIFRl
eHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlz
RGlzcGxheVN0cmluZyA9IGZhbHNlKTsKKy8vIENoYXJhY3RlciByYW5nZXMgYmFzZWQgb24gY2hh
cmFjdGVycyBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgorV0VCQ09SRV9FWFBPUlQgdWludDY0X3Qg
Y2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9
IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CitDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJS
YW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiBzdGFydCwgY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0
SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7CitDaGFyYWN0
ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc2NvcGUsIGNvbnN0IFNp
bXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVo
YXZpb3IpOworQm91bmRhcnlQb2ludCByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24oY29uc3QgU2lt
cGxlUmFuZ2UmIHNjb3BlLCB1aW50NjRfdCwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRl
cmF0b3JEZWZhdWx0QmVoYXZpb3IpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgcmVzb2x2
ZUNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzY29wZSwgQ2hhcmFjdGVyUmFuZ2Us
IFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIAor
Ly8gVGV4dCBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBs
YWluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0
ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmluZyA9IGZhbHNlKTsKK1dF
QkNPUkVfRVhQT1JUIGJvb2wgaGFzQW55UGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwogV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShjb25zdCBTaW1w
bGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2
aW9yLCBib29sIGlzRGlzcGxheVN0cmluZyA9IGZhbHNlKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBwbGFpblRleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvckZvclRlc3RpbmcoY29uc3QgU2lt
cGxlUmFuZ2UmKTsKIAorLy8gRmluZCB3aXRoaW4gdGhlIGRvY3VtZW50LCBiYXNlZCBvbiB0aGUg
dGV4dCBmcm9tIHRoZSB0ZXh0IGl0ZXJhdG9yLgogU2ltcGxlUmFuZ2UgZmluZFBsYWluVGV4dChj
b25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zKTsKLVdFQkNPUkVf
RVhQT1JUIFNpbXBsZVJhbmdlIGZpbmRDbG9zZXN0UGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdl
JiwgY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKLVdFQkNPUkVfRVhQT1JU
IGJvb2wgaGFzQW55UGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVo
YXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOworV0VCQ09SRV9FWFBPUlQgU2lt
cGxlUmFuZ2UgZmluZENsb3Nlc3RQbGFpblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBT
dHJpbmcmLCBGaW5kT3B0aW9ucywgdWludDY0X3QgdGFyZ2V0Q2hhcmFjdGVyT2Zmc2V0KTsKIGJv
b2wgY29udGFpbnNQbGFpblRleHQoY29uc3QgU3RyaW5nJiBkb2N1bWVudCwgY29uc3QgU3RyaW5n
JiwgRmluZE9wdGlvbnMpOyAvLyBMZXRzIHVzIHVzZSB0aGUgc2VhcmNoIGFsZ29yaXRobSBvbiBh
IHN0cmluZy4KIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmb2xkUXVvdGVNYXJrcyhjb25zdCBTdHJp
bmcmKTsKIAotLy8gRklYTUU6IE1vdmUgdGhpcyBzb21ld2hlcmUgZWxzZSBpbiB0aGUgZWRpdGlu
ZyBkaXJlY3RvcnkuIEl0IGRvZXNuJ3QgYmVsb25nIGhlcmUuCisvLyBGSVhNRTogTW92ZSB0aGlz
IHNvbWV3aGVyZSBlbHNlIGluIHRoZSBlZGl0aW5nIGRpcmVjdG9yeS4gSXQgZG9lc24ndCBiZWxv
bmcgaW4gdGhlIGhlYWRlciB3aXRoIFRleHRJdGVyYXRvci4KIGJvb2wgaXNSZW5kZXJlclJlcGxh
Y2VkRWxlbWVudChSZW5kZXJPYmplY3QqKTsKIAogLy8gRklYTUU6IE1vdmUgZWFjaCBpdGVyYXRv
ciBjbGFzcyBpbnRvIGEgc2VwYXJhdGUgaGVhZGVyIGZpbGUuCkBAIC0xMDMsOSArMTA3LDYgQEAg
cHVibGljOgogICAgIGNvbnN0IFRleHRJdGVyYXRvckNvcHlhYmxlVGV4dCYgY29weWFibGVUZXh0
KCkgY29uc3QgeyBBU1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV9jb3B5YWJsZVRleHQ7IH0KICAg
ICB2b2lkIGFwcGVuZFRleHRUb1N0cmluZ0J1aWxkZXIoU3RyaW5nQnVpbGRlciYgYnVpbGRlcikg
Y29uc3QgeyBjb3B5YWJsZVRleHQoKS5hcHBlbmRUb1N0cmluZ0J1aWxkZXIoYnVpbGRlcik7IH0K
IAotICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gU2ltcGxlUmFuZ2UgYW5kIENoYXJhY3RlclJh
bmdlIGFuZCBtb3ZlIG91dCBvZiB0aGlzIGNsYXNzIHRvIHRoZSB0b3AgbGV2ZWwuCi0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9k
ZSogc2NvcGUsIGNvbnN0IFJhbmdlKiwgc2l6ZV90JiBsb2NhdGlvbiwgc2l6ZV90JiBsZW5ndGgp
OwotCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdCgpOwogICAgIHZvaWQgZXhpdE5vZGUoTm9kZSop
OwpAQCAtMTczLDEwICsxNzQsMTAgQEAgcHJpdmF0ZToKIC8vIGNodW5rcyBzbyBhcyB0byBvcHRp
bWl6ZSBmb3IgcGVyZm9ybWFuY2Ugb2YgdGhlIGl0ZXJhdGlvbi4KIGNsYXNzIFNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3IgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBleHBsaWNpdCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yKGNvbnN0IFNpbXBs
ZVJhbmdlJik7CiAKICAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fcG9zaXRpb25O
b2RlOyB9Ci0gICAgdm9pZCBhZHZhbmNlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZHZh
bmNlKCk7CiAKICAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdCB7IEFTU0VSVCghYXRFbmQoKSk7
IHJldHVybiBtX3RleHQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSByYW5nZSgp
IGNvbnN0OwpAQCAtMjg4LDkgKzI4OSwxOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRMb29r
QWhlYWQgeyB0cnVlIH07CiB9OwogCitpbmxpbmUgQ2hhcmFjdGVyUmFuZ2UgY2hhcmFjdGVyUmFu
Z2UoY29uc3QgQm91bmRhcnlQb2ludCYgc3RhcnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwg
VGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIHsgY2hhcmFjdGVy
Q291bnQoeyBzdGFydCwgcmFuZ2Uuc3RhcnQgfSwgYmVoYXZpb3IpLCBjaGFyYWN0ZXJDb3VudChy
YW5nZSwgYmVoYXZpb3IpIH07Cit9CiAKLVdFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IGNoYXJhY3Rl
ckNvdW50KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRl
cmF0b3JEZWZhdWx0QmVoYXZpb3IpOwotV0VCQ09SRV9FWFBPUlQgQm91bmRhcnlQb2ludCByZXNv
bHZlQ2hhcmFjdGVyTG9jYXRpb24oY29uc3QgU2ltcGxlUmFuZ2UmLCB1aW50NjRfdCwgVGV4dEl0
ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwotV0VCQ09SRV9F
WFBPUlQgU2ltcGxlUmFuZ2UgcmVzb2x2ZUNoYXJhY3RlclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiwgQ2hhcmFjdGVyUmFuZ2UsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVm
YXVsdEJlaGF2aW9yKTsKK2lubGluZSBDaGFyYWN0ZXJSYW5nZSBjaGFyYWN0ZXJSYW5nZShjb25z
dCBTaW1wbGVSYW5nZSYgc2NvcGUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJh
dG9yQmVoYXZpb3IgYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKHNjb3Bl
LnN0YXJ0LCByYW5nZSwgYmVoYXZpb3IpOworfQorCitpbmxpbmUgQm91bmRhcnlQb2ludCByZXNv
bHZlQ2hhcmFjdGVyTG9jYXRpb24oY29uc3QgU2ltcGxlUmFuZ2UmIHNjb3BlLCB1aW50NjRfdCBs
b2NhdGlvbiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIHJl
c29sdmVDaGFyYWN0ZXJSYW5nZShzY29wZSwgeyBsb2NhdGlvbiwgMCB9LCBiZWhhdmlvcikuc3Rh
cnQ7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuY3BwCmluZGV4IGM0ZDgwZmI1NTA4ZjFlMjZjNjg5MTg1MzgyYWVmYzBjZmRi
OWEyMjYuLjVhNmM1M2MwMzgzNzBjZmIwYTM4YWIwZGE0ZjU2MThmYmFiYjI1YWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNDY1LDcgKzQ2NSw3IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21t
YW5kIGNvbW1hbmRUeXBlKQogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VS
YW5nZShwMSwgcDIpOwogICAgICAgICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3JkOwog
ICAgICAgICAgICAgaWYgKHJhbmdlICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJ
bnNlcnRUZXh0IHx8IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVCcmVh
ayB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3IgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9ySW5RdW90ZWRDb250ZW50KSkKLSAgICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29y
ZCA9IHBsYWluVGV4dChyYW5nZS5nZXQoKSkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAg
ICAgICAgc3RyaXBwZWRQcmV2aW91c1dvcmQgPSBwbGFpblRleHQoKnJhbmdlKS5zdHJpcFdoaXRl
U3BhY2UoKTsKICAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLm1hcmtNaXNzcGVsbGluZ3NBZnRl
clR5cGluZ1RvV29yZChwMSwgZW5kaW5nU2VsZWN0aW9uKCksICFzdHJpcHBlZFByZXZpb3VzV29y
ZC5pc0VtcHR5KCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0Nv
bW1hbmQ6Okluc2VydFRleHQpCiAgICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5zdGFydEFsdGVy
bmF0aXZlVGV4dFVJVGltZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVVuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cAppbmRleCBkNmY3MTc4OWU0ZTFmOTlmOGM3NDU1MzBmMjE1NzdmNDg5ODY4NTkyLi4zMjUzYjZm
YjBiYWIwZWEwNDc0ZGNiM2VjNzFjOTQyMGI1YTk3MDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuY3BwCkBAIC0xOTM0LDcgKzE5MzQsNyBAQCB2b2lkIGNoYXJhY3RlcnNB
cm91bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hhcjMyJiBv
bmVBZnRlcgogICAgIH0KIAogICAgIGlmIChzdGFydFBvc2l0aW9uICE9IGVuZFBvc2l0aW9uKSB7
Ci0gICAgICAgIFN0cmluZyBjaGFyYWN0ZXJTdHJpbmcgPSBwbGFpblRleHQoUmFuZ2U6OmNyZWF0
ZShwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwgc3Rh
cnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pLnB0cigpKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAn
KTsKKyAgICAgICAgU3RyaW5nIGNoYXJhY3RlclN0cmluZyA9IHBsYWluVGV4dCh7ICptYWtlQm91
bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9u
KSB9KS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKICAgICAgICAgZm9yIChpbnQgaSA9IGNo
YXJhY3RlclN0cmluZy5sZW5ndGgoKSAtIDEsIGluZGV4ID0gMDsgaSA+PSAwICYmIGluZGV4IDwg
bWF4Q2hhcmFjdGVyczsgLS1pKSB7CiAgICAgICAgICAgICBpZiAoIWluZGV4ICYmIG5leHRQb3Np
dGlvbi5pc051bGwoKSkKICAgICAgICAgICAgICAgICBpbmRleCsrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDk5ZTYxNTljY2E2NzY5NTlh
OTgwYTQxMjk1NmI4YzVkM2YzMzY2MjYuLjU1N2JmZWNhZWEwMjMyODVhZWEwOTBkNGYwNTcxZDdk
YThkMzNhYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURl
dGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rp
b24ubW0KQEAgLTcwLDEwICs3MCwxMCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBz
dGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRo
UmFuZ2UoVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5n
ZSwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0
ZWN0ZWREYXRhUmFuZ2UpCiB7Ci0gICAgU3RyaW5nIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFp
blRleHQoY29udGV4dFJhbmdlLmdldCgpKTsKICAgICBhdXRvIHN0YXJ0ID0gY29udGV4dFJhbmdl
LT5zdGFydFBvc2l0aW9uKCk7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHBvc2l0aW9uLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gbmlsOworICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3Ry
aW5nID0gcGxhaW5UZXh0KCpjb250ZXh0UmFuZ2UpOwogICAgIENGSW5kZXggaGl0TG9jYXRpb24g
PSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRh
cnlQb2ludChwb3NpdGlvbikgfSk7CiAKICAgICBhdXRvIHNjYW5uZXIgPSBhZG9wdENGKEREU2Nh
bm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCA0N2Fk
NDdhNzNkZGMzZTcyNTFmYjFmMzA1NWJiMTIwY2M5ZTFmMDk0Li5hMjNkYzQwN2E5ZWMwNjU1ZmI2
N2Y3YWM0ZTA1Nzk3YTgxN2Y5ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0yODYsNyArMjg2LDcgQEAgc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JT
ZWxlY3Rpb24oY28KICAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3Ro
VG9TZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQpOwogCiAgICAgUmVmUHRy
PFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBh
cmFncmFwaEVuZCk7Ci0gICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoZnVsbENoYXJh
Y3RlclJhbmdlLmdldCgpKTsKKyAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dCgqZnVs
bENoYXJhY3RlclJhbmdlKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gYWRvcHROUyhb
YWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFu
Z2U6cmFuZ2VUb1Bhc3NdKS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKIAogICAgIHJldHVybiB7IGNy
ZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwg
aGlnaGxpZ2h0UmFuZ2UpKSwgbmlsIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5oCmluZGV4IGFhYjQ5YzQ3NmE1OTY0NDE1ZTk5YjMxZTI0ZWZiN2I3NDNm
NzZkNWYuLjA5NzA3OGRkNTViZWFkMDVhYTdjYTM3MTYwMDE5OWY2MTJlZDZhYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCkBAIC0zNiwxMiArMzYs
MTAgQEAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIGVudW0gY2xhc3MgSW5jbHVkZUltYWdlc0lu
QXR0cmlidXRlZFN0cmluZyB7IFllcywgTm8gfTsKIAogTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgTlNEaWN0
aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7Ci0KLS8vIEZvciB0ZXN0aW5n
IHB1cnBvc2Ugb25seQogV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1
dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRp
b24mLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLQogV0VC
Q09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdl
KFJhbmdlJiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7Ci0j
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpZiBQTEFURk9STShNQUMpCiBXRUJDT1JFX0VY
UE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdl
KFJhbmdlJiwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZyA9IEluY2x1ZGVJbWFnZXNJ
bkF0dHJpYnV0ZWRTdHJpbmc6Olllcyk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggYzBlM2Y1NWU2
ZTM2NDRhZTE5ZWU1YTM5NmY2NGJhZGU2NmVjNTFjNy4uYWVjYmNkMTMzNmZjMTdhMDBlZTY2Mjg3
ZTEzYmUxMjE0MGQyOTlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBAIC04NywxNyArODcsMTYgQEAgc3RkOjp0dXBs
ZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VG
b3JTZWxlY3Rpb24oY28KICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxl
RW5kKCk7CiAKICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJy
b3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgIGF1dG8gcGFyYWdyYXBoRW5kID0g
ZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKLSAgICBpZiAocGFyYWdyYXBoU3RhcnQuaXNO
dWxsKCkgfHwgcGFyYWdyYXBoRW5kLmlzTnVsbCgpKQorICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQg
PSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7Cisg
ICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFwaChz
ZWxlY3Rpb25FbmQpKTsKKyAgICBpZiAoIXBhcmFncmFwaFN0YXJ0IHx8ICFwYXJhZ3JhcGhFbmQp
CiAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwogCi0gICAgYXV0byBsZW5ndGhUb1Nl
bGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdy
YXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOwotICAgIGF1
dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRh
cnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQp
IH0pOwotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVj
dGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7CisgICAgYXV0byBzZWxlY3Rpb25S
YW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwg
Km1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfTsKKyAgICBhdXRvIHBhcmFncmFwaFJh
bmdlID0gU2ltcGxlUmFuZ2UgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3JhcGhFbmQgfTsKIAog
ICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKLSAgICB0b2tlblJhbmdlKHBsYWluVGV4
dChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCkuZ2V0KCkpLCByYW5nZVRv
UGFzcywgJm9wdGlvbnMpOworICAgIHRva2VuUmFuZ2UocGxhaW5UZXh0KHBhcmFncmFwaFJhbmdl
KSwgY2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoUmFuZ2UsIHNlbGVjdGlvblJhbmdlKSwgJm9wdGlv
bnMpOwogCiAgICAgcmV0dXJuIHsgc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucyB9OwogfQpAQCAtMTQy
LDcgKzE0MSw3IEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERp
Y3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0CiAKICAgICBOU1JhbmdlIHJhbmdl
VG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQoeyAqZnVsbENoYXJhY3RlclN0YXJ0
LCAqcG9zaXRpb25Cb3VuZGFyeSB9KSwgMCk7CiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0g
bmlsOwotICAgIGF1dG8gZXh0cmFjdGVkUmFuZ2UgPSB0b2tlblJhbmdlKHBsYWluVGV4dChmdWxs
Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpLCByYW5nZVRvUGFzcywgJm9wdGlvbnMpOworICAgIGF1dG8g
ZXh0cmFjdGVkUmFuZ2UgPSB0b2tlblJhbmdlKHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdl
KSwgcmFuZ2VUb1Bhc3MsICZvcHRpb25zKTsKIAogICAgIC8vIHRva2VuUmFuZ2Ugc29tZXRpbWVz
IHJldHVybnMge05TTm90Rm91bmQsIDB9IGlmIGl0IHdhcyB1bmFibGUgdG8gZGV0ZXJtaW5lIGEg
Z29vZCBzdHJpbmcuCiAgICAgLy8gRklYTUUgKDE1OTA2Myk6IFdlIHNob3VsZG4ndCBuZWVkIHRv
IGNoZWNrIGZvciB6ZXJvIGxlbmd0aCBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmlu
ZGV4IDQyZjliY2E2ZTk1OGNlZGJhNTY0NjZkOWEzNDc3ZGRlNzc2OWRmNGEuLmNiZjYyODhlOWJh
ZWM1ZTI5MzUxNWY1MDZhY2Q1OTJhM2IyOGVjZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKQEAgLTQzNSw3ICs0MzUsMTIgQEAgU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpy
ZW5kZXJlZFRleHRSZXNwZWN0aW5nUmFuZ2UoY29uc3QgVGV4dCYgdGV4dCkKICAgICAgICAgICAg
IGJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yQmVoYXZlc0FzSWZOb2Rlc0ZvbGxvd2luZzsKICAgICB9
CiAKLSAgICByZXR1cm4gcGxhaW5UZXh0KFJhbmdlOjpjcmVhdGUodGV4dC5kb2N1bWVudCgpLCBz
dGFydCwgZW5kKS5wdHIoKSwgYmVoYXZpb3IpOworICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1h
a2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKKyAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kKTsKKyAgICBpZiAoIXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5KQor
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIHJldHVybiBwbGFpblRleHQoeyBX
VEZNb3ZlKCpzdGFydEJvdW5kYXJ5KSwgV1RGTW92ZSgqZW5kQm91bmRhcnkpIH0sIGJlaGF2aW9y
KTsKIH0KIAogU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0ZXh0Q29udGVudFJlc3Bl
Y3RpbmdSYW5nZShjb25zdCBUZXh0JiB0ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5jcHAKaW5kZXggNjgxY2E3ODAwMTkxOTc5N2JjNDlkMGU4NDY5N2U5OTk5
ZmRlYmQ5OS4uNWMyOTdjYTZmNmEwZDcwNWVkODI3ODBiNDJkYTc0ZWQzNmFmZTNjYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0zMTgsNyArMzE4
LDggQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCYKICAgICAvLyBJZiB0aGUgdGV4dCBmaWVsZCBo
YXMgbm8gZm9jdXMsIHdlIGRvbid0IG5lZWQgdG8gdGFrZSBhY2NvdW50IG9mIHRoZQogICAgIC8v
IHNlbGVjdGlvbiBsZW5ndGguIFRoZSBzZWxlY3Rpb24gaXMgdGhlIHNvdXJjZSBvZiB0ZXh0IGRy
YWctYW5kLWRyb3AgaW4KICAgICAvLyB0aGF0IGNhc2UsIGFuZCBub3RoaW5nIGluIHRoZSB0ZXh0
IGZpZWxkIHdpbGwgYmUgcmVtb3ZlZC4KLSAgICB1bnNpZ25lZCBzZWxlY3Rpb25MZW5ndGggPSBm
b2N1c2VkKCkgPyBjb21wdXRlTGVuZ3RoRm9yU3VibWlzc2lvbihwbGFpblRleHQoZG9jdW1lbnQo
KS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKSkgOiAwOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBmb2N1c2VkKCkgPyBkb2N1bWVu
dCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkg
OiBudWxscHRyOworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IHNlbGVjdGlvblJhbmdl
ID8gY29tcHV0ZUxlbmd0aEZvclN1Ym1pc3Npb24ocGxhaW5UZXh0KCpzZWxlY3Rpb25SYW5nZSkp
IDogMDsKICAgICBBU1NFUlQoY3VycmVudExlbmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgpOwogICAg
IHVuc2lnbmVkIGJhc2VMZW5ndGggPSBjdXJyZW50TGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOwog
ICAgIHVuc2lnbmVkIGFwcGVuZGFibGVMZW5ndGggPSB1bnNpZ25lZE1heExlbmd0aCA+IGJhc2VM
ZW5ndGggPyB1bnNpZ25lZE1heExlbmd0aCAtIGJhc2VMZW5ndGggOiAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDcyYjEzMDY3ZDFiYzM2
YjNkYmM4OTE0YWRmMDE4OGM0MTM3MWM3NjEuLjJjMzJiMmY1YjZkNGFlZGEyZThlY2U1NDM0NDY1
MDBhZGIxMjhmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHAKQEAgLTQzMSw3ICs0MzEsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjbwogICAg
ICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSkK
ICAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxlY3ROb2RlKCplbGVtZW50KTsKICAg
ICAgICAgfQotICAgICAgICBtX2NsaWVudC5zcGVhayhwbGFpblRleHQoc2VsZWN0ZWRSYW5nZS5n
ZXQoKSkpOworICAgICAgICBtX2NsaWVudC5zcGVhayhwbGFpblRleHQoKnNlbGVjdGVkUmFuZ2Up
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3Rv
cFNwZWFraW5nOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IDQ3NWU2NGJh
ZGY1MDA0OTUyYTJmNjNmZDY2NzFkNTEzMmEzNDQxZGIuLmRkN2Y4ZThlYWU3NjJlNmI3OTBlNDEx
YzI4MzI1NjM0YWExZmVjNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAg
LTQ0OCw3ICs0NDgsOCBAQCBTdHJpbmcgRE9NU2VsZWN0aW9uOjp0b1N0cmluZygpCiAgICAgYXV0
byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICByZXR1cm4gcGxhaW5UZXh0KGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBhdXRvIHJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0
dXJuIHJhbmdlID8gcGxhaW5UZXh0KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOwogfQogCiBOb2Rl
KiBET01TZWxlY3Rpb246OnNoYWRvd0FkanVzdGVkTm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA5ZjBhNDA2ZGU0MTQ5MTgzZjg1MTE2MTI0
YjNlZDVjMTliMWVmMmViLi4yNjFjZGNiZDdhZjNiMTMwZDk1OTUxOTZlNDE3NGZlOTNkMDYzN2Nl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTg4MiwyMiArODgyLDEwIEBAIHVpbnQzMl90IFBhZ2U6
OnJlcGxhY2VSYW5nZXNXaXRoVGV4dChjb25zdCBWZWN0b3I8UmVmPFJhbmdlPj4mIHJhbmdlc1Rv
UmVwbGFjZSwKIAogICAgIGZvciAoYXV0byYgcmFuZ2UgOiByYW5nZXNUb1JlcGxhY2UpIHsKICAg
ICAgICAgYXV0byBoaWdoZXN0Um9vdCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdChy
YW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgICAgIGlmICghaGlnaGVzdFJvb3QgfHwgaGln
aGVzdFJvb3QgIT0gaGlnaGVzdEVkaXRhYmxlUm9vdChyYW5nZS0+ZW5kUG9zaXRpb24oKSkpCisg
ICAgICAgIGlmICghaGlnaGVzdFJvb3QgfHwgaGlnaGVzdFJvb3QgIT0gaGlnaGVzdEVkaXRhYmxl
Um9vdChyYW5nZS0+ZW5kUG9zaXRpb24oKSkgfHwgIWhpZ2hlc3RSb290LT5kb2N1bWVudCgpLmZy
YW1lKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGZyYW1lID0gbWFr
ZVJlZlB0cihoaWdoZXN0Um9vdC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKLSAgICAgICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHNpemVfdCByZXBsYWNlbWVu
dExvY2F0aW9uID0gbm90Rm91bmQ7Ci0gICAgICAgIHNpemVfdCByZXBsYWNlbWVudExlbmd0aCA9
IDA7Ci0gICAgICAgIGlmICghVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21S
YW5nZShoaWdoZXN0Um9vdC5nZXQoKSwgcmFuZ2UucHRyKCksIHJlcGxhY2VtZW50TG9jYXRpb24s
IHJlcGxhY2VtZW50TGVuZ3RoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
IChyZXBsYWNlbWVudExvY2F0aW9uID09IG5vdEZvdW5kIHx8ICFyZXBsYWNlbWVudExlbmd0aCkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHJlcGxhY2VtZW50UmFuZ2VzLmFwcGVu
ZCh7IFdURk1vdmUoaGlnaGVzdFJvb3QpLCB7IHJlcGxhY2VtZW50TG9jYXRpb24sIHJlcGxhY2Vt
ZW50TGVuZ3RoIH0gfSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoKmhpZ2hlc3RSb290KTsKKyAgICAgICAgcmVwbGFjZW1lbnRSYW5nZXMuYXBw
ZW5kKHsgV1RGTW92ZShoaWdoZXN0Um9vdCksIGNoYXJhY3RlclJhbmdlKHNjb3BlLCByYW5nZSkg
fSk7CiAgICAgfQogCiAgICAgcmVwbGFjZVJhbmdlcygqdGhpcywgcmVwbGFjZW1lbnRSYW5nZXMs
IHJlcGxhY2VtZW50VGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9G
cmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDZl
ZTRmYjQ0NTVkYzY5MGQ0ZWI5OWM0M2EyYjkzODEyZjE0MTcyZGIuLjA2Mjg1YTUxODRlNWE0YzAw
YTMxYmE2MzM0MjNkYjVkYmM5ODgwOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1t
CkBAIC03MzAsNyArNzMwLDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1
cnJlbnRSb290KCkgY29uc3QKIAogICAgIC8vIFRoZXJlIGFyZSBubyBwaHJhc2VzIHdpdGggYWx0
ZXJuYXRpdmVzLCBzbyB0aGVyZSBpcyBqdXN0IG9uZSBpbnRlcnByZXRhdGlvbi4KICAgICBpZiAo
bWFya2Vyc0luUm9vdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdp
dGhPYmplY3Q6cGxhaW5UZXh0KHJhbmdlT2ZSb290Q29udGVudHMucHRyKCkpXTsKKyAgICAgICAg
cmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpwbGFpblRleHQocmFuZ2VPZlJvb3RDb250
ZW50cyldOwogCiAgICAgLy8gVGhlIG51bWJlciBvZiBpbnRlcnByZXRhdGlvbnMgd2lsbCBiZSBp
MSAqIGkyICogLi4uICogaU4sIHdoZXJlIGlYIGlzIHRoZSBudW1iZXIgb2YgaW50ZXJwcmV0YXRp
b25zIGZvciB0aGUgWHRoIHBocmFzZSB3aXRoIGFsdGVybmF0aXZlcy4KICAgICBzaXplX3QgaW50
ZXJwcmV0YXRpb25zQ291bnQgPSAxOwpAQCAtNzUyLDcgKzc1Miw3IEBAIE5TQXJyYXkgKkZyYW1l
OjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0CiAgICAgICAgICAgICAvLyBG
aXJzdCwgYWRkIHRleHQgdGhhdCBwcmVjZWRlIHRoZSBtYXJrZXIuCiAgICAgICAgICAgICBpZiAo
cHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24gIT0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSkpIHsKICAgICAgICAgICAgICAgICBhdXRvIHBy
ZWNlZGluZ1RleHRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50KCksIHByZWNlZGluZ1Rl
eHRTdGFydFBvc2l0aW9uLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2Vy
LT5zdGFydE9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByZWNlZGluZ1RleHQg
PSBwbGFpblRleHQocHJlY2VkaW5nVGV4dFJhbmdlLnB0cigpKTsKKyAgICAgICAgICAgICAgICBT
dHJpbmcgcHJlY2VkaW5nVGV4dCA9IHBsYWluVGV4dChwcmVjZWRpbmdUZXh0UmFuZ2UpOwogICAg
ICAgICAgICAgICAgIGlmICghcHJlY2VkaW5nVGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbiA6IGludGVycHJldGF0aW9ucykKICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbiwgcHJlY2VkaW5nVGV4
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggNWZiYzhlNDUwYzE5MTky
MDc1ZTI4OTFkMTY5ZWVhZjM4ZDZhMmI4Zi4uZjIzYzNhODUxZGNlY2FhZjdkYmE4OTYzNjY4Mjk1
YmMxMzg5M2U1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjA1MSwx
OCArMjA1MSwxMiBAQCBSZWZQdHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VGcm9tTG9jYXRpb25B
bmRMZW5ndGgoRWxlbWVudCYgc2NvcGUsIHVuc2lnbmVkIHJhbgogCiB1bnNpZ25lZCBJbnRlcm5h
bHM6OmxvY2F0aW9uRnJvbVJhbmdlKEVsZW1lbnQmIHNjb3BlLCBjb25zdCBSYW5nZSYgcmFuZ2Up
CiB7Ci0gICAgc2l6ZV90IGxvY2F0aW9uID0gMDsKLSAgICBzaXplX3QgdW51c2VkTGVuZ3RoID0g
MDsKLSAgICBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKCZzY29w
ZSwgJnJhbmdlLCBsb2NhdGlvbiwgdW51c2VkTGVuZ3RoKTsKLSAgICByZXR1cm4gbG9jYXRpb247
CisgICAgcmV0dXJuIGNsYW1wVG88dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFy
eVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKHNjb3BlKSwgcmFuZ2UpLmxvY2F0aW9uKTsKIH0KIAog
dW5zaWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0
IFJhbmdlJiByYW5nZSkKIHsKLSAgICBzaXplX3QgdW51c2VkTG9jYXRpb24gPSAwOwotICAgIHNp
emVfdCBsZW5ndGggPSAwOwotICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhG
cm9tUmFuZ2UoJnNjb3BlLCAmcmFuZ2UsIHVudXNlZExvY2F0aW9uLCBsZW5ndGgpOwotICAgIHJl
dHVybiBsZW5ndGg7CisgICAgcmV0dXJuIGNsYW1wVG88dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdl
KG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKHNjb3BlKSwgcmFuZ2UpLmxlbmd0
aCk7CiB9CiAKIFN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlJiByYW5n
ZSkKQEAgLTIwNzIsNyArMjA2NiwxMCBAQCBTdHJpbmcgSW50ZXJuYWxzOjpyYW5nZUFzVGV4dChj
b25zdCBSYW5nZSYgcmFuZ2UpCiAKIFN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdC
YWNrd2FyZHNUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBw
bGFpblRleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvckZvclRlc3RpbmcocmFuZ2UpOworICAg
IFN0cmluZyByZXN1bHQ7CisgICAgZm9yIChTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9y
IGJhY2t3YXJkc0l0ZXJhdG9yKHJhbmdlKTsgIWJhY2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJh
Y2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKKyAgICAgICAgcmVzdWx0Lmluc2VydChiYWNrd2Fy
ZHNJdGVyYXRvci50ZXh0KCkudG9TdHJpbmcoKSwgMCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogUmVmPFJhbmdlPiBJbnRlcm5hbHM6OnN1YnJhbmdlKFJhbmdlJiByYW5nZSwgdW5zaWduZWQg
cmFuZ2VMb2NhdGlvbiwgdW5zaWduZWQgcmFuZ2VMZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRp
dGluZ1JhbmdlLmNwcAppbmRleCA3NmVmNDcyMmQ3NTFjZjZlNTlhYWI5ZWRmYWI2NjU2ZTcwNGYx
NmVhLi44NmFjNTUzZTZmY2MwODIyYWQ0MThjNmEwZDNmOGNmOWM0YTk5Yjk4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKQEAgLTY1LDE2ICs2NSwxNSBAQCBFZGl0aW5nUmFu
Z2UgRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBX
ZWJDb3JlOjpSYW5nZQogewogICAgIEFTU0VSVChlZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPT0g
RWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3QpOwogCi0gICAgc2l6ZV90IGxv
Y2F0aW9uID0gMDsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLSAgICBpZiAoIXJhbmdlIHx8ICFX
ZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKGZyYW1l
LnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpLCByYW5n
ZSwgbG9jYXRpb24sIGxlbmd0aCkpCisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIEVkaXRpbmdSYW5nZSBlZGl0aW5nUmFuZ2UobG9jYXRpb24sIGxlbmd0aCk7Ci0g
ICAgaWYgKCFlZGl0aW5nUmFuZ2UuaXNWYWxpZCgpKQorICAgIGF1dG8qIGVsZW1lbnQgPSBmcmFt
ZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKKyAg
ICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gZWRpdGlu
Z1JhbmdlOworICAgIGF1dG8gcmVsYXRpdmVSYW5nZSA9IGNoYXJhY3RlclJhbmdlKG1ha2VCb3Vu
ZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgKnJhbmdlKTsKKyAgICByZXR1
cm4gRWRpdGluZ1JhbmdlKHJlbGF0aXZlUmFuZ2UubG9jYXRpb24sIHJlbGF0aXZlUmFuZ2UubGVu
Z3RoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvQXR0cmlidXRlZFN0cmluZy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL0F0dHJpYnV0ZWRTdHJpbmcuaAppbmRleCA4NTMwZjgxOGJhYzFmNTliOWZlY2I2YTI2NzUz
MDEyMjJhMmEzZjQxLi4wMmQ2YjAxMDI2MWFkMzA4YThhZTY3YTIzZGEyOGVmZjYzYWI3MzY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvQXR0cmlidXRlZFN0cmluZy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLmgKQEAgLTMzLDkg
KzMzLDEwIEBAIE9CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVkU3RyaW5nOwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIHN0cnVjdCBBdHRyaWJ1dGVkU3RyaW5nIHsKLSAgICBBdHRyaWJ1dGVkU3RyaW5nKCkK
LSAgICB7Ci0gICAgfQorICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZzsK
KyAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBkb2N1bWVudEF0dHJpYnV0ZXM7CisKKyAgICBB
dHRyaWJ1dGVkU3RyaW5nKCkgPSBkZWZhdWx0OwogCiAjaWYgZGVmaW5lZChfX09CSkNfXykKICAg
ICBBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZywg
TlNEaWN0aW9uYXJ5ICpkb2N1bWVudEF0dHJpYnV0ZXMgPSBuaWwpCkBAIC00NCwyMiArNDUsMjYg
QEAgc3RydWN0IEF0dHJpYnV0ZWRTdHJpbmcgewogICAgIHsKICAgICB9CiAKKyAgICBBdHRyaWJ1
dGVkU3RyaW5nKFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+JiYgYXR0cmlidXRlZFN0cmlu
ZywgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4mJiBkb2N1bWVudEF0dHJpYnV0ZXMgPSB7IH0pCisg
ICAgICAgIDogc3RyaW5nKFdURk1vdmUoYXR0cmlidXRlZFN0cmluZykpCisgICAgICAgICwgZG9j
dW1lbnRBdHRyaWJ1dGVzKFdURk1vdmUoZG9jdW1lbnRBdHRyaWJ1dGVzKSkKKyAgICB7CisgICAg
fQorCiAgICAgb3BlcmF0b3IgTlNBdHRyaWJ1dGVkU3RyaW5nICooKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIHN0cmluZy5nZXQoKTsKICAgICB9CiAjZW5kaWYKLQotICAgIFJldGFpblB0
cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHN0cmluZzsKLSAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5
PiBkb2N1bWVudEF0dHJpYnV0ZXM7CiB9OwogCiB9CiAKIG5hbWVzcGFjZSBJUEMgeworCiB0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYktpdDo6QXR0cmlidXRlZFN0cmluZz4gewog
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViS2l0OjpBdHRyaWJ1dGVk
U3RyaW5nJik7CiAgICAgc3RhdGljIE9wdGlvbmFsPFdlYktpdDo6QXR0cmlidXRlZFN0cmluZz4g
ZGVjb2RlKERlY29kZXImKTsKIH07Ci19CiAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9BdHRyaWJ1dGVkU3RyaW5nLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L0F0dHJpYnV0ZWRTdHJpbmcubW0KaW5kZXggM2M0NzAwNTY4MzhkMTJiYWJhN2VhNWVhZjgxNDdh
NWY3Yzg4NzVlNy4uMGYyZTkyZGI2NTRlNDA4YzdhMDJmMzZiZTQ1Njc4YjIzOWE3MDM0MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0KKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0KQEAgLTQ1LDcg
KzQ1LDcgQEAgT3B0aW9uYWw8V2ViS2l0OjpBdHRyaWJ1dGVkU3RyaW5nPiBBcmd1bWVudENvZGVy
PFdlYktpdDo6QXR0cmlidXRlZFN0cmluZz46OmRlY28KICAgICBSZXRhaW5QdHI8TlNEaWN0aW9u
YXJ5PiBkb2N1bWVudEF0dHJpYnV0ZXM7CiAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBk
b2N1bWVudEF0dHJpYnV0ZXMpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJl
dHVybiBXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmcgeyBhdHRyaWJ1dGVkU3RyaW5nLmdldCgpLCBk
b2N1bWVudEF0dHJpYnV0ZXMuZ2V0KCkgfTsKKyAgICByZXR1cm4geyB7IFdURk1vdmUoYXR0cmli
dXRlZFN0cmluZyksIFdURk1vdmUoZG9jdW1lbnRBdHRyaWJ1dGVzKSB9IH07CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQppbmRleCAwZDE5
ZTRiZTUxOGY5YmQ4YTJkOTRhOTUzMjMwMDk3YTVjNmVjZjM4Li5kNzg2ZjExZDM5M2M3ZTRiNzg4
YmNlYzM2N2VhZTA5NmY3Zjc1MmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvVGV4dENoZWNrZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1RleHRDaGVja2VyTWFjLm1tCkBAIC00MzYsMTggKzQzNiwxMyBAQCB2b2lkIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cgogdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3Ry
aW5nKFNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29u
c3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKICAgICBhdXRvIGNvcnJlY3Rpb25z
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgZm9yIChhdXRv
JiBndWVzcyA6IGdyYW1tYXJEZXRhaWwuZ3Vlc3NlcykgewotICAgICAgICBOU1N0cmluZyAqZ3Vl
c3NOU1N0cmluZyA9IGd1ZXNzOwotICAgICAgICBbY29ycmVjdGlvbnMgYWRkT2JqZWN0Omd1ZXNz
TlNTdHJpbmddOwotICAgIH0KLQotICAgIE5TU3RyaW5nICpkZXNjcmlwdGlvbk5TU3RyaW5nID0g
Z3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb247CisgICAgZm9yIChhdXRvJiBndWVzcyA6IGdy
YW1tYXJEZXRhaWwuZ3Vlc3NlcykKKyAgICAgICAgW2NvcnJlY3Rpb25zIGFkZE9iamVjdDpndWVz
c107CiAgICAgTlNEaWN0aW9uYXJ5ICpkZXRhaWwgPSBAewogICAgICAgICBOU0dyYW1tYXJSYW5n
ZSA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOmdyYW1tYXJEZXRhaWwucmFuZ2VdLAotICAgICAg
ICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24gOiBkZXNjcmlwdGlvbk5TU3RyaW5nLAorICAgICAg
ICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24gOiBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlv
biwKICAgICAgICAgTlNHcmFtbWFyQ29ycmVjdGlvbnMgOiBjb3JyZWN0aW9ucy5nZXQoKSwKICAg
ICB9OwotCiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHVwZGF0ZVNw
ZWxsaW5nUGFuZWxXaXRoR3JhbW1hclN0cmluZzpiYWRHcmFtbWFyUGhyYXNlIGRldGFpbDpkZXRh
aWxdOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oCmluZGV4IDA3
NDEzY2ZjOTM5ODVmZTVkOTllOTQwNjhmMTYxNWY0YjI0NGM2MTQuLmY0OGYwYjY3MWFkOGZiZjE0
OTI1OGI2OGFjNzc3OWIwZDU3NTQ3MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eS5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBUZXh0Q2hlY2tpbmdDb250
cm9sbGVyUHJveHkoV2ViUGFnZSYpOwogICAgIH5UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHko
KTsKIAotICAgIEF0dHJpYnV0ZWRTdHJpbmcgYW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0
aW9ucyhjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb24mKTsKKyAgICBzdGF0aWMgQXR0cmlidXRlZFN0cmluZyBhbm5vdGF0ZWRTdWJz
dHJpbmdCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYsIGNv
bnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpOwogCiBwcml2YXRlOgogICAgIC8vIElQQzo6
TWVzc2FnZVJlY2VpdmVyCkBAIC02NSw4ICs2NSw4IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8
UmFuZ2VBbmRPZmZzZXQ+IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihpbnQ2NF90
IG9mZnNldCwgdWludDY0X3QgbGVuZ3RoKTsKIAogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCi0g
ICAgdm9pZCByZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihBdHRyaWJ1dGVkU3RyaW5nLCBpbnQ2
NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVuZ3RoLCB1aW50NjRfdCByZWxhdGl2ZVJl
cGxhY2VtZW50TG9jYXRpb24sIHVpbnQ2NF90IHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5ndGgpOwot
ICAgIHZvaWQgcmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubm90
YXRpb25OYW1lLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVuZ3RoKTsKKyAg
ICB2b2lkIHJlcGxhY2VSZWxhdGl2ZVRvU2VsZWN0aW9uKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcm
LCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVuZ3RoLCB1aW50NjRfdCByZWxh
dGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHVpbnQ2NF90IHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5n
dGgpOworICAgIHZvaWQgcmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3Qg
U3RyaW5nJiBhbm5vdGF0aW9uTmFtZSwgaW50NjRfdCBzZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90
IGxlbmd0aCk7CiAKICAgICBXZWJQYWdlJiBtX3BhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclBy
b3h5Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNr
aW5nQ29udHJvbGxlclByb3h5Lm1tCmluZGV4IDY1OWQ1YWZmMzFkMzkxM2VmNDgxNGIyYTYyMTBh
MWViNzg2YzVkMmIuLmU0NDliZmQwMDAwZGYwMTM5ODgwNDg5ZDBlZDMwOWYxYmExOWY2NzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVj
a2luZ0NvbnRyb2xsZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KQEAgLTcyLDI4ICs3Miwy
OCBAQCBzdGF0aWMgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiByZWxldmFu
dE1hcmtlclR5cGVzKCkKIAogT3B0aW9uYWw8VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpS
YW5nZUFuZE9mZnNldD4gVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyYW5nZUFuZE9mZnNl
dFJlbGF0aXZlVG9TZWxlY3Rpb24oaW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCkKIHsK
LSAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgYXV0byYgZnJhbWVTZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBmcmFtZVNlbGVjdGlvbiA9IG1fcGFnZS5jb3JlUGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKTsKICAg
ICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKTsKLSAgICBpZiAo
c2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
YXV0byByb290ID0gZnJhbWVTZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRF
bGVtZW50KCk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIHJh
bmdlLT5jb2xsYXBzZSh0cnVlKTsKKyAgICBhdXRvIHNlbGVjdGlvbkxpdmVSYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uTGl2ZVJhbmdlKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBT
aW1wbGVSYW5nZSB7ICpzZWxlY3Rpb25MaXZlUmFuZ2UgfTsKIAotICAgIHNpemVfdCBzZWxlY3Rp
b25Mb2NhdGlvbjsKLSAgICBzaXplX3Qgc2VsZWN0aW9uTGVuZ3RoOwotICAgIFRleHRJdGVyYXRv
cjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2Uocm9vdCwgcmFuZ2UuZ2V0KCksIHNlbGVj
dGlvbkxvY2F0aW9uLCBzZWxlY3Rpb25MZW5ndGgpOwotICAgIHNlbGVjdGlvbkxvY2F0aW9uICs9
IG9mZnNldDsKKyAgICBhdXRvIHNjb3BlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KCpyb290KTsKKyAgICBpbnQ2NF90IGFkanVzdGVkU3RhcnRMb2NhdGlvbiA9IGNoYXJhY3RlckNv
dW50KHsgc2NvcGUuc3RhcnQsIHNlbGVjdGlvblJhbmdlLnN0YXJ0IH0pICsgb2Zmc2V0OworICAg
IGlmIChhZGp1c3RlZFN0YXJ0TG9jYXRpb24gPCAwKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIGF1dG8gYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSA9IENoYXJhY3Rl
clJhbmdlIHsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFkanVzdGVkU3RhcnRMb2NhdGlvbiksIGxl
bmd0aCB9OwogCi0gICAgcmV0dXJuIHsgeyBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3Rl
clJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIHsgc2VsZWN0aW9u
TG9jYXRpb24sIGxlbmd0aCB9KSksIHNlbGVjdGlvbkxvY2F0aW9uIH0gfTsKKyAgICByZXR1cm4g
eyB7IGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIGFkanVzdGVk
U2VsZWN0aW9uQ2hhcmFjdGVyUmFuZ2UpKSwgYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5n
ZS5sb2NhdGlvbiB9IH07CiB9CiAKLXZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojpy
ZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihBdHRyaWJ1dGVkU3RyaW5nIGFubm90YXRlZFN0cmlu
ZywgaW50NjRfdCBzZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgcmVs
YXRpdmVSZXBsYWNlbWVudExvY2F0aW9uLCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TGVu
Z3RoKQordm9pZCBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlcGxhY2VSZWxhdGl2ZVRv
U2VsZWN0aW9uKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmIGFubm90YXRlZFN0cmluZywgaW50NjRf
dCBzZWxlY3Rpb25PZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgcmVsYXRpdmVSZXBs
YWNlbWVudExvY2F0aW9uLCB1aW50NjRfdCByZWxhdGl2ZVJlcGxhY2VtZW50TGVuZ3RoKQogewog
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24g
PSBmcmFtZS5zZWxlY3Rpb24oKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFRleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24oQXR0cmlidXRlZFN0
cmluZyBhbgogICAgIH1dOwogfQogCi12b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6
cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubm90YXRpb24sIGlu
dDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgpCit2b2lkIFRleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29u
c3QgU3RyaW5nJiBhbm5vdGF0aW9uLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3Qg
bGVuZ3RoKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHJhbmdlQW5kT2Zmc2V0
ID0gcmFuZ2VBbmRPZmZzZXRSZWxhdGl2ZVRvU2VsZWN0aW9uKHNlbGVjdGlvbk9mZnNldCwgbGVu
Z3RoKTsKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94
eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubgogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgcmVtb3ZlQ29yZVNwZWxsaW5n
TWFya2VycyA9IChhbm5vdGF0aW9uID09IFN0cmluZyhAIk5TU3BlbGxpbmdTdGF0ZSIpKTsKKyAg
ICBib29sIHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMgPSBhbm5vdGF0aW9uID09ICJOU1NwZWxs
aW5nU3RhdGUiOwogICAgIGZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJz
KCpyYW5nZSwgWyZdIChEb2N1bWVudE1hcmtlciogbWFya2VyKSB7CiAgICAgICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdE
YXRhPihtYXJrZXItPmRhdGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzUs
NTEgKzE3NSwzMCBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5u
b3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oU3RyaW5nIGFubgogCiBBdHRyaWJ1dGVkU3RyaW5n
IFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBv
c2l0aW9ucyhjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlUG9zaXRpb24mIGVuZCkKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZz4gc3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRdKTsKLSAgICBOU1VJbnRlZ2VyIHN0cmluZ0xlbmd0aCA9IDA7Ci0KLSAg
ICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kb2N1
bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBh
dXRvIGVudGlyZVJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0LCBlbmQpOwotICAgIGlmICghZW50aXJl
UmFuZ2UpCisgICAgYXV0byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQp
OworICAgIGF1dG8gZW5kQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQpOworICAgIGlm
ICghc3RhcnRCb3VuZGFyeSB8fCAhZW5kQm91bmRhcnkpCiAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgYXV0byBlbnRpcmVSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnN0YXJ0Qm91bmRhcnksICplbmRC
b3VuZGFyeSB9OwogCi0gICAgUmVmUHRyPE5vZGU+IGNvbW1vbkFuY2VzdG9yID0gZW50aXJlUmFu
Z2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgc2l6ZV90IGVudGlyZVJhbmdlTG9j
YXRpb247Ci0gICAgc2l6ZV90IGVudGlyZVJhbmdlTGVuZ3RoOwotICAgIFRleHRJdGVyYXRvcjo6
Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoY29tbW9uQW5jZXN0b3IuZ2V0KCksIGVudGly
ZVJhbmdlLmdldCgpLCBlbnRpcmVSYW5nZUxvY2F0aW9uLCBlbnRpcmVSYW5nZUxlbmd0aCk7Cisg
ICAgYXV0byBzdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdF0pOwogCi0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoeyAqbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSksICptYWtlQm91bmRhcnlQb2ludChlbmQuZGVlcEVx
dWl2YWxlbnQoKSkgfSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKLSAgICAgICAgaW50
IGN1cnJlbnRUZXh0TGVuZ3RoID0gaXQudGV4dCgpLmxlbmd0aCgpOwotICAgICAgICBpZiAoIWN1
cnJlbnRUZXh0TGVuZ3RoKQorICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KGVudGlyZVJhbmdlKTsg
IWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgICAgICBpZiAoIWl0LnRleHQoKS5sZW5n
dGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFtzdHJpbmcgYXBwZW5kQXR0
cmlidXRlZFN0cmluZzpbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
Oml0LnRleHQoKS5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCldIGF1dG9yZWxl
YXNlXV07Ci0KLSAgICAgICAgU2ltcGxlUmFuZ2UgY3VycmVudFRleHRSYW5nZSA9IGl0LnJhbmdl
KCk7Ci0gICAgICAgIGF1dG8gbWFya2VycyA9IGRvY3VtZW50LT5tYXJrZXJzKCkubWFya2Vyc0lu
UmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGN1cnJlbnRUZXh0UmFuZ2UpLCBEb2N1bWVudE1hcmtlcjo6
UGxhdGZvcm1UZXh0Q2hlY2tpbmcpOworICAgICAgICBbc3RyaW5nIGFwcGVuZEF0dHJpYnV0ZWRT
dHJpbmc6YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
aXQudGV4dCgpLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKV0pLmdldCgpXTsK
KyAgICAgICAgYXV0byByYW5nZSA9IGl0LnJhbmdlKCk7CisgICAgICAgIGF1dG8gbWFya2VycyA9
IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKGNyZWF0ZUxp
dmVSYW5nZShyYW5nZSksIERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZyk7CiAg
ICAgICAgIGZvciAoY29uc3QgYXV0byogbWFya2VyIDogbWFya2VycykgewogICAgICAgICAgICAg
aWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRD
aGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgYXV0byYgdGV4dENoZWNraW5nRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50
TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKTsKLSAgICAg
ICAgICAgIGF1dG8gc3VicmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY3VycmVudFRleHRS
YW5nZSwgeyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtYXJr
ZXItPnN0YXJ0T2Zmc2V0KCkgfSk7Ci0KLSAgICAgICAgICAgIHNpemVfdCBzdWJyYW5nZUxvY2F0
aW9uOwotICAgICAgICAgICAgc2l6ZV90IHN1YnJhbmdlTGVuZ3RoOwotICAgICAgICAgICAgVGV4
dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShjb21tb25BbmNlc3Rvci5n
ZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKHN1YnJhbmdlKS5wdHIoKSwgc3VicmFuZ2VMb2NhdGlvbiwg
c3VicmFuZ2VMZW5ndGgpOwotCi0gICAgICAgICAgICBBU1NFUlQoc3VicmFuZ2VMb2NhdGlvbiA+
IGVudGlyZVJhbmdlTG9jYXRpb24pOwotICAgICAgICAgICAgQVNTRVJUKHN1YnJhbmdlTG9jYXRp
b24gKyBzdWJyYW5nZUxlbmd0aCA8IGVudGlyZVJhbmdlTGVuZ3RoKTsKLSAgICAgICAgICAgIFtz
dHJpbmcgYWRkQXR0cmlidXRlOnRleHRDaGVja2luZ0RhdGEua2V5IHZhbHVlOnRleHRDaGVja2lu
Z0RhdGEudmFsdWUgcmFuZ2U6TlNNYWtlUmFuZ2Uoc3VicmFuZ2VMb2NhdGlvbiAtIGVudGlyZVJh
bmdlTG9jYXRpb24sIHN1YnJhbmdlTGVuZ3RoKV07CisgICAgICAgICAgICBhdXRvJiBkYXRhID0g
V1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2Vy
LT5kYXRhKCkpOworICAgICAgICAgICAgYXV0byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShyYW5nZSwgeyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkg
LSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgfSk7CisgICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJp
YnV0ZTpkYXRhLmtleSB2YWx1ZTpkYXRhLnZhbHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKGVudGly
ZVJhbmdlLCBzdWJyYW5nZSldOwogICAgICAgICB9Ci0KLSAgICAgICAgc3RyaW5nTGVuZ3RoICs9
IGN1cnJlbnRUZXh0TGVuZ3RoOwogICAgIH0KIAotICAgIHJldHVybiBzdHJpbmcuYXV0b3JlbGVh
c2UoKTsKKyAgICByZXR1cm4geyB7IFdURk1vdmUoc3RyaW5nKSB9IH07CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDBjMTcyMGZjOWMyOWU0ZjcxODEwNjI2MmY0
MjlhZWRjZTg3YWNiNzIuLjMzZWNkN2JlMjQ1Y2RiNTk4N2FiZTAxMDk1NzBmYWVlMmFiOWQ2MWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9X
ZWJQYWdlQ29jb2EubW0KQEAgLTIzOSwxMiArMjM5LDkgQEAgdm9pZCBXZWJQYWdlOjpnZXRDb250
ZW50c0FzQXR0cmlidXRlZFN0cmluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEF0dHJp
YnUKICAgICB9CiAKICAgICBOU0RpY3Rpb25hcnkqIGRvY3VtZW50QXR0cmlidXRlcyA9IG5pbDsK
KyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJh
bmdlT2ZDb250ZW50cygqZG9jdW1lbnRFbGVtZW50KSwgJmRvY3VtZW50QXR0cmlidXRlcyk7CiAK
LSAgICBBdHRyaWJ1dGVkU3RyaW5nIHJlc3VsdDsKLSAgICByZXN1bHQuc3RyaW5nID0gYXR0cmli
dXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZU9mQ29udGVudHMoKmRvY3VtZW50RWxlbWVudCksICZk
b2N1bWVudEF0dHJpYnV0ZXMpOwotICAgIHJlc3VsdC5kb2N1bWVudEF0dHJpYnV0ZXMgPSBkb2N1
bWVudEF0dHJpYnV0ZXM7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcih7IHJlc3VsdCB9KTsKKyAg
ICBjb21wbGV0aW9uSGFuZGxlcih7IFdURk1vdmUoYXR0cmlidXRlZFN0cmluZyksIFdURk1vdmUo
ZG9jdW1lbnRBdHRyaWJ1dGVzKSB9KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRSZW1vdGVPYmpl
Y3RSZWdpc3RyeShXZWJSZW1vdGVPYmplY3RSZWdpc3RyeSogcmVnaXN0cnkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggNGE1MTNiNjAxNzgx
NDJmYjNkMzc0MmM2MmRmOGNhNTBmN2MwMTg1ZS4uNDY4YzM1OWMxZjU1NmNjYTMxZTI1YmE1ODM1
NzBiYzIzYjU4YWM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZyYW1lLmNwcApAQCAtMzYyLDIwICszNjIsMTUgQEAgU3RyaW5nIFdlYkZyYW1lOjpjb250ZW50
c0FzU3RyaW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKICAg
ICB9CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2NvcmVGcmFtZS0+ZG9jdW1lbnQoKTsK
KyAgICBhdXRvIGRvY3VtZW50ID0gbV9jb3JlRnJhbWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFk
b2N1bWVudCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+
IGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRv
IGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAo
IWRvY3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IGRvY3VtZW50LT5jcmVhdGVSYW5nZSgpOwotCi0gICAgaWYgKHJhbmdl
LT5zZWxlY3ROb2RlKCpkb2N1bWVudEVsZW1lbnQpLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gcGxhaW5UZXh0KHJhbmdlLmdldCgpKTsKKyAg
ICByZXR1cm4gcGxhaW5UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZG9jdW1l
bnRFbGVtZW50KSk7CiB9CiAKIFN0cmluZyBXZWJGcmFtZTo6c2VsZWN0aW9uQXNTdHJpbmcoKSBj
b25zdCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIv
V2ViUGFnZUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9X
ZWJQYWdlR0xpYi5jcHAKaW5kZXggNGU4NmYwNTVhOGJlMzMzMzMwZTNlMjEzZTE4NzQ4ZDhhYjNj
MjFiYS4uMTZiNTM4Y2Y5OWI0NTFjMjU1YTg0MTBlNmZjOWJkNmI4MzY2NGMzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5j
cHAKQEAgLTExMywxMSArMTEzLDExIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JT
dGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgICAg
ICBhdXRvIGNsb25lZFJhbmdlID0gc3Vycm91bmRpbmdSYW5nZS0+Y2xvbmVSYW5nZSgpOwogICAg
ICAgICAgICAgc3Vycm91bmRpbmdSYW5nZS0+c2V0RW5kKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSk7CiAgICAgICAgICAgICBjbG9uZWRSYW5nZS0+c2V0U3RhcnQoY29tcG9zaXRp
b25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJy
b3VuZGluZ0NvbnRleHQgPSBwbGFpblRleHQoc3Vycm91bmRpbmdSYW5nZS5nZXQoKSkgKyBwbGFp
blRleHQoY2xvbmVkUmFuZ2UucHRyKCkpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vy
cm91bmRpbmdDb250ZXh0ID0gcGxhaW5UZXh0KCpzdXJyb3VuZGluZ1JhbmdlKSArIHBsYWluVGV4
dChjbG9uZWRSYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0Nv
bnRleHRDdXJzb3JQb3NpdGlvbiA9IGNoYXJhY3RlckNvdW50KCpzdXJyb3VuZGluZ1JhbmdlKTsK
ICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBv
c2l0aW9uID0gcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb247
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGlu
Z0NvbnRleHQgPSBwbGFpblRleHQoc3Vycm91bmRpbmdSYW5nZS5nZXQoKSk7CisgICAgICAgICAg
ICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHQgPSBwbGFpblRleHQoKnN1cnJvdW5k
aW5nUmFuZ2UpOwogICAgICAgICAgICAgaWYgKHN1cnJvdW5kaW5nU3RhcnQuaXNOdWxsKCkgfHwg
c2VsZWN0aW9uU3RhcnQuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcG9zdExheW91dERhdGEu
c3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSAwOwogICAgICAgICAgICAgZWxzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQppbmRleCA5NjFlMmMxMTFmZjcyNzM4NmJjNzk5Zjg1ZGY1NDIyN2M1YjlmMjBiLi43MGU1Mjg1
NjQ2ZmY4ZGY1NmE5ZDI1MjE3NDhiZmQ1YWY4Y2M0YzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwNDEsMzggKzQw
NDEsMjggQEAgdm9pZCBXZWJQYWdlOjpyZW1vdmVUZXh0UGxhY2Vob2xkZXIoY29uc3QgV2ViQ29y
ZTo6RWxlbWVudENvbnRleHQmIHBsYWNlaG9sZGVyLAogCiB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVNl
bGVjdGlvbldpdGhEZWx0YShpbnQ2NF90IGxvY2F0aW9uRGVsdGEsIGludDY0X3QgbGVuZ3RoRGVs
dGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBSZWY8RnJhbWU+IGZyYW1lID0gY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZE9yTWFpbkZyYW1lKCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkgewot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byByb290ID0gZnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRv
Y3VtZW50RWxlbWVudCgpOwotICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoIXJvb3QgfHwgIXJhbmdlKSB7CisgICAgYXV0byBmcmFtZSA9IG1h
a2VSZWYoY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkp
OworICAgIGF1dG8gcm9vdCA9IG1ha2VSZWZQdHIoZnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0
YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpKTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdl
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgaWYgKCFyb290IHx8ICFzZWxlY3Rpb25SYW5nZSkgewogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2l6ZV90IHNlbGVjdGlvbkxv
Y2F0aW9uOwotICAgIHNpemVfdCBzZWxlY3Rpb25MZW5ndGg7Ci0gICAgVGV4dEl0ZXJhdG9yOjpn
ZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyb290LCByYW5nZS5nZXQoKSwgc2VsZWN0aW9u
TG9jYXRpb24sIHNlbGVjdGlvbkxlbmd0aCk7Ci0KLSAgICBDaGVja2VkSW50NjQgbmV3U2VsZWN0
aW9uTG9jYXRpb24geyBzZWxlY3Rpb25Mb2NhdGlvbiB9OwotICAgIENoZWNrZWRJbnQ2NCBuZXdT
ZWxlY3Rpb25MZW5ndGggeyBzZWxlY3Rpb25MZW5ndGggfTsKKyAgICBhdXRvIHNjb3BlID0gbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KTsKKyAgICBhdXRvIHNlbGVjdGlvbkNo
YXJhY3RlclJhbmdlID0gY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsICpzZWxlY3Rpb25SYW5nZSk7Cisg
ICAgQ2hlY2tlZEludDY0IG5ld1NlbGVjdGlvbkxvY2F0aW9uIHsgc2VsZWN0aW9uQ2hhcmFjdGVy
UmFuZ2UubG9jYXRpb24gfTsKKyAgICBDaGVja2VkSW50NjQgbmV3U2VsZWN0aW9uTGVuZ3RoIHsg
c2VsZWN0aW9uQ2hhcmFjdGVyUmFuZ2UubGVuZ3RoIH07CiAgICAgbmV3U2VsZWN0aW9uTG9jYXRp
b24gKz0gbG9jYXRpb25EZWx0YTsKICAgICBuZXdTZWxlY3Rpb25MZW5ndGggKz0gbGVuZ3RoRGVs
dGE7Ci0KICAgICBpZiAobmV3U2VsZWN0aW9uTG9jYXRpb24uaGFzT3ZlcmZsb3dlZCgpIHx8IG5l
d1NlbGVjdGlvbkxlbmd0aC5oYXNPdmVyZmxvd2VkKCkpIHsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gbmV3U2VsZWN0aW9u
UmFuZ2UgPSBDaGFyYWN0ZXJSYW5nZShuZXdTZWxlY3Rpb25Mb2NhdGlvbi51bnNhZmVHZXQoKSwg
bmV3U2VsZWN0aW9uTGVuZ3RoLnVuc2FmZUdldCgpKTsKLSAgICBhdXRvIHJlc29sdmVkUmFuZ2Ug
PSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpy
b290KSwgbmV3U2VsZWN0aW9uUmFuZ2UpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlZFJhbmdlKS5wdHIoKSwgRE9XTlNUUkVB
TSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJU
cmlnZ2VyZWQpOwotCisgICAgYXV0byB1cGRhdGVkU2VsZWN0aW9uUmFuZ2UgPSByZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSwgbmV3U2Vs
ZWN0aW9uUmFuZ2UpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNy
ZWF0ZUxpdmVSYW5nZSh1cGRhdGVkU2VsZWN0aW9uUmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdn
ZXJlZCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIApAQCAtNDE3NSwyNSArNDE2NSwy
NSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50
RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICBzdGFydE9mUmFuZ2VPZkludGVy
ZXN0SW5TZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJlc3RTdGFydCA+IHNlbGVjdGlvblN0YXJ0ID8g
cmFuZ2VPZkludGVyZXN0U3RhcnQgOiBzZWxlY3Rpb25TdGFydDsKICAgICAgICAgZW5kT2ZSYW5n
ZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHJhbmdlT2ZJbnRlcmVzdEVuZCA8IHNlbGVjdGlvbkVu
ZCA/IHJhbmdlT2ZJbnRlcmVzdEVuZCA6IHNlbGVjdGlvbkVuZDsKICAgICB9IGVsc2UgewotICAg
ICAgICBzaXplX3QgcmFuZ2VPZkludGVyZXN0TG9jYXRpb247Ci0gICAgICAgIHNpemVfdCByYW5n
ZU9mSW50ZXJlc3RMZW5ndGg7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiByb290Tm9kZSA9IHJhbmdl
T2ZJbnRlcmVzdC0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKTsKKyAgICAgICAgYXV0byByb290
Tm9kZSA9IG1ha2VSZWZQdHIocmFuZ2VPZkludGVyZXN0LT5jb21tb25BbmNlc3RvckNvbnRhaW5l
cigpKTsKICAgICAgICAgaWYgKCFyb290Tm9kZSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoeyB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBhdXRv
IHJvb3RDb250YWluZXJOb2RlID0gcm9vdE5vZGUtPmlzQ29udGFpbmVyTm9kZSgpID8gZG93bmNh
c3Q8Q29udGFpbmVyTm9kZT4ocm9vdE5vZGUuZ2V0KCkpIDogcm9vdE5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgaWYgKCFyb290Q29udGFpbmVyTm9kZSkgeworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBhdXRvIHNjb3BlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290Q29udGFp
bmVyTm9kZSk7CiAKLSAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3RDb250YWluZXJO
b2RlID0gcm9vdE5vZGUtPmlzQ29udGFpbmVyTm9kZSgpID8gZG93bmNhc3Q8Q29udGFpbmVyTm9k
ZT4ocm9vdE5vZGUuZ2V0KCkpIDogcm9vdE5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgVGV4
dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShyb290Q29udGFpbmVyTm9k
ZS5nZXQoKSwgcmFuZ2VPZkludGVyZXN0LmdldCgpLCByYW5nZU9mSW50ZXJlc3RMb2NhdGlvbiwg
cmFuZ2VPZkludGVyZXN0TGVuZ3RoKTsKLQotICAgICAgICBDaGVja2VkPHVpbnQ2NF90LCBSZWNv
cmRPdmVyZmxvdz4gbWlkcG9pbnRMb2NhdGlvbiB7IHJhbmdlT2ZJbnRlcmVzdExvY2F0aW9uIH07
Ci0gICAgICAgIG1pZHBvaW50TG9jYXRpb24gKz0gcmFuZ2VPZkludGVyZXN0TGVuZ3RoIC8gMjsK
KyAgICAgICAgYXV0byBjaGFyYWN0ZXJSYW5nZU9mSW50ZXJlc3QgPSBjaGFyYWN0ZXJSYW5nZShz
Y29wZSwgKnJhbmdlT2ZJbnRlcmVzdCk7CisgICAgICAgIGF1dG8gbWlkcG9pbnRMb2NhdGlvbiA9
IGNoZWNrZWRTdW08dWludDY0X3Q+KGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVzdC5sb2NhdGlvbiwg
Y2hhcmFjdGVyUmFuZ2VPZkludGVyZXN0Lmxlbmd0aCAvIDIpOwogICAgICAgICBpZiAobWlkcG9p
bnRMb2NhdGlvbi5oYXNPdmVyZmxvd2VkKCkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHsgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQotICAgICAgICBhdXRv
IG1pZHBvaW50ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlc29sdmVDaGFyYWN0ZXJM
b2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3RDb250YWluZXJOb2Rl
KSwgbWlkcG9pbnRMb2NhdGlvbi51bnNhZmVHZXQoKSkpOworICAgICAgICBhdXRvIG1pZHBvaW50
ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihz
Y29wZSwgbWlkcG9pbnRMb2NhdGlvbi51bnNhZmVHZXQoKSkpOwogCiAgICAgICAgIHN0YXJ0T2ZS
YW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0YXJ0T2ZXb3JkKG1pZHBvaW50KTsKICAgICAg
ICAgaWYgKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA8IHJhbmdlT2ZJbnRlcmVz
dFN0YXJ0KSB7CkBAIC00MjAxLDcgKzQxOTEsNiBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1
bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwog
ICAgICAgICAgICAgaWYgKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA+IHJhbmdl
T2ZJbnRlcmVzdEVuZCkKICAgICAgICAgICAgICAgICBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5T
ZWxlY3Rpb24gPSBtaWRwb2ludDsKICAgICAgICAgfQotCiAgICAgICAgIGVuZE9mUmFuZ2VPZklu
dGVyZXN0SW5TZWxlY3Rpb24gPSBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb247CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCmluZGV4IDk2MjgxYWI4NGYxYWE4Yzc1ZTM2ZjRlYmQxNzc3MzQ3NDE2NWMyOWYu
LmRhMTEzMmMyYzliZDkxNDhjODMzYzg3NTM3ZjNlODI2NjM4ZmNlMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xNTQs
OSArMTU0LDExIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYg
ZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgaWYgKCFzZWxlY3Rpb25TdGFy
dEJvdW5kYXJ5IHx8ICFzZWxlY3Rpb25FbmQgfHwgIXBhcmFncmFwaFN0YXJ0KQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBhdXRvIGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgPSBmcmFt
ZS5lZGl0b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CisKICAgICBwb3N0
TGF5b3V0RGF0YS5jYW5kaWRhdGVSZXF1ZXN0U3RhcnRQb3NpdGlvbiA9IGNoYXJhY3RlckNvdW50
KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB9KTsKICAgICBwb3N0
TGF5b3V0RGF0YS5zZWxlY3RlZFRleHRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudCh7ICpzZWxlY3Rp
b25TdGFydEJvdW5kYXJ5LCAqc2VsZWN0aW9uRW5kIH0pOwotICAgIHBvc3RMYXlvdXREYXRhLnBh
cmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gcGxhaW5UZXh0KGZyYW1lLmVkaXRv
cigpLmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKS5nZXQoKSk7CisgICAgcG9zdExh
eW91dERhdGEucGFyYWdyYXBoQ29udGV4dEZvckNhbmRpZGF0ZVJlcXVlc3QgPSBjb250ZXh0UmFu
Z2VGb3JDYW5kaWRhdGVSZXF1ZXN0ID8gcGxhaW5UZXh0KCpjb250ZXh0UmFuZ2VGb3JDYW5kaWRh
dGVSZXF1ZXN0KSA6IFN0cmluZygpOwogICAgIHBvc3RMYXlvdXREYXRhLnN0cmluZ0ZvckNhbmRp
ZGF0ZVJlcXVlc3QgPSBmcmFtZS5lZGl0b3IoKS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7
CiAKICAgICBJbnRSZWN0IHJlY3RGb3JTZWxlY3Rpb25DYW5kaWRhdGVzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tCmluZGV4IDY5MmVlMDc4MDYyNDE2MTJiOGRmOGI1YmE3MjFlNTRjNDliYmI4MWIuLjNjMzBk
NTdlNjhjY2E0YjYyZTZiOGYwZGFkYjQyODI2MDcxMDRhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0K
QEAgLTEwMzksMTQgKzEwMzksMTEgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRp
dG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmkKIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3Ry
aW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWls
KQogewogICAgIE5TTXV0YWJsZUFycmF5ICpjb3JyZWN0aW9ucyA9IFtOU011dGFibGVBcnJheSBh
cnJheV07Ci0gICAgZm9yIChhdXRvJiBndWVzcyA6IGdyYW1tYXJEZXRhaWwuZ3Vlc3Nlcykgewot
ICAgICAgICBOU1N0cmluZyAqZ3Vlc3NOU1N0cmluZyA9IGd1ZXNzOwotICAgICAgICBbY29ycmVj
dGlvbnMgYWRkT2JqZWN0Omd1ZXNzTlNTdHJpbmddOwotICAgIH0KLSAgICBOU1N0cmluZyAqZGVz
Y3JpcHRpb25OU1N0cmluZyA9IGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uOworICAgIGZv
ciAoYXV0byYgZ3Vlc3MgOiBncmFtbWFyRGV0YWlsLmd1ZXNzZXMpCisgICAgICAgIFtjb3JyZWN0
aW9ucyBhZGRPYmplY3Q6Z3Vlc3NdOwogICAgIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IEB7
CiAgICAgICAgIE5TR3JhbW1hclJhbmdlIDogW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6Z3JhbW1h
ckRldGFpbC5yYW5nZV0sCi0gICAgICAgIE5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiA6IGRlc2Ny
aXB0aW9uTlNTdHJpbmcsCisgICAgICAgIE5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiA6IGdyYW1t
YXJEZXRhaWwudXNlckRlc2NyaXB0aW9uLAogICAgICAgICBOU0dyYW1tYXJDb3JyZWN0aW9ucyA6
IGNvcnJlY3Rpb25zLAogICAgIH07CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIHVwZGF0ZVNwZWxsaW5nUGFuZWxXaXRoR3JhbW1hclN0cmluZzpiYWRHcmFtbWFyUGhy
YXNlIGRldGFpbDpkaWN0aW9uYXJ5XTsKQEAgLTExMjIsOSArMTExOSwxMSBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZQogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCk7CiAgICAgYXV0byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gY2hh
cmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rp
b25TdGFydCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOwogICAgIGF1
dG8gc2VsZWN0aW9uTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
c2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uLnZpc2libGVFbmQo
KSkgfSk7CisgICAgYXV0byBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUt
PmVkaXRvcigpLmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKKyAgICBTdHJpbmcg
Y29udGV4dEZvckNhbmRpZGF0ZVJlcWV1ZXN0ID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVx
dWVzdCA/IHBsYWluVGV4dCgqY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCkgOiBTdHJp
bmcoKTsKIAogICAgIG1fcmFuZ2VGb3JDYW5kaWRhdGVzID0gTlNNYWtlUmFuZ2Uoc2VsZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaCwgc2VsZWN0aW9uTGVuZ3RoKTsKLSAgICBtX3BhcmFncmFw
aENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gcGxhaW5UZXh0KGZyYW1lLT5lZGl0b3IoKS5j
b250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkuZ2V0KCkpOworICAgIG1fcGFyYWdyYXBo
Q29udGV4dEZvckNhbmRpZGF0ZVJlcXVlc3QgPSBjb250ZXh0Rm9yQ2FuZGlkYXRlUmVxZXVlc3Q7
CiAKICAgICBOU1RleHRDaGVja2luZ1R5cGVzIGNoZWNraW5nVHlwZXMgPSBOU1RleHRDaGVja2lu
Z1R5cGVTcGVsbGluZyB8IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50IHwgTlNUZXh0Q2hl
Y2tpbmdUeXBlQ29ycmVjdGlvbjsKICAgICBhdXRvIHdlYWtFZGl0b3IgPSBtYWtlV2Vha1B0cigq
dGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRl
eCBmZTY2ZDFiNTRmNzVkN2ZkYzlmNTY4ZDIyY2Q0OWVmZmQ0ZGM5OTUxLi5lNTVjMzA5MTA1NzU0
YmJjYzgwNDdiNzU4MGQ5NzQwZTIxZDMzYWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTU4Nyw3ICs1ODcsOSBAQCAtIChOU1N0cmluZyAqKV9z
ZWxlY3RlZFN0cmluZwogCiAtIChOU1N0cmluZyAqKV9zdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQogewotICAgIHJldHVybiBwbGFpblRleHQoY29yZShyYW5nZSksIFdlYkNvcmU6OlRl
eHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAg
ICAgcmV0dXJuIEAiIjsKKyAgICByZXR1cm4gcGxhaW5UZXh0KCpjb3JlKHJhbmdlKSwgV2ViQ29y
ZTo6VGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0cnVlKTsKIH0KIAogLSAoT3B0aW9uU2V0
PFdlYkNvcmU6OlBhaW50QmVoYXZpb3I+KV9wYWludEJlaGF2aW9yRm9yRGVzdGluYXRpb25Db250
ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dApAQCAtODA2LDEyICs4MDgsMTUgQEAgLSAoTlNSYW5n
ZSlfY29udmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UgKilyYW5nZQogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIHNp
emVfdCBsb2NhdGlvbiA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0gICAgaWYgKCFXZWJD
b3JlOjpUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKF9wcml2YXRl
LT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxl
bWVudCgpLCByYW5nZSwgbG9jYXRpb24sIGxlbmd0aCkpCisgICAgYXV0byBmcmFtZSA9IF9wcml2
YXRlLT5jb3JlRnJhbWU7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJh
bmdlKE5TTm90Rm91bmQsIDApOworCisgICAgYXV0byogZWxlbWVudCA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIWVs
ZW1lbnQpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAg
IHJldHVybiBOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICByZXR1cm4gY2hhcmFj
dGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCAq
cmFuZ2UpOwogfQogCiAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5n
ZTooTlNSYW5nZSluc3JhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKaW5kZXgg
MzY4ZDdjZTliYTFhMDlhYzU3ZmFmZmU3MTg5YmFkMjdhZGMyM2VlZS4uZDQyZTQ1MTE5NWEyMTMy
YWU5ZDg4NGE1MWE4YjY0YzA2MTFmMzZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1l
LmNwcApAQCAtMTkyMywxMyArMTkyMywxNSBAQCBIUkVTVUxUIFdlYkZyYW1lOjpzdHJpbmcoX0Rl
cmVmX29wdF9vdXRfIEJTVFIqIHJlc3VsdCkKIAogICAgICpyZXN1bHQgPSBudWxscHRyOwogCi0g
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodGhpcyk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCisg
ICAgYXV0byogZnJhbWUgPSBjb3JlKHRoaXMpOworICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJl
dHVybiBFX1VORVhQRUNURUQ7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGFsbFJhbmdlKHJhbmdlT2ZD
b250ZW50cygqY29yZUZyYW1lLT5kb2N1bWVudCgpKSk7Ci0gICAgU3RyaW5nIGFsbFN0cmluZyA9
IHBsYWluVGV4dChhbGxSYW5nZS5nZXQoKSk7Ci0gICAgKnJlc3VsdCA9IEJTdHJpbmcoYWxsU3Ry
aW5nKS5yZWxlYXNlKCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsK
KyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgKnJlc3Vs
dCA9IEJTdHJpbmcocGxhaW5UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZG9j
dW1lbnQpKSkucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09LOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYlZpZXcuY3BwCmluZGV4IDRkYTBhZmZmMzdkYzU2YThjM2ZlMGU1NzYyYzkxMTc4YTNm
ZTMwNDQuLmFkMTM4ZTFkYzFkYjIwMjM1NTU0NGU0ZDQ1Y2NiYjBmZjZkNzFiZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCkBAIC03ODAxLDE0ICs3ODAxLDE2IEBAIEhSRVNVTFQg
V2ViVmlldzo6c2VsZWN0ZWRSYW5nZUZvclRlc3RpbmcoX091dF8gVUlOVCogbG9jYXRpb24sIF9P
dXRfIFVJTlQqIGxlbmd0CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBm
cmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAg
cmV0dXJuIEVfRkFJTDsKIAotICAgIHNpemVfdCBsb2NhdGlvblNpemU7Ci0gICAgc2l6ZV90IGxl
bmd0aFNpemU7Ci0gICAgaWYgKHJhbmdlICYmIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRM
ZW5ndGhGcm9tUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9j
dW1lbnRFbGVtZW50KCksIHJhbmdlLmdldCgpLCBsb2NhdGlvblNpemUsIGxlbmd0aFNpemUpKSB7
Ci0gICAgICAgICpsb2NhdGlvbiA9IHN0YXRpY19jYXN0PFVJTlQ+KGxvY2F0aW9uU2l6ZSk7Ci0g
ICAgICAgICpsZW5ndGggPSBzdGF0aWNfY2FzdDxVSU5UPihsZW5ndGhTaXplKTsKLSAgICB9Cisg
ICAgYXV0byogZWxlbWVudCA9IGZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRP
ckRvY3VtZW50RWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEVf
RkFJTDsKIAorICAgIGF1dG8gcmVsYXRpdmVSYW5nZSA9IGNoYXJhY3RlclJhbmdlKG1ha2VCb3Vu
ZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgKnJhbmdlKTsKKyAgICAqbG9j
YXRpb24gPSBzdGF0aWNfY2FzdDxVSU5UPihyZWxhdGl2ZVJhbmdlLmxvY2F0aW9uKTsKKyAgICAq
bGVuZ3RoID0gc3RhdGljX2Nhc3Q8VUlOVD4ocmVsYXRpdmVSYW5nZS5sZW5ndGgpOwogICAgIHJl
dHVybiBTX09LOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNGZhYWFhMmM4MDMyM2RmM2MzM2QyOGQ1NDE2MjliMDQy
MzFiMTFlMy4uNTY2OTg0MzdjMGM2MWVkMzAwYjM2MWQ2ZmVhOWVkYTU5MzlhY2Y4YiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTA0LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgYWxsIHVzZXMgb2YgbGl2ZSByYW5nZXMgZnJvbSBUZXh0SXRl
cmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
OTcyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
ZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZsYXQtdHJlZS1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZsYXQt
dHJlZS5odG1sOgorICAgICAgICBVcGRhdGVkIHRlc3QgZm9yIGEgcHJvZ3Jlc3Mgd2hlcmUgd2Ug
cHJvcGVybHkgZmluZCBzdHJpbmdzIGFjcm9zcyBhIHNoYWRvdyBib3VuZGFyeS4KKwogMjAyMC0w
NC0wMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAg
SW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBtdXN0IHByZXNlcnZlIHNpZ24gb2Yg
LTAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kLXN0
cmluZy1vbi1mbGF0LXRyZWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0
LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZsYXQtdHJlZS1leHBlY3RlZC50eHQKaW5kZXggNTk4
ZDBkNDRhYzNiNjQzYTdlMjBlNWZhZmVjNDIyNzEwOGIxNDdjZC4uNmEzNjgyMTczYzg2OTkwMWEy
MDdlYWNjZTZlNDFmOTAzOTEzNzcyYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy90
ZXh0LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZsYXQtdHJlZS1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9uLWZsYXQtdHJl
ZS1leHBlY3RlZC50eHQKQEAgLTc2LDcgKzc2LDcgQEAgUEFTUyBpbnRlcm5hbHMuY291bnRGaW5k
TWF0Y2hlcygnaW4tc2hhZG93JywgW10pIGlzIDIKIFBBU1MgaW50ZXJuYWxzLmNvdW50RmluZE1h
dGNoZXMoJ2luLScsIFsnRG9Ob3RUcmF2ZXJzZUZsYXRUcmVlJ10pIGlzIDIKIFBBU1MgaW50ZXJu
YWxzLmNvdW50RmluZE1hdGNoZXMoJ2luLScsIFtdKSBpcyA0CiBQQVNTIGludGVybmFscy5jb3Vu
dEZpbmRNYXRjaGVzKCdpbi1zaGFkb3cgaW4tZG9jdW1lbnQnLCBbJ0RvTm90VHJhdmVyc2VGbGF0
VHJlZSddKSBpcyAwCi1QQVNTIGludGVybmFscy5jb3VudEZpbmRNYXRjaGVzKCdpbi1zaGFkb3cg
aW4tZG9jdW1lbnQnLCBbXSkgaXMgMAorUEFTUyBpbnRlcm5hbHMuY291bnRGaW5kTWF0Y2hlcygn
aW4tc2hhZG93IGluLWRvY3VtZW50JywgW10pIGlzIDEKIFBBU1MgcmFuZ2VUZXh0KGludGVybmFs
cy5yYW5nZU9mU3RyaW5nKCdpbnNpZGUtZGlzcGxheS1ub25lJywgbnVsbCwgW10pKSBpcyBudWxs
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kLXN0cmluZy1vbi1mbGF0LXRyZWUuaHRtbCBi
L0xheW91dFRlc3RzL2VkaXRpbmcvdGV4dC1pdGVyYXRvci9maW5kLXN0cmluZy1vbi1mbGF0LXRy
ZWUuaHRtbAppbmRleCAxOTA1MjUzZmIxNjQ4ZTlhZGRjYTMzMTU4MjA5ZmI5NzI0MDBkMmRiLi4z
NjU5ZmYyZWQxMDQ3NjE4YjQ3MDVkYjU5MTI2NzY1YzA3MDBmMzkxIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9lZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZC1zdHJpbmctb24tZmxhdC10cmVlLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2ZpbmQtc3RyaW5nLW9u
LWZsYXQtdHJlZS5odG1sCkBAIC0xNjAsNyArMTYwLDcgQEAgZWxzZSB7CiAgICAgc2hvdWxkQmUo
ImludGVybmFscy5jb3VudEZpbmRNYXRjaGVzKCdpbi0nLCBbXSkiLCAiNCIpOwogCiAgICAgc2hv
dWxkQmUoImludGVybmFscy5jb3VudEZpbmRNYXRjaGVzKCdpbi1zaGFkb3cgaW4tZG9jdW1lbnQn
LCBbJ0RvTm90VHJhdmVyc2VGbGF0VHJlZSddKSIsICIwIik7Ci0gICAgc2hvdWxkQmUoImludGVy
bmFscy5jb3VudEZpbmRNYXRjaGVzKCdpbi1zaGFkb3cgaW4tZG9jdW1lbnQnLCBbXSkiLCAiMCIp
OworICAgIHNob3VsZEJlKCJpbnRlcm5hbHMuY291bnRGaW5kTWF0Y2hlcygnaW4tc2hhZG93IGlu
LWRvY3VtZW50JywgW10pIiwgIjEiKTsKIAogICAgIHNob3VsZEJlKCJyYW5nZVRleHQoaW50ZXJu
YWxzLnJhbmdlT2ZTdHJpbmcoJ2luc2lkZS1kaXNwbGF5LW5vbmUnLCBudWxsLCBbXSkpIiwgIm51
bGwiKTsKIAo=
</data>
<flag name="review"
          id="410646"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>