<?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>162978</bug_id>
          
          <creation_ts>2016-10-05 10:39:00 -0700</creation_ts>
          <short_desc>[DOMJIT] Support slow path call</short_desc>
          <delta_ts>2016-10-06 22:09:45 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>162941</dependson>
          <blocked>162544</blocked>
    
    <blocked>163005</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1236704</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-05 10:39:00 -0700</bug_when>
    <thetext>DOMJIT::Patchpoint (Maybe, DOMJIT::PatchpointParams) should have ability to request slow path call in both DFG and FTL!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236708</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-05 10:49:10 -0700</bug_when>
    <thetext>If we expose variadic template-ed slow path generator that calls DFG / FTL slow path generators, it exposes almost all the DFG and FTL.
For example, I tested the above design. And I ends up with exposing DFGSpeculativeJIT! That&apos;s bad.

Instead, I&apos;ll take callOperation like design. We list up necessary calls in DFGSlowPathCall.h. And it will invoke DFG / FTL&apos;s appropriate functionality in DFGSlowPathCall.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236976</commentid>
    <comment_count>2</comment_count>
      <attachid>290802</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-06 02:51:05 -0700</bug_when>
    <thetext>Created attachment 290802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237425</commentid>
    <comment_count>3</comment_count>
      <attachid>290802</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-06 19:15:53 -0700</bug_when>
    <thetext>Comment on attachment 290802
Patch

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

&gt; Source/JavaScriptCore/domjit/DOMJITSlowPathCalls.h:32
&gt; +#define DOMJIT_SLOW_PATH_CALLS(macro) \
&gt; +    macro(J_JITOperation_EP, JSValueRegs, GPRReg) \

I wonder if it ever makes sense to expose a call API that&apos;s more abstract like this:

class Call {
      struct Argument {
              Argument(GPRReg);
              Argument(JSValueRegs);
              Argument(immediate type: int32/int64/pointer); 
      }
      Type m_resultType;
      Vector&lt;Arguments&gt; m_arguments;
      FunctionPtr m_function;
};
and then have a function like:
setupCallWithExecState(const Call&amp; call);

