<?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>184163</bug_id>
          
          <creation_ts>2018-03-29 16:42:36 -0700</creation_ts>
          <short_desc>Use MacroAssemblerCodePtr in Wasm code for code pointers instead of void*.</short_desc>
          <delta_ts>2018-03-29 22:05:25 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1410442</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 16:42:36 -0700</bug_when>
    <thetext>With the use of MacroAssemblerCodePtr, we now get poisoning for Wasm code pointers.

Also rename some structs, methods, and variable names to be more accurate.  Previously, there is some confusion between a code pointer and the address of a code pointer (sometimes referred to in the code as a &quot;LoadLocation&quot;).  We will now name the LoadLocation variables appropriately to distinguish them from code pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410443</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-29 16:43:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/39020397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410444</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-29 16:44:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/39020437&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410449</commentid>
    <comment_count>3</comment_count>
      <attachid>336820</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 16:59:22 -0700</bug_when>
    <thetext>Created attachment 336820
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410452</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 17:04:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/39020397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410506</commentid>
    <comment_count>5</comment_count>
      <attachid>336820</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-29 20:11:04 -0700</bug_when>
    <thetext>Comment on attachment 336820
proposed patch.

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

This is really great, cleans up the code a bunch :)

r=me with one comment addressed. r- for now because I think it&apos;s wrong without the fix.

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:79
&gt; +    jit.xorPtr(JIT::TrustedImmPtr(g_JITCodePoison), scratch);

if (Options::usePoisoning())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410510</commentid>
    <comment_count>6</comment_count>
      <attachid>336820</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 20:37:39 -0700</bug_when>
    <thetext>Comment on attachment 336820
proposed patch.

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

Thanks for the review.

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:79
&gt;&gt; +    jit.xorPtr(JIT::TrustedImmPtr(g_JITCodePoison), scratch);
&gt; 
&gt; if (Options::usePoisoning())

Technically, this is not wrong.  If !Options::usePoisoning(), the poison value is guaranteed to be 0.  Hence, this xorPtr has no effect.  However, it is less efficient.  I will fix it.  Thanks for the catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410523</commentid>
    <comment_count>7</comment_count>
      <attachid>336820</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-29 20:55:11 -0700</bug_when>
    <thetext>Comment on attachment 336820
proposed patch.

