<?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>28271</bug_id>
          
          <creation_ts>2009-08-13 12:08:46 -0700</creation_ts>
          <short_desc>V8 Bindings for Desktop Notifications</short_desc>
          <delta_ts>2009-08-19 13:33:28 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="John Gregg">johnnyg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>pkasting</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>139961</commentid>
    <comment_count>0</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2009-08-13 12:08:46 -0700</bug_when>
    <thetext>Desktop notifications feature needs V8 Bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139963</commentid>
    <comment_count>1</comment_count>
      <attachid>34764</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2009-08-13 12:17:21 -0700</bug_when>
    <thetext>Created attachment 34764
V8 Bindings for Notifications</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139977</commentid>
    <comment_count>2</comment_count>
      <attachid>34764</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-13 12:36:24 -0700</bug_when>
    <thetext>Comment on attachment 34764
V8 Bindings for Notifications

Why so much custom bindings code?  We&apos;d much rather share as much bindings code with JSC as possible.  Why do all of these functions need to be custom?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139979</commentid>
    <comment_count>3</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2009-08-13 12:41:43 -0700</bug_when>
    <thetext>
The V8 code generator requires event listener accessors to be custom, which is the vast majority of that custom file.

Beyond that there are the 2 createNotification functions which I made custom, as explained in the ChangeLog, because I need them to be different in page context and worker context.  

I don&apos;t particularly like that either since the difference is so minor.  The alternative solution would be to change the code generator to be aware that V8 uses different proxy objects in worker and page contexts, and mark up the IDL with a tag that causes context-aware code to be generated.  But I consider that a more substantial change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139981</commentid>
    <comment_count>4</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2009-08-13 12:45:17 -0700</bug_when>
    <thetext>For completeness of my response, there is also requestPermission which was already custom in JSC for the same reason, the need to distinguish between worker and page contexts, and in a more substantial way: not executing in worker context, rather than just using different proxies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140136</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-13 20:18:01 -0700</bug_when>
    <thetext>Seems we need to file some bugs about making the generators better.  Adding more copy/paste code is bad news bears. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140903</commentid>
    <comment_count>6</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2009-08-17 17:21:54 -0700</bug_when>
    <thetext>Eric, I agree with that and I&apos;m happy to help with it (although the code generator is not an area of my expertise yet).  But I think that could happen in parallel with moving notifications forward for Chromium.  Would you want to wait on this patch until those changes can be made?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140913</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-17 17:27:38 -0700</bug_when>
    <thetext>I left this r=? because I agree, it doesn&apos;t need to block this change.  That said, we need to file some bugs about the missing features.  It would be great if you could file bugs for the needed additions to the code generators, and ideally link them here. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140954</commentid>
    <comment_count>8</comment_count>
      <attachid>34764</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-17 18:18:12 -0700</bug_when>
    <thetext>Comment on attachment 34764
V8 Bindings for Notifications

Overall, looks good. Some style nits around abbreviations:

&gt; +    Notification* notif = V8DOMWrapper::convertToNativeObject&lt;Notification&gt;(V8ClassIndex::NOTIFICATION, args.Holder());

notification

&gt; +    Notification* notif = V8DOMWrapper::convertToNativeObject&lt;Notification&gt;(V8ClassIndex::NOTIFICATION, args.Holder());

notification

&gt; +    NotificationCenter* notifInterface = V8DOMWrapper::convertToNativeObject&lt;NotificationCenter&gt;(V8ClassIndex::NOTIFICATIONCENTER, args.Holder());

notificationCenter