&gt; Source/JavaScriptCore/ftl/FTLDOMJITPatchpointParams.cpp:41
&gt; +    params.addLatePath([=] (CCallHelpers&amp; jit) {

I wonder if it ever makes sense to have a normal call API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237461</commentid>
    <comment_count>4</comment_count>
      <attachid>290802</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-06 21:37:38 -0700</bug_when>
    <thetext>Comment on attachment 290802
Patch

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

&gt;&gt; Source/JavaScriptCore/ftl/FTLDOMJITPatchpointParams.cpp:41
&gt;&gt; +    params.addLatePath([=] (CCallHelpers&amp; jit) {
&gt; 
&gt; I wonder if it ever makes sense to have a normal call API.

Oops, thanks. It&apos;s OK. fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237462</commentid>
    <comment_count>5</comment_count>
      <attachid>290802</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-06 21:38:13 -0700</bug_when>
    <thetext>Comment on attachment 290802
Patch

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

&gt;&gt; Source/JavaScriptCore/domjit/DOMJITSlowPathCalls.h:32
&gt;&gt; +    macro(J_JITOperation_EP, JSValueRegs, GPRReg) \
&gt; 
&gt; I wonder if it ever makes sense to expose a call API that&apos;s more abstract like this:
&gt; 
&gt; class Call {
&gt;       struct Argument {
&gt;               Argument(GPRReg);
&gt;               Argument(JSValueRegs);
&gt;               Argument(immediate type: int32/int64/pointer); 
&gt;       }
&gt;       Type m_resultType;
&gt;       Vector&lt;Arguments&gt; m_arguments;
&gt;       FunctionPtr m_function;
&gt; };
&gt; and then have a function like:
&gt; setupCallWithExecState(const Call&amp; call);

Looks clean. I filed it in https://bugs.webkit.org/show_bug.cgi?id=163099</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237468</commentid>
    <comment_count>6</comment_count>
      <attachid>290802</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-06 21:50:12 -0700</bug_when>
    <thetext>Comment on attachment 290802
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/ftl/FTLDOMJITPatchpointParams.cpp:41
&gt;&gt;&gt; +    params.addLatePath([=] (CCallHelpers&amp; jit) {
&gt;&gt; 
&gt;&gt; I wonder if it ever makes sense to have a normal call API.
&gt; 
&gt; Oops, thanks. It&apos;s OK. fixed.

But, after considering, the above one is still useful. We can emit slow path after the fast path sequence by using addLatePath.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237472</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-06 22:09:45 -0700</bug_when>
    <thetext>Committed r206899: &lt;http://trac.webkit.org/changeset/206899&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290802</attachid>
            <date>2016-10-06 02:51:05 -0700</date>
            <delta_ts>2016-10-06 19:15:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162978-20161006184751.patch</filename>
            <type>text/plain</type>
            <size>39030</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ZDQzODFjNTc0MTE1YTI3Y2MwY2Y5MDcyNTdmZWYxNWFhYzllYmNlLi5lZDY4NzU0YjlmMmYzNjFk
OGQxYWM3ZmRhNjljMjk4MmEzOTQwYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxNi0xMC0wNiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbRE9NSklUXSBTdXBwb3J0IHNsb3cgcGF0aCBjYWxsCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NzgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbmUgb2YgdGhlIG1vc3Qg
aW1wb3J0YW50IGZlYXR1cmVzIHJlcXVpcmVkIGluIERPTUpJVDo6UGF0Y2hwb2ludCBpcyBzbG93
IHBhdGggY2FsbHMuCisgICAgICAgIERPTSBvcGVyYXRpb24gdHlwaWNhbGx5IHJldHVybnMgRE9N
V3JhcHBlciBvYmplY3QuIEF0IHRoYXQgdGltZSwgaWYgd3JhcHBlciBjYWNoZSBoaXRzLCB3ZSBj
YW4gZ28KKyAgICAgICAgdG8gdGhlIGZhc3QgcGF0aC4gSG93ZXZlciwgaWYgd2UgY2Fubm90IHVz
ZSB0aGUgY2FjaGUsIHdlIG5lZWQgdG8gZ28gdG8gdGhlIHNsb3cgcGF0aCB0byBjYWxsIHRvSlMg
ZnVuY3Rpb24uCisgICAgICAgIEF0IHRoYXQgdGltZSwgc2xvdyBwYXRoIGNhbGwgZnVuY3Rpb25h
bGl0eSBpcyBuZWNlc3NhcnkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBleHBvc2UgRE9NSklUOjpQ
YXRjaHBvaW50UGFyYW1zOjphZGRTbG93UGF0aENhbGwuIFdlIGNhbiByZXF1ZXN0IHNsb3cgcGF0
aCBjYWxsIGNvZGUgZ2VuZXJhdGlvbgorICAgICAgICB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlLiBE
T01KSVQ6OlBhdGNocG9pbnRQYXJhbXMgYXV0b21hdGljYWxseSBsZXZlcmFnZXMgYXBwcm9wcmlh
dGUgc2xvdyBwYXRoIGNhbGwgc3lzdGVtcworICAgICAgICBpbiBlYWNoIHRpZXIuIEluIERGRywg
d2UgdXNlIHNsb3cgcGF0aCBjYWxsIHN5c3RlbS4gSW4gRlRMLCB3ZSBpbXBsZW1lbnQgc2xvdyBw
YXRoIGNhbGwgYnkgdXNpbmcgYWRkTGF0ZVBhdGgKKyAgICAgICAgdG8gY29uc3RydWN0IHNsb3cg
cGF0aCBjYWxsLiBCdXQgdGhlc2UgZGV0YWlscyBhcmUgY29tcGxldGVseSBoaWRkZW4gYnkgRE9N
SklUOjpQYXRjaHBvaW50UGFyYW1zLiBVc2VycyBjYW4KKyAgICAgICAganVzdCB1c2UgYWRkU2xv
d1BhdGhDYWxsLgorCisgICAgICAgIFNpbmNlIERGRyBhbmQgRlRMIHNsb3cgcGF0aCBjYWxsIHN5
c3RlbXMgYXJlIGltcGxlbWVudGVkIGluIHZhcmlhZGljIHRlbXBsYXRlcywgZGlyZWN0bHkgdXNp
bmcgdGhpcyBtZWFucworICAgICAgICB0aGF0IHdlIG5lZWQgdG8gZXhwb3NlIGNvcmUgcGFydCBv
ZiBERkcgYW5kIEZUTC4gRm9yIGV4YW1wbGUsIERGRzo6U3BlY3VsYXRpdmVKSVQgbmVlZCB0byBi
ZSBleHBvc2VkIGluCisgICAgICAgIHN1Y2ggYSBkZXNpZ24uIFRoYXQgaXMgdG9vIGJhZC4gSW5z
dGVhZCwgd2UgdXNlIG1hZ2ljYWwgbWFjcm8gaW4gRE9NSklUU2xvd1BhdGhDYWxscy5oLiBXZSBj
YW4gbGlzdCB1cCB0aGUKKyAgICAgICAgY2FsbCBzaWduYXR1cmVzIGluIERPTUpJVF9TTE9XX1BB
VEhfQ0FMTFMuIERPTUpJVCB1c2VzIHRoZXNlIHNpZ25hdHVyZXMgdG8gZ2VuZXJhdGUgYW4gaW50
ZXJmYWNlIHRvIHJlcXVlc3QKKyAgICAgICAgc2xvdyBwYXRoIGNhbGxzIGluc2lkZSBERkcgYW5k
IEZUTCBpbnN0ZWFkIG9mIGV4cG9zaW5nIGV2ZXJ5dGhpbmcuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHRE9NSklU
UGF0Y2hwb2ludFBhcmFtcy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
b21qaXQvRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oLgorICAgICAgICAoSlNDOjpERkc6OmRpc3Bh
dGNoKToKKyAgICAgICAgKiBkZmcvREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZG9taml0L0RPTUpJVFBhdGNocG9pbnRQYXJhbXMu
aC4KKyAgICAgICAgKEpTQzo6REZHOjpET01KSVRQYXRjaHBvaW50UGFyYW1zOjpET01KSVRQYXRj
aHBvaW50UGFyYW1zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0RPTSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6ZXh0cmFjdFJlc3Vs
dCk6IERlbGV0ZWQuCisgICAgICAgICogZG9taml0L0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuaDoK
KyAgICAgICAgKEpTQzo6RE9NSklUOjpQYXRjaHBvaW50UGFyYW1zOjphZGRTbG93UGF0aENhbGwp
OgorICAgICAgICAqIGRvbWppdC9ET01KSVRTbG93UGF0aENhbGxzLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kb21qaXQvRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oLgorICAg
ICAgICAqIGZ0bC9GVExET01KSVRQYXRjaHBvaW50UGFyYW1zLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZUTDo6ZGlzcGF0Y2gpOgorICAgICAgICAqIGZ0bC9GVExET01KSVRQYXRjaHBvaW50
UGFyYW1zLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kb21qaXQvRE9NSklU
UGF0Y2hwb2ludFBhcmFtcy5oLgorICAgICAgICAoSlNDOjpGVEw6OkRPTUpJVFBhdGNocG9pbnRQ
YXJhbXM6OkRPTUpJVFBhdGNocG9pbnRQYXJhbXMpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRG
R1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
Q2hlY2tET00pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
Q2FsbERPTSk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKEpTQzo6ZXh0cmFj
dFJlc3VsdCk6CisgICAgICAgICoganNjLmNwcDoKKwogMjAxNi0xMC0wNSAgWXVzdWtlIFN1enVr
aSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhdHRlbXB0
IHRvIGZpeCBDTG9vcCBidWlsZCBhZnRlciByMjA2ODQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKaW5kZXggZDQ3Y2RlZmQzODFkNGFjNmIwMDJkMmY0NWM1OGU2N2NmZjY4MWJjYi4u
YzQwOTc1NTgwMDFhZmI5MDNmM2ZmMGRhYjkzZTU0ZWIyNDc5ZWQ1MyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjg2LDYgKzI4Niw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAKICAgICBkZmcv
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAKICAgICBkZmcvREZHRENFUGhhc2UuY3Bw
CisgICAgZGZnL0RGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwCiAgICAgZGZnL0RGR0Rlc2ly
ZWRJZGVudGlmaWVycy5jcHAKICAgICBkZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAogICAg
IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCkBAIC00MTUsNiArNDE2LDcgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAogICAgIGZ0
bC9GVExDb21tb25WYWx1ZXMuY3BwCiAgICAgZnRsL0ZUTENvbXBpbGUuY3BwCisgICAgZnRsL0ZU
TERPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwCiAgICAgZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5j
cHAKICAgICBmdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAogICAgIGZ0bC9GVExFeGl0QXJndW1lbnRG
b3JPcGVyYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiNjk3ZTYxN2My
YTk5MzAyNzE0YTliNzNiOWIxYmJkNjRkMjEzMWE0Li40NTMxZmZjZDYwYzdlNjc2ZjQyOTdiZGUz
OWE3NjU2ZWZhZTk3Y2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE5Miw2
ICsxMTkyLDcgQEAKIAkJNDNDMzkyQUIxQzNCRUIwNTAwMjQxRjUzIC8qIEFzc2VtYmxlckNvbW1v
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDNDMzky
QUExQzNCRUIwMDAwMjQxRjUzIC8qIEFzc2VtYmxlckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0NDNBRTMzMTZFMTg4RDkwMDc2RjEx
MCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9u
LmZyYW1ld29yayAqLzsgfTsKIAkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MTUzOUI4MTJE
Qzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNDczREE0QTQ3NjRDNDVGRTg3MUIwNDg1IC8qIERlZmluZVByb3Bl
cnR5QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTY5OTQ4RURFNjhENDA1NEIwMUVGNzk3IC8qIERlZmluZVByb3BlcnR5QXR0cmlidXRl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUy
Njc4RjhFMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEMxQTAzMTAwOTAw
NkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5jcHAgKi87IH07CiAJCTUyNjc4RjhGMUEwMzEw
MDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNjc4RjhEMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNp
Y0Jsb2NrTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1MjY3OEY5MTFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhG
OTAxQTA0MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjA2Nyw2ICsyMDY4LDEwIEBA
CiAJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyog
Vk0uY3BwICovOyB9OwogCQlFMzE4Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTMxOENCQkUxQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmNwcCAqLzsgfTsKIAkJRTMxOENCQzExQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMzE4Q0JCRjFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzIyRTVB
MjFEQTY0NDM5MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzIyRTVBMDFEQTY0NDM1
MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgKi87IH07CisJCUUzMjJF
NUEzMURBNjQ0MzkwMDZFNzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzIyRTVBMTFEQTY0NDM1
MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oICovOyB9OworCQlFMzIyRTVB
NjFEQTY0NEE4MDA2RTc3MDkgLyogRlRMRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzIyRTVBNDFEQTY0NEE0
MDA2RTc3MDkgLyogRlRMRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgKi87IH07CisJCUUzMjJF
NUE3MURBNjQ0QTgwMDZFNzcwOSAvKiBGVExET01KSVRQYXRjaHBvaW50UGFyYW1zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzIyRTVBNTFEQTY0NEE0
MDA2RTc3MDkgLyogRlRMRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oICovOyB9OwogCQlFMzI4QzZD
NzFEQTQzMDQ1MDBEMjU1RkQgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1ODYwMTc3MTg1QThG
NUUwMDAzMEVFRSAvKiBNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzMjhDNkM4MURBNDMwNjEw
MEQyNTVGRCAvKiBSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MEM3OUQxQjgyRDk5RDAwMEY2Qjc5IC8qIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTMyOEM2QzkxREE0MzJGOTAwRDI1NUZEIC8qIFJlZ2lzdGVyQXRPZmZzZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDBDNzlG
MUI4MkQ5Q0UwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxODUsNyArMjE5MCw2IEBACiAJCUZF
RDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdh
dGNoZG9nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2
NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYx
RDVFNzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpT
U3RyaW5nSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTQ3M0RBNEE0NzY0QzQ1RkU4NzFCMDQ4NSAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJp
YnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE2
OTk0OEVERTY4RDQwNTRCMDFFRjc5NyAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1
aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0
aW9uICovCkBAIC0zMzU1LDYgKzMzNTksNyBAQAogCQkxNEY3MjU2MzE0RUUyNjVFMDBCMTY1MkIg
LyogV2Vha0hhbmRsZU93bmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYWtIYW5kbGVPd25lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
RjcyNTY0MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0hhbmRsZU93bmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFJvb3RWaXNpdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE2OTk0OEVERTY4RDQwNTRCMDFFRjc5NyAvKiBE
ZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE4Nzk1MTA2MTRDNTQwRkZCNTYxQzEyNCAvKiBKU01vZHVsZUxvYWRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01vZHVsZUxvYWRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMjhENEE3MTc3QjcxQzgwMDA3RkEzQyAvKiBKU1N0
cmluZ1JlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJp
bmdSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQ0Y3Mzc2MTcx
Q0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYWsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDM3NCw2ICs0
Mzc5LDEwIEBACiAJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXJQcm90
b3R5cGUuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBNb2R1bGVM
b2FkZXJQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMThDQkJF
MUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMThDQkJGMUI4QUVGNTEwMEEyOTI5RCAv
KiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMzIyRTVBMDFEQTY0NDM1MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFt
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdET01KSVRQYXRj
aHBvaW50UGFyYW1zLmNwcDsgcGF0aCA9IGRmZy9ERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyMkU1QTExREE2NDQzNTAwNkU3NzA5
IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oOyBwYXRoID0gZGZnL0RGR0RPTUpJ
VFBhdGNocG9pbnRQYXJhbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMyMkU1
QTQxREE2NDRBNDAwNkU3NzA5IC8qIEZUTERPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRE9NSklUUGF0Y2hwb2ludFBhcmFt
cy5jcHA7IHBhdGggPSBmdGwvRlRMRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMjJFNUE1MURBNjQ0QTQwMDZFNzcwOSAvKiBGVExET01K
SVRQYXRjaHBvaW50UGFyYW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TERPTUpJVFBhdGNocG9pbnRQYXJhbXMuaDsgcGF0aCA9IGZ0bC9GVExET01KSVRQYXRjaHBvaW50
UGFyYW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzYzN0EzMUI2MzIyMDIw
MEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlZmxlY3RPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzM2MzdBNDFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZWZsZWN0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUzM0IzRTI1MUI3QUJENzUwMDQ4REIyRSAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25PYmplY3QubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQ1MzAsNyArNDUzOSw2IEBACiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAv
KiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5k
U3dhcFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MjFBQUVD
NEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBh
cmVBbmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUZENkZDNTFE
NUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxNjk5NDhFREU2OEQ0MDU0QjAxRUY3OTcgLyogRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERlZmluZVByb3BlcnR5QXR0cmli
dXRlcy5oOyBwYXRoID0gRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTQ3NjEsNiArNDc2OSw4
IEBACiAJCQkJMEZFQTBBMjExNzA5NjA2OTAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5oICov
LAogCQkJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCAqLywKIAkJ
CQkwRkVBMEEwMTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oICovLAorCQkJCUUzMjJF
NUE0MURBNjQ0QTQwMDZFNzcwOSAvKiBGVExET01KSVRQYXRjaHBvaW50UGFyYW1zLmNwcCAqLywK
KwkJCQlFMzIyRTVBNTFEQTY0NEE0MDA2RTc3MDkgLyogRlRMRE9NSklUUGF0Y2hwb2ludFBhcmFt
cy5oICovLAogCQkJCTBGOUQ0QzBBMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJn
ZXQuY3BwICovLAogCQkJCTBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25U
YXJnZXQuaCAqLywKIAkJCQkwRjIzNUJCRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3Vt
ZW50LmNwcCAqLywKQEAgLTY0MTksNiArNjQyOSw4IEBACiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAw
QzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEYyRkM3NzAxNkUxMkY2RjAwMzhEOTc2
IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuaCAqLywKKwkJCQlFMzIyRTVBMDFEQTY0NDM1MDA2RTc3MDkgLyogREZHRE9N
SklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgKi8sCisJCQkJRTMyMkU1QTExREE2NDQzNTAwNkU3NzA5
IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZE
MDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3
MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCiAJCQkJMEZGQzky
MTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKQEAgLTgw
NDIsNiArODA1NCw3IEBACiAJCQkJOTk2QjczMUYxQkRBMDhFRjAwMzMxQjg0IC8qIEpTUHJvbWlz
ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0
MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDBFNEE5MUM0OTdGNzQwMEE1NzdGQSAvKiBBaXJPcGNvZGVVdGlscy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTMyMkU1QTMxREE2NDQzOTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJh
bXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRUY4ODc1MUI2NkRGMjMwMDNGMjZDQiAvKiBKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2RTFB
MDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhG
RTAwMTM5NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTgxMjMs
NiArODEzNiw3IEBACiAJCQkJMEY0NjgwQ0IxNEJCQjE3MjAwQkZFMjcyIC8qIExMSW50T2ZmbGlu
ZUFzbUNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYx
IC8qIExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBC
RkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzMjJFNUE3MURB
NjQ0QTgwMDZFNzcwOSAvKiBGVExET01KSVRQYXRjaHBvaW50UGFyYW1zLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MkUzMTM5MTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTQwMSw2ICs5NDE1LDcgQEAKIAkJCQlBMTU4N0Q2RjFCNERDMTQxMDBE
Njk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkUzQTA2QkYxQzExMDQxNjAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjYyRDg1QjYxQzBENjUwRjAwNkFDQjYxIC8qIEFpckZp
eFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMzIyRTVBNjFE
QTY0NEE4MDA2RTc3MDkgLyogRlRMRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3MEI3OTE5QjFDMDI0QTQ2MDAyNDgxRTIgLyogSlNHZW5lcmF0b3JGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTU4N0Q3MTFCNERDMTQxMDBENjk4NDkgLyogSW50
bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExRDc5MkZD
MUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtOTYwMCw2ICs5NjE1LDcgQEAKIAkJCQlFMzk2M0NFRTFCNzNGNzUwMDBFQjRDRTUgLyogTm9k
ZXNBbmFseXplTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NUVCMjlCMTBDRTI1ODEw
MDFBOTkwRSAvKiBOb2Rlc0NvZGVnZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU0NkY1MjEx
QTMyQjMxMzAwNkYwN0Q1IC8qIE51bGxHZXR0ZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFMzIyRTVBMjFEQTY0NDM5MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFt
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUyNUZDNTFBNkREODAxMDA3QjU0OTUgLyogTnVs
bFNldHRlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REUyMTA3RUM3RTcw
MDY1MDQ0NiAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURFMzEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKaW5kZXggZjc3YmQ3MDgzN2E1ZDk4NmUx
Mzg0Y2MzYzE0ZThlNmFkNmEzNmFlMS4uNDEwNGViMzI0NzgwNWY3MWJkY2UzMmFkMTJhMTgyMzQy
NzE3MGExMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCkBAIC05OCw4ICs5
OCw2IEBAIGlubGluZSBib29sIGVuYWJsZUludDUyKCkKICNlbmRpZgogfQogCi1lbnVtIE5vUmVz
dWx0VGFnIHsgTm9SZXN1bHQgfTsKLQogLy8gVGhlIHByZWRpY3Rpb24gcHJvcGFnYXRvciBlZmZl
Y3RpdmVseSBkb2VzIGZvdXIgcGFzc2VzLCB3aXRoIHRoZSBsYXN0IHBhc3MKIC8vIGJlaW5nIGRv
bmUgYnkgdGhlIHNlcGFyYXRlIEZpeHVQaGFzZS4KIGVudW0gUHJlZGljdGlvblBhc3MgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdET01KSVRQYXRjaHBvaW50UGFy
YW1zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRE9NSklUUGF0Y2hwb2ludFBh
cmFtcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGExMWM2NzEzNDdkNzFiZmRhMzUxOTMwZTdjYjU1ZjFhNWVj
NmYwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRE9N
SklUUGF0Y2hwb2ludFBhcmFtcy5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiREZHU3BlY3Vs
YXRpdmVKSVQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZSBB
cmd1bWVudHMsIHNpemVfdC4uLiBBcmd1bWVudHNJbmRleD4KK3N0YXRpYyB2b2lkIGRpc3BhdGNo
KFNwZWN1bGF0aXZlSklUKiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QgZnJvbSwgT3BlcmF0
aW9uVHlwZSBvcGVyYXRpb24sIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudHMgYXJndW1lbnRz
LCBzdGQ6OmluZGV4X3NlcXVlbmNlPEFyZ3VtZW50c0luZGV4Li4uPikKK3sKKyAgICBqaXQtPmFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChmcm9tLCBqaXQsIG9wZXJhdGlvbiwgcmVz
dWx0LCBzdGQ6OmdldDxBcmd1bWVudHNJbmRleD4oYXJndW1lbnRzKS4uLikpOworfQorCisjZGVm
aW5lIEpTQ19ERUZJTkVfQ0FMTF9PUEVSQVRJT05TKE9wZXJhdGlvblR5cGUsIFJlc3VsdFR5cGUs
IC4uLikgXAorICAgIHZvaWQgRE9NSklUUGF0Y2hwb2ludFBhcmFtczo6YWRkU2xvd1BhdGhDYWxs
SW1wbChDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZyb20sIENDYWxsSGVscGVycyYsIE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgc3RkOjp0dXBsZTxfX1ZBX0FSR1Nf
Xz4gYXJncykgY29uc3QgXAorICAgIHsgXAorICAgICAgICBkaXNwYXRjaChtX2ppdCwgZnJvbSwg
b3BlcmF0aW9uLCByZXN1bHQsIGFyZ3MsIHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxzdGQ6OnR1
cGxlX3NpemU8ZGVjbHR5cGUoYXJncyk+Ojp2YWx1ZT4oKSk7IFwKKyAgICB9IFwKKworRE9NSklU
X1NMT1dfUEFUSF9DQUxMUyhKU0NfREVGSU5FX0NBTExfT1BFUkFUSU9OUykKKyN1bmRlZiBKU0Nf
REVGSU5FX0NBTExfT1BFUkFUSU9OUworCit9IH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjM0NmQwZGExMDQ5Y2RmMjZhZmZjYmU3YjcyNmJkODYxYjhkMjJiZGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RPTUpJVFBhdGNocG9pbnRQYXJh
bXMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworICAgIAorY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CisKK2NsYXNzIERPTUpJVFBhdGNo
cG9pbnRQYXJhbXMgOiBwdWJsaWMgRE9NSklUOjpQYXRjaHBvaW50UGFyYW1zIHsKK3B1YmxpYzoK
KyAgICBET01KSVRQYXRjaHBvaW50UGFyYW1zKFNwZWN1bGF0aXZlSklUKiBqaXQsIFZlY3RvcjxE
T01KSVQ6OlJlZz4mJiByZWdzLCBWZWN0b3I8R1BSUmVnPiYmIGdwU2NyYXRjaCwgVmVjdG9yPEZQ
UlJlZz4mJiBmcFNjcmF0Y2gpCisgICAgICAgIDogRE9NSklUOjpQYXRjaHBvaW50UGFyYW1zKFdU
Rk1vdmUocmVncyksIFdURk1vdmUoZ3BTY3JhdGNoKSwgV1RGTW92ZShmcFNjcmF0Y2gpKQorICAg
ICAgICAsIG1faml0KGppdCkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorI2RlZmluZSBKU0Nf
REVGSU5FX0NBTExfT1BFUkFUSU9OUyhPcGVyYXRpb25UeXBlLCBSZXN1bHRUeXBlLCAuLi4pIHZv
aWQgYWRkU2xvd1BhdGhDYWxsSW1wbChDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0LCBDQ2FsbEhlbHBl
cnMmLCBPcGVyYXRpb25UeXBlLCBSZXN1bHRUeXBlLCBzdGQ6OnR1cGxlPF9fVkFfQVJHU19fPiBh
cmdzKSBjb25zdCBvdmVycmlkZTsKKyAgICBET01KSVRfU0xPV19QQVRIX0NBTExTKEpTQ19ERUZJ
TkVfQ0FMTF9PUEVSQVRJT05TKQorI3VuZGVmIEpTQ19ERUZJTkVfQ0FMTF9PUEVSQVRJT05TCisK
KyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Cit9OworCit9IH0KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDA1MGYz
ZjBlMTc1YjAyMDU5YzIxZjFjMTI4NjI2ZjJmNDhiY2RiODcuLjg0NDIxZWZjZDNkOThjMTgyMmFk
YTk1ZTBkNzFlZjMyMDYxNjM2ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0zNCwxMiArMzQsMTIgQEAKICNpbmNsdWRlICJERkdD
YWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR0NhbGxD
cmVhdGVEaXJlY3RBcmd1bWVudHNTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR0Nh
cGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIkRGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCIKICNp
bmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdEZ1enouaCIKICNpbmNs
dWRlICJERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRE9NSklUUGF0Y2hwb2ludC5oIgot
I2luY2x1ZGUgIkRPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1
bWVudHMuaCIKICNpbmNsdWRlICJKSVRBZGRHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRCaXRB
bmRHZW5lcmF0b3IuaCIKQEAgLTcxNTMsNyArNzE1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDYWxsRE9NKE5vZGUqIG5vZGUpCiAgICAgVmVjdG9yPEdQUlRlbXBvcmFyeT4gZ3BU
ZW1wcmFyaWVzOwogICAgIFZlY3RvcjxGUFJUZW1wb3Jhcnk+IGZwVGVtcHJhcmllczsKICAgICBh
bGxvY2F0ZVRlbXBvcmFyeVJlZ2lzdGVyc0ZvclBhdGNocG9pbnQodGhpcywgZ3BUZW1wcmFyaWVz
LCBmcFRlbXByYXJpZXMsIGdwU2NyYXRjaCwgZnBTY3JhdGNoLCBwYXRjaHBvaW50LmdldCgpKTsK
LSAgICBET01KSVQ6OlBhdGNocG9pbnRQYXJhbXMgcGFyYW1zKFdURk1vdmUocmVncyksIFdURk1v
dmUoZ3BTY3JhdGNoKSwgV1RGTW92ZShmcFNjcmF0Y2gpKTsKKyAgICBET01KSVRQYXRjaHBvaW50
UGFyYW1zIHBhcmFtcyh0aGlzLCBXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdwU2NyYXRjaCksIFdU
Rk1vdmUoZnBTY3JhdGNoKSk7CiAgICAgcGF0Y2hwb2ludC0+Z2VuZXJhdG9yKCktPnJ1bihtX2pp
dCwgcGFyYW1zKTsKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5yZWdzKCksIG5vZGUpOwogfQpA
QCAtNzE3NSw3ICs3MTc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrRE9N
KE5vZGUqIG5vZGUpCiAgICAgVmVjdG9yPEZQUlRlbXBvcmFyeT4gZnBUZW1wcmFyaWVzOwogICAg
IGFsbG9jYXRlVGVtcG9yYXJ5UmVnaXN0ZXJzRm9yUGF0Y2hwb2ludCh0aGlzLCBncFRlbXByYXJp
ZXMsIGZwVGVtcHJhcmllcywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gsIHBhdGNocG9pbnQuZ2V0KCkp
OwogCi0gICAgRE9NSklUOjpQYXRjaHBvaW50UGFyYW1zIHBhcmFtcyhXVEZNb3ZlKHJlZ3MpLCBX
VEZNb3ZlKGdwU2NyYXRjaCksIFdURk1vdmUoZnBTY3JhdGNoKSk7CisgICAgRE9NSklUUGF0Y2hw
b2ludFBhcmFtcyBwYXJhbXModGhpcywgV1RGTW92ZShyZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gp
LCBXVEZNb3ZlKGZwU2NyYXRjaCkpOwogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbHVy
ZUNhc2VzID0gcGF0Y2hwb2ludC0+Z2VuZXJhdG9yKCktPnJ1bihtX2ppdCwgcGFyYW1zKTsKICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VHUFIpLCBub2RlLT5jaGlsZDEoKSwgZmFpbHVyZUNhc2VzKTsKICAgICBub1Jlc3VsdChub2Rl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRl
eCAwZGI2MjUwODc0ODBiNjk5MWQxMGI2Y2MyMDRiOTVkNjI4MmY5MmQ2Li40ZTYxMjczNDY2ZjRm
ZGMxMjhhZjE0MmNhNjE3ODUxNmQ2MTA1NjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC01OCwxNCArNTgsNiBAQCBjbGFzcyBTcGVjdWxh
dGVCb29sZWFuT3BlcmFuZDsKIAogZW51bSBHZW5lcmF0ZWRPcGVyYW5kVHlwZSB7IEdlbmVyYXRl
ZE9wZXJhbmRUeXBlVW5rbm93biwgR2VuZXJhdGVkT3BlcmFuZEludGVnZXIsIEdlbmVyYXRlZE9w
ZXJhbmRKU1ZhbHVlfTsKIAotaW5saW5lIEdQUlJlZyBleHRyYWN0UmVzdWx0KEdQUlJlZyByZXN1
bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQotI2lmIFVTRShKU1ZBTFVFNjQpCi1pbmxpbmUgR1BSUmVn
IGV4dHJhY3RSZXN1bHQoSlNWYWx1ZVJlZ3MgcmVzdWx0KSB7IHJldHVybiByZXN1bHQuZ3ByKCk7
IH0KLSNlbHNlCi1pbmxpbmUgSlNWYWx1ZVJlZ3MgZXh0cmFjdFJlc3VsdChKU1ZhbHVlUmVncyBy
ZXN1bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQotI2VuZGlmCi1pbmxpbmUgTm9SZXN1bHRUYWcgZXh0
cmFjdFJlc3VsdChOb1Jlc3VsdFRhZykgeyByZXR1cm4gTm9SZXN1bHQ7IH0KLQogLy8gPT09IFNw
ZWN1bGF0aXZlSklUID09PQogLy8KIC8vIFRoZSBTcGVjdWxhdGl2ZUpJVCBpcyB1c2VkIHRvIGdl
bmVyYXRlIGEgZmFzdCwgYnV0IHBvdGVudGlhbGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZG9taml0L0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kb21qaXQvRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oCmluZGV4IGYyMzg2MzkwMDk2
MGE2OGZkZTA4Y2Y0YmIwNjFkMjQ3NDVmNzFiY2MuLmEwNGVkMWJiODUxNGZiOGMwNmYzYWM4MjJk
NGZiYjQyMGU3NzU5NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kb21qaXQv
RE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kb21q
aXQvRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJET01KSVRSZWcuaCIKKyNpbmNsdWRlICJET01K
SVRTbG93UGF0aENhbGxzLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRE9NSklUIHsKQEAg
LTUyLDcgKzU0LDE2IEBAIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhdGNocG9pbnRQYXJhbXMpOwog
ICAgIHsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVu
YW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFkZFNsb3dQ
YXRoQ2FsbChDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZyb20sIENDYWxsSGVscGVycyYgaml0LCBG
dW5jdGlvblR5cGUgZnVuY3Rpb24sIFJlc3VsdFR5cGUgcmVzdWx0LCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKSBjb25zdAorICAgIHsKKyAgICAgICAgYWRkU2xvd1BhdGhDYWxsSW1wbChmcm9tLCBq
aXQsIGZ1bmN0aW9uLCByZXN1bHQsIHN0ZDo6bWFrZV90dXBsZShhcmd1bWVudHMuLi4pKTsKKyAg
ICB9CisKIHByaXZhdGU6CisjZGVmaW5lIEpTQ19ERUZJTkVfQ0FMTF9PUEVSQVRJT05TKE9wZXJh
dGlvblR5cGUsIFJlc3VsdFR5cGUsIC4uLikgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lk
IGFkZFNsb3dQYXRoQ2FsbEltcGwoQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCwgQ0NhbGxIZWxwZXJz
JiwgT3BlcmF0aW9uVHlwZSwgUmVzdWx0VHlwZSwgc3RkOjp0dXBsZTxfX1ZBX0FSR1NfXz4gYXJn
cykgY29uc3QgPSAwOworICAgIERPTUpJVF9TTE9XX1BBVEhfQ0FMTFMoSlNDX0RFRklORV9DQUxM
X09QRVJBVElPTlMpCisjdW5kZWYgSlNDX0RFRklORV9DQUxMX09QRVJBVElPTlMKIAogICAgIFZl
Y3RvcjxSZWc+IG1fcmVnczsKICAgICBWZWN0b3I8R1BSUmVnPiBtX2dwU2NyYXRjaDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kb21qaXQvRE9NSklUU2xvd1BhdGhDYWxscy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RvbWppdC9ET01KSVRTbG93UGF0aENhbGxzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODFiOTA1NzM3ZTY0ODhmYjk1NWRhMGM5Y2NhMmIzNjkwZjViNWNlMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kb21qaXQvRE9NSklUU2xvd1BhdGhD
YWxscy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKKy8vIG1hY3Jv
KE9wZXJhdGlvblR5cGUsIEFyZ1R5cGUxLCBBcmdUeXBlMiwgLi4uKQorI2RlZmluZSBET01KSVRf
U0xPV19QQVRIX0NBTExTKG1hY3JvKSBcCisgICAgbWFjcm8oSl9KSVRPcGVyYXRpb25fRVAsIEpT
VmFsdWVSZWdzLCBHUFJSZWcpIFwKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTERPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExET01KSVRQYXRjaHBvaW50UGFyYW1zLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
YTIyNTU4NzgwNjBjNWY0ZmZlOWJlMWEzN2UzZjJjNDg1N2JiNDgxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExET01KSVRQYXRjaHBvaW50UGFyYW1zLmNw
cApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTERPTUpJVFBhdGNocG9p
bnRQYXJhbXMuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCisj
aW5jbHVkZSAiRlRMU3RhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBlbmFtZSBSZXN1bHRUeXBlLCB0
eXBlbmFtZSBBcmd1bWVudHMsIHNpemVfdC4uLiBBcmd1bWVudHNJbmRleD4KK3N0YXRpYyB2b2lk
IGRpc3BhdGNoKENDYWxsSGVscGVycyYgaml0LCBGVEw6OlN0YXRlKiBzdGF0ZSwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCBERkc6Ok5vZGUqIG5vZGUsIEJveDxD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGZyb20sIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1l
bnRzIGFyZ3VtZW50cywgc3RkOjppbmRleF9zZXF1ZW5jZTxBcmd1bWVudHNJbmRleC4uLj4pCit7
CisgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisgICAgcGFyYW1z
LmFkZExhdGVQYXRoKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgIGZyb20u
bGluaygmaml0KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICpzdGF0ZSwg
cGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGlj
LAorICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uLCBleHRyYWN0UmVzdWx0
KHJlc3VsdCksIHN0ZDo6Z2V0PEFyZ3VtZW50c0luZGV4Pihhcmd1bWVudHMpLi4uKTsKKyAgICAg
ICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CisgICAgfSk7Cit9CisKKyNkZWZpbmUg
SlNDX0RFRklORV9DQUxMX09QRVJBVElPTlMoT3BlcmF0aW9uVHlwZSwgUmVzdWx0VHlwZSwgLi4u
KSBcCisgICAgdm9pZCBET01KSVRQYXRjaHBvaW50UGFyYW1zOjphZGRTbG93UGF0aENhbGxJbXBs
KENDYWxsSGVscGVyczo6SnVtcExpc3QgZnJvbSwgQ0NhbGxIZWxwZXJzJiBqaXQsIE9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgc3RkOjp0dXBsZTxfX1ZBX0FSR1Nf
Xz4gYXJncykgY29uc3QgXAorICAgIHsgXAorICAgICAgICBkaXNwYXRjaChqaXQsICZtX3N0YXRl
LCBtX3BhcmFtcywgbV9ub2RlLCBtX2V4Y2VwdGlvbnMsIGZyb20sIG9wZXJhdGlvbiwgcmVzdWx0
LCBhcmdzLCBzdGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8c3RkOjp0dXBsZV9zaXplPGRlY2x0eXBl
KGFyZ3MpPjo6dmFsdWU+KCkpOyBcCisgICAgfSBcCisKK0RPTUpJVF9TTE9XX1BBVEhfQ0FMTFMo
SlNDX0RFRklORV9DQUxMX09QRVJBVElPTlMpCisjdW5kZWYgSlNDX0RFRklORV9DQUxMX09QRVJB
VElPTlMKKworfSB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExET01KSVRQYXRjaHBvaW50UGFyYW1zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTERPTUpJVFBhdGNocG9pbnRQYXJhbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDBmNWI2OGM4MGRl
M2I4M2U1ODdhOTRmOTZmYjU2ZmRhOWJiYTIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExET01KSVRQYXRjaHBvaW50UGFyYW1zLmgKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcy5oIgorI2luY2x1ZGUgIkRPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBTdGF0ZTsKKworY2xhc3Mg
RE9NSklUUGF0Y2hwb2ludFBhcmFtcyA6IHB1YmxpYyBET01KSVQ6OlBhdGNocG9pbnRQYXJhbXMg
eworcHVibGljOgorICAgIERPTUpJVFBhdGNocG9pbnRQYXJhbXMoU3RhdGUmIHN0YXRlLCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMsIERGRzo6Tm9kZSogbm9kZSwg
Qm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMsIFZlY3RvcjxET01KSVQ6OlJl
Zz4mJiByZWdzLCBWZWN0b3I8R1BSUmVnPiYmIGdwU2NyYXRjaCwgVmVjdG9yPEZQUlJlZz4mJiBm
cFNjcmF0Y2gpCisgICAgICAgIDogRE9NSklUOjpQYXRjaHBvaW50UGFyYW1zKFdURk1vdmUocmVn
cyksIFdURk1vdmUoZ3BTY3JhdGNoKSwgV1RGTW92ZShmcFNjcmF0Y2gpKQorICAgICAgICAsIG1f
c3RhdGUoc3RhdGUpCisgICAgICAgICwgbV9wYXJhbXMocGFyYW1zKQorICAgICAgICAsIG1fbm9k
ZShub2RlKQorICAgICAgICAsIG1fZXhjZXB0aW9ucyhleGNlcHRpb25zKQorICAgIHsKKyAgICB9
CisKK3ByaXZhdGU6CisjZGVmaW5lIEpTQ19ERUZJTkVfQ0FMTF9PUEVSQVRJT05TKE9wZXJhdGlv
blR5cGUsIFJlc3VsdFR5cGUsIC4uLikgdm9pZCBhZGRTbG93UGF0aENhbGxJbXBsKENDYWxsSGVs
cGVyczo6SnVtcExpc3QsIENDYWxsSGVscGVycyYsIE9wZXJhdGlvblR5cGUsIFJlc3VsdFR5cGUs
IHN0ZDo6dHVwbGU8X19WQV9BUkdTX18+IGFyZ3MpIGNvbnN0IG92ZXJyaWRlOworICAgIERPTUpJ
VF9TTE9XX1BBVEhfQ0FMTFMoSlNDX0RFRklORV9DQUxMX09QRVJBVElPTlMpCisjdW5kZWYgSlND
X0RFRklORV9DQUxMX09QRVJBVElPTlMKKworICAgIFN0YXRlJiBtX3N0YXRlOworICAgIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIG1fcGFyYW1zOworICAgIERGRzo6Tm9kZSog
bV9ub2RlOworICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBtX2V4Y2VwdGlvbnM7Cit9
OworCit9IH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKaW5kZXggOTg4OWZiMDZjYTVjZDE4NTdlNDY5Y2FjYmJjZDYzNWRkNWI4OWE4
MS4uMzFhNDYwOTE4ZjEyYmU2MDk0YzA0ZmM4N2RmMzdhY2EzNDQ3NjA3MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtNDUsMTAgKzQ1LDEw
IEBACiAjaW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR09TUkV4aXRGdXp6LmgiCiAjaW5jbHVkZSAiRE9NSklUUGF0Y2hwb2ludC5oIgotI2lu
Y2x1ZGUgIkRPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVu
dHMuaCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAi
RlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCIKKyNpbmNsdWRlICJGVExET01KSVRQYXRjaHBvaW50UGFy
YW1zLmgiCiAjaW5jbHVkZSAiRlRMRXhjZXB0aW9uVGFyZ2V0LmgiCiAjaW5jbHVkZSAiRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKQEAgLTg3
MzMsNiArODczMyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIHBhdGNocG9pbnQt
Pm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IGRvbUpJVC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzOwog
CiAgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ub2RlOwogICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOwogICAgICAg
ICB1bnNpZ25lZCBvc3JFeGl0QXJndW1lbnRPZmZzZXQgPSBwYXRjaHBvaW50LT5udW1DaGlsZHJl
bigpOwogICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRP
U1JFeGl0RGVzY3JpcHRvcihqc1ZhbHVlVmFsdWUoY2VsbCksIG1fbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKQEAgLTg3NTQsNyArODc1NSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAg
ICAgICAgICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gZXhpdERlc2NyaXB0b3It
PmVtaXRPU1JFeGl0TGF0ZXIoKnN0YXRlLCBCYWRUeXBlLCBvcmlnaW4sIHBhcmFtcywgb3NyRXhp
dEFyZ3VtZW50T2Zmc2V0KTsKIAotICAgICAgICAgICAgICAgIERPTUpJVDo6UGF0Y2hwb2ludFBh
cmFtcyBkb21KSVRQYXJhbXMoV1RGTW92ZShyZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBXVEZN
b3ZlKGZwU2NyYXRjaCkpOworICAgICAgICAgICAgICAgIERPTUpJVFBhdGNocG9pbnRQYXJhbXMg
ZG9tSklUUGFyYW1zKCpzdGF0ZSwgcGFyYW1zLCBub2RlLCBudWxscHRyLCBXVEZNb3ZlKHJlZ3Mp
LCBXVEZNb3ZlKGdwU2NyYXRjaCksIFdURk1vdmUoZnBTY3JhdGNoKSk7CiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXMgPSBkb21KSVQtPmdlbmVyYXRv
cigpLT5ydW4oaml0LCBkb21KSVRQYXJhbXMpOwogCiAgICAgICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewpAQCAtODc4MCw2ICs4NzgxLDgg
QEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNo
UmVnaXN0ZXJzID0gZG9tSklULT5udW1HUFNjcmF0Y2hSZWdpc3RlcnM7CiAgICAgICAgIHBhdGNo
cG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IGRvbUpJVC0+bnVtRlBTY3JhdGNoUmVnaXN0
ZXJzOwogCisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBOb2Rl
KiBub2RlID0gbV9ub2RlOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAg
ICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIFZlY3RvcjxHUFJSZWc+IGdwU2NyYXRj
aDsKQEAgLTg4MDIsNyArODgwNSw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAgICAg
ICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9IGV4Y2VwdGlv
bkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0KTsKIAotICAg
ICAgICAgICAgICAgIERPTUpJVDo6UGF0Y2hwb2ludFBhcmFtcyBkb21KSVRQYXJhbXMoV1RGTW92
ZShyZWdzKSwgV1RGTW92ZShncFNjcmF0Y2gpLCBXVEZNb3ZlKGZwU2NyYXRjaCkpOworICAgICAg
ICAgICAgICAgIERPTUpJVFBhdGNocG9pbnRQYXJhbXMgZG9tSklUUGFyYW1zKCpzdGF0ZSwgcGFy
YW1zLCBub2RlLCBleGNlcHRpb25zLCBXVEZNb3ZlKHJlZ3MpLCBXVEZNb3ZlKGdwU2NyYXRjaCks
IFdURk1vdmUoZnBTY3JhdGNoKSk7CiAgICAgICAgICAgICAgICAgZG9tSklULT5nZW5lcmF0b3Io
KS0+cnVuKGppdCwgZG9tSklUUGFyYW1zKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6Zm9yQ2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0dQUkluZm8uaAppbmRleCBhZTA0NzZlMzJlN2NlODE4YTY0NDY3MGVmMDdiOWU3MmFhNjEzMjYx
Li4zZDZhNGM2Y2UyNDRmMjRlMzc2NWZhZjY1YTc0YTg3YjA1ODNhNmFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0dQUkluZm8uaApAQCAtMzEsNiArMzEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorZW51bSBOb1Jlc3VsdFRhZyB7IE5vUmVzdWx0IH07CisKIC8vIFdlIHVzZSB0aGUgc2FtZSBj
b252ZW50aW9ucyBpbiB0aGUgYmFzbGluZSBKSVQgYXMgaW4gdGhlIExMaW50LiBJZiB5b3UKIC8v
IGNoYW5nZSBtYXBwaW5ncyBpbiB0aGUgR1BSSW5mbywgeW91IHNob3VsZCBjaGFuZ2UgdGhlbSBp
biB0aGUgb2ZmbGluZWFzbQogLy8gY29tcGlsZXIgYWRlcXVhdGVseS4gVGhlIHJlZ2lzdGVyIG5h
bWluZyBjb252ZW50aW9ucyBhcmUgZGVzY3JpYmVkIGF0IHRoZQpAQCAtODk3LDYgKzg5OSwxNCBA
QCBDT01QSUxFX0FTU0VSVChHUFJJbmZvOjpyZWdUMCA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgcmVnVDBfbXVzdF9lcXVhbF9yZXR1cgogQ09NUElMRV9BU1NFUlQoR1BSSW5mbzo6cmVnVDEg
PT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCByZWdUMV9tdXN0X2VxdWFsX3JldHVyblZhbHVl
R1BSMik7CiAjZW5kaWYKIAoraW5saW5lIEdQUlJlZyBleHRyYWN0UmVzdWx0KEdQUlJlZyByZXN1
bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQorI2lmIFVTRShKU1ZBTFVFNjQpCitpbmxpbmUgR1BSUmVn
IGV4dHJhY3RSZXN1bHQoSlNWYWx1ZVJlZ3MgcmVzdWx0KSB7IHJldHVybiByZXN1bHQuZ3ByKCk7
IH0KKyNlbHNlCitpbmxpbmUgSlNWYWx1ZVJlZ3MgZXh0cmFjdFJlc3VsdChKU1ZhbHVlUmVncyBy
ZXN1bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQorI2VuZGlmCitpbmxpbmUgTm9SZXN1bHRUYWcgZXh0
cmFjdFJlc3VsdChOb1Jlc3VsdFRhZykgeyByZXR1cm4gTm9SZXN1bHQ7IH0KKwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRl
eCBhZDdjOTlhZDE0MDU2ZTA0ZTcwNjU0Zjk5Y2Y5YWFiMzM4YzEyNjZmLi40MjRiNGI5NzkxOWZh
OWZhNDMwZTBkMThhOTgwMmVmMTc3NWI5YjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNjI3
LDkgKzYyNywxMSBAQCBjbGFzcyBET01KSVRHZXR0ZXIgOiBwdWJsaWMgRE9NSklUTm9kZSB7CiAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0cyA9IHBhcmFtc1swXS5qc1ZhbHVlUmVn
cygpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBkb20gPSBwYXJhbXNbMl0uZ3ByKCk7CiAKLSAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhkb20sIERPTUpJ
VE5vZGU6Om9mZnNldE9mVmFsdWUoKSksIHJlc3VsdHMucGF5bG9hZEdQUigpKTsKLSAgICAgICAg
ICAgICAgICBqaXQuYm94SW50MzIocmVzdWx0cy5wYXlsb2FkR1BSKCksIHJlc3VsdHMpOworICAg
ICAgICAgICAgICAgIHBhcmFtcy5hZGRTbG93UGF0aENhbGwoaml0Lmp1bXAoKSwgaml0LCBzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSgqKShFeGVjU3RhdGUqLCB2b2lkKik+KFtdKEV4ZWNTdGF0
ZSosIHZvaWQqIHBvaW50ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxET01KSVRHZXR0ZXIqPihwb2ludGVyKS0+dmFs
dWUoKSkpOworICAgICAgICAgICAgICAgIH0pLCByZXN1bHRzLCBkb20pOwogICAgICAgICAgICAg
ICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KCk7CisKICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CiAgICAgICAgIH0K
</data>
<flag name="review"
          id="313957"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>