(In reply to Mark Lam from comment #6)
&gt; Comment on attachment 336820 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=336820&amp;action=review
&gt; 
&gt; Thanks for the review.
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:79
&gt; &gt;&gt; +    jit.xorPtr(JIT::TrustedImmPtr(g_JITCodePoison), scratch);
&gt; &gt; 
&gt; &gt; if (Options::usePoisoning())
&gt; 
&gt; Technically, this is not wrong.  If !Options::usePoisoning(), the poison
&gt; value is guaranteed to be 0.  Hence, this xorPtr has no effect.  However, it
&gt; is less efficient.  I will fix it.  Thanks for the catch.

Right, r+ then, with change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410544</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 22:05:25 -0700</bug_when>
    <thetext>Landed in r230096: &lt;http://trac.webkit.org/r230096&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336820</attachid>
            <date>2018-03-29 16:59:22 -0700</date>
            <delta_ts>2018-03-29 20:55:11 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184163.patch</filename>
            <type>text/plain</type>
            <size>40594</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMDg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDE4LTAzLTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBV
c2UgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGluIFdhc20gY29kZSBmb3IgY29kZSBwb2ludGVycyBp
bnN0ZWFkIG9mIHZvaWQqLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg0MTYzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTAyMDM5Nz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoZSB1c2Ug
b2YgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCB3ZSBub3cgZ2V0IHBvaXNvbmluZyBmb3IgV2FzbSBj
b2RlIHBvaW50ZXJzLgorCisgICAgICAgIEFsc28gcmVuYW1lZCBzb21lIHN0cnVjdHMsIG1ldGhv
ZHMsIGFuZCB2YXJpYWJsZSBuYW1lcyB0byBiZSBtb3JlIGFjY3VyYXRlLgorICAgICAgICBQcmV2
aW91c2x5LCB0aGVyZSBpcyBzb21lIGNvbmZ1c2lvbiBiZXR3ZWVuIGEgY29kZSBwb2ludGVyIGFu
ZCB0aGUgYWRkcmVzcyBvZiBhCisgICAgICAgIGNvZGUgcG9pbnRlciAoc29tZXRpbWVzIHJlZmVy
cmVkIHRvIGluIHRoZSBjb2RlIGFzIGEgIkxvYWRMb2NhdGlvbiIpLiAgV2Ugbm93IG5hbWUKKyAg
ICAgICAgdGhlIExvYWRMb2NhdGlvbiB2YXJpYWJsZXMgYXBwcm9wcmlhdGVseSB0byBkaXN0aW5n
dWlzaCB0aGVtIGZyb20gY29kZSBwb2ludGVycy4KKworICAgICAgICAqIHdhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxs
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToK
KyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2Fz
bVRvV2FzbSk6CisgICAgICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAqIHdhc20vV2FzbUNvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlQmxvY2s6OmVudHJ5cG9pbnRMb2FkTG9j
YXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUJs
b2NrOjp3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAoSlNDOjpXYXNt
OjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbjo6Q2FsbGFibGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
Oldhc206OkNhbGxhYmxlRnVuY3Rpb246Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmg6CisgICAgICAgIChK
U0M6Oldhc206Okluc3RhbmNlOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHVi
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mV2FzbUVudHJ5cG9pbnQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNtVG9F
bWJlZGRlclN0dWJFeGVjdXRhYmxlQWRkcmVzcyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorICAg
ICAgICAqIHdhc20vV2FzbVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OlRh
YmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Omdyb3cpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6Y2xlYXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpz
ZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2suaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKToK
KyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHA6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlUYWJsZTo6c2V0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5
RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OldlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDoKKwogMjAxOC0wMy0yOSAgS2VpdGggTWlsbGVyICA8a2Vp
dGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBcnJheU1vZGUgc2hvdWxkIG5vdCB0cnkg
dG8gZ2V0IHRoZSBERkcgdG8gdGhpbmsgaXQgY2FuIGNvbnZlcnQgVHlwZWRBcnJheXMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDIzMDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUg
IkIzV2FzbUFkZHJlc3NWYWx1ZS5oIgogI2luY2x1ZGUgIkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDUG9pc29uLmgiCiAjaW5j
bHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lz
dGVyLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCkBAIC0xMTMwLDcgKzEx
MzEsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bgogICAgICAg
ICAvLyBpbXBsZW1lbnQgdGhlIElDIHRvIGJlIG92ZXIgQ29udGV4dCouCiAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzNzUKICAgICAgICAgVmFs
dWUqIGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsCi0gICAgICAgICAgICBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZXYXNt
VG9FbWJlZGRlclN0dWJFeGVjdXRhYmxlQWRkcmVzcyhmdW5jdGlvbkluZGV4KSkpOworICAgICAg
ICAgICAgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2Fm
ZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mV2FzbVRvRW1iZWRkZXJTdHViKGZ1bmN0
aW9uSW5kZXgpKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VQb2lzb25pbmcoKSkKKyAgICAg
ICAgICAgIGp1bXBEZXN0aW5hdGlvbiA9IGlzRW1iZWRkZXJCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEJpdFhvciwgb3JpZ2luKCksIGp1bXBEZXN0aW5hdGlvbiwgaXNFbWJlZGRlckJs
b2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnX0pJVENvZGVQ
b2lzb24pKTsKKwogICAgICAgICBWYWx1ZSogZW1iZWRkZXJDYWxsUmVzdWx0ID0gd2FzbUNhbGxp
bmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgaXNFbWJlZGRlckJsb2NrLCBvcmlnaW4o
KSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgICAgICBbJl0gKFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVj
dHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAgLTEyMjcsMTMgKzEyMzEsMTMgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgIHsKICAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3Iu
CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIGNhbGxlZUluZGV4
LCBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKKyAg
ICAgICAgICAgIGNhbGxlZUluZGV4LCBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbiA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwg
Y2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsKIAotICAgICAgICAvLyBDaGVjayB0aGF0
IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0
LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxp
emVkLgorICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2ln
bmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgogICAgICAgICAvLyBG
SVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2Fs
bCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihDYWxsYWJsZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQz
Ml90KSwgIkxvYWQgY29kZWdlbiBhc3N1bWVzIGkzMiIpOwotICAgICAgICBFeHByZXNzaW9uVHlw
ZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBz
YWZlQ2FzdDxpbnQzMl90PihPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0
dXJlSW5kZXgpKSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDMyX3QpLCAiTG9h
ZCBjb2RlZ2VuIGFzc3VtZXMgaTMyIik7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZVNp
Z25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGlu
dDMyX3Q+KE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBzaWdu
YXR1cmVJbmRleCkpKTsKICAgICAgICAgewogICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9y
aWdpbigpLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLApAQCAtMTMwOCw3ICsxMzEyLDkgQEAgYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogCiAgICAgRXhwcmVzc2lvblR5cGUgY2Fs
bGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KCksIGNhbGxhYmxlRnVuY3Rpb24sCi0gICAgICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihPQkpF
Q1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgY29kZSkpKSk7CisgICAgICAgICAgICBzYWZl
Q2FzdDxpbnQzMl90PihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5
cG9pbnRMb2FkTG9jYXRpb24oKSkpKTsKKyAgICBpZiAoT3B0aW9uczo6dXNlUG9pc29uaW5nKCkp
CisgICAgICAgIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEJpdFhvciwgb3JpZ2luKCksIGNhbGxlZUNvZGUsIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnX0pJVENvZGVQb2lzb24pKTsK
IAogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CiAgICAgcmVz
dWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50
QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHJldmlzaW9uIDIzMDA4NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJp
bmRpbmdGCiAgICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXYXNtOjpJbnN0YW5jZSBhbmQgc2V0IGl0
IGFzIFdhc21Db250ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2Yg
cmVzdG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNz
KHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZlRhcmdldEluc3RhbmNlKGltcG9y
dEluZGV4KSksIGJhc2VNZW1vcnkpOyAvLyBJbnN0YW5jZSouCiAgICAgLy8gV2hpbGUgd2UncmUg
YWNjZXNzaW5nIHRoYXQgY2FjaGVsaW5lLCBhbHNvIGdldCB0aGUgd2FzbSBlbnRyeXBvaW50IHNv
IHdlIGNhbiB0YWlsIGNhbGwgdG8gaXQgYmVsb3cuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKHNpemVSZWdBc1NjcmF0Y2gsIEluc3RhbmNlOjpvZmZzZXRPZldhc21FbnRyeXBvaW50KGlt
cG9ydEluZGV4KSksIHNjcmF0Y2gpOyAvLyBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
bi4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Moc2l6ZVJlZ0FzU2NyYXRjaCwgSW5zdGFu
Y2U6Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oaW1wb3J0SW5kZXgpKSwgc2Ny
YXRjaCk7CiAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKIAog
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhzaXplUmVnQXNTY3JhdGNoLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBzaXplUmVnQXNTY3JhdGNoKTsKQEAgLTc2LDYg
Kzc2LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5kaW5nRgogCiAgICAg
Ly8gVGFpbCBjYWxsIGludG8gdGhlIGNhbGxlZSBXZWJBc3NlbWJseSBmdW5jdGlvbi4KICAgICBq
aXQubG9hZFB0cihzY3JhdGNoLCBzY3JhdGNoKTsKKyAgICBqaXQueG9yUHRyKEpJVDo6VHJ1c3Rl
ZEltbVB0cihnX0pJVENvZGVQb2lzb24pLCBzY3JhdGNoKTsKICAgICBqaXQuanVtcChzY3JhdGNo
LCBOb1B0clRhZyk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIzMDA4NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNSBAQAotCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjcsNyArNjYsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb250ZXh0KiBjb250ZXh0LCBNCiAg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fY2FsbGVlc1tjYWxsZWVJbmRleF0gPSBXVEZN
b3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKTsKLSAgICAgICAgICAgIG1fd2FzbUluZGlyZWN0Q2Fs
bEVudHJ5UG9pbnRzW2NhbGxlZUluZGV4XSA9IG1fY2FsbGVlc1tjYWxsZWVJbmRleF0tPmVudHJ5
cG9pbnQoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgbV93YXNtSW5kaXJlY3RD
YWxsRW50cnlQb2ludHNbY2FsbGVlSW5kZXhdID0gbV9jYWxsZWVzW2NhbGxlZUluZGV4XS0+ZW50
cnlwb2ludCgpOwogICAgICAgICB9KTsKIAogICAgICAgICBtX3dhc21Ub1dhc21FeGl0U3R1YnMg
PSBtX3BsYW4tPnRha2VXYXNtVG9XYXNtRXhpdFN0dWJzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMzAwODcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYs
NyArNDYsNiBAQCBjbGFzcyBCQlFQbGFuOwogY2xhc3MgT01HUGxhbjsKIHN0cnVjdCBNb2R1bGVJ
bmZvcm1hdGlvbjsKIHN0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxsOwotdHlwZWRlZiB2b2lk
KiogV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb247CiBlbnVtIGNsYXNzIE1lbW9yeU1vZGUgOiB1
aW50OF90OwogICAgIAogY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPENvZGVCbG9jaz4gewpAQCAtOTcsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biAqbV9jYWxsZWVzW2NhbGxlZUluZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICBXYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbklu
ZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciogZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5z
aWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZnVuY3Rpb25JbmRleFNwYWNlID49IGZ1bmN0aW9uSW1wb3J0Q291bnQoKSk7CiAgICAgICAgIHVu
c2lnbmVkIGNhbGxlZUluZGV4ID0gZnVuY3Rpb25JbmRleFNwYWNlIC0gZnVuY3Rpb25JbXBvcnRD
b3VudCgpOwpAQCAtMTI0LDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxD
YWxsZWU+PiBtX2NhbGxlZXM7CiAgICAgVmVjdG9yPFJlZlB0cjxDYWxsZWU+PiBtX29wdGltaXpl
ZENhbGxlZXM7CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPENhbGxlZT4sIHR5cGVuYW1l
IERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1aW50MzJfdD4+IG1fZW1iZWRkZXJDYWxsZWVzOwotICAgIFZlY3Rvcjx2b2lkKj4g
bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
Q29kZVB0cj4gbV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHM7CiAgICAgVmVjdG9yPFRpZXJV
cENvdW50PiBtX3RpZXJVcENvdW50czsKICAgICBWZWN0b3I8VmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+PiBtX3dhc21Ub1dhc21DYWxsc2l0ZXM7CiAgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZj4gbV93YXNtVG9XYXNtRXhpdFN0dWJzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjMwMDg3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMjggKzI3
MCwyNyBAQCBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgRW50cnlwb2ludCBlbnRyeXBv
aW50OwogfTsKIAotdXNpbmcgV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSB2b2lkKio7Ci0K
IC8vIFdlYkFzc2VtYmx5IGRpcmVjdCBjYWxscyBhbmQgY2FsbF9pbmRpcmVjdCB1c2UgaW5kaWNl
cyBpbnRvICJmdW5jdGlvbiBpbmRleCBzcGFjZSIuIFRoaXMgc3BhY2Ugc3RhcnRzCi0vLyB3aXRo
IGFsbCBpbXBvcnRzLCBhbmQgdGhlbiBhbGwgaW50ZXJuYWwgZnVuY3Rpb25zLiBDYWxsYWJsZUZ1
bmN0aW9uIGFuZCBGdW5jdGlvbkluZGV4U3BhY2UgYXJlIG9ubHkKKy8vIHdpdGggYWxsIGltcG9y
dHMsIGFuZCB0aGVuIGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMuIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb24gYW5kIEZ1bmN0aW9uSW5kZXhTcGFjZSBhcmUgb25seQogLy8gbWVhbnQgYXMgZmFz
dCBsb29rdXAgdGFibGVzIGZvciB0aGVzZSBvcGNvZGVzIGFuZCBkbyBub3Qgb3duIGNvZGUuCi1z
dHJ1Y3QgQ2FsbGFibGVGdW5jdGlvbiB7CitzdHJ1Y3QgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbiB7CisgICAgdXNpbmcgTG9hZExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKjsK
ICNpZiAhQ09NUElMRVJfU1VQUE9SVFMoTlNETUlfRk9SX0FHR1JFR0FURVMpCi0gICAgQ2FsbGFi
bGVGdW5jdGlvbigpID0gZGVmYXVsdDsKLSAgICBDYWxsYWJsZUZ1bmN0aW9uKFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4LCBXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiBjb2RlID0gbnVs
bHB0cikKKyAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKCkgPSBkZWZhdWx0OworICAg
IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24oU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXgsIExvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uKQogICAgICAgICA6IHNpZ25h
dHVyZUluZGV4IHsgc2lnbmF0dXJlSW5kZXggfQotICAgICAgICAsIGNvZGUgeyBjb2RlIH0KKyAg
ICAgICAgLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uIHsgZW50cnlwb2ludExvYWRMb2NhdGlvbiB9
CiAgICAgewogICAgIH0KICNlbmRpZgogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZldh
c21FbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENhbGxh
YmxlRnVuY3Rpb24sIGNvZGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5
cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbiwgZW50cnlwb2ludExvYWRMb2NhdGlvbik7IH0KIAogICAgIC8vIEZJ
WE1FOiBQYWNrIHNpZ25hdHVyZSBpbmRleCBhbmQgY29kZSBwb2ludGVyIGludG8gb25lIDY0LWJp
dCB2YWx1ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
NTExPi4KICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCB7IFNpZ25hdHVyZTo6aW52
YWxpZEluZGV4IH07Ci0gICAgV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gY29kZSB7IG51bGxw
dHIgfTsKKyAgICBMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbjsKIH07Ci11c2lu
ZyBGdW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0b3I8Q2FsbGFibGVGdW5jdGlvbj47Cit1c2luZyBG
dW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0b3I8V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbj47
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCShyZXZpc2lvbiAyMzAwODcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDgg
KzExOCw4IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgSW1wb3J0RnVuY3Rpb25JbmZvIHsKICAgICAg
ICAgLy8gVGFyZ2V0IGluc3RhbmNlIGFuZCBlbnRyeXBvaW50IGFyZSBvbmx5IHNldCBmb3Igd2Fz
bS0+d2FzbSBjYWxscywgYW5kIGFyZSBvdGhlcndpc2UgbnVsbHB0ci4gVGhlIGVtYmVkZGVyLXNw
ZWNpZmljIGxvZ2ljIG9jY3VycyB0aHJvdWdoIGltcG9ydCBmdW5jdGlvbi4KICAgICAgICAgSW5z
dGFuY2UqIHRhcmdldEluc3RhbmNlIHsgbnVsbHB0ciB9OwotICAgICAgICBXYXNtOjpXYXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludCB7IG51bGxwdHIgfTsKLSAgICAgICAg
dm9pZCogd2FzbVRvRW1iZWRkZXJTdHViRXhlY3V0YWJsZUFkZHJlc3MgeyBudWxscHRyIH07Cisg
ICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtRW50
cnlwb2ludExvYWRMb2NhdGlvbiB7IG51bGxwdHIgfTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHdhc21Ub0VtYmVkZGVyU3R1YjsKICAgICAgICAgdm9pZCogaW1wb3J0RnVuY3Rpb24g
eyBudWxscHRyIH07IC8vIEluIGEgSlMgZW1iZWRkaW5nLCB0aGlzIGlzIGEgUG9pc29uZWRCYXJy
aWVyPEpTT2JqZWN0Pi4KICAgICB9OwogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtSW1wb3J0RnVuY3Rpb25zOyB9CkBAIC0xMjksOCArMTI5LDgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gJmJpdHdpc2VfY2FzdDxJbXBvcnRGdW5jdGlvbklu
Zm8qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZUYWlsKCkpW2ltcG9ydEZ1
bmN0aW9uTnVtXTsKICAgICB9CiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlRhcmdldEluc3Rh
bmNlKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBp
bXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09G
RlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgdGFyZ2V0SW5zdGFuY2UpOyB9Ci0gICAgc3RhdGlj
IHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50KHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkg
eyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBv
cnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2Fz
bUVudHJ5cG9pbnQpOyB9Ci0gICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21Ub0VtYmVkZGVy
U3R1YkV4ZWN1dGFibGVBZGRyZXNzKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4g
b2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlv
bkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbVRvRW1iZWRk
ZXJTdHViRXhlY3V0YWJsZUFkZHJlc3MpOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldh
c21FbnRyeXBvaW50TG9hZExvY2F0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1
cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5j
dGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24pOyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21Ub0Vt
YmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFp
bCgpICsgaW1wb3J0RnVuY3Rpb25OdW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9C
SkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIHdhc21Ub0VtYmVkZGVyU3R1Yik7IH0K
ICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24oc2l6ZV90IGltcG9ydEZ1
bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICog
c2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rp
b25JbmZvLCBpbXBvcnRGdW5jdGlvbik7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBp
bXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxUKj4oJmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlvbk51bSktPmlt
cG9ydEZ1bmN0aW9uKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyMzAwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNyBAQCB2
b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgcmVzZXRJbnN0cnVjdGlv
bkNhY2hlT25BbGxUaHJlYWRzKCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhp
cyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4K
IAotICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0
aW9uSW5kZXhdID0gZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIG1fY29kZUJs
b2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50
cnlwb2ludDsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5t
X2xvY2spOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAJ
KHJldmlzaW9uIDIzMDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEyICs2NiwxMiBAQCBUYWJsZTo6VGFibGUodWlu
dDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpCiAKICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29y
dGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVu
ZHMgZG9pbmcgc28uCiAgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0Lgot
ICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxs
b2MoKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIENoZWNrZWQ8c2l6ZV90PihhbGxv
Y2F0ZWRMZW5ndGgobV9sZW5ndGgpKSkudW5zYWZlR2V0KCkpOworICAgIG1faW1wb3J0YWJsZUZ1
bmN0aW9ucyA9IE1hbGxvY1B0cjxXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uPjo6bWFsbG9j
KChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbikgKiBDaGVja2VkPHNpemVfdD4o
YWxsb2NhdGVkTGVuZ3RoKG1fbGVuZ3RoKSkpLnVuc2FmZUdldCgpKTsKICAgICAvLyBGSVhNRSB0
aGlzIG92ZXItYWxsb2NhdGVzIGFuZCBjb3VsZCBiZSBzbWFydGVyIGFib3V0IG5vdCBjb21taXR0
aW5nIGFsbCBvZiB0aGF0IG1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgxNDI1CiAgICAgbV9pbnN0YW5jZXMgPSBNYWxsb2NQdHI8SW5zdGFuY2UqPjo6bWFs
bG9jKChzaXplb2YoSW5zdGFuY2UqKSAqIENoZWNrZWQ8c2l6ZV90PihhbGxvY2F0ZWRMZW5ndGgo
bV9sZW5ndGgpKSkudW5zYWZlR2V0KCkpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBh
bGxvY2F0ZWRMZW5ndGgobV9sZW5ndGgpOyArK2kpIHsKLSAgICAgICAgbmV3ICgmbV9mdW5jdGlv
bnMuZ2V0KClbaV0pIENhbGxhYmxlRnVuY3Rpb24oKTsKLSAgICAgICAgQVNTRVJUKG1fZnVuY3Rp
b25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZElu
ZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCisgICAgICAgIG5ldyAo
Jm1faW1wb3J0YWJsZUZ1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbigpOworICAgICAgICBBU1NFUlQobV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdldCgpW2ldLnNp
Z25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVs
eSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCiAgICAgICAgIG1faW5zdGFuY2VzLmdldCgpW2ld
ID0gbnVsbHB0cjsKICAgICB9CiB9CkBAIC0xMDgsNyArMTA4LDcgQEAgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gVGFibGU6Omdyb3codWludAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Owog
Ci0gICAgaWYgKCFjaGVja2VkR3JvdyhtX2Z1bmN0aW9ucykpCisgICAgaWYgKCFjaGVja2VkR3Jv
dyhtX2ltcG9ydGFibGVGdW5jdGlvbnMpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
ICAgIGlmICghY2hlY2tlZEdyb3cobV9pbnN0YW5jZXMpKQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwpAQCAtMTIxLDE1ICsxMjEsMTUgQEAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gVGFi
bGU6Omdyb3codWludAogdm9pZCBUYWJsZTo6Y2xlYXJGdW5jdGlvbih1aW50MzJfdCBpbmRleCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKLSAgICBtX2Z1bmN0aW9u
cy5nZXQoKVtpbmRleCAmIG1fbWFza10gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKCk7Ci0gICAg
QVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV9tYXNrXS5zaWduYXR1cmVJbmRleCA9
PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBj
b21waWxlZCBjb2RlLgorICAgIG1faW1wb3J0YWJsZUZ1bmN0aW9ucy5nZXQoKVtpbmRleCAmIG1f
bWFza10gPSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKCk7CisgICAgQVNTRVJUKG1faW1w
b3J0YWJsZUZ1bmN0aW9ucy5nZXQoKVtpbmRleCAmIG1fbWFza10uc2lnbmF0dXJlSW5kZXggPT0g
V2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29t
cGlsZWQgY29kZS4KICAgICBtX2luc3RhbmNlcy5nZXQoKVtpbmRleCAmIG1fbWFza10gPSBudWxs
cHRyOwogfQogCi12b2lkIFRhYmxlOjpzZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCwgQ2FsbGFi
bGVGdW5jdGlvbiBmdW5jdGlvbiwgSW5zdGFuY2UqIGluc3RhbmNlKQordm9pZCBUYWJsZTo6c2V0
RnVuY3Rpb24odWludDMyX3QgaW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gZnVu
Y3Rpb24sIEluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8
IGxlbmd0aCgpKTsKLSAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleCAmIG1fbWFza10gPSBmdW5j
dGlvbjsKKyAgICBtX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0KClbaW5kZXggJiBtX21hc2tdID0g
ZnVuY3Rpb247CiAgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdID0gaW5zdGFu
Y2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oCShyZXZp
c2lvbiAyMzAwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQz
Ml90PiBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdm9pZCBj
bGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKLSAgICB2b2lkIHNldEZ1bmN0aW9uKHVpbnQzMl90LCBD
YWxsYWJsZUZ1bmN0aW9uLCBJbnN0YW5jZSopOworICAgIHZvaWQgc2V0RnVuY3Rpb24odWludDMy
X3QsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIEluc3RhbmNlKik7CiAKLSAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnVu
Y3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBtX2ltcG9ydGFibGVGdW5j
dGlvbnMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlcygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9pbnN0YW5jZXMpOyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwg
bV9sZW5ndGgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1hc2soKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1fbWFzayk7IH0KQEAgLTY0LDcgKzY0LDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgc2V0TGVuZ3RoKHVpbnQzMl90KTsKIAotICAgIE1hbGxvY1B0cjxD
YWxsYWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9uczsKKyAgICBNYWxsb2NQdHI8V2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbj4gbV9pbXBvcnRhYmxlRnVuY3Rpb25zOwogICAgIC8vIGNhbGxfaW5k
aXJlY3QgbmVlZHMgdG8gZG8gYW4gSW5zdGFuY2UgY2hlY2sgdG8gcG90ZW50aWFsbHkgY29udGV4
dCBzd2l0Y2ggd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gdG8gYW5vdGhlciBpbnN0YW5jZS4gV2Ug
Y2FuIGhvbGQgcmF3IHBvaW50ZXJzIHRvIEluc3RhbmNlIGhlcmUgYmVjYXVzZSB0aGUgZW1iZWRk
ZXIgZW5zdXJlcyB0aGF0IFRhYmxlIGtlZXBzIGFsbCB0aGUgaW5zdGFuY2VzIGFsaXZlLiBXZSBj
b3VsZG4ndCBob2xkIGEgUmVmIGhlcmUgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBjeWNsZXMuCiAg
ICAgTWFsbG9jUHRyPEluc3RhbmNlKj4gbV9pbnN0YW5jZXM7CiAgICAgdWludDMyX3QgbV9sZW5n
dGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9jay5oCShyZXZpc2lvbiAyMzAwODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogCiAgICAgV2FzbTo6Q29kZUJsb2NrJiBjb2RlQmxv
Y2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogICAgIAotICAgIHZvaWQqIHdhc21U
b0VtYmVkZGVyU3R1YkV4ZWN1dGFibGVBZGRyZXNzKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkg
eyByZXR1cm4gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRGdW5jdGlvbk51bV0uY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7IH0KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2FzbVRvRW1i
ZWRkZXJTdHViKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gbV93YXNtVG9KU0V4
aXRTdHVic1tpbXBvcnRGdW5jdGlvbk51bV0uY29kZSgpOyB9CiAKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjMwMDg3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpmaW5hbGl6ZUNyZWEKIAogICAgIGZvciAodW5zaWduZWQgaW1wb3J0RnVuY3Rpb25OdW0g
PSAwOyBpbXBvcnRGdW5jdGlvbk51bSA8IGluc3RhbmNlKCkubnVtSW1wb3J0RnVuY3Rpb25zKCk7
ICsraW1wb3J0RnVuY3Rpb25OdW0pIHsKICAgICAgICAgYXV0byogaW5mbyA9IGluc3RhbmNlKCku
aW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKTsKLSAgICAgICAgaW5mby0+d2Fz
bVRvRW1iZWRkZXJTdHViRXhlY3V0YWJsZUFkZHJlc3MgPSBtX2NvZGVCbG9jay0+d2FzbVRvRW1i
ZWRkZXJTdHViRXhlY3V0YWJsZUFkZHJlc3MoaW1wb3J0RnVuY3Rpb25OdW0pOworICAgICAgICBp
bmZvLT53YXNtVG9FbWJlZGRlclN0dWIgPSBtX2NvZGVCbG9jay0+d2FzbVRvRW1iZWRkZXJTdHVi
KGltcG9ydEZ1bmN0aW9uTnVtKTsKICAgICB9CiAKICAgICBhdXRvKiBtb2R1bGVSZWNvcmQgPSBq
c0Nhc3Q8V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqPihtX21vZHVsZU5hbWVzcGFjZU9iamVjdC0+
bW9kdWxlUmVjb3JkKCkpOwpAQCAtMjAzLDcgKzIwMyw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogSlNXZWJBc3NlbWJseUluc3QKICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNy
ZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZXhlYywgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGlt
cG9ydCwgImltcG9ydCBmdW5jdGlvbiIsICJtdXN0IGJlIGNhbGxhYmxlIikpKTsKIAogICAgICAg
ICAgICAgV2FzbTo6SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIFdhc206Oldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50ID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2Nh
dGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKTsKIAogICAgICAgICAgICAg
Ly8gaWkuIElmIHYgaXMgYW4gRXhwb3J0ZWQgRnVuY3Rpb24gRXhvdGljIE9iamVjdDoKQEAgLTIx
NSw3ICsyMTUsNyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0CiAg
ICAgICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikgewogICAgICAgICAgICAgICAgICAgICBp
bXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOwog
ICAgICAgICAgICAgICAgICAgICBjYWxsZWVJbnN0YW5jZSA9ICZ3YXNtRnVuY3Rpb24tPmluc3Rh
bmNlKCktPmluc3RhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdhc21FbnRyeXBvaW50ID0g
d2FzbUZ1bmN0aW9uLT53YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpOworICAgICAgICAgICAg
ICAgICAgICBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gd2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50
TG9hZExvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBw
ZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0CiAgICAgICAgICAgICBBU1NFUlQobnVt
SW1wb3J0RnVuY3Rpb25zID09IGltcG9ydC5raW5kSW5kZXgpOwogICAgICAgICAgICAgYXV0byog
aW5mbyA9IGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKG51bUltcG9y
dEZ1bmN0aW9ucyk7CiAgICAgICAgICAgICBpbmZvLT50YXJnZXRJbnN0YW5jZSA9IGNhbGxlZUlu
c3RhbmNlOwotICAgICAgICAgICAgaW5mby0+d2FzbUVudHJ5cG9pbnQgPSB3YXNtRW50cnlwb2lu
dDsKKyAgICAgICAgICAgIGluZm8tPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uID0gZW50cnlw
b2ludExvYWRMb2NhdGlvbjsKICAgICAgICAgICAgIGpzSW5zdGFuY2UtPmluc3RhbmNlKCkuaW1w
b3J0RnVuY3Rpb248UG9pc29uZWRCYXJyaWVyPEpTT2JqZWN0Pj4obnVtSW1wb3J0RnVuY3Rpb25z
KS0+c2V0KHZtLCBqc0luc3RhbmNlLCBmdW5jdGlvbik7CiAgICAgICAgICAgICArK251bUltcG9y
dEZ1bmN0aW9uczsKICAgICAgICAgICAgIC8vIHYuIEFwcGVuZCBjbG9zdXJlIHRvIGltcG9ydHMu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5jcHAJKHJldmlzaW9uIDIzMDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwx
MyArMTI2LDEzIEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKHUKIAog
dm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5k
ZXgsIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uKQogewotICAgIG1fdGFibGUtPnNldEZ1
bmN0aW9uKGluZGV4LCBmdW5jdGlvbi0+Y2FsbGFibGVGdW5jdGlvbigpLCAmZnVuY3Rpb24tPmlu
c3RhbmNlKCktPmluc3RhbmNlKCkpOworICAgIG1fdGFibGUtPnNldEZ1bmN0aW9uKGluZGV4LCBm
dW5jdGlvbi0+aW1wb3J0YWJsZUZ1bmN0aW9uKCksICZmdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5z
dGFuY2UoKSk7CiAgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleCAmIG1fdGFibGUtPm1hc2so
KV0uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxl
OjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiogZnVuY3Rpb24pCiB7Ci0gICAgbV90YWJsZS0+c2V0RnVuY3Rpb24oaW5kZXgsIGZ1
bmN0aW9uLT5jYWxsYWJsZUZ1bmN0aW9uKCksICZmdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFu
Y2UoKSk7CisgICAgbV90YWJsZS0+c2V0RnVuY3Rpb24oaW5kZXgsIGZ1bmN0aW9uLT5pbXBvcnRh
YmxlRnVuY3Rpb24oKSwgJmZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpKTsKICAgICBt
X2pzRnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV90YWJsZS0+bWFzaygpXS5zZXQodm0sIHRoaXMs
IGZ1bmN0aW9uKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIzMDA4NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjYWxsCiAgICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CiB9CiAKLVdlYkFz
c2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50
cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnQs
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlGdW5jdGlv
biogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNt
OjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
KQogewogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rp
b24oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKTsKLSAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdl
YkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtRW50cnlwb2ludCwgc2lnbmF0
dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdh
c21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAgICAgZnVu
Y3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUsIGluc3Rh
bmNlKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aXNMYXJnZUFsbG9jYXRp
b24oKSwgIldlYkFzc2VtYmx5RnVuY3Rpb24gc2hvdWxkIGJlIGFsbG9jYXRlZCBub3QgaW4gbGFy
Z2UgYWxsb2NhdGlvbiBzaW5jZSBpdCBpcyBKU0NhbGxlZS4iKTsKICAgICByZXR1cm4gZnVuY3Rp
b247CkBAIC0xOTIsMTAgKzE5MiwxMCBAQCBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RnVuY3Rpb246
OmNyZWF0ZVN0CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRp
b24gd2FzbUVudHJ5cG9pbnQsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQor
V2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsZWUm
IGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExv
Y2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCkKICAgICA6IEJhc2UgeyB2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUgfQogICAgICwgbV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9pbnQuZW50cnlwb2ludCgp
IH0KLSAgICAsIG1fd2FzbUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21FbnRyeXBvaW50
IH0KKyAgICAsIG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dh
c21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0KIHsgfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmgJKHJldmlzaW9uIDIzMDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0Owogc3RydWN0IFByb3RvQ2Fs
bEZyYW1lOwogY2xhc3MgV2ViQXNzZW1ibHlJbnN0YW5jZTsKK3VzaW5nIFdhc206Oldhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb247CiAKIG5hbWVzcGFjZSBCMyB7CiBjbGFzcyBDb21waWxhdGlv
bjsKQEAgLTU2LDI1ICs1NywyNSBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsK
IAotICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV93YXNtRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KLSAgICBXYXNtOjpXYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fd2FzbUZ1bmN0aW9uLmNvZGU7IH0KLSAgICBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIGNh
bGxhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbjsgfQorICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbXBv
cnRhYmxlRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KKyAgICBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLmVudHJ5cG9pbnRMb2FkTG9jYXRpb247IH0KKyAg
ICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGltcG9ydGFibGVGdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uOyB9CiAKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIganNFbnRyeXBvaW50KCkgeyByZXR1cm4gbV9qc0VudHJ5cG9pbnQ7IH0KIAotICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX3dhc21GdW5jdGlvbikg
KyBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRMb2Nh
dGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2lt
cG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRP
ZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQogCiBwcml2YXRlOgotICAgIFdlYkFzc2VtYmx5
RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYg
anNFbnRyeXBvaW50LCBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2ln
bmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2Fz
bTo6U2lnbmF0dXJlSW5kZXgpOwogCi0gICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUg
cmF3IENhbGxhYmxlRnVuY3Rpb24vanNFbnRyeXBvaW50IGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVy
ZW5jZQorICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uL2pzRW50cnlwb2ludCBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UK
ICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUgTW9kdWxlIHRoYXQg
ZXhwb3J0ZWQgdXMsIHdoaWNoCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0
dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIG1fanNFbnRyeXBvaW50OwotICAgIFdhc206OkNhbGxhYmxlRnVuY3Rpb24gbV93YXNtRnVu
Y3Rpb247CisgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBtX2ltcG9ydGFibGVGdW5j
dGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAko
cmV2aXNpb24gMjMwMDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMTAgKzEyMywxMCBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAgICAg
ICAgLy8gICAgIGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgICAgIC8vICAg
ICBjLiBSZXR1cm4gZnVuYy4KICAgICAgICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVy
RW50cnlwb2ludENhbGxlZSA9IGNvZGVCbG9jay0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsKLSAgICAgICAgICAgICAgICBXYXNt
OjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiA9
IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGV4cC5raW5kSW5kZXgpOworICAgICAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY29k
ZUJsb2NrLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAu
a2luZEluZGV4KTsKICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGV4
cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
Ci0gICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgU3RyaW5nOjpmcm9tVVRGOChleHAuZmllbGQpLCBpbnN0YW5jZSwgZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlLCB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5k
ZXgpOworICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCksIFN0cmluZzo6ZnJvbVVURjgoZXhwLmZpZWxkKSwgaW5zdGFuY2UsIGVtYmVk
ZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTk1LDggKzE5NSw4IEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlv
bi5zZXQodm0sIHRoaXMsIHN0YXJ0RnVuY3Rpb24pOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2RlQmxvY2st
PmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5j
dGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPndhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFz
c2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCAic3RhcnQiLCBpbnN0YW5jZSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCB3
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAg
V2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9p
bnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAgICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICJzdGFydCIsIGlu
c3RhbmNlLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24s
IHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0sIHRo
aXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMywxNCArMzEzLDE0IEBAIEpT
VmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjb2Rl
QmxvY2stPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleCk7Ci0gICAgICAgICAgICBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
biB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAg
ICAgICAgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjb2RlQmxvY2stPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25G
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICAgICAgY29uc3Qg
V2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0
IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgICAgICAv
LyBXaGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4
IDAuCiAgICAgICAgICAgICAvLyBEb2VzIChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0cy5mb28g
PT09IHRhYmxlLmdldCgwKT8KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24q
IGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKAotICAgICAgICAgICAgICAg
IHZtLCBtX2luc3RhbmNlLT5nbG9iYWxPYmplY3QoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSwgU3RyaW5nKCksIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwg
d2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICB2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCksIHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksIFN0cmluZygpLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxs
ZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKIAogICAgICAgICAg
ICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCB0YWJsZUluZGV4LCBmdW5jdGlvbik7CiAgICAgICAg
ICAgICArK3RhYmxlSW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyMzAwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsOSArNTMsOSBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCks
IEFyZ0xpc3QoZXhlYykpKTsKIH0KIAotV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OldlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxhYmxlRnVuY3Rpb24gd2FzbUZ1bmN0
aW9uKQorV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaW1wb3J0YWJsZUZ1bmN0
aW9uKQogICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX3dh
c21GdW5jdGlvbih3YXNtRnVuY3Rpb24pCisgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbihpbXBv
cnRhYmxlRnVuY3Rpb24pCiB7IH0KIAogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdCogZnVuY3Rpb24sIHVuc2lnbmVkIGltcG9ydEluZGV4LCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCkKQEAgLTYzLDcgKzYzLDcgQEAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdl
YkFzc2VtYmx5VwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9uLT5pbmhlcml0czxX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0pLCAiV2Ugc2hvdWxkIG5ldmVyIGRvdWJsZSB3
cmFwIGEgd3JhcHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9ICIiOwogICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29u
c3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCAmaW5zdGFuY2UtPmlu
c3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEluZGV4KS0+d2FzbVRvRW1iZWRkZXJT
dHViRXhlY3V0YWJsZUFkZHJlc3MgfSApOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCAm
aW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEluZGV4KS0+d2Fz
bVRvRW1iZWRkZXJTdHViIH0gKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVy
ZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwogICAg
IHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjMwMDg3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAordXNpbmcgV2Fz
bTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjsKKwogY2xhc3MgV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24gZmluYWwgOiBwdWJsaWMgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UgewogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTsKQEAgLTQ5LDkg
KzUxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiog
Y3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGltcG9ydElu
ZGV4LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKTsKIAotICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV93YXNtRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KLSAgICBXYXNtOjpX
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiAgd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbi5jb2RlOyB9Ci0gICAgV2FzbTo6Q2FsbGFibGVG
dW5jdGlvbiBjYWxsYWJsZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV93YXNtRnVuY3Rpb247
IH0KKyAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4OyB9CisgICAgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uICBlbnRyeXBvaW50TG9hZExvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2Nh
dGlvbjsgfQorICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaW1wb3J0YWJsZUZ1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb247IH0KICAgICBKU09iamVj
dCogZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9uLmdldCgpOyB9CiAKIHByb3RlY3RlZDoK
QEAgLTYwLDEzICs2MiwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSlNPYmplY3QqLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKIAogcHJpdmF0ZToKLSAgICBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbik7CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb24pOwogCiAgICAgUG9pc29uZWRXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb25Qb2lzb24sIEpTT2JqZWN0PiBtX2Z1bmN0aW9uOwotICAgIC8vIEl0J3Mgc2FmZSB0
byBqdXN0IGhvbGQgdGhlIHJhdyBDYWxsYWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJl
ZmVyZW5jZQorICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQogICAgIC8vIHRv
IG91ciBJbnN0YW5jZSwgd2hpY2ggcG9pbnRzIHRvIHRoZSBDb2RlQmxvY2ssIHdoaWNoIHBvaW50
cyB0byB0aGUgTW9kdWxlCiAgICAgLy8gdGhhdCBleHBvcnRlZCB1cywgd2hpY2ggZW5zdXJlcyB0
aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCi0g
ICAgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiBtX3dhc21GdW5jdGlvbjsKKyAgICBXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uIG1faW1wb3J0YWJsZUZ1bmN0aW9uOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCg==
</data>
<flag name="review"
          id="355306"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
      

    </bug>

</bugzilla>