&gt; +    RefPtr&lt;V8CustomVoidCallback&gt; callback;
&gt; +    if (args.Length() &gt; 0) {
&gt; +        if (!args[0]-&gt;IsObject()) {
&gt; +            V8Proxy::throwError(V8Proxy::TypeError, &quot;Callback must be of valid type.&quot;);
&gt; +            return v8::Undefined();

return throwError(&quot;Callback must...&quot;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141336</commentid>
    <comment_count>9</comment_count>
      <attachid>35090</attachid>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2009-08-18 17:39:37 -0700</bug_when>
    <thetext>Created attachment 35090
V8 Bindings for Notifications

Thanks, I&apos;ve addressed those comments in this revised patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141356</commentid>
    <comment_count>10</comment_count>
      <attachid>35090</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-18 19:02:01 -0700</bug_when>
    <thetext>Comment on attachment 35090
V8 Bindings for Notifications

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141374</commentid>
    <comment_count>11</comment_count>
      <attachid>35090</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-18 20:03:48 -0700</bug_when>
    <thetext>Comment on attachment 35090
V8 Bindings for Notifications

Rejecting patch 35090 from commit-queue.  This patch will require manual commit.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;rebase&apos;]&quot;  exit_code: 1  cwd: None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141376</commentid>
    <comment_count>12</comment_count>
      <attachid>35090</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-18 20:04:25 -0700</bug_when>
    <thetext>Comment on attachment 35090
V8 Bindings for Notifications

I blame the rebase bug.  Let&apos;s try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141396</commentid>
    <comment_count>13</comment_count>
      <attachid>35090</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-18 22:50:43 -0700</bug_when>
    <thetext>Comment on attachment 35090
V8 Bindings for Notifications

Clearing flags on attachment: 35090

Committed r47492: &lt;http://trac.webkit.org/changeset/47492&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141397</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-18 22:50:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141571</commentid>
    <comment_count>15</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-19 13:16:59 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 35090 [details])
&gt; Clearing flags on attachment: 35090
&gt; 
&gt; Committed r47492: &lt;http://trac.webkit.org/changeset/47492&gt;

This seems to have caused the following compile error:

WebCore\bindings\v8\WorkerContextExecutionProxy.cpp(41) : fatal error C1083: Cannot open include file: &apos;Notification.h&apos;: No such file or directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141573</commentid>
    <comment_count>16</comment_count>
    <who name="John Gregg">johnnyg</who>
    <bug_when>2009-08-19 13:22:56 -0700</bug_when>
    <thetext>http://codereview.chromium.org/173066 is ready to go to fix the chromium build, if that&apos;s what you mean.  

Or is the webkit build on its own broken?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141576</commentid>
    <comment_count>17</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-19 13:33:28 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; http://codereview.chromium.org/173066 is ready to go to fix the chromium build,
&gt; if that&apos;s what you mean.  

Ah, OK.  Sorry for the harassment :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34764</attachid>
            <date>2009-08-13 12:17:21 -0700</date>
            <delta_ts>2009-08-18 17:39:37 -0700</delta_ts>
            <desc>V8 Bindings for Notifications</desc>
            <filename>v8bindings.diff</filename>
            <type>text/plain</type>
            <size>24864</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDktMDgtMTMgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVjgg
QmluZGluZ3MgZm9yIERlc2t0b3AgTm90aWZpY2F0aW9ucyBmZWF0dXJlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNzEKKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaTogCisgICAgICAgIGFkZGVkIG5vdGlmaWNhdGlvbiBmaWxlcyB0byBidWlsZCAo
YWxsIHN0aWxsIGJlaGluZCBhIGZsYWcgdGhhdCdzIG5vdCBvbikKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgYWRkZWQgc3BlY2lhbCBjYXNl
IGluIERPTVdpbmRvdy9BcHBDYWNoZSBzdHlsZSBmb3IgbmFtZWQgZXZlbnQgaGFuZGxlcnMKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmdldFRl
bXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFy
Z2V0VG9WOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJbmRleC5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhJbmRleC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJv
eHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252
ZXJ0VG9WOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmlu
ZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRl
ckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIG5vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9u
Lmg6CisgICAgICAgIG1hZGUgZXZlbnQgaGFuZGxlciByb3V0aW5lcyBwdWJsaWMgKGFzIHRoZXkg
YXJlIGluIERPTVdpbmRvdywgZWcpIGZvcgorICAgICAgICBiaW5kaW5nIGFjY2Vzcy4KKyAgICAg
ICAgKiBub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNlbnRlci5pZGw6CisgICAgICAgIG5lZWRl
ZCB0byBtYWtlIG1ldGhvZHMgVjhDdXN0b20gdG8gc3VwcG9ydCBkaWZmZXJlbnQgYmVoYXZpb3Jz
IGluIAorICAgICAgICB3b3JrZXIvcGFnZSBjb250ZXh0IGluIGNocm9taXVtLiAKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlclRocmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
OjpnZXROb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkOjpzZXROb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICBuZWVkZWQgdG8gbWFrZSB0
aGVzZSBtZXRob2RzIHB1YmxpYyBhcyB3ZWxsIHNvIGNocm9taXVtIGNhbiBpbmplY3QKKyAgICAg
ICAgdGhlIG5vdGlmaWNhdGlvbiBwcmVzZW50ZXIgaW50byB0aGUgd29ya2VyIHRocmVhZC4KKwog
MjAwOS0wOC0xMyAgR2VvcmdlIFN0YWlrb3MgIDxnZW9yZ2Uuc3RhaWtvc0B0b3JjaG1vYmlsZS5j
b20+CiAKICAgICAgICAgUnViYmVyc3RhbXBlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA0NzIyMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjAsNiArMTYwLDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5p
ZGwnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCcsCiAg
ICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsJywKKyAg
ICAgICAgICAgICdub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5pZGwnLAorICAgICAgICAgICAg
J25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLmlkbCcsCiAgICAgICAgICAgICAncGFn
ZS9BYnN0cmFjdFZpZXcuaWRsJywKICAgICAgICAgICAgICdwYWdlL0JhckluZm8uaWRsJywKICAg
ICAgICAgICAgICdwYWdlL0NvbnNvbGUuaWRsJywKQEAgLTY1OCw2ICs2NjAsNyBAQAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVGaWx0ZXJDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHAnLAorICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dMaXN0
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNh
Y3Rpb25DdXN0b20uY3BwJywKQEAgLTE1NjAsNiArMTU2MywxMiBAQAogICAgICAgICAgICAgJ2xv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9sb2Fk
ZXIuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvbG9hZGVyLmgnLAorICAgICAgICAgICAgJ25v
dGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcCcsCisgICAgICAgICAgICAnbm90aWZpY2F0aW9u
cy9Ob3RpZmljYXRpb24uaCcsCisgICAgICAgICAgICAnbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRp
b25DZW50ZXIuY3BwJywKKyAgICAgICAgICAgICdub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNl
bnRlci5oJywKKyAgICAgICAgICAgICdub3RpZmljYXRpb25zL05vdGlmaWNhdGlvblByZXNlbnRl
ci5oJywKKyAgICAgICAgICAgICdub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRlbnRzLmgn
LAogICAgICAgICAgICAgJ3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwJywKICAgICAg
ICAgICAgICdwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgnLAogICAgICAgICAgICAgJ3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwJywKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNDcyMjEpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkp
CkBAIC05NjYsNiArOTY2LDkgQEAgc3ViIEdlbmVyYXRlQmF0Y2hlZEF0dHJpYnV0ZURhdGEKICAg
ICAgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01BcHBsaWNhdGlvbkNhY2hl
IikgewogICAgICAgICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206OnY4RE9NQXBwbGljYXRp
b25DYWNoZUV2ZW50SGFuZGxlckFjY2Vzc29yR2V0dGVyIjsKICAgICAgICAgICAgICAgICAkc2V0
dGVyID0gIlY4Q3VzdG9tOjp2OERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVudEhhbmRsZXJBY2Nlc3Nv
clNldHRlciI7CisgICAgICAgICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiTm90aWZp
Y2F0aW9uIikgeworICAgICAgICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206OnY4Tm90aWZp
Y2F0aW9uRXZlbnRIYW5kbGVyQWNjZXNzb3JHZXR0ZXIiOworICAgICAgICAgICAgICAgICRzZXR0
ZXIgPSAiVjhDdXN0b206OnY4Tm90aWZpY2F0aW9uRXZlbnRIYW5kbGVyQWNjZXNzb3JTZXR0ZXIi
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4Q3Vz
dG9tOjp2OCR7Y3VzdG9tQWNjZXNzb3J9QWNjZXNzb3JHZXR0ZXIiOwogICAgICAgICAgICAgICAg
IGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiV29ya2VyQ29udGV4dCIgYW5kICRhdHRyTmFtZSBlcSAi
c2VsZiIpIHsKQEAgLTIwNDAsNyArMjA0Myw3IEBAIHN1YiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUK
ICAgICAgICAgcmV0dXJuICJyZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252
ZXJ0V29ya2VyQ29udGV4dFRvVjhPYmplY3QoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCR0
eXBlIGVxICJXb3JrZXJMb2NhdGlvbiIgb3IgJHR5cGUgZXEgIldvcmtlck5hdmlnYXRvciIpIHsK
KyAgICBpZiAoJHR5cGUgZXEgIldvcmtlckxvY2F0aW9uIiBvciAkdHlwZSBlcSAiV29ya2VyTmF2
aWdhdG9yIiBvciAkdHlwZSBlcSAiTm90aWZpY2F0aW9uQ2VudGVyIikgewogICAgICAgICAkaW1w
bEluY2x1ZGVzeyJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCJ9ID0gMTsKICAgICAgICAg
bXkgJGNsYXNzSW5kZXggPSB1YygkdHlwZSk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NT2JqZWN0c0luY2x1ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TU9iamVjdHNJbmNsdWRlLmgJKHJldmlzaW9uIDQ3MjIxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01PYmplY3RzSW5jbHVkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDExIEBA
CiAjaW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCiAjZW5kaWYgLy8gV09SS0VSUwogCisjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uLmgiCisjaW5jbHVk
ZSAiTm90aWZpY2F0aW9uQ2VudGVyLmgiCisjZW5kaWYgLy8gTk9USUZJQ0FUSU9OUworCiAjaWYg
RU5BQkxFKFhQQVRIKQogI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAjZW5kaWYgLy8gWFBB
VEgKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25l
LmNwcAkocmV2aXNpb24gNDcyMjEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3Vy
Y2VzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDggQEAKICNpbmNs
dWRlICJiaW5kaW5ncy9WOE5vZGVJdGVyYXRvci5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhO
b2RlTGlzdC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhOb3RhdGlvbi5jcHAiCisjaW5jbHVk
ZSAiYmluZGluZ3MvVjhOb3RpZmljYXRpb24uY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Tm90
aWZpY2F0aW9uQ2VudGVyLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOE92ZXJmbG93RXZlbnQu
Y3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4UGx1Z2luLmNwcCIKICNpbmNsdWRlICJiaW5kaW5n
cy9WOFBsdWdpbkFycmF5LmNwcCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHAJKHJldmlzaW9uIDQ3MjIxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksNiArMzc5LDE1IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOEQKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCisgICAgY2FzZSBWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTjog
eworICAgICAgICAvLyBSZXNlcnZlIG9uZSBtb3JlIGludGVybmFsIGZpZWxkIGZvciBrZWVwaW5n
IGV2ZW50IGxpc3RlbmVycy4KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4g
aW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICAg
ICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4Q3VzdG9tOjprTm90
aWZpY2F0aW9uSW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2Vu
ZGlmIC8vIE5PVElGSUNBVElPTlMKKwogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUjogewogICAgICAgICAvLyBSZXNlcnZlIG9uZSBtb3Jl
IGludGVybmFsIGZpZWxkIGZvciBrZWVwaW5nIGV2ZW50IGxpc3RlbmVycy4KQEAgLTEyNDksNiAr
MTI1OCwxMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252CiAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldPUktFUiwgd29ya2Vy
KTsKICNlbmRpZiAvLyBXT1JLRVJTCiAKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICBO
b3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IHRhcmdldC0+dG9Ob3RpZmljYXRpb24oKTsKKyAg
ICBpZiAobm90aWZpY2F0aW9uKQorICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpOT1RJRklDQVRJT04sIG5vdGlmaWNhdGlvbik7CisjZW5kaWYKKwogICAgIE5v
ZGUqIG5vZGUgPSB0YXJnZXQtPnRvTm9kZSgpOwogICAgIGlmIChub2RlKQogICAgICAgICByZXR1
cm4gY29udmVydE5vZGVUb1Y4T2JqZWN0KG5vZGUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEluZGV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXgu
Y3BwCShyZXZpc2lvbiA0NzIyMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsMTEgQEAKICNpbmNsdWRlICJWOFdvcmtlck5h
dmlnYXRvci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyNpbmNsdWRl
ICJWOE5vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIlY4Tm90aWZpY2F0aW9uQ2VudGVyLmgiCisj
ZW5kaWYKKwogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKICNpbmNsdWRlICJWOFNoYXJlZFdv
cmtlci5oIgogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkocmV2aXNpb24gNDcyMjEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkod29ya2luZyBjb3B5KQpAQCAtODgs
NiArODgsMTQgQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogI2Rl
ZmluZSBBUFBMSUNBVElPTkNBQ0hFX05PTk5PREVfV1JBUFBFUl9UWVBFUyhWKQogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyNkZWZpbmUgTk9USUZJQ0FUSU9OU19OT05OT0RF
X1dSQVBQRVJfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKE5PVElG
SUNBVElPTiwgTm90aWZpY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBWKE5PVElGSUNBVElPTkNFTlRFUiwgTm90aWZpY2F0aW9uQ2VudGVyKQorI2Vs
c2UKKyNkZWZpbmUgTk9USUZJQ0FUSU9OU19OT05OT0RFX1dSQVBQRVJfVFlQRVMoVikKKyNlbmRp
ZgorCiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQogI2RlZmluZSBTSEFSRURfV09SS0VSX0FD
VElWRV9PQkpFQ1RfV1JBUFBFUl9UWVBFUyhWKSAgICAgICAgICAgICAgICAgICAgXAogICAgIFYo
U0hBUkVEV09SS0VSLCBTaGFyZWRXb3JrZXIpCkBAIC0zOTcsNiArNDA1LDcgQEAgdHlwZWRlZiB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogICAgIEFQUExJQ0FUSU9OQ0FDSEVfTk9O
Tk9ERV9XUkFQUEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIERB
VEFHUklEX05PTk5PREVfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIFZJREVPX05PTk5PREVfVFlQRVMoVikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5PVElGSUNBVElPTlNfTk9OTk9ERV9X
UkFQUEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFNIQVJF
RF9XT1JLRVJfTk9OTk9ERV9XUkFQUEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIFdPUktFUl9OT05OT0RFX1dSQVBQRVJfVFlQRVMoVikKIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDQ3MjIxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vZGVGaWx0ZXI7CiAgICAgY2xhc3Mg
Tm9kZUxpc3Q7CisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgY2xhc3MgTm90aWZpY2F0
aW9uOworICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKKyNlbmRpZgogICAgIGNsYXNzIFBs
dWdpbjsKICAgICBjbGFzcyBQbHVnaW5BcnJheTsKICAgICBjbGFzcyBTVkdFbGVtZW50OwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmNwcAkocmV2aXNpb24gNDcyMjEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDggQEAK
ICNpbmNsdWRlICJET01Db3JlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2Vy
Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uLmgi
CisjaW5jbHVkZSAiTm90aWZpY2F0aW9uQ2VudGVyLmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlJhbmdlRXhjZXB0aW9u
LmgiCkBAIC0yMTksNiArMjIxLDE0IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250
ZXh0RXhlY3UKICAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXT1JLRVJOQVZJR0FUT1I6
CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V29ya2VyTmF2aWdhdG9yKj4oaW1wbCktPnJl
ZigpOwogICAgICAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQor
ICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTkNFTlRFUjoKKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxOb3RpZmljYXRpb25DZW50ZXIqPihpbXBsKS0+cmVmKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
Tk9USUZJQ0FUSU9OOgorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE5vdGlmaWNhdGlvbio+
KGltcGwpLT5yZWYoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICAg
ICAgY2FzZSBWOENsYXNzSW5kZXg6OkRPTUNPUkVFWENFUFRJT046CiAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RE9NQ29yZUV4Y2VwdGlvbio+KGltcGwpLT5yZWYoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmlu
ZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
QmluZGluZy5oCShyZXZpc2lvbiA0NzIyMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQWJzdHJhY3RXb3Jr
ZXJJbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQg
KyAxOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrTm90aWZpY2F0aW9uUmVxdWVzdENhY2hlSW5kZXggPSBrRGVmYXVsdFdyYXBw
ZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtOb3Rp
ZmljYXRpb25JbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxk
Q291bnQgKyAxOworI2VuZGlmCisKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRE9NV2luZG93
Q29uc29sZUluZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBrRE9NV2luZG93SGlzdG9yeUluZGV4ID0ga0RlZmF1bHRX
cmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMTsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBr
RE9NV2luZG93TG9jYXRpb25iYXJJbmRleCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRD
b3VudCArIDI7CkBAIC01MDYsNyArNTExLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhXb3JrZXJDb250ZXh0Q2xlYXJJbnRlcnZhbCk7CiAgICAgICAg
IERFQ0xBUkVfQ0FMTEJBQ0soV29ya2VyQ29udGV4dEFkZEV2ZW50TGlzdGVuZXIpOwogICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKFdvcmtlckNvbnRleHRSZW1vdmVFdmVudExpc3RlbmVyKTsKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCisjaWYgRU5BQkxFKE5PVElGSUNBVElP
TlMpCisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soTm90aWZpY2F0aW9uQ2VudGVyUmVxdWVzdFBl
cm1pc3Npb24pOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKE5vdGlmaWNhdGlvbkNlbnRlckNy
ZWF0ZU5vdGlmaWNhdGlvbik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soTm90aWZpY2F0aW9u
Q2VudGVyQ3JlYXRlSFRNTE5vdGlmaWNhdGlvbik7CisKKyAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhOb3RpZmljYXRpb25BZGRFdmVudExpc3RlbmVyKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhOb3RpZmljYXRpb25SZW1vdmVFdmVudExpc3RlbmVyKTsKKyAgICAgICAgREVDTEFSRV9QUk9Q
RVJUWV9BQ0NFU1NPUihOb3RpZmljYXRpb25FdmVudEhhbmRsZXIpOworI2VuZGlmIC8vIEVOQUJM
RShOT1RJRklDQVRJT05TKQogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
ICAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihET01BcHBsaWNhdGlvbkNhY2hlRXZl
bnRIYW5kbGVyKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0
aW9uQ2VudGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIk5vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvbkNlbnRlci5oIgorI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1
ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxi
YWNrLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChO
b3RpZmljYXRpb25BZGRFdmVudExpc3RlbmVyKQoreworICAgIElOQ19TVEFUUygiRE9NLk5vdGlm
aWNhdGlvbi5hZGRFdmVudExpc3RlbmVyKCkiKTsKKyAgICBOb3RpZmljYXRpb24qIG5vdGlmID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Tm90aWZpY2F0aW9uPihWOENsYXNz
SW5kZXg6Ok5PVElGSUNBVElPTiwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXI7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9
IG5vdGlmLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQtPmlzV29y
a2VyQ29udGV4dCgpKQorICAgICAgICBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRl
eHQqPihjb250ZXh0KS0+c2NyaXB0KCktPnByb3h5KCktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVu
ZXIodjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pLCBmYWxzZSwgZmFsc2UpOwor
ICAgIGVsc2UgeworICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGNv
bnRleHQpOworICAgICAgICBpZiAoIXByb3h5KQorICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKKyAgICAgICAgbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+Zmlu
ZE9yQ3JlYXRlV3JhcHBlcjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCBhcmdzWzFd
LCB0cnVlKTsKKyAgICB9CisKKyAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgU3RyaW5nIHR5
cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9
IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOworICAgICAgICBub3RpZi0+YWRkRXZlbnRMaXN0ZW5l
cih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisgICAgfQorCisgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vdGlmaWNhdGlvblJlbW92ZUV2
ZW50TGlzdGVuZXIpCit7CisgICAgSU5DX1NUQVRTKCJET00uTm90aWZpY2F0aW9uLnJlbW92ZUV2
ZW50TGlzdGVuZXIoKSIpOworICAgIE5vdGlmaWNhdGlvbiogbm90aWYgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9USUZJ
Q0FUSU9OLCBhcmdzLkhvbGRlcigpKTsKKworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lcjsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gbm90aWYtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkp
CisgICAgICAgIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQp
LT5zY3JpcHQoKS0+cHJveHkoKS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8
djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSksIGZhbHNlLCB0cnVlKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShjb250ZXh0KTsKKyAgICAg
ICAgaWYgKCFwcm94eSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAg
ICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5ldmVudExpc3RlbmVy
cygpLT5maW5kV3JhcHBlcihhcmdzWzFdLCBmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGxpc3Rl
bmVyKSB7CisgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwor
ICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKKyAgICAg
ICAgbm90aWYtPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNh
cHR1cmUpOworICAgIH0KKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0FDQ0VT
U09SX1NFVFRFUihOb3RpZmljYXRpb25FdmVudEhhbmRsZXIpCit7CisgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFz
c0luZGV4OjpOT1RJRklDQVRJT04sIGluZm8uVGhpcygpKTsKKyAgICBpZiAoaG9sZGVyLklzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTm90aWZpY2F0aW9uKiBpbXAgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6
Tk9USUZJQ0FUSU9OLCBob2xkZXIpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQgPSBpbXAtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZyhuYW1l
KTsKKyAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOworICAgIFN0cmluZyBldmVudFR5
cGUgPSBrZXkuc3Vic3RyaW5nKDIpOworCisgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgeworICAg
ICAgICAvLyBDbGVhciB0aGUgZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgaW1wLT5jbGVhckF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXI7CisgICAgICAgIGlmIChjb250ZXh0LT5pc1dvcmtl
ckNvbnRleHQoKSkKKyAgICAgICAgICAgIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29u
dGV4dCo+KGNvbnRleHQpLT5zY3JpcHQoKS0+cHJveHkoKS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0
ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpLCBmYWxzZSwgZmFsc2UpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0
cmlldmUoY29udGV4dCk7CisgICAgICAgICAgICBpZiAoIXByb3h5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGxpc3RlbmVyID0gcHJveHktPmV2ZW50TGlzdGVuZXJzKCkt
PmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFs
dWUsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpc3RlbmVyKQorICAgICAgICAg
ICAgaW1wLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIpOwor
ICAgIH0KK30KKworQUNDRVNTT1JfR0VUVEVSKE5vdGlmaWNhdGlvbkV2ZW50SGFuZGxlcikKK3sK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9NV3JhcHBlcjo6bG9va3Vw
RE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOworICAgIGlm
IChob2xkZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgTm90aWZpY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9OLCBob2xkZXIpOworCisg
ICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsKKyAgICBBU1NFUlQoa2V5LnN0
YXJ0c1dpdGgoIm9uIikpOworICAgIFN0cmluZyBldmVudFR5cGUgPSBrZXkuc3Vic3RyaW5nKDIp
OworCisgICAgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBpbXAtPmdldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIoZXZlbnRUeXBlKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZl
bnRMaXN0ZW5lclRvVjhPYmplY3QobGlzdGVuZXIpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0wo
Tm90aWZpY2F0aW9uQ2VudGVyQ3JlYXRlSFRNTE5vdGlmaWNhdGlvbikKK3sKKyAgICBJTkNfU1RB
VFMoTCJET00uTm90aWZpY2F0aW9uQ2VudGVyLkNyZWF0ZUhUTUxOb3RpZmljYXRpb24oKSIpOwor
ICAgIE5vdGlmaWNhdGlvbkNlbnRlciogbm90aWZJbnRlcmZhY2UgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb25DZW50ZXI+KFY4Q2xhc3NJbmRleDo6Tk9U
SUZJQ0FUSU9OQ0VOVEVSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0ID0gbm90aWZJbnRlcmZhY2UtPmNvbnRleHQoKTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBTdHJpbmcgdXJsID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwor
ICAgIFJlZlB0cjxOb3RpZmljYXRpb24+IG5vdGlmID0gTm90aWZpY2F0aW9uOjpjcmVhdGUodXJs
LCBjb250ZXh0LCBlYywgbm90aWZJbnRlcmZhY2UtPnByZXNlbnRlcigpKTsKKworICAgIGlmIChl
YykKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOworCisgICAgaWYgKGNvbnRleHQtPmlz
V29ya2VyQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgbm90aWYu
Z2V0KCkpOworCisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpOT1RJRklDQVRJT04sIG5vdGlmLmdldCgpKTsKK30KKworQ0FMTEJBQ0tfRlVO
Q19ERUNMKE5vdGlmaWNhdGlvbkNlbnRlckNyZWF0ZU5vdGlmaWNhdGlvbikKK3sKKyAgICBJTkNf
U1RBVFMoTCJET00uTm90aWZpY2F0aW9uQ2VudGVyLkNyZWF0ZU5vdGlmaWNhdGlvbigpIik7Cisg
ICAgTm90aWZpY2F0aW9uQ2VudGVyKiBub3RpZkludGVyZmFjZSA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PE5vdGlmaWNhdGlvbkNlbnRlcj4oVjhDbGFzc0luZGV4OjpOT1RJ
RklDQVRJT05DRU5URVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIE5vdGlmaWNhdGlvbkNvbnRlbnRz
IGNvbnRlbnRzKHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSwgdG9XZWJDb3JlU3RyaW5nKGFyZ3Nb
MV0pLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1syXSkpOworCisgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCA9IG5vdGlmSW50ZXJmYWNlLT5jb250ZXh0KCk7CisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90aWYgPSBOb3RpZmljYXRp
b246OmNyZWF0ZShjb250ZW50cywgY29udGV4dCwgZWMsIG5vdGlmSW50ZXJmYWNlLT5wcmVzZW50
ZXIoKSk7CisKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKwor
ICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpO
T1RJRklDQVRJT04sIG5vdGlmLmdldCgpKTsKKworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9OLCBub3RpZi5nZXQoKSk7
Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChOb3RpZmljYXRpb25DZW50ZXJSZXF1ZXN0UGVybWlz
c2lvbikKK3sKKyAgICBJTkNfU1RBVFMoTCJET00uTm90aWZpY2F0aW9uQ2VudGVyLlJlcXVlc3RQ
ZXJtaXNzaW9uKCkiKTsKKyAgICBOb3RpZmljYXRpb25DZW50ZXIqIG5vdGlmSW50ZXJmYWNlID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Tm90aWZpY2F0aW9uQ2VudGVyPihW
OENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTkNFTlRFUiwgYXJncy5Ib2xkZXIoKSk7CisgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IG5vdGlmSW50ZXJmYWNlLT5jb250ZXh0KCk7
CisKKyAgICAvLyBSZXF1ZXN0aW5nIHBlcm1pc3Npb24gaXMgb25seSB2YWxpZCBmcm9tIGEgcGFn
ZSBjb250ZXh0LgorICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoTk9UX1NVUFBPUlRFRF9FUlIpOworCisgICAgUmVmUHRyPFY4Q3Vz
dG9tVm9pZENhbGxiYWNrPiBjYWxsYmFjazsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDApIHsK
KyAgICAgICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgpKSB7CisgICAgICAgICAgICBWOFByb3h5
Ojp0aHJvd0Vycm9yKFY4UHJveHk6OlR5cGVFcnJvciwgIkNhbGxiYWNrIG11c3QgYmUgb2YgdmFs
aWQgdHlwZS4iKTsKKyAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICAgICAgY2FsbGJhY2sgPSBWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFyZ3Nb
MF0sIFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpKTsKKyAgICB9CisK
KyAgICBub3RpZkludGVyZmFjZS0+cmVxdWVzdFBlcm1pc3Npb24oY2FsbGJhY2sucmVsZWFzZSgp
KTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCisKK30gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxFKE5PVElGSUNBVElPTlMpCkluZGV4OiBXZWJDb3Jl
L25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9ub3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCShyZXZpc2lvbiA0NzIyMSkKKysrIFdlYkNvcmUvbm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsMTIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmLCBFdmVudExpc3RlbmVyKiwgYm9vbCk7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRp
b25Db2RlJik7CiAgICAgICAgIHZpcnR1YWwgTm90aWZpY2F0aW9uKiB0b05vdGlmaWNhdGlvbigp
IHsgcmV0dXJuIHRoaXM7IH0KLSAgICAgIAorCisgICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJl
IGZvciBvbkV2ZW50IHN0eWxlIGxpc3RlbmVycy4KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogZ2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKyAgICAg
ICAgdm9pZCBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYsIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOworICAgICAgICB2b2lkIGNsZWFyQXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IE5vdGlmaWNhdGlvbihjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMsIE5vdGlmaWNhdGlvblByZXNlbnRlciogcHJvdmlk
ZXIpOwogICAgICAgICBOb3RpZmljYXRpb24oY29uc3QgTm90aWZpY2F0aW9uQ29udGVudHMmIGZp
ZWxkcywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMs
IE5vdGlmaWNhdGlvblByZXNlbnRlciogcHJvdmlkZXIpOwpAQCAtOTYsOSArMTAxLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IHsgZGVyZWYoKTsgfQogICAKICAgICAgICAgdm9pZCBoYW5kbGVFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogZ2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYsIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwotICAgICAgICB2b2lkIGNsZWFyQXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgICAgICBib29sIG1faXNIVE1M
OwogICAgICAgICBLVVJMIG1fbm90aWZpY2F0aW9uVVJMOwpJbmRleDogV2ViQ29yZS9ub3RpZmlj
YXRpb25zL05vdGlmaWNhdGlvbkNlbnRlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9ub3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvbkNlbnRlci5pZGwJKHJldmlzaW9uIDQ3MjIxKQorKysgV2Vi
Q29yZS9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNlbnRlci5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDggKzMzLDggQEAgbW9kdWxlIHRocmVhZHMgewogICAgIGludGVyZmFjZSBbCiAgICAg
ICAgIENvbmRpdGlvbmFsPU5PVElGSUNBVElPTlMKICAgICBdIE5vdGlmaWNhdGlvbkNlbnRlciB7
Ci0gICAgICAgTm90aWZpY2F0aW9uIGNyZWF0ZUhUTUxOb3RpZmljYXRpb24oaW4gRE9NU3RyaW5n
IHVybCkgcmFpc2VzKEV4Y2VwdGlvbik7Ci0gICAgICAgTm90aWZpY2F0aW9uIGNyZWF0ZU5vdGlm
aWNhdGlvbihpbiBET01TdHJpbmcgaWNvblVybCwgaW4gRE9NU3RyaW5nIHRpdGxlLCBpbiBET01T
dHJpbmcgYm9keSkgcmFpc2VzKEV4Y2VwdGlvbik7CisgICAgICAgW1Y4Q3VzdG9tXSBOb3RpZmlj
YXRpb24gY3JlYXRlSFRNTE5vdGlmaWNhdGlvbihpbiBET01TdHJpbmcgdXJsKSByYWlzZXMoRXhj
ZXB0aW9uKTsKKyAgICAgICBbVjhDdXN0b21dIE5vdGlmaWNhdGlvbiBjcmVhdGVOb3RpZmljYXRp
b24oaW4gRE9NU3RyaW5nIGljb25VcmwsIGluIERPTVN0cmluZyB0aXRsZSwgaW4gRE9NU3RyaW5n
IGJvZHkpIHJhaXNlcyhFeGNlcHRpb24pOwogCiAgICAgICAgaW50IGNoZWNrUGVybWlzc2lvbigp
OwogICAgICAgIFtDdXN0b21dIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oaW4gVm9pZENhbGxiYWNr
IGNhbGxiYWNrKTsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgJKHJldmlzaW9uIDQ3MjIxKQor
KysgV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2
ICs1NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5
JiB3b3JrZXJMb2FkZXJQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyTG9hZGVyUHJveHk7
IH0KICAgICAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5KCkg
Y29uc3QgeyByZXR1cm4gbV93b3JrZXJSZXBvcnRpbmdQcm94eTsgfQogCisjaWYgRU5BQkxFKE5P
VElGSUNBVElPTlMpCisgICAgICAgIE5vdGlmaWNhdGlvblByZXNlbnRlciogZ2V0Tm90aWZpY2F0
aW9uUHJlc2VudGVyKCkgeyByZXR1cm4gbV9ub3RpZmljYXRpb25QcmVzZW50ZXI7IH0KKyAgICAg
ICAgdm9pZCBzZXROb3RpZmljYXRpb25QcmVzZW50ZXIoTm90aWZpY2F0aW9uUHJlc2VudGVyKiBw
cmVzZW50ZXIpIHsgbV9ub3RpZmljYXRpb25QcmVzZW50ZXIgPSBwcmVzZW50ZXI7IH0KKyNlbmRp
ZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxv
YWRlclByb3h5JiwgV29ya2VyUmVwb3J0aW5nUHJveHkmKTsKIApAQCAtNjcsMTEgKzcyLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRl
eHQoKSB7IHJldHVybiBtX3dvcmtlckNvbnRleHQuZ2V0KCk7IH0KIAotI2lmIEVOQUJMRShOT1RJ
RklDQVRJT05TKQotICAgICAgICBOb3RpZmljYXRpb25QcmVzZW50ZXIqIGdldE5vdGlmaWNhdGlv
blByZXNlbnRlcigpIHsgcmV0dXJuIG1fbm90aWZpY2F0aW9uUHJlc2VudGVyOyB9Ci0gICAgICAg
IHZvaWQgc2V0Tm90aWZpY2F0aW9uUHJlc2VudGVyKE5vdGlmaWNhdGlvblByZXNlbnRlciogcHJl
c2VudGVyKSB7IG1fbm90aWZpY2F0aW9uUHJlc2VudGVyID0gcHJlc2VudGVyOyB9Ci0jZW5kaWYK
LQogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIFN0YXRpYyBmdW5jdGlvbiBleGVjdXRlZCBhcyB0
aGUgY29yZSByb3V0aW5lIG9uIHRoZSBuZXcgdGhyZWFkLiBQYXNzZWQgYSBwb2ludGVyIHRvIGEg
V29ya2VyVGhyZWFkIG9iamVjdC4KICAgICAgICAgc3RhdGljIHZvaWQqIHdvcmtlclRocmVhZFN0
YXJ0KHZvaWQqKTsK
</data>
<flag name="review"
          id="18971"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35090</attachid>
            <date>2009-08-18 17:39:37 -0700</date>
            <delta_ts>2009-08-18 22:50:43 -0700</delta_ts>
            <desc>V8 Bindings for Notifications</desc>
            <filename>v8bindings.diff</filename>
            <type>text/plain</type>
            <size>24989</size>
            <attacher name="John Gregg">johnnyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDktMDgtMTMgIEpvaG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVjgg
QmluZGluZ3MgZm9yIERlc2t0b3AgTm90aWZpY2F0aW9ucyBmZWF0dXJlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNzEKKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaTogCisgICAgICAgIGFkZGVkIG5vdGlmaWNhdGlvbiBmaWxlcyB0byBidWlsZCAo
YWxsIHN0aWxsIGJlaGluZCBhIGZsYWcgdGhhdCdzIG5vdCBvbikKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgYWRkZWQgc3BlY2lhbCBjYXNl
IGluIERPTVdpbmRvdy9BcHBDYWNoZSBzdHlsZSBmb3IgbmFtZWQgZXZlbnQgaGFuZGxlcnMKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmdldFRl
bXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFy
Z2V0VG9WOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJbmRleC5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhJbmRleC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJv
eHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252
ZXJ0VG9WOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmlu
ZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRl
ckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIG5vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9u
Lmg6CisgICAgICAgIG1hZGUgZXZlbnQgaGFuZGxlciByb3V0aW5lcyBwdWJsaWMgKGFzIHRoZXkg
YXJlIGluIERPTVdpbmRvdywgZWcpIGZvcgorICAgICAgICBiaW5kaW5nIGFjY2Vzcy4KKyAgICAg
ICAgKiBub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNlbnRlci5pZGw6CisgICAgICAgIG5lZWRl
ZCB0byBtYWtlIG1ldGhvZHMgVjhDdXN0b20gdG8gc3VwcG9ydCBkaWZmZXJlbnQgYmVoYXZpb3Jz
IGluIAorICAgICAgICB3b3JrZXIvcGFnZSBjb250ZXh0IGluIGNocm9taXVtLiAKKyAgICAgICAg
KiB3b3JrZXJzL1dvcmtlclRocmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
OjpnZXROb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkOjpzZXROb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICBuZWVkZWQgdG8gbWFrZSB0
aGVzZSBtZXRob2RzIHB1YmxpYyBhcyB3ZWxsIHNvIGNocm9taXVtIGNhbiBpbmplY3QKKyAgICAg
ICAgdGhlIG5vdGlmaWNhdGlvbiBwcmVzZW50ZXIgaW50byB0aGUgd29ya2VyIHRocmVhZC4KKwog
MjAwOS0wOC0xMyAgR2VvcmdlIFN0YWlrb3MgIDxnZW9yZ2Uuc3RhaWtvc0B0b3JjaG1vYmlsZS5j
b20+CiAKICAgICAgICAgUnViYmVyc3RhbXBlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA0NzIyMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjAsNiArMTYwLDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5p
ZGwnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCcsCiAg
ICAgICAgICAgICAnbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsJywKKyAg
ICAgICAgICAgICdub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5pZGwnLAorICAgICAgICAgICAg
J25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLmlkbCcsCiAgICAgICAgICAgICAncGFn
ZS9BYnN0cmFjdFZpZXcuaWRsJywKICAgICAgICAgICAgICdwYWdlL0JhckluZm8uaWRsJywKICAg
ICAgICAgICAgICdwYWdlL0NvbnNvbGUuaWRsJywKQEAgLTY1OCw2ICs2NjAsNyBAQAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVGaWx0ZXJDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHAnLAorICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dMaXN0
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNh
Y3Rpb25DdXN0b20uY3BwJywKQEAgLTE1NjAsNiArMTU2MywxMiBAQAogICAgICAgICAgICAgJ2xv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9sb2Fk
ZXIuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvbG9hZGVyLmgnLAorICAgICAgICAgICAgJ25v
dGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcCcsCisgICAgICAgICAgICAnbm90aWZpY2F0aW9u
cy9Ob3RpZmljYXRpb24uaCcsCisgICAgICAgICAgICAnbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRp
b25DZW50ZXIuY3BwJywKKyAgICAgICAgICAgICdub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNl
bnRlci5oJywKKyAgICAgICAgICAgICdub3RpZmljYXRpb25zL05vdGlmaWNhdGlvblByZXNlbnRl
ci5oJywKKyAgICAgICAgICAgICdub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRlbnRzLmgn
LAogICAgICAgICAgICAgJ3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwJywKICAgICAg
ICAgICAgICdwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgnLAogICAgICAgICAgICAgJ3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwJywKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNDcyMjEpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkp
CkBAIC05NjYsNiArOTY2LDkgQEAgc3ViIEdlbmVyYXRlQmF0Y2hlZEF0dHJpYnV0ZURhdGEKICAg
ICAgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01BcHBsaWNhdGlvbkNhY2hl
IikgewogICAgICAgICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206OnY4RE9NQXBwbGljYXRp
b25DYWNoZUV2ZW50SGFuZGxlckFjY2Vzc29yR2V0dGVyIjsKICAgICAgICAgICAgICAgICAkc2V0
dGVyID0gIlY4Q3VzdG9tOjp2OERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVudEhhbmRsZXJBY2Nlc3Nv
clNldHRlciI7CisgICAgICAgICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiTm90aWZp
Y2F0aW9uIikgeworICAgICAgICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206OnY4Tm90aWZp
Y2F0aW9uRXZlbnRIYW5kbGVyQWNjZXNzb3JHZXR0ZXIiOworICAgICAgICAgICAgICAgICRzZXR0
ZXIgPSAiVjhDdXN0b206OnY4Tm90aWZpY2F0aW9uRXZlbnRIYW5kbGVyQWNjZXNzb3JTZXR0ZXIi
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4Q3Vz
dG9tOjp2OCR7Y3VzdG9tQWNjZXNzb3J9QWNjZXNzb3JHZXR0ZXIiOwogICAgICAgICAgICAgICAg
IGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiV29ya2VyQ29udGV4dCIgYW5kICRhdHRyTmFtZSBlcSAi
c2VsZiIpIHsKQEAgLTIwNDAsNyArMjA0Myw3IEBAIHN1YiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUK
ICAgICAgICAgcmV0dXJuICJyZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252
ZXJ0V29ya2VyQ29udGV4dFRvVjhPYmplY3QoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCR0
eXBlIGVxICJXb3JrZXJMb2NhdGlvbiIgb3IgJHR5cGUgZXEgIldvcmtlck5hdmlnYXRvciIpIHsK
KyAgICBpZiAoJHR5cGUgZXEgIldvcmtlckxvY2F0aW9uIiBvciAkdHlwZSBlcSAiV29ya2VyTmF2
aWdhdG9yIiBvciAkdHlwZSBlcSAiTm90aWZpY2F0aW9uQ2VudGVyIikgewogICAgICAgICAkaW1w
bEluY2x1ZGVzeyJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCJ9ID0gMTsKICAgICAgICAg
bXkgJGNsYXNzSW5kZXggPSB1YygkdHlwZSk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NT2JqZWN0c0luY2x1ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TU9iamVjdHNJbmNsdWRlLmgJKHJldmlzaW9uIDQ3MjIxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01PYmplY3RzSW5jbHVkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDExIEBA
CiAjaW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCiAjZW5kaWYgLy8gV09SS0VSUwogCisjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uLmgiCisjaW5jbHVk
ZSAiTm90aWZpY2F0aW9uQ2VudGVyLmgiCisjZW5kaWYgLy8gTk9USUZJQ0FUSU9OUworCiAjaWYg
RU5BQkxFKFhQQVRIKQogI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAjZW5kaWYgLy8gWFBB
VEgKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25l
LmNwcAkocmV2aXNpb24gNDcyMjEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3Vy
Y2VzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDggQEAKICNpbmNs
dWRlICJiaW5kaW5ncy9WOE5vZGVJdGVyYXRvci5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhO
b2RlTGlzdC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhOb3RhdGlvbi5jcHAiCisjaW5jbHVk
ZSAiYmluZGluZ3MvVjhOb3RpZmljYXRpb24uY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4Tm90
aWZpY2F0aW9uQ2VudGVyLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOE92ZXJmbG93RXZlbnQu
Y3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4UGx1Z2luLmNwcCIKICNpbmNsdWRlICJiaW5kaW5n
cy9WOFBsdWdpbkFycmF5LmNwcCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHAJKHJldmlzaW9uIDQ3MjIxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksNiArMzc5LDE1IEBAIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBWOEQKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCisgICAgY2FzZSBWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTjog
eworICAgICAgICAvLyBSZXNlcnZlIG9uZSBtb3JlIGludGVybmFsIGZpZWxkIGZvciBrZWVwaW5n
IGV2ZW50IGxpc3RlbmVycy4KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4g
aW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICAg
ICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4Q3VzdG9tOjprTm90
aWZpY2F0aW9uSW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2Vu
ZGlmIC8vIE5PVElGSUNBVElPTlMKKwogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpBQlNUUkFDVFdPUktFUjogewogICAgICAgICAvLyBSZXNlcnZlIG9uZSBtb3Jl
IGludGVybmFsIGZpZWxkIGZvciBrZWVwaW5nIGV2ZW50IGxpc3RlbmVycy4KQEAgLTEyNDksNiAr
MTI1OCwxMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252CiAgICAg
ICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldPUktFUiwgd29ya2Vy
KTsKICNlbmRpZiAvLyBXT1JLRVJTCiAKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICBO
b3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9IHRhcmdldC0+dG9Ob3RpZmljYXRpb24oKTsKKyAg
ICBpZiAobm90aWZpY2F0aW9uKQorICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpOT1RJRklDQVRJT04sIG5vdGlmaWNhdGlvbik7CisjZW5kaWYKKwogICAgIE5v
ZGUqIG5vZGUgPSB0YXJnZXQtPnRvTm9kZSgpOwogICAgIGlmIChub2RlKQogICAgICAgICByZXR1
cm4gY29udmVydE5vZGVUb1Y4T2JqZWN0KG5vZGUpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEluZGV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXgu
Y3BwCShyZXZpc2lvbiA0NzIyMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4NSw2ICszODUsMTEgQEAKICNpbmNsdWRlICJWOFdvcmtlck5h
dmlnYXRvci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyNpbmNsdWRl
ICJWOE5vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIlY4Tm90aWZpY2F0aW9uQ2VudGVyLmgiCisj
ZW5kaWYKKwogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKICNpbmNsdWRlICJWOFNoYXJlZFdv
cmtlci5oIgogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkocmV2aXNpb24gNDcyMjEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkod29ya2luZyBjb3B5KQpAQCAtODgs
NiArODgsMTQgQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogI2Rl
ZmluZSBBUFBMSUNBVElPTkNBQ0hFX05PTk5PREVfV1JBUFBFUl9UWVBFUyhWKQogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyNkZWZpbmUgTk9USUZJQ0FUSU9OU19OT05OT0RF
X1dSQVBQRVJfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBWKE5PVElG
SUNBVElPTiwgTm90aWZpY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBWKE5PVElGSUNBVElPTkNFTlRFUiwgTm90aWZpY2F0aW9uQ2VudGVyKQorI2Vs
c2UKKyNkZWZpbmUgTk9USUZJQ0FUSU9OU19OT05OT0RFX1dSQVBQRVJfVFlQRVMoVikKKyNlbmRp
ZgorCiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQogI2RlZmluZSBTSEFSRURfV09SS0VSX0FD
VElWRV9PQkpFQ1RfV1JBUFBFUl9UWVBFUyhWKSAgICAgICAgICAgICAgICAgICAgXAogICAgIFYo
U0hBUkVEV09SS0VSLCBTaGFyZWRXb3JrZXIpCkBAIC0zOTcsNiArNDA1LDcgQEAgdHlwZWRlZiB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogICAgIEFQUExJQ0FUSU9OQ0FDSEVfTk9O
Tk9ERV9XUkFQUEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIERB
VEFHUklEX05PTk5PREVfVFlQRVMoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIFZJREVPX05PTk5PREVfVFlQRVMoVikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5PVElGSUNBVElPTlNfTk9OTk9ERV9X
UkFQUEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFNIQVJF
RF9XT1JLRVJfTk9OTk9ERV9XUkFQUEVSX1RZUEVTKFYpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIFdPUktFUl9OT05OT0RFX1dSQVBQRVJfVFlQRVMoVikKIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDQ3MjIxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vZGVGaWx0ZXI7CiAgICAgY2xhc3Mg
Tm9kZUxpc3Q7CisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgY2xhc3MgTm90aWZpY2F0
aW9uOworICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKKyNlbmRpZgogICAgIGNsYXNzIFBs
dWdpbjsKICAgICBjbGFzcyBQbHVnaW5BcnJheTsKICAgICBjbGFzcyBTVkdFbGVtZW50OwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmNwcAkocmV2aXNpb24gNDcyMjEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDggQEAK
ICNpbmNsdWRlICJET01Db3JlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2Vy
Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiTm90aWZpY2F0aW9uLmgi
CisjaW5jbHVkZSAiTm90aWZpY2F0aW9uQ2VudGVyLmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIlJhbmdlRXhjZXB0aW9u
LmgiCkBAIC0yMTksNiArMjIxLDE0IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250
ZXh0RXhlY3UKICAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXT1JLRVJOQVZJR0FUT1I6
CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V29ya2VyTmF2aWdhdG9yKj4oaW1wbCktPnJl
ZigpOwogICAgICAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQor
ICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTkNFTlRFUjoKKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxOb3RpZmljYXRpb25DZW50ZXIqPihpbXBsKS0+cmVmKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
Tk9USUZJQ0FUSU9OOgorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE5vdGlmaWNhdGlvbio+
KGltcGwpLT5yZWYoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICAg
ICAgY2FzZSBWOENsYXNzSW5kZXg6OkRPTUNPUkVFWENFUFRJT046CiAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RE9NQ29yZUV4Y2VwdGlvbio+KGltcGwpLT5yZWYoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmlu
ZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
QmluZGluZy5oCShyZXZpc2lvbiA0NzIyMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQWJzdHJhY3RXb3Jr
ZXJJbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQg
KyAxOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrTm90aWZpY2F0aW9uUmVxdWVzdENhY2hlSW5kZXggPSBrRGVmYXVsdFdyYXBw
ZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtOb3Rp
ZmljYXRpb25JbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxk
Q291bnQgKyAxOworI2VuZGlmCisKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRE9NV2luZG93
Q29uc29sZUluZGV4ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBrRE9NV2luZG93SGlzdG9yeUluZGV4ID0ga0RlZmF1bHRX
cmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMTsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBr
RE9NV2luZG93TG9jYXRpb25iYXJJbmRleCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRD
b3VudCArIDI7CkBAIC01MDYsNyArNTExLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhXb3JrZXJDb250ZXh0Q2xlYXJJbnRlcnZhbCk7CiAgICAgICAg
IERFQ0xBUkVfQ0FMTEJBQ0soV29ya2VyQ29udGV4dEFkZEV2ZW50TGlzdGVuZXIpOwogICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKFdvcmtlckNvbnRleHRSZW1vdmVFdmVudExpc3RlbmVyKTsKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCisjaWYgRU5BQkxFKE5PVElGSUNBVElP
TlMpCisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soTm90aWZpY2F0aW9uQ2VudGVyUmVxdWVzdFBl
cm1pc3Npb24pOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKE5vdGlmaWNhdGlvbkNlbnRlckNy
ZWF0ZU5vdGlmaWNhdGlvbik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soTm90aWZpY2F0aW9u
Q2VudGVyQ3JlYXRlSFRNTE5vdGlmaWNhdGlvbik7CisKKyAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhOb3RpZmljYXRpb25BZGRFdmVudExpc3RlbmVyKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhOb3RpZmljYXRpb25SZW1vdmVFdmVudExpc3RlbmVyKTsKKyAgICAgICAgREVDTEFSRV9QUk9Q
RVJUWV9BQ0NFU1NPUihOb3RpZmljYXRpb25FdmVudEhhbmRsZXIpOworI2VuZGlmIC8vIEVOQUJM
RShOT1RJRklDQVRJT05TKQogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
ICAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUihET01BcHBsaWNhdGlvbkNhY2hlRXZl
bnRIYW5kbGVyKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0
aW9uQ2VudGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIk5vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvbkNlbnRlci5oIgorI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1
ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxi
YWNrLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChO
b3RpZmljYXRpb25BZGRFdmVudExpc3RlbmVyKQoreworICAgIElOQ19TVEFUUygiRE9NLk5vdGlm
aWNhdGlvbi5hZGRFdmVudExpc3RlbmVyKCkiKTsKKyAgICBOb3RpZmljYXRpb24qIG5vdGlmaWNh
dGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5vdGlmaWNhdGlvbj4o
VjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04sIGFyZ3MuSG9sZGVyKCkpOworCisgICAgUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQgPSBub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAo
Y29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIGxpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLT5zY3JpcHQoKS0+cHJveHkoKS0+ZmluZE9yQ3Jl
YXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSksIGZh
bHNlLCBmYWxzZSk7CisgICAgZWxzZSB7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94
eTo6cmV0cmlldmUoY29udGV4dCk7CisgICAgICAgIGlmICghcHJveHkpCisgICAgICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAgICBsaXN0ZW5lciA9IHByb3h5LT5ldmVudExp
c3RlbmVycygpLT5maW5kT3JDcmVhdGVXcmFwcGVyPFY4RXZlbnRMaXN0ZW5lcj4ocHJveHktPmZy
YW1lKCksIGFyZ3NbMV0sIHRydWUpOworICAgIH0KKworICAgIGlmIChsaXN0ZW5lcikgeworICAg
ICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICAgICAgYm9v
bCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CisgICAgICAgIG5vdGlmaWNh
dGlvbi0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisgICAg
fQorCisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNM
KE5vdGlmaWNhdGlvblJlbW92ZUV2ZW50TGlzdGVuZXIpCit7CisgICAgSU5DX1NUQVRTKCJET00u
Tm90aWZpY2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOworICAgIE5vdGlmaWNhdGlvbiog
bm90aWZpY2F0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Tm90aWZp
Y2F0aW9uPihWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgYXJncy5Ib2xkZXIoKSk7CisKKyAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXI7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCA9IG5vdGlmaWNhdGlvbi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgbGlzdGVuZXIgPSBz
dGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCktPnNjcmlwdCgpLT5wcm94eSgpLT5m
aW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdz
WzFdKSwgZmFsc2UsIHRydWUpOworICAgIGVsc2UgeworICAgICAgICBWOFByb3h5KiBwcm94eSA9
IFY4UHJveHk6OnJldHJpZXZlKGNvbnRleHQpOworICAgICAgICBpZiAoIXByb3h5KQorICAgICAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gcHJveHktPmV2ZW50TGlzdGVuZXJzKCktPmZpbmRXcmFwcGVyKGFyZ3Nb
MV0sIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgU3RyaW5n
IHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgICAgIGJvb2wgdXNlQ2FwdHVy
ZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOworICAgICAgICBub3RpZmljYXRpb24tPnJlbW92
ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOworICAgIH0K
KworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0FDQ0VTU09SX1NFVFRFUihOb3Rp
ZmljYXRpb25FdmVudEhhbmRsZXIpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xk
ZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpOT1RJRklD
QVRJT04sIGluZm8uVGhpcygpKTsKKyAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRleDo6Tk9USUZJ
Q0FUSU9OLCBob2xkZXIpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBu
b3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZyhu
YW1lKTsKKyAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOworICAgIFN0cmluZyBldmVu
dFR5cGUgPSBrZXkuc3Vic3RyaW5nKDIpOworCisgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewor
ICAgICAgICAvLyBDbGVhciB0aGUgZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgbm90aWZpY2F0aW9u
LT5jbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXI7CisgICAgICAgIGlmIChjb250
ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgICAgIGxpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLT5zY3JpcHQoKS0+cHJveHkoKS0+ZmluZE9yQ3Jl
YXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpLCBmYWxz
ZSwgZmFsc2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFY4UHJveHkqIHByb3h5ID0g
VjhQcm94eTo6cmV0cmlldmUoY29udGV4dCk7CisgICAgICAgICAgICBpZiAoIXByb3h5KQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGxpc3RlbmVyID0gcHJveHktPmV2ZW50
TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+
ZnJhbWUoKSwgdmFsdWUsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpc3RlbmVy
KQorICAgICAgICAgICAgbm90aWZpY2F0aW9uLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50VHlwZSwgbGlzdGVuZXIpOworICAgIH0KK30KKworQUNDRVNTT1JfR0VUVEVSKE5vdGlmaWNh
dGlvbkV2ZW50SGFuZGxlcikKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9
IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywg
aW5mby5UaGlzKCkpOworICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworCisgICAgTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb24+KFY4Q2xhc3NJbmRl
eDo6Tk9USUZJQ0FUSU9OLCBob2xkZXIpOworCisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0
cmluZyhuYW1lKTsKKyAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOworICAgIFN0cmlu
ZyBldmVudFR5cGUgPSBrZXkuc3Vic3RyaW5nKDIpOworCisgICAgRXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBub3RpZmljYXRpb24tPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBl
KTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmpl
Y3QobGlzdGVuZXIpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woTm90aWZpY2F0aW9uQ2VudGVy
Q3JlYXRlSFRNTE5vdGlmaWNhdGlvbikKK3sKKyAgICBJTkNfU1RBVFMoTCJET00uTm90aWZpY2F0
aW9uQ2VudGVyLkNyZWF0ZUhUTUxOb3RpZmljYXRpb24oKSIpOworICAgIE5vdGlmaWNhdGlvbkNl
bnRlciogbm90aWZpY2F0aW9uQ2VudGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8Tm90aWZpY2F0aW9uQ2VudGVyPihWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTkNFTlRF
UiwgYXJncy5Ib2xkZXIoKSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9
IG5vdGlmaWNhdGlvbkNlbnRlci0+Y29udGV4dCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFN0cmluZyB1cmwgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgUmVmUHRy
PE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uOjpjcmVhdGUodXJsLCBj
b250ZXh0LCBlYywgbm90aWZpY2F0aW9uQ2VudGVyLT5wcmVzZW50ZXIoKSk7CisKKyAgICBpZiAo
ZWMpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKworICAgIGlmIChjb250ZXh0LT5p
c1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04sIG5vdGlm
aWNhdGlvbi5nZXQoKSk7CisKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6Ok5PVElGSUNBVElPTiwgbm90aWZpY2F0aW9uLmdldCgpKTsKK30K
KworQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vdGlmaWNhdGlvbkNlbnRlckNyZWF0ZU5vdGlmaWNhdGlv
bikKK3sKKyAgICBJTkNfU1RBVFMoTCJET00uTm90aWZpY2F0aW9uQ2VudGVyLkNyZWF0ZU5vdGlm
aWNhdGlvbigpIik7CisgICAgTm90aWZpY2F0aW9uQ2VudGVyKiBub3RpZmljYXRpb25DZW50ZXIg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb3RpZmljYXRpb25DZW50ZXI+
KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9OQ0VOVEVSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBO
b3RpZmljYXRpb25Db250ZW50cyBjb250ZW50cyh0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIHRv
V2ViQ29yZVN0cmluZyhhcmdzWzFdKSwgdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMl0pKTsKKworICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBub3RpZmljYXRpb25DZW50ZXItPmNv
bnRleHQoKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8Tm90aWZpY2F0
aW9uPiBub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb246OmNyZWF0ZShjb250ZW50cywgY29udGV4
dCwgZWMsIG5vdGlmaWNhdGlvbkNlbnRlci0+cHJlc2VudGVyKCkpOworCisgICAgaWYgKGVjKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CisKKyAgICBpZiAoY29udGV4dC0+aXNXb3Jr
ZXJDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9USUZJQ0FUSU9OLCBub3RpZmljYXRp
b24uZ2V0KCkpOworCisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpOT1RJRklDQVRJT04sIG5vdGlmaWNhdGlvbi5nZXQoKSk7Cit9CisKK0NB
TExCQUNLX0ZVTkNfREVDTChOb3RpZmljYXRpb25DZW50ZXJSZXF1ZXN0UGVybWlzc2lvbikKK3sK
KyAgICBJTkNfU1RBVFMoTCJET00uTm90aWZpY2F0aW9uQ2VudGVyLlJlcXVlc3RQZXJtaXNzaW9u
KCkiKTsKKyAgICBOb3RpZmljYXRpb25DZW50ZXIqIG5vdGlmaWNhdGlvbkNlbnRlciA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5vdGlmaWNhdGlvbkNlbnRlcj4oVjhDbGFz
c0luZGV4OjpOT1RJRklDQVRJT05DRU5URVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBub3RpZmljYXRpb25DZW50ZXItPmNvbnRleHQoKTsK
KworICAgIC8vIFJlcXVlc3RpbmcgcGVybWlzc2lvbiBpcyBvbmx5IHZhbGlkIGZyb20gYSBwYWdl
IGNvbnRleHQuCisgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihOT1RfU1VQUE9SVEVEX0VSUik7CisKKyAgICBSZWZQdHI8VjhDdXN0
b21Wb2lkQ2FsbGJhY2s+IGNhbGxiYWNrOworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCkgewor
ICAgICAgICBpZiAoIWFyZ3NbMF0tPklzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigiQ2FsbGJhY2sgbXVzdCBiZSBvZiB2YWxpZCB0eXBlLiIsIFY4UHJveHk6OlR5cGVF
cnJvcik7CisgCisgICAgICAgIGNhbGxiYWNrID0gVjhDdXN0b21Wb2lkQ2FsbGJhY2s6OmNyZWF0
ZShhcmdzWzBdLCBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKSk7Cisg
ICAgfQorCisgICAgbm90aWZpY2F0aW9uQ2VudGVyLT5yZXF1ZXN0UGVybWlzc2lvbihjYWxsYmFj
ay5yZWxlYXNlKCkpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKKworfSAgLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBFTkFCTEUoTk9USUZJQ0FUSU9OUykKSW5k
ZXg6IFdlYkNvcmUvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgJKHJldmlzaW9uIDQ3MjIxKQorKysg
V2ViQ29yZS9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Niw3ICs4NiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYsIEV2ZW50TGlzdGVuZXIqLCBi
b29sKTsKICAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdmlydHVhbCBOb3RpZmljYXRpb24qIHRvTm90
aWZpY2F0aW9uKCkgeyByZXR1cm4gdGhpczsgfQotICAgICAgCisKKyAgICAgICAgLy8gVGhlc2Ug
bWV0aG9kcyBhcmUgZm9yIG9uRXZlbnQgc3R5bGUgbGlzdGVuZXJzLgorICAgICAgICBFdmVudExp
c3RlbmVyKiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYpIGNv
bnN0OworICAgICAgICB2b2lkIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7CisgICAgICAgIHZvaWQgY2xlYXJB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYpOworCiAgICAgcHJpdmF0
ZToKICAgICAgICAgTm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYywgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyKiBwcm92aWRlcik7CiAgICAgICAgIE5vdGlmaWNhdGlvbihjb25zdCBOb3RpZmljYXRpb25D
b250ZW50cyYgZmllbGRzLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRp
b25Db2RlJiBlYywgTm90aWZpY2F0aW9uUHJlc2VudGVyKiBwcm92aWRlcik7CkBAIC05Niw5ICsx
MDEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2
ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAgIAogICAgICAgICB2b2lkIGhhbmRsZUV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBib29sIHVzZUNhcHR1cmUpOwotICAgICAgICBFdmVudExp
c3RlbmVyKiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYpIGNv
bnN0OwotICAgICAgICB2b2lkIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgICAgIHZvaWQgY2xlYXJB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgICAgIGJv
b2wgbV9pc0hUTUw7CiAgICAgICAgIEtVUkwgbV9ub3RpZmljYXRpb25VUkw7CkluZGV4OiBXZWJD
b3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLmlkbAkocmV2aXNpb24gNDcy
MjEpCisrKyBXZWJDb3JlL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uQ2VudGVyLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgaW50ZXJm
YWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9Tk9USUZJQ0FUSU9OUwogICAgIF0gTm90aWZpY2F0
aW9uQ2VudGVyIHsKLSAgICAgICBOb3RpZmljYXRpb24gY3JlYXRlSFRNTE5vdGlmaWNhdGlvbihp
biBET01TdHJpbmcgdXJsKSByYWlzZXMoRXhjZXB0aW9uKTsKLSAgICAgICBOb3RpZmljYXRpb24g
Y3JlYXRlTm90aWZpY2F0aW9uKGluIERPTVN0cmluZyBpY29uVXJsLCBpbiBET01TdHJpbmcgdGl0
bGUsIGluIERPTVN0cmluZyBib2R5KSByYWlzZXMoRXhjZXB0aW9uKTsKKyAgICAgICBbVjhDdXN0
b21dIE5vdGlmaWNhdGlvbiBjcmVhdGVIVE1MTm90aWZpY2F0aW9uKGluIERPTVN0cmluZyB1cmwp
IHJhaXNlcyhFeGNlcHRpb24pOworICAgICAgIFtWOEN1c3RvbV0gTm90aWZpY2F0aW9uIGNyZWF0
ZU5vdGlmaWNhdGlvbihpbiBET01TdHJpbmcgaWNvblVybCwgaW4gRE9NU3RyaW5nIHRpdGxlLCBp
biBET01TdHJpbmcgYm9keSkgcmFpc2VzKEV4Y2VwdGlvbik7CiAKICAgICAgICBpbnQgY2hlY2tQ
ZXJtaXNzaW9uKCk7CiAgICAgICAgW0N1c3RvbV0gdm9pZCByZXF1ZXN0UGVybWlzc2lvbihpbiBW
b2lkQ2FsbGJhY2sgY2FsbGJhY2spOwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVh
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaAkocmV2aXNp
b24gNDcyMjEpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDYgKzU2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgV29ya2Vy
TG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJM
b2FkZXJQcm94eTsgfQogICAgICAgICBXb3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0
aW5nUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OyB9CiAKKyNp
ZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKKyAgICAgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyKiBn
ZXROb3RpZmljYXRpb25QcmVzZW50ZXIoKSB7IHJldHVybiBtX25vdGlmaWNhdGlvblByZXNlbnRl
cjsgfQorICAgICAgICB2b2lkIHNldE5vdGlmaWNhdGlvblByZXNlbnRlcihOb3RpZmljYXRpb25Q
cmVzZW50ZXIqIHByZXNlbnRlcikgeyBtX25vdGlmaWNhdGlvblByZXNlbnRlciA9IHByZXNlbnRl
cjsgfQorI2VuZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdvcmtlclRocmVhZChjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29k
ZSwgV29ya2VyTG9hZGVyUHJveHkmLCBXb3JrZXJSZXBvcnRpbmdQcm94eSYpOwogCkBAIC02Nywx
MSArNzIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCgpIHsgcmV0dXJuIG1fd29ya2VyQ29udGV4dC5nZXQoKTsgfQogCi0jaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgICAgIE5vdGlmaWNhdGlvblByZXNlbnRlciogZ2V0
Tm90aWZpY2F0aW9uUHJlc2VudGVyKCkgeyByZXR1cm4gbV9ub3RpZmljYXRpb25QcmVzZW50ZXI7
IH0KLSAgICAgICAgdm9pZCBzZXROb3RpZmljYXRpb25QcmVzZW50ZXIoTm90aWZpY2F0aW9uUHJl
c2VudGVyKiBwcmVzZW50ZXIpIHsgbV9ub3RpZmljYXRpb25QcmVzZW50ZXIgPSBwcmVzZW50ZXI7
IH0KLSNlbmRpZgotCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gU3RhdGljIGZ1bmN0aW9uIGV4
ZWN1dGVkIGFzIHRoZSBjb3JlIHJvdXRpbmUgb24gdGhlIG5ldyB0aHJlYWQuIFBhc3NlZCBhIHBv
aW50ZXIgdG8gYSBXb3JrZXJUaHJlYWQgb2JqZWN0LgogICAgICAgICBzdGF0aWMgdm9pZCogd29y
a2VyVGhyZWFkU3RhcnQodm9pZCopOